This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix infinite loop with $tied =~ s/non-utf8/utf8/
[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     SV* sv;
369     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         const SV * const svend = &sva[SvREFCNT(sva)];
414         SV* sv;
415         for (sv = sva + 1; sv < svend; ++sv) {
416             if (SvTYPE(sv) != (svtype)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) != (svtype)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     { sizeof(NV), sizeof(NV),
897       STRUCT_OFFSET(XPVNV, xnv_u),
898       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
899
900     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
901       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
902       + STRUCT_OFFSET(XPV, xpv_cur),
903       SVt_PV, FALSE, NONV, HASARENA,
904       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
905
906     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
907       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
908       + STRUCT_OFFSET(XPV, xpv_cur),
909       SVt_PVIV, FALSE, NONV, HASARENA,
910       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
911
912     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
913       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
914       + STRUCT_OFFSET(XPV, xpv_cur),
915       SVt_PVNV, FALSE, HADNV, HASARENA,
916       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
917
918     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
919       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
920
921     { sizeof(regexp),
922       sizeof(regexp),
923       0,
924       SVt_REGEXP, FALSE, NONV, HASARENA,
925       FIT_ARENA(0, sizeof(regexp))
926     },
927
928     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
929       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
930     
931     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
932       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
933
934     { sizeof(XPVAV),
935       copy_length(XPVAV, xav_alloc),
936       0,
937       SVt_PVAV, TRUE, NONV, HASARENA,
938       FIT_ARENA(0, sizeof(XPVAV)) },
939
940     { sizeof(XPVHV),
941       copy_length(XPVHV, xhv_max),
942       0,
943       SVt_PVHV, TRUE, NONV, HASARENA,
944       FIT_ARENA(0, sizeof(XPVHV)) },
945
946     { sizeof(XPVCV),
947       sizeof(XPVCV),
948       0,
949       SVt_PVCV, TRUE, NONV, HASARENA,
950       FIT_ARENA(0, sizeof(XPVCV)) },
951
952     { sizeof(XPVFM),
953       sizeof(XPVFM),
954       0,
955       SVt_PVFM, TRUE, NONV, NOARENA,
956       FIT_ARENA(20, sizeof(XPVFM)) },
957
958     { sizeof(XPVIO),
959       sizeof(XPVIO),
960       0,
961       SVt_PVIO, TRUE, NONV, HASARENA,
962       FIT_ARENA(24, sizeof(XPVIO)) },
963 };
964
965 #define new_body_allocated(sv_type)             \
966     (void *)((char *)S_new_body(aTHX_ sv_type)  \
967              - bodies_by_type[sv_type].offset)
968
969 /* return a thing to the free list */
970
971 #define del_body(thing, root)                           \
972     STMT_START {                                        \
973         void ** const thing_copy = (void **)thing;      \
974         *thing_copy = *root;                            \
975         *root = (void*)thing_copy;                      \
976     } STMT_END
977
978 #ifdef PURIFY
979
980 #define new_XNV()       safemalloc(sizeof(XPVNV))
981 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
982 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
983
984 #define del_XPVGV(p)    safefree(p)
985
986 #else /* !PURIFY */
987
988 #define new_XNV()       new_body_allocated(SVt_NV)
989 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
990 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
991
992 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
993                                  &PL_body_roots[SVt_PVGV])
994
995 #endif /* PURIFY */
996
997 /* no arena for you! */
998
999 #define new_NOARENA(details) \
1000         safemalloc((details)->body_size + (details)->offset)
1001 #define new_NOARENAZ(details) \
1002         safecalloc((details)->body_size + (details)->offset, 1)
1003
1004 void *
1005 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1006                   const size_t arena_size)
1007 {
1008     dVAR;
1009     void ** const root = &PL_body_roots[sv_type];
1010     struct arena_desc *adesc;
1011     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1012     unsigned int curr;
1013     char *start;
1014     const char *end;
1015     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1016 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1017     static bool done_sanity_check;
1018
1019     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1020      * variables like done_sanity_check. */
1021     if (!done_sanity_check) {
1022         unsigned int i = SVt_LAST;
1023
1024         done_sanity_check = TRUE;
1025
1026         while (i--)
1027             assert (bodies_by_type[i].type == i);
1028     }
1029 #endif
1030
1031     assert(arena_size);
1032
1033     /* may need new arena-set to hold new arena */
1034     if (!aroot || aroot->curr >= aroot->set_size) {
1035         struct arena_set *newroot;
1036         Newxz(newroot, 1, struct arena_set);
1037         newroot->set_size = ARENAS_PER_SET;
1038         newroot->next = aroot;
1039         aroot = newroot;
1040         PL_body_arenas = (void *) newroot;
1041         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1042     }
1043
1044     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1045     curr = aroot->curr++;
1046     adesc = &(aroot->set[curr]);
1047     assert(!adesc->arena);
1048     
1049     Newx(adesc->arena, good_arena_size, char);
1050     adesc->size = good_arena_size;
1051     adesc->utype = sv_type;
1052     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1053                           curr, (void*)adesc->arena, (UV)good_arena_size));
1054
1055     start = (char *) adesc->arena;
1056
1057     /* Get the address of the byte after the end of the last body we can fit.
1058        Remember, this is integer division:  */
1059     end = start + good_arena_size / body_size * body_size;
1060
1061     /* computed count doesn't reflect the 1st slot reservation */
1062 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1063     DEBUG_m(PerlIO_printf(Perl_debug_log,
1064                           "arena %p end %p arena-size %d (from %d) type %d "
1065                           "size %d ct %d\n",
1066                           (void*)start, (void*)end, (int)good_arena_size,
1067                           (int)arena_size, sv_type, (int)body_size,
1068                           (int)good_arena_size / (int)body_size));
1069 #else
1070     DEBUG_m(PerlIO_printf(Perl_debug_log,
1071                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1072                           (void*)start, (void*)end,
1073                           (int)arena_size, sv_type, (int)body_size,
1074                           (int)good_arena_size / (int)body_size));
1075 #endif
1076     *root = (void *)start;
1077
1078     while (1) {
1079         /* Where the next body would start:  */
1080         char * const next = start + body_size;
1081
1082         if (next >= end) {
1083             /* This is the last body:  */
1084             assert(next == end);
1085
1086             *(void **)start = 0;
1087             return *root;
1088         }
1089
1090         *(void**) start = (void *)next;
1091         start = next;
1092     }
1093 }
1094
1095 /* grab a new thing from the free list, allocating more if necessary.
1096    The inline version is used for speed in hot routines, and the
1097    function using it serves the rest (unless PURIFY).
1098 */
1099 #define new_body_inline(xpv, sv_type) \
1100     STMT_START { \
1101         void ** const r3wt = &PL_body_roots[sv_type]; \
1102         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1103           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1104                                              bodies_by_type[sv_type].body_size,\
1105                                              bodies_by_type[sv_type].arena_size)); \
1106         *(r3wt) = *(void**)(xpv); \
1107     } STMT_END
1108
1109 #ifndef PURIFY
1110
1111 STATIC void *
1112 S_new_body(pTHX_ const svtype sv_type)
1113 {
1114     dVAR;
1115     void *xpv;
1116     new_body_inline(xpv, sv_type);
1117     return xpv;
1118 }
1119
1120 #endif
1121
1122 static const struct body_details fake_rv =
1123     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1124
1125 /*
1126 =for apidoc sv_upgrade
1127
1128 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1129 SV, then copies across as much information as possible from the old body.
1130 It croaks if the SV is already in a more complex form than requested.  You
1131 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1132 before calling C<sv_upgrade>, and hence does not croak.  See also
1133 C<svtype>.
1134
1135 =cut
1136 */
1137
1138 void
1139 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1140 {
1141     dVAR;
1142     void*       old_body;
1143     void*       new_body;
1144     const svtype old_type = SvTYPE(sv);
1145     const struct body_details *new_type_details;
1146     const struct body_details *old_type_details
1147         = bodies_by_type + old_type;
1148     SV *referant = NULL;
1149
1150     PERL_ARGS_ASSERT_SV_UPGRADE;
1151
1152     if (old_type == new_type)
1153         return;
1154
1155     /* This clause was purposefully added ahead of the early return above to
1156        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1157        inference by Nick I-S that it would fix other troublesome cases. See
1158        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1159
1160        Given that shared hash key scalars are no longer PVIV, but PV, there is
1161        no longer need to unshare so as to free up the IVX slot for its proper
1162        purpose. So it's safe to move the early return earlier.  */
1163
1164     if (new_type != SVt_PV && SvIsCOW(sv)) {
1165         sv_force_normal_flags(sv, 0);
1166     }
1167
1168     old_body = SvANY(sv);
1169
1170     /* Copying structures onto other structures that have been neatly zeroed
1171        has a subtle gotcha. Consider XPVMG
1172
1173        +------+------+------+------+------+-------+-------+
1174        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1175        +------+------+------+------+------+-------+-------+
1176        0      4      8     12     16     20      24      28
1177
1178        where NVs are aligned to 8 bytes, so that sizeof that structure is
1179        actually 32 bytes long, with 4 bytes of padding at the end:
1180
1181        +------+------+------+------+------+-------+-------+------+
1182        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1183        +------+------+------+------+------+-------+-------+------+
1184        0      4      8     12     16     20      24      28     32
1185
1186        so what happens if you allocate memory for this structure:
1187
1188        +------+------+------+------+------+-------+-------+------+------+...
1189        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1190        +------+------+------+------+------+-------+-------+------+------+...
1191        0      4      8     12     16     20      24      28     32     36
1192
1193        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1194        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1195        started out as zero once, but it's quite possible that it isn't. So now,
1196        rather than a nicely zeroed GP, you have it pointing somewhere random.
1197        Bugs ensue.
1198
1199        (In fact, GP ends up pointing at a previous GP structure, because the
1200        principle cause of the padding in XPVMG getting garbage is a copy of
1201        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1202        this happens to be moot because XPVGV has been re-ordered, with GP
1203        no longer after STASH)
1204
1205        So we are careful and work out the size of used parts of all the
1206        structures.  */
1207
1208     switch (old_type) {
1209     case SVt_NULL:
1210         break;
1211     case SVt_IV:
1212         if (SvROK(sv)) {
1213             referant = SvRV(sv);
1214             old_type_details = &fake_rv;
1215             if (new_type == SVt_NV)
1216                 new_type = SVt_PVNV;
1217         } else {
1218             if (new_type < SVt_PVIV) {
1219                 new_type = (new_type == SVt_NV)
1220                     ? SVt_PVNV : SVt_PVIV;
1221             }
1222         }
1223         break;
1224     case SVt_NV:
1225         if (new_type < SVt_PVNV) {
1226             new_type = SVt_PVNV;
1227         }
1228         break;
1229     case SVt_PV:
1230         assert(new_type > SVt_PV);
1231         assert(SVt_IV < SVt_PV);
1232         assert(SVt_NV < SVt_PV);
1233         break;
1234     case SVt_PVIV:
1235         break;
1236     case SVt_PVNV:
1237         break;
1238     case SVt_PVMG:
1239         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1240            there's no way that it can be safely upgraded, because perl.c
1241            expects to Safefree(SvANY(PL_mess_sv))  */
1242         assert(sv != PL_mess_sv);
1243         /* This flag bit is used to mean other things in other scalar types.
1244            Given that it only has meaning inside the pad, it shouldn't be set
1245            on anything that can get upgraded.  */
1246         assert(!SvPAD_TYPED(sv));
1247         break;
1248     default:
1249         if (old_type_details->cant_upgrade)
1250             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1251                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1252     }
1253
1254     if (old_type > new_type)
1255         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1256                 (int)old_type, (int)new_type);
1257
1258     new_type_details = bodies_by_type + new_type;
1259
1260     SvFLAGS(sv) &= ~SVTYPEMASK;
1261     SvFLAGS(sv) |= new_type;
1262
1263     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1264        the return statements above will have triggered.  */
1265     assert (new_type != SVt_NULL);
1266     switch (new_type) {
1267     case SVt_IV:
1268         assert(old_type == SVt_NULL);
1269         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1270         SvIV_set(sv, 0);
1271         return;
1272     case SVt_NV:
1273         assert(old_type == SVt_NULL);
1274         SvANY(sv) = new_XNV();
1275         SvNV_set(sv, 0);
1276         return;
1277     case SVt_PVHV:
1278     case SVt_PVAV:
1279         assert(new_type_details->body_size);
1280
1281 #ifndef PURIFY  
1282         assert(new_type_details->arena);
1283         assert(new_type_details->arena_size);
1284         /* This points to the start of the allocated area.  */
1285         new_body_inline(new_body, new_type);
1286         Zero(new_body, new_type_details->body_size, char);
1287         new_body = ((char *)new_body) - new_type_details->offset;
1288 #else
1289         /* We always allocated the full length item with PURIFY. To do this
1290            we fake things so that arena is false for all 16 types..  */
1291         new_body = new_NOARENAZ(new_type_details);
1292 #endif
1293         SvANY(sv) = new_body;
1294         if (new_type == SVt_PVAV) {
1295             AvMAX(sv)   = -1;
1296             AvFILLp(sv) = -1;
1297             AvREAL_only(sv);
1298             if (old_type_details->body_size) {
1299                 AvALLOC(sv) = 0;
1300             } else {
1301                 /* It will have been zeroed when the new body was allocated.
1302                    Lets not write to it, in case it confuses a write-back
1303                    cache.  */
1304             }
1305         } else {
1306             assert(!SvOK(sv));
1307             SvOK_off(sv);
1308 #ifndef NODEFAULT_SHAREKEYS
1309             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1310 #endif
1311             HvMAX(sv) = 7; /* (start with 8 buckets) */
1312         }
1313
1314         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1315            The target created by newSVrv also is, and it can have magic.
1316            However, it never has SvPVX set.
1317         */
1318         if (old_type == SVt_IV) {
1319             assert(!SvROK(sv));
1320         } else if (old_type >= SVt_PV) {
1321             assert(SvPVX_const(sv) == 0);
1322         }
1323
1324         if (old_type >= SVt_PVMG) {
1325             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1326             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1327         } else {
1328             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1329         }
1330         break;
1331
1332
1333     case SVt_REGEXP:
1334         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1335            sv_force_normal_flags(sv) is called.  */
1336         SvFAKE_on(sv);
1337     case SVt_PVIV:
1338         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1339            no route from NV to PVIV, NOK can never be true  */
1340         assert(!SvNOKp(sv));
1341         assert(!SvNOK(sv));
1342     case SVt_PVIO:
1343     case SVt_PVFM:
1344     case SVt_PVGV:
1345     case SVt_PVCV:
1346     case SVt_PVLV:
1347     case SVt_PVMG:
1348     case SVt_PVNV:
1349     case SVt_PV:
1350
1351         assert(new_type_details->body_size);
1352         /* We always allocated the full length item with PURIFY. To do this
1353            we fake things so that arena is false for all 16 types..  */
1354         if(new_type_details->arena) {
1355             /* This points to the start of the allocated area.  */
1356             new_body_inline(new_body, new_type);
1357             Zero(new_body, new_type_details->body_size, char);
1358             new_body = ((char *)new_body) - new_type_details->offset;
1359         } else {
1360             new_body = new_NOARENAZ(new_type_details);
1361         }
1362         SvANY(sv) = new_body;
1363
1364         if (old_type_details->copy) {
1365             /* There is now the potential for an upgrade from something without
1366                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1367             int offset = old_type_details->offset;
1368             int length = old_type_details->copy;
1369
1370             if (new_type_details->offset > old_type_details->offset) {
1371                 const int difference
1372                     = new_type_details->offset - old_type_details->offset;
1373                 offset += difference;
1374                 length -= difference;
1375             }
1376             assert (length >= 0);
1377                 
1378             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1379                  char);
1380         }
1381
1382 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1383         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1384          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1385          * NV slot, but the new one does, then we need to initialise the
1386          * freshly created NV slot with whatever the correct bit pattern is
1387          * for 0.0  */
1388         if (old_type_details->zero_nv && !new_type_details->zero_nv
1389             && !isGV_with_GP(sv))
1390             SvNV_set(sv, 0);
1391 #endif
1392
1393         if (new_type == SVt_PVIO) {
1394             IO * const io = MUTABLE_IO(sv);
1395             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1396
1397             SvOBJECT_on(io);
1398             /* Clear the stashcache because a new IO could overrule a package
1399                name */
1400             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1401             hv_clear(PL_stashcache);
1402
1403             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1404             IoPAGE_LEN(sv) = 60;
1405         }
1406         if (old_type < SVt_PV) {
1407             /* referant will be NULL unless the old type was SVt_IV emulating
1408                SVt_RV */
1409             sv->sv_u.svu_rv = referant;
1410         }
1411         break;
1412     default:
1413         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1414                    (unsigned long)new_type);
1415     }
1416
1417     if (old_type > SVt_IV) {
1418 #ifdef PURIFY
1419         safefree(old_body);
1420 #else
1421         /* Note that there is an assumption that all bodies of types that
1422            can be upgraded came from arenas. Only the more complex non-
1423            upgradable types are allowed to be directly malloc()ed.  */
1424         assert(old_type_details->arena);
1425         del_body((void*)((char*)old_body + old_type_details->offset),
1426                  &PL_body_roots[old_type]);
1427 #endif
1428     }
1429 }
1430
1431 /*
1432 =for apidoc sv_backoff
1433
1434 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1435 wrapper instead.
1436
1437 =cut
1438 */
1439
1440 int
1441 Perl_sv_backoff(pTHX_ register SV *const sv)
1442 {
1443     STRLEN delta;
1444     const char * const s = SvPVX_const(sv);
1445
1446     PERL_ARGS_ASSERT_SV_BACKOFF;
1447     PERL_UNUSED_CONTEXT;
1448
1449     assert(SvOOK(sv));
1450     assert(SvTYPE(sv) != SVt_PVHV);
1451     assert(SvTYPE(sv) != SVt_PVAV);
1452
1453     SvOOK_offset(sv, delta);
1454     
1455     SvLEN_set(sv, SvLEN(sv) + delta);
1456     SvPV_set(sv, SvPVX(sv) - delta);
1457     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1458     SvFLAGS(sv) &= ~SVf_OOK;
1459     return 0;
1460 }
1461
1462 /*
1463 =for apidoc sv_grow
1464
1465 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1466 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1467 Use the C<SvGROW> wrapper instead.
1468
1469 =cut
1470 */
1471
1472 char *
1473 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1474 {
1475     char *s;
1476
1477     PERL_ARGS_ASSERT_SV_GROW;
1478
1479     if (PL_madskills && newlen >= 0x100000) {
1480         PerlIO_printf(Perl_debug_log,
1481                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1482     }
1483 #ifdef HAS_64K_LIMIT
1484     if (newlen >= 0x10000) {
1485         PerlIO_printf(Perl_debug_log,
1486                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1487         my_exit(1);
1488     }
1489 #endif /* HAS_64K_LIMIT */
1490     if (SvROK(sv))
1491         sv_unref(sv);
1492     if (SvTYPE(sv) < SVt_PV) {
1493         sv_upgrade(sv, SVt_PV);
1494         s = SvPVX_mutable(sv);
1495     }
1496     else if (SvOOK(sv)) {       /* pv is offset? */
1497         sv_backoff(sv);
1498         s = SvPVX_mutable(sv);
1499         if (newlen > SvLEN(sv))
1500             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1501 #ifdef HAS_64K_LIMIT
1502         if (newlen >= 0x10000)
1503             newlen = 0xFFFF;
1504 #endif
1505     }
1506     else
1507         s = SvPVX_mutable(sv);
1508
1509     if (newlen > SvLEN(sv)) {           /* need more room? */
1510         STRLEN minlen = SvCUR(sv);
1511         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1512         if (newlen < minlen)
1513             newlen = minlen;
1514 #ifndef Perl_safesysmalloc_size
1515         newlen = PERL_STRLEN_ROUNDUP(newlen);
1516 #endif
1517         if (SvLEN(sv) && s) {
1518             s = (char*)saferealloc(s, newlen);
1519         }
1520         else {
1521             s = (char*)safemalloc(newlen);
1522             if (SvPVX_const(sv) && SvCUR(sv)) {
1523                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1524             }
1525         }
1526         SvPV_set(sv, s);
1527 #ifdef Perl_safesysmalloc_size
1528         /* Do this here, do it once, do it right, and then we will never get
1529            called back into sv_grow() unless there really is some growing
1530            needed.  */
1531         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1532 #else
1533         SvLEN_set(sv, newlen);
1534 #endif
1535     }
1536     return s;
1537 }
1538
1539 /*
1540 =for apidoc sv_setiv
1541
1542 Copies an integer into the given SV, upgrading first if necessary.
1543 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1544
1545 =cut
1546 */
1547
1548 void
1549 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1550 {
1551     dVAR;
1552
1553     PERL_ARGS_ASSERT_SV_SETIV;
1554
1555     SV_CHECK_THINKFIRST_COW_DROP(sv);
1556     switch (SvTYPE(sv)) {
1557     case SVt_NULL:
1558     case SVt_NV:
1559         sv_upgrade(sv, SVt_IV);
1560         break;
1561     case SVt_PV:
1562         sv_upgrade(sv, SVt_PVIV);
1563         break;
1564
1565     case SVt_PVGV:
1566         if (!isGV_with_GP(sv))
1567             break;
1568     case SVt_PVAV:
1569     case SVt_PVHV:
1570     case SVt_PVCV:
1571     case SVt_PVFM:
1572     case SVt_PVIO:
1573         /* diag_listed_as: Can't coerce %s to %s in %s */
1574         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1575                    OP_DESC(PL_op));
1576     default: NOOP;
1577     }
1578     (void)SvIOK_only(sv);                       /* validate number */
1579     SvIV_set(sv, i);
1580     SvTAINT(sv);
1581 }
1582
1583 /*
1584 =for apidoc sv_setiv_mg
1585
1586 Like C<sv_setiv>, but also handles 'set' magic.
1587
1588 =cut
1589 */
1590
1591 void
1592 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1593 {
1594     PERL_ARGS_ASSERT_SV_SETIV_MG;
1595
1596     sv_setiv(sv,i);
1597     SvSETMAGIC(sv);
1598 }
1599
1600 /*
1601 =for apidoc sv_setuv
1602
1603 Copies an unsigned integer into the given SV, upgrading first if necessary.
1604 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1605
1606 =cut
1607 */
1608
1609 void
1610 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1611 {
1612     PERL_ARGS_ASSERT_SV_SETUV;
1613
1614     /* With the if statement to ensure that integers are stored as IVs whenever
1615        possible:
1616        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1617
1618        without
1619        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1620
1621        If you wish to remove the following if statement, so that this routine
1622        (and its callers) always return UVs, please benchmark to see what the
1623        effect is. Modern CPUs may be different. Or may not :-)
1624     */
1625     if (u <= (UV)IV_MAX) {
1626        sv_setiv(sv, (IV)u);
1627        return;
1628     }
1629     sv_setiv(sv, 0);
1630     SvIsUV_on(sv);
1631     SvUV_set(sv, u);
1632 }
1633
1634 /*
1635 =for apidoc sv_setuv_mg
1636
1637 Like C<sv_setuv>, but also handles 'set' magic.
1638
1639 =cut
1640 */
1641
1642 void
1643 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1644 {
1645     PERL_ARGS_ASSERT_SV_SETUV_MG;
1646
1647     sv_setuv(sv,u);
1648     SvSETMAGIC(sv);
1649 }
1650
1651 /*
1652 =for apidoc sv_setnv
1653
1654 Copies a double into the given SV, upgrading first if necessary.
1655 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1656
1657 =cut
1658 */
1659
1660 void
1661 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1662 {
1663     dVAR;
1664
1665     PERL_ARGS_ASSERT_SV_SETNV;
1666
1667     SV_CHECK_THINKFIRST_COW_DROP(sv);
1668     switch (SvTYPE(sv)) {
1669     case SVt_NULL:
1670     case SVt_IV:
1671         sv_upgrade(sv, SVt_NV);
1672         break;
1673     case SVt_PV:
1674     case SVt_PVIV:
1675         sv_upgrade(sv, SVt_PVNV);
1676         break;
1677
1678     case SVt_PVGV:
1679         if (!isGV_with_GP(sv))
1680             break;
1681     case SVt_PVAV:
1682     case SVt_PVHV:
1683     case SVt_PVCV:
1684     case SVt_PVFM:
1685     case SVt_PVIO:
1686         /* diag_listed_as: Can't coerce %s to %s in %s */
1687         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1688                    OP_DESC(PL_op));
1689     default: NOOP;
1690     }
1691     SvNV_set(sv, num);
1692     (void)SvNOK_only(sv);                       /* validate number */
1693     SvTAINT(sv);
1694 }
1695
1696 /*
1697 =for apidoc sv_setnv_mg
1698
1699 Like C<sv_setnv>, but also handles 'set' magic.
1700
1701 =cut
1702 */
1703
1704 void
1705 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1706 {
1707     PERL_ARGS_ASSERT_SV_SETNV_MG;
1708
1709     sv_setnv(sv,num);
1710     SvSETMAGIC(sv);
1711 }
1712
1713 /* Print an "isn't numeric" warning, using a cleaned-up,
1714  * printable version of the offending string
1715  */
1716
1717 STATIC void
1718 S_not_a_number(pTHX_ SV *const sv)
1719 {
1720      dVAR;
1721      SV *dsv;
1722      char tmpbuf[64];
1723      const char *pv;
1724
1725      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1726
1727      if (DO_UTF8(sv)) {
1728           dsv = newSVpvs_flags("", SVs_TEMP);
1729           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1730      } else {
1731           char *d = tmpbuf;
1732           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1733           /* each *s can expand to 4 chars + "...\0",
1734              i.e. need room for 8 chars */
1735         
1736           const char *s = SvPVX_const(sv);
1737           const char * const end = s + SvCUR(sv);
1738           for ( ; s < end && d < limit; s++ ) {
1739                int ch = *s & 0xFF;
1740                if (ch & 128 && !isPRINT_LC(ch)) {
1741                     *d++ = 'M';
1742                     *d++ = '-';
1743                     ch &= 127;
1744                }
1745                if (ch == '\n') {
1746                     *d++ = '\\';
1747                     *d++ = 'n';
1748                }
1749                else if (ch == '\r') {
1750                     *d++ = '\\';
1751                     *d++ = 'r';
1752                }
1753                else if (ch == '\f') {
1754                     *d++ = '\\';
1755                     *d++ = 'f';
1756                }
1757                else if (ch == '\\') {
1758                     *d++ = '\\';
1759                     *d++ = '\\';
1760                }
1761                else if (ch == '\0') {
1762                     *d++ = '\\';
1763                     *d++ = '0';
1764                }
1765                else if (isPRINT_LC(ch))
1766                     *d++ = ch;
1767                else {
1768                     *d++ = '^';
1769                     *d++ = toCTRL(ch);
1770                }
1771           }
1772           if (s < end) {
1773                *d++ = '.';
1774                *d++ = '.';
1775                *d++ = '.';
1776           }
1777           *d = '\0';
1778           pv = tmpbuf;
1779     }
1780
1781     if (PL_op)
1782         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1783                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1784                     "Argument \"%s\" isn't numeric in %s", pv,
1785                     OP_DESC(PL_op));
1786     else
1787         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1788                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1789                     "Argument \"%s\" isn't numeric", pv);
1790 }
1791
1792 /*
1793 =for apidoc looks_like_number
1794
1795 Test if the content of an SV looks like a number (or is a number).
1796 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1797 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1798 ignored.
1799
1800 =cut
1801 */
1802
1803 I32
1804 Perl_looks_like_number(pTHX_ SV *const sv)
1805 {
1806     const char *sbegin;
1807     STRLEN len;
1808
1809     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1810
1811     if (SvPOK(sv) || SvPOKp(sv)) {
1812         sbegin = SvPV_nomg_const(sv, len);
1813     }
1814     else
1815         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1816     return grok_number(sbegin, len, NULL);
1817 }
1818
1819 STATIC bool
1820 S_glob_2number(pTHX_ GV * const gv)
1821 {
1822     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1823
1824     /* We know that all GVs stringify to something that is not-a-number,
1825         so no need to test that.  */
1826     if (ckWARN(WARN_NUMERIC))
1827     {
1828         SV *const buffer = sv_newmortal();
1829         gv_efullname3(buffer, gv, "*");
1830         not_a_number(buffer);
1831     }
1832     /* We just want something true to return, so that S_sv_2iuv_common
1833         can tail call us and return true.  */
1834     return TRUE;
1835 }
1836
1837 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1838    until proven guilty, assume that things are not that bad... */
1839
1840 /*
1841    NV_PRESERVES_UV:
1842
1843    As 64 bit platforms often have an NV that doesn't preserve all bits of
1844    an IV (an assumption perl has been based on to date) it becomes necessary
1845    to remove the assumption that the NV always carries enough precision to
1846    recreate the IV whenever needed, and that the NV is the canonical form.
1847    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1848    precision as a side effect of conversion (which would lead to insanity
1849    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1850    1) to distinguish between IV/UV/NV slots that have cached a valid
1851       conversion where precision was lost and IV/UV/NV slots that have a
1852       valid conversion which has lost no precision
1853    2) to ensure that if a numeric conversion to one form is requested that
1854       would lose precision, the precise conversion (or differently
1855       imprecise conversion) is also performed and cached, to prevent
1856       requests for different numeric formats on the same SV causing
1857       lossy conversion chains. (lossless conversion chains are perfectly
1858       acceptable (still))
1859
1860
1861    flags are used:
1862    SvIOKp is true if the IV slot contains a valid value
1863    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1864    SvNOKp is true if the NV slot contains a valid value
1865    SvNOK  is true only if the NV value is accurate
1866
1867    so
1868    while converting from PV to NV, check to see if converting that NV to an
1869    IV(or UV) would lose accuracy over a direct conversion from PV to
1870    IV(or UV). If it would, cache both conversions, return NV, but mark
1871    SV as IOK NOKp (ie not NOK).
1872
1873    While converting from PV to IV, check to see if converting that IV to an
1874    NV would lose accuracy over a direct conversion from PV to NV. If it
1875    would, cache both conversions, flag similarly.
1876
1877    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1878    correctly because if IV & NV were set NV *always* overruled.
1879    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1880    changes - now IV and NV together means that the two are interchangeable:
1881    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1882
1883    The benefit of this is that operations such as pp_add know that if
1884    SvIOK is true for both left and right operands, then integer addition
1885    can be used instead of floating point (for cases where the result won't
1886    overflow). Before, floating point was always used, which could lead to
1887    loss of precision compared with integer addition.
1888
1889    * making IV and NV equal status should make maths accurate on 64 bit
1890      platforms
1891    * may speed up maths somewhat if pp_add and friends start to use
1892      integers when possible instead of fp. (Hopefully the overhead in
1893      looking for SvIOK and checking for overflow will not outweigh the
1894      fp to integer speedup)
1895    * will slow down integer operations (callers of SvIV) on "inaccurate"
1896      values, as the change from SvIOK to SvIOKp will cause a call into
1897      sv_2iv each time rather than a macro access direct to the IV slot
1898    * should speed up number->string conversion on integers as IV is
1899      favoured when IV and NV are equally accurate
1900
1901    ####################################################################
1902    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1903    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1904    On the other hand, SvUOK is true iff UV.
1905    ####################################################################
1906
1907    Your mileage will vary depending your CPU's relative fp to integer
1908    performance ratio.
1909 */
1910
1911 #ifndef NV_PRESERVES_UV
1912 #  define IS_NUMBER_UNDERFLOW_IV 1
1913 #  define IS_NUMBER_UNDERFLOW_UV 2
1914 #  define IS_NUMBER_IV_AND_UV    2
1915 #  define IS_NUMBER_OVERFLOW_IV  4
1916 #  define IS_NUMBER_OVERFLOW_UV  5
1917
1918 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1919
1920 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1921 STATIC int
1922 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1923 #  ifdef DEBUGGING
1924                        , I32 numtype
1925 #  endif
1926                        )
1927 {
1928     dVAR;
1929
1930     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1931
1932     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));
1933     if (SvNVX(sv) < (NV)IV_MIN) {
1934         (void)SvIOKp_on(sv);
1935         (void)SvNOK_on(sv);
1936         SvIV_set(sv, IV_MIN);
1937         return IS_NUMBER_UNDERFLOW_IV;
1938     }
1939     if (SvNVX(sv) > (NV)UV_MAX) {
1940         (void)SvIOKp_on(sv);
1941         (void)SvNOK_on(sv);
1942         SvIsUV_on(sv);
1943         SvUV_set(sv, UV_MAX);
1944         return IS_NUMBER_OVERFLOW_UV;
1945     }
1946     (void)SvIOKp_on(sv);
1947     (void)SvNOK_on(sv);
1948     /* Can't use strtol etc to convert this string.  (See truth table in
1949        sv_2iv  */
1950     if (SvNVX(sv) <= (UV)IV_MAX) {
1951         SvIV_set(sv, I_V(SvNVX(sv)));
1952         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1953             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1954         } else {
1955             /* Integer is imprecise. NOK, IOKp */
1956         }
1957         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1958     }
1959     SvIsUV_on(sv);
1960     SvUV_set(sv, U_V(SvNVX(sv)));
1961     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1962         if (SvUVX(sv) == UV_MAX) {
1963             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1964                possibly be preserved by NV. Hence, it must be overflow.
1965                NOK, IOKp */
1966             return IS_NUMBER_OVERFLOW_UV;
1967         }
1968         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1969     } else {
1970         /* Integer is imprecise. NOK, IOKp */
1971     }
1972     return IS_NUMBER_OVERFLOW_IV;
1973 }
1974 #endif /* !NV_PRESERVES_UV*/
1975
1976 STATIC bool
1977 S_sv_2iuv_common(pTHX_ SV *const sv)
1978 {
1979     dVAR;
1980
1981     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1982
1983     if (SvNOKp(sv)) {
1984         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1985          * without also getting a cached IV/UV from it at the same time
1986          * (ie PV->NV conversion should detect loss of accuracy and cache
1987          * IV or UV at same time to avoid this. */
1988         /* IV-over-UV optimisation - choose to cache IV if possible */
1989
1990         if (SvTYPE(sv) == SVt_NV)
1991             sv_upgrade(sv, SVt_PVNV);
1992
1993         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1994         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1995            certainly cast into the IV range at IV_MAX, whereas the correct
1996            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1997            cases go to UV */
1998 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1999         if (Perl_isnan(SvNVX(sv))) {
2000             SvUV_set(sv, 0);
2001             SvIsUV_on(sv);
2002             return FALSE;
2003         }
2004 #endif
2005         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2006             SvIV_set(sv, I_V(SvNVX(sv)));
2007             if (SvNVX(sv) == (NV) SvIVX(sv)
2008 #ifndef NV_PRESERVES_UV
2009                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2010                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2011                 /* Don't flag it as "accurately an integer" if the number
2012                    came from a (by definition imprecise) NV operation, and
2013                    we're outside the range of NV integer precision */
2014 #endif
2015                 ) {
2016                 if (SvNOK(sv))
2017                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2018                 else {
2019                     /* scalar has trailing garbage, eg "42a" */
2020                 }
2021                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2022                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2023                                       PTR2UV(sv),
2024                                       SvNVX(sv),
2025                                       SvIVX(sv)));
2026
2027             } else {
2028                 /* IV not precise.  No need to convert from PV, as NV
2029                    conversion would already have cached IV if it detected
2030                    that PV->IV would be better than PV->NV->IV
2031                    flags already correct - don't set public IOK.  */
2032                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2033                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2034                                       PTR2UV(sv),
2035                                       SvNVX(sv),
2036                                       SvIVX(sv)));
2037             }
2038             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2039                but the cast (NV)IV_MIN rounds to a the value less (more
2040                negative) than IV_MIN which happens to be equal to SvNVX ??
2041                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2042                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2043                (NV)UVX == NVX are both true, but the values differ. :-(
2044                Hopefully for 2s complement IV_MIN is something like
2045                0x8000000000000000 which will be exact. NWC */
2046         }
2047         else {
2048             SvUV_set(sv, U_V(SvNVX(sv)));
2049             if (
2050                 (SvNVX(sv) == (NV) SvUVX(sv))
2051 #ifndef  NV_PRESERVES_UV
2052                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2053                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2054                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2055                 /* Don't flag it as "accurately an integer" if the number
2056                    came from a (by definition imprecise) NV operation, and
2057                    we're outside the range of NV integer precision */
2058 #endif
2059                 && SvNOK(sv)
2060                 )
2061                 SvIOK_on(sv);
2062             SvIsUV_on(sv);
2063             DEBUG_c(PerlIO_printf(Perl_debug_log,
2064                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2065                                   PTR2UV(sv),
2066                                   SvUVX(sv),
2067                                   SvUVX(sv)));
2068         }
2069     }
2070     else if (SvPOKp(sv) && SvLEN(sv)) {
2071         UV value;
2072         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2073         /* We want to avoid a possible problem when we cache an IV/ a UV which
2074            may be later translated to an NV, and the resulting NV is not
2075            the same as the direct translation of the initial string
2076            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2077            be careful to ensure that the value with the .456 is around if the
2078            NV value is requested in the future).
2079         
2080            This means that if we cache such an IV/a UV, we need to cache the
2081            NV as well.  Moreover, we trade speed for space, and do not
2082            cache the NV if we are sure it's not needed.
2083          */
2084
2085         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2086         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2087              == IS_NUMBER_IN_UV) {
2088             /* It's definitely an integer, only upgrade to PVIV */
2089             if (SvTYPE(sv) < SVt_PVIV)
2090                 sv_upgrade(sv, SVt_PVIV);
2091             (void)SvIOK_on(sv);
2092         } else if (SvTYPE(sv) < SVt_PVNV)
2093             sv_upgrade(sv, SVt_PVNV);
2094
2095         /* If NVs preserve UVs then we only use the UV value if we know that
2096            we aren't going to call atof() below. If NVs don't preserve UVs
2097            then the value returned may have more precision than atof() will
2098            return, even though value isn't perfectly accurate.  */
2099         if ((numtype & (IS_NUMBER_IN_UV
2100 #ifdef NV_PRESERVES_UV
2101                         | IS_NUMBER_NOT_INT
2102 #endif
2103             )) == IS_NUMBER_IN_UV) {
2104             /* This won't turn off the public IOK flag if it was set above  */
2105             (void)SvIOKp_on(sv);
2106
2107             if (!(numtype & IS_NUMBER_NEG)) {
2108                 /* positive */;
2109                 if (value <= (UV)IV_MAX) {
2110                     SvIV_set(sv, (IV)value);
2111                 } else {
2112                     /* it didn't overflow, and it was positive. */
2113                     SvUV_set(sv, value);
2114                     SvIsUV_on(sv);
2115                 }
2116             } else {
2117                 /* 2s complement assumption  */
2118                 if (value <= (UV)IV_MIN) {
2119                     SvIV_set(sv, -(IV)value);
2120                 } else {
2121                     /* Too negative for an IV.  This is a double upgrade, but
2122                        I'm assuming it will be rare.  */
2123                     if (SvTYPE(sv) < SVt_PVNV)
2124                         sv_upgrade(sv, SVt_PVNV);
2125                     SvNOK_on(sv);
2126                     SvIOK_off(sv);
2127                     SvIOKp_on(sv);
2128                     SvNV_set(sv, -(NV)value);
2129                     SvIV_set(sv, IV_MIN);
2130                 }
2131             }
2132         }
2133         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2134            will be in the previous block to set the IV slot, and the next
2135            block to set the NV slot.  So no else here.  */
2136         
2137         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2138             != IS_NUMBER_IN_UV) {
2139             /* It wasn't an (integer that doesn't overflow the UV). */
2140             SvNV_set(sv, Atof(SvPVX_const(sv)));
2141
2142             if (! numtype && ckWARN(WARN_NUMERIC))
2143                 not_a_number(sv);
2144
2145 #if defined(USE_LONG_DOUBLE)
2146             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2147                                   PTR2UV(sv), SvNVX(sv)));
2148 #else
2149             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2150                                   PTR2UV(sv), SvNVX(sv)));
2151 #endif
2152
2153 #ifdef NV_PRESERVES_UV
2154             (void)SvIOKp_on(sv);
2155             (void)SvNOK_on(sv);
2156             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2157                 SvIV_set(sv, I_V(SvNVX(sv)));
2158                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2159                     SvIOK_on(sv);
2160                 } else {
2161                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2162                 }
2163                 /* UV will not work better than IV */
2164             } else {
2165                 if (SvNVX(sv) > (NV)UV_MAX) {
2166                     SvIsUV_on(sv);
2167                     /* Integer is inaccurate. NOK, IOKp, is UV */
2168                     SvUV_set(sv, UV_MAX);
2169                 } else {
2170                     SvUV_set(sv, U_V(SvNVX(sv)));
2171                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2172                        NV preservse UV so can do correct comparison.  */
2173                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2174                         SvIOK_on(sv);
2175                     } else {
2176                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2177                     }
2178                 }
2179                 SvIsUV_on(sv);
2180             }
2181 #else /* NV_PRESERVES_UV */
2182             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2183                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2184                 /* The IV/UV slot will have been set from value returned by
2185                    grok_number above.  The NV slot has just been set using
2186                    Atof.  */
2187                 SvNOK_on(sv);
2188                 assert (SvIOKp(sv));
2189             } else {
2190                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2191                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2192                     /* Small enough to preserve all bits. */
2193                     (void)SvIOKp_on(sv);
2194                     SvNOK_on(sv);
2195                     SvIV_set(sv, I_V(SvNVX(sv)));
2196                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2197                         SvIOK_on(sv);
2198                     /* Assumption: first non-preserved integer is < IV_MAX,
2199                        this NV is in the preserved range, therefore: */
2200                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2201                           < (UV)IV_MAX)) {
2202                         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);
2203                     }
2204                 } else {
2205                     /* IN_UV NOT_INT
2206                          0      0       already failed to read UV.
2207                          0      1       already failed to read UV.
2208                          1      0       you won't get here in this case. IV/UV
2209                                         slot set, public IOK, Atof() unneeded.
2210                          1      1       already read UV.
2211                        so there's no point in sv_2iuv_non_preserve() attempting
2212                        to use atol, strtol, strtoul etc.  */
2213 #  ifdef DEBUGGING
2214                     sv_2iuv_non_preserve (sv, numtype);
2215 #  else
2216                     sv_2iuv_non_preserve (sv);
2217 #  endif
2218                 }
2219             }
2220 #endif /* NV_PRESERVES_UV */
2221         /* It might be more code efficient to go through the entire logic above
2222            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2223            gets complex and potentially buggy, so more programmer efficient
2224            to do it this way, by turning off the public flags:  */
2225         if (!numtype)
2226             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2227         }
2228     }
2229     else  {
2230         if (isGV_with_GP(sv))
2231             return glob_2number(MUTABLE_GV(sv));
2232
2233         if (!SvPADTMP(sv)) {
2234             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2235                 report_uninit(sv);
2236         }
2237         if (SvTYPE(sv) < SVt_IV)
2238             /* Typically the caller expects that sv_any is not NULL now.  */
2239             sv_upgrade(sv, SVt_IV);
2240         /* Return 0 from the caller.  */
2241         return TRUE;
2242     }
2243     return FALSE;
2244 }
2245
2246 /*
2247 =for apidoc sv_2iv_flags
2248
2249 Return the integer value of an SV, doing any necessary string
2250 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2251 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2252
2253 =cut
2254 */
2255
2256 IV
2257 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2258 {
2259     dVAR;
2260
2261     if (!sv)
2262         return 0;
2263
2264     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2265         mg_get(sv);
2266
2267     if (SvROK(sv)) {
2268         if (SvAMAGIC(sv)) {
2269             SV * tmpstr;
2270             if (flags & SV_SKIP_OVERLOAD)
2271                 return 0;
2272             tmpstr = AMG_CALLunary(sv, numer_amg);
2273             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2274                 return SvIV(tmpstr);
2275             }
2276         }
2277         return PTR2IV(SvRV(sv));
2278     }
2279
2280     if (SvVALID(sv)) {
2281         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2282            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2283            In practice they are extremely unlikely to actually get anywhere
2284            accessible by user Perl code - the only way that I'm aware of is when
2285            a constant subroutine which is used as the second argument to index.
2286         */
2287         if (SvIOKp(sv))
2288             return SvIVX(sv);
2289         if (SvNOKp(sv))
2290             return I_V(SvNVX(sv));
2291         if (SvPOKp(sv) && SvLEN(sv)) {
2292             UV value;
2293             const int numtype
2294                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2295
2296             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2297                 == IS_NUMBER_IN_UV) {
2298                 /* It's definitely an integer */
2299                 if (numtype & IS_NUMBER_NEG) {
2300                     if (value < (UV)IV_MIN)
2301                         return -(IV)value;
2302                 } else {
2303                     if (value < (UV)IV_MAX)
2304                         return (IV)value;
2305                 }
2306             }
2307             if (!numtype) {
2308                 if (ckWARN(WARN_NUMERIC))
2309                     not_a_number(sv);
2310             }
2311             return I_V(Atof(SvPVX_const(sv)));
2312         }
2313         if (ckWARN(WARN_UNINITIALIZED))
2314             report_uninit(sv);
2315         return 0;
2316     }
2317
2318     if (SvTHINKFIRST(sv)) {
2319         if (SvIsCOW(sv)) {
2320             sv_force_normal_flags(sv, 0);
2321         }
2322         if (SvREADONLY(sv) && !SvOK(sv)) {
2323             if (ckWARN(WARN_UNINITIALIZED))
2324                 report_uninit(sv);
2325             return 0;
2326         }
2327     }
2328
2329     if (!SvIOKp(sv)) {
2330         if (S_sv_2iuv_common(aTHX_ sv))
2331             return 0;
2332     }
2333
2334     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2335         PTR2UV(sv),SvIVX(sv)));
2336     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2337 }
2338
2339 /*
2340 =for apidoc sv_2uv_flags
2341
2342 Return the unsigned integer value of an SV, doing any necessary string
2343 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2344 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2345
2346 =cut
2347 */
2348
2349 UV
2350 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2351 {
2352     dVAR;
2353
2354     if (!sv)
2355         return 0;
2356
2357     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2358         mg_get(sv);
2359
2360     if (SvROK(sv)) {
2361         if (SvAMAGIC(sv)) {
2362             SV *tmpstr;
2363             if (flags & SV_SKIP_OVERLOAD)
2364                 return 0;
2365             tmpstr = AMG_CALLunary(sv, numer_amg);
2366             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2367                 return SvUV(tmpstr);
2368             }
2369         }
2370         return PTR2UV(SvRV(sv));
2371     }
2372
2373     if (SvVALID(sv)) {
2374         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2375            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  */
2376         if (SvIOKp(sv))
2377             return SvUVX(sv);
2378         if (SvNOKp(sv))
2379             return U_V(SvNVX(sv));
2380         if (SvPOKp(sv) && SvLEN(sv)) {
2381             UV value;
2382             const int numtype
2383                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2384
2385             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2386                 == IS_NUMBER_IN_UV) {
2387                 /* It's definitely an integer */
2388                 if (!(numtype & IS_NUMBER_NEG))
2389                     return value;
2390             }
2391             if (!numtype) {
2392                 if (ckWARN(WARN_NUMERIC))
2393                     not_a_number(sv);
2394             }
2395             return U_V(Atof(SvPVX_const(sv)));
2396         }
2397         if (ckWARN(WARN_UNINITIALIZED))
2398             report_uninit(sv);
2399         return 0;
2400     }
2401
2402     if (SvTHINKFIRST(sv)) {
2403         if (SvIsCOW(sv)) {
2404             sv_force_normal_flags(sv, 0);
2405         }
2406         if (SvREADONLY(sv) && !SvOK(sv)) {
2407             if (ckWARN(WARN_UNINITIALIZED))
2408                 report_uninit(sv);
2409             return 0;
2410         }
2411     }
2412
2413     if (!SvIOKp(sv)) {
2414         if (S_sv_2iuv_common(aTHX_ sv))
2415             return 0;
2416     }
2417
2418     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2419                           PTR2UV(sv),SvUVX(sv)));
2420     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2421 }
2422
2423 /*
2424 =for apidoc sv_2nv_flags
2425
2426 Return the num value of an SV, doing any necessary string or integer
2427 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2428 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2429
2430 =cut
2431 */
2432
2433 NV
2434 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2435 {
2436     dVAR;
2437     if (!sv)
2438         return 0.0;
2439     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2440         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2441            the same flag bit as SVf_IVisUV, so must not let them cache NVs.  */
2442         if (flags & SV_GMAGIC)
2443             mg_get(sv);
2444         if (SvNOKp(sv))
2445             return SvNVX(sv);
2446         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2447             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2448                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2449                 not_a_number(sv);
2450             return Atof(SvPVX_const(sv));
2451         }
2452         if (SvIOKp(sv)) {
2453             if (SvIsUV(sv))
2454                 return (NV)SvUVX(sv);
2455             else
2456                 return (NV)SvIVX(sv);
2457         }
2458         if (SvROK(sv)) {
2459             goto return_rok;
2460         }
2461         assert(SvTYPE(sv) >= SVt_PVMG);
2462         /* This falls through to the report_uninit near the end of the
2463            function. */
2464     } else if (SvTHINKFIRST(sv)) {
2465         if (SvROK(sv)) {
2466         return_rok:
2467             if (SvAMAGIC(sv)) {
2468                 SV *tmpstr;
2469                 if (flags & SV_SKIP_OVERLOAD)
2470                     return 0;
2471                 tmpstr = AMG_CALLunary(sv, numer_amg);
2472                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2473                     return SvNV(tmpstr);
2474                 }
2475             }
2476             return PTR2NV(SvRV(sv));
2477         }
2478         if (SvIsCOW(sv)) {
2479             sv_force_normal_flags(sv, 0);
2480         }
2481         if (SvREADONLY(sv) && !SvOK(sv)) {
2482             if (ckWARN(WARN_UNINITIALIZED))
2483                 report_uninit(sv);
2484             return 0.0;
2485         }
2486     }
2487     if (SvTYPE(sv) < SVt_NV) {
2488         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2489         sv_upgrade(sv, SVt_NV);
2490 #ifdef USE_LONG_DOUBLE
2491         DEBUG_c({
2492             STORE_NUMERIC_LOCAL_SET_STANDARD();
2493             PerlIO_printf(Perl_debug_log,
2494                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2495                           PTR2UV(sv), SvNVX(sv));
2496             RESTORE_NUMERIC_LOCAL();
2497         });
2498 #else
2499         DEBUG_c({
2500             STORE_NUMERIC_LOCAL_SET_STANDARD();
2501             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2502                           PTR2UV(sv), SvNVX(sv));
2503             RESTORE_NUMERIC_LOCAL();
2504         });
2505 #endif
2506     }
2507     else if (SvTYPE(sv) < SVt_PVNV)
2508         sv_upgrade(sv, SVt_PVNV);
2509     if (SvNOKp(sv)) {
2510         return SvNVX(sv);
2511     }
2512     if (SvIOKp(sv)) {
2513         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2514 #ifdef NV_PRESERVES_UV
2515         if (SvIOK(sv))
2516             SvNOK_on(sv);
2517         else
2518             SvNOKp_on(sv);
2519 #else
2520         /* Only set the public NV OK flag if this NV preserves the IV  */
2521         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2522         if (SvIOK(sv) &&
2523             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2524                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2525             SvNOK_on(sv);
2526         else
2527             SvNOKp_on(sv);
2528 #endif
2529     }
2530     else if (SvPOKp(sv) && SvLEN(sv)) {
2531         UV value;
2532         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2533         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2534             not_a_number(sv);
2535 #ifdef NV_PRESERVES_UV
2536         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2537             == IS_NUMBER_IN_UV) {
2538             /* It's definitely an integer */
2539             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2540         } else
2541             SvNV_set(sv, Atof(SvPVX_const(sv)));
2542         if (numtype)
2543             SvNOK_on(sv);
2544         else
2545             SvNOKp_on(sv);
2546 #else
2547         SvNV_set(sv, Atof(SvPVX_const(sv)));
2548         /* Only set the public NV OK flag if this NV preserves the value in
2549            the PV at least as well as an IV/UV would.
2550            Not sure how to do this 100% reliably. */
2551         /* if that shift count is out of range then Configure's test is
2552            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2553            UV_BITS */
2554         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2555             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2556             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2557         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2558             /* Can't use strtol etc to convert this string, so don't try.
2559                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2560             SvNOK_on(sv);
2561         } else {
2562             /* value has been set.  It may not be precise.  */
2563             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2564                 /* 2s complement assumption for (UV)IV_MIN  */
2565                 SvNOK_on(sv); /* Integer is too negative.  */
2566             } else {
2567                 SvNOKp_on(sv);
2568                 SvIOKp_on(sv);
2569
2570                 if (numtype & IS_NUMBER_NEG) {
2571                     SvIV_set(sv, -(IV)value);
2572                 } else if (value <= (UV)IV_MAX) {
2573                     SvIV_set(sv, (IV)value);
2574                 } else {
2575                     SvUV_set(sv, value);
2576                     SvIsUV_on(sv);
2577                 }
2578
2579                 if (numtype & IS_NUMBER_NOT_INT) {
2580                     /* I believe that even if the original PV had decimals,
2581                        they are lost beyond the limit of the FP precision.
2582                        However, neither is canonical, so both only get p
2583                        flags.  NWC, 2000/11/25 */
2584                     /* Both already have p flags, so do nothing */
2585                 } else {
2586                     const NV nv = SvNVX(sv);
2587                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2588                         if (SvIVX(sv) == I_V(nv)) {
2589                             SvNOK_on(sv);
2590                         } else {
2591                             /* It had no "." so it must be integer.  */
2592                         }
2593                         SvIOK_on(sv);
2594                     } else {
2595                         /* between IV_MAX and NV(UV_MAX).
2596                            Could be slightly > UV_MAX */
2597
2598                         if (numtype & IS_NUMBER_NOT_INT) {
2599                             /* UV and NV both imprecise.  */
2600                         } else {
2601                             const UV nv_as_uv = U_V(nv);
2602
2603                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2604                                 SvNOK_on(sv);
2605                             }
2606                             SvIOK_on(sv);
2607                         }
2608                     }
2609                 }
2610             }
2611         }
2612         /* It might be more code efficient to go through the entire logic above
2613            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2614            gets complex and potentially buggy, so more programmer efficient
2615            to do it this way, by turning off the public flags:  */
2616         if (!numtype)
2617             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2618 #endif /* NV_PRESERVES_UV */
2619     }
2620     else  {
2621         if (isGV_with_GP(sv)) {
2622             glob_2number(MUTABLE_GV(sv));
2623             return 0.0;
2624         }
2625
2626         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2627             report_uninit(sv);
2628         assert (SvTYPE(sv) >= SVt_NV);
2629         /* Typically the caller expects that sv_any is not NULL now.  */
2630         /* XXX Ilya implies that this is a bug in callers that assume this
2631            and ideally should be fixed.  */
2632         return 0.0;
2633     }
2634 #if defined(USE_LONG_DOUBLE)
2635     DEBUG_c({
2636         STORE_NUMERIC_LOCAL_SET_STANDARD();
2637         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2638                       PTR2UV(sv), SvNVX(sv));
2639         RESTORE_NUMERIC_LOCAL();
2640     });
2641 #else
2642     DEBUG_c({
2643         STORE_NUMERIC_LOCAL_SET_STANDARD();
2644         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2645                       PTR2UV(sv), SvNVX(sv));
2646         RESTORE_NUMERIC_LOCAL();
2647     });
2648 #endif
2649     return SvNVX(sv);
2650 }
2651
2652 /*
2653 =for apidoc sv_2num
2654
2655 Return an SV with the numeric value of the source SV, doing any necessary
2656 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2657 access this function.
2658
2659 =cut
2660 */
2661
2662 SV *
2663 Perl_sv_2num(pTHX_ register SV *const sv)
2664 {
2665     PERL_ARGS_ASSERT_SV_2NUM;
2666
2667     if (!SvROK(sv))
2668         return sv;
2669     if (SvAMAGIC(sv)) {
2670         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2671         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2672         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2673             return sv_2num(tmpsv);
2674     }
2675     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2676 }
2677
2678 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2679  * UV as a string towards the end of buf, and return pointers to start and
2680  * end of it.
2681  *
2682  * We assume that buf is at least TYPE_CHARS(UV) long.
2683  */
2684
2685 static char *
2686 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2687 {
2688     char *ptr = buf + TYPE_CHARS(UV);
2689     char * const ebuf = ptr;
2690     int sign;
2691
2692     PERL_ARGS_ASSERT_UIV_2BUF;
2693
2694     if (is_uv)
2695         sign = 0;
2696     else if (iv >= 0) {
2697         uv = iv;
2698         sign = 0;
2699     } else {
2700         uv = -iv;
2701         sign = 1;
2702     }
2703     do {
2704         *--ptr = '0' + (char)(uv % 10);
2705     } while (uv /= 10);
2706     if (sign)
2707         *--ptr = '-';
2708     *peob = ebuf;
2709     return ptr;
2710 }
2711
2712 /*
2713 =for apidoc sv_2pv_flags
2714
2715 Returns a pointer to the string value of an SV, and sets *lp to its length.
2716 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2717 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2718 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2719
2720 =cut
2721 */
2722
2723 char *
2724 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2725 {
2726     dVAR;
2727     char *s;
2728
2729     if (!sv) {
2730         if (lp)
2731             *lp = 0;
2732         return (char *)"";
2733     }
2734     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2735         mg_get(sv);
2736     if (SvROK(sv)) {
2737         if (SvAMAGIC(sv)) {
2738             SV *tmpstr;
2739             if (flags & SV_SKIP_OVERLOAD)
2740                 return NULL;
2741             tmpstr = AMG_CALLunary(sv, string_amg);
2742             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2743             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2744                 /* Unwrap this:  */
2745                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2746                  */
2747
2748                 char *pv;
2749                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2750                     if (flags & SV_CONST_RETURN) {
2751                         pv = (char *) SvPVX_const(tmpstr);
2752                     } else {
2753                         pv = (flags & SV_MUTABLE_RETURN)
2754                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2755                     }
2756                     if (lp)
2757                         *lp = SvCUR(tmpstr);
2758                 } else {
2759                     pv = sv_2pv_flags(tmpstr, lp, flags);
2760                 }
2761                 if (SvUTF8(tmpstr))
2762                     SvUTF8_on(sv);
2763                 else
2764                     SvUTF8_off(sv);
2765                 return pv;
2766             }
2767         }
2768         {
2769             STRLEN len;
2770             char *retval;
2771             char *buffer;
2772             SV *const referent = SvRV(sv);
2773
2774             if (!referent) {
2775                 len = 7;
2776                 retval = buffer = savepvn("NULLREF", len);
2777             } else if (SvTYPE(referent) == SVt_REGEXP &&
2778                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2779                         amagic_is_enabled(string_amg))) {
2780                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2781
2782                 assert(re);
2783                         
2784                 /* If the regex is UTF-8 we want the containing scalar to
2785                    have an UTF-8 flag too */
2786                 if (RX_UTF8(re))
2787                     SvUTF8_on(sv);
2788                 else
2789                     SvUTF8_off(sv);     
2790
2791                 if (lp)
2792                     *lp = RX_WRAPLEN(re);
2793  
2794                 return RX_WRAPPED(re);
2795             } else {
2796                 const char *const typestr = sv_reftype(referent, 0);
2797                 const STRLEN typelen = strlen(typestr);
2798                 UV addr = PTR2UV(referent);
2799                 const char *stashname = NULL;
2800                 STRLEN stashnamelen = 0; /* hush, gcc */
2801                 const char *buffer_end;
2802
2803                 if (SvOBJECT(referent)) {
2804                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2805
2806                     if (name) {
2807                         stashname = HEK_KEY(name);
2808                         stashnamelen = HEK_LEN(name);
2809
2810                         if (HEK_UTF8(name)) {
2811                             SvUTF8_on(sv);
2812                         } else {
2813                             SvUTF8_off(sv);
2814                         }
2815                     } else {
2816                         stashname = "__ANON__";
2817                         stashnamelen = 8;
2818                     }
2819                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2820                         + 2 * sizeof(UV) + 2 /* )\0 */;
2821                 } else {
2822                     len = typelen + 3 /* (0x */
2823                         + 2 * sizeof(UV) + 2 /* )\0 */;
2824                 }
2825
2826                 Newx(buffer, len, char);
2827                 buffer_end = retval = buffer + len;
2828
2829                 /* Working backwards  */
2830                 *--retval = '\0';
2831                 *--retval = ')';
2832                 do {
2833                     *--retval = PL_hexdigit[addr & 15];
2834                 } while (addr >>= 4);
2835                 *--retval = 'x';
2836                 *--retval = '0';
2837                 *--retval = '(';
2838
2839                 retval -= typelen;
2840                 memcpy(retval, typestr, typelen);
2841
2842                 if (stashname) {
2843                     *--retval = '=';
2844                     retval -= stashnamelen;
2845                     memcpy(retval, stashname, stashnamelen);
2846                 }
2847                 /* retval may not necessarily have reached the start of the
2848                    buffer here.  */
2849                 assert (retval >= buffer);
2850
2851                 len = buffer_end - retval - 1; /* -1 for that \0  */
2852             }
2853             if (lp)
2854                 *lp = len;
2855             SAVEFREEPV(buffer);
2856             return retval;
2857         }
2858     }
2859
2860     if (SvPOKp(sv)) {
2861         if (lp)
2862             *lp = SvCUR(sv);
2863         if (flags & SV_MUTABLE_RETURN)
2864             return SvPVX_mutable(sv);
2865         if (flags & SV_CONST_RETURN)
2866             return (char *)SvPVX_const(sv);
2867         return SvPVX(sv);
2868     }
2869
2870     if (SvIOK(sv)) {
2871         /* I'm assuming that if both IV and NV are equally valid then
2872            converting the IV is going to be more efficient */
2873         const U32 isUIOK = SvIsUV(sv);
2874         char buf[TYPE_CHARS(UV)];
2875         char *ebuf, *ptr;
2876         STRLEN len;
2877
2878         if (SvTYPE(sv) < SVt_PVIV)
2879             sv_upgrade(sv, SVt_PVIV);
2880         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2881         len = ebuf - ptr;
2882         /* inlined from sv_setpvn */
2883         s = SvGROW_mutable(sv, len + 1);
2884         Move(ptr, s, len, char);
2885         s += len;
2886         *s = '\0';
2887     }
2888     else if (SvNOK(sv)) {
2889         if (SvTYPE(sv) < SVt_PVNV)
2890             sv_upgrade(sv, SVt_PVNV);
2891         if (SvNVX(sv) == 0.0) {
2892             s = SvGROW_mutable(sv, 2);
2893             *s++ = '0';
2894             *s = '\0';
2895         } else {
2896             dSAVE_ERRNO;
2897             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2898             s = SvGROW_mutable(sv, NV_DIG + 20);
2899             /* some Xenix systems wipe out errno here */
2900             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2901             RESTORE_ERRNO;
2902             while (*s) s++;
2903         }
2904 #ifdef hcx
2905         if (s[-1] == '.')
2906             *--s = '\0';
2907 #endif
2908     }
2909     else if (isGV_with_GP(sv)) {
2910         GV *const gv = MUTABLE_GV(sv);
2911         SV *const buffer = sv_newmortal();
2912
2913         gv_efullname3(buffer, gv, "*");
2914
2915         assert(SvPOK(buffer));
2916         if (SvUTF8(buffer))
2917             SvUTF8_on(sv);
2918         if (lp)
2919             *lp = SvCUR(buffer);
2920         return SvPVX(buffer);
2921     }
2922     else {
2923         if (lp)
2924             *lp = 0;
2925         if (flags & SV_UNDEF_RETURNS_NULL)
2926             return NULL;
2927         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2928             report_uninit(sv);
2929         /* Typically the caller expects that sv_any is not NULL now.  */
2930         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
2931             sv_upgrade(sv, SVt_PV);
2932         return (char *)"";
2933     }
2934
2935     {
2936         const STRLEN len = s - SvPVX_const(sv);
2937         if (lp) 
2938             *lp = len;
2939         SvCUR_set(sv, len);
2940     }
2941     SvPOK_on(sv);
2942     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2943                           PTR2UV(sv),SvPVX_const(sv)));
2944     if (flags & SV_CONST_RETURN)
2945         return (char *)SvPVX_const(sv);
2946     if (flags & SV_MUTABLE_RETURN)
2947         return SvPVX_mutable(sv);
2948     return SvPVX(sv);
2949 }
2950
2951 /*
2952 =for apidoc sv_copypv
2953
2954 Copies a stringified representation of the source SV into the
2955 destination SV.  Automatically performs any necessary mg_get and
2956 coercion of numeric values into strings.  Guaranteed to preserve
2957 UTF8 flag even from overloaded objects.  Similar in nature to
2958 sv_2pv[_flags] but operates directly on an SV instead of just the
2959 string.  Mostly uses sv_2pv_flags to do its work, except when that
2960 would lose the UTF-8'ness of the PV.
2961
2962 =for apidoc sv_copypv_nomg
2963
2964 Like sv_copypv, but doesn't invoke get magic first.
2965
2966 =for apidoc sv_copypv_flags
2967
2968 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
2969 include SV_GMAGIC.
2970
2971 =cut
2972 */
2973
2974 void
2975 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
2976 {
2977     PERL_ARGS_ASSERT_SV_COPYPV;
2978
2979     sv_copypv_flags(dsv, ssv, 0);
2980 }
2981
2982 void
2983 Perl_sv_copypv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
2984 {
2985     STRLEN len;
2986     const char *s;
2987
2988     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
2989
2990     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
2991         mg_get(ssv);
2992     s = SvPV_nomg_const(ssv,len);
2993     sv_setpvn(dsv,s,len);
2994     if (SvUTF8(ssv))
2995         SvUTF8_on(dsv);
2996     else
2997         SvUTF8_off(dsv);
2998 }
2999
3000 /*
3001 =for apidoc sv_2pvbyte
3002
3003 Return a pointer to the byte-encoded representation of the SV, and set *lp
3004 to its length.  May cause the SV to be downgraded from UTF-8 as a
3005 side-effect.
3006
3007 Usually accessed via the C<SvPVbyte> macro.
3008
3009 =cut
3010 */
3011
3012 char *
3013 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *const lp)
3014 {
3015     PERL_ARGS_ASSERT_SV_2PVBYTE;
3016
3017     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3018      || isGV_with_GP(sv) || SvROK(sv)) {
3019         SV *sv2 = sv_newmortal();
3020         sv_copypv(sv2,sv);
3021         sv = sv2;
3022     }
3023     else SvGETMAGIC(sv);
3024     sv_utf8_downgrade(sv,0);
3025     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3026 }
3027
3028 /*
3029 =for apidoc sv_2pvutf8
3030
3031 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3032 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3033
3034 Usually accessed via the C<SvPVutf8> macro.
3035
3036 =cut
3037 */
3038
3039 char *
3040 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *const lp)
3041 {
3042     PERL_ARGS_ASSERT_SV_2PVUTF8;
3043
3044     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3045      || isGV_with_GP(sv) || SvROK(sv))
3046         sv = sv_mortalcopy(sv);
3047     else
3048         SvGETMAGIC(sv);
3049     sv_utf8_upgrade_nomg(sv);
3050     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3051 }
3052
3053
3054 /*
3055 =for apidoc sv_2bool
3056
3057 This macro is only used by sv_true() or its macro equivalent, and only if
3058 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3059 It calls sv_2bool_flags with the SV_GMAGIC flag.
3060
3061 =for apidoc sv_2bool_flags
3062
3063 This function is only used by sv_true() and friends,  and only if
3064 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3065 contain SV_GMAGIC, then it does an mg_get() first.
3066
3067
3068 =cut
3069 */
3070
3071 bool
3072 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3073 {
3074     dVAR;
3075
3076     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3077
3078     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3079
3080     if (!SvOK(sv))
3081         return 0;
3082     if (SvROK(sv)) {
3083         if (SvAMAGIC(sv)) {
3084             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3085             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3086                 return cBOOL(SvTRUE(tmpsv));
3087         }
3088         return SvRV(sv) != 0;
3089     }
3090     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3091 }
3092
3093 /*
3094 =for apidoc sv_utf8_upgrade
3095
3096 Converts the PV of an SV to its UTF-8-encoded form.
3097 Forces the SV to string form if it is not already.
3098 Will C<mg_get> on C<sv> if appropriate.
3099 Always sets the SvUTF8 flag to avoid future validity checks even
3100 if the whole string is the same in UTF-8 as not.
3101 Returns the number of bytes in the converted string
3102
3103 This is not a general purpose byte encoding to Unicode interface:
3104 use the Encode extension for that.
3105
3106 =for apidoc sv_utf8_upgrade_nomg
3107
3108 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3109
3110 =for apidoc sv_utf8_upgrade_flags
3111
3112 Converts the PV of an SV to its UTF-8-encoded form.
3113 Forces the SV to string form if it is not already.
3114 Always sets the SvUTF8 flag to avoid future validity checks even
3115 if all the bytes are invariant in UTF-8.
3116 If C<flags> has C<SV_GMAGIC> bit set,
3117 will C<mg_get> on C<sv> if appropriate, else not.
3118 Returns the number of bytes in the converted string
3119 C<sv_utf8_upgrade> and
3120 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3121
3122 This is not a general purpose byte encoding to Unicode interface:
3123 use the Encode extension for that.
3124
3125 =cut
3126
3127 The grow version is currently not externally documented.  It adds a parameter,
3128 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3129 have free after it upon return.  This allows the caller to reserve extra space
3130 that it intends to fill, to avoid extra grows.
3131
3132 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3133 which can be used to tell this function to not first check to see if there are
3134 any characters that are different in UTF-8 (variant characters) which would
3135 force it to allocate a new string to sv, but to assume there are.  Typically
3136 this flag is used by a routine that has already parsed the string to find that
3137 there are such characters, and passes this information on so that the work
3138 doesn't have to be repeated.
3139
3140 (One might think that the calling routine could pass in the position of the
3141 first such variant, so it wouldn't have to be found again.  But that is not the
3142 case, because typically when the caller is likely to use this flag, it won't be
3143 calling this routine unless it finds something that won't fit into a byte.
3144 Otherwise it tries to not upgrade and just use bytes.  But some things that
3145 do fit into a byte are variants in utf8, and the caller may not have been
3146 keeping track of these.)
3147
3148 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3149 isn't guaranteed due to having other routines do the work in some input cases,
3150 or if the input is already flagged as being in utf8.
3151
3152 The speed of this could perhaps be improved for many cases if someone wanted to
3153 write a fast function that counts the number of variant characters in a string,
3154 especially if it could return the position of the first one.
3155
3156 */
3157
3158 STRLEN
3159 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3160 {
3161     dVAR;
3162
3163     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3164
3165     if (sv == &PL_sv_undef)
3166         return 0;
3167     if (!SvPOK_nog(sv)) {
3168         STRLEN len = 0;
3169         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3170             (void) sv_2pv_flags(sv,&len, flags);
3171             if (SvUTF8(sv)) {
3172                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3173                 return len;
3174             }
3175         } else {
3176             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3177         }
3178     }
3179
3180     if (SvUTF8(sv)) {
3181         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3182         return SvCUR(sv);
3183     }
3184
3185     if (SvIsCOW(sv)) {
3186         sv_force_normal_flags(sv, 0);
3187     }
3188
3189     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3190         sv_recode_to_utf8(sv, PL_encoding);
3191         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3192         return SvCUR(sv);
3193     }
3194
3195     if (SvCUR(sv) == 0) {
3196         if (extra) SvGROW(sv, extra);
3197     } else { /* Assume Latin-1/EBCDIC */
3198         /* This function could be much more efficient if we
3199          * had a FLAG in SVs to signal if there are any variant
3200          * chars in the PV.  Given that there isn't such a flag
3201          * make the loop as fast as possible (although there are certainly ways
3202          * to speed this up, eg. through vectorization) */
3203         U8 * s = (U8 *) SvPVX_const(sv);
3204         U8 * e = (U8 *) SvEND(sv);
3205         U8 *t = s;
3206         STRLEN two_byte_count = 0;
3207         
3208         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3209
3210         /* See if really will need to convert to utf8.  We mustn't rely on our
3211          * incoming SV being well formed and having a trailing '\0', as certain
3212          * code in pp_formline can send us partially built SVs. */
3213
3214         while (t < e) {
3215             const U8 ch = *t++;
3216             if (NATIVE_IS_INVARIANT(ch)) continue;
3217
3218             t--;    /* t already incremented; re-point to first variant */
3219             two_byte_count = 1;
3220             goto must_be_utf8;
3221         }
3222
3223         /* utf8 conversion not needed because all are invariants.  Mark as
3224          * UTF-8 even if no variant - saves scanning loop */
3225         SvUTF8_on(sv);
3226         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3227         return SvCUR(sv);
3228
3229 must_be_utf8:
3230
3231         /* Here, the string should be converted to utf8, either because of an
3232          * input flag (two_byte_count = 0), or because a character that
3233          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3234          * the beginning of the string (if we didn't examine anything), or to
3235          * the first variant.  In either case, everything from s to t - 1 will
3236          * occupy only 1 byte each on output.
3237          *
3238          * There are two main ways to convert.  One is to create a new string
3239          * and go through the input starting from the beginning, appending each
3240          * converted value onto the new string as we go along.  It's probably
3241          * best to allocate enough space in the string for the worst possible
3242          * case rather than possibly running out of space and having to
3243          * reallocate and then copy what we've done so far.  Since everything
3244          * from s to t - 1 is invariant, the destination can be initialized
3245          * with these using a fast memory copy
3246          *
3247          * The other way is to figure out exactly how big the string should be
3248          * by parsing the entire input.  Then you don't have to make it big
3249          * enough to handle the worst possible case, and more importantly, if
3250          * the string you already have is large enough, you don't have to
3251          * allocate a new string, you can copy the last character in the input
3252          * string to the final position(s) that will be occupied by the
3253          * converted string and go backwards, stopping at t, since everything
3254          * before that is invariant.
3255          *
3256          * There are advantages and disadvantages to each method.
3257          *
3258          * In the first method, we can allocate a new string, do the memory
3259          * copy from the s to t - 1, and then proceed through the rest of the
3260          * string byte-by-byte.
3261          *
3262          * In the second method, we proceed through the rest of the input
3263          * string just calculating how big the converted string will be.  Then
3264          * there are two cases:
3265          *  1)  if the string has enough extra space to handle the converted
3266          *      value.  We go backwards through the string, converting until we
3267          *      get to the position we are at now, and then stop.  If this
3268          *      position is far enough along in the string, this method is
3269          *      faster than the other method.  If the memory copy were the same
3270          *      speed as the byte-by-byte loop, that position would be about
3271          *      half-way, as at the half-way mark, parsing to the end and back
3272          *      is one complete string's parse, the same amount as starting
3273          *      over and going all the way through.  Actually, it would be
3274          *      somewhat less than half-way, as it's faster to just count bytes
3275          *      than to also copy, and we don't have the overhead of allocating
3276          *      a new string, changing the scalar to use it, and freeing the
3277          *      existing one.  But if the memory copy is fast, the break-even
3278          *      point is somewhere after half way.  The counting loop could be
3279          *      sped up by vectorization, etc, to move the break-even point
3280          *      further towards the beginning.
3281          *  2)  if the string doesn't have enough space to handle the converted
3282          *      value.  A new string will have to be allocated, and one might
3283          *      as well, given that, start from the beginning doing the first
3284          *      method.  We've spent extra time parsing the string and in
3285          *      exchange all we've gotten is that we know precisely how big to
3286          *      make the new one.  Perl is more optimized for time than space,
3287          *      so this case is a loser.
3288          * So what I've decided to do is not use the 2nd method unless it is
3289          * guaranteed that a new string won't have to be allocated, assuming
3290          * the worst case.  I also decided not to put any more conditions on it
3291          * than this, for now.  It seems likely that, since the worst case is
3292          * twice as big as the unknown portion of the string (plus 1), we won't
3293          * be guaranteed enough space, causing us to go to the first method,
3294          * unless the string is short, or the first variant character is near
3295          * the end of it.  In either of these cases, it seems best to use the
3296          * 2nd method.  The only circumstance I can think of where this would
3297          * be really slower is if the string had once had much more data in it
3298          * than it does now, but there is still a substantial amount in it  */
3299
3300         {
3301             STRLEN invariant_head = t - s;
3302             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3303             if (SvLEN(sv) < size) {
3304
3305                 /* Here, have decided to allocate a new string */
3306
3307                 U8 *dst;
3308                 U8 *d;
3309
3310                 Newx(dst, size, U8);
3311
3312                 /* If no known invariants at the beginning of the input string,
3313                  * set so starts from there.  Otherwise, can use memory copy to
3314                  * get up to where we are now, and then start from here */
3315
3316                 if (invariant_head <= 0) {
3317                     d = dst;
3318                 } else {
3319                     Copy(s, dst, invariant_head, char);
3320                     d = dst + invariant_head;
3321                 }
3322
3323                 while (t < e) {
3324                     const UV uv = NATIVE8_TO_UNI(*t++);
3325                     if (UNI_IS_INVARIANT(uv))
3326                         *d++ = (U8)UNI_TO_NATIVE(uv);
3327                     else {
3328                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3329                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3330                     }
3331                 }
3332                 *d = '\0';
3333                 SvPV_free(sv); /* No longer using pre-existing string */
3334                 SvPV_set(sv, (char*)dst);
3335                 SvCUR_set(sv, d - dst);
3336                 SvLEN_set(sv, size);
3337             } else {
3338
3339                 /* Here, have decided to get the exact size of the string.
3340                  * Currently this happens only when we know that there is
3341                  * guaranteed enough space to fit the converted string, so
3342                  * don't have to worry about growing.  If two_byte_count is 0,
3343                  * then t points to the first byte of the string which hasn't
3344                  * been examined yet.  Otherwise two_byte_count is 1, and t
3345                  * points to the first byte in the string that will expand to
3346                  * two.  Depending on this, start examining at t or 1 after t.
3347                  * */
3348
3349                 U8 *d = t + two_byte_count;
3350
3351
3352                 /* Count up the remaining bytes that expand to two */
3353
3354                 while (d < e) {
3355                     const U8 chr = *d++;
3356                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3357                 }
3358
3359                 /* The string will expand by just the number of bytes that
3360                  * occupy two positions.  But we are one afterwards because of
3361                  * the increment just above.  This is the place to put the
3362                  * trailing NUL, and to set the length before we decrement */
3363
3364                 d += two_byte_count;
3365                 SvCUR_set(sv, d - s);
3366                 *d-- = '\0';
3367
3368
3369                 /* Having decremented d, it points to the position to put the
3370                  * very last byte of the expanded string.  Go backwards through
3371                  * the string, copying and expanding as we go, stopping when we
3372                  * get to the part that is invariant the rest of the way down */
3373
3374                 e--;
3375                 while (e >= t) {
3376                     const U8 ch = NATIVE8_TO_UNI(*e--);
3377                     if (UNI_IS_INVARIANT(ch)) {
3378                         *d-- = UNI_TO_NATIVE(ch);
3379                     } else {
3380                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3381                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3382                     }
3383                 }
3384             }
3385
3386             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3387                 /* Update pos. We do it at the end rather than during
3388                  * the upgrade, to avoid slowing down the common case
3389                  * (upgrade without pos) */
3390                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3391                 if (mg) {
3392                     I32 pos = mg->mg_len;
3393                     if (pos > 0 && (U32)pos > invariant_head) {
3394                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3395                         STRLEN n = (U32)pos - invariant_head;
3396                         while (n > 0) {
3397                             if (UTF8_IS_START(*d))
3398                                 d++;
3399                             d++;
3400                             n--;
3401                         }
3402                         mg->mg_len  = d - (U8*)SvPVX(sv);
3403                     }
3404                 }
3405                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3406                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3407             }
3408         }
3409     }
3410
3411     /* Mark as UTF-8 even if no variant - saves scanning loop */
3412     SvUTF8_on(sv);
3413     return SvCUR(sv);
3414 }
3415
3416 /*
3417 =for apidoc sv_utf8_downgrade
3418
3419 Attempts to convert the PV of an SV from characters to bytes.
3420 If the PV contains a character that cannot fit
3421 in a byte, this conversion will fail;
3422 in this case, either returns false or, if C<fail_ok> is not
3423 true, croaks.
3424
3425 This is not a general purpose Unicode to byte encoding interface:
3426 use the Encode extension for that.
3427
3428 =cut
3429 */
3430
3431 bool
3432 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3433 {
3434     dVAR;
3435
3436     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3437
3438     if (SvPOKp(sv) && SvUTF8(sv)) {
3439         if (SvCUR(sv)) {
3440             U8 *s;
3441             STRLEN len;
3442             int mg_flags = SV_GMAGIC;
3443
3444             if (SvIsCOW(sv)) {
3445                 sv_force_normal_flags(sv, 0);
3446             }
3447             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3448                 /* update pos */
3449                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3450                 if (mg) {
3451                     I32 pos = mg->mg_len;
3452                     if (pos > 0) {
3453                         sv_pos_b2u(sv, &pos);
3454                         mg_flags = 0; /* sv_pos_b2u does get magic */
3455                         mg->mg_len  = pos;
3456                     }
3457                 }
3458                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3459                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3460
3461             }
3462             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3463
3464             if (!utf8_to_bytes(s, &len)) {
3465                 if (fail_ok)
3466                     return FALSE;
3467                 else {
3468                     if (PL_op)
3469                         Perl_croak(aTHX_ "Wide character in %s",
3470                                    OP_DESC(PL_op));
3471                     else
3472                         Perl_croak(aTHX_ "Wide character");
3473                 }
3474             }
3475             SvCUR_set(sv, len);
3476         }
3477     }
3478     SvUTF8_off(sv);
3479     return TRUE;
3480 }
3481
3482 /*
3483 =for apidoc sv_utf8_encode
3484
3485 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3486 flag off so that it looks like octets again.
3487
3488 =cut
3489 */
3490
3491 void
3492 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3493 {
3494     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3495
3496     if (SvREADONLY(sv)) {
3497         sv_force_normal_flags(sv, 0);
3498     }
3499     (void) sv_utf8_upgrade(sv);
3500     SvUTF8_off(sv);
3501 }
3502
3503 /*
3504 =for apidoc sv_utf8_decode
3505
3506 If the PV of the SV is an octet sequence in UTF-8
3507 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3508 so that it looks like a character.  If the PV contains only single-byte
3509 characters, the C<SvUTF8> flag stays off.
3510 Scans PV for validity and returns false if the PV is invalid UTF-8.
3511
3512 =cut
3513 */
3514
3515 bool
3516 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3517 {
3518     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3519
3520     if (SvPOKp(sv)) {
3521         const U8 *start, *c;
3522         const U8 *e;
3523
3524         /* The octets may have got themselves encoded - get them back as
3525          * bytes
3526          */
3527         if (!sv_utf8_downgrade(sv, TRUE))
3528             return FALSE;
3529
3530         /* it is actually just a matter of turning the utf8 flag on, but
3531          * we want to make sure everything inside is valid utf8 first.
3532          */
3533         c = start = (const U8 *) SvPVX_const(sv);
3534         if (!is_utf8_string(c, SvCUR(sv)))
3535             return FALSE;
3536         e = (const U8 *) SvEND(sv);
3537         while (c < e) {
3538             const U8 ch = *c++;
3539             if (!UTF8_IS_INVARIANT(ch)) {
3540                 SvUTF8_on(sv);
3541                 break;
3542             }
3543         }
3544         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3545             /* adjust pos to the start of a UTF8 char sequence */
3546             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3547             if (mg) {
3548                 I32 pos = mg->mg_len;
3549                 if (pos > 0) {
3550                     for (c = start + pos; c > start; c--) {
3551                         if (UTF8_IS_START(*c))
3552                             break;
3553                     }
3554                     mg->mg_len  = c - start;
3555                 }
3556             }
3557             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3558                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3559         }
3560     }
3561     return TRUE;
3562 }
3563
3564 /*
3565 =for apidoc sv_setsv
3566
3567 Copies the contents of the source SV C<ssv> into the destination SV
3568 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3569 function if the source SV needs to be reused.  Does not handle 'set' magic.
3570 Loosely speaking, it performs a copy-by-value, obliterating any previous
3571 content of the destination.
3572
3573 You probably want to use one of the assortment of wrappers, such as
3574 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3575 C<SvSetMagicSV_nosteal>.
3576
3577 =for apidoc sv_setsv_flags
3578
3579 Copies the contents of the source SV C<ssv> into the destination SV
3580 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3581 function if the source SV needs to be reused.  Does not handle 'set' magic.
3582 Loosely speaking, it performs a copy-by-value, obliterating any previous
3583 content of the destination.
3584 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3585 C<ssv> if appropriate, else not.  If the C<flags>
3586 parameter has the C<NOSTEAL> bit set then the
3587 buffers of temps will not be stolen.  <sv_setsv>
3588 and C<sv_setsv_nomg> are implemented in terms of this function.
3589
3590 You probably want to use one of the assortment of wrappers, such as
3591 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3592 C<SvSetMagicSV_nosteal>.
3593
3594 This is the primary function for copying scalars, and most other
3595 copy-ish functions and macros use this underneath.
3596
3597 =cut
3598 */
3599
3600 static void
3601 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3602 {
3603     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3604     HV *old_stash = NULL;
3605
3606     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3607
3608     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3609         const char * const name = GvNAME(sstr);
3610         const STRLEN len = GvNAMELEN(sstr);
3611         {
3612             if (dtype >= SVt_PV) {
3613                 SvPV_free(dstr);
3614                 SvPV_set(dstr, 0);
3615                 SvLEN_set(dstr, 0);
3616                 SvCUR_set(dstr, 0);
3617             }
3618             SvUPGRADE(dstr, SVt_PVGV);
3619             (void)SvOK_off(dstr);
3620             /* We have to turn this on here, even though we turn it off
3621                below, as GvSTASH will fail an assertion otherwise. */
3622             isGV_with_GP_on(dstr);
3623         }
3624         GvSTASH(dstr) = GvSTASH(sstr);
3625         if (GvSTASH(dstr))
3626             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3627         gv_name_set(MUTABLE_GV(dstr), name, len,
3628                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3629         SvFAKE_on(dstr);        /* can coerce to non-glob */
3630     }
3631
3632     if(GvGP(MUTABLE_GV(sstr))) {
3633         /* If source has method cache entry, clear it */
3634         if(GvCVGEN(sstr)) {
3635             SvREFCNT_dec(GvCV(sstr));
3636             GvCV_set(sstr, NULL);
3637             GvCVGEN(sstr) = 0;
3638         }
3639         /* If source has a real method, then a method is
3640            going to change */
3641         else if(
3642          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3643         ) {
3644             mro_changes = 1;
3645         }
3646     }
3647
3648     /* If dest already had a real method, that's a change as well */
3649     if(
3650         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3651      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3652     ) {
3653         mro_changes = 1;
3654     }
3655
3656     /* We don't need to check the name of the destination if it was not a
3657        glob to begin with. */
3658     if(dtype == SVt_PVGV) {
3659         const char * const name = GvNAME((const GV *)dstr);
3660         if(
3661             strEQ(name,"ISA")
3662          /* The stash may have been detached from the symbol table, so
3663             check its name. */
3664          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3665         )
3666             mro_changes = 2;
3667         else {
3668             const STRLEN len = GvNAMELEN(dstr);
3669             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3670              || (len == 1 && name[0] == ':')) {
3671                 mro_changes = 3;
3672
3673                 /* Set aside the old stash, so we can reset isa caches on
3674                    its subclasses. */
3675                 if((old_stash = GvHV(dstr)))
3676                     /* Make sure we do not lose it early. */
3677                     SvREFCNT_inc_simple_void_NN(
3678                      sv_2mortal((SV *)old_stash)
3679                     );
3680             }
3681         }
3682     }
3683
3684     gp_free(MUTABLE_GV(dstr));
3685     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3686     (void)SvOK_off(dstr);
3687     isGV_with_GP_on(dstr);
3688     GvINTRO_off(dstr);          /* one-shot flag */
3689     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3690     if (SvTAINTED(sstr))
3691         SvTAINT(dstr);
3692     if (GvIMPORTED(dstr) != GVf_IMPORTED
3693         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3694         {
3695             GvIMPORTED_on(dstr);
3696         }
3697     GvMULTI_on(dstr);
3698     if(mro_changes == 2) {
3699       if (GvAV((const GV *)sstr)) {
3700         MAGIC *mg;
3701         SV * const sref = (SV *)GvAV((const GV *)dstr);
3702         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3703             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3704                 AV * const ary = newAV();
3705                 av_push(ary, mg->mg_obj); /* takes the refcount */
3706                 mg->mg_obj = (SV *)ary;
3707             }
3708             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3709         }
3710         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3711       }
3712       mro_isa_changed_in(GvSTASH(dstr));
3713     }
3714     else if(mro_changes == 3) {
3715         HV * const stash = GvHV(dstr);
3716         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3717             mro_package_moved(
3718                 stash, old_stash,
3719                 (GV *)dstr, 0
3720             );
3721     }
3722     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3723     return;
3724 }
3725
3726 static void
3727 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3728 {
3729     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3730     SV *dref = NULL;
3731     const int intro = GvINTRO(dstr);
3732     SV **location;
3733     U8 import_flag = 0;
3734     const U32 stype = SvTYPE(sref);
3735
3736     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3737
3738     if (intro) {
3739         GvINTRO_off(dstr);      /* one-shot flag */
3740         GvLINE(dstr) = CopLINE(PL_curcop);
3741         GvEGV(dstr) = MUTABLE_GV(dstr);
3742     }
3743     GvMULTI_on(dstr);
3744     switch (stype) {
3745     case SVt_PVCV:
3746         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3747         import_flag = GVf_IMPORTED_CV;
3748         goto common;
3749     case SVt_PVHV:
3750         location = (SV **) &GvHV(dstr);
3751         import_flag = GVf_IMPORTED_HV;
3752         goto common;
3753     case SVt_PVAV:
3754         location = (SV **) &GvAV(dstr);
3755         import_flag = GVf_IMPORTED_AV;
3756         goto common;
3757     case SVt_PVIO:
3758         location = (SV **) &GvIOp(dstr);
3759         goto common;
3760     case SVt_PVFM:
3761         location = (SV **) &GvFORM(dstr);
3762         goto common;
3763     default:
3764         location = &GvSV(dstr);
3765         import_flag = GVf_IMPORTED_SV;
3766     common:
3767         if (intro) {
3768             if (stype == SVt_PVCV) {
3769                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3770                 if (GvCVGEN(dstr)) {
3771                     SvREFCNT_dec(GvCV(dstr));
3772                     GvCV_set(dstr, NULL);
3773                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3774                 }
3775             }
3776             SAVEGENERICSV(*location);
3777         }
3778         else
3779             dref = *location;
3780         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3781             CV* const cv = MUTABLE_CV(*location);
3782             if (cv) {
3783                 if (!GvCVGEN((const GV *)dstr) &&
3784                     (CvROOT(cv) || CvXSUB(cv)) &&
3785                     /* redundant check that avoids creating the extra SV
3786                        most of the time: */
3787                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3788                     {
3789                         SV * const new_const_sv =
3790                             CvCONST((const CV *)sref)
3791                                  ? cv_const_sv((const CV *)sref)
3792                                  : NULL;
3793                         report_redefined_cv(
3794                            sv_2mortal(Perl_newSVpvf(aTHX_
3795                                 "%"HEKf"::%"HEKf,
3796                                 HEKfARG(
3797                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3798                                 ),
3799                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3800                            )),
3801                            cv,
3802                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3803                         );
3804                     }
3805                 if (!intro)
3806                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3807                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3808                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3809                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3810             }
3811             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3812             GvASSUMECV_on(dstr);
3813             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3814         }
3815         *location = sref;
3816         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3817             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3818             GvFLAGS(dstr) |= import_flag;
3819         }
3820         if (stype == SVt_PVHV) {
3821             const char * const name = GvNAME((GV*)dstr);
3822             const STRLEN len = GvNAMELEN(dstr);
3823             if (
3824                 (
3825                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3826                 || (len == 1 && name[0] == ':')
3827                 )
3828              && (!dref || HvENAME_get(dref))
3829             ) {
3830                 mro_package_moved(
3831                     (HV *)sref, (HV *)dref,
3832                     (GV *)dstr, 0
3833                 );
3834             }
3835         }
3836         else if (
3837             stype == SVt_PVAV && sref != dref
3838          && strEQ(GvNAME((GV*)dstr), "ISA")
3839          /* The stash may have been detached from the symbol table, so
3840             check its name before doing anything. */
3841          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3842         ) {
3843             MAGIC *mg;
3844             MAGIC * const omg = dref && SvSMAGICAL(dref)
3845                                  ? mg_find(dref, PERL_MAGIC_isa)
3846                                  : NULL;
3847             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3848                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3849                     AV * const ary = newAV();
3850                     av_push(ary, mg->mg_obj); /* takes the refcount */
3851                     mg->mg_obj = (SV *)ary;
3852                 }
3853                 if (omg) {
3854                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3855                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3856                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3857                         while (items--)
3858                             av_push(
3859                              (AV *)mg->mg_obj,
3860                              SvREFCNT_inc_simple_NN(*svp++)
3861                             );
3862                     }
3863                     else
3864                         av_push(
3865                          (AV *)mg->mg_obj,
3866                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3867                         );
3868                 }
3869                 else
3870                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3871             }
3872             else
3873             {
3874                 sv_magic(
3875                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3876                 );
3877                 mg = mg_find(sref, PERL_MAGIC_isa);
3878             }
3879             /* Since the *ISA assignment could have affected more than
3880                one stash, don't call mro_isa_changed_in directly, but let
3881                magic_clearisa do it for us, as it already has the logic for
3882                dealing with globs vs arrays of globs. */
3883             assert(mg);
3884             Perl_magic_clearisa(aTHX_ NULL, mg);
3885         }
3886         else if (stype == SVt_PVIO) {
3887             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
3888             /* It's a cache. It will rebuild itself quite happily.
3889                It's a lot of effort to work out exactly which key (or keys)
3890                might be invalidated by the creation of the this file handle.
3891             */
3892             hv_clear(PL_stashcache);
3893         }
3894         break;
3895     }
3896     SvREFCNT_dec(dref);
3897     if (SvTAINTED(sstr))
3898         SvTAINT(dstr);
3899     return;
3900 }
3901
3902 void
3903 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3904 {
3905     dVAR;
3906     U32 sflags;
3907     int dtype;
3908     svtype stype;
3909
3910     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3911
3912     if (sstr == dstr)
3913         return;
3914
3915     if (SvIS_FREED(dstr)) {
3916         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3917                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3918     }
3919     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3920     if (!sstr)
3921         sstr = &PL_sv_undef;
3922     if (SvIS_FREED(sstr)) {
3923         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3924                    (void*)sstr, (void*)dstr);
3925     }
3926     stype = SvTYPE(sstr);
3927     dtype = SvTYPE(dstr);
3928
3929     /* There's a lot of redundancy below but we're going for speed here */
3930
3931     switch (stype) {
3932     case SVt_NULL:
3933       undef_sstr:
3934         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3935             (void)SvOK_off(dstr);
3936             return;
3937         }
3938         break;
3939     case SVt_IV:
3940         if (SvIOK(sstr)) {
3941             switch (dtype) {
3942             case SVt_NULL:
3943                 sv_upgrade(dstr, SVt_IV);
3944                 break;
3945             case SVt_NV:
3946             case SVt_PV:
3947                 sv_upgrade(dstr, SVt_PVIV);
3948                 break;
3949             case SVt_PVGV:
3950             case SVt_PVLV:
3951                 goto end_of_first_switch;
3952             }
3953             (void)SvIOK_only(dstr);
3954             SvIV_set(dstr,  SvIVX(sstr));
3955             if (SvIsUV(sstr))
3956                 SvIsUV_on(dstr);
3957             /* SvTAINTED can only be true if the SV has taint magic, which in
3958                turn means that the SV type is PVMG (or greater). This is the
3959                case statement for SVt_IV, so this cannot be true (whatever gcov
3960                may say).  */
3961             assert(!SvTAINTED(sstr));
3962             return;
3963         }
3964         if (!SvROK(sstr))
3965             goto undef_sstr;
3966         if (dtype < SVt_PV && dtype != SVt_IV)
3967             sv_upgrade(dstr, SVt_IV);
3968         break;
3969
3970     case SVt_NV:
3971         if (SvNOK(sstr)) {
3972             switch (dtype) {
3973             case SVt_NULL:
3974             case SVt_IV:
3975                 sv_upgrade(dstr, SVt_NV);
3976                 break;
3977             case SVt_PV:
3978             case SVt_PVIV:
3979                 sv_upgrade(dstr, SVt_PVNV);
3980                 break;
3981             case SVt_PVGV:
3982             case SVt_PVLV:
3983                 goto end_of_first_switch;
3984             }
3985             SvNV_set(dstr, SvNVX(sstr));
3986             (void)SvNOK_only(dstr);
3987             /* SvTAINTED can only be true if the SV has taint magic, which in
3988                turn means that the SV type is PVMG (or greater). This is the
3989                case statement for SVt_NV, so this cannot be true (whatever gcov
3990                may say).  */
3991             assert(!SvTAINTED(sstr));
3992             return;
3993         }
3994         goto undef_sstr;
3995
3996     case SVt_PV:
3997         if (dtype < SVt_PV)
3998             sv_upgrade(dstr, SVt_PV);
3999         break;
4000     case SVt_PVIV:
4001         if (dtype < SVt_PVIV)
4002             sv_upgrade(dstr, SVt_PVIV);
4003         break;
4004     case SVt_PVNV:
4005         if (dtype < SVt_PVNV)
4006             sv_upgrade(dstr, SVt_PVNV);
4007         break;
4008     default:
4009         {
4010         const char * const type = sv_reftype(sstr,0);
4011         if (PL_op)
4012             /* diag_listed_as: Bizarre copy of %s */
4013             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4014         else
4015             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4016         }
4017         break;
4018
4019     case SVt_REGEXP:
4020         if (dtype < SVt_REGEXP)
4021             sv_upgrade(dstr, SVt_REGEXP);
4022         break;
4023
4024         /* case SVt_BIND: */
4025     case SVt_PVLV:
4026     case SVt_PVGV:
4027     case SVt_PVMG:
4028         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4029             mg_get(sstr);
4030             if (SvTYPE(sstr) != stype)
4031                 stype = SvTYPE(sstr);
4032         }
4033         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4034                     glob_assign_glob(dstr, sstr, dtype);
4035                     return;
4036         }
4037         if (stype == SVt_PVLV)
4038             SvUPGRADE(dstr, SVt_PVNV);
4039         else
4040             SvUPGRADE(dstr, (svtype)stype);
4041     }
4042  end_of_first_switch:
4043
4044     /* dstr may have been upgraded.  */
4045     dtype = SvTYPE(dstr);
4046     sflags = SvFLAGS(sstr);
4047
4048     if (dtype == SVt_PVCV) {
4049         /* Assigning to a subroutine sets the prototype.  */
4050         if (SvOK(sstr)) {
4051             STRLEN len;
4052             const char *const ptr = SvPV_const(sstr, len);
4053
4054             SvGROW(dstr, len + 1);
4055             Copy(ptr, SvPVX(dstr), len + 1, char);
4056             SvCUR_set(dstr, len);
4057             SvPOK_only(dstr);
4058             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4059             CvAUTOLOAD_off(dstr);
4060         } else {
4061             SvOK_off(dstr);
4062         }
4063     }
4064     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4065         const char * const type = sv_reftype(dstr,0);
4066         if (PL_op)
4067             /* diag_listed_as: Cannot copy to %s */
4068             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4069         else
4070             Perl_croak(aTHX_ "Cannot copy to %s", type);
4071     } else if (sflags & SVf_ROK) {
4072         if (isGV_with_GP(dstr)
4073             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4074             sstr = SvRV(sstr);
4075             if (sstr == dstr) {
4076                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4077                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4078                 {
4079                     GvIMPORTED_on(dstr);
4080                 }
4081                 GvMULTI_on(dstr);
4082                 return;
4083             }
4084             glob_assign_glob(dstr, sstr, dtype);
4085             return;
4086         }
4087
4088         if (dtype >= SVt_PV) {
4089             if (isGV_with_GP(dstr)) {
4090                 glob_assign_ref(dstr, sstr);
4091                 return;
4092             }
4093             if (SvPVX_const(dstr)) {
4094                 SvPV_free(dstr);
4095                 SvLEN_set(dstr, 0);
4096                 SvCUR_set(dstr, 0);
4097             }
4098         }
4099         (void)SvOK_off(dstr);
4100         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4101         SvFLAGS(dstr) |= sflags & SVf_ROK;
4102         assert(!(sflags & SVp_NOK));
4103         assert(!(sflags & SVp_IOK));
4104         assert(!(sflags & SVf_NOK));
4105         assert(!(sflags & SVf_IOK));
4106     }
4107     else if (isGV_with_GP(dstr)) {
4108         if (!(sflags & SVf_OK)) {
4109             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4110                            "Undefined value assigned to typeglob");
4111         }
4112         else {
4113             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4114             if (dstr != (const SV *)gv) {
4115                 const char * const name = GvNAME((const GV *)dstr);
4116                 const STRLEN len = GvNAMELEN(dstr);
4117                 HV *old_stash = NULL;
4118                 bool reset_isa = FALSE;
4119                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4120                  || (len == 1 && name[0] == ':')) {
4121                     /* Set aside the old stash, so we can reset isa caches
4122                        on its subclasses. */
4123                     if((old_stash = GvHV(dstr))) {
4124                         /* Make sure we do not lose it early. */
4125                         SvREFCNT_inc_simple_void_NN(
4126                          sv_2mortal((SV *)old_stash)
4127                         );
4128                     }
4129                     reset_isa = TRUE;
4130                 }
4131
4132                 if (GvGP(dstr))
4133                     gp_free(MUTABLE_GV(dstr));
4134                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4135
4136                 if (reset_isa) {
4137                     HV * const stash = GvHV(dstr);
4138                     if(
4139                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4140                     )
4141                         mro_package_moved(
4142                          stash, old_stash,
4143                          (GV *)dstr, 0
4144                         );
4145                 }
4146             }
4147         }
4148     }
4149     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4150         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4151     }
4152     else if (sflags & SVp_POK) {
4153         bool isSwipe = 0;
4154
4155         /*
4156          * Check to see if we can just swipe the string.  If so, it's a
4157          * possible small lose on short strings, but a big win on long ones.
4158          * It might even be a win on short strings if SvPVX_const(dstr)
4159          * has to be allocated and SvPVX_const(sstr) has to be freed.
4160          * Likewise if we can set up COW rather than doing an actual copy, we
4161          * drop to the else clause, as the swipe code and the COW setup code
4162          * have much in common.
4163          */
4164
4165         /* Whichever path we take through the next code, we want this true,
4166            and doing it now facilitates the COW check.  */
4167         (void)SvPOK_only(dstr);
4168
4169         if (
4170             /* If we're already COW then this clause is not true, and if COW
4171                is allowed then we drop down to the else and make dest COW 
4172                with us.  If caller hasn't said that we're allowed to COW
4173                shared hash keys then we don't do the COW setup, even if the
4174                source scalar is a shared hash key scalar.  */
4175             (((flags & SV_COW_SHARED_HASH_KEYS)
4176                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4177                : 1 /* If making a COW copy is forbidden then the behaviour we
4178                        desire is as if the source SV isn't actually already
4179                        COW, even if it is.  So we act as if the source flags
4180                        are not COW, rather than actually testing them.  */
4181               )
4182 #ifndef PERL_OLD_COPY_ON_WRITE
4183              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4184                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4185                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4186                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4187                 but in turn, it's somewhat dead code, never expected to go
4188                 live, but more kept as a placeholder on how to do it better
4189                 in a newer implementation.  */
4190              /* If we are COW and dstr is a suitable target then we drop down
4191                 into the else and make dest a COW of us.  */
4192              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4193 #endif
4194              )
4195             &&
4196             !(isSwipe =
4197                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4198                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4199                  (!(flags & SV_NOSTEAL)) &&
4200                                         /* and we're allowed to steal temps */
4201                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4202                  SvLEN(sstr))             /* and really is a string */
4203 #ifdef PERL_OLD_COPY_ON_WRITE
4204             && ((flags & SV_COW_SHARED_HASH_KEYS)
4205                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4206                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4207                      && SvTYPE(sstr) >= SVt_PVIV))
4208                 : 1)
4209 #endif
4210             ) {
4211             /* Failed the swipe test, and it's not a shared hash key either.
4212                Have to copy the string.  */
4213             STRLEN len = SvCUR(sstr);
4214             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4215             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4216             SvCUR_set(dstr, len);
4217             *SvEND(dstr) = '\0';
4218         } else {
4219             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4220                be true in here.  */
4221             /* Either it's a shared hash key, or it's suitable for
4222                copy-on-write or we can swipe the string.  */
4223             if (DEBUG_C_TEST) {
4224                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4225                 sv_dump(sstr);
4226                 sv_dump(dstr);
4227             }
4228 #ifdef PERL_OLD_COPY_ON_WRITE
4229             if (!isSwipe) {
4230                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4231                     != (SVf_FAKE | SVf_READONLY)) {
4232                     SvREADONLY_on(sstr);
4233                     SvFAKE_on(sstr);
4234                     /* Make the source SV into a loop of 1.
4235                        (about to become 2) */
4236                     SV_COW_NEXT_SV_SET(sstr, sstr);
4237                 }
4238             }
4239 #endif
4240             /* Initial code is common.  */
4241             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4242                 SvPV_free(dstr);
4243             }
4244
4245             if (!isSwipe) {
4246                 /* making another shared SV.  */
4247                 STRLEN cur = SvCUR(sstr);
4248                 STRLEN len = SvLEN(sstr);
4249 #ifdef PERL_OLD_COPY_ON_WRITE
4250                 if (len) {
4251                     assert (SvTYPE(dstr) >= SVt_PVIV);
4252                     /* SvIsCOW_normal */
4253                     /* splice us in between source and next-after-source.  */
4254                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4255                     SV_COW_NEXT_SV_SET(sstr, dstr);
4256                     SvPV_set(dstr, SvPVX_mutable(sstr));
4257                 } else
4258 #endif
4259                 {
4260                     /* SvIsCOW_shared_hash */
4261                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4262                                           "Copy on write: Sharing hash\n"));
4263
4264                     assert (SvTYPE(dstr) >= SVt_PV);
4265                     SvPV_set(dstr,
4266                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4267                 }
4268                 SvLEN_set(dstr, len);
4269                 SvCUR_set(dstr, cur);
4270                 SvREADONLY_on(dstr);
4271                 SvFAKE_on(dstr);
4272             }
4273             else
4274                 {       /* Passes the swipe test.  */
4275                 SvPV_set(dstr, SvPVX_mutable(sstr));
4276                 SvLEN_set(dstr, SvLEN(sstr));
4277                 SvCUR_set(dstr, SvCUR(sstr));
4278
4279                 SvTEMP_off(dstr);
4280                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4281                 SvPV_set(sstr, NULL);
4282                 SvLEN_set(sstr, 0);
4283                 SvCUR_set(sstr, 0);
4284                 SvTEMP_off(sstr);
4285             }
4286         }
4287         if (sflags & SVp_NOK) {
4288             SvNV_set(dstr, SvNVX(sstr));
4289         }
4290         if (sflags & SVp_IOK) {
4291             SvIV_set(dstr, SvIVX(sstr));
4292             /* Must do this otherwise some other overloaded use of 0x80000000
4293                gets confused. I guess SVpbm_VALID */
4294             if (sflags & SVf_IVisUV)
4295                 SvIsUV_on(dstr);
4296         }
4297         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4298         {
4299             const MAGIC * const smg = SvVSTRING_mg(sstr);
4300             if (smg) {
4301                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4302                          smg->mg_ptr, smg->mg_len);
4303                 SvRMAGICAL_on(dstr);
4304             }
4305         }
4306     }
4307     else if (sflags & (SVp_IOK|SVp_NOK)) {
4308         (void)SvOK_off(dstr);
4309         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4310         if (sflags & SVp_IOK) {
4311             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4312             SvIV_set(dstr, SvIVX(sstr));
4313         }
4314         if (sflags & SVp_NOK) {
4315             SvNV_set(dstr, SvNVX(sstr));
4316         }
4317     }
4318     else {
4319         if (isGV_with_GP(sstr)) {
4320             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4321         }
4322         else
4323             (void)SvOK_off(dstr);
4324     }
4325     if (SvTAINTED(sstr))
4326         SvTAINT(dstr);
4327 }
4328
4329 /*
4330 =for apidoc sv_setsv_mg
4331
4332 Like C<sv_setsv>, but also handles 'set' magic.
4333
4334 =cut
4335 */
4336
4337 void
4338 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4339 {
4340     PERL_ARGS_ASSERT_SV_SETSV_MG;
4341
4342     sv_setsv(dstr,sstr);
4343     SvSETMAGIC(dstr);
4344 }
4345
4346 #ifdef PERL_OLD_COPY_ON_WRITE
4347 SV *
4348 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4349 {
4350     STRLEN cur = SvCUR(sstr);
4351     STRLEN len = SvLEN(sstr);
4352     char *new_pv;
4353
4354     PERL_ARGS_ASSERT_SV_SETSV_COW;
4355
4356     if (DEBUG_C_TEST) {
4357         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4358                       (void*)sstr, (void*)dstr);
4359         sv_dump(sstr);
4360         if (dstr)
4361                     sv_dump(dstr);
4362     }
4363
4364     if (dstr) {
4365         if (SvTHINKFIRST(dstr))
4366             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4367         else if (SvPVX_const(dstr))
4368             Safefree(SvPVX_mutable(dstr));
4369     }
4370     else
4371         new_SV(dstr);
4372     SvUPGRADE(dstr, SVt_PVIV);
4373
4374     assert (SvPOK(sstr));
4375     assert (SvPOKp(sstr));
4376     assert (!SvIOK(sstr));
4377     assert (!SvIOKp(sstr));
4378     assert (!SvNOK(sstr));
4379     assert (!SvNOKp(sstr));
4380
4381     if (SvIsCOW(sstr)) {
4382
4383         if (SvLEN(sstr) == 0) {
4384             /* source is a COW shared hash key.  */
4385             DEBUG_C(PerlIO_printf(Perl_debug_log,
4386                                   "Fast copy on write: Sharing hash\n"));
4387             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4388             goto common_exit;
4389         }
4390         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4391     } else {
4392         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4393         SvUPGRADE(sstr, SVt_PVIV);
4394         SvREADONLY_on(sstr);
4395         SvFAKE_on(sstr);
4396         DEBUG_C(PerlIO_printf(Perl_debug_log,
4397                               "Fast copy on write: Converting sstr to COW\n"));
4398         SV_COW_NEXT_SV_SET(dstr, sstr);
4399     }
4400     SV_COW_NEXT_SV_SET(sstr, dstr);
4401     new_pv = SvPVX_mutable(sstr);
4402
4403   common_exit:
4404     SvPV_set(dstr, new_pv);
4405     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4406     if (SvUTF8(sstr))
4407         SvUTF8_on(dstr);
4408     SvLEN_set(dstr, len);
4409     SvCUR_set(dstr, cur);
4410     if (DEBUG_C_TEST) {
4411         sv_dump(dstr);
4412     }
4413     return dstr;
4414 }
4415 #endif
4416
4417 /*
4418 =for apidoc sv_setpvn
4419
4420 Copies a string into an SV.  The C<len> parameter indicates the number of
4421 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4422 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4423
4424 =cut
4425 */
4426
4427 void
4428 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4429 {
4430     dVAR;
4431     char *dptr;
4432
4433     PERL_ARGS_ASSERT_SV_SETPVN;
4434
4435     SV_CHECK_THINKFIRST_COW_DROP(sv);
4436     if (!ptr) {
4437         (void)SvOK_off(sv);
4438         return;
4439     }
4440     else {
4441         /* len is STRLEN which is unsigned, need to copy to signed */
4442         const IV iv = len;
4443         if (iv < 0)
4444             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4445                        IVdf, iv);
4446     }
4447     SvUPGRADE(sv, SVt_PV);
4448
4449     dptr = SvGROW(sv, len + 1);
4450     Move(ptr,dptr,len,char);
4451     dptr[len] = '\0';
4452     SvCUR_set(sv, len);
4453     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4454     SvTAINT(sv);
4455     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4456 }
4457
4458 /*
4459 =for apidoc sv_setpvn_mg
4460
4461 Like C<sv_setpvn>, but also handles 'set' magic.
4462
4463 =cut
4464 */
4465
4466 void
4467 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4468 {
4469     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4470
4471     sv_setpvn(sv,ptr,len);
4472     SvSETMAGIC(sv);
4473 }
4474
4475 /*
4476 =for apidoc sv_setpv
4477
4478 Copies a string into an SV.  The string must be null-terminated.  Does not
4479 handle 'set' magic.  See C<sv_setpv_mg>.
4480
4481 =cut
4482 */
4483
4484 void
4485 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4486 {
4487     dVAR;
4488     STRLEN len;
4489
4490     PERL_ARGS_ASSERT_SV_SETPV;
4491
4492     SV_CHECK_THINKFIRST_COW_DROP(sv);
4493     if (!ptr) {
4494         (void)SvOK_off(sv);
4495         return;
4496     }
4497     len = strlen(ptr);
4498     SvUPGRADE(sv, SVt_PV);
4499
4500     SvGROW(sv, len + 1);
4501     Move(ptr,SvPVX(sv),len+1,char);
4502     SvCUR_set(sv, len);
4503     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4504     SvTAINT(sv);
4505     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4506 }
4507
4508 /*
4509 =for apidoc sv_setpv_mg
4510
4511 Like C<sv_setpv>, but also handles 'set' magic.
4512
4513 =cut
4514 */
4515
4516 void
4517 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4518 {
4519     PERL_ARGS_ASSERT_SV_SETPV_MG;
4520
4521     sv_setpv(sv,ptr);
4522     SvSETMAGIC(sv);
4523 }
4524
4525 void
4526 Perl_sv_sethek(pTHX_ register SV *const sv, const HEK *const hek)
4527 {
4528     dVAR;
4529
4530     PERL_ARGS_ASSERT_SV_SETHEK;
4531
4532     if (!hek) {
4533         return;
4534     }
4535
4536     if (HEK_LEN(hek) == HEf_SVKEY) {
4537         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4538         return;
4539     } else {
4540         const int flags = HEK_FLAGS(hek);
4541         if (flags & HVhek_WASUTF8) {
4542             STRLEN utf8_len = HEK_LEN(hek);
4543             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4544             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4545             SvUTF8_on(sv);
4546             return;
4547         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
4548             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4549             if (HEK_UTF8(hek))
4550                 SvUTF8_on(sv);
4551             else SvUTF8_off(sv);
4552             return;
4553         }
4554         {
4555             SV_CHECK_THINKFIRST_COW_DROP(sv);
4556             SvUPGRADE(sv, SVt_PV);
4557             Safefree(SvPVX(sv));
4558             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4559             SvCUR_set(sv, HEK_LEN(hek));
4560             SvLEN_set(sv, 0);
4561             SvREADONLY_on(sv);
4562             SvFAKE_on(sv);
4563             SvPOK_on(sv);
4564             if (HEK_UTF8(hek))
4565                 SvUTF8_on(sv);
4566             else SvUTF8_off(sv);
4567             return;
4568         }
4569     }
4570 }
4571
4572
4573 /*
4574 =for apidoc sv_usepvn_flags
4575
4576 Tells an SV to use C<ptr> to find its string value.  Normally the
4577 string is stored inside the SV but sv_usepvn allows the SV to use an
4578 outside string.  The C<ptr> should point to memory that was allocated
4579 by C<malloc>.  It must be the start of a mallocked block
4580 of memory, and not a pointer to the middle of it.  The
4581 string length, C<len>, must be supplied.  By default
4582 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4583 so that pointer should not be freed or used by the programmer after
4584 giving it to sv_usepvn, and neither should any pointers from "behind"
4585 that pointer (e.g. ptr + 1) be used.
4586
4587 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4588 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4589 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4590 C<len>, and already meets the requirements for storing in C<SvPVX>).
4591
4592 =cut
4593 */
4594
4595 void
4596 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4597 {
4598     dVAR;
4599     STRLEN allocate;
4600
4601     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4602
4603     SV_CHECK_THINKFIRST_COW_DROP(sv);
4604     SvUPGRADE(sv, SVt_PV);
4605     if (!ptr) {
4606         (void)SvOK_off(sv);
4607         if (flags & SV_SMAGIC)
4608             SvSETMAGIC(sv);
4609         return;
4610     }
4611     if (SvPVX_const(sv))
4612         SvPV_free(sv);
4613
4614 #ifdef DEBUGGING
4615     if (flags & SV_HAS_TRAILING_NUL)
4616         assert(ptr[len] == '\0');
4617 #endif
4618
4619     allocate = (flags & SV_HAS_TRAILING_NUL)
4620         ? len + 1 :
4621 #ifdef Perl_safesysmalloc_size
4622         len + 1;
4623 #else 
4624         PERL_STRLEN_ROUNDUP(len + 1);
4625 #endif
4626     if (flags & SV_HAS_TRAILING_NUL) {
4627         /* It's long enough - do nothing.
4628            Specifically Perl_newCONSTSUB is relying on this.  */
4629     } else {
4630 #ifdef DEBUGGING
4631         /* Force a move to shake out bugs in callers.  */
4632         char *new_ptr = (char*)safemalloc(allocate);
4633         Copy(ptr, new_ptr, len, char);
4634         PoisonFree(ptr,len,char);
4635         Safefree(ptr);
4636         ptr = new_ptr;
4637 #else
4638         ptr = (char*) saferealloc (ptr, allocate);
4639 #endif
4640     }
4641 #ifdef Perl_safesysmalloc_size
4642     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4643 #else
4644     SvLEN_set(sv, allocate);
4645 #endif
4646     SvCUR_set(sv, len);
4647     SvPV_set(sv, ptr);
4648     if (!(flags & SV_HAS_TRAILING_NUL)) {
4649         ptr[len] = '\0';
4650     }
4651     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4652     SvTAINT(sv);
4653     if (flags & SV_SMAGIC)
4654         SvSETMAGIC(sv);
4655 }
4656
4657 #ifdef PERL_OLD_COPY_ON_WRITE
4658 /* Need to do this *after* making the SV normal, as we need the buffer
4659    pointer to remain valid until after we've copied it.  If we let go too early,
4660    another thread could invalidate it by unsharing last of the same hash key
4661    (which it can do by means other than releasing copy-on-write Svs)
4662    or by changing the other copy-on-write SVs in the loop.  */
4663 STATIC void
4664 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4665 {
4666     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4667
4668     { /* this SV was SvIsCOW_normal(sv) */
4669          /* we need to find the SV pointing to us.  */
4670         SV *current = SV_COW_NEXT_SV(after);
4671
4672         if (current == sv) {
4673             /* The SV we point to points back to us (there were only two of us
4674                in the loop.)
4675                Hence other SV is no longer copy on write either.  */
4676             SvFAKE_off(after);
4677             SvREADONLY_off(after);
4678         } else {
4679             /* We need to follow the pointers around the loop.  */
4680             SV *next;
4681             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4682                 assert (next);
4683                 current = next;
4684                  /* don't loop forever if the structure is bust, and we have
4685                     a pointer into a closed loop.  */
4686                 assert (current != after);
4687                 assert (SvPVX_const(current) == pvx);
4688             }
4689             /* Make the SV before us point to the SV after us.  */
4690             SV_COW_NEXT_SV_SET(current, after);
4691         }
4692     }
4693 }
4694 #endif
4695 /*
4696 =for apidoc sv_force_normal_flags
4697
4698 Undo various types of fakery on an SV, where fakery means
4699 "more than" a string: if the PV is a shared string, make
4700 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4701 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4702 we do the copy, and is also used locally; if this is a
4703 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4704 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4705 SvPOK_off rather than making a copy.  (Used where this
4706 scalar is about to be set to some other value.)  In addition,
4707 the C<flags> parameter gets passed to C<sv_unref_flags()>
4708 when unreffing.  C<sv_force_normal> calls this function
4709 with flags set to 0.
4710
4711 =cut
4712 */
4713
4714 void
4715 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4716 {
4717     dVAR;
4718
4719     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4720
4721 #ifdef PERL_OLD_COPY_ON_WRITE
4722     if (SvREADONLY(sv)) {
4723         if (SvIsCOW(sv)) {
4724             const char * const pvx = SvPVX_const(sv);
4725             const STRLEN len = SvLEN(sv);
4726             const STRLEN cur = SvCUR(sv);
4727             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4728                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4729                we'll fail an assertion.  */
4730             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4731
4732             if (DEBUG_C_TEST) {
4733                 PerlIO_printf(Perl_debug_log,
4734                               "Copy on write: Force normal %ld\n",
4735                               (long) flags);
4736                 sv_dump(sv);
4737             }
4738             SvFAKE_off(sv);
4739             SvREADONLY_off(sv);
4740             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4741             SvPV_set(sv, NULL);
4742             SvLEN_set(sv, 0);
4743             if (flags & SV_COW_DROP_PV) {
4744                 /* OK, so we don't need to copy our buffer.  */
4745                 SvPOK_off(sv);
4746             } else {
4747                 SvGROW(sv, cur + 1);
4748                 Move(pvx,SvPVX(sv),cur,char);
4749                 SvCUR_set(sv, cur);
4750                 *SvEND(sv) = '\0';
4751             }
4752             if (len) {
4753                 sv_release_COW(sv, pvx, next);
4754             } else {
4755                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4756             }
4757             if (DEBUG_C_TEST) {
4758                 sv_dump(sv);
4759             }
4760         }
4761         else if (IN_PERL_RUNTIME)
4762             Perl_croak_no_modify(aTHX);
4763     }
4764 #else
4765     if (SvREADONLY(sv)) {
4766         if (SvIsCOW(sv)) {
4767             const char * const pvx = SvPVX_const(sv);
4768             const STRLEN len = SvCUR(sv);
4769             SvFAKE_off(sv);
4770             SvREADONLY_off(sv);
4771             SvPV_set(sv, NULL);
4772             SvLEN_set(sv, 0);
4773             if (flags & SV_COW_DROP_PV) {
4774                 /* OK, so we don't need to copy our buffer.  */
4775                 SvPOK_off(sv);
4776             } else {
4777                 SvGROW(sv, len + 1);
4778                 Move(pvx,SvPVX(sv),len,char);
4779                 *SvEND(sv) = '\0';
4780             }
4781             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4782         }
4783         else if (IN_PERL_RUNTIME)
4784             Perl_croak_no_modify(aTHX);
4785     }
4786 #endif
4787     if (SvROK(sv))
4788         sv_unref_flags(sv, flags);
4789     else if (SvFAKE(sv) && isGV_with_GP(sv))
4790         sv_unglob(sv, flags);
4791     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4792         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4793            to sv_unglob. We only need it here, so inline it.  */
4794         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4795         SV *const temp = newSV_type(new_type);
4796         void *const temp_p = SvANY(sv);
4797
4798         if (new_type == SVt_PVMG) {
4799             SvMAGIC_set(temp, SvMAGIC(sv));
4800             SvMAGIC_set(sv, NULL);
4801             SvSTASH_set(temp, SvSTASH(sv));
4802             SvSTASH_set(sv, NULL);
4803         }
4804         SvCUR_set(temp, SvCUR(sv));
4805         /* Remember that SvPVX is in the head, not the body. */
4806         if (SvLEN(temp)) {
4807             SvLEN_set(temp, SvLEN(sv));
4808             /* This signals "buffer is owned by someone else" in sv_clear,
4809                which is the least effort way to stop it freeing the buffer.
4810             */
4811             SvLEN_set(sv, SvLEN(sv)+1);
4812         } else {
4813             /* Their buffer is already owned by someone else. */
4814             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4815             SvLEN_set(temp, SvCUR(sv)+1);
4816         }
4817
4818         /* Now swap the rest of the bodies. */
4819
4820         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4821         SvFLAGS(sv) |= new_type;
4822         SvANY(sv) = SvANY(temp);
4823
4824         SvFLAGS(temp) &= ~(SVTYPEMASK);
4825         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4826         SvANY(temp) = temp_p;
4827
4828         SvREFCNT_dec(temp);
4829     }
4830     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
4831 }
4832
4833 /*
4834 =for apidoc sv_chop
4835
4836 Efficient removal of characters from the beginning of the string buffer.
4837 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
4838 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
4839 character of the adjusted string.  Uses the "OOK hack".  On return, only
4840 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
4841
4842 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4843 refer to the same chunk of data.
4844
4845 The unfortunate similarity of this function's name to that of Perl's C<chop>
4846 operator is strictly coincidental.  This function works from the left;
4847 C<chop> works from the right.
4848
4849 =cut
4850 */
4851
4852 void
4853 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4854 {
4855     STRLEN delta;
4856     STRLEN old_delta;
4857     U8 *p;
4858 #ifdef DEBUGGING
4859     const U8 *evacp;
4860     STRLEN evacn;
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     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4874     if (delta > max_delta)
4875         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4876                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4877     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
4878     SV_CHECK_THINKFIRST(sv);
4879     SvPOK_only_UTF8(sv);
4880
4881     if (!SvOOK(sv)) {
4882         if (!SvLEN(sv)) { /* make copy of shared string */
4883             const char *pvx = SvPVX_const(sv);
4884             const STRLEN len = SvCUR(sv);
4885             SvGROW(sv, len + 1);
4886             Move(pvx,SvPVX(sv),len,char);
4887             *SvEND(sv) = '\0';
4888         }
4889         SvOOK_on(sv);
4890         old_delta = 0;
4891     } else {
4892         SvOOK_offset(sv, old_delta);
4893     }
4894     SvLEN_set(sv, SvLEN(sv) - delta);
4895     SvCUR_set(sv, SvCUR(sv) - delta);
4896     SvPV_set(sv, SvPVX(sv) + delta);
4897
4898     p = (U8 *)SvPVX_const(sv);
4899
4900 #ifdef DEBUGGING
4901     /* how many bytes were evacuated?  we will fill them with sentinel
4902        bytes, except for the part holding the new offset of course. */
4903     evacn = delta;
4904     if (old_delta)
4905         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
4906     assert(evacn);
4907     assert(evacn <= delta + old_delta);
4908     evacp = p - evacn;
4909 #endif
4910
4911     delta += old_delta;
4912     assert(delta);
4913     if (delta < 0x100) {
4914         *--p = (U8) delta;
4915     } else {
4916         *--p = 0;
4917         p -= sizeof(STRLEN);
4918         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4919     }
4920
4921 #ifdef DEBUGGING
4922     /* Fill the preceding buffer with sentinals to verify that no-one is
4923        using it.  */
4924     while (p > evacp) {
4925         --p;
4926         *p = (U8)PTR2UV(p);
4927     }
4928 #endif
4929 }
4930
4931 /*
4932 =for apidoc sv_catpvn
4933
4934 Concatenates the string onto the end of the string which is in the SV.  The
4935 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4936 status set, then the bytes appended should be valid UTF-8.
4937 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4938
4939 =for apidoc sv_catpvn_flags
4940
4941 Concatenates the string onto the end of the string which is in the SV.  The
4942 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4943 status set, then the bytes appended should be valid UTF-8.
4944 If C<flags> has the C<SV_SMAGIC> bit set, will
4945 C<mg_set> on C<dsv> afterwards if appropriate.
4946 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4947 in terms of this function.
4948
4949 =cut
4950 */
4951
4952 void
4953 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4954 {
4955     dVAR;
4956     STRLEN dlen;
4957     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4958
4959     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4960     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
4961
4962     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
4963       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
4964          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
4965          dlen = SvCUR(dsv);
4966       }
4967       else SvGROW(dsv, dlen + slen + 1);
4968       if (sstr == dstr)
4969         sstr = SvPVX_const(dsv);
4970       Move(sstr, SvPVX(dsv) + dlen, slen, char);
4971       SvCUR_set(dsv, SvCUR(dsv) + slen);
4972     }
4973     else {
4974         /* We inline bytes_to_utf8, to avoid an extra malloc. */
4975         const char * const send = sstr + slen;
4976         U8 *d;
4977
4978         /* Something this code does not account for, which I think is
4979            impossible; it would require the same pv to be treated as
4980            bytes *and* utf8, which would indicate a bug elsewhere. */
4981         assert(sstr != dstr);
4982
4983         SvGROW(dsv, dlen + slen * 2 + 1);
4984         d = (U8 *)SvPVX(dsv) + dlen;
4985
4986         while (sstr < send) {
4987             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
4988             if (UNI_IS_INVARIANT(uv))
4989                 *d++ = (U8)UTF_TO_NATIVE(uv);
4990             else {
4991                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
4992                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
4993             }
4994         }
4995         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
4996     }
4997     *SvEND(dsv) = '\0';
4998     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4999     SvTAINT(dsv);
5000     if (flags & SV_SMAGIC)
5001         SvSETMAGIC(dsv);
5002 }
5003
5004 /*
5005 =for apidoc sv_catsv
5006
5007 Concatenates the string from SV C<ssv> onto the end of the string in SV
5008 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5009 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5010 C<sv_catsv_nomg>.
5011
5012 =for apidoc sv_catsv_flags
5013
5014 Concatenates the string from SV C<ssv> onto the end of the string in SV
5015 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5016 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5017 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5018 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5019 and C<sv_catsv_mg> are implemented in terms of this function.
5020
5021 =cut */
5022
5023 void
5024 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
5025 {
5026     dVAR;
5027  
5028     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5029
5030     if (ssv) {
5031         STRLEN slen;
5032         const char *spv = SvPV_flags_const(ssv, slen, flags);
5033         if (spv) {
5034             if (flags & SV_GMAGIC)
5035                 SvGETMAGIC(dsv);
5036             sv_catpvn_flags(dsv, spv, slen,
5037                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5038             if (flags & SV_SMAGIC)
5039                 SvSETMAGIC(dsv);
5040         }
5041     }
5042 }
5043
5044 /*
5045 =for apidoc sv_catpv
5046
5047 Concatenates the string onto the end of the string which is in the SV.
5048 If the SV has the UTF-8 status set, then the bytes appended should be
5049 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5050
5051 =cut */
5052
5053 void
5054 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
5055 {
5056     dVAR;
5057     STRLEN len;
5058     STRLEN tlen;
5059     char *junk;
5060
5061     PERL_ARGS_ASSERT_SV_CATPV;
5062
5063     if (!ptr)
5064         return;
5065     junk = SvPV_force(sv, tlen);
5066     len = strlen(ptr);
5067     SvGROW(sv, tlen + len + 1);
5068     if (ptr == junk)
5069         ptr = SvPVX_const(sv);
5070     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5071     SvCUR_set(sv, SvCUR(sv) + len);
5072     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5073     SvTAINT(sv);
5074 }
5075
5076 /*
5077 =for apidoc sv_catpv_flags
5078
5079 Concatenates the string onto the end of the string which is in the SV.
5080 If the SV has the UTF-8 status set, then the bytes appended should
5081 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5082 on the modified SV if appropriate.
5083
5084 =cut
5085 */
5086
5087 void
5088 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5089 {
5090     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5091     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5092 }
5093
5094 /*
5095 =for apidoc sv_catpv_mg
5096
5097 Like C<sv_catpv>, but also handles 'set' magic.
5098
5099 =cut
5100 */
5101
5102 void
5103 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
5104 {
5105     PERL_ARGS_ASSERT_SV_CATPV_MG;
5106
5107     sv_catpv(sv,ptr);
5108     SvSETMAGIC(sv);
5109 }
5110
5111 /*
5112 =for apidoc newSV
5113
5114 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5115 bytes of preallocated string space the SV should have.  An extra byte for a
5116 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5117 space is allocated.)  The reference count for the new SV is set to 1.
5118
5119 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5120 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5121 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5122 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5123 modules supporting older perls.
5124
5125 =cut
5126 */
5127
5128 SV *
5129 Perl_newSV(pTHX_ const STRLEN len)
5130 {
5131     dVAR;
5132     SV *sv;
5133
5134     new_SV(sv);
5135     if (len) {
5136         sv_upgrade(sv, SVt_PV);
5137         SvGROW(sv, len + 1);
5138     }
5139     return sv;
5140 }
5141 /*
5142 =for apidoc sv_magicext
5143
5144 Adds magic to an SV, upgrading it if necessary.  Applies the
5145 supplied vtable and returns a pointer to the magic added.
5146
5147 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5148 In particular, you can add magic to SvREADONLY SVs, and add more than
5149 one instance of the same 'how'.
5150
5151 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5152 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5153 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5154 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5155
5156 (This is now used as a subroutine by C<sv_magic>.)
5157
5158 =cut
5159 */
5160 MAGIC * 
5161 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5162                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5163 {
5164     dVAR;
5165     MAGIC* mg;
5166
5167     PERL_ARGS_ASSERT_SV_MAGICEXT;
5168
5169     SvUPGRADE(sv, SVt_PVMG);
5170     Newxz(mg, 1, MAGIC);
5171     mg->mg_moremagic = SvMAGIC(sv);
5172     SvMAGIC_set(sv, mg);
5173
5174     /* Sometimes a magic contains a reference loop, where the sv and
5175        object refer to each other.  To prevent a reference loop that
5176        would prevent such objects being freed, we look for such loops
5177        and if we find one we avoid incrementing the object refcount.
5178
5179        Note we cannot do this to avoid self-tie loops as intervening RV must
5180        have its REFCNT incremented to keep it in existence.
5181
5182     */
5183     if (!obj || obj == sv ||
5184         how == PERL_MAGIC_arylen ||
5185         how == PERL_MAGIC_symtab ||
5186         (SvTYPE(obj) == SVt_PVGV &&
5187             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5188              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5189              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5190     {
5191         mg->mg_obj = obj;
5192     }
5193     else {
5194         mg->mg_obj = SvREFCNT_inc_simple(obj);
5195         mg->mg_flags |= MGf_REFCOUNTED;
5196     }
5197
5198     /* Normal self-ties simply pass a null object, and instead of
5199        using mg_obj directly, use the SvTIED_obj macro to produce a
5200        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5201        with an RV obj pointing to the glob containing the PVIO.  In
5202        this case, to avoid a reference loop, we need to weaken the
5203        reference.
5204     */
5205
5206     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5207         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5208     {
5209       sv_rvweaken(obj);
5210     }
5211
5212     mg->mg_type = how;
5213     mg->mg_len = namlen;
5214     if (name) {
5215         if (namlen > 0)
5216             mg->mg_ptr = savepvn(name, namlen);
5217         else if (namlen == HEf_SVKEY) {
5218             /* Yes, this is casting away const. This is only for the case of
5219                HEf_SVKEY. I think we need to document this aberation of the
5220                constness of the API, rather than making name non-const, as
5221                that change propagating outwards a long way.  */
5222             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5223         } else
5224             mg->mg_ptr = (char *) name;
5225     }
5226     mg->mg_virtual = (MGVTBL *) vtable;
5227
5228     mg_magical(sv);
5229     return mg;
5230 }
5231
5232 /*
5233 =for apidoc sv_magic
5234
5235 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5236 necessary, then adds a new magic item of type C<how> to the head of the
5237 magic list.
5238
5239 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5240 handling of the C<name> and C<namlen> arguments.
5241
5242 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5243 to add more than one instance of the same 'how'.
5244
5245 =cut
5246 */
5247
5248 void
5249 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5250              const char *const name, const I32 namlen)
5251 {
5252     dVAR;
5253     const MGVTBL *vtable;
5254     MAGIC* mg;
5255     unsigned int flags;
5256     unsigned int vtable_index;
5257
5258     PERL_ARGS_ASSERT_SV_MAGIC;
5259
5260     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5261         || ((flags = PL_magic_data[how]),
5262             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5263             > magic_vtable_max))
5264         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5265
5266     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5267        Useful for attaching extension internal data to perl vars.
5268        Note that multiple extensions may clash if magical scalars
5269        etc holding private data from one are passed to another. */
5270
5271     vtable = (vtable_index == magic_vtable_max)
5272         ? NULL : PL_magic_vtables + vtable_index;
5273
5274 #ifdef PERL_OLD_COPY_ON_WRITE
5275     if (SvIsCOW(sv))
5276         sv_force_normal_flags(sv, 0);
5277 #endif
5278     if (SvREADONLY(sv)) {
5279         if (
5280             /* its okay to attach magic to shared strings */
5281             !SvIsCOW(sv)
5282
5283             && IN_PERL_RUNTIME
5284             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5285            )
5286         {
5287             Perl_croak_no_modify(aTHX);
5288         }
5289     }
5290     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5291         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5292             /* sv_magic() refuses to add a magic of the same 'how' as an
5293                existing one
5294              */
5295             if (how == PERL_MAGIC_taint)
5296                 mg->mg_len |= 1;
5297             return;
5298         }
5299     }
5300
5301     /* Rest of work is done else where */
5302     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5303
5304     switch (how) {
5305     case PERL_MAGIC_taint:
5306         mg->mg_len = 1;
5307         break;
5308     case PERL_MAGIC_ext:
5309     case PERL_MAGIC_dbfile:
5310         SvRMAGICAL_on(sv);
5311         break;
5312     }
5313 }
5314
5315 static int
5316 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5317 {
5318     MAGIC* mg;
5319     MAGIC** mgp;
5320
5321     assert(flags <= 1);
5322
5323     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5324         return 0;
5325     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5326     for (mg = *mgp; mg; mg = *mgp) {
5327         const MGVTBL* const virt = mg->mg_virtual;
5328         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5329             *mgp = mg->mg_moremagic;
5330             if (virt && virt->svt_free)
5331                 virt->svt_free(aTHX_ sv, mg);
5332             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5333                 if (mg->mg_len > 0)
5334                     Safefree(mg->mg_ptr);
5335                 else if (mg->mg_len == HEf_SVKEY)
5336                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5337                 else if (mg->mg_type == PERL_MAGIC_utf8)
5338                     Safefree(mg->mg_ptr);
5339             }
5340             if (mg->mg_flags & MGf_REFCOUNTED)
5341                 SvREFCNT_dec(mg->mg_obj);
5342             Safefree(mg);
5343         }
5344         else
5345             mgp = &mg->mg_moremagic;
5346     }
5347     if (SvMAGIC(sv)) {
5348         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5349             mg_magical(sv);     /*    else fix the flags now */
5350     }
5351     else {
5352         SvMAGICAL_off(sv);
5353         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5354     }
5355     return 0;
5356 }
5357
5358 /*
5359 =for apidoc sv_unmagic
5360
5361 Removes all magic of type C<type> from an SV.
5362
5363 =cut
5364 */
5365
5366 int
5367 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5368 {
5369     PERL_ARGS_ASSERT_SV_UNMAGIC;
5370     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5371 }
5372
5373 /*
5374 =for apidoc sv_unmagicext
5375
5376 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5377
5378 =cut
5379 */
5380
5381 int
5382 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5383 {
5384     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5385     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5386 }
5387
5388 /*
5389 =for apidoc sv_rvweaken
5390
5391 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5392 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5393 push a back-reference to this RV onto the array of backreferences
5394 associated with that magic.  If the RV is magical, set magic will be
5395 called after the RV is cleared.
5396
5397 =cut
5398 */
5399
5400 SV *
5401 Perl_sv_rvweaken(pTHX_ SV *const sv)
5402 {
5403     SV *tsv;
5404
5405     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5406
5407     if (!SvOK(sv))  /* let undefs pass */
5408         return sv;
5409     if (!SvROK(sv))
5410         Perl_croak(aTHX_ "Can't weaken a nonreference");
5411     else if (SvWEAKREF(sv)) {
5412         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5413         return sv;
5414     }
5415     else if (SvREADONLY(sv)) croak_no_modify();
5416     tsv = SvRV(sv);
5417     Perl_sv_add_backref(aTHX_ tsv, sv);
5418     SvWEAKREF_on(sv);
5419     SvREFCNT_dec(tsv);
5420     return sv;
5421 }
5422
5423 /* Give tsv backref magic if it hasn't already got it, then push a
5424  * back-reference to sv onto the array associated with the backref magic.
5425  *
5426  * As an optimisation, if there's only one backref and it's not an AV,
5427  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5428  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5429  * active.)
5430  */
5431
5432 /* A discussion about the backreferences array and its refcount:
5433  *
5434  * The AV holding the backreferences is pointed to either as the mg_obj of
5435  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5436  * xhv_backreferences field. The array is created with a refcount
5437  * of 2. This means that if during global destruction the array gets
5438  * picked on before its parent to have its refcount decremented by the
5439  * random zapper, it won't actually be freed, meaning it's still there for
5440  * when its parent gets freed.
5441  *
5442  * When the parent SV is freed, the extra ref is killed by
5443  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5444  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5445  *
5446  * When a single backref SV is stored directly, it is not reference
5447  * counted.
5448  */
5449
5450 void
5451 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5452 {
5453     dVAR;
5454     SV **svp;
5455     AV *av = NULL;
5456     MAGIC *mg = NULL;
5457
5458     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5459
5460     /* find slot to store array or singleton backref */
5461
5462     if (SvTYPE(tsv) == SVt_PVHV) {
5463         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5464     } else {
5465         if (! ((mg =
5466             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5467         {
5468             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5469             mg = mg_find(tsv, PERL_MAGIC_backref);
5470         }
5471         svp = &(mg->mg_obj);
5472     }
5473
5474     /* create or retrieve the array */
5475
5476     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5477         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5478     ) {
5479         /* create array */
5480         av = newAV();
5481         AvREAL_off(av);
5482         SvREFCNT_inc_simple_void(av);
5483         /* av now has a refcnt of 2; see discussion above */
5484         if (*svp) {
5485             /* move single existing backref to the array */
5486             av_extend(av, 1);
5487             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5488         }
5489         *svp = (SV*)av;
5490         if (mg)
5491             mg->mg_flags |= MGf_REFCOUNTED;
5492     }
5493     else
5494         av = MUTABLE_AV(*svp);
5495
5496     if (!av) {
5497         /* optimisation: store single backref directly in HvAUX or mg_obj */
5498         *svp = sv;
5499         return;
5500     }
5501     /* push new backref */
5502     assert(SvTYPE(av) == SVt_PVAV);
5503     if (AvFILLp(av) >= AvMAX(av)) {
5504         av_extend(av, AvFILLp(av)+1);
5505     }
5506     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5507 }
5508
5509 /* delete a back-reference to ourselves from the backref magic associated
5510  * with the SV we point to.
5511  */
5512
5513 void
5514 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5515 {
5516     dVAR;
5517     SV **svp = NULL;
5518
5519     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5520
5521     if (SvTYPE(tsv) == SVt_PVHV) {
5522         if (SvOOK(tsv))
5523             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5524     }
5525     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5526         /* It's possible for the the last (strong) reference to tsv to have
5527            become freed *before* the last thing holding a weak reference.
5528            If both survive longer than the backreferences array, then when
5529            the referent's reference count drops to 0 and it is freed, it's
5530            not able to chase the backreferences, so they aren't NULLed.
5531
5532            For example, a CV holds a weak reference to its stash. If both the
5533            CV and the stash survive longer than the backreferences array,
5534            and the CV gets picked for the SvBREAK() treatment first,
5535            *and* it turns out that the stash is only being kept alive because
5536            of an our variable in the pad of the CV, then midway during CV
5537            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5538            It ends up pointing to the freed HV. Hence it's chased in here, and
5539            if this block wasn't here, it would hit the !svp panic just below.
5540
5541            I don't believe that "better" destruction ordering is going to help
5542            here - during global destruction there's always going to be the
5543            chance that something goes out of order. We've tried to make it
5544            foolproof before, and it only resulted in evolutionary pressure on
5545            fools. Which made us look foolish for our hubris. :-(
5546         */
5547         return;
5548     }
5549     else {
5550         MAGIC *const mg
5551             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5552         svp =  mg ? &(mg->mg_obj) : NULL;
5553     }
5554
5555     if (!svp)
5556         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5557     if (!*svp) {
5558         /* It's possible that sv is being freed recursively part way through the
5559            freeing of tsv. If this happens, the backreferences array of tsv has
5560            already been freed, and so svp will be NULL. If this is the case,
5561            we should not panic. Instead, nothing needs doing, so return.  */
5562         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5563             return;
5564         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5565                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5566     }
5567
5568     if (SvTYPE(*svp) == SVt_PVAV) {
5569 #ifdef DEBUGGING
5570         int count = 1;
5571 #endif
5572         AV * const av = (AV*)*svp;
5573         SSize_t fill;
5574         assert(!SvIS_FREED(av));
5575         fill = AvFILLp(av);
5576         assert(fill > -1);
5577         svp = AvARRAY(av);
5578         /* for an SV with N weak references to it, if all those
5579          * weak refs are deleted, then sv_del_backref will be called
5580          * N times and O(N^2) compares will be done within the backref
5581          * array. To ameliorate this potential slowness, we:
5582          * 1) make sure this code is as tight as possible;
5583          * 2) when looking for SV, look for it at both the head and tail of the
5584          *    array first before searching the rest, since some create/destroy
5585          *    patterns will cause the backrefs to be freed in order.
5586          */
5587         if (*svp == sv) {
5588             AvARRAY(av)++;
5589             AvMAX(av)--;
5590         }
5591         else {
5592             SV **p = &svp[fill];
5593             SV *const topsv = *p;
5594             if (topsv != sv) {
5595 #ifdef DEBUGGING
5596                 count = 0;
5597 #endif
5598                 while (--p > svp) {
5599                     if (*p == sv) {
5600                         /* We weren't the last entry.
5601                            An unordered list has this property that you
5602                            can take the last element off the end to fill
5603                            the hole, and it's still an unordered list :-)
5604                         */
5605                         *p = topsv;
5606 #ifdef DEBUGGING
5607                         count++;
5608 #else
5609                         break; /* should only be one */
5610 #endif
5611                     }
5612                 }
5613             }
5614         }
5615         assert(count ==1);
5616         AvFILLp(av) = fill-1;
5617     }
5618     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5619         /* freed AV; skip */
5620     }
5621     else {
5622         /* optimisation: only a single backref, stored directly */
5623         if (*svp != sv)
5624             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5625         *svp = NULL;
5626     }
5627
5628 }
5629
5630 void
5631 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5632 {
5633     SV **svp;
5634     SV **last;
5635     bool is_array;
5636
5637     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5638
5639     if (!av)
5640         return;
5641
5642     /* after multiple passes through Perl_sv_clean_all() for a thingy
5643      * that has badly leaked, the backref array may have gotten freed,
5644      * since we only protect it against 1 round of cleanup */
5645     if (SvIS_FREED(av)) {
5646         if (PL_in_clean_all) /* All is fair */
5647             return;
5648         Perl_croak(aTHX_
5649                    "panic: magic_killbackrefs (freed backref AV/SV)");
5650     }
5651
5652
5653     is_array = (SvTYPE(av) == SVt_PVAV);
5654     if (is_array) {
5655         assert(!SvIS_FREED(av));
5656         svp = AvARRAY(av);
5657         if (svp)
5658             last = svp + AvFILLp(av);
5659     }
5660     else {
5661         /* optimisation: only a single backref, stored directly */
5662         svp = (SV**)&av;
5663         last = svp;
5664     }
5665
5666     if (svp) {
5667         while (svp <= last) {
5668             if (*svp) {
5669                 SV *const referrer = *svp;
5670                 if (SvWEAKREF(referrer)) {
5671                     /* XXX Should we check that it hasn't changed? */
5672                     assert(SvROK(referrer));
5673                     SvRV_set(referrer, 0);
5674                     SvOK_off(referrer);
5675                     SvWEAKREF_off(referrer);
5676                     SvSETMAGIC(referrer);
5677                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5678                            SvTYPE(referrer) == SVt_PVLV) {
5679                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5680                     /* You lookin' at me?  */
5681                     assert(GvSTASH(referrer));
5682                     assert(GvSTASH(referrer) == (const HV *)sv);
5683                     GvSTASH(referrer) = 0;
5684                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5685                            SvTYPE(referrer) == SVt_PVFM) {
5686                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5687                         /* You lookin' at me?  */
5688                         assert(CvSTASH(referrer));
5689                         assert(CvSTASH(referrer) == (const HV *)sv);
5690                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5691                     }
5692                     else {
5693                         assert(SvTYPE(sv) == SVt_PVGV);
5694                         /* You lookin' at me?  */
5695                         assert(CvGV(referrer));
5696                         assert(CvGV(referrer) == (const GV *)sv);
5697                         anonymise_cv_maybe(MUTABLE_GV(sv),
5698                                                 MUTABLE_CV(referrer));
5699                     }
5700
5701                 } else {
5702                     Perl_croak(aTHX_
5703                                "panic: magic_killbackrefs (flags=%"UVxf")",
5704                                (UV)SvFLAGS(referrer));
5705                 }
5706
5707                 if (is_array)
5708                     *svp = NULL;
5709             }
5710             svp++;
5711         }
5712     }
5713     if (is_array) {
5714         AvFILLp(av) = -1;
5715         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5716     }
5717     return;
5718 }
5719
5720 /*
5721 =for apidoc sv_insert
5722
5723 Inserts a string at the specified offset/length within the SV.  Similar to
5724 the Perl substr() function.  Handles get magic.
5725
5726 =for apidoc sv_insert_flags
5727
5728 Same as C<sv_insert>, but the extra C<flags> are passed to the
5729 C<SvPV_force_flags> that applies to C<bigstr>.
5730
5731 =cut
5732 */
5733
5734 void
5735 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5736 {
5737     dVAR;
5738     char *big;
5739     char *mid;
5740     char *midend;
5741     char *bigend;
5742     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
5743     STRLEN curlen;
5744
5745     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5746
5747     if (!bigstr)
5748         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5749     SvPV_force_flags(bigstr, curlen, flags);
5750     (void)SvPOK_only_UTF8(bigstr);
5751     if (offset + len > curlen) {
5752         SvGROW(bigstr, offset+len+1);
5753         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5754         SvCUR_set(bigstr, offset+len);
5755     }
5756
5757     SvTAINT(bigstr);
5758     i = littlelen - len;
5759     if (i > 0) {                        /* string might grow */
5760         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5761         mid = big + offset + len;
5762         midend = bigend = big + SvCUR(bigstr);
5763         bigend += i;
5764         *bigend = '\0';
5765         while (midend > mid)            /* shove everything down */
5766             *--bigend = *--midend;
5767         Move(little,big+offset,littlelen,char);
5768         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5769         SvSETMAGIC(bigstr);
5770         return;
5771     }
5772     else if (i == 0) {
5773         Move(little,SvPVX(bigstr)+offset,len,char);
5774         SvSETMAGIC(bigstr);
5775         return;
5776     }
5777
5778     big = SvPVX(bigstr);
5779     mid = big + offset;
5780     midend = mid + len;
5781     bigend = big + SvCUR(bigstr);
5782
5783     if (midend > bigend)
5784         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
5785                    midend, bigend);
5786
5787     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5788         if (littlelen) {
5789             Move(little, mid, littlelen,char);
5790             mid += littlelen;
5791         }
5792         i = bigend - midend;
5793         if (i > 0) {
5794             Move(midend, mid, i,char);
5795             mid += i;
5796         }
5797         *mid = '\0';
5798         SvCUR_set(bigstr, mid - big);
5799     }
5800     else if ((i = mid - big)) { /* faster from front */
5801         midend -= littlelen;
5802         mid = midend;
5803         Move(big, midend - i, i, char);
5804         sv_chop(bigstr,midend-i);
5805         if (littlelen)
5806             Move(little, mid, littlelen,char);
5807     }
5808     else if (littlelen) {
5809         midend -= littlelen;
5810         sv_chop(bigstr,midend);
5811         Move(little,midend,littlelen,char);
5812     }
5813     else {
5814         sv_chop(bigstr,midend);
5815     }
5816     SvSETMAGIC(bigstr);
5817 }
5818
5819 /*
5820 =for apidoc sv_replace
5821
5822 Make the first argument a copy of the second, then delete the original.
5823 The target SV physically takes over ownership of the body of the source SV
5824 and inherits its flags; however, the target keeps any magic it owns,
5825 and any magic in the source is discarded.
5826 Note that this is a rather specialist SV copying operation; most of the
5827 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5828
5829 =cut
5830 */
5831
5832 void
5833 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5834 {
5835     dVAR;
5836     const U32 refcnt = SvREFCNT(sv);
5837
5838     PERL_ARGS_ASSERT_SV_REPLACE;
5839
5840     SV_CHECK_THINKFIRST_COW_DROP(sv);
5841     if (SvREFCNT(nsv) != 1) {
5842         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5843                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5844     }
5845     if (SvMAGICAL(sv)) {
5846         if (SvMAGICAL(nsv))
5847             mg_free(nsv);
5848         else
5849             sv_upgrade(nsv, SVt_PVMG);
5850         SvMAGIC_set(nsv, SvMAGIC(sv));
5851         SvFLAGS(nsv) |= SvMAGICAL(sv);
5852         SvMAGICAL_off(sv);
5853         SvMAGIC_set(sv, NULL);
5854     }
5855     SvREFCNT(sv) = 0;
5856     sv_clear(sv);
5857     assert(!SvREFCNT(sv));
5858 #ifdef DEBUG_LEAKING_SCALARS
5859     sv->sv_flags  = nsv->sv_flags;
5860     sv->sv_any    = nsv->sv_any;
5861     sv->sv_refcnt = nsv->sv_refcnt;
5862     sv->sv_u      = nsv->sv_u;
5863 #else
5864     StructCopy(nsv,sv,SV);
5865 #endif
5866     if(SvTYPE(sv) == SVt_IV) {
5867         SvANY(sv)
5868             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5869     }
5870         
5871
5872 #ifdef PERL_OLD_COPY_ON_WRITE
5873     if (SvIsCOW_normal(nsv)) {
5874         /* We need to follow the pointers around the loop to make the
5875            previous SV point to sv, rather than nsv.  */
5876         SV *next;
5877         SV *current = nsv;
5878         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5879             assert(next);
5880             current = next;
5881             assert(SvPVX_const(current) == SvPVX_const(nsv));
5882         }
5883         /* Make the SV before us point to the SV after us.  */
5884         if (DEBUG_C_TEST) {
5885             PerlIO_printf(Perl_debug_log, "previous is\n");
5886             sv_dump(current);
5887             PerlIO_printf(Perl_debug_log,
5888                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5889                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5890         }
5891         SV_COW_NEXT_SV_SET(current, sv);
5892     }
5893 #endif
5894     SvREFCNT(sv) = refcnt;
5895     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5896     SvREFCNT(nsv) = 0;
5897     del_SV(nsv);
5898 }
5899
5900 /* We're about to free a GV which has a CV that refers back to us.
5901  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5902  * field) */
5903
5904 STATIC void
5905 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5906 {
5907     SV *gvname;
5908     GV *anongv;
5909
5910     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5911
5912     /* be assertive! */
5913     assert(SvREFCNT(gv) == 0);
5914     assert(isGV(gv) && isGV_with_GP(gv));
5915     assert(GvGP(gv));
5916     assert(!CvANON(cv));
5917     assert(CvGV(cv) == gv);
5918     assert(!CvNAMED(cv));
5919
5920     /* will the CV shortly be freed by gp_free() ? */
5921     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
5922         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
5923         return;
5924     }
5925
5926     /* if not, anonymise: */
5927     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
5928                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
5929                     : newSVpvn_flags( "__ANON__", 8, 0 );
5930     sv_catpvs(gvname, "::__ANON__");
5931     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5932     SvREFCNT_dec(gvname);
5933
5934     CvANON_on(cv);
5935     CvCVGV_RC_on(cv);
5936     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
5937 }
5938
5939
5940 /*
5941 =for apidoc sv_clear
5942
5943 Clear an SV: call any destructors, free up any memory used by the body,
5944 and free the body itself.  The SV's head is I<not> freed, although
5945 its type is set to all 1's so that it won't inadvertently be assumed
5946 to be live during global destruction etc.
5947 This function should only be called when REFCNT is zero.  Most of the time
5948 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5949 instead.
5950
5951 =cut
5952 */
5953
5954 void
5955 Perl_sv_clear(pTHX_ SV *const orig_sv)
5956 {
5957     dVAR;
5958     HV *stash;
5959     U32 type;
5960     const struct body_details *sv_type_details;
5961     SV* iter_sv = NULL;
5962     SV* next_sv = NULL;
5963     SV *sv = orig_sv;
5964     STRLEN hash_index;
5965
5966     PERL_ARGS_ASSERT_SV_CLEAR;
5967
5968     /* within this loop, sv is the SV currently being freed, and
5969      * iter_sv is the most recent AV or whatever that's being iterated
5970      * over to provide more SVs */
5971
5972     while (sv) {
5973
5974         type = SvTYPE(sv);
5975
5976         assert(SvREFCNT(sv) == 0);
5977         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
5978
5979         if (type <= SVt_IV) {
5980             /* See the comment in sv.h about the collusion between this
5981              * early return and the overloading of the NULL slots in the
5982              * size table.  */
5983             if (SvROK(sv))
5984                 goto free_rv;
5985             SvFLAGS(sv) &= SVf_BREAK;
5986             SvFLAGS(sv) |= SVTYPEMASK;
5987             goto free_head;
5988         }
5989
5990         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
5991
5992         if (type >= SVt_PVMG) {
5993             if (SvOBJECT(sv)) {
5994                 if (!curse(sv, 1)) goto get_next_sv;
5995                 type = SvTYPE(sv); /* destructor may have changed it */
5996             }
5997             /* Free back-references before magic, in case the magic calls
5998              * Perl code that has weak references to sv. */
5999             if (type == SVt_PVHV) {
6000                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6001                 if (SvMAGIC(sv))
6002                     mg_free(sv);
6003             }
6004             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6005                 SvREFCNT_dec(SvOURSTASH(sv));
6006             } else if (SvMAGIC(sv)) {
6007                 /* Free back-references before other types of magic. */
6008                 sv_unmagic(sv, PERL_MAGIC_backref);
6009                 mg_free(sv);
6010             }
6011             SvMAGICAL_off(sv);
6012             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6013                 SvREFCNT_dec(SvSTASH(sv));
6014         }
6015         switch (type) {
6016             /* case SVt_BIND: */
6017         case SVt_PVIO:
6018             if (IoIFP(sv) &&
6019                 IoIFP(sv) != PerlIO_stdin() &&
6020                 IoIFP(sv) != PerlIO_stdout() &&
6021                 IoIFP(sv) != PerlIO_stderr() &&
6022                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6023             {
6024                 io_close(MUTABLE_IO(sv), FALSE);
6025             }
6026             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6027                 PerlDir_close(IoDIRP(sv));
6028             IoDIRP(sv) = (DIR*)NULL;
6029             Safefree(IoTOP_NAME(sv));
6030             Safefree(IoFMT_NAME(sv));
6031             Safefree(IoBOTTOM_NAME(sv));
6032             if ((const GV *)sv == PL_statgv)
6033                 PL_statgv = NULL;
6034             goto freescalar;
6035         case SVt_REGEXP:
6036             /* FIXME for plugins */
6037             pregfree2((REGEXP*) sv);
6038             goto freescalar;
6039         case SVt_PVCV:
6040         case SVt_PVFM:
6041             cv_undef(MUTABLE_CV(sv));
6042             /* If we're in a stash, we don't own a reference to it.
6043              * However it does have a back reference to us, which needs to
6044              * be cleared.  */
6045             if ((stash = CvSTASH(sv)))
6046                 sv_del_backref(MUTABLE_SV(stash), sv);
6047             goto freescalar;
6048         case SVt_PVHV:
6049             if (PL_last_swash_hv == (const HV *)sv) {
6050                 PL_last_swash_hv = NULL;
6051             }
6052             if (HvTOTALKEYS((HV*)sv) > 0) {
6053                 const char *name;
6054                 /* this statement should match the one at the beginning of
6055                  * hv_undef_flags() */
6056                 if (   PL_phase != PERL_PHASE_DESTRUCT
6057                     && (name = HvNAME((HV*)sv)))
6058                 {
6059                     if (PL_stashcache) {
6060                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6061                                      sv));
6062                         (void)hv_delete(PL_stashcache, name,
6063                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6064                     }
6065                     hv_name_set((HV*)sv, NULL, 0, 0);
6066                 }
6067
6068                 /* save old iter_sv in unused SvSTASH field */
6069                 assert(!SvOBJECT(sv));
6070                 SvSTASH(sv) = (HV*)iter_sv;
6071                 iter_sv = sv;
6072
6073                 /* save old hash_index in unused SvMAGIC field */
6074                 assert(!SvMAGICAL(sv));
6075                 assert(!SvMAGIC(sv));
6076                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6077                 hash_index = 0;
6078
6079                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6080                 goto get_next_sv; /* process this new sv */
6081             }
6082             /* free empty hash */
6083             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6084             assert(!HvARRAY((HV*)sv));
6085             break;
6086         case SVt_PVAV:
6087             {
6088                 AV* av = MUTABLE_AV(sv);
6089                 if (PL_comppad == av) {
6090                     PL_comppad = NULL;
6091                     PL_curpad = NULL;
6092                 }
6093                 if (AvREAL(av) && AvFILLp(av) > -1) {
6094                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6095                     /* save old iter_sv in top-most slot of AV,
6096                      * and pray that it doesn't get wiped in the meantime */
6097                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6098                     iter_sv = sv;
6099                     goto get_next_sv; /* process this new sv */
6100                 }
6101                 Safefree(AvALLOC(av));
6102             }
6103
6104             break;
6105         case SVt_PVLV:
6106             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6107                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6108                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6109                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6110             }
6111             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6112                 SvREFCNT_dec(LvTARG(sv));
6113         case SVt_PVGV:
6114             if (isGV_with_GP(sv)) {
6115                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6116                    && HvENAME_get(stash))
6117                     mro_method_changed_in(stash);
6118                 gp_free(MUTABLE_GV(sv));
6119                 if (GvNAME_HEK(sv))
6120                     unshare_hek(GvNAME_HEK(sv));
6121                 /* If we're in a stash, we don't own a reference to it.
6122                  * However it does have a back reference to us, which
6123                  * needs to be cleared.  */
6124                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6125                         sv_del_backref(MUTABLE_SV(stash), sv);
6126             }
6127             /* FIXME. There are probably more unreferenced pointers to SVs
6128              * in the interpreter struct that we should check and tidy in
6129              * a similar fashion to this:  */
6130             /* See also S_sv_unglob, which does the same thing. */
6131             if ((const GV *)sv == PL_last_in_gv)
6132                 PL_last_in_gv = NULL;
6133             else if ((const GV *)sv == PL_statgv)
6134                 PL_statgv = NULL;
6135         case SVt_PVMG:
6136         case SVt_PVNV:
6137         case SVt_PVIV:
6138         case SVt_PV:
6139           freescalar:
6140             /* Don't bother with SvOOK_off(sv); as we're only going to
6141              * free it.  */
6142             if (SvOOK(sv)) {
6143                 STRLEN offset;
6144                 SvOOK_offset(sv, offset);
6145                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6146                 /* Don't even bother with turning off the OOK flag.  */
6147             }
6148             if (SvROK(sv)) {
6149             free_rv:
6150                 {
6151                     SV * const target = SvRV(sv);
6152                     if (SvWEAKREF(sv))
6153                         sv_del_backref(target, sv);
6154                     else
6155                         next_sv = target;
6156                 }
6157             }
6158 #ifdef PERL_OLD_COPY_ON_WRITE
6159             else if (SvPVX_const(sv)
6160                      && !(SvTYPE(sv) == SVt_PVIO
6161                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6162             {
6163                 if (SvIsCOW(sv)) {
6164                     if (DEBUG_C_TEST) {
6165                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6166                         sv_dump(sv);
6167                     }
6168                     if (SvLEN(sv)) {
6169                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6170                     } else {
6171                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6172                     }
6173
6174                     SvFAKE_off(sv);
6175                 } else if (SvLEN(sv)) {
6176                     Safefree(SvPVX_mutable(sv));
6177                 }
6178             }
6179 #else
6180             else if (SvPVX_const(sv) && SvLEN(sv)
6181                      && !(SvTYPE(sv) == SVt_PVIO
6182                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6183                 Safefree(SvPVX_mutable(sv));
6184             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6185                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6186                 SvFAKE_off(sv);
6187             }
6188 #endif
6189             break;
6190         case SVt_NV:
6191             break;
6192         }
6193
6194       free_body:
6195
6196         SvFLAGS(sv) &= SVf_BREAK;
6197         SvFLAGS(sv) |= SVTYPEMASK;
6198
6199         sv_type_details = bodies_by_type + type;
6200         if (sv_type_details->arena) {
6201             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6202                      &PL_body_roots[type]);
6203         }
6204         else if (sv_type_details->body_size) {
6205             safefree(SvANY(sv));
6206         }
6207
6208       free_head:
6209         /* caller is responsible for freeing the head of the original sv */
6210         if (sv != orig_sv && !SvREFCNT(sv))
6211             del_SV(sv);
6212
6213         /* grab and free next sv, if any */
6214       get_next_sv:
6215         while (1) {
6216             sv = NULL;
6217             if (next_sv) {
6218                 sv = next_sv;
6219                 next_sv = NULL;
6220             }
6221             else if (!iter_sv) {
6222                 break;
6223             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6224                 AV *const av = (AV*)iter_sv;
6225                 if (AvFILLp(av) > -1) {
6226                     sv = AvARRAY(av)[AvFILLp(av)--];
6227                 }
6228                 else { /* no more elements of current AV to free */
6229                     sv = iter_sv;
6230                     type = SvTYPE(sv);
6231                     /* restore previous value, squirrelled away */
6232                     iter_sv = AvARRAY(av)[AvMAX(av)];
6233                     Safefree(AvALLOC(av));
6234                     goto free_body;
6235                 }
6236             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6237                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6238                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6239                     /* no more elements of current HV to free */
6240                     sv = iter_sv;
6241                     type = SvTYPE(sv);
6242                     /* Restore previous values of iter_sv and hash_index,
6243                      * squirrelled away */
6244                     assert(!SvOBJECT(sv));
6245                     iter_sv = (SV*)SvSTASH(sv);
6246                     assert(!SvMAGICAL(sv));
6247                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6248 #ifdef DEBUGGING
6249                     /* perl -DA does not like rubbish in SvMAGIC. */
6250                     SvMAGIC_set(sv, 0);
6251 #endif
6252
6253                     /* free any remaining detritus from the hash struct */
6254                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6255                     assert(!HvARRAY((HV*)sv));
6256                     goto free_body;
6257                 }
6258             }
6259
6260             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6261
6262             if (!sv)
6263                 continue;
6264             if (!SvREFCNT(sv)) {
6265                 sv_free(sv);
6266                 continue;
6267             }
6268             if (--(SvREFCNT(sv)))
6269                 continue;
6270 #ifdef DEBUGGING
6271             if (SvTEMP(sv)) {
6272                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6273                          "Attempt to free temp prematurely: SV 0x%"UVxf
6274                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6275                 continue;
6276             }
6277 #endif
6278             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6279                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6280                 SvREFCNT(sv) = (~(U32)0)/2;
6281                 continue;
6282             }
6283             break;
6284         } /* while 1 */
6285
6286     } /* while sv */
6287 }
6288
6289 /* This routine curses the sv itself, not the object referenced by sv. So
6290    sv does not have to be ROK. */
6291
6292 static bool
6293 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6294     dVAR;
6295
6296     PERL_ARGS_ASSERT_CURSE;
6297     assert(SvOBJECT(sv));
6298
6299     if (PL_defstash &&  /* Still have a symbol table? */
6300         SvDESTROYABLE(sv))
6301     {
6302         dSP;
6303         HV* stash;
6304         do {
6305             CV* destructor;
6306             stash = SvSTASH(sv);
6307             destructor = StashHANDLER(stash,DESTROY);
6308             if (destructor
6309                 /* A constant subroutine can have no side effects, so
6310                    don't bother calling it.  */
6311                 && !CvCONST(destructor)
6312                 /* Don't bother calling an empty destructor or one that
6313                    returns immediately. */
6314                 && (CvISXSUB(destructor)
6315                 || (CvSTART(destructor)
6316                     && (CvSTART(destructor)->op_next->op_type
6317                                         != OP_LEAVESUB)
6318                     && (CvSTART(destructor)->op_next->op_type
6319                                         != OP_PUSHMARK
6320                         || CvSTART(destructor)->op_next->op_next->op_type
6321                                         != OP_RETURN
6322                        )
6323                    ))
6324                )
6325             {
6326                 SV* const tmpref = newRV(sv);
6327                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6328                 ENTER;
6329                 PUSHSTACKi(PERLSI_DESTROY);
6330                 EXTEND(SP, 2);
6331                 PUSHMARK(SP);
6332                 PUSHs(tmpref);
6333                 PUTBACK;
6334                 call_sv(MUTABLE_SV(destructor),
6335                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6336                 POPSTACK;
6337                 SPAGAIN;
6338                 LEAVE;
6339                 if(SvREFCNT(tmpref) < 2) {
6340                     /* tmpref is not kept alive! */
6341                     SvREFCNT(sv)--;
6342                     SvRV_set(tmpref, NULL);
6343                     SvROK_off(tmpref);
6344                 }
6345                 SvREFCNT_dec(tmpref);
6346             }
6347         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6348
6349
6350         if (check_refcnt && SvREFCNT(sv)) {
6351             if (PL_in_clean_objs)
6352                 Perl_croak(aTHX_
6353                   "DESTROY created new reference to dead object '%"HEKf"'",
6354                    HEKfARG(HvNAME_HEK(stash)));
6355             /* DESTROY gave object new lease on life */
6356             return FALSE;
6357         }
6358     }
6359
6360     if (SvOBJECT(sv)) {
6361         SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6362         SvOBJECT_off(sv);       /* Curse the object. */
6363         if (SvTYPE(sv) != SVt_PVIO)
6364             --PL_sv_objcount;/* XXX Might want something more general */
6365     }
6366     return TRUE;
6367 }
6368
6369 /*
6370 =for apidoc sv_newref
6371
6372 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6373 instead.
6374
6375 =cut
6376 */
6377
6378 SV *
6379 Perl_sv_newref(pTHX_ SV *const sv)
6380 {
6381     PERL_UNUSED_CONTEXT;
6382     if (sv)
6383         (SvREFCNT(sv))++;
6384     return sv;
6385 }
6386
6387 /*
6388 =for apidoc sv_free
6389
6390 Decrement an SV's reference count, and if it drops to zero, call
6391 C<sv_clear> to invoke destructors and free up any memory used by
6392 the body; finally, deallocate the SV's head itself.
6393 Normally called via a wrapper macro C<SvREFCNT_dec>.
6394
6395 =cut
6396 */
6397
6398 void
6399 Perl_sv_free(pTHX_ SV *const sv)
6400 {
6401     dVAR;
6402     if (!sv)
6403         return;
6404     if (SvREFCNT(sv) == 0) {
6405         if (SvFLAGS(sv) & SVf_BREAK)
6406             /* this SV's refcnt has been artificially decremented to
6407              * trigger cleanup */
6408             return;
6409         if (PL_in_clean_all) /* All is fair */
6410             return;
6411         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6412             /* make sure SvREFCNT(sv)==0 happens very seldom */
6413             SvREFCNT(sv) = (~(U32)0)/2;
6414             return;
6415         }
6416         if (ckWARN_d(WARN_INTERNAL)) {
6417 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6418             Perl_dump_sv_child(aTHX_ sv);
6419 #else
6420   #ifdef DEBUG_LEAKING_SCALARS
6421             sv_dump(sv);
6422   #endif
6423 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6424             if (PL_warnhook == PERL_WARNHOOK_FATAL
6425                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6426                 /* Don't let Perl_warner cause us to escape our fate:  */
6427                 abort();
6428             }
6429 #endif
6430             /* This may not return:  */
6431             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6432                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6433                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6434 #endif
6435         }
6436 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6437         abort();
6438 #endif
6439         return;
6440     }
6441     if (--(SvREFCNT(sv)) > 0)
6442         return;
6443     Perl_sv_free2(aTHX_ sv);
6444 }
6445
6446 void
6447 Perl_sv_free2(pTHX_ SV *const sv)
6448 {
6449     dVAR;
6450
6451     PERL_ARGS_ASSERT_SV_FREE2;
6452
6453 #ifdef DEBUGGING
6454     if (SvTEMP(sv)) {
6455         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6456                          "Attempt to free temp prematurely: SV 0x%"UVxf
6457                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6458         return;
6459     }
6460 #endif
6461     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6462         /* make sure SvREFCNT(sv)==0 happens very seldom */
6463         SvREFCNT(sv) = (~(U32)0)/2;
6464         return;
6465     }
6466     sv_clear(sv);
6467     if (! SvREFCNT(sv))
6468         del_SV(sv);
6469 }
6470
6471 /*
6472 =for apidoc sv_len
6473
6474 Returns the length of the string in the SV.  Handles magic and type
6475 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6476 gives raw access to the xpv_cur slot.
6477
6478 =cut
6479 */
6480
6481 STRLEN
6482 Perl_sv_len(pTHX_ register SV *const sv)
6483 {
6484     STRLEN len;
6485
6486     if (!sv)
6487         return 0;
6488
6489     (void)SvPV_const(sv, len);
6490     return len;
6491 }
6492
6493 /*
6494 =for apidoc sv_len_utf8
6495
6496 Returns the number of characters in the string in an SV, counting wide
6497 UTF-8 bytes as a single character.  Handles magic and type coercion.
6498
6499 =cut
6500 */
6501
6502 /*
6503  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6504  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6505  * (Note that the mg_len is not the length of the mg_ptr field.
6506  * This allows the cache to store the character length of the string without
6507  * needing to malloc() extra storage to attach to the mg_ptr.)
6508  *
6509  */
6510
6511 STRLEN
6512 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6513 {
6514     if (!sv)
6515         return 0;
6516
6517     SvGETMAGIC(sv);
6518     return sv_len_utf8_nomg(sv);
6519 }
6520
6521 STRLEN
6522 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6523 {
6524     dVAR;
6525     STRLEN len;
6526     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6527
6528     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6529
6530     if (PL_utf8cache && SvUTF8(sv)) {
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 SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6558 }
6559
6560 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6561    offset.  */
6562 static STRLEN
6563 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6564                       STRLEN *const uoffset_p, bool *const at_end)
6565 {
6566     const U8 *s = start;
6567     STRLEN uoffset = *uoffset_p;
6568
6569     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6570
6571     while (s < send && uoffset) {
6572         --uoffset;
6573         s += UTF8SKIP(s);
6574     }
6575     if (s == send) {
6576         *at_end = TRUE;
6577     }
6578     else if (s > send) {
6579         *at_end = TRUE;
6580         /* This is the existing behaviour. Possibly it should be a croak, as
6581            it's actually a bounds error  */
6582         s = send;
6583     }
6584     *uoffset_p -= uoffset;
6585     return s - start;
6586 }
6587
6588 /* Given the length of the string in both bytes and UTF-8 characters, decide
6589    whether to walk forwards or backwards to find the byte corresponding to
6590    the passed in UTF-8 offset.  */
6591 static STRLEN
6592 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6593                     STRLEN uoffset, const STRLEN uend)
6594 {
6595     STRLEN backw = uend - uoffset;
6596
6597     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6598
6599     if (uoffset < 2 * backw) {
6600         /* The assumption is that going forwards is twice the speed of going
6601            forward (that's where the 2 * backw comes from).
6602            (The real figure of course depends on the UTF-8 data.)  */
6603         const U8 *s = start;
6604
6605         while (s < send && uoffset--)
6606             s += UTF8SKIP(s);
6607         assert (s <= send);
6608         if (s > send)
6609             s = send;
6610         return s - start;
6611     }
6612
6613     while (backw--) {
6614         send--;
6615         while (UTF8_IS_CONTINUATION(*send))
6616             send--;
6617     }
6618     return send - start;
6619 }
6620
6621 /* For the string representation of the given scalar, find the byte
6622    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6623    give another position in the string, *before* the sought offset, which
6624    (which is always true, as 0, 0 is a valid pair of positions), which should
6625    help reduce the amount of linear searching.
6626    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6627    will be used to reduce the amount of linear searching. The cache will be
6628    created if necessary, and the found value offered to it for update.  */
6629 static STRLEN
6630 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6631                     const U8 *const send, STRLEN uoffset,
6632                     STRLEN uoffset0, STRLEN boffset0)
6633 {
6634     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6635     bool found = FALSE;
6636     bool at_end = FALSE;
6637
6638     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6639
6640     assert (uoffset >= uoffset0);
6641
6642     if (!uoffset)
6643         return 0;
6644
6645     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
6646         && PL_utf8cache
6647         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6648                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6649         if ((*mgp)->mg_ptr) {
6650             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6651             if (cache[0] == uoffset) {
6652                 /* An exact match. */
6653                 return cache[1];
6654             }
6655             if (cache[2] == uoffset) {
6656                 /* An exact match. */
6657                 return cache[3];
6658             }
6659
6660             if (cache[0] < uoffset) {
6661                 /* The cache already knows part of the way.   */
6662                 if (cache[0] > uoffset0) {
6663                     /* The cache knows more than the passed in pair  */
6664                     uoffset0 = cache[0];
6665                     boffset0 = cache[1];
6666                 }
6667                 if ((*mgp)->mg_len != -1) {
6668                     /* And we know the end too.  */
6669                     boffset = boffset0
6670                         + sv_pos_u2b_midway(start + boffset0, send,
6671                                               uoffset - uoffset0,
6672                                               (*mgp)->mg_len - uoffset0);
6673                 } else {
6674                     uoffset -= uoffset0;
6675                     boffset = boffset0
6676                         + sv_pos_u2b_forwards(start + boffset0,
6677                                               send, &uoffset, &at_end);
6678                     uoffset += uoffset0;
6679                 }
6680             }
6681             else if (cache[2] < uoffset) {
6682                 /* We're between the two cache entries.  */
6683                 if (cache[2] > uoffset0) {
6684                     /* and the cache knows more than the passed in pair  */
6685                     uoffset0 = cache[2];
6686                     boffset0 = cache[3];
6687                 }
6688
6689                 boffset = boffset0
6690                     + sv_pos_u2b_midway(start + boffset0,
6691                                           start + cache[1],
6692                                           uoffset - uoffset0,
6693                                           cache[0] - uoffset0);
6694             } else {
6695                 boffset = boffset0
6696                     + sv_pos_u2b_midway(start + boffset0,
6697                                           start + cache[3],
6698                                           uoffset - uoffset0,
6699                                           cache[2] - uoffset0);
6700             }
6701             found = TRUE;
6702         }
6703         else if ((*mgp)->mg_len != -1) {
6704             /* If we can take advantage of a passed in offset, do so.  */
6705             /* In fact, offset0 is either 0, or less than offset, so don't
6706                need to worry about the other possibility.  */
6707             boffset = boffset0
6708                 + sv_pos_u2b_midway(start + boffset0, send,
6709                                       uoffset - uoffset0,
6710                                       (*mgp)->mg_len - uoffset0);
6711             found = TRUE;
6712         }
6713     }
6714
6715     if (!found || PL_utf8cache < 0) {
6716         STRLEN real_boffset;
6717         uoffset -= uoffset0;
6718         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6719                                                       send, &uoffset, &at_end);
6720         uoffset += uoffset0;
6721
6722         if (found && PL_utf8cache < 0)
6723             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6724                                        real_boffset, sv);
6725         boffset = real_boffset;
6726     }
6727
6728     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
6729         if (at_end)
6730             utf8_mg_len_cache_update(sv, mgp, uoffset);
6731         else
6732             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6733     }
6734     return boffset;
6735 }
6736
6737
6738 /*
6739 =for apidoc sv_pos_u2b_flags
6740
6741 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6742 the start of the string, to a count of the equivalent number of bytes; if
6743 lenp is non-zero, it does the same to lenp, but this time starting from
6744 the offset, rather than from the start
6745 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) || SvGMAGICAL(sv) || !SvPOK(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         if (byte > cache[1]) {
6948             /* New position is after the existing pair of pairs.  */
6949             const float keep_earlier
6950                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6951             const float keep_later
6952                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6953
6954             if (keep_later < keep_earlier) {
6955                 cache[2] = cache[0];
6956                 cache[3] = cache[1];
6957                 cache[0] = utf8;
6958                 cache[1] = byte;
6959             }
6960             else {
6961                 cache[0] = utf8;
6962                 cache[1] = byte;
6963             }
6964         }
6965         else if (byte > cache[3]) {
6966             /* New position is between the existing pair of pairs.  */
6967             const float keep_earlier
6968                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6969             const float keep_later
6970                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6971
6972             if (keep_later < keep_earlier) {
6973                 cache[2] = utf8;
6974                 cache[3] = byte;
6975             }
6976             else {
6977                 cache[0] = utf8;
6978                 cache[1] = byte;
6979             }
6980         }
6981         else {
6982             /* New position is before the existing pair of pairs.  */
6983             const float keep_earlier
6984                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6985             const float keep_later
6986                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6987
6988             if (keep_later < keep_earlier) {
6989                 cache[2] = utf8;
6990                 cache[3] = byte;
6991             }
6992             else {
6993                 cache[0] = cache[2];
6994                 cache[1] = cache[3];
6995                 cache[2] = utf8;
6996                 cache[3] = byte;
6997             }
6998         }
6999     }
7000     ASSERT_UTF8_CACHE(cache);
7001 }
7002
7003 /* We already know all of the way, now we may be able to walk back.  The same
7004    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7005    backward is half the speed of walking forward. */
7006 static STRLEN
7007 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7008                     const U8 *end, STRLEN endu)
7009 {
7010     const STRLEN forw = target - s;
7011     STRLEN backw = end - target;
7012
7013     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7014
7015     if (forw < 2 * backw) {
7016         return utf8_length(s, target);
7017     }
7018
7019     while (end > target) {
7020         end--;
7021         while (UTF8_IS_CONTINUATION(*end)) {
7022             end--;
7023         }
7024         endu--;
7025     }
7026     return endu;
7027 }
7028
7029 /*
7030 =for apidoc sv_pos_b2u
7031
7032 Converts the value pointed to by offsetp from a count of bytes from the
7033 start of the string, to a count of the equivalent number of UTF-8 chars.
7034 Handles magic and type coercion.
7035
7036 =cut
7037 */
7038
7039 /*
7040  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7041  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7042  * byte offsets.
7043  *
7044  */
7045 void
7046 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
7047 {
7048     const U8* s;
7049     const STRLEN byte = *offsetp;
7050     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7051     STRLEN blen;
7052     MAGIC* mg = NULL;
7053     const U8* send;
7054     bool found = FALSE;
7055
7056     PERL_ARGS_ASSERT_SV_POS_B2U;
7057
7058     if (!sv)
7059         return;
7060
7061     s = (const U8*)SvPV_const(sv, blen);
7062
7063     if (blen < byte)
7064         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7065                    ", byte=%"UVuf, (UV)blen, (UV)byte);
7066
7067     send = s + byte;
7068
7069     if (!SvREADONLY(sv)
7070         && PL_utf8cache
7071         && SvTYPE(sv) >= SVt_PVMG
7072         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7073     {
7074         if (mg->mg_ptr) {
7075             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7076             if (cache[1] == byte) {
7077                 /* An exact match. */
7078                 *offsetp = cache[0];
7079                 return;
7080             }
7081             if (cache[3] == byte) {
7082                 /* An exact match. */
7083                 *offsetp = cache[2];
7084                 return;
7085             }
7086
7087             if (cache[1] < byte) {
7088                 /* We already know part of the way. */
7089                 if (mg->mg_len != -1) {
7090                     /* Actually, we know the end too.  */
7091                     len = cache[0]
7092                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7093                                               s + blen, mg->mg_len - cache[0]);
7094                 } else {
7095                     len = cache[0] + utf8_length(s + cache[1], send);
7096                 }
7097             }
7098             else if (cache[3] < byte) {
7099                 /* We're between the two cached pairs, so we do the calculation
7100                    offset by the byte/utf-8 positions for the earlier pair,
7101                    then add the utf-8 characters from the string start to
7102                    there.  */
7103                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7104                                           s + cache[1], cache[0] - cache[2])
7105                     + cache[2];
7106
7107             }
7108             else { /* cache[3] > byte */
7109                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7110                                           cache[2]);
7111
7112             }
7113             ASSERT_UTF8_CACHE(cache);
7114             found = TRUE;
7115         } else if (mg->mg_len != -1) {
7116             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7117             found = TRUE;
7118         }
7119     }
7120     if (!found || PL_utf8cache < 0) {
7121         const STRLEN real_len = utf8_length(s, send);
7122
7123         if (found && PL_utf8cache < 0)
7124             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7125         len = real_len;
7126     }
7127     *offsetp = len;
7128
7129     if (PL_utf8cache) {
7130         if (blen == byte)
7131             utf8_mg_len_cache_update(sv, &mg, len);
7132         else
7133             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7134     }
7135 }
7136
7137 static void
7138 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7139                              STRLEN real, SV *const sv)
7140 {
7141     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7142
7143     /* As this is debugging only code, save space by keeping this test here,
7144        rather than inlining it in all the callers.  */
7145     if (from_cache == real)
7146         return;
7147
7148     /* Need to turn the assertions off otherwise we may recurse infinitely
7149        while printing error messages.  */
7150     SAVEI8(PL_utf8cache);
7151     PL_utf8cache = 0;
7152     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7153                func, (UV) from_cache, (UV) real, SVfARG(sv));
7154 }
7155
7156 /*
7157 =for apidoc sv_eq
7158
7159 Returns a boolean indicating whether the strings in the two SVs are
7160 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7161 coerce its args to strings if necessary.
7162
7163 =for apidoc sv_eq_flags
7164
7165 Returns a boolean indicating whether the strings in the two SVs are
7166 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7167 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7168
7169 =cut
7170 */
7171
7172 I32
7173 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
7174 {
7175     dVAR;
7176     const char *pv1;
7177     STRLEN cur1;
7178     const char *pv2;
7179     STRLEN cur2;
7180     I32  eq     = 0;
7181     SV* svrecode = NULL;
7182
7183     if (!sv1) {
7184         pv1 = "";
7185         cur1 = 0;
7186     }
7187     else {
7188         /* if pv1 and pv2 are the same, second SvPV_const call may
7189          * invalidate pv1 (if we are handling magic), so we may need to
7190          * make a copy */
7191         if (sv1 == sv2 && flags & SV_GMAGIC
7192          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7193             pv1 = SvPV_const(sv1, cur1);
7194             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7195         }
7196         pv1 = SvPV_flags_const(sv1, cur1, flags);
7197     }
7198
7199     if (!sv2){
7200         pv2 = "";
7201         cur2 = 0;
7202     }
7203     else
7204         pv2 = SvPV_flags_const(sv2, cur2, flags);
7205
7206     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7207         /* Differing utf8ness.
7208          * Do not UTF8size the comparands as a side-effect. */
7209          if (PL_encoding) {
7210               if (SvUTF8(sv1)) {
7211                    svrecode = newSVpvn(pv2, cur2);
7212                    sv_recode_to_utf8(svrecode, PL_encoding);
7213                    pv2 = SvPV_const(svrecode, cur2);
7214               }
7215               else {
7216                    svrecode = newSVpvn(pv1, cur1);
7217                    sv_recode_to_utf8(svrecode, PL_encoding);
7218                    pv1 = SvPV_const(svrecode, cur1);
7219               }
7220               /* Now both are in UTF-8. */
7221               if (cur1 != cur2) {
7222                    SvREFCNT_dec(svrecode);
7223                    return FALSE;
7224               }
7225          }
7226          else {
7227               if (SvUTF8(sv1)) {
7228                   /* sv1 is the UTF-8 one  */
7229                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7230                                         (const U8*)pv1, cur1) == 0;
7231               }
7232               else {
7233                   /* sv2 is the UTF-8 one  */
7234                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7235                                         (const U8*)pv2, cur2) == 0;
7236               }
7237          }
7238     }
7239
7240     if (cur1 == cur2)
7241         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7242         
7243     SvREFCNT_dec(svrecode);
7244
7245     return eq;
7246 }
7247
7248 /*
7249 =for apidoc sv_cmp
7250
7251 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7252 string in C<sv1> is less than, equal to, or greater than the string in
7253 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7254 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7255
7256 =for apidoc sv_cmp_flags
7257
7258 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7259 string in C<sv1> is less than, equal to, or greater than the string in
7260 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7261 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7262 also C<sv_cmp_locale_flags>.
7263
7264 =cut
7265 */
7266
7267 I32
7268 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7269 {
7270     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7271 }
7272
7273 I32
7274 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7275                   const U32 flags)
7276 {
7277     dVAR;
7278     STRLEN cur1, cur2;
7279     const char *pv1, *pv2;
7280     char *tpv = NULL;
7281     I32  cmp;
7282     SV *svrecode = NULL;
7283
7284     if (!sv1) {
7285         pv1 = "";
7286         cur1 = 0;
7287     }
7288     else
7289         pv1 = SvPV_flags_const(sv1, cur1, flags);
7290
7291     if (!sv2) {
7292         pv2 = "";
7293         cur2 = 0;
7294     }
7295     else
7296         pv2 = SvPV_flags_const(sv2, cur2, flags);
7297
7298     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7299         /* Differing utf8ness.
7300          * Do not UTF8size the comparands as a side-effect. */
7301         if (SvUTF8(sv1)) {
7302             if (PL_encoding) {
7303                  svrecode = newSVpvn(pv2, cur2);
7304                  sv_recode_to_utf8(svrecode, PL_encoding);
7305                  pv2 = SvPV_const(svrecode, cur2);
7306             }
7307             else {
7308                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7309                                                    (const U8*)pv1, cur1);
7310                 return retval ? retval < 0 ? -1 : +1 : 0;
7311             }
7312         }
7313         else {
7314             if (PL_encoding) {
7315                  svrecode = newSVpvn(pv1, cur1);
7316                  sv_recode_to_utf8(svrecode, PL_encoding);
7317                  pv1 = SvPV_const(svrecode, cur1);
7318             }
7319             else {
7320                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7321                                                   (const U8*)pv2, cur2);
7322                 return retval ? retval < 0 ? -1 : +1 : 0;
7323             }
7324         }
7325     }
7326
7327     if (!cur1) {
7328         cmp = cur2 ? -1 : 0;
7329     } else if (!cur2) {
7330         cmp = 1;
7331     } else {
7332         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7333
7334         if (retval) {
7335             cmp = retval < 0 ? -1 : 1;
7336         } else if (cur1 == cur2) {
7337             cmp = 0;
7338         } else {
7339             cmp = cur1 < cur2 ? -1 : 1;
7340         }
7341     }
7342
7343     SvREFCNT_dec(svrecode);
7344     if (tpv)
7345         Safefree(tpv);
7346
7347     return cmp;
7348 }
7349
7350 /*
7351 =for apidoc sv_cmp_locale
7352
7353 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7354 'use bytes' aware, handles get magic, and will coerce its args to strings
7355 if necessary.  See also C<sv_cmp>.
7356
7357 =for apidoc sv_cmp_locale_flags
7358
7359 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7360 'use bytes' aware and will coerce its args to strings if necessary.  If the
7361 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7362
7363 =cut
7364 */
7365
7366 I32
7367 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7368 {
7369     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7370 }
7371
7372 I32
7373 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7374                          const U32 flags)
7375 {
7376     dVAR;
7377 #ifdef USE_LOCALE_COLLATE
7378
7379     char *pv1, *pv2;
7380     STRLEN len1, len2;
7381     I32 retval;
7382
7383     if (PL_collation_standard)
7384         goto raw_compare;
7385
7386     len1 = 0;
7387     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7388     len2 = 0;
7389     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7390
7391     if (!pv1 || !len1) {
7392         if (pv2 && len2)
7393             return -1;
7394         else
7395             goto raw_compare;
7396     }
7397     else {
7398         if (!pv2 || !len2)
7399             return 1;
7400     }
7401
7402     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7403
7404     if (retval)
7405         return retval < 0 ? -1 : 1;
7406
7407     /*
7408      * When the result of collation is equality, that doesn't mean
7409      * that there are no differences -- some locales exclude some
7410      * characters from consideration.  So to avoid false equalities,
7411      * we use the raw string as a tiebreaker.
7412      */
7413
7414   raw_compare:
7415     /*FALLTHROUGH*/
7416
7417 #endif /* USE_LOCALE_COLLATE */
7418
7419     return sv_cmp(sv1, sv2);
7420 }
7421
7422
7423 #ifdef USE_LOCALE_COLLATE
7424
7425 /*
7426 =for apidoc sv_collxfrm
7427
7428 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7429 C<sv_collxfrm_flags>.
7430
7431 =for apidoc sv_collxfrm_flags
7432
7433 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7434 flags contain SV_GMAGIC, it handles get-magic.
7435
7436 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7437 scalar data of the variable, but transformed to such a format that a normal
7438 memory comparison can be used to compare the data according to the locale
7439 settings.
7440
7441 =cut
7442 */
7443
7444 char *
7445 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7446 {
7447     dVAR;
7448     MAGIC *mg;
7449
7450     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7451
7452     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7453     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7454         const char *s;
7455         char *xf;
7456         STRLEN len, xlen;
7457
7458         if (mg)
7459             Safefree(mg->mg_ptr);
7460         s = SvPV_flags_const(sv, len, flags);
7461         if ((xf = mem_collxfrm(s, len, &xlen))) {
7462             if (! mg) {
7463 #ifdef PERL_OLD_COPY_ON_WRITE
7464                 if (SvIsCOW(sv))
7465                     sv_force_normal_flags(sv, 0);
7466 #endif
7467                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7468                                  0, 0);
7469                 assert(mg);
7470             }
7471             mg->mg_ptr = xf;
7472             mg->mg_len = xlen;
7473         }
7474         else {
7475             if (mg) {
7476                 mg->mg_ptr = NULL;
7477                 mg->mg_len = -1;
7478             }
7479         }
7480     }
7481     if (mg && mg->mg_ptr) {
7482         *nxp = mg->mg_len;
7483         return mg->mg_ptr + sizeof(PL_collation_ix);
7484     }
7485     else {
7486         *nxp = 0;
7487         return NULL;
7488     }
7489 }
7490
7491 #endif /* USE_LOCALE_COLLATE */
7492
7493 static char *
7494 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7495 {
7496     SV * const tsv = newSV(0);
7497     ENTER;
7498     SAVEFREESV(tsv);
7499     sv_gets(tsv, fp, 0);
7500     sv_utf8_upgrade_nomg(tsv);
7501     SvCUR_set(sv,append);
7502     sv_catsv(sv,tsv);
7503     LEAVE;
7504     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7505 }
7506
7507 static char *
7508 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7509 {
7510     I32 bytesread;
7511     const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7512       /* Grab the size of the record we're getting */
7513     char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7514 #ifdef VMS
7515     int fd;
7516 #endif
7517
7518     /* Go yank in */
7519 #ifdef VMS
7520     /* VMS wants read instead of fread, because fread doesn't respect */
7521     /* RMS record boundaries. This is not necessarily a good thing to be */
7522     /* doing, but we've got no other real choice - except avoid stdio
7523        as implementation - perhaps write a :vms layer ?
7524     */
7525     fd = PerlIO_fileno(fp);
7526     if (fd != -1) {
7527         bytesread = PerlLIO_read(fd, buffer, recsize);
7528     }
7529     else /* in-memory file from PerlIO::Scalar */
7530 #endif
7531     {
7532         bytesread = PerlIO_read(fp, buffer, recsize);
7533     }
7534
7535     if (bytesread < 0)
7536         bytesread = 0;
7537     SvCUR_set(sv, bytesread + append);
7538     buffer[bytesread] = '\0';
7539     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7540 }
7541
7542 /*
7543 =for apidoc sv_gets
7544
7545 Get a line from the filehandle and store it into the SV, optionally
7546 appending to the currently-stored string. If C<append> is not 0, the
7547 line is appended to the SV instead of overwriting it. C<append> should
7548 be set to the byte offset that the appended string should start at
7549 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7550
7551 =cut
7552 */
7553
7554 char *
7555 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7556 {
7557     dVAR;
7558     const char *rsptr;
7559     STRLEN rslen;
7560     STDCHAR rslast;
7561     STDCHAR *bp;
7562     I32 cnt;
7563     I32 i = 0;
7564     I32 rspara = 0;
7565
7566     PERL_ARGS_ASSERT_SV_GETS;
7567
7568     if (SvTHINKFIRST(sv))
7569         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7570     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7571        from <>.
7572        However, perlbench says it's slower, because the existing swipe code
7573        is faster than copy on write.
7574        Swings and roundabouts.  */
7575     SvUPGRADE(sv, SVt_PV);
7576
7577     if (append) {
7578         if (PerlIO_isutf8(fp)) {
7579             if (!SvUTF8(sv)) {
7580                 sv_utf8_upgrade_nomg(sv);
7581                 sv_pos_u2b(sv,&append,0);
7582             }
7583         } else if (SvUTF8(sv)) {
7584             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7585         }
7586     }
7587
7588     SvPOK_only(sv);
7589     if (!append) {
7590         SvCUR_set(sv,0);
7591     }
7592     if (PerlIO_isutf8(fp))
7593         SvUTF8_on(sv);
7594
7595     if (IN_PERL_COMPILETIME) {
7596         /* we always read code in line mode */
7597         rsptr = "\n";
7598         rslen = 1;
7599     }
7600     else if (RsSNARF(PL_rs)) {
7601         /* If it is a regular disk file use size from stat() as estimate
7602            of amount we are going to read -- may result in mallocing
7603            more memory than we really need if the layers below reduce
7604            the size we read (e.g. CRLF or a gzip layer).
7605          */
7606         Stat_t st;
7607         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7608             const Off_t offset = PerlIO_tell(fp);
7609             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7610                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7611             }
7612         }
7613         rsptr = NULL;
7614         rslen = 0;
7615     }
7616     else if (RsRECORD(PL_rs)) {
7617         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7618     }
7619     else if (RsPARA(PL_rs)) {
7620         rsptr = "\n\n";
7621         rslen = 2;
7622         rspara = 1;
7623     }
7624     else {
7625         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7626         if (PerlIO_isutf8(fp)) {
7627             rsptr = SvPVutf8(PL_rs, rslen);
7628         }
7629         else {
7630             if (SvUTF8(PL_rs)) {
7631                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7632                     Perl_croak(aTHX_ "Wide character in $/");
7633                 }
7634             }
7635             rsptr = SvPV_const(PL_rs, rslen);
7636         }
7637     }
7638
7639     rslast = rslen ? rsptr[rslen - 1] : '\0';
7640
7641     if (rspara) {               /* have to do this both before and after */
7642         do {                    /* to make sure file boundaries work right */
7643             if (PerlIO_eof(fp))
7644                 return 0;
7645             i = PerlIO_getc(fp);
7646             if (i != '\n') {
7647                 if (i == -1)
7648                     return 0;
7649                 PerlIO_ungetc(fp,i);
7650                 break;
7651             }
7652         } while (i != EOF);
7653     }
7654
7655     /* See if we know enough about I/O mechanism to cheat it ! */
7656
7657     /* This used to be #ifdef test - it is made run-time test for ease
7658        of abstracting out stdio interface. One call should be cheap
7659        enough here - and may even be a macro allowing compile
7660        time optimization.
7661      */
7662
7663     if (PerlIO_fast_gets(fp)) {
7664
7665     /*
7666      * We're going to steal some values from the stdio struct
7667      * and put EVERYTHING in the innermost loop into registers.
7668      */
7669     STDCHAR *ptr;
7670     STRLEN bpx;
7671     I32 shortbuffered;
7672
7673 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7674     /* An ungetc()d char is handled separately from the regular
7675      * buffer, so we getc() it back out and stuff it in the buffer.
7676      */
7677     i = PerlIO_getc(fp);
7678     if (i == EOF) return 0;
7679     *(--((*fp)->_ptr)) = (unsigned char) i;
7680     (*fp)->_cnt++;
7681 #endif
7682
7683     /* Here is some breathtakingly efficient cheating */
7684
7685     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7686     /* make sure we have the room */
7687     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7688         /* Not room for all of it
7689            if we are looking for a separator and room for some
7690          */
7691         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7692             /* just process what we have room for */
7693             shortbuffered = cnt - SvLEN(sv) + append + 1;
7694             cnt -= shortbuffered;
7695         }
7696         else {
7697             shortbuffered = 0;
7698             /* remember that cnt can be negative */
7699             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7700         }
7701     }
7702     else
7703         shortbuffered = 0;
7704     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7705     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7706     DEBUG_P(PerlIO_printf(Perl_debug_log,
7707         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7708     DEBUG_P(PerlIO_printf(Perl_debug_log,
7709         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7710                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7711                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7712     for (;;) {
7713       screamer:
7714         if (cnt > 0) {
7715             if (rslen) {
7716                 while (cnt > 0) {                    /* this     |  eat */
7717                     cnt--;
7718                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7719                         goto thats_all_folks;        /* screams  |  sed :-) */
7720                 }
7721             }
7722             else {
7723                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7724                 bp += cnt;                           /* screams  |  dust */
7725                 ptr += cnt;                          /* louder   |  sed :-) */
7726                 cnt = 0;
7727                 assert (!shortbuffered);
7728                 goto cannot_be_shortbuffered;
7729             }
7730         }
7731         
7732         if (shortbuffered) {            /* oh well, must extend */
7733             cnt = shortbuffered;
7734             shortbuffered = 0;
7735             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7736             SvCUR_set(sv, bpx);
7737             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7738             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7739             continue;
7740         }
7741
7742     cannot_be_shortbuffered:
7743         DEBUG_P(PerlIO_printf(Perl_debug_log,
7744                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7745                               PTR2UV(ptr),(long)cnt));
7746         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7747
7748         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7749             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7750             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7751             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7752
7753         /* This used to call 'filbuf' in stdio form, but as that behaves like
7754            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7755            another abstraction.  */
7756         i   = PerlIO_getc(fp);          /* get more characters */
7757
7758         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7759             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7760             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7761             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7762
7763         cnt = PerlIO_get_cnt(fp);
7764         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7765         DEBUG_P(PerlIO_printf(Perl_debug_log,
7766             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7767
7768         if (i == EOF)                   /* all done for ever? */
7769             goto thats_really_all_folks;
7770
7771         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7772         SvCUR_set(sv, bpx);
7773         SvGROW(sv, bpx + cnt + 2);
7774         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7775
7776         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7777
7778         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7779             goto thats_all_folks;
7780     }
7781
7782 thats_all_folks:
7783     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7784           memNE((char*)bp - rslen, rsptr, rslen))
7785         goto screamer;                          /* go back to the fray */
7786 thats_really_all_folks:
7787     if (shortbuffered)
7788         cnt += shortbuffered;
7789         DEBUG_P(PerlIO_printf(Perl_debug_log,
7790             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7791     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7792     DEBUG_P(PerlIO_printf(Perl_debug_log,
7793         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7794         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7795         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7796     *bp = '\0';
7797     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7798     DEBUG_P(PerlIO_printf(Perl_debug_log,
7799         "Screamer: done, len=%ld, string=|%.*s|\n",
7800         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7801     }
7802    else
7803     {
7804        /*The big, slow, and stupid way. */
7805 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7806         STDCHAR *buf = NULL;
7807         Newx(buf, 8192, STDCHAR);
7808         assert(buf);
7809 #else
7810         STDCHAR buf[8192];
7811 #endif
7812
7813 screamer2:
7814         if (rslen) {
7815             const STDCHAR * const bpe = buf + sizeof(buf);
7816             bp = buf;
7817             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7818                 ; /* keep reading */
7819             cnt = bp - buf;
7820         }
7821         else {
7822             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7823             /* Accommodate broken VAXC compiler, which applies U8 cast to
7824              * both args of ?: operator, causing EOF to change into 255
7825              */
7826             if (cnt > 0)
7827                  i = (U8)buf[cnt - 1];
7828             else
7829                  i = EOF;
7830         }
7831
7832         if (cnt < 0)
7833             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7834         if (append)
7835             sv_catpvn_nomg(sv, (char *) buf, cnt);
7836         else
7837             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
7838
7839         if (i != EOF &&                 /* joy */
7840             (!rslen ||
7841              SvCUR(sv) < rslen ||
7842              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7843         {
7844             append = -1;
7845             /*
7846              * If we're reading from a TTY and we get a short read,
7847              * indicating that the user hit his EOF character, we need
7848              * to notice it now, because if we try to read from the TTY
7849              * again, the EOF condition will disappear.
7850              *
7851              * The comparison of cnt to sizeof(buf) is an optimization
7852              * that prevents unnecessary calls to feof().
7853              *
7854              * - jik 9/25/96
7855              */
7856             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7857                 goto screamer2;
7858         }
7859
7860 #ifdef USE_HEAP_INSTEAD_OF_STACK
7861         Safefree(buf);
7862 #endif
7863     }
7864
7865     if (rspara) {               /* have to do this both before and after */
7866         while (i != EOF) {      /* to make sure file boundaries work right */
7867             i = PerlIO_getc(fp);
7868             if (i != '\n') {
7869                 PerlIO_ungetc(fp,i);
7870                 break;
7871             }
7872         }
7873     }
7874
7875     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7876 }
7877
7878 /*
7879 =for apidoc sv_inc
7880
7881 Auto-increment of the value in the SV, doing string to numeric conversion
7882 if necessary.  Handles 'get' magic and operator overloading.
7883
7884 =cut
7885 */
7886
7887 void
7888 Perl_sv_inc(pTHX_ register SV *const sv)
7889 {
7890     if (!sv)
7891         return;
7892     SvGETMAGIC(sv);
7893     sv_inc_nomg(sv);
7894 }
7895
7896 /*
7897 =for apidoc sv_inc_nomg
7898
7899 Auto-increment of the value in the SV, doing string to numeric conversion
7900 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
7901
7902 =cut
7903 */
7904
7905 void
7906 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7907 {
7908     dVAR;
7909     char *d;
7910     int flags;
7911
7912     if (!sv)
7913         return;
7914     if (SvTHINKFIRST(sv)) {
7915         if (SvIsCOW(sv) || isGV_with_GP(sv))
7916             sv_force_normal_flags(sv, 0);
7917         if (SvREADONLY(sv)) {
7918             if (IN_PERL_RUNTIME)
7919                 Perl_croak_no_modify(aTHX);
7920         }
7921         if (SvROK(sv)) {
7922             IV i;
7923             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
7924                 return;
7925             i = PTR2IV(SvRV(sv));
7926             sv_unref(sv);
7927             sv_setiv(sv, i);
7928         }
7929     }
7930     flags = SvFLAGS(sv);
7931     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7932         /* It's (privately or publicly) a float, but not tested as an
7933            integer, so test it to see. */
7934         (void) SvIV(sv);
7935         flags = SvFLAGS(sv);
7936     }
7937     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7938         /* It's publicly an integer, or privately an integer-not-float */
7939 #ifdef PERL_PRESERVE_IVUV
7940       oops_its_int:
7941 #endif
7942         if (SvIsUV(sv)) {
7943             if (SvUVX(sv) == UV_MAX)
7944                 sv_setnv(sv, UV_MAX_P1);
7945             else
7946                 (void)SvIOK_only_UV(sv);
7947                 SvUV_set(sv, SvUVX(sv) + 1);
7948         } else {
7949             if (SvIVX(sv) == IV_MAX)
7950                 sv_setuv(sv, (UV)IV_MAX + 1);
7951             else {
7952                 (void)SvIOK_only(sv);
7953                 SvIV_set(sv, SvIVX(sv) + 1);
7954             }   
7955         }
7956         return;
7957     }
7958     if (flags & SVp_NOK) {
7959         const NV was = SvNVX(sv);
7960         if (NV_OVERFLOWS_INTEGERS_AT &&
7961             was >= NV_OVERFLOWS_INTEGERS_AT) {
7962             /* diag_listed_as: Lost precision when %s %f by 1 */
7963             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7964                            "Lost precision when incrementing %" NVff " by 1",
7965                            was);
7966         }
7967         (void)SvNOK_only(sv);
7968         SvNV_set(sv, was + 1.0);
7969         return;
7970     }
7971
7972     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7973         if ((flags & SVTYPEMASK) < SVt_PVIV)
7974             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7975         (void)SvIOK_only(sv);
7976         SvIV_set(sv, 1);
7977         return;
7978     }
7979     d = SvPVX(sv);
7980     while (isALPHA(*d)) d++;
7981     while (isDIGIT(*d)) d++;
7982     if (d < SvEND(sv)) {
7983 #ifdef PERL_PRESERVE_IVUV
7984         /* Got to punt this as an integer if needs be, but we don't issue
7985            warnings. Probably ought to make the sv_iv_please() that does
7986            the conversion if possible, and silently.  */
7987         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7988         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7989             /* Need to try really hard to see if it's an integer.
7990                9.22337203685478e+18 is an integer.
7991                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7992                so $a="9.22337203685478e+18"; $a+0; $a++
7993                needs to be the same as $a="9.22337203685478e+18"; $a++
7994                or we go insane. */
7995         
7996             (void) sv_2iv(sv);
7997             if (SvIOK(sv))
7998                 goto oops_its_int;
7999
8000             /* sv_2iv *should* have made this an NV */
8001             if (flags & SVp_NOK) {
8002                 (void)SvNOK_only(sv);
8003                 SvNV_set(sv, SvNVX(sv) + 1.0);
8004                 return;
8005             }
8006             /* I don't think we can get here. Maybe I should assert this
8007                And if we do get here I suspect that sv_setnv will croak. NWC
8008                Fall through. */
8009 #if defined(USE_LONG_DOUBLE)
8010             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",
8011                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8012 #else
8013             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8014                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8015 #endif
8016         }
8017 #endif /* PERL_PRESERVE_IVUV */
8018         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8019         return;
8020     }
8021     d--;
8022     while (d >= SvPVX_const(sv)) {
8023         if (isDIGIT(*d)) {
8024             if (++*d <= '9')
8025                 return;
8026             *(d--) = '0';
8027         }
8028         else {
8029 #ifdef EBCDIC
8030             /* MKS: The original code here died if letters weren't consecutive.
8031              * at least it didn't have to worry about non-C locales.  The
8032              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8033              * arranged in order (although not consecutively) and that only
8034              * [A-Za-z] are accepted by isALPHA in the C locale.
8035              */
8036             if (*d != 'z' && *d != 'Z') {
8037                 do { ++*d; } while (!isALPHA(*d));
8038                 return;
8039             }
8040             *(d--) -= 'z' - 'a';
8041 #else
8042             ++*d;
8043             if (isALPHA(*d))
8044                 return;
8045             *(d--) -= 'z' - 'a' + 1;
8046 #endif
8047         }
8048     }
8049     /* oh,oh, the number grew */
8050     SvGROW(sv, SvCUR(sv) + 2);
8051     SvCUR_set(sv, SvCUR(sv) + 1);
8052     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8053         *d = d[-1];
8054     if (isDIGIT(d[1]))
8055         *d = '1';
8056     else
8057         *d = d[1];
8058 }
8059
8060 /*
8061 =for apidoc sv_dec
8062
8063 Auto-decrement of the value in the SV, doing string to numeric conversion
8064 if necessary.  Handles 'get' magic and operator overloading.
8065
8066 =cut
8067 */
8068
8069 void
8070 Perl_sv_dec(pTHX_ register SV *const sv)
8071 {
8072     dVAR;
8073     if (!sv)
8074         return;
8075     SvGETMAGIC(sv);
8076     sv_dec_nomg(sv);
8077 }
8078
8079 /*
8080 =for apidoc sv_dec_nomg
8081
8082 Auto-decrement of the value in the SV, doing string to numeric conversion
8083 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8084
8085 =cut
8086 */
8087
8088 void
8089 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8090 {
8091     dVAR;
8092     int flags;
8093
8094     if (!sv)
8095         return;
8096     if (SvTHINKFIRST(sv)) {
8097         if (SvIsCOW(sv) || isGV_with_GP(sv))
8098             sv_force_normal_flags(sv, 0);
8099         if (SvREADONLY(sv)) {
8100             if (IN_PERL_RUNTIME)
8101                 Perl_croak_no_modify(aTHX);
8102         }
8103         if (SvROK(sv)) {
8104             IV i;
8105             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8106                 return;
8107             i = PTR2IV(SvRV(sv));
8108             sv_unref(sv);
8109             sv_setiv(sv, i);
8110         }
8111     }
8112     /* Unlike sv_inc we don't have to worry about string-never-numbers
8113        and keeping them magic. But we mustn't warn on punting */
8114     flags = SvFLAGS(sv);
8115     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8116         /* It's publicly an integer, or privately an integer-not-float */
8117 #ifdef PERL_PRESERVE_IVUV
8118       oops_its_int:
8119 #endif
8120         if (SvIsUV(sv)) {
8121             if (SvUVX(sv) == 0) {
8122                 (void)SvIOK_only(sv);
8123                 SvIV_set(sv, -1);
8124             }
8125             else {
8126                 (void)SvIOK_only_UV(sv);
8127                 SvUV_set(sv, SvUVX(sv) - 1);
8128             }   
8129         } else {
8130             if (SvIVX(sv) == IV_MIN) {
8131                 sv_setnv(sv, (NV)IV_MIN);
8132                 goto oops_its_num;
8133             }
8134             else {
8135                 (void)SvIOK_only(sv);
8136                 SvIV_set(sv, SvIVX(sv) - 1);
8137             }   
8138         }
8139         return;
8140     }
8141     if (flags & SVp_NOK) {
8142     oops_its_num:
8143         {
8144             const NV was = SvNVX(sv);
8145             if (NV_OVERFLOWS_INTEGERS_AT &&
8146                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8147                 /* diag_listed_as: Lost precision when %s %f by 1 */
8148                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8149                                "Lost precision when decrementing %" NVff " by 1",
8150                                was);
8151             }
8152             (void)SvNOK_only(sv);
8153             SvNV_set(sv, was - 1.0);
8154             return;
8155         }
8156     }
8157     if (!(flags & SVp_POK)) {
8158         if ((flags & SVTYPEMASK) < SVt_PVIV)
8159             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8160         SvIV_set(sv, -1);
8161         (void)SvIOK_only(sv);
8162         return;
8163     }
8164 #ifdef PERL_PRESERVE_IVUV
8165     {
8166         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8167         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8168             /* Need to try really hard to see if it's an integer.
8169                9.22337203685478e+18 is an integer.
8170                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8171                so $a="9.22337203685478e+18"; $a+0; $a--
8172                needs to be the same as $a="9.22337203685478e+18"; $a--
8173                or we go insane. */
8174         
8175             (void) sv_2iv(sv);
8176             if (SvIOK(sv))
8177                 goto oops_its_int;
8178
8179             /* sv_2iv *should* have made this an NV */
8180             if (flags & SVp_NOK) {
8181                 (void)SvNOK_only(sv);
8182                 SvNV_set(sv, SvNVX(sv) - 1.0);
8183                 return;
8184             }
8185             /* I don't think we can get here. Maybe I should assert this
8186                And if we do get here I suspect that sv_setnv will croak. NWC
8187                Fall through. */
8188 #if defined(USE_LONG_DOUBLE)
8189             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",
8190                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8191 #else
8192             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8193                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8194 #endif
8195         }
8196     }
8197 #endif /* PERL_PRESERVE_IVUV */
8198     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8199 }
8200
8201 /* this define is used to eliminate a chunk of duplicated but shared logic
8202  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8203  * used anywhere but here - yves
8204  */
8205 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8206     STMT_START {      \
8207         EXTEND_MORTAL(1); \
8208         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8209     } STMT_END
8210
8211 /*
8212 =for apidoc sv_mortalcopy
8213
8214 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8215 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8216 explicit call to FREETMPS, or by an implicit call at places such as
8217 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8218
8219 =cut
8220 */
8221
8222 /* Make a string that will exist for the duration of the expression
8223  * evaluation.  Actually, it may have to last longer than that, but
8224  * hopefully we won't free it until it has been assigned to a
8225  * permanent location. */
8226
8227 SV *
8228 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8229 {
8230     dVAR;
8231     SV *sv;
8232
8233     new_SV(sv);
8234     sv_setsv_flags(sv,oldstr,flags);
8235     PUSH_EXTEND_MORTAL__SV_C(sv);
8236     SvTEMP_on(sv);
8237     return sv;
8238 }
8239
8240 /*
8241 =for apidoc sv_newmortal
8242
8243 Creates a new null SV which is mortal.  The reference count of the SV is
8244 set to 1.  It will be destroyed "soon", either by an explicit call to
8245 FREETMPS, or by an implicit call at places such as statement boundaries.
8246 See also C<sv_mortalcopy> and C<sv_2mortal>.
8247
8248 =cut
8249 */
8250
8251 SV *
8252 Perl_sv_newmortal(pTHX)
8253 {
8254     dVAR;
8255     SV *sv;
8256
8257     new_SV(sv);
8258     SvFLAGS(sv) = SVs_TEMP;
8259     PUSH_EXTEND_MORTAL__SV_C(sv);
8260     return sv;
8261 }
8262
8263
8264 /*
8265 =for apidoc newSVpvn_flags
8266
8267 Creates a new SV and copies a string into it.  The reference count for the
8268 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8269 string.  You are responsible for ensuring that the source string is at least
8270 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8271 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8272 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8273 returning.  If C<SVf_UTF8> is set, C<s>
8274 is considered to be in UTF-8 and the
8275 C<SVf_UTF8> flag will be set on the new SV.
8276 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8277
8278     #define newSVpvn_utf8(s, len, u)                    \
8279         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8280
8281 =cut
8282 */
8283
8284 SV *
8285 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8286 {
8287     dVAR;
8288     SV *sv;
8289
8290     /* All the flags we don't support must be zero.
8291        And we're new code so I'm going to assert this from the start.  */
8292     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8293     new_SV(sv);
8294     sv_setpvn(sv,s,len);
8295
8296     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8297      * and do what it does ourselves here.
8298      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8299      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8300      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8301      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8302      */
8303
8304     SvFLAGS(sv) |= flags;
8305
8306     if(flags & SVs_TEMP){
8307         PUSH_EXTEND_MORTAL__SV_C(sv);
8308     }
8309
8310     return sv;
8311 }
8312
8313 /*
8314 =for apidoc sv_2mortal
8315
8316 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8317 by an explicit call to FREETMPS, or by an implicit call at places such as
8318 statement boundaries.  SvTEMP() is turned on which means that the SV's
8319 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8320 and C<sv_mortalcopy>.
8321
8322 =cut
8323 */
8324
8325 SV *
8326 Perl_sv_2mortal(pTHX_ register SV *const sv)
8327 {
8328     dVAR;
8329     if (!sv)
8330         return NULL;
8331     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8332         return sv;
8333     PUSH_EXTEND_MORTAL__SV_C(sv);
8334     SvTEMP_on(sv);
8335     return sv;
8336 }
8337
8338 /*
8339 =for apidoc newSVpv
8340
8341 Creates a new SV and copies a string into it.  The reference count for the
8342 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8343 strlen().  For efficiency, consider using C<newSVpvn> instead.
8344
8345 =cut
8346 */
8347
8348 SV *
8349 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8350 {
8351     dVAR;
8352     SV *sv;
8353
8354     new_SV(sv);
8355     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8356     return sv;
8357 }
8358
8359 /*
8360 =for apidoc newSVpvn
8361
8362 Creates a new SV and copies a buffer into it, which may contain NUL characters
8363 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8364 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8365 are responsible for ensuring that the source buffer is at least
8366 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8367 undefined.
8368
8369 =cut
8370 */
8371
8372 SV *
8373 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8374 {
8375     dVAR;
8376     SV *sv;
8377
8378     new_SV(sv);
8379     sv_setpvn(sv,buffer,len);
8380     return sv;
8381 }
8382
8383 /*
8384 =for apidoc newSVhek
8385
8386 Creates a new SV from the hash key structure.  It will generate scalars that
8387 point to the shared string table where possible.  Returns a new (undefined)
8388 SV if the hek is NULL.
8389
8390 =cut
8391 */
8392
8393 SV *
8394 Perl_newSVhek(pTHX_ const HEK *const hek)
8395 {
8396     dVAR;
8397     if (!hek) {
8398         SV *sv;
8399
8400         new_SV(sv);
8401         return sv;
8402     }
8403
8404     if (HEK_LEN(hek) == HEf_SVKEY) {
8405         return newSVsv(*(SV**)HEK_KEY(hek));
8406     } else {
8407         const int flags = HEK_FLAGS(hek);
8408         if (flags & HVhek_WASUTF8) {
8409             /* Trouble :-)
8410                Andreas would like keys he put in as utf8 to come back as utf8
8411             */
8412             STRLEN utf8_len = HEK_LEN(hek);
8413             SV * const sv = newSV_type(SVt_PV);
8414             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8415             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8416             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8417             SvUTF8_on (sv);
8418             return sv;
8419         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8420             /* We don't have a pointer to the hv, so we have to replicate the
8421                flag into every HEK. This hv is using custom a hasing
8422                algorithm. Hence we can't return a shared string scalar, as
8423                that would contain the (wrong) hash value, and might get passed
8424                into an hv routine with a regular hash.
8425                Similarly, a hash that isn't using shared hash keys has to have
8426                the flag in every key so that we know not to try to call
8427                share_hek_hek on it.  */
8428
8429             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8430             if (HEK_UTF8(hek))
8431                 SvUTF8_on (sv);
8432             return sv;
8433         }
8434         /* This will be overwhelminly the most common case.  */
8435         {
8436             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8437                more efficient than sharepvn().  */
8438             SV *sv;
8439
8440             new_SV(sv);
8441             sv_upgrade(sv, SVt_PV);
8442             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8443             SvCUR_set(sv, HEK_LEN(hek));
8444             SvLEN_set(sv, 0);
8445             SvREADONLY_on(sv);
8446             SvFAKE_on(sv);
8447             SvPOK_on(sv);
8448             if (HEK_UTF8(hek))
8449                 SvUTF8_on(sv);
8450             return sv;
8451         }
8452     }
8453 }
8454
8455 /*
8456 =for apidoc newSVpvn_share
8457
8458 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8459 table.  If the string does not already exist in the table, it is
8460 created first.  Turns on READONLY and FAKE.  If the C<hash> parameter
8461 is non-zero, that value is used; otherwise the hash is computed.
8462 The string's hash can later be retrieved from the SV
8463 with the C<SvSHARED_HASH()> macro.  The idea here is
8464 that as the string table is used for shared hash keys these strings will have
8465 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8466
8467 =cut
8468 */
8469
8470 SV *
8471 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8472 {
8473     dVAR;
8474     SV *sv;
8475     bool is_utf8 = FALSE;
8476     const char *const orig_src = src;
8477
8478     if (len < 0) {
8479         STRLEN tmplen = -len;
8480         is_utf8 = TRUE;
8481         /* See the note in hv.c:hv_fetch() --jhi */
8482         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8483         len = tmplen;
8484     }
8485     if (!hash)
8486         PERL_HASH(hash, src, len);
8487     new_SV(sv);
8488     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8489        changes here, update it there too.  */
8490     sv_upgrade(sv, SVt_PV);
8491     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8492     SvCUR_set(sv, len);
8493     SvLEN_set(sv, 0);
8494     SvREADONLY_on(sv);
8495     SvFAKE_on(sv);
8496     SvPOK_on(sv);
8497     if (is_utf8)
8498         SvUTF8_on(sv);
8499     if (src != orig_src)
8500         Safefree(src);
8501     return sv;
8502 }
8503
8504 /*
8505 =for apidoc newSVpv_share
8506
8507 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8508 string/length pair.
8509
8510 =cut
8511 */
8512
8513 SV *
8514 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8515 {
8516     return newSVpvn_share(src, strlen(src), hash);
8517 }
8518
8519 #if defined(PERL_IMPLICIT_CONTEXT)
8520
8521 /* pTHX_ magic can't cope with varargs, so this is a no-context
8522  * version of the main function, (which may itself be aliased to us).
8523  * Don't access this version directly.
8524  */
8525
8526 SV *
8527 Perl_newSVpvf_nocontext(const char *const pat, ...)
8528 {
8529     dTHX;
8530     SV *sv;
8531     va_list args;
8532
8533     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8534
8535     va_start(args, pat);
8536     sv = vnewSVpvf(pat, &args);
8537     va_end(args);
8538     return sv;
8539 }
8540 #endif
8541
8542 /*
8543 =for apidoc newSVpvf
8544
8545 Creates a new SV and initializes it with the string formatted like
8546 C<sprintf>.
8547
8548 =cut
8549 */
8550
8551 SV *
8552 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8553 {
8554     SV *sv;
8555     va_list args;
8556
8557     PERL_ARGS_ASSERT_NEWSVPVF;
8558
8559     va_start(args, pat);
8560     sv = vnewSVpvf(pat, &args);
8561     va_end(args);
8562     return sv;
8563 }
8564
8565 /* backend for newSVpvf() and newSVpvf_nocontext() */
8566
8567 SV *
8568 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8569 {
8570     dVAR;
8571     SV *sv;
8572
8573     PERL_ARGS_ASSERT_VNEWSVPVF;
8574
8575     new_SV(sv);
8576     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8577     return sv;
8578 }
8579
8580 /*
8581 =for apidoc newSVnv
8582
8583 Creates a new SV and copies a floating point value into it.
8584 The reference count for the SV is set to 1.
8585
8586 =cut
8587 */
8588
8589 SV *
8590 Perl_newSVnv(pTHX_ const NV n)
8591 {
8592     dVAR;
8593     SV *sv;
8594
8595     new_SV(sv);
8596     sv_setnv(sv,n);
8597     return sv;
8598 }
8599
8600 /*
8601 =for apidoc newSViv
8602
8603 Creates a new SV and copies an integer into it.  The reference count for the
8604 SV is set to 1.
8605
8606 =cut
8607 */
8608
8609 SV *
8610 Perl_newSViv(pTHX_ const IV i)
8611 {
8612     dVAR;
8613     SV *sv;
8614
8615     new_SV(sv);
8616     sv_setiv(sv,i);
8617     return sv;
8618 }
8619
8620 /*
8621 =for apidoc newSVuv
8622
8623 Creates a new SV and copies an unsigned integer into it.
8624 The reference count for the SV is set to 1.
8625
8626 =cut
8627 */
8628
8629 SV *
8630 Perl_newSVuv(pTHX_ const UV u)
8631 {
8632     dVAR;
8633     SV *sv;
8634
8635     new_SV(sv);
8636     sv_setuv(sv,u);
8637     return sv;
8638 }
8639
8640 /*
8641 =for apidoc newSV_type
8642
8643 Creates a new SV, of the type specified.  The reference count for the new SV
8644 is set to 1.
8645
8646 =cut
8647 */
8648
8649 SV *
8650 Perl_newSV_type(pTHX_ const svtype type)
8651 {
8652     SV *sv;
8653
8654     new_SV(sv);
8655     sv_upgrade(sv, type);
8656     return sv;
8657 }
8658
8659 /*
8660 =for apidoc newRV_noinc
8661
8662 Creates an RV wrapper for an SV.  The reference count for the original
8663 SV is B<not> incremented.
8664
8665 =cut
8666 */
8667
8668 SV *
8669 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8670 {
8671     dVAR;
8672     SV *sv = newSV_type(SVt_IV);
8673
8674     PERL_ARGS_ASSERT_NEWRV_NOINC;
8675
8676     SvTEMP_off(tmpRef);
8677     SvRV_set(sv, tmpRef);
8678     SvROK_on(sv);
8679     return sv;
8680 }
8681
8682 /* newRV_inc is the official function name to use now.
8683  * newRV_inc is in fact #defined to newRV in sv.h
8684  */
8685
8686 SV *
8687 Perl_newRV(pTHX_ SV *const sv)
8688 {
8689     dVAR;
8690
8691     PERL_ARGS_ASSERT_NEWRV;
8692
8693     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8694 }
8695
8696 /*
8697 =for apidoc newSVsv
8698
8699 Creates a new SV which is an exact duplicate of the original SV.
8700 (Uses C<sv_setsv>.)
8701
8702 =cut
8703 */
8704
8705 SV *
8706 Perl_newSVsv(pTHX_ register SV *const old)
8707 {
8708     dVAR;
8709     SV *sv;
8710
8711     if (!old)
8712         return NULL;
8713     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8714         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8715         return NULL;
8716     }
8717     /* Do this here, otherwise we leak the new SV if this croaks. */
8718     SvGETMAGIC(old);
8719     new_SV(sv);
8720     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8721        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8722     sv_setsv_flags(sv, old, SV_NOSTEAL);
8723     return sv;
8724 }
8725
8726 /*
8727 =for apidoc sv_reset
8728
8729 Underlying implementation for the C<reset> Perl function.
8730 Note that the perl-level function is vaguely deprecated.
8731
8732 =cut
8733 */
8734
8735 void
8736 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8737 {
8738     PERL_ARGS_ASSERT_SV_RESET;
8739
8740     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
8741 }
8742
8743 void
8744 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
8745 {
8746     dVAR;
8747     char todo[PERL_UCHAR_MAX+1];
8748     const char *send;
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     send = s + len;
8779     while (s < send) {
8780         I32 max;
8781         I32 i = (unsigned char)*s;
8782         if (s[1] == '-') {
8783             s += 2;
8784         }
8785         max = (unsigned char)*s++;
8786         for ( ; i <= max; i++) {
8787             todo[i] = 1;
8788         }
8789         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8790             HE *entry;
8791             for (entry = HvARRAY(stash)[i];
8792                  entry;
8793                  entry = HeNEXT(entry))
8794             {
8795                 GV *gv;
8796                 SV *sv;
8797
8798                 if (!todo[(U8)*HeKEY(entry)])
8799                     continue;
8800                 gv = MUTABLE_GV(HeVAL(entry));
8801                 sv = GvSV(gv);
8802                 if (sv) {
8803                     if (SvTHINKFIRST(sv)) {
8804                         if (!SvREADONLY(sv) && SvROK(sv))
8805                             sv_unref(sv);
8806                         /* XXX Is this continue a bug? Why should THINKFIRST
8807                            exempt us from resetting arrays and hashes?  */
8808                         continue;
8809                     }
8810                     SvOK_off(sv);
8811                     if (SvTYPE(sv) >= SVt_PV) {
8812                         SvCUR_set(sv, 0);
8813                         if (SvPVX_const(sv) != NULL)
8814                             *SvPVX(sv) = '\0';
8815                         SvTAINT(sv);
8816                     }
8817                 }
8818                 if (GvAV(gv)) {
8819                     av_clear(GvAV(gv));
8820                 }
8821                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8822 #if defined(VMS)
8823                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8824 #else /* ! VMS */
8825                     hv_clear(GvHV(gv));
8826 #  if defined(USE_ENVIRON_ARRAY)
8827                     if (gv == PL_envgv)
8828                         my_clearenv();
8829 #  endif /* USE_ENVIRON_ARRAY */
8830 #endif /* VMS */
8831                 }
8832             }
8833         }
8834     }
8835 }
8836
8837 /*
8838 =for apidoc sv_2io
8839
8840 Using various gambits, try to get an IO from an SV: the IO slot if its a
8841 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8842 named after the PV if we're a string.
8843
8844 'Get' magic is ignored on the sv passed in, but will be called on
8845 C<SvRV(sv)> if sv is an RV.
8846
8847 =cut
8848 */
8849
8850 IO*
8851 Perl_sv_2io(pTHX_ SV *const sv)
8852 {
8853     IO* io;
8854     GV* gv;
8855
8856     PERL_ARGS_ASSERT_SV_2IO;
8857
8858     switch (SvTYPE(sv)) {
8859     case SVt_PVIO:
8860         io = MUTABLE_IO(sv);
8861         break;
8862     case SVt_PVGV:
8863     case SVt_PVLV:
8864         if (isGV_with_GP(sv)) {
8865             gv = MUTABLE_GV(sv);
8866             io = GvIO(gv);
8867             if (!io)
8868                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
8869                                     HEKfARG(GvNAME_HEK(gv)));
8870             break;
8871         }
8872         /* FALL THROUGH */
8873     default:
8874         if (!SvOK(sv))
8875             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8876         if (SvROK(sv)) {
8877             SvGETMAGIC(SvRV(sv));
8878             return sv_2io(SvRV(sv));
8879         }
8880         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
8881         if (gv)
8882             io = GvIO(gv);
8883         else
8884             io = 0;
8885         if (!io) {
8886             SV *newsv = sv;
8887             if (SvGMAGICAL(sv)) {
8888                 newsv = sv_newmortal();
8889                 sv_setsv_nomg(newsv, sv);
8890             }
8891             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
8892         }
8893         break;
8894     }
8895     return io;
8896 }
8897
8898 /*
8899 =for apidoc sv_2cv
8900
8901 Using various gambits, try to get a CV from an SV; in addition, try if
8902 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8903 The flags in C<lref> are passed to gv_fetchsv.
8904
8905 =cut
8906 */
8907
8908 CV *
8909 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8910 {
8911     dVAR;
8912     GV *gv = NULL;
8913     CV *cv = NULL;
8914
8915     PERL_ARGS_ASSERT_SV_2CV;
8916
8917     if (!sv) {
8918         *st = NULL;
8919         *gvp = NULL;
8920         return NULL;
8921     }
8922     switch (SvTYPE(sv)) {
8923     case SVt_PVCV:
8924         *st = CvSTASH(sv);
8925         *gvp = NULL;
8926         return MUTABLE_CV(sv);
8927     case SVt_PVHV:
8928     case SVt_PVAV:
8929         *st = NULL;
8930         *gvp = NULL;
8931         return NULL;
8932     default:
8933         SvGETMAGIC(sv);
8934         if (SvROK(sv)) {
8935             if (SvAMAGIC(sv))
8936                 sv = amagic_deref_call(sv, to_cv_amg);
8937
8938             sv = SvRV(sv);
8939             if (SvTYPE(sv) == SVt_PVCV) {
8940                 cv = MUTABLE_CV(sv);
8941                 *gvp = NULL;
8942                 *st = CvSTASH(cv);
8943                 return cv;
8944             }
8945             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
8946                 gv = MUTABLE_GV(sv);
8947             else
8948                 Perl_croak(aTHX_ "Not a subroutine reference");
8949         }
8950         else if (isGV_with_GP(sv)) {
8951             gv = MUTABLE_GV(sv);
8952         }
8953         else {
8954             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
8955         }
8956         *gvp = gv;
8957         if (!gv) {
8958             *st = NULL;
8959             return NULL;
8960         }
8961         /* Some flags to gv_fetchsv mean don't really create the GV  */
8962         if (!isGV_with_GP(gv)) {
8963             *st = NULL;
8964             return NULL;
8965         }
8966         *st = GvESTASH(gv);
8967         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
8968             /* XXX this is probably not what they think they're getting.
8969              * It has the same effect as "sub name;", i.e. just a forward
8970              * declaration! */
8971             newSTUB(gv,0);
8972         }
8973         return GvCVu(gv);
8974     }
8975 }
8976
8977 /*
8978 =for apidoc sv_true
8979
8980 Returns true if the SV has a true value by Perl's rules.
8981 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8982 instead use an in-line version.
8983
8984 =cut
8985 */
8986
8987 I32
8988 Perl_sv_true(pTHX_ register SV *const sv)
8989 {
8990     if (!sv)
8991         return 0;
8992     if (SvPOK(sv)) {
8993         const XPV* const tXpv = (XPV*)SvANY(sv);
8994         if (tXpv &&
8995                 (tXpv->xpv_cur > 1 ||
8996                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
8997             return 1;
8998         else
8999             return 0;
9000     }
9001     else {
9002         if (SvIOK(sv))
9003             return SvIVX(sv) != 0;
9004         else {
9005             if (SvNOK(sv))
9006                 return SvNVX(sv) != 0.0;
9007             else
9008                 return sv_2bool(sv);
9009         }
9010     }
9011 }
9012
9013 /*
9014 =for apidoc sv_pvn_force
9015
9016 Get a sensible string out of the SV somehow.
9017 A private implementation of the C<SvPV_force> macro for compilers which
9018 can't cope with complex macro expressions.  Always use the macro instead.
9019
9020 =for apidoc sv_pvn_force_flags
9021
9022 Get a sensible string out of the SV somehow.
9023 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9024 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9025 implemented in terms of this function.
9026 You normally want to use the various wrapper macros instead: see
9027 C<SvPV_force> and C<SvPV_force_nomg>
9028
9029 =cut
9030 */
9031
9032 char *
9033 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9034 {
9035     dVAR;
9036
9037     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9038
9039     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9040     if (SvTHINKFIRST(sv) && !SvROK(sv))
9041         sv_force_normal_flags(sv, 0);
9042
9043     if (SvPOK(sv)) {
9044         if (lp)
9045             *lp = SvCUR(sv);
9046     }
9047     else {
9048         char *s;
9049         STRLEN len;
9050  
9051         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9052             const char * const ref = sv_reftype(sv,0);
9053             if (PL_op)
9054                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9055                            ref, OP_DESC(PL_op));
9056             else
9057                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9058         }
9059         if (SvTYPE(sv) > SVt_PVLV
9060             || isGV_with_GP(sv))
9061             /* diag_listed_as: Can't coerce %s to %s in %s */
9062             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9063                 OP_DESC(PL_op));
9064         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9065         if (!s) {
9066           s = (char *)"";
9067         }
9068         if (lp)
9069             *lp = len;
9070
9071         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9072             if (SvROK(sv))
9073                 sv_unref(sv);
9074             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9075             SvGROW(sv, len + 1);
9076             Move(s,SvPVX(sv),len,char);
9077             SvCUR_set(sv, len);
9078             SvPVX(sv)[len] = '\0';
9079         }
9080         if (!SvPOK(sv)) {
9081             SvPOK_on(sv);               /* validate pointer */
9082             SvTAINT(sv);
9083             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9084                                   PTR2UV(sv),SvPVX_const(sv)));
9085         }
9086     }
9087     (void)SvPOK_only_UTF8(sv);
9088     return SvPVX_mutable(sv);
9089 }
9090
9091 /*
9092 =for apidoc sv_pvbyten_force
9093
9094 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9095 instead.
9096
9097 =cut
9098 */
9099
9100 char *
9101 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9102 {
9103     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9104
9105     sv_pvn_force(sv,lp);
9106     sv_utf8_downgrade(sv,0);
9107     *lp = SvCUR(sv);
9108     return SvPVX(sv);
9109 }
9110
9111 /*
9112 =for apidoc sv_pvutf8n_force
9113
9114 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9115 instead.
9116
9117 =cut
9118 */
9119
9120 char *
9121 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9122 {
9123     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9124
9125     sv_pvn_force(sv,0);
9126     sv_utf8_upgrade_nomg(sv);
9127     *lp = SvCUR(sv);
9128     return SvPVX(sv);
9129 }
9130
9131 /*
9132 =for apidoc sv_reftype
9133
9134 Returns a string describing what the SV is a reference to.
9135
9136 =cut
9137 */
9138
9139 const char *
9140 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9141 {
9142     PERL_ARGS_ASSERT_SV_REFTYPE;
9143     if (ob && SvOBJECT(sv)) {
9144         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9145     }
9146     else {
9147         switch (SvTYPE(sv)) {
9148         case SVt_NULL:
9149         case SVt_IV:
9150         case SVt_NV:
9151         case SVt_PV:
9152         case SVt_PVIV:
9153         case SVt_PVNV:
9154         case SVt_PVMG:
9155                                 if (SvVOK(sv))
9156                                     return "VSTRING";
9157                                 if (SvROK(sv))
9158                                     return "REF";
9159                                 else
9160                                     return "SCALAR";
9161
9162         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9163                                 /* tied lvalues should appear to be
9164                                  * scalars for backwards compatibility */
9165                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9166                                     ? "SCALAR" : "LVALUE");
9167         case SVt_PVAV:          return "ARRAY";
9168         case SVt_PVHV:          return "HASH";
9169         case SVt_PVCV:          return "CODE";
9170         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9171                                     ? "GLOB" : "SCALAR");
9172         case SVt_PVFM:          return "FORMAT";
9173         case SVt_PVIO:          return "IO";
9174         case SVt_BIND:          return "BIND";
9175         case SVt_REGEXP:        return "REGEXP";
9176         default:                return "UNKNOWN";
9177         }
9178     }
9179 }
9180
9181 /*
9182 =for apidoc sv_ref
9183
9184 Returns a SV describing what the SV passed in is a reference to.
9185
9186 =cut
9187 */
9188
9189 SV *
9190 Perl_sv_ref(pTHX_ register SV *dst, const SV *const sv, const int ob)
9191 {
9192     PERL_ARGS_ASSERT_SV_REF;
9193
9194     if (!dst)
9195         dst = sv_newmortal();
9196
9197     if (ob && SvOBJECT(sv)) {
9198         HvNAME_get(SvSTASH(sv))
9199                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9200                     : sv_setpvn(dst, "__ANON__", 8);
9201     }
9202     else {
9203         const char * reftype = sv_reftype(sv, 0);
9204         sv_setpv(dst, reftype);
9205     }
9206     return dst;
9207 }
9208
9209 /*
9210 =for apidoc sv_isobject
9211
9212 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9213 object.  If the SV is not an RV, or if the object is not blessed, then this
9214 will return false.
9215
9216 =cut
9217 */
9218
9219 int
9220 Perl_sv_isobject(pTHX_ SV *sv)
9221 {
9222     if (!sv)
9223         return 0;
9224     SvGETMAGIC(sv);
9225     if (!SvROK(sv))
9226         return 0;
9227     sv = SvRV(sv);
9228     if (!SvOBJECT(sv))
9229         return 0;
9230     return 1;
9231 }
9232
9233 /*
9234 =for apidoc sv_isa
9235
9236 Returns a boolean indicating whether the SV is blessed into the specified
9237 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9238 an inheritance relationship.
9239
9240 =cut
9241 */
9242
9243 int
9244 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9245 {
9246     const char *hvname;
9247
9248     PERL_ARGS_ASSERT_SV_ISA;
9249
9250     if (!sv)
9251         return 0;
9252     SvGETMAGIC(sv);
9253     if (!SvROK(sv))
9254         return 0;
9255     sv = SvRV(sv);
9256     if (!SvOBJECT(sv))
9257         return 0;
9258     hvname = HvNAME_get(SvSTASH(sv));
9259     if (!hvname)
9260         return 0;
9261
9262     return strEQ(hvname, name);
9263 }
9264
9265 /*
9266 =for apidoc newSVrv
9267
9268 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9269 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9270 be blessed in the specified package.  The new SV is returned and its
9271 reference count is 1.
9272
9273 =cut
9274 */
9275
9276 SV*
9277 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9278 {
9279     dVAR;
9280     SV *sv;
9281
9282     PERL_ARGS_ASSERT_NEWSVRV;
9283
9284     new_SV(sv);
9285
9286     SV_CHECK_THINKFIRST_COW_DROP(rv);
9287
9288     if (SvTYPE(rv) >= SVt_PVMG) {
9289         const U32 refcnt = SvREFCNT(rv);
9290         SvREFCNT(rv) = 0;
9291         sv_clear(rv);
9292         SvFLAGS(rv) = 0;
9293         SvREFCNT(rv) = refcnt;
9294
9295         sv_upgrade(rv, SVt_IV);
9296     } else if (SvROK(rv)) {
9297         SvREFCNT_dec(SvRV(rv));
9298     } else {
9299         prepare_SV_for_RV(rv);
9300     }
9301
9302     SvOK_off(rv);
9303     SvRV_set(rv, sv);
9304     SvROK_on(rv);
9305
9306     if (classname) {
9307         HV* const stash = gv_stashpv(classname, GV_ADD);
9308         (void)sv_bless(rv, stash);
9309     }
9310     return sv;
9311 }
9312
9313 /*
9314 =for apidoc sv_setref_pv
9315
9316 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9317 argument will be upgraded to an RV.  That RV will be modified to point to
9318 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9319 into the SV.  The C<classname> argument indicates the package for the
9320 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9321 will have a reference count of 1, and the RV will be returned.
9322
9323 Do not use with other Perl types such as HV, AV, SV, CV, because those
9324 objects will become corrupted by the pointer copy process.
9325
9326 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9327
9328 =cut
9329 */
9330
9331 SV*
9332 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9333 {
9334     dVAR;
9335
9336     PERL_ARGS_ASSERT_SV_SETREF_PV;
9337
9338     if (!pv) {
9339         sv_setsv(rv, &PL_sv_undef);
9340         SvSETMAGIC(rv);
9341     }
9342     else
9343         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9344     return rv;
9345 }
9346
9347 /*
9348 =for apidoc sv_setref_iv
9349
9350 Copies an 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_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9361 {
9362     PERL_ARGS_ASSERT_SV_SETREF_IV;
9363
9364     sv_setiv(newSVrv(rv,classname), iv);
9365     return rv;
9366 }
9367
9368 /*
9369 =for apidoc sv_setref_uv
9370
9371 Copies an unsigned integer 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_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9382 {
9383     PERL_ARGS_ASSERT_SV_SETREF_UV;
9384
9385     sv_setuv(newSVrv(rv,classname), uv);
9386     return rv;
9387 }
9388
9389 /*
9390 =for apidoc sv_setref_nv
9391
9392 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9393 argument will be upgraded to an RV.  That RV will be modified to point to
9394 the new SV.  The C<classname> argument indicates the package for the
9395 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9396 will have a reference count of 1, and the RV will be returned.
9397
9398 =cut
9399 */
9400
9401 SV*
9402 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9403 {
9404     PERL_ARGS_ASSERT_SV_SETREF_NV;
9405
9406     sv_setnv(newSVrv(rv,classname), nv);
9407     return rv;
9408 }
9409
9410 /*
9411 =for apidoc sv_setref_pvn
9412
9413 Copies a string into a new SV, optionally blessing the SV.  The length of the
9414 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9415 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9416 argument indicates the package for the blessing.  Set C<classname> to
9417 C<NULL> to avoid the blessing.  The new SV will have a reference count
9418 of 1, and the RV will be returned.
9419
9420 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9421
9422 =cut
9423 */
9424
9425 SV*
9426 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9427                    const char *const pv, const STRLEN n)
9428 {
9429     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9430
9431     sv_setpvn(newSVrv(rv,classname), pv, n);
9432     return rv;
9433 }
9434
9435 /*
9436 =for apidoc sv_bless
9437
9438 Blesses an SV into a specified package.  The SV must be an RV.  The package
9439 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9440 of the SV is unaffected.
9441
9442 =cut
9443 */
9444
9445 SV*
9446 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9447 {
9448     dVAR;
9449     SV *tmpRef;
9450
9451     PERL_ARGS_ASSERT_SV_BLESS;
9452
9453     if (!SvROK(sv))
9454         Perl_croak(aTHX_ "Can't bless non-reference value");
9455     tmpRef = SvRV(sv);
9456     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9457         if (SvIsCOW(tmpRef))
9458             sv_force_normal_flags(tmpRef, 0);
9459         if (SvREADONLY(tmpRef))
9460             Perl_croak_no_modify(aTHX);
9461         if (SvOBJECT(tmpRef)) {
9462             if (SvTYPE(tmpRef) != SVt_PVIO)
9463                 --PL_sv_objcount;
9464             SvREFCNT_dec(SvSTASH(tmpRef));
9465         }
9466     }
9467     SvOBJECT_on(tmpRef);
9468     if (SvTYPE(tmpRef) != SVt_PVIO)
9469         ++PL_sv_objcount;
9470     SvUPGRADE(tmpRef, SVt_PVMG);
9471     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9472
9473     if(SvSMAGICAL(tmpRef))
9474         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9475             mg_set(tmpRef);
9476
9477
9478
9479     return sv;
9480 }
9481
9482 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9483  * as it is after unglobbing it.
9484  */
9485
9486 PERL_STATIC_INLINE void
9487 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9488 {
9489     dVAR;
9490     void *xpvmg;
9491     HV *stash;
9492     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9493
9494     PERL_ARGS_ASSERT_SV_UNGLOB;
9495
9496     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9497     SvFAKE_off(sv);
9498     if (!(flags & SV_COW_DROP_PV))
9499         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9500
9501     if (GvGP(sv)) {
9502         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9503            && HvNAME_get(stash))
9504             mro_method_changed_in(stash);
9505         gp_free(MUTABLE_GV(sv));
9506     }
9507     if (GvSTASH(sv)) {
9508         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9509         GvSTASH(sv) = NULL;
9510     }
9511     GvMULTI_off(sv);
9512     if (GvNAME_HEK(sv)) {
9513         unshare_hek(GvNAME_HEK(sv));
9514     }
9515     isGV_with_GP_off(sv);
9516
9517     if(SvTYPE(sv) == SVt_PVGV) {
9518         /* need to keep SvANY(sv) in the right arena */
9519         xpvmg = new_XPVMG();
9520         StructCopy(SvANY(sv), xpvmg, XPVMG);
9521         del_XPVGV(SvANY(sv));
9522         SvANY(sv) = xpvmg;
9523
9524         SvFLAGS(sv) &= ~SVTYPEMASK;
9525         SvFLAGS(sv) |= SVt_PVMG;
9526     }
9527
9528     /* Intentionally not calling any local SET magic, as this isn't so much a
9529        set operation as merely an internal storage change.  */
9530     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9531     else sv_setsv_flags(sv, temp, 0);
9532
9533     if ((const GV *)sv == PL_last_in_gv)
9534         PL_last_in_gv = NULL;
9535     else if ((const GV *)sv == PL_statgv)
9536         PL_statgv = NULL;
9537 }
9538
9539 /*
9540 =for apidoc sv_unref_flags
9541
9542 Unsets the RV status of the SV, and decrements the reference count of
9543 whatever was being referenced by the RV.  This can almost be thought of
9544 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9545 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9546 (otherwise the decrementing is conditional on the reference count being
9547 different from one or the reference being a readonly SV).
9548 See C<SvROK_off>.
9549
9550 =cut
9551 */
9552
9553 void
9554 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9555 {
9556     SV* const target = SvRV(ref);
9557
9558     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9559
9560     if (SvWEAKREF(ref)) {
9561         sv_del_backref(target, ref);
9562         SvWEAKREF_off(ref);
9563         SvRV_set(ref, NULL);
9564         return;
9565     }
9566     SvRV_set(ref, NULL);
9567     SvROK_off(ref);
9568     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9569        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9570     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9571         SvREFCNT_dec(target);
9572     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9573         sv_2mortal(target);     /* Schedule for freeing later */
9574 }
9575
9576 /*
9577 =for apidoc sv_untaint
9578
9579 Untaint an SV.  Use C<SvTAINTED_off> instead.
9580
9581 =cut
9582 */
9583
9584 void
9585 Perl_sv_untaint(pTHX_ SV *const sv)
9586 {
9587     PERL_ARGS_ASSERT_SV_UNTAINT;
9588
9589     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9590         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9591         if (mg)
9592             mg->mg_len &= ~1;
9593     }
9594 }
9595
9596 /*
9597 =for apidoc sv_tainted
9598
9599 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9600
9601 =cut
9602 */
9603
9604 bool
9605 Perl_sv_tainted(pTHX_ SV *const sv)
9606 {
9607     PERL_ARGS_ASSERT_SV_TAINTED;
9608
9609     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9610         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9611         if (mg && (mg->mg_len & 1) )
9612             return TRUE;
9613     }
9614     return FALSE;
9615 }
9616
9617 /*
9618 =for apidoc sv_setpviv
9619
9620 Copies an integer into the given SV, also updating its string value.
9621 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9622
9623 =cut
9624 */
9625
9626 void
9627 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9628 {
9629     char buf[TYPE_CHARS(UV)];
9630     char *ebuf;
9631     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9632
9633     PERL_ARGS_ASSERT_SV_SETPVIV;
9634
9635     sv_setpvn(sv, ptr, ebuf - ptr);
9636 }
9637
9638 /*
9639 =for apidoc sv_setpviv_mg
9640
9641 Like C<sv_setpviv>, but also handles 'set' magic.
9642
9643 =cut
9644 */
9645
9646 void
9647 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9648 {
9649     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9650
9651     sv_setpviv(sv, iv);
9652     SvSETMAGIC(sv);
9653 }
9654
9655 #if defined(PERL_IMPLICIT_CONTEXT)
9656
9657 /* pTHX_ magic can't cope with varargs, so this is a no-context
9658  * version of the main function, (which may itself be aliased to us).
9659  * Don't access this version directly.
9660  */
9661
9662 void
9663 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9664 {
9665     dTHX;
9666     va_list args;
9667
9668     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9669
9670     va_start(args, pat);
9671     sv_vsetpvf(sv, pat, &args);
9672     va_end(args);
9673 }
9674
9675 /* pTHX_ magic can't cope with varargs, so this is a no-context
9676  * version of the main function, (which may itself be aliased to us).
9677  * Don't access this version directly.
9678  */
9679
9680 void
9681 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9682 {
9683     dTHX;
9684     va_list args;
9685
9686     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9687
9688     va_start(args, pat);
9689     sv_vsetpvf_mg(sv, pat, &args);
9690     va_end(args);
9691 }
9692 #endif
9693
9694 /*
9695 =for apidoc sv_setpvf
9696
9697 Works like C<sv_catpvf> but copies the text into the SV instead of
9698 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9699
9700 =cut
9701 */
9702
9703 void
9704 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9705 {
9706     va_list args;
9707
9708     PERL_ARGS_ASSERT_SV_SETPVF;
9709
9710     va_start(args, pat);
9711     sv_vsetpvf(sv, pat, &args);
9712     va_end(args);
9713 }
9714
9715 /*
9716 =for apidoc sv_vsetpvf
9717
9718 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9719 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9720
9721 Usually used via its frontend C<sv_setpvf>.
9722
9723 =cut
9724 */
9725
9726 void
9727 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9728 {
9729     PERL_ARGS_ASSERT_SV_VSETPVF;
9730
9731     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9732 }
9733
9734 /*
9735 =for apidoc sv_setpvf_mg
9736
9737 Like C<sv_setpvf>, but also handles 'set' magic.
9738
9739 =cut
9740 */
9741
9742 void
9743 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9744 {
9745     va_list args;
9746
9747     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9748
9749     va_start(args, pat);
9750     sv_vsetpvf_mg(sv, pat, &args);
9751     va_end(args);
9752 }
9753
9754 /*
9755 =for apidoc sv_vsetpvf_mg
9756
9757 Like C<sv_vsetpvf>, but also handles 'set' magic.
9758
9759 Usually used via its frontend C<sv_setpvf_mg>.
9760
9761 =cut
9762 */
9763
9764 void
9765 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9766 {
9767     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9768
9769     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9770     SvSETMAGIC(sv);
9771 }
9772
9773 #if defined(PERL_IMPLICIT_CONTEXT)
9774
9775 /* pTHX_ magic can't cope with varargs, so this is a no-context
9776  * version of the main function, (which may itself be aliased to us).
9777  * Don't access this version directly.
9778  */
9779
9780 void
9781 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9782 {
9783     dTHX;
9784     va_list args;
9785
9786     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9787
9788     va_start(args, pat);
9789     sv_vcatpvf(sv, pat, &args);
9790     va_end(args);
9791 }
9792
9793 /* pTHX_ magic can't cope with varargs, so this is a no-context
9794  * version of the main function, (which may itself be aliased to us).
9795  * Don't access this version directly.
9796  */
9797
9798 void
9799 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9800 {
9801     dTHX;
9802     va_list args;
9803
9804     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9805
9806     va_start(args, pat);
9807     sv_vcatpvf_mg(sv, pat, &args);
9808     va_end(args);
9809 }
9810 #endif
9811
9812 /*
9813 =for apidoc sv_catpvf
9814
9815 Processes its arguments like C<sprintf> and appends the formatted
9816 output to an SV.  If the appended data contains "wide" characters
9817 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9818 and characters >255 formatted with %c), the original SV might get
9819 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9820 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
9821 valid UTF-8; if the original SV was bytes, the pattern should be too.
9822
9823 =cut */
9824
9825 void
9826 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9827 {
9828     va_list args;
9829
9830     PERL_ARGS_ASSERT_SV_CATPVF;
9831
9832     va_start(args, pat);
9833     sv_vcatpvf(sv, pat, &args);
9834     va_end(args);
9835 }
9836
9837 /*
9838 =for apidoc sv_vcatpvf
9839
9840 Processes its arguments like C<vsprintf> and appends the formatted output
9841 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9842
9843 Usually used via its frontend C<sv_catpvf>.
9844
9845 =cut
9846 */
9847
9848 void
9849 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9850 {
9851     PERL_ARGS_ASSERT_SV_VCATPVF;
9852
9853     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9854 }
9855
9856 /*
9857 =for apidoc sv_catpvf_mg
9858
9859 Like C<sv_catpvf>, but also handles 'set' magic.
9860
9861 =cut
9862 */
9863
9864 void
9865 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9866 {
9867     va_list args;
9868
9869     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9870
9871     va_start(args, pat);
9872     sv_vcatpvf_mg(sv, pat, &args);
9873     va_end(args);
9874 }
9875
9876 /*
9877 =for apidoc sv_vcatpvf_mg
9878
9879 Like C<sv_vcatpvf>, but also handles 'set' magic.
9880
9881 Usually used via its frontend C<sv_catpvf_mg>.
9882
9883 =cut
9884 */
9885
9886 void
9887 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9888 {
9889     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9890
9891     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9892     SvSETMAGIC(sv);
9893 }
9894
9895 /*
9896 =for apidoc sv_vsetpvfn
9897
9898 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9899 appending it.
9900
9901 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9902
9903 =cut
9904 */
9905
9906 void
9907 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9908                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9909 {
9910     PERL_ARGS_ASSERT_SV_VSETPVFN;
9911
9912     sv_setpvs(sv, "");
9913     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
9914 }
9915
9916
9917 /*
9918  * Warn of missing argument to sprintf, and then return a defined value
9919  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9920  */
9921 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9922 STATIC SV*
9923 S_vcatpvfn_missing_argument(pTHX) {
9924     if (ckWARN(WARN_MISSING)) {
9925         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9926                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9927     }
9928     return &PL_sv_no;
9929 }
9930
9931
9932 STATIC I32
9933 S_expect_number(pTHX_ char **const pattern)
9934 {
9935     dVAR;
9936     I32 var = 0;
9937
9938     PERL_ARGS_ASSERT_EXPECT_NUMBER;
9939
9940     switch (**pattern) {
9941     case '1': case '2': case '3':
9942     case '4': case '5': case '6':
9943     case '7': case '8': case '9':
9944         var = *(*pattern)++ - '0';
9945         while (isDIGIT(**pattern)) {
9946             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9947             if (tmp < var)
9948                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9949             var = tmp;
9950         }
9951     }
9952     return var;
9953 }
9954
9955 STATIC char *
9956 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9957 {
9958     const int neg = nv < 0;
9959     UV uv;
9960
9961     PERL_ARGS_ASSERT_F0CONVERT;
9962
9963     if (neg)
9964         nv = -nv;
9965     if (nv < UV_MAX) {
9966         char *p = endbuf;
9967         nv += 0.5;
9968         uv = (UV)nv;
9969         if (uv & 1 && uv == nv)
9970             uv--;                       /* Round to even */
9971         do {
9972             const unsigned dig = uv % 10;
9973             *--p = '0' + dig;
9974         } while (uv /= 10);
9975         if (neg)
9976             *--p = '-';
9977         *len = endbuf - p;
9978         return p;
9979     }
9980     return NULL;
9981 }
9982
9983
9984 /*
9985 =for apidoc sv_vcatpvfn
9986
9987 =for apidoc sv_vcatpvfn_flags
9988
9989 Processes its arguments like C<vsprintf> and appends the formatted output
9990 to an SV.  Uses an array of SVs if the C style variable argument list is
9991 missing (NULL).  When running with taint checks enabled, indicates via
9992 C<maybe_tainted> if results are untrustworthy (often due to the use of
9993 locales).
9994
9995 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
9996
9997 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9998
9999 =cut
10000 */
10001
10002 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10003                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10004                         vec_utf8 = DO_UTF8(vecsv);
10005
10006 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10007
10008 void
10009 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10010                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10011 {
10012     PERL_ARGS_ASSERT_SV_VCATPVFN;
10013
10014     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10015 }
10016
10017 void
10018 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10019                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10020                        const U32 flags)
10021 {
10022     dVAR;
10023     char *p;
10024     char *q;
10025     const char *patend;
10026     STRLEN origlen;
10027     I32 svix = 0;
10028     static const char nullstr[] = "(null)";
10029     SV *argsv = NULL;
10030     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10031     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10032     SV *nsv = NULL;
10033     /* Times 4: a decimal digit takes more than 3 binary digits.
10034      * NV_DIG: mantissa takes than many decimal digits.
10035      * Plus 32: Playing safe. */
10036     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10037     /* large enough for "%#.#f" --chip */
10038     /* what about long double NVs? --jhi */
10039
10040     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10041     PERL_UNUSED_ARG(maybe_tainted);
10042
10043     if (flags & SV_GMAGIC)
10044         SvGETMAGIC(sv);
10045
10046     /* no matter what, this is a string now */
10047     (void)SvPV_force_nomg(sv, origlen);
10048
10049     /* special-case "", "%s", and "%-p" (SVf - see below) */
10050     if (patlen == 0)
10051         return;
10052     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10053         if (args) {
10054             const char * const s = va_arg(*args, char*);
10055             sv_catpv_nomg(sv, s ? s : nullstr);
10056         }
10057         else if (svix < svmax) {
10058             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10059             SvGETMAGIC(*svargs);
10060             sv_catsv_nomg(sv, *svargs);
10061         }
10062         else
10063             S_vcatpvfn_missing_argument(aTHX);
10064         return;
10065     }
10066     if (args && patlen == 3 && pat[0] == '%' &&
10067                 pat[1] == '-' && pat[2] == 'p') {
10068         argsv = MUTABLE_SV(va_arg(*args, void*));
10069         sv_catsv_nomg(sv, argsv);
10070         return;
10071     }
10072
10073 #ifndef USE_LONG_DOUBLE
10074     /* special-case "%.<number>[gf]" */
10075     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10076          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10077         unsigned digits = 0;
10078         const char *pp;
10079
10080         pp = pat + 2;
10081         while (*pp >= '0' && *pp <= '9')
10082             digits = 10 * digits + (*pp++ - '0');
10083         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10084             const NV nv = SvNV(*svargs);
10085             if (*pp == 'g') {
10086                 /* Add check for digits != 0 because it seems that some
10087                    gconverts are buggy in this case, and we don't yet have
10088                    a Configure test for this.  */
10089                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10090                      /* 0, point, slack */
10091                     Gconvert(nv, (int)digits, 0, ebuf);
10092                     sv_catpv_nomg(sv, ebuf);
10093                     if (*ebuf)  /* May return an empty string for digits==0 */
10094                         return;
10095                 }
10096             } else if (!digits) {
10097                 STRLEN l;
10098
10099                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10100                     sv_catpvn_nomg(sv, p, l);
10101                     return;
10102                 }
10103             }
10104         }
10105     }
10106 #endif /* !USE_LONG_DOUBLE */
10107
10108     if (!args && svix < svmax && DO_UTF8(*svargs))
10109         has_utf8 = TRUE;
10110
10111     patend = (char*)pat + patlen;
10112     for (p = (char*)pat; p < patend; p = q) {
10113         bool alt = FALSE;
10114         bool left = FALSE;
10115         bool vectorize = FALSE;
10116         bool vectorarg = FALSE;
10117         bool vec_utf8 = FALSE;
10118         char fill = ' ';
10119         char plus = 0;
10120         char intsize = 0;
10121         STRLEN width = 0;
10122         STRLEN zeros = 0;
10123         bool has_precis = FALSE;
10124         STRLEN precis = 0;
10125         const I32 osvix = svix;
10126         bool is_utf8 = FALSE;  /* is this item utf8?   */
10127 #ifdef HAS_LDBL_SPRINTF_BUG
10128         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10129            with sfio - Allen <allens@cpan.org> */
10130         bool fix_ldbl_sprintf_bug = FALSE;
10131 #endif
10132
10133         char esignbuf[4];
10134         U8 utf8buf[UTF8_MAXBYTES+1];
10135         STRLEN esignlen = 0;
10136
10137         const char *eptr = NULL;
10138         const char *fmtstart;
10139         STRLEN elen = 0;
10140         SV *vecsv = NULL;
10141         const U8 *vecstr = NULL;
10142         STRLEN veclen = 0;
10143         char c = 0;
10144         int i;
10145         unsigned base = 0;
10146         IV iv = 0;
10147         UV uv = 0;
10148         /* we need a long double target in case HAS_LONG_DOUBLE but
10149            not USE_LONG_DOUBLE
10150         */
10151 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10152         long double nv;
10153 #else
10154         NV nv;
10155 #endif
10156         STRLEN have;
10157         STRLEN need;
10158         STRLEN gap;
10159         const char *dotstr = ".";
10160         STRLEN dotstrlen = 1;
10161         I32 efix = 0; /* explicit format parameter index */
10162         I32 ewix = 0; /* explicit width index */
10163         I32 epix = 0; /* explicit precision index */
10164         I32 evix = 0; /* explicit vector index */
10165         bool asterisk = FALSE;
10166
10167         /* echo everything up to the next format specification */
10168         for (q = p; q < patend && *q != '%'; ++q) ;
10169         if (q > p) {
10170             if (has_utf8 && !pat_utf8)
10171                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10172             else
10173                 sv_catpvn_nomg(sv, p, q - p);
10174             p = q;
10175         }
10176         if (q++ >= patend)
10177             break;
10178
10179         fmtstart = q;
10180
10181 /*
10182     We allow format specification elements in this order:
10183         \d+\$              explicit format parameter index
10184         [-+ 0#]+           flags
10185         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10186         0                  flag (as above): repeated to allow "v02"     
10187         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10188         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10189         [hlqLV]            size
10190     [%bcdefginopsuxDFOUX] format (mandatory)
10191 */
10192
10193         if (args) {
10194 /*  
10195         As of perl5.9.3, printf format checking is on by default.
10196         Internally, perl uses %p formats to provide an escape to
10197         some extended formatting.  This block deals with those
10198         extensions: if it does not match, (char*)q is reset and
10199         the normal format processing code is used.
10200
10201         Currently defined extensions are:
10202                 %p              include pointer address (standard)      
10203                 %-p     (SVf)   include an SV (previously %_)
10204                 %-<num>p        include an SV with precision <num>      
10205                 %2p             include a HEK
10206                 %3p             include a HEK with precision of 256
10207                 %<num>p         (where num != 2 or 3) reserved for future
10208                                 extensions
10209
10210         Robin Barker 2005-07-14 (but modified since)
10211
10212                 %1p     (VDf)   removed.  RMB 2007-10-19
10213 */
10214             char* r = q; 
10215             bool sv = FALSE;    
10216             STRLEN n = 0;
10217             if (*q == '-')
10218                 sv = *q++;
10219             n = expect_number(&q);
10220             if (*q++ == 'p') {
10221                 if (sv) {                       /* SVf */
10222                     if (n) {
10223                         precis = n;
10224                         has_precis = TRUE;
10225                     }
10226                     argsv = MUTABLE_SV(va_arg(*args, void*));
10227                     eptr = SvPV_const(argsv, elen);
10228                     if (DO_UTF8(argsv))
10229                         is_utf8 = TRUE;
10230                     goto string;
10231                 }
10232                 else if (n==2 || n==3) {        /* HEKf */
10233                     HEK * const hek = va_arg(*args, HEK *);
10234                     eptr = HEK_KEY(hek);
10235                     elen = HEK_LEN(hek);
10236                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10237                     if (n==3) precis = 256, has_precis = TRUE;
10238                     goto string;
10239                 }
10240                 else if (n) {
10241                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10242                                      "internal %%<num>p might conflict with future printf extensions");
10243                 }
10244             }
10245             q = r; 
10246         }
10247
10248         if ( (width = expect_number(&q)) ) {
10249             if (*q == '$') {
10250                 ++q;
10251                 efix = width;
10252             } else {
10253                 goto gotwidth;
10254             }
10255         }
10256
10257         /* FLAGS */
10258
10259         while (*q) {
10260             switch (*q) {
10261             case ' ':
10262             case '+':
10263                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10264                     q++;
10265                 else
10266                     plus = *q++;
10267                 continue;
10268
10269             case '-':
10270                 left = TRUE;
10271                 q++;
10272                 continue;
10273
10274             case '0':
10275                 fill = *q++;
10276                 continue;
10277
10278             case '#':
10279                 alt = TRUE;
10280                 q++;
10281                 continue;
10282
10283             default:
10284                 break;
10285             }
10286             break;
10287         }
10288
10289       tryasterisk:
10290         if (*q == '*') {
10291             q++;
10292             if ( (ewix = expect_number(&q)) )
10293                 if (*q++ != '$')
10294                     goto unknown;
10295             asterisk = TRUE;
10296         }
10297         if (*q == 'v') {
10298             q++;
10299             if (vectorize)
10300                 goto unknown;
10301             if ((vectorarg = asterisk)) {
10302                 evix = ewix;
10303                 ewix = 0;
10304                 asterisk = FALSE;
10305             }
10306             vectorize = TRUE;
10307             goto tryasterisk;
10308         }
10309
10310         if (!asterisk)
10311         {
10312             if( *q == '0' )
10313                 fill = *q++;
10314             width = expect_number(&q);
10315         }
10316
10317         if (vectorize && vectorarg) {
10318             /* vectorizing, but not with the default "." */
10319             if (args)
10320                 vecsv = va_arg(*args, SV*);
10321             else if (evix) {
10322                 vecsv = (evix > 0 && evix <= svmax)
10323                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10324             } else {
10325                 vecsv = svix < svmax
10326                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10327             }
10328             dotstr = SvPV_const(vecsv, dotstrlen);
10329             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10330                bad with tied or overloaded values that return UTF8.  */
10331             if (DO_UTF8(vecsv))
10332                 is_utf8 = TRUE;
10333             else if (has_utf8) {
10334                 vecsv = sv_mortalcopy(vecsv);
10335                 sv_utf8_upgrade(vecsv);
10336                 dotstr = SvPV_const(vecsv, dotstrlen);
10337                 is_utf8 = TRUE;
10338             }               
10339         }
10340
10341         if (asterisk) {
10342             if (args)
10343                 i = va_arg(*args, int);
10344             else
10345                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10346                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10347             left |= (i < 0);
10348             width = (i < 0) ? -i : i;
10349         }
10350       gotwidth:
10351
10352         /* PRECISION */
10353
10354         if (*q == '.') {
10355             q++;
10356             if (*q == '*') {
10357                 q++;
10358                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10359                     goto unknown;
10360                 /* XXX: todo, support specified precision parameter */
10361                 if (epix)
10362                     goto unknown;
10363                 if (args)
10364                     i = va_arg(*args, int);
10365                 else
10366                     i = (ewix ? ewix <= svmax : svix < svmax)
10367                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10368                 precis = i;
10369                 has_precis = !(i < 0);
10370             }
10371             else {
10372                 precis = 0;
10373                 while (isDIGIT(*q))
10374                     precis = precis * 10 + (*q++ - '0');
10375                 has_precis = TRUE;
10376             }
10377         }
10378
10379         if (vectorize) {
10380             if (args) {
10381                 VECTORIZE_ARGS
10382             }
10383             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10384                 vecsv = svargs[efix ? efix-1 : svix++];
10385                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10386                 vec_utf8 = DO_UTF8(vecsv);
10387
10388                 /* if this is a version object, we need to convert
10389                  * back into v-string notation and then let the
10390                  * vectorize happen normally
10391                  */
10392                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10393                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10394                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10395                         "vector argument not supported with alpha versions");
10396                         goto vdblank;
10397                     }
10398                     vecsv = sv_newmortal();
10399                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10400                                  vecsv);
10401                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10402                     vec_utf8 = DO_UTF8(vecsv);
10403                 }
10404             }
10405             else {
10406               vdblank:
10407                 vecstr = (U8*)"";
10408                 veclen = 0;
10409             }
10410         }
10411
10412         /* SIZE */
10413
10414         switch (*q) {
10415 #ifdef WIN32
10416         case 'I':                       /* Ix, I32x, and I64x */
10417 #  ifdef USE_64_BIT_INT
10418             if (q[1] == '6' && q[2] == '4') {
10419                 q += 3;
10420                 intsize = 'q';
10421                 break;
10422             }
10423 #  endif
10424             if (q[1] == '3' && q[2] == '2') {
10425                 q += 3;
10426                 break;
10427             }
10428 #  ifdef USE_64_BIT_INT
10429             intsize = 'q';
10430 #  endif
10431             q++;
10432             break;
10433 #endif
10434 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10435         case 'L':                       /* Ld */
10436             /*FALLTHROUGH*/
10437 #ifdef HAS_QUAD
10438         case 'q':                       /* qd */
10439 #endif
10440             intsize = 'q';
10441             q++;
10442             break;
10443 #endif
10444         case 'l':
10445             ++q;
10446 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10447             if (*q == 'l') {    /* lld, llf */
10448                 intsize = 'q';
10449                 ++q;
10450             }
10451             else
10452 #endif
10453                 intsize = 'l';
10454             break;
10455         case 'h':
10456             if (*++q == 'h') {  /* hhd, hhu */
10457                 intsize = 'c';
10458                 ++q;
10459             }
10460             else
10461                 intsize = 'h';
10462             break;
10463         case 'V':
10464         case 'z':
10465         case 't':
10466 #if HAS_C99
10467         case 'j':
10468 #endif
10469             intsize = *q++;
10470             break;
10471         }
10472
10473         /* CONVERSION */
10474
10475         if (*q == '%') {
10476             eptr = q++;
10477             elen = 1;
10478             if (vectorize) {
10479                 c = '%';
10480                 goto unknown;
10481             }
10482             goto string;
10483         }
10484
10485         if (!vectorize && !args) {
10486             if (efix) {
10487                 const I32 i = efix-1;
10488                 argsv = (i >= 0 && i < svmax)
10489                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10490             } else {
10491                 argsv = (svix >= 0 && svix < svmax)
10492                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10493             }
10494         }
10495
10496         switch (c = *q++) {
10497
10498             /* STRINGS */
10499
10500         case 'c':
10501             if (vectorize)
10502                 goto unknown;
10503             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10504             if ((uv > 255 ||
10505                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10506                 && !IN_BYTES) {
10507                 eptr = (char*)utf8buf;
10508                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10509                 is_utf8 = TRUE;
10510             }
10511             else {
10512                 c = (char)uv;
10513                 eptr = &c;
10514                 elen = 1;
10515             }
10516             goto string;
10517
10518         case 's':
10519             if (vectorize)
10520                 goto unknown;
10521             if (args) {
10522                 eptr = va_arg(*args, char*);
10523                 if (eptr)
10524                     elen = strlen(eptr);
10525                 else {
10526                     eptr = (char *)nullstr;
10527                     elen = sizeof nullstr - 1;
10528                 }
10529             }
10530             else {
10531                 eptr = SvPV_const(argsv, elen);
10532                 if (DO_UTF8(argsv)) {
10533                     STRLEN old_precis = precis;
10534                     if (has_precis && precis < elen) {
10535                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10536                         STRLEN p = precis > ulen ? ulen : precis;
10537                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10538                                                         /* sticks at end */
10539                     }
10540                     if (width) { /* fudge width (can't fudge elen) */
10541                         if (has_precis && precis < elen)
10542                             width += precis - old_precis;
10543                         else
10544                             width +=
10545                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10546                     }
10547                     is_utf8 = TRUE;
10548                 }
10549             }
10550
10551         string:
10552             if (has_precis && precis < elen)
10553                 elen = precis;
10554             break;
10555
10556             /* INTEGERS */
10557
10558         case 'p':
10559             if (alt || vectorize)
10560                 goto unknown;
10561             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10562             base = 16;
10563             goto integer;
10564
10565         case 'D':
10566 #ifdef IV_IS_QUAD
10567             intsize = 'q';
10568 #else
10569             intsize = 'l';
10570 #endif
10571             /*FALLTHROUGH*/
10572         case 'd':
10573         case 'i':
10574 #if vdNUMBER
10575         format_vd:
10576 #endif
10577             if (vectorize) {
10578                 STRLEN ulen;
10579                 if (!veclen)
10580                     continue;
10581                 if (vec_utf8)
10582                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10583                                         UTF8_ALLOW_ANYUV);
10584                 else {
10585                     uv = *vecstr;
10586                     ulen = 1;
10587                 }
10588                 vecstr += ulen;
10589                 veclen -= ulen;
10590                 if (plus)
10591                      esignbuf[esignlen++] = plus;
10592             }
10593             else if (args) {
10594                 switch (intsize) {
10595                 case 'c':       iv = (char)va_arg(*args, int); break;
10596                 case 'h':       iv = (short)va_arg(*args, int); break;
10597                 case 'l':       iv = va_arg(*args, long); break;
10598                 case 'V':       iv = va_arg(*args, IV); break;
10599                 case 'z':       iv = va_arg(*args, SSize_t); break;
10600                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10601                 default:        iv = va_arg(*args, int); break;
10602 #if HAS_C99
10603                 case 'j':       iv = va_arg(*args, intmax_t); break;
10604 #endif
10605                 case 'q':
10606 #ifdef HAS_QUAD
10607                                 iv = va_arg(*args, Quad_t); break;
10608 #else
10609                                 goto unknown;
10610 #endif
10611                 }
10612             }
10613             else {
10614                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10615                 switch (intsize) {
10616                 case 'c':       iv = (char)tiv; break;
10617                 case 'h':       iv = (short)tiv; break;
10618                 case 'l':       iv = (long)tiv; break;
10619                 case 'V':
10620                 default:        iv = tiv; break;
10621                 case 'q':
10622 #ifdef HAS_QUAD
10623                                 iv = (Quad_t)tiv; break;
10624 #else
10625                                 goto unknown;
10626 #endif
10627                 }
10628             }
10629             if ( !vectorize )   /* we already set uv above */
10630             {
10631                 if (iv >= 0) {
10632                     uv = iv;
10633                     if (plus)
10634                         esignbuf[esignlen++] = plus;
10635                 }
10636                 else {
10637                     uv = -iv;
10638                     esignbuf[esignlen++] = '-';
10639                 }
10640             }
10641             base = 10;
10642             goto integer;
10643
10644         case 'U':
10645 #ifdef IV_IS_QUAD
10646             intsize = 'q';
10647 #else
10648             intsize = 'l';
10649 #endif
10650             /*FALLTHROUGH*/
10651         case 'u':
10652             base = 10;
10653             goto uns_integer;
10654
10655         case 'B':
10656         case 'b':
10657             base = 2;
10658             goto uns_integer;
10659
10660         case 'O':
10661 #ifdef IV_IS_QUAD
10662             intsize = 'q';
10663 #else
10664             intsize = 'l';
10665 #endif
10666             /*FALLTHROUGH*/
10667         case 'o':
10668             base = 8;
10669             goto uns_integer;
10670
10671         case 'X':
10672         case 'x':
10673             base = 16;
10674
10675         uns_integer:
10676             if (vectorize) {
10677                 STRLEN ulen;
10678         vector:
10679                 if (!veclen)
10680                     continue;
10681                 if (vec_utf8)
10682                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10683                                         UTF8_ALLOW_ANYUV);
10684                 else {
10685                     uv = *vecstr;
10686                     ulen = 1;
10687                 }
10688                 vecstr += ulen;
10689                 veclen -= ulen;
10690             }
10691             else if (args) {
10692                 switch (intsize) {
10693                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10694                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10695                 case 'l':  uv = va_arg(*args, unsigned long); break;
10696                 case 'V':  uv = va_arg(*args, UV); break;
10697                 case 'z':  uv = va_arg(*args, Size_t); break;
10698                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10699 #if HAS_C99
10700                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10701 #endif
10702                 default:   uv = va_arg(*args, unsigned); break;
10703                 case 'q':
10704 #ifdef HAS_QUAD
10705                            uv = va_arg(*args, Uquad_t); break;
10706 #else
10707                            goto unknown;
10708 #endif
10709                 }
10710             }
10711             else {
10712                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10713                 switch (intsize) {
10714                 case 'c':       uv = (unsigned char)tuv; break;
10715                 case 'h':       uv = (unsigned short)tuv; break;
10716                 case 'l':       uv = (unsigned long)tuv; break;
10717                 case 'V':
10718                 default:        uv = tuv; break;
10719                 case 'q':
10720 #ifdef HAS_QUAD
10721                                 uv = (Uquad_t)tuv; break;
10722 #else
10723                                 goto unknown;
10724 #endif
10725                 }
10726             }
10727
10728         integer:
10729             {
10730                 char *ptr = ebuf + sizeof ebuf;
10731                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10732                 zeros = 0;
10733
10734                 switch (base) {
10735                     unsigned dig;
10736                 case 16:
10737                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10738                     do {
10739                         dig = uv & 15;
10740                         *--ptr = p[dig];
10741                     } while (uv >>= 4);
10742                     if (tempalt) {
10743                         esignbuf[esignlen++] = '0';
10744                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10745                     }
10746                     break;
10747                 case 8:
10748                     do {
10749                         dig = uv & 7;
10750                         *--ptr = '0' + dig;
10751                     } while (uv >>= 3);
10752                     if (alt && *ptr != '0')
10753                         *--ptr = '0';
10754                     break;
10755                 case 2:
10756                     do {
10757                         dig = uv & 1;
10758                         *--ptr = '0' + dig;
10759                     } while (uv >>= 1);
10760                     if (tempalt) {
10761                         esignbuf[esignlen++] = '0';
10762                         esignbuf[esignlen++] = c;
10763                     }
10764                     break;
10765                 default:                /* it had better be ten or less */
10766                     do {
10767                         dig = uv % base;
10768                         *--ptr = '0' + dig;
10769                     } while (uv /= base);
10770                     break;
10771                 }
10772                 elen = (ebuf + sizeof ebuf) - ptr;
10773                 eptr = ptr;
10774                 if (has_precis) {
10775                     if (precis > elen)
10776                         zeros = precis - elen;
10777                     else if (precis == 0 && elen == 1 && *eptr == '0'
10778                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10779                         elen = 0;
10780
10781                 /* a precision nullifies the 0 flag. */
10782                     if (fill == '0')
10783                         fill = ' ';
10784                 }
10785             }
10786             break;
10787
10788             /* FLOATING POINT */
10789
10790         case 'F':
10791             c = 'f';            /* maybe %F isn't supported here */
10792             /*FALLTHROUGH*/
10793         case 'e': case 'E':
10794         case 'f':
10795         case 'g': case 'G':
10796             if (vectorize)
10797                 goto unknown;
10798
10799             /* This is evil, but floating point is even more evil */
10800
10801             /* for SV-style calling, we can only get NV
10802                for C-style calling, we assume %f is double;
10803                for simplicity we allow any of %Lf, %llf, %qf for long double
10804             */
10805             switch (intsize) {
10806             case 'V':
10807 #if defined(USE_LONG_DOUBLE)
10808                 intsize = 'q';
10809 #endif
10810                 break;
10811 /* [perl #20339] - we should accept and ignore %lf rather than die */
10812             case 'l':
10813                 /*FALLTHROUGH*/
10814             default:
10815 #if defined(USE_LONG_DOUBLE)
10816                 intsize = args ? 0 : 'q';
10817 #endif
10818                 break;
10819             case 'q':
10820 #if defined(HAS_LONG_DOUBLE)
10821                 break;
10822 #else
10823                 /*FALLTHROUGH*/
10824 #endif
10825             case 'c':
10826             case 'h':
10827             case 'z':
10828             case 't':
10829             case 'j':
10830                 goto unknown;
10831             }
10832
10833             /* now we need (long double) if intsize == 'q', else (double) */
10834             nv = (args) ?
10835 #if LONG_DOUBLESIZE > DOUBLESIZE
10836                 intsize == 'q' ?
10837                     va_arg(*args, long double) :
10838                     va_arg(*args, double)
10839 #else
10840                     va_arg(*args, double)
10841 #endif
10842                 : SvNV(argsv);
10843
10844             need = 0;
10845             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10846                else. frexp() has some unspecified behaviour for those three */
10847             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10848                 i = PERL_INT_MIN;
10849                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10850                    will cast our (long double) to (double) */
10851                 (void)Perl_frexp(nv, &i);
10852                 if (i == PERL_INT_MIN)
10853                     Perl_die(aTHX_ "panic: frexp");
10854                 if (i > 0)
10855                     need = BIT_DIGITS(i);
10856             }
10857             need += has_precis ? precis : 6; /* known default */
10858
10859             if (need < width)
10860                 need = width;
10861
10862 #ifdef HAS_LDBL_SPRINTF_BUG
10863             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10864                with sfio - Allen <allens@cpan.org> */
10865
10866 #  ifdef DBL_MAX
10867 #    define MY_DBL_MAX DBL_MAX
10868 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10869 #    if DOUBLESIZE >= 8
10870 #      define MY_DBL_MAX 1.7976931348623157E+308L
10871 #    else
10872 #      define MY_DBL_MAX 3.40282347E+38L
10873 #    endif
10874 #  endif
10875
10876 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10877 #    define MY_DBL_MAX_BUG 1L
10878 #  else
10879 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10880 #  endif
10881
10882 #  ifdef DBL_MIN
10883 #    define MY_DBL_MIN DBL_MIN
10884 #  else  /* XXX guessing! -Allen */
10885 #    if DOUBLESIZE >= 8
10886 #      define MY_DBL_MIN 2.2250738585072014E-308L
10887 #    else
10888 #      define MY_DBL_MIN 1.17549435E-38L
10889 #    endif
10890 #  endif
10891
10892             if ((intsize == 'q') && (c == 'f') &&
10893                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10894                 (need < DBL_DIG)) {
10895                 /* it's going to be short enough that
10896                  * long double precision is not needed */
10897
10898                 if ((nv <= 0L) && (nv >= -0L))
10899                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10900                 else {
10901                     /* would use Perl_fp_class as a double-check but not
10902                      * functional on IRIX - see perl.h comments */
10903
10904                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10905                         /* It's within the range that a double can represent */
10906 #if defined(DBL_MAX) && !defined(DBL_MIN)
10907                         if ((nv >= ((long double)1/DBL_MAX)) ||
10908                             (nv <= (-(long double)1/DBL_MAX)))
10909 #endif
10910                         fix_ldbl_sprintf_bug = TRUE;
10911                     }
10912                 }
10913                 if (fix_ldbl_sprintf_bug == TRUE) {
10914                     double temp;
10915
10916                     intsize = 0;
10917                     temp = (double)nv;
10918                     nv = (NV)temp;
10919                 }
10920             }
10921
10922 #  undef MY_DBL_MAX
10923 #  undef MY_DBL_MAX_BUG
10924 #  undef MY_DBL_MIN
10925
10926 #endif /* HAS_LDBL_SPRINTF_BUG */
10927
10928             need += 20; /* fudge factor */
10929             if (PL_efloatsize < need) {
10930                 Safefree(PL_efloatbuf);
10931                 PL_efloatsize = need + 20; /* more fudge */
10932                 Newx(PL_efloatbuf, PL_efloatsize, char);
10933                 PL_efloatbuf[0] = '\0';
10934             }
10935
10936             if ( !(width || left || plus || alt) && fill != '0'
10937                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10938                 /* See earlier comment about buggy Gconvert when digits,
10939                    aka precis is 0  */
10940                 if ( c == 'g' && precis) {
10941                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10942                     /* May return an empty string for digits==0 */
10943                     if (*PL_efloatbuf) {
10944                         elen = strlen(PL_efloatbuf);
10945                         goto float_converted;
10946                     }
10947                 } else if ( c == 'f' && !precis) {
10948                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10949                         break;
10950                 }
10951             }
10952             {
10953                 char *ptr = ebuf + sizeof ebuf;
10954                 *--ptr = '\0';
10955                 *--ptr = c;
10956                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10957 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10958                 if (intsize == 'q') {
10959                     /* Copy the one or more characters in a long double
10960                      * format before the 'base' ([efgEFG]) character to
10961                      * the format string. */
10962                     static char const prifldbl[] = PERL_PRIfldbl;
10963                     char const *p = prifldbl + sizeof(prifldbl) - 3;
10964                     while (p >= prifldbl) { *--ptr = *p--; }
10965                 }
10966 #endif
10967                 if (has_precis) {
10968                     base = precis;
10969                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10970                     *--ptr = '.';
10971                 }
10972                 if (width) {
10973                     base = width;
10974                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10975                 }
10976                 if (fill == '0')
10977                     *--ptr = fill;
10978                 if (left)
10979                     *--ptr = '-';
10980                 if (plus)
10981                     *--ptr = plus;
10982                 if (alt)
10983                     *--ptr = '#';
10984                 *--ptr = '%';
10985
10986                 /* No taint.  Otherwise we are in the strange situation
10987                  * where printf() taints but print($float) doesn't.
10988                  * --jhi */
10989 #if defined(HAS_LONG_DOUBLE)
10990                 elen = ((intsize == 'q')
10991                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10992                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
10993 #else
10994                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
10995 #endif
10996             }
10997         float_converted:
10998             eptr = PL_efloatbuf;
10999             break;
11000
11001             /* SPECIAL */
11002
11003         case 'n':
11004             if (vectorize)
11005                 goto unknown;
11006             i = SvCUR(sv) - origlen;
11007             if (args) {
11008                 switch (intsize) {
11009                 case 'c':       *(va_arg(*args, char*)) = i; break;
11010                 case 'h':       *(va_arg(*args, short*)) = i; break;
11011                 default:        *(va_arg(*args, int*)) = i; break;
11012                 case 'l':       *(va_arg(*args, long*)) = i; break;
11013                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11014                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11015                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11016 #if HAS_C99
11017                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11018 #endif
11019                 case 'q':
11020 #ifdef HAS_QUAD
11021                                 *(va_arg(*args, Quad_t*)) = i; break;
11022 #else
11023                                 goto unknown;
11024 #endif
11025                 }
11026             }
11027             else
11028                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11029             continue;   /* not "break" */
11030
11031             /* UNKNOWN */
11032
11033         default:
11034       unknown:
11035             if (!args
11036                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11037                 && ckWARN(WARN_PRINTF))
11038             {
11039                 SV * const msg = sv_newmortal();
11040                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11041                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11042                 if (fmtstart < patend) {
11043                     const char * const fmtend = q < patend ? q : patend;
11044                     const char * f;
11045                     sv_catpvs(msg, "\"%");
11046                     for (f = fmtstart; f < fmtend; f++) {
11047                         if (isPRINT(*f)) {
11048                             sv_catpvn_nomg(msg, f, 1);
11049                         } else {
11050                             Perl_sv_catpvf(aTHX_ msg,
11051                                            "\\%03"UVof, (UV)*f & 0xFF);
11052                         }
11053                     }
11054                     sv_catpvs(msg, "\"");
11055                 } else {
11056                     sv_catpvs(msg, "end of string");
11057                 }
11058                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11059             }
11060
11061             /* output mangled stuff ... */
11062             if (c == '\0')
11063                 --q;
11064             eptr = p;
11065             elen = q - p;
11066
11067             /* ... right here, because formatting flags should not apply */
11068             SvGROW(sv, SvCUR(sv) + elen + 1);
11069             p = SvEND(sv);
11070             Copy(eptr, p, elen, char);
11071             p += elen;
11072             *p = '\0';
11073             SvCUR_set(sv, p - SvPVX_const(sv));
11074             svix = osvix;
11075             continue;   /* not "break" */
11076         }
11077
11078         if (is_utf8 != has_utf8) {
11079             if (is_utf8) {
11080                 if (SvCUR(sv))
11081                     sv_utf8_upgrade(sv);
11082             }
11083             else {
11084                 const STRLEN old_elen = elen;
11085                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11086                 sv_utf8_upgrade(nsv);
11087                 eptr = SvPVX_const(nsv);
11088                 elen = SvCUR(nsv);
11089
11090                 if (width) { /* fudge width (can't fudge elen) */
11091                     width += elen - old_elen;
11092                 }
11093                 is_utf8 = TRUE;
11094             }
11095         }
11096
11097         have = esignlen + zeros + elen;
11098         if (have < zeros)
11099             Perl_croak_nocontext("%s", PL_memory_wrap);
11100
11101         need = (have > width ? have : width);
11102         gap = need - have;
11103
11104         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11105             Perl_croak_nocontext("%s", PL_memory_wrap);
11106         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11107         p = SvEND(sv);
11108         if (esignlen && fill == '0') {
11109             int i;
11110             for (i = 0; i < (int)esignlen; i++)
11111                 *p++ = esignbuf[i];
11112         }
11113         if (gap && !left) {
11114             memset(p, fill, gap);
11115             p += gap;
11116         }
11117         if (esignlen && fill != '0') {
11118             int i;
11119             for (i = 0; i < (int)esignlen; i++)
11120                 *p++ = esignbuf[i];
11121         }
11122         if (zeros) {
11123             int i;
11124             for (i = zeros; i; i--)
11125                 *p++ = '0';
11126         }
11127         if (elen) {
11128             Copy(eptr, p, elen, char);
11129             p += elen;
11130         }
11131         if (gap && left) {
11132             memset(p, ' ', gap);
11133             p += gap;
11134         }
11135         if (vectorize) {
11136             if (veclen) {
11137                 Copy(dotstr, p, dotstrlen, char);
11138                 p += dotstrlen;
11139             }
11140             else
11141                 vectorize = FALSE;              /* done iterating over vecstr */
11142         }
11143         if (is_utf8)
11144             has_utf8 = TRUE;
11145         if (has_utf8)
11146             SvUTF8_on(sv);
11147         *p = '\0';
11148         SvCUR_set(sv, p - SvPVX_const(sv));
11149         if (vectorize) {
11150             esignlen = 0;
11151             goto vector;
11152         }
11153     }
11154     SvTAINT(sv);
11155 }
11156
11157 /* =========================================================================
11158
11159 =head1 Cloning an interpreter
11160
11161 All the macros and functions in this section are for the private use of
11162 the main function, perl_clone().
11163
11164 The foo_dup() functions make an exact copy of an existing foo thingy.
11165 During the course of a cloning, a hash table is used to map old addresses
11166 to new addresses.  The table is created and manipulated with the
11167 ptr_table_* functions.
11168
11169 =cut
11170
11171  * =========================================================================*/
11172
11173
11174 #if defined(USE_ITHREADS)
11175
11176 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11177 #ifndef GpREFCNT_inc
11178 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11179 #endif
11180
11181
11182 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11183    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11184    If this changes, please unmerge ss_dup.
11185    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11186 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11187 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11188 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11189 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11190 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11191 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11192 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11193 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11194 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11195 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11196 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11197 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11198 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11199
11200 /* clone a parser */
11201
11202 yy_parser *
11203 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11204 {
11205     yy_parser *parser;
11206
11207     PERL_ARGS_ASSERT_PARSER_DUP;
11208
11209     if (!proto)
11210         return NULL;
11211
11212     /* look for it in the table first */
11213     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11214     if (parser)
11215         return parser;
11216
11217     /* create anew and remember what it is */
11218     Newxz(parser, 1, yy_parser);
11219     ptr_table_store(PL_ptr_table, proto, parser);
11220
11221     /* XXX these not yet duped */
11222     parser->old_parser = NULL;
11223     parser->stack = NULL;
11224     parser->ps = NULL;
11225     parser->stack_size = 0;
11226     /* XXX parser->stack->state = 0; */
11227
11228     /* XXX eventually, just Copy() most of the parser struct ? */
11229
11230     parser->lex_brackets = proto->lex_brackets;
11231     parser->lex_casemods = proto->lex_casemods;
11232     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11233                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11234     parser->lex_casestack = savepvn(proto->lex_casestack,
11235                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11236     parser->lex_defer   = proto->lex_defer;
11237     parser->lex_dojoin  = proto->lex_dojoin;
11238     parser->lex_expect  = proto->lex_expect;
11239     parser->lex_formbrack = proto->lex_formbrack;
11240     parser->lex_inpat   = proto->lex_inpat;
11241     parser->lex_inwhat  = proto->lex_inwhat;
11242     parser->lex_op      = proto->lex_op;
11243     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11244     parser->lex_starts  = proto->lex_starts;
11245     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11246     parser->multi_close = proto->multi_close;
11247     parser->multi_open  = proto->multi_open;
11248     parser->multi_start = proto->multi_start;
11249     parser->multi_end   = proto->multi_end;
11250     parser->preambled   = proto->preambled;
11251     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11252     parser->linestr     = sv_dup_inc(proto->linestr, param);
11253     parser->expect      = proto->expect;
11254     parser->copline     = proto->copline;
11255     parser->last_lop_op = proto->last_lop_op;
11256     parser->lex_state   = proto->lex_state;
11257     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11258     /* rsfp_filters entries have fake IoDIRP() */
11259     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11260     parser->in_my       = proto->in_my;
11261     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11262     parser->error_count = proto->error_count;
11263
11264
11265     parser->linestr     = sv_dup_inc(proto->linestr, param);
11266
11267     {
11268         char * const ols = SvPVX(proto->linestr);
11269         char * const ls  = SvPVX(parser->linestr);
11270
11271         parser->bufptr      = ls + (proto->bufptr >= ols ?
11272                                     proto->bufptr -  ols : 0);
11273         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11274                                     proto->oldbufptr -  ols : 0);
11275         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11276                                     proto->oldoldbufptr -  ols : 0);
11277         parser->linestart   = ls + (proto->linestart >= ols ?
11278                                     proto->linestart -  ols : 0);
11279         parser->last_uni    = ls + (proto->last_uni >= ols ?
11280                                     proto->last_uni -  ols : 0);
11281         parser->last_lop    = ls + (proto->last_lop >= ols ?
11282                                     proto->last_lop -  ols : 0);
11283
11284         parser->bufend      = ls + SvCUR(parser->linestr);
11285     }
11286
11287     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11288
11289
11290 #ifdef PERL_MAD
11291     parser->endwhite    = proto->endwhite;
11292     parser->faketokens  = proto->faketokens;
11293     parser->lasttoke    = proto->lasttoke;
11294     parser->nextwhite   = proto->nextwhite;
11295     parser->realtokenstart = proto->realtokenstart;
11296     parser->skipwhite   = proto->skipwhite;
11297     parser->thisclose   = proto->thisclose;
11298     parser->thismad     = proto->thismad;
11299     parser->thisopen    = proto->thisopen;
11300     parser->thisstuff   = proto->thisstuff;
11301     parser->thistoken   = proto->thistoken;
11302     parser->thiswhite   = proto->thiswhite;
11303
11304     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11305     parser->curforce    = proto->curforce;
11306 #else
11307     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11308     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11309     parser->nexttoke    = proto->nexttoke;
11310 #endif
11311
11312     /* XXX should clone saved_curcop here, but we aren't passed
11313      * proto_perl; so do it in perl_clone_using instead */
11314
11315     return parser;
11316 }
11317
11318
11319 /* duplicate a file handle */
11320
11321 PerlIO *
11322 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11323 {
11324     PerlIO *ret;
11325
11326     PERL_ARGS_ASSERT_FP_DUP;
11327     PERL_UNUSED_ARG(type);
11328
11329     if (!fp)
11330         return (PerlIO*)NULL;
11331
11332     /* look for it in the table first */
11333     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11334     if (ret)
11335         return ret;
11336
11337     /* create anew and remember what it is */
11338     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11339     ptr_table_store(PL_ptr_table, fp, ret);
11340     return ret;
11341 }
11342
11343 /* duplicate a directory handle */
11344
11345 DIR *
11346 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11347 {
11348     DIR *ret;
11349
11350 #ifdef HAS_FCHDIR
11351     DIR *pwd;
11352     const Direntry_t *dirent;
11353     char smallbuf[256];
11354     char *name = NULL;
11355     STRLEN len = 0;
11356     long pos;
11357 #endif
11358
11359     PERL_UNUSED_CONTEXT;
11360     PERL_ARGS_ASSERT_DIRP_DUP;
11361
11362     if (!dp)
11363         return (DIR*)NULL;
11364
11365     /* look for it in the table first */
11366     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11367     if (ret)
11368         return ret;
11369
11370 #ifdef HAS_FCHDIR
11371
11372     PERL_UNUSED_ARG(param);
11373
11374     /* create anew */
11375
11376     /* open the current directory (so we can switch back) */
11377     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11378
11379     /* chdir to our dir handle and open the present working directory */
11380     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11381         PerlDir_close(pwd);
11382         return (DIR *)NULL;
11383     }
11384     /* Now we should have two dir handles pointing to the same dir. */
11385
11386     /* Be nice to the calling code and chdir back to where we were. */
11387     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11388
11389     /* We have no need of the pwd handle any more. */
11390     PerlDir_close(pwd);
11391
11392 #ifdef DIRNAMLEN
11393 # define d_namlen(d) (d)->d_namlen
11394 #else
11395 # define d_namlen(d) strlen((d)->d_name)
11396 #endif
11397     /* Iterate once through dp, to get the file name at the current posi-
11398        tion. Then step back. */
11399     pos = PerlDir_tell(dp);
11400     if ((dirent = PerlDir_read(dp))) {
11401         len = d_namlen(dirent);
11402         if (len <= sizeof smallbuf) name = smallbuf;
11403         else Newx(name, len, char);
11404         Move(dirent->d_name, name, len, char);
11405     }
11406     PerlDir_seek(dp, pos);
11407
11408     /* Iterate through the new dir handle, till we find a file with the
11409        right name. */
11410     if (!dirent) /* just before the end */
11411         for(;;) {
11412             pos = PerlDir_tell(ret);
11413             if (PerlDir_read(ret)) continue; /* not there yet */
11414             PerlDir_seek(ret, pos); /* step back */
11415             break;
11416         }
11417     else {
11418         const long pos0 = PerlDir_tell(ret);
11419         for(;;) {
11420             pos = PerlDir_tell(ret);
11421             if ((dirent = PerlDir_read(ret))) {
11422                 if (len == d_namlen(dirent)
11423                  && memEQ(name, dirent->d_name, len)) {
11424                     /* found it */
11425                     PerlDir_seek(ret, pos); /* step back */
11426                     break;
11427                 }
11428                 /* else we are not there yet; keep iterating */
11429             }
11430             else { /* This is not meant to happen. The best we can do is
11431                       reset the iterator to the beginning. */
11432                 PerlDir_seek(ret, pos0);
11433                 break;
11434             }
11435         }
11436     }
11437 #undef d_namlen
11438
11439     if (name && name != smallbuf)
11440         Safefree(name);
11441 #endif
11442
11443 #ifdef WIN32
11444     ret = win32_dirp_dup(dp, param);
11445 #endif
11446
11447     /* pop it in the pointer table */
11448     if (ret)
11449         ptr_table_store(PL_ptr_table, dp, ret);
11450
11451     return ret;
11452 }
11453
11454 /* duplicate a typeglob */
11455
11456 GP *
11457 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11458 {
11459     GP *ret;
11460
11461     PERL_ARGS_ASSERT_GP_DUP;
11462
11463     if (!gp)
11464         return (GP*)NULL;
11465     /* look for it in the table first */
11466     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11467     if (ret)
11468         return ret;
11469
11470     /* create anew and remember what it is */
11471     Newxz(ret, 1, GP);
11472     ptr_table_store(PL_ptr_table, gp, ret);
11473
11474     /* clone */
11475     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11476        on Newxz() to do this for us.  */
11477     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11478     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11479     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11480     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11481     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11482     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11483     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11484     ret->gp_cvgen       = gp->gp_cvgen;
11485     ret->gp_line        = gp->gp_line;
11486     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11487     return ret;
11488 }
11489
11490 /* duplicate a chain of magic */
11491
11492 MAGIC *
11493 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11494 {
11495     MAGIC *mgret = NULL;
11496     MAGIC **mgprev_p = &mgret;
11497
11498     PERL_ARGS_ASSERT_MG_DUP;
11499
11500     for (; mg; mg = mg->mg_moremagic) {
11501         MAGIC *nmg;
11502
11503         if ((param->flags & CLONEf_JOIN_IN)
11504                 && mg->mg_type == PERL_MAGIC_backref)
11505             /* when joining, we let the individual SVs add themselves to
11506              * backref as needed. */
11507             continue;
11508
11509         Newx(nmg, 1, MAGIC);
11510         *mgprev_p = nmg;
11511         mgprev_p = &(nmg->mg_moremagic);
11512
11513         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11514            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11515            from the original commit adding Perl_mg_dup() - revision 4538.
11516            Similarly there is the annotation "XXX random ptr?" next to the
11517            assignment to nmg->mg_ptr.  */
11518         *nmg = *mg;
11519
11520         /* FIXME for plugins
11521         if (nmg->mg_type == PERL_MAGIC_qr) {
11522             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11523         }
11524         else
11525         */
11526         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11527                           ? nmg->mg_type == PERL_MAGIC_backref
11528                                 /* The backref AV has its reference
11529                                  * count deliberately bumped by 1 */
11530                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11531                                                     nmg->mg_obj, param))
11532                                 : sv_dup_inc(nmg->mg_obj, param)
11533                           : sv_dup(nmg->mg_obj, param);
11534
11535         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11536             if (nmg->mg_len > 0) {
11537                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11538                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11539                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11540                 {
11541                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11542                     sv_dup_inc_multiple((SV**)(namtp->table),
11543                                         (SV**)(namtp->table), NofAMmeth, param);
11544                 }
11545             }
11546             else if (nmg->mg_len == HEf_SVKEY)
11547                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11548         }
11549         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11550             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11551         }
11552     }
11553     return mgret;
11554 }
11555
11556 #endif /* USE_ITHREADS */
11557
11558 struct ptr_tbl_arena {
11559     struct ptr_tbl_arena *next;
11560     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11561 };
11562
11563 /* create a new pointer-mapping table */
11564
11565 PTR_TBL_t *
11566 Perl_ptr_table_new(pTHX)
11567 {
11568     PTR_TBL_t *tbl;
11569     PERL_UNUSED_CONTEXT;
11570
11571     Newx(tbl, 1, PTR_TBL_t);
11572     tbl->tbl_max        = 511;
11573     tbl->tbl_items      = 0;
11574     tbl->tbl_arena      = NULL;
11575     tbl->tbl_arena_next = NULL;
11576     tbl->tbl_arena_end  = NULL;
11577     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11578     return tbl;
11579 }
11580
11581 #define PTR_TABLE_HASH(ptr) \
11582   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11583
11584 /* map an existing pointer using a table */
11585
11586 STATIC PTR_TBL_ENT_t *
11587 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11588 {
11589     PTR_TBL_ENT_t *tblent;
11590     const UV hash = PTR_TABLE_HASH(sv);
11591
11592     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11593
11594     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11595     for (; tblent; tblent = tblent->next) {
11596         if (tblent->oldval == sv)
11597             return tblent;
11598     }
11599     return NULL;
11600 }
11601
11602 void *
11603 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11604 {
11605     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11606
11607     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11608     PERL_UNUSED_CONTEXT;
11609
11610     return tblent ? tblent->newval : NULL;
11611 }
11612
11613 /* add a new entry to a pointer-mapping table */
11614
11615 void
11616 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11617 {
11618     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11619
11620     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11621     PERL_UNUSED_CONTEXT;
11622
11623     if (tblent) {
11624         tblent->newval = newsv;
11625     } else {
11626         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11627
11628         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11629             struct ptr_tbl_arena *new_arena;
11630
11631             Newx(new_arena, 1, struct ptr_tbl_arena);
11632             new_arena->next = tbl->tbl_arena;
11633             tbl->tbl_arena = new_arena;
11634             tbl->tbl_arena_next = new_arena->array;
11635             tbl->tbl_arena_end = new_arena->array
11636                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11637         }
11638
11639         tblent = tbl->tbl_arena_next++;
11640
11641         tblent->oldval = oldsv;
11642         tblent->newval = newsv;
11643         tblent->next = tbl->tbl_ary[entry];
11644         tbl->tbl_ary[entry] = tblent;
11645         tbl->tbl_items++;
11646         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11647             ptr_table_split(tbl);
11648     }
11649 }
11650
11651 /* double the hash bucket size of an existing ptr table */
11652
11653 void
11654 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11655 {
11656     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11657     const UV oldsize = tbl->tbl_max + 1;
11658     UV newsize = oldsize * 2;
11659     UV i;
11660
11661     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11662     PERL_UNUSED_CONTEXT;
11663
11664     Renew(ary, newsize, PTR_TBL_ENT_t*);
11665     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11666     tbl->tbl_max = --newsize;
11667     tbl->tbl_ary = ary;
11668     for (i=0; i < oldsize; i++, ary++) {
11669         PTR_TBL_ENT_t **entp = ary;
11670         PTR_TBL_ENT_t *ent = *ary;
11671         PTR_TBL_ENT_t **curentp;
11672         if (!ent)
11673             continue;
11674         curentp = ary + oldsize;
11675         do {
11676             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11677                 *entp = ent->next;
11678                 ent->next = *curentp;
11679                 *curentp = ent;
11680             }
11681             else
11682                 entp = &ent->next;
11683             ent = *entp;
11684         } while (ent);
11685     }
11686 }
11687
11688 /* remove all the entries from a ptr table */
11689 /* Deprecated - will be removed post 5.14 */
11690
11691 void
11692 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11693 {
11694     if (tbl && tbl->tbl_items) {
11695         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11696
11697         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11698
11699         while (arena) {
11700             struct ptr_tbl_arena *next = arena->next;
11701
11702             Safefree(arena);
11703             arena = next;
11704         };
11705
11706         tbl->tbl_items = 0;
11707         tbl->tbl_arena = NULL;
11708         tbl->tbl_arena_next = NULL;
11709         tbl->tbl_arena_end = NULL;
11710     }
11711 }
11712
11713 /* clear and free a ptr table */
11714
11715 void
11716 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11717 {
11718     struct ptr_tbl_arena *arena;
11719
11720     if (!tbl) {
11721         return;
11722     }
11723
11724     arena = tbl->tbl_arena;
11725
11726     while (arena) {
11727         struct ptr_tbl_arena *next = arena->next;
11728
11729         Safefree(arena);
11730         arena = next;
11731     }
11732
11733     Safefree(tbl->tbl_ary);
11734     Safefree(tbl);
11735 }
11736
11737 #if defined(USE_ITHREADS)
11738
11739 void
11740 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11741 {
11742     PERL_ARGS_ASSERT_RVPV_DUP;
11743
11744     if (SvROK(sstr)) {
11745         if (SvWEAKREF(sstr)) {
11746             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11747             if (param->flags & CLONEf_JOIN_IN) {
11748                 /* if joining, we add any back references individually rather
11749                  * than copying the whole backref array */
11750                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11751             }
11752         }
11753         else
11754             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11755     }
11756     else if (SvPVX_const(sstr)) {
11757         /* Has something there */
11758         if (SvLEN(sstr)) {
11759             /* Normal PV - clone whole allocated space */
11760             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11761             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11762                 /* Not that normal - actually sstr is copy on write.
11763                    But we are a true, independent SV, so:  */
11764                 SvREADONLY_off(dstr);
11765                 SvFAKE_off(dstr);
11766             }
11767         }
11768         else {
11769             /* Special case - not normally malloced for some reason */
11770             if (isGV_with_GP(sstr)) {
11771                 /* Don't need to do anything here.  */
11772             }
11773             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
11774                 /* A "shared" PV - clone it as "shared" PV */
11775                 SvPV_set(dstr,
11776                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11777                                          param)));
11778             }
11779             else {
11780                 /* Some other special case - random pointer */
11781                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11782             }
11783         }
11784     }
11785     else {
11786         /* Copy the NULL */
11787         SvPV_set(dstr, NULL);
11788     }
11789 }
11790
11791 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11792 static SV **
11793 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11794                       SSize_t items, CLONE_PARAMS *const param)
11795 {
11796     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11797
11798     while (items-- > 0) {
11799         *dest++ = sv_dup_inc(*source++, param);
11800     }
11801
11802     return dest;
11803 }
11804
11805 /* duplicate an SV of any type (including AV, HV etc) */
11806
11807 static SV *
11808 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11809 {
11810     dVAR;
11811     SV *dstr;
11812
11813     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11814
11815     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
11816 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11817         abort();
11818 #endif
11819         return NULL;
11820     }
11821     /* look for it in the table first */
11822     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11823     if (dstr)
11824         return dstr;
11825
11826     if(param->flags & CLONEf_JOIN_IN) {
11827         /** We are joining here so we don't want do clone
11828             something that is bad **/
11829         if (SvTYPE(sstr) == SVt_PVHV) {
11830             const HEK * const hvname = HvNAME_HEK(sstr);
11831             if (hvname) {
11832                 /** don't clone stashes if they already exist **/
11833                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11834                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
11835                 ptr_table_store(PL_ptr_table, sstr, dstr);
11836                 return dstr;
11837             }
11838         }
11839         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
11840             HV *stash = GvSTASH(sstr);
11841             const HEK * hvname;
11842             if (stash && (hvname = HvNAME_HEK(stash))) {
11843                 /** don't clone GVs if they already exist **/
11844                 SV **svp;
11845                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11846                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
11847                 svp = hv_fetch(
11848                         stash, GvNAME(sstr),
11849                         GvNAMEUTF8(sstr)
11850                             ? -GvNAMELEN(sstr)
11851                             :  GvNAMELEN(sstr),
11852                         0
11853                       );
11854                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
11855                     ptr_table_store(PL_ptr_table, sstr, *svp);
11856                     return *svp;
11857                 }
11858             }
11859         }
11860     }
11861
11862     /* create anew and remember what it is */
11863     new_SV(dstr);
11864
11865 #ifdef DEBUG_LEAKING_SCALARS
11866     dstr->sv_debug_optype = sstr->sv_debug_optype;
11867     dstr->sv_debug_line = sstr->sv_debug_line;
11868     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11869     dstr->sv_debug_parent = (SV*)sstr;
11870     FREE_SV_DEBUG_FILE(dstr);
11871     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11872 #endif
11873
11874     ptr_table_store(PL_ptr_table, sstr, dstr);
11875
11876     /* clone */
11877     SvFLAGS(dstr)       = SvFLAGS(sstr);
11878     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11879     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11880
11881 #ifdef DEBUGGING
11882     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11883         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11884                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11885 #endif
11886
11887     /* don't clone objects whose class has asked us not to */
11888     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11889         SvFLAGS(dstr) = 0;
11890         return dstr;
11891     }
11892
11893     switch (SvTYPE(sstr)) {
11894     case SVt_NULL:
11895         SvANY(dstr)     = NULL;
11896         break;
11897     case SVt_IV:
11898         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11899         if(SvROK(sstr)) {
11900             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11901         } else {
11902             SvIV_set(dstr, SvIVX(sstr));
11903         }
11904         break;
11905     case SVt_NV:
11906         SvANY(dstr)     = new_XNV();
11907         SvNV_set(dstr, SvNVX(sstr));
11908         break;
11909         /* case SVt_BIND: */
11910     default:
11911         {
11912             /* These are all the types that need complex bodies allocating.  */
11913             void *new_body;
11914             const svtype sv_type = SvTYPE(sstr);
11915             const struct body_details *const sv_type_details
11916                 = bodies_by_type + sv_type;
11917
11918             switch (sv_type) {
11919             default:
11920                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11921                 break;
11922
11923             case SVt_PVGV:
11924             case SVt_PVIO:
11925             case SVt_PVFM:
11926             case SVt_PVHV:
11927             case SVt_PVAV:
11928             case SVt_PVCV:
11929             case SVt_PVLV:
11930             case SVt_REGEXP:
11931             case SVt_PVMG:
11932             case SVt_PVNV:
11933             case SVt_PVIV:
11934             case SVt_PV:
11935                 assert(sv_type_details->body_size);
11936                 if (sv_type_details->arena) {
11937                     new_body_inline(new_body, sv_type);
11938                     new_body
11939                         = (void*)((char*)new_body - sv_type_details->offset);
11940                 } else {
11941                     new_body = new_NOARENA(sv_type_details);
11942                 }
11943             }
11944             assert(new_body);
11945             SvANY(dstr) = new_body;
11946
11947 #ifndef PURIFY
11948             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11949                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11950                  sv_type_details->copy, char);
11951 #else
11952             Copy(((char*)SvANY(sstr)),
11953                  ((char*)SvANY(dstr)),
11954                  sv_type_details->body_size + sv_type_details->offset, char);
11955 #endif
11956
11957             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11958                 && !isGV_with_GP(dstr)
11959                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
11960                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11961
11962             /* The Copy above means that all the source (unduplicated) pointers
11963                are now in the destination.  We can check the flags and the
11964                pointers in either, but it's possible that there's less cache
11965                missing by always going for the destination.
11966                FIXME - instrument and check that assumption  */
11967             if (sv_type >= SVt_PVMG) {
11968                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11969                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11970                 } else if (SvMAGIC(dstr))
11971                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11972                 if (SvSTASH(dstr))
11973                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
11974             }
11975
11976             /* The cast silences a GCC warning about unhandled types.  */
11977             switch ((int)sv_type) {
11978             case SVt_PV:
11979                 break;
11980             case SVt_PVIV:
11981                 break;
11982             case SVt_PVNV:
11983                 break;
11984             case SVt_PVMG:
11985                 break;
11986             case SVt_REGEXP:
11987                 /* FIXME for plugins */
11988                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
11989                 break;
11990             case SVt_PVLV:
11991                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11992                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11993                     LvTARG(dstr) = dstr;
11994                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
11995                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
11996                 else
11997                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
11998             case SVt_PVGV:
11999                 /* non-GP case already handled above */
12000                 if(isGV_with_GP(sstr)) {
12001                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12002                     /* Don't call sv_add_backref here as it's going to be
12003                        created as part of the magic cloning of the symbol
12004                        table--unless this is during a join and the stash
12005                        is not actually being cloned.  */
12006                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12007                        at the point of this comment.  */
12008                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12009                     if (param->flags & CLONEf_JOIN_IN)
12010                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12011                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12012                     (void)GpREFCNT_inc(GvGP(dstr));
12013                 }
12014                 break;
12015             case SVt_PVIO:
12016                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12017                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12018                     /* I have no idea why fake dirp (rsfps)
12019                        should be treated differently but otherwise
12020                        we end up with leaks -- sky*/
12021                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12022                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12023                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12024                 } else {
12025                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12026                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12027                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12028                     if (IoDIRP(dstr)) {
12029                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12030                     } else {
12031                         NOOP;
12032                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12033                     }
12034                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12035                 }
12036                 if (IoOFP(dstr) == IoIFP(sstr))
12037                     IoOFP(dstr) = IoIFP(dstr);
12038                 else
12039                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12040                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12041                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12042                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12043                 break;
12044             case SVt_PVAV:
12045                 /* avoid cloning an empty array */
12046                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12047                     SV **dst_ary, **src_ary;
12048                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12049
12050                     src_ary = AvARRAY((const AV *)sstr);
12051                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12052                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12053                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12054                     AvALLOC((const AV *)dstr) = dst_ary;
12055                     if (AvREAL((const AV *)sstr)) {
12056                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12057                                                       param);
12058                     }
12059                     else {
12060                         while (items-- > 0)
12061                             *dst_ary++ = sv_dup(*src_ary++, param);
12062                     }
12063                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12064                     while (items-- > 0) {
12065                         *dst_ary++ = &PL_sv_undef;
12066                     }
12067                 }
12068                 else {
12069                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12070                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12071                     AvMAX(  (const AV *)dstr)   = -1;
12072                     AvFILLp((const AV *)dstr)   = -1;
12073                 }
12074                 break;
12075             case SVt_PVHV:
12076                 if (HvARRAY((const HV *)sstr)) {
12077                     STRLEN i = 0;
12078                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12079                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12080                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12081                     char *darray;
12082                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12083                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12084                         char);
12085                     HvARRAY(dstr) = (HE**)darray;
12086                     while (i <= sxhv->xhv_max) {
12087                         const HE * const source = HvARRAY(sstr)[i];
12088                         HvARRAY(dstr)[i] = source
12089                             ? he_dup(source, sharekeys, param) : 0;
12090                         ++i;
12091                     }
12092                     if (SvOOK(sstr)) {
12093                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12094                         struct xpvhv_aux * const daux = HvAUX(dstr);
12095                         /* This flag isn't copied.  */
12096                         SvOOK_on(dstr);
12097
12098                         if (saux->xhv_name_count) {
12099                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12100                             const I32 count
12101                              = saux->xhv_name_count < 0
12102                                 ? -saux->xhv_name_count
12103                                 :  saux->xhv_name_count;
12104                             HEK **shekp = sname + count;
12105                             HEK **dhekp;
12106                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12107                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12108                             while (shekp-- > sname) {
12109                                 dhekp--;
12110                                 *dhekp = hek_dup(*shekp, param);
12111                             }
12112                         }
12113                         else {
12114                             daux->xhv_name_u.xhvnameu_name
12115                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12116                                           param);
12117                         }
12118                         daux->xhv_name_count = saux->xhv_name_count;
12119
12120                         daux->xhv_riter = saux->xhv_riter;
12121                         daux->xhv_eiter = saux->xhv_eiter
12122                             ? he_dup(saux->xhv_eiter,
12123                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12124                         /* backref array needs refcnt=2; see sv_add_backref */
12125                         daux->xhv_backreferences =
12126                             (param->flags & CLONEf_JOIN_IN)
12127                                 /* when joining, we let the individual GVs and
12128                                  * CVs add themselves to backref as
12129                                  * needed. This avoids pulling in stuff
12130                                  * that isn't required, and simplifies the
12131                                  * case where stashes aren't cloned back
12132                                  * if they already exist in the parent
12133                                  * thread */
12134                             ? NULL
12135                             : saux->xhv_backreferences
12136                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12137                                     ? MUTABLE_AV(SvREFCNT_inc(
12138                                           sv_dup_inc((const SV *)
12139                                             saux->xhv_backreferences, param)))
12140                                     : MUTABLE_AV(sv_dup((const SV *)
12141                                             saux->xhv_backreferences, param))
12142                                 : 0;
12143
12144                         daux->xhv_mro_meta = saux->xhv_mro_meta
12145                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12146                             : 0;
12147                         daux->xhv_super = NULL;
12148
12149                         /* Record stashes for possible cloning in Perl_clone(). */
12150                         if (HvNAME(sstr))
12151                             av_push(param->stashes, dstr);
12152                     }
12153                 }
12154                 else
12155                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12156                 break;
12157             case SVt_PVCV:
12158                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12159                     CvDEPTH(dstr) = 0;
12160                 }
12161                 /*FALLTHROUGH*/
12162             case SVt_PVFM:
12163                 /* NOTE: not refcounted */
12164                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12165                     hv_dup(CvSTASH(dstr), param);
12166                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12167                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12168                 if (!CvISXSUB(dstr)) {
12169                     OP_REFCNT_LOCK;
12170                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12171                     OP_REFCNT_UNLOCK;
12172                     CvSLABBED_off(dstr);
12173                 } else if (CvCONST(dstr)) {
12174                     CvXSUBANY(dstr).any_ptr =
12175                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12176                 }
12177                 assert(!CvSLABBED(dstr));
12178                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12179                 if (CvNAMED(dstr))
12180                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12181                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12182                 /* don't dup if copying back - CvGV isn't refcounted, so the
12183                  * duped GV may never be freed. A bit of a hack! DAPM */
12184                 else
12185                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12186                     CvCVGV_RC(dstr)
12187                     ? gv_dup_inc(CvGV(sstr), param)
12188                     : (param->flags & CLONEf_JOIN_IN)
12189                         ? NULL
12190                         : gv_dup(CvGV(sstr), param);
12191
12192                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12193                 CvOUTSIDE(dstr) =
12194                     CvWEAKOUTSIDE(sstr)
12195                     ? cv_dup(    CvOUTSIDE(dstr), param)
12196                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12197                 break;
12198             }
12199         }
12200     }
12201
12202     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12203         ++PL_sv_objcount;
12204
12205     return dstr;
12206  }
12207
12208 SV *
12209 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12210 {
12211     PERL_ARGS_ASSERT_SV_DUP_INC;
12212     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12213 }
12214
12215 SV *
12216 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12217 {
12218     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12219     PERL_ARGS_ASSERT_SV_DUP;
12220
12221     /* Track every SV that (at least initially) had a reference count of 0.
12222        We need to do this by holding an actual reference to it in this array.
12223        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12224        (akin to the stashes hash, and the perl stack), we come unstuck if
12225        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12226        thread) is manipulated in a CLONE method, because CLONE runs before the
12227        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12228        (and fix things up by giving each a reference via the temps stack).
12229        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12230        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12231        before the walk of unreferenced happens and a reference to that is SV
12232        added to the temps stack. At which point we have the same SV considered
12233        to be in use, and free to be re-used. Not good.
12234     */
12235     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12236         assert(param->unreferenced);
12237         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12238     }
12239
12240     return dstr;
12241 }
12242
12243 /* duplicate a context */
12244
12245 PERL_CONTEXT *
12246 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12247 {
12248     PERL_CONTEXT *ncxs;
12249
12250     PERL_ARGS_ASSERT_CX_DUP;
12251
12252     if (!cxs)
12253         return (PERL_CONTEXT*)NULL;
12254
12255     /* look for it in the table first */
12256     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12257     if (ncxs)
12258         return ncxs;
12259
12260     /* create anew and remember what it is */
12261     Newx(ncxs, max + 1, PERL_CONTEXT);
12262     ptr_table_store(PL_ptr_table, cxs, ncxs);
12263     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12264
12265     while (ix >= 0) {
12266         PERL_CONTEXT * const ncx = &ncxs[ix];
12267         if (CxTYPE(ncx) == CXt_SUBST) {
12268             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12269         }
12270         else {
12271             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12272             switch (CxTYPE(ncx)) {
12273             case CXt_SUB:
12274                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12275                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12276                                            : cv_dup(ncx->blk_sub.cv,param));
12277                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12278                                            ? av_dup_inc(ncx->blk_sub.argarray,
12279                                                         param)
12280                                            : NULL);
12281                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12282                                                      param);
12283                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12284                                            ncx->blk_sub.oldcomppad);
12285                 break;
12286             case CXt_EVAL:
12287                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12288                                                       param);
12289                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12290                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12291                 break;
12292             case CXt_LOOP_LAZYSV:
12293                 ncx->blk_loop.state_u.lazysv.end
12294                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12295                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12296                    actually being the same function, and order equivalence of
12297                    the two unions.
12298                    We can assert the later [but only at run time :-(]  */
12299                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12300                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12301             case CXt_LOOP_FOR:
12302                 ncx->blk_loop.state_u.ary.ary
12303                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12304             case CXt_LOOP_LAZYIV:
12305             case CXt_LOOP_PLAIN:
12306                 if (CxPADLOOP(ncx)) {
12307                     ncx->blk_loop.itervar_u.oldcomppad
12308                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12309                                         ncx->blk_loop.itervar_u.oldcomppad);
12310                 } else {
12311                     ncx->blk_loop.itervar_u.gv
12312                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12313                                     param);
12314                 }
12315                 break;
12316             case CXt_FORMAT:
12317                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12318                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12319                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12320                                                      param);
12321                 break;
12322             case CXt_BLOCK:
12323             case CXt_NULL:
12324             case CXt_WHEN:
12325             case CXt_GIVEN:
12326                 break;
12327             }
12328         }
12329         --ix;
12330     }
12331     return ncxs;
12332 }
12333
12334 /* duplicate a stack info structure */
12335
12336 PERL_SI *
12337 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12338 {
12339     PERL_SI *nsi;
12340
12341     PERL_ARGS_ASSERT_SI_DUP;
12342
12343     if (!si)
12344         return (PERL_SI*)NULL;
12345
12346     /* look for it in the table first */
12347     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12348     if (nsi)
12349         return nsi;
12350
12351     /* create anew and remember what it is */
12352     Newxz(nsi, 1, PERL_SI);
12353     ptr_table_store(PL_ptr_table, si, nsi);
12354
12355     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12356     nsi->si_cxix        = si->si_cxix;
12357     nsi->si_cxmax       = si->si_cxmax;
12358     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12359     nsi->si_type        = si->si_type;
12360     nsi->si_prev        = si_dup(si->si_prev, param);
12361     nsi->si_next        = si_dup(si->si_next, param);
12362     nsi->si_markoff     = si->si_markoff;
12363
12364     return nsi;
12365 }
12366
12367 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12368 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12369 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12370 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12371 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12372 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12373 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12374 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12375 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12376 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12377 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12378 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12379 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12380 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12381 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12382 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12383
12384 /* XXXXX todo */
12385 #define pv_dup_inc(p)   SAVEPV(p)
12386 #define pv_dup(p)       SAVEPV(p)
12387 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12388
12389 /* map any object to the new equivent - either something in the
12390  * ptr table, or something in the interpreter structure
12391  */
12392
12393 void *
12394 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12395 {
12396     void *ret;
12397
12398     PERL_ARGS_ASSERT_ANY_DUP;
12399
12400     if (!v)
12401         return (void*)NULL;
12402
12403     /* look for it in the table first */
12404     ret = ptr_table_fetch(PL_ptr_table, v);
12405     if (ret)
12406         return ret;
12407
12408     /* see if it is part of the interpreter structure */
12409     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12410         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12411     else {
12412         ret = v;
12413     }
12414
12415     return ret;
12416 }
12417
12418 /* duplicate the save stack */
12419
12420 ANY *
12421 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12422 {
12423     dVAR;
12424     ANY * const ss      = proto_perl->Isavestack;
12425     const I32 max       = proto_perl->Isavestack_max;
12426     I32 ix              = proto_perl->Isavestack_ix;
12427     ANY *nss;
12428     const SV *sv;
12429     const GV *gv;
12430     const AV *av;
12431     const HV *hv;
12432     void* ptr;
12433     int intval;
12434     long longval;
12435     GP *gp;
12436     IV iv;
12437     I32 i;
12438     char *c = NULL;
12439     void (*dptr) (void*);
12440     void (*dxptr) (pTHX_ void*);
12441
12442     PERL_ARGS_ASSERT_SS_DUP;
12443
12444     Newxz(nss, max, ANY);
12445
12446     while (ix > 0) {
12447         const UV uv = POPUV(ss,ix);
12448         const U8 type = (U8)uv & SAVE_MASK;
12449
12450         TOPUV(nss,ix) = uv;
12451         switch (type) {
12452         case SAVEt_CLEARSV:
12453             break;
12454         case SAVEt_HELEM:               /* hash element */
12455             sv = (const SV *)POPPTR(ss,ix);
12456             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12457             /* fall through */
12458         case SAVEt_ITEM:                        /* normal string */
12459         case SAVEt_GVSV:                        /* scalar slot in GV */
12460         case SAVEt_SV:                          /* scalar reference */
12461             sv = (const SV *)POPPTR(ss,ix);
12462             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12463             /* fall through */
12464         case SAVEt_FREESV:
12465         case SAVEt_MORTALIZESV:
12466             sv = (const SV *)POPPTR(ss,ix);
12467             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12468             break;
12469         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12470             c = (char*)POPPTR(ss,ix);
12471             TOPPTR(nss,ix) = savesharedpv(c);
12472             ptr = POPPTR(ss,ix);
12473             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12474             break;
12475         case SAVEt_GENERIC_SVREF:               /* generic sv */
12476         case SAVEt_SVREF:                       /* scalar reference */
12477             sv = (const SV *)POPPTR(ss,ix);
12478             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12479             ptr = POPPTR(ss,ix);
12480             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12481             break;
12482         case SAVEt_HV:                          /* hash reference */
12483         case SAVEt_AV:                          /* array reference */
12484             sv = (const SV *) POPPTR(ss,ix);
12485             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12486             /* fall through */
12487         case SAVEt_COMPPAD:
12488         case SAVEt_NSTAB:
12489             sv = (const SV *) POPPTR(ss,ix);
12490             TOPPTR(nss,ix) = sv_dup(sv, param);
12491             break;
12492         case SAVEt_INT:                         /* int reference */
12493             ptr = POPPTR(ss,ix);
12494             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12495             intval = (int)POPINT(ss,ix);
12496             TOPINT(nss,ix) = intval;
12497             break;
12498         case SAVEt_LONG:                        /* long reference */
12499             ptr = POPPTR(ss,ix);
12500             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12501             longval = (long)POPLONG(ss,ix);
12502             TOPLONG(nss,ix) = longval;
12503             break;
12504         case SAVEt_I32:                         /* I32 reference */
12505             ptr = POPPTR(ss,ix);
12506             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12507             i = POPINT(ss,ix);
12508             TOPINT(nss,ix) = i;
12509             break;
12510         case SAVEt_IV:                          /* IV reference */
12511             ptr = POPPTR(ss,ix);
12512             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12513             iv = POPIV(ss,ix);
12514             TOPIV(nss,ix) = iv;
12515             break;
12516         case SAVEt_HPTR:                        /* HV* reference */
12517         case SAVEt_APTR:                        /* AV* reference */
12518         case SAVEt_SPTR:                        /* SV* reference */
12519             ptr = POPPTR(ss,ix);
12520             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12521             sv = (const SV *)POPPTR(ss,ix);
12522             TOPPTR(nss,ix) = sv_dup(sv, param);
12523             break;
12524         case SAVEt_VPTR:                        /* random* reference */
12525             ptr = POPPTR(ss,ix);
12526             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12527             /* Fall through */
12528         case SAVEt_INT_SMALL:
12529         case SAVEt_I32_SMALL:
12530         case SAVEt_I16:                         /* I16 reference */
12531         case SAVEt_I8:                          /* I8 reference */
12532         case SAVEt_BOOL:
12533             ptr = POPPTR(ss,ix);
12534             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12535             break;
12536         case SAVEt_GENERIC_PVREF:               /* generic char* */
12537         case SAVEt_PPTR:                        /* char* reference */
12538             ptr = POPPTR(ss,ix);
12539             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12540             c = (char*)POPPTR(ss,ix);
12541             TOPPTR(nss,ix) = pv_dup(c);
12542             break;
12543         case SAVEt_GP:                          /* scalar reference */
12544             gp = (GP*)POPPTR(ss,ix);
12545             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12546             (void)GpREFCNT_inc(gp);
12547             gv = (const GV *)POPPTR(ss,ix);
12548             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12549             break;
12550         case SAVEt_FREEOP:
12551             ptr = POPPTR(ss,ix);
12552             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12553                 /* these are assumed to be refcounted properly */
12554                 OP *o;
12555                 switch (((OP*)ptr)->op_type) {
12556                 case OP_LEAVESUB:
12557                 case OP_LEAVESUBLV:
12558                 case OP_LEAVEEVAL:
12559                 case OP_LEAVE:
12560                 case OP_SCOPE:
12561                 case OP_LEAVEWRITE:
12562                     TOPPTR(nss,ix) = ptr;
12563                     o = (OP*)ptr;
12564                     OP_REFCNT_LOCK;
12565                     (void) OpREFCNT_inc(o);
12566                     OP_REFCNT_UNLOCK;
12567                     break;
12568                 default:
12569                     TOPPTR(nss,ix) = NULL;
12570                     break;
12571                 }
12572             }
12573             else
12574                 TOPPTR(nss,ix) = NULL;
12575             break;
12576         case SAVEt_FREECOPHH:
12577             ptr = POPPTR(ss,ix);
12578             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12579             break;
12580         case SAVEt_DELETE:
12581             hv = (const HV *)POPPTR(ss,ix);
12582             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12583             i = POPINT(ss,ix);
12584             TOPINT(nss,ix) = i;
12585             /* Fall through */
12586         case SAVEt_FREEPV:
12587             c = (char*)POPPTR(ss,ix);
12588             TOPPTR(nss,ix) = pv_dup_inc(c);
12589             break;
12590         case SAVEt_STACK_POS:           /* Position on Perl stack */
12591             i = POPINT(ss,ix);
12592             TOPINT(nss,ix) = i;
12593             break;
12594         case SAVEt_DESTRUCTOR:
12595             ptr = POPPTR(ss,ix);
12596             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12597             dptr = POPDPTR(ss,ix);
12598             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12599                                         any_dup(FPTR2DPTR(void *, dptr),
12600                                                 proto_perl));
12601             break;
12602         case SAVEt_DESTRUCTOR_X:
12603             ptr = POPPTR(ss,ix);
12604             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12605             dxptr = POPDXPTR(ss,ix);
12606             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12607                                          any_dup(FPTR2DPTR(void *, dxptr),
12608                                                  proto_perl));
12609             break;
12610         case SAVEt_REGCONTEXT:
12611         case SAVEt_ALLOC:
12612             ix -= uv >> SAVE_TIGHT_SHIFT;
12613             break;
12614         case SAVEt_AELEM:               /* array element */
12615             sv = (const SV *)POPPTR(ss,ix);
12616             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12617             i = POPINT(ss,ix);
12618             TOPINT(nss,ix) = i;
12619             av = (const AV *)POPPTR(ss,ix);
12620             TOPPTR(nss,ix) = av_dup_inc(av, param);
12621             break;
12622         case SAVEt_OP:
12623             ptr = POPPTR(ss,ix);
12624             TOPPTR(nss,ix) = ptr;
12625             break;
12626         case SAVEt_HINTS:
12627             ptr = POPPTR(ss,ix);
12628             ptr = cophh_copy((COPHH*)ptr);
12629             TOPPTR(nss,ix) = ptr;
12630             i = POPINT(ss,ix);
12631             TOPINT(nss,ix) = i;
12632             if (i & HINT_LOCALIZE_HH) {
12633                 hv = (const HV *)POPPTR(ss,ix);
12634                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12635             }
12636             break;
12637         case SAVEt_PADSV_AND_MORTALIZE:
12638             longval = (long)POPLONG(ss,ix);
12639             TOPLONG(nss,ix) = longval;
12640             ptr = POPPTR(ss,ix);
12641             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12642             sv = (const SV *)POPPTR(ss,ix);
12643             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12644             break;
12645         case SAVEt_SET_SVFLAGS:
12646             i = POPINT(ss,ix);
12647             TOPINT(nss,ix) = i;
12648             i = POPINT(ss,ix);
12649             TOPINT(nss,ix) = i;
12650             sv = (const SV *)POPPTR(ss,ix);
12651             TOPPTR(nss,ix) = sv_dup(sv, param);
12652             break;
12653         case SAVEt_RE_STATE:
12654             {
12655                 const struct re_save_state *const old_state
12656                     = (struct re_save_state *)
12657                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12658                 struct re_save_state *const new_state
12659                     = (struct re_save_state *)
12660                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12661
12662                 Copy(old_state, new_state, 1, struct re_save_state);
12663                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12664
12665                 new_state->re_state_bostr
12666                     = pv_dup(old_state->re_state_bostr);
12667                 new_state->re_state_regeol
12668                     = pv_dup(old_state->re_state_regeol);
12669 #ifdef PERL_OLD_COPY_ON_WRITE
12670                 new_state->re_state_nrs
12671                     = sv_dup(old_state->re_state_nrs, param);
12672 #endif
12673                 new_state->re_state_reg_magic
12674                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12675                                proto_perl);
12676                 new_state->re_state_reg_oldcurpm
12677                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12678                               proto_perl);
12679                 new_state->re_state_reg_curpm
12680                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12681                                proto_perl);
12682                 new_state->re_state_reg_oldsaved
12683                     = pv_dup(old_state->re_state_reg_oldsaved);
12684                 new_state->re_state_reg_poscache
12685                     = pv_dup(old_state->re_state_reg_poscache);
12686                 new_state->re_state_reg_starttry
12687                     = pv_dup(old_state->re_state_reg_starttry);
12688                 break;
12689             }
12690         case SAVEt_COMPILE_WARNINGS:
12691             ptr = POPPTR(ss,ix);
12692             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12693             break;
12694         case SAVEt_PARSER:
12695             ptr = POPPTR(ss,ix);
12696             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12697             break;
12698         default:
12699             Perl_croak(aTHX_
12700                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12701         }
12702     }
12703
12704     return nss;
12705 }
12706
12707
12708 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12709  * flag to the result. This is done for each stash before cloning starts,
12710  * so we know which stashes want their objects cloned */
12711
12712 static void
12713 do_mark_cloneable_stash(pTHX_ SV *const sv)
12714 {
12715     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12716     if (hvname) {
12717         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12718         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12719         if (cloner && GvCV(cloner)) {
12720             dSP;
12721             UV status;
12722
12723             ENTER;
12724             SAVETMPS;
12725             PUSHMARK(SP);
12726             mXPUSHs(newSVhek(hvname));
12727             PUTBACK;
12728             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12729             SPAGAIN;
12730             status = POPu;
12731             PUTBACK;
12732             FREETMPS;
12733             LEAVE;
12734             if (status)
12735                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12736         }
12737     }
12738 }
12739
12740
12741
12742 /*
12743 =for apidoc perl_clone
12744
12745 Create and return a new interpreter by cloning the current one.
12746
12747 perl_clone takes these flags as parameters:
12748
12749 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12750 without it we only clone the data and zero the stacks,
12751 with it we copy the stacks and the new perl interpreter is
12752 ready to run at the exact same point as the previous one.
12753 The pseudo-fork code uses COPY_STACKS while the
12754 threads->create doesn't.
12755
12756 CLONEf_KEEP_PTR_TABLE -
12757 perl_clone keeps a ptr_table with the pointer of the old
12758 variable as a key and the new variable as a value,
12759 this allows it to check if something has been cloned and not
12760 clone it again but rather just use the value and increase the
12761 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
12762 the ptr_table using the function
12763 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12764 reason to keep it around is if you want to dup some of your own
12765 variable who are outside the graph perl scans, example of this
12766 code is in threads.xs create.
12767
12768 CLONEf_CLONE_HOST -
12769 This is a win32 thing, it is ignored on unix, it tells perls
12770 win32host code (which is c++) to clone itself, this is needed on
12771 win32 if you want to run two threads at the same time,
12772 if you just want to do some stuff in a separate perl interpreter
12773 and then throw it away and return to the original one,
12774 you don't need to do anything.
12775
12776 =cut
12777 */
12778
12779 /* XXX the above needs expanding by someone who actually understands it ! */
12780 EXTERN_C PerlInterpreter *
12781 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12782
12783 PerlInterpreter *
12784 perl_clone(PerlInterpreter *proto_perl, UV flags)
12785 {
12786    dVAR;
12787 #ifdef PERL_IMPLICIT_SYS
12788
12789     PERL_ARGS_ASSERT_PERL_CLONE;
12790
12791    /* perlhost.h so we need to call into it
12792    to clone the host, CPerlHost should have a c interface, sky */
12793
12794    if (flags & CLONEf_CLONE_HOST) {
12795        return perl_clone_host(proto_perl,flags);
12796    }
12797    return perl_clone_using(proto_perl, flags,
12798                             proto_perl->IMem,
12799                             proto_perl->IMemShared,
12800                             proto_perl->IMemParse,
12801                             proto_perl->IEnv,
12802                             proto_perl->IStdIO,
12803                             proto_perl->ILIO,
12804                             proto_perl->IDir,
12805                             proto_perl->ISock,
12806                             proto_perl->IProc);
12807 }
12808
12809 PerlInterpreter *
12810 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12811                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12812                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12813                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12814                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12815                  struct IPerlProc* ipP)
12816 {
12817     /* XXX many of the string copies here can be optimized if they're
12818      * constants; they need to be allocated as common memory and just
12819      * their pointers copied. */
12820
12821     IV i;
12822     CLONE_PARAMS clone_params;
12823     CLONE_PARAMS* const param = &clone_params;
12824
12825     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12826
12827     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12828 #else           /* !PERL_IMPLICIT_SYS */
12829     IV i;
12830     CLONE_PARAMS clone_params;
12831     CLONE_PARAMS* param = &clone_params;
12832     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12833
12834     PERL_ARGS_ASSERT_PERL_CLONE;
12835 #endif          /* PERL_IMPLICIT_SYS */
12836
12837     /* for each stash, determine whether its objects should be cloned */
12838     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12839     PERL_SET_THX(my_perl);
12840
12841 #ifdef DEBUGGING
12842     PoisonNew(my_perl, 1, PerlInterpreter);
12843     PL_op = NULL;
12844     PL_curcop = NULL;
12845     PL_defstash = NULL; /* may be used by perl malloc() */
12846     PL_markstack = 0;
12847     PL_scopestack = 0;
12848     PL_scopestack_name = 0;
12849     PL_savestack = 0;
12850     PL_savestack_ix = 0;
12851     PL_savestack_max = -1;
12852     PL_sig_pending = 0;
12853     PL_parser = NULL;
12854     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12855 #  ifdef DEBUG_LEAKING_SCALARS
12856     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12857 #  endif
12858 #else   /* !DEBUGGING */
12859     Zero(my_perl, 1, PerlInterpreter);
12860 #endif  /* DEBUGGING */
12861
12862 #ifdef PERL_IMPLICIT_SYS
12863     /* host pointers */
12864     PL_Mem              = ipM;
12865     PL_MemShared        = ipMS;
12866     PL_MemParse         = ipMP;
12867     PL_Env              = ipE;
12868     PL_StdIO            = ipStd;
12869     PL_LIO              = ipLIO;
12870     PL_Dir              = ipD;
12871     PL_Sock             = ipS;
12872     PL_Proc             = ipP;
12873 #endif          /* PERL_IMPLICIT_SYS */
12874
12875     param->flags = flags;
12876     /* Nothing in the core code uses this, but we make it available to
12877        extensions (using mg_dup).  */
12878     param->proto_perl = proto_perl;
12879     /* Likely nothing will use this, but it is initialised to be consistent
12880        with Perl_clone_params_new().  */
12881     param->new_perl = my_perl;
12882     param->unreferenced = NULL;
12883
12884     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12885
12886     PL_body_arenas = NULL;
12887     Zero(&PL_body_roots, 1, PL_body_roots);
12888     
12889     PL_sv_count         = 0;
12890     PL_sv_objcount      = 0;
12891     PL_sv_root          = NULL;
12892     PL_sv_arenaroot     = NULL;
12893
12894     PL_debug            = proto_perl->Idebug;
12895
12896     PL_hash_seed        = proto_perl->Ihash_seed;
12897     PL_rehash_seed      = proto_perl->Irehash_seed;
12898
12899     /* dbargs array probably holds garbage */
12900     PL_dbargs           = NULL;
12901
12902     PL_compiling = proto_perl->Icompiling;
12903
12904     /* pseudo environmental stuff */
12905     PL_origargc         = proto_perl->Iorigargc;
12906     PL_origargv         = proto_perl->Iorigargv;
12907
12908     /* Set tainting stuff before PerlIO_debug can possibly get called */
12909     PL_tainting         = proto_perl->Itainting;
12910     PL_taint_warn       = proto_perl->Itaint_warn;
12911
12912     PL_minus_c          = proto_perl->Iminus_c;
12913
12914     PL_localpatches     = proto_perl->Ilocalpatches;
12915     PL_splitstr         = proto_perl->Isplitstr;
12916     PL_minus_n          = proto_perl->Iminus_n;
12917     PL_minus_p          = proto_perl->Iminus_p;
12918     PL_minus_l          = proto_perl->Iminus_l;
12919     PL_minus_a          = proto_perl->Iminus_a;
12920     PL_minus_E          = proto_perl->Iminus_E;
12921     PL_minus_F          = proto_perl->Iminus_F;
12922     PL_doswitches       = proto_perl->Idoswitches;
12923     PL_dowarn           = proto_perl->Idowarn;
12924     PL_sawampersand     = proto_perl->Isawampersand;
12925     PL_unsafe           = proto_perl->Iunsafe;
12926     PL_perldb           = proto_perl->Iperldb;
12927     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12928     PL_exit_flags       = proto_perl->Iexit_flags;
12929
12930     /* XXX time(&PL_basetime) when asked for? */
12931     PL_basetime         = proto_perl->Ibasetime;
12932
12933     PL_maxsysfd         = proto_perl->Imaxsysfd;
12934     PL_statusvalue      = proto_perl->Istatusvalue;
12935 #ifdef VMS
12936     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
12937 #else
12938     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12939 #endif
12940
12941     /* RE engine related */
12942     Zero(&PL_reg_state, 1, struct re_save_state);
12943     PL_regmatch_slab    = NULL;
12944
12945     PL_sub_generation   = proto_perl->Isub_generation;
12946
12947     /* funky return mechanisms */
12948     PL_forkprocess      = proto_perl->Iforkprocess;
12949
12950     /* internal state */
12951     PL_maxo             = proto_perl->Imaxo;
12952
12953     PL_main_start       = proto_perl->Imain_start;
12954     PL_eval_root        = proto_perl->Ieval_root;
12955     PL_eval_start       = proto_perl->Ieval_start;
12956
12957     PL_filemode         = proto_perl->Ifilemode;
12958     PL_lastfd           = proto_perl->Ilastfd;
12959     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
12960     PL_Argv             = NULL;
12961     PL_Cmd              = NULL;
12962     PL_gensym           = proto_perl->Igensym;
12963
12964     PL_laststatval      = proto_perl->Ilaststatval;
12965     PL_laststype        = proto_perl->Ilaststype;
12966     PL_mess_sv          = NULL;
12967
12968     PL_profiledata      = NULL;
12969
12970     PL_generation       = proto_perl->Igeneration;
12971
12972     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
12973     PL_in_clean_all     = proto_perl->Iin_clean_all;
12974
12975     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
12976     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
12977     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
12978     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
12979     PL_nomemok          = proto_perl->Inomemok;
12980     PL_an               = proto_perl->Ian;
12981     PL_evalseq          = proto_perl->Ievalseq;
12982     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
12983     PL_origalen         = proto_perl->Iorigalen;
12984
12985     PL_sighandlerp      = proto_perl->Isighandlerp;
12986
12987     PL_runops           = proto_perl->Irunops;
12988
12989     PL_subline          = proto_perl->Isubline;
12990
12991 #ifdef FCRYPT
12992     PL_cryptseen        = proto_perl->Icryptseen;
12993 #endif
12994
12995     PL_hints            = proto_perl->Ihints;
12996
12997 #ifdef USE_LOCALE_COLLATE
12998     PL_collation_ix     = proto_perl->Icollation_ix;
12999     PL_collation_standard       = proto_perl->Icollation_standard;
13000     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13001     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13002 #endif /* USE_LOCALE_COLLATE */
13003
13004 #ifdef USE_LOCALE_NUMERIC
13005     PL_numeric_standard = proto_perl->Inumeric_standard;
13006     PL_numeric_local    = proto_perl->Inumeric_local;
13007 #endif /* !USE_LOCALE_NUMERIC */
13008
13009     /* Did the locale setup indicate UTF-8? */
13010     PL_utf8locale       = proto_perl->Iutf8locale;
13011     /* Unicode features (see perlrun/-C) */
13012     PL_unicode          = proto_perl->Iunicode;
13013
13014     /* Pre-5.8 signals control */
13015     PL_signals          = proto_perl->Isignals;
13016
13017     /* times() ticks per second */
13018     PL_clocktick        = proto_perl->Iclocktick;
13019
13020     /* Recursion stopper for PerlIO_find_layer */
13021     PL_in_load_module   = proto_perl->Iin_load_module;
13022
13023     /* sort() routine */
13024     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13025
13026     /* Not really needed/useful since the reenrant_retint is "volatile",
13027      * but do it for consistency's sake. */
13028     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13029
13030     /* Hooks to shared SVs and locks. */
13031     PL_sharehook        = proto_perl->Isharehook;
13032     PL_lockhook         = proto_perl->Ilockhook;
13033     PL_unlockhook       = proto_perl->Iunlockhook;
13034     PL_threadhook       = proto_perl->Ithreadhook;
13035     PL_destroyhook      = proto_perl->Idestroyhook;
13036     PL_signalhook       = proto_perl->Isignalhook;
13037
13038     PL_globhook         = proto_perl->Iglobhook;
13039
13040     /* swatch cache */
13041     PL_last_swash_hv    = NULL; /* reinits on demand */
13042     PL_last_swash_klen  = 0;
13043     PL_last_swash_key[0]= '\0';
13044     PL_last_swash_tmps  = (U8*)NULL;
13045     PL_last_swash_slen  = 0;
13046
13047     PL_glob_index       = proto_perl->Iglob_index;
13048     PL_srand_called     = proto_perl->Isrand_called;
13049
13050     if (flags & CLONEf_COPY_STACKS) {
13051         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13052         PL_tmps_ix              = proto_perl->Itmps_ix;
13053         PL_tmps_max             = proto_perl->Itmps_max;
13054         PL_tmps_floor           = proto_perl->Itmps_floor;
13055
13056         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13057          * NOTE: unlike the others! */
13058         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13059         PL_scopestack_max       = proto_perl->Iscopestack_max;
13060
13061         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13062          * NOTE: unlike the others! */
13063         PL_savestack_ix         = proto_perl->Isavestack_ix;
13064         PL_savestack_max        = proto_perl->Isavestack_max;
13065     }
13066
13067     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13068     PL_top_env          = &PL_start_env;
13069
13070     PL_op               = proto_perl->Iop;
13071
13072     PL_Sv               = NULL;
13073     PL_Xpv              = (XPV*)NULL;
13074     my_perl->Ina        = proto_perl->Ina;
13075
13076     PL_statbuf          = proto_perl->Istatbuf;
13077     PL_statcache        = proto_perl->Istatcache;
13078
13079 #ifdef HAS_TIMES
13080     PL_timesbuf         = proto_perl->Itimesbuf;
13081 #endif
13082
13083     PL_tainted          = proto_perl->Itainted;
13084     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13085
13086     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13087
13088     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13089     PL_restartop        = proto_perl->Irestartop;
13090     PL_in_eval          = proto_perl->Iin_eval;
13091     PL_delaymagic       = proto_perl->Idelaymagic;
13092     PL_phase            = proto_perl->Iphase;
13093     PL_localizing       = proto_perl->Ilocalizing;
13094
13095     PL_hv_fetch_ent_mh  = NULL;
13096     PL_modcount         = proto_perl->Imodcount;
13097     PL_lastgotoprobe    = NULL;
13098     PL_dumpindent       = proto_perl->Idumpindent;
13099
13100     PL_efloatbuf        = NULL;         /* reinits on demand */
13101     PL_efloatsize       = 0;                    /* reinits on demand */
13102
13103     /* regex stuff */
13104
13105     PL_regdummy         = proto_perl->Iregdummy;
13106     PL_colorset         = 0;            /* reinits PL_colors[] */
13107     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13108
13109     /* Pluggable optimizer */
13110     PL_peepp            = proto_perl->Ipeepp;
13111     PL_rpeepp           = proto_perl->Irpeepp;
13112     /* op_free() hook */
13113     PL_opfreehook       = proto_perl->Iopfreehook;
13114
13115 #ifdef USE_REENTRANT_API
13116     /* XXX: things like -Dm will segfault here in perlio, but doing
13117      *  PERL_SET_CONTEXT(proto_perl);
13118      * breaks too many other things
13119      */
13120     Perl_reentrant_init(aTHX);
13121 #endif
13122
13123     /* create SV map for pointer relocation */
13124     PL_ptr_table = ptr_table_new();
13125
13126     /* initialize these special pointers as early as possible */
13127     init_constants();
13128     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13129     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13130     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13131
13132     /* create (a non-shared!) shared string table */
13133     PL_strtab           = newHV();
13134     HvSHAREKEYS_off(PL_strtab);
13135     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13136     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13137
13138     /* This PV will be free'd special way so must set it same way op.c does */
13139     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13140     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13141
13142     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13143     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13144     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13145     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13146
13147     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13148     /* This makes no difference to the implementation, as it always pushes
13149        and shifts pointers to other SVs without changing their reference
13150        count, with the array becoming empty before it is freed. However, it
13151        makes it conceptually clear what is going on, and will avoid some
13152        work inside av.c, filling slots between AvFILL() and AvMAX() with
13153        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13154     AvREAL_off(param->stashes);
13155
13156     if (!(flags & CLONEf_COPY_STACKS)) {
13157         param->unreferenced = newAV();
13158     }
13159
13160 #ifdef PERLIO_LAYERS
13161     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13162     PerlIO_clone(aTHX_ proto_perl, param);
13163 #endif
13164
13165     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13166     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13167     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13168     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13169     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13170     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13171
13172     /* switches */
13173     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13174     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13175     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13176     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13177
13178     /* magical thingies */
13179
13180     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13181
13182     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13183     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13184     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13185
13186    
13187     /* Clone the regex array */
13188     /* ORANGE FIXME for plugins, probably in the SV dup code.
13189        newSViv(PTR2IV(CALLREGDUPE(
13190        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13191     */
13192     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13193     PL_regex_pad = AvARRAY(PL_regex_padav);
13194
13195     PL_stashpadmax      = proto_perl->Istashpadmax;
13196     PL_stashpadix       = proto_perl->Istashpadix ;
13197     Newx(PL_stashpad, PL_stashpadmax, HV *);
13198     {
13199         PADOFFSET o = 0;
13200         for (; o < PL_stashpadmax; ++o)
13201             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13202     }
13203
13204     /* shortcuts to various I/O objects */
13205     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13206     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13207     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13208     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13209     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13210     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13211     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13212
13213     /* shortcuts to regexp stuff */
13214     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13215
13216     /* shortcuts to misc objects */
13217     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13218
13219     /* shortcuts to debugging objects */
13220     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13221     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13222     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13223     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13224     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13225     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13226
13227     /* symbol tables */
13228     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13229     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13230     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13231     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13232     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13233
13234     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13235     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13236     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13237     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13238     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13239     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13240     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13241     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13242
13243     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13244
13245     /* subprocess state */
13246     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13247
13248     if (proto_perl->Iop_mask)
13249         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13250     else
13251         PL_op_mask      = NULL;
13252     /* PL_asserting        = proto_perl->Iasserting; */
13253
13254     /* current interpreter roots */
13255     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13256     OP_REFCNT_LOCK;
13257     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13258     OP_REFCNT_UNLOCK;
13259
13260     /* runtime control stuff */
13261     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13262
13263     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13264
13265     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13266
13267     /* interpreter atexit processing */
13268     PL_exitlistlen      = proto_perl->Iexitlistlen;
13269     if (PL_exitlistlen) {
13270         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13271         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13272     }
13273     else
13274         PL_exitlist     = (PerlExitListEntry*)NULL;
13275
13276     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13277     if (PL_my_cxt_size) {
13278         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13279         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13280 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13281         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13282         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13283 #endif
13284     }
13285     else {
13286         PL_my_cxt_list  = (void**)NULL;
13287 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13288         PL_my_cxt_keys  = (const char**)NULL;
13289 #endif
13290     }
13291     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13292     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13293     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13294     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13295
13296     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13297
13298     PAD_CLONE_VARS(proto_perl, param);
13299
13300 #ifdef HAVE_INTERP_INTERN
13301     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13302 #endif
13303
13304     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13305
13306 #ifdef PERL_USES_PL_PIDSTATUS
13307     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13308 #endif
13309     PL_osname           = SAVEPV(proto_perl->Iosname);
13310     PL_parser           = parser_dup(proto_perl->Iparser, param);
13311
13312     /* XXX this only works if the saved cop has already been cloned */
13313     if (proto_perl->Iparser) {
13314         PL_parser->saved_curcop = (COP*)any_dup(
13315                                     proto_perl->Iparser->saved_curcop,
13316                                     proto_perl);
13317     }
13318
13319     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13320
13321 #ifdef USE_LOCALE_COLLATE
13322     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13323 #endif /* USE_LOCALE_COLLATE */
13324
13325 #ifdef USE_LOCALE_NUMERIC
13326     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13327     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13328 #endif /* !USE_LOCALE_NUMERIC */
13329
13330     /* Unicode inversion lists */
13331     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13332     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13333
13334     PL_PerlSpace        = sv_dup_inc(proto_perl->IPerlSpace, param);
13335     PL_XPerlSpace       = sv_dup_inc(proto_perl->IXPerlSpace, param);
13336
13337     PL_L1PosixAlnum     = sv_dup_inc(proto_perl->IL1PosixAlnum, param);
13338     PL_PosixAlnum       = sv_dup_inc(proto_perl->IPosixAlnum, param);
13339
13340     PL_L1PosixAlpha     = sv_dup_inc(proto_perl->IL1PosixAlpha, param);
13341     PL_PosixAlpha       = sv_dup_inc(proto_perl->IPosixAlpha, param);
13342
13343     PL_PosixBlank       = sv_dup_inc(proto_perl->IPosixBlank, param);
13344     PL_XPosixBlank      = sv_dup_inc(proto_perl->IXPosixBlank, param);
13345
13346     PL_L1Cased          = sv_dup_inc(proto_perl->IL1Cased, param);
13347
13348     PL_PosixCntrl       = sv_dup_inc(proto_perl->IPosixCntrl, param);
13349     PL_XPosixCntrl      = sv_dup_inc(proto_perl->IXPosixCntrl, param);
13350
13351     PL_PosixDigit       = sv_dup_inc(proto_perl->IPosixDigit, param);
13352
13353     PL_L1PosixGraph     = sv_dup_inc(proto_perl->IL1PosixGraph, param);
13354     PL_PosixGraph       = sv_dup_inc(proto_perl->IPosixGraph, param);
13355
13356     PL_L1PosixLower     = sv_dup_inc(proto_perl->IL1PosixLower, param);
13357     PL_PosixLower       = sv_dup_inc(proto_perl->IPosixLower, param);
13358
13359     PL_L1PosixPrint     = sv_dup_inc(proto_perl->IL1PosixPrint, param);
13360     PL_PosixPrint       = sv_dup_inc(proto_perl->IPosixPrint, param);
13361
13362     PL_L1PosixPunct     = sv_dup_inc(proto_perl->IL1PosixPunct, param);
13363     PL_PosixPunct       = sv_dup_inc(proto_perl->IPosixPunct, param);
13364
13365     PL_PosixSpace       = sv_dup_inc(proto_perl->IPosixSpace, param);
13366     PL_XPosixSpace      = sv_dup_inc(proto_perl->IXPosixSpace, param);
13367
13368     PL_L1PosixUpper     = sv_dup_inc(proto_perl->IL1PosixUpper, param);
13369     PL_PosixUpper       = sv_dup_inc(proto_perl->IPosixUpper, param);
13370
13371     PL_L1PosixWord      = sv_dup_inc(proto_perl->IL1PosixWord, param);
13372     PL_PosixWord        = sv_dup_inc(proto_perl->IPosixWord, param);
13373
13374     PL_PosixXDigit      = sv_dup_inc(proto_perl->IPosixXDigit, param);
13375     PL_XPosixXDigit     = sv_dup_inc(proto_perl->IXPosixXDigit, param);
13376
13377     PL_VertSpace        = sv_dup_inc(proto_perl->IVertSpace, param);
13378
13379     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13380
13381     /* utf8 character class swashes */
13382     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
13383     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13384     PL_utf8_blank       = sv_dup_inc(proto_perl->Iutf8_blank, param);
13385     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
13386     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
13387     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
13388     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
13389     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
13390     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
13391     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
13392     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13393     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13394     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13395     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13396     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13397     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13398     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13399     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13400     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13401     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13402     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13403     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13404     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13405     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13406     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13407     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13408     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13409     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13410
13411
13412     if (proto_perl->Ipsig_pend) {
13413         Newxz(PL_psig_pend, SIG_SIZE, int);
13414     }
13415     else {
13416         PL_psig_pend    = (int*)NULL;
13417     }
13418
13419     if (proto_perl->Ipsig_name) {
13420         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13421         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13422                             param);
13423         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13424     }
13425     else {
13426         PL_psig_ptr     = (SV**)NULL;
13427         PL_psig_name    = (SV**)NULL;
13428     }
13429
13430     if (flags & CLONEf_COPY_STACKS) {
13431         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13432         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13433                             PL_tmps_ix+1, param);
13434
13435         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13436         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13437         Newxz(PL_markstack, i, I32);
13438         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13439                                                   - proto_perl->Imarkstack);
13440         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13441                                                   - proto_perl->Imarkstack);
13442         Copy(proto_perl->Imarkstack, PL_markstack,
13443              PL_markstack_ptr - PL_markstack + 1, I32);
13444
13445         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13446          * NOTE: unlike the others! */
13447         Newxz(PL_scopestack, PL_scopestack_max, I32);
13448         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13449
13450 #ifdef DEBUGGING
13451         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13452         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13453 #endif
13454         /* NOTE: si_dup() looks at PL_markstack */
13455         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13456
13457         /* PL_curstack          = PL_curstackinfo->si_stack; */
13458         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13459         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13460
13461         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13462         PL_stack_base           = AvARRAY(PL_curstack);
13463         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13464                                                    - proto_perl->Istack_base);
13465         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13466
13467         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13468         PL_savestack            = ss_dup(proto_perl, param);
13469     }
13470     else {
13471         init_stacks();
13472         ENTER;                  /* perl_destruct() wants to LEAVE; */
13473     }
13474
13475     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13476     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13477
13478     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13479     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13480     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13481     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13482     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13483     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13484
13485     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13486
13487     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13488     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13489     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13490     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13491
13492     PL_stashcache       = newHV();
13493
13494     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13495                                             proto_perl->Iwatchaddr);
13496     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13497     if (PL_debug && PL_watchaddr) {
13498         PerlIO_printf(Perl_debug_log,
13499           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13500           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13501           PTR2UV(PL_watchok));
13502     }
13503
13504     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13505     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13506     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13507
13508     /* Call the ->CLONE method, if it exists, for each of the stashes
13509        identified by sv_dup() above.
13510     */
13511     while(av_len(param->stashes) != -1) {
13512         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13513         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13514         if (cloner && GvCV(cloner)) {
13515             dSP;
13516             ENTER;
13517             SAVETMPS;
13518             PUSHMARK(SP);
13519             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13520             PUTBACK;
13521             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13522             FREETMPS;
13523             LEAVE;
13524         }
13525     }
13526
13527     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13528         ptr_table_free(PL_ptr_table);
13529         PL_ptr_table = NULL;
13530     }
13531
13532     if (!(flags & CLONEf_COPY_STACKS)) {
13533         unreferenced_to_tmp_stack(param->unreferenced);
13534     }
13535
13536     SvREFCNT_dec(param->stashes);
13537
13538     /* orphaned? eg threads->new inside BEGIN or use */
13539     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13540         SvREFCNT_inc_simple_void(PL_compcv);
13541         SAVEFREESV(PL_compcv);
13542     }
13543
13544     return my_perl;
13545 }
13546
13547 static void
13548 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13549 {
13550     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13551     
13552     if (AvFILLp(unreferenced) > -1) {
13553         SV **svp = AvARRAY(unreferenced);
13554         SV **const last = svp + AvFILLp(unreferenced);
13555         SSize_t count = 0;
13556
13557         do {
13558             if (SvREFCNT(*svp) == 1)
13559                 ++count;
13560         } while (++svp <= last);
13561
13562         EXTEND_MORTAL(count);
13563         svp = AvARRAY(unreferenced);
13564
13565         do {
13566             if (SvREFCNT(*svp) == 1) {
13567                 /* Our reference is the only one to this SV. This means that
13568                    in this thread, the scalar effectively has a 0 reference.
13569                    That doesn't work (cleanup never happens), so donate our
13570                    reference to it onto the save stack. */
13571                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13572             } else {
13573                 /* As an optimisation, because we are already walking the
13574                    entire array, instead of above doing either
13575                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13576                    release our reference to the scalar, so that at the end of
13577                    the array owns zero references to the scalars it happens to
13578                    point to. We are effectively converting the array from
13579                    AvREAL() on to AvREAL() off. This saves the av_clear()
13580                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13581                    walking the array a second time.  */
13582                 SvREFCNT_dec(*svp);
13583             }
13584
13585         } while (++svp <= last);
13586         AvREAL_off(unreferenced);
13587     }
13588     SvREFCNT_dec(unreferenced);
13589 }
13590
13591 void
13592 Perl_clone_params_del(CLONE_PARAMS *param)
13593 {
13594     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13595        happy: */
13596     PerlInterpreter *const to = param->new_perl;
13597     dTHXa(to);
13598     PerlInterpreter *const was = PERL_GET_THX;
13599
13600     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13601
13602     if (was != to) {
13603         PERL_SET_THX(to);
13604     }
13605
13606     SvREFCNT_dec(param->stashes);
13607     if (param->unreferenced)
13608         unreferenced_to_tmp_stack(param->unreferenced);
13609
13610     Safefree(param);
13611
13612     if (was != to) {
13613         PERL_SET_THX(was);
13614     }
13615 }
13616
13617 CLONE_PARAMS *
13618 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13619 {
13620     dVAR;
13621     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13622        does a dTHX; to get the context from thread local storage.
13623        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13624        a version that passes in my_perl.  */
13625     PerlInterpreter *const was = PERL_GET_THX;
13626     CLONE_PARAMS *param;
13627
13628     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13629
13630     if (was != to) {
13631         PERL_SET_THX(to);
13632     }
13633
13634     /* Given that we've set the context, we can do this unshared.  */
13635     Newx(param, 1, CLONE_PARAMS);
13636
13637     param->flags = 0;
13638     param->proto_perl = from;
13639     param->new_perl = to;
13640     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13641     AvREAL_off(param->stashes);
13642     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13643
13644     if (was != to) {
13645         PERL_SET_THX(was);
13646     }
13647     return param;
13648 }
13649
13650 #endif /* USE_ITHREADS */
13651
13652 void
13653 Perl_init_constants(pTHX)
13654 {
13655     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
13656     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13657     SvANY(&PL_sv_undef)         = NULL;
13658
13659     SvANY(&PL_sv_no)            = new_XPVNV();
13660     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
13661     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13662                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13663                                   |SVp_POK|SVf_POK;
13664
13665     SvANY(&PL_sv_yes)           = new_XPVNV();
13666     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
13667     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13668                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13669                                   |SVp_POK|SVf_POK;
13670
13671     SvPV_set(&PL_sv_no, (char*)PL_No);
13672     SvCUR_set(&PL_sv_no, 0);
13673     SvLEN_set(&PL_sv_no, 0);
13674     SvIV_set(&PL_sv_no, 0);
13675     SvNV_set(&PL_sv_no, 0);
13676
13677     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13678     SvCUR_set(&PL_sv_yes, 1);
13679     SvLEN_set(&PL_sv_yes, 0);
13680     SvIV_set(&PL_sv_yes, 1);
13681     SvNV_set(&PL_sv_yes, 1);
13682 }
13683
13684 /*
13685 =head1 Unicode Support
13686
13687 =for apidoc sv_recode_to_utf8
13688
13689 The encoding is assumed to be an Encode object, on entry the PV
13690 of the sv is assumed to be octets in that encoding, and the sv
13691 will be converted into Unicode (and UTF-8).
13692
13693 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13694 is not a reference, nothing is done to the sv.  If the encoding is not
13695 an C<Encode::XS> Encoding object, bad things will happen.
13696 (See F<lib/encoding.pm> and L<Encode>.)
13697
13698 The PV of the sv is returned.
13699
13700 =cut */
13701
13702 char *
13703 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13704 {
13705     dVAR;
13706
13707     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13708
13709     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13710         SV *uni;
13711         STRLEN len;
13712         const char *s;
13713         dSP;
13714         ENTER;
13715         SAVETMPS;
13716         save_re_context();
13717         PUSHMARK(sp);
13718         EXTEND(SP, 3);
13719         XPUSHs(encoding);
13720         XPUSHs(sv);
13721 /*
13722   NI-S 2002/07/09
13723   Passing sv_yes is wrong - it needs to be or'ed set of constants
13724   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13725   remove converted chars from source.
13726
13727   Both will default the value - let them.
13728
13729         XPUSHs(&PL_sv_yes);
13730 */
13731         PUTBACK;
13732         call_method("decode", G_SCALAR);
13733         SPAGAIN;
13734         uni = POPs;
13735         PUTBACK;
13736         s = SvPV_const(uni, len);
13737         if (s != SvPVX_const(sv)) {
13738             SvGROW(sv, len + 1);
13739             Move(s, SvPVX(sv), len + 1, char);
13740             SvCUR_set(sv, len);
13741         }
13742         FREETMPS;
13743         LEAVE;
13744         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13745             /* clear pos and any utf8 cache */
13746             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13747             if (mg)
13748                 mg->mg_len = -1;
13749             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13750                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13751         }
13752         SvUTF8_on(sv);
13753         return SvPVX(sv);
13754     }
13755     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13756 }
13757
13758 /*
13759 =for apidoc sv_cat_decode
13760
13761 The encoding is assumed to be an Encode object, the PV of the ssv is
13762 assumed to be octets in that encoding and decoding the input starts
13763 from the position which (PV + *offset) pointed to.  The dsv will be
13764 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13765 when the string tstr appears in decoding output or the input ends on
13766 the PV of the ssv.  The value which the offset points will be modified
13767 to the last input position on the ssv.
13768
13769 Returns TRUE if the terminator was found, else returns FALSE.
13770
13771 =cut */
13772
13773 bool
13774 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13775                    SV *ssv, int *offset, char *tstr, int tlen)
13776 {
13777     dVAR;
13778     bool ret = FALSE;
13779
13780     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13781
13782     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13783         SV *offsv;
13784         dSP;
13785         ENTER;
13786         SAVETMPS;
13787         save_re_context();
13788         PUSHMARK(sp);
13789         EXTEND(SP, 6);
13790         XPUSHs(encoding);
13791         XPUSHs(dsv);
13792         XPUSHs(ssv);
13793         offsv = newSViv(*offset);
13794         mXPUSHs(offsv);
13795         mXPUSHp(tstr, tlen);
13796         PUTBACK;
13797         call_method("cat_decode", G_SCALAR);
13798         SPAGAIN;
13799         ret = SvTRUE(TOPs);
13800         *offset = SvIV(offsv);
13801         PUTBACK;
13802         FREETMPS;
13803         LEAVE;
13804     }
13805     else
13806         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13807     return ret;
13808
13809 }
13810
13811 /* ---------------------------------------------------------------------
13812  *
13813  * support functions for report_uninit()
13814  */
13815
13816 /* the maxiumum size of array or hash where we will scan looking
13817  * for the undefined element that triggered the warning */
13818
13819 #define FUV_MAX_SEARCH_SIZE 1000
13820
13821 /* Look for an entry in the hash whose value has the same SV as val;
13822  * If so, return a mortal copy of the key. */
13823
13824 STATIC SV*
13825 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13826 {
13827     dVAR;
13828     HE **array;
13829     I32 i;
13830
13831     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13832
13833     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13834                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13835         return NULL;
13836
13837     array = HvARRAY(hv);
13838
13839     for (i=HvMAX(hv); i>0; i--) {
13840         HE *entry;
13841         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13842             if (HeVAL(entry) != val)
13843                 continue;
13844             if (    HeVAL(entry) == &PL_sv_undef ||
13845                     HeVAL(entry) == &PL_sv_placeholder)
13846                 continue;
13847             if (!HeKEY(entry))
13848                 return NULL;
13849             if (HeKLEN(entry) == HEf_SVKEY)
13850                 return sv_mortalcopy(HeKEY_sv(entry));
13851             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13852         }
13853     }
13854     return NULL;
13855 }
13856
13857 /* Look for an entry in the array whose value has the same SV as val;
13858  * If so, return the index, otherwise return -1. */
13859
13860 STATIC I32
13861 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13862 {
13863     dVAR;
13864
13865     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13866
13867     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13868                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13869         return -1;
13870
13871     if (val != &PL_sv_undef) {
13872         SV ** const svp = AvARRAY(av);
13873         I32 i;
13874
13875         for (i=AvFILLp(av); i>=0; i--)
13876             if (svp[i] == val)
13877                 return i;
13878     }
13879     return -1;
13880 }
13881
13882 /* varname(): return the name of a variable, optionally with a subscript.
13883  * If gv is non-zero, use the name of that global, along with gvtype (one
13884  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13885  * targ.  Depending on the value of the subscript_type flag, return:
13886  */
13887
13888 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13889 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13890 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13891 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13892
13893 SV*
13894 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13895         const SV *const keyname, I32 aindex, int subscript_type)
13896 {
13897
13898     SV * const name = sv_newmortal();
13899     if (gv && isGV(gv)) {
13900         char buffer[2];
13901         buffer[0] = gvtype;
13902         buffer[1] = 0;
13903
13904         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13905
13906         gv_fullname4(name, gv, buffer, 0);
13907
13908         if ((unsigned int)SvPVX(name)[1] <= 26) {
13909             buffer[0] = '^';
13910             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13911
13912             /* Swap the 1 unprintable control character for the 2 byte pretty
13913                version - ie substr($name, 1, 1) = $buffer; */
13914             sv_insert(name, 1, 1, buffer, 2);
13915         }
13916     }
13917     else {
13918         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
13919         SV *sv;
13920         AV *av;
13921
13922         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
13923
13924         if (!cv || !CvPADLIST(cv))
13925             return NULL;
13926         av = *PadlistARRAY(CvPADLIST(cv));
13927         sv = *av_fetch(av, targ, FALSE);
13928         sv_setsv_flags(name, sv, 0);
13929     }
13930
13931     if (subscript_type == FUV_SUBSCRIPT_HASH) {
13932         SV * const sv = newSV(0);
13933         *SvPVX(name) = '$';
13934         Perl_sv_catpvf(aTHX_ name, "{%s}",
13935             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
13936                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
13937         SvREFCNT_dec(sv);
13938     }
13939     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13940         *SvPVX(name) = '$';
13941         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13942     }
13943     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13944         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13945         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
13946     }
13947
13948     return name;
13949 }
13950
13951
13952 /*
13953 =for apidoc find_uninit_var
13954
13955 Find the name of the undefined variable (if any) that caused the operator
13956 to issue a "Use of uninitialized value" warning.
13957 If match is true, only return a name if its value matches uninit_sv.
13958 So roughly speaking, if a unary operator (such as OP_COS) generates a
13959 warning, then following the direct child of the op may yield an
13960 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
13961 other hand, with OP_ADD there are two branches to follow, so we only print
13962 the variable name if we get an exact match.
13963
13964 The name is returned as a mortal SV.
13965
13966 Assumes that PL_op is the op that originally triggered the error, and that
13967 PL_comppad/PL_curpad points to the currently executing pad.
13968
13969 =cut
13970 */
13971
13972 STATIC SV *
13973 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13974                   bool match)
13975 {
13976     dVAR;
13977     SV *sv;
13978     const GV *gv;
13979     const OP *o, *o2, *kid;
13980
13981     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13982                             uninit_sv == &PL_sv_placeholder)))
13983         return NULL;
13984
13985     switch (obase->op_type) {
13986
13987     case OP_RV2AV:
13988     case OP_RV2HV:
13989     case OP_PADAV:
13990     case OP_PADHV:
13991       {
13992         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13993         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13994         I32 index = 0;
13995         SV *keysv = NULL;
13996         int subscript_type = FUV_SUBSCRIPT_WITHIN;
13997
13998         if (pad) { /* @lex, %lex */
13999             sv = PAD_SVl(obase->op_targ);
14000             gv = NULL;
14001         }
14002         else {
14003             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14004             /* @global, %global */
14005                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14006                 if (!gv)
14007                     break;
14008                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14009             }
14010             else if (obase == PL_op) /* @{expr}, %{expr} */
14011                 return find_uninit_var(cUNOPx(obase)->op_first,
14012                                                     uninit_sv, match);
14013             else /* @{expr}, %{expr} as a sub-expression */
14014                 return NULL;
14015         }
14016
14017         /* attempt to find a match within the aggregate */
14018         if (hash) {
14019             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14020             if (keysv)
14021                 subscript_type = FUV_SUBSCRIPT_HASH;
14022         }
14023         else {
14024             index = find_array_subscript((const AV *)sv, uninit_sv);
14025             if (index >= 0)
14026                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14027         }
14028
14029         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14030             break;
14031
14032         return varname(gv, hash ? '%' : '@', obase->op_targ,
14033                                     keysv, index, subscript_type);
14034       }
14035
14036     case OP_RV2SV:
14037         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14038             /* $global */
14039             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14040             if (!gv || !GvSTASH(gv))
14041                 break;
14042             if (match && (GvSV(gv) != uninit_sv))
14043                 break;
14044             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14045         }
14046         /* ${expr} */
14047         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14048
14049     case OP_PADSV:
14050         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14051             break;
14052         return varname(NULL, '$', obase->op_targ,
14053                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14054
14055     case OP_GVSV:
14056         gv = cGVOPx_gv(obase);
14057         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14058             break;
14059         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14060
14061     case OP_AELEMFAST_LEX:
14062         if (match) {
14063             SV **svp;
14064             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14065             if (!av || SvRMAGICAL(av))
14066                 break;
14067             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14068             if (!svp || *svp != uninit_sv)
14069                 break;
14070         }
14071         return varname(NULL, '$', obase->op_targ,
14072                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14073     case OP_AELEMFAST:
14074         {
14075             gv = cGVOPx_gv(obase);
14076             if (!gv)
14077                 break;
14078             if (match) {
14079                 SV **svp;
14080                 AV *const av = GvAV(gv);
14081                 if (!av || SvRMAGICAL(av))
14082                     break;
14083                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14084                 if (!svp || *svp != uninit_sv)
14085                     break;
14086             }
14087             return varname(gv, '$', 0,
14088                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14089         }
14090         break;
14091
14092     case OP_EXISTS:
14093         o = cUNOPx(obase)->op_first;
14094         if (!o || o->op_type != OP_NULL ||
14095                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14096             break;
14097         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14098
14099     case OP_AELEM:
14100     case OP_HELEM:
14101     {
14102         bool negate = FALSE;
14103
14104         if (PL_op == obase)
14105             /* $a[uninit_expr] or $h{uninit_expr} */
14106             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14107
14108         gv = NULL;
14109         o = cBINOPx(obase)->op_first;
14110         kid = cBINOPx(obase)->op_last;
14111
14112         /* get the av or hv, and optionally the gv */
14113         sv = NULL;
14114         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14115             sv = PAD_SV(o->op_targ);
14116         }
14117         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14118                 && cUNOPo->op_first->op_type == OP_GV)
14119         {
14120             gv = cGVOPx_gv(cUNOPo->op_first);
14121             if (!gv)
14122                 break;
14123             sv = o->op_type
14124                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14125         }
14126         if (!sv)
14127             break;
14128
14129         if (kid && kid->op_type == OP_NEGATE) {
14130             negate = TRUE;
14131             kid = cUNOPx(kid)->op_first;
14132         }
14133
14134         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14135             /* index is constant */
14136             SV* kidsv;
14137             if (negate) {
14138                 kidsv = sv_2mortal(newSVpvs("-"));
14139                 sv_catsv(kidsv, cSVOPx_sv(kid));
14140             }
14141             else
14142                 kidsv = cSVOPx_sv(kid);
14143             if (match) {
14144                 if (SvMAGICAL(sv))
14145                     break;
14146                 if (obase->op_type == OP_HELEM) {
14147                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14148                     if (!he || HeVAL(he) != uninit_sv)
14149                         break;
14150                 }
14151                 else {
14152                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14153                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14154                         FALSE);
14155                     if (!svp || *svp != uninit_sv)
14156                         break;
14157                 }
14158             }
14159             if (obase->op_type == OP_HELEM)
14160                 return varname(gv, '%', o->op_targ,
14161                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14162             else
14163                 return varname(gv, '@', o->op_targ, NULL,
14164                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14165                     FUV_SUBSCRIPT_ARRAY);
14166         }
14167         else  {
14168             /* index is an expression;
14169              * attempt to find a match within the aggregate */
14170             if (obase->op_type == OP_HELEM) {
14171                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14172                 if (keysv)
14173                     return varname(gv, '%', o->op_targ,
14174                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14175             }
14176             else {
14177                 const I32 index
14178                     = find_array_subscript((const AV *)sv, uninit_sv);
14179                 if (index >= 0)
14180                     return varname(gv, '@', o->op_targ,
14181                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14182             }
14183             if (match)
14184                 break;
14185             return varname(gv,
14186                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14187                 ? '@' : '%',
14188                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14189         }
14190         break;
14191     }
14192
14193     case OP_AASSIGN:
14194         /* only examine RHS */
14195         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14196
14197     case OP_OPEN:
14198         o = cUNOPx(obase)->op_first;
14199         if (o->op_type == OP_PUSHMARK)
14200             o = o->op_sibling;
14201
14202         if (!o->op_sibling) {
14203             /* one-arg version of open is highly magical */
14204
14205             if (o->op_type == OP_GV) { /* open FOO; */
14206                 gv = cGVOPx_gv(o);
14207                 if (match && GvSV(gv) != uninit_sv)
14208                     break;
14209                 return varname(gv, '$', 0,
14210                             NULL, 0, FUV_SUBSCRIPT_NONE);
14211             }
14212             /* other possibilities not handled are:
14213              * open $x; or open my $x;  should return '${*$x}'
14214              * open expr;               should return '$'.expr ideally
14215              */
14216              break;
14217         }
14218         goto do_op;
14219
14220     /* ops where $_ may be an implicit arg */
14221     case OP_TRANS:
14222     case OP_TRANSR:
14223     case OP_SUBST:
14224     case OP_MATCH:
14225         if ( !(obase->op_flags & OPf_STACKED)) {
14226             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14227                                  ? PAD_SVl(obase->op_targ)
14228                                  : DEFSV))
14229             {
14230                 sv = sv_newmortal();
14231                 sv_setpvs(sv, "$_");
14232                 return sv;
14233             }
14234         }
14235         goto do_op;
14236
14237     case OP_PRTF:
14238     case OP_PRINT:
14239     case OP_SAY:
14240         match = 1; /* print etc can return undef on defined args */
14241         /* skip filehandle as it can't produce 'undef' warning  */
14242         o = cUNOPx(obase)->op_first;
14243         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
14244             o = o->op_sibling->op_sibling;
14245         goto do_op2;
14246
14247
14248     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14249     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14250
14251         /* the following ops are capable of returning PL_sv_undef even for
14252          * defined arg(s) */
14253
14254     case OP_BACKTICK:
14255     case OP_PIPE_OP:
14256     case OP_FILENO:
14257     case OP_BINMODE:
14258     case OP_TIED:
14259     case OP_GETC:
14260     case OP_SYSREAD:
14261     case OP_SEND:
14262     case OP_IOCTL:
14263     case OP_SOCKET:
14264     case OP_SOCKPAIR:
14265     case OP_BIND:
14266     case OP_CONNECT:
14267     case OP_LISTEN:
14268     case OP_ACCEPT:
14269     case OP_SHUTDOWN:
14270     case OP_SSOCKOPT:
14271     case OP_GETPEERNAME:
14272     case OP_FTRREAD:
14273     case OP_FTRWRITE:
14274     case OP_FTREXEC:
14275     case OP_FTROWNED:
14276     case OP_FTEREAD:
14277     case OP_FTEWRITE:
14278     case OP_FTEEXEC:
14279     case OP_FTEOWNED:
14280     case OP_FTIS:
14281     case OP_FTZERO:
14282     case OP_FTSIZE:
14283     case OP_FTFILE:
14284     case OP_FTDIR:
14285     case OP_FTLINK:
14286     case OP_FTPIPE:
14287     case OP_FTSOCK:
14288     case OP_FTBLK:
14289     case OP_FTCHR:
14290     case OP_FTTTY:
14291     case OP_FTSUID:
14292     case OP_FTSGID:
14293     case OP_FTSVTX:
14294     case OP_FTTEXT:
14295     case OP_FTBINARY:
14296     case OP_FTMTIME:
14297     case OP_FTATIME:
14298     case OP_FTCTIME:
14299     case OP_READLINK:
14300     case OP_OPEN_DIR:
14301     case OP_READDIR:
14302     case OP_TELLDIR:
14303     case OP_SEEKDIR:
14304     case OP_REWINDDIR:
14305     case OP_CLOSEDIR:
14306     case OP_GMTIME:
14307     case OP_ALARM:
14308     case OP_SEMGET:
14309     case OP_GETLOGIN:
14310     case OP_UNDEF:
14311     case OP_SUBSTR:
14312     case OP_AEACH:
14313     case OP_EACH:
14314     case OP_SORT:
14315     case OP_CALLER:
14316     case OP_DOFILE:
14317     case OP_PROTOTYPE:
14318     case OP_NCMP:
14319     case OP_SMARTMATCH:
14320     case OP_UNPACK:
14321     case OP_SYSOPEN:
14322     case OP_SYSSEEK:
14323         match = 1;
14324         goto do_op;
14325
14326     case OP_ENTERSUB:
14327     case OP_GOTO:
14328         /* XXX tmp hack: these two may call an XS sub, and currently
14329           XS subs don't have a SUB entry on the context stack, so CV and
14330           pad determination goes wrong, and BAD things happen. So, just
14331           don't try to determine the value under those circumstances.
14332           Need a better fix at dome point. DAPM 11/2007 */
14333         break;
14334
14335     case OP_FLIP:
14336     case OP_FLOP:
14337     {
14338         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14339         if (gv && GvSV(gv) == uninit_sv)
14340             return newSVpvs_flags("$.", SVs_TEMP);
14341         goto do_op;
14342     }
14343
14344     case OP_POS:
14345         /* def-ness of rval pos() is independent of the def-ness of its arg */
14346         if ( !(obase->op_flags & OPf_MOD))
14347             break;
14348
14349     case OP_SCHOMP:
14350     case OP_CHOMP:
14351         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14352             return newSVpvs_flags("${$/}", SVs_TEMP);
14353         /*FALLTHROUGH*/
14354
14355     default:
14356     do_op:
14357         if (!(obase->op_flags & OPf_KIDS))
14358             break;
14359         o = cUNOPx(obase)->op_first;
14360         
14361     do_op2:
14362         if (!o)
14363             break;
14364
14365         /* This loop checks all the kid ops, skipping any that cannot pos-
14366          * sibly be responsible for the uninitialized value; i.e., defined
14367          * constants and ops that return nothing.  If there is only one op
14368          * left that is not skipped, then we *know* it is responsible for
14369          * the uninitialized value.  If there is more than one op left, we
14370          * have to look for an exact match in the while() loop below.
14371          */
14372         o2 = NULL;
14373         for (kid=o; kid; kid = kid->op_sibling) {
14374             if (kid) {
14375                 const OPCODE type = kid->op_type;
14376                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14377                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14378                   || (type == OP_PUSHMARK)
14379                 )
14380                 continue;
14381             }
14382             if (o2) { /* more than one found */
14383                 o2 = NULL;
14384                 break;
14385             }
14386             o2 = kid;
14387         }
14388         if (o2)
14389             return find_uninit_var(o2, uninit_sv, match);
14390
14391         /* scan all args */
14392         while (o) {
14393             sv = find_uninit_var(o, uninit_sv, 1);
14394             if (sv)
14395                 return sv;
14396             o = o->op_sibling;
14397         }
14398         break;
14399     }
14400     return NULL;
14401 }
14402
14403
14404 /*
14405 =for apidoc report_uninit
14406
14407 Print appropriate "Use of uninitialized variable" warning.
14408
14409 =cut
14410 */
14411
14412 void
14413 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14414 {
14415     dVAR;
14416     if (PL_op) {
14417         SV* varname = NULL;
14418         if (uninit_sv && PL_curpad) {
14419             varname = find_uninit_var(PL_op, uninit_sv,0);
14420             if (varname)
14421                 sv_insert(varname, 0, 0, " ", 1);
14422         }
14423         /* diag_listed_as: Use of uninitialized value%s */
14424         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14425                 SVfARG(varname ? varname : &PL_sv_no),
14426                 " in ", OP_DESC(PL_op));
14427     }
14428     else
14429         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14430                     "", "", "");
14431 }
14432
14433 /*
14434  * Local variables:
14435  * c-indentation-style: bsd
14436  * c-basic-offset: 4
14437  * indent-tabs-mode: nil
14438  * End:
14439  *
14440  * ex: set ts=8 sts=4 sw=4 et:
14441  */