This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
/iaa doesn't work when the result is trie'd
[perl5.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 #ifndef HAS_C99
36 # if __STDC_VERSION__ >= 199901L && !defined(VMS)
37 #  define HAS_C99 1
38 # endif
39 #endif
40 #if HAS_C99
41 # include <stdint.h>
42 #endif
43
44 #define FCALL *f
45
46 #ifdef __Lynx__
47 /* Missing proto on LynxOS */
48   char *gconvert(double, int, int,  char *);
49 #endif
50
51 #ifdef PERL_UTF8_CACHE_ASSERT
52 /* if adding more checks watch out for the following tests:
53  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54  *   lib/utf8.t lib/Unicode/Collate/t/index.t
55  * --jhi
56  */
57 #   define ASSERT_UTF8_CACHE(cache) \
58     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59                               assert((cache)[2] <= (cache)[3]); \
60                               assert((cache)[3] <= (cache)[1]);} \
61                               } STMT_END
62 #else
63 #   define ASSERT_UTF8_CACHE(cache) NOOP
64 #endif
65
66 #ifdef PERL_OLD_COPY_ON_WRITE
67 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
68 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
69 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
70    on-write.  */
71 #endif
72
73 /* ============================================================================
74
75 =head1 Allocation and deallocation of SVs.
76
77 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
78 sv, av, hv...) contains type and reference count information, and for
79 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
80 contains fields specific to each type.  Some types store all they need
81 in the head, so don't have a body.
82
83 In all but the most memory-paranoid configurations (ex: PURIFY), heads
84 and bodies are allocated out of arenas, which by default are
85 approximately 4K chunks of memory parcelled up into N heads or bodies.
86 Sv-bodies are allocated by their sv-type, guaranteeing size
87 consistency needed to allocate safely from arrays.
88
89 For SV-heads, the first slot in each arena is reserved, and holds a
90 link to the next arena, some flags, and a note of the number of slots.
91 Snaked through each arena chain is a linked list of free items; when
92 this becomes empty, an extra arena is allocated and divided up into N
93 items which are threaded into the free list.
94
95 SV-bodies are similar, but they use arena-sets by default, which
96 separate the link and info from the arena itself, and reclaim the 1st
97 slot in the arena.  SV-bodies are further described later.
98
99 The following global variables are associated with arenas:
100
101     PL_sv_arenaroot     pointer to list of SV arenas
102     PL_sv_root          pointer to list of free SV structures
103
104     PL_body_arenas      head of linked-list of body arenas
105     PL_body_roots[]     array of pointers to list of free bodies of svtype
106                         arrays are indexed by the svtype needed
107
108 A few special SV heads are not allocated from an arena, but are
109 instead directly created in the interpreter structure, eg PL_sv_undef.
110 The size of arenas can be changed from the default by setting
111 PERL_ARENA_SIZE appropriately at compile time.
112
113 The SV arena serves the secondary purpose of allowing still-live SVs
114 to be located and destroyed during final cleanup.
115
116 At the lowest level, the macros new_SV() and del_SV() grab and free
117 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
118 to return the SV to the free list with error checking.) new_SV() calls
119 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
120 SVs in the free list have their SvTYPE field set to all ones.
121
122 At the time of very final cleanup, sv_free_arenas() is called from
123 perl_destruct() to physically free all the arenas allocated since the
124 start of the interpreter.
125
126 The function visit() scans the SV arenas list, and calls a specified
127 function for each SV it finds which is still live - ie which has an SvTYPE
128 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
129 following functions (specified as [function that calls visit()] / [function
130 called by visit() for each SV]):
131
132     sv_report_used() / do_report_used()
133                         dump all remaining SVs (debugging aid)
134
135     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
136                       do_clean_named_io_objs()
137                         Attempt to free all objects pointed to by RVs,
138                         and try to do the same for all objects indirectly
139                         referenced by typeglobs too.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
186 #  define DEBUG_SV_SERIAL(sv)                                               \
187     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
188             PTR2UV(sv), (long)(sv)->sv_debug_serial))
189 #else
190 #  define FREE_SV_DEBUG_FILE(sv)
191 #  define DEBUG_SV_SERIAL(sv)   NOOP
192 #endif
193
194 #ifdef PERL_POISON
195 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
196 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
197 /* Whilst I'd love to do this, it seems that things like to check on
198    unreferenced scalars
199 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
200 */
201 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
202                                 PoisonNew(&SvREFCNT(sv), 1, U32)
203 #else
204 #  define SvARENA_CHAIN(sv)     SvANY(sv)
205 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
206 #  define POSION_SV_HEAD(sv)
207 #endif
208
209 /* Mark an SV head as unused, and add to free list.
210  *
211  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
212  * its refcount artificially decremented during global destruction, so
213  * there may be dangling pointers to it. The last thing we want in that
214  * case is for it to be reused. */
215
216 #define plant_SV(p) \
217     STMT_START {                                        \
218         const U32 old_flags = SvFLAGS(p);                       \
219         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
220         DEBUG_SV_SERIAL(p);                             \
221         FREE_SV_DEBUG_FILE(p);                          \
222         POSION_SV_HEAD(p);                              \
223         SvFLAGS(p) = SVTYPEMASK;                        \
224         if (!(old_flags & SVf_BREAK)) {         \
225             SvARENA_CHAIN_SET(p, PL_sv_root);   \
226             PL_sv_root = (p);                           \
227         }                                               \
228         --PL_sv_count;                                  \
229     } STMT_END
230
231 #define uproot_SV(p) \
232     STMT_START {                                        \
233         (p) = PL_sv_root;                               \
234         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
235         ++PL_sv_count;                                  \
236     } STMT_END
237
238
239 /* make some more SVs by adding another arena */
240
241 STATIC SV*
242 S_more_sv(pTHX)
243 {
244     dVAR;
245     SV* sv;
246     char *chunk;                /* must use New here to match call to */
247     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
248     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
249     uproot_SV(sv);
250     return sv;
251 }
252
253 /* new_SV(): return a new, empty SV head */
254
255 #ifdef DEBUG_LEAKING_SCALARS
256 /* provide a real function for a debugger to play with */
257 STATIC SV*
258 S_new_SV(pTHX_ const char *file, int line, const char *func)
259 {
260     SV* sv;
261
262     if (PL_sv_root)
263         uproot_SV(sv);
264     else
265         sv = S_more_sv(aTHX);
266     SvANY(sv) = 0;
267     SvREFCNT(sv) = 1;
268     SvFLAGS(sv) = 0;
269     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
270     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
271                 ? PL_parser->copline
272                 :  PL_curcop
273                     ? CopLINE(PL_curcop)
274                     : 0
275             );
276     sv->sv_debug_inpad = 0;
277     sv->sv_debug_parent = NULL;
278     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
279
280     sv->sv_debug_serial = PL_sv_serial++;
281
282     MEM_LOG_NEW_SV(sv, file, line, func);
283     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
284             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
285
286     return sv;
287 }
288 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
289
290 #else
291 #  define new_SV(p) \
292     STMT_START {                                        \
293         if (PL_sv_root)                                 \
294             uproot_SV(p);                               \
295         else                                            \
296             (p) = S_more_sv(aTHX);                      \
297         SvANY(p) = 0;                                   \
298         SvREFCNT(p) = 1;                                \
299         SvFLAGS(p) = 0;                                 \
300         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
301     } STMT_END
302 #endif
303
304
305 /* del_SV(): return an empty SV head to the free list */
306
307 #ifdef DEBUGGING
308
309 #define del_SV(p) \
310     STMT_START {                                        \
311         if (DEBUG_D_TEST)                               \
312             del_sv(p);                                  \
313         else                                            \
314             plant_SV(p);                                \
315     } STMT_END
316
317 STATIC void
318 S_del_sv(pTHX_ SV *p)
319 {
320     dVAR;
321
322     PERL_ARGS_ASSERT_DEL_SV;
323
324     if (DEBUG_D_TEST) {
325         SV* sva;
326         bool ok = 0;
327         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
328             const SV * const sv = sva + 1;
329             const SV * const svend = &sva[SvREFCNT(sva)];
330             if (p >= sv && p < svend) {
331                 ok = 1;
332                 break;
333             }
334         }
335         if (!ok) {
336             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
337                              "Attempt to free non-arena SV: 0x%"UVxf
338                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
339             return;
340         }
341     }
342     plant_SV(p);
343 }
344
345 #else /* ! DEBUGGING */
346
347 #define del_SV(p)   plant_SV(p)
348
349 #endif /* DEBUGGING */
350
351
352 /*
353 =head1 SV Manipulation Functions
354
355 =for apidoc sv_add_arena
356
357 Given a chunk of memory, link it to the head of the list of arenas,
358 and split it into a list of free SVs.
359
360 =cut
361 */
362
363 static void
364 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
365 {
366     dVAR;
367     SV *const sva = MUTABLE_SV(ptr);
368     register SV* sv;
369     register SV* svend;
370
371     PERL_ARGS_ASSERT_SV_ADD_ARENA;
372
373     /* The first SV in an arena isn't an SV. */
374     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
375     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
376     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
377
378     PL_sv_arenaroot = sva;
379     PL_sv_root = sva + 1;
380
381     svend = &sva[SvREFCNT(sva) - 1];
382     sv = sva + 1;
383     while (sv < svend) {
384         SvARENA_CHAIN_SET(sv, (sv + 1));
385 #ifdef DEBUGGING
386         SvREFCNT(sv) = 0;
387 #endif
388         /* Must always set typemask because it's always checked in on cleanup
389            when the arenas are walked looking for objects.  */
390         SvFLAGS(sv) = SVTYPEMASK;
391         sv++;
392     }
393     SvARENA_CHAIN_SET(sv, 0);
394 #ifdef DEBUGGING
395     SvREFCNT(sv) = 0;
396 #endif
397     SvFLAGS(sv) = SVTYPEMASK;
398 }
399
400 /* visit(): call the named function for each non-free SV in the arenas
401  * whose flags field matches the flags/mask args. */
402
403 STATIC I32
404 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
405 {
406     dVAR;
407     SV* sva;
408     I32 visited = 0;
409
410     PERL_ARGS_ASSERT_VISIT;
411
412     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
413         register const SV * const svend = &sva[SvREFCNT(sva)];
414         register SV* sv;
415         for (sv = sva + 1; sv < svend; ++sv) {
416             if (SvTYPE(sv) != SVTYPEMASK
417                     && (sv->sv_flags & mask) == flags
418                     && SvREFCNT(sv))
419             {
420                 (FCALL)(aTHX_ sv);
421                 ++visited;
422             }
423         }
424     }
425     return visited;
426 }
427
428 #ifdef DEBUGGING
429
430 /* called by sv_report_used() for each live SV */
431
432 static void
433 do_report_used(pTHX_ SV *const sv)
434 {
435     if (SvTYPE(sv) != SVTYPEMASK) {
436         PerlIO_printf(Perl_debug_log, "****\n");
437         sv_dump(sv);
438     }
439 }
440 #endif
441
442 /*
443 =for apidoc sv_report_used
444
445 Dump the contents of all SVs not yet freed. (Debugging aid).
446
447 =cut
448 */
449
450 void
451 Perl_sv_report_used(pTHX)
452 {
453 #ifdef DEBUGGING
454     visit(do_report_used, 0, 0);
455 #else
456     PERL_UNUSED_CONTEXT;
457 #endif
458 }
459
460 /* called by sv_clean_objs() for each live SV */
461
462 static void
463 do_clean_objs(pTHX_ SV *const ref)
464 {
465     dVAR;
466     assert (SvROK(ref));
467     {
468         SV * const target = SvRV(ref);
469         if (SvOBJECT(target)) {
470             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
471             if (SvWEAKREF(ref)) {
472                 sv_del_backref(target, ref);
473                 SvWEAKREF_off(ref);
474                 SvRV_set(ref, NULL);
475             } else {
476                 SvROK_off(ref);
477                 SvRV_set(ref, NULL);
478                 SvREFCNT_dec(target);
479             }
480         }
481     }
482
483     /* XXX Might want to check arrays, etc. */
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV_set(sv, NULL);
526         SvREFCNT_dec(obj);
527     }
528     SvREFCNT_dec(sv); /* undo the inc above */
529 }
530
531 /* clear any IO slots in a GV which hold objects (except stderr, defout);
532  * called by sv_clean_objs() for each live GV */
533
534 static void
535 do_clean_named_io_objs(pTHX_ SV *const sv)
536 {
537     dVAR;
538     SV *obj;
539     assert(SvTYPE(sv) == SVt_PVGV);
540     assert(isGV_with_GP(sv));
541     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
542         return;
543
544     SvREFCNT_inc(sv);
545     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546         DEBUG_D((PerlIO_printf(Perl_debug_log,
547                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548         GvIOp(sv) = NULL;
549         SvREFCNT_dec(obj);
550     }
551     SvREFCNT_dec(sv); /* undo the inc above */
552 }
553
554 /* Void wrapper to pass to visit() */
555 static void
556 do_curse(pTHX_ SV * const sv) {
557     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
559         return;
560     (void)curse(sv, 0);
561 }
562
563 /*
564 =for apidoc sv_clean_objs
565
566 Attempt to destroy all objects not yet freed
567
568 =cut
569 */
570
571 void
572 Perl_sv_clean_objs(pTHX)
573 {
574     dVAR;
575     GV *olddef, *olderr;
576     PL_in_clean_objs = TRUE;
577     visit(do_clean_objs, SVf_ROK, SVf_ROK);
578     /* Some barnacles may yet remain, clinging to typeglobs.
579      * Run the non-IO destructors first: they may want to output
580      * error messages, close files etc */
581     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
582     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
583     /* And if there are some very tenacious barnacles clinging to arrays,
584        closures, or what have you.... */
585     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
586     olddef = PL_defoutgv;
587     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588     if (olddef && isGV_with_GP(olddef))
589         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590     olderr = PL_stderrgv;
591     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592     if (olderr && isGV_with_GP(olderr))
593         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594     SvREFCNT_dec(olddef);
595     PL_in_clean_objs = FALSE;
596 }
597
598 /* called by sv_clean_all() for each live SV */
599
600 static void
601 do_clean_all(pTHX_ SV *const sv)
602 {
603     dVAR;
604     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
605         /* don't clean pid table and strtab */
606         return;
607     }
608     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609     SvFLAGS(sv) |= SVf_BREAK;
610     SvREFCNT_dec(sv);
611 }
612
613 /*
614 =for apidoc sv_clean_all
615
616 Decrement the refcnt of each remaining SV, possibly triggering a
617 cleanup. This function may have to be called multiple times to free
618 SVs which are in complex self-referential hierarchies.
619
620 =cut
621 */
622
623 I32
624 Perl_sv_clean_all(pTHX)
625 {
626     dVAR;
627     I32 cleaned;
628     PL_in_clean_all = TRUE;
629     cleaned = visit(do_clean_all, 0,0);
630     return cleaned;
631 }
632
633 /*
634   ARENASETS: a meta-arena implementation which separates arena-info
635   into struct arena_set, which contains an array of struct
636   arena_descs, each holding info for a single arena.  By separating
637   the meta-info from the arena, we recover the 1st slot, formerly
638   borrowed for list management.  The arena_set is about the size of an
639   arena, avoiding the needless malloc overhead of a naive linked-list.
640
641   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642   memory in the last arena-set (1/2 on average).  In trade, we get
643   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
644   smaller types).  The recovery of the wasted space allows use of
645   small arenas for large, rare body types, by changing array* fields
646   in body_details_by_type[] below.
647 */
648 struct arena_desc {
649     char       *arena;          /* the raw storage, allocated aligned */
650     size_t      size;           /* its size ~4k typ */
651     svtype      utype;          /* bodytype stored in arena */
652 };
653
654 struct arena_set;
655
656 /* Get the maximum number of elements in set[] such that struct arena_set
657    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
658    therefore likely to be 1 aligned memory page.  */
659
660 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
662
663 struct arena_set {
664     struct arena_set* next;
665     unsigned int   set_size;    /* ie ARENAS_PER_SET */
666     unsigned int   curr;        /* index of next available arena-desc */
667     struct arena_desc set[ARENAS_PER_SET];
668 };
669
670 /*
671 =for apidoc sv_free_arenas
672
673 Deallocate the memory used by all arenas. Note that all the individual SV
674 heads and bodies within the arenas must already have been freed.
675
676 =cut
677 */
678 void
679 Perl_sv_free_arenas(pTHX)
680 {
681     dVAR;
682     SV* sva;
683     SV* svanext;
684     unsigned int i;
685
686     /* Free arenas here, but be careful about fake ones.  (We assume
687        contiguity of the fake ones with the corresponding real ones.) */
688
689     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
690         svanext = MUTABLE_SV(SvANY(sva));
691         while (svanext && SvFAKE(svanext))
692             svanext = MUTABLE_SV(SvANY(svanext));
693
694         if (!SvFAKE(sva))
695             Safefree(sva);
696     }
697
698     {
699         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701         while (aroot) {
702             struct arena_set *current = aroot;
703             i = aroot->curr;
704             while (i--) {
705                 assert(aroot->set[i].arena);
706                 Safefree(aroot->set[i].arena);
707             }
708             aroot = aroot->next;
709             Safefree(current);
710         }
711     }
712     PL_body_arenas = 0;
713
714     i = PERL_ARENA_ROOTS_SIZE;
715     while (i--)
716         PL_body_roots[i] = 0;
717
718     PL_sv_arenaroot = 0;
719     PL_sv_root = 0;
720 }
721
722 /*
723   Here are mid-level routines that manage the allocation of bodies out
724   of the various arenas.  There are 5 kinds of arenas:
725
726   1. SV-head arenas, which are discussed and handled above
727   2. regular body arenas
728   3. arenas for reduced-size bodies
729   4. Hash-Entry arenas
730
731   Arena types 2 & 3 are chained by body-type off an array of
732   arena-root pointers, which is indexed by svtype.  Some of the
733   larger/less used body types are malloced singly, since a large
734   unused block of them is wasteful.  Also, several svtypes dont have
735   bodies; the data fits into the sv-head itself.  The arena-root
736   pointer thus has a few unused root-pointers (which may be hijacked
737   later for arena types 4,5)
738
739   3 differs from 2 as an optimization; some body types have several
740   unused fields in the front of the structure (which are kept in-place
741   for consistency).  These bodies can be allocated in smaller chunks,
742   because the leading fields arent accessed.  Pointers to such bodies
743   are decremented to point at the unused 'ghost' memory, knowing that
744   the pointers are used with offsets to the real memory.
745
746
747 =head1 SV-Body Allocation
748
749 Allocation of SV-bodies is similar to SV-heads, differing as follows;
750 the allocation mechanism is used for many body types, so is somewhat
751 more complicated, it uses arena-sets, and has no need for still-live
752 SV detection.
753
754 At the outermost level, (new|del)_X*V macros return bodies of the
755 appropriate type.  These macros call either (new|del)_body_type or
756 (new|del)_body_allocated macro pairs, depending on specifics of the
757 type.  Most body types use the former pair, the latter pair is used to
758 allocate body types with "ghost fields".
759
760 "ghost fields" are fields that are unused in certain types, and
761 consequently don't need to actually exist.  They are declared because
762 they're part of a "base type", which allows use of functions as
763 methods.  The simplest examples are AVs and HVs, 2 aggregate types
764 which don't use the fields which support SCALAR semantics.
765
766 For these types, the arenas are carved up into appropriately sized
767 chunks, we thus avoid wasted memory for those unaccessed members.
768 When bodies are allocated, we adjust the pointer back in memory by the
769 size of the part not allocated, so it's as if we allocated the full
770 structure.  (But things will all go boom if you write to the part that
771 is "not there", because you'll be overwriting the last members of the
772 preceding structure in memory.)
773
774 We calculate the correction using the STRUCT_OFFSET macro on the first
775 member present. If the allocated structure is smaller (no initial NV
776 actually allocated) then the net effect is to subtract the size of the NV
777 from the pointer, to return a new pointer as if an initial NV were actually
778 allocated. (We were using structures named *_allocated for this, but
779 this turned out to be a subtle bug, because a structure without an NV
780 could have a lower alignment constraint, but the compiler is allowed to
781 optimised accesses based on the alignment constraint of the actual pointer
782 to the full structure, for example, using a single 64 bit load instruction
783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
784
785 This is the same trick as was used for NV and IV bodies. Ironically it
786 doesn't need to be used for NV bodies any more, because NV is now at
787 the start of the structure. IV bodies don't need it either, because
788 they are no longer allocated.
789
790 In turn, the new_body_* allocators call S_new_body(), which invokes
791 new_body_inline macro, which takes a lock, and takes a body off the
792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
793 necessary to refresh an empty list.  Then the lock is released, and
794 the body is returned.
795
796 Perl_more_bodies allocates a new arena, and carves it up into an array of N
797 bodies, which it strings into a linked list.  It looks up arena-size
798 and body-size from the body_details table described below, thus
799 supporting the multiple body-types.
800
801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802 the (new|del)_X*V macros are mapped directly to malloc/free.
803
804 For each sv-type, struct body_details bodies_by_type[] carries
805 parameters which control these aspects of SV handling:
806
807 Arena_size determines whether arenas are used for this body type, and if
808 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
809 zero, forcing individual mallocs and frees.
810
811 Body_size determines how big a body is, and therefore how many fit into
812 each arena.  Offset carries the body-pointer adjustment needed for
813 "ghost fields", and is used in *_allocated macros.
814
815 But its main purpose is to parameterize info needed in
816 Perl_sv_upgrade().  The info here dramatically simplifies the function
817 vs the implementation in 5.8.8, making it table-driven.  All fields
818 are used for this, except for arena_size.
819
820 For the sv-types that have no bodies, arenas are not used, so those
821 PL_body_roots[sv_type] are unused, and can be overloaded.  In
822 something of a special case, SVt_NULL is borrowed for HE arenas;
823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
824 bodies_by_type[SVt_NULL] slot is not used, as the table is not
825 available in hv.c.
826
827 */
828
829 struct body_details {
830     U8 body_size;       /* Size to allocate  */
831     U8 copy;            /* Size of structure to copy (may be shorter)  */
832     U8 offset;
833     unsigned int type : 4;          /* We have space for a sanity check.  */
834     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
835     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
836     unsigned int arena : 1;         /* Allocated from an arena */
837     size_t arena_size;              /* Size of arena to allocate */
838 };
839
840 #define HADNV FALSE
841 #define NONV TRUE
842
843
844 #ifdef PURIFY
845 /* With -DPURFIY we allocate everything directly, and don't use arenas.
846    This seems a rather elegant way to simplify some of the code below.  */
847 #define HASARENA FALSE
848 #else
849 #define HASARENA TRUE
850 #endif
851 #define NOARENA FALSE
852
853 /* Size the arenas to exactly fit a given number of bodies.  A count
854    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855    simplifying the default.  If count > 0, the arena is sized to fit
856    only that many bodies, allowing arenas to be used for large, rare
857    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
858    limited by PERL_ARENA_SIZE, so we can safely oversize the
859    declarations.
860  */
861 #define FIT_ARENA0(body_size)                           \
862     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863 #define FIT_ARENAn(count,body_size)                     \
864     ( count * body_size <= PERL_ARENA_SIZE)             \
865     ? count * body_size                                 \
866     : FIT_ARENA0 (body_size)
867 #define FIT_ARENA(count,body_size)                      \
868     count                                               \
869     ? FIT_ARENAn (count, body_size)                     \
870     : FIT_ARENA0 (body_size)
871
872 /* Calculate the length to copy. Specifically work out the length less any
873    final padding the compiler needed to add.  See the comment in sv_upgrade
874    for why copying the padding proved to be a bug.  */
875
876 #define copy_length(type, last_member) \
877         STRUCT_OFFSET(type, last_member) \
878         + sizeof (((type*)SvANY((const SV *)0))->last_member)
879
880 static const struct body_details bodies_by_type[] = {
881     /* HEs use this offset for their arena.  */
882     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
883
884     /* The bind placeholder pretends to be an RV for now.
885        Also it's marked as "can't upgrade" to stop anyone using it before it's
886        implemented.  */
887     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
888
889     /* IVs are in the head, so the allocation size is 0.  */
890     { 0,
891       sizeof(IV), /* This is used to copy out the IV body.  */
892       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
893       NOARENA /* IVS don't need an arena  */, 0
894     },
895
896     /* 8 bytes on most ILP32 with IEEE doubles */
897     { sizeof(NV), sizeof(NV),
898       STRUCT_OFFSET(XPVNV, xnv_u),
899       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
900
901     /* 8 bytes on most ILP32 with IEEE doubles */
902     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
903       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
904       + STRUCT_OFFSET(XPV, xpv_cur),
905       SVt_PV, FALSE, NONV, HASARENA,
906       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
907
908     /* 12 */
909     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
910       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
911       + STRUCT_OFFSET(XPV, xpv_cur),
912       SVt_PVIV, FALSE, NONV, HASARENA,
913       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
914
915     /* 20 */
916     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
917       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
918       + STRUCT_OFFSET(XPV, xpv_cur),
919       SVt_PVNV, FALSE, HADNV, HASARENA,
920       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
921
922     /* 28 */
923     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
924       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
925
926     /* something big */
927     { sizeof(regexp),
928       sizeof(regexp),
929       0,
930       SVt_REGEXP, FALSE, NONV, HASARENA,
931       FIT_ARENA(0, sizeof(regexp))
932     },
933
934     /* 48 */
935     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
936       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
937     
938     /* 64 */
939     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
940       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
941
942     { sizeof(XPVAV),
943       copy_length(XPVAV, xav_alloc),
944       0,
945       SVt_PVAV, TRUE, NONV, HASARENA,
946       FIT_ARENA(0, sizeof(XPVAV)) },
947
948     { sizeof(XPVHV),
949       copy_length(XPVHV, xhv_max),
950       0,
951       SVt_PVHV, TRUE, NONV, HASARENA,
952       FIT_ARENA(0, sizeof(XPVHV)) },
953
954     /* 56 */
955     { sizeof(XPVCV),
956       sizeof(XPVCV),
957       0,
958       SVt_PVCV, TRUE, NONV, HASARENA,
959       FIT_ARENA(0, sizeof(XPVCV)) },
960
961     { sizeof(XPVFM),
962       sizeof(XPVFM),
963       0,
964       SVt_PVFM, TRUE, NONV, NOARENA,
965       FIT_ARENA(20, sizeof(XPVFM)) },
966
967     /* XPVIO is 84 bytes, fits 48x */
968     { sizeof(XPVIO),
969       sizeof(XPVIO),
970       0,
971       SVt_PVIO, TRUE, NONV, HASARENA,
972       FIT_ARENA(24, sizeof(XPVIO)) },
973 };
974
975 #define new_body_allocated(sv_type)             \
976     (void *)((char *)S_new_body(aTHX_ sv_type)  \
977              - bodies_by_type[sv_type].offset)
978
979 /* return a thing to the free list */
980
981 #define del_body(thing, root)                           \
982     STMT_START {                                        \
983         void ** const thing_copy = (void **)thing;      \
984         *thing_copy = *root;                            \
985         *root = (void*)thing_copy;                      \
986     } STMT_END
987
988 #ifdef PURIFY
989
990 #define new_XNV()       safemalloc(sizeof(XPVNV))
991 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
992 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
993
994 #define del_XPVGV(p)    safefree(p)
995
996 #else /* !PURIFY */
997
998 #define new_XNV()       new_body_allocated(SVt_NV)
999 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1000 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1001
1002 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1003                                  &PL_body_roots[SVt_PVGV])
1004
1005 #endif /* PURIFY */
1006
1007 /* no arena for you! */
1008
1009 #define new_NOARENA(details) \
1010         safemalloc((details)->body_size + (details)->offset)
1011 #define new_NOARENAZ(details) \
1012         safecalloc((details)->body_size + (details)->offset, 1)
1013
1014 void *
1015 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1016                   const size_t arena_size)
1017 {
1018     dVAR;
1019     void ** const root = &PL_body_roots[sv_type];
1020     struct arena_desc *adesc;
1021     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1022     unsigned int curr;
1023     char *start;
1024     const char *end;
1025     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1026 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1027     static bool done_sanity_check;
1028
1029     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1030      * variables like done_sanity_check. */
1031     if (!done_sanity_check) {
1032         unsigned int i = SVt_LAST;
1033
1034         done_sanity_check = TRUE;
1035
1036         while (i--)
1037             assert (bodies_by_type[i].type == i);
1038     }
1039 #endif
1040
1041     assert(arena_size);
1042
1043     /* may need new arena-set to hold new arena */
1044     if (!aroot || aroot->curr >= aroot->set_size) {
1045         struct arena_set *newroot;
1046         Newxz(newroot, 1, struct arena_set);
1047         newroot->set_size = ARENAS_PER_SET;
1048         newroot->next = aroot;
1049         aroot = newroot;
1050         PL_body_arenas = (void *) newroot;
1051         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1052     }
1053
1054     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1055     curr = aroot->curr++;
1056     adesc = &(aroot->set[curr]);
1057     assert(!adesc->arena);
1058     
1059     Newx(adesc->arena, good_arena_size, char);
1060     adesc->size = good_arena_size;
1061     adesc->utype = sv_type;
1062     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1063                           curr, (void*)adesc->arena, (UV)good_arena_size));
1064
1065     start = (char *) adesc->arena;
1066
1067     /* Get the address of the byte after the end of the last body we can fit.
1068        Remember, this is integer division:  */
1069     end = start + good_arena_size / body_size * body_size;
1070
1071     /* computed count doesn't reflect the 1st slot reservation */
1072 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1073     DEBUG_m(PerlIO_printf(Perl_debug_log,
1074                           "arena %p end %p arena-size %d (from %d) type %d "
1075                           "size %d ct %d\n",
1076                           (void*)start, (void*)end, (int)good_arena_size,
1077                           (int)arena_size, sv_type, (int)body_size,
1078                           (int)good_arena_size / (int)body_size));
1079 #else
1080     DEBUG_m(PerlIO_printf(Perl_debug_log,
1081                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1082                           (void*)start, (void*)end,
1083                           (int)arena_size, sv_type, (int)body_size,
1084                           (int)good_arena_size / (int)body_size));
1085 #endif
1086     *root = (void *)start;
1087
1088     while (1) {
1089         /* Where the next body would start:  */
1090         char * const next = start + body_size;
1091
1092         if (next >= end) {
1093             /* This is the last body:  */
1094             assert(next == end);
1095
1096             *(void **)start = 0;
1097             return *root;
1098         }
1099
1100         *(void**) start = (void *)next;
1101         start = next;
1102     }
1103 }
1104
1105 /* grab a new thing from the free list, allocating more if necessary.
1106    The inline version is used for speed in hot routines, and the
1107    function using it serves the rest (unless PURIFY).
1108 */
1109 #define new_body_inline(xpv, sv_type) \
1110     STMT_START { \
1111         void ** const r3wt = &PL_body_roots[sv_type]; \
1112         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1113           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1114                                              bodies_by_type[sv_type].body_size,\
1115                                              bodies_by_type[sv_type].arena_size)); \
1116         *(r3wt) = *(void**)(xpv); \
1117     } STMT_END
1118
1119 #ifndef PURIFY
1120
1121 STATIC void *
1122 S_new_body(pTHX_ const svtype sv_type)
1123 {
1124     dVAR;
1125     void *xpv;
1126     new_body_inline(xpv, sv_type);
1127     return xpv;
1128 }
1129
1130 #endif
1131
1132 static const struct body_details fake_rv =
1133     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1134
1135 /*
1136 =for apidoc sv_upgrade
1137
1138 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1139 SV, then copies across as much information as possible from the old body.
1140 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1141
1142 =cut
1143 */
1144
1145 void
1146 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1147 {
1148     dVAR;
1149     void*       old_body;
1150     void*       new_body;
1151     const svtype old_type = SvTYPE(sv);
1152     const struct body_details *new_type_details;
1153     const struct body_details *old_type_details
1154         = bodies_by_type + old_type;
1155     SV *referant = NULL;
1156
1157     PERL_ARGS_ASSERT_SV_UPGRADE;
1158
1159     if (old_type == new_type)
1160         return;
1161
1162     /* This clause was purposefully added ahead of the early return above to
1163        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1164        inference by Nick I-S that it would fix other troublesome cases. See
1165        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1166
1167        Given that shared hash key scalars are no longer PVIV, but PV, there is
1168        no longer need to unshare so as to free up the IVX slot for its proper
1169        purpose. So it's safe to move the early return earlier.  */
1170
1171     if (new_type != SVt_PV && SvIsCOW(sv)) {
1172         sv_force_normal_flags(sv, 0);
1173     }
1174
1175     old_body = SvANY(sv);
1176
1177     /* Copying structures onto other structures that have been neatly zeroed
1178        has a subtle gotcha. Consider XPVMG
1179
1180        +------+------+------+------+------+-------+-------+
1181        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1182        +------+------+------+------+------+-------+-------+
1183        0      4      8     12     16     20      24      28
1184
1185        where NVs are aligned to 8 bytes, so that sizeof that structure is
1186        actually 32 bytes long, with 4 bytes of padding at the end:
1187
1188        +------+------+------+------+------+-------+-------+------+
1189        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1190        +------+------+------+------+------+-------+-------+------+
1191        0      4      8     12     16     20      24      28     32
1192
1193        so what happens if you allocate memory for this structure:
1194
1195        +------+------+------+------+------+-------+-------+------+------+...
1196        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1197        +------+------+------+------+------+-------+-------+------+------+...
1198        0      4      8     12     16     20      24      28     32     36
1199
1200        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1201        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1202        started out as zero once, but it's quite possible that it isn't. So now,
1203        rather than a nicely zeroed GP, you have it pointing somewhere random.
1204        Bugs ensue.
1205
1206        (In fact, GP ends up pointing at a previous GP structure, because the
1207        principle cause of the padding in XPVMG getting garbage is a copy of
1208        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1209        this happens to be moot because XPVGV has been re-ordered, with GP
1210        no longer after STASH)
1211
1212        So we are careful and work out the size of used parts of all the
1213        structures.  */
1214
1215     switch (old_type) {
1216     case SVt_NULL:
1217         break;
1218     case SVt_IV:
1219         if (SvROK(sv)) {
1220             referant = SvRV(sv);
1221             old_type_details = &fake_rv;
1222             if (new_type == SVt_NV)
1223                 new_type = SVt_PVNV;
1224         } else {
1225             if (new_type < SVt_PVIV) {
1226                 new_type = (new_type == SVt_NV)
1227                     ? SVt_PVNV : SVt_PVIV;
1228             }
1229         }
1230         break;
1231     case SVt_NV:
1232         if (new_type < SVt_PVNV) {
1233             new_type = SVt_PVNV;
1234         }
1235         break;
1236     case SVt_PV:
1237         assert(new_type > SVt_PV);
1238         assert(SVt_IV < SVt_PV);
1239         assert(SVt_NV < SVt_PV);
1240         break;
1241     case SVt_PVIV:
1242         break;
1243     case SVt_PVNV:
1244         break;
1245     case SVt_PVMG:
1246         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1247            there's no way that it can be safely upgraded, because perl.c
1248            expects to Safefree(SvANY(PL_mess_sv))  */
1249         assert(sv != PL_mess_sv);
1250         /* This flag bit is used to mean other things in other scalar types.
1251            Given that it only has meaning inside the pad, it shouldn't be set
1252            on anything that can get upgraded.  */
1253         assert(!SvPAD_TYPED(sv));
1254         break;
1255     default:
1256         if (old_type_details->cant_upgrade)
1257             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1258                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1259     }
1260
1261     if (old_type > new_type)
1262         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1263                 (int)old_type, (int)new_type);
1264
1265     new_type_details = bodies_by_type + new_type;
1266
1267     SvFLAGS(sv) &= ~SVTYPEMASK;
1268     SvFLAGS(sv) |= new_type;
1269
1270     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1271        the return statements above will have triggered.  */
1272     assert (new_type != SVt_NULL);
1273     switch (new_type) {
1274     case SVt_IV:
1275         assert(old_type == SVt_NULL);
1276         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1277         SvIV_set(sv, 0);
1278         return;
1279     case SVt_NV:
1280         assert(old_type == SVt_NULL);
1281         SvANY(sv) = new_XNV();
1282         SvNV_set(sv, 0);
1283         return;
1284     case SVt_PVHV:
1285     case SVt_PVAV:
1286         assert(new_type_details->body_size);
1287
1288 #ifndef PURIFY  
1289         assert(new_type_details->arena);
1290         assert(new_type_details->arena_size);
1291         /* This points to the start of the allocated area.  */
1292         new_body_inline(new_body, new_type);
1293         Zero(new_body, new_type_details->body_size, char);
1294         new_body = ((char *)new_body) - new_type_details->offset;
1295 #else
1296         /* We always allocated the full length item with PURIFY. To do this
1297            we fake things so that arena is false for all 16 types..  */
1298         new_body = new_NOARENAZ(new_type_details);
1299 #endif
1300         SvANY(sv) = new_body;
1301         if (new_type == SVt_PVAV) {
1302             AvMAX(sv)   = -1;
1303             AvFILLp(sv) = -1;
1304             AvREAL_only(sv);
1305             if (old_type_details->body_size) {
1306                 AvALLOC(sv) = 0;
1307             } else {
1308                 /* It will have been zeroed when the new body was allocated.
1309                    Lets not write to it, in case it confuses a write-back
1310                    cache.  */
1311             }
1312         } else {
1313             assert(!SvOK(sv));
1314             SvOK_off(sv);
1315 #ifndef NODEFAULT_SHAREKEYS
1316             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1317 #endif
1318             HvMAX(sv) = 7; /* (start with 8 buckets) */
1319         }
1320
1321         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1322            The target created by newSVrv also is, and it can have magic.
1323            However, it never has SvPVX set.
1324         */
1325         if (old_type == SVt_IV) {
1326             assert(!SvROK(sv));
1327         } else if (old_type >= SVt_PV) {
1328             assert(SvPVX_const(sv) == 0);
1329         }
1330
1331         if (old_type >= SVt_PVMG) {
1332             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1333             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1334         } else {
1335             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1336         }
1337         break;
1338
1339
1340     case SVt_REGEXP:
1341         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1342            sv_force_normal_flags(sv) is called.  */
1343         SvFAKE_on(sv);
1344     case SVt_PVIV:
1345         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1346            no route from NV to PVIV, NOK can never be true  */
1347         assert(!SvNOKp(sv));
1348         assert(!SvNOK(sv));
1349     case SVt_PVIO:
1350     case SVt_PVFM:
1351     case SVt_PVGV:
1352     case SVt_PVCV:
1353     case SVt_PVLV:
1354     case SVt_PVMG:
1355     case SVt_PVNV:
1356     case SVt_PV:
1357
1358         assert(new_type_details->body_size);
1359         /* We always allocated the full length item with PURIFY. To do this
1360            we fake things so that arena is false for all 16 types..  */
1361         if(new_type_details->arena) {
1362             /* This points to the start of the allocated area.  */
1363             new_body_inline(new_body, new_type);
1364             Zero(new_body, new_type_details->body_size, char);
1365             new_body = ((char *)new_body) - new_type_details->offset;
1366         } else {
1367             new_body = new_NOARENAZ(new_type_details);
1368         }
1369         SvANY(sv) = new_body;
1370
1371         if (old_type_details->copy) {
1372             /* There is now the potential for an upgrade from something without
1373                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1374             int offset = old_type_details->offset;
1375             int length = old_type_details->copy;
1376
1377             if (new_type_details->offset > old_type_details->offset) {
1378                 const int difference
1379                     = new_type_details->offset - old_type_details->offset;
1380                 offset += difference;
1381                 length -= difference;
1382             }
1383             assert (length >= 0);
1384                 
1385             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1386                  char);
1387         }
1388
1389 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1390         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1391          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1392          * NV slot, but the new one does, then we need to initialise the
1393          * freshly created NV slot with whatever the correct bit pattern is
1394          * for 0.0  */
1395         if (old_type_details->zero_nv && !new_type_details->zero_nv
1396             && !isGV_with_GP(sv))
1397             SvNV_set(sv, 0);
1398 #endif
1399
1400         if (new_type == SVt_PVIO) {
1401             IO * const io = MUTABLE_IO(sv);
1402             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1403
1404             SvOBJECT_on(io);
1405             /* Clear the stashcache because a new IO could overrule a package
1406                name */
1407             hv_clear(PL_stashcache);
1408
1409             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1410             IoPAGE_LEN(sv) = 60;
1411         }
1412         if (old_type < SVt_PV) {
1413             /* referant will be NULL unless the old type was SVt_IV emulating
1414                SVt_RV */
1415             sv->sv_u.svu_rv = referant;
1416         }
1417         break;
1418     default:
1419         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1420                    (unsigned long)new_type);
1421     }
1422
1423     if (old_type > SVt_IV) {
1424 #ifdef PURIFY
1425         safefree(old_body);
1426 #else
1427         /* Note that there is an assumption that all bodies of types that
1428            can be upgraded came from arenas. Only the more complex non-
1429            upgradable types are allowed to be directly malloc()ed.  */
1430         assert(old_type_details->arena);
1431         del_body((void*)((char*)old_body + old_type_details->offset),
1432                  &PL_body_roots[old_type]);
1433 #endif
1434     }
1435 }
1436
1437 /*
1438 =for apidoc sv_backoff
1439
1440 Remove any string offset. You should normally use the C<SvOOK_off> macro
1441 wrapper instead.
1442
1443 =cut
1444 */
1445
1446 int
1447 Perl_sv_backoff(pTHX_ register SV *const sv)
1448 {
1449     STRLEN delta;
1450     const char * const s = SvPVX_const(sv);
1451
1452     PERL_ARGS_ASSERT_SV_BACKOFF;
1453     PERL_UNUSED_CONTEXT;
1454
1455     assert(SvOOK(sv));
1456     assert(SvTYPE(sv) != SVt_PVHV);
1457     assert(SvTYPE(sv) != SVt_PVAV);
1458
1459     SvOOK_offset(sv, delta);
1460     
1461     SvLEN_set(sv, SvLEN(sv) + delta);
1462     SvPV_set(sv, SvPVX(sv) - delta);
1463     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1464     SvFLAGS(sv) &= ~SVf_OOK;
1465     return 0;
1466 }
1467
1468 /*
1469 =for apidoc sv_grow
1470
1471 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1472 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1473 Use the C<SvGROW> wrapper instead.
1474
1475 =cut
1476 */
1477
1478 char *
1479 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1480 {
1481     register char *s;
1482
1483     PERL_ARGS_ASSERT_SV_GROW;
1484
1485     if (PL_madskills && newlen >= 0x100000) {
1486         PerlIO_printf(Perl_debug_log,
1487                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1488     }
1489 #ifdef HAS_64K_LIMIT
1490     if (newlen >= 0x10000) {
1491         PerlIO_printf(Perl_debug_log,
1492                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1493         my_exit(1);
1494     }
1495 #endif /* HAS_64K_LIMIT */
1496     if (SvROK(sv))
1497         sv_unref(sv);
1498     if (SvTYPE(sv) < SVt_PV) {
1499         sv_upgrade(sv, SVt_PV);
1500         s = SvPVX_mutable(sv);
1501     }
1502     else if (SvOOK(sv)) {       /* pv is offset? */
1503         sv_backoff(sv);
1504         s = SvPVX_mutable(sv);
1505         if (newlen > SvLEN(sv))
1506             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1507 #ifdef HAS_64K_LIMIT
1508         if (newlen >= 0x10000)
1509             newlen = 0xFFFF;
1510 #endif
1511     }
1512     else
1513         s = SvPVX_mutable(sv);
1514
1515     if (newlen > SvLEN(sv)) {           /* need more room? */
1516         STRLEN minlen = SvCUR(sv);
1517         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1518         if (newlen < minlen)
1519             newlen = minlen;
1520 #ifndef Perl_safesysmalloc_size
1521         newlen = PERL_STRLEN_ROUNDUP(newlen);
1522 #endif
1523         if (SvLEN(sv) && s) {
1524             s = (char*)saferealloc(s, newlen);
1525         }
1526         else {
1527             s = (char*)safemalloc(newlen);
1528             if (SvPVX_const(sv) && SvCUR(sv)) {
1529                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1530             }
1531         }
1532         SvPV_set(sv, s);
1533 #ifdef Perl_safesysmalloc_size
1534         /* Do this here, do it once, do it right, and then we will never get
1535            called back into sv_grow() unless there really is some growing
1536            needed.  */
1537         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1538 #else
1539         SvLEN_set(sv, newlen);
1540 #endif
1541     }
1542     return s;
1543 }
1544
1545 /*
1546 =for apidoc sv_setiv
1547
1548 Copies an integer into the given SV, upgrading first if necessary.
1549 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1550
1551 =cut
1552 */
1553
1554 void
1555 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1556 {
1557     dVAR;
1558
1559     PERL_ARGS_ASSERT_SV_SETIV;
1560
1561     SV_CHECK_THINKFIRST_COW_DROP(sv);
1562     switch (SvTYPE(sv)) {
1563     case SVt_NULL:
1564     case SVt_NV:
1565         sv_upgrade(sv, SVt_IV);
1566         break;
1567     case SVt_PV:
1568         sv_upgrade(sv, SVt_PVIV);
1569         break;
1570
1571     case SVt_PVGV:
1572         if (!isGV_with_GP(sv))
1573             break;
1574     case SVt_PVAV:
1575     case SVt_PVHV:
1576     case SVt_PVCV:
1577     case SVt_PVFM:
1578     case SVt_PVIO:
1579         /* diag_listed_as: Can't coerce %s to %s in %s */
1580         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1581                    OP_DESC(PL_op));
1582     default: NOOP;
1583     }
1584     (void)SvIOK_only(sv);                       /* validate number */
1585     SvIV_set(sv, i);
1586     SvTAINT(sv);
1587 }
1588
1589 /*
1590 =for apidoc sv_setiv_mg
1591
1592 Like C<sv_setiv>, but also handles 'set' magic.
1593
1594 =cut
1595 */
1596
1597 void
1598 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1599 {
1600     PERL_ARGS_ASSERT_SV_SETIV_MG;
1601
1602     sv_setiv(sv,i);
1603     SvSETMAGIC(sv);
1604 }
1605
1606 /*
1607 =for apidoc sv_setuv
1608
1609 Copies an unsigned integer into the given SV, upgrading first if necessary.
1610 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1611
1612 =cut
1613 */
1614
1615 void
1616 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1617 {
1618     PERL_ARGS_ASSERT_SV_SETUV;
1619
1620     /* With these two if statements:
1621        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1622
1623        without
1624        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1625
1626        If you wish to remove them, please benchmark to see what the effect is
1627     */
1628     if (u <= (UV)IV_MAX) {
1629        sv_setiv(sv, (IV)u);
1630        return;
1631     }
1632     sv_setiv(sv, 0);
1633     SvIsUV_on(sv);
1634     SvUV_set(sv, u);
1635 }
1636
1637 /*
1638 =for apidoc sv_setuv_mg
1639
1640 Like C<sv_setuv>, but also handles 'set' magic.
1641
1642 =cut
1643 */
1644
1645 void
1646 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1647 {
1648     PERL_ARGS_ASSERT_SV_SETUV_MG;
1649
1650     sv_setuv(sv,u);
1651     SvSETMAGIC(sv);
1652 }
1653
1654 /*
1655 =for apidoc sv_setnv
1656
1657 Copies a double into the given SV, upgrading first if necessary.
1658 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1659
1660 =cut
1661 */
1662
1663 void
1664 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1665 {
1666     dVAR;
1667
1668     PERL_ARGS_ASSERT_SV_SETNV;
1669
1670     SV_CHECK_THINKFIRST_COW_DROP(sv);
1671     switch (SvTYPE(sv)) {
1672     case SVt_NULL:
1673     case SVt_IV:
1674         sv_upgrade(sv, SVt_NV);
1675         break;
1676     case SVt_PV:
1677     case SVt_PVIV:
1678         sv_upgrade(sv, SVt_PVNV);
1679         break;
1680
1681     case SVt_PVGV:
1682         if (!isGV_with_GP(sv))
1683             break;
1684     case SVt_PVAV:
1685     case SVt_PVHV:
1686     case SVt_PVCV:
1687     case SVt_PVFM:
1688     case SVt_PVIO:
1689         /* diag_listed_as: Can't coerce %s to %s in %s */
1690         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1691                    OP_DESC(PL_op));
1692     default: NOOP;
1693     }
1694     SvNV_set(sv, num);
1695     (void)SvNOK_only(sv);                       /* validate number */
1696     SvTAINT(sv);
1697 }
1698
1699 /*
1700 =for apidoc sv_setnv_mg
1701
1702 Like C<sv_setnv>, but also handles 'set' magic.
1703
1704 =cut
1705 */
1706
1707 void
1708 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1709 {
1710     PERL_ARGS_ASSERT_SV_SETNV_MG;
1711
1712     sv_setnv(sv,num);
1713     SvSETMAGIC(sv);
1714 }
1715
1716 /* Print an "isn't numeric" warning, using a cleaned-up,
1717  * printable version of the offending string
1718  */
1719
1720 STATIC void
1721 S_not_a_number(pTHX_ SV *const sv)
1722 {
1723      dVAR;
1724      SV *dsv;
1725      char tmpbuf[64];
1726      const char *pv;
1727
1728      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1729
1730      if (DO_UTF8(sv)) {
1731           dsv = newSVpvs_flags("", SVs_TEMP);
1732           pv = sv_uni_display(dsv, sv, 10, 0);
1733      } else {
1734           char *d = tmpbuf;
1735           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1736           /* each *s can expand to 4 chars + "...\0",
1737              i.e. need room for 8 chars */
1738         
1739           const char *s = SvPVX_const(sv);
1740           const char * const end = s + SvCUR(sv);
1741           for ( ; s < end && d < limit; s++ ) {
1742                int ch = *s & 0xFF;
1743                if (ch & 128 && !isPRINT_LC(ch)) {
1744                     *d++ = 'M';
1745                     *d++ = '-';
1746                     ch &= 127;
1747                }
1748                if (ch == '\n') {
1749                     *d++ = '\\';
1750                     *d++ = 'n';
1751                }
1752                else if (ch == '\r') {
1753                     *d++ = '\\';
1754                     *d++ = 'r';
1755                }
1756                else if (ch == '\f') {
1757                     *d++ = '\\';
1758                     *d++ = 'f';
1759                }
1760                else if (ch == '\\') {
1761                     *d++ = '\\';
1762                     *d++ = '\\';
1763                }
1764                else if (ch == '\0') {
1765                     *d++ = '\\';
1766                     *d++ = '0';
1767                }
1768                else if (isPRINT_LC(ch))
1769                     *d++ = ch;
1770                else {
1771                     *d++ = '^';
1772                     *d++ = toCTRL(ch);
1773                }
1774           }
1775           if (s < end) {
1776                *d++ = '.';
1777                *d++ = '.';
1778                *d++ = '.';
1779           }
1780           *d = '\0';
1781           pv = tmpbuf;
1782     }
1783
1784     if (PL_op)
1785         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1786                     "Argument \"%s\" isn't numeric in %s", pv,
1787                     OP_DESC(PL_op));
1788     else
1789         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1790                     "Argument \"%s\" isn't numeric", pv);
1791 }
1792
1793 /*
1794 =for apidoc looks_like_number
1795
1796 Test if the content of an SV looks like a number (or is a number).
1797 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1798 non-numeric warning), even if your atof() doesn't grok them.
1799
1800 =cut
1801 */
1802
1803 I32
1804 Perl_looks_like_number(pTHX_ SV *const sv)
1805 {
1806     register const char *sbegin;
1807     STRLEN len;
1808
1809     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1810
1811     if (SvPOK(sv)) {
1812         sbegin = SvPVX_const(sv);
1813         len = SvCUR(sv);
1814     }
1815     else if (SvPOKp(sv))
1816         sbegin = SvPV_const(sv, len);
1817     else
1818         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1819     return grok_number(sbegin, len, NULL);
1820 }
1821
1822 STATIC bool
1823 S_glob_2number(pTHX_ GV * const gv)
1824 {
1825     const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1826     SV *const buffer = sv_newmortal();
1827
1828     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1829
1830     /* FAKE globs can get coerced, so need to turn this off temporarily if it
1831        is on.  */
1832     SvFAKE_off(gv);
1833     gv_efullname3(buffer, gv, "*");
1834     SvFLAGS(gv) |= wasfake;
1835
1836     /* We know that all GVs stringify to something that is not-a-number,
1837         so no need to test that.  */
1838     if (ckWARN(WARN_NUMERIC))
1839         not_a_number(buffer);
1840     /* We just want something true to return, so that S_sv_2iuv_common
1841         can tail call us and return true.  */
1842     return TRUE;
1843 }
1844
1845 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1846    until proven guilty, assume that things are not that bad... */
1847
1848 /*
1849    NV_PRESERVES_UV:
1850
1851    As 64 bit platforms often have an NV that doesn't preserve all bits of
1852    an IV (an assumption perl has been based on to date) it becomes necessary
1853    to remove the assumption that the NV always carries enough precision to
1854    recreate the IV whenever needed, and that the NV is the canonical form.
1855    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1856    precision as a side effect of conversion (which would lead to insanity
1857    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1858    1) to distinguish between IV/UV/NV slots that have cached a valid
1859       conversion where precision was lost and IV/UV/NV slots that have a
1860       valid conversion which has lost no precision
1861    2) to ensure that if a numeric conversion to one form is requested that
1862       would lose precision, the precise conversion (or differently
1863       imprecise conversion) is also performed and cached, to prevent
1864       requests for different numeric formats on the same SV causing
1865       lossy conversion chains. (lossless conversion chains are perfectly
1866       acceptable (still))
1867
1868
1869    flags are used:
1870    SvIOKp is true if the IV slot contains a valid value
1871    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1872    SvNOKp is true if the NV slot contains a valid value
1873    SvNOK  is true only if the NV value is accurate
1874
1875    so
1876    while converting from PV to NV, check to see if converting that NV to an
1877    IV(or UV) would lose accuracy over a direct conversion from PV to
1878    IV(or UV). If it would, cache both conversions, return NV, but mark
1879    SV as IOK NOKp (ie not NOK).
1880
1881    While converting from PV to IV, check to see if converting that IV to an
1882    NV would lose accuracy over a direct conversion from PV to NV. If it
1883    would, cache both conversions, flag similarly.
1884
1885    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1886    correctly because if IV & NV were set NV *always* overruled.
1887    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1888    changes - now IV and NV together means that the two are interchangeable:
1889    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1890
1891    The benefit of this is that operations such as pp_add know that if
1892    SvIOK is true for both left and right operands, then integer addition
1893    can be used instead of floating point (for cases where the result won't
1894    overflow). Before, floating point was always used, which could lead to
1895    loss of precision compared with integer addition.
1896
1897    * making IV and NV equal status should make maths accurate on 64 bit
1898      platforms
1899    * may speed up maths somewhat if pp_add and friends start to use
1900      integers when possible instead of fp. (Hopefully the overhead in
1901      looking for SvIOK and checking for overflow will not outweigh the
1902      fp to integer speedup)
1903    * will slow down integer operations (callers of SvIV) on "inaccurate"
1904      values, as the change from SvIOK to SvIOKp will cause a call into
1905      sv_2iv each time rather than a macro access direct to the IV slot
1906    * should speed up number->string conversion on integers as IV is
1907      favoured when IV and NV are equally accurate
1908
1909    ####################################################################
1910    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1911    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1912    On the other hand, SvUOK is true iff UV.
1913    ####################################################################
1914
1915    Your mileage will vary depending your CPU's relative fp to integer
1916    performance ratio.
1917 */
1918
1919 #ifndef NV_PRESERVES_UV
1920 #  define IS_NUMBER_UNDERFLOW_IV 1
1921 #  define IS_NUMBER_UNDERFLOW_UV 2
1922 #  define IS_NUMBER_IV_AND_UV    2
1923 #  define IS_NUMBER_OVERFLOW_IV  4
1924 #  define IS_NUMBER_OVERFLOW_UV  5
1925
1926 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1927
1928 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1929 STATIC int
1930 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1931 #  ifdef DEBUGGING
1932                        , I32 numtype
1933 #  endif
1934                        )
1935 {
1936     dVAR;
1937
1938     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1939
1940     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));
1941     if (SvNVX(sv) < (NV)IV_MIN) {
1942         (void)SvIOKp_on(sv);
1943         (void)SvNOK_on(sv);
1944         SvIV_set(sv, IV_MIN);
1945         return IS_NUMBER_UNDERFLOW_IV;
1946     }
1947     if (SvNVX(sv) > (NV)UV_MAX) {
1948         (void)SvIOKp_on(sv);
1949         (void)SvNOK_on(sv);
1950         SvIsUV_on(sv);
1951         SvUV_set(sv, UV_MAX);
1952         return IS_NUMBER_OVERFLOW_UV;
1953     }
1954     (void)SvIOKp_on(sv);
1955     (void)SvNOK_on(sv);
1956     /* Can't use strtol etc to convert this string.  (See truth table in
1957        sv_2iv  */
1958     if (SvNVX(sv) <= (UV)IV_MAX) {
1959         SvIV_set(sv, I_V(SvNVX(sv)));
1960         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1961             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1962         } else {
1963             /* Integer is imprecise. NOK, IOKp */
1964         }
1965         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1966     }
1967     SvIsUV_on(sv);
1968     SvUV_set(sv, U_V(SvNVX(sv)));
1969     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1970         if (SvUVX(sv) == UV_MAX) {
1971             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1972                possibly be preserved by NV. Hence, it must be overflow.
1973                NOK, IOKp */
1974             return IS_NUMBER_OVERFLOW_UV;
1975         }
1976         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1977     } else {
1978         /* Integer is imprecise. NOK, IOKp */
1979     }
1980     return IS_NUMBER_OVERFLOW_IV;
1981 }
1982 #endif /* !NV_PRESERVES_UV*/
1983
1984 STATIC bool
1985 S_sv_2iuv_common(pTHX_ SV *const sv)
1986 {
1987     dVAR;
1988
1989     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1990
1991     if (SvNOKp(sv)) {
1992         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1993          * without also getting a cached IV/UV from it at the same time
1994          * (ie PV->NV conversion should detect loss of accuracy and cache
1995          * IV or UV at same time to avoid this. */
1996         /* IV-over-UV optimisation - choose to cache IV if possible */
1997
1998         if (SvTYPE(sv) == SVt_NV)
1999             sv_upgrade(sv, SVt_PVNV);
2000
2001         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2002         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2003            certainly cast into the IV range at IV_MAX, whereas the correct
2004            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2005            cases go to UV */
2006 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2007         if (Perl_isnan(SvNVX(sv))) {
2008             SvUV_set(sv, 0);
2009             SvIsUV_on(sv);
2010             return FALSE;
2011         }
2012 #endif
2013         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2014             SvIV_set(sv, I_V(SvNVX(sv)));
2015             if (SvNVX(sv) == (NV) SvIVX(sv)
2016 #ifndef NV_PRESERVES_UV
2017                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2018                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2019                 /* Don't flag it as "accurately an integer" if the number
2020                    came from a (by definition imprecise) NV operation, and
2021                    we're outside the range of NV integer precision */
2022 #endif
2023                 ) {
2024                 if (SvNOK(sv))
2025                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2026                 else {
2027                     /* scalar has trailing garbage, eg "42a" */
2028                 }
2029                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2030                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2031                                       PTR2UV(sv),
2032                                       SvNVX(sv),
2033                                       SvIVX(sv)));
2034
2035             } else {
2036                 /* IV not precise.  No need to convert from PV, as NV
2037                    conversion would already have cached IV if it detected
2038                    that PV->IV would be better than PV->NV->IV
2039                    flags already correct - don't set public IOK.  */
2040                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2041                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2042                                       PTR2UV(sv),
2043                                       SvNVX(sv),
2044                                       SvIVX(sv)));
2045             }
2046             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2047                but the cast (NV)IV_MIN rounds to a the value less (more
2048                negative) than IV_MIN which happens to be equal to SvNVX ??
2049                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2050                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2051                (NV)UVX == NVX are both true, but the values differ. :-(
2052                Hopefully for 2s complement IV_MIN is something like
2053                0x8000000000000000 which will be exact. NWC */
2054         }
2055         else {
2056             SvUV_set(sv, U_V(SvNVX(sv)));
2057             if (
2058                 (SvNVX(sv) == (NV) SvUVX(sv))
2059 #ifndef  NV_PRESERVES_UV
2060                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2061                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2062                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2063                 /* Don't flag it as "accurately an integer" if the number
2064                    came from a (by definition imprecise) NV operation, and
2065                    we're outside the range of NV integer precision */
2066 #endif
2067                 && SvNOK(sv)
2068                 )
2069                 SvIOK_on(sv);
2070             SvIsUV_on(sv);
2071             DEBUG_c(PerlIO_printf(Perl_debug_log,
2072                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2073                                   PTR2UV(sv),
2074                                   SvUVX(sv),
2075                                   SvUVX(sv)));
2076         }
2077     }
2078     else if (SvPOKp(sv) && SvLEN(sv)) {
2079         UV value;
2080         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2081         /* We want to avoid a possible problem when we cache an IV/ a UV which
2082            may be later translated to an NV, and the resulting NV is not
2083            the same as the direct translation of the initial string
2084            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2085            be careful to ensure that the value with the .456 is around if the
2086            NV value is requested in the future).
2087         
2088            This means that if we cache such an IV/a UV, we need to cache the
2089            NV as well.  Moreover, we trade speed for space, and do not
2090            cache the NV if we are sure it's not needed.
2091          */
2092
2093         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2094         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2095              == IS_NUMBER_IN_UV) {
2096             /* It's definitely an integer, only upgrade to PVIV */
2097             if (SvTYPE(sv) < SVt_PVIV)
2098                 sv_upgrade(sv, SVt_PVIV);
2099             (void)SvIOK_on(sv);
2100         } else if (SvTYPE(sv) < SVt_PVNV)
2101             sv_upgrade(sv, SVt_PVNV);
2102
2103         /* If NVs preserve UVs then we only use the UV value if we know that
2104            we aren't going to call atof() below. If NVs don't preserve UVs
2105            then the value returned may have more precision than atof() will
2106            return, even though value isn't perfectly accurate.  */
2107         if ((numtype & (IS_NUMBER_IN_UV
2108 #ifdef NV_PRESERVES_UV
2109                         | IS_NUMBER_NOT_INT
2110 #endif
2111             )) == IS_NUMBER_IN_UV) {
2112             /* This won't turn off the public IOK flag if it was set above  */
2113             (void)SvIOKp_on(sv);
2114
2115             if (!(numtype & IS_NUMBER_NEG)) {
2116                 /* positive */;
2117                 if (value <= (UV)IV_MAX) {
2118                     SvIV_set(sv, (IV)value);
2119                 } else {
2120                     /* it didn't overflow, and it was positive. */
2121                     SvUV_set(sv, value);
2122                     SvIsUV_on(sv);
2123                 }
2124             } else {
2125                 /* 2s complement assumption  */
2126                 if (value <= (UV)IV_MIN) {
2127                     SvIV_set(sv, -(IV)value);
2128                 } else {
2129                     /* Too negative for an IV.  This is a double upgrade, but
2130                        I'm assuming it will be rare.  */
2131                     if (SvTYPE(sv) < SVt_PVNV)
2132                         sv_upgrade(sv, SVt_PVNV);
2133                     SvNOK_on(sv);
2134                     SvIOK_off(sv);
2135                     SvIOKp_on(sv);
2136                     SvNV_set(sv, -(NV)value);
2137                     SvIV_set(sv, IV_MIN);
2138                 }
2139             }
2140         }
2141         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2142            will be in the previous block to set the IV slot, and the next
2143            block to set the NV slot.  So no else here.  */
2144         
2145         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2146             != IS_NUMBER_IN_UV) {
2147             /* It wasn't an (integer that doesn't overflow the UV). */
2148             SvNV_set(sv, Atof(SvPVX_const(sv)));
2149
2150             if (! numtype && ckWARN(WARN_NUMERIC))
2151                 not_a_number(sv);
2152
2153 #if defined(USE_LONG_DOUBLE)
2154             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2155                                   PTR2UV(sv), SvNVX(sv)));
2156 #else
2157             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2158                                   PTR2UV(sv), SvNVX(sv)));
2159 #endif
2160
2161 #ifdef NV_PRESERVES_UV
2162             (void)SvIOKp_on(sv);
2163             (void)SvNOK_on(sv);
2164             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2165                 SvIV_set(sv, I_V(SvNVX(sv)));
2166                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2167                     SvIOK_on(sv);
2168                 } else {
2169                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2170                 }
2171                 /* UV will not work better than IV */
2172             } else {
2173                 if (SvNVX(sv) > (NV)UV_MAX) {
2174                     SvIsUV_on(sv);
2175                     /* Integer is inaccurate. NOK, IOKp, is UV */
2176                     SvUV_set(sv, UV_MAX);
2177                 } else {
2178                     SvUV_set(sv, U_V(SvNVX(sv)));
2179                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2180                        NV preservse UV so can do correct comparison.  */
2181                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2182                         SvIOK_on(sv);
2183                     } else {
2184                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2185                     }
2186                 }
2187                 SvIsUV_on(sv);
2188             }
2189 #else /* NV_PRESERVES_UV */
2190             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2191                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2192                 /* The IV/UV slot will have been set from value returned by
2193                    grok_number above.  The NV slot has just been set using
2194                    Atof.  */
2195                 SvNOK_on(sv);
2196                 assert (SvIOKp(sv));
2197             } else {
2198                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2199                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2200                     /* Small enough to preserve all bits. */
2201                     (void)SvIOKp_on(sv);
2202                     SvNOK_on(sv);
2203                     SvIV_set(sv, I_V(SvNVX(sv)));
2204                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2205                         SvIOK_on(sv);
2206                     /* Assumption: first non-preserved integer is < IV_MAX,
2207                        this NV is in the preserved range, therefore: */
2208                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2209                           < (UV)IV_MAX)) {
2210                         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);
2211                     }
2212                 } else {
2213                     /* IN_UV NOT_INT
2214                          0      0       already failed to read UV.
2215                          0      1       already failed to read UV.
2216                          1      0       you won't get here in this case. IV/UV
2217                                         slot set, public IOK, Atof() unneeded.
2218                          1      1       already read UV.
2219                        so there's no point in sv_2iuv_non_preserve() attempting
2220                        to use atol, strtol, strtoul etc.  */
2221 #  ifdef DEBUGGING
2222                     sv_2iuv_non_preserve (sv, numtype);
2223 #  else
2224                     sv_2iuv_non_preserve (sv);
2225 #  endif
2226                 }
2227             }
2228 #endif /* NV_PRESERVES_UV */
2229         /* It might be more code efficient to go through the entire logic above
2230            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2231            gets complex and potentially buggy, so more programmer efficient
2232            to do it this way, by turning off the public flags:  */
2233         if (!numtype)
2234             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2235         }
2236     }
2237     else  {
2238         if (isGV_with_GP(sv))
2239             return glob_2number(MUTABLE_GV(sv));
2240
2241         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2242             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2243                 report_uninit(sv);
2244         }
2245         if (SvTYPE(sv) < SVt_IV)
2246             /* Typically the caller expects that sv_any is not NULL now.  */
2247             sv_upgrade(sv, SVt_IV);
2248         /* Return 0 from the caller.  */
2249         return TRUE;
2250     }
2251     return FALSE;
2252 }
2253
2254 /*
2255 =for apidoc sv_2iv_flags
2256
2257 Return the integer value of an SV, doing any necessary string
2258 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2259 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2260
2261 =cut
2262 */
2263
2264 IV
2265 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2266 {
2267     dVAR;
2268     if (!sv)
2269         return 0;
2270     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2271         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2272            cache IVs just in case. In practice it seems that they never
2273            actually anywhere accessible by user Perl code, let alone get used
2274            in anything other than a string context.  */
2275         if (flags & SV_GMAGIC)
2276             mg_get(sv);
2277         if (SvIOKp(sv))
2278             return SvIVX(sv);
2279         if (SvNOKp(sv)) {
2280             return I_V(SvNVX(sv));
2281         }
2282         if (SvPOKp(sv) && SvLEN(sv)) {
2283             UV value;
2284             const int numtype
2285                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2286
2287             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2288                 == IS_NUMBER_IN_UV) {
2289                 /* It's definitely an integer */
2290                 if (numtype & IS_NUMBER_NEG) {
2291                     if (value < (UV)IV_MIN)
2292                         return -(IV)value;
2293                 } else {
2294                     if (value < (UV)IV_MAX)
2295                         return (IV)value;
2296                 }
2297             }
2298             if (!numtype) {
2299                 if (ckWARN(WARN_NUMERIC))
2300                     not_a_number(sv);
2301             }
2302             return I_V(Atof(SvPVX_const(sv)));
2303         }
2304         if (SvROK(sv)) {
2305             goto return_rok;
2306         }
2307         assert(SvTYPE(sv) >= SVt_PVMG);
2308         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2309     } else if (SvTHINKFIRST(sv)) {
2310         if (SvROK(sv)) {
2311         return_rok:
2312             if (SvAMAGIC(sv)) {
2313                 SV * tmpstr;
2314                 if (flags & SV_SKIP_OVERLOAD)
2315                     return 0;
2316                 tmpstr = AMG_CALLunary(sv, numer_amg);
2317                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2318                     return SvIV(tmpstr);
2319                 }
2320             }
2321             return PTR2IV(SvRV(sv));
2322         }
2323         if (SvIsCOW(sv)) {
2324             sv_force_normal_flags(sv, 0);
2325         }
2326         if (SvREADONLY(sv) && !SvOK(sv)) {
2327             if (ckWARN(WARN_UNINITIALIZED))
2328                 report_uninit(sv);
2329             return 0;
2330         }
2331     }
2332     if (!SvIOKp(sv)) {
2333         if (S_sv_2iuv_common(aTHX_ sv))
2334             return 0;
2335     }
2336     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2337         PTR2UV(sv),SvIVX(sv)));
2338     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2339 }
2340
2341 /*
2342 =for apidoc sv_2uv_flags
2343
2344 Return the unsigned integer value of an SV, doing any necessary string
2345 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2346 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2347
2348 =cut
2349 */
2350
2351 UV
2352 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2353 {
2354     dVAR;
2355     if (!sv)
2356         return 0;
2357     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2358         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2359            cache IVs just in case.  */
2360         if (flags & SV_GMAGIC)
2361             mg_get(sv);
2362         if (SvIOKp(sv))
2363             return SvUVX(sv);
2364         if (SvNOKp(sv))
2365             return U_V(SvNVX(sv));
2366         if (SvPOKp(sv) && SvLEN(sv)) {
2367             UV value;
2368             const int numtype
2369                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2370
2371             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2372                 == IS_NUMBER_IN_UV) {
2373                 /* It's definitely an integer */
2374                 if (!(numtype & IS_NUMBER_NEG))
2375                     return value;
2376             }
2377             if (!numtype) {
2378                 if (ckWARN(WARN_NUMERIC))
2379                     not_a_number(sv);
2380             }
2381             return U_V(Atof(SvPVX_const(sv)));
2382         }
2383         if (SvROK(sv)) {
2384             goto return_rok;
2385         }
2386         assert(SvTYPE(sv) >= SVt_PVMG);
2387         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2388     } else if (SvTHINKFIRST(sv)) {
2389         if (SvROK(sv)) {
2390         return_rok:
2391             if (SvAMAGIC(sv)) {
2392                 SV *tmpstr;
2393                 if (flags & SV_SKIP_OVERLOAD)
2394                     return 0;
2395                 tmpstr = AMG_CALLunary(sv, numer_amg);
2396                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2397                     return SvUV(tmpstr);
2398                 }
2399             }
2400             return PTR2UV(SvRV(sv));
2401         }
2402         if (SvIsCOW(sv)) {
2403             sv_force_normal_flags(sv, 0);
2404         }
2405         if (SvREADONLY(sv) && !SvOK(sv)) {
2406             if (ckWARN(WARN_UNINITIALIZED))
2407                 report_uninit(sv);
2408             return 0;
2409         }
2410     }
2411     if (!SvIOKp(sv)) {
2412         if (S_sv_2iuv_common(aTHX_ sv))
2413             return 0;
2414     }
2415
2416     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2417                           PTR2UV(sv),SvUVX(sv)));
2418     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2419 }
2420
2421 /*
2422 =for apidoc sv_2nv_flags
2423
2424 Return the num value of an SV, doing any necessary string or integer
2425 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2426 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2427
2428 =cut
2429 */
2430
2431 NV
2432 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2433 {
2434     dVAR;
2435     if (!sv)
2436         return 0.0;
2437     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2438         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2439            cache IVs just in case.  */
2440         if (flags & SV_GMAGIC)
2441             mg_get(sv);
2442         if (SvNOKp(sv))
2443             return SvNVX(sv);
2444         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2445             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2446                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2447                 not_a_number(sv);
2448             return Atof(SvPVX_const(sv));
2449         }
2450         if (SvIOKp(sv)) {
2451             if (SvIsUV(sv))
2452                 return (NV)SvUVX(sv);
2453             else
2454                 return (NV)SvIVX(sv);
2455         }
2456         if (SvROK(sv)) {
2457             goto return_rok;
2458         }
2459         assert(SvTYPE(sv) >= SVt_PVMG);
2460         /* This falls through to the report_uninit near the end of the
2461            function. */
2462     } else if (SvTHINKFIRST(sv)) {
2463         if (SvROK(sv)) {
2464         return_rok:
2465             if (SvAMAGIC(sv)) {
2466                 SV *tmpstr;
2467                 if (flags & SV_SKIP_OVERLOAD)
2468                     return 0;
2469                 tmpstr = AMG_CALLunary(sv, numer_amg);
2470                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2471                     return SvNV(tmpstr);
2472                 }
2473             }
2474             return PTR2NV(SvRV(sv));
2475         }
2476         if (SvIsCOW(sv)) {
2477             sv_force_normal_flags(sv, 0);
2478         }
2479         if (SvREADONLY(sv) && !SvOK(sv)) {
2480             if (ckWARN(WARN_UNINITIALIZED))
2481                 report_uninit(sv);
2482             return 0.0;
2483         }
2484     }
2485     if (SvTYPE(sv) < SVt_NV) {
2486         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2487         sv_upgrade(sv, SVt_NV);
2488 #ifdef USE_LONG_DOUBLE
2489         DEBUG_c({
2490             STORE_NUMERIC_LOCAL_SET_STANDARD();
2491             PerlIO_printf(Perl_debug_log,
2492                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2493                           PTR2UV(sv), SvNVX(sv));
2494             RESTORE_NUMERIC_LOCAL();
2495         });
2496 #else
2497         DEBUG_c({
2498             STORE_NUMERIC_LOCAL_SET_STANDARD();
2499             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2500                           PTR2UV(sv), SvNVX(sv));
2501             RESTORE_NUMERIC_LOCAL();
2502         });
2503 #endif
2504     }
2505     else if (SvTYPE(sv) < SVt_PVNV)
2506         sv_upgrade(sv, SVt_PVNV);
2507     if (SvNOKp(sv)) {
2508         return SvNVX(sv);
2509     }
2510     if (SvIOKp(sv)) {
2511         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2512 #ifdef NV_PRESERVES_UV
2513         if (SvIOK(sv))
2514             SvNOK_on(sv);
2515         else
2516             SvNOKp_on(sv);
2517 #else
2518         /* Only set the public NV OK flag if this NV preserves the IV  */
2519         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2520         if (SvIOK(sv) &&
2521             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2522                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2523             SvNOK_on(sv);
2524         else
2525             SvNOKp_on(sv);
2526 #endif
2527     }
2528     else if (SvPOKp(sv) && SvLEN(sv)) {
2529         UV value;
2530         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2531         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2532             not_a_number(sv);
2533 #ifdef NV_PRESERVES_UV
2534         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2535             == IS_NUMBER_IN_UV) {
2536             /* It's definitely an integer */
2537             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2538         } else
2539             SvNV_set(sv, Atof(SvPVX_const(sv)));
2540         if (numtype)
2541             SvNOK_on(sv);
2542         else
2543             SvNOKp_on(sv);
2544 #else
2545         SvNV_set(sv, Atof(SvPVX_const(sv)));
2546         /* Only set the public NV OK flag if this NV preserves the value in
2547            the PV at least as well as an IV/UV would.
2548            Not sure how to do this 100% reliably. */
2549         /* if that shift count is out of range then Configure's test is
2550            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2551            UV_BITS */
2552         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2553             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2554             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2555         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2556             /* Can't use strtol etc to convert this string, so don't try.
2557                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2558             SvNOK_on(sv);
2559         } else {
2560             /* value has been set.  It may not be precise.  */
2561             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2562                 /* 2s complement assumption for (UV)IV_MIN  */
2563                 SvNOK_on(sv); /* Integer is too negative.  */
2564             } else {
2565                 SvNOKp_on(sv);
2566                 SvIOKp_on(sv);
2567
2568                 if (numtype & IS_NUMBER_NEG) {
2569                     SvIV_set(sv, -(IV)value);
2570                 } else if (value <= (UV)IV_MAX) {
2571                     SvIV_set(sv, (IV)value);
2572                 } else {
2573                     SvUV_set(sv, value);
2574                     SvIsUV_on(sv);
2575                 }
2576
2577                 if (numtype & IS_NUMBER_NOT_INT) {
2578                     /* I believe that even if the original PV had decimals,
2579                        they are lost beyond the limit of the FP precision.
2580                        However, neither is canonical, so both only get p
2581                        flags.  NWC, 2000/11/25 */
2582                     /* Both already have p flags, so do nothing */
2583                 } else {
2584                     const NV nv = SvNVX(sv);
2585                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2586                         if (SvIVX(sv) == I_V(nv)) {
2587                             SvNOK_on(sv);
2588                         } else {
2589                             /* It had no "." so it must be integer.  */
2590                         }
2591                         SvIOK_on(sv);
2592                     } else {
2593                         /* between IV_MAX and NV(UV_MAX).
2594                            Could be slightly > UV_MAX */
2595
2596                         if (numtype & IS_NUMBER_NOT_INT) {
2597                             /* UV and NV both imprecise.  */
2598                         } else {
2599                             const UV nv_as_uv = U_V(nv);
2600
2601                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2602                                 SvNOK_on(sv);
2603                             }
2604                             SvIOK_on(sv);
2605                         }
2606                     }
2607                 }
2608             }
2609         }
2610         /* It might be more code efficient to go through the entire logic above
2611            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2612            gets complex and potentially buggy, so more programmer efficient
2613            to do it this way, by turning off the public flags:  */
2614         if (!numtype)
2615             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2616 #endif /* NV_PRESERVES_UV */
2617     }
2618     else  {
2619         if (isGV_with_GP(sv)) {
2620             glob_2number(MUTABLE_GV(sv));
2621             return 0.0;
2622         }
2623
2624         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2625             report_uninit(sv);
2626         assert (SvTYPE(sv) >= SVt_NV);
2627         /* Typically the caller expects that sv_any is not NULL now.  */
2628         /* XXX Ilya implies that this is a bug in callers that assume this
2629            and ideally should be fixed.  */
2630         return 0.0;
2631     }
2632 #if defined(USE_LONG_DOUBLE)
2633     DEBUG_c({
2634         STORE_NUMERIC_LOCAL_SET_STANDARD();
2635         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2636                       PTR2UV(sv), SvNVX(sv));
2637         RESTORE_NUMERIC_LOCAL();
2638     });
2639 #else
2640     DEBUG_c({
2641         STORE_NUMERIC_LOCAL_SET_STANDARD();
2642         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2643                       PTR2UV(sv), SvNVX(sv));
2644         RESTORE_NUMERIC_LOCAL();
2645     });
2646 #endif
2647     return SvNVX(sv);
2648 }
2649
2650 /*
2651 =for apidoc sv_2num
2652
2653 Return an SV with the numeric value of the source SV, doing any necessary
2654 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2655 access this function.
2656
2657 =cut
2658 */
2659
2660 SV *
2661 Perl_sv_2num(pTHX_ register SV *const sv)
2662 {
2663     PERL_ARGS_ASSERT_SV_2NUM;
2664
2665     if (!SvROK(sv))
2666         return sv;
2667     if (SvAMAGIC(sv)) {
2668         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2669         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2670         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2671             return sv_2num(tmpsv);
2672     }
2673     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2674 }
2675
2676 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2677  * UV as a string towards the end of buf, and return pointers to start and
2678  * end of it.
2679  *
2680  * We assume that buf is at least TYPE_CHARS(UV) long.
2681  */
2682
2683 static char *
2684 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2685 {
2686     char *ptr = buf + TYPE_CHARS(UV);
2687     char * const ebuf = ptr;
2688     int sign;
2689
2690     PERL_ARGS_ASSERT_UIV_2BUF;
2691
2692     if (is_uv)
2693         sign = 0;
2694     else if (iv >= 0) {
2695         uv = iv;
2696         sign = 0;
2697     } else {
2698         uv = -iv;
2699         sign = 1;
2700     }
2701     do {
2702         *--ptr = '0' + (char)(uv % 10);
2703     } while (uv /= 10);
2704     if (sign)
2705         *--ptr = '-';
2706     *peob = ebuf;
2707     return ptr;
2708 }
2709
2710 /*
2711 =for apidoc sv_2pv_flags
2712
2713 Returns a pointer to the string value of an SV, and sets *lp to its length.
2714 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2715 if necessary.
2716 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2717 usually end up here too.
2718
2719 =cut
2720 */
2721
2722 char *
2723 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2724 {
2725     dVAR;
2726     register char *s;
2727
2728     if (!sv) {
2729         if (lp)
2730             *lp = 0;
2731         return (char *)"";
2732     }
2733     if (SvGMAGICAL(sv)) {
2734         if (flags & SV_GMAGIC)
2735             mg_get(sv);
2736         if (SvPOKp(sv)) {
2737             if (lp)
2738                 *lp = SvCUR(sv);
2739             if (flags & SV_MUTABLE_RETURN)
2740                 return SvPVX_mutable(sv);
2741             if (flags & SV_CONST_RETURN)
2742                 return (char *)SvPVX_const(sv);
2743             return SvPVX(sv);
2744         }
2745         if (SvIOKp(sv) || SvNOKp(sv)) {
2746             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2747             STRLEN len;
2748
2749             if (SvIOKp(sv)) {
2750                 len = SvIsUV(sv)
2751                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2752                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2753             } else if(SvNVX(sv) == 0.0) {
2754                     tbuf[0] = '0';
2755                     tbuf[1] = 0;
2756                     len = 1;
2757             } else {
2758                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2759                 len = strlen(tbuf);
2760             }
2761             assert(!SvROK(sv));
2762             {
2763                 dVAR;
2764
2765                 SvUPGRADE(sv, SVt_PV);
2766                 if (lp)
2767                     *lp = len;
2768                 s = SvGROW_mutable(sv, len + 1);
2769                 SvCUR_set(sv, len);
2770                 SvPOKp_on(sv);
2771                 return (char*)memcpy(s, tbuf, len + 1);
2772             }
2773         }
2774         if (SvROK(sv)) {
2775             goto return_rok;
2776         }
2777         assert(SvTYPE(sv) >= SVt_PVMG);
2778         /* This falls through to the report_uninit near the end of the
2779            function. */
2780     } else if (SvTHINKFIRST(sv)) {
2781         if (SvROK(sv)) {
2782         return_rok:
2783             if (SvAMAGIC(sv)) {
2784                 SV *tmpstr;
2785                 if (flags & SV_SKIP_OVERLOAD)
2786                     return NULL;
2787                 tmpstr = AMG_CALLunary(sv, string_amg);
2788                 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
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 necessarily 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         if (SvTYPE(sv) < SVt_PVNV)
2937             sv_upgrade(sv, SVt_PVNV);
2938         if (SvNVX(sv) == 0.0) {
2939             s = SvGROW_mutable(sv, 2);
2940             *s++ = '0';
2941             *s = '\0';
2942         } else {
2943             dSAVE_ERRNO;
2944             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2945             s = SvGROW_mutable(sv, NV_DIG + 20);
2946             /* some Xenix systems wipe out errno here */
2947             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2948             RESTORE_ERRNO;
2949             while (*s) s++;
2950         }
2951 #ifdef hcx
2952         if (s[-1] == '.')
2953             *--s = '\0';
2954 #endif
2955     }
2956     else {
2957         if (isGV_with_GP(sv)) {
2958             GV *const gv = MUTABLE_GV(sv);
2959             const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2960             SV *const buffer = sv_newmortal();
2961
2962             /* FAKE globs can get coerced, so need to turn this off temporarily
2963                if it is on.  */
2964             SvFAKE_off(gv);
2965             gv_efullname3(buffer, gv, "*");
2966             SvFLAGS(gv) |= wasfake;
2967
2968             if (SvPOK(buffer)) {
2969                 if (lp) {
2970                     *lp = SvCUR(buffer);
2971                 }
2972                 return SvPVX(buffer);
2973             }
2974             else {
2975                 if (lp)
2976                     *lp = 0;
2977                 return (char *)"";
2978             }
2979         }
2980
2981         if (lp)
2982             *lp = 0;
2983         if (flags & SV_UNDEF_RETURNS_NULL)
2984             return NULL;
2985         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2986             report_uninit(sv);
2987         if (SvTYPE(sv) < SVt_PV)
2988             /* Typically the caller expects that sv_any is not NULL now.  */
2989             sv_upgrade(sv, SVt_PV);
2990         return (char *)"";
2991     }
2992     {
2993         const STRLEN len = s - SvPVX_const(sv);
2994         if (lp) 
2995             *lp = len;
2996         SvCUR_set(sv, len);
2997     }
2998     SvPOK_on(sv);
2999     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3000                           PTR2UV(sv),SvPVX_const(sv)));
3001     if (flags & SV_CONST_RETURN)
3002         return (char *)SvPVX_const(sv);
3003     if (flags & SV_MUTABLE_RETURN)
3004         return SvPVX_mutable(sv);
3005     return SvPVX(sv);
3006 }
3007
3008 /*
3009 =for apidoc sv_copypv
3010
3011 Copies a stringified representation of the source SV into the
3012 destination SV.  Automatically performs any necessary mg_get and
3013 coercion of numeric values into strings.  Guaranteed to preserve
3014 UTF8 flag even from overloaded objects.  Similar in nature to
3015 sv_2pv[_flags] but operates directly on an SV instead of just the
3016 string.  Mostly uses sv_2pv_flags to do its work, except when that
3017 would lose the UTF-8'ness of the PV.
3018
3019 =cut
3020 */
3021
3022 void
3023 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3024 {
3025     STRLEN len;
3026     const char * const s = SvPV_const(ssv,len);
3027
3028     PERL_ARGS_ASSERT_SV_COPYPV;
3029
3030     sv_setpvn(dsv,s,len);
3031     if (SvUTF8(ssv))
3032         SvUTF8_on(dsv);
3033     else
3034         SvUTF8_off(dsv);
3035 }
3036
3037 /*
3038 =for apidoc sv_2pvbyte
3039
3040 Return a pointer to the byte-encoded representation of the SV, and set *lp
3041 to its length.  May cause the SV to be downgraded from UTF-8 as a
3042 side-effect.
3043
3044 Usually accessed via the C<SvPVbyte> macro.
3045
3046 =cut
3047 */
3048
3049 char *
3050 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3051 {
3052     PERL_ARGS_ASSERT_SV_2PVBYTE;
3053
3054     SvGETMAGIC(sv);
3055     sv_utf8_downgrade(sv,0);
3056     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3057 }
3058
3059 /*
3060 =for apidoc sv_2pvutf8
3061
3062 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3063 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3064
3065 Usually accessed via the C<SvPVutf8> macro.
3066
3067 =cut
3068 */
3069
3070 char *
3071 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3072 {
3073     PERL_ARGS_ASSERT_SV_2PVUTF8;
3074
3075     sv_utf8_upgrade(sv);
3076     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3077 }
3078
3079
3080 /*
3081 =for apidoc sv_2bool
3082
3083 This macro is only used by sv_true() or its macro equivalent, and only if
3084 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3085 It calls sv_2bool_flags with the SV_GMAGIC flag.
3086
3087 =for apidoc sv_2bool_flags
3088
3089 This function is only used by sv_true() and friends,  and only if
3090 the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
3091 contain SV_GMAGIC, then it does an mg_get() first.
3092
3093
3094 =cut
3095 */
3096
3097 bool
3098 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3099 {
3100     dVAR;
3101
3102     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3103
3104     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3105
3106     if (!SvOK(sv))
3107         return 0;
3108     if (SvROK(sv)) {
3109         if (SvAMAGIC(sv)) {
3110             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3111             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3112                 return cBOOL(SvTRUE(tmpsv));
3113         }
3114         return SvRV(sv) != 0;
3115     }
3116     if (SvPOKp(sv)) {
3117         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3118         if (Xpvtmp &&
3119                 (*sv->sv_u.svu_pv > '0' ||
3120                 Xpvtmp->xpv_cur > 1 ||
3121                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3122             return 1;
3123         else
3124             return 0;
3125     }
3126     else {
3127         if (SvIOKp(sv))
3128             return SvIVX(sv) != 0;
3129         else {
3130             if (SvNOKp(sv))
3131                 return SvNVX(sv) != 0.0;
3132             else {
3133                 if (isGV_with_GP(sv))
3134                     return TRUE;
3135                 else
3136                     return FALSE;
3137             }
3138         }
3139     }
3140 }
3141
3142 /*
3143 =for apidoc sv_utf8_upgrade
3144
3145 Converts the PV of an SV to its UTF-8-encoded form.
3146 Forces the SV to string form if it is not already.
3147 Will C<mg_get> on C<sv> if appropriate.
3148 Always sets the SvUTF8 flag to avoid future validity checks even
3149 if the whole string is the same in UTF-8 as not.
3150 Returns the number of bytes in the converted string
3151
3152 This is not as a general purpose byte encoding to Unicode interface:
3153 use the Encode extension for that.
3154
3155 =for apidoc sv_utf8_upgrade_nomg
3156
3157 Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3158
3159 =for apidoc sv_utf8_upgrade_flags
3160
3161 Converts the PV of an SV to its UTF-8-encoded form.
3162 Forces the SV to string form if it is not already.
3163 Always sets the SvUTF8 flag to avoid future validity checks even
3164 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3165 will C<mg_get> on C<sv> if appropriate, else not.
3166 Returns the number of bytes in the converted string
3167 C<sv_utf8_upgrade> and
3168 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3169
3170 This is not as a general purpose byte encoding to Unicode interface:
3171 use the Encode extension for that.
3172
3173 =cut
3174
3175 The grow version is currently not externally documented.  It adds a parameter,
3176 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3177 have free after it upon return.  This allows the caller to reserve extra space
3178 that it intends to fill, to avoid extra grows.
3179
3180 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3181 which can be used to tell this function to not first check to see if there are
3182 any characters that are different in UTF-8 (variant characters) which would
3183 force it to allocate a new string to sv, but to assume there are.  Typically
3184 this flag is used by a routine that has already parsed the string to find that
3185 there are such characters, and passes this information on so that the work
3186 doesn't have to be repeated.
3187
3188 (One might think that the calling routine could pass in the position of the
3189 first such variant, so it wouldn't have to be found again.  But that is not the
3190 case, because typically when the caller is likely to use this flag, it won't be
3191 calling this routine unless it finds something that won't fit into a byte.
3192 Otherwise it tries to not upgrade and just use bytes.  But some things that
3193 do fit into a byte are variants in utf8, and the caller may not have been
3194 keeping track of these.)
3195
3196 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3197 isn't guaranteed due to having other routines do the work in some input cases,
3198 or if the input is already flagged as being in utf8.
3199
3200 The speed of this could perhaps be improved for many cases if someone wanted to
3201 write a fast function that counts the number of variant characters in a string,
3202 especially if it could return the position of the first one.
3203
3204 */
3205
3206 STRLEN
3207 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3208 {
3209     dVAR;
3210
3211     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3212
3213     if (sv == &PL_sv_undef)
3214         return 0;
3215     if (!SvPOK(sv)) {
3216         STRLEN len = 0;
3217         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3218             (void) sv_2pv_flags(sv,&len, flags);
3219             if (SvUTF8(sv)) {
3220                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3221                 return len;
3222             }
3223         } else {
3224             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3225         }
3226     }
3227
3228     if (SvUTF8(sv)) {
3229         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3230         return SvCUR(sv);
3231     }
3232
3233     if (SvIsCOW(sv)) {
3234         sv_force_normal_flags(sv, 0);
3235     }
3236
3237     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3238         sv_recode_to_utf8(sv, PL_encoding);
3239         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3240         return SvCUR(sv);
3241     }
3242
3243     if (SvCUR(sv) == 0) {
3244         if (extra) SvGROW(sv, extra);
3245     } else { /* Assume Latin-1/EBCDIC */
3246         /* This function could be much more efficient if we
3247          * had a FLAG in SVs to signal if there are any variant
3248          * chars in the PV.  Given that there isn't such a flag
3249          * make the loop as fast as possible (although there are certainly ways
3250          * to speed this up, eg. through vectorization) */
3251         U8 * s = (U8 *) SvPVX_const(sv);
3252         U8 * e = (U8 *) SvEND(sv);
3253         U8 *t = s;
3254         STRLEN two_byte_count = 0;
3255         
3256         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3257
3258         /* See if really will need to convert to utf8.  We mustn't rely on our
3259          * incoming SV being well formed and having a trailing '\0', as certain
3260          * code in pp_formline can send us partially built SVs. */
3261
3262         while (t < e) {
3263             const U8 ch = *t++;
3264             if (NATIVE_IS_INVARIANT(ch)) continue;
3265
3266             t--;    /* t already incremented; re-point to first variant */
3267             two_byte_count = 1;
3268             goto must_be_utf8;
3269         }
3270
3271         /* utf8 conversion not needed because all are invariants.  Mark as
3272          * UTF-8 even if no variant - saves scanning loop */
3273         SvUTF8_on(sv);
3274         return SvCUR(sv);
3275
3276 must_be_utf8:
3277
3278         /* Here, the string should be converted to utf8, either because of an
3279          * input flag (two_byte_count = 0), or because a character that
3280          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3281          * the beginning of the string (if we didn't examine anything), or to
3282          * the first variant.  In either case, everything from s to t - 1 will
3283          * occupy only 1 byte each on output.
3284          *
3285          * There are two main ways to convert.  One is to create a new string
3286          * and go through the input starting from the beginning, appending each
3287          * converted value onto the new string as we go along.  It's probably
3288          * best to allocate enough space in the string for the worst possible
3289          * case rather than possibly running out of space and having to
3290          * reallocate and then copy what we've done so far.  Since everything
3291          * from s to t - 1 is invariant, the destination can be initialized
3292          * with these using a fast memory copy
3293          *
3294          * The other way is to figure out exactly how big the string should be
3295          * by parsing the entire input.  Then you don't have to make it big
3296          * enough to handle the worst possible case, and more importantly, if
3297          * the string you already have is large enough, you don't have to
3298          * allocate a new string, you can copy the last character in the input
3299          * string to the final position(s) that will be occupied by the
3300          * converted string and go backwards, stopping at t, since everything
3301          * before that is invariant.
3302          *
3303          * There are advantages and disadvantages to each method.
3304          *
3305          * In the first method, we can allocate a new string, do the memory
3306          * copy from the s to t - 1, and then proceed through the rest of the
3307          * string byte-by-byte.
3308          *
3309          * In the second method, we proceed through the rest of the input
3310          * string just calculating how big the converted string will be.  Then
3311          * there are two cases:
3312          *  1)  if the string has enough extra space to handle the converted
3313          *      value.  We go backwards through the string, converting until we
3314          *      get to the position we are at now, and then stop.  If this
3315          *      position is far enough along in the string, this method is
3316          *      faster than the other method.  If the memory copy were the same
3317          *      speed as the byte-by-byte loop, that position would be about
3318          *      half-way, as at the half-way mark, parsing to the end and back
3319          *      is one complete string's parse, the same amount as starting
3320          *      over and going all the way through.  Actually, it would be
3321          *      somewhat less than half-way, as it's faster to just count bytes
3322          *      than to also copy, and we don't have the overhead of allocating
3323          *      a new string, changing the scalar to use it, and freeing the
3324          *      existing one.  But if the memory copy is fast, the break-even
3325          *      point is somewhere after half way.  The counting loop could be
3326          *      sped up by vectorization, etc, to move the break-even point
3327          *      further towards the beginning.
3328          *  2)  if the string doesn't have enough space to handle the converted
3329          *      value.  A new string will have to be allocated, and one might
3330          *      as well, given that, start from the beginning doing the first
3331          *      method.  We've spent extra time parsing the string and in
3332          *      exchange all we've gotten is that we know precisely how big to
3333          *      make the new one.  Perl is more optimized for time than space,
3334          *      so this case is a loser.
3335          * So what I've decided to do is not use the 2nd method unless it is
3336          * guaranteed that a new string won't have to be allocated, assuming
3337          * the worst case.  I also decided not to put any more conditions on it
3338          * than this, for now.  It seems likely that, since the worst case is
3339          * twice as big as the unknown portion of the string (plus 1), we won't
3340          * be guaranteed enough space, causing us to go to the first method,
3341          * unless the string is short, or the first variant character is near
3342          * the end of it.  In either of these cases, it seems best to use the
3343          * 2nd method.  The only circumstance I can think of where this would
3344          * be really slower is if the string had once had much more data in it
3345          * than it does now, but there is still a substantial amount in it  */
3346
3347         {
3348             STRLEN invariant_head = t - s;
3349             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3350             if (SvLEN(sv) < size) {
3351
3352                 /* Here, have decided to allocate a new string */
3353
3354                 U8 *dst;
3355                 U8 *d;
3356
3357                 Newx(dst, size, U8);
3358
3359                 /* If no known invariants at the beginning of the input string,
3360                  * set so starts from there.  Otherwise, can use memory copy to
3361                  * get up to where we are now, and then start from here */
3362
3363                 if (invariant_head <= 0) {
3364                     d = dst;
3365                 } else {
3366                     Copy(s, dst, invariant_head, char);
3367                     d = dst + invariant_head;
3368                 }
3369
3370                 while (t < e) {
3371                     const UV uv = NATIVE8_TO_UNI(*t++);
3372                     if (UNI_IS_INVARIANT(uv))
3373                         *d++ = (U8)UNI_TO_NATIVE(uv);
3374                     else {
3375                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3376                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3377                     }
3378                 }
3379                 *d = '\0';
3380                 SvPV_free(sv); /* No longer using pre-existing string */
3381                 SvPV_set(sv, (char*)dst);
3382                 SvCUR_set(sv, d - dst);
3383                 SvLEN_set(sv, size);
3384             } else {
3385
3386                 /* Here, have decided to get the exact size of the string.
3387                  * Currently this happens only when we know that there is
3388                  * guaranteed enough space to fit the converted string, so
3389                  * don't have to worry about growing.  If two_byte_count is 0,
3390                  * then t points to the first byte of the string which hasn't
3391                  * been examined yet.  Otherwise two_byte_count is 1, and t
3392                  * points to the first byte in the string that will expand to
3393                  * two.  Depending on this, start examining at t or 1 after t.
3394                  * */
3395
3396                 U8 *d = t + two_byte_count;
3397
3398
3399                 /* Count up the remaining bytes that expand to two */
3400
3401                 while (d < e) {
3402                     const U8 chr = *d++;
3403                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3404                 }
3405
3406                 /* The string will expand by just the number of bytes that
3407                  * occupy two positions.  But we are one afterwards because of
3408                  * the increment just above.  This is the place to put the
3409                  * trailing NUL, and to set the length before we decrement */
3410
3411                 d += two_byte_count;
3412                 SvCUR_set(sv, d - s);
3413                 *d-- = '\0';
3414
3415
3416                 /* Having decremented d, it points to the position to put the
3417                  * very last byte of the expanded string.  Go backwards through
3418                  * the string, copying and expanding as we go, stopping when we
3419                  * get to the part that is invariant the rest of the way down */
3420
3421                 e--;
3422                 while (e >= t) {
3423                     const U8 ch = NATIVE8_TO_UNI(*e--);
3424                     if (UNI_IS_INVARIANT(ch)) {
3425                         *d-- = UNI_TO_NATIVE(ch);
3426                     } else {
3427                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3428                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3429                     }
3430                 }
3431             }
3432
3433             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3434                 /* Update pos. We do it at the end rather than during
3435                  * the upgrade, to avoid slowing down the common case
3436                  * (upgrade without pos) */
3437                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3438                 if (mg) {
3439                     I32 pos = mg->mg_len;
3440                     if (pos > 0 && (U32)pos > invariant_head) {
3441                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3442                         STRLEN n = (U32)pos - invariant_head;
3443                         while (n > 0) {
3444                             if (UTF8_IS_START(*d))
3445                                 d++;
3446                             d++;
3447                             n--;
3448                         }
3449                         mg->mg_len  = d - (U8*)SvPVX(sv);
3450                     }
3451                 }
3452                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3453                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3454             }
3455         }
3456     }
3457
3458     /* Mark as UTF-8 even if no variant - saves scanning loop */
3459     SvUTF8_on(sv);
3460     return SvCUR(sv);
3461 }
3462
3463 /*
3464 =for apidoc sv_utf8_downgrade
3465
3466 Attempts to convert the PV of an SV from characters to bytes.
3467 If the PV contains a character that cannot fit
3468 in a byte, this conversion will fail;
3469 in this case, either returns false or, if C<fail_ok> is not
3470 true, croaks.
3471
3472 This is not as a general purpose Unicode to byte encoding interface:
3473 use the Encode extension for that.
3474
3475 =cut
3476 */
3477
3478 bool
3479 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3480 {
3481     dVAR;
3482
3483     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3484
3485     if (SvPOKp(sv) && SvUTF8(sv)) {
3486         if (SvCUR(sv)) {
3487             U8 *s;
3488             STRLEN len;
3489             int mg_flags = SV_GMAGIC;
3490
3491             if (SvIsCOW(sv)) {
3492                 sv_force_normal_flags(sv, 0);
3493             }
3494             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3495                 /* update pos */
3496                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3497                 if (mg) {
3498                     I32 pos = mg->mg_len;
3499                     if (pos > 0) {
3500                         sv_pos_b2u(sv, &pos);
3501                         mg_flags = 0; /* sv_pos_b2u does get magic */
3502                         mg->mg_len  = pos;
3503                     }
3504                 }
3505                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3506                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3507
3508             }
3509             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3510
3511             if (!utf8_to_bytes(s, &len)) {
3512                 if (fail_ok)
3513                     return FALSE;
3514                 else {
3515                     if (PL_op)
3516                         Perl_croak(aTHX_ "Wide character in %s",
3517                                    OP_DESC(PL_op));
3518                     else
3519                         Perl_croak(aTHX_ "Wide character");
3520                 }
3521             }
3522             SvCUR_set(sv, len);
3523         }
3524     }
3525     SvUTF8_off(sv);
3526     return TRUE;
3527 }
3528
3529 /*
3530 =for apidoc sv_utf8_encode
3531
3532 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3533 flag off so that it looks like octets again.
3534
3535 =cut
3536 */
3537
3538 void
3539 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3540 {
3541     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3542
3543     if (SvIsCOW(sv)) {
3544         sv_force_normal_flags(sv, 0);
3545     }
3546     if (SvREADONLY(sv)) {
3547         Perl_croak_no_modify(aTHX);
3548     }
3549     (void) sv_utf8_upgrade(sv);
3550     SvUTF8_off(sv);
3551 }
3552
3553 /*
3554 =for apidoc sv_utf8_decode
3555
3556 If the PV of the SV is an octet sequence in UTF-8
3557 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3558 so that it looks like a character. If the PV contains only single-byte
3559 characters, the C<SvUTF8> flag stays being off.
3560 Scans PV for validity and returns false if the PV is invalid UTF-8.
3561
3562 =cut
3563 */
3564
3565 bool
3566 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3567 {
3568     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3569
3570     if (SvPOKp(sv)) {
3571         const U8 *start, *c;
3572         const U8 *e;
3573
3574         /* The octets may have got themselves encoded - get them back as
3575          * bytes
3576          */
3577         if (!sv_utf8_downgrade(sv, TRUE))
3578             return FALSE;
3579
3580         /* it is actually just a matter of turning the utf8 flag on, but
3581          * we want to make sure everything inside is valid utf8 first.
3582          */
3583         c = start = (const U8 *) SvPVX_const(sv);
3584         if (!is_utf8_string(c, SvCUR(sv)+1))
3585             return FALSE;
3586         e = (const U8 *) SvEND(sv);
3587         while (c < e) {
3588             const U8 ch = *c++;
3589             if (!UTF8_IS_INVARIANT(ch)) {
3590                 SvUTF8_on(sv);
3591                 break;
3592             }
3593         }
3594         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3595             /* adjust pos to the start of a UTF8 char sequence */
3596             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3597             if (mg) {
3598                 I32 pos = mg->mg_len;
3599                 if (pos > 0) {
3600                     for (c = start + pos; c > start; c--) {
3601                         if (UTF8_IS_START(*c))
3602                             break;
3603                     }
3604                     mg->mg_len  = c - start;
3605                 }
3606             }
3607             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3608                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3609         }
3610     }
3611     return TRUE;
3612 }
3613
3614 /*
3615 =for apidoc sv_setsv
3616
3617 Copies the contents of the source SV C<ssv> into the destination SV
3618 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3619 function if the source SV needs to be reused. Does not handle 'set' magic.
3620 Loosely speaking, it performs a copy-by-value, obliterating any previous
3621 content of the destination.
3622
3623 You probably want to use one of the assortment of wrappers, such as
3624 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3625 C<SvSetMagicSV_nosteal>.
3626
3627 =for apidoc sv_setsv_flags
3628
3629 Copies the contents of the source SV C<ssv> into the destination SV
3630 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3631 function if the source SV needs to be reused. Does not handle 'set' magic.
3632 Loosely speaking, it performs a copy-by-value, obliterating any previous
3633 content of the destination.
3634 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3635 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3636 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3637 and C<sv_setsv_nomg> are implemented in terms of this function.
3638
3639 You probably want to use one of the assortment of wrappers, such as
3640 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3641 C<SvSetMagicSV_nosteal>.
3642
3643 This is the primary function for copying scalars, and most other
3644 copy-ish functions and macros use this underneath.
3645
3646 =cut
3647 */
3648
3649 static void
3650 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3651 {
3652     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3653     HV *old_stash = NULL;
3654
3655     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3656
3657     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3658         const char * const name = GvNAME(sstr);
3659         const STRLEN len = GvNAMELEN(sstr);
3660         {
3661             if (dtype >= SVt_PV) {
3662                 SvPV_free(dstr);
3663                 SvPV_set(dstr, 0);
3664                 SvLEN_set(dstr, 0);
3665                 SvCUR_set(dstr, 0);
3666             }
3667             SvUPGRADE(dstr, SVt_PVGV);
3668             (void)SvOK_off(dstr);
3669             /* FIXME - why are we doing this, then turning it off and on again
3670                below?  */
3671             isGV_with_GP_on(dstr);
3672         }
3673         GvSTASH(dstr) = GvSTASH(sstr);
3674         if (GvSTASH(dstr))
3675             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3676         gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
3677         SvFAKE_on(dstr);        /* can coerce to non-glob */
3678     }
3679
3680     if(GvGP(MUTABLE_GV(sstr))) {
3681         /* If source has method cache entry, clear it */
3682         if(GvCVGEN(sstr)) {
3683             SvREFCNT_dec(GvCV(sstr));
3684             GvCV_set(sstr, NULL);
3685             GvCVGEN(sstr) = 0;
3686         }
3687         /* If source has a real method, then a method is
3688            going to change */
3689         else if(
3690          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3691         ) {
3692             mro_changes = 1;
3693         }
3694     }
3695
3696     /* If dest already had a real method, that's a change as well */
3697     if(
3698         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3699      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3700     ) {
3701         mro_changes = 1;
3702     }
3703
3704     /* We don’t need to check the name of the destination if it was not a
3705        glob to begin with. */
3706     if(dtype == SVt_PVGV) {
3707         const char * const name = GvNAME((const GV *)dstr);
3708         if(
3709             strEQ(name,"ISA")
3710          /* The stash may have been detached from the symbol table, so
3711             check its name. */
3712          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3713          && GvAV((const GV *)sstr)
3714         )
3715             mro_changes = 2;
3716         else {
3717             const STRLEN len = GvNAMELEN(dstr);
3718             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3719              || (len == 1 && name[0] == ':')) {
3720                 mro_changes = 3;
3721
3722                 /* Set aside the old stash, so we can reset isa caches on
3723                    its subclasses. */
3724                 if((old_stash = GvHV(dstr)))
3725                     /* Make sure we do not lose it early. */
3726                     SvREFCNT_inc_simple_void_NN(
3727                      sv_2mortal((SV *)old_stash)
3728                     );
3729             }
3730         }
3731     }
3732
3733     gp_free(MUTABLE_GV(dstr));
3734     isGV_with_GP_off(dstr);
3735     (void)SvOK_off(dstr);
3736     isGV_with_GP_on(dstr);
3737     GvINTRO_off(dstr);          /* one-shot flag */
3738     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3739     if (SvTAINTED(sstr))
3740         SvTAINT(dstr);
3741     if (GvIMPORTED(dstr) != GVf_IMPORTED
3742         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3743         {
3744             GvIMPORTED_on(dstr);
3745         }
3746     GvMULTI_on(dstr);
3747     if(mro_changes == 2) {
3748         MAGIC *mg;
3749         SV * const sref = (SV *)GvAV((const GV *)dstr);
3750         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3751             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3752                 AV * const ary = newAV();
3753                 av_push(ary, mg->mg_obj); /* takes the refcount */
3754                 mg->mg_obj = (SV *)ary;
3755             }
3756             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3757         }
3758         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3759         mro_isa_changed_in(GvSTASH(dstr));
3760     }
3761     else if(mro_changes == 3) {
3762         HV * const stash = GvHV(dstr);
3763         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3764             mro_package_moved(
3765                 stash, old_stash,
3766                 (GV *)dstr, 0
3767             );
3768     }
3769     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3770     return;
3771 }
3772
3773 static void
3774 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3775 {
3776     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3777     SV *dref = NULL;
3778     const int intro = GvINTRO(dstr);
3779     SV **location;
3780     U8 import_flag = 0;
3781     const U32 stype = SvTYPE(sref);
3782
3783     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3784
3785     if (intro) {
3786         GvINTRO_off(dstr);      /* one-shot flag */
3787         GvLINE(dstr) = CopLINE(PL_curcop);
3788         GvEGV(dstr) = MUTABLE_GV(dstr);
3789     }
3790     GvMULTI_on(dstr);
3791     switch (stype) {
3792     case SVt_PVCV:
3793         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3794         import_flag = GVf_IMPORTED_CV;
3795         goto common;
3796     case SVt_PVHV:
3797         location = (SV **) &GvHV(dstr);
3798         import_flag = GVf_IMPORTED_HV;
3799         goto common;
3800     case SVt_PVAV:
3801         location = (SV **) &GvAV(dstr);
3802         import_flag = GVf_IMPORTED_AV;
3803         goto common;
3804     case SVt_PVIO:
3805         location = (SV **) &GvIOp(dstr);
3806         goto common;
3807     case SVt_PVFM:
3808         location = (SV **) &GvFORM(dstr);
3809         goto common;
3810     default:
3811         location = &GvSV(dstr);
3812         import_flag = GVf_IMPORTED_SV;
3813     common:
3814         if (intro) {
3815             if (stype == SVt_PVCV) {
3816                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3817                 if (GvCVGEN(dstr)) {
3818                     SvREFCNT_dec(GvCV(dstr));
3819                     GvCV_set(dstr, NULL);
3820                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3821                 }
3822             }
3823             SAVEGENERICSV(*location);
3824         }
3825         else
3826             dref = *location;
3827         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3828             CV* const cv = MUTABLE_CV(*location);
3829             if (cv) {
3830                 if (!GvCVGEN((const GV *)dstr) &&
3831                     (CvROOT(cv) || CvXSUB(cv)))
3832                     {
3833                         /* Redefining a sub - warning is mandatory if
3834                            it was a const and its value changed. */
3835                         if (CvCONST(cv) && CvCONST((const CV *)sref)
3836                             && cv_const_sv(cv)
3837                             == cv_const_sv((const CV *)sref)) {
3838                             NOOP;
3839                             /* They are 2 constant subroutines generated from
3840                                the same constant. This probably means that
3841                                they are really the "same" proxy subroutine
3842                                instantiated in 2 places. Most likely this is
3843                                when a constant is exported twice.  Don't warn.
3844                             */
3845                         }
3846                         else if (ckWARN(WARN_REDEFINE)
3847                                  || (CvCONST(cv)
3848                                      && (!CvCONST((const CV *)sref)
3849                                          || sv_cmp(cv_const_sv(cv),
3850                                                    cv_const_sv((const CV *)
3851                                                                sref))))) {
3852                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3853                                         (const char *)
3854                                         (CvCONST(cv)
3855                                          ? "Constant subroutine %s::%s redefined"
3856                                          : "Subroutine %s::%s redefined"),
3857                                         HvNAME_get(GvSTASH((const GV *)dstr)),
3858                                         GvENAME(MUTABLE_GV(dstr)));
3859                         }
3860                     }
3861                 if (!intro)
3862                     cv_ckproto_len(cv, (const GV *)dstr,
3863                                    SvPOK(sref) ? SvPVX_const(sref) : NULL,
3864                                    SvPOK(sref) ? SvCUR(sref) : 0);
3865             }
3866             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3867             GvASSUMECV_on(dstr);
3868             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3869         }
3870         *location = sref;
3871         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3872             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3873             GvFLAGS(dstr) |= import_flag;
3874         }
3875         if (stype == SVt_PVHV) {
3876             const char * const name = GvNAME((GV*)dstr);
3877             const STRLEN len = GvNAMELEN(dstr);
3878             if (
3879                 (
3880                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3881                 || (len == 1 && name[0] == ':')
3882                 )
3883              && (!dref || HvENAME_get(dref))
3884             ) {
3885                 mro_package_moved(
3886                     (HV *)sref, (HV *)dref,
3887                     (GV *)dstr, 0
3888                 );
3889             }
3890         }
3891         else if (
3892             stype == SVt_PVAV && sref != dref
3893          && strEQ(GvNAME((GV*)dstr), "ISA")
3894          /* The stash may have been detached from the symbol table, so
3895             check its name before doing anything. */
3896          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3897         ) {
3898             MAGIC *mg;
3899             MAGIC * const omg = dref && SvSMAGICAL(dref)
3900                                  ? mg_find(dref, PERL_MAGIC_isa)
3901                                  : NULL;
3902             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3903                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3904                     AV * const ary = newAV();
3905                     av_push(ary, mg->mg_obj); /* takes the refcount */
3906                     mg->mg_obj = (SV *)ary;
3907                 }
3908                 if (omg) {
3909                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3910                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3911                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3912                         while (items--)
3913                             av_push(
3914                              (AV *)mg->mg_obj,
3915                              SvREFCNT_inc_simple_NN(*svp++)
3916                             );
3917                     }
3918                     else
3919                         av_push(
3920                          (AV *)mg->mg_obj,
3921                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3922                         );
3923                 }
3924                 else
3925                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3926             }
3927             else
3928             {
3929                 sv_magic(
3930                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3931                 );
3932                 mg = mg_find(sref, PERL_MAGIC_isa);
3933             }
3934             /* Since the *ISA assignment could have affected more than
3935                one stash, don’t call mro_isa_changed_in directly, but let
3936                magic_clearisa do it for us, as it already has the logic for
3937                dealing with globs vs arrays of globs. */
3938             assert(mg);
3939             Perl_magic_clearisa(aTHX_ NULL, mg);
3940         }
3941         break;
3942     }
3943     SvREFCNT_dec(dref);
3944     if (SvTAINTED(sstr))
3945         SvTAINT(dstr);
3946     return;
3947 }
3948
3949 void
3950 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3951 {
3952     dVAR;
3953     register U32 sflags;
3954     register int dtype;
3955     register svtype stype;
3956
3957     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3958
3959     if (sstr == dstr)
3960         return;
3961
3962     if (SvIS_FREED(dstr)) {
3963         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3964                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3965     }
3966     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3967     if (!sstr)
3968         sstr = &PL_sv_undef;
3969     if (SvIS_FREED(sstr)) {
3970         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3971                    (void*)sstr, (void*)dstr);
3972     }
3973     stype = SvTYPE(sstr);
3974     dtype = SvTYPE(dstr);
3975
3976     (void)SvAMAGIC_off(dstr);
3977     if ( SvVOK(dstr) )
3978     {
3979         /* need to nuke the magic */
3980         mg_free(dstr);
3981     }
3982
3983     /* There's a lot of redundancy below but we're going for speed here */
3984
3985     switch (stype) {
3986     case SVt_NULL:
3987       undef_sstr:
3988         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3989             (void)SvOK_off(dstr);
3990             return;
3991         }
3992         break;
3993     case SVt_IV:
3994         if (SvIOK(sstr)) {
3995             switch (dtype) {
3996             case SVt_NULL:
3997                 sv_upgrade(dstr, SVt_IV);
3998                 break;
3999             case SVt_NV:
4000             case SVt_PV:
4001                 sv_upgrade(dstr, SVt_PVIV);
4002                 break;
4003             case SVt_PVGV:
4004             case SVt_PVLV:
4005                 goto end_of_first_switch;
4006             }
4007             (void)SvIOK_only(dstr);
4008             SvIV_set(dstr,  SvIVX(sstr));
4009             if (SvIsUV(sstr))
4010                 SvIsUV_on(dstr);
4011             /* SvTAINTED can only be true if the SV has taint magic, which in
4012                turn means that the SV type is PVMG (or greater). This is the
4013                case statement for SVt_IV, so this cannot be true (whatever gcov
4014                may say).  */
4015             assert(!SvTAINTED(sstr));
4016             return;
4017         }
4018         if (!SvROK(sstr))
4019             goto undef_sstr;
4020         if (dtype < SVt_PV && dtype != SVt_IV)
4021             sv_upgrade(dstr, SVt_IV);
4022         break;
4023
4024     case SVt_NV:
4025         if (SvNOK(sstr)) {
4026             switch (dtype) {
4027             case SVt_NULL:
4028             case SVt_IV:
4029                 sv_upgrade(dstr, SVt_NV);
4030                 break;
4031             case SVt_PV:
4032             case SVt_PVIV:
4033                 sv_upgrade(dstr, SVt_PVNV);
4034                 break;
4035             case SVt_PVGV:
4036             case SVt_PVLV:
4037                 goto end_of_first_switch;
4038             }
4039             SvNV_set(dstr, SvNVX(sstr));
4040             (void)SvNOK_only(dstr);
4041             /* SvTAINTED can only be true if the SV has taint magic, which in
4042                turn means that the SV type is PVMG (or greater). This is the
4043                case statement for SVt_NV, so this cannot be true (whatever gcov
4044                may say).  */
4045             assert(!SvTAINTED(sstr));
4046             return;
4047         }
4048         goto undef_sstr;
4049
4050     case SVt_PVFM:
4051 #ifdef PERL_OLD_COPY_ON_WRITE
4052         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4053             if (dtype < SVt_PVIV)
4054                 sv_upgrade(dstr, SVt_PVIV);
4055             break;
4056         }
4057         /* Fall through */
4058 #endif
4059     case SVt_PV:
4060         if (dtype < SVt_PV)
4061             sv_upgrade(dstr, SVt_PV);
4062         break;
4063     case SVt_PVIV:
4064         if (dtype < SVt_PVIV)
4065             sv_upgrade(dstr, SVt_PVIV);
4066         break;
4067     case SVt_PVNV:
4068         if (dtype < SVt_PVNV)
4069             sv_upgrade(dstr, SVt_PVNV);
4070         break;
4071     default:
4072         {
4073         const char * const type = sv_reftype(sstr,0);
4074         if (PL_op)
4075             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4076         else
4077             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4078         }
4079         break;
4080
4081     case SVt_REGEXP:
4082         if (dtype < SVt_REGEXP)
4083             sv_upgrade(dstr, SVt_REGEXP);
4084         break;
4085
4086         /* case SVt_BIND: */
4087     case SVt_PVLV:
4088     case SVt_PVGV:
4089         /* SvVALID means that this PVGV is playing at being an FBM.  */
4090
4091     case SVt_PVMG:
4092         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4093             mg_get(sstr);
4094             if (SvTYPE(sstr) != stype)
4095                 stype = SvTYPE(sstr);
4096         }
4097         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4098                     glob_assign_glob(dstr, sstr, dtype);
4099                     return;
4100         }
4101         if (stype == SVt_PVLV)
4102             SvUPGRADE(dstr, SVt_PVNV);
4103         else
4104             SvUPGRADE(dstr, (svtype)stype);
4105     }
4106  end_of_first_switch:
4107
4108     /* dstr may have been upgraded.  */
4109     dtype = SvTYPE(dstr);
4110     sflags = SvFLAGS(sstr);
4111
4112     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
4113         /* Assigning to a subroutine sets the prototype.  */
4114         if (SvOK(sstr)) {
4115             STRLEN len;
4116             const char *const ptr = SvPV_const(sstr, len);
4117
4118             SvGROW(dstr, len + 1);
4119             Copy(ptr, SvPVX(dstr), len + 1, char);
4120             SvCUR_set(dstr, len);
4121             SvPOK_only(dstr);
4122             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4123         } else {
4124             SvOK_off(dstr);
4125         }
4126     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4127         const char * const type = sv_reftype(dstr,0);
4128         if (PL_op)
4129             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4130         else
4131             Perl_croak(aTHX_ "Cannot copy to %s", type);
4132     } else if (sflags & SVf_ROK) {
4133         if (isGV_with_GP(dstr)
4134             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4135             sstr = SvRV(sstr);
4136             if (sstr == dstr) {
4137                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4138                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4139                 {
4140                     GvIMPORTED_on(dstr);
4141                 }
4142                 GvMULTI_on(dstr);
4143                 return;
4144             }
4145             glob_assign_glob(dstr, sstr, dtype);
4146             return;
4147         }
4148
4149         if (dtype >= SVt_PV) {
4150             if (isGV_with_GP(dstr)) {
4151                 glob_assign_ref(dstr, sstr);
4152                 return;
4153             }
4154             if (SvPVX_const(dstr)) {
4155                 SvPV_free(dstr);
4156                 SvLEN_set(dstr, 0);
4157                 SvCUR_set(dstr, 0);
4158             }
4159         }
4160         (void)SvOK_off(dstr);
4161         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4162         SvFLAGS(dstr) |= sflags & SVf_ROK;
4163         assert(!(sflags & SVp_NOK));
4164         assert(!(sflags & SVp_IOK));
4165         assert(!(sflags & SVf_NOK));
4166         assert(!(sflags & SVf_IOK));
4167     }
4168     else if (isGV_with_GP(dstr)) {
4169         if (!(sflags & SVf_OK)) {
4170             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4171                            "Undefined value assigned to typeglob");
4172         }
4173         else {
4174             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
4175             if (dstr != (const SV *)gv) {
4176                 const char * const name = GvNAME((const GV *)dstr);
4177                 const STRLEN len = GvNAMELEN(dstr);
4178                 HV *old_stash = NULL;
4179                 bool reset_isa = FALSE;
4180                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4181                  || (len == 1 && name[0] == ':')) {
4182                     /* Set aside the old stash, so we can reset isa caches
4183                        on its subclasses. */
4184                     if((old_stash = GvHV(dstr))) {
4185                         /* Make sure we do not lose it early. */
4186                         SvREFCNT_inc_simple_void_NN(
4187                          sv_2mortal((SV *)old_stash)
4188                         );
4189                     }
4190                     reset_isa = TRUE;
4191                 }
4192
4193                 if (GvGP(dstr))
4194                     gp_free(MUTABLE_GV(dstr));
4195                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4196
4197                 if (reset_isa) {
4198                     HV * const stash = GvHV(dstr);
4199                     if(
4200                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4201                     )
4202                         mro_package_moved(
4203                          stash, old_stash,
4204                          (GV *)dstr, 0
4205                         );
4206                 }
4207             }
4208         }
4209     }
4210     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4211         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4212     }
4213     else if (sflags & SVp_POK) {
4214         bool isSwipe = 0;
4215
4216         /*
4217          * Check to see if we can just swipe the string.  If so, it's a
4218          * possible small lose on short strings, but a big win on long ones.
4219          * It might even be a win on short strings if SvPVX_const(dstr)
4220          * has to be allocated and SvPVX_const(sstr) has to be freed.
4221          * Likewise if we can set up COW rather than doing an actual copy, we
4222          * drop to the else clause, as the swipe code and the COW setup code
4223          * have much in common.
4224          */
4225
4226         /* Whichever path we take through the next code, we want this true,
4227            and doing it now facilitates the COW check.  */
4228         (void)SvPOK_only(dstr);
4229
4230         if (
4231             /* If we're already COW then this clause is not true, and if COW
4232                is allowed then we drop down to the else and make dest COW 
4233                with us.  If caller hasn't said that we're allowed to COW
4234                shared hash keys then we don't do the COW setup, even if the
4235                source scalar is a shared hash key scalar.  */
4236             (((flags & SV_COW_SHARED_HASH_KEYS)
4237                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4238                : 1 /* If making a COW copy is forbidden then the behaviour we
4239                        desire is as if the source SV isn't actually already
4240                        COW, even if it is.  So we act as if the source flags
4241                        are not COW, rather than actually testing them.  */
4242               )
4243 #ifndef PERL_OLD_COPY_ON_WRITE
4244              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4245                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4246                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4247                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4248                 but in turn, it's somewhat dead code, never expected to go
4249                 live, but more kept as a placeholder on how to do it better
4250                 in a newer implementation.  */
4251              /* If we are COW and dstr is a suitable target then we drop down
4252                 into the else and make dest a COW of us.  */
4253              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4254 #endif
4255              )
4256             &&
4257             !(isSwipe =
4258                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4259                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4260                  (!(flags & SV_NOSTEAL)) &&
4261                                         /* and we're allowed to steal temps */
4262                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4263                  SvLEN(sstr))             /* and really is a string */
4264 #ifdef PERL_OLD_COPY_ON_WRITE
4265             && ((flags & SV_COW_SHARED_HASH_KEYS)
4266                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4267                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4268                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4269                 : 1)
4270 #endif
4271             ) {
4272             /* Failed the swipe test, and it's not a shared hash key either.
4273                Have to copy the string.  */
4274             STRLEN len = SvCUR(sstr);
4275             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4276             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4277             SvCUR_set(dstr, len);
4278             *SvEND(dstr) = '\0';
4279         } else {
4280             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4281                be true in here.  */
4282             /* Either it's a shared hash key, or it's suitable for
4283                copy-on-write or we can swipe the string.  */
4284             if (DEBUG_C_TEST) {
4285                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4286                 sv_dump(sstr);
4287                 sv_dump(dstr);
4288             }
4289 #ifdef PERL_OLD_COPY_ON_WRITE
4290             if (!isSwipe) {
4291                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4292                     != (SVf_FAKE | SVf_READONLY)) {
4293                     SvREADONLY_on(sstr);
4294                     SvFAKE_on(sstr);
4295                     /* Make the source SV into a loop of 1.
4296                        (about to become 2) */
4297                     SV_COW_NEXT_SV_SET(sstr, sstr);
4298                 }
4299             }
4300 #endif
4301             /* Initial code is common.  */
4302             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4303                 SvPV_free(dstr);
4304             }
4305
4306             if (!isSwipe) {
4307                 /* making another shared SV.  */
4308                 STRLEN cur = SvCUR(sstr);
4309                 STRLEN len = SvLEN(sstr);
4310 #ifdef PERL_OLD_COPY_ON_WRITE
4311                 if (len) {
4312                     assert (SvTYPE(dstr) >= SVt_PVIV);
4313                     /* SvIsCOW_normal */
4314                     /* splice us in between source and next-after-source.  */
4315                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4316                     SV_COW_NEXT_SV_SET(sstr, dstr);
4317                     SvPV_set(dstr, SvPVX_mutable(sstr));
4318                 } else
4319 #endif
4320                 {
4321                     /* SvIsCOW_shared_hash */
4322                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4323                                           "Copy on write: Sharing hash\n"));
4324
4325                     assert (SvTYPE(dstr) >= SVt_PV);
4326                     SvPV_set(dstr,
4327                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4328                 }
4329                 SvLEN_set(dstr, len);
4330                 SvCUR_set(dstr, cur);
4331                 SvREADONLY_on(dstr);
4332                 SvFAKE_on(dstr);
4333             }
4334             else
4335                 {       /* Passes the swipe test.  */
4336                 SvPV_set(dstr, SvPVX_mutable(sstr));
4337                 SvLEN_set(dstr, SvLEN(sstr));
4338                 SvCUR_set(dstr, SvCUR(sstr));
4339
4340                 SvTEMP_off(dstr);
4341                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4342                 SvPV_set(sstr, NULL);
4343                 SvLEN_set(sstr, 0);
4344                 SvCUR_set(sstr, 0);
4345                 SvTEMP_off(sstr);
4346             }
4347         }
4348         if (sflags & SVp_NOK) {
4349             SvNV_set(dstr, SvNVX(sstr));
4350         }
4351         if (sflags & SVp_IOK) {
4352             SvIV_set(dstr, SvIVX(sstr));
4353             /* Must do this otherwise some other overloaded use of 0x80000000
4354                gets confused. I guess SVpbm_VALID */
4355             if (sflags & SVf_IVisUV)
4356                 SvIsUV_on(dstr);
4357         }
4358         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4359         {
4360             const MAGIC * const smg = SvVSTRING_mg(sstr);
4361             if (smg) {
4362                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4363                          smg->mg_ptr, smg->mg_len);
4364                 SvRMAGICAL_on(dstr);
4365             }
4366         }
4367     }
4368     else if (sflags & (SVp_IOK|SVp_NOK)) {
4369         (void)SvOK_off(dstr);
4370         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4371         if (sflags & SVp_IOK) {
4372             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4373             SvIV_set(dstr, SvIVX(sstr));
4374         }
4375         if (sflags & SVp_NOK) {
4376             SvNV_set(dstr, SvNVX(sstr));
4377         }
4378     }
4379     else {
4380         if (isGV_with_GP(sstr)) {
4381             /* This stringification rule for globs is spread in 3 places.
4382                This feels bad. FIXME.  */
4383             const U32 wasfake = sflags & SVf_FAKE;
4384
4385             /* FAKE globs can get coerced, so need to turn this off
4386                temporarily if it is on.  */
4387             SvFAKE_off(sstr);
4388             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4389             SvFLAGS(sstr) |= wasfake;
4390         }
4391         else
4392             (void)SvOK_off(dstr);
4393     }
4394     if (SvTAINTED(sstr))
4395         SvTAINT(dstr);
4396 }
4397
4398 /*
4399 =for apidoc sv_setsv_mg
4400
4401 Like C<sv_setsv>, but also handles 'set' magic.
4402
4403 =cut
4404 */
4405
4406 void
4407 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4408 {
4409     PERL_ARGS_ASSERT_SV_SETSV_MG;
4410
4411     sv_setsv(dstr,sstr);
4412     SvSETMAGIC(dstr);
4413 }
4414
4415 #ifdef PERL_OLD_COPY_ON_WRITE
4416 SV *
4417 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4418 {
4419     STRLEN cur = SvCUR(sstr);
4420     STRLEN len = SvLEN(sstr);
4421     register char *new_pv;
4422
4423     PERL_ARGS_ASSERT_SV_SETSV_COW;
4424
4425     if (DEBUG_C_TEST) {
4426         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4427                       (void*)sstr, (void*)dstr);
4428         sv_dump(sstr);
4429         if (dstr)
4430                     sv_dump(dstr);
4431     }
4432
4433     if (dstr) {
4434         if (SvTHINKFIRST(dstr))
4435             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4436         else if (SvPVX_const(dstr))
4437             Safefree(SvPVX_const(dstr));
4438     }
4439     else
4440         new_SV(dstr);
4441     SvUPGRADE(dstr, SVt_PVIV);
4442
4443     assert (SvPOK(sstr));
4444     assert (SvPOKp(sstr));
4445     assert (!SvIOK(sstr));
4446     assert (!SvIOKp(sstr));
4447     assert (!SvNOK(sstr));
4448     assert (!SvNOKp(sstr));
4449
4450     if (SvIsCOW(sstr)) {
4451
4452         if (SvLEN(sstr) == 0) {
4453             /* source is a COW shared hash key.  */
4454             DEBUG_C(PerlIO_printf(Perl_debug_log,
4455                                   "Fast copy on write: Sharing hash\n"));
4456             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4457             goto common_exit;
4458         }
4459         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4460     } else {
4461         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4462         SvUPGRADE(sstr, SVt_PVIV);
4463         SvREADONLY_on(sstr);
4464         SvFAKE_on(sstr);
4465         DEBUG_C(PerlIO_printf(Perl_debug_log,
4466                               "Fast copy on write: Converting sstr to COW\n"));
4467         SV_COW_NEXT_SV_SET(dstr, sstr);
4468     }
4469     SV_COW_NEXT_SV_SET(sstr, dstr);
4470     new_pv = SvPVX_mutable(sstr);
4471
4472   common_exit:
4473     SvPV_set(dstr, new_pv);
4474     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4475     if (SvUTF8(sstr))
4476         SvUTF8_on(dstr);
4477     SvLEN_set(dstr, len);
4478     SvCUR_set(dstr, cur);
4479     if (DEBUG_C_TEST) {
4480         sv_dump(dstr);
4481     }
4482     return dstr;
4483 }
4484 #endif
4485
4486 /*
4487 =for apidoc sv_setpvn
4488
4489 Copies a string into an SV.  The C<len> parameter indicates the number of
4490 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4491 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4492
4493 =cut
4494 */
4495
4496 void
4497 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4498 {
4499     dVAR;
4500     register char *dptr;
4501
4502     PERL_ARGS_ASSERT_SV_SETPVN;
4503
4504     SV_CHECK_THINKFIRST_COW_DROP(sv);
4505     if (!ptr) {
4506         (void)SvOK_off(sv);
4507         return;
4508     }
4509     else {
4510         /* len is STRLEN which is unsigned, need to copy to signed */
4511         const IV iv = len;
4512         if (iv < 0)
4513             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4514     }
4515     SvUPGRADE(sv, SVt_PV);
4516
4517     dptr = SvGROW(sv, len + 1);
4518     Move(ptr,dptr,len,char);
4519     dptr[len] = '\0';
4520     SvCUR_set(sv, len);
4521     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4522     SvTAINT(sv);
4523 }
4524
4525 /*
4526 =for apidoc sv_setpvn_mg
4527
4528 Like C<sv_setpvn>, but also handles 'set' magic.
4529
4530 =cut
4531 */
4532
4533 void
4534 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4535 {
4536     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4537
4538     sv_setpvn(sv,ptr,len);
4539     SvSETMAGIC(sv);
4540 }
4541
4542 /*
4543 =for apidoc sv_setpv
4544
4545 Copies a string into an SV.  The string must be null-terminated.  Does not
4546 handle 'set' magic.  See C<sv_setpv_mg>.
4547
4548 =cut
4549 */
4550
4551 void
4552 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4553 {
4554     dVAR;
4555     register STRLEN len;
4556
4557     PERL_ARGS_ASSERT_SV_SETPV;
4558
4559     SV_CHECK_THINKFIRST_COW_DROP(sv);
4560     if (!ptr) {
4561         (void)SvOK_off(sv);
4562         return;
4563     }
4564     len = strlen(ptr);
4565     SvUPGRADE(sv, SVt_PV);
4566
4567     SvGROW(sv, len + 1);
4568     Move(ptr,SvPVX(sv),len+1,char);
4569     SvCUR_set(sv, len);
4570     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4571     SvTAINT(sv);
4572 }
4573
4574 /*
4575 =for apidoc sv_setpv_mg
4576
4577 Like C<sv_setpv>, but also handles 'set' magic.
4578
4579 =cut
4580 */
4581
4582 void
4583 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4584 {
4585     PERL_ARGS_ASSERT_SV_SETPV_MG;
4586
4587     sv_setpv(sv,ptr);
4588     SvSETMAGIC(sv);
4589 }
4590
4591 /*
4592 =for apidoc sv_usepvn_flags
4593
4594 Tells an SV to use C<ptr> to find its string value.  Normally the
4595 string is stored inside the SV but sv_usepvn allows the SV to use an
4596 outside string.  The C<ptr> should point to memory that was allocated
4597 by C<malloc>.  The string length, C<len>, must be supplied.  By default
4598 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4599 so that pointer should not be freed or used by the programmer after
4600 giving it to sv_usepvn, and neither should any pointers from "behind"
4601 that pointer (e.g. ptr + 1) be used.
4602
4603 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4604 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4605 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4606 C<len>, and already meets the requirements for storing in C<SvPVX>)
4607
4608 =cut
4609 */
4610
4611 void
4612 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4613 {
4614     dVAR;
4615     STRLEN allocate;
4616
4617     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4618
4619     SV_CHECK_THINKFIRST_COW_DROP(sv);
4620     SvUPGRADE(sv, SVt_PV);
4621     if (!ptr) {
4622         (void)SvOK_off(sv);
4623         if (flags & SV_SMAGIC)
4624             SvSETMAGIC(sv);
4625         return;
4626     }
4627     if (SvPVX_const(sv))
4628         SvPV_free(sv);
4629
4630 #ifdef DEBUGGING
4631     if (flags & SV_HAS_TRAILING_NUL)
4632         assert(ptr[len] == '\0');
4633 #endif
4634
4635     allocate = (flags & SV_HAS_TRAILING_NUL)
4636         ? len + 1 :
4637 #ifdef Perl_safesysmalloc_size
4638         len + 1;
4639 #else 
4640         PERL_STRLEN_ROUNDUP(len + 1);
4641 #endif
4642     if (flags & SV_HAS_TRAILING_NUL) {
4643         /* It's long enough - do nothing.
4644            Specifically Perl_newCONSTSUB is relying on this.  */
4645     } else {
4646 #ifdef DEBUGGING
4647         /* Force a move to shake out bugs in callers.  */
4648         char *new_ptr = (char*)safemalloc(allocate);
4649         Copy(ptr, new_ptr, len, char);
4650         PoisonFree(ptr,len,char);
4651         Safefree(ptr);
4652         ptr = new_ptr;
4653 #else
4654         ptr = (char*) saferealloc (ptr, allocate);
4655 #endif
4656     }
4657 #ifdef Perl_safesysmalloc_size
4658     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4659 #else
4660     SvLEN_set(sv, allocate);
4661 #endif
4662     SvCUR_set(sv, len);
4663     SvPV_set(sv, ptr);
4664     if (!(flags & SV_HAS_TRAILING_NUL)) {
4665         ptr[len] = '\0';
4666     }
4667     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4668     SvTAINT(sv);
4669     if (flags & SV_SMAGIC)
4670         SvSETMAGIC(sv);
4671 }
4672
4673 #ifdef PERL_OLD_COPY_ON_WRITE
4674 /* Need to do this *after* making the SV normal, as we need the buffer
4675    pointer to remain valid until after we've copied it.  If we let go too early,
4676    another thread could invalidate it by unsharing last of the same hash key
4677    (which it can do by means other than releasing copy-on-write Svs)
4678    or by changing the other copy-on-write SVs in the loop.  */
4679 STATIC void
4680 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4681 {
4682     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4683
4684     { /* this SV was SvIsCOW_normal(sv) */
4685          /* we need to find the SV pointing to us.  */
4686         SV *current = SV_COW_NEXT_SV(after);
4687
4688         if (current == sv) {
4689             /* The SV we point to points back to us (there were only two of us
4690                in the loop.)
4691                Hence other SV is no longer copy on write either.  */
4692             SvFAKE_off(after);
4693             SvREADONLY_off(after);
4694         } else {
4695             /* We need to follow the pointers around the loop.  */
4696             SV *next;
4697             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4698                 assert (next);
4699                 current = next;
4700                  /* don't loop forever if the structure is bust, and we have
4701                     a pointer into a closed loop.  */
4702                 assert (current != after);
4703                 assert (SvPVX_const(current) == pvx);
4704             }
4705             /* Make the SV before us point to the SV after us.  */
4706             SV_COW_NEXT_SV_SET(current, after);
4707         }
4708     }
4709 }
4710 #endif
4711 /*
4712 =for apidoc sv_force_normal_flags
4713
4714 Undo various types of fakery on an SV: if the PV is a shared string, make
4715 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4716 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4717 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4718 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4719 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4720 set to some other value.) In addition, the C<flags> parameter gets passed to
4721 C<sv_unref_flags()> when unreffing. C<sv_force_normal> calls this function
4722 with flags set to 0.
4723
4724 =cut
4725 */
4726
4727 void
4728 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4729 {
4730     dVAR;
4731
4732     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4733
4734 #ifdef PERL_OLD_COPY_ON_WRITE
4735     if (SvREADONLY(sv)) {
4736         if (SvFAKE(sv)) {
4737             const char * const pvx = SvPVX_const(sv);
4738             const STRLEN len = SvLEN(sv);
4739             const STRLEN cur = SvCUR(sv);
4740             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4741                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4742                we'll fail an assertion.  */
4743             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4744
4745             if (DEBUG_C_TEST) {
4746                 PerlIO_printf(Perl_debug_log,
4747                               "Copy on write: Force normal %ld\n",
4748                               (long) flags);
4749                 sv_dump(sv);
4750             }
4751             SvFAKE_off(sv);
4752             SvREADONLY_off(sv);
4753             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4754             SvPV_set(sv, NULL);
4755             SvLEN_set(sv, 0);
4756             if (flags & SV_COW_DROP_PV) {
4757                 /* OK, so we don't need to copy our buffer.  */
4758                 SvPOK_off(sv);
4759             } else {
4760                 SvGROW(sv, cur + 1);
4761                 Move(pvx,SvPVX(sv),cur,char);
4762                 SvCUR_set(sv, cur);
4763                 *SvEND(sv) = '\0';
4764             }
4765             if (len) {
4766                 sv_release_COW(sv, pvx, next);
4767             } else {
4768                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4769             }
4770             if (DEBUG_C_TEST) {
4771                 sv_dump(sv);
4772             }
4773         }
4774         else if (IN_PERL_RUNTIME)
4775             Perl_croak_no_modify(aTHX);
4776     }
4777 #else
4778     if (SvREADONLY(sv)) {
4779         if (SvFAKE(sv)) {
4780             const char * const pvx = SvPVX_const(sv);
4781             const STRLEN len = SvCUR(sv);
4782             SvFAKE_off(sv);
4783             SvREADONLY_off(sv);
4784             SvPV_set(sv, NULL);
4785             SvLEN_set(sv, 0);
4786             SvGROW(sv, len + 1);
4787             Move(pvx,SvPVX(sv),len,char);
4788             *SvEND(sv) = '\0';
4789             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4790         }
4791         else if (IN_PERL_RUNTIME)
4792             Perl_croak_no_modify(aTHX);
4793     }
4794 #endif
4795     if (SvROK(sv))
4796         sv_unref_flags(sv, flags);
4797     else if (SvFAKE(sv) && isGV_with_GP(sv))
4798         sv_unglob(sv);
4799     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4800         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4801            to sv_unglob. We only need it here, so inline it.  */
4802         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4803         SV *const temp = newSV_type(new_type);
4804         void *const temp_p = SvANY(sv);
4805
4806         if (new_type == SVt_PVMG) {
4807             SvMAGIC_set(temp, SvMAGIC(sv));
4808             SvMAGIC_set(sv, NULL);
4809             SvSTASH_set(temp, SvSTASH(sv));
4810             SvSTASH_set(sv, NULL);
4811         }
4812         SvCUR_set(temp, SvCUR(sv));
4813         /* Remember that SvPVX is in the head, not the body. */
4814         if (SvLEN(temp)) {
4815             SvLEN_set(temp, SvLEN(sv));
4816             /* This signals "buffer is owned by someone else" in sv_clear,
4817                which is the least effort way to stop it freeing the buffer.
4818             */
4819             SvLEN_set(sv, SvLEN(sv)+1);
4820         } else {
4821             /* Their buffer is already owned by someone else. */
4822             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4823             SvLEN_set(temp, SvCUR(sv)+1);
4824         }
4825
4826         /* Now swap the rest of the bodies. */
4827
4828         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4829         SvFLAGS(sv) |= new_type;
4830         SvANY(sv) = SvANY(temp);
4831
4832         SvFLAGS(temp) &= ~(SVTYPEMASK);
4833         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4834         SvANY(temp) = temp_p;
4835
4836         SvREFCNT_dec(temp);
4837     }
4838 }
4839
4840 /*
4841 =for apidoc sv_chop
4842
4843 Efficient removal of characters from the beginning of the string buffer.
4844 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4845 the string buffer.  The C<ptr> becomes the first character of the adjusted
4846 string. Uses the "OOK hack".
4847 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4848 refer to the same chunk of data.
4849
4850 =cut
4851 */
4852
4853 void
4854 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4855 {
4856     STRLEN delta;
4857     STRLEN old_delta;
4858     U8 *p;
4859 #ifdef DEBUGGING
4860     const U8 *real_start;
4861 #endif
4862     STRLEN max_delta;
4863
4864     PERL_ARGS_ASSERT_SV_CHOP;
4865
4866     if (!ptr || !SvPOKp(sv))
4867         return;
4868     delta = ptr - SvPVX_const(sv);
4869     if (!delta) {
4870         /* Nothing to do.  */
4871         return;
4872     }
4873     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4874        nothing uses the value of ptr any more.  */
4875     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4876     if (ptr <= SvPVX_const(sv))
4877         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4878                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4879     SV_CHECK_THINKFIRST(sv);
4880     if (delta > max_delta)
4881         Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4882                    SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4883                    SvPVX_const(sv) + max_delta);
4884
4885     if (!SvOOK(sv)) {
4886         if (!SvLEN(sv)) { /* make copy of shared string */
4887             const char *pvx = SvPVX_const(sv);
4888             const STRLEN len = SvCUR(sv);
4889             SvGROW(sv, len + 1);
4890             Move(pvx,SvPVX(sv),len,char);
4891             *SvEND(sv) = '\0';
4892         }
4893         SvFLAGS(sv) |= SVf_OOK;
4894         old_delta = 0;
4895     } else {
4896         SvOOK_offset(sv, old_delta);
4897     }
4898     SvLEN_set(sv, SvLEN(sv) - delta);
4899     SvCUR_set(sv, SvCUR(sv) - delta);
4900     SvPV_set(sv, SvPVX(sv) + delta);
4901
4902     p = (U8 *)SvPVX_const(sv);
4903
4904     delta += old_delta;
4905
4906 #ifdef DEBUGGING
4907     real_start = p - delta;
4908 #endif
4909
4910     assert(delta);
4911     if (delta < 0x100) {
4912         *--p = (U8) delta;
4913     } else {
4914         *--p = 0;
4915         p -= sizeof(STRLEN);
4916         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4917     }
4918
4919 #ifdef DEBUGGING
4920     /* Fill the preceding buffer with sentinals to verify that no-one is
4921        using it.  */
4922     while (p > real_start) {
4923         --p;
4924         *p = (U8)PTR2UV(p);
4925     }
4926 #endif
4927 }
4928
4929 /*
4930 =for apidoc sv_catpvn
4931
4932 Concatenates the string onto the end of the string which is in the SV.  The
4933 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4934 status set, then the bytes appended should be valid UTF-8.
4935 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4936
4937 =for apidoc sv_catpvn_flags
4938
4939 Concatenates the string onto the end of the string which is in the SV.  The
4940 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4941 status set, then the bytes appended should be valid UTF-8.
4942 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4943 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4944 in terms of this function.
4945
4946 =cut
4947 */
4948
4949 void
4950 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4951 {
4952     dVAR;
4953     STRLEN dlen;
4954     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4955
4956     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4957
4958     SvGROW(dsv, dlen + slen + 1);
4959     if (sstr == dstr)
4960         sstr = SvPVX_const(dsv);
4961     Move(sstr, SvPVX(dsv) + dlen, slen, char);
4962     SvCUR_set(dsv, SvCUR(dsv) + slen);
4963     *SvEND(dsv) = '\0';
4964     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4965     SvTAINT(dsv);
4966     if (flags & SV_SMAGIC)
4967         SvSETMAGIC(dsv);
4968 }
4969
4970 /*
4971 =for apidoc sv_catsv
4972
4973 Concatenates the string from SV C<ssv> onto the end of the string in
4974 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4975 not 'set' magic.  See C<sv_catsv_mg>.
4976
4977 =for apidoc sv_catsv_flags
4978
4979 Concatenates the string from SV C<ssv> onto the end of the string in
4980 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4981 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4982 and C<sv_catsv_nomg> are implemented in terms of this function.
4983
4984 =cut */
4985
4986 void
4987 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
4988 {
4989     dVAR;
4990  
4991     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4992
4993    if (ssv) {
4994         STRLEN slen;
4995         const char *spv = SvPV_flags_const(ssv, slen, flags);
4996         if (spv) {
4997             /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4998                 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4999                 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
5000                 get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
5001                 dsv->sv_flags doesn't have that bit set.
5002                 Andy Dougherty  12 Oct 2001
5003             */
5004             const I32 sutf8 = DO_UTF8(ssv);
5005             I32 dutf8;
5006
5007             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
5008                 mg_get(dsv);
5009             dutf8 = DO_UTF8(dsv);
5010
5011             if (dutf8 != sutf8) {
5012                 if (dutf8) {
5013                     /* Not modifying source SV, so taking a temporary copy. */
5014                     SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
5015
5016                     sv_utf8_upgrade(csv);
5017                     spv = SvPV_const(csv, slen);
5018                 }
5019                 else
5020                     /* Leave enough space for the cat that's about to happen */
5021                     sv_utf8_upgrade_flags_grow(dsv, 0, slen);
5022             }
5023             sv_catpvn_nomg(dsv, spv, slen);
5024         }
5025     }
5026     if (flags & SV_SMAGIC)
5027         SvSETMAGIC(dsv);
5028 }
5029
5030 /*
5031 =for apidoc sv_catpv
5032
5033 Concatenates the string onto the end of the string which is in the SV.
5034 If the SV has the UTF-8 status set, then the bytes appended should be
5035 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5036
5037 =cut */
5038
5039 void
5040 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
5041 {
5042     dVAR;
5043     register STRLEN len;
5044     STRLEN tlen;
5045     char *junk;
5046
5047     PERL_ARGS_ASSERT_SV_CATPV;
5048
5049     if (!ptr)
5050         return;
5051     junk = SvPV_force(sv, tlen);
5052     len = strlen(ptr);
5053     SvGROW(sv, tlen + len + 1);
5054     if (ptr == junk)
5055         ptr = SvPVX_const(sv);
5056     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5057     SvCUR_set(sv, SvCUR(sv) + len);
5058     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5059     SvTAINT(sv);
5060 }
5061
5062 /*
5063 =for apidoc sv_catpv_flags
5064
5065 Concatenates the string onto the end of the string which is in the SV.
5066 If the SV has the UTF-8 status set, then the bytes appended should
5067 be valid UTF-8.  If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get>
5068 on the SVs if appropriate, else not.
5069
5070 =cut
5071 */
5072
5073 void
5074 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5075 {
5076     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5077     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5078 }
5079
5080 /*
5081 =for apidoc sv_catpv_mg
5082
5083 Like C<sv_catpv>, but also handles 'set' magic.
5084
5085 =cut
5086 */
5087
5088 void
5089 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
5090 {
5091     PERL_ARGS_ASSERT_SV_CATPV_MG;
5092
5093     sv_catpv(sv,ptr);
5094     SvSETMAGIC(sv);
5095 }
5096
5097 /*
5098 =for apidoc newSV
5099
5100 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5101 bytes of preallocated string space the SV should have.  An extra byte for a
5102 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5103 space is allocated.)  The reference count for the new SV is set to 1.
5104
5105 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5106 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5107 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5108 L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
5109 modules supporting older perls.
5110
5111 =cut
5112 */
5113
5114 SV *
5115 Perl_newSV(pTHX_ const STRLEN len)
5116 {
5117     dVAR;
5118     register SV *sv;
5119
5120     new_SV(sv);
5121     if (len) {
5122         sv_upgrade(sv, SVt_PV);
5123         SvGROW(sv, len + 1);
5124     }
5125     return sv;
5126 }
5127 /*
5128 =for apidoc sv_magicext
5129
5130 Adds magic to an SV, upgrading it if necessary. Applies the
5131 supplied vtable and returns a pointer to the magic added.
5132
5133 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5134 In particular, you can add magic to SvREADONLY SVs, and add more than
5135 one instance of the same 'how'.
5136
5137 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5138 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5139 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5140 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5141
5142 (This is now used as a subroutine by C<sv_magic>.)
5143
5144 =cut
5145 */
5146 MAGIC * 
5147 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5148                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5149 {
5150     dVAR;
5151     MAGIC* mg;
5152
5153     PERL_ARGS_ASSERT_SV_MAGICEXT;
5154
5155     SvUPGRADE(sv, SVt_PVMG);
5156     Newxz(mg, 1, MAGIC);
5157     mg->mg_moremagic = SvMAGIC(sv);
5158     SvMAGIC_set(sv, mg);
5159
5160     /* Sometimes a magic contains a reference loop, where the sv and
5161        object refer to each other.  To prevent a reference loop that
5162        would prevent such objects being freed, we look for such loops
5163        and if we find one we avoid incrementing the object refcount.
5164
5165        Note we cannot do this to avoid self-tie loops as intervening RV must
5166        have its REFCNT incremented to keep it in existence.
5167
5168     */
5169     if (!obj || obj == sv ||
5170         how == PERL_MAGIC_arylen ||
5171         how == PERL_MAGIC_symtab ||
5172         (SvTYPE(obj) == SVt_PVGV &&
5173             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5174              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5175              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5176     {
5177         mg->mg_obj = obj;
5178     }
5179     else {
5180         mg->mg_obj = SvREFCNT_inc_simple(obj);
5181         mg->mg_flags |= MGf_REFCOUNTED;
5182     }
5183
5184     /* Normal self-ties simply pass a null object, and instead of
5185        using mg_obj directly, use the SvTIED_obj macro to produce a
5186        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5187        with an RV obj pointing to the glob containing the PVIO.  In
5188        this case, to avoid a reference loop, we need to weaken the
5189        reference.
5190     */
5191
5192     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5193         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5194     {
5195       sv_rvweaken(obj);
5196     }
5197
5198     mg->mg_type = how;
5199     mg->mg_len = namlen;
5200     if (name) {
5201         if (namlen > 0)
5202             mg->mg_ptr = savepvn(name, namlen);
5203         else if (namlen == HEf_SVKEY) {
5204             /* Yes, this is casting away const. This is only for the case of
5205                HEf_SVKEY. I think we need to document this aberation of the
5206                constness of the API, rather than making name non-const, as
5207                that change propagating outwards a long way.  */
5208             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5209         } else
5210             mg->mg_ptr = (char *) name;
5211     }
5212     mg->mg_virtual = (MGVTBL *) vtable;
5213
5214     mg_magical(sv);
5215     if (SvGMAGICAL(sv))
5216         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5217     return mg;
5218 }
5219
5220 /*
5221 =for apidoc sv_magic
5222
5223 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5224 then adds a new magic item of type C<how> to the head of the magic list.
5225
5226 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5227 handling of the C<name> and C<namlen> arguments.
5228
5229 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5230 to add more than one instance of the same 'how'.
5231
5232 =cut
5233 */
5234
5235 void
5236 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5237              const char *const name, const I32 namlen)
5238 {
5239     dVAR;
5240     const MGVTBL *vtable;
5241     MAGIC* mg;
5242
5243     PERL_ARGS_ASSERT_SV_MAGIC;
5244
5245 #ifdef PERL_OLD_COPY_ON_WRITE
5246     if (SvIsCOW(sv))
5247         sv_force_normal_flags(sv, 0);
5248 #endif
5249     if (SvREADONLY(sv)) {
5250         if (
5251             /* its okay to attach magic to shared strings; the subsequent
5252              * upgrade to PVMG will unshare the string */
5253             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5254
5255             && IN_PERL_RUNTIME
5256             && how != PERL_MAGIC_regex_global
5257             && how != PERL_MAGIC_bm
5258             && how != PERL_MAGIC_fm
5259             && how != PERL_MAGIC_sv
5260             && how != PERL_MAGIC_backref
5261            )
5262         {
5263             Perl_croak_no_modify(aTHX);
5264         }
5265     }
5266     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5267         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5268             /* sv_magic() refuses to add a magic of the same 'how' as an
5269                existing one
5270              */
5271             if (how == PERL_MAGIC_taint) {
5272                 mg->mg_len |= 1;
5273                 /* Any scalar which already had taint magic on which someone
5274                    (erroneously?) did SvIOK_on() or similar will now be
5275                    incorrectly sporting public "OK" flags.  */
5276                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5277             }
5278             return;
5279         }
5280     }
5281
5282     switch (how) {
5283     case PERL_MAGIC_sv:
5284         vtable = &PL_vtbl_sv;
5285         break;
5286     case PERL_MAGIC_overload:
5287         vtable = &PL_vtbl_amagic;
5288         break;
5289     case PERL_MAGIC_overload_elem:
5290         vtable = &PL_vtbl_amagicelem;
5291         break;
5292     case PERL_MAGIC_overload_table:
5293         vtable = &PL_vtbl_ovrld;
5294         break;
5295     case PERL_MAGIC_bm:
5296         vtable = &PL_vtbl_bm;
5297         break;
5298     case PERL_MAGIC_regdata:
5299         vtable = &PL_vtbl_regdata;
5300         break;
5301     case PERL_MAGIC_regdatum:
5302         vtable = &PL_vtbl_regdatum;
5303         break;
5304     case PERL_MAGIC_env:
5305         vtable = &PL_vtbl_env;
5306         break;
5307     case PERL_MAGIC_fm:
5308         vtable = &PL_vtbl_fm;
5309         break;
5310     case PERL_MAGIC_envelem:
5311         vtable = &PL_vtbl_envelem;
5312         break;
5313     case PERL_MAGIC_regex_global:
5314         vtable = &PL_vtbl_mglob;
5315         break;
5316     case PERL_MAGIC_isa:
5317         vtable = &PL_vtbl_isa;
5318         break;
5319     case PERL_MAGIC_isaelem:
5320         vtable = &PL_vtbl_isaelem;
5321         break;
5322     case PERL_MAGIC_nkeys:
5323         vtable = &PL_vtbl_nkeys;
5324         break;
5325     case PERL_MAGIC_dbfile:
5326         vtable = NULL;
5327         break;
5328     case PERL_MAGIC_dbline:
5329         vtable = &PL_vtbl_dbline;
5330         break;
5331 #ifdef USE_LOCALE_COLLATE
5332     case PERL_MAGIC_collxfrm:
5333         vtable = &PL_vtbl_collxfrm;
5334         break;
5335 #endif /* USE_LOCALE_COLLATE */
5336     case PERL_MAGIC_tied:
5337         vtable = &PL_vtbl_pack;
5338         break;
5339     case PERL_MAGIC_tiedelem:
5340     case PERL_MAGIC_tiedscalar:
5341         vtable = &PL_vtbl_packelem;
5342         break;
5343     case PERL_MAGIC_qr:
5344         vtable = &PL_vtbl_regexp;
5345         break;
5346     case PERL_MAGIC_sig:
5347         vtable = &PL_vtbl_sig;
5348         break;
5349     case PERL_MAGIC_sigelem:
5350         vtable = &PL_vtbl_sigelem;
5351         break;
5352     case PERL_MAGIC_taint:
5353         vtable = &PL_vtbl_taint;
5354         break;
5355     case PERL_MAGIC_uvar:
5356         vtable = &PL_vtbl_uvar;
5357         break;
5358     case PERL_MAGIC_vec:
5359         vtable = &PL_vtbl_vec;
5360         break;
5361     case PERL_MAGIC_arylen_p:
5362     case PERL_MAGIC_rhash:
5363     case PERL_MAGIC_symtab:
5364     case PERL_MAGIC_vstring:
5365     case PERL_MAGIC_checkcall:
5366         vtable = NULL;
5367         break;
5368     case PERL_MAGIC_utf8:
5369         vtable = &PL_vtbl_utf8;
5370         break;
5371     case PERL_MAGIC_substr:
5372         vtable = &PL_vtbl_substr;
5373         break;
5374     case PERL_MAGIC_defelem:
5375         vtable = &PL_vtbl_defelem;
5376         break;
5377     case PERL_MAGIC_arylen:
5378         vtable = &PL_vtbl_arylen;
5379         break;
5380     case PERL_MAGIC_pos:
5381         vtable = &PL_vtbl_pos;
5382         break;
5383     case PERL_MAGIC_backref:
5384         vtable = &PL_vtbl_backref;
5385         break;
5386     case PERL_MAGIC_hintselem:
5387         vtable = &PL_vtbl_hintselem;
5388         break;
5389     case PERL_MAGIC_hints:
5390         vtable = &PL_vtbl_hints;
5391         break;
5392     case PERL_MAGIC_ext:
5393         /* Reserved for use by extensions not perl internals.           */
5394         /* Useful for attaching extension internal data to perl vars.   */
5395         /* Note that multiple extensions may clash if magical scalars   */
5396         /* etc holding private data from one are passed to another.     */
5397         vtable = NULL;
5398         break;
5399     default:
5400         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5401     }
5402
5403     /* Rest of work is done else where */
5404     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5405
5406     switch (how) {
5407     case PERL_MAGIC_taint:
5408         mg->mg_len = 1;
5409         break;
5410     case PERL_MAGIC_ext:
5411     case PERL_MAGIC_dbfile:
5412         SvRMAGICAL_on(sv);
5413         break;
5414     }
5415 }
5416
5417 static int
5418 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5419 {
5420     MAGIC* mg;
5421     MAGIC** mgp;
5422
5423     assert(flags <= 1);
5424
5425     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5426         return 0;
5427     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5428     for (mg = *mgp; mg; mg = *mgp) {
5429         const MGVTBL* const virt = mg->mg_virtual;
5430         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5431             *mgp = mg->mg_moremagic;
5432             if (virt && virt->svt_free)
5433                 virt->svt_free(aTHX_ sv, mg);
5434             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5435                 if (mg->mg_len > 0)
5436                     Safefree(mg->mg_ptr);
5437                 else if (mg->mg_len == HEf_SVKEY)
5438                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5439                 else if (mg->mg_type == PERL_MAGIC_utf8)
5440                     Safefree(mg->mg_ptr);
5441             }
5442             if (mg->mg_flags & MGf_REFCOUNTED)
5443                 SvREFCNT_dec(mg->mg_obj);
5444             Safefree(mg);
5445         }
5446         else
5447             mgp = &mg->mg_moremagic;
5448     }
5449     if (SvMAGIC(sv)) {
5450         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5451             mg_magical(sv);     /*    else fix the flags now */
5452     }
5453     else {
5454         SvMAGICAL_off(sv);
5455         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5456     }
5457     return 0;
5458 }
5459
5460 /*
5461 =for apidoc sv_unmagic
5462
5463 Removes all magic of type C<type> from an SV.
5464
5465 =cut
5466 */
5467
5468 int
5469 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5470 {
5471     PERL_ARGS_ASSERT_SV_UNMAGIC;
5472     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5473 }
5474
5475 /*
5476 =for apidoc sv_unmagicext
5477
5478 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5479
5480 =cut
5481 */
5482
5483 int
5484 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5485 {
5486     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5487     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5488 }
5489
5490 /*
5491 =for apidoc sv_rvweaken
5492
5493 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5494 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5495 push a back-reference to this RV onto the array of backreferences
5496 associated with that magic. If the RV is magical, set magic will be
5497 called after the RV is cleared.
5498
5499 =cut
5500 */
5501
5502 SV *
5503 Perl_sv_rvweaken(pTHX_ SV *const sv)
5504 {
5505     SV *tsv;
5506
5507     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5508
5509     if (!SvOK(sv))  /* let undefs pass */
5510         return sv;
5511     if (!SvROK(sv))
5512         Perl_croak(aTHX_ "Can't weaken a nonreference");
5513     else if (SvWEAKREF(sv)) {
5514         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5515         return sv;
5516     }
5517     tsv = SvRV(sv);
5518     Perl_sv_add_backref(aTHX_ tsv, sv);
5519     SvWEAKREF_on(sv);
5520     SvREFCNT_dec(tsv);
5521     return sv;
5522 }
5523
5524 /* Give tsv backref magic if it hasn't already got it, then push a
5525  * back-reference to sv onto the array associated with the backref magic.
5526  *
5527  * As an optimisation, if there's only one backref and it's not an AV,
5528  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5529  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5530  * active.)
5531  *
5532  * If an HV's backref is stored in magic, it is moved back to HvAUX.
5533  */
5534
5535 /* A discussion about the backreferences array and its refcount:
5536  *
5537  * The AV holding the backreferences is pointed to either as the mg_obj of
5538  * PERL_MAGIC_backref, or in the specific case of a HV that has the hv_aux
5539  * structure, from the xhv_backreferences field. (A HV without hv_aux will
5540  * have the standard magic instead.) The array is created with a refcount
5541  * of 2. This means that if during global destruction the array gets
5542  * picked on before its parent to have its refcount decremented by the
5543  * random zapper, it won't actually be freed, meaning it's still there for
5544  * when its parent gets freed.
5545  *
5546  * When the parent SV is freed, the extra ref is killed by
5547  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5548  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5549  *
5550  * When a single backref SV is stored directly, it is not reference
5551  * counted.
5552  */
5553
5554 void
5555 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5556 {
5557     dVAR;
5558     SV **svp;
5559     AV *av = NULL;
5560     MAGIC *mg = NULL;
5561
5562     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5563
5564     /* find slot to store array or singleton backref */
5565
5566     if (SvTYPE(tsv) == SVt_PVHV) {
5567         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5568
5569         if (!*svp) {
5570             if ((mg = mg_find(tsv, PERL_MAGIC_backref))) {
5571                 /* Aha. They've got it stowed in magic instead.
5572                  * Move it back to xhv_backreferences */
5573                 *svp = mg->mg_obj;
5574                 /* Stop mg_free decreasing the reference count.  */
5575                 mg->mg_obj = NULL;
5576                 /* Stop mg_free even calling the destructor, given that
5577                    there's no AV to free up.  */
5578                 mg->mg_virtual = 0;
5579                 sv_unmagic(tsv, PERL_MAGIC_backref);
5580                 mg = NULL;
5581             }
5582         }
5583     } else {
5584         if (! ((mg =
5585             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5586         {
5587             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5588             mg = mg_find(tsv, PERL_MAGIC_backref);
5589         }
5590         svp = &(mg->mg_obj);
5591     }
5592
5593     /* create or retrieve the array */
5594
5595     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5596         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5597     ) {
5598         /* create array */
5599         av = newAV();
5600         AvREAL_off(av);
5601         SvREFCNT_inc_simple_void(av);
5602         /* av now has a refcnt of 2; see discussion above */
5603         if (*svp) {
5604             /* move single existing backref to the array */
5605             av_extend(av, 1);
5606             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5607         }
5608         *svp = (SV*)av;
5609         if (mg)
5610             mg->mg_flags |= MGf_REFCOUNTED;
5611     }
5612     else
5613         av = MUTABLE_AV(*svp);
5614
5615     if (!av) {
5616         /* optimisation: store single backref directly in HvAUX or mg_obj */
5617         *svp = sv;
5618         return;
5619     }
5620     /* push new backref */
5621     assert(SvTYPE(av) == SVt_PVAV);
5622     if (AvFILLp(av) >= AvMAX(av)) {
5623         av_extend(av, AvFILLp(av)+1);
5624     }
5625     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5626 }
5627
5628 /* delete a back-reference to ourselves from the backref magic associated
5629  * with the SV we point to.
5630  */
5631
5632 void
5633 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5634 {
5635     dVAR;
5636     SV **svp = NULL;
5637
5638     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5639
5640     if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
5641         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5642     }
5643     if (!svp || !*svp) {
5644         MAGIC *const mg
5645             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5646         svp =  mg ? &(mg->mg_obj) : NULL;
5647     }
5648
5649     if (!svp || !*svp)
5650         Perl_croak(aTHX_ "panic: del_backref");
5651
5652     if (SvTYPE(*svp) == SVt_PVAV) {
5653 #ifdef DEBUGGING
5654         int count = 1;
5655 #endif
5656         AV * const av = (AV*)*svp;
5657         SSize_t fill;
5658         assert(!SvIS_FREED(av));
5659         fill = AvFILLp(av);
5660         assert(fill > -1);
5661         svp = AvARRAY(av);
5662         /* for an SV with N weak references to it, if all those
5663          * weak refs are deleted, then sv_del_backref will be called
5664          * N times and O(N^2) compares will be done within the backref
5665          * array. To ameliorate this potential slowness, we:
5666          * 1) make sure this code is as tight as possible;
5667          * 2) when looking for SV, look for it at both the head and tail of the
5668          *    array first before searching the rest, since some create/destroy
5669          *    patterns will cause the backrefs to be freed in order.
5670          */
5671         if (*svp == sv) {
5672             AvARRAY(av)++;
5673             AvMAX(av)--;
5674         }
5675         else {
5676             SV **p = &svp[fill];
5677             SV *const topsv = *p;
5678             if (topsv != sv) {
5679 #ifdef DEBUGGING
5680                 count = 0;
5681 #endif
5682                 while (--p > svp) {
5683                     if (*p == sv) {
5684                         /* We weren't the last entry.
5685                            An unordered list has this property that you
5686                            can take the last element off the end to fill
5687                            the hole, and it's still an unordered list :-)
5688                         */
5689                         *p = topsv;
5690 #ifdef DEBUGGING
5691                         count++;
5692 #else
5693                         break; /* should only be one */
5694 #endif
5695                     }
5696                 }
5697             }
5698         }
5699         assert(count ==1);
5700         AvFILLp(av) = fill-1;
5701     }
5702     else {
5703         /* optimisation: only a single backref, stored directly */
5704         if (*svp != sv)
5705             Perl_croak(aTHX_ "panic: del_backref");
5706         *svp = NULL;
5707     }
5708
5709 }
5710
5711 void
5712 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5713 {
5714     SV **svp;
5715     SV **last;
5716     bool is_array;
5717
5718     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5719
5720     if (!av)
5721         return;
5722
5723     /* after multiple passes through Perl_sv_clean_all() for a thinngy
5724      * that has badly leaked, the backref array may have gotten freed,
5725      * since we only protect it against 1 round of cleanup */
5726     if (SvIS_FREED(av)) {
5727         if (PL_in_clean_all) /* All is fair */
5728             return;
5729         Perl_croak(aTHX_
5730                    "panic: magic_killbackrefs (freed backref AV/SV)");
5731     }
5732
5733
5734     is_array = (SvTYPE(av) == SVt_PVAV);
5735     if (is_array) {
5736         assert(!SvIS_FREED(av));
5737         svp = AvARRAY(av);
5738         if (svp)
5739             last = svp + AvFILLp(av);
5740     }
5741     else {
5742         /* optimisation: only a single backref, stored directly */
5743         svp = (SV**)&av;
5744         last = svp;
5745     }
5746
5747     if (svp) {
5748         while (svp <= last) {
5749             if (*svp) {
5750                 SV *const referrer = *svp;
5751                 if (SvWEAKREF(referrer)) {
5752                     /* XXX Should we check that it hasn't changed? */
5753                     assert(SvROK(referrer));
5754                     SvRV_set(referrer, 0);
5755                     SvOK_off(referrer);
5756                     SvWEAKREF_off(referrer);
5757                     SvSETMAGIC(referrer);
5758                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5759                            SvTYPE(referrer) == SVt_PVLV) {
5760                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5761                     /* You lookin' at me?  */
5762                     assert(GvSTASH(referrer));
5763                     assert(GvSTASH(referrer) == (const HV *)sv);
5764                     GvSTASH(referrer) = 0;
5765                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5766                            SvTYPE(referrer) == SVt_PVFM) {
5767                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5768                         /* You lookin' at me?  */
5769                         assert(CvSTASH(referrer));
5770                         assert(CvSTASH(referrer) == (const HV *)sv);
5771                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5772                     }
5773                     else {
5774                         assert(SvTYPE(sv) == SVt_PVGV);
5775                         /* You lookin' at me?  */
5776                         assert(CvGV(referrer));
5777                         assert(CvGV(referrer) == (const GV *)sv);
5778                         anonymise_cv_maybe(MUTABLE_GV(sv),
5779                                                 MUTABLE_CV(referrer));
5780                     }
5781
5782                 } else {
5783                     Perl_croak(aTHX_
5784                                "panic: magic_killbackrefs (flags=%"UVxf")",
5785                                (UV)SvFLAGS(referrer));
5786                 }
5787
5788                 if (is_array)
5789                     *svp = NULL;
5790             }
5791             svp++;
5792         }
5793     }
5794     if (is_array) {
5795         AvFILLp(av) = -1;
5796         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5797     }
5798     return;
5799 }
5800
5801 /*
5802 =for apidoc sv_insert
5803
5804 Inserts a string at the specified offset/length within the SV. Similar to
5805 the Perl substr() function. Handles get magic.
5806
5807 =for apidoc sv_insert_flags
5808
5809 Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5810
5811 =cut
5812 */
5813
5814 void
5815 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5816 {
5817     dVAR;
5818     register char *big;
5819     register char *mid;
5820     register char *midend;
5821     register char *bigend;
5822     register I32 i;
5823     STRLEN curlen;
5824
5825     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5826
5827     if (!bigstr)
5828         Perl_croak(aTHX_ "Can't modify non-existent substring");
5829     SvPV_force_flags(bigstr, curlen, flags);
5830     (void)SvPOK_only_UTF8(bigstr);
5831     if (offset + len > curlen) {
5832         SvGROW(bigstr, offset+len+1);
5833         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5834         SvCUR_set(bigstr, offset+len);
5835     }
5836
5837     SvTAINT(bigstr);
5838     i = littlelen - len;
5839     if (i > 0) {                        /* string might grow */
5840         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5841         mid = big + offset + len;
5842         midend = bigend = big + SvCUR(bigstr);
5843         bigend += i;
5844         *bigend = '\0';
5845         while (midend > mid)            /* shove everything down */
5846             *--bigend = *--midend;
5847         Move(little,big+offset,littlelen,char);
5848         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5849         SvSETMAGIC(bigstr);
5850         return;
5851     }
5852     else if (i == 0) {
5853         Move(little,SvPVX(bigstr)+offset,len,char);
5854         SvSETMAGIC(bigstr);
5855         return;
5856     }
5857
5858     big = SvPVX(bigstr);
5859     mid = big + offset;
5860     midend = mid + len;
5861     bigend = big + SvCUR(bigstr);
5862
5863     if (midend > bigend)
5864         Perl_croak(aTHX_ "panic: sv_insert");
5865
5866     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5867         if (littlelen) {
5868             Move(little, mid, littlelen,char);
5869             mid += littlelen;
5870         }
5871         i = bigend - midend;
5872         if (i > 0) {
5873             Move(midend, mid, i,char);
5874             mid += i;
5875         }
5876         *mid = '\0';
5877         SvCUR_set(bigstr, mid - big);
5878     }
5879     else if ((i = mid - big)) { /* faster from front */
5880         midend -= littlelen;
5881         mid = midend;
5882         Move(big, midend - i, i, char);
5883         sv_chop(bigstr,midend-i);
5884         if (littlelen)
5885             Move(little, mid, littlelen,char);
5886     }
5887     else if (littlelen) {
5888         midend -= littlelen;
5889         sv_chop(bigstr,midend);
5890         Move(little,midend,littlelen,char);
5891     }
5892     else {
5893         sv_chop(bigstr,midend);
5894     }
5895     SvSETMAGIC(bigstr);
5896 }
5897
5898 /*
5899 =for apidoc sv_replace
5900
5901 Make the first argument a copy of the second, then delete the original.
5902 The target SV physically takes over ownership of the body of the source SV
5903 and inherits its flags; however, the target keeps any magic it owns,
5904 and any magic in the source is discarded.
5905 Note that this is a rather specialist SV copying operation; most of the
5906 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5907
5908 =cut
5909 */
5910
5911 void
5912 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5913 {
5914     dVAR;
5915     const U32 refcnt = SvREFCNT(sv);
5916
5917     PERL_ARGS_ASSERT_SV_REPLACE;
5918
5919     SV_CHECK_THINKFIRST_COW_DROP(sv);
5920     if (SvREFCNT(nsv) != 1) {
5921         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5922                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5923     }
5924     if (SvMAGICAL(sv)) {
5925         if (SvMAGICAL(nsv))
5926             mg_free(nsv);
5927         else
5928             sv_upgrade(nsv, SVt_PVMG);
5929         SvMAGIC_set(nsv, SvMAGIC(sv));
5930         SvFLAGS(nsv) |= SvMAGICAL(sv);
5931         SvMAGICAL_off(sv);
5932         SvMAGIC_set(sv, NULL);
5933     }
5934     SvREFCNT(sv) = 0;
5935     sv_clear(sv);
5936     assert(!SvREFCNT(sv));
5937 #ifdef DEBUG_LEAKING_SCALARS
5938     sv->sv_flags  = nsv->sv_flags;
5939     sv->sv_any    = nsv->sv_any;
5940     sv->sv_refcnt = nsv->sv_refcnt;
5941     sv->sv_u      = nsv->sv_u;
5942 #else
5943     StructCopy(nsv,sv,SV);
5944 #endif
5945     if(SvTYPE(sv) == SVt_IV) {
5946         SvANY(sv)
5947             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5948     }
5949         
5950
5951 #ifdef PERL_OLD_COPY_ON_WRITE
5952     if (SvIsCOW_normal(nsv)) {
5953         /* We need to follow the pointers around the loop to make the
5954            previous SV point to sv, rather than nsv.  */
5955         SV *next;
5956         SV *current = nsv;
5957         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5958             assert(next);
5959             current = next;
5960             assert(SvPVX_const(current) == SvPVX_const(nsv));
5961         }
5962         /* Make the SV before us point to the SV after us.  */
5963         if (DEBUG_C_TEST) {
5964             PerlIO_printf(Perl_debug_log, "previous is\n");
5965             sv_dump(current);
5966             PerlIO_printf(Perl_debug_log,
5967                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5968                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5969         }
5970         SV_COW_NEXT_SV_SET(current, sv);
5971     }
5972 #endif
5973     SvREFCNT(sv) = refcnt;
5974     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5975     SvREFCNT(nsv) = 0;
5976     del_SV(nsv);
5977 }
5978
5979 /* We're about to free a GV which has a CV that refers back to us.
5980  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5981  * field) */
5982
5983 STATIC void
5984 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5985 {
5986     char *stash;
5987     SV *gvname;
5988     GV *anongv;
5989
5990     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5991
5992     /* be assertive! */
5993     assert(SvREFCNT(gv) == 0);
5994     assert(isGV(gv) && isGV_with_GP(gv));
5995     assert(GvGP(gv));
5996     assert(!CvANON(cv));
5997     assert(CvGV(cv) == gv);
5998
5999     /* will the CV shortly be freed by gp_free() ? */
6000     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6001         SvANY(cv)->xcv_gv = NULL;
6002         return;
6003     }
6004
6005     /* if not, anonymise: */
6006     stash  = GvSTASH(gv) && HvNAME(GvSTASH(gv))
6007               ? HvENAME(GvSTASH(gv)) : NULL;
6008     gvname = Perl_newSVpvf(aTHX_ "%s::__ANON__",
6009                                         stash ? stash : "__ANON__");
6010     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6011     SvREFCNT_dec(gvname);
6012
6013     CvANON_on(cv);
6014     CvCVGV_RC_on(cv);
6015     SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6016 }
6017
6018
6019 /*
6020 =for apidoc sv_clear
6021
6022 Clear an SV: call any destructors, free up any memory used by the body,
6023 and free the body itself. The SV's head is I<not> freed, although
6024 its type is set to all 1's so that it won't inadvertently be assumed
6025 to be live during global destruction etc.
6026 This function should only be called when REFCNT is zero. Most of the time
6027 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6028 instead.
6029
6030 =cut
6031 */
6032
6033 void
6034 Perl_sv_clear(pTHX_ SV *const orig_sv)
6035 {
6036     dVAR;
6037     HV *stash;
6038     U32 type;
6039     const struct body_details *sv_type_details;
6040     SV* iter_sv = NULL;
6041     SV* next_sv = NULL;
6042     register SV *sv = orig_sv;
6043
6044     PERL_ARGS_ASSERT_SV_CLEAR;
6045
6046     /* within this loop, sv is the SV currently being freed, and
6047      * iter_sv is the most recent AV or whatever that's being iterated
6048      * over to provide more SVs */
6049
6050     while (sv) {
6051
6052         type = SvTYPE(sv);
6053
6054         assert(SvREFCNT(sv) == 0);
6055         assert(SvTYPE(sv) != SVTYPEMASK);
6056
6057         if (type <= SVt_IV) {
6058             /* See the comment in sv.h about the collusion between this
6059              * early return and the overloading of the NULL slots in the
6060              * size table.  */
6061             if (SvROK(sv))
6062                 goto free_rv;
6063             SvFLAGS(sv) &= SVf_BREAK;
6064             SvFLAGS(sv) |= SVTYPEMASK;
6065             goto free_head;
6066         }
6067
6068         if (SvOBJECT(sv)) {
6069             if (!curse(sv, 1)) goto get_next_sv;
6070         }
6071         if (type >= SVt_PVMG) {
6072             /* Free back-references before magic, in case the magic calls
6073              * Perl code that has weak references to sv. */
6074             if (type == SVt_PVHV)
6075                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6076             if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6077                 SvREFCNT_dec(SvOURSTASH(sv));
6078             } else if (SvMAGIC(sv)) {
6079                 /* Free back-references before other types of magic. */
6080                 sv_unmagic(sv, PERL_MAGIC_backref);
6081                 mg_free(sv);
6082             }
6083             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6084                 SvREFCNT_dec(SvSTASH(sv));
6085         }
6086         switch (type) {
6087             /* case SVt_BIND: */
6088         case SVt_PVIO:
6089             if (IoIFP(sv) &&
6090                 IoIFP(sv) != PerlIO_stdin() &&
6091                 IoIFP(sv) != PerlIO_stdout() &&
6092                 IoIFP(sv) != PerlIO_stderr() &&
6093                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6094             {
6095                 io_close(MUTABLE_IO(sv), FALSE);
6096             }
6097             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6098                 PerlDir_close(IoDIRP(sv));
6099             IoDIRP(sv) = (DIR*)NULL;
6100             Safefree(IoTOP_NAME(sv));
6101             Safefree(IoFMT_NAME(sv));
6102             Safefree(IoBOTTOM_NAME(sv));
6103             goto freescalar;
6104         case SVt_REGEXP:
6105             /* FIXME for plugins */
6106             pregfree2((REGEXP*) sv);
6107             goto freescalar;
6108         case SVt_PVCV:
6109         case SVt_PVFM:
6110             cv_undef(MUTABLE_CV(sv));
6111             /* If we're in a stash, we don't own a reference to it.
6112              * However it does have a back reference to us, which needs to
6113              * be cleared.  */
6114             if ((stash = CvSTASH(sv)))
6115                 sv_del_backref(MUTABLE_SV(stash), sv);
6116             goto freescalar;
6117         case SVt_PVHV:
6118             if (PL_last_swash_hv == (const HV *)sv) {
6119                 PL_last_swash_hv = NULL;
6120             }
6121             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6122             break;
6123         case SVt_PVAV:
6124             {
6125                 AV* av = MUTABLE_AV(sv);
6126                 if (PL_comppad == av) {
6127                     PL_comppad = NULL;
6128                     PL_curpad = NULL;
6129                 }
6130                 if (AvREAL(av) && AvFILLp(av) > -1) {
6131                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6132                     /* save old iter_sv in top-most slot of AV,
6133                      * and pray that it doesn't get wiped in the meantime */
6134                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6135                     iter_sv = sv;
6136                     goto get_next_sv; /* process this new sv */
6137                 }
6138                 Safefree(AvALLOC(av));
6139             }
6140
6141             break;
6142         case SVt_PVLV:
6143             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6144                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6145                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6146                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6147             }
6148             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6149                 SvREFCNT_dec(LvTARG(sv));
6150         case SVt_PVGV:
6151             if (isGV_with_GP(sv)) {
6152                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6153                    && HvENAME_get(stash))
6154                     mro_method_changed_in(stash);
6155                 gp_free(MUTABLE_GV(sv));
6156                 if (GvNAME_HEK(sv))
6157                     unshare_hek(GvNAME_HEK(sv));
6158                 /* If we're in a stash, we don't own a reference to it.
6159                  * However it does have a back reference to us, which
6160                  * needs to be cleared.  */
6161                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6162                         sv_del_backref(MUTABLE_SV(stash), sv);
6163             }
6164             /* FIXME. There are probably more unreferenced pointers to SVs
6165              * in the interpreter struct that we should check and tidy in
6166              * a similar fashion to this:  */
6167             if ((const GV *)sv == PL_last_in_gv)
6168                 PL_last_in_gv = NULL;
6169         case SVt_PVMG:
6170         case SVt_PVNV:
6171         case SVt_PVIV:
6172         case SVt_PV:
6173           freescalar:
6174             /* Don't bother with SvOOK_off(sv); as we're only going to
6175              * free it.  */
6176             if (SvOOK(sv)) {
6177                 STRLEN offset;
6178                 SvOOK_offset(sv, offset);
6179                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6180                 /* Don't even bother with turning off the OOK flag.  */
6181             }
6182             if (SvROK(sv)) {
6183             free_rv:
6184                 {
6185                     SV * const target = SvRV(sv);
6186                     if (SvWEAKREF(sv))
6187                         sv_del_backref(target, sv);
6188                     else
6189                         next_sv = target;
6190                 }
6191             }
6192 #ifdef PERL_OLD_COPY_ON_WRITE
6193             else if (SvPVX_const(sv)
6194                      && !(SvTYPE(sv) == SVt_PVIO
6195                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6196             {
6197                 if (SvIsCOW(sv)) {
6198                     if (DEBUG_C_TEST) {
6199                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6200                         sv_dump(sv);
6201                     }
6202                     if (SvLEN(sv)) {
6203                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6204                     } else {
6205                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6206                     }
6207
6208                     SvFAKE_off(sv);
6209                 } else if (SvLEN(sv)) {
6210                     Safefree(SvPVX_const(sv));
6211                 }
6212             }
6213 #else
6214             else if (SvPVX_const(sv) && SvLEN(sv)
6215                      && !(SvTYPE(sv) == SVt_PVIO
6216                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6217                 Safefree(SvPVX_mutable(sv));
6218             else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
6219                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6220                 SvFAKE_off(sv);
6221             }
6222 #endif
6223             break;
6224         case SVt_NV:
6225             break;
6226         }
6227
6228       free_body:
6229
6230         SvFLAGS(sv) &= SVf_BREAK;
6231         SvFLAGS(sv) |= SVTYPEMASK;
6232
6233         sv_type_details = bodies_by_type + type;
6234         if (sv_type_details->arena) {
6235             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6236                      &PL_body_roots[type]);
6237         }
6238         else if (sv_type_details->body_size) {
6239             safefree(SvANY(sv));
6240         }
6241
6242       free_head:
6243         /* caller is responsible for freeing the head of the original sv */
6244         if (sv != orig_sv && !SvREFCNT(sv))
6245             del_SV(sv);
6246
6247         /* grab and free next sv, if any */
6248       get_next_sv:
6249         while (1) {
6250             sv = NULL;
6251             if (next_sv) {
6252                 sv = next_sv;
6253                 next_sv = NULL;
6254             }
6255             else if (!iter_sv) {
6256                 break;
6257             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6258                 AV *const av = (AV*)iter_sv;
6259                 if (AvFILLp(av) > -1) {
6260                     sv = AvARRAY(av)[AvFILLp(av)--];
6261                 }
6262                 else { /* no more elements of current AV to free */
6263                     sv = iter_sv;
6264                     type = SvTYPE(sv);
6265                     /* restore previous value, squirrelled away */
6266                     iter_sv = AvARRAY(av)[AvMAX(av)];
6267                     Safefree(AvALLOC(av));
6268                     goto free_body;
6269                 }
6270             }
6271
6272             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6273
6274             if (!sv)
6275                 continue;
6276             if (!SvREFCNT(sv)) {
6277                 sv_free(sv);
6278                 continue;
6279             }
6280             if (--(SvREFCNT(sv)))
6281                 continue;
6282 #ifdef DEBUGGING
6283             if (SvTEMP(sv)) {
6284                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6285                          "Attempt to free temp prematurely: SV 0x%"UVxf
6286                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6287                 continue;
6288             }
6289 #endif
6290             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6291                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6292                 SvREFCNT(sv) = (~(U32)0)/2;
6293                 continue;
6294             }
6295             break;
6296         } /* while 1 */
6297
6298     } /* while sv */
6299 }
6300
6301 /* This routine curses the sv itself, not the object referenced by sv. So
6302    sv does not have to be ROK. */
6303
6304 static bool
6305 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6306     dVAR;
6307
6308     PERL_ARGS_ASSERT_CURSE;
6309     assert(SvOBJECT(sv));
6310
6311     if (PL_defstash &&  /* Still have a symbol table? */
6312         SvDESTROYABLE(sv))
6313     {
6314         dSP;
6315         HV* stash;
6316         do {
6317             CV* destructor;
6318             stash = SvSTASH(sv);
6319             destructor = StashHANDLER(stash,DESTROY);
6320             if (destructor
6321                 /* A constant subroutine can have no side effects, so
6322                    don't bother calling it.  */
6323                 && !CvCONST(destructor)
6324                 /* Don't bother calling an empty destructor */
6325                 && (CvISXSUB(destructor)
6326                 || (CvSTART(destructor)
6327                     && (CvSTART(destructor)->op_next->op_type
6328                                         != OP_LEAVESUB))))
6329             {
6330                 SV* const tmpref = newRV(sv);
6331                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6332                 ENTER;
6333                 PUSHSTACKi(PERLSI_DESTROY);
6334                 EXTEND(SP, 2);
6335                 PUSHMARK(SP);
6336                 PUSHs(tmpref);
6337                 PUTBACK;
6338                 call_sv(MUTABLE_SV(destructor),
6339                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6340                 POPSTACK;
6341                 SPAGAIN;
6342                 LEAVE;
6343                 if(SvREFCNT(tmpref) < 2) {
6344                     /* tmpref is not kept alive! */
6345                     SvREFCNT(sv)--;
6346                     SvRV_set(tmpref, NULL);
6347                     SvROK_off(tmpref);
6348                 }
6349                 SvREFCNT_dec(tmpref);
6350             }
6351         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6352
6353
6354         if (check_refcnt && SvREFCNT(sv)) {
6355             if (PL_in_clean_objs)
6356                 Perl_croak(aTHX_
6357                     "DESTROY created new reference to dead object '%s'",
6358                     HvNAME_get(stash));
6359             /* DESTROY gave object new lease on life */
6360             return FALSE;
6361         }
6362     }
6363
6364     if (SvOBJECT(sv)) {
6365         SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6366         SvOBJECT_off(sv);       /* Curse the object. */
6367         if (SvTYPE(sv) != SVt_PVIO)
6368             --PL_sv_objcount;/* XXX Might want something more general */
6369     }
6370     return TRUE;
6371 }
6372
6373 /*
6374 =for apidoc sv_newref
6375
6376 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
6377 instead.
6378
6379 =cut
6380 */
6381
6382 SV *
6383 Perl_sv_newref(pTHX_ SV *const sv)
6384 {
6385     PERL_UNUSED_CONTEXT;
6386     if (sv)
6387         (SvREFCNT(sv))++;
6388     return sv;
6389 }
6390
6391 /*
6392 =for apidoc sv_free
6393
6394 Decrement an SV's reference count, and if it drops to zero, call
6395 C<sv_clear> to invoke destructors and free up any memory used by
6396 the body; finally, deallocate the SV's head itself.
6397 Normally called via a wrapper macro C<SvREFCNT_dec>.
6398
6399 =cut
6400 */
6401
6402 void
6403 Perl_sv_free(pTHX_ SV *const sv)
6404 {
6405     dVAR;
6406     if (!sv)
6407         return;
6408     if (SvREFCNT(sv) == 0) {
6409         if (SvFLAGS(sv) & SVf_BREAK)
6410             /* this SV's refcnt has been artificially decremented to
6411              * trigger cleanup */
6412             return;
6413         if (PL_in_clean_all) /* All is fair */
6414             return;
6415         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6416             /* make sure SvREFCNT(sv)==0 happens very seldom */
6417             SvREFCNT(sv) = (~(U32)0)/2;
6418             return;
6419         }
6420         if (ckWARN_d(WARN_INTERNAL)) {
6421 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6422             Perl_dump_sv_child(aTHX_ sv);
6423 #else
6424   #ifdef DEBUG_LEAKING_SCALARS
6425             sv_dump(sv);
6426   #endif
6427 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6428             if (PL_warnhook == PERL_WARNHOOK_FATAL
6429                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6430                 /* Don't let Perl_warner cause us to escape our fate:  */
6431                 abort();
6432             }
6433 #endif
6434             /* This may not return:  */
6435             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6436                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6437                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6438 #endif
6439         }
6440 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6441         abort();
6442 #endif
6443         return;
6444     }
6445     if (--(SvREFCNT(sv)) > 0)
6446         return;
6447     Perl_sv_free2(aTHX_ sv);
6448 }
6449
6450 void
6451 Perl_sv_free2(pTHX_ SV *const sv)
6452 {
6453     dVAR;
6454
6455     PERL_ARGS_ASSERT_SV_FREE2;
6456
6457 #ifdef DEBUGGING
6458     if (SvTEMP(sv)) {
6459         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6460                          "Attempt to free temp prematurely: SV 0x%"UVxf
6461                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6462         return;
6463     }
6464 #endif
6465     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6466         /* make sure SvREFCNT(sv)==0 happens very seldom */
6467         SvREFCNT(sv) = (~(U32)0)/2;
6468         return;
6469     }
6470     sv_clear(sv);
6471     if (! SvREFCNT(sv))
6472         del_SV(sv);
6473 }
6474
6475 /*
6476 =for apidoc sv_len
6477
6478 Returns the length of the string in the SV. Handles magic and type
6479 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6480
6481 =cut
6482 */
6483
6484 STRLEN
6485 Perl_sv_len(pTHX_ register SV *const sv)
6486 {
6487     STRLEN len;
6488
6489     if (!sv)
6490         return 0;
6491
6492     if (SvGMAGICAL(sv))
6493         len = mg_length(sv);
6494     else
6495         (void)SvPV_const(sv, len);
6496     return len;
6497 }
6498
6499 /*
6500 =for apidoc sv_len_utf8
6501
6502 Returns the number of characters in the string in an SV, counting wide
6503 UTF-8 bytes as a single character. Handles magic and type coercion.
6504
6505 =cut
6506 */
6507
6508 /*
6509  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6510  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6511  * (Note that the mg_len is not the length of the mg_ptr field.
6512  * This allows the cache to store the character length of the string without
6513  * needing to malloc() extra storage to attach to the mg_ptr.)
6514  *
6515  */
6516
6517 STRLEN
6518 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6519 {
6520     if (!sv)
6521         return 0;
6522
6523     if (SvGMAGICAL(sv))
6524         return mg_length(sv);
6525     else
6526     {
6527         STRLEN len;
6528         const U8 *s = (U8*)SvPV_const(sv, len);
6529
6530         if (PL_utf8cache) {
6531             STRLEN ulen;
6532             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6533
6534             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6535                 if (mg->mg_len != -1)
6536                     ulen = mg->mg_len;
6537                 else {
6538                     /* We can use the offset cache for a headstart.
6539                        The longer value is stored in the first pair.  */
6540                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6541
6542                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6543                                                        s + len);
6544                 }
6545                 
6546                 if (PL_utf8cache < 0) {
6547                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6548                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6549                 }
6550             }
6551             else {
6552                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6553                 utf8_mg_len_cache_update(sv, &mg, ulen);
6554             }
6555             return ulen;
6556         }
6557         return Perl_utf8_length(aTHX_ s, s + len);
6558     }
6559 }
6560
6561 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6562    offset.  */
6563 static STRLEN
6564 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6565                       STRLEN *const uoffset_p, bool *const at_end)
6566 {
6567     const U8 *s = start;
6568     STRLEN uoffset = *uoffset_p;
6569
6570     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6571
6572     while (s < send && uoffset) {
6573         --uoffset;
6574         s += UTF8SKIP(s);
6575     }
6576     if (s == send) {
6577         *at_end = TRUE;
6578     }
6579     else if (s > send) {
6580         *at_end = TRUE;
6581         /* This is the existing behaviour. Possibly it should be a croak, as
6582            it's actually a bounds error  */
6583         s = send;
6584     }
6585     *uoffset_p -= uoffset;
6586     return s - start;
6587 }
6588
6589 /* Given the length of the string in both bytes and UTF-8 characters, decide
6590    whether to walk forwards or backwards to find the byte corresponding to
6591    the passed in UTF-8 offset.  */
6592 static STRLEN
6593 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6594                     STRLEN uoffset, const STRLEN uend)
6595 {
6596     STRLEN backw = uend - uoffset;
6597
6598     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6599
6600     if (uoffset < 2 * backw) {
6601         /* The assumption is that going forwards is twice the speed of going
6602            forward (that's where the 2 * backw comes from).
6603            (The real figure of course depends on the UTF-8 data.)  */
6604         const U8 *s = start;
6605
6606         while (s < send && uoffset--)
6607             s += UTF8SKIP(s);
6608         assert (s <= send);
6609         if (s > send)
6610             s = send;
6611         return s - start;
6612     }
6613
6614     while (backw--) {
6615         send--;
6616         while (UTF8_IS_CONTINUATION(*send))
6617             send--;
6618     }
6619     return send - start;
6620 }
6621
6622 /* For the string representation of the given scalar, find the byte
6623    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6624    give another position in the string, *before* the sought offset, which
6625    (which is always true, as 0, 0 is a valid pair of positions), which should
6626    help reduce the amount of linear searching.
6627    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6628    will be used to reduce the amount of linear searching. The cache will be
6629    created if necessary, and the found value offered to it for update.  */
6630 static STRLEN
6631 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6632                     const U8 *const send, STRLEN uoffset,
6633                     STRLEN uoffset0, STRLEN boffset0)
6634 {
6635     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6636     bool found = FALSE;
6637     bool at_end = FALSE;
6638
6639     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6640
6641     assert (uoffset >= uoffset0);
6642
6643     if (!uoffset)
6644         return 0;
6645
6646     if (!SvREADONLY(sv)
6647         && PL_utf8cache
6648         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6649                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6650         if ((*mgp)->mg_ptr) {
6651             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6652             if (cache[0] == uoffset) {
6653                 /* An exact match. */
6654                 return cache[1];
6655             }
6656             if (cache[2] == uoffset) {
6657                 /* An exact match. */
6658                 return cache[3];
6659             }
6660
6661             if (cache[0] < uoffset) {
6662                 /* The cache already knows part of the way.   */
6663                 if (cache[0] > uoffset0) {
6664                     /* The cache knows more than the passed in pair  */
6665                     uoffset0 = cache[0];
6666                     boffset0 = cache[1];
6667                 }
6668                 if ((*mgp)->mg_len != -1) {
6669                     /* And we know the end too.  */
6670                     boffset = boffset0
6671                         + sv_pos_u2b_midway(start + boffset0, send,
6672                                               uoffset - uoffset0,
6673                                               (*mgp)->mg_len - uoffset0);
6674                 } else {
6675                     uoffset -= uoffset0;
6676                     boffset = boffset0
6677                         + sv_pos_u2b_forwards(start + boffset0,
6678                                               send, &uoffset, &at_end);
6679                     uoffset += uoffset0;
6680                 }
6681             }
6682             else if (cache[2] < uoffset) {
6683                 /* We're between the two cache entries.  */
6684                 if (cache[2] > uoffset0) {
6685                     /* and the cache knows more than the passed in pair  */
6686                     uoffset0 = cache[2];
6687                     boffset0 = cache[3];
6688                 }
6689
6690                 boffset = boffset0
6691                     + sv_pos_u2b_midway(start + boffset0,
6692                                           start + cache[1],
6693                                           uoffset - uoffset0,
6694                                           cache[0] - uoffset0);
6695             } else {
6696                 boffset = boffset0
6697                     + sv_pos_u2b_midway(start + boffset0,
6698                                           start + cache[3],
6699                                           uoffset - uoffset0,
6700                                           cache[2] - uoffset0);
6701             }
6702             found = TRUE;
6703         }
6704         else if ((*mgp)->mg_len != -1) {
6705             /* If we can take advantage of a passed in offset, do so.  */
6706             /* In fact, offset0 is either 0, or less than offset, so don't
6707                need to worry about the other possibility.  */
6708             boffset = boffset0
6709                 + sv_pos_u2b_midway(start + boffset0, send,
6710                                       uoffset - uoffset0,
6711                                       (*mgp)->mg_len - uoffset0);
6712             found = TRUE;
6713         }
6714     }
6715
6716     if (!found || PL_utf8cache < 0) {
6717         STRLEN real_boffset;
6718         uoffset -= uoffset0;
6719         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6720                                                       send, &uoffset, &at_end);
6721         uoffset += uoffset0;
6722
6723         if (found && PL_utf8cache < 0)
6724             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6725                                        real_boffset, sv);
6726         boffset = real_boffset;
6727     }
6728
6729     if (PL_utf8cache) {
6730         if (at_end)
6731             utf8_mg_len_cache_update(sv, mgp, uoffset);
6732         else
6733             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6734     }
6735     return boffset;
6736 }
6737
6738
6739 /*
6740 =for apidoc sv_pos_u2b_flags
6741
6742 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6743 the start of the string, to a count of the equivalent number of bytes; if
6744 lenp is non-zero, it does the same to lenp, but this time starting from
6745 the offset, rather than from the start of the string. Handles type coercion.
6746 I<flags> is passed to C<SvPV_flags>, and usually should be
6747 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6748
6749 =cut
6750 */
6751
6752 /*
6753  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6754  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6755  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6756  *
6757  */
6758
6759 STRLEN
6760 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6761                       U32 flags)
6762 {
6763     const U8 *start;
6764     STRLEN len;
6765     STRLEN boffset;
6766
6767     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6768
6769     start = (U8*)SvPV_flags(sv, len, flags);
6770     if (len) {
6771         const U8 * const send = start + len;
6772         MAGIC *mg = NULL;
6773         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6774
6775         if (lenp
6776             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6777                         is 0, and *lenp is already set to that.  */) {
6778             /* Convert the relative offset to absolute.  */
6779             const STRLEN uoffset2 = uoffset + *lenp;
6780             const STRLEN boffset2
6781                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6782                                       uoffset, boffset) - boffset;
6783
6784             *lenp = boffset2;
6785         }
6786     } else {
6787         if (lenp)
6788             *lenp = 0;
6789         boffset = 0;
6790     }
6791
6792     return boffset;
6793 }
6794
6795 /*
6796 =for apidoc sv_pos_u2b
6797
6798 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6799 the start of the string, to a count of the equivalent number of bytes; if
6800 lenp is non-zero, it does the same to lenp, but this time starting from
6801 the offset, rather than from the start of the string. Handles magic and
6802 type coercion.
6803
6804 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6805 than 2Gb.
6806
6807 =cut
6808 */
6809
6810 /*
6811  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6812  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6813  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6814  *
6815  */
6816
6817 /* This function is subject to size and sign problems */
6818
6819 void
6820 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6821 {
6822     PERL_ARGS_ASSERT_SV_POS_U2B;
6823
6824     if (lenp) {
6825         STRLEN ulen = (STRLEN)*lenp;
6826         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6827                                          SV_GMAGIC|SV_CONST_RETURN);
6828         *lenp = (I32)ulen;
6829     } else {
6830         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6831                                          SV_GMAGIC|SV_CONST_RETURN);
6832     }
6833 }
6834
6835 static void
6836 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6837                            const STRLEN ulen)
6838 {
6839     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6840     if (SvREADONLY(sv))
6841         return;
6842
6843     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6844                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6845         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6846     }
6847     assert(*mgp);
6848
6849     (*mgp)->mg_len = ulen;
6850     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
6851     if (ulen != (STRLEN) (*mgp)->mg_len)
6852         (*mgp)->mg_len = -1;
6853 }
6854
6855 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6856    byte length pairing. The (byte) length of the total SV is passed in too,
6857    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6858    may not have updated SvCUR, so we can't rely on reading it directly.
6859
6860    The proffered utf8/byte length pairing isn't used if the cache already has
6861    two pairs, and swapping either for the proffered pair would increase the
6862    RMS of the intervals between known byte offsets.
6863
6864    The cache itself consists of 4 STRLEN values
6865    0: larger UTF-8 offset
6866    1: corresponding byte offset
6867    2: smaller UTF-8 offset
6868    3: corresponding byte offset
6869
6870    Unused cache pairs have the value 0, 0.
6871    Keeping the cache "backwards" means that the invariant of
6872    cache[0] >= cache[2] is maintained even with empty slots, which means that
6873    the code that uses it doesn't need to worry if only 1 entry has actually
6874    been set to non-zero.  It also makes the "position beyond the end of the
6875    cache" logic much simpler, as the first slot is always the one to start
6876    from.   
6877 */
6878 static void
6879 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6880                            const STRLEN utf8, const STRLEN blen)
6881 {
6882     STRLEN *cache;
6883
6884     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6885
6886     if (SvREADONLY(sv))
6887         return;
6888
6889     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6890                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6891         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6892                            0);
6893         (*mgp)->mg_len = -1;
6894     }
6895     assert(*mgp);
6896
6897     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6898         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6899         (*mgp)->mg_ptr = (char *) cache;
6900     }
6901     assert(cache);
6902
6903     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6904         /* SvPOKp() because it's possible that sv has string overloading, and
6905            therefore is a reference, hence SvPVX() is actually a pointer.
6906            This cures the (very real) symptoms of RT 69422, but I'm not actually
6907            sure whether we should even be caching the results of UTF-8
6908            operations on overloading, given that nothing stops overloading
6909            returning a different value every time it's called.  */
6910         const U8 *start = (const U8 *) SvPVX_const(sv);
6911         const STRLEN realutf8 = utf8_length(start, start + byte);
6912
6913         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6914                                    sv);
6915     }
6916
6917     /* Cache is held with the later position first, to simplify the code
6918        that deals with unbounded ends.  */
6919        
6920     ASSERT_UTF8_CACHE(cache);
6921     if (cache[1] == 0) {
6922         /* Cache is totally empty  */
6923         cache[0] = utf8;
6924         cache[1] = byte;
6925     } else if (cache[3] == 0) {
6926         if (byte > cache[1]) {
6927             /* New one is larger, so goes first.  */
6928             cache[2] = cache[0];
6929             cache[3] = cache[1];
6930             cache[0] = utf8;
6931             cache[1] = byte;
6932         } else {
6933             cache[2] = utf8;
6934             cache[3] = byte;
6935         }
6936     } else {
6937 #define THREEWAY_SQUARE(a,b,c,d) \
6938             ((float)((d) - (c))) * ((float)((d) - (c))) \
6939             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6940                + ((float)((b) - (a))) * ((float)((b) - (a)))
6941
6942         /* Cache has 2 slots in use, and we know three potential pairs.
6943            Keep the two that give the lowest RMS distance. Do the
6944            calculation in bytes simply because we always know the byte
6945            length.  squareroot has the same ordering as the positive value,
6946            so don't bother with the actual square root.  */
6947         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6948         if (byte > cache[1]) {
6949             /* New position is after the existing pair of pairs.  */
6950             const float keep_earlier
6951                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6952             const float keep_later
6953                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6954
6955             if (keep_later < keep_earlier) {
6956                 if (keep_later < existing) {
6957                     cache[2] = cache[0];
6958                     cache[3] = cache[1];
6959                     cache[0] = utf8;
6960                     cache[1] = byte;
6961                 }
6962             }
6963             else {
6964                 if (keep_earlier < existing) {
6965                     cache[0] = utf8;
6966                     cache[1] = byte;
6967                 }
6968             }
6969         }
6970         else if (byte > cache[3]) {
6971             /* New position is between the existing pair of pairs.  */
6972             const float keep_earlier
6973                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6974             const float keep_later
6975                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6976
6977             if (keep_later < keep_earlier) {
6978                 if (keep_later < existing) {
6979                     cache[2] = utf8;
6980                     cache[3] = byte;
6981                 }
6982             }
6983             else {
6984                 if (keep_earlier < existing) {
6985                     cache[0] = utf8;
6986                     cache[1] = byte;
6987                 }
6988             }
6989         }
6990         else {
6991             /* New position is before the existing pair of pairs.  */
6992             const float keep_earlier
6993                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6994             const float keep_later
6995                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6996
6997             if (keep_later < keep_earlier) {
6998                 if (keep_later < existing) {
6999                     cache[2] = utf8;
7000                     cache[3] = byte;
7001                 }
7002             }
7003             else {
7004                 if (keep_earlier < existing) {
7005                     cache[0] = cache[2];
7006                     cache[1] = cache[3];
7007                     cache[2] = utf8;
7008                     cache[3] = byte;
7009                 }
7010             }
7011         }
7012     }
7013     ASSERT_UTF8_CACHE(cache);
7014 }
7015
7016 /* We already know all of the way, now we may be able to walk back.  The same
7017    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7018    backward is half the speed of walking forward. */
7019 static STRLEN
7020 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7021                     const U8 *end, STRLEN endu)
7022 {
7023     const STRLEN forw = target - s;
7024     STRLEN backw = end - target;
7025
7026     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7027
7028     if (forw < 2 * backw) {
7029         return utf8_length(s, target);
7030     }
7031
7032     while (end > target) {
7033         end--;
7034         while (UTF8_IS_CONTINUATION(*end)) {
7035             end--;
7036         }
7037         endu--;
7038     }
7039     return endu;
7040 }
7041
7042 /*
7043 =for apidoc sv_pos_b2u
7044
7045 Converts the value pointed to by offsetp from a count of bytes from the
7046 start of the string, to a count of the equivalent number of UTF-8 chars.
7047 Handles magic and type coercion.
7048
7049 =cut
7050 */
7051
7052 /*
7053  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7054  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7055  * byte offsets.
7056  *
7057  */
7058 void
7059 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
7060 {
7061     const U8* s;
7062     const STRLEN byte = *offsetp;
7063     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7064     STRLEN blen;
7065     MAGIC* mg = NULL;
7066     const U8* send;
7067     bool found = FALSE;
7068
7069     PERL_ARGS_ASSERT_SV_POS_B2U;
7070
7071     if (!sv)
7072         return;
7073
7074     s = (const U8*)SvPV_const(sv, blen);
7075
7076     if (blen < byte)
7077         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7078
7079     send = s + byte;
7080
7081     if (!SvREADONLY(sv)
7082         && PL_utf8cache
7083         && SvTYPE(sv) >= SVt_PVMG
7084         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7085     {
7086         if (mg->mg_ptr) {
7087             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7088             if (cache[1] == byte) {
7089                 /* An exact match. */
7090                 *offsetp = cache[0];
7091                 return;
7092             }
7093             if (cache[3] == byte) {
7094                 /* An exact match. */
7095                 *offsetp = cache[2];
7096                 return;
7097             }
7098
7099             if (cache[1] < byte) {
7100                 /* We already know part of the way. */
7101                 if (mg->mg_len != -1) {
7102                     /* Actually, we know the end too.  */
7103                     len = cache[0]
7104                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7105                                               s + blen, mg->mg_len - cache[0]);
7106                 } else {
7107                     len = cache[0] + utf8_length(s + cache[1], send);
7108                 }
7109             }
7110             else if (cache[3] < byte) {
7111                 /* We're between the two cached pairs, so we do the calculation
7112                    offset by the byte/utf-8 positions for the earlier pair,
7113                    then add the utf-8 characters from the string start to
7114                    there.  */
7115                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7116                                           s + cache[1], cache[0] - cache[2])
7117                     + cache[2];
7118
7119             }
7120             else { /* cache[3] > byte */
7121                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7122                                           cache[2]);
7123
7124             }
7125             ASSERT_UTF8_CACHE(cache);
7126             found = TRUE;
7127         } else if (mg->mg_len != -1) {
7128             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7129             found = TRUE;
7130         }
7131     }
7132     if (!found || PL_utf8cache < 0) {
7133         const STRLEN real_len = utf8_length(s, send);
7134
7135         if (found && PL_utf8cache < 0)
7136             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7137         len = real_len;
7138     }
7139     *offsetp = len;
7140
7141     if (PL_utf8cache) {
7142         if (blen == byte)
7143             utf8_mg_len_cache_update(sv, &mg, len);
7144         else
7145             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7146     }
7147 }
7148
7149 static void
7150 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7151                              STRLEN real, SV *const sv)
7152 {
7153     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7154
7155     /* As this is debugging only code, save space by keeping this test here,
7156        rather than inlining it in all the callers.  */
7157     if (from_cache == real)
7158         return;
7159
7160     /* Need to turn the assertions off otherwise we may recurse infinitely
7161        while printing error messages.  */
7162     SAVEI8(PL_utf8cache);
7163     PL_utf8cache = 0;
7164     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7165                func, (UV) from_cache, (UV) real, SVfARG(sv));
7166 }
7167
7168 /*
7169 =for apidoc sv_eq
7170
7171 Returns a boolean indicating whether the strings in the two SVs are
7172 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7173 coerce its args to strings if necessary.
7174
7175 =for apidoc sv_eq_flags
7176
7177 Returns a boolean indicating whether the strings in the two SVs are
7178 identical. Is UTF-8 and 'use bytes' aware and coerces its args to strings
7179 if necessary. If the flags include SV_GMAGIC, it handles get-magic, too.
7180
7181 =cut
7182 */
7183
7184 I32
7185 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
7186 {
7187     dVAR;
7188     const char *pv1;
7189     STRLEN cur1;
7190     const char *pv2;
7191     STRLEN cur2;
7192     I32  eq     = 0;
7193     char *tpv   = NULL;
7194     SV* svrecode = NULL;
7195
7196     if (!sv1) {
7197         pv1 = "";
7198         cur1 = 0;
7199     }
7200     else {
7201         /* if pv1 and pv2 are the same, second SvPV_const call may
7202          * invalidate pv1 (if we are handling magic), so we may need to
7203          * make a copy */
7204         if (sv1 == sv2 && flags & SV_GMAGIC
7205          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7206             pv1 = SvPV_const(sv1, cur1);
7207             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7208         }
7209         pv1 = SvPV_flags_const(sv1, cur1, flags);
7210     }
7211
7212     if (!sv2){
7213         pv2 = "";
7214         cur2 = 0;
7215     }
7216     else
7217         pv2 = SvPV_flags_const(sv2, cur2, flags);
7218
7219     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7220         /* Differing utf8ness.
7221          * Do not UTF8size the comparands as a side-effect. */
7222          if (PL_encoding) {
7223               if (SvUTF8(sv1)) {
7224                    svrecode = newSVpvn(pv2, cur2);
7225                    sv_recode_to_utf8(svrecode, PL_encoding);
7226                    pv2 = SvPV_const(svrecode, cur2);
7227               }
7228               else {
7229                    svrecode = newSVpvn(pv1, cur1);
7230                    sv_recode_to_utf8(svrecode, PL_encoding);
7231                    pv1 = SvPV_const(svrecode, cur1);
7232               }
7233               /* Now both are in UTF-8. */
7234               if (cur1 != cur2) {
7235                    SvREFCNT_dec(svrecode);
7236                    return FALSE;
7237               }
7238          }
7239          else {
7240               if (SvUTF8(sv1)) {
7241                   /* sv1 is the UTF-8 one  */
7242                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7243                                         (const U8*)pv1, cur1) == 0;
7244               }
7245               else {
7246                   /* sv2 is the UTF-8 one  */
7247                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7248                                         (const U8*)pv2, cur2) == 0;
7249               }
7250          }
7251     }
7252
7253     if (cur1 == cur2)
7254         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7255         
7256     SvREFCNT_dec(svrecode);
7257     if (tpv)
7258         Safefree(tpv);
7259
7260     return eq;
7261 }
7262
7263 /*
7264 =for apidoc sv_cmp
7265
7266 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7267 string in C<sv1> is less than, equal to, or greater than the string in
7268 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7269 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7270
7271 =for apidoc sv_cmp_flags
7272
7273 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7274 string in C<sv1> is less than, equal to, or greater than the string in
7275 C<sv2>. Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7276 if necessary. If the flags include SV_GMAGIC, it handles get magic. See
7277 also C<sv_cmp_locale_flags>.
7278
7279 =cut
7280 */
7281
7282 I32
7283 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7284 {
7285     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7286 }
7287
7288 I32
7289 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7290                   const U32 flags)
7291 {
7292     dVAR;
7293     STRLEN cur1, cur2;
7294     const char *pv1, *pv2;
7295     char *tpv = NULL;
7296     I32  cmp;
7297     SV *svrecode = NULL;
7298
7299     if (!sv1) {
7300         pv1 = "";
7301         cur1 = 0;
7302     }
7303     else
7304         pv1 = SvPV_flags_const(sv1, cur1, flags);
7305
7306     if (!sv2) {
7307         pv2 = "";
7308         cur2 = 0;
7309     }
7310     else
7311         pv2 = SvPV_flags_const(sv2, cur2, flags);
7312
7313     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7314         /* Differing utf8ness.
7315          * Do not UTF8size the comparands as a side-effect. */
7316         if (SvUTF8(sv1)) {
7317             if (PL_encoding) {
7318                  svrecode = newSVpvn(pv2, cur2);
7319                  sv_recode_to_utf8(svrecode, PL_encoding);
7320                  pv2 = SvPV_const(svrecode, cur2);
7321             }
7322             else {
7323                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7324                                                    (const U8*)pv1, cur1);
7325                 return retval ? retval < 0 ? -1 : +1 : 0;
7326             }
7327         }
7328         else {
7329             if (PL_encoding) {
7330                  svrecode = newSVpvn(pv1, cur1);
7331                  sv_recode_to_utf8(svrecode, PL_encoding);
7332                  pv1 = SvPV_const(svrecode, cur1);
7333             }
7334             else {
7335                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7336                                                   (const U8*)pv2, cur2);
7337                 return retval ? retval < 0 ? -1 : +1 : 0;
7338             }
7339         }
7340     }
7341
7342     if (!cur1) {
7343         cmp = cur2 ? -1 : 0;
7344     } else if (!cur2) {
7345         cmp = 1;
7346     } else {
7347         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7348
7349         if (retval) {
7350             cmp = retval < 0 ? -1 : 1;
7351         } else if (cur1 == cur2) {
7352             cmp = 0;
7353         } else {
7354             cmp = cur1 < cur2 ? -1 : 1;
7355         }
7356     }
7357
7358     SvREFCNT_dec(svrecode);
7359     if (tpv)
7360         Safefree(tpv);
7361
7362     return cmp;
7363 }
7364
7365 /*
7366 =for apidoc sv_cmp_locale
7367
7368 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7369 'use bytes' aware, handles get magic, and will coerce its args to strings
7370 if necessary.  See also C<sv_cmp>.
7371
7372 =for apidoc sv_cmp_locale_flags
7373
7374 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7375 'use bytes' aware and will coerce its args to strings if necessary. If the
7376 flags contain SV_GMAGIC, it handles get magic. See also C<sv_cmp_flags>.
7377
7378 =cut
7379 */
7380
7381 I32
7382 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7383 {
7384     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7385 }
7386
7387 I32
7388 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7389                          const U32 flags)
7390 {
7391     dVAR;
7392 #ifdef USE_LOCALE_COLLATE
7393
7394     char *pv1, *pv2;
7395     STRLEN len1, len2;
7396     I32 retval;
7397
7398     if (PL_collation_standard)
7399         goto raw_compare;
7400
7401     len1 = 0;
7402     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7403     len2 = 0;
7404     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7405
7406     if (!pv1 || !len1) {
7407         if (pv2 && len2)
7408             return -1;
7409         else
7410             goto raw_compare;
7411     }
7412     else {
7413         if (!pv2 || !len2)
7414             return 1;
7415     }
7416
7417     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7418
7419     if (retval)
7420         return retval < 0 ? -1 : 1;
7421
7422     /*
7423      * When the result of collation is equality, that doesn't mean
7424      * that there are no differences -- some locales exclude some
7425      * characters from consideration.  So to avoid false equalities,
7426      * we use the raw string as a tiebreaker.
7427      */
7428
7429   raw_compare:
7430     /*FALLTHROUGH*/
7431
7432 #endif /* USE_LOCALE_COLLATE */
7433
7434     return sv_cmp(sv1, sv2);
7435 }
7436
7437
7438 #ifdef USE_LOCALE_COLLATE
7439
7440 /*
7441 =for apidoc sv_collxfrm
7442
7443 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
7444 C<sv_collxfrm_flags>.
7445
7446 =for apidoc sv_collxfrm_flags
7447
7448 Add Collate Transform magic to an SV if it doesn't already have it. If the
7449 flags contain SV_GMAGIC, it handles get-magic.
7450
7451 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7452 scalar data of the variable, but transformed to such a format that a normal
7453 memory comparison can be used to compare the data according to the locale
7454 settings.
7455
7456 =cut
7457 */
7458
7459 char *
7460 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7461 {
7462     dVAR;
7463     MAGIC *mg;
7464
7465     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7466
7467     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7468     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7469         const char *s;
7470         char *xf;
7471         STRLEN len, xlen;
7472
7473         if (mg)
7474             Safefree(mg->mg_ptr);
7475         s = SvPV_flags_const(sv, len, flags);
7476         if ((xf = mem_collxfrm(s, len, &xlen))) {
7477             if (! mg) {
7478 #ifdef PERL_OLD_COPY_ON_WRITE
7479                 if (SvIsCOW(sv))
7480                     sv_force_normal_flags(sv, 0);
7481 #endif
7482                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7483                                  0, 0);
7484                 assert(mg);
7485             }
7486             mg->mg_ptr = xf;
7487             mg->mg_len = xlen;
7488         }
7489         else {
7490             if (mg) {
7491                 mg->mg_ptr = NULL;
7492                 mg->mg_len = -1;
7493             }
7494         }
7495     }
7496     if (mg && mg->mg_ptr) {
7497         *nxp = mg->mg_len;
7498         return mg->mg_ptr + sizeof(PL_collation_ix);
7499     }
7500     else {
7501         *nxp = 0;
7502         return NULL;
7503     }
7504 }
7505
7506 #endif /* USE_LOCALE_COLLATE */
7507
7508 static char *
7509 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7510 {
7511     SV * const tsv = newSV(0);
7512     ENTER;
7513     SAVEFREESV(tsv);
7514     sv_gets(tsv, fp, 0);
7515     sv_utf8_upgrade_nomg(tsv);
7516     SvCUR_set(sv,append);
7517     sv_catsv(sv,tsv);
7518     LEAVE;
7519     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7520 }
7521
7522 static char *
7523 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7524 {
7525     I32 bytesread;
7526     const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7527       /* Grab the size of the record we're getting */
7528     char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7529 #ifdef VMS
7530     int fd;
7531 #endif
7532
7533     /* Go yank in */
7534 #ifdef VMS
7535     /* VMS wants read instead of fread, because fread doesn't respect */
7536     /* RMS record boundaries. This is not necessarily a good thing to be */
7537     /* doing, but we've got no other real choice - except avoid stdio
7538        as implementation - perhaps write a :vms layer ?
7539     */
7540     fd = PerlIO_fileno(fp);
7541     if (fd != -1) {
7542         bytesread = PerlLIO_read(fd, buffer, recsize);
7543     }
7544     else /* in-memory file from PerlIO::Scalar */
7545 #endif
7546     {
7547         bytesread = PerlIO_read(fp, buffer, recsize);
7548     }
7549
7550     if (bytesread < 0)
7551         bytesread = 0;
7552     SvCUR_set(sv, bytesread + append);
7553     buffer[bytesread] = '\0';
7554     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7555 }
7556
7557 /*
7558 =for apidoc sv_gets
7559
7560 Get a line from the filehandle and store it into the SV, optionally
7561 appending to the currently-stored string.
7562
7563 =cut
7564 */
7565
7566 char *
7567 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7568 {
7569     dVAR;
7570     const char *rsptr;
7571     STRLEN rslen;
7572     register STDCHAR rslast;
7573     register STDCHAR *bp;
7574     register I32 cnt;
7575     I32 i = 0;
7576     I32 rspara = 0;
7577
7578     PERL_ARGS_ASSERT_SV_GETS;
7579
7580     if (SvTHINKFIRST(sv))
7581         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7582     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7583        from <>.
7584        However, perlbench says it's slower, because the existing swipe code
7585        is faster than copy on write.
7586        Swings and roundabouts.  */
7587     SvUPGRADE(sv, SVt_PV);
7588
7589     SvSCREAM_off(sv);
7590
7591     if (append) {
7592         if (PerlIO_isutf8(fp)) {
7593             if (!SvUTF8(sv)) {
7594                 sv_utf8_upgrade_nomg(sv);
7595                 sv_pos_u2b(sv,&append,0);
7596             }
7597         } else if (SvUTF8(sv)) {
7598             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7599         }
7600     }
7601
7602     SvPOK_only(sv);
7603     if (!append) {
7604         SvCUR_set(sv,0);
7605     }
7606     if (PerlIO_isutf8(fp))
7607         SvUTF8_on(sv);
7608
7609     if (IN_PERL_COMPILETIME) {
7610         /* we always read code in line mode */
7611         rsptr = "\n";
7612         rslen = 1;
7613     }
7614     else if (RsSNARF(PL_rs)) {
7615         /* If it is a regular disk file use size from stat() as estimate
7616            of amount we are going to read -- may result in mallocing
7617            more memory than we really need if the layers below reduce
7618            the size we read (e.g. CRLF or a gzip layer).
7619          */
7620         Stat_t st;
7621         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7622             const Off_t offset = PerlIO_tell(fp);
7623             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7624                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7625             }
7626         }
7627         rsptr = NULL;
7628         rslen = 0;
7629     }
7630     else if (RsRECORD(PL_rs)) {
7631         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7632     }
7633     else if (RsPARA(PL_rs)) {
7634         rsptr = "\n\n";
7635         rslen = 2;
7636         rspara = 1;
7637     }
7638     else {
7639         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7640         if (PerlIO_isutf8(fp)) {
7641             rsptr = SvPVutf8(PL_rs, rslen);
7642         }
7643         else {
7644             if (SvUTF8(PL_rs)) {
7645                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7646                     Perl_croak(aTHX_ "Wide character in $/");
7647                 }
7648             }
7649             rsptr = SvPV_const(PL_rs, rslen);
7650         }
7651     }
7652
7653     rslast = rslen ? rsptr[rslen - 1] : '\0';
7654
7655     if (rspara) {               /* have to do this both before and after */
7656         do {                    /* to make sure file boundaries work right */
7657             if (PerlIO_eof(fp))
7658                 return 0;
7659             i = PerlIO_getc(fp);
7660             if (i != '\n') {
7661                 if (i == -1)
7662                     return 0;
7663                 PerlIO_ungetc(fp,i);
7664                 break;
7665             }
7666         } while (i != EOF);
7667     }
7668
7669     /* See if we know enough about I/O mechanism to cheat it ! */
7670
7671     /* This used to be #ifdef test - it is made run-time test for ease
7672        of abstracting out stdio interface. One call should be cheap
7673        enough here - and may even be a macro allowing compile
7674        time optimization.
7675      */
7676
7677     if (PerlIO_fast_gets(fp)) {
7678
7679     /*
7680      * We're going to steal some values from the stdio struct
7681      * and put EVERYTHING in the innermost loop into registers.
7682      */
7683     register STDCHAR *ptr;
7684     STRLEN bpx;
7685     I32 shortbuffered;
7686
7687 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7688     /* An ungetc()d char is handled separately from the regular
7689      * buffer, so we getc() it back out and stuff it in the buffer.
7690      */
7691     i = PerlIO_getc(fp);
7692     if (i == EOF) return 0;
7693     *(--((*fp)->_ptr)) = (unsigned char) i;
7694     (*fp)->_cnt++;
7695 #endif
7696
7697     /* Here is some breathtakingly efficient cheating */
7698
7699     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7700     /* make sure we have the room */
7701     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7702         /* Not room for all of it
7703            if we are looking for a separator and room for some
7704          */
7705         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7706             /* just process what we have room for */
7707             shortbuffered = cnt - SvLEN(sv) + append + 1;
7708             cnt -= shortbuffered;
7709         }
7710         else {
7711             shortbuffered = 0;
7712             /* remember that cnt can be negative */
7713             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7714         }
7715     }
7716     else
7717         shortbuffered = 0;
7718     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7719     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7720     DEBUG_P(PerlIO_printf(Perl_debug_log,
7721         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7722     DEBUG_P(PerlIO_printf(Perl_debug_log,
7723         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7724                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7725                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7726     for (;;) {
7727       screamer:
7728         if (cnt > 0) {
7729             if (rslen) {
7730                 while (cnt > 0) {                    /* this     |  eat */
7731                     cnt--;
7732                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7733                         goto thats_all_folks;        /* screams  |  sed :-) */
7734                 }
7735             }
7736             else {
7737                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7738                 bp += cnt;                           /* screams  |  dust */
7739                 ptr += cnt;                          /* louder   |  sed :-) */
7740                 cnt = 0;
7741                 assert (!shortbuffered);
7742                 goto cannot_be_shortbuffered;
7743             }
7744         }
7745         
7746         if (shortbuffered) {            /* oh well, must extend */
7747             cnt = shortbuffered;
7748             shortbuffered = 0;
7749             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7750             SvCUR_set(sv, bpx);
7751             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7752             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7753             continue;
7754         }
7755
7756     cannot_be_shortbuffered:
7757         DEBUG_P(PerlIO_printf(Perl_debug_log,
7758                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7759                               PTR2UV(ptr),(long)cnt));
7760         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7761
7762         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7763             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7764             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7765             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7766
7767         /* This used to call 'filbuf' in stdio form, but as that behaves like
7768            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7769            another abstraction.  */
7770         i   = PerlIO_getc(fp);          /* get more characters */
7771
7772         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7773             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7774             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7775             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7776
7777         cnt = PerlIO_get_cnt(fp);
7778         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7779         DEBUG_P(PerlIO_printf(Perl_debug_log,
7780             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7781
7782         if (i == EOF)                   /* all done for ever? */
7783             goto thats_really_all_folks;
7784
7785         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7786         SvCUR_set(sv, bpx);
7787         SvGROW(sv, bpx + cnt + 2);
7788         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7789
7790         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7791
7792         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7793             goto thats_all_folks;
7794     }
7795
7796 thats_all_folks:
7797     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7798           memNE((char*)bp - rslen, rsptr, rslen))
7799         goto screamer;                          /* go back to the fray */
7800 thats_really_all_folks:
7801     if (shortbuffered)
7802         cnt += shortbuffered;
7803         DEBUG_P(PerlIO_printf(Perl_debug_log,
7804             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7805     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7806     DEBUG_P(PerlIO_printf(Perl_debug_log,
7807         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7808         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7809         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7810     *bp = '\0';
7811     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7812     DEBUG_P(PerlIO_printf(Perl_debug_log,
7813         "Screamer: done, len=%ld, string=|%.*s|\n",
7814         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7815     }
7816    else
7817     {
7818        /*The big, slow, and stupid way. */
7819 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7820         STDCHAR *buf = NULL;
7821         Newx(buf, 8192, STDCHAR);
7822         assert(buf);
7823 #else
7824         STDCHAR buf[8192];
7825 #endif
7826
7827 screamer2:
7828         if (rslen) {
7829             register const STDCHAR * const bpe = buf + sizeof(buf);
7830             bp = buf;
7831             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7832                 ; /* keep reading */
7833             cnt = bp - buf;
7834         }
7835         else {
7836             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7837             /* Accommodate broken VAXC compiler, which applies U8 cast to
7838              * both args of ?: operator, causing EOF to change into 255
7839              */
7840             if (cnt > 0)
7841                  i = (U8)buf[cnt - 1];
7842             else
7843                  i = EOF;
7844         }
7845
7846         if (cnt < 0)
7847             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7848         if (append)
7849              sv_catpvn(sv, (char *) buf, cnt);
7850         else
7851              sv_setpvn(sv, (char *) buf, cnt);
7852
7853         if (i != EOF &&                 /* joy */
7854             (!rslen ||
7855              SvCUR(sv) < rslen ||
7856              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7857         {
7858             append = -1;
7859             /*
7860              * If we're reading from a TTY and we get a short read,
7861              * indicating that the user hit his EOF character, we need
7862              * to notice it now, because if we try to read from the TTY
7863              * again, the EOF condition will disappear.
7864              *
7865              * The comparison of cnt to sizeof(buf) is an optimization
7866              * that prevents unnecessary calls to feof().
7867              *
7868              * - jik 9/25/96
7869              */
7870             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7871                 goto screamer2;
7872         }
7873
7874 #ifdef USE_HEAP_INSTEAD_OF_STACK
7875         Safefree(buf);
7876 #endif
7877     }
7878
7879     if (rspara) {               /* have to do this both before and after */
7880         while (i != EOF) {      /* to make sure file boundaries work right */
7881             i = PerlIO_getc(fp);
7882             if (i != '\n') {
7883                 PerlIO_ungetc(fp,i);
7884                 break;
7885             }
7886         }
7887     }
7888
7889     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7890 }
7891
7892 /*
7893 =for apidoc sv_inc
7894
7895 Auto-increment of the value in the SV, doing string to numeric conversion
7896 if necessary. Handles 'get' magic and operator overloading.
7897
7898 =cut
7899 */
7900
7901 void
7902 Perl_sv_inc(pTHX_ register SV *const sv)
7903 {
7904     if (!sv)
7905         return;
7906     SvGETMAGIC(sv);
7907     sv_inc_nomg(sv);
7908 }
7909
7910 /*
7911 =for apidoc sv_inc_nomg
7912
7913 Auto-increment of the value in the SV, doing string to numeric conversion
7914 if necessary. Handles operator overloading. Skips handling 'get' magic.
7915
7916 =cut
7917 */
7918
7919 void
7920 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7921 {
7922     dVAR;
7923     register char *d;
7924     int flags;
7925
7926     if (!sv)
7927         return;
7928     if (SvTHINKFIRST(sv)) {
7929         if (SvIsCOW(sv))
7930             sv_force_normal_flags(sv, 0);
7931         if (SvREADONLY(sv)) {
7932             if (IN_PERL_RUNTIME)
7933                 Perl_croak_no_modify(aTHX);
7934         }
7935         if (SvROK(sv)) {
7936             IV i;
7937             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
7938                 return;
7939             i = PTR2IV(SvRV(sv));
7940             sv_unref(sv);
7941             sv_setiv(sv, i);
7942         }
7943     }
7944     flags = SvFLAGS(sv);
7945     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7946         /* It's (privately or publicly) a float, but not tested as an
7947            integer, so test it to see. */
7948         (void) SvIV(sv);
7949         flags = SvFLAGS(sv);
7950     }
7951     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7952         /* It's publicly an integer, or privately an integer-not-float */
7953 #ifdef PERL_PRESERVE_IVUV
7954       oops_its_int:
7955 #endif
7956         if (SvIsUV(sv)) {
7957             if (SvUVX(sv) == UV_MAX)
7958                 sv_setnv(sv, UV_MAX_P1);
7959             else
7960                 (void)SvIOK_only_UV(sv);
7961                 SvUV_set(sv, SvUVX(sv) + 1);
7962         } else {
7963             if (SvIVX(sv) == IV_MAX)
7964                 sv_setuv(sv, (UV)IV_MAX + 1);
7965             else {
7966                 (void)SvIOK_only(sv);
7967                 SvIV_set(sv, SvIVX(sv) + 1);
7968             }   
7969         }
7970         return;
7971     }
7972     if (flags & SVp_NOK) {
7973         const NV was = SvNVX(sv);
7974         if (NV_OVERFLOWS_INTEGERS_AT &&
7975             was >= NV_OVERFLOWS_INTEGERS_AT) {
7976             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7977                            "Lost precision when incrementing %" NVff " by 1",
7978                            was);
7979         }
7980         (void)SvNOK_only(sv);
7981         SvNV_set(sv, was + 1.0);
7982         return;
7983     }
7984
7985     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7986         if ((flags & SVTYPEMASK) < SVt_PVIV)
7987             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7988         (void)SvIOK_only(sv);
7989         SvIV_set(sv, 1);
7990         return;
7991     }
7992     d = SvPVX(sv);
7993     while (isALPHA(*d)) d++;
7994     while (isDIGIT(*d)) d++;
7995     if (d < SvEND(sv)) {
7996 #ifdef PERL_PRESERVE_IVUV
7997         /* Got to punt this as an integer if needs be, but we don't issue
7998            warnings. Probably ought to make the sv_iv_please() that does
7999            the conversion if possible, and silently.  */
8000         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8001         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8002             /* Need to try really hard to see if it's an integer.
8003                9.22337203685478e+18 is an integer.
8004                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8005                so $a="9.22337203685478e+18"; $a+0; $a++
8006                needs to be the same as $a="9.22337203685478e+18"; $a++
8007                or we go insane. */
8008         
8009             (void) sv_2iv(sv);
8010             if (SvIOK(sv))
8011                 goto oops_its_int;
8012
8013             /* sv_2iv *should* have made this an NV */
8014             if (flags & SVp_NOK) {
8015                 (void)SvNOK_only(sv);
8016                 SvNV_set(sv, SvNVX(sv) + 1.0);
8017                 return;
8018             }
8019             /* I don't think we can get here. Maybe I should assert this
8020                And if we do get here I suspect that sv_setnv will croak. NWC
8021                Fall through. */
8022 #if defined(USE_LONG_DOUBLE)
8023             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",
8024                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8025 #else
8026             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8027                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8028 #endif
8029         }
8030 #endif /* PERL_PRESERVE_IVUV */
8031         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8032         return;
8033     }
8034     d--;
8035     while (d >= SvPVX_const(sv)) {
8036         if (isDIGIT(*d)) {
8037             if (++*d <= '9')
8038                 return;
8039             *(d--) = '0';
8040         }
8041         else {
8042 #ifdef EBCDIC
8043             /* MKS: The original code here died if letters weren't consecutive.
8044              * at least it didn't have to worry about non-C locales.  The
8045              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8046              * arranged in order (although not consecutively) and that only
8047              * [A-Za-z] are accepted by isALPHA in the C locale.
8048              */
8049             if (*d != 'z' && *d != 'Z') {
8050                 do { ++*d; } while (!isALPHA(*d));
8051                 return;
8052             }
8053             *(d--) -= 'z' - 'a';
8054 #else
8055             ++*d;
8056             if (isALPHA(*d))
8057                 return;
8058             *(d--) -= 'z' - 'a' + 1;
8059 #endif
8060         }
8061     }
8062     /* oh,oh, the number grew */
8063     SvGROW(sv, SvCUR(sv) + 2);
8064     SvCUR_set(sv, SvCUR(sv) + 1);
8065     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8066         *d = d[-1];
8067     if (isDIGIT(d[1]))
8068         *d = '1';
8069     else
8070         *d = d[1];
8071 }
8072
8073 /*
8074 =for apidoc sv_dec
8075
8076 Auto-decrement of the value in the SV, doing string to numeric conversion
8077 if necessary. Handles 'get' magic and operator overloading.
8078
8079 =cut
8080 */
8081
8082 void
8083 Perl_sv_dec(pTHX_ register SV *const sv)
8084 {
8085     dVAR;
8086     if (!sv)
8087         return;
8088     SvGETMAGIC(sv);
8089     sv_dec_nomg(sv);
8090 }
8091
8092 /*
8093 =for apidoc sv_dec_nomg
8094
8095 Auto-decrement of the value in the SV, doing string to numeric conversion
8096 if necessary. Handles operator overloading. Skips handling 'get' magic.
8097
8098 =cut
8099 */
8100
8101 void
8102 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8103 {
8104     dVAR;
8105     int flags;
8106
8107     if (!sv)
8108         return;
8109     if (SvTHINKFIRST(sv)) {
8110         if (SvIsCOW(sv))
8111             sv_force_normal_flags(sv, 0);
8112         if (SvREADONLY(sv)) {
8113             if (IN_PERL_RUNTIME)
8114                 Perl_croak_no_modify(aTHX);
8115         }
8116         if (SvROK(sv)) {
8117             IV i;
8118             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8119                 return;
8120             i = PTR2IV(SvRV(sv));
8121             sv_unref(sv);
8122             sv_setiv(sv, i);
8123         }
8124     }
8125     /* Unlike sv_inc we don't have to worry about string-never-numbers
8126        and keeping them magic. But we mustn't warn on punting */
8127     flags = SvFLAGS(sv);
8128     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8129         /* It's publicly an integer, or privately an integer-not-float */
8130 #ifdef PERL_PRESERVE_IVUV
8131       oops_its_int:
8132 #endif
8133         if (SvIsUV(sv)) {
8134             if (SvUVX(sv) == 0) {
8135                 (void)SvIOK_only(sv);
8136                 SvIV_set(sv, -1);
8137             }
8138             else {
8139                 (void)SvIOK_only_UV(sv);
8140                 SvUV_set(sv, SvUVX(sv) - 1);
8141             }   
8142         } else {
8143             if (SvIVX(sv) == IV_MIN) {
8144                 sv_setnv(sv, (NV)IV_MIN);
8145                 goto oops_its_num;
8146             }
8147             else {
8148                 (void)SvIOK_only(sv);
8149                 SvIV_set(sv, SvIVX(sv) - 1);
8150             }   
8151         }
8152         return;
8153     }
8154     if (flags & SVp_NOK) {
8155     oops_its_num:
8156         {
8157             const NV was = SvNVX(sv);
8158             if (NV_OVERFLOWS_INTEGERS_AT &&
8159                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8160                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8161                                "Lost precision when decrementing %" NVff " by 1",
8162                                was);
8163             }
8164             (void)SvNOK_only(sv);
8165             SvNV_set(sv, was - 1.0);
8166             return;
8167         }
8168     }
8169     if (!(flags & SVp_POK)) {
8170         if ((flags & SVTYPEMASK) < SVt_PVIV)
8171             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8172         SvIV_set(sv, -1);
8173         (void)SvIOK_only(sv);
8174         return;
8175     }
8176 #ifdef PERL_PRESERVE_IVUV
8177     {
8178         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8179         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8180             /* Need to try really hard to see if it's an integer.
8181                9.22337203685478e+18 is an integer.
8182                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8183                so $a="9.22337203685478e+18"; $a+0; $a--
8184                needs to be the same as $a="9.22337203685478e+18"; $a--
8185                or we go insane. */
8186         
8187             (void) sv_2iv(sv);
8188             if (SvIOK(sv))
8189                 goto oops_its_int;
8190
8191             /* sv_2iv *should* have made this an NV */
8192             if (flags & SVp_NOK) {
8193                 (void)SvNOK_only(sv);
8194                 SvNV_set(sv, SvNVX(sv) - 1.0);
8195                 return;
8196             }
8197             /* I don't think we can get here. Maybe I should assert this
8198                And if we do get here I suspect that sv_setnv will croak. NWC
8199                Fall through. */
8200 #if defined(USE_LONG_DOUBLE)
8201             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",
8202                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8203 #else
8204             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8205                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8206 #endif
8207         }
8208     }
8209 #endif /* PERL_PRESERVE_IVUV */
8210     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8211 }
8212
8213 /* this define is used to eliminate a chunk of duplicated but shared logic
8214  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8215  * used anywhere but here - yves
8216  */
8217 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8218     STMT_START {      \
8219         EXTEND_MORTAL(1); \
8220         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8221     } STMT_END
8222
8223 /*
8224 =for apidoc sv_mortalcopy
8225
8226 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8227 The new SV is marked as mortal. It will be destroyed "soon", either by an
8228 explicit call to FREETMPS, or by an implicit call at places such as
8229 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8230
8231 =cut
8232 */
8233
8234 /* Make a string that will exist for the duration of the expression
8235  * evaluation.  Actually, it may have to last longer than that, but
8236  * hopefully we won't free it until it has been assigned to a
8237  * permanent location. */
8238
8239 SV *
8240 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
8241 {
8242     dVAR;
8243     register SV *sv;
8244
8245     new_SV(sv);
8246     sv_setsv(sv,oldstr);
8247     PUSH_EXTEND_MORTAL__SV_C(sv);
8248     SvTEMP_on(sv);
8249     return sv;
8250 }
8251
8252 /*
8253 =for apidoc sv_newmortal
8254
8255 Creates a new null SV which is mortal.  The reference count of the SV is
8256 set to 1. It will be destroyed "soon", either by an explicit call to
8257 FREETMPS, or by an implicit call at places such as statement boundaries.
8258 See also C<sv_mortalcopy> and C<sv_2mortal>.
8259
8260 =cut
8261 */
8262
8263 SV *
8264 Perl_sv_newmortal(pTHX)
8265 {
8266     dVAR;
8267     register SV *sv;
8268
8269     new_SV(sv);
8270     SvFLAGS(sv) = SVs_TEMP;
8271     PUSH_EXTEND_MORTAL__SV_C(sv);
8272     return sv;
8273 }
8274
8275
8276 /*
8277 =for apidoc newSVpvn_flags
8278
8279 Creates a new SV and copies a string into it.  The reference count for the
8280 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8281 string.  You are responsible for ensuring that the source string is at least
8282 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8283 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8284 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8285 returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
8286 C<SVf_UTF8> flag will be set on the new SV.
8287 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8288
8289     #define newSVpvn_utf8(s, len, u)                    \
8290         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8291
8292 =cut
8293 */
8294
8295 SV *
8296 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8297 {
8298     dVAR;
8299     register SV *sv;
8300
8301     /* All the flags we don't support must be zero.
8302        And we're new code so I'm going to assert this from the start.  */
8303     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8304     new_SV(sv);
8305     sv_setpvn(sv,s,len);
8306
8307     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8308      * and do what it does ourselves here.
8309      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8310      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8311      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8312      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8313      */
8314
8315     SvFLAGS(sv) |= flags;
8316
8317     if(flags & SVs_TEMP){
8318         PUSH_EXTEND_MORTAL__SV_C(sv);
8319     }
8320
8321     return sv;
8322 }
8323
8324 /*
8325 =for apidoc sv_2mortal
8326
8327 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8328 by an explicit call to FREETMPS, or by an implicit call at places such as
8329 statement boundaries.  SvTEMP() is turned on which means that the SV's
8330 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
8331 and C<sv_mortalcopy>.
8332
8333 =cut
8334 */
8335
8336 SV *
8337 Perl_sv_2mortal(pTHX_ register SV *const sv)
8338 {
8339     dVAR;
8340     if (!sv)
8341         return NULL;
8342     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8343         return sv;
8344     PUSH_EXTEND_MORTAL__SV_C(sv);
8345     SvTEMP_on(sv);
8346     return sv;
8347 }
8348
8349 /*
8350 =for apidoc newSVpv
8351
8352 Creates a new SV and copies a string into it.  The reference count for the
8353 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8354 strlen().  For efficiency, consider using C<newSVpvn> instead.
8355
8356 =cut
8357 */
8358
8359 SV *
8360 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8361 {
8362     dVAR;
8363     register SV *sv;
8364
8365     new_SV(sv);
8366     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8367     return sv;
8368 }
8369
8370 /*
8371 =for apidoc newSVpvn
8372
8373 Creates a new SV and copies a string into it.  The reference count for the
8374 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8375 string.  You are responsible for ensuring that the source string is at least
8376 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8377
8378 =cut
8379 */
8380
8381 SV *
8382 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
8383 {
8384     dVAR;
8385     register SV *sv;
8386
8387     new_SV(sv);
8388     sv_setpvn(sv,s,len);
8389     return sv;
8390 }
8391
8392 /*
8393 =for apidoc newSVhek
8394
8395 Creates a new SV from the hash key structure.  It will generate scalars that
8396 point to the shared string table where possible. Returns a new (undefined)
8397 SV if the hek is NULL.
8398
8399 =cut
8400 */
8401
8402 SV *
8403 Perl_newSVhek(pTHX_ const HEK *const hek)
8404 {
8405     dVAR;
8406     if (!hek) {
8407         SV *sv;
8408
8409         new_SV(sv);
8410         return sv;
8411     }
8412
8413     if (HEK_LEN(hek) == HEf_SVKEY) {
8414         return newSVsv(*(SV**)HEK_KEY(hek));
8415     } else {
8416         const int flags = HEK_FLAGS(hek);
8417         if (flags & HVhek_WASUTF8) {
8418             /* Trouble :-)
8419                Andreas would like keys he put in as utf8 to come back as utf8
8420             */
8421             STRLEN utf8_len = HEK_LEN(hek);
8422             SV * const sv = newSV_type(SVt_PV);
8423             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8424             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8425             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8426             SvUTF8_on (sv);
8427             return sv;
8428         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8429             /* We don't have a pointer to the hv, so we have to replicate the
8430                flag into every HEK. This hv is using custom a hasing
8431                algorithm. Hence we can't return a shared string scalar, as
8432                that would contain the (wrong) hash value, and might get passed
8433                into an hv routine with a regular hash.
8434                Similarly, a hash that isn't using shared hash keys has to have
8435                the flag in every key so that we know not to try to call
8436                share_hek_kek on it.  */
8437
8438             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8439             if (HEK_UTF8(hek))
8440                 SvUTF8_on (sv);
8441             return sv;
8442         }
8443         /* This will be overwhelminly the most common case.  */
8444         {
8445             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8446                more efficient than sharepvn().  */
8447             SV *sv;
8448
8449             new_SV(sv);
8450             sv_upgrade(sv, SVt_PV);
8451             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8452             SvCUR_set(sv, HEK_LEN(hek));
8453             SvLEN_set(sv, 0);
8454             SvREADONLY_on(sv);
8455             SvFAKE_on(sv);
8456             SvPOK_on(sv);
8457             if (HEK_UTF8(hek))
8458                 SvUTF8_on(sv);
8459             return sv;
8460         }
8461     }
8462 }
8463
8464 /*
8465 =for apidoc newSVpvn_share
8466
8467 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8468 table. If the string does not already exist in the table, it is created
8469 first.  Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
8470 value is used; otherwise the hash is computed. The string's hash can be later
8471 be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
8472 that as the string table is used for shared hash keys these strings will have
8473 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8474
8475 =cut
8476 */
8477
8478 SV *
8479 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8480 {
8481     dVAR;
8482     register SV *sv;
8483     bool is_utf8 = FALSE;
8484     const char *const orig_src = src;
8485
8486     if (len < 0) {
8487         STRLEN tmplen = -len;
8488         is_utf8 = TRUE;
8489         /* See the note in hv.c:hv_fetch() --jhi */
8490         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8491         len = tmplen;
8492     }
8493     if (!hash)
8494         PERL_HASH(hash, src, len);
8495     new_SV(sv);
8496     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8497        changes here, update it there too.  */
8498     sv_upgrade(sv, SVt_PV);
8499     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8500     SvCUR_set(sv, len);
8501     SvLEN_set(sv, 0);
8502     SvREADONLY_on(sv);
8503     SvFAKE_on(sv);
8504     SvPOK_on(sv);
8505     if (is_utf8)
8506         SvUTF8_on(sv);
8507     if (src != orig_src)
8508         Safefree(src);
8509     return sv;
8510 }
8511
8512 /*
8513 =for apidoc newSVpv_share
8514
8515 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8516 string/length pair.
8517
8518 =cut
8519 */
8520
8521 SV *
8522 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8523 {
8524     return newSVpvn_share(src, strlen(src), hash);
8525 }
8526
8527 #if defined(PERL_IMPLICIT_CONTEXT)
8528
8529 /* pTHX_ magic can't cope with varargs, so this is a no-context
8530  * version of the main function, (which may itself be aliased to us).
8531  * Don't access this version directly.
8532  */
8533
8534 SV *
8535 Perl_newSVpvf_nocontext(const char *const pat, ...)
8536 {
8537     dTHX;
8538     register SV *sv;
8539     va_list args;
8540
8541     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8542
8543     va_start(args, pat);
8544     sv = vnewSVpvf(pat, &args);
8545     va_end(args);
8546     return sv;
8547 }
8548 #endif
8549
8550 /*
8551 =for apidoc newSVpvf
8552
8553 Creates a new SV and initializes it with the string formatted like
8554 C<sprintf>.
8555
8556 =cut
8557 */
8558
8559 SV *
8560 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8561 {
8562     register SV *sv;
8563     va_list args;
8564
8565     PERL_ARGS_ASSERT_NEWSVPVF;
8566
8567     va_start(args, pat);
8568     sv = vnewSVpvf(pat, &args);
8569     va_end(args);
8570     return sv;
8571 }
8572
8573 /* backend for newSVpvf() and newSVpvf_nocontext() */
8574
8575 SV *
8576 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8577 {
8578     dVAR;
8579     register SV *sv;
8580
8581     PERL_ARGS_ASSERT_VNEWSVPVF;
8582
8583     new_SV(sv);
8584     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8585     return sv;
8586 }
8587
8588 /*
8589 =for apidoc newSVnv
8590
8591 Creates a new SV and copies a floating point value into it.
8592 The reference count for the SV is set to 1.
8593
8594 =cut
8595 */
8596
8597 SV *
8598 Perl_newSVnv(pTHX_ const NV n)
8599 {
8600     dVAR;
8601     register SV *sv;
8602
8603     new_SV(sv);
8604     sv_setnv(sv,n);
8605     return sv;
8606 }
8607
8608 /*
8609 =for apidoc newSViv
8610
8611 Creates a new SV and copies an integer into it.  The reference count for the
8612 SV is set to 1.
8613
8614 =cut
8615 */
8616
8617 SV *
8618 Perl_newSViv(pTHX_ const IV i)
8619 {
8620     dVAR;
8621     register SV *sv;
8622
8623     new_SV(sv);
8624     sv_setiv(sv,i);
8625     return sv;
8626 }
8627
8628 /*
8629 =for apidoc newSVuv
8630
8631 Creates a new SV and copies an unsigned integer into it.
8632 The reference count for the SV is set to 1.
8633
8634 =cut
8635 */
8636
8637 SV *
8638 Perl_newSVuv(pTHX_ const UV u)
8639 {
8640     dVAR;
8641     register SV *sv;
8642
8643     new_SV(sv);
8644     sv_setuv(sv,u);
8645     return sv;
8646 }
8647
8648 /*
8649 =for apidoc newSV_type
8650
8651 Creates a new SV, of the type specified.  The reference count for the new SV
8652 is set to 1.
8653
8654 =cut
8655 */
8656
8657 SV *
8658 Perl_newSV_type(pTHX_ const svtype type)
8659 {
8660     register SV *sv;
8661
8662     new_SV(sv);
8663     sv_upgrade(sv, type);
8664     return sv;
8665 }
8666
8667 /*
8668 =for apidoc newRV_noinc
8669
8670 Creates an RV wrapper for an SV.  The reference count for the original
8671 SV is B<not> incremented.
8672
8673 =cut
8674 */
8675
8676 SV *
8677 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8678 {
8679     dVAR;
8680     register SV *sv = newSV_type(SVt_IV);
8681
8682     PERL_ARGS_ASSERT_NEWRV_NOINC;
8683
8684     SvTEMP_off(tmpRef);
8685     SvRV_set(sv, tmpRef);
8686     SvROK_on(sv);
8687     return sv;
8688 }
8689
8690 /* newRV_inc is the official function name to use now.
8691  * newRV_inc is in fact #defined to newRV in sv.h
8692  */
8693
8694 SV *
8695 Perl_newRV(pTHX_ SV *const sv)
8696 {
8697     dVAR;
8698
8699     PERL_ARGS_ASSERT_NEWRV;
8700
8701     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8702 }
8703
8704 /*
8705 =for apidoc newSVsv
8706
8707 Creates a new SV which is an exact duplicate of the original SV.
8708 (Uses C<sv_setsv>).
8709
8710 =cut
8711 */
8712
8713 SV *
8714 Perl_newSVsv(pTHX_ register SV *const old)
8715 {
8716     dVAR;
8717     register SV *sv;
8718
8719     if (!old)
8720         return NULL;
8721     if (SvTYPE(old) == SVTYPEMASK) {
8722         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8723         return NULL;
8724     }
8725     new_SV(sv);
8726     /* SV_GMAGIC is the default for sv_setv()
8727        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8728        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8729     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8730     return sv;
8731 }
8732
8733 /*
8734 =for apidoc sv_reset
8735
8736 Underlying implementation for the C<reset> Perl function.
8737 Note that the perl-level function is vaguely deprecated.
8738
8739 =cut
8740 */
8741
8742 void
8743 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8744 {
8745     dVAR;
8746     char todo[PERL_UCHAR_MAX+1];
8747
8748     PERL_ARGS_ASSERT_SV_RESET;
8749
8750     if (!stash)
8751         return;
8752
8753     if (!*s) {          /* reset ?? searches */
8754         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8755         if (mg) {
8756             const U32 count = mg->mg_len / sizeof(PMOP**);
8757             PMOP **pmp = (PMOP**) mg->mg_ptr;
8758             PMOP *const *const end = pmp + count;
8759
8760             while (pmp < end) {
8761 #ifdef USE_ITHREADS
8762                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8763 #else
8764                 (*pmp)->op_pmflags &= ~PMf_USED;
8765 #endif
8766                 ++pmp;
8767             }
8768         }
8769         return;
8770     }
8771
8772     /* reset variables */
8773
8774     if (!HvARRAY(stash))
8775         return;
8776
8777     Zero(todo, 256, char);
8778     while (*s) {
8779         I32 max;
8780         I32 i = (unsigned char)*s;
8781         if (s[1] == '-') {
8782             s += 2;
8783         }
8784         max = (unsigned char)*s++;
8785         for ( ; i <= max; i++) {
8786             todo[i] = 1;
8787         }
8788         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8789             HE *entry;
8790             for (entry = HvARRAY(stash)[i];
8791                  entry;
8792                  entry = HeNEXT(entry))
8793             {
8794                 register GV *gv;
8795                 register SV *sv;
8796
8797                 if (!todo[(U8)*HeKEY(entry)])
8798                     continue;
8799                 gv = MUTABLE_GV(HeVAL(entry));
8800                 sv = GvSV(gv);
8801                 if (sv) {
8802                     if (SvTHINKFIRST(sv)) {
8803                         if (!SvREADONLY(sv) && SvROK(sv))
8804                             sv_unref(sv);
8805                         /* XXX Is this continue a bug? Why should THINKFIRST
8806                            exempt us from resetting arrays and hashes?  */
8807                         continue;
8808                     }
8809                     SvOK_off(sv);
8810                     if (SvTYPE(sv) >= SVt_PV) {
8811                         SvCUR_set(sv, 0);
8812                         if (SvPVX_const(sv) != NULL)
8813                             *SvPVX(sv) = '\0';
8814                         SvTAINT(sv);
8815                     }
8816                 }
8817                 if (GvAV(gv)) {
8818                     av_clear(GvAV(gv));
8819                 }
8820                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8821 #if defined(VMS)
8822                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8823 #else /* ! VMS */
8824                     hv_clear(GvHV(gv));
8825 #  if defined(USE_ENVIRON_ARRAY)
8826                     if (gv == PL_envgv)
8827                         my_clearenv();
8828 #  endif /* USE_ENVIRON_ARRAY */
8829 #endif /* VMS */
8830                 }
8831             }
8832         }
8833     }
8834 }
8835
8836 /*
8837 =for apidoc sv_2io
8838
8839 Using various gambits, try to get an IO from an SV: the IO slot if its a
8840 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8841 named after the PV if we're a string.
8842
8843 =cut
8844 */
8845
8846 IO*
8847 Perl_sv_2io(pTHX_ SV *const sv)
8848 {
8849     IO* io;
8850     GV* gv;
8851
8852     PERL_ARGS_ASSERT_SV_2IO;
8853
8854     switch (SvTYPE(sv)) {
8855     case SVt_PVIO:
8856         io = MUTABLE_IO(sv);
8857         break;
8858     case SVt_PVGV:
8859     case SVt_PVLV:
8860         if (isGV_with_GP(sv)) {
8861             gv = MUTABLE_GV(sv);
8862             io = GvIO(gv);
8863             if (!io)
8864                 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8865             break;
8866         }
8867         /* FALL THROUGH */
8868     default:
8869         if (!SvOK(sv))
8870             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8871         if (SvROK(sv))
8872             return sv_2io(SvRV(sv));
8873         gv = gv_fetchsv(sv, 0, SVt_PVIO);
8874         if (gv)
8875             io = GvIO(gv);
8876         else
8877             io = 0;
8878         if (!io)
8879             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
8880         break;
8881     }
8882     return io;
8883 }
8884
8885 /*
8886 =for apidoc sv_2cv
8887
8888 Using various gambits, try to get a CV from an SV; in addition, try if
8889 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8890 The flags in C<lref> are passed to gv_fetchsv.
8891
8892 =cut
8893 */
8894
8895 CV *
8896 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8897 {
8898     dVAR;
8899     GV *gv = NULL;
8900     CV *cv = NULL;
8901
8902     PERL_ARGS_ASSERT_SV_2CV;
8903
8904     if (!sv) {
8905         *st = NULL;
8906         *gvp = NULL;
8907         return NULL;
8908     }
8909     switch (SvTYPE(sv)) {
8910     case SVt_PVCV:
8911         *st = CvSTASH(sv);
8912         *gvp = NULL;
8913         return MUTABLE_CV(sv);
8914     case SVt_PVHV:
8915     case SVt_PVAV:
8916         *st = NULL;
8917         *gvp = NULL;
8918         return NULL;
8919     case SVt_PVGV:
8920         if (isGV_with_GP(sv)) {
8921             gv = MUTABLE_GV(sv);
8922             *gvp = gv;
8923             *st = GvESTASH(gv);
8924             goto fix_gv;
8925         }
8926         /* FALL THROUGH */
8927
8928     default:
8929         if (SvROK(sv)) {
8930             SvGETMAGIC(sv);
8931             if (SvAMAGIC(sv))
8932                 sv = amagic_deref_call(sv, to_cv_amg);
8933             /* At this point I'd like to do SPAGAIN, but really I need to
8934                force it upon my callers. Hmmm. This is a mess... */
8935
8936             sv = SvRV(sv);
8937             if (SvTYPE(sv) == SVt_PVCV) {
8938                 cv = MUTABLE_CV(sv);
8939                 *gvp = NULL;
8940                 *st = CvSTASH(cv);
8941                 return cv;
8942             }
8943             else if(isGV_with_GP(sv))
8944                 gv = MUTABLE_GV(sv);
8945             else
8946                 Perl_croak(aTHX_ "Not a subroutine reference");
8947         }
8948         else if (isGV_with_GP(sv)) {
8949             SvGETMAGIC(sv);
8950             gv = MUTABLE_GV(sv);
8951         }
8952         else
8953             gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
8954         *gvp = gv;
8955         if (!gv) {
8956             *st = NULL;
8957             return NULL;
8958         }
8959         /* Some flags to gv_fetchsv mean don't really create the GV  */
8960         if (!isGV_with_GP(gv)) {
8961             *st = NULL;
8962             return NULL;
8963         }
8964         *st = GvESTASH(gv);
8965     fix_gv:
8966         if (lref && !GvCVu(gv)) {
8967             SV *tmpsv;
8968             ENTER;
8969             tmpsv = newSV(0);
8970             gv_efullname3(tmpsv, gv, NULL);
8971             /* XXX this is probably not what they think they're getting.
8972              * It has the same effect as "sub name;", i.e. just a forward
8973              * declaration! */
8974             newSUB(start_subparse(FALSE, 0),
8975                    newSVOP(OP_CONST, 0, tmpsv),
8976                    NULL, NULL);
8977             LEAVE;
8978             if (!GvCVu(gv))
8979                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
8980                            SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8981         }
8982         return GvCVu(gv);
8983     }
8984 }
8985
8986 /*
8987 =for apidoc sv_true
8988
8989 Returns true if the SV has a true value by Perl's rules.
8990 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8991 instead use an in-line version.
8992
8993 =cut
8994 */
8995
8996 I32
8997 Perl_sv_true(pTHX_ register SV *const sv)
8998 {
8999     if (!sv)
9000         return 0;
9001     if (SvPOK(sv)) {
9002         register const XPV* const tXpv = (XPV*)SvANY(sv);
9003         if (tXpv &&
9004                 (tXpv->xpv_cur > 1 ||
9005                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9006             return 1;
9007         else
9008             return 0;
9009     }
9010     else {
9011         if (SvIOK(sv))
9012             return SvIVX(sv) != 0;
9013         else {
9014             if (SvNOK(sv))
9015                 return SvNVX(sv) != 0.0;
9016             else
9017                 return sv_2bool(sv);
9018         }
9019     }
9020 }
9021
9022 /*
9023 =for apidoc sv_pvn_force
9024
9025 Get a sensible string out of the SV somehow.
9026 A private implementation of the C<SvPV_force> macro for compilers which
9027 can't cope with complex macro expressions. Always use the macro instead.
9028
9029 =for apidoc sv_pvn_force_flags
9030
9031 Get a sensible string out of the SV somehow.
9032 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9033 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9034 implemented in terms of this function.
9035 You normally want to use the various wrapper macros instead: see
9036 C<SvPV_force> and C<SvPV_force_nomg>
9037
9038 =cut
9039 */
9040
9041 char *
9042 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9043 {
9044     dVAR;
9045
9046     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9047
9048     if (SvTHINKFIRST(sv) && !SvROK(sv))
9049         sv_force_normal_flags(sv, 0);
9050
9051     if (SvPOK(sv)) {
9052         if (lp)
9053             *lp = SvCUR(sv);
9054     }
9055     else {
9056         char *s;
9057         STRLEN len;
9058  
9059         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9060             const char * const ref = sv_reftype(sv,0);
9061             if (PL_op)
9062                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9063                            ref, OP_DESC(PL_op));
9064             else
9065                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9066         }
9067         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
9068             || isGV_with_GP(sv))
9069             /* diag_listed_as: Can't coerce %s to %s in %s */
9070             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9071                 OP_DESC(PL_op));
9072         s = sv_2pv_flags(sv, &len, flags);
9073         if (lp)
9074             *lp = len;
9075
9076         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9077             if (SvROK(sv))
9078                 sv_unref(sv);
9079             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9080             SvGROW(sv, len + 1);
9081             Move(s,SvPVX(sv),len,char);
9082             SvCUR_set(sv, len);
9083             SvPVX(sv)[len] = '\0';
9084         }
9085         if (!SvPOK(sv)) {
9086             SvPOK_on(sv);               /* validate pointer */
9087             SvTAINT(sv);
9088             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9089                                   PTR2UV(sv),SvPVX_const(sv)));
9090         }
9091     }
9092     return SvPVX_mutable(sv);
9093 }
9094
9095 /*
9096 =for apidoc sv_pvbyten_force
9097
9098 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
9099
9100 =cut
9101 */
9102
9103 char *
9104 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9105 {
9106     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9107
9108     sv_pvn_force(sv,lp);
9109     sv_utf8_downgrade(sv,0);
9110     *lp = SvCUR(sv);
9111     return SvPVX(sv);
9112 }
9113
9114 /*
9115 =for apidoc sv_pvutf8n_force
9116
9117 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
9118
9119 =cut
9120 */
9121
9122 char *
9123 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9124 {
9125     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9126
9127     sv_pvn_force(sv,lp);
9128     sv_utf8_upgrade(sv);
9129     *lp = SvCUR(sv);
9130     return SvPVX(sv);
9131 }
9132
9133 /*
9134 =for apidoc sv_reftype
9135
9136 Returns a string describing what the SV is a reference to.
9137
9138 =cut
9139 */
9140
9141 const char *
9142 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9143 {
9144     PERL_ARGS_ASSERT_SV_REFTYPE;
9145
9146     /* The fact that I don't need to downcast to char * everywhere, only in ?:
9147        inside return suggests a const propagation bug in g++.  */
9148     if (ob && SvOBJECT(sv)) {
9149         char * const name = HvNAME_get(SvSTASH(sv));
9150         return name ? name : (char *) "__ANON__";
9151     }
9152     else {
9153         switch (SvTYPE(sv)) {
9154         case SVt_NULL:
9155         case SVt_IV:
9156         case SVt_NV:
9157         case SVt_PV:
9158         case SVt_PVIV:
9159         case SVt_PVNV:
9160         case SVt_PVMG:
9161                                 if (SvVOK(sv))
9162                                     return "VSTRING";
9163                                 if (SvROK(sv))
9164                                     return "REF";
9165                                 else
9166                                     return "SCALAR";
9167
9168         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9169                                 /* tied lvalues should appear to be
9170                                  * scalars for backwards compatibility */
9171                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9172                                     ? "SCALAR" : "LVALUE");
9173         case SVt_PVAV:          return "ARRAY";
9174         case SVt_PVHV:          return "HASH";
9175         case SVt_PVCV:          return "CODE";
9176         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9177                                     ? "GLOB" : "SCALAR");
9178         case SVt_PVFM:          return "FORMAT";
9179         case SVt_PVIO:          return "IO";
9180         case SVt_BIND:          return "BIND";
9181         case SVt_REGEXP:        return "REGEXP";
9182         default:                return "UNKNOWN";
9183         }
9184     }
9185 }
9186
9187 /*
9188 =for apidoc sv_isobject
9189
9190 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9191 object.  If the SV is not an RV, or if the object is not blessed, then this
9192 will return false.
9193
9194 =cut
9195 */
9196
9197 int
9198 Perl_sv_isobject(pTHX_ SV *sv)
9199 {
9200     if (!sv)
9201         return 0;
9202     SvGETMAGIC(sv);
9203     if (!SvROK(sv))
9204         return 0;
9205     sv = SvRV(sv);
9206     if (!SvOBJECT(sv))
9207         return 0;
9208     return 1;
9209 }
9210
9211 /*
9212 =for apidoc sv_isa
9213
9214 Returns a boolean indicating whether the SV is blessed into the specified
9215 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9216 an inheritance relationship.
9217
9218 =cut
9219 */
9220
9221 int
9222 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9223 {
9224     const char *hvname;
9225
9226     PERL_ARGS_ASSERT_SV_ISA;
9227
9228     if (!sv)
9229         return 0;
9230     SvGETMAGIC(sv);
9231     if (!SvROK(sv))
9232         return 0;
9233     sv = SvRV(sv);
9234     if (!SvOBJECT(sv))
9235         return 0;
9236     hvname = HvNAME_get(SvSTASH(sv));
9237     if (!hvname)
9238         return 0;
9239
9240     return strEQ(hvname, name);
9241 }
9242
9243 /*
9244 =for apidoc newSVrv
9245
9246 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9247 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9248 be blessed in the specified package.  The new SV is returned and its
9249 reference count is 1.
9250
9251 =cut
9252 */
9253
9254 SV*
9255 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9256 {
9257     dVAR;
9258     SV *sv;
9259
9260     PERL_ARGS_ASSERT_NEWSVRV;
9261
9262     new_SV(sv);
9263
9264     SV_CHECK_THINKFIRST_COW_DROP(rv);
9265     (void)SvAMAGIC_off(rv);
9266
9267     if (SvTYPE(rv) >= SVt_PVMG) {
9268         const U32 refcnt = SvREFCNT(rv);
9269         SvREFCNT(rv) = 0;
9270         sv_clear(rv);
9271         SvFLAGS(rv) = 0;
9272         SvREFCNT(rv) = refcnt;
9273
9274         sv_upgrade(rv, SVt_IV);
9275     } else if (SvROK(rv)) {
9276         SvREFCNT_dec(SvRV(rv));
9277     } else {
9278         prepare_SV_for_RV(rv);
9279     }
9280
9281     SvOK_off(rv);
9282     SvRV_set(rv, sv);
9283     SvROK_on(rv);
9284
9285     if (classname) {
9286         HV* const stash = gv_stashpv(classname, GV_ADD);
9287         (void)sv_bless(rv, stash);
9288     }
9289     return sv;
9290 }
9291
9292 /*
9293 =for apidoc sv_setref_pv
9294
9295 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9296 argument will be upgraded to an RV.  That RV will be modified to point to
9297 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9298 into the SV.  The C<classname> argument indicates the package for the
9299 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9300 will have a reference count of 1, and the RV will be returned.
9301
9302 Do not use with other Perl types such as HV, AV, SV, CV, because those
9303 objects will become corrupted by the pointer copy process.
9304
9305 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9306
9307 =cut
9308 */
9309
9310 SV*
9311 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9312 {
9313     dVAR;
9314
9315     PERL_ARGS_ASSERT_SV_SETREF_PV;
9316
9317     if (!pv) {
9318         sv_setsv(rv, &PL_sv_undef);
9319         SvSETMAGIC(rv);
9320     }
9321     else
9322         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9323     return rv;
9324 }
9325
9326 /*
9327 =for apidoc sv_setref_iv
9328
9329 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9330 argument will be upgraded to an RV.  That RV will be modified to point to
9331 the new SV.  The C<classname> argument indicates the package for the
9332 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9333 will have a reference count of 1, and the RV will be returned.
9334
9335 =cut
9336 */
9337
9338 SV*
9339 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9340 {
9341     PERL_ARGS_ASSERT_SV_SETREF_IV;
9342
9343     sv_setiv(newSVrv(rv,classname), iv);
9344     return rv;
9345 }
9346
9347 /*
9348 =for apidoc sv_setref_uv
9349
9350 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9351 argument will be upgraded to an RV.  That RV will be modified to point to
9352 the new SV.  The C<classname> argument indicates the package for the
9353 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9354 will have a reference count of 1, and the RV will be returned.
9355
9356 =cut
9357 */
9358
9359 SV*
9360 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9361 {
9362     PERL_ARGS_ASSERT_SV_SETREF_UV;
9363
9364     sv_setuv(newSVrv(rv,classname), uv);
9365     return rv;
9366 }
9367
9368 /*
9369 =for apidoc sv_setref_nv
9370
9371 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9372 argument will be upgraded to an RV.  That RV will be modified to point to
9373 the new SV.  The C<classname> argument indicates the package for the
9374 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9375 will have a reference count of 1, and the RV will be returned.
9376
9377 =cut
9378 */
9379
9380 SV*
9381 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9382 {
9383     PERL_ARGS_ASSERT_SV_SETREF_NV;
9384
9385     sv_setnv(newSVrv(rv,classname), nv);
9386     return rv;
9387 }
9388
9389 /*
9390 =for apidoc sv_setref_pvn
9391
9392 Copies a string into a new SV, optionally blessing the SV.  The length of the
9393 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9394 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9395 argument indicates the package for the blessing.  Set C<classname> to
9396 C<NULL> to avoid the blessing.  The new SV will have a reference count
9397 of 1, and the RV will be returned.
9398
9399 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9400
9401 =cut
9402 */
9403
9404 SV*
9405 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9406                    const char *const pv, const STRLEN n)
9407 {
9408     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9409
9410     sv_setpvn(newSVrv(rv,classname), pv, n);
9411     return rv;
9412 }
9413
9414 /*
9415 =for apidoc sv_bless
9416
9417 Blesses an SV into a specified package.  The SV must be an RV.  The package
9418 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9419 of the SV is unaffected.
9420
9421 =cut
9422 */
9423
9424 SV*
9425 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9426 {
9427     dVAR;
9428     SV *tmpRef;
9429
9430     PERL_ARGS_ASSERT_SV_BLESS;
9431
9432     if (!SvROK(sv))
9433         Perl_croak(aTHX_ "Can't bless non-reference value");
9434     tmpRef = SvRV(sv);
9435     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9436         if (SvIsCOW(tmpRef))
9437             sv_force_normal_flags(tmpRef, 0);
9438         if (SvREADONLY(tmpRef))
9439             Perl_croak_no_modify(aTHX);
9440         if (SvOBJECT(tmpRef)) {
9441             if (SvTYPE(tmpRef) != SVt_PVIO)
9442                 --PL_sv_objcount;
9443             SvREFCNT_dec(SvSTASH(tmpRef));
9444         }
9445     }
9446     SvOBJECT_on(tmpRef);
9447     if (SvTYPE(tmpRef) != SVt_PVIO)
9448         ++PL_sv_objcount;
9449     SvUPGRADE(tmpRef, SVt_PVMG);
9450     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9451
9452     if (Gv_AMG(stash))
9453         SvAMAGIC_on(sv);
9454     else
9455         (void)SvAMAGIC_off(sv);
9456
9457     if(SvSMAGICAL(tmpRef))
9458         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9459             mg_set(tmpRef);
9460
9461
9462
9463     return sv;
9464 }
9465
9466 /* Downgrades a PVGV to a PVMG. If it’s actually a PVLV, we leave the type
9467  * as it is after unglobbing it.
9468  */
9469
9470 STATIC void
9471 S_sv_unglob(pTHX_ SV *const sv)
9472 {
9473     dVAR;
9474     void *xpvmg;
9475     HV *stash;
9476     SV * const temp = sv_newmortal();
9477
9478     PERL_ARGS_ASSERT_SV_UNGLOB;
9479
9480     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9481     SvFAKE_off(sv);
9482     gv_efullname3(temp, MUTABLE_GV(sv), "*");
9483
9484     if (GvGP(sv)) {
9485         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9486            && HvNAME_get(stash))
9487             mro_method_changed_in(stash);
9488         gp_free(MUTABLE_GV(sv));
9489     }
9490     if (GvSTASH(sv)) {
9491         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9492         GvSTASH(sv) = NULL;
9493     }
9494     GvMULTI_off(sv);
9495     if (GvNAME_HEK(sv)) {
9496         unshare_hek(GvNAME_HEK(sv));
9497     }
9498     isGV_with_GP_off(sv);
9499
9500     if(SvTYPE(sv) == SVt_PVGV) {
9501         /* need to keep SvANY(sv) in the right arena */
9502         xpvmg = new_XPVMG();
9503         StructCopy(SvANY(sv), xpvmg, XPVMG);
9504         del_XPVGV(SvANY(sv));
9505         SvANY(sv) = xpvmg;
9506
9507         SvFLAGS(sv) &= ~SVTYPEMASK;
9508         SvFLAGS(sv) |= SVt_PVMG;
9509     }
9510
9511     /* Intentionally not calling any local SET magic, as this isn't so much a
9512        set operation as merely an internal storage change.  */
9513     sv_setsv_flags(sv, temp, 0);
9514 }
9515
9516 /*
9517 =for apidoc sv_unref_flags
9518
9519 Unsets the RV status of the SV, and decrements the reference count of
9520 whatever was being referenced by the RV.  This can almost be thought of
9521 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9522 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9523 (otherwise the decrementing is conditional on the reference count being
9524 different from one or the reference being a readonly SV).
9525 See C<SvROK_off>.
9526
9527 =cut
9528 */
9529
9530 void
9531 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9532 {
9533     SV* const target = SvRV(ref);
9534
9535     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9536
9537     if (SvWEAKREF(ref)) {
9538         sv_del_backref(target, ref);
9539         SvWEAKREF_off(ref);
9540         SvRV_set(ref, NULL);
9541         return;
9542     }
9543     SvRV_set(ref, NULL);
9544     SvROK_off(ref);
9545     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9546        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9547     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9548         SvREFCNT_dec(target);
9549     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9550         sv_2mortal(target);     /* Schedule for freeing later */
9551 }
9552
9553 /*
9554 =for apidoc sv_untaint
9555
9556 Untaint an SV. Use C<SvTAINTED_off> instead.
9557 =cut
9558 */
9559
9560 void
9561 Perl_sv_untaint(pTHX_ SV *const sv)
9562 {
9563     PERL_ARGS_ASSERT_SV_UNTAINT;
9564
9565     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9566         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9567         if (mg)
9568             mg->mg_len &= ~1;
9569     }
9570 }
9571
9572 /*
9573 =for apidoc sv_tainted
9574
9575 Test an SV for taintedness. Use C<SvTAINTED> instead.
9576 =cut
9577 */
9578
9579 bool
9580 Perl_sv_tainted(pTHX_ SV *const sv)
9581 {
9582     PERL_ARGS_ASSERT_SV_TAINTED;
9583
9584     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9585         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9586         if (mg && (mg->mg_len & 1) )
9587             return TRUE;
9588     }
9589     return FALSE;
9590 }
9591
9592 /*
9593 =for apidoc sv_setpviv
9594
9595 Copies an integer into the given SV, also updating its string value.
9596 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9597
9598 =cut
9599 */
9600
9601 void
9602 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9603 {
9604     char buf[TYPE_CHARS(UV)];
9605     char *ebuf;
9606     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9607
9608     PERL_ARGS_ASSERT_SV_SETPVIV;
9609
9610     sv_setpvn(sv, ptr, ebuf - ptr);
9611 }
9612
9613 /*
9614 =for apidoc sv_setpviv_mg
9615
9616 Like C<sv_setpviv>, but also handles 'set' magic.
9617
9618 =cut
9619 */
9620
9621 void
9622 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9623 {
9624     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9625
9626     sv_setpviv(sv, iv);
9627     SvSETMAGIC(sv);
9628 }
9629
9630 #if defined(PERL_IMPLICIT_CONTEXT)
9631
9632 /* pTHX_ magic can't cope with varargs, so this is a no-context
9633  * version of the main function, (which may itself be aliased to us).
9634  * Don't access this version directly.
9635  */
9636
9637 void
9638 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9639 {
9640     dTHX;
9641     va_list args;
9642
9643     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9644
9645     va_start(args, pat);
9646     sv_vsetpvf(sv, pat, &args);
9647     va_end(args);
9648 }
9649
9650 /* pTHX_ magic can't cope with varargs, so this is a no-context
9651  * version of the main function, (which may itself be aliased to us).
9652  * Don't access this version directly.
9653  */
9654
9655 void
9656 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9657 {
9658     dTHX;
9659     va_list args;
9660
9661     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9662
9663     va_start(args, pat);
9664     sv_vsetpvf_mg(sv, pat, &args);
9665     va_end(args);
9666 }
9667 #endif
9668
9669 /*
9670 =for apidoc sv_setpvf
9671
9672 Works like C<sv_catpvf> but copies the text into the SV instead of
9673 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9674
9675 =cut
9676 */
9677
9678 void
9679 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9680 {
9681     va_list args;
9682
9683     PERL_ARGS_ASSERT_SV_SETPVF;
9684
9685     va_start(args, pat);
9686     sv_vsetpvf(sv, pat, &args);
9687     va_end(args);
9688 }
9689
9690 /*
9691 =for apidoc sv_vsetpvf
9692
9693 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9694 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9695
9696 Usually used via its frontend C<sv_setpvf>.
9697
9698 =cut
9699 */
9700
9701 void
9702 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9703 {
9704     PERL_ARGS_ASSERT_SV_VSETPVF;
9705
9706     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9707 }
9708
9709 /*
9710 =for apidoc sv_setpvf_mg
9711
9712 Like C<sv_setpvf>, but also handles 'set' magic.
9713
9714 =cut
9715 */
9716
9717 void
9718 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9719 {
9720     va_list args;
9721
9722     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9723
9724     va_start(args, pat);
9725     sv_vsetpvf_mg(sv, pat, &args);
9726     va_end(args);
9727 }
9728
9729 /*
9730 =for apidoc sv_vsetpvf_mg
9731
9732 Like C<sv_vsetpvf>, but also handles 'set' magic.
9733
9734 Usually used via its frontend C<sv_setpvf_mg>.
9735
9736 =cut
9737 */
9738
9739 void
9740 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9741 {
9742     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9743
9744     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9745     SvSETMAGIC(sv);
9746 }
9747
9748 #if defined(PERL_IMPLICIT_CONTEXT)
9749
9750 /* pTHX_ magic can't cope with varargs, so this is a no-context
9751  * version of the main function, (which may itself be aliased to us).
9752  * Don't access this version directly.
9753  */
9754
9755 void
9756 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9757 {
9758     dTHX;
9759     va_list args;
9760
9761     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9762
9763     va_start(args, pat);
9764     sv_vcatpvf(sv, pat, &args);
9765     va_end(args);
9766 }
9767
9768 /* pTHX_ magic can't cope with varargs, so this is a no-context
9769  * version of the main function, (which may itself be aliased to us).
9770  * Don't access this version directly.
9771  */
9772
9773 void
9774 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9775 {
9776     dTHX;
9777     va_list args;
9778
9779     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9780
9781     va_start(args, pat);
9782     sv_vcatpvf_mg(sv, pat, &args);
9783     va_end(args);
9784 }
9785 #endif
9786
9787 /*
9788 =for apidoc sv_catpvf
9789
9790 Processes its arguments like C<sprintf> and appends the formatted
9791 output to an SV.  If the appended data contains "wide" characters
9792 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9793 and characters >255 formatted with %c), the original SV might get
9794 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9795 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9796 valid UTF-8; if the original SV was bytes, the pattern should be too.
9797
9798 =cut */
9799
9800 void
9801 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9802 {
9803     va_list args;
9804
9805     PERL_ARGS_ASSERT_SV_CATPVF;
9806
9807     va_start(args, pat);
9808     sv_vcatpvf(sv, pat, &args);
9809     va_end(args);
9810 }
9811
9812 /*
9813 =for apidoc sv_vcatpvf
9814
9815 Processes its arguments like C<vsprintf> and appends the formatted output
9816 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9817
9818 Usually used via its frontend C<sv_catpvf>.
9819
9820 =cut
9821 */
9822
9823 void
9824 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9825 {
9826     PERL_ARGS_ASSERT_SV_VCATPVF;
9827
9828     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9829 }
9830
9831 /*
9832 =for apidoc sv_catpvf_mg
9833
9834 Like C<sv_catpvf>, but also handles 'set' magic.
9835
9836 =cut
9837 */
9838
9839 void
9840 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9841 {
9842     va_list args;
9843
9844     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9845
9846     va_start(args, pat);
9847     sv_vcatpvf_mg(sv, pat, &args);
9848     va_end(args);
9849 }
9850
9851 /*
9852 =for apidoc sv_vcatpvf_mg
9853
9854 Like C<sv_vcatpvf>, but also handles 'set' magic.
9855
9856 Usually used via its frontend C<sv_catpvf_mg>.
9857
9858 =cut
9859 */
9860
9861 void
9862 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9863 {
9864     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9865
9866     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9867     SvSETMAGIC(sv);
9868 }
9869
9870 /*
9871 =for apidoc sv_vsetpvfn
9872
9873 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9874 appending it.
9875
9876 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9877
9878 =cut
9879 */
9880
9881 void
9882 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9883                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9884 {
9885     PERL_ARGS_ASSERT_SV_VSETPVFN;
9886
9887     sv_setpvs(sv, "");
9888     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9889 }
9890
9891
9892 /*
9893  * Warn of missing argument to sprintf, and then return a defined value
9894  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9895  */
9896 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9897 STATIC SV*
9898 S_vcatpvfn_missing_argument(pTHX) {
9899     if (ckWARN(WARN_MISSING)) {
9900         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9901                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9902     }
9903     return &PL_sv_no;
9904 }
9905
9906
9907 STATIC I32
9908 S_expect_number(pTHX_ char **const pattern)
9909 {
9910     dVAR;
9911     I32 var = 0;
9912
9913     PERL_ARGS_ASSERT_EXPECT_NUMBER;
9914
9915     switch (**pattern) {
9916     case '1': case '2': case '3':
9917     case '4': case '5': case '6':
9918     case '7': case '8': case '9':
9919         var = *(*pattern)++ - '0';
9920         while (isDIGIT(**pattern)) {
9921             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9922             if (tmp < var)
9923                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9924             var = tmp;
9925         }
9926     }
9927     return var;
9928 }
9929
9930 STATIC char *
9931 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9932 {
9933     const int neg = nv < 0;
9934     UV uv;
9935
9936     PERL_ARGS_ASSERT_F0CONVERT;
9937
9938     if (neg)
9939         nv = -nv;
9940     if (nv < UV_MAX) {
9941         char *p = endbuf;
9942         nv += 0.5;
9943         uv = (UV)nv;
9944         if (uv & 1 && uv == nv)
9945             uv--;                       /* Round to even */
9946         do {
9947             const unsigned dig = uv % 10;
9948             *--p = '0' + dig;
9949         } while (uv /= 10);
9950         if (neg)
9951             *--p = '-';
9952         *len = endbuf - p;
9953         return p;
9954     }
9955     return NULL;
9956 }
9957
9958
9959 /*
9960 =for apidoc sv_vcatpvfn
9961
9962 Processes its arguments like C<vsprintf> and appends the formatted output
9963 to an SV.  Uses an array of SVs if the C style variable argument list is
9964 missing (NULL).  When running with taint checks enabled, indicates via
9965 C<maybe_tainted> if results are untrustworthy (often due to the use of
9966 locales).
9967
9968 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9969
9970 =cut
9971 */
9972
9973
9974 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
9975                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
9976                         vec_utf8 = DO_UTF8(vecsv);
9977
9978 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9979
9980 void
9981 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9982                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9983 {
9984     dVAR;
9985     char *p;
9986     char *q;
9987     const char *patend;
9988     STRLEN origlen;
9989     I32 svix = 0;
9990     static const char nullstr[] = "(null)";
9991     SV *argsv = NULL;
9992     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
9993     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
9994     SV *nsv = NULL;
9995     /* Times 4: a decimal digit takes more than 3 binary digits.
9996      * NV_DIG: mantissa takes than many decimal digits.
9997      * Plus 32: Playing safe. */
9998     char ebuf[IV_DIG * 4 + NV_DIG + 32];
9999     /* large enough for "%#.#f" --chip */
10000     /* what about long double NVs? --jhi */
10001
10002     PERL_ARGS_ASSERT_SV_VCATPVFN;
10003     PERL_UNUSED_ARG(maybe_tainted);
10004
10005     /* no matter what, this is a string now */
10006     (void)SvPV_force(sv, origlen);
10007
10008     /* special-case "", "%s", and "%-p" (SVf - see below) */
10009     if (patlen == 0)
10010         return;
10011     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10012         if (args) {
10013             const char * const s = va_arg(*args, char*);
10014             sv_catpv(sv, s ? s : nullstr);
10015         }
10016         else if (svix < svmax) {
10017             sv_catsv(sv, *svargs);
10018         }
10019         else
10020             S_vcatpvfn_missing_argument(aTHX);
10021         return;
10022     }
10023     if (args && patlen == 3 && pat[0] == '%' &&
10024                 pat[1] == '-' && pat[2] == 'p') {
10025         argsv = MUTABLE_SV(va_arg(*args, void*));
10026         sv_catsv(sv, argsv);
10027         return;
10028     }
10029
10030 #ifndef USE_LONG_DOUBLE
10031     /* special-case "%.<number>[gf]" */
10032     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10033          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10034         unsigned digits = 0;
10035         const char *pp;
10036
10037         pp = pat + 2;
10038         while (*pp >= '0' && *pp <= '9')
10039             digits = 10 * digits + (*pp++ - '0');
10040         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10041             const NV nv = SvNV(*svargs);
10042             if (*pp == 'g') {
10043                 /* Add check for digits != 0 because it seems that some
10044                    gconverts are buggy in this case, and we don't yet have
10045                    a Configure test for this.  */
10046                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10047                      /* 0, point, slack */
10048                     Gconvert(nv, (int)digits, 0, ebuf);
10049                     sv_catpv(sv, ebuf);
10050                     if (*ebuf)  /* May return an empty string for digits==0 */
10051                         return;
10052                 }
10053             } else if (!digits) {
10054                 STRLEN l;
10055
10056                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10057                     sv_catpvn(sv, p, l);
10058                     return;
10059                 }
10060             }
10061         }
10062     }
10063 #endif /* !USE_LONG_DOUBLE */
10064
10065     if (!args && svix < svmax && DO_UTF8(*svargs))
10066         has_utf8 = TRUE;
10067
10068     patend = (char*)pat + patlen;
10069     for (p = (char*)pat; p < patend; p = q) {
10070         bool alt = FALSE;
10071         bool left = FALSE;
10072         bool vectorize = FALSE;
10073         bool vectorarg = FALSE;
10074         bool vec_utf8 = FALSE;
10075         char fill = ' ';
10076         char plus = 0;
10077         char intsize = 0;
10078         STRLEN width = 0;
10079         STRLEN zeros = 0;
10080         bool has_precis = FALSE;
10081         STRLEN precis = 0;
10082         const I32 osvix = svix;
10083         bool is_utf8 = FALSE;  /* is this item utf8?   */
10084 #ifdef HAS_LDBL_SPRINTF_BUG
10085         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10086            with sfio - Allen <allens@cpan.org> */
10087         bool fix_ldbl_sprintf_bug = FALSE;
10088 #endif
10089
10090         char esignbuf[4];
10091         U8 utf8buf[UTF8_MAXBYTES+1];
10092         STRLEN esignlen = 0;
10093
10094         const char *eptr = NULL;
10095         const char *fmtstart;
10096         STRLEN elen = 0;
10097         SV *vecsv = NULL;
10098         const U8 *vecstr = NULL;
10099         STRLEN veclen = 0;
10100         char c = 0;
10101         int i;
10102         unsigned base = 0;
10103         IV iv = 0;
10104         UV uv = 0;
10105         /* we need a long double target in case HAS_LONG_DOUBLE but
10106            not USE_LONG_DOUBLE
10107         */
10108 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10109         long double nv;
10110 #else
10111         NV nv;
10112 #endif
10113         STRLEN have;
10114         STRLEN need;
10115         STRLEN gap;
10116         const char *dotstr = ".";
10117         STRLEN dotstrlen = 1;
10118         I32 efix = 0; /* explicit format parameter index */
10119         I32 ewix = 0; /* explicit width index */
10120         I32 epix = 0; /* explicit precision index */
10121         I32 evix = 0; /* explicit vector index */
10122         bool asterisk = FALSE;
10123
10124         /* echo everything up to the next format specification */
10125         for (q = p; q < patend && *q != '%'; ++q) ;
10126         if (q > p) {
10127             if (has_utf8 && !pat_utf8)
10128                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
10129             else
10130                 sv_catpvn(sv, p, q - p);
10131             p = q;
10132         }
10133         if (q++ >= patend)
10134             break;
10135
10136         fmtstart = q;
10137
10138 /*
10139     We allow format specification elements in this order:
10140         \d+\$              explicit format parameter index
10141         [-+ 0#]+           flags
10142         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10143         0                  flag (as above): repeated to allow "v02"     
10144         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10145         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10146         [hlqLV]            size
10147     [%bcdefginopsuxDFOUX] format (mandatory)
10148 */
10149
10150         if (args) {
10151 /*  
10152         As of perl5.9.3, printf format checking is on by default.
10153         Internally, perl uses %p formats to provide an escape to
10154         some extended formatting.  This block deals with those
10155         extensions: if it does not match, (char*)q is reset and
10156         the normal format processing code is used.
10157
10158         Currently defined extensions are:
10159                 %p              include pointer address (standard)      
10160                 %-p     (SVf)   include an SV (previously %_)
10161                 %-<num>p        include an SV with precision <num>      
10162                 %<num>p         reserved for future extensions
10163
10164         Robin Barker 2005-07-14
10165
10166                 %1p     (VDf)   removed.  RMB 2007-10-19
10167 */
10168             char* r = q; 
10169             bool sv = FALSE;    
10170             STRLEN n = 0;
10171             if (*q == '-')
10172                 sv = *q++;
10173             n = expect_number(&q);
10174             if (*q++ == 'p') {
10175                 if (sv) {                       /* SVf */
10176                     if (n) {
10177                         precis = n;
10178                         has_precis = TRUE;
10179                     }
10180                     argsv = MUTABLE_SV(va_arg(*args, void*));
10181                     eptr = SvPV_const(argsv, elen);
10182                     if (DO_UTF8(argsv))
10183                         is_utf8 = TRUE;
10184                     goto string;
10185                 }
10186                 else if (n) {
10187                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10188                                      "internal %%<num>p might conflict with future printf extensions");
10189                 }
10190             }
10191             q = r; 
10192         }
10193
10194         if ( (width = expect_number(&q)) ) {
10195             if (*q == '$') {
10196                 ++q;
10197                 efix = width;
10198             } else {
10199                 goto gotwidth;
10200             }
10201         }
10202
10203         /* FLAGS */
10204
10205         while (*q) {
10206             switch (*q) {
10207             case ' ':
10208             case '+':
10209                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10210                     q++;
10211                 else
10212                     plus = *q++;
10213                 continue;
10214
10215             case '-':
10216                 left = TRUE;
10217                 q++;
10218                 continue;
10219
10220             case '0':
10221                 fill = *q++;
10222                 continue;
10223
10224             case '#':
10225                 alt = TRUE;
10226                 q++;
10227                 continue;
10228
10229             default:
10230                 break;
10231             }
10232             break;
10233         }
10234
10235       tryasterisk:
10236         if (*q == '*') {
10237             q++;
10238             if ( (ewix = expect_number(&q)) )
10239                 if (*q++ != '$')
10240                     goto unknown;
10241             asterisk = TRUE;
10242         }
10243         if (*q == 'v') {
10244             q++;
10245             if (vectorize)
10246                 goto unknown;
10247             if ((vectorarg = asterisk)) {
10248                 evix = ewix;
10249                 ewix = 0;
10250                 asterisk = FALSE;
10251             }
10252             vectorize = TRUE;
10253             goto tryasterisk;
10254         }
10255
10256         if (!asterisk)
10257         {
10258             if( *q == '0' )
10259                 fill = *q++;
10260             width = expect_number(&q);
10261         }
10262
10263         if (vectorize && vectorarg) {
10264             /* vectorizing, but not with the default "." */
10265             if (args)
10266                 vecsv = va_arg(*args, SV*);
10267             else if (evix) {
10268                 vecsv = (evix > 0 && evix <= svmax)
10269                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10270             } else {
10271                 vecsv = svix < svmax
10272                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10273             }
10274             dotstr = SvPV_const(vecsv, dotstrlen);
10275             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10276                bad with tied or overloaded values that return UTF8.  */
10277             if (DO_UTF8(vecsv))
10278                 is_utf8 = TRUE;
10279             else if (has_utf8) {
10280                 vecsv = sv_mortalcopy(vecsv);
10281                 sv_utf8_upgrade(vecsv);
10282                 dotstr = SvPV_const(vecsv, dotstrlen);
10283                 is_utf8 = TRUE;
10284             }               
10285         }
10286
10287         if (asterisk) {
10288             if (args)
10289                 i = va_arg(*args, int);
10290             else
10291                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10292                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10293             left |= (i < 0);
10294             width = (i < 0) ? -i : i;
10295         }
10296       gotwidth:
10297
10298         /* PRECISION */
10299
10300         if (*q == '.') {
10301             q++;
10302             if (*q == '*') {
10303                 q++;
10304                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10305                     goto unknown;
10306                 /* XXX: todo, support specified precision parameter */
10307                 if (epix)
10308                     goto unknown;
10309                 if (args)
10310                     i = va_arg(*args, int);
10311                 else
10312                     i = (ewix ? ewix <= svmax : svix < svmax)
10313                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10314                 precis = i;
10315                 has_precis = !(i < 0);
10316             }
10317             else {
10318                 precis = 0;
10319                 while (isDIGIT(*q))
10320                     precis = precis * 10 + (*q++ - '0');
10321                 has_precis = TRUE;
10322             }
10323         }
10324
10325         if (vectorize) {
10326             if (args) {
10327                 VECTORIZE_ARGS
10328             }
10329             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10330                 vecsv = svargs[efix ? efix-1 : svix++];
10331                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10332                 vec_utf8 = DO_UTF8(vecsv);
10333
10334                 /* if this is a version object, we need to convert
10335                  * back into v-string notation and then let the
10336                  * vectorize happen normally
10337                  */
10338                 if (sv_derived_from(vecsv, "version")) {
10339                     char *version = savesvpv(vecsv);
10340                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10341                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10342                         "vector argument not supported with alpha versions");
10343                         goto unknown;
10344                     }
10345                     vecsv = sv_newmortal();
10346                     scan_vstring(version, version + veclen, vecsv);
10347                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10348                     vec_utf8 = DO_UTF8(vecsv);
10349                     Safefree(version);
10350                 }
10351             }
10352             else {
10353                 vecstr = (U8*)"";
10354                 veclen = 0;
10355             }
10356         }
10357
10358         /* SIZE */
10359
10360         switch (*q) {
10361 #ifdef WIN32
10362         case 'I':                       /* Ix, I32x, and I64x */
10363 #  ifdef WIN64
10364             if (q[1] == '6' && q[2] == '4') {
10365                 q += 3;
10366                 intsize = 'q';
10367                 break;
10368             }
10369 #  endif
10370             if (q[1] == '3' && q[2] == '2') {
10371                 q += 3;
10372                 break;
10373             }
10374 #  ifdef WIN64
10375             intsize = 'q';
10376 #  endif
10377             q++;
10378             break;
10379 #endif
10380 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10381         case 'L':                       /* Ld */
10382             /*FALLTHROUGH*/
10383 #ifdef HAS_QUAD
10384         case 'q':                       /* qd */
10385 #endif
10386             intsize = 'q';
10387             q++;
10388             break;
10389 #endif
10390         case 'l':
10391             ++q;
10392 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10393             if (*q == 'l') {    /* lld, llf */
10394                 intsize = 'q';
10395                 ++q;
10396             }
10397             else
10398 #endif
10399                 intsize = 'l';
10400             break;
10401         case 'h':
10402             if (*++q == 'h') {  /* hhd, hhu */
10403                 intsize = 'c';
10404                 ++q;
10405             }
10406             else
10407                 intsize = 'h';
10408             break;
10409         case 'V':
10410         case 'z':
10411         case 't':
10412 #if HAS_C99
10413         case 'j':
10414 #endif
10415             intsize = *q++;
10416             break;
10417         }
10418
10419         /* CONVERSION */
10420
10421         if (*q == '%') {
10422             eptr = q++;
10423             elen = 1;
10424             if (vectorize) {
10425                 c = '%';
10426                 goto unknown;
10427             }
10428             goto string;
10429         }
10430
10431         if (!vectorize && !args) {
10432             if (efix) {
10433                 const I32 i = efix-1;
10434                 argsv = (i >= 0 && i < svmax)
10435                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10436             } else {
10437                 argsv = (svix >= 0 && svix < svmax)
10438                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10439             }
10440         }
10441
10442         switch (c = *q++) {
10443
10444             /* STRINGS */
10445
10446         case 'c':
10447             if (vectorize)
10448                 goto unknown;
10449             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10450             if ((uv > 255 ||
10451                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10452                 && !IN_BYTES) {
10453                 eptr = (char*)utf8buf;
10454                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10455                 is_utf8 = TRUE;
10456             }
10457             else {
10458                 c = (char)uv;
10459                 eptr = &c;
10460                 elen = 1;
10461             }
10462             goto string;
10463
10464         case 's':
10465             if (vectorize)
10466                 goto unknown;
10467             if (args) {
10468                 eptr = va_arg(*args, char*);
10469                 if (eptr)
10470                     elen = strlen(eptr);
10471                 else {
10472                     eptr = (char *)nullstr;
10473                     elen = sizeof nullstr - 1;
10474                 }
10475             }
10476             else {
10477                 eptr = SvPV_const(argsv, elen);
10478                 if (DO_UTF8(argsv)) {
10479                     STRLEN old_precis = precis;
10480                     if (has_precis && precis < elen) {
10481                         STRLEN ulen = sv_len_utf8(argsv);
10482                         I32 p = precis > ulen ? ulen : precis;
10483                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
10484                         precis = p;
10485                     }
10486                     if (width) { /* fudge width (can't fudge elen) */
10487                         if (has_precis && precis < elen)
10488                             width += precis - old_precis;
10489                         else
10490                             width += elen - sv_len_utf8(argsv);
10491                     }
10492                     is_utf8 = TRUE;
10493                 }
10494             }
10495
10496         string:
10497             if (has_precis && precis < elen)
10498                 elen = precis;
10499             break;
10500
10501             /* INTEGERS */
10502
10503         case 'p':
10504             if (alt || vectorize)
10505                 goto unknown;
10506             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10507             base = 16;
10508             goto integer;
10509
10510         case 'D':
10511 #ifdef IV_IS_QUAD
10512             intsize = 'q';
10513 #else
10514             intsize = 'l';
10515 #endif
10516             /*FALLTHROUGH*/
10517         case 'd':
10518         case 'i':
10519 #if vdNUMBER
10520         format_vd:
10521 #endif
10522             if (vectorize) {
10523                 STRLEN ulen;
10524                 if (!veclen)
10525                     continue;
10526                 if (vec_utf8)
10527                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10528                                         UTF8_ALLOW_ANYUV);
10529                 else {
10530                     uv = *vecstr;
10531                     ulen = 1;
10532                 }
10533                 vecstr += ulen;
10534                 veclen -= ulen;
10535                 if (plus)
10536                      esignbuf[esignlen++] = plus;
10537             }
10538             else if (args) {
10539                 switch (intsize) {
10540                 case 'c':       iv = (char)va_arg(*args, int); break;
10541                 case 'h':       iv = (short)va_arg(*args, int); break;
10542                 case 'l':       iv = va_arg(*args, long); break;
10543                 case 'V':       iv = va_arg(*args, IV); break;
10544                 case 'z':       iv = va_arg(*args, SSize_t); break;
10545                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10546                 default:        iv = va_arg(*args, int); break;
10547 #if HAS_C99
10548                 case 'j':       iv = va_arg(*args, intmax_t); break;
10549 #endif
10550                 case 'q':
10551 #ifdef HAS_QUAD
10552                                 iv = va_arg(*args, Quad_t); break;
10553 #else
10554                                 goto unknown;
10555 #endif
10556                 }
10557             }
10558             else {
10559                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10560                 switch (intsize) {
10561                 case 'c':       iv = (char)tiv; break;
10562                 case 'h':       iv = (short)tiv; break;
10563                 case 'l':       iv = (long)tiv; break;
10564                 case 'V':
10565                 default:        iv = tiv; break;
10566                 case 'q':
10567 #ifdef HAS_QUAD
10568                                 iv = (Quad_t)tiv; break;
10569 #else
10570                                 goto unknown;
10571 #endif
10572                 }
10573             }
10574             if ( !vectorize )   /* we already set uv above */
10575             {
10576                 if (iv >= 0) {
10577                     uv = iv;
10578                     if (plus)
10579                         esignbuf[esignlen++] = plus;
10580                 }
10581                 else {
10582                     uv = -iv;
10583                     esignbuf[esignlen++] = '-';
10584                 }
10585             }
10586             base = 10;
10587             goto integer;
10588
10589         case 'U':
10590 #ifdef IV_IS_QUAD
10591             intsize = 'q';
10592 #else
10593             intsize = 'l';
10594 #endif
10595             /*FALLTHROUGH*/
10596         case 'u':
10597             base = 10;
10598             goto uns_integer;
10599
10600         case 'B':
10601         case 'b':
10602             base = 2;
10603             goto uns_integer;
10604
10605         case 'O':
10606 #ifdef IV_IS_QUAD
10607             intsize = 'q';
10608 #else
10609             intsize = 'l';
10610 #endif
10611             /*FALLTHROUGH*/
10612         case 'o':
10613             base = 8;
10614             goto uns_integer;
10615
10616         case 'X':
10617         case 'x':
10618             base = 16;
10619
10620         uns_integer:
10621             if (vectorize) {
10622                 STRLEN ulen;
10623         vector:
10624                 if (!veclen)
10625                     continue;
10626                 if (vec_utf8)
10627                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10628                                         UTF8_ALLOW_ANYUV);
10629                 else {
10630                     uv = *vecstr;
10631                     ulen = 1;
10632                 }
10633                 vecstr += ulen;
10634                 veclen -= ulen;
10635             }
10636             else if (args) {
10637                 switch (intsize) {
10638                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10639                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10640                 case 'l':  uv = va_arg(*args, unsigned long); break;
10641                 case 'V':  uv = va_arg(*args, UV); break;
10642                 case 'z':  uv = va_arg(*args, Size_t); break;
10643                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10644 #if HAS_C99
10645                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10646 #endif
10647                 default:   uv = va_arg(*args, unsigned); break;
10648                 case 'q':
10649 #ifdef HAS_QUAD
10650                            uv = va_arg(*args, Uquad_t); break;
10651 #else
10652                            goto unknown;
10653 #endif
10654                 }
10655             }
10656             else {
10657                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10658                 switch (intsize) {
10659                 case 'c':       uv = (unsigned char)tuv; break;
10660                 case 'h':       uv = (unsigned short)tuv; break;
10661                 case 'l':       uv = (unsigned long)tuv; break;
10662                 case 'V':
10663                 default:        uv = tuv; break;
10664                 case 'q':
10665 #ifdef HAS_QUAD
10666                                 uv = (Uquad_t)tuv; break;
10667 #else
10668                                 goto unknown;
10669 #endif
10670                 }
10671             }
10672
10673         integer:
10674             {
10675                 char *ptr = ebuf + sizeof ebuf;
10676                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10677                 zeros = 0;
10678
10679                 switch (base) {
10680                     unsigned dig;
10681                 case 16:
10682                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10683                     do {
10684                         dig = uv & 15;
10685                         *--ptr = p[dig];
10686                     } while (uv >>= 4);
10687                     if (tempalt) {
10688                         esignbuf[esignlen++] = '0';
10689                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10690                     }
10691                     break;
10692                 case 8:
10693                     do {
10694                         dig = uv & 7;
10695                         *--ptr = '0' + dig;
10696                     } while (uv >>= 3);
10697                     if (alt && *ptr != '0')
10698                         *--ptr = '0';
10699                     break;
10700                 case 2:
10701                     do {
10702                         dig = uv & 1;
10703                         *--ptr = '0' + dig;
10704                     } while (uv >>= 1);
10705                     if (tempalt) {
10706                         esignbuf[esignlen++] = '0';
10707                         esignbuf[esignlen++] = c;
10708                     }
10709                     break;
10710                 default:                /* it had better be ten or less */
10711                     do {
10712                         dig = uv % base;
10713                         *--ptr = '0' + dig;
10714                     } while (uv /= base);
10715                     break;
10716                 }
10717                 elen = (ebuf + sizeof ebuf) - ptr;
10718                 eptr = ptr;
10719                 if (has_precis) {
10720                     if (precis > elen)
10721                         zeros = precis - elen;
10722                     else if (precis == 0 && elen == 1 && *eptr == '0'
10723                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10724                         elen = 0;
10725
10726                 /* a precision nullifies the 0 flag. */
10727                     if (fill == '0')
10728                         fill = ' ';
10729                 }
10730             }
10731             break;
10732
10733             /* FLOATING POINT */
10734
10735         case 'F':
10736             c = 'f';            /* maybe %F isn't supported here */
10737             /*FALLTHROUGH*/
10738         case 'e': case 'E':
10739         case 'f':
10740         case 'g': case 'G':
10741             if (vectorize)
10742                 goto unknown;
10743
10744             /* This is evil, but floating point is even more evil */
10745
10746             /* for SV-style calling, we can only get NV
10747                for C-style calling, we assume %f is double;
10748                for simplicity we allow any of %Lf, %llf, %qf for long double
10749             */
10750             switch (intsize) {
10751             case 'V':
10752 #if defined(USE_LONG_DOUBLE)
10753                 intsize = 'q';
10754 #endif
10755                 break;
10756 /* [perl #20339] - we should accept and ignore %lf rather than die */
10757             case 'l':
10758                 /*FALLTHROUGH*/
10759             default:
10760 #if defined(USE_LONG_DOUBLE)
10761                 intsize = args ? 0 : 'q';
10762 #endif
10763                 break;
10764             case 'q':
10765 #if defined(HAS_LONG_DOUBLE)
10766                 break;
10767 #else
10768                 /*FALLTHROUGH*/
10769 #endif
10770             case 'c':
10771             case 'h':
10772             case 'z':
10773             case 't':
10774             case 'j':
10775                 goto unknown;
10776             }
10777
10778             /* now we need (long double) if intsize == 'q', else (double) */
10779             nv = (args) ?
10780 #if LONG_DOUBLESIZE > DOUBLESIZE
10781                 intsize == 'q' ?
10782                     va_arg(*args, long double) :
10783                     va_arg(*args, double)
10784 #else
10785                     va_arg(*args, double)
10786 #endif
10787                 : SvNV(argsv);
10788
10789             need = 0;
10790             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10791                else. frexp() has some unspecified behaviour for those three */
10792             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10793                 i = PERL_INT_MIN;
10794                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10795                    will cast our (long double) to (double) */
10796                 (void)Perl_frexp(nv, &i);
10797                 if (i == PERL_INT_MIN)
10798                     Perl_die(aTHX_ "panic: frexp");
10799                 if (i > 0)
10800                     need = BIT_DIGITS(i);
10801             }
10802             need += has_precis ? precis : 6; /* known default */
10803
10804             if (need < width)
10805                 need = width;
10806
10807 #ifdef HAS_LDBL_SPRINTF_BUG
10808             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10809                with sfio - Allen <allens@cpan.org> */
10810
10811 #  ifdef DBL_MAX
10812 #    define MY_DBL_MAX DBL_MAX
10813 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10814 #    if DOUBLESIZE >= 8
10815 #      define MY_DBL_MAX 1.7976931348623157E+308L
10816 #    else
10817 #      define MY_DBL_MAX 3.40282347E+38L
10818 #    endif
10819 #  endif
10820
10821 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10822 #    define MY_DBL_MAX_BUG 1L
10823 #  else
10824 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10825 #  endif
10826
10827 #  ifdef DBL_MIN
10828 #    define MY_DBL_MIN DBL_MIN
10829 #  else  /* XXX guessing! -Allen */
10830 #    if DOUBLESIZE >= 8
10831 #      define MY_DBL_MIN 2.2250738585072014E-308L
10832 #    else
10833 #      define MY_DBL_MIN 1.17549435E-38L
10834 #    endif
10835 #  endif
10836
10837             if ((intsize == 'q') && (c == 'f') &&
10838                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10839                 (need < DBL_DIG)) {
10840                 /* it's going to be short enough that
10841                  * long double precision is not needed */
10842
10843                 if ((nv <= 0L) && (nv >= -0L))
10844                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10845                 else {
10846                     /* would use Perl_fp_class as a double-check but not
10847                      * functional on IRIX - see perl.h comments */
10848
10849                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10850                         /* It's within the range that a double can represent */
10851 #if defined(DBL_MAX) && !defined(DBL_MIN)
10852                         if ((nv >= ((long double)1/DBL_MAX)) ||
10853                             (nv <= (-(long double)1/DBL_MAX)))
10854 #endif
10855                         fix_ldbl_sprintf_bug = TRUE;
10856                     }
10857                 }
10858                 if (fix_ldbl_sprintf_bug == TRUE) {
10859                     double temp;
10860
10861                     intsize = 0;
10862                     temp = (double)nv;
10863                     nv = (NV)temp;
10864                 }
10865             }
10866
10867 #  undef MY_DBL_MAX
10868 #  undef MY_DBL_MAX_BUG
10869 #  undef MY_DBL_MIN
10870
10871 #endif /* HAS_LDBL_SPRINTF_BUG */
10872
10873             need += 20; /* fudge factor */
10874             if (PL_efloatsize < need) {
10875                 Safefree(PL_efloatbuf);
10876                 PL_efloatsize = need + 20; /* more fudge */
10877                 Newx(PL_efloatbuf, PL_efloatsize, char);
10878                 PL_efloatbuf[0] = '\0';
10879             }
10880
10881             if ( !(width || left || plus || alt) && fill != '0'
10882                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10883                 /* See earlier comment about buggy Gconvert when digits,
10884                    aka precis is 0  */
10885                 if ( c == 'g' && precis) {
10886                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10887                     /* May return an empty string for digits==0 */
10888                     if (*PL_efloatbuf) {
10889                         elen = strlen(PL_efloatbuf);
10890                         goto float_converted;
10891                     }
10892                 } else if ( c == 'f' && !precis) {
10893                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10894                         break;
10895                 }
10896             }
10897             {
10898                 char *ptr = ebuf + sizeof ebuf;
10899                 *--ptr = '\0';
10900                 *--ptr = c;
10901                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10902 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10903                 if (intsize == 'q') {
10904                     /* Copy the one or more characters in a long double
10905                      * format before the 'base' ([efgEFG]) character to
10906                      * the format string. */
10907                     static char const prifldbl[] = PERL_PRIfldbl;
10908                     char const *p = prifldbl + sizeof(prifldbl) - 3;
10909                     while (p >= prifldbl) { *--ptr = *p--; }
10910                 }
10911 #endif
10912                 if (has_precis) {
10913                     base = precis;
10914                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10915                     *--ptr = '.';
10916                 }
10917                 if (width) {
10918                     base = width;
10919                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10920                 }
10921                 if (fill == '0')
10922                     *--ptr = fill;
10923                 if (left)
10924                     *--ptr = '-';
10925                 if (plus)
10926                     *--ptr = plus;
10927                 if (alt)
10928                     *--ptr = '#';
10929                 *--ptr = '%';
10930
10931                 /* No taint.  Otherwise we are in the strange situation
10932                  * where printf() taints but print($float) doesn't.
10933                  * --jhi */
10934 #if defined(HAS_LONG_DOUBLE)
10935                 elen = ((intsize == 'q')
10936                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10937                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
10938 #else
10939                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
10940 #endif
10941             }
10942         float_converted:
10943             eptr = PL_efloatbuf;
10944             break;
10945
10946             /* SPECIAL */
10947
10948         case 'n':
10949             if (vectorize)
10950                 goto unknown;
10951             i = SvCUR(sv) - origlen;
10952             if (args) {
10953                 switch (intsize) {
10954                 case 'c':       *(va_arg(*args, char*)) = i; break;
10955                 case 'h':       *(va_arg(*args, short*)) = i; break;
10956                 default:        *(va_arg(*args, int*)) = i; break;
10957                 case 'l':       *(va_arg(*args, long*)) = i; break;
10958                 case 'V':       *(va_arg(*args, IV*)) = i; break;
10959                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
10960                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
10961 #if HAS_C99
10962                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
10963 #endif
10964                 case 'q':
10965 #ifdef HAS_QUAD
10966                                 *(va_arg(*args, Quad_t*)) = i; break;
10967 #else
10968                                 goto unknown;
10969 #endif
10970                 }
10971             }
10972             else
10973                 sv_setuv_mg(argsv, (UV)i);
10974             continue;   /* not "break" */
10975
10976             /* UNKNOWN */
10977
10978         default:
10979       unknown:
10980             if (!args
10981                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10982                 && ckWARN(WARN_PRINTF))
10983             {
10984                 SV * const msg = sv_newmortal();
10985                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10986                           (PL_op->op_type == OP_PRTF) ? "" : "s");
10987                 if (fmtstart < patend) {
10988                     const char * const fmtend = q < patend ? q : patend;
10989                     const char * f;
10990                     sv_catpvs(msg, "\"%");
10991                     for (f = fmtstart; f < fmtend; f++) {
10992                         if (isPRINT(*f)) {
10993                             sv_catpvn(msg, f, 1);
10994                         } else {
10995                             Perl_sv_catpvf(aTHX_ msg,
10996                                            "\\%03"UVof, (UV)*f & 0xFF);
10997                         }
10998                     }
10999                     sv_catpvs(msg, "\"");
11000                 } else {
11001                     sv_catpvs(msg, "end of string");
11002                 }
11003                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11004             }
11005
11006             /* output mangled stuff ... */
11007             if (c == '\0')
11008                 --q;
11009             eptr = p;
11010             elen = q - p;
11011
11012             /* ... right here, because formatting flags should not apply */
11013             SvGROW(sv, SvCUR(sv) + elen + 1);
11014             p = SvEND(sv);
11015             Copy(eptr, p, elen, char);
11016             p += elen;
11017             *p = '\0';
11018             SvCUR_set(sv, p - SvPVX_const(sv));
11019             svix = osvix;
11020             continue;   /* not "break" */
11021         }
11022
11023         if (is_utf8 != has_utf8) {
11024             if (is_utf8) {
11025                 if (SvCUR(sv))
11026                     sv_utf8_upgrade(sv);
11027             }
11028             else {
11029                 const STRLEN old_elen = elen;
11030                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11031                 sv_utf8_upgrade(nsv);
11032                 eptr = SvPVX_const(nsv);
11033                 elen = SvCUR(nsv);
11034
11035                 if (width) { /* fudge width (can't fudge elen) */
11036                     width += elen - old_elen;
11037                 }
11038                 is_utf8 = TRUE;
11039             }
11040         }
11041
11042         have = esignlen + zeros + elen;
11043         if (have < zeros)
11044             Perl_croak_nocontext("%s", PL_memory_wrap);
11045
11046         need = (have > width ? have : width);
11047         gap = need - have;
11048
11049         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11050             Perl_croak_nocontext("%s", PL_memory_wrap);
11051         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11052         p = SvEND(sv);
11053         if (esignlen && fill == '0') {
11054             int i;
11055             for (i = 0; i < (int)esignlen; i++)
11056                 *p++ = esignbuf[i];
11057         }
11058         if (gap && !left) {
11059             memset(p, fill, gap);
11060             p += gap;
11061         }
11062         if (esignlen && fill != '0') {
11063             int i;
11064             for (i = 0; i < (int)esignlen; i++)
11065                 *p++ = esignbuf[i];
11066         }
11067         if (zeros) {
11068             int i;
11069             for (i = zeros; i; i--)
11070                 *p++ = '0';
11071         }
11072         if (elen) {
11073             Copy(eptr, p, elen, char);
11074             p += elen;
11075         }
11076         if (gap && left) {
11077             memset(p, ' ', gap);
11078             p += gap;
11079         }
11080         if (vectorize) {
11081             if (veclen) {
11082                 Copy(dotstr, p, dotstrlen, char);
11083                 p += dotstrlen;
11084             }
11085             else
11086                 vectorize = FALSE;              /* done iterating over vecstr */
11087         }
11088         if (is_utf8)
11089             has_utf8 = TRUE;
11090         if (has_utf8)
11091             SvUTF8_on(sv);
11092         *p = '\0';
11093         SvCUR_set(sv, p - SvPVX_const(sv));
11094         if (vectorize) {
11095             esignlen = 0;
11096             goto vector;
11097         }
11098     }
11099     SvTAINT(sv);
11100 }
11101
11102 /* =========================================================================
11103
11104 =head1 Cloning an interpreter
11105
11106 All the macros and functions in this section are for the private use of
11107 the main function, perl_clone().
11108
11109 The foo_dup() functions make an exact copy of an existing foo thingy.
11110 During the course of a cloning, a hash table is used to map old addresses
11111 to new addresses. The table is created and manipulated with the
11112 ptr_table_* functions.
11113
11114 =cut
11115
11116  * =========================================================================*/
11117
11118
11119 #if defined(USE_ITHREADS)
11120
11121 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11122 #ifndef GpREFCNT_inc
11123 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11124 #endif
11125
11126
11127 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11128    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11129    If this changes, please unmerge ss_dup.
11130    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11131 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11132 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11133 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11134 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11135 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11136 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11137 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11138 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11139 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11140 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11141 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11142 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11143 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11144
11145 /* clone a parser */
11146
11147 yy_parser *
11148 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11149 {
11150     yy_parser *parser;
11151
11152     PERL_ARGS_ASSERT_PARSER_DUP;
11153
11154     if (!proto)
11155         return NULL;
11156
11157     /* look for it in the table first */
11158     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11159     if (parser)
11160         return parser;
11161
11162     /* create anew and remember what it is */
11163     Newxz(parser, 1, yy_parser);
11164     ptr_table_store(PL_ptr_table, proto, parser);
11165
11166     /* XXX these not yet duped */
11167     parser->old_parser = NULL;
11168     parser->stack = NULL;
11169     parser->ps = NULL;
11170     parser->stack_size = 0;
11171     /* XXX parser->stack->state = 0; */
11172
11173     /* XXX eventually, just Copy() most of the parser struct ? */
11174
11175     parser->lex_brackets = proto->lex_brackets;
11176     parser->lex_casemods = proto->lex_casemods;
11177     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11178                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11179     parser->lex_casestack = savepvn(proto->lex_casestack,
11180                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11181     parser->lex_defer   = proto->lex_defer;
11182     parser->lex_dojoin  = proto->lex_dojoin;
11183     parser->lex_expect  = proto->lex_expect;
11184     parser->lex_formbrack = proto->lex_formbrack;
11185     parser->lex_inpat   = proto->lex_inpat;
11186     parser->lex_inwhat  = proto->lex_inwhat;
11187     parser->lex_op      = proto->lex_op;
11188     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11189     parser->lex_starts  = proto->lex_starts;
11190     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11191     parser->multi_close = proto->multi_close;
11192     parser->multi_open  = proto->multi_open;
11193     parser->multi_start = proto->multi_start;
11194     parser->multi_end   = proto->multi_end;
11195     parser->pending_ident = proto->pending_ident;
11196     parser->preambled   = proto->preambled;
11197     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11198     parser->linestr     = sv_dup_inc(proto->linestr, param);
11199     parser->expect      = proto->expect;
11200     parser->copline     = proto->copline;
11201     parser->last_lop_op = proto->last_lop_op;
11202     parser->lex_state   = proto->lex_state;
11203     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11204     /* rsfp_filters entries have fake IoDIRP() */
11205     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11206     parser->in_my       = proto->in_my;
11207     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11208     parser->error_count = proto->error_count;
11209
11210
11211     parser->linestr     = sv_dup_inc(proto->linestr, param);
11212
11213     {
11214         char * const ols = SvPVX(proto->linestr);
11215         char * const ls  = SvPVX(parser->linestr);
11216
11217         parser->bufptr      = ls + (proto->bufptr >= ols ?
11218                                     proto->bufptr -  ols : 0);
11219         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11220                                     proto->oldbufptr -  ols : 0);
11221         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11222                                     proto->oldoldbufptr -  ols : 0);
11223         parser->linestart   = ls + (proto->linestart >= ols ?
11224                                     proto->linestart -  ols : 0);
11225         parser->last_uni    = ls + (proto->last_uni >= ols ?
11226                                     proto->last_uni -  ols : 0);
11227         parser->last_lop    = ls + (proto->last_lop >= ols ?
11228                                     proto->last_lop -  ols : 0);
11229
11230         parser->bufend      = ls + SvCUR(parser->linestr);
11231     }
11232
11233     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11234
11235
11236 #ifdef PERL_MAD
11237     parser->endwhite    = proto->endwhite;
11238     parser->faketokens  = proto->faketokens;
11239     parser->lasttoke    = proto->lasttoke;
11240     parser->nextwhite   = proto->nextwhite;
11241     parser->realtokenstart = proto->realtokenstart;
11242     parser->skipwhite   = proto->skipwhite;
11243     parser->thisclose   = proto->thisclose;
11244     parser->thismad     = proto->thismad;
11245     parser->thisopen    = proto->thisopen;
11246     parser->thisstuff   = proto->thisstuff;
11247     parser->thistoken   = proto->thistoken;
11248     parser->thiswhite   = proto->thiswhite;
11249
11250     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11251     parser->curforce    = proto->curforce;
11252 #else
11253     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11254     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11255     parser->nexttoke    = proto->nexttoke;
11256 #endif
11257
11258     /* XXX should clone saved_curcop here, but we aren't passed
11259      * proto_perl; so do it in perl_clone_using instead */
11260
11261     return parser;
11262 }
11263
11264
11265 /* duplicate a file handle */
11266
11267 PerlIO *
11268 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11269 {
11270     PerlIO *ret;
11271
11272     PERL_ARGS_ASSERT_FP_DUP;
11273     PERL_UNUSED_ARG(type);
11274
11275     if (!fp)
11276         return (PerlIO*)NULL;
11277
11278     /* look for it in the table first */
11279     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11280     if (ret)
11281         return ret;
11282
11283     /* create anew and remember what it is */
11284     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11285     ptr_table_store(PL_ptr_table, fp, ret);
11286     return ret;
11287 }
11288
11289 /* duplicate a directory handle */
11290
11291 DIR *
11292 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11293 {
11294     DIR *ret;
11295
11296 #ifdef HAS_FCHDIR
11297     DIR *pwd;
11298     register const Direntry_t *dirent;
11299     char smallbuf[256];
11300     char *name = NULL;
11301     STRLEN len = -1;
11302     long pos;
11303 #endif
11304
11305     PERL_UNUSED_CONTEXT;
11306     PERL_ARGS_ASSERT_DIRP_DUP;
11307
11308     if (!dp)
11309         return (DIR*)NULL;
11310
11311     /* look for it in the table first */
11312     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11313     if (ret)
11314         return ret;
11315
11316 #ifdef HAS_FCHDIR
11317
11318     PERL_UNUSED_ARG(param);
11319
11320     /* create anew */
11321
11322     /* open the current directory (so we can switch back) */
11323     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11324
11325     /* chdir to our dir handle and open the present working directory */
11326     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11327         PerlDir_close(pwd);
11328         return (DIR *)NULL;
11329     }
11330     /* Now we should have two dir handles pointing to the same dir. */
11331
11332     /* Be nice to the calling code and chdir back to where we were. */
11333     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11334
11335     /* We have no need of the pwd handle any more. */
11336     PerlDir_close(pwd);
11337
11338 #ifdef DIRNAMLEN
11339 # define d_namlen(d) (d)->d_namlen
11340 #else
11341 # define d_namlen(d) strlen((d)->d_name)
11342 #endif
11343     /* Iterate once through dp, to get the file name at the current posi-
11344        tion. Then step back. */
11345     pos = PerlDir_tell(dp);
11346     if ((dirent = PerlDir_read(dp))) {
11347         len = d_namlen(dirent);
11348         if (len <= sizeof smallbuf) name = smallbuf;
11349         else Newx(name, len, char);
11350         Move(dirent->d_name, name, len, char);
11351     }
11352     PerlDir_seek(dp, pos);
11353
11354     /* Iterate through the new dir handle, till we find a file with the
11355        right name. */
11356     if (!dirent) /* just before the end */
11357         for(;;) {
11358             pos = PerlDir_tell(ret);
11359             if (PerlDir_read(ret)) continue; /* not there yet */
11360             PerlDir_seek(ret, pos); /* step back */
11361             break;
11362         }
11363     else {
11364         const long pos0 = PerlDir_tell(ret);
11365         for(;;) {
11366             pos = PerlDir_tell(ret);
11367             if ((dirent = PerlDir_read(ret))) {
11368                 if (len == d_namlen(dirent)
11369                  && memEQ(name, dirent->d_name, len)) {
11370                     /* found it */
11371                     PerlDir_seek(ret, pos); /* step back */
11372                     break;
11373                 }
11374                 /* else we are not there yet; keep iterating */
11375             }
11376             else { /* This is not meant to happen. The best we can do is
11377                       reset the iterator to the beginning. */
11378                 PerlDir_seek(ret, pos0);
11379                 break;
11380             }
11381         }
11382     }
11383 #undef d_namlen
11384
11385     if (name && name != smallbuf)
11386         Safefree(name);
11387 #endif
11388
11389 #ifdef WIN32
11390     ret = win32_dirp_dup(dp, param);
11391 #endif
11392
11393     /* pop it in the pointer table */
11394     if (ret)
11395         ptr_table_store(PL_ptr_table, dp, ret);
11396
11397     return ret;
11398 }
11399
11400 /* duplicate a typeglob */
11401
11402 GP *
11403 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11404 {
11405     GP *ret;
11406
11407     PERL_ARGS_ASSERT_GP_DUP;
11408
11409     if (!gp)
11410         return (GP*)NULL;
11411     /* look for it in the table first */
11412     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11413     if (ret)
11414         return ret;
11415
11416     /* create anew and remember what it is */
11417     Newxz(ret, 1, GP);
11418     ptr_table_store(PL_ptr_table, gp, ret);
11419
11420     /* clone */
11421     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11422        on Newxz() to do this for us.  */
11423     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11424     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11425     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11426     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11427     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11428     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11429     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11430     ret->gp_cvgen       = gp->gp_cvgen;
11431     ret->gp_line        = gp->gp_line;
11432     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11433     return ret;
11434 }
11435
11436 /* duplicate a chain of magic */
11437
11438 MAGIC *
11439 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11440 {
11441     MAGIC *mgret = NULL;
11442     MAGIC **mgprev_p = &mgret;
11443
11444     PERL_ARGS_ASSERT_MG_DUP;
11445
11446     for (; mg; mg = mg->mg_moremagic) {
11447         MAGIC *nmg;
11448
11449         if ((param->flags & CLONEf_JOIN_IN)
11450                 && mg->mg_type == PERL_MAGIC_backref)
11451             /* when joining, we let the individual SVs add themselves to
11452              * backref as needed. */
11453             continue;
11454
11455         Newx(nmg, 1, MAGIC);
11456         *mgprev_p = nmg;
11457         mgprev_p = &(nmg->mg_moremagic);
11458
11459         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11460            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11461            from the original commit adding Perl_mg_dup() - revision 4538.
11462            Similarly there is the annotation "XXX random ptr?" next to the
11463            assignment to nmg->mg_ptr.  */
11464         *nmg = *mg;
11465
11466         /* FIXME for plugins
11467         if (nmg->mg_type == PERL_MAGIC_qr) {
11468             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11469         }
11470         else
11471         */
11472         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11473                           ? nmg->mg_type == PERL_MAGIC_backref
11474                                 /* The backref AV has its reference
11475                                  * count deliberately bumped by 1 */
11476                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11477                                                     nmg->mg_obj, param))
11478                                 : sv_dup_inc(nmg->mg_obj, param)
11479                           : sv_dup(nmg->mg_obj, param);
11480
11481         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11482             if (nmg->mg_len > 0) {
11483                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11484                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11485                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11486                 {
11487                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11488                     sv_dup_inc_multiple((SV**)(namtp->table),
11489                                         (SV**)(namtp->table), NofAMmeth, param);
11490                 }
11491             }
11492             else if (nmg->mg_len == HEf_SVKEY)
11493                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11494         }
11495         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11496             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11497         }
11498     }
11499     return mgret;
11500 }
11501
11502 #endif /* USE_ITHREADS */
11503
11504 struct ptr_tbl_arena {
11505     struct ptr_tbl_arena *next;
11506     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11507 };
11508
11509 /* create a new pointer-mapping table */
11510
11511 PTR_TBL_t *
11512 Perl_ptr_table_new(pTHX)
11513 {
11514     PTR_TBL_t *tbl;
11515     PERL_UNUSED_CONTEXT;
11516
11517     Newx(tbl, 1, PTR_TBL_t);
11518     tbl->tbl_max        = 511;
11519     tbl->tbl_items      = 0;
11520     tbl->tbl_arena      = NULL;
11521     tbl->tbl_arena_next = NULL;
11522     tbl->tbl_arena_end  = NULL;
11523     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11524     return tbl;
11525 }
11526
11527 #define PTR_TABLE_HASH(ptr) \
11528   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11529
11530 /* map an existing pointer using a table */
11531
11532 STATIC PTR_TBL_ENT_t *
11533 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11534 {
11535     PTR_TBL_ENT_t *tblent;
11536     const UV hash = PTR_TABLE_HASH(sv);
11537
11538     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11539
11540     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11541     for (; tblent; tblent = tblent->next) {
11542         if (tblent->oldval == sv)
11543             return tblent;
11544     }
11545     return NULL;
11546 }
11547
11548 void *
11549 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11550 {
11551     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11552
11553     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11554     PERL_UNUSED_CONTEXT;
11555
11556     return tblent ? tblent->newval : NULL;
11557 }
11558
11559 /* add a new entry to a pointer-mapping table */
11560
11561 void
11562 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11563 {
11564     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11565
11566     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11567     PERL_UNUSED_CONTEXT;
11568
11569     if (tblent) {
11570         tblent->newval = newsv;
11571     } else {
11572         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11573
11574         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11575             struct ptr_tbl_arena *new_arena;
11576
11577             Newx(new_arena, 1, struct ptr_tbl_arena);
11578             new_arena->next = tbl->tbl_arena;
11579             tbl->tbl_arena = new_arena;
11580             tbl->tbl_arena_next = new_arena->array;
11581             tbl->tbl_arena_end = new_arena->array
11582                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11583         }
11584
11585         tblent = tbl->tbl_arena_next++;
11586
11587         tblent->oldval = oldsv;
11588         tblent->newval = newsv;
11589         tblent->next = tbl->tbl_ary[entry];
11590         tbl->tbl_ary[entry] = tblent;
11591         tbl->tbl_items++;
11592         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11593             ptr_table_split(tbl);
11594     }
11595 }
11596
11597 /* double the hash bucket size of an existing ptr table */
11598
11599 void
11600 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11601 {
11602     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11603     const UV oldsize = tbl->tbl_max + 1;
11604     UV newsize = oldsize * 2;
11605     UV i;
11606
11607     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11608     PERL_UNUSED_CONTEXT;
11609
11610     Renew(ary, newsize, PTR_TBL_ENT_t*);
11611     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11612     tbl->tbl_max = --newsize;
11613     tbl->tbl_ary = ary;
11614     for (i=0; i < oldsize; i++, ary++) {
11615         PTR_TBL_ENT_t **entp = ary;
11616         PTR_TBL_ENT_t *ent = *ary;
11617         PTR_TBL_ENT_t **curentp;
11618         if (!ent)
11619             continue;
11620         curentp = ary + oldsize;
11621         do {
11622             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11623                 *entp = ent->next;
11624                 ent->next = *curentp;
11625                 *curentp = ent;
11626             }
11627             else
11628                 entp = &ent->next;
11629             ent = *entp;
11630         } while (ent);
11631     }
11632 }
11633
11634 /* remove all the entries from a ptr table */
11635 /* Deprecated - will be removed post 5.14 */
11636
11637 void
11638 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11639 {
11640     if (tbl && tbl->tbl_items) {
11641         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11642
11643         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11644
11645         while (arena) {
11646             struct ptr_tbl_arena *next = arena->next;
11647
11648             Safefree(arena);
11649             arena = next;
11650         };
11651
11652         tbl->tbl_items = 0;
11653         tbl->tbl_arena = NULL;
11654         tbl->tbl_arena_next = NULL;
11655         tbl->tbl_arena_end = NULL;
11656     }
11657 }
11658
11659 /* clear and free a ptr table */
11660
11661 void
11662 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11663 {
11664     struct ptr_tbl_arena *arena;
11665
11666     if (!tbl) {
11667         return;
11668     }
11669
11670     arena = tbl->tbl_arena;
11671
11672     while (arena) {
11673         struct ptr_tbl_arena *next = arena->next;
11674
11675         Safefree(arena);
11676         arena = next;
11677     }
11678
11679     Safefree(tbl->tbl_ary);
11680     Safefree(tbl);
11681 }
11682
11683 #if defined(USE_ITHREADS)
11684
11685 void
11686 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11687 {
11688     PERL_ARGS_ASSERT_RVPV_DUP;
11689
11690     if (SvROK(sstr)) {
11691         if (SvWEAKREF(sstr)) {
11692             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11693             if (param->flags & CLONEf_JOIN_IN) {
11694                 /* if joining, we add any back references individually rather
11695                  * than copying the whole backref array */
11696                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11697             }
11698         }
11699         else
11700             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11701     }
11702     else if (SvPVX_const(sstr)) {
11703         /* Has something there */
11704         if (SvLEN(sstr)) {
11705             /* Normal PV - clone whole allocated space */
11706             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11707             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11708                 /* Not that normal - actually sstr is copy on write.
11709                    But we are a true, independent SV, so:  */
11710                 SvREADONLY_off(dstr);
11711                 SvFAKE_off(dstr);
11712             }
11713         }
11714         else {
11715             /* Special case - not normally malloced for some reason */
11716             if (isGV_with_GP(sstr)) {
11717                 /* Don't need to do anything here.  */
11718             }
11719             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
11720                 /* A "shared" PV - clone it as "shared" PV */
11721                 SvPV_set(dstr,
11722                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11723                                          param)));
11724             }
11725             else {
11726                 /* Some other special case - random pointer */
11727                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11728             }
11729         }
11730     }
11731     else {
11732         /* Copy the NULL */
11733         SvPV_set(dstr, NULL);
11734     }
11735 }
11736
11737 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11738 static SV **
11739 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11740                       SSize_t items, CLONE_PARAMS *const param)
11741 {
11742     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11743
11744     while (items-- > 0) {
11745         *dest++ = sv_dup_inc(*source++, param);
11746     }
11747
11748     return dest;
11749 }
11750
11751 /* duplicate an SV of any type (including AV, HV etc) */
11752
11753 static SV *
11754 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11755 {
11756     dVAR;
11757     SV *dstr;
11758
11759     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11760
11761     if (SvTYPE(sstr) == SVTYPEMASK) {
11762 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11763         abort();
11764 #endif
11765         return NULL;
11766     }
11767     /* look for it in the table first */
11768     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11769     if (dstr)
11770         return dstr;
11771
11772     if(param->flags & CLONEf_JOIN_IN) {
11773         /** We are joining here so we don't want do clone
11774             something that is bad **/
11775         if (SvTYPE(sstr) == SVt_PVHV) {
11776             const HEK * const hvname = HvNAME_HEK(sstr);
11777             if (hvname) {
11778                 /** don't clone stashes if they already exist **/
11779                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
11780                 ptr_table_store(PL_ptr_table, sstr, dstr);
11781                 return dstr;
11782             }
11783         }
11784     }
11785
11786     /* create anew and remember what it is */
11787     new_SV(dstr);
11788
11789 #ifdef DEBUG_LEAKING_SCALARS
11790     dstr->sv_debug_optype = sstr->sv_debug_optype;
11791     dstr->sv_debug_line = sstr->sv_debug_line;
11792     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11793     dstr->sv_debug_parent = (SV*)sstr;
11794     FREE_SV_DEBUG_FILE(dstr);
11795     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11796 #endif
11797
11798     ptr_table_store(PL_ptr_table, sstr, dstr);
11799
11800     /* clone */
11801     SvFLAGS(dstr)       = SvFLAGS(sstr);
11802     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11803     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11804
11805 #ifdef DEBUGGING
11806     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11807         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11808                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11809 #endif
11810
11811     /* don't clone objects whose class has asked us not to */
11812     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11813         SvFLAGS(dstr) = 0;
11814         return dstr;
11815     }
11816
11817     switch (SvTYPE(sstr)) {
11818     case SVt_NULL:
11819         SvANY(dstr)     = NULL;
11820         break;
11821     case SVt_IV:
11822         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11823         if(SvROK(sstr)) {
11824             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11825         } else {
11826             SvIV_set(dstr, SvIVX(sstr));
11827         }
11828         break;
11829     case SVt_NV:
11830         SvANY(dstr)     = new_XNV();
11831         SvNV_set(dstr, SvNVX(sstr));
11832         break;
11833         /* case SVt_BIND: */
11834     default:
11835         {
11836             /* These are all the types that need complex bodies allocating.  */
11837             void *new_body;
11838             const svtype sv_type = SvTYPE(sstr);
11839             const struct body_details *const sv_type_details
11840                 = bodies_by_type + sv_type;
11841
11842             switch (sv_type) {
11843             default:
11844                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11845                 break;
11846
11847             case SVt_PVGV:
11848             case SVt_PVIO:
11849             case SVt_PVFM:
11850             case SVt_PVHV:
11851             case SVt_PVAV:
11852             case SVt_PVCV:
11853             case SVt_PVLV:
11854             case SVt_REGEXP:
11855             case SVt_PVMG:
11856             case SVt_PVNV:
11857             case SVt_PVIV:
11858             case SVt_PV:
11859                 assert(sv_type_details->body_size);
11860                 if (sv_type_details->arena) {
11861                     new_body_inline(new_body, sv_type);
11862                     new_body
11863                         = (void*)((char*)new_body - sv_type_details->offset);
11864                 } else {
11865                     new_body = new_NOARENA(sv_type_details);
11866                 }
11867             }
11868             assert(new_body);
11869             SvANY(dstr) = new_body;
11870
11871 #ifndef PURIFY
11872             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11873                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11874                  sv_type_details->copy, char);
11875 #else
11876             Copy(((char*)SvANY(sstr)),
11877                  ((char*)SvANY(dstr)),
11878                  sv_type_details->body_size + sv_type_details->offset, char);
11879 #endif
11880
11881             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11882                 && !isGV_with_GP(dstr)
11883                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
11884                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11885
11886             /* The Copy above means that all the source (unduplicated) pointers
11887                are now in the destination.  We can check the flags and the
11888                pointers in either, but it's possible that there's less cache
11889                missing by always going for the destination.
11890                FIXME - instrument and check that assumption  */
11891             if (sv_type >= SVt_PVMG) {
11892                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11893                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11894                 } else if (SvMAGIC(dstr))
11895                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11896                 if (SvSTASH(dstr))
11897                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
11898             }
11899
11900             /* The cast silences a GCC warning about unhandled types.  */
11901             switch ((int)sv_type) {
11902             case SVt_PV:
11903                 break;
11904             case SVt_PVIV:
11905                 break;
11906             case SVt_PVNV:
11907                 break;
11908             case SVt_PVMG:
11909                 break;
11910             case SVt_REGEXP:
11911                 /* FIXME for plugins */
11912                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
11913                 break;
11914             case SVt_PVLV:
11915                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11916                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11917                     LvTARG(dstr) = dstr;
11918                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
11919                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
11920                 else
11921                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
11922             case SVt_PVGV:
11923                 /* non-GP case already handled above */
11924                 if(isGV_with_GP(sstr)) {
11925                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
11926                     /* Don't call sv_add_backref here as it's going to be
11927                        created as part of the magic cloning of the symbol
11928                        table--unless this is during a join and the stash
11929                        is not actually being cloned.  */
11930                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
11931                        at the point of this comment.  */
11932                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
11933                     if (param->flags & CLONEf_JOIN_IN)
11934                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
11935                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
11936                     (void)GpREFCNT_inc(GvGP(dstr));
11937                 }
11938                 break;
11939             case SVt_PVIO:
11940                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
11941                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11942                     /* I have no idea why fake dirp (rsfps)
11943                        should be treated differently but otherwise
11944                        we end up with leaks -- sky*/
11945                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
11946                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
11947                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11948                 } else {
11949                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
11950                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
11951                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
11952                     if (IoDIRP(dstr)) {
11953                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
11954                     } else {
11955                         NOOP;
11956                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
11957                     }
11958                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
11959                 }
11960                 if (IoOFP(dstr) == IoIFP(sstr))
11961                     IoOFP(dstr) = IoIFP(dstr);
11962                 else
11963                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
11964                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
11965                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
11966                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
11967                 break;
11968             case SVt_PVAV:
11969                 /* avoid cloning an empty array */
11970                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
11971                     SV **dst_ary, **src_ary;
11972                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
11973
11974                     src_ary = AvARRAY((const AV *)sstr);
11975                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
11976                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
11977                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11978                     AvALLOC((const AV *)dstr) = dst_ary;
11979                     if (AvREAL((const AV *)sstr)) {
11980                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11981                                                       param);
11982                     }
11983                     else {
11984                         while (items-- > 0)
11985                             *dst_ary++ = sv_dup(*src_ary++, param);
11986                     }
11987                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
11988                     while (items-- > 0) {
11989                         *dst_ary++ = &PL_sv_undef;
11990                     }
11991                 }
11992                 else {
11993                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
11994                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
11995                     AvMAX(  (const AV *)dstr)   = -1;
11996                     AvFILLp((const AV *)dstr)   = -1;
11997                 }
11998                 break;
11999             case SVt_PVHV:
12000                 if (HvARRAY((const HV *)sstr)) {
12001                     STRLEN i = 0;
12002                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12003                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12004                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12005                     char *darray;
12006                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12007                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12008                         char);
12009                     HvARRAY(dstr) = (HE**)darray;
12010                     while (i <= sxhv->xhv_max) {
12011                         const HE * const source = HvARRAY(sstr)[i];
12012                         HvARRAY(dstr)[i] = source
12013                             ? he_dup(source, sharekeys, param) : 0;
12014                         ++i;
12015                     }
12016                     if (SvOOK(sstr)) {
12017                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12018                         struct xpvhv_aux * const daux = HvAUX(dstr);
12019                         /* This flag isn't copied.  */
12020                         /* SvOOK_on(hv) attacks the IV flags.  */
12021                         SvFLAGS(dstr) |= SVf_OOK;
12022
12023                         if (saux->xhv_name_count) {
12024                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12025                             const I32 count
12026                              = saux->xhv_name_count < 0
12027                                 ? -saux->xhv_name_count
12028                                 :  saux->xhv_name_count;
12029                             HEK **shekp = sname + count;
12030                             HEK **dhekp;
12031                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12032                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12033                             while (shekp-- > sname) {
12034                                 dhekp--;
12035                                 *dhekp = hek_dup(*shekp, param);
12036                             }
12037                         }
12038                         else {
12039                             daux->xhv_name_u.xhvnameu_name
12040                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12041                                           param);
12042                         }
12043                         daux->xhv_name_count = saux->xhv_name_count;
12044
12045                         daux->xhv_riter = saux->xhv_riter;
12046                         daux->xhv_eiter = saux->xhv_eiter
12047                             ? he_dup(saux->xhv_eiter,
12048                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12049                         /* backref array needs refcnt=2; see sv_add_backref */
12050                         daux->xhv_backreferences =
12051                             (param->flags & CLONEf_JOIN_IN)
12052                                 /* when joining, we let the individual GVs and
12053                                  * CVs add themselves to backref as
12054                                  * needed. This avoids pulling in stuff
12055                                  * that isn't required, and simplifies the
12056                                  * case where stashes aren't cloned back
12057                                  * if they already exist in the parent
12058                                  * thread */
12059                             ? NULL
12060                             : saux->xhv_backreferences
12061                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12062                                     ? MUTABLE_AV(SvREFCNT_inc(
12063                                           sv_dup_inc((const SV *)
12064                                             saux->xhv_backreferences, param)))
12065                                     : MUTABLE_AV(sv_dup((const SV *)
12066                                             saux->xhv_backreferences, param))
12067                                 : 0;
12068
12069                         daux->xhv_mro_meta = saux->xhv_mro_meta
12070                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12071                             : 0;
12072
12073                         /* Record stashes for possible cloning in Perl_clone(). */
12074                         if (HvNAME(sstr))
12075                             av_push(param->stashes, dstr);
12076                     }
12077                 }
12078                 else
12079                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12080                 break;
12081             case SVt_PVCV:
12082                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12083                     CvDEPTH(dstr) = 0;
12084                 }
12085                 /*FALLTHROUGH*/
12086             case SVt_PVFM:
12087                 /* NOTE: not refcounted */
12088                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12089                     hv_dup(CvSTASH(dstr), param);
12090                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12091                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12092                 if (!CvISXSUB(dstr)) {
12093                     OP_REFCNT_LOCK;
12094                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12095                     OP_REFCNT_UNLOCK;
12096                     CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12097                 } else if (CvCONST(dstr)) {
12098                     CvXSUBANY(dstr).any_ptr =
12099                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12100                 }
12101                 /* don't dup if copying back - CvGV isn't refcounted, so the
12102                  * duped GV may never be freed. A bit of a hack! DAPM */
12103                 SvANY(MUTABLE_CV(dstr))->xcv_gv =
12104                     CvCVGV_RC(dstr)
12105                     ? gv_dup_inc(CvGV(sstr), param)
12106                     : (param->flags & CLONEf_JOIN_IN)
12107                         ? NULL
12108                         : gv_dup(CvGV(sstr), param);
12109
12110                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12111                 CvOUTSIDE(dstr) =
12112                     CvWEAKOUTSIDE(sstr)
12113                     ? cv_dup(    CvOUTSIDE(dstr), param)
12114                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12115                 break;
12116             }
12117         }
12118     }
12119
12120     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12121         ++PL_sv_objcount;
12122
12123     return dstr;
12124  }
12125
12126 SV *
12127 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12128 {
12129     PERL_ARGS_ASSERT_SV_DUP_INC;
12130     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12131 }
12132
12133 SV *
12134 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12135 {
12136     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12137     PERL_ARGS_ASSERT_SV_DUP;
12138
12139     /* Track every SV that (at least initially) had a reference count of 0.
12140        We need to do this by holding an actual reference to it in this array.
12141        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12142        (akin to the stashes hash, and the perl stack), we come unstuck if
12143        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12144        thread) is manipulated in a CLONE method, because CLONE runs before the
12145        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12146        (and fix things up by giving each a reference via the temps stack).
12147        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12148        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12149        before the walk of unreferenced happens and a reference to that is SV
12150        added to the temps stack. At which point we have the same SV considered
12151        to be in use, and free to be re-used. Not good.
12152     */
12153     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12154         assert(param->unreferenced);
12155         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12156     }
12157
12158     return dstr;
12159 }
12160
12161 /* duplicate a context */
12162
12163 PERL_CONTEXT *
12164 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12165 {
12166     PERL_CONTEXT *ncxs;
12167
12168     PERL_ARGS_ASSERT_CX_DUP;
12169
12170     if (!cxs)
12171         return (PERL_CONTEXT*)NULL;
12172
12173     /* look for it in the table first */
12174     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12175     if (ncxs)
12176         return ncxs;
12177
12178     /* create anew and remember what it is */
12179     Newx(ncxs, max + 1, PERL_CONTEXT);
12180     ptr_table_store(PL_ptr_table, cxs, ncxs);
12181     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12182
12183     while (ix >= 0) {
12184         PERL_CONTEXT * const ncx = &ncxs[ix];
12185         if (CxTYPE(ncx) == CXt_SUBST) {
12186             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12187         }
12188         else {
12189             switch (CxTYPE(ncx)) {
12190             case CXt_SUB:
12191                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12192                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12193                                            : cv_dup(ncx->blk_sub.cv,param));
12194                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12195                                            ? av_dup_inc(ncx->blk_sub.argarray,
12196                                                         param)
12197                                            : NULL);
12198                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12199                                                      param);
12200                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12201                                            ncx->blk_sub.oldcomppad);
12202                 break;
12203             case CXt_EVAL:
12204                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12205                                                       param);
12206                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12207                 break;
12208             case CXt_LOOP_LAZYSV:
12209                 ncx->blk_loop.state_u.lazysv.end
12210                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12211                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12212                    actually being the same function, and order equivalence of
12213                    the two unions.
12214                    We can assert the later [but only at run time :-(]  */
12215                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12216                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12217             case CXt_LOOP_FOR:
12218                 ncx->blk_loop.state_u.ary.ary
12219                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12220             case CXt_LOOP_LAZYIV:
12221             case CXt_LOOP_PLAIN:
12222                 if (CxPADLOOP(ncx)) {
12223                     ncx->blk_loop.itervar_u.oldcomppad
12224                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12225                                         ncx->blk_loop.itervar_u.oldcomppad);
12226                 } else {
12227                     ncx->blk_loop.itervar_u.gv
12228                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12229                                     param);
12230                 }
12231                 break;
12232             case CXt_FORMAT:
12233                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12234                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12235                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12236                                                      param);
12237                 break;
12238             case CXt_BLOCK:
12239             case CXt_NULL:
12240                 break;
12241             }
12242         }
12243         --ix;
12244     }
12245     return ncxs;
12246 }
12247
12248 /* duplicate a stack info structure */
12249
12250 PERL_SI *
12251 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12252 {
12253     PERL_SI *nsi;
12254
12255     PERL_ARGS_ASSERT_SI_DUP;
12256
12257     if (!si)
12258         return (PERL_SI*)NULL;
12259
12260     /* look for it in the table first */
12261     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12262     if (nsi)
12263         return nsi;
12264
12265     /* create anew and remember what it is */
12266     Newxz(nsi, 1, PERL_SI);
12267     ptr_table_store(PL_ptr_table, si, nsi);
12268
12269     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12270     nsi->si_cxix        = si->si_cxix;
12271     nsi->si_cxmax       = si->si_cxmax;
12272     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12273     nsi->si_type        = si->si_type;
12274     nsi->si_prev        = si_dup(si->si_prev, param);
12275     nsi->si_next        = si_dup(si->si_next, param);
12276     nsi->si_markoff     = si->si_markoff;
12277
12278     return nsi;
12279 }
12280
12281 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12282 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12283 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12284 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12285 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12286 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12287 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12288 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12289 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12290 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12291 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12292 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12293 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12294 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12295 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12296 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12297
12298 /* XXXXX todo */
12299 #define pv_dup_inc(p)   SAVEPV(p)
12300 #define pv_dup(p)       SAVEPV(p)
12301 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12302
12303 /* map any object to the new equivent - either something in the
12304  * ptr table, or something in the interpreter structure
12305  */
12306
12307 void *
12308 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12309 {
12310     void *ret;
12311
12312     PERL_ARGS_ASSERT_ANY_DUP;
12313
12314     if (!v)
12315         return (void*)NULL;
12316
12317     /* look for it in the table first */
12318     ret = ptr_table_fetch(PL_ptr_table, v);
12319     if (ret)
12320         return ret;
12321
12322     /* see if it is part of the interpreter structure */
12323     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12324         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12325     else {
12326         ret = v;
12327     }
12328
12329     return ret;
12330 }
12331
12332 /* duplicate the save stack */
12333
12334 ANY *
12335 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12336 {
12337     dVAR;
12338     ANY * const ss      = proto_perl->Isavestack;
12339     const I32 max       = proto_perl->Isavestack_max;
12340     I32 ix              = proto_perl->Isavestack_ix;
12341     ANY *nss;
12342     const SV *sv;
12343     const GV *gv;
12344     const AV *av;
12345     const HV *hv;
12346     void* ptr;
12347     int intval;
12348     long longval;
12349     GP *gp;
12350     IV iv;
12351     I32 i;
12352     char *c = NULL;
12353     void (*dptr) (void*);
12354     void (*dxptr) (pTHX_ void*);
12355
12356     PERL_ARGS_ASSERT_SS_DUP;
12357
12358     Newxz(nss, max, ANY);
12359
12360     while (ix > 0) {
12361         const UV uv = POPUV(ss,ix);
12362         const U8 type = (U8)uv & SAVE_MASK;
12363
12364         TOPUV(nss,ix) = uv;
12365         switch (type) {
12366         case SAVEt_CLEARSV:
12367             break;
12368         case SAVEt_HELEM:               /* hash element */
12369             sv = (const SV *)POPPTR(ss,ix);
12370             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12371             /* fall through */
12372         case SAVEt_ITEM:                        /* normal string */
12373         case SAVEt_GVSV:                        /* scalar slot in GV */
12374         case SAVEt_SV:                          /* scalar reference */
12375             sv = (const SV *)POPPTR(ss,ix);
12376             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12377             /* fall through */
12378         case SAVEt_FREESV:
12379         case SAVEt_MORTALIZESV:
12380             sv = (const SV *)POPPTR(ss,ix);
12381             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12382             break;
12383         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12384             c = (char*)POPPTR(ss,ix);
12385             TOPPTR(nss,ix) = savesharedpv(c);
12386             ptr = POPPTR(ss,ix);
12387             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12388             break;
12389         case SAVEt_GENERIC_SVREF:               /* generic sv */
12390         case SAVEt_SVREF:                       /* scalar reference */
12391             sv = (const SV *)POPPTR(ss,ix);
12392             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12393             ptr = POPPTR(ss,ix);
12394             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12395             break;
12396         case SAVEt_HV:                          /* hash reference */
12397         case SAVEt_AV:                          /* array reference */
12398             sv = (const SV *) POPPTR(ss,ix);
12399             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12400             /* fall through */
12401         case SAVEt_COMPPAD:
12402         case SAVEt_NSTAB:
12403             sv = (const SV *) POPPTR(ss,ix);
12404             TOPPTR(nss,ix) = sv_dup(sv, param);
12405             break;
12406         case SAVEt_INT:                         /* int reference */
12407             ptr = POPPTR(ss,ix);
12408             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12409             intval = (int)POPINT(ss,ix);
12410             TOPINT(nss,ix) = intval;
12411             break;
12412         case SAVEt_LONG:                        /* long reference */
12413             ptr = POPPTR(ss,ix);
12414             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12415             longval = (long)POPLONG(ss,ix);
12416             TOPLONG(nss,ix) = longval;
12417             break;
12418         case SAVEt_I32:                         /* I32 reference */
12419         case SAVEt_COP_ARYBASE:                 /* call CopARYBASE_set */
12420             ptr = POPPTR(ss,ix);
12421             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12422             i = POPINT(ss,ix);
12423             TOPINT(nss,ix) = i;
12424             break;
12425         case SAVEt_IV:                          /* IV reference */
12426             ptr = POPPTR(ss,ix);
12427             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12428             iv = POPIV(ss,ix);
12429             TOPIV(nss,ix) = iv;
12430             break;
12431         case SAVEt_HPTR:                        /* HV* reference */
12432         case SAVEt_APTR:                        /* AV* reference */
12433         case SAVEt_SPTR:                        /* SV* reference */
12434             ptr = POPPTR(ss,ix);
12435             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12436             sv = (const SV *)POPPTR(ss,ix);
12437             TOPPTR(nss,ix) = sv_dup(sv, param);
12438             break;
12439         case SAVEt_VPTR:                        /* random* reference */
12440             ptr = POPPTR(ss,ix);
12441             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12442             /* Fall through */
12443         case SAVEt_INT_SMALL:
12444         case SAVEt_I32_SMALL:
12445         case SAVEt_I16:                         /* I16 reference */
12446         case SAVEt_I8:                          /* I8 reference */
12447         case SAVEt_BOOL:
12448             ptr = POPPTR(ss,ix);
12449             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12450             break;
12451         case SAVEt_GENERIC_PVREF:               /* generic char* */
12452         case SAVEt_PPTR:                        /* char* reference */
12453             ptr = POPPTR(ss,ix);
12454             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12455             c = (char*)POPPTR(ss,ix);
12456             TOPPTR(nss,ix) = pv_dup(c);
12457             break;
12458         case SAVEt_GP:                          /* scalar reference */
12459             gp = (GP*)POPPTR(ss,ix);
12460             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12461             (void)GpREFCNT_inc(gp);
12462             gv = (const GV *)POPPTR(ss,ix);
12463             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12464             break;
12465         case SAVEt_FREEOP:
12466             ptr = POPPTR(ss,ix);
12467             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12468                 /* these are assumed to be refcounted properly */
12469                 OP *o;
12470                 switch (((OP*)ptr)->op_type) {
12471                 case OP_LEAVESUB:
12472                 case OP_LEAVESUBLV:
12473                 case OP_LEAVEEVAL:
12474                 case OP_LEAVE:
12475                 case OP_SCOPE:
12476                 case OP_LEAVEWRITE:
12477                     TOPPTR(nss,ix) = ptr;
12478                     o = (OP*)ptr;
12479                     OP_REFCNT_LOCK;
12480                     (void) OpREFCNT_inc(o);
12481                     OP_REFCNT_UNLOCK;
12482                     break;
12483                 default:
12484                     TOPPTR(nss,ix) = NULL;
12485                     break;
12486                 }
12487             }
12488             else
12489                 TOPPTR(nss,ix) = NULL;
12490             break;
12491         case SAVEt_FREECOPHH:
12492             ptr = POPPTR(ss,ix);
12493             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12494             break;
12495         case SAVEt_DELETE:
12496             hv = (const HV *)POPPTR(ss,ix);
12497             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12498             i = POPINT(ss,ix);
12499             TOPINT(nss,ix) = i;
12500             /* Fall through */
12501         case SAVEt_FREEPV:
12502             c = (char*)POPPTR(ss,ix);
12503             TOPPTR(nss,ix) = pv_dup_inc(c);
12504             break;
12505         case SAVEt_STACK_POS:           /* Position on Perl stack */
12506             i = POPINT(ss,ix);
12507             TOPINT(nss,ix) = i;
12508             break;
12509         case SAVEt_DESTRUCTOR:
12510             ptr = POPPTR(ss,ix);
12511             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12512             dptr = POPDPTR(ss,ix);
12513             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12514                                         any_dup(FPTR2DPTR(void *, dptr),
12515                                                 proto_perl));
12516             break;
12517         case SAVEt_DESTRUCTOR_X:
12518             ptr = POPPTR(ss,ix);
12519             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12520             dxptr = POPDXPTR(ss,ix);
12521             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12522                                          any_dup(FPTR2DPTR(void *, dxptr),
12523                                                  proto_perl));
12524             break;
12525         case SAVEt_REGCONTEXT:
12526         case SAVEt_ALLOC:
12527             ix -= uv >> SAVE_TIGHT_SHIFT;
12528             break;
12529         case SAVEt_AELEM:               /* array element */
12530             sv = (const SV *)POPPTR(ss,ix);
12531             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12532             i = POPINT(ss,ix);
12533             TOPINT(nss,ix) = i;
12534             av = (const AV *)POPPTR(ss,ix);
12535             TOPPTR(nss,ix) = av_dup_inc(av, param);
12536             break;
12537         case SAVEt_OP:
12538             ptr = POPPTR(ss,ix);
12539             TOPPTR(nss,ix) = ptr;
12540             break;
12541         case SAVEt_HINTS:
12542             ptr = POPPTR(ss,ix);
12543             ptr = cophh_copy((COPHH*)ptr);
12544             TOPPTR(nss,ix) = ptr;
12545             i = POPINT(ss,ix);
12546             TOPINT(nss,ix) = i;
12547             if (i & HINT_LOCALIZE_HH) {
12548                 hv = (const HV *)POPPTR(ss,ix);
12549                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12550             }
12551             break;
12552         case SAVEt_PADSV_AND_MORTALIZE:
12553             longval = (long)POPLONG(ss,ix);
12554             TOPLONG(nss,ix) = longval;
12555             ptr = POPPTR(ss,ix);
12556             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12557             sv = (const SV *)POPPTR(ss,ix);
12558             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12559             break;
12560         case SAVEt_SET_SVFLAGS:
12561             i = POPINT(ss,ix);
12562             TOPINT(nss,ix) = i;
12563             i = POPINT(ss,ix);
12564             TOPINT(nss,ix) = i;
12565             sv = (const SV *)POPPTR(ss,ix);
12566             TOPPTR(nss,ix) = sv_dup(sv, param);
12567             break;
12568         case SAVEt_RE_STATE:
12569             {
12570                 const struct re_save_state *const old_state
12571                     = (struct re_save_state *)
12572                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12573                 struct re_save_state *const new_state
12574                     = (struct re_save_state *)
12575                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12576
12577                 Copy(old_state, new_state, 1, struct re_save_state);
12578                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12579
12580                 new_state->re_state_bostr
12581                     = pv_dup(old_state->re_state_bostr);
12582                 new_state->re_state_reginput
12583                     = pv_dup(old_state->re_state_reginput);
12584                 new_state->re_state_regeol
12585                     = pv_dup(old_state->re_state_regeol);
12586                 new_state->re_state_regoffs
12587                     = (regexp_paren_pair*)
12588                         any_dup(old_state->re_state_regoffs, proto_perl);
12589                 new_state->re_state_reglastparen
12590                     = (U32*) any_dup(old_state->re_state_reglastparen, 
12591                               proto_perl);
12592                 new_state->re_state_reglastcloseparen
12593                     = (U32*)any_dup(old_state->re_state_reglastcloseparen,
12594                               proto_perl);
12595                 /* XXX This just has to be broken. The old save_re_context
12596                    code did SAVEGENERICPV(PL_reg_start_tmp);
12597                    PL_reg_start_tmp is char **.
12598                    Look above to what the dup code does for
12599                    SAVEt_GENERIC_PVREF
12600                    It can never have worked.
12601                    So this is merely a faithful copy of the exiting bug:  */
12602                 new_state->re_state_reg_start_tmp
12603                     = (char **) pv_dup((char *)
12604                                       old_state->re_state_reg_start_tmp);
12605                 /* I assume that it only ever "worked" because no-one called
12606                    (pseudo)fork while the regexp engine had re-entered itself.
12607                 */
12608 #ifdef PERL_OLD_COPY_ON_WRITE
12609                 new_state->re_state_nrs
12610                     = sv_dup(old_state->re_state_nrs, param);
12611 #endif
12612                 new_state->re_state_reg_magic
12613                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12614                                proto_perl);
12615                 new_state->re_state_reg_oldcurpm
12616                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12617                               proto_perl);
12618                 new_state->re_state_reg_curpm
12619                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12620                                proto_perl);
12621                 new_state->re_state_reg_oldsaved
12622                     = pv_dup(old_state->re_state_reg_oldsaved);
12623                 new_state->re_state_reg_poscache
12624                     = pv_dup(old_state->re_state_reg_poscache);
12625                 new_state->re_state_reg_starttry
12626                     = pv_dup(old_state->re_state_reg_starttry);
12627                 break;
12628             }
12629         case SAVEt_COMPILE_WARNINGS:
12630             ptr = POPPTR(ss,ix);
12631             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12632             break;
12633         case SAVEt_PARSER:
12634             ptr = POPPTR(ss,ix);
12635             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12636             break;
12637         default:
12638             Perl_croak(aTHX_
12639                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12640         }
12641     }
12642
12643     return nss;
12644 }
12645
12646
12647 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12648  * flag to the result. This is done for each stash before cloning starts,
12649  * so we know which stashes want their objects cloned */
12650
12651 static void
12652 do_mark_cloneable_stash(pTHX_ SV *const sv)
12653 {
12654     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12655     if (hvname) {
12656         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12657         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12658         if (cloner && GvCV(cloner)) {
12659             dSP;
12660             UV status;
12661
12662             ENTER;
12663             SAVETMPS;
12664             PUSHMARK(SP);
12665             mXPUSHs(newSVhek(hvname));
12666             PUTBACK;
12667             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12668             SPAGAIN;
12669             status = POPu;
12670             PUTBACK;
12671             FREETMPS;
12672             LEAVE;
12673             if (status)
12674                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12675         }
12676     }
12677 }
12678
12679
12680
12681 /*
12682 =for apidoc perl_clone
12683
12684 Create and return a new interpreter by cloning the current one.
12685
12686 perl_clone takes these flags as parameters:
12687
12688 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12689 without it we only clone the data and zero the stacks,
12690 with it we copy the stacks and the new perl interpreter is
12691 ready to run at the exact same point as the previous one.
12692 The pseudo-fork code uses COPY_STACKS while the
12693 threads->create doesn't.
12694
12695 CLONEf_KEEP_PTR_TABLE
12696 perl_clone keeps a ptr_table with the pointer of the old
12697 variable as a key and the new variable as a value,
12698 this allows it to check if something has been cloned and not
12699 clone it again but rather just use the value and increase the
12700 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
12701 the ptr_table using the function
12702 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12703 reason to keep it around is if you want to dup some of your own
12704 variable who are outside the graph perl scans, example of this
12705 code is in threads.xs create
12706
12707 CLONEf_CLONE_HOST
12708 This is a win32 thing, it is ignored on unix, it tells perls
12709 win32host code (which is c++) to clone itself, this is needed on
12710 win32 if you want to run two threads at the same time,
12711 if you just want to do some stuff in a separate perl interpreter
12712 and then throw it away and return to the original one,
12713 you don't need to do anything.
12714
12715 =cut
12716 */
12717
12718 /* XXX the above needs expanding by someone who actually understands it ! */
12719 EXTERN_C PerlInterpreter *
12720 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12721
12722 PerlInterpreter *
12723 perl_clone(PerlInterpreter *proto_perl, UV flags)
12724 {
12725    dVAR;
12726 #ifdef PERL_IMPLICIT_SYS
12727
12728     PERL_ARGS_ASSERT_PERL_CLONE;
12729
12730    /* perlhost.h so we need to call into it
12731    to clone the host, CPerlHost should have a c interface, sky */
12732
12733    if (flags & CLONEf_CLONE_HOST) {
12734        return perl_clone_host(proto_perl,flags);
12735    }
12736    return perl_clone_using(proto_perl, flags,
12737                             proto_perl->IMem,
12738                             proto_perl->IMemShared,
12739                             proto_perl->IMemParse,
12740                             proto_perl->IEnv,
12741                             proto_perl->IStdIO,
12742                             proto_perl->ILIO,
12743                             proto_perl->IDir,
12744                             proto_perl->ISock,
12745                             proto_perl->IProc);
12746 }
12747
12748 PerlInterpreter *
12749 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12750                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12751                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12752                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12753                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12754                  struct IPerlProc* ipP)
12755 {
12756     /* XXX many of the string copies here can be optimized if they're
12757      * constants; they need to be allocated as common memory and just
12758      * their pointers copied. */
12759
12760     IV i;
12761     CLONE_PARAMS clone_params;
12762     CLONE_PARAMS* const param = &clone_params;
12763
12764     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12765
12766     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12767 #else           /* !PERL_IMPLICIT_SYS */
12768     IV i;
12769     CLONE_PARAMS clone_params;
12770     CLONE_PARAMS* param = &clone_params;
12771     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12772
12773     PERL_ARGS_ASSERT_PERL_CLONE;
12774 #endif          /* PERL_IMPLICIT_SYS */
12775
12776     /* for each stash, determine whether its objects should be cloned */
12777     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12778     PERL_SET_THX(my_perl);
12779
12780 #ifdef DEBUGGING
12781     PoisonNew(my_perl, 1, PerlInterpreter);
12782     PL_op = NULL;
12783     PL_curcop = NULL;
12784     PL_markstack = 0;
12785     PL_scopestack = 0;
12786     PL_scopestack_name = 0;
12787     PL_savestack = 0;
12788     PL_savestack_ix = 0;
12789     PL_savestack_max = -1;
12790     PL_sig_pending = 0;
12791     PL_parser = NULL;
12792     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12793 #  ifdef DEBUG_LEAKING_SCALARS
12794     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12795 #  endif
12796 #else   /* !DEBUGGING */
12797     Zero(my_perl, 1, PerlInterpreter);
12798 #endif  /* DEBUGGING */
12799
12800 #ifdef PERL_IMPLICIT_SYS
12801     /* host pointers */
12802     PL_Mem              = ipM;
12803     PL_MemShared        = ipMS;
12804     PL_MemParse         = ipMP;
12805     PL_Env              = ipE;
12806     PL_StdIO            = ipStd;
12807     PL_LIO              = ipLIO;
12808     PL_Dir              = ipD;
12809     PL_Sock             = ipS;
12810     PL_Proc             = ipP;
12811 #endif          /* PERL_IMPLICIT_SYS */
12812
12813     param->flags = flags;
12814     /* Nothing in the core code uses this, but we make it available to
12815        extensions (using mg_dup).  */
12816     param->proto_perl = proto_perl;
12817     /* Likely nothing will use this, but it is initialised to be consistent
12818        with Perl_clone_params_new().  */
12819     param->new_perl = my_perl;
12820     param->unreferenced = NULL;
12821
12822     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12823
12824     PL_body_arenas = NULL;
12825     Zero(&PL_body_roots, 1, PL_body_roots);
12826     
12827     PL_sv_count         = 0;
12828     PL_sv_objcount      = 0;
12829     PL_sv_root          = NULL;
12830     PL_sv_arenaroot     = NULL;
12831
12832     PL_debug            = proto_perl->Idebug;
12833
12834     PL_hash_seed        = proto_perl->Ihash_seed;
12835     PL_rehash_seed      = proto_perl->Irehash_seed;
12836
12837 #ifdef USE_REENTRANT_API
12838     /* XXX: things like -Dm will segfault here in perlio, but doing
12839      *  PERL_SET_CONTEXT(proto_perl);
12840      * breaks too many other things
12841      */
12842     Perl_reentrant_init(aTHX);
12843 #endif
12844
12845     /* create SV map for pointer relocation */
12846     PL_ptr_table = ptr_table_new();
12847
12848     /* initialize these special pointers as early as possible */
12849     SvANY(&PL_sv_undef)         = NULL;
12850     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
12851     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
12852     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
12853
12854     SvANY(&PL_sv_no)            = new_XPVNV();
12855     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
12856     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12857                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12858     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
12859     SvCUR_set(&PL_sv_no, 0);
12860     SvLEN_set(&PL_sv_no, 1);
12861     SvIV_set(&PL_sv_no, 0);
12862     SvNV_set(&PL_sv_no, 0);
12863     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
12864
12865     SvANY(&PL_sv_yes)           = new_XPVNV();
12866     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
12867     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12868                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12869     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
12870     SvCUR_set(&PL_sv_yes, 1);
12871     SvLEN_set(&PL_sv_yes, 2);
12872     SvIV_set(&PL_sv_yes, 1);
12873     SvNV_set(&PL_sv_yes, 1);
12874     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
12875
12876     /* dbargs array probably holds garbage */
12877     PL_dbargs           = NULL;
12878
12879     /* create (a non-shared!) shared string table */
12880     PL_strtab           = newHV();
12881     HvSHAREKEYS_off(PL_strtab);
12882     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
12883     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
12884
12885     PL_compiling = proto_perl->Icompiling;
12886
12887     /* These two PVs will be free'd special way so must set them same way op.c does */
12888     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
12889     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
12890
12891     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
12892     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
12893
12894     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
12895     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
12896     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
12897     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
12898 #ifdef PERL_DEBUG_READONLY_OPS
12899     PL_slabs = NULL;
12900     PL_slab_count = 0;
12901 #endif
12902
12903     /* pseudo environmental stuff */
12904     PL_origargc         = proto_perl->Iorigargc;
12905     PL_origargv         = proto_perl->Iorigargv;
12906
12907     param->stashes      = newAV();  /* Setup array of objects to call clone on */
12908     /* This makes no difference to the implementation, as it always pushes
12909        and shifts pointers to other SVs without changing their reference
12910        count, with the array becoming empty before it is freed. However, it
12911        makes it conceptually clear what is going on, and will avoid some
12912        work inside av.c, filling slots between AvFILL() and AvMAX() with
12913        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
12914     AvREAL_off(param->stashes);
12915
12916     if (!(flags & CLONEf_COPY_STACKS)) {
12917         param->unreferenced = newAV();
12918     }
12919
12920     /* Set tainting stuff before PerlIO_debug can possibly get called */
12921     PL_tainting         = proto_perl->Itainting;
12922     PL_taint_warn       = proto_perl->Itaint_warn;
12923
12924 #ifdef PERLIO_LAYERS
12925     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
12926     PerlIO_clone(aTHX_ proto_perl, param);
12927 #endif
12928
12929     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
12930     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
12931     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
12932     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
12933     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
12934     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
12935
12936     /* switches */
12937     PL_minus_c          = proto_perl->Iminus_c;
12938     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
12939     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
12940     PL_localpatches     = proto_perl->Ilocalpatches;
12941     PL_splitstr         = proto_perl->Isplitstr;
12942     PL_minus_n          = proto_perl->Iminus_n;
12943     PL_minus_p          = proto_perl->Iminus_p;
12944     PL_minus_l          = proto_perl->Iminus_l;
12945     PL_minus_a          = proto_perl->Iminus_a;
12946     PL_minus_E          = proto_perl->Iminus_E;
12947     PL_minus_F          = proto_perl->Iminus_F;
12948     PL_doswitches       = proto_perl->Idoswitches;
12949     PL_dowarn           = proto_perl->Idowarn;
12950     PL_sawampersand     = proto_perl->Isawampersand;
12951     PL_unsafe           = proto_perl->Iunsafe;
12952     PL_inplace          = SAVEPV(proto_perl->Iinplace);
12953     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
12954     PL_perldb           = proto_perl->Iperldb;
12955     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12956     PL_exit_flags       = proto_perl->Iexit_flags;
12957
12958     /* magical thingies */
12959     /* XXX time(&PL_basetime) when asked for? */
12960     PL_basetime         = proto_perl->Ibasetime;
12961     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
12962
12963     PL_maxsysfd         = proto_perl->Imaxsysfd;
12964     PL_statusvalue      = proto_perl->Istatusvalue;
12965 #ifdef VMS
12966     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
12967 #else
12968     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12969 #endif
12970     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
12971
12972     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
12973     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
12974     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
12975
12976    
12977     /* RE engine related */
12978     Zero(&PL_reg_state, 1, struct re_save_state);
12979     PL_reginterp_cnt    = 0;
12980     PL_regmatch_slab    = NULL;
12981     
12982     /* Clone the regex array */
12983     /* ORANGE FIXME for plugins, probably in the SV dup code.
12984        newSViv(PTR2IV(CALLREGDUPE(
12985        INT2PTR(REGEXP *, SvIVX(regex)), param))))
12986     */
12987     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
12988     PL_regex_pad = AvARRAY(PL_regex_padav);
12989
12990     /* shortcuts to various I/O objects */
12991     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
12992     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
12993     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
12994     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
12995     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
12996     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
12997     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
12998
12999     /* shortcuts to regexp stuff */
13000     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13001
13002     /* shortcuts to misc objects */
13003     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13004
13005     /* shortcuts to debugging objects */
13006     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13007     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13008     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13009     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13010     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13011     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13012
13013     /* symbol tables */
13014     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13015     PL_curstash         = hv_dup(proto_perl->Icurstash, param);
13016     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13017     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13018     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13019
13020     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13021     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13022     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13023     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13024     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13025     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13026     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13027     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13028
13029     PL_sub_generation   = proto_perl->Isub_generation;
13030     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13031
13032     /* funky return mechanisms */
13033     PL_forkprocess      = proto_perl->Iforkprocess;
13034
13035     /* subprocess state */
13036     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13037
13038     /* internal state */
13039     PL_maxo             = proto_perl->Imaxo;
13040     if (proto_perl->Iop_mask)
13041         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13042     else
13043         PL_op_mask      = NULL;
13044     /* PL_asserting        = proto_perl->Iasserting; */
13045
13046     /* current interpreter roots */
13047     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13048     OP_REFCNT_LOCK;
13049     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13050     OP_REFCNT_UNLOCK;
13051     PL_main_start       = proto_perl->Imain_start;
13052     PL_eval_root        = proto_perl->Ieval_root;
13053     PL_eval_start       = proto_perl->Ieval_start;
13054
13055     /* runtime control stuff */
13056     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13057
13058     PL_filemode         = proto_perl->Ifilemode;
13059     PL_lastfd           = proto_perl->Ilastfd;
13060     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13061     PL_Argv             = NULL;
13062     PL_Cmd              = NULL;
13063     PL_gensym           = proto_perl->Igensym;
13064     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13065     PL_laststatval      = proto_perl->Ilaststatval;
13066     PL_laststype        = proto_perl->Ilaststype;
13067     PL_mess_sv          = NULL;
13068
13069     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13070
13071     /* interpreter atexit processing */
13072     PL_exitlistlen      = proto_perl->Iexitlistlen;
13073     if (PL_exitlistlen) {
13074         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13075         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13076     }
13077     else
13078         PL_exitlist     = (PerlExitListEntry*)NULL;
13079
13080     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13081     if (PL_my_cxt_size) {
13082         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13083         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13084 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13085         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13086         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13087 #endif
13088     }
13089     else {
13090         PL_my_cxt_list  = (void**)NULL;
13091 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13092         PL_my_cxt_keys  = (const char**)NULL;
13093 #endif
13094     }
13095     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13096     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13097     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13098     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13099
13100     PL_profiledata      = NULL;
13101
13102     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13103
13104     PAD_CLONE_VARS(proto_perl, param);
13105
13106 #ifdef HAVE_INTERP_INTERN
13107     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13108 #endif
13109
13110     /* more statics moved here */
13111     PL_generation       = proto_perl->Igeneration;
13112     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13113
13114     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13115     PL_in_clean_all     = proto_perl->Iin_clean_all;
13116
13117     PL_uid              = proto_perl->Iuid;
13118     PL_euid             = proto_perl->Ieuid;
13119     PL_gid              = proto_perl->Igid;
13120     PL_egid             = proto_perl->Iegid;
13121     PL_nomemok          = proto_perl->Inomemok;
13122     PL_an               = proto_perl->Ian;
13123     PL_evalseq          = proto_perl->Ievalseq;
13124     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13125     PL_origalen         = proto_perl->Iorigalen;
13126 #ifdef PERL_USES_PL_PIDSTATUS
13127     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13128 #endif
13129     PL_osname           = SAVEPV(proto_perl->Iosname);
13130     PL_sighandlerp      = proto_perl->Isighandlerp;
13131
13132     PL_runops           = proto_perl->Irunops;
13133
13134     PL_parser           = parser_dup(proto_perl->Iparser, param);
13135
13136     /* XXX this only works if the saved cop has already been cloned */
13137     if (proto_perl->Iparser) {
13138         PL_parser->saved_curcop = (COP*)any_dup(
13139                                     proto_perl->Iparser->saved_curcop,
13140                                     proto_perl);
13141     }
13142
13143     PL_subline          = proto_perl->Isubline;
13144     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13145
13146 #ifdef FCRYPT
13147     PL_cryptseen        = proto_perl->Icryptseen;
13148 #endif
13149
13150     PL_hints            = proto_perl->Ihints;
13151
13152     PL_amagic_generation        = proto_perl->Iamagic_generation;
13153
13154 #ifdef USE_LOCALE_COLLATE
13155     PL_collation_ix     = proto_perl->Icollation_ix;
13156     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13157     PL_collation_standard       = proto_perl->Icollation_standard;
13158     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13159     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13160 #endif /* USE_LOCALE_COLLATE */
13161
13162 #ifdef USE_LOCALE_NUMERIC
13163     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13164     PL_numeric_standard = proto_perl->Inumeric_standard;
13165     PL_numeric_local    = proto_perl->Inumeric_local;
13166     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13167 #endif /* !USE_LOCALE_NUMERIC */
13168
13169     /* utf8 character classes */
13170     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
13171     PL_utf8_ascii       = sv_dup_inc(proto_perl->Iutf8_ascii, param);
13172     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13173     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
13174     PL_utf8_cntrl       = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
13175     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
13176     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
13177     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
13178     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
13179     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
13180     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
13181     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13182     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13183     PL_utf8_X_begin     = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
13184     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13185     PL_utf8_X_prepend   = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
13186     PL_utf8_X_non_hangul        = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
13187     PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
13188     PL_utf8_X_LV        = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
13189     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13190     PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
13191     PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
13192     PL_utf8_X_LV_LVT_V  = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
13193     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13194     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13195     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13196     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13197     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13198     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13199     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13200     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13201     PL_utf8_foldable    = hv_dup_inc(proto_perl->Iutf8_foldable, param);
13202
13203     /* Did the locale setup indicate UTF-8? */
13204     PL_utf8locale       = proto_perl->Iutf8locale;
13205     /* Unicode features (see perlrun/-C) */
13206     PL_unicode          = proto_perl->Iunicode;
13207
13208     /* Pre-5.8 signals control */
13209     PL_signals          = proto_perl->Isignals;
13210
13211     /* times() ticks per second */
13212     PL_clocktick        = proto_perl->Iclocktick;
13213
13214     /* Recursion stopper for PerlIO_find_layer */
13215     PL_in_load_module   = proto_perl->Iin_load_module;
13216
13217     /* sort() routine */
13218     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13219
13220     /* Not really needed/useful since the reenrant_retint is "volatile",
13221      * but do it for consistency's sake. */
13222     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13223
13224     /* Hooks to shared SVs and locks. */
13225     PL_sharehook        = proto_perl->Isharehook;
13226     PL_lockhook         = proto_perl->Ilockhook;
13227     PL_unlockhook       = proto_perl->Iunlockhook;
13228     PL_threadhook       = proto_perl->Ithreadhook;
13229     PL_destroyhook      = proto_perl->Idestroyhook;
13230     PL_signalhook       = proto_perl->Isignalhook;
13231
13232 #ifdef THREADS_HAVE_PIDS
13233     PL_ppid             = proto_perl->Ippid;
13234 #endif
13235
13236     /* swatch cache */
13237     PL_last_swash_hv    = NULL; /* reinits on demand */
13238     PL_last_swash_klen  = 0;
13239     PL_last_swash_key[0]= '\0';
13240     PL_last_swash_tmps  = (U8*)NULL;
13241     PL_last_swash_slen  = 0;
13242
13243     PL_glob_index       = proto_perl->Iglob_index;
13244     PL_srand_called     = proto_perl->Isrand_called;
13245
13246     if (proto_perl->Ipsig_pend) {
13247         Newxz(PL_psig_pend, SIG_SIZE, int);
13248     }
13249     else {
13250         PL_psig_pend    = (int*)NULL;
13251     }
13252
13253     if (proto_perl->Ipsig_name) {
13254         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13255         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13256                             param);
13257         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13258     }
13259     else {
13260         PL_psig_ptr     = (SV**)NULL;
13261         PL_psig_name    = (SV**)NULL;
13262     }
13263
13264     /* intrpvar.h stuff */
13265
13266     if (flags & CLONEf_COPY_STACKS) {
13267         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13268         PL_tmps_ix              = proto_perl->Itmps_ix;
13269         PL_tmps_max             = proto_perl->Itmps_max;
13270         PL_tmps_floor           = proto_perl->Itmps_floor;
13271         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13272         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13273                             PL_tmps_ix+1, param);
13274
13275         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13276         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13277         Newxz(PL_markstack, i, I32);
13278         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13279                                                   - proto_perl->Imarkstack);
13280         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13281                                                   - proto_perl->Imarkstack);
13282         Copy(proto_perl->Imarkstack, PL_markstack,
13283              PL_markstack_ptr - PL_markstack + 1, I32);
13284
13285         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13286          * NOTE: unlike the others! */
13287         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13288         PL_scopestack_max       = proto_perl->Iscopestack_max;
13289         Newxz(PL_scopestack, PL_scopestack_max, I32);
13290         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13291
13292 #ifdef DEBUGGING
13293         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13294         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13295 #endif
13296         /* NOTE: si_dup() looks at PL_markstack */
13297         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13298
13299         /* PL_curstack          = PL_curstackinfo->si_stack; */
13300         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13301         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13302
13303         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13304         PL_stack_base           = AvARRAY(PL_curstack);
13305         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13306                                                    - proto_perl->Istack_base);
13307         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13308
13309         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13310          * NOTE: unlike the others! */
13311         PL_savestack_ix         = proto_perl->Isavestack_ix;
13312         PL_savestack_max        = proto_perl->Isavestack_max;
13313         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13314         PL_savestack            = ss_dup(proto_perl, param);
13315     }
13316     else {
13317         init_stacks();
13318         ENTER;                  /* perl_destruct() wants to LEAVE; */
13319     }
13320
13321     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13322     PL_top_env          = &PL_start_env;
13323
13324     PL_op               = proto_perl->Iop;
13325
13326     PL_Sv               = NULL;
13327     PL_Xpv              = (XPV*)NULL;
13328     my_perl->Ina        = proto_perl->Ina;
13329
13330     PL_statbuf          = proto_perl->Istatbuf;
13331     PL_statcache        = proto_perl->Istatcache;
13332     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13333     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13334 #ifdef HAS_TIMES
13335     PL_timesbuf         = proto_perl->Itimesbuf;
13336 #endif
13337
13338     PL_tainted          = proto_perl->Itainted;
13339     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13340     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13341     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13342     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13343     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13344     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13345     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13346     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13347
13348     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13349     PL_restartop        = proto_perl->Irestartop;
13350     PL_in_eval          = proto_perl->Iin_eval;
13351     PL_delaymagic       = proto_perl->Idelaymagic;
13352     PL_phase            = proto_perl->Iphase;
13353     PL_localizing       = proto_perl->Ilocalizing;
13354
13355     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13356     PL_hv_fetch_ent_mh  = NULL;
13357     PL_modcount         = proto_perl->Imodcount;
13358     PL_lastgotoprobe    = NULL;
13359     PL_dumpindent       = proto_perl->Idumpindent;
13360
13361     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13362     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13363     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13364     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13365     PL_efloatbuf        = NULL;         /* reinits on demand */
13366     PL_efloatsize       = 0;                    /* reinits on demand */
13367
13368     /* regex stuff */
13369
13370     PL_screamfirst      = NULL;
13371     PL_screamnext       = NULL;
13372     PL_maxscream        = -1;                   /* reinits on demand */
13373     PL_lastscream       = NULL;
13374
13375
13376     PL_regdummy         = proto_perl->Iregdummy;
13377     PL_colorset         = 0;            /* reinits PL_colors[] */
13378     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13379
13380
13381
13382     /* Pluggable optimizer */
13383     PL_peepp            = proto_perl->Ipeepp;
13384     PL_rpeepp           = proto_perl->Irpeepp;
13385     /* op_free() hook */
13386     PL_opfreehook       = proto_perl->Iopfreehook;
13387
13388     PL_stashcache       = newHV();
13389
13390     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13391                                             proto_perl->Iwatchaddr);
13392     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13393     if (PL_debug && PL_watchaddr) {
13394         PerlIO_printf(Perl_debug_log,
13395           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13396           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13397           PTR2UV(PL_watchok));
13398     }
13399
13400     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13401     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13402     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13403
13404     /* Call the ->CLONE method, if it exists, for each of the stashes
13405        identified by sv_dup() above.
13406     */
13407     while(av_len(param->stashes) != -1) {
13408         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13409         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13410         if (cloner && GvCV(cloner)) {
13411             dSP;
13412             ENTER;
13413             SAVETMPS;
13414             PUSHMARK(SP);
13415             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13416             PUTBACK;
13417             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13418             FREETMPS;
13419             LEAVE;
13420         }
13421     }
13422
13423     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13424         ptr_table_free(PL_ptr_table);
13425         PL_ptr_table = NULL;
13426     }
13427
13428     if (!(flags & CLONEf_COPY_STACKS)) {
13429         unreferenced_to_tmp_stack(param->unreferenced);
13430     }
13431
13432     SvREFCNT_dec(param->stashes);
13433
13434     /* orphaned? eg threads->new inside BEGIN or use */
13435     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13436         SvREFCNT_inc_simple_void(PL_compcv);
13437         SAVEFREESV(PL_compcv);
13438     }
13439
13440     return my_perl;
13441 }
13442
13443 static void
13444 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13445 {
13446     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13447     
13448     if (AvFILLp(unreferenced) > -1) {
13449         SV **svp = AvARRAY(unreferenced);
13450         SV **const last = svp + AvFILLp(unreferenced);
13451         SSize_t count = 0;
13452
13453         do {
13454             if (SvREFCNT(*svp) == 1)
13455                 ++count;
13456         } while (++svp <= last);
13457
13458         EXTEND_MORTAL(count);
13459         svp = AvARRAY(unreferenced);
13460
13461         do {
13462             if (SvREFCNT(*svp) == 1) {
13463                 /* Our reference is the only one to this SV. This means that
13464                    in this thread, the scalar effectively has a 0 reference.
13465                    That doesn't work (cleanup never happens), so donate our
13466                    reference to it onto the save stack. */
13467                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13468             } else {
13469                 /* As an optimisation, because we are already walking the
13470                    entire array, instead of above doing either
13471                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13472                    release our reference to the scalar, so that at the end of
13473                    the array owns zero references to the scalars it happens to
13474                    point to. We are effectively converting the array from
13475                    AvREAL() on to AvREAL() off. This saves the av_clear()
13476                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13477                    walking the array a second time.  */
13478                 SvREFCNT_dec(*svp);
13479             }
13480
13481         } while (++svp <= last);
13482         AvREAL_off(unreferenced);
13483     }
13484     SvREFCNT_dec(unreferenced);
13485 }
13486
13487 void
13488 Perl_clone_params_del(CLONE_PARAMS *param)
13489 {
13490     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13491        happy: */
13492     PerlInterpreter *const to = param->new_perl;
13493     dTHXa(to);
13494     PerlInterpreter *const was = PERL_GET_THX;
13495
13496     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13497
13498     if (was != to) {
13499         PERL_SET_THX(to);
13500     }
13501
13502     SvREFCNT_dec(param->stashes);
13503     if (param->unreferenced)
13504         unreferenced_to_tmp_stack(param->unreferenced);
13505
13506     Safefree(param);
13507
13508     if (was != to) {
13509         PERL_SET_THX(was);
13510     }
13511 }
13512
13513 CLONE_PARAMS *
13514 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13515 {
13516     dVAR;
13517     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13518        does a dTHX; to get the context from thread local storage.
13519        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13520        a version that passes in my_perl.  */
13521     PerlInterpreter *const was = PERL_GET_THX;
13522     CLONE_PARAMS *param;
13523
13524     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13525
13526     if (was != to) {
13527         PERL_SET_THX(to);
13528     }
13529
13530     /* Given that we've set the context, we can do this unshared.  */
13531     Newx(param, 1, CLONE_PARAMS);
13532
13533     param->flags = 0;
13534     param->proto_perl = from;
13535     param->new_perl = to;
13536     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13537     AvREAL_off(param->stashes);
13538     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13539
13540     if (was != to) {
13541         PERL_SET_THX(was);
13542     }
13543     return param;
13544 }
13545
13546 #endif /* USE_ITHREADS */
13547
13548 /*
13549 =head1 Unicode Support
13550
13551 =for apidoc sv_recode_to_utf8
13552
13553 The encoding is assumed to be an Encode object, on entry the PV
13554 of the sv is assumed to be octets in that encoding, and the sv
13555 will be converted into Unicode (and UTF-8).
13556
13557 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13558 is not a reference, nothing is done to the sv.  If the encoding is not
13559 an C<Encode::XS> Encoding object, bad things will happen.
13560 (See F<lib/encoding.pm> and L<Encode>).
13561
13562 The PV of the sv is returned.
13563
13564 =cut */
13565
13566 char *
13567 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13568 {
13569     dVAR;
13570
13571     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13572
13573     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13574         SV *uni;
13575         STRLEN len;
13576         const char *s;
13577         dSP;
13578         ENTER;
13579         SAVETMPS;
13580         save_re_context();
13581         PUSHMARK(sp);
13582         EXTEND(SP, 3);
13583         XPUSHs(encoding);
13584         XPUSHs(sv);
13585 /*
13586   NI-S 2002/07/09
13587   Passing sv_yes is wrong - it needs to be or'ed set of constants
13588   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13589   remove converted chars from source.
13590
13591   Both will default the value - let them.
13592
13593         XPUSHs(&PL_sv_yes);
13594 */
13595         PUTBACK;
13596         call_method("decode", G_SCALAR);
13597         SPAGAIN;
13598         uni = POPs;
13599         PUTBACK;
13600         s = SvPV_const(uni, len);
13601         if (s != SvPVX_const(sv)) {
13602             SvGROW(sv, len + 1);
13603             Move(s, SvPVX(sv), len + 1, char);
13604             SvCUR_set(sv, len);
13605         }
13606         FREETMPS;
13607         LEAVE;
13608         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13609             /* clear pos and any utf8 cache */
13610             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13611             if (mg)
13612                 mg->mg_len = -1;
13613             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13614                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13615         }
13616         SvUTF8_on(sv);
13617         return SvPVX(sv);
13618     }
13619     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13620 }
13621
13622 /*
13623 =for apidoc sv_cat_decode
13624
13625 The encoding is assumed to be an Encode object, the PV of the ssv is
13626 assumed to be octets in that encoding and decoding the input starts
13627 from the position which (PV + *offset) pointed to.  The dsv will be
13628 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13629 when the string tstr appears in decoding output or the input ends on
13630 the PV of the ssv. The value which the offset points will be modified
13631 to the last input position on the ssv.
13632
13633 Returns TRUE if the terminator was found, else returns FALSE.
13634
13635 =cut */
13636
13637 bool
13638 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13639                    SV *ssv, int *offset, char *tstr, int tlen)
13640 {
13641     dVAR;
13642     bool ret = FALSE;
13643
13644     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13645
13646     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13647         SV *offsv;
13648         dSP;
13649         ENTER;
13650         SAVETMPS;
13651         save_re_context();
13652         PUSHMARK(sp);
13653         EXTEND(SP, 6);
13654         XPUSHs(encoding);
13655         XPUSHs(dsv);
13656         XPUSHs(ssv);
13657         offsv = newSViv(*offset);
13658         mXPUSHs(offsv);
13659         mXPUSHp(tstr, tlen);
13660         PUTBACK;
13661         call_method("cat_decode", G_SCALAR);
13662         SPAGAIN;
13663         ret = SvTRUE(TOPs);
13664         *offset = SvIV(offsv);
13665         PUTBACK;
13666         FREETMPS;
13667         LEAVE;
13668     }
13669     else
13670         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13671     return ret;
13672
13673 }
13674
13675 /* ---------------------------------------------------------------------
13676  *
13677  * support functions for report_uninit()
13678  */
13679
13680 /* the maxiumum size of array or hash where we will scan looking
13681  * for the undefined element that triggered the warning */
13682
13683 #define FUV_MAX_SEARCH_SIZE 1000
13684
13685 /* Look for an entry in the hash whose value has the same SV as val;
13686  * If so, return a mortal copy of the key. */
13687
13688 STATIC SV*
13689 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13690 {
13691     dVAR;
13692     register HE **array;
13693     I32 i;
13694
13695     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13696
13697     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13698                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13699         return NULL;
13700
13701     array = HvARRAY(hv);
13702
13703     for (i=HvMAX(hv); i>0; i--) {
13704         register HE *entry;
13705         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13706             if (HeVAL(entry) != val)
13707                 continue;
13708             if (    HeVAL(entry) == &PL_sv_undef ||
13709                     HeVAL(entry) == &PL_sv_placeholder)
13710                 continue;
13711             if (!HeKEY(entry))
13712                 return NULL;
13713             if (HeKLEN(entry) == HEf_SVKEY)
13714                 return sv_mortalcopy(HeKEY_sv(entry));
13715             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13716         }
13717     }
13718     return NULL;
13719 }
13720
13721 /* Look for an entry in the array whose value has the same SV as val;
13722  * If so, return the index, otherwise return -1. */
13723
13724 STATIC I32
13725 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13726 {
13727     dVAR;
13728
13729     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13730
13731     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13732                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13733         return -1;
13734
13735     if (val != &PL_sv_undef) {
13736         SV ** const svp = AvARRAY(av);
13737         I32 i;
13738
13739         for (i=AvFILLp(av); i>=0; i--)
13740             if (svp[i] == val)
13741                 return i;
13742     }
13743     return -1;
13744 }
13745
13746 /* S_varname(): return the name of a variable, optionally with a subscript.
13747  * If gv is non-zero, use the name of that global, along with gvtype (one
13748  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13749  * targ.  Depending on the value of the subscript_type flag, return:
13750  */
13751
13752 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13753 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13754 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13755 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13756
13757 STATIC SV*
13758 S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13759         const SV *const keyname, I32 aindex, int subscript_type)
13760 {
13761
13762     SV * const name = sv_newmortal();
13763     if (gv) {
13764         char buffer[2];
13765         buffer[0] = gvtype;
13766         buffer[1] = 0;
13767
13768         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13769
13770         gv_fullname4(name, gv, buffer, 0);
13771
13772         if ((unsigned int)SvPVX(name)[1] <= 26) {
13773             buffer[0] = '^';
13774             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13775
13776             /* Swap the 1 unprintable control character for the 2 byte pretty
13777                version - ie substr($name, 1, 1) = $buffer; */
13778             sv_insert(name, 1, 1, buffer, 2);
13779         }
13780     }
13781     else {
13782         CV * const cv = find_runcv(NULL);
13783         SV *sv;
13784         AV *av;
13785
13786         if (!cv || !CvPADLIST(cv))
13787             return NULL;
13788         av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
13789         sv = *av_fetch(av, targ, FALSE);
13790         sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
13791     }
13792
13793     if (subscript_type == FUV_SUBSCRIPT_HASH) {
13794         SV * const sv = newSV(0);
13795         *SvPVX(name) = '$';
13796         Perl_sv_catpvf(aTHX_ name, "{%s}",
13797             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13798         SvREFCNT_dec(sv);
13799     }
13800     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13801         *SvPVX(name) = '$';
13802         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13803     }
13804     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13805         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13806         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
13807     }
13808
13809     return name;
13810 }
13811
13812
13813 /*
13814 =for apidoc find_uninit_var
13815
13816 Find the name of the undefined variable (if any) that caused the operator o
13817 to issue a "Use of uninitialized value" warning.
13818 If match is true, only return a name if it's value matches uninit_sv.
13819 So roughly speaking, if a unary operator (such as OP_COS) generates a
13820 warning, then following the direct child of the op may yield an
13821 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
13822 other hand, with OP_ADD there are two branches to follow, so we only print
13823 the variable name if we get an exact match.
13824
13825 The name is returned as a mortal SV.
13826
13827 Assumes that PL_op is the op that originally triggered the error, and that
13828 PL_comppad/PL_curpad points to the currently executing pad.
13829
13830 =cut
13831 */
13832
13833 STATIC SV *
13834 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13835                   bool match)
13836 {
13837     dVAR;
13838     SV *sv;
13839     const GV *gv;
13840     const OP *o, *o2, *kid;
13841
13842     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13843                             uninit_sv == &PL_sv_placeholder)))
13844         return NULL;
13845
13846     switch (obase->op_type) {
13847
13848     case OP_RV2AV:
13849     case OP_RV2HV:
13850     case OP_PADAV:
13851     case OP_PADHV:
13852       {
13853         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13854         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13855         I32 index = 0;
13856         SV *keysv = NULL;
13857         int subscript_type = FUV_SUBSCRIPT_WITHIN;
13858
13859         if (pad) { /* @lex, %lex */
13860             sv = PAD_SVl(obase->op_targ);
13861             gv = NULL;
13862         }
13863         else {
13864             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13865             /* @global, %global */
13866                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13867                 if (!gv)
13868                     break;
13869                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
13870             }
13871             else /* @{expr}, %{expr} */
13872                 return find_uninit_var(cUNOPx(obase)->op_first,
13873                                                     uninit_sv, match);
13874         }
13875
13876         /* attempt to find a match within the aggregate */
13877         if (hash) {
13878             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13879             if (keysv)
13880                 subscript_type = FUV_SUBSCRIPT_HASH;
13881         }
13882         else {
13883             index = find_array_subscript((const AV *)sv, uninit_sv);
13884             if (index >= 0)
13885                 subscript_type = FUV_SUBSCRIPT_ARRAY;
13886         }
13887
13888         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13889             break;
13890
13891         return varname(gv, hash ? '%' : '@', obase->op_targ,
13892                                     keysv, index, subscript_type);
13893       }
13894
13895     case OP_PADSV:
13896         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13897             break;
13898         return varname(NULL, '$', obase->op_targ,
13899                                     NULL, 0, FUV_SUBSCRIPT_NONE);
13900
13901     case OP_GVSV:
13902         gv = cGVOPx_gv(obase);
13903         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
13904             break;
13905         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13906
13907     case OP_AELEMFAST:
13908         if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
13909             if (match) {
13910                 SV **svp;
13911                 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
13912                 if (!av || SvRMAGICAL(av))
13913                     break;
13914                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13915                 if (!svp || *svp != uninit_sv)
13916                     break;
13917             }
13918             return varname(NULL, '$', obase->op_targ,
13919                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13920         }
13921         else {
13922             gv = cGVOPx_gv(obase);
13923             if (!gv)
13924                 break;
13925             if (match) {
13926                 SV **svp;
13927                 AV *const av = GvAV(gv);
13928                 if (!av || SvRMAGICAL(av))
13929                     break;
13930                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13931                 if (!svp || *svp != uninit_sv)
13932                     break;
13933             }
13934             return varname(gv, '$', 0,
13935                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13936         }
13937         break;
13938
13939     case OP_EXISTS:
13940         o = cUNOPx(obase)->op_first;
13941         if (!o || o->op_type != OP_NULL ||
13942                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
13943             break;
13944         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
13945
13946     case OP_AELEM:
13947     case OP_HELEM:
13948         if (PL_op == obase)
13949             /* $a[uninit_expr] or $h{uninit_expr} */
13950             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
13951
13952         gv = NULL;
13953         o = cBINOPx(obase)->op_first;
13954         kid = cBINOPx(obase)->op_last;
13955
13956         /* get the av or hv, and optionally the gv */
13957         sv = NULL;
13958         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
13959             sv = PAD_SV(o->op_targ);
13960         }
13961         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
13962                 && cUNOPo->op_first->op_type == OP_GV)
13963         {
13964             gv = cGVOPx_gv(cUNOPo->op_first);
13965             if (!gv)
13966                 break;
13967             sv = o->op_type
13968                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
13969         }
13970         if (!sv)
13971             break;
13972
13973         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
13974             /* index is constant */
13975             if (match) {
13976                 if (SvMAGICAL(sv))
13977                     break;
13978                 if (obase->op_type == OP_HELEM) {
13979                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), cSVOPx_sv(kid), 0, 0);
13980                     if (!he || HeVAL(he) != uninit_sv)
13981                         break;
13982                 }
13983                 else {
13984                     SV * const * const svp = av_fetch(MUTABLE_AV(sv), SvIV(cSVOPx_sv(kid)), FALSE);
13985                     if (!svp || *svp != uninit_sv)
13986                         break;
13987                 }
13988             }
13989             if (obase->op_type == OP_HELEM)
13990                 return varname(gv, '%', o->op_targ,
13991                             cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
13992             else
13993                 return varname(gv, '@', o->op_targ, NULL,
13994                             SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
13995         }
13996         else  {
13997             /* index is an expression;
13998              * attempt to find a match within the aggregate */
13999             if (obase->op_type == OP_HELEM) {
14000                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14001                 if (keysv)
14002                     return varname(gv, '%', o->op_targ,
14003                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14004             }
14005             else {
14006                 const I32 index
14007                     = find_array_subscript((const AV *)sv, uninit_sv);
14008                 if (index >= 0)
14009                     return varname(gv, '@', o->op_targ,
14010                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14011             }
14012             if (match)
14013                 break;
14014             return varname(gv,
14015                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14016                 ? '@' : '%',
14017                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14018         }
14019         break;
14020
14021     case OP_AASSIGN:
14022         /* only examine RHS */
14023         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14024
14025     case OP_OPEN:
14026         o = cUNOPx(obase)->op_first;
14027         if (o->op_type == OP_PUSHMARK)
14028             o = o->op_sibling;
14029
14030         if (!o->op_sibling) {
14031             /* one-arg version of open is highly magical */
14032
14033             if (o->op_type == OP_GV) { /* open FOO; */
14034                 gv = cGVOPx_gv(o);
14035                 if (match && GvSV(gv) != uninit_sv)
14036                     break;
14037                 return varname(gv, '$', 0,
14038                             NULL, 0, FUV_SUBSCRIPT_NONE);
14039             }
14040             /* other possibilities not handled are:
14041              * open $x; or open my $x;  should return '${*$x}'
14042              * open expr;               should return '$'.expr ideally
14043              */
14044              break;
14045         }
14046         goto do_op;
14047
14048     /* ops where $_ may be an implicit arg */
14049     case OP_TRANS:
14050     case OP_SUBST:
14051     case OP_MATCH:
14052         if ( !(obase->op_flags & OPf_STACKED)) {
14053             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14054                                  ? PAD_SVl(obase->op_targ)
14055                                  : DEFSV))
14056             {
14057                 sv = sv_newmortal();
14058                 sv_setpvs(sv, "$_");
14059                 return sv;
14060             }
14061         }
14062         goto do_op;
14063
14064     case OP_PRTF:
14065     case OP_PRINT:
14066     case OP_SAY:
14067         match = 1; /* print etc can return undef on defined args */
14068         /* skip filehandle as it can't produce 'undef' warning  */
14069         o = cUNOPx(obase)->op_first;
14070         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
14071             o = o->op_sibling->op_sibling;
14072         goto do_op2;
14073
14074
14075     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14076     case OP_RV2SV:
14077     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14078
14079         /* the following ops are capable of returning PL_sv_undef even for
14080          * defined arg(s) */
14081
14082     case OP_BACKTICK:
14083     case OP_PIPE_OP:
14084     case OP_FILENO:
14085     case OP_BINMODE:
14086     case OP_TIED:
14087     case OP_GETC:
14088     case OP_SYSREAD:
14089     case OP_SEND:
14090     case OP_IOCTL:
14091     case OP_SOCKET:
14092     case OP_SOCKPAIR:
14093     case OP_BIND:
14094     case OP_CONNECT:
14095     case OP_LISTEN:
14096     case OP_ACCEPT:
14097     case OP_SHUTDOWN:
14098     case OP_SSOCKOPT:
14099     case OP_GETPEERNAME:
14100     case OP_FTRREAD:
14101     case OP_FTRWRITE:
14102     case OP_FTREXEC:
14103     case OP_FTROWNED:
14104     case OP_FTEREAD:
14105     case OP_FTEWRITE:
14106     case OP_FTEEXEC:
14107     case OP_FTEOWNED:
14108     case OP_FTIS:
14109     case OP_FTZERO:
14110     case OP_FTSIZE:
14111     case OP_FTFILE:
14112     case OP_FTDIR:
14113     case OP_FTLINK:
14114     case OP_FTPIPE:
14115     case OP_FTSOCK:
14116     case OP_FTBLK:
14117     case OP_FTCHR:
14118     case OP_FTTTY:
14119     case OP_FTSUID:
14120     case OP_FTSGID:
14121     case OP_FTSVTX:
14122     case OP_FTTEXT:
14123     case OP_FTBINARY:
14124     case OP_FTMTIME:
14125     case OP_FTATIME:
14126     case OP_FTCTIME:
14127     case OP_READLINK:
14128     case OP_OPEN_DIR:
14129     case OP_READDIR:
14130     case OP_TELLDIR:
14131     case OP_SEEKDIR:
14132     case OP_REWINDDIR:
14133     case OP_CLOSEDIR:
14134     case OP_GMTIME:
14135     case OP_ALARM:
14136     case OP_SEMGET:
14137     case OP_GETLOGIN:
14138     case OP_UNDEF:
14139     case OP_SUBSTR:
14140     case OP_AEACH:
14141     case OP_EACH:
14142     case OP_SORT:
14143     case OP_CALLER:
14144     case OP_DOFILE:
14145     case OP_PROTOTYPE:
14146     case OP_NCMP:
14147     case OP_SMARTMATCH:
14148     case OP_UNPACK:
14149     case OP_SYSOPEN:
14150     case OP_SYSSEEK:
14151         match = 1;
14152         goto do_op;
14153
14154     case OP_ENTERSUB:
14155     case OP_GOTO:
14156         /* XXX tmp hack: these two may call an XS sub, and currently
14157           XS subs don't have a SUB entry on the context stack, so CV and
14158           pad determination goes wrong, and BAD things happen. So, just
14159           don't try to determine the value under those circumstances.
14160           Need a better fix at dome point. DAPM 11/2007 */
14161         break;
14162
14163     case OP_FLIP:
14164     case OP_FLOP:
14165     {
14166         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14167         if (gv && GvSV(gv) == uninit_sv)
14168             return newSVpvs_flags("$.", SVs_TEMP);
14169         goto do_op;
14170     }
14171
14172     case OP_POS:
14173         /* def-ness of rval pos() is independent of the def-ness of its arg */
14174         if ( !(obase->op_flags & OPf_MOD))
14175             break;
14176
14177     case OP_SCHOMP:
14178     case OP_CHOMP:
14179         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14180             return newSVpvs_flags("${$/}", SVs_TEMP);
14181         /*FALLTHROUGH*/
14182
14183     default:
14184     do_op:
14185         if (!(obase->op_flags & OPf_KIDS))
14186             break;
14187         o = cUNOPx(obase)->op_first;
14188         
14189     do_op2:
14190         if (!o)
14191             break;
14192
14193         /* if all except one arg are constant, or have no side-effects,
14194          * or are optimized away, then it's unambiguous */
14195         o2 = NULL;
14196         for (kid=o; kid; kid = kid->op_sibling) {
14197             if (kid) {
14198                 const OPCODE type = kid->op_type;
14199                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14200                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14201                   || (type == OP_PUSHMARK)
14202                   || (
14203                       /* @$a and %$a, but not @a or %a */
14204                         (type == OP_RV2AV || type == OP_RV2HV)
14205                      && cUNOPx(kid)->op_first
14206                      && cUNOPx(kid)->op_first->op_type != OP_GV
14207                      )
14208                 )
14209                 continue;
14210             }
14211             if (o2) { /* more than one found */
14212                 o2 = NULL;
14213                 break;
14214             }
14215             o2 = kid;
14216         }
14217         if (o2)
14218             return find_uninit_var(o2, uninit_sv, match);
14219
14220         /* scan all args */
14221         while (o) {
14222             sv = find_uninit_var(o, uninit_sv, 1);
14223             if (sv)
14224                 return sv;
14225             o = o->op_sibling;
14226         }
14227         break;
14228     }
14229     return NULL;
14230 }
14231
14232
14233 /*
14234 =for apidoc report_uninit
14235
14236 Print appropriate "Use of uninitialized variable" warning
14237
14238 =cut
14239 */
14240
14241 void
14242 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14243 {
14244     dVAR;
14245     if (PL_op) {
14246         SV* varname = NULL;
14247         if (uninit_sv) {
14248             varname = find_uninit_var(PL_op, uninit_sv,0);
14249             if (varname)
14250                 sv_insert(varname, 0, 0, " ", 1);
14251         }
14252         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14253                 varname ? SvPV_nolen_const(varname) : "",
14254                 " in ", OP_DESC(PL_op));
14255     }
14256     else
14257         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14258                     "", "", "");
14259 }
14260
14261 /*
14262  * Local variables:
14263  * c-indentation-style: bsd
14264  * c-basic-offset: 4
14265  * indent-tabs-mode: t
14266  * End:
14267  *
14268  * ex: set ts=8 sts=4 sw=4 noet:
14269  */