This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add sin6_scope_id probe (LeoNerd)
[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 configuations (ex: PURIFY), heads
84 and bodies are allocated out of arenas, which by default are
85 approximately 4K chunks of memory parcelled up into N heads or bodies.
86 Sv-bodies are allocated by their sv-type, guaranteeing size
87 consistency needed to allocate safely from arrays.
88
89 For SV-heads, the first slot in each arena is reserved, and holds a
90 link to the next arena, some flags, and a note of the number of slots.
91 Snaked through each arena chain is a linked list of free items; when
92 this becomes empty, an extra arena is allocated and divided up into N
93 items which are threaded into the free list.
94
95 SV-bodies are similar, but they use arena-sets by default, which
96 separate the link and info from the arena itself, and reclaim the 1st
97 slot in the arena.  SV-bodies are further described later.
98
99 The following global variables are associated with arenas:
100
101     PL_sv_arenaroot     pointer to list of SV arenas
102     PL_sv_root          pointer to list of free SV structures
103
104     PL_body_arenas      head of linked-list of body arenas
105     PL_body_roots[]     array of pointers to list of free bodies of svtype
106                         arrays are indexed by the svtype needed
107
108 A few special SV heads are not allocated from an arena, but are
109 instead directly created in the interpreter structure, eg PL_sv_undef.
110 The size of arenas can be changed from the default by setting
111 PERL_ARENA_SIZE appropriately at compile time.
112
113 The SV arena serves the secondary purpose of allowing still-live SVs
114 to be located and destroyed during final cleanup.
115
116 At the lowest level, the macros new_SV() and del_SV() grab and free
117 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
118 to return the SV to the free list with error checking.) new_SV() calls
119 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
120 SVs in the free list have their SvTYPE field set to all ones.
121
122 At the time of very final cleanup, sv_free_arenas() is called from
123 perl_destruct() to physically free all the arenas allocated since the
124 start of the interpreter.
125
126 The function visit() scans the SV arenas list, and calls a specified
127 function for each SV it finds which is still live - ie which has an SvTYPE
128 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
129 following functions (specified as [function that calls visit()] / [function
130 called by visit() for each SV]):
131
132     sv_report_used() / do_report_used()
133                         dump all remaining SVs (debugging aid)
134
135     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
136                       do_clean_named_io_objs()
137                         Attempt to free all objects pointed to by RVs,
138                         and try to do the same for all objects indirectly
139                         referenced by typeglobs too.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
186 #  define DEBUG_SV_SERIAL(sv)                                               \
187     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
188             PTR2UV(sv), (long)(sv)->sv_debug_serial))
189 #else
190 #  define FREE_SV_DEBUG_FILE(sv)
191 #  define DEBUG_SV_SERIAL(sv)   NOOP
192 #endif
193
194 #ifdef PERL_POISON
195 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
196 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
197 /* Whilst I'd love to do this, it seems that things like to check on
198    unreferenced scalars
199 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
200 */
201 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
202                                 PoisonNew(&SvREFCNT(sv), 1, U32)
203 #else
204 #  define SvARENA_CHAIN(sv)     SvANY(sv)
205 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
206 #  define POSION_SV_HEAD(sv)
207 #endif
208
209 /* Mark an SV head as unused, and add to free list.
210  *
211  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
212  * its refcount artificially decremented during global destruction, so
213  * there may be dangling pointers to it. The last thing we want in that
214  * case is for it to be reused. */
215
216 #define plant_SV(p) \
217     STMT_START {                                        \
218         const U32 old_flags = SvFLAGS(p);                       \
219         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
220         DEBUG_SV_SERIAL(p);                             \
221         FREE_SV_DEBUG_FILE(p);                          \
222         POSION_SV_HEAD(p);                              \
223         SvFLAGS(p) = SVTYPEMASK;                        \
224         if (!(old_flags & SVf_BREAK)) {         \
225             SvARENA_CHAIN_SET(p, PL_sv_root);   \
226             PL_sv_root = (p);                           \
227         }                                               \
228         --PL_sv_count;                                  \
229     } STMT_END
230
231 #define uproot_SV(p) \
232     STMT_START {                                        \
233         (p) = PL_sv_root;                               \
234         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
235         ++PL_sv_count;                                  \
236     } STMT_END
237
238
239 /* make some more SVs by adding another arena */
240
241 STATIC SV*
242 S_more_sv(pTHX)
243 {
244     dVAR;
245     SV* sv;
246     char *chunk;                /* must use New here to match call to */
247     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
248     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
249     uproot_SV(sv);
250     return sv;
251 }
252
253 /* new_SV(): return a new, empty SV head */
254
255 #ifdef DEBUG_LEAKING_SCALARS
256 /* provide a real function for a debugger to play with */
257 STATIC SV*
258 S_new_SV(pTHX_ const char *file, int line, const char *func)
259 {
260     SV* sv;
261
262     if (PL_sv_root)
263         uproot_SV(sv);
264     else
265         sv = S_more_sv(aTHX);
266     SvANY(sv) = 0;
267     SvREFCNT(sv) = 1;
268     SvFLAGS(sv) = 0;
269     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
270     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
271                 ? PL_parser->copline
272                 :  PL_curcop
273                     ? CopLINE(PL_curcop)
274                     : 0
275             );
276     sv->sv_debug_inpad = 0;
277     sv->sv_debug_parent = NULL;
278     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
279
280     sv->sv_debug_serial = PL_sv_serial++;
281
282     MEM_LOG_NEW_SV(sv, file, line, func);
283     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
284             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
285
286     return sv;
287 }
288 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
289
290 #else
291 #  define new_SV(p) \
292     STMT_START {                                        \
293         if (PL_sv_root)                                 \
294             uproot_SV(p);                               \
295         else                                            \
296             (p) = S_more_sv(aTHX);                      \
297         SvANY(p) = 0;                                   \
298         SvREFCNT(p) = 1;                                \
299         SvFLAGS(p) = 0;                                 \
300         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
301     } STMT_END
302 #endif
303
304
305 /* del_SV(): return an empty SV head to the free list */
306
307 #ifdef DEBUGGING
308
309 #define del_SV(p) \
310     STMT_START {                                        \
311         if (DEBUG_D_TEST)                               \
312             del_sv(p);                                  \
313         else                                            \
314             plant_SV(p);                                \
315     } STMT_END
316
317 STATIC void
318 S_del_sv(pTHX_ SV *p)
319 {
320     dVAR;
321
322     PERL_ARGS_ASSERT_DEL_SV;
323
324     if (DEBUG_D_TEST) {
325         SV* sva;
326         bool ok = 0;
327         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
328             const SV * const sv = sva + 1;
329             const SV * const svend = &sva[SvREFCNT(sva)];
330             if (p >= sv && p < svend) {
331                 ok = 1;
332                 break;
333             }
334         }
335         if (!ok) {
336             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
337                              "Attempt to free non-arena SV: 0x%"UVxf
338                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
339             return;
340         }
341     }
342     plant_SV(p);
343 }
344
345 #else /* ! DEBUGGING */
346
347 #define del_SV(p)   plant_SV(p)
348
349 #endif /* DEBUGGING */
350
351
352 /*
353 =head1 SV Manipulation Functions
354
355 =for apidoc sv_add_arena
356
357 Given a chunk of memory, link it to the head of the list of arenas,
358 and split it into a list of free SVs.
359
360 =cut
361 */
362
363 static void
364 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
365 {
366     dVAR;
367     SV *const sva = MUTABLE_SV(ptr);
368     register SV* sv;
369     register SV* svend;
370
371     PERL_ARGS_ASSERT_SV_ADD_ARENA;
372
373     /* The first SV in an arena isn't an SV. */
374     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
375     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
376     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
377
378     PL_sv_arenaroot = sva;
379     PL_sv_root = sva + 1;
380
381     svend = &sva[SvREFCNT(sva) - 1];
382     sv = sva + 1;
383     while (sv < svend) {
384         SvARENA_CHAIN_SET(sv, (sv + 1));
385 #ifdef DEBUGGING
386         SvREFCNT(sv) = 0;
387 #endif
388         /* Must always set typemask because it's always checked in on cleanup
389            when the arenas are walked looking for objects.  */
390         SvFLAGS(sv) = SVTYPEMASK;
391         sv++;
392     }
393     SvARENA_CHAIN_SET(sv, 0);
394 #ifdef DEBUGGING
395     SvREFCNT(sv) = 0;
396 #endif
397     SvFLAGS(sv) = SVTYPEMASK;
398 }
399
400 /* visit(): call the named function for each non-free SV in the arenas
401  * whose flags field matches the flags/mask args. */
402
403 STATIC I32
404 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
405 {
406     dVAR;
407     SV* sva;
408     I32 visited = 0;
409
410     PERL_ARGS_ASSERT_VISIT;
411
412     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
413         register const SV * const svend = &sva[SvREFCNT(sva)];
414         register SV* sv;
415         for (sv = sva + 1; sv < svend; ++sv) {
416             if (SvTYPE(sv) != SVTYPEMASK
417                     && (sv->sv_flags & mask) == flags
418                     && SvREFCNT(sv))
419             {
420                 (FCALL)(aTHX_ sv);
421                 ++visited;
422             }
423         }
424     }
425     return visited;
426 }
427
428 #ifdef DEBUGGING
429
430 /* called by sv_report_used() for each live SV */
431
432 static void
433 do_report_used(pTHX_ SV *const sv)
434 {
435     if (SvTYPE(sv) != SVTYPEMASK) {
436         PerlIO_printf(Perl_debug_log, "****\n");
437         sv_dump(sv);
438     }
439 }
440 #endif
441
442 /*
443 =for apidoc sv_report_used
444
445 Dump the contents of all SVs not yet freed. (Debugging aid).
446
447 =cut
448 */
449
450 void
451 Perl_sv_report_used(pTHX)
452 {
453 #ifdef DEBUGGING
454     visit(do_report_used, 0, 0);
455 #else
456     PERL_UNUSED_CONTEXT;
457 #endif
458 }
459
460 /* called by sv_clean_objs() for each live SV */
461
462 static void
463 do_clean_objs(pTHX_ SV *const ref)
464 {
465     dVAR;
466     assert (SvROK(ref));
467     {
468         SV * const target = SvRV(ref);
469         if (SvOBJECT(target)) {
470             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
471             if (SvWEAKREF(ref)) {
472                 sv_del_backref(target, ref);
473                 SvWEAKREF_off(ref);
474                 SvRV_set(ref, NULL);
475             } else {
476                 SvROK_off(ref);
477                 SvRV_set(ref, NULL);
478                 SvREFCNT_dec(target);
479             }
480         }
481     }
482
483     /* XXX Might want to check arrays, etc. */
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV(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 /*
555 =for apidoc sv_clean_objs
556
557 Attempt to destroy all objects not yet freed
558
559 =cut
560 */
561
562 void
563 Perl_sv_clean_objs(pTHX)
564 {
565     dVAR;
566     GV *olddef, *olderr;
567     PL_in_clean_objs = TRUE;
568     visit(do_clean_objs, SVf_ROK, SVf_ROK);
569     /* Some barnacles may yet remain, clinging to typeglobs.
570      * Run the non-IO destructors first: they may want to output
571      * error messages, close files etc */
572     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
573     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
574     olddef = PL_defoutgv;
575     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
576     if (olddef && isGV_with_GP(olddef))
577         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
578     olderr = PL_stderrgv;
579     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
580     if (olderr && isGV_with_GP(olderr))
581         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
582     SvREFCNT_dec(olddef);
583     PL_in_clean_objs = FALSE;
584 }
585
586 /* called by sv_clean_all() for each live SV */
587
588 static void
589 do_clean_all(pTHX_ SV *const sv)
590 {
591     dVAR;
592     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
593         /* don't clean pid table and strtab */
594         return;
595     }
596     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
597     SvFLAGS(sv) |= SVf_BREAK;
598     SvREFCNT_dec(sv);
599 }
600
601 /*
602 =for apidoc sv_clean_all
603
604 Decrement the refcnt of each remaining SV, possibly triggering a
605 cleanup. This function may have to be called multiple times to free
606 SVs which are in complex self-referential hierarchies.
607
608 =cut
609 */
610
611 I32
612 Perl_sv_clean_all(pTHX)
613 {
614     dVAR;
615     I32 cleaned;
616     PL_in_clean_all = TRUE;
617     cleaned = visit(do_clean_all, 0,0);
618     return cleaned;
619 }
620
621 /*
622   ARENASETS: a meta-arena implementation which separates arena-info
623   into struct arena_set, which contains an array of struct
624   arena_descs, each holding info for a single arena.  By separating
625   the meta-info from the arena, we recover the 1st slot, formerly
626   borrowed for list management.  The arena_set is about the size of an
627   arena, avoiding the needless malloc overhead of a naive linked-list.
628
629   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
630   memory in the last arena-set (1/2 on average).  In trade, we get
631   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
632   smaller types).  The recovery of the wasted space allows use of
633   small arenas for large, rare body types, by changing array* fields
634   in body_details_by_type[] below.
635 */
636 struct arena_desc {
637     char       *arena;          /* the raw storage, allocated aligned */
638     size_t      size;           /* its size ~4k typ */
639     svtype      utype;          /* bodytype stored in arena */
640 };
641
642 struct arena_set;
643
644 /* Get the maximum number of elements in set[] such that struct arena_set
645    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
646    therefore likely to be 1 aligned memory page.  */
647
648 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
649                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
650
651 struct arena_set {
652     struct arena_set* next;
653     unsigned int   set_size;    /* ie ARENAS_PER_SET */
654     unsigned int   curr;        /* index of next available arena-desc */
655     struct arena_desc set[ARENAS_PER_SET];
656 };
657
658 /*
659 =for apidoc sv_free_arenas
660
661 Deallocate the memory used by all arenas. Note that all the individual SV
662 heads and bodies within the arenas must already have been freed.
663
664 =cut
665 */
666 void
667 Perl_sv_free_arenas(pTHX)
668 {
669     dVAR;
670     SV* sva;
671     SV* svanext;
672     unsigned int i;
673
674     /* Free arenas here, but be careful about fake ones.  (We assume
675        contiguity of the fake ones with the corresponding real ones.) */
676
677     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
678         svanext = MUTABLE_SV(SvANY(sva));
679         while (svanext && SvFAKE(svanext))
680             svanext = MUTABLE_SV(SvANY(svanext));
681
682         if (!SvFAKE(sva))
683             Safefree(sva);
684     }
685
686     {
687         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
688
689         while (aroot) {
690             struct arena_set *current = aroot;
691             i = aroot->curr;
692             while (i--) {
693                 assert(aroot->set[i].arena);
694                 Safefree(aroot->set[i].arena);
695             }
696             aroot = aroot->next;
697             Safefree(current);
698         }
699     }
700     PL_body_arenas = 0;
701
702     i = PERL_ARENA_ROOTS_SIZE;
703     while (i--)
704         PL_body_roots[i] = 0;
705
706     PL_sv_arenaroot = 0;
707     PL_sv_root = 0;
708 }
709
710 /*
711   Here are mid-level routines that manage the allocation of bodies out
712   of the various arenas.  There are 5 kinds of arenas:
713
714   1. SV-head arenas, which are discussed and handled above
715   2. regular body arenas
716   3. arenas for reduced-size bodies
717   4. Hash-Entry arenas
718
719   Arena types 2 & 3 are chained by body-type off an array of
720   arena-root pointers, which is indexed by svtype.  Some of the
721   larger/less used body types are malloced singly, since a large
722   unused block of them is wasteful.  Also, several svtypes dont have
723   bodies; the data fits into the sv-head itself.  The arena-root
724   pointer thus has a few unused root-pointers (which may be hijacked
725   later for arena types 4,5)
726
727   3 differs from 2 as an optimization; some body types have several
728   unused fields in the front of the structure (which are kept in-place
729   for consistency).  These bodies can be allocated in smaller chunks,
730   because the leading fields arent accessed.  Pointers to such bodies
731   are decremented to point at the unused 'ghost' memory, knowing that
732   the pointers are used with offsets to the real memory.
733
734
735 =head1 SV-Body Allocation
736
737 Allocation of SV-bodies is similar to SV-heads, differing as follows;
738 the allocation mechanism is used for many body types, so is somewhat
739 more complicated, it uses arena-sets, and has no need for still-live
740 SV detection.
741
742 At the outermost level, (new|del)_X*V macros return bodies of the
743 appropriate type.  These macros call either (new|del)_body_type or
744 (new|del)_body_allocated macro pairs, depending on specifics of the
745 type.  Most body types use the former pair, the latter pair is used to
746 allocate body types with "ghost fields".
747
748 "ghost fields" are fields that are unused in certain types, and
749 consequently don't need to actually exist.  They are declared because
750 they're part of a "base type", which allows use of functions as
751 methods.  The simplest examples are AVs and HVs, 2 aggregate types
752 which don't use the fields which support SCALAR semantics.
753
754 For these types, the arenas are carved up into appropriately sized
755 chunks, we thus avoid wasted memory for those unaccessed members.
756 When bodies are allocated, we adjust the pointer back in memory by the
757 size of the part not allocated, so it's as if we allocated the full
758 structure.  (But things will all go boom if you write to the part that
759 is "not there", because you'll be overwriting the last members of the
760 preceding structure in memory.)
761
762 We calculate the correction using the STRUCT_OFFSET macro on the first
763 member present. If the allocated structure is smaller (no initial NV
764 actually allocated) then the net effect is to subtract the size of the NV
765 from the pointer, to return a new pointer as if an initial NV were actually
766 allocated. (We were using structures named *_allocated for this, but
767 this turned out to be a subtle bug, because a structure without an NV
768 could have a lower alignment constraint, but the compiler is allowed to
769 optimised accesses based on the alignment constraint of the actual pointer
770 to the full structure, for example, using a single 64 bit load instruction
771 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
772
773 This is the same trick as was used for NV and IV bodies. Ironically it
774 doesn't need to be used for NV bodies any more, because NV is now at
775 the start of the structure. IV bodies don't need it either, because
776 they are no longer allocated.
777
778 In turn, the new_body_* allocators call S_new_body(), which invokes
779 new_body_inline macro, which takes a lock, and takes a body off the
780 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
781 necessary to refresh an empty list.  Then the lock is released, and
782 the body is returned.
783
784 Perl_more_bodies allocates a new arena, and carves it up into an array of N
785 bodies, which it strings into a linked list.  It looks up arena-size
786 and body-size from the body_details table described below, thus
787 supporting the multiple body-types.
788
789 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
790 the (new|del)_X*V macros are mapped directly to malloc/free.
791
792 For each sv-type, struct body_details bodies_by_type[] carries
793 parameters which control these aspects of SV handling:
794
795 Arena_size determines whether arenas are used for this body type, and if
796 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
797 zero, forcing individual mallocs and frees.
798
799 Body_size determines how big a body is, and therefore how many fit into
800 each arena.  Offset carries the body-pointer adjustment needed for
801 "ghost fields", and is used in *_allocated macros.
802
803 But its main purpose is to parameterize info needed in
804 Perl_sv_upgrade().  The info here dramatically simplifies the function
805 vs the implementation in 5.8.8, making it table-driven.  All fields
806 are used for this, except for arena_size.
807
808 For the sv-types that have no bodies, arenas are not used, so those
809 PL_body_roots[sv_type] are unused, and can be overloaded.  In
810 something of a special case, SVt_NULL is borrowed for HE arenas;
811 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
812 bodies_by_type[SVt_NULL] slot is not used, as the table is not
813 available in hv.c.
814
815 */
816
817 struct body_details {
818     U8 body_size;       /* Size to allocate  */
819     U8 copy;            /* Size of structure to copy (may be shorter)  */
820     U8 offset;
821     unsigned int type : 4;          /* We have space for a sanity check.  */
822     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
823     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
824     unsigned int arena : 1;         /* Allocated from an arena */
825     size_t arena_size;              /* Size of arena to allocate */
826 };
827
828 #define HADNV FALSE
829 #define NONV TRUE
830
831
832 #ifdef PURIFY
833 /* With -DPURFIY we allocate everything directly, and don't use arenas.
834    This seems a rather elegant way to simplify some of the code below.  */
835 #define HASARENA FALSE
836 #else
837 #define HASARENA TRUE
838 #endif
839 #define NOARENA FALSE
840
841 /* Size the arenas to exactly fit a given number of bodies.  A count
842    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
843    simplifying the default.  If count > 0, the arena is sized to fit
844    only that many bodies, allowing arenas to be used for large, rare
845    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
846    limited by PERL_ARENA_SIZE, so we can safely oversize the
847    declarations.
848  */
849 #define FIT_ARENA0(body_size)                           \
850     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
851 #define FIT_ARENAn(count,body_size)                     \
852     ( count * body_size <= PERL_ARENA_SIZE)             \
853     ? count * body_size                                 \
854     : FIT_ARENA0 (body_size)
855 #define FIT_ARENA(count,body_size)                      \
856     count                                               \
857     ? FIT_ARENAn (count, body_size)                     \
858     : FIT_ARENA0 (body_size)
859
860 /* Calculate the length to copy. Specifically work out the length less any
861    final padding the compiler needed to add.  See the comment in sv_upgrade
862    for why copying the padding proved to be a bug.  */
863
864 #define copy_length(type, last_member) \
865         STRUCT_OFFSET(type, last_member) \
866         + sizeof (((type*)SvANY((const SV *)0))->last_member)
867
868 static const struct body_details bodies_by_type[] = {
869     /* HEs use this offset for their arena.  */
870     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
871
872     /* The bind placeholder pretends to be an RV for now.
873        Also it's marked as "can't upgrade" to stop anyone using it before it's
874        implemented.  */
875     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
876
877     /* IVs are in the head, so the allocation size is 0.  */
878     { 0,
879       sizeof(IV), /* This is used to copy out the IV body.  */
880       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
881       NOARENA /* IVS don't need an arena  */, 0
882     },
883
884     /* 8 bytes on most ILP32 with IEEE doubles */
885     { sizeof(NV), sizeof(NV),
886       STRUCT_OFFSET(XPVNV, xnv_u),
887       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
888
889     /* 8 bytes on most ILP32 with IEEE doubles */
890     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
891       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
892       + STRUCT_OFFSET(XPV, xpv_cur),
893       SVt_PV, FALSE, NONV, HASARENA,
894       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
895
896     /* 12 */
897     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
898       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
899       + STRUCT_OFFSET(XPV, xpv_cur),
900       SVt_PVIV, FALSE, NONV, HASARENA,
901       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
902
903     /* 20 */
904     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
905       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
906       + STRUCT_OFFSET(XPV, xpv_cur),
907       SVt_PVNV, FALSE, HADNV, HASARENA,
908       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
909
910     /* 28 */
911     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
912       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
913
914     /* something big */
915     { sizeof(regexp),
916       sizeof(regexp),
917       0,
918       SVt_REGEXP, FALSE, NONV, HASARENA,
919       FIT_ARENA(0, sizeof(regexp))
920     },
921
922     /* 48 */
923     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
924       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
925     
926     /* 64 */
927     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
928       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
929
930     { sizeof(XPVAV),
931       copy_length(XPVAV, xav_alloc),
932       0,
933       SVt_PVAV, TRUE, NONV, HASARENA,
934       FIT_ARENA(0, sizeof(XPVAV)) },
935
936     { sizeof(XPVHV),
937       copy_length(XPVHV, xhv_max),
938       0,
939       SVt_PVHV, TRUE, NONV, HASARENA,
940       FIT_ARENA(0, sizeof(XPVHV)) },
941
942     /* 56 */
943     { sizeof(XPVCV),
944       sizeof(XPVCV),
945       0,
946       SVt_PVCV, TRUE, NONV, HASARENA,
947       FIT_ARENA(0, sizeof(XPVCV)) },
948
949     { sizeof(XPVFM),
950       sizeof(XPVFM),
951       0,
952       SVt_PVFM, TRUE, NONV, NOARENA,
953       FIT_ARENA(20, sizeof(XPVFM)) },
954
955     /* XPVIO is 84 bytes, fits 48x */
956     { sizeof(XPVIO),
957       sizeof(XPVIO),
958       0,
959       SVt_PVIO, TRUE, NONV, HASARENA,
960       FIT_ARENA(24, sizeof(XPVIO)) },
961 };
962
963 #define new_body_allocated(sv_type)             \
964     (void *)((char *)S_new_body(aTHX_ sv_type)  \
965              - bodies_by_type[sv_type].offset)
966
967 /* return a thing to the free list */
968
969 #define del_body(thing, root)                           \
970     STMT_START {                                        \
971         void ** const thing_copy = (void **)thing;      \
972         *thing_copy = *root;                            \
973         *root = (void*)thing_copy;                      \
974     } STMT_END
975
976 #ifdef PURIFY
977
978 #define new_XNV()       safemalloc(sizeof(XPVNV))
979 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
980 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
981
982 #define del_XPVGV(p)    safefree(p)
983
984 #else /* !PURIFY */
985
986 #define new_XNV()       new_body_allocated(SVt_NV)
987 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
988 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
989
990 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
991                                  &PL_body_roots[SVt_PVGV])
992
993 #endif /* PURIFY */
994
995 /* no arena for you! */
996
997 #define new_NOARENA(details) \
998         safemalloc((details)->body_size + (details)->offset)
999 #define new_NOARENAZ(details) \
1000         safecalloc((details)->body_size + (details)->offset, 1)
1001
1002 void *
1003 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1004                   const size_t arena_size)
1005 {
1006     dVAR;
1007     void ** const root = &PL_body_roots[sv_type];
1008     struct arena_desc *adesc;
1009     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1010     unsigned int curr;
1011     char *start;
1012     const char *end;
1013     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1014 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1015     static bool done_sanity_check;
1016
1017     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1018      * variables like done_sanity_check. */
1019     if (!done_sanity_check) {
1020         unsigned int i = SVt_LAST;
1021
1022         done_sanity_check = TRUE;
1023
1024         while (i--)
1025             assert (bodies_by_type[i].type == i);
1026     }
1027 #endif
1028
1029     assert(arena_size);
1030
1031     /* may need new arena-set to hold new arena */
1032     if (!aroot || aroot->curr >= aroot->set_size) {
1033         struct arena_set *newroot;
1034         Newxz(newroot, 1, struct arena_set);
1035         newroot->set_size = ARENAS_PER_SET;
1036         newroot->next = aroot;
1037         aroot = newroot;
1038         PL_body_arenas = (void *) newroot;
1039         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1040     }
1041
1042     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1043     curr = aroot->curr++;
1044     adesc = &(aroot->set[curr]);
1045     assert(!adesc->arena);
1046     
1047     Newx(adesc->arena, good_arena_size, char);
1048     adesc->size = good_arena_size;
1049     adesc->utype = sv_type;
1050     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1051                           curr, (void*)adesc->arena, (UV)good_arena_size));
1052
1053     start = (char *) adesc->arena;
1054
1055     /* Get the address of the byte after the end of the last body we can fit.
1056        Remember, this is integer division:  */
1057     end = start + good_arena_size / body_size * body_size;
1058
1059     /* computed count doesnt reflect the 1st slot reservation */
1060 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1061     DEBUG_m(PerlIO_printf(Perl_debug_log,
1062                           "arena %p end %p arena-size %d (from %d) type %d "
1063                           "size %d ct %d\n",
1064                           (void*)start, (void*)end, (int)good_arena_size,
1065                           (int)arena_size, sv_type, (int)body_size,
1066                           (int)good_arena_size / (int)body_size));
1067 #else
1068     DEBUG_m(PerlIO_printf(Perl_debug_log,
1069                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1070                           (void*)start, (void*)end,
1071                           (int)arena_size, sv_type, (int)body_size,
1072                           (int)good_arena_size / (int)body_size));
1073 #endif
1074     *root = (void *)start;
1075
1076     while (1) {
1077         /* Where the next body would start:  */
1078         char * const next = start + body_size;
1079
1080         if (next >= end) {
1081             /* This is the last body:  */
1082             assert(next == end);
1083
1084             *(void **)start = 0;
1085             return *root;
1086         }
1087
1088         *(void**) start = (void *)next;
1089         start = next;
1090     }
1091 }
1092
1093 /* grab a new thing from the free list, allocating more if necessary.
1094    The inline version is used for speed in hot routines, and the
1095    function using it serves the rest (unless PURIFY).
1096 */
1097 #define new_body_inline(xpv, sv_type) \
1098     STMT_START { \
1099         void ** const r3wt = &PL_body_roots[sv_type]; \
1100         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1101           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1102                                              bodies_by_type[sv_type].body_size,\
1103                                              bodies_by_type[sv_type].arena_size)); \
1104         *(r3wt) = *(void**)(xpv); \
1105     } STMT_END
1106
1107 #ifndef PURIFY
1108
1109 STATIC void *
1110 S_new_body(pTHX_ const svtype sv_type)
1111 {
1112     dVAR;
1113     void *xpv;
1114     new_body_inline(xpv, sv_type);
1115     return xpv;
1116 }
1117
1118 #endif
1119
1120 static const struct body_details fake_rv =
1121     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1122
1123 /*
1124 =for apidoc sv_upgrade
1125
1126 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1127 SV, then copies across as much information as possible from the old body.
1128 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1129
1130 =cut
1131 */
1132
1133 void
1134 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1135 {
1136     dVAR;
1137     void*       old_body;
1138     void*       new_body;
1139     const svtype old_type = SvTYPE(sv);
1140     const struct body_details *new_type_details;
1141     const struct body_details *old_type_details
1142         = bodies_by_type + old_type;
1143     SV *referant = NULL;
1144
1145     PERL_ARGS_ASSERT_SV_UPGRADE;
1146
1147     if (old_type == new_type)
1148         return;
1149
1150     /* This clause was purposefully added ahead of the early return above to
1151        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1152        inference by Nick I-S that it would fix other troublesome cases. See
1153        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1154
1155        Given that shared hash key scalars are no longer PVIV, but PV, there is
1156        no longer need to unshare so as to free up the IVX slot for its proper
1157        purpose. So it's safe to move the early return earlier.  */
1158
1159     if (new_type != SVt_PV && SvIsCOW(sv)) {
1160         sv_force_normal_flags(sv, 0);
1161     }
1162
1163     old_body = SvANY(sv);
1164
1165     /* Copying structures onto other structures that have been neatly zeroed
1166        has a subtle gotcha. Consider XPVMG
1167
1168        +------+------+------+------+------+-------+-------+
1169        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1170        +------+------+------+------+------+-------+-------+
1171        0      4      8     12     16     20      24      28
1172
1173        where NVs are aligned to 8 bytes, so that sizeof that structure is
1174        actually 32 bytes long, with 4 bytes of padding at the end:
1175
1176        +------+------+------+------+------+-------+-------+------+
1177        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1178        +------+------+------+------+------+-------+-------+------+
1179        0      4      8     12     16     20      24      28     32
1180
1181        so what happens if you allocate memory for this structure:
1182
1183        +------+------+------+------+------+-------+-------+------+------+...
1184        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1185        +------+------+------+------+------+-------+-------+------+------+...
1186        0      4      8     12     16     20      24      28     32     36
1187
1188        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1189        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1190        started out as zero once, but it's quite possible that it isn't. So now,
1191        rather than a nicely zeroed GP, you have it pointing somewhere random.
1192        Bugs ensue.
1193
1194        (In fact, GP ends up pointing at a previous GP structure, because the
1195        principle cause of the padding in XPVMG getting garbage is a copy of
1196        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1197        this happens to be moot because XPVGV has been re-ordered, with GP
1198        no longer after STASH)
1199
1200        So we are careful and work out the size of used parts of all the
1201        structures.  */
1202
1203     switch (old_type) {
1204     case SVt_NULL:
1205         break;
1206     case SVt_IV:
1207         if (SvROK(sv)) {
1208             referant = SvRV(sv);
1209             old_type_details = &fake_rv;
1210             if (new_type == SVt_NV)
1211                 new_type = SVt_PVNV;
1212         } else {
1213             if (new_type < SVt_PVIV) {
1214                 new_type = (new_type == SVt_NV)
1215                     ? SVt_PVNV : SVt_PVIV;
1216             }
1217         }
1218         break;
1219     case SVt_NV:
1220         if (new_type < SVt_PVNV) {
1221             new_type = SVt_PVNV;
1222         }
1223         break;
1224     case SVt_PV:
1225         assert(new_type > SVt_PV);
1226         assert(SVt_IV < SVt_PV);
1227         assert(SVt_NV < SVt_PV);
1228         break;
1229     case SVt_PVIV:
1230         break;
1231     case SVt_PVNV:
1232         break;
1233     case SVt_PVMG:
1234         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1235            there's no way that it can be safely upgraded, because perl.c
1236            expects to Safefree(SvANY(PL_mess_sv))  */
1237         assert(sv != PL_mess_sv);
1238         /* This flag bit is used to mean other things in other scalar types.
1239            Given that it only has meaning inside the pad, it shouldn't be set
1240            on anything that can get upgraded.  */
1241         assert(!SvPAD_TYPED(sv));
1242         break;
1243     default:
1244         if (old_type_details->cant_upgrade)
1245             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1246                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1247     }
1248
1249     if (old_type > new_type)
1250         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1251                 (int)old_type, (int)new_type);
1252
1253     new_type_details = bodies_by_type + new_type;
1254
1255     SvFLAGS(sv) &= ~SVTYPEMASK;
1256     SvFLAGS(sv) |= new_type;
1257
1258     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1259        the return statements above will have triggered.  */
1260     assert (new_type != SVt_NULL);
1261     switch (new_type) {
1262     case SVt_IV:
1263         assert(old_type == SVt_NULL);
1264         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1265         SvIV_set(sv, 0);
1266         return;
1267     case SVt_NV:
1268         assert(old_type == SVt_NULL);
1269         SvANY(sv) = new_XNV();
1270         SvNV_set(sv, 0);
1271         return;
1272     case SVt_PVHV:
1273     case SVt_PVAV:
1274         assert(new_type_details->body_size);
1275
1276 #ifndef PURIFY  
1277         assert(new_type_details->arena);
1278         assert(new_type_details->arena_size);
1279         /* This points to the start of the allocated area.  */
1280         new_body_inline(new_body, new_type);
1281         Zero(new_body, new_type_details->body_size, char);
1282         new_body = ((char *)new_body) - new_type_details->offset;
1283 #else
1284         /* We always allocated the full length item with PURIFY. To do this
1285            we fake things so that arena is false for all 16 types..  */
1286         new_body = new_NOARENAZ(new_type_details);
1287 #endif
1288         SvANY(sv) = new_body;
1289         if (new_type == SVt_PVAV) {
1290             AvMAX(sv)   = -1;
1291             AvFILLp(sv) = -1;
1292             AvREAL_only(sv);
1293             if (old_type_details->body_size) {
1294                 AvALLOC(sv) = 0;
1295             } else {
1296                 /* It will have been zeroed when the new body was allocated.
1297                    Lets not write to it, in case it confuses a write-back
1298                    cache.  */
1299             }
1300         } else {
1301             assert(!SvOK(sv));
1302             SvOK_off(sv);
1303 #ifndef NODEFAULT_SHAREKEYS
1304             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1305 #endif
1306             HvMAX(sv) = 7; /* (start with 8 buckets) */
1307         }
1308
1309         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1310            The target created by newSVrv also is, and it can have magic.
1311            However, it never has SvPVX set.
1312         */
1313         if (old_type == SVt_IV) {
1314             assert(!SvROK(sv));
1315         } else if (old_type >= SVt_PV) {
1316             assert(SvPVX_const(sv) == 0);
1317         }
1318
1319         if (old_type >= SVt_PVMG) {
1320             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1321             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1322         } else {
1323             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1324         }
1325         break;
1326
1327
1328     case SVt_REGEXP:
1329         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1330            sv_force_normal_flags(sv) is called.  */
1331         SvFAKE_on(sv);
1332     case SVt_PVIV:
1333         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1334            no route from NV to PVIV, NOK can never be true  */
1335         assert(!SvNOKp(sv));
1336         assert(!SvNOK(sv));
1337     case SVt_PVIO:
1338     case SVt_PVFM:
1339     case SVt_PVGV:
1340     case SVt_PVCV:
1341     case SVt_PVLV:
1342     case SVt_PVMG:
1343     case SVt_PVNV:
1344     case SVt_PV:
1345
1346         assert(new_type_details->body_size);
1347         /* We always allocated the full length item with PURIFY. To do this
1348            we fake things so that arena is false for all 16 types..  */
1349         if(new_type_details->arena) {
1350             /* This points to the start of the allocated area.  */
1351             new_body_inline(new_body, new_type);
1352             Zero(new_body, new_type_details->body_size, char);
1353             new_body = ((char *)new_body) - new_type_details->offset;
1354         } else {
1355             new_body = new_NOARENAZ(new_type_details);
1356         }
1357         SvANY(sv) = new_body;
1358
1359         if (old_type_details->copy) {
1360             /* There is now the potential for an upgrade from something without
1361                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1362             int offset = old_type_details->offset;
1363             int length = old_type_details->copy;
1364
1365             if (new_type_details->offset > old_type_details->offset) {
1366                 const int difference
1367                     = new_type_details->offset - old_type_details->offset;
1368                 offset += difference;
1369                 length -= difference;
1370             }
1371             assert (length >= 0);
1372                 
1373             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1374                  char);
1375         }
1376
1377 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1378         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1379          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1380          * NV slot, but the new one does, then we need to initialise the
1381          * freshly created NV slot with whatever the correct bit pattern is
1382          * for 0.0  */
1383         if (old_type_details->zero_nv && !new_type_details->zero_nv
1384             && !isGV_with_GP(sv))
1385             SvNV_set(sv, 0);
1386 #endif
1387
1388         if (new_type == SVt_PVIO) {
1389             IO * const io = MUTABLE_IO(sv);
1390             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1391
1392             SvOBJECT_on(io);
1393             /* Clear the stashcache because a new IO could overrule a package
1394                name */
1395             hv_clear(PL_stashcache);
1396
1397             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1398             IoPAGE_LEN(sv) = 60;
1399         }
1400         if (old_type < SVt_PV) {
1401             /* referant will be NULL unless the old type was SVt_IV emulating
1402                SVt_RV */
1403             sv->sv_u.svu_rv = referant;
1404         }
1405         break;
1406     default:
1407         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1408                    (unsigned long)new_type);
1409     }
1410
1411     if (old_type > SVt_IV) {
1412 #ifdef PURIFY
1413         safefree(old_body);
1414 #else
1415         /* Note that there is an assumption that all bodies of types that
1416            can be upgraded came from arenas. Only the more complex non-
1417            upgradable types are allowed to be directly malloc()ed.  */
1418         assert(old_type_details->arena);
1419         del_body((void*)((char*)old_body + old_type_details->offset),
1420                  &PL_body_roots[old_type]);
1421 #endif
1422     }
1423 }
1424
1425 /*
1426 =for apidoc sv_backoff
1427
1428 Remove any string offset. You should normally use the C<SvOOK_off> macro
1429 wrapper instead.
1430
1431 =cut
1432 */
1433
1434 int
1435 Perl_sv_backoff(pTHX_ register SV *const sv)
1436 {
1437     STRLEN delta;
1438     const char * const s = SvPVX_const(sv);
1439
1440     PERL_ARGS_ASSERT_SV_BACKOFF;
1441     PERL_UNUSED_CONTEXT;
1442
1443     assert(SvOOK(sv));
1444     assert(SvTYPE(sv) != SVt_PVHV);
1445     assert(SvTYPE(sv) != SVt_PVAV);
1446
1447     SvOOK_offset(sv, delta);
1448     
1449     SvLEN_set(sv, SvLEN(sv) + delta);
1450     SvPV_set(sv, SvPVX(sv) - delta);
1451     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1452     SvFLAGS(sv) &= ~SVf_OOK;
1453     return 0;
1454 }
1455
1456 /*
1457 =for apidoc sv_grow
1458
1459 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1460 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1461 Use the C<SvGROW> wrapper instead.
1462
1463 =cut
1464 */
1465
1466 char *
1467 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1468 {
1469     register char *s;
1470
1471     PERL_ARGS_ASSERT_SV_GROW;
1472
1473     if (PL_madskills && newlen >= 0x100000) {
1474         PerlIO_printf(Perl_debug_log,
1475                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1476     }
1477 #ifdef HAS_64K_LIMIT
1478     if (newlen >= 0x10000) {
1479         PerlIO_printf(Perl_debug_log,
1480                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1481         my_exit(1);
1482     }
1483 #endif /* HAS_64K_LIMIT */
1484     if (SvROK(sv))
1485         sv_unref(sv);
1486     if (SvTYPE(sv) < SVt_PV) {
1487         sv_upgrade(sv, SVt_PV);
1488         s = SvPVX_mutable(sv);
1489     }
1490     else if (SvOOK(sv)) {       /* pv is offset? */
1491         sv_backoff(sv);
1492         s = SvPVX_mutable(sv);
1493         if (newlen > SvLEN(sv))
1494             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1495 #ifdef HAS_64K_LIMIT
1496         if (newlen >= 0x10000)
1497             newlen = 0xFFFF;
1498 #endif
1499     }
1500     else
1501         s = SvPVX_mutable(sv);
1502
1503     if (newlen > SvLEN(sv)) {           /* need more room? */
1504         STRLEN minlen = SvCUR(sv);
1505         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1506         if (newlen < minlen)
1507             newlen = minlen;
1508 #ifndef Perl_safesysmalloc_size
1509         newlen = PERL_STRLEN_ROUNDUP(newlen);
1510 #endif
1511         if (SvLEN(sv) && s) {
1512             s = (char*)saferealloc(s, newlen);
1513         }
1514         else {
1515             s = (char*)safemalloc(newlen);
1516             if (SvPVX_const(sv) && SvCUR(sv)) {
1517                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1518             }
1519         }
1520         SvPV_set(sv, s);
1521 #ifdef Perl_safesysmalloc_size
1522         /* Do this here, do it once, do it right, and then we will never get
1523            called back into sv_grow() unless there really is some growing
1524            needed.  */
1525         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1526 #else
1527         SvLEN_set(sv, newlen);
1528 #endif
1529     }
1530     return s;
1531 }
1532
1533 /*
1534 =for apidoc sv_setiv
1535
1536 Copies an integer into the given SV, upgrading first if necessary.
1537 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1538
1539 =cut
1540 */
1541
1542 void
1543 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1544 {
1545     dVAR;
1546
1547     PERL_ARGS_ASSERT_SV_SETIV;
1548
1549     SV_CHECK_THINKFIRST_COW_DROP(sv);
1550     switch (SvTYPE(sv)) {
1551     case SVt_NULL:
1552     case SVt_NV:
1553         sv_upgrade(sv, SVt_IV);
1554         break;
1555     case SVt_PV:
1556         sv_upgrade(sv, SVt_PVIV);
1557         break;
1558
1559     case SVt_PVGV:
1560         if (!isGV_with_GP(sv))
1561             break;
1562     case SVt_PVAV:
1563     case SVt_PVHV:
1564     case SVt_PVCV:
1565     case SVt_PVFM:
1566     case SVt_PVIO:
1567         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1568                    OP_DESC(PL_op));
1569     default: NOOP;
1570     }
1571     (void)SvIOK_only(sv);                       /* validate number */
1572     SvIV_set(sv, i);
1573     SvTAINT(sv);
1574 }
1575
1576 /*
1577 =for apidoc sv_setiv_mg
1578
1579 Like C<sv_setiv>, but also handles 'set' magic.
1580
1581 =cut
1582 */
1583
1584 void
1585 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1586 {
1587     PERL_ARGS_ASSERT_SV_SETIV_MG;
1588
1589     sv_setiv(sv,i);
1590     SvSETMAGIC(sv);
1591 }
1592
1593 /*
1594 =for apidoc sv_setuv
1595
1596 Copies an unsigned integer into the given SV, upgrading first if necessary.
1597 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1598
1599 =cut
1600 */
1601
1602 void
1603 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1604 {
1605     PERL_ARGS_ASSERT_SV_SETUV;
1606
1607     /* With these two if statements:
1608        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1609
1610        without
1611        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1612
1613        If you wish to remove them, please benchmark to see what the effect is
1614     */
1615     if (u <= (UV)IV_MAX) {
1616        sv_setiv(sv, (IV)u);
1617        return;
1618     }
1619     sv_setiv(sv, 0);
1620     SvIsUV_on(sv);
1621     SvUV_set(sv, u);
1622 }
1623
1624 /*
1625 =for apidoc sv_setuv_mg
1626
1627 Like C<sv_setuv>, but also handles 'set' magic.
1628
1629 =cut
1630 */
1631
1632 void
1633 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1634 {
1635     PERL_ARGS_ASSERT_SV_SETUV_MG;
1636
1637     sv_setuv(sv,u);
1638     SvSETMAGIC(sv);
1639 }
1640
1641 /*
1642 =for apidoc sv_setnv
1643
1644 Copies a double into the given SV, upgrading first if necessary.
1645 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1646
1647 =cut
1648 */
1649
1650 void
1651 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1652 {
1653     dVAR;
1654
1655     PERL_ARGS_ASSERT_SV_SETNV;
1656
1657     SV_CHECK_THINKFIRST_COW_DROP(sv);
1658     switch (SvTYPE(sv)) {
1659     case SVt_NULL:
1660     case SVt_IV:
1661         sv_upgrade(sv, SVt_NV);
1662         break;
1663     case SVt_PV:
1664     case SVt_PVIV:
1665         sv_upgrade(sv, SVt_PVNV);
1666         break;
1667
1668     case SVt_PVGV:
1669         if (!isGV_with_GP(sv))
1670             break;
1671     case SVt_PVAV:
1672     case SVt_PVHV:
1673     case SVt_PVCV:
1674     case SVt_PVFM:
1675     case SVt_PVIO:
1676         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1677                    OP_DESC(PL_op));
1678     default: NOOP;
1679     }
1680     SvNV_set(sv, num);
1681     (void)SvNOK_only(sv);                       /* validate number */
1682     SvTAINT(sv);
1683 }
1684
1685 /*
1686 =for apidoc sv_setnv_mg
1687
1688 Like C<sv_setnv>, but also handles 'set' magic.
1689
1690 =cut
1691 */
1692
1693 void
1694 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1695 {
1696     PERL_ARGS_ASSERT_SV_SETNV_MG;
1697
1698     sv_setnv(sv,num);
1699     SvSETMAGIC(sv);
1700 }
1701
1702 /* Print an "isn't numeric" warning, using a cleaned-up,
1703  * printable version of the offending string
1704  */
1705
1706 STATIC void
1707 S_not_a_number(pTHX_ SV *const sv)
1708 {
1709      dVAR;
1710      SV *dsv;
1711      char tmpbuf[64];
1712      const char *pv;
1713
1714      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1715
1716      if (DO_UTF8(sv)) {
1717           dsv = newSVpvs_flags("", SVs_TEMP);
1718           pv = sv_uni_display(dsv, sv, 10, 0);
1719      } else {
1720           char *d = tmpbuf;
1721           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1722           /* each *s can expand to 4 chars + "...\0",
1723              i.e. need room for 8 chars */
1724         
1725           const char *s = SvPVX_const(sv);
1726           const char * const end = s + SvCUR(sv);
1727           for ( ; s < end && d < limit; s++ ) {
1728                int ch = *s & 0xFF;
1729                if (ch & 128 && !isPRINT_LC(ch)) {
1730                     *d++ = 'M';
1731                     *d++ = '-';
1732                     ch &= 127;
1733                }
1734                if (ch == '\n') {
1735                     *d++ = '\\';
1736                     *d++ = 'n';
1737                }
1738                else if (ch == '\r') {
1739                     *d++ = '\\';
1740                     *d++ = 'r';
1741                }
1742                else if (ch == '\f') {
1743                     *d++ = '\\';
1744                     *d++ = 'f';
1745                }
1746                else if (ch == '\\') {
1747                     *d++ = '\\';
1748                     *d++ = '\\';
1749                }
1750                else if (ch == '\0') {
1751                     *d++ = '\\';
1752                     *d++ = '0';
1753                }
1754                else if (isPRINT_LC(ch))
1755                     *d++ = ch;
1756                else {
1757                     *d++ = '^';
1758                     *d++ = toCTRL(ch);
1759                }
1760           }
1761           if (s < end) {
1762                *d++ = '.';
1763                *d++ = '.';
1764                *d++ = '.';
1765           }
1766           *d = '\0';
1767           pv = tmpbuf;
1768     }
1769
1770     if (PL_op)
1771         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1772                     "Argument \"%s\" isn't numeric in %s", pv,
1773                     OP_DESC(PL_op));
1774     else
1775         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1776                     "Argument \"%s\" isn't numeric", pv);
1777 }
1778
1779 /*
1780 =for apidoc looks_like_number
1781
1782 Test if the content of an SV looks like a number (or is a number).
1783 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1784 non-numeric warning), even if your atof() doesn't grok them.
1785
1786 =cut
1787 */
1788
1789 I32
1790 Perl_looks_like_number(pTHX_ SV *const sv)
1791 {
1792     register const char *sbegin;
1793     STRLEN len;
1794
1795     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1796
1797     if (SvPOK(sv)) {
1798         sbegin = SvPVX_const(sv);
1799         len = SvCUR(sv);
1800     }
1801     else if (SvPOKp(sv))
1802         sbegin = SvPV_const(sv, len);
1803     else
1804         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1805     return grok_number(sbegin, len, NULL);
1806 }
1807
1808 STATIC bool
1809 S_glob_2number(pTHX_ GV * const gv)
1810 {
1811     const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1812     SV *const buffer = sv_newmortal();
1813
1814     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1815
1816     /* FAKE globs can get coerced, so need to turn this off temporarily if it
1817        is on.  */
1818     SvFAKE_off(gv);
1819     gv_efullname3(buffer, gv, "*");
1820     SvFLAGS(gv) |= wasfake;
1821
1822     /* We know that all GVs stringify to something that is not-a-number,
1823         so no need to test that.  */
1824     if (ckWARN(WARN_NUMERIC))
1825         not_a_number(buffer);
1826     /* We just want something true to return, so that S_sv_2iuv_common
1827         can tail call us and return true.  */
1828     return TRUE;
1829 }
1830
1831 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1832    until proven guilty, assume that things are not that bad... */
1833
1834 /*
1835    NV_PRESERVES_UV:
1836
1837    As 64 bit platforms often have an NV that doesn't preserve all bits of
1838    an IV (an assumption perl has been based on to date) it becomes necessary
1839    to remove the assumption that the NV always carries enough precision to
1840    recreate the IV whenever needed, and that the NV is the canonical form.
1841    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1842    precision as a side effect of conversion (which would lead to insanity
1843    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1844    1) to distinguish between IV/UV/NV slots that have cached a valid
1845       conversion where precision was lost and IV/UV/NV slots that have a
1846       valid conversion which has lost no precision
1847    2) to ensure that if a numeric conversion to one form is requested that
1848       would lose precision, the precise conversion (or differently
1849       imprecise conversion) is also performed and cached, to prevent
1850       requests for different numeric formats on the same SV causing
1851       lossy conversion chains. (lossless conversion chains are perfectly
1852       acceptable (still))
1853
1854
1855    flags are used:
1856    SvIOKp is true if the IV slot contains a valid value
1857    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1858    SvNOKp is true if the NV slot contains a valid value
1859    SvNOK  is true only if the NV value is accurate
1860
1861    so
1862    while converting from PV to NV, check to see if converting that NV to an
1863    IV(or UV) would lose accuracy over a direct conversion from PV to
1864    IV(or UV). If it would, cache both conversions, return NV, but mark
1865    SV as IOK NOKp (ie not NOK).
1866
1867    While converting from PV to IV, check to see if converting that IV to an
1868    NV would lose accuracy over a direct conversion from PV to NV. If it
1869    would, cache both conversions, flag similarly.
1870
1871    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1872    correctly because if IV & NV were set NV *always* overruled.
1873    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1874    changes - now IV and NV together means that the two are interchangeable:
1875    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1876
1877    The benefit of this is that operations such as pp_add know that if
1878    SvIOK is true for both left and right operands, then integer addition
1879    can be used instead of floating point (for cases where the result won't
1880    overflow). Before, floating point was always used, which could lead to
1881    loss of precision compared with integer addition.
1882
1883    * making IV and NV equal status should make maths accurate on 64 bit
1884      platforms
1885    * may speed up maths somewhat if pp_add and friends start to use
1886      integers when possible instead of fp. (Hopefully the overhead in
1887      looking for SvIOK and checking for overflow will not outweigh the
1888      fp to integer speedup)
1889    * will slow down integer operations (callers of SvIV) on "inaccurate"
1890      values, as the change from SvIOK to SvIOKp will cause a call into
1891      sv_2iv each time rather than a macro access direct to the IV slot
1892    * should speed up number->string conversion on integers as IV is
1893      favoured when IV and NV are equally accurate
1894
1895    ####################################################################
1896    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1897    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1898    On the other hand, SvUOK is true iff UV.
1899    ####################################################################
1900
1901    Your mileage will vary depending your CPU's relative fp to integer
1902    performance ratio.
1903 */
1904
1905 #ifndef NV_PRESERVES_UV
1906 #  define IS_NUMBER_UNDERFLOW_IV 1
1907 #  define IS_NUMBER_UNDERFLOW_UV 2
1908 #  define IS_NUMBER_IV_AND_UV    2
1909 #  define IS_NUMBER_OVERFLOW_IV  4
1910 #  define IS_NUMBER_OVERFLOW_UV  5
1911
1912 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1913
1914 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1915 STATIC int
1916 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1917 #  ifdef DEBUGGING
1918                        , I32 numtype
1919 #  endif
1920                        )
1921 {
1922     dVAR;
1923
1924     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1925
1926     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));
1927     if (SvNVX(sv) < (NV)IV_MIN) {
1928         (void)SvIOKp_on(sv);
1929         (void)SvNOK_on(sv);
1930         SvIV_set(sv, IV_MIN);
1931         return IS_NUMBER_UNDERFLOW_IV;
1932     }
1933     if (SvNVX(sv) > (NV)UV_MAX) {
1934         (void)SvIOKp_on(sv);
1935         (void)SvNOK_on(sv);
1936         SvIsUV_on(sv);
1937         SvUV_set(sv, UV_MAX);
1938         return IS_NUMBER_OVERFLOW_UV;
1939     }
1940     (void)SvIOKp_on(sv);
1941     (void)SvNOK_on(sv);
1942     /* Can't use strtol etc to convert this string.  (See truth table in
1943        sv_2iv  */
1944     if (SvNVX(sv) <= (UV)IV_MAX) {
1945         SvIV_set(sv, I_V(SvNVX(sv)));
1946         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1947             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1948         } else {
1949             /* Integer is imprecise. NOK, IOKp */
1950         }
1951         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1952     }
1953     SvIsUV_on(sv);
1954     SvUV_set(sv, U_V(SvNVX(sv)));
1955     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1956         if (SvUVX(sv) == UV_MAX) {
1957             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1958                possibly be preserved by NV. Hence, it must be overflow.
1959                NOK, IOKp */
1960             return IS_NUMBER_OVERFLOW_UV;
1961         }
1962         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1963     } else {
1964         /* Integer is imprecise. NOK, IOKp */
1965     }
1966     return IS_NUMBER_OVERFLOW_IV;
1967 }
1968 #endif /* !NV_PRESERVES_UV*/
1969
1970 STATIC bool
1971 S_sv_2iuv_common(pTHX_ SV *const sv)
1972 {
1973     dVAR;
1974
1975     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1976
1977     if (SvNOKp(sv)) {
1978         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1979          * without also getting a cached IV/UV from it at the same time
1980          * (ie PV->NV conversion should detect loss of accuracy and cache
1981          * IV or UV at same time to avoid this. */
1982         /* IV-over-UV optimisation - choose to cache IV if possible */
1983
1984         if (SvTYPE(sv) == SVt_NV)
1985             sv_upgrade(sv, SVt_PVNV);
1986
1987         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1988         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1989            certainly cast into the IV range at IV_MAX, whereas the correct
1990            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1991            cases go to UV */
1992 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1993         if (Perl_isnan(SvNVX(sv))) {
1994             SvUV_set(sv, 0);
1995             SvIsUV_on(sv);
1996             return FALSE;
1997         }
1998 #endif
1999         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2000             SvIV_set(sv, I_V(SvNVX(sv)));
2001             if (SvNVX(sv) == (NV) SvIVX(sv)
2002 #ifndef NV_PRESERVES_UV
2003                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2004                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2005                 /* Don't flag it as "accurately an integer" if the number
2006                    came from a (by definition imprecise) NV operation, and
2007                    we're outside the range of NV integer precision */
2008 #endif
2009                 ) {
2010                 if (SvNOK(sv))
2011                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2012                 else {
2013                     /* scalar has trailing garbage, eg "42a" */
2014                 }
2015                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2016                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2017                                       PTR2UV(sv),
2018                                       SvNVX(sv),
2019                                       SvIVX(sv)));
2020
2021             } else {
2022                 /* IV not precise.  No need to convert from PV, as NV
2023                    conversion would already have cached IV if it detected
2024                    that PV->IV would be better than PV->NV->IV
2025                    flags already correct - don't set public IOK.  */
2026                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2027                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2028                                       PTR2UV(sv),
2029                                       SvNVX(sv),
2030                                       SvIVX(sv)));
2031             }
2032             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2033                but the cast (NV)IV_MIN rounds to a the value less (more
2034                negative) than IV_MIN which happens to be equal to SvNVX ??
2035                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2036                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2037                (NV)UVX == NVX are both true, but the values differ. :-(
2038                Hopefully for 2s complement IV_MIN is something like
2039                0x8000000000000000 which will be exact. NWC */
2040         }
2041         else {
2042             SvUV_set(sv, U_V(SvNVX(sv)));
2043             if (
2044                 (SvNVX(sv) == (NV) SvUVX(sv))
2045 #ifndef  NV_PRESERVES_UV
2046                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2047                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2048                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2049                 /* Don't flag it as "accurately an integer" if the number
2050                    came from a (by definition imprecise) NV operation, and
2051                    we're outside the range of NV integer precision */
2052 #endif
2053                 && SvNOK(sv)
2054                 )
2055                 SvIOK_on(sv);
2056             SvIsUV_on(sv);
2057             DEBUG_c(PerlIO_printf(Perl_debug_log,
2058                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2059                                   PTR2UV(sv),
2060                                   SvUVX(sv),
2061                                   SvUVX(sv)));
2062         }
2063     }
2064     else if (SvPOKp(sv) && SvLEN(sv)) {
2065         UV value;
2066         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2067         /* We want to avoid a possible problem when we cache an IV/ a UV which
2068            may be later translated to an NV, and the resulting NV is not
2069            the same as the direct translation of the initial string
2070            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2071            be careful to ensure that the value with the .456 is around if the
2072            NV value is requested in the future).
2073         
2074            This means that if we cache such an IV/a UV, we need to cache the
2075            NV as well.  Moreover, we trade speed for space, and do not
2076            cache the NV if we are sure it's not needed.
2077          */
2078
2079         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2080         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2081              == IS_NUMBER_IN_UV) {
2082             /* It's definitely an integer, only upgrade to PVIV */
2083             if (SvTYPE(sv) < SVt_PVIV)
2084                 sv_upgrade(sv, SVt_PVIV);
2085             (void)SvIOK_on(sv);
2086         } else if (SvTYPE(sv) < SVt_PVNV)
2087             sv_upgrade(sv, SVt_PVNV);
2088
2089         /* If NVs preserve UVs then we only use the UV value if we know that
2090            we aren't going to call atof() below. If NVs don't preserve UVs
2091            then the value returned may have more precision than atof() will
2092            return, even though value isn't perfectly accurate.  */
2093         if ((numtype & (IS_NUMBER_IN_UV
2094 #ifdef NV_PRESERVES_UV
2095                         | IS_NUMBER_NOT_INT
2096 #endif
2097             )) == IS_NUMBER_IN_UV) {
2098             /* This won't turn off the public IOK flag if it was set above  */
2099             (void)SvIOKp_on(sv);
2100
2101             if (!(numtype & IS_NUMBER_NEG)) {
2102                 /* positive */;
2103                 if (value <= (UV)IV_MAX) {
2104                     SvIV_set(sv, (IV)value);
2105                 } else {
2106                     /* it didn't overflow, and it was positive. */
2107                     SvUV_set(sv, value);
2108                     SvIsUV_on(sv);
2109                 }
2110             } else {
2111                 /* 2s complement assumption  */
2112                 if (value <= (UV)IV_MIN) {
2113                     SvIV_set(sv, -(IV)value);
2114                 } else {
2115                     /* Too negative for an IV.  This is a double upgrade, but
2116                        I'm assuming it will be rare.  */
2117                     if (SvTYPE(sv) < SVt_PVNV)
2118                         sv_upgrade(sv, SVt_PVNV);
2119                     SvNOK_on(sv);
2120                     SvIOK_off(sv);
2121                     SvIOKp_on(sv);
2122                     SvNV_set(sv, -(NV)value);
2123                     SvIV_set(sv, IV_MIN);
2124                 }
2125             }
2126         }
2127         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2128            will be in the previous block to set the IV slot, and the next
2129            block to set the NV slot.  So no else here.  */
2130         
2131         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2132             != IS_NUMBER_IN_UV) {
2133             /* It wasn't an (integer that doesn't overflow the UV). */
2134             SvNV_set(sv, Atof(SvPVX_const(sv)));
2135
2136             if (! numtype && ckWARN(WARN_NUMERIC))
2137                 not_a_number(sv);
2138
2139 #if defined(USE_LONG_DOUBLE)
2140             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2141                                   PTR2UV(sv), SvNVX(sv)));
2142 #else
2143             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2144                                   PTR2UV(sv), SvNVX(sv)));
2145 #endif
2146
2147 #ifdef NV_PRESERVES_UV
2148             (void)SvIOKp_on(sv);
2149             (void)SvNOK_on(sv);
2150             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2151                 SvIV_set(sv, I_V(SvNVX(sv)));
2152                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2153                     SvIOK_on(sv);
2154                 } else {
2155                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2156                 }
2157                 /* UV will not work better than IV */
2158             } else {
2159                 if (SvNVX(sv) > (NV)UV_MAX) {
2160                     SvIsUV_on(sv);
2161                     /* Integer is inaccurate. NOK, IOKp, is UV */
2162                     SvUV_set(sv, UV_MAX);
2163                 } else {
2164                     SvUV_set(sv, U_V(SvNVX(sv)));
2165                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2166                        NV preservse UV so can do correct comparison.  */
2167                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2168                         SvIOK_on(sv);
2169                     } else {
2170                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2171                     }
2172                 }
2173                 SvIsUV_on(sv);
2174             }
2175 #else /* NV_PRESERVES_UV */
2176             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2177                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2178                 /* The IV/UV slot will have been set from value returned by
2179                    grok_number above.  The NV slot has just been set using
2180                    Atof.  */
2181                 SvNOK_on(sv);
2182                 assert (SvIOKp(sv));
2183             } else {
2184                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2185                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2186                     /* Small enough to preserve all bits. */
2187                     (void)SvIOKp_on(sv);
2188                     SvNOK_on(sv);
2189                     SvIV_set(sv, I_V(SvNVX(sv)));
2190                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2191                         SvIOK_on(sv);
2192                     /* Assumption: first non-preserved integer is < IV_MAX,
2193                        this NV is in the preserved range, therefore: */
2194                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2195                           < (UV)IV_MAX)) {
2196                         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);
2197                     }
2198                 } else {
2199                     /* IN_UV NOT_INT
2200                          0      0       already failed to read UV.
2201                          0      1       already failed to read UV.
2202                          1      0       you won't get here in this case. IV/UV
2203                                         slot set, public IOK, Atof() unneeded.
2204                          1      1       already read UV.
2205                        so there's no point in sv_2iuv_non_preserve() attempting
2206                        to use atol, strtol, strtoul etc.  */
2207 #  ifdef DEBUGGING
2208                     sv_2iuv_non_preserve (sv, numtype);
2209 #  else
2210                     sv_2iuv_non_preserve (sv);
2211 #  endif
2212                 }
2213             }
2214 #endif /* NV_PRESERVES_UV */
2215         /* It might be more code efficient to go through the entire logic above
2216            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2217            gets complex and potentially buggy, so more programmer efficient
2218            to do it this way, by turning off the public flags:  */
2219         if (!numtype)
2220             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2221         }
2222     }
2223     else  {
2224         if (isGV_with_GP(sv))
2225             return glob_2number(MUTABLE_GV(sv));
2226
2227         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2228             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2229                 report_uninit(sv);
2230         }
2231         if (SvTYPE(sv) < SVt_IV)
2232             /* Typically the caller expects that sv_any is not NULL now.  */
2233             sv_upgrade(sv, SVt_IV);
2234         /* Return 0 from the caller.  */
2235         return TRUE;
2236     }
2237     return FALSE;
2238 }
2239
2240 /*
2241 =for apidoc sv_2iv_flags
2242
2243 Return the integer value of an SV, doing any necessary string
2244 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2245 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2246
2247 =cut
2248 */
2249
2250 IV
2251 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2252 {
2253     dVAR;
2254     if (!sv)
2255         return 0;
2256     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2257         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2258            cache IVs just in case. In practice it seems that they never
2259            actually anywhere accessible by user Perl code, let alone get used
2260            in anything other than a string context.  */
2261         if (flags & SV_GMAGIC)
2262             mg_get(sv);
2263         if (SvIOKp(sv))
2264             return SvIVX(sv);
2265         if (SvNOKp(sv)) {
2266             return I_V(SvNVX(sv));
2267         }
2268         if (SvPOKp(sv) && SvLEN(sv)) {
2269             UV value;
2270             const int numtype
2271                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2272
2273             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2274                 == IS_NUMBER_IN_UV) {
2275                 /* It's definitely an integer */
2276                 if (numtype & IS_NUMBER_NEG) {
2277                     if (value < (UV)IV_MIN)
2278                         return -(IV)value;
2279                 } else {
2280                     if (value < (UV)IV_MAX)
2281                         return (IV)value;
2282                 }
2283             }
2284             if (!numtype) {
2285                 if (ckWARN(WARN_NUMERIC))
2286                     not_a_number(sv);
2287             }
2288             return I_V(Atof(SvPVX_const(sv)));
2289         }
2290         if (SvROK(sv)) {
2291             goto return_rok;
2292         }
2293         assert(SvTYPE(sv) >= SVt_PVMG);
2294         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2295     } else if (SvTHINKFIRST(sv)) {
2296         if (SvROK(sv)) {
2297         return_rok:
2298             if (SvAMAGIC(sv)) {
2299                 SV * tmpstr;
2300                 if (flags & SV_SKIP_OVERLOAD)
2301                     return 0;
2302                 tmpstr=AMG_CALLun(sv,numer);
2303                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2304                     return SvIV(tmpstr);
2305                 }
2306             }
2307             return PTR2IV(SvRV(sv));
2308         }
2309         if (SvIsCOW(sv)) {
2310             sv_force_normal_flags(sv, 0);
2311         }
2312         if (SvREADONLY(sv) && !SvOK(sv)) {
2313             if (ckWARN(WARN_UNINITIALIZED))
2314                 report_uninit(sv);
2315             return 0;
2316         }
2317     }
2318     if (!SvIOKp(sv)) {
2319         if (S_sv_2iuv_common(aTHX_ sv))
2320             return 0;
2321     }
2322     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2323         PTR2UV(sv),SvIVX(sv)));
2324     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2325 }
2326
2327 /*
2328 =for apidoc sv_2uv_flags
2329
2330 Return the unsigned integer value of an SV, doing any necessary string
2331 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2332 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2333
2334 =cut
2335 */
2336
2337 UV
2338 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2339 {
2340     dVAR;
2341     if (!sv)
2342         return 0;
2343     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2344         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2345            cache IVs just in case.  */
2346         if (flags & SV_GMAGIC)
2347             mg_get(sv);
2348         if (SvIOKp(sv))
2349             return SvUVX(sv);
2350         if (SvNOKp(sv))
2351             return U_V(SvNVX(sv));
2352         if (SvPOKp(sv) && SvLEN(sv)) {
2353             UV value;
2354             const int numtype
2355                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2356
2357             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2358                 == IS_NUMBER_IN_UV) {
2359                 /* It's definitely an integer */
2360                 if (!(numtype & IS_NUMBER_NEG))
2361                     return value;
2362             }
2363             if (!numtype) {
2364                 if (ckWARN(WARN_NUMERIC))
2365                     not_a_number(sv);
2366             }
2367             return U_V(Atof(SvPVX_const(sv)));
2368         }
2369         if (SvROK(sv)) {
2370             goto return_rok;
2371         }
2372         assert(SvTYPE(sv) >= SVt_PVMG);
2373         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2374     } else if (SvTHINKFIRST(sv)) {
2375         if (SvROK(sv)) {
2376         return_rok:
2377             if (SvAMAGIC(sv)) {
2378                 SV *tmpstr;
2379                 if (flags & SV_SKIP_OVERLOAD)
2380                     return 0;
2381                 tmpstr = AMG_CALLun(sv,numer);
2382                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2383                     return SvUV(tmpstr);
2384                 }
2385             }
2386             return PTR2UV(SvRV(sv));
2387         }
2388         if (SvIsCOW(sv)) {
2389             sv_force_normal_flags(sv, 0);
2390         }
2391         if (SvREADONLY(sv) && !SvOK(sv)) {
2392             if (ckWARN(WARN_UNINITIALIZED))
2393                 report_uninit(sv);
2394             return 0;
2395         }
2396     }
2397     if (!SvIOKp(sv)) {
2398         if (S_sv_2iuv_common(aTHX_ sv))
2399             return 0;
2400     }
2401
2402     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2403                           PTR2UV(sv),SvUVX(sv)));
2404     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2405 }
2406
2407 /*
2408 =for apidoc sv_2nv_flags
2409
2410 Return the num value of an SV, doing any necessary string or integer
2411 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2412 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2413
2414 =cut
2415 */
2416
2417 NV
2418 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2419 {
2420     dVAR;
2421     if (!sv)
2422         return 0.0;
2423     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2424         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2425            cache IVs just in case.  */
2426         if (flags & SV_GMAGIC)
2427             mg_get(sv);
2428         if (SvNOKp(sv))
2429             return SvNVX(sv);
2430         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2431             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2432                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2433                 not_a_number(sv);
2434             return Atof(SvPVX_const(sv));
2435         }
2436         if (SvIOKp(sv)) {
2437             if (SvIsUV(sv))
2438                 return (NV)SvUVX(sv);
2439             else
2440                 return (NV)SvIVX(sv);
2441         }
2442         if (SvROK(sv)) {
2443             goto return_rok;
2444         }
2445         assert(SvTYPE(sv) >= SVt_PVMG);
2446         /* This falls through to the report_uninit near the end of the
2447            function. */
2448     } else if (SvTHINKFIRST(sv)) {
2449         if (SvROK(sv)) {
2450         return_rok:
2451             if (SvAMAGIC(sv)) {
2452                 SV *tmpstr;
2453                 if (flags & SV_SKIP_OVERLOAD)
2454                     return 0;
2455                 tmpstr = AMG_CALLun(sv,numer);
2456                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2457                     return SvNV(tmpstr);
2458                 }
2459             }
2460             return PTR2NV(SvRV(sv));
2461         }
2462         if (SvIsCOW(sv)) {
2463             sv_force_normal_flags(sv, 0);
2464         }
2465         if (SvREADONLY(sv) && !SvOK(sv)) {
2466             if (ckWARN(WARN_UNINITIALIZED))
2467                 report_uninit(sv);
2468             return 0.0;
2469         }
2470     }
2471     if (SvTYPE(sv) < SVt_NV) {
2472         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2473         sv_upgrade(sv, SVt_NV);
2474 #ifdef USE_LONG_DOUBLE
2475         DEBUG_c({
2476             STORE_NUMERIC_LOCAL_SET_STANDARD();
2477             PerlIO_printf(Perl_debug_log,
2478                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2479                           PTR2UV(sv), SvNVX(sv));
2480             RESTORE_NUMERIC_LOCAL();
2481         });
2482 #else
2483         DEBUG_c({
2484             STORE_NUMERIC_LOCAL_SET_STANDARD();
2485             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2486                           PTR2UV(sv), SvNVX(sv));
2487             RESTORE_NUMERIC_LOCAL();
2488         });
2489 #endif
2490     }
2491     else if (SvTYPE(sv) < SVt_PVNV)
2492         sv_upgrade(sv, SVt_PVNV);
2493     if (SvNOKp(sv)) {
2494         return SvNVX(sv);
2495     }
2496     if (SvIOKp(sv)) {
2497         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2498 #ifdef NV_PRESERVES_UV
2499         if (SvIOK(sv))
2500             SvNOK_on(sv);
2501         else
2502             SvNOKp_on(sv);
2503 #else
2504         /* Only set the public NV OK flag if this NV preserves the IV  */
2505         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2506         if (SvIOK(sv) &&
2507             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2508                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2509             SvNOK_on(sv);
2510         else
2511             SvNOKp_on(sv);
2512 #endif
2513     }
2514     else if (SvPOKp(sv) && SvLEN(sv)) {
2515         UV value;
2516         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2517         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2518             not_a_number(sv);
2519 #ifdef NV_PRESERVES_UV
2520         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2521             == IS_NUMBER_IN_UV) {
2522             /* It's definitely an integer */
2523             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2524         } else
2525             SvNV_set(sv, Atof(SvPVX_const(sv)));
2526         if (numtype)
2527             SvNOK_on(sv);
2528         else
2529             SvNOKp_on(sv);
2530 #else
2531         SvNV_set(sv, Atof(SvPVX_const(sv)));
2532         /* Only set the public NV OK flag if this NV preserves the value in
2533            the PV at least as well as an IV/UV would.
2534            Not sure how to do this 100% reliably. */
2535         /* if that shift count is out of range then Configure's test is
2536            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2537            UV_BITS */
2538         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2539             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2540             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2541         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2542             /* Can't use strtol etc to convert this string, so don't try.
2543                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2544             SvNOK_on(sv);
2545         } else {
2546             /* value has been set.  It may not be precise.  */
2547             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2548                 /* 2s complement assumption for (UV)IV_MIN  */
2549                 SvNOK_on(sv); /* Integer is too negative.  */
2550             } else {
2551                 SvNOKp_on(sv);
2552                 SvIOKp_on(sv);
2553
2554                 if (numtype & IS_NUMBER_NEG) {
2555                     SvIV_set(sv, -(IV)value);
2556                 } else if (value <= (UV)IV_MAX) {
2557                     SvIV_set(sv, (IV)value);
2558                 } else {
2559                     SvUV_set(sv, value);
2560                     SvIsUV_on(sv);
2561                 }
2562
2563                 if (numtype & IS_NUMBER_NOT_INT) {
2564                     /* I believe that even if the original PV had decimals,
2565                        they are lost beyond the limit of the FP precision.
2566                        However, neither is canonical, so both only get p
2567                        flags.  NWC, 2000/11/25 */
2568                     /* Both already have p flags, so do nothing */
2569                 } else {
2570                     const NV nv = SvNVX(sv);
2571                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2572                         if (SvIVX(sv) == I_V(nv)) {
2573                             SvNOK_on(sv);
2574                         } else {
2575                             /* It had no "." so it must be integer.  */
2576                         }
2577                         SvIOK_on(sv);
2578                     } else {
2579                         /* between IV_MAX and NV(UV_MAX).
2580                            Could be slightly > UV_MAX */
2581
2582                         if (numtype & IS_NUMBER_NOT_INT) {
2583                             /* UV and NV both imprecise.  */
2584                         } else {
2585                             const UV nv_as_uv = U_V(nv);
2586
2587                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2588                                 SvNOK_on(sv);
2589                             }
2590                             SvIOK_on(sv);
2591                         }
2592                     }
2593                 }
2594             }
2595         }
2596         /* It might be more code efficient to go through the entire logic above
2597            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2598            gets complex and potentially buggy, so more programmer efficient
2599            to do it this way, by turning off the public flags:  */
2600         if (!numtype)
2601             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2602 #endif /* NV_PRESERVES_UV */
2603     }
2604     else  {
2605         if (isGV_with_GP(sv)) {
2606             glob_2number(MUTABLE_GV(sv));
2607             return 0.0;
2608         }
2609
2610         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2611             report_uninit(sv);
2612         assert (SvTYPE(sv) >= SVt_NV);
2613         /* Typically the caller expects that sv_any is not NULL now.  */
2614         /* XXX Ilya implies that this is a bug in callers that assume this
2615            and ideally should be fixed.  */
2616         return 0.0;
2617     }
2618 #if defined(USE_LONG_DOUBLE)
2619     DEBUG_c({
2620         STORE_NUMERIC_LOCAL_SET_STANDARD();
2621         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2622                       PTR2UV(sv), SvNVX(sv));
2623         RESTORE_NUMERIC_LOCAL();
2624     });
2625 #else
2626     DEBUG_c({
2627         STORE_NUMERIC_LOCAL_SET_STANDARD();
2628         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2629                       PTR2UV(sv), SvNVX(sv));
2630         RESTORE_NUMERIC_LOCAL();
2631     });
2632 #endif
2633     return SvNVX(sv);
2634 }
2635
2636 /*
2637 =for apidoc sv_2num
2638
2639 Return an SV with the numeric value of the source SV, doing any necessary
2640 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2641 access this function.
2642
2643 =cut
2644 */
2645
2646 SV *
2647 Perl_sv_2num(pTHX_ register SV *const sv)
2648 {
2649     PERL_ARGS_ASSERT_SV_2NUM;
2650
2651     if (!SvROK(sv))
2652         return sv;
2653     if (SvAMAGIC(sv)) {
2654         SV * const tmpsv = AMG_CALLun(sv,numer);
2655         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2656         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2657             return sv_2num(tmpsv);
2658     }
2659     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2660 }
2661
2662 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2663  * UV as a string towards the end of buf, and return pointers to start and
2664  * end of it.
2665  *
2666  * We assume that buf is at least TYPE_CHARS(UV) long.
2667  */
2668
2669 static char *
2670 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2671 {
2672     char *ptr = buf + TYPE_CHARS(UV);
2673     char * const ebuf = ptr;
2674     int sign;
2675
2676     PERL_ARGS_ASSERT_UIV_2BUF;
2677
2678     if (is_uv)
2679         sign = 0;
2680     else if (iv >= 0) {
2681         uv = iv;
2682         sign = 0;
2683     } else {
2684         uv = -iv;
2685         sign = 1;
2686     }
2687     do {
2688         *--ptr = '0' + (char)(uv % 10);
2689     } while (uv /= 10);
2690     if (sign)
2691         *--ptr = '-';
2692     *peob = ebuf;
2693     return ptr;
2694 }
2695
2696 /*
2697 =for apidoc sv_2pv_flags
2698
2699 Returns a pointer to the string value of an SV, and sets *lp to its length.
2700 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2701 if necessary.
2702 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2703 usually end up here too.
2704
2705 =cut
2706 */
2707
2708 char *
2709 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2710 {
2711     dVAR;
2712     register char *s;
2713
2714     if (!sv) {
2715         if (lp)
2716             *lp = 0;
2717         return (char *)"";
2718     }
2719     if (SvGMAGICAL(sv)) {
2720         if (flags & SV_GMAGIC)
2721             mg_get(sv);
2722         if (SvPOKp(sv)) {
2723             if (lp)
2724                 *lp = SvCUR(sv);
2725             if (flags & SV_MUTABLE_RETURN)
2726                 return SvPVX_mutable(sv);
2727             if (flags & SV_CONST_RETURN)
2728                 return (char *)SvPVX_const(sv);
2729             return SvPVX(sv);
2730         }
2731         if (SvIOKp(sv) || SvNOKp(sv)) {
2732             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2733             STRLEN len;
2734
2735             if (SvIOKp(sv)) {
2736                 len = SvIsUV(sv)
2737                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2738                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2739             } else if(SvNVX(sv) == 0.0) {
2740                     tbuf[0] = '0';
2741                     tbuf[1] = 0;
2742                     len = 1;
2743             } else {
2744                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2745                 len = strlen(tbuf);
2746             }
2747             assert(!SvROK(sv));
2748             {
2749                 dVAR;
2750
2751                 SvUPGRADE(sv, SVt_PV);
2752                 if (lp)
2753                     *lp = len;
2754                 s = SvGROW_mutable(sv, len + 1);
2755                 SvCUR_set(sv, len);
2756                 SvPOKp_on(sv);
2757                 return (char*)memcpy(s, tbuf, len + 1);
2758             }
2759         }
2760         if (SvROK(sv)) {
2761             goto return_rok;
2762         }
2763         assert(SvTYPE(sv) >= SVt_PVMG);
2764         /* This falls through to the report_uninit near the end of the
2765            function. */
2766     } else if (SvTHINKFIRST(sv)) {
2767         if (SvROK(sv)) {
2768         return_rok:
2769             if (SvAMAGIC(sv)) {
2770                 SV *tmpstr;
2771                 if (flags & SV_SKIP_OVERLOAD)
2772                     return NULL;
2773                 tmpstr = AMG_CALLun(sv,string);
2774                 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2775                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2776                     /* Unwrap this:  */
2777                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2778                      */
2779
2780                     char *pv;
2781                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2782                         if (flags & SV_CONST_RETURN) {
2783                             pv = (char *) SvPVX_const(tmpstr);
2784                         } else {
2785                             pv = (flags & SV_MUTABLE_RETURN)
2786                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2787                         }
2788                         if (lp)
2789                             *lp = SvCUR(tmpstr);
2790                     } else {
2791                         pv = sv_2pv_flags(tmpstr, lp, flags);
2792                     }
2793                     if (SvUTF8(tmpstr))
2794                         SvUTF8_on(sv);
2795                     else
2796                         SvUTF8_off(sv);
2797                     return pv;
2798                 }
2799             }
2800             {
2801                 STRLEN len;
2802                 char *retval;
2803                 char *buffer;
2804                 SV *const referent = SvRV(sv);
2805
2806                 if (!referent) {
2807                     len = 7;
2808                     retval = buffer = savepvn("NULLREF", len);
2809                 } else if (SvTYPE(referent) == SVt_REGEXP) {
2810                     REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2811                     I32 seen_evals = 0;
2812
2813                     assert(re);
2814                         
2815                     /* If the regex is UTF-8 we want the containing scalar to
2816                        have an UTF-8 flag too */
2817                     if (RX_UTF8(re))
2818                         SvUTF8_on(sv);
2819                     else
2820                         SvUTF8_off(sv); 
2821
2822                     if ((seen_evals = RX_SEEN_EVALS(re)))
2823                         PL_reginterp_cnt += seen_evals;
2824
2825                     if (lp)
2826                         *lp = RX_WRAPLEN(re);
2827  
2828                     return RX_WRAPPED(re);
2829                 } else {
2830                     const char *const typestr = sv_reftype(referent, 0);
2831                     const STRLEN typelen = strlen(typestr);
2832                     UV addr = PTR2UV(referent);
2833                     const char *stashname = NULL;
2834                     STRLEN stashnamelen = 0; /* hush, gcc */
2835                     const char *buffer_end;
2836
2837                     if (SvOBJECT(referent)) {
2838                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2839
2840                         if (name) {
2841                             stashname = HEK_KEY(name);
2842                             stashnamelen = HEK_LEN(name);
2843
2844                             if (HEK_UTF8(name)) {
2845                                 SvUTF8_on(sv);
2846                             } else {
2847                                 SvUTF8_off(sv);
2848                             }
2849                         } else {
2850                             stashname = "__ANON__";
2851                             stashnamelen = 8;
2852                         }
2853                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2854                             + 2 * sizeof(UV) + 2 /* )\0 */;
2855                     } else {
2856                         len = typelen + 3 /* (0x */
2857                             + 2 * sizeof(UV) + 2 /* )\0 */;
2858                     }
2859
2860                     Newx(buffer, len, char);
2861                     buffer_end = retval = buffer + len;
2862
2863                     /* Working backwards  */
2864                     *--retval = '\0';
2865                     *--retval = ')';
2866                     do {
2867                         *--retval = PL_hexdigit[addr & 15];
2868                     } while (addr >>= 4);
2869                     *--retval = 'x';
2870                     *--retval = '0';
2871                     *--retval = '(';
2872
2873                     retval -= typelen;
2874                     memcpy(retval, typestr, typelen);
2875
2876                     if (stashname) {
2877                         *--retval = '=';
2878                         retval -= stashnamelen;
2879                         memcpy(retval, stashname, stashnamelen);
2880                     }
2881                     /* retval may not neccesarily have reached the start of the
2882                        buffer here.  */
2883                     assert (retval >= buffer);
2884
2885                     len = buffer_end - retval - 1; /* -1 for that \0  */
2886                 }
2887                 if (lp)
2888                     *lp = len;
2889                 SAVEFREEPV(buffer);
2890                 return retval;
2891             }
2892         }
2893         if (SvREADONLY(sv) && !SvOK(sv)) {
2894             if (lp)
2895                 *lp = 0;
2896             if (flags & SV_UNDEF_RETURNS_NULL)
2897                 return NULL;
2898             if (ckWARN(WARN_UNINITIALIZED))
2899                 report_uninit(sv);
2900             return (char *)"";
2901         }
2902     }
2903     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2904         /* I'm assuming that if both IV and NV are equally valid then
2905            converting the IV is going to be more efficient */
2906         const U32 isUIOK = SvIsUV(sv);
2907         char buf[TYPE_CHARS(UV)];
2908         char *ebuf, *ptr;
2909         STRLEN len;
2910
2911         if (SvTYPE(sv) < SVt_PVIV)
2912             sv_upgrade(sv, SVt_PVIV);
2913         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2914         len = ebuf - ptr;
2915         /* inlined from sv_setpvn */
2916         s = SvGROW_mutable(sv, len + 1);
2917         Move(ptr, s, len, char);
2918         s += len;
2919         *s = '\0';
2920     }
2921     else if (SvNOKp(sv)) {
2922         if (SvTYPE(sv) < SVt_PVNV)
2923             sv_upgrade(sv, SVt_PVNV);
2924         if (SvNVX(sv) == 0.0) {
2925             s = SvGROW_mutable(sv, 2);
2926             *s++ = '0';
2927             *s = '\0';
2928         } else {
2929             dSAVE_ERRNO;
2930             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2931             s = SvGROW_mutable(sv, NV_DIG + 20);
2932             /* some Xenix systems wipe out errno here */
2933             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2934             RESTORE_ERRNO;
2935             while (*s) s++;
2936         }
2937 #ifdef hcx
2938         if (s[-1] == '.')
2939             *--s = '\0';
2940 #endif
2941     }
2942     else {
2943         if (isGV_with_GP(sv)) {
2944             GV *const gv = MUTABLE_GV(sv);
2945             const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2946             SV *const buffer = sv_newmortal();
2947
2948             /* FAKE globs can get coerced, so need to turn this off temporarily
2949                if it is on.  */
2950             SvFAKE_off(gv);
2951             gv_efullname3(buffer, gv, "*");
2952             SvFLAGS(gv) |= wasfake;
2953
2954             if (SvPOK(buffer)) {
2955                 if (lp) {
2956                     *lp = SvCUR(buffer);
2957                 }
2958                 return SvPVX(buffer);
2959             }
2960             else {
2961                 if (lp)
2962                     *lp = 0;
2963                 return (char *)"";
2964             }
2965         }
2966
2967         if (lp)
2968             *lp = 0;
2969         if (flags & SV_UNDEF_RETURNS_NULL)
2970             return NULL;
2971         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2972             report_uninit(sv);
2973         if (SvTYPE(sv) < SVt_PV)
2974             /* Typically the caller expects that sv_any is not NULL now.  */
2975             sv_upgrade(sv, SVt_PV);
2976         return (char *)"";
2977     }
2978     {
2979         const STRLEN len = s - SvPVX_const(sv);
2980         if (lp) 
2981             *lp = len;
2982         SvCUR_set(sv, len);
2983     }
2984     SvPOK_on(sv);
2985     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2986                           PTR2UV(sv),SvPVX_const(sv)));
2987     if (flags & SV_CONST_RETURN)
2988         return (char *)SvPVX_const(sv);
2989     if (flags & SV_MUTABLE_RETURN)
2990         return SvPVX_mutable(sv);
2991     return SvPVX(sv);
2992 }
2993
2994 /*
2995 =for apidoc sv_copypv
2996
2997 Copies a stringified representation of the source SV into the
2998 destination SV.  Automatically performs any necessary mg_get and
2999 coercion of numeric values into strings.  Guaranteed to preserve
3000 UTF8 flag even from overloaded objects.  Similar in nature to
3001 sv_2pv[_flags] but operates directly on an SV instead of just the
3002 string.  Mostly uses sv_2pv_flags to do its work, except when that
3003 would lose the UTF-8'ness of the PV.
3004
3005 =cut
3006 */
3007
3008 void
3009 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3010 {
3011     STRLEN len;
3012     const char * const s = SvPV_const(ssv,len);
3013
3014     PERL_ARGS_ASSERT_SV_COPYPV;
3015
3016     sv_setpvn(dsv,s,len);
3017     if (SvUTF8(ssv))
3018         SvUTF8_on(dsv);
3019     else
3020         SvUTF8_off(dsv);
3021 }
3022
3023 /*
3024 =for apidoc sv_2pvbyte
3025
3026 Return a pointer to the byte-encoded representation of the SV, and set *lp
3027 to its length.  May cause the SV to be downgraded from UTF-8 as a
3028 side-effect.
3029
3030 Usually accessed via the C<SvPVbyte> macro.
3031
3032 =cut
3033 */
3034
3035 char *
3036 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3037 {
3038     PERL_ARGS_ASSERT_SV_2PVBYTE;
3039
3040     SvGETMAGIC(sv);
3041     sv_utf8_downgrade(sv,0);
3042     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3043 }
3044
3045 /*
3046 =for apidoc sv_2pvutf8
3047
3048 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3049 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3050
3051 Usually accessed via the C<SvPVutf8> macro.
3052
3053 =cut
3054 */
3055
3056 char *
3057 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3058 {
3059     PERL_ARGS_ASSERT_SV_2PVUTF8;
3060
3061     sv_utf8_upgrade(sv);
3062     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3063 }
3064
3065
3066 /*
3067 =for apidoc sv_2bool
3068
3069 This macro is only used by sv_true() or its macro equivalent, and only if
3070 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3071 It calls sv_2bool_flags with the SV_GMAGIC flag.
3072
3073 =for apidoc sv_2bool_flags
3074
3075 This function is only used by sv_true() and friends,  and only if
3076 the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
3077 contain SV_GMAGIC, then it does an mg_get() first.
3078
3079
3080 =cut
3081 */
3082
3083 bool
3084 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3085 {
3086     dVAR;
3087
3088     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3089
3090     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3091
3092     if (!SvOK(sv))
3093         return 0;
3094     if (SvROK(sv)) {
3095         if (SvAMAGIC(sv)) {
3096             SV * const tmpsv = AMG_CALLun(sv,bool_);
3097             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3098                 return cBOOL(SvTRUE(tmpsv));
3099         }
3100         return SvRV(sv) != 0;
3101     }
3102     if (SvPOKp(sv)) {
3103         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3104         if (Xpvtmp &&
3105                 (*sv->sv_u.svu_pv > '0' ||
3106                 Xpvtmp->xpv_cur > 1 ||
3107                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3108             return 1;
3109         else
3110             return 0;
3111     }
3112     else {
3113         if (SvIOKp(sv))
3114             return SvIVX(sv) != 0;
3115         else {
3116             if (SvNOKp(sv))
3117                 return SvNVX(sv) != 0.0;
3118             else {
3119                 if (isGV_with_GP(sv))
3120                     return TRUE;
3121                 else
3122                     return FALSE;
3123             }
3124         }
3125     }
3126 }
3127
3128 /*
3129 =for apidoc sv_utf8_upgrade
3130
3131 Converts the PV of an SV to its UTF-8-encoded form.
3132 Forces the SV to string form if it is not already.
3133 Will C<mg_get> on C<sv> if appropriate.
3134 Always sets the SvUTF8 flag to avoid future validity checks even
3135 if the whole string is the same in UTF-8 as not.
3136 Returns the number of bytes in the converted string
3137
3138 This is not as a general purpose byte encoding to Unicode interface:
3139 use the Encode extension for that.
3140
3141 =for apidoc sv_utf8_upgrade_nomg
3142
3143 Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3144
3145 =for apidoc sv_utf8_upgrade_flags
3146
3147 Converts the PV of an SV to its UTF-8-encoded form.
3148 Forces the SV to string form if it is not already.
3149 Always sets the SvUTF8 flag to avoid future validity checks even
3150 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3151 will C<mg_get> on C<sv> if appropriate, else not.
3152 Returns the number of bytes in the converted string
3153 C<sv_utf8_upgrade> and
3154 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3155
3156 This is not as a general purpose byte encoding to Unicode interface:
3157 use the Encode extension for that.
3158
3159 =cut
3160
3161 The grow version is currently not externally documented.  It adds a parameter,
3162 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3163 have free after it upon return.  This allows the caller to reserve extra space
3164 that it intends to fill, to avoid extra grows.
3165
3166 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3167 which can be used to tell this function to not first check to see if there are
3168 any characters that are different in UTF-8 (variant characters) which would
3169 force it to allocate a new string to sv, but to assume there are.  Typically
3170 this flag is used by a routine that has already parsed the string to find that
3171 there are such characters, and passes this information on so that the work
3172 doesn't have to be repeated.
3173
3174 (One might think that the calling routine could pass in the position of the
3175 first such variant, so it wouldn't have to be found again.  But that is not the
3176 case, because typically when the caller is likely to use this flag, it won't be
3177 calling this routine unless it finds something that won't fit into a byte.
3178 Otherwise it tries to not upgrade and just use bytes.  But some things that
3179 do fit into a byte are variants in utf8, and the caller may not have been
3180 keeping track of these.)
3181
3182 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3183 isn't guaranteed due to having other routines do the work in some input cases,
3184 or if the input is already flagged as being in utf8.
3185
3186 The speed of this could perhaps be improved for many cases if someone wanted to
3187 write a fast function that counts the number of variant characters in a string,
3188 especially if it could return the position of the first one.
3189
3190 */
3191
3192 STRLEN
3193 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3194 {
3195     dVAR;
3196
3197     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3198
3199     if (sv == &PL_sv_undef)
3200         return 0;
3201     if (!SvPOK(sv)) {
3202         STRLEN len = 0;
3203         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3204             (void) sv_2pv_flags(sv,&len, flags);
3205             if (SvUTF8(sv)) {
3206                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3207                 return len;
3208             }
3209         } else {
3210             (void) SvPV_force(sv,len);
3211         }
3212     }
3213
3214     if (SvUTF8(sv)) {
3215         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3216         return SvCUR(sv);
3217     }
3218
3219     if (SvIsCOW(sv)) {
3220         sv_force_normal_flags(sv, 0);
3221     }
3222
3223     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3224         sv_recode_to_utf8(sv, PL_encoding);
3225         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3226         return SvCUR(sv);
3227     }
3228
3229     if (SvCUR(sv) == 0) {
3230         if (extra) SvGROW(sv, extra);
3231     } else { /* Assume Latin-1/EBCDIC */
3232         /* This function could be much more efficient if we
3233          * had a FLAG in SVs to signal if there are any variant
3234          * chars in the PV.  Given that there isn't such a flag
3235          * make the loop as fast as possible (although there are certainly ways
3236          * to speed this up, eg. through vectorization) */
3237         U8 * s = (U8 *) SvPVX_const(sv);
3238         U8 * e = (U8 *) SvEND(sv);
3239         U8 *t = s;
3240         STRLEN two_byte_count = 0;
3241         
3242         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3243
3244         /* See if really will need to convert to utf8.  We mustn't rely on our
3245          * incoming SV being well formed and having a trailing '\0', as certain
3246          * code in pp_formline can send us partially built SVs. */
3247
3248         while (t < e) {
3249             const U8 ch = *t++;
3250             if (NATIVE_IS_INVARIANT(ch)) continue;
3251
3252             t--;    /* t already incremented; re-point to first variant */
3253             two_byte_count = 1;
3254             goto must_be_utf8;
3255         }
3256
3257         /* utf8 conversion not needed because all are invariants.  Mark as
3258          * UTF-8 even if no variant - saves scanning loop */
3259         SvUTF8_on(sv);
3260         return SvCUR(sv);
3261
3262 must_be_utf8:
3263
3264         /* Here, the string should be converted to utf8, either because of an
3265          * input flag (two_byte_count = 0), or because a character that
3266          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3267          * the beginning of the string (if we didn't examine anything), or to
3268          * the first variant.  In either case, everything from s to t - 1 will
3269          * occupy only 1 byte each on output.
3270          *
3271          * There are two main ways to convert.  One is to create a new string
3272          * and go through the input starting from the beginning, appending each
3273          * converted value onto the new string as we go along.  It's probably
3274          * best to allocate enough space in the string for the worst possible
3275          * case rather than possibly running out of space and having to
3276          * reallocate and then copy what we've done so far.  Since everything
3277          * from s to t - 1 is invariant, the destination can be initialized
3278          * with these using a fast memory copy
3279          *
3280          * The other way is to figure out exactly how big the string should be
3281          * by parsing the entire input.  Then you don't have to make it big
3282          * enough to handle the worst possible case, and more importantly, if
3283          * the string you already have is large enough, you don't have to
3284          * allocate a new string, you can copy the last character in the input
3285          * string to the final position(s) that will be occupied by the
3286          * converted string and go backwards, stopping at t, since everything
3287          * before that is invariant.
3288          *
3289          * There are advantages and disadvantages to each method.
3290          *
3291          * In the first method, we can allocate a new string, do the memory
3292          * copy from the s to t - 1, and then proceed through the rest of the
3293          * string byte-by-byte.
3294          *
3295          * In the second method, we proceed through the rest of the input
3296          * string just calculating how big the converted string will be.  Then
3297          * there are two cases:
3298          *  1)  if the string has enough extra space to handle the converted
3299          *      value.  We go backwards through the string, converting until we
3300          *      get to the position we are at now, and then stop.  If this
3301          *      position is far enough along in the string, this method is
3302          *      faster than the other method.  If the memory copy were the same
3303          *      speed as the byte-by-byte loop, that position would be about
3304          *      half-way, as at the half-way mark, parsing to the end and back
3305          *      is one complete string's parse, the same amount as starting
3306          *      over and going all the way through.  Actually, it would be
3307          *      somewhat less than half-way, as it's faster to just count bytes
3308          *      than to also copy, and we don't have the overhead of allocating
3309          *      a new string, changing the scalar to use it, and freeing the
3310          *      existing one.  But if the memory copy is fast, the break-even
3311          *      point is somewhere after half way.  The counting loop could be
3312          *      sped up by vectorization, etc, to move the break-even point
3313          *      further towards the beginning.
3314          *  2)  if the string doesn't have enough space to handle the converted
3315          *      value.  A new string will have to be allocated, and one might
3316          *      as well, given that, start from the beginning doing the first
3317          *      method.  We've spent extra time parsing the string and in
3318          *      exchange all we've gotten is that we know precisely how big to
3319          *      make the new one.  Perl is more optimized for time than space,
3320          *      so this case is a loser.
3321          * So what I've decided to do is not use the 2nd method unless it is
3322          * guaranteed that a new string won't have to be allocated, assuming
3323          * the worst case.  I also decided not to put any more conditions on it
3324          * than this, for now.  It seems likely that, since the worst case is
3325          * twice as big as the unknown portion of the string (plus 1), we won't
3326          * be guaranteed enough space, causing us to go to the first method,
3327          * unless the string is short, or the first variant character is near
3328          * the end of it.  In either of these cases, it seems best to use the
3329          * 2nd method.  The only circumstance I can think of where this would
3330          * be really slower is if the string had once had much more data in it
3331          * than it does now, but there is still a substantial amount in it  */
3332
3333         {
3334             STRLEN invariant_head = t - s;
3335             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3336             if (SvLEN(sv) < size) {
3337
3338                 /* Here, have decided to allocate a new string */
3339
3340                 U8 *dst;
3341                 U8 *d;
3342
3343                 Newx(dst, size, U8);
3344
3345                 /* If no known invariants at the beginning of the input string,
3346                  * set so starts from there.  Otherwise, can use memory copy to
3347                  * get up to where we are now, and then start from here */
3348
3349                 if (invariant_head <= 0) {
3350                     d = dst;
3351                 } else {
3352                     Copy(s, dst, invariant_head, char);
3353                     d = dst + invariant_head;
3354                 }
3355
3356                 while (t < e) {
3357                     const UV uv = NATIVE8_TO_UNI(*t++);
3358                     if (UNI_IS_INVARIANT(uv))
3359                         *d++ = (U8)UNI_TO_NATIVE(uv);
3360                     else {
3361                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3362                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3363                     }
3364                 }
3365                 *d = '\0';
3366                 SvPV_free(sv); /* No longer using pre-existing string */
3367                 SvPV_set(sv, (char*)dst);
3368                 SvCUR_set(sv, d - dst);
3369                 SvLEN_set(sv, size);
3370             } else {
3371
3372                 /* Here, have decided to get the exact size of the string.
3373                  * Currently this happens only when we know that there is
3374                  * guaranteed enough space to fit the converted string, so
3375                  * don't have to worry about growing.  If two_byte_count is 0,
3376                  * then t points to the first byte of the string which hasn't
3377                  * been examined yet.  Otherwise two_byte_count is 1, and t
3378                  * points to the first byte in the string that will expand to
3379                  * two.  Depending on this, start examining at t or 1 after t.
3380                  * */
3381
3382                 U8 *d = t + two_byte_count;
3383
3384
3385                 /* Count up the remaining bytes that expand to two */
3386
3387                 while (d < e) {
3388                     const U8 chr = *d++;
3389                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3390                 }
3391
3392                 /* The string will expand by just the number of bytes that
3393                  * occupy two positions.  But we are one afterwards because of
3394                  * the increment just above.  This is the place to put the
3395                  * trailing NUL, and to set the length before we decrement */
3396
3397                 d += two_byte_count;
3398                 SvCUR_set(sv, d - s);
3399                 *d-- = '\0';
3400
3401
3402                 /* Having decremented d, it points to the position to put the
3403                  * very last byte of the expanded string.  Go backwards through
3404                  * the string, copying and expanding as we go, stopping when we
3405                  * get to the part that is invariant the rest of the way down */
3406
3407                 e--;
3408                 while (e >= t) {
3409                     const U8 ch = NATIVE8_TO_UNI(*e--);
3410                     if (UNI_IS_INVARIANT(ch)) {
3411                         *d-- = UNI_TO_NATIVE(ch);
3412                     } else {
3413                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3414                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3415                     }
3416                 }
3417             }
3418         }
3419     }
3420
3421     /* Mark as UTF-8 even if no variant - saves scanning loop */
3422     SvUTF8_on(sv);
3423     return SvCUR(sv);
3424 }
3425
3426 /*
3427 =for apidoc sv_utf8_downgrade
3428
3429 Attempts to convert the PV of an SV from characters to bytes.
3430 If the PV contains a character that cannot fit
3431 in a byte, this conversion will fail;
3432 in this case, either returns false or, if C<fail_ok> is not
3433 true, croaks.
3434
3435 This is not as a general purpose Unicode to byte encoding interface:
3436 use the Encode extension for that.
3437
3438 =cut
3439 */
3440
3441 bool
3442 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3443 {
3444     dVAR;
3445
3446     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3447
3448     if (SvPOKp(sv) && SvUTF8(sv)) {
3449         if (SvCUR(sv)) {
3450             U8 *s;
3451             STRLEN len;
3452
3453             if (SvIsCOW(sv)) {
3454                 sv_force_normal_flags(sv, 0);
3455             }
3456             s = (U8 *) SvPV(sv, len);
3457             if (!utf8_to_bytes(s, &len)) {
3458                 if (fail_ok)
3459                     return FALSE;
3460                 else {
3461                     if (PL_op)
3462                         Perl_croak(aTHX_ "Wide character in %s",
3463                                    OP_DESC(PL_op));
3464                     else
3465                         Perl_croak(aTHX_ "Wide character");
3466                 }
3467             }
3468             SvCUR_set(sv, len);
3469         }
3470     }
3471     SvUTF8_off(sv);
3472     return TRUE;
3473 }
3474
3475 /*
3476 =for apidoc sv_utf8_encode
3477
3478 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3479 flag off so that it looks like octets again.
3480
3481 =cut
3482 */
3483
3484 void
3485 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3486 {
3487     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3488
3489     if (SvIsCOW(sv)) {
3490         sv_force_normal_flags(sv, 0);
3491     }
3492     if (SvREADONLY(sv)) {
3493         Perl_croak_no_modify(aTHX);
3494     }
3495     (void) sv_utf8_upgrade(sv);
3496     SvUTF8_off(sv);
3497 }
3498
3499 /*
3500 =for apidoc sv_utf8_decode
3501
3502 If the PV of the SV is an octet sequence in UTF-8
3503 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3504 so that it looks like a character. If the PV contains only single-byte
3505 characters, the C<SvUTF8> flag stays being off.
3506 Scans PV for validity and returns false if the PV is invalid UTF-8.
3507
3508 =cut
3509 */
3510
3511 bool
3512 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3513 {
3514     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3515
3516     if (SvPOKp(sv)) {
3517         const U8 *c;
3518         const U8 *e;
3519
3520         /* The octets may have got themselves encoded - get them back as
3521          * bytes
3522          */
3523         if (!sv_utf8_downgrade(sv, TRUE))
3524             return FALSE;
3525
3526         /* it is actually just a matter of turning the utf8 flag on, but
3527          * we want to make sure everything inside is valid utf8 first.
3528          */
3529         c = (const U8 *) SvPVX_const(sv);
3530         if (!is_utf8_string(c, SvCUR(sv)+1))
3531             return FALSE;
3532         e = (const U8 *) SvEND(sv);
3533         while (c < e) {
3534             const U8 ch = *c++;
3535             if (!UTF8_IS_INVARIANT(ch)) {
3536                 SvUTF8_on(sv);
3537                 break;
3538             }
3539         }
3540     }
3541     return TRUE;
3542 }
3543
3544 /*
3545 =for apidoc sv_setsv
3546
3547 Copies the contents of the source SV C<ssv> into the destination SV
3548 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3549 function if the source SV needs to be reused. Does not handle 'set' magic.
3550 Loosely speaking, it performs a copy-by-value, obliterating any previous
3551 content of the destination.
3552
3553 You probably want to use one of the assortment of wrappers, such as
3554 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3555 C<SvSetMagicSV_nosteal>.
3556
3557 =for apidoc sv_setsv_flags
3558
3559 Copies the contents of the source SV C<ssv> into the destination SV
3560 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3561 function if the source SV needs to be reused. Does not handle 'set' magic.
3562 Loosely speaking, it performs a copy-by-value, obliterating any previous
3563 content of the destination.
3564 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3565 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3566 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3567 and C<sv_setsv_nomg> are implemented in terms of this function.
3568
3569 You probably want to use one of the assortment of wrappers, such as
3570 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3571 C<SvSetMagicSV_nosteal>.
3572
3573 This is the primary function for copying scalars, and most other
3574 copy-ish functions and macros use this underneath.
3575
3576 =cut
3577 */
3578
3579 static void
3580 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3581 {
3582     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3583     HV *old_stash = NULL;
3584
3585     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3586
3587     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3588         const char * const name = GvNAME(sstr);
3589         const STRLEN len = GvNAMELEN(sstr);
3590         {
3591             if (dtype >= SVt_PV) {
3592                 SvPV_free(dstr);
3593                 SvPV_set(dstr, 0);
3594                 SvLEN_set(dstr, 0);
3595                 SvCUR_set(dstr, 0);
3596             }
3597             SvUPGRADE(dstr, SVt_PVGV);
3598             (void)SvOK_off(dstr);
3599             /* FIXME - why are we doing this, then turning it off and on again
3600                below?  */
3601             isGV_with_GP_on(dstr);
3602         }
3603         GvSTASH(dstr) = GvSTASH(sstr);
3604         if (GvSTASH(dstr))
3605             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3606         gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
3607         SvFAKE_on(dstr);        /* can coerce to non-glob */
3608     }
3609
3610     if(GvGP(MUTABLE_GV(sstr))) {
3611         /* If source has method cache entry, clear it */
3612         if(GvCVGEN(sstr)) {
3613             SvREFCNT_dec(GvCV(sstr));
3614             GvCV(sstr) = NULL;
3615             GvCVGEN(sstr) = 0;
3616         }
3617         /* If source has a real method, then a method is
3618            going to change */
3619         else if(
3620          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3621         ) {
3622             mro_changes = 1;
3623         }
3624     }
3625
3626     /* If dest already had a real method, that's a change as well */
3627     if(
3628         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3629      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3630     ) {
3631         mro_changes = 1;
3632     }
3633
3634     /* We don’t need to check the name of the destination if it was not a
3635        glob to begin with. */
3636     if(dtype == SVt_PVGV) {
3637         const char * const name = GvNAME((const GV *)dstr);
3638         if(
3639             strEQ(name,"ISA")
3640          /* The stash may have been detached from the symbol table, so
3641             check its name. */
3642          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3643          && GvAV((const GV *)sstr)
3644         )
3645             mro_changes = 2;
3646         else {
3647             const STRLEN len = GvNAMELEN(dstr);
3648             if (len > 1 && name[len-2] == ':' && name[len-1] == ':') {
3649                 mro_changes = 3;
3650
3651                 /* Set aside the old stash, so we can reset isa caches on
3652                    its subclasses. */
3653                 if((old_stash = GvHV(dstr)))
3654                     /* Make sure we do not lose it early. */
3655                     SvREFCNT_inc_simple_void_NN(
3656                      sv_2mortal((SV *)old_stash)
3657                     );
3658             }
3659         }
3660     }
3661
3662     gp_free(MUTABLE_GV(dstr));
3663     isGV_with_GP_off(dstr);
3664     (void)SvOK_off(dstr);
3665     isGV_with_GP_on(dstr);
3666     GvINTRO_off(dstr);          /* one-shot flag */
3667     GvGP(dstr) = gp_ref(GvGP(sstr));
3668     if (SvTAINTED(sstr))
3669         SvTAINT(dstr);
3670     if (GvIMPORTED(dstr) != GVf_IMPORTED
3671         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3672         {
3673             GvIMPORTED_on(dstr);
3674         }
3675     GvMULTI_on(dstr);
3676     if(mro_changes == 2) {
3677         MAGIC *mg;
3678         SV * const sref = (SV *)GvAV((const GV *)dstr);
3679         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3680             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3681                 AV * const ary = newAV();
3682                 av_push(ary, mg->mg_obj); /* takes the refcount */
3683                 mg->mg_obj = (SV *)ary;
3684             }
3685             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3686         }
3687         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3688         mro_isa_changed_in(GvSTASH(dstr));
3689     }
3690     else if(mro_changes == 3) {
3691         HV * const stash = GvHV(dstr);
3692         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3693             mro_package_moved(
3694                 stash, old_stash,
3695                 (GV *)dstr, 0
3696             );
3697     }
3698     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3699     return;
3700 }
3701
3702 static void
3703 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3704 {
3705     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3706     SV *dref = NULL;
3707     const int intro = GvINTRO(dstr);
3708     SV **location;
3709     U8 import_flag = 0;
3710     const U32 stype = SvTYPE(sref);
3711
3712     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3713
3714     if (intro) {
3715         GvINTRO_off(dstr);      /* one-shot flag */
3716         GvLINE(dstr) = CopLINE(PL_curcop);
3717         GvEGV(dstr) = MUTABLE_GV(dstr);
3718     }
3719     GvMULTI_on(dstr);
3720     switch (stype) {
3721     case SVt_PVCV:
3722         location = (SV **) &GvCV(dstr);
3723         import_flag = GVf_IMPORTED_CV;
3724         goto common;
3725     case SVt_PVHV:
3726         location = (SV **) &GvHV(dstr);
3727         import_flag = GVf_IMPORTED_HV;
3728         goto common;
3729     case SVt_PVAV:
3730         location = (SV **) &GvAV(dstr);
3731         import_flag = GVf_IMPORTED_AV;
3732         goto common;
3733     case SVt_PVIO:
3734         location = (SV **) &GvIOp(dstr);
3735         goto common;
3736     case SVt_PVFM:
3737         location = (SV **) &GvFORM(dstr);
3738         goto common;
3739     default:
3740         location = &GvSV(dstr);
3741         import_flag = GVf_IMPORTED_SV;
3742     common:
3743         if (intro) {
3744             if (stype == SVt_PVCV) {
3745                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3746                 if (GvCVGEN(dstr)) {
3747                     SvREFCNT_dec(GvCV(dstr));
3748                     GvCV(dstr) = NULL;
3749                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3750                 }
3751             }
3752             SAVEGENERICSV(*location);
3753         }
3754         else
3755             dref = *location;
3756         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3757             CV* const cv = MUTABLE_CV(*location);
3758             if (cv) {
3759                 if (!GvCVGEN((const GV *)dstr) &&
3760                     (CvROOT(cv) || CvXSUB(cv)))
3761                     {
3762                         /* Redefining a sub - warning is mandatory if
3763                            it was a const and its value changed. */
3764                         if (CvCONST(cv) && CvCONST((const CV *)sref)
3765                             && cv_const_sv(cv)
3766                             == cv_const_sv((const CV *)sref)) {
3767                             NOOP;
3768                             /* They are 2 constant subroutines generated from
3769                                the same constant. This probably means that
3770                                they are really the "same" proxy subroutine
3771                                instantiated in 2 places. Most likely this is
3772                                when a constant is exported twice.  Don't warn.
3773                             */
3774                         }
3775                         else if (ckWARN(WARN_REDEFINE)
3776                                  || (CvCONST(cv)
3777                                      && (!CvCONST((const CV *)sref)
3778                                          || sv_cmp(cv_const_sv(cv),
3779                                                    cv_const_sv((const CV *)
3780                                                                sref))))) {
3781                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3782                                         (const char *)
3783                                         (CvCONST(cv)
3784                                          ? "Constant subroutine %s::%s redefined"
3785                                          : "Subroutine %s::%s redefined"),
3786                                         HvNAME_get(GvSTASH((const GV *)dstr)),
3787                                         GvENAME(MUTABLE_GV(dstr)));
3788                         }
3789                     }
3790                 if (!intro)
3791                     cv_ckproto_len(cv, (const GV *)dstr,
3792                                    SvPOK(sref) ? SvPVX_const(sref) : NULL,
3793                                    SvPOK(sref) ? SvCUR(sref) : 0);
3794             }
3795             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3796             GvASSUMECV_on(dstr);
3797             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3798         }
3799         *location = sref;
3800         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3801             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3802             GvFLAGS(dstr) |= import_flag;
3803         }
3804         if (stype == SVt_PVHV) {
3805             const char * const name = GvNAME((GV*)dstr);
3806             const STRLEN len = GvNAMELEN(dstr);
3807             if (
3808                 len > 1 && name[len-2] == ':' && name[len-1] == ':'
3809              && (!dref || HvENAME_get(dref))
3810             ) {
3811                 mro_package_moved(
3812                     (HV *)sref, (HV *)dref,
3813                     (GV *)dstr, 0
3814                 );
3815             }
3816         }
3817         else if (
3818             stype == SVt_PVAV && sref != dref
3819          && strEQ(GvNAME((GV*)dstr), "ISA")
3820          /* The stash may have been detached from the symbol table, so
3821             check its name before doing anything. */
3822          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3823         ) {
3824             MAGIC *mg;
3825             MAGIC * const omg = dref && SvSMAGICAL(dref)
3826                                  ? mg_find(dref, PERL_MAGIC_isa)
3827                                  : NULL;
3828             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3829                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3830                     AV * const ary = newAV();
3831                     av_push(ary, mg->mg_obj); /* takes the refcount */
3832                     mg->mg_obj = (SV *)ary;
3833                 }
3834                 if (omg) {
3835                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3836                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3837                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3838                         while (items--)
3839                             av_push(
3840                              (AV *)mg->mg_obj,
3841                              SvREFCNT_inc_simple_NN(*svp++)
3842                             );
3843                     }
3844                     else
3845                         av_push(
3846                          (AV *)mg->mg_obj,
3847                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3848                         );
3849                 }
3850                 else
3851                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3852             }
3853             else
3854             {
3855                 sv_magic(
3856                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3857                 );
3858                 mg = mg_find(sref, PERL_MAGIC_isa);
3859             }
3860             /* Since the *ISA assignment could have affected more than
3861                one stash, don’t call mro_isa_changed_in directly, but let
3862                magic_clearisa do it for us, as it already has the logic for
3863                dealing with globs vs arrays of globs. */
3864             assert(mg);
3865             Perl_magic_clearisa(aTHX_ NULL, mg);
3866         }
3867         break;
3868     }
3869     SvREFCNT_dec(dref);
3870     if (SvTAINTED(sstr))
3871         SvTAINT(dstr);
3872     return;
3873 }
3874
3875 void
3876 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3877 {
3878     dVAR;
3879     register U32 sflags;
3880     register int dtype;
3881     register svtype stype;
3882
3883     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3884
3885     if (sstr == dstr)
3886         return;
3887
3888     if (SvIS_FREED(dstr)) {
3889         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3890                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3891     }
3892     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3893     if (!sstr)
3894         sstr = &PL_sv_undef;
3895     if (SvIS_FREED(sstr)) {
3896         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3897                    (void*)sstr, (void*)dstr);
3898     }
3899     stype = SvTYPE(sstr);
3900     dtype = SvTYPE(dstr);
3901
3902     (void)SvAMAGIC_off(dstr);
3903     if ( SvVOK(dstr) )
3904     {
3905         /* need to nuke the magic */
3906         mg_free(dstr);
3907     }
3908
3909     /* There's a lot of redundancy below but we're going for speed here */
3910
3911     switch (stype) {
3912     case SVt_NULL:
3913       undef_sstr:
3914         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3915             (void)SvOK_off(dstr);
3916             return;
3917         }
3918         break;
3919     case SVt_IV:
3920         if (SvIOK(sstr)) {
3921             switch (dtype) {
3922             case SVt_NULL:
3923                 sv_upgrade(dstr, SVt_IV);
3924                 break;
3925             case SVt_NV:
3926             case SVt_PV:
3927                 sv_upgrade(dstr, SVt_PVIV);
3928                 break;
3929             case SVt_PVGV:
3930             case SVt_PVLV:
3931                 goto end_of_first_switch;
3932             }
3933             (void)SvIOK_only(dstr);
3934             SvIV_set(dstr,  SvIVX(sstr));
3935             if (SvIsUV(sstr))
3936                 SvIsUV_on(dstr);
3937             /* SvTAINTED can only be true if the SV has taint magic, which in
3938                turn means that the SV type is PVMG (or greater). This is the
3939                case statement for SVt_IV, so this cannot be true (whatever gcov
3940                may say).  */
3941             assert(!SvTAINTED(sstr));
3942             return;
3943         }
3944         if (!SvROK(sstr))
3945             goto undef_sstr;
3946         if (dtype < SVt_PV && dtype != SVt_IV)
3947             sv_upgrade(dstr, SVt_IV);
3948         break;
3949
3950     case SVt_NV:
3951         if (SvNOK(sstr)) {
3952             switch (dtype) {
3953             case SVt_NULL:
3954             case SVt_IV:
3955                 sv_upgrade(dstr, SVt_NV);
3956                 break;
3957             case SVt_PV:
3958             case SVt_PVIV:
3959                 sv_upgrade(dstr, SVt_PVNV);
3960                 break;
3961             case SVt_PVGV:
3962             case SVt_PVLV:
3963                 goto end_of_first_switch;
3964             }
3965             SvNV_set(dstr, SvNVX(sstr));
3966             (void)SvNOK_only(dstr);
3967             /* SvTAINTED can only be true if the SV has taint magic, which in
3968                turn means that the SV type is PVMG (or greater). This is the
3969                case statement for SVt_NV, so this cannot be true (whatever gcov
3970                may say).  */
3971             assert(!SvTAINTED(sstr));
3972             return;
3973         }
3974         goto undef_sstr;
3975
3976     case SVt_PVFM:
3977 #ifdef PERL_OLD_COPY_ON_WRITE
3978         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3979             if (dtype < SVt_PVIV)
3980                 sv_upgrade(dstr, SVt_PVIV);
3981             break;
3982         }
3983         /* Fall through */
3984 #endif
3985     case SVt_PV:
3986         if (dtype < SVt_PV)
3987             sv_upgrade(dstr, SVt_PV);
3988         break;
3989     case SVt_PVIV:
3990         if (dtype < SVt_PVIV)
3991             sv_upgrade(dstr, SVt_PVIV);
3992         break;
3993     case SVt_PVNV:
3994         if (dtype < SVt_PVNV)
3995             sv_upgrade(dstr, SVt_PVNV);
3996         break;
3997     default:
3998         {
3999         const char * const type = sv_reftype(sstr,0);
4000         if (PL_op)
4001             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4002         else
4003             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4004         }
4005         break;
4006
4007     case SVt_REGEXP:
4008         if (dtype < SVt_REGEXP)
4009             sv_upgrade(dstr, SVt_REGEXP);
4010         break;
4011
4012         /* case SVt_BIND: */
4013     case SVt_PVLV:
4014     case SVt_PVGV:
4015         /* SvVALID means that this PVGV is playing at being an FBM.  */
4016
4017     case SVt_PVMG:
4018         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4019             mg_get(sstr);
4020             if (SvTYPE(sstr) != stype)
4021                 stype = SvTYPE(sstr);
4022         }
4023         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4024                     glob_assign_glob(dstr, sstr, dtype);
4025                     return;
4026         }
4027         if (stype == SVt_PVLV)
4028             SvUPGRADE(dstr, SVt_PVNV);
4029         else
4030             SvUPGRADE(dstr, (svtype)stype);
4031     }
4032  end_of_first_switch:
4033
4034     /* dstr may have been upgraded.  */
4035     dtype = SvTYPE(dstr);
4036     sflags = SvFLAGS(sstr);
4037
4038     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
4039         /* Assigning to a subroutine sets the prototype.  */
4040         if (SvOK(sstr)) {
4041             STRLEN len;
4042             const char *const ptr = SvPV_const(sstr, len);
4043
4044             SvGROW(dstr, len + 1);
4045             Copy(ptr, SvPVX(dstr), len + 1, char);
4046             SvCUR_set(dstr, len);
4047             SvPOK_only(dstr);
4048             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4049         } else {
4050             SvOK_off(dstr);
4051         }
4052     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4053         const char * const type = sv_reftype(dstr,0);
4054         if (PL_op)
4055             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4056         else
4057             Perl_croak(aTHX_ "Cannot copy to %s", type);
4058     } else if (sflags & SVf_ROK) {
4059         if (isGV_with_GP(dstr)
4060             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4061             sstr = SvRV(sstr);
4062             if (sstr == dstr) {
4063                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4064                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4065                 {
4066                     GvIMPORTED_on(dstr);
4067                 }
4068                 GvMULTI_on(dstr);
4069                 return;
4070             }
4071             glob_assign_glob(dstr, sstr, dtype);
4072             return;
4073         }
4074
4075         if (dtype >= SVt_PV) {
4076             if (isGV_with_GP(dstr)) {
4077                 glob_assign_ref(dstr, sstr);
4078                 return;
4079             }
4080             if (SvPVX_const(dstr)) {
4081                 SvPV_free(dstr);
4082                 SvLEN_set(dstr, 0);
4083                 SvCUR_set(dstr, 0);
4084             }
4085         }
4086         (void)SvOK_off(dstr);
4087         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4088         SvFLAGS(dstr) |= sflags & SVf_ROK;
4089         assert(!(sflags & SVp_NOK));
4090         assert(!(sflags & SVp_IOK));
4091         assert(!(sflags & SVf_NOK));
4092         assert(!(sflags & SVf_IOK));
4093     }
4094     else if (isGV_with_GP(dstr)) {
4095         if (!(sflags & SVf_OK)) {
4096             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4097                            "Undefined value assigned to typeglob");
4098         }
4099         else {
4100             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
4101             if (dstr != (const SV *)gv) {
4102                 const char * const name = GvNAME((const GV *)dstr);
4103                 const STRLEN len = GvNAMELEN(dstr);
4104                 HV *old_stash = NULL;
4105                 bool reset_isa = FALSE;
4106                 if (len > 1 && name[len-2] == ':' && name[len-1] == ':') {
4107                     /* Set aside the old stash, so we can reset isa caches
4108                        on its subclasses. */
4109                     if((old_stash = GvHV(dstr))) {
4110                         /* Make sure we do not lose it early. */
4111                         SvREFCNT_inc_simple_void_NN(
4112                          sv_2mortal((SV *)old_stash)
4113                         );
4114                     }
4115                     reset_isa = TRUE;
4116                 }
4117
4118                 if (GvGP(dstr))
4119                     gp_free(MUTABLE_GV(dstr));
4120                 GvGP(dstr) = gp_ref(GvGP(gv));
4121
4122                 if (reset_isa) {
4123                     HV * const stash = GvHV(dstr);
4124                     if(
4125                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4126                     )
4127                         mro_package_moved(
4128                          stash, old_stash,
4129                          (GV *)dstr, 0
4130                         );
4131                 }
4132             }
4133         }
4134     }
4135     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4136         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4137     }
4138     else if (sflags & SVp_POK) {
4139         bool isSwipe = 0;
4140
4141         /*
4142          * Check to see if we can just swipe the string.  If so, it's a
4143          * possible small lose on short strings, but a big win on long ones.
4144          * It might even be a win on short strings if SvPVX_const(dstr)
4145          * has to be allocated and SvPVX_const(sstr) has to be freed.
4146          * Likewise if we can set up COW rather than doing an actual copy, we
4147          * drop to the else clause, as the swipe code and the COW setup code
4148          * have much in common.
4149          */
4150
4151         /* Whichever path we take through the next code, we want this true,
4152            and doing it now facilitates the COW check.  */
4153         (void)SvPOK_only(dstr);
4154
4155         if (
4156             /* If we're already COW then this clause is not true, and if COW
4157                is allowed then we drop down to the else and make dest COW 
4158                with us.  If caller hasn't said that we're allowed to COW
4159                shared hash keys then we don't do the COW setup, even if the
4160                source scalar is a shared hash key scalar.  */
4161             (((flags & SV_COW_SHARED_HASH_KEYS)
4162                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4163                : 1 /* If making a COW copy is forbidden then the behaviour we
4164                        desire is as if the source SV isn't actually already
4165                        COW, even if it is.  So we act as if the source flags
4166                        are not COW, rather than actually testing them.  */
4167               )
4168 #ifndef PERL_OLD_COPY_ON_WRITE
4169              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4170                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4171                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4172                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4173                 but in turn, it's somewhat dead code, never expected to go
4174                 live, but more kept as a placeholder on how to do it better
4175                 in a newer implementation.  */
4176              /* If we are COW and dstr is a suitable target then we drop down
4177                 into the else and make dest a COW of us.  */
4178              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4179 #endif
4180              )
4181             &&
4182             !(isSwipe =
4183                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4184                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4185                  (!(flags & SV_NOSTEAL)) &&
4186                                         /* and we're allowed to steal temps */
4187                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4188                  SvLEN(sstr))             /* and really is a string */
4189 #ifdef PERL_OLD_COPY_ON_WRITE
4190             && ((flags & SV_COW_SHARED_HASH_KEYS)
4191                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4192                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4193                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4194                 : 1)
4195 #endif
4196             ) {
4197             /* Failed the swipe test, and it's not a shared hash key either.
4198                Have to copy the string.  */
4199             STRLEN len = SvCUR(sstr);
4200             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4201             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4202             SvCUR_set(dstr, len);
4203             *SvEND(dstr) = '\0';
4204         } else {
4205             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4206                be true in here.  */
4207             /* Either it's a shared hash key, or it's suitable for
4208                copy-on-write or we can swipe the string.  */
4209             if (DEBUG_C_TEST) {
4210                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4211                 sv_dump(sstr);
4212                 sv_dump(dstr);
4213             }
4214 #ifdef PERL_OLD_COPY_ON_WRITE
4215             if (!isSwipe) {
4216                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4217                     != (SVf_FAKE | SVf_READONLY)) {
4218                     SvREADONLY_on(sstr);
4219                     SvFAKE_on(sstr);
4220                     /* Make the source SV into a loop of 1.
4221                        (about to become 2) */
4222                     SV_COW_NEXT_SV_SET(sstr, sstr);
4223                 }
4224             }
4225 #endif
4226             /* Initial code is common.  */
4227             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4228                 SvPV_free(dstr);
4229             }
4230
4231             if (!isSwipe) {
4232                 /* making another shared SV.  */
4233                 STRLEN cur = SvCUR(sstr);
4234                 STRLEN len = SvLEN(sstr);
4235 #ifdef PERL_OLD_COPY_ON_WRITE
4236                 if (len) {
4237                     assert (SvTYPE(dstr) >= SVt_PVIV);
4238                     /* SvIsCOW_normal */
4239                     /* splice us in between source and next-after-source.  */
4240                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4241                     SV_COW_NEXT_SV_SET(sstr, dstr);
4242                     SvPV_set(dstr, SvPVX_mutable(sstr));
4243                 } else
4244 #endif
4245                 {
4246                     /* SvIsCOW_shared_hash */
4247                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4248                                           "Copy on write: Sharing hash\n"));
4249
4250                     assert (SvTYPE(dstr) >= SVt_PV);
4251                     SvPV_set(dstr,
4252                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4253                 }
4254                 SvLEN_set(dstr, len);
4255                 SvCUR_set(dstr, cur);
4256                 SvREADONLY_on(dstr);
4257                 SvFAKE_on(dstr);
4258             }
4259             else
4260                 {       /* Passes the swipe test.  */
4261                 SvPV_set(dstr, SvPVX_mutable(sstr));
4262                 SvLEN_set(dstr, SvLEN(sstr));
4263                 SvCUR_set(dstr, SvCUR(sstr));
4264
4265                 SvTEMP_off(dstr);
4266                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4267                 SvPV_set(sstr, NULL);
4268                 SvLEN_set(sstr, 0);
4269                 SvCUR_set(sstr, 0);
4270                 SvTEMP_off(sstr);
4271             }
4272         }
4273         if (sflags & SVp_NOK) {
4274             SvNV_set(dstr, SvNVX(sstr));
4275         }
4276         if (sflags & SVp_IOK) {
4277             SvIV_set(dstr, SvIVX(sstr));
4278             /* Must do this otherwise some other overloaded use of 0x80000000
4279                gets confused. I guess SVpbm_VALID */
4280             if (sflags & SVf_IVisUV)
4281                 SvIsUV_on(dstr);
4282         }
4283         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4284         {
4285             const MAGIC * const smg = SvVSTRING_mg(sstr);
4286             if (smg) {
4287                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4288                          smg->mg_ptr, smg->mg_len);
4289                 SvRMAGICAL_on(dstr);
4290             }
4291         }
4292     }
4293     else if (sflags & (SVp_IOK|SVp_NOK)) {
4294         (void)SvOK_off(dstr);
4295         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4296         if (sflags & SVp_IOK) {
4297             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4298             SvIV_set(dstr, SvIVX(sstr));
4299         }
4300         if (sflags & SVp_NOK) {
4301             SvNV_set(dstr, SvNVX(sstr));
4302         }
4303     }
4304     else {
4305         if (isGV_with_GP(sstr)) {
4306             /* This stringification rule for globs is spread in 3 places.
4307                This feels bad. FIXME.  */
4308             const U32 wasfake = sflags & SVf_FAKE;
4309
4310             /* FAKE globs can get coerced, so need to turn this off
4311                temporarily if it is on.  */
4312             SvFAKE_off(sstr);
4313             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4314             SvFLAGS(sstr) |= wasfake;
4315         }
4316         else
4317             (void)SvOK_off(dstr);
4318     }
4319     if (SvTAINTED(sstr))
4320         SvTAINT(dstr);
4321 }
4322
4323 /*
4324 =for apidoc sv_setsv_mg
4325
4326 Like C<sv_setsv>, but also handles 'set' magic.
4327
4328 =cut
4329 */
4330
4331 void
4332 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4333 {
4334     PERL_ARGS_ASSERT_SV_SETSV_MG;
4335
4336     sv_setsv(dstr,sstr);
4337     SvSETMAGIC(dstr);
4338 }
4339
4340 #ifdef PERL_OLD_COPY_ON_WRITE
4341 SV *
4342 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4343 {
4344     STRLEN cur = SvCUR(sstr);
4345     STRLEN len = SvLEN(sstr);
4346     register char *new_pv;
4347
4348     PERL_ARGS_ASSERT_SV_SETSV_COW;
4349
4350     if (DEBUG_C_TEST) {
4351         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4352                       (void*)sstr, (void*)dstr);
4353         sv_dump(sstr);
4354         if (dstr)
4355                     sv_dump(dstr);
4356     }
4357
4358     if (dstr) {
4359         if (SvTHINKFIRST(dstr))
4360             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4361         else if (SvPVX_const(dstr))
4362             Safefree(SvPVX_const(dstr));
4363     }
4364     else
4365         new_SV(dstr);
4366     SvUPGRADE(dstr, SVt_PVIV);
4367
4368     assert (SvPOK(sstr));
4369     assert (SvPOKp(sstr));
4370     assert (!SvIOK(sstr));
4371     assert (!SvIOKp(sstr));
4372     assert (!SvNOK(sstr));
4373     assert (!SvNOKp(sstr));
4374
4375     if (SvIsCOW(sstr)) {
4376
4377         if (SvLEN(sstr) == 0) {
4378             /* source is a COW shared hash key.  */
4379             DEBUG_C(PerlIO_printf(Perl_debug_log,
4380                                   "Fast copy on write: Sharing hash\n"));
4381             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4382             goto common_exit;
4383         }
4384         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4385     } else {
4386         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4387         SvUPGRADE(sstr, SVt_PVIV);
4388         SvREADONLY_on(sstr);
4389         SvFAKE_on(sstr);
4390         DEBUG_C(PerlIO_printf(Perl_debug_log,
4391                               "Fast copy on write: Converting sstr to COW\n"));
4392         SV_COW_NEXT_SV_SET(dstr, sstr);
4393     }
4394     SV_COW_NEXT_SV_SET(sstr, dstr);
4395     new_pv = SvPVX_mutable(sstr);
4396
4397   common_exit:
4398     SvPV_set(dstr, new_pv);
4399     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4400     if (SvUTF8(sstr))
4401         SvUTF8_on(dstr);
4402     SvLEN_set(dstr, len);
4403     SvCUR_set(dstr, cur);
4404     if (DEBUG_C_TEST) {
4405         sv_dump(dstr);
4406     }
4407     return dstr;
4408 }
4409 #endif
4410
4411 /*
4412 =for apidoc sv_setpvn
4413
4414 Copies a string into an SV.  The C<len> parameter indicates the number of
4415 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4416 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4417
4418 =cut
4419 */
4420
4421 void
4422 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4423 {
4424     dVAR;
4425     register char *dptr;
4426
4427     PERL_ARGS_ASSERT_SV_SETPVN;
4428
4429     SV_CHECK_THINKFIRST_COW_DROP(sv);
4430     if (!ptr) {
4431         (void)SvOK_off(sv);
4432         return;
4433     }
4434     else {
4435         /* len is STRLEN which is unsigned, need to copy to signed */
4436         const IV iv = len;
4437         if (iv < 0)
4438             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4439     }
4440     SvUPGRADE(sv, SVt_PV);
4441
4442     dptr = SvGROW(sv, len + 1);
4443     Move(ptr,dptr,len,char);
4444     dptr[len] = '\0';
4445     SvCUR_set(sv, len);
4446     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4447     SvTAINT(sv);
4448 }
4449
4450 /*
4451 =for apidoc sv_setpvn_mg
4452
4453 Like C<sv_setpvn>, but also handles 'set' magic.
4454
4455 =cut
4456 */
4457
4458 void
4459 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4460 {
4461     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4462
4463     sv_setpvn(sv,ptr,len);
4464     SvSETMAGIC(sv);
4465 }
4466
4467 /*
4468 =for apidoc sv_setpv
4469
4470 Copies a string into an SV.  The string must be null-terminated.  Does not
4471 handle 'set' magic.  See C<sv_setpv_mg>.
4472
4473 =cut
4474 */
4475
4476 void
4477 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4478 {
4479     dVAR;
4480     register STRLEN len;
4481
4482     PERL_ARGS_ASSERT_SV_SETPV;
4483
4484     SV_CHECK_THINKFIRST_COW_DROP(sv);
4485     if (!ptr) {
4486         (void)SvOK_off(sv);
4487         return;
4488     }
4489     len = strlen(ptr);
4490     SvUPGRADE(sv, SVt_PV);
4491
4492     SvGROW(sv, len + 1);
4493     Move(ptr,SvPVX(sv),len+1,char);
4494     SvCUR_set(sv, len);
4495     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4496     SvTAINT(sv);
4497 }
4498
4499 /*
4500 =for apidoc sv_setpv_mg
4501
4502 Like C<sv_setpv>, but also handles 'set' magic.
4503
4504 =cut
4505 */
4506
4507 void
4508 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4509 {
4510     PERL_ARGS_ASSERT_SV_SETPV_MG;
4511
4512     sv_setpv(sv,ptr);
4513     SvSETMAGIC(sv);
4514 }
4515
4516 /*
4517 =for apidoc sv_usepvn_flags
4518
4519 Tells an SV to use C<ptr> to find its string value.  Normally the
4520 string is stored inside the SV but sv_usepvn allows the SV to use an
4521 outside string.  The C<ptr> should point to memory that was allocated
4522 by C<malloc>.  The string length, C<len>, must be supplied.  By default
4523 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4524 so that pointer should not be freed or used by the programmer after
4525 giving it to sv_usepvn, and neither should any pointers from "behind"
4526 that pointer (e.g. ptr + 1) be used.
4527
4528 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4529 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4530 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4531 C<len>, and already meets the requirements for storing in C<SvPVX>)
4532
4533 =cut
4534 */
4535
4536 void
4537 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4538 {
4539     dVAR;
4540     STRLEN allocate;
4541
4542     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4543
4544     SV_CHECK_THINKFIRST_COW_DROP(sv);
4545     SvUPGRADE(sv, SVt_PV);
4546     if (!ptr) {
4547         (void)SvOK_off(sv);
4548         if (flags & SV_SMAGIC)
4549             SvSETMAGIC(sv);
4550         return;
4551     }
4552     if (SvPVX_const(sv))
4553         SvPV_free(sv);
4554
4555 #ifdef DEBUGGING
4556     if (flags & SV_HAS_TRAILING_NUL)
4557         assert(ptr[len] == '\0');
4558 #endif
4559
4560     allocate = (flags & SV_HAS_TRAILING_NUL)
4561         ? len + 1 :
4562 #ifdef Perl_safesysmalloc_size
4563         len + 1;
4564 #else 
4565         PERL_STRLEN_ROUNDUP(len + 1);
4566 #endif
4567     if (flags & SV_HAS_TRAILING_NUL) {
4568         /* It's long enough - do nothing.
4569            Specfically Perl_newCONSTSUB is relying on this.  */
4570     } else {
4571 #ifdef DEBUGGING
4572         /* Force a move to shake out bugs in callers.  */
4573         char *new_ptr = (char*)safemalloc(allocate);
4574         Copy(ptr, new_ptr, len, char);
4575         PoisonFree(ptr,len,char);
4576         Safefree(ptr);
4577         ptr = new_ptr;
4578 #else
4579         ptr = (char*) saferealloc (ptr, allocate);
4580 #endif
4581     }
4582 #ifdef Perl_safesysmalloc_size
4583     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4584 #else
4585     SvLEN_set(sv, allocate);
4586 #endif
4587     SvCUR_set(sv, len);
4588     SvPV_set(sv, ptr);
4589     if (!(flags & SV_HAS_TRAILING_NUL)) {
4590         ptr[len] = '\0';
4591     }
4592     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4593     SvTAINT(sv);
4594     if (flags & SV_SMAGIC)
4595         SvSETMAGIC(sv);
4596 }
4597
4598 #ifdef PERL_OLD_COPY_ON_WRITE
4599 /* Need to do this *after* making the SV normal, as we need the buffer
4600    pointer to remain valid until after we've copied it.  If we let go too early,
4601    another thread could invalidate it by unsharing last of the same hash key
4602    (which it can do by means other than releasing copy-on-write Svs)
4603    or by changing the other copy-on-write SVs in the loop.  */
4604 STATIC void
4605 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4606 {
4607     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4608
4609     { /* this SV was SvIsCOW_normal(sv) */
4610          /* we need to find the SV pointing to us.  */
4611         SV *current = SV_COW_NEXT_SV(after);
4612
4613         if (current == sv) {
4614             /* The SV we point to points back to us (there were only two of us
4615                in the loop.)
4616                Hence other SV is no longer copy on write either.  */
4617             SvFAKE_off(after);
4618             SvREADONLY_off(after);
4619         } else {
4620             /* We need to follow the pointers around the loop.  */
4621             SV *next;
4622             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4623                 assert (next);
4624                 current = next;
4625                  /* don't loop forever if the structure is bust, and we have
4626                     a pointer into a closed loop.  */
4627                 assert (current != after);
4628                 assert (SvPVX_const(current) == pvx);
4629             }
4630             /* Make the SV before us point to the SV after us.  */
4631             SV_COW_NEXT_SV_SET(current, after);
4632         }
4633     }
4634 }
4635 #endif
4636 /*
4637 =for apidoc sv_force_normal_flags
4638
4639 Undo various types of fakery on an SV: if the PV is a shared string, make
4640 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4641 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4642 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4643 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4644 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4645 set to some other value.) In addition, the C<flags> parameter gets passed to
4646 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4647 with flags set to 0.
4648
4649 =cut
4650 */
4651
4652 void
4653 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4654 {
4655     dVAR;
4656
4657     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4658
4659 #ifdef PERL_OLD_COPY_ON_WRITE
4660     if (SvREADONLY(sv)) {
4661         if (SvFAKE(sv)) {
4662             const char * const pvx = SvPVX_const(sv);
4663             const STRLEN len = SvLEN(sv);
4664             const STRLEN cur = SvCUR(sv);
4665             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4666                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4667                we'll fail an assertion.  */
4668             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4669
4670             if (DEBUG_C_TEST) {
4671                 PerlIO_printf(Perl_debug_log,
4672                               "Copy on write: Force normal %ld\n",
4673                               (long) flags);
4674                 sv_dump(sv);
4675             }
4676             SvFAKE_off(sv);
4677             SvREADONLY_off(sv);
4678             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4679             SvPV_set(sv, NULL);
4680             SvLEN_set(sv, 0);
4681             if (flags & SV_COW_DROP_PV) {
4682                 /* OK, so we don't need to copy our buffer.  */
4683                 SvPOK_off(sv);
4684             } else {
4685                 SvGROW(sv, cur + 1);
4686                 Move(pvx,SvPVX(sv),cur,char);
4687                 SvCUR_set(sv, cur);
4688                 *SvEND(sv) = '\0';
4689             }
4690             if (len) {
4691                 sv_release_COW(sv, pvx, next);
4692             } else {
4693                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4694             }
4695             if (DEBUG_C_TEST) {
4696                 sv_dump(sv);
4697             }
4698         }
4699         else if (IN_PERL_RUNTIME)
4700             Perl_croak_no_modify(aTHX);
4701     }
4702 #else
4703     if (SvREADONLY(sv)) {
4704         if (SvFAKE(sv)) {
4705             const char * const pvx = SvPVX_const(sv);
4706             const STRLEN len = SvCUR(sv);
4707             SvFAKE_off(sv);
4708             SvREADONLY_off(sv);
4709             SvPV_set(sv, NULL);
4710             SvLEN_set(sv, 0);
4711             SvGROW(sv, len + 1);
4712             Move(pvx,SvPVX(sv),len,char);
4713             *SvEND(sv) = '\0';
4714             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4715         }
4716         else if (IN_PERL_RUNTIME)
4717             Perl_croak_no_modify(aTHX);
4718     }
4719 #endif
4720     if (SvROK(sv))
4721         sv_unref_flags(sv, flags);
4722     else if (SvFAKE(sv) && isGV_with_GP(sv))
4723         sv_unglob(sv);
4724     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4725         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analagous
4726            to sv_unglob. We only need it here, so inline it.  */
4727         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4728         SV *const temp = newSV_type(new_type);
4729         void *const temp_p = SvANY(sv);
4730
4731         if (new_type == SVt_PVMG) {
4732             SvMAGIC_set(temp, SvMAGIC(sv));
4733             SvMAGIC_set(sv, NULL);
4734             SvSTASH_set(temp, SvSTASH(sv));
4735             SvSTASH_set(sv, NULL);
4736         }
4737         SvCUR_set(temp, SvCUR(sv));
4738         /* Remember that SvPVX is in the head, not the body. */
4739         if (SvLEN(temp)) {
4740             SvLEN_set(temp, SvLEN(sv));
4741             /* This signals "buffer is owned by someone else" in sv_clear,
4742                which is the least effort way to stop it freeing the buffer.
4743             */
4744             SvLEN_set(sv, SvLEN(sv)+1);
4745         } else {
4746             /* Their buffer is already owned by someone else. */
4747             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4748             SvLEN_set(temp, SvCUR(sv)+1);
4749         }
4750
4751         /* Now swap the rest of the bodies. */
4752
4753         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4754         SvFLAGS(sv) |= new_type;
4755         SvANY(sv) = SvANY(temp);
4756
4757         SvFLAGS(temp) &= ~(SVTYPEMASK);
4758         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4759         SvANY(temp) = temp_p;
4760
4761         SvREFCNT_dec(temp);
4762     }
4763 }
4764
4765 /*
4766 =for apidoc sv_chop
4767
4768 Efficient removal of characters from the beginning of the string buffer.
4769 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4770 the string buffer.  The C<ptr> becomes the first character of the adjusted
4771 string. Uses the "OOK hack".
4772 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4773 refer to the same chunk of data.
4774
4775 =cut
4776 */
4777
4778 void
4779 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4780 {
4781     STRLEN delta;
4782     STRLEN old_delta;
4783     U8 *p;
4784 #ifdef DEBUGGING
4785     const U8 *real_start;
4786 #endif
4787     STRLEN max_delta;
4788
4789     PERL_ARGS_ASSERT_SV_CHOP;
4790
4791     if (!ptr || !SvPOKp(sv))
4792         return;
4793     delta = ptr - SvPVX_const(sv);
4794     if (!delta) {
4795         /* Nothing to do.  */
4796         return;
4797     }
4798     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4799        nothing uses the value of ptr any more.  */
4800     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4801     if (ptr <= SvPVX_const(sv))
4802         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4803                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4804     SV_CHECK_THINKFIRST(sv);
4805     if (delta > max_delta)
4806         Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4807                    SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4808                    SvPVX_const(sv) + max_delta);
4809
4810     if (!SvOOK(sv)) {
4811         if (!SvLEN(sv)) { /* make copy of shared string */
4812             const char *pvx = SvPVX_const(sv);
4813             const STRLEN len = SvCUR(sv);
4814             SvGROW(sv, len + 1);
4815             Move(pvx,SvPVX(sv),len,char);
4816             *SvEND(sv) = '\0';
4817         }
4818         SvFLAGS(sv) |= SVf_OOK;
4819         old_delta = 0;
4820     } else {
4821         SvOOK_offset(sv, old_delta);
4822     }
4823     SvLEN_set(sv, SvLEN(sv) - delta);
4824     SvCUR_set(sv, SvCUR(sv) - delta);
4825     SvPV_set(sv, SvPVX(sv) + delta);
4826
4827     p = (U8 *)SvPVX_const(sv);
4828
4829     delta += old_delta;
4830
4831 #ifdef DEBUGGING
4832     real_start = p - delta;
4833 #endif
4834
4835     assert(delta);
4836     if (delta < 0x100) {
4837         *--p = (U8) delta;
4838     } else {
4839         *--p = 0;
4840         p -= sizeof(STRLEN);
4841         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4842     }
4843
4844 #ifdef DEBUGGING
4845     /* Fill the preceding buffer with sentinals to verify that no-one is
4846        using it.  */
4847     while (p > real_start) {
4848         --p;
4849         *p = (U8)PTR2UV(p);
4850     }
4851 #endif
4852 }
4853
4854 /*
4855 =for apidoc sv_catpvn
4856
4857 Concatenates the string onto the end of the string which is in the SV.  The
4858 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4859 status set, then the bytes appended should be valid UTF-8.
4860 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4861
4862 =for apidoc sv_catpvn_flags
4863
4864 Concatenates the string onto the end of the string which is in the SV.  The
4865 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4866 status set, then the bytes appended should be valid UTF-8.
4867 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4868 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4869 in terms of this function.
4870
4871 =cut
4872 */
4873
4874 void
4875 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4876 {
4877     dVAR;
4878     STRLEN dlen;
4879     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4880
4881     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4882
4883     SvGROW(dsv, dlen + slen + 1);
4884     if (sstr == dstr)
4885         sstr = SvPVX_const(dsv);
4886     Move(sstr, SvPVX(dsv) + dlen, slen, char);
4887     SvCUR_set(dsv, SvCUR(dsv) + slen);
4888     *SvEND(dsv) = '\0';
4889     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4890     SvTAINT(dsv);
4891     if (flags & SV_SMAGIC)
4892         SvSETMAGIC(dsv);
4893 }
4894
4895 /*
4896 =for apidoc sv_catsv
4897
4898 Concatenates the string from SV C<ssv> onto the end of the string in
4899 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4900 not 'set' magic.  See C<sv_catsv_mg>.
4901
4902 =for apidoc sv_catsv_flags
4903
4904 Concatenates the string from SV C<ssv> onto the end of the string in
4905 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4906 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4907 and C<sv_catsv_nomg> are implemented in terms of this function.
4908
4909 =cut */
4910
4911 void
4912 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
4913 {
4914     dVAR;
4915  
4916     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4917
4918    if (ssv) {
4919         STRLEN slen;
4920         const char *spv = SvPV_flags_const(ssv, slen, flags);
4921         if (spv) {
4922             /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4923                 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4924                 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4925                 get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
4926                 dsv->sv_flags doesn't have that bit set.
4927                 Andy Dougherty  12 Oct 2001
4928             */
4929             const I32 sutf8 = DO_UTF8(ssv);
4930             I32 dutf8;
4931
4932             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4933                 mg_get(dsv);
4934             dutf8 = DO_UTF8(dsv);
4935
4936             if (dutf8 != sutf8) {
4937                 if (dutf8) {
4938                     /* Not modifying source SV, so taking a temporary copy. */
4939                     SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
4940
4941                     sv_utf8_upgrade(csv);
4942                     spv = SvPV_const(csv, slen);
4943                 }
4944                 else
4945                     /* Leave enough space for the cat that's about to happen */
4946                     sv_utf8_upgrade_flags_grow(dsv, 0, slen);
4947             }
4948             sv_catpvn_nomg(dsv, spv, slen);
4949         }
4950     }
4951     if (flags & SV_SMAGIC)
4952         SvSETMAGIC(dsv);
4953 }
4954
4955 /*
4956 =for apidoc sv_catpv
4957
4958 Concatenates the string onto the end of the string which is in the SV.
4959 If the SV has the UTF-8 status set, then the bytes appended should be
4960 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
4961
4962 =cut */
4963
4964 void
4965 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
4966 {
4967     dVAR;
4968     register STRLEN len;
4969     STRLEN tlen;
4970     char *junk;
4971
4972     PERL_ARGS_ASSERT_SV_CATPV;
4973
4974     if (!ptr)
4975         return;
4976     junk = SvPV_force(sv, tlen);
4977     len = strlen(ptr);
4978     SvGROW(sv, tlen + len + 1);
4979     if (ptr == junk)
4980         ptr = SvPVX_const(sv);
4981     Move(ptr,SvPVX(sv)+tlen,len+1,char);
4982     SvCUR_set(sv, SvCUR(sv) + len);
4983     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4984     SvTAINT(sv);
4985 }
4986
4987 /*
4988 =for apidoc sv_catpv_flags
4989
4990 Concatenates the string onto the end of the string which is in the SV.
4991 If the SV has the UTF-8 status set, then the bytes appended should
4992 be valid UTF-8.  If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get>
4993 on the SVs if appropriate, else not.
4994
4995 =cut
4996 */
4997
4998 void
4999 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5000 {
5001     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5002     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5003 }
5004
5005 /*
5006 =for apidoc sv_catpv_mg
5007
5008 Like C<sv_catpv>, but also handles 'set' magic.
5009
5010 =cut
5011 */
5012
5013 void
5014 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
5015 {
5016     PERL_ARGS_ASSERT_SV_CATPV_MG;
5017
5018     sv_catpv(sv,ptr);
5019     SvSETMAGIC(sv);
5020 }
5021
5022 /*
5023 =for apidoc newSV
5024
5025 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5026 bytes of preallocated string space the SV should have.  An extra byte for a
5027 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5028 space is allocated.)  The reference count for the new SV is set to 1.
5029
5030 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5031 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5032 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5033 L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
5034 modules supporting older perls.
5035
5036 =cut
5037 */
5038
5039 SV *
5040 Perl_newSV(pTHX_ const STRLEN len)
5041 {
5042     dVAR;
5043     register SV *sv;
5044
5045     new_SV(sv);
5046     if (len) {
5047         sv_upgrade(sv, SVt_PV);
5048         SvGROW(sv, len + 1);
5049     }
5050     return sv;
5051 }
5052 /*
5053 =for apidoc sv_magicext
5054
5055 Adds magic to an SV, upgrading it if necessary. Applies the
5056 supplied vtable and returns a pointer to the magic added.
5057
5058 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5059 In particular, you can add magic to SvREADONLY SVs, and add more than
5060 one instance of the same 'how'.
5061
5062 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5063 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5064 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5065 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5066
5067 (This is now used as a subroutine by C<sv_magic>.)
5068
5069 =cut
5070 */
5071 MAGIC * 
5072 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5073                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5074 {
5075     dVAR;
5076     MAGIC* mg;
5077
5078     PERL_ARGS_ASSERT_SV_MAGICEXT;
5079
5080     SvUPGRADE(sv, SVt_PVMG);
5081     Newxz(mg, 1, MAGIC);
5082     mg->mg_moremagic = SvMAGIC(sv);
5083     SvMAGIC_set(sv, mg);
5084
5085     /* Sometimes a magic contains a reference loop, where the sv and
5086        object refer to each other.  To prevent a reference loop that
5087        would prevent such objects being freed, we look for such loops
5088        and if we find one we avoid incrementing the object refcount.
5089
5090        Note we cannot do this to avoid self-tie loops as intervening RV must
5091        have its REFCNT incremented to keep it in existence.
5092
5093     */
5094     if (!obj || obj == sv ||
5095         how == PERL_MAGIC_arylen ||
5096         how == PERL_MAGIC_symtab ||
5097         (SvTYPE(obj) == SVt_PVGV &&
5098             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5099              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5100              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5101     {
5102         mg->mg_obj = obj;
5103     }
5104     else {
5105         mg->mg_obj = SvREFCNT_inc_simple(obj);
5106         mg->mg_flags |= MGf_REFCOUNTED;
5107     }
5108
5109     /* Normal self-ties simply pass a null object, and instead of
5110        using mg_obj directly, use the SvTIED_obj macro to produce a
5111        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5112        with an RV obj pointing to the glob containing the PVIO.  In
5113        this case, to avoid a reference loop, we need to weaken the
5114        reference.
5115     */
5116
5117     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5118         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5119     {
5120       sv_rvweaken(obj);
5121     }
5122
5123     mg->mg_type = how;
5124     mg->mg_len = namlen;
5125     if (name) {
5126         if (namlen > 0)
5127             mg->mg_ptr = savepvn(name, namlen);
5128         else if (namlen == HEf_SVKEY) {
5129             /* Yes, this is casting away const. This is only for the case of
5130                HEf_SVKEY. I think we need to document this abberation of the
5131                constness of the API, rather than making name non-const, as
5132                that change propagating outwards a long way.  */
5133             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5134         } else
5135             mg->mg_ptr = (char *) name;
5136     }
5137     mg->mg_virtual = (MGVTBL *) vtable;
5138
5139     mg_magical(sv);
5140     if (SvGMAGICAL(sv))
5141         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5142     return mg;
5143 }
5144
5145 /*
5146 =for apidoc sv_magic
5147
5148 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5149 then adds a new magic item of type C<how> to the head of the magic list.
5150
5151 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5152 handling of the C<name> and C<namlen> arguments.
5153
5154 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5155 to add more than one instance of the same 'how'.
5156
5157 =cut
5158 */
5159
5160 void
5161 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5162              const char *const name, const I32 namlen)
5163 {
5164     dVAR;
5165     const MGVTBL *vtable;
5166     MAGIC* mg;
5167
5168     PERL_ARGS_ASSERT_SV_MAGIC;
5169
5170 #ifdef PERL_OLD_COPY_ON_WRITE
5171     if (SvIsCOW(sv))
5172         sv_force_normal_flags(sv, 0);
5173 #endif
5174     if (SvREADONLY(sv)) {
5175         if (
5176             /* its okay to attach magic to shared strings; the subsequent
5177              * upgrade to PVMG will unshare the string */
5178             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5179
5180             && IN_PERL_RUNTIME
5181             && how != PERL_MAGIC_regex_global
5182             && how != PERL_MAGIC_bm
5183             && how != PERL_MAGIC_fm
5184             && how != PERL_MAGIC_sv
5185             && how != PERL_MAGIC_backref
5186            )
5187         {
5188             Perl_croak_no_modify(aTHX);
5189         }
5190     }
5191     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5192         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5193             /* sv_magic() refuses to add a magic of the same 'how' as an
5194                existing one
5195              */
5196             if (how == PERL_MAGIC_taint) {
5197                 mg->mg_len |= 1;
5198                 /* Any scalar which already had taint magic on which someone
5199                    (erroneously?) did SvIOK_on() or similar will now be
5200                    incorrectly sporting public "OK" flags.  */
5201                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5202             }
5203             return;
5204         }
5205     }
5206
5207     switch (how) {
5208     case PERL_MAGIC_sv:
5209         vtable = &PL_vtbl_sv;
5210         break;
5211     case PERL_MAGIC_overload:
5212         vtable = &PL_vtbl_amagic;
5213         break;
5214     case PERL_MAGIC_overload_elem:
5215         vtable = &PL_vtbl_amagicelem;
5216         break;
5217     case PERL_MAGIC_overload_table:
5218         vtable = &PL_vtbl_ovrld;
5219         break;
5220     case PERL_MAGIC_bm:
5221         vtable = &PL_vtbl_bm;
5222         break;
5223     case PERL_MAGIC_regdata:
5224         vtable = &PL_vtbl_regdata;
5225         break;
5226     case PERL_MAGIC_regdatum:
5227         vtable = &PL_vtbl_regdatum;
5228         break;
5229     case PERL_MAGIC_env:
5230         vtable = &PL_vtbl_env;
5231         break;
5232     case PERL_MAGIC_fm:
5233         vtable = &PL_vtbl_fm;
5234         break;
5235     case PERL_MAGIC_envelem:
5236         vtable = &PL_vtbl_envelem;
5237         break;
5238     case PERL_MAGIC_regex_global:
5239         vtable = &PL_vtbl_mglob;
5240         break;
5241     case PERL_MAGIC_isa:
5242         vtable = &PL_vtbl_isa;
5243         break;
5244     case PERL_MAGIC_isaelem:
5245         vtable = &PL_vtbl_isaelem;
5246         break;
5247     case PERL_MAGIC_nkeys:
5248         vtable = &PL_vtbl_nkeys;
5249         break;
5250     case PERL_MAGIC_dbfile:
5251         vtable = NULL;
5252         break;
5253     case PERL_MAGIC_dbline:
5254         vtable = &PL_vtbl_dbline;
5255         break;
5256 #ifdef USE_LOCALE_COLLATE
5257     case PERL_MAGIC_collxfrm:
5258         vtable = &PL_vtbl_collxfrm;
5259         break;
5260 #endif /* USE_LOCALE_COLLATE */
5261     case PERL_MAGIC_tied:
5262         vtable = &PL_vtbl_pack;
5263         break;
5264     case PERL_MAGIC_tiedelem:
5265     case PERL_MAGIC_tiedscalar:
5266         vtable = &PL_vtbl_packelem;
5267         break;
5268     case PERL_MAGIC_qr:
5269         vtable = &PL_vtbl_regexp;
5270         break;
5271     case PERL_MAGIC_sig:
5272         vtable = &PL_vtbl_sig;
5273         break;
5274     case PERL_MAGIC_sigelem:
5275         vtable = &PL_vtbl_sigelem;
5276         break;
5277     case PERL_MAGIC_taint:
5278         vtable = &PL_vtbl_taint;
5279         break;
5280     case PERL_MAGIC_uvar:
5281         vtable = &PL_vtbl_uvar;
5282         break;
5283     case PERL_MAGIC_vec:
5284         vtable = &PL_vtbl_vec;
5285         break;
5286     case PERL_MAGIC_arylen_p:
5287     case PERL_MAGIC_rhash:
5288     case PERL_MAGIC_symtab:
5289     case PERL_MAGIC_vstring:
5290     case PERL_MAGIC_checkcall:
5291         vtable = NULL;
5292         break;
5293     case PERL_MAGIC_utf8:
5294         vtable = &PL_vtbl_utf8;
5295         break;
5296     case PERL_MAGIC_substr:
5297         vtable = &PL_vtbl_substr;
5298         break;
5299     case PERL_MAGIC_defelem:
5300         vtable = &PL_vtbl_defelem;
5301         break;
5302     case PERL_MAGIC_arylen:
5303         vtable = &PL_vtbl_arylen;
5304         break;
5305     case PERL_MAGIC_pos:
5306         vtable = &PL_vtbl_pos;
5307         break;
5308     case PERL_MAGIC_backref:
5309         vtable = &PL_vtbl_backref;
5310         break;
5311     case PERL_MAGIC_hintselem:
5312         vtable = &PL_vtbl_hintselem;
5313         break;
5314     case PERL_MAGIC_hints:
5315         vtable = &PL_vtbl_hints;
5316         break;
5317     case PERL_MAGIC_ext:
5318         /* Reserved for use by extensions not perl internals.           */
5319         /* Useful for attaching extension internal data to perl vars.   */
5320         /* Note that multiple extensions may clash if magical scalars   */
5321         /* etc holding private data from one are passed to another.     */
5322         vtable = NULL;
5323         break;
5324     default:
5325         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5326     }
5327
5328     /* Rest of work is done else where */
5329     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5330
5331     switch (how) {
5332     case PERL_MAGIC_taint:
5333         mg->mg_len = 1;
5334         break;
5335     case PERL_MAGIC_ext:
5336     case PERL_MAGIC_dbfile:
5337         SvRMAGICAL_on(sv);
5338         break;
5339     }
5340 }
5341
5342 int
5343 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5344 {
5345     MAGIC* mg;
5346     MAGIC** mgp;
5347
5348     assert(flags <= 1);
5349
5350     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5351         return 0;
5352     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5353     for (mg = *mgp; mg; mg = *mgp) {
5354         const MGVTBL* const virt = mg->mg_virtual;
5355         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5356             *mgp = mg->mg_moremagic;
5357             if (virt && virt->svt_free)
5358                 virt->svt_free(aTHX_ sv, mg);
5359             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5360                 if (mg->mg_len > 0)
5361                     Safefree(mg->mg_ptr);
5362                 else if (mg->mg_len == HEf_SVKEY)
5363                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5364                 else if (mg->mg_type == PERL_MAGIC_utf8)
5365                     Safefree(mg->mg_ptr);
5366             }
5367             if (mg->mg_flags & MGf_REFCOUNTED)
5368                 SvREFCNT_dec(mg->mg_obj);
5369             Safefree(mg);
5370         }
5371         else
5372             mgp = &mg->mg_moremagic;
5373     }
5374     if (SvMAGIC(sv)) {
5375         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5376             mg_magical(sv);     /*    else fix the flags now */
5377     }
5378     else {
5379         SvMAGICAL_off(sv);
5380         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5381     }
5382     return 0;
5383 }
5384
5385 /*
5386 =for apidoc sv_unmagic
5387
5388 Removes all magic of type C<type> from an SV.
5389
5390 =cut
5391 */
5392
5393 int
5394 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5395 {
5396     PERL_ARGS_ASSERT_SV_UNMAGIC;
5397     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5398 }
5399
5400 /*
5401 =for apidoc sv_unmagicext
5402
5403 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5404
5405 =cut
5406 */
5407
5408 int
5409 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5410 {
5411     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5412     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5413 }
5414
5415 /*
5416 =for apidoc sv_rvweaken
5417
5418 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5419 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5420 push a back-reference to this RV onto the array of backreferences
5421 associated with that magic. If the RV is magical, set magic will be
5422 called after the RV is cleared.
5423
5424 =cut
5425 */
5426
5427 SV *
5428 Perl_sv_rvweaken(pTHX_ SV *const sv)
5429 {
5430     SV *tsv;
5431
5432     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5433
5434     if (!SvOK(sv))  /* let undefs pass */
5435         return sv;
5436     if (!SvROK(sv))
5437         Perl_croak(aTHX_ "Can't weaken a nonreference");
5438     else if (SvWEAKREF(sv)) {
5439         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5440         return sv;
5441     }
5442     tsv = SvRV(sv);
5443     Perl_sv_add_backref(aTHX_ tsv, sv);
5444     SvWEAKREF_on(sv);
5445     SvREFCNT_dec(tsv);
5446     return sv;
5447 }
5448
5449 /* Give tsv backref magic if it hasn't already got it, then push a
5450  * back-reference to sv onto the array associated with the backref magic.
5451  *
5452  * As an optimisation, if there's only one backref and it's not an AV,
5453  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5454  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5455  * active.)
5456  *
5457  * If an HV's backref is stored in magic, it is moved back to HvAUX.
5458  */
5459
5460 /* A discussion about the backreferences array and its refcount:
5461  *
5462  * The AV holding the backreferences is pointed to either as the mg_obj of
5463  * PERL_MAGIC_backref, or in the specific case of a HV that has the hv_aux
5464  * structure, from the xhv_backreferences field. (A HV without hv_aux will
5465  * have the standard magic instead.) The array is created with a refcount
5466  * of 2. This means that if during global destruction the array gets
5467  * picked on before its parent to have its refcount decremented by the
5468  * random zapper, it won't actually be freed, meaning it's still there for
5469  * when its parent gets freed.
5470  *
5471  * When the parent SV is freed, the extra ref is killed by
5472  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5473  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5474  *
5475  * When a single backref SV is stored directly, it is not reference
5476  * counted.
5477  */
5478
5479 void
5480 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5481 {
5482     dVAR;
5483     SV **svp;
5484     AV *av = NULL;
5485     MAGIC *mg = NULL;
5486
5487     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5488
5489     /* find slot to store array or singleton backref */
5490
5491     if (SvTYPE(tsv) == SVt_PVHV) {
5492         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5493
5494         if (!*svp) {
5495             if ((mg = mg_find(tsv, PERL_MAGIC_backref))) {
5496                 /* Aha. They've got it stowed in magic instead.
5497                  * Move it back to xhv_backreferences */
5498                 *svp = mg->mg_obj;
5499                 /* Stop mg_free decreasing the reference count.  */
5500                 mg->mg_obj = NULL;
5501                 /* Stop mg_free even calling the destructor, given that
5502                    there's no AV to free up.  */
5503                 mg->mg_virtual = 0;
5504                 sv_unmagic(tsv, PERL_MAGIC_backref);
5505                 mg = NULL;
5506             }
5507         }
5508     } else {
5509         if (! ((mg =
5510             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5511         {
5512             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5513             mg = mg_find(tsv, PERL_MAGIC_backref);
5514         }
5515         svp = &(mg->mg_obj);
5516     }
5517
5518     /* create or retrieve the array */
5519
5520     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5521         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5522     ) {
5523         /* create array */
5524         av = newAV();
5525         AvREAL_off(av);
5526         SvREFCNT_inc_simple_void(av);
5527         /* av now has a refcnt of 2; see discussion above */
5528         if (*svp) {
5529             /* move single existing backref to the array */
5530             av_extend(av, 1);
5531             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5532         }
5533         *svp = (SV*)av;
5534         if (mg)
5535             mg->mg_flags |= MGf_REFCOUNTED;
5536     }
5537     else
5538         av = MUTABLE_AV(*svp);
5539
5540     if (!av) {
5541         /* optimisation: store single backref directly in HvAUX or mg_obj */
5542         *svp = sv;
5543         return;
5544     }
5545     /* push new backref */
5546     assert(SvTYPE(av) == SVt_PVAV);
5547     if (AvFILLp(av) >= AvMAX(av)) {
5548         av_extend(av, AvFILLp(av)+1);
5549     }
5550     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5551 }
5552
5553 /* delete a back-reference to ourselves from the backref magic associated
5554  * with the SV we point to.
5555  */
5556
5557 void
5558 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5559 {
5560     dVAR;
5561     SV **svp = NULL;
5562
5563     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5564
5565     if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
5566         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5567     }
5568     if (!svp || !*svp) {
5569         MAGIC *const mg
5570             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5571         svp =  mg ? &(mg->mg_obj) : NULL;
5572     }
5573
5574     if (!svp || !*svp)
5575         Perl_croak(aTHX_ "panic: del_backref");
5576
5577     if (SvTYPE(*svp) == SVt_PVAV) {
5578 #ifdef DEBUGGING
5579         int count = 1;
5580 #endif
5581         AV * const av = (AV*)*svp;
5582         SSize_t fill;
5583         assert(!SvIS_FREED(av));
5584         fill = AvFILLp(av);
5585         assert(fill > -1);
5586         svp = AvARRAY(av);
5587         /* for an SV with N weak references to it, if all those
5588          * weak refs are deleted, then sv_del_backref will be called
5589          * N times and O(N^2) compares will be done within the backref
5590          * array. To ameliorate this potential slowness, we:
5591          * 1) make sure this code is as tight as possible;
5592          * 2) when looking for SV, look for it at both the head and tail of the
5593          *    array first before searching the rest, since some create/destroy
5594          *    patterns will cause the backrefs to be freed in order.
5595          */
5596         if (*svp == sv) {
5597             AvARRAY(av)++;
5598             AvMAX(av)--;
5599         }
5600         else {
5601             SV **p = &svp[fill];
5602             SV *const topsv = *p;
5603             if (topsv != sv) {
5604 #ifdef DEBUGGING
5605                 count = 0;
5606 #endif
5607                 while (--p > svp) {
5608                     if (*p == sv) {
5609                         /* We weren't the last entry.
5610                            An unordered list has this property that you
5611                            can take the last element off the end to fill
5612                            the hole, and it's still an unordered list :-)
5613                         */
5614                         *p = topsv;
5615 #ifdef DEBUGGING
5616                         count++;
5617 #else
5618                         break; /* should only be one */
5619 #endif
5620                     }
5621                 }
5622             }
5623         }
5624         assert(count ==1);
5625         AvFILLp(av) = fill-1;
5626     }
5627     else {
5628         /* optimisation: only a single backref, stored directly */
5629         if (*svp != sv)
5630             Perl_croak(aTHX_ "panic: del_backref");
5631         *svp = NULL;
5632     }
5633
5634 }
5635
5636 void
5637 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5638 {
5639     SV **svp;
5640     SV **last;
5641     bool is_array;
5642
5643     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5644
5645     if (!av)
5646         return;
5647
5648     is_array = (SvTYPE(av) == SVt_PVAV);
5649     if (is_array) {
5650         assert(!SvIS_FREED(av));
5651         svp = AvARRAY(av);
5652         if (svp)
5653             last = svp + AvFILLp(av);
5654     }
5655     else {
5656         /* optimisation: only a single backref, stored directly */
5657         svp = (SV**)&av;
5658         last = svp;
5659     }
5660
5661     if (svp) {
5662         while (svp <= last) {
5663             if (*svp) {
5664                 SV *const referrer = *svp;
5665                 if (SvWEAKREF(referrer)) {
5666                     /* XXX Should we check that it hasn't changed? */
5667                     assert(SvROK(referrer));
5668                     SvRV_set(referrer, 0);
5669                     SvOK_off(referrer);
5670                     SvWEAKREF_off(referrer);
5671                     SvSETMAGIC(referrer);
5672                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5673                            SvTYPE(referrer) == SVt_PVLV) {
5674                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5675                     /* You lookin' at me?  */
5676                     assert(GvSTASH(referrer));
5677                     assert(GvSTASH(referrer) == (const HV *)sv);
5678                     GvSTASH(referrer) = 0;
5679                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5680                            SvTYPE(referrer) == SVt_PVFM) {
5681                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5682                         /* You lookin' at me?  */
5683                         assert(CvSTASH(referrer));
5684                         assert(CvSTASH(referrer) == (const HV *)sv);
5685                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5686                     }
5687                     else {
5688                         assert(SvTYPE(sv) == SVt_PVGV);
5689                         /* You lookin' at me?  */
5690                         assert(CvGV(referrer));
5691                         assert(CvGV(referrer) == (const GV *)sv);
5692                         anonymise_cv_maybe(MUTABLE_GV(sv),
5693                                                 MUTABLE_CV(referrer));
5694                     }
5695
5696                 } else {
5697                     Perl_croak(aTHX_
5698                                "panic: magic_killbackrefs (flags=%"UVxf")",
5699                                (UV)SvFLAGS(referrer));
5700                 }
5701
5702                 if (is_array)
5703                     *svp = NULL;
5704             }
5705             svp++;
5706         }
5707     }
5708     if (is_array) {
5709         AvFILLp(av) = -1;
5710         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5711     }
5712     return;
5713 }
5714
5715 /*
5716 =for apidoc sv_insert
5717
5718 Inserts a string at the specified offset/length within the SV. Similar to
5719 the Perl substr() function. Handles get magic.
5720
5721 =for apidoc sv_insert_flags
5722
5723 Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5724
5725 =cut
5726 */
5727
5728 void
5729 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5730 {
5731     dVAR;
5732     register char *big;
5733     register char *mid;
5734     register char *midend;
5735     register char *bigend;
5736     register I32 i;
5737     STRLEN curlen;
5738
5739     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5740
5741     if (!bigstr)
5742         Perl_croak(aTHX_ "Can't modify non-existent substring");
5743     SvPV_force_flags(bigstr, curlen, flags);
5744     (void)SvPOK_only_UTF8(bigstr);
5745     if (offset + len > curlen) {
5746         SvGROW(bigstr, offset+len+1);
5747         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5748         SvCUR_set(bigstr, offset+len);
5749     }
5750
5751     SvTAINT(bigstr);
5752     i = littlelen - len;
5753     if (i > 0) {                        /* string might grow */
5754         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5755         mid = big + offset + len;
5756         midend = bigend = big + SvCUR(bigstr);
5757         bigend += i;
5758         *bigend = '\0';
5759         while (midend > mid)            /* shove everything down */
5760             *--bigend = *--midend;
5761         Move(little,big+offset,littlelen,char);
5762         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5763         SvSETMAGIC(bigstr);
5764         return;
5765     }
5766     else if (i == 0) {
5767         Move(little,SvPVX(bigstr)+offset,len,char);
5768         SvSETMAGIC(bigstr);
5769         return;
5770     }
5771
5772     big = SvPVX(bigstr);
5773     mid = big + offset;
5774     midend = mid + len;
5775     bigend = big + SvCUR(bigstr);
5776
5777     if (midend > bigend)
5778         Perl_croak(aTHX_ "panic: sv_insert");
5779
5780     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5781         if (littlelen) {
5782             Move(little, mid, littlelen,char);
5783             mid += littlelen;
5784         }
5785         i = bigend - midend;
5786         if (i > 0) {
5787             Move(midend, mid, i,char);
5788             mid += i;
5789         }
5790         *mid = '\0';
5791         SvCUR_set(bigstr, mid - big);
5792     }
5793     else if ((i = mid - big)) { /* faster from front */
5794         midend -= littlelen;
5795         mid = midend;
5796         Move(big, midend - i, i, char);
5797         sv_chop(bigstr,midend-i);
5798         if (littlelen)
5799             Move(little, mid, littlelen,char);
5800     }
5801     else if (littlelen) {
5802         midend -= littlelen;
5803         sv_chop(bigstr,midend);
5804         Move(little,midend,littlelen,char);
5805     }
5806     else {
5807         sv_chop(bigstr,midend);
5808     }
5809     SvSETMAGIC(bigstr);
5810 }
5811
5812 /*
5813 =for apidoc sv_replace
5814
5815 Make the first argument a copy of the second, then delete the original.
5816 The target SV physically takes over ownership of the body of the source SV
5817 and inherits its flags; however, the target keeps any magic it owns,
5818 and any magic in the source is discarded.
5819 Note that this is a rather specialist SV copying operation; most of the
5820 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5821
5822 =cut
5823 */
5824
5825 void
5826 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5827 {
5828     dVAR;
5829     const U32 refcnt = SvREFCNT(sv);
5830
5831     PERL_ARGS_ASSERT_SV_REPLACE;
5832
5833     SV_CHECK_THINKFIRST_COW_DROP(sv);
5834     if (SvREFCNT(nsv) != 1) {
5835         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5836                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5837     }
5838     if (SvMAGICAL(sv)) {
5839         if (SvMAGICAL(nsv))
5840             mg_free(nsv);
5841         else
5842             sv_upgrade(nsv, SVt_PVMG);
5843         SvMAGIC_set(nsv, SvMAGIC(sv));
5844         SvFLAGS(nsv) |= SvMAGICAL(sv);
5845         SvMAGICAL_off(sv);
5846         SvMAGIC_set(sv, NULL);
5847     }
5848     SvREFCNT(sv) = 0;
5849     sv_clear(sv);
5850     assert(!SvREFCNT(sv));
5851 #ifdef DEBUG_LEAKING_SCALARS
5852     sv->sv_flags  = nsv->sv_flags;
5853     sv->sv_any    = nsv->sv_any;
5854     sv->sv_refcnt = nsv->sv_refcnt;
5855     sv->sv_u      = nsv->sv_u;
5856 #else
5857     StructCopy(nsv,sv,SV);
5858 #endif
5859     if(SvTYPE(sv) == SVt_IV) {
5860         SvANY(sv)
5861             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5862     }
5863         
5864
5865 #ifdef PERL_OLD_COPY_ON_WRITE
5866     if (SvIsCOW_normal(nsv)) {
5867         /* We need to follow the pointers around the loop to make the
5868            previous SV point to sv, rather than nsv.  */
5869         SV *next;
5870         SV *current = nsv;
5871         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5872             assert(next);
5873             current = next;
5874             assert(SvPVX_const(current) == SvPVX_const(nsv));
5875         }
5876         /* Make the SV before us point to the SV after us.  */
5877         if (DEBUG_C_TEST) {
5878             PerlIO_printf(Perl_debug_log, "previous is\n");
5879             sv_dump(current);
5880             PerlIO_printf(Perl_debug_log,
5881                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5882                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5883         }
5884         SV_COW_NEXT_SV_SET(current, sv);
5885     }
5886 #endif
5887     SvREFCNT(sv) = refcnt;
5888     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5889     SvREFCNT(nsv) = 0;
5890     del_SV(nsv);
5891 }
5892
5893 /* We're about to free a GV which has a CV that refers back to us.
5894  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5895  * field) */
5896
5897 STATIC void
5898 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5899 {
5900     char *stash;
5901     SV *gvname;
5902     GV *anongv;
5903
5904     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5905
5906     /* be assertive! */
5907     assert(SvREFCNT(gv) == 0);
5908     assert(isGV(gv) && isGV_with_GP(gv));
5909     assert(GvGP(gv));
5910     assert(!CvANON(cv));
5911     assert(CvGV(cv) == gv);
5912
5913     /* will the CV shortly be freed by gp_free() ? */
5914     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
5915         SvANY(cv)->xcv_gv = NULL;
5916         return;
5917     }
5918
5919     /* if not, anonymise: */
5920     stash  = GvSTASH(gv) ? HvNAME(GvSTASH(gv)) : NULL;
5921     gvname = Perl_newSVpvf(aTHX_ "%s::__ANON__",
5922                                         stash ? stash : "__ANON__");
5923     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5924     SvREFCNT_dec(gvname);
5925
5926     CvANON_on(cv);
5927     CvCVGV_RC_on(cv);
5928     SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
5929 }
5930
5931
5932 /*
5933 =for apidoc sv_clear
5934
5935 Clear an SV: call any destructors, free up any memory used by the body,
5936 and free the body itself. The SV's head is I<not> freed, although
5937 its type is set to all 1's so that it won't inadvertently be assumed
5938 to be live during global destruction etc.
5939 This function should only be called when REFCNT is zero. Most of the time
5940 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5941 instead.
5942
5943 =cut
5944 */
5945
5946 void
5947 Perl_sv_clear(pTHX_ SV *const orig_sv)
5948 {
5949     dVAR;
5950     HV *stash;
5951     U32 type;
5952     const struct body_details *sv_type_details;
5953     SV* iter_sv = NULL;
5954     SV* next_sv = NULL;
5955     register SV *sv = orig_sv;
5956
5957     PERL_ARGS_ASSERT_SV_CLEAR;
5958
5959     /* within this loop, sv is the SV currently being freed, and
5960      * iter_sv is the most recent AV or whatever that's being iterated
5961      * over to provide more SVs */
5962
5963     while (sv) {
5964
5965         type = SvTYPE(sv);
5966
5967         assert(SvREFCNT(sv) == 0);
5968         assert(SvTYPE(sv) != SVTYPEMASK);
5969
5970         if (type <= SVt_IV) {
5971             /* See the comment in sv.h about the collusion between this
5972              * early return and the overloading of the NULL slots in the
5973              * size table.  */
5974             if (SvROK(sv))
5975                 goto free_rv;
5976             SvFLAGS(sv) &= SVf_BREAK;
5977             SvFLAGS(sv) |= SVTYPEMASK;
5978             goto free_head;
5979         }
5980
5981         if (SvOBJECT(sv)) {
5982             if (PL_defstash &&  /* Still have a symbol table? */
5983                 SvDESTROYABLE(sv))
5984             {
5985                 dSP;
5986                 HV* stash;
5987                 do {
5988                     CV* destructor;
5989                     stash = SvSTASH(sv);
5990                     destructor = StashHANDLER(stash,DESTROY);
5991                     if (destructor
5992                         /* A constant subroutine can have no side effects, so
5993                            don't bother calling it.  */
5994                         && !CvCONST(destructor)
5995                         /* Don't bother calling an empty destructor */
5996                         && (CvISXSUB(destructor)
5997                         || (CvSTART(destructor)
5998                             && (CvSTART(destructor)->op_next->op_type
5999                                                 != OP_LEAVESUB))))
6000                     {
6001                         SV* const tmpref = newRV(sv);
6002                         SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6003                         ENTER;
6004                         PUSHSTACKi(PERLSI_DESTROY);
6005                         EXTEND(SP, 2);
6006                         PUSHMARK(SP);
6007                         PUSHs(tmpref);
6008                         PUTBACK;
6009                         call_sv(MUTABLE_SV(destructor),
6010                                     G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6011                         POPSTACK;
6012                         SPAGAIN;
6013                         LEAVE;
6014                         if(SvREFCNT(tmpref) < 2) {
6015                             /* tmpref is not kept alive! */
6016                             SvREFCNT(sv)--;
6017                             SvRV_set(tmpref, NULL);
6018                             SvROK_off(tmpref);
6019                         }
6020                         SvREFCNT_dec(tmpref);
6021                     }
6022                 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6023
6024
6025                 if (SvREFCNT(sv)) {
6026                     if (PL_in_clean_objs)
6027                         Perl_croak(aTHX_
6028                             "DESTROY created new reference to dead object '%s'",
6029                             HvNAME_get(stash));
6030                     /* DESTROY gave object new lease on life */
6031                     goto get_next_sv;
6032                 }
6033             }
6034
6035             if (SvOBJECT(sv)) {
6036                 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6037                 SvOBJECT_off(sv);       /* Curse the object. */
6038                 if (type != SVt_PVIO)
6039                     --PL_sv_objcount;/* XXX Might want something more general */
6040             }
6041         }
6042         if (type >= SVt_PVMG) {
6043             if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6044                 SvREFCNT_dec(SvOURSTASH(sv));
6045             } else if (SvMAGIC(sv))
6046                 mg_free(sv);
6047             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6048                 SvREFCNT_dec(SvSTASH(sv));
6049         }
6050         switch (type) {
6051             /* case SVt_BIND: */
6052         case SVt_PVIO:
6053             if (IoIFP(sv) &&
6054                 IoIFP(sv) != PerlIO_stdin() &&
6055                 IoIFP(sv) != PerlIO_stdout() &&
6056                 IoIFP(sv) != PerlIO_stderr() &&
6057                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6058             {
6059                 io_close(MUTABLE_IO(sv), FALSE);
6060             }
6061             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6062                 PerlDir_close(IoDIRP(sv));
6063             IoDIRP(sv) = (DIR*)NULL;
6064             Safefree(IoTOP_NAME(sv));
6065             Safefree(IoFMT_NAME(sv));
6066             Safefree(IoBOTTOM_NAME(sv));
6067             goto freescalar;
6068         case SVt_REGEXP:
6069             /* FIXME for plugins */
6070             pregfree2((REGEXP*) sv);
6071             goto freescalar;
6072         case SVt_PVCV:
6073         case SVt_PVFM:
6074             cv_undef(MUTABLE_CV(sv));
6075             /* If we're in a stash, we don't own a reference to it.
6076              * However it does have a back reference to us, which needs to
6077              * be cleared.  */
6078             if ((stash = CvSTASH(sv)))
6079                 sv_del_backref(MUTABLE_SV(stash), sv);
6080             goto freescalar;
6081         case SVt_PVHV:
6082             if (PL_last_swash_hv == (const HV *)sv) {
6083                 PL_last_swash_hv = NULL;
6084             }
6085             Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6086             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6087             break;
6088         case SVt_PVAV:
6089             {
6090                 AV* av = MUTABLE_AV(sv);
6091                 if (PL_comppad == av) {
6092                     PL_comppad = NULL;
6093                     PL_curpad = NULL;
6094                 }
6095                 if (AvREAL(av) && AvFILLp(av) > -1) {
6096                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6097                     /* save old iter_sv in top-most slot of AV,
6098                      * and pray that it doesn't get wiped in the meantime */
6099                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6100                     iter_sv = sv;
6101                     goto get_next_sv; /* process this new sv */
6102                 }
6103                 Safefree(AvALLOC(av));
6104             }
6105
6106             break;
6107         case SVt_PVLV:
6108             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6109                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6110                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6111                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6112             }
6113             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6114                 SvREFCNT_dec(LvTARG(sv));
6115         case SVt_PVGV:
6116             if (isGV_with_GP(sv)) {
6117                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6118                    && HvENAME_get(stash))
6119                     mro_method_changed_in(stash);
6120                 gp_free(MUTABLE_GV(sv));
6121                 if (GvNAME_HEK(sv))
6122                     unshare_hek(GvNAME_HEK(sv));
6123                 /* If we're in a stash, we don't own a reference to it.
6124                  * However it does have a back reference to us, which
6125                  * needs to be cleared.  */
6126                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6127                         sv_del_backref(MUTABLE_SV(stash), sv);
6128             }
6129             /* FIXME. There are probably more unreferenced pointers to SVs
6130              * in the interpreter struct that we should check and tidy in
6131              * a similar fashion to this:  */
6132             if ((const GV *)sv == PL_last_in_gv)
6133                 PL_last_in_gv = NULL;
6134         case SVt_PVMG:
6135         case SVt_PVNV:
6136         case SVt_PVIV:
6137         case SVt_PV:
6138           freescalar:
6139             /* Don't bother with SvOOK_off(sv); as we're only going to
6140              * free it.  */
6141             if (SvOOK(sv)) {
6142                 STRLEN offset;
6143                 SvOOK_offset(sv, offset);
6144                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6145                 /* Don't even bother with turning off the OOK flag.  */
6146             }
6147             if (SvROK(sv)) {
6148             free_rv:
6149                 {
6150                     SV * const target = SvRV(sv);
6151                     if (SvWEAKREF(sv))
6152                         sv_del_backref(target, sv);
6153                     else
6154                         next_sv = target;
6155                 }
6156             }
6157 #ifdef PERL_OLD_COPY_ON_WRITE
6158             else if (SvPVX_const(sv)
6159                      && !(SvTYPE(sv) == SVt_PVIO
6160                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6161             {
6162                 if (SvIsCOW(sv)) {
6163                     if (DEBUG_C_TEST) {
6164                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6165                         sv_dump(sv);
6166                     }
6167                     if (SvLEN(sv)) {
6168                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6169                     } else {
6170                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6171                     }
6172
6173                     SvFAKE_off(sv);
6174                 } else if (SvLEN(sv)) {
6175                     Safefree(SvPVX_const(sv));
6176                 }
6177             }
6178 #else
6179             else if (SvPVX_const(sv) && SvLEN(sv)
6180                      && !(SvTYPE(sv) == SVt_PVIO
6181                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6182                 Safefree(SvPVX_mutable(sv));
6183             else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
6184                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6185                 SvFAKE_off(sv);
6186             }
6187 #endif
6188             break;
6189         case SVt_NV:
6190             break;
6191         }
6192
6193       free_body:
6194
6195         SvFLAGS(sv) &= SVf_BREAK;
6196         SvFLAGS(sv) |= SVTYPEMASK;
6197
6198         sv_type_details = bodies_by_type + type;
6199         if (sv_type_details->arena) {
6200             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6201                      &PL_body_roots[type]);
6202         }
6203         else if (sv_type_details->body_size) {
6204             safefree(SvANY(sv));
6205         }
6206
6207       free_head:
6208         /* caller is responsible for freeing the head of the original sv */
6209         if (sv != orig_sv && !SvREFCNT(sv))
6210             del_SV(sv);
6211
6212         /* grab and free next sv, if any */
6213       get_next_sv:
6214         while (1) {
6215             sv = NULL;
6216             if (next_sv) {
6217                 sv = next_sv;
6218                 next_sv = NULL;
6219             }
6220             else if (!iter_sv) {
6221                 break;
6222             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6223                 AV *const av = (AV*)iter_sv;
6224                 if (AvFILLp(av) > -1) {
6225                     sv = AvARRAY(av)[AvFILLp(av)--];
6226                 }
6227                 else { /* no more elements of current AV to free */
6228                     sv = iter_sv;
6229                     type = SvTYPE(sv);
6230                     /* restore previous value, squirrelled away */
6231                     iter_sv = AvARRAY(av)[AvMAX(av)];
6232                     Safefree(AvALLOC(av));
6233                     goto free_body;
6234                 }
6235             }
6236
6237             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6238
6239             if (!sv)
6240                 continue;
6241             if (!SvREFCNT(sv)) {
6242                 sv_free(sv);
6243                 continue;
6244             }
6245             if (--(SvREFCNT(sv)))
6246                 continue;
6247 #ifdef DEBUGGING
6248             if (SvTEMP(sv)) {
6249                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6250                          "Attempt to free temp prematurely: SV 0x%"UVxf
6251                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6252                 continue;
6253             }
6254 #endif
6255             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6256                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6257                 SvREFCNT(sv) = (~(U32)0)/2;
6258                 continue;
6259             }
6260             break;
6261         } /* while 1 */
6262
6263     } /* while sv */
6264 }
6265
6266 /*
6267 =for apidoc sv_newref
6268
6269 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
6270 instead.
6271
6272 =cut
6273 */
6274
6275 SV *
6276 Perl_sv_newref(pTHX_ SV *const sv)
6277 {
6278     PERL_UNUSED_CONTEXT;
6279     if (sv)
6280         (SvREFCNT(sv))++;
6281     return sv;
6282 }
6283
6284 /*
6285 =for apidoc sv_free
6286
6287 Decrement an SV's reference count, and if it drops to zero, call
6288 C<sv_clear> to invoke destructors and free up any memory used by
6289 the body; finally, deallocate the SV's head itself.
6290 Normally called via a wrapper macro C<SvREFCNT_dec>.
6291
6292 =cut
6293 */
6294
6295 void
6296 Perl_sv_free(pTHX_ SV *const sv)
6297 {
6298     dVAR;
6299     if (!sv)
6300         return;
6301     if (SvREFCNT(sv) == 0) {
6302         if (SvFLAGS(sv) & SVf_BREAK)
6303             /* this SV's refcnt has been artificially decremented to
6304              * trigger cleanup */
6305             return;
6306         if (PL_in_clean_all) /* All is fair */
6307             return;
6308         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6309             /* make sure SvREFCNT(sv)==0 happens very seldom */
6310             SvREFCNT(sv) = (~(U32)0)/2;
6311             return;
6312         }
6313         if (ckWARN_d(WARN_INTERNAL)) {
6314 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6315             Perl_dump_sv_child(aTHX_ sv);
6316 #else
6317   #ifdef DEBUG_LEAKING_SCALARS
6318             sv_dump(sv);
6319   #endif
6320 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6321             if (PL_warnhook == PERL_WARNHOOK_FATAL
6322                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6323                 /* Don't let Perl_warner cause us to escape our fate:  */
6324                 abort();
6325             }
6326 #endif
6327             /* This may not return:  */
6328             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6329                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6330                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6331 #endif
6332         }
6333 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6334         abort();
6335 #endif
6336         return;
6337     }
6338     if (--(SvREFCNT(sv)) > 0)
6339         return;
6340     Perl_sv_free2(aTHX_ sv);
6341 }
6342
6343 void
6344 Perl_sv_free2(pTHX_ SV *const sv)
6345 {
6346     dVAR;
6347
6348     PERL_ARGS_ASSERT_SV_FREE2;
6349
6350 #ifdef DEBUGGING
6351     if (SvTEMP(sv)) {
6352         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6353                          "Attempt to free temp prematurely: SV 0x%"UVxf
6354                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6355         return;
6356     }
6357 #endif
6358     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6359         /* make sure SvREFCNT(sv)==0 happens very seldom */
6360         SvREFCNT(sv) = (~(U32)0)/2;
6361         return;
6362     }
6363     sv_clear(sv);
6364     if (! SvREFCNT(sv))
6365         del_SV(sv);
6366 }
6367
6368 /*
6369 =for apidoc sv_len
6370
6371 Returns the length of the string in the SV. Handles magic and type
6372 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6373
6374 =cut
6375 */
6376
6377 STRLEN
6378 Perl_sv_len(pTHX_ register SV *const sv)
6379 {
6380     STRLEN len;
6381
6382     if (!sv)
6383         return 0;
6384
6385     if (SvGMAGICAL(sv))
6386         len = mg_length(sv);
6387     else
6388         (void)SvPV_const(sv, len);
6389     return len;
6390 }
6391
6392 /*
6393 =for apidoc sv_len_utf8
6394
6395 Returns the number of characters in the string in an SV, counting wide
6396 UTF-8 bytes as a single character. Handles magic and type coercion.
6397
6398 =cut
6399 */
6400
6401 /*
6402  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6403  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6404  * (Note that the mg_len is not the length of the mg_ptr field.
6405  * This allows the cache to store the character length of the string without
6406  * needing to malloc() extra storage to attach to the mg_ptr.)
6407  *
6408  */
6409
6410 STRLEN
6411 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6412 {
6413     if (!sv)
6414         return 0;
6415
6416     if (SvGMAGICAL(sv))
6417         return mg_length(sv);
6418     else
6419     {
6420         STRLEN len;
6421         const U8 *s = (U8*)SvPV_const(sv, len);
6422
6423         if (PL_utf8cache) {
6424             STRLEN ulen;
6425             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6426
6427             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6428                 if (mg->mg_len != -1)
6429                     ulen = mg->mg_len;
6430                 else {
6431                     /* We can use the offset cache for a headstart.
6432                        The longer value is stored in the first pair.  */
6433                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6434
6435                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6436                                                        s + len);
6437                 }
6438                 
6439                 if (PL_utf8cache < 0) {
6440                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6441                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6442                 }
6443             }
6444             else {
6445                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6446                 utf8_mg_len_cache_update(sv, &mg, ulen);
6447             }
6448             return ulen;
6449         }
6450         return Perl_utf8_length(aTHX_ s, s + len);
6451     }
6452 }
6453
6454 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6455    offset.  */
6456 static STRLEN
6457 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6458                       STRLEN *const uoffset_p, bool *const at_end)
6459 {
6460     const U8 *s = start;
6461     STRLEN uoffset = *uoffset_p;
6462
6463     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6464
6465     while (s < send && uoffset) {
6466         --uoffset;
6467         s += UTF8SKIP(s);
6468     }
6469     if (s == send) {
6470         *at_end = TRUE;
6471     }
6472     else if (s > send) {
6473         *at_end = TRUE;
6474         /* This is the existing behaviour. Possibly it should be a croak, as
6475            it's actually a bounds error  */
6476         s = send;
6477     }
6478     *uoffset_p -= uoffset;
6479     return s - start;
6480 }
6481
6482 /* Given the length of the string in both bytes and UTF-8 characters, decide
6483    whether to walk forwards or backwards to find the byte corresponding to
6484    the passed in UTF-8 offset.  */
6485 static STRLEN
6486 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6487                     STRLEN uoffset, const STRLEN uend)
6488 {
6489     STRLEN backw = uend - uoffset;
6490
6491     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6492
6493     if (uoffset < 2 * backw) {
6494         /* The assumption is that going forwards is twice the speed of going
6495            forward (that's where the 2 * backw comes from).
6496            (The real figure of course depends on the UTF-8 data.)  */
6497         const U8 *s = start;
6498
6499         while (s < send && uoffset--)
6500             s += UTF8SKIP(s);
6501         assert (s <= send);
6502         if (s > send)
6503             s = send;
6504         return s - start;
6505     }
6506
6507     while (backw--) {
6508         send--;
6509         while (UTF8_IS_CONTINUATION(*send))
6510             send--;
6511     }
6512     return send - start;
6513 }
6514
6515 /* For the string representation of the given scalar, find the byte
6516    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6517    give another position in the string, *before* the sought offset, which
6518    (which is always true, as 0, 0 is a valid pair of positions), which should
6519    help reduce the amount of linear searching.
6520    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6521    will be used to reduce the amount of linear searching. The cache will be
6522    created if necessary, and the found value offered to it for update.  */
6523 static STRLEN
6524 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6525                     const U8 *const send, STRLEN uoffset,
6526                     STRLEN uoffset0, STRLEN boffset0)
6527 {
6528     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6529     bool found = FALSE;
6530     bool at_end = FALSE;
6531
6532     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6533
6534     assert (uoffset >= uoffset0);
6535
6536     if (!uoffset)
6537         return 0;
6538
6539     if (!SvREADONLY(sv)
6540         && PL_utf8cache
6541         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6542                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6543         if ((*mgp)->mg_ptr) {
6544             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6545             if (cache[0] == uoffset) {
6546                 /* An exact match. */
6547                 return cache[1];
6548             }
6549             if (cache[2] == uoffset) {
6550                 /* An exact match. */
6551                 return cache[3];
6552             }
6553
6554             if (cache[0] < uoffset) {
6555                 /* The cache already knows part of the way.   */
6556                 if (cache[0] > uoffset0) {
6557                     /* The cache knows more than the passed in pair  */
6558                     uoffset0 = cache[0];
6559                     boffset0 = cache[1];
6560                 }
6561                 if ((*mgp)->mg_len != -1) {
6562                     /* And we know the end too.  */
6563                     boffset = boffset0
6564                         + sv_pos_u2b_midway(start + boffset0, send,
6565                                               uoffset - uoffset0,
6566                                               (*mgp)->mg_len - uoffset0);
6567                 } else {
6568                     uoffset -= uoffset0;
6569                     boffset = boffset0
6570                         + sv_pos_u2b_forwards(start + boffset0,
6571                                               send, &uoffset, &at_end);
6572                     uoffset += uoffset0;
6573                 }
6574             }
6575             else if (cache[2] < uoffset) {
6576                 /* We're between the two cache entries.  */
6577                 if (cache[2] > uoffset0) {
6578                     /* and the cache knows more than the passed in pair  */
6579                     uoffset0 = cache[2];
6580                     boffset0 = cache[3];
6581                 }
6582
6583                 boffset = boffset0
6584                     + sv_pos_u2b_midway(start + boffset0,
6585                                           start + cache[1],
6586                                           uoffset - uoffset0,
6587                                           cache[0] - uoffset0);
6588             } else {
6589                 boffset = boffset0
6590                     + sv_pos_u2b_midway(start + boffset0,
6591                                           start + cache[3],
6592                                           uoffset - uoffset0,
6593                                           cache[2] - uoffset0);
6594             }
6595             found = TRUE;
6596         }
6597         else if ((*mgp)->mg_len != -1) {
6598             /* If we can take advantage of a passed in offset, do so.  */
6599             /* In fact, offset0 is either 0, or less than offset, so don't
6600                need to worry about the other possibility.  */
6601             boffset = boffset0
6602                 + sv_pos_u2b_midway(start + boffset0, send,
6603                                       uoffset - uoffset0,
6604                                       (*mgp)->mg_len - uoffset0);
6605             found = TRUE;
6606         }
6607     }
6608
6609     if (!found || PL_utf8cache < 0) {
6610         STRLEN real_boffset;
6611         uoffset -= uoffset0;
6612         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6613                                                       send, &uoffset, &at_end);
6614         uoffset += uoffset0;
6615
6616         if (found && PL_utf8cache < 0)
6617             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6618                                        real_boffset, sv);
6619         boffset = real_boffset;
6620     }
6621
6622     if (PL_utf8cache) {
6623         if (at_end)
6624             utf8_mg_len_cache_update(sv, mgp, uoffset);
6625         else
6626             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6627     }
6628     return boffset;
6629 }
6630
6631
6632 /*
6633 =for apidoc sv_pos_u2b_flags
6634
6635 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6636 the start of the string, to a count of the equivalent number of bytes; if
6637 lenp is non-zero, it does the same to lenp, but this time starting from
6638 the offset, rather than from the start of the string. Handles type coercion.
6639 I<flags> is passed to C<SvPV_flags>, and usually should be
6640 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6641
6642 =cut
6643 */
6644
6645 /*
6646  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6647  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6648  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6649  *
6650  */
6651
6652 STRLEN
6653 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6654                       U32 flags)
6655 {
6656     const U8 *start;
6657     STRLEN len;
6658     STRLEN boffset;
6659
6660     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6661
6662     start = (U8*)SvPV_flags(sv, len, flags);
6663     if (len) {
6664         const U8 * const send = start + len;
6665         MAGIC *mg = NULL;
6666         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6667
6668         if (lenp
6669             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6670                         is 0, and *lenp is already set to that.  */) {
6671             /* Convert the relative offset to absolute.  */
6672             const STRLEN uoffset2 = uoffset + *lenp;
6673             const STRLEN boffset2
6674                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6675                                       uoffset, boffset) - boffset;
6676
6677             *lenp = boffset2;
6678         }
6679     } else {
6680         if (lenp)
6681             *lenp = 0;
6682         boffset = 0;
6683     }
6684
6685     return boffset;
6686 }
6687
6688 /*
6689 =for apidoc sv_pos_u2b
6690
6691 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6692 the start of the string, to a count of the equivalent number of bytes; if
6693 lenp is non-zero, it does the same to lenp, but this time starting from
6694 the offset, rather than from the start of the string. Handles magic and
6695 type coercion.
6696
6697 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6698 than 2Gb.
6699
6700 =cut
6701 */
6702
6703 /*
6704  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6705  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6706  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6707  *
6708  */
6709
6710 /* This function is subject to size and sign problems */
6711
6712 void
6713 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6714 {
6715     PERL_ARGS_ASSERT_SV_POS_U2B;
6716
6717     if (lenp) {
6718         STRLEN ulen = (STRLEN)*lenp;
6719         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6720                                          SV_GMAGIC|SV_CONST_RETURN);
6721         *lenp = (I32)ulen;
6722     } else {
6723         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6724                                          SV_GMAGIC|SV_CONST_RETURN);
6725     }
6726 }
6727
6728 static void
6729 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6730                            const STRLEN ulen)
6731 {
6732     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6733     if (SvREADONLY(sv))
6734         return;
6735
6736     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6737                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6738         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6739     }
6740     assert(*mgp);
6741
6742     (*mgp)->mg_len = ulen;
6743     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
6744     if (ulen != (STRLEN) (*mgp)->mg_len)
6745         (*mgp)->mg_len = -1;
6746 }
6747
6748 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6749    byte length pairing. The (byte) length of the total SV is passed in too,
6750    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6751    may not have updated SvCUR, so we can't rely on reading it directly.
6752
6753    The proffered utf8/byte length pairing isn't used if the cache already has
6754    two pairs, and swapping either for the proffered pair would increase the
6755    RMS of the intervals between known byte offsets.
6756
6757    The cache itself consists of 4 STRLEN values
6758    0: larger UTF-8 offset
6759    1: corresponding byte offset
6760    2: smaller UTF-8 offset
6761    3: corresponding byte offset
6762
6763    Unused cache pairs have the value 0, 0.
6764    Keeping the cache "backwards" means that the invariant of
6765    cache[0] >= cache[2] is maintained even with empty slots, which means that
6766    the code that uses it doesn't need to worry if only 1 entry has actually
6767    been set to non-zero.  It also makes the "position beyond the end of the
6768    cache" logic much simpler, as the first slot is always the one to start
6769    from.   
6770 */
6771 static void
6772 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6773                            const STRLEN utf8, const STRLEN blen)
6774 {
6775     STRLEN *cache;
6776
6777     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6778
6779     if (SvREADONLY(sv))
6780         return;
6781
6782     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6783                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6784         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6785                            0);
6786         (*mgp)->mg_len = -1;
6787     }
6788     assert(*mgp);
6789
6790     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6791         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6792         (*mgp)->mg_ptr = (char *) cache;
6793     }
6794     assert(cache);
6795
6796     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6797         /* SvPOKp() because it's possible that sv has string overloading, and
6798            therefore is a reference, hence SvPVX() is actually a pointer.
6799            This cures the (very real) symptoms of RT 69422, but I'm not actually
6800            sure whether we should even be caching the results of UTF-8
6801            operations on overloading, given that nothing stops overloading
6802            returning a different value every time it's called.  */
6803         const U8 *start = (const U8 *) SvPVX_const(sv);
6804         const STRLEN realutf8 = utf8_length(start, start + byte);
6805
6806         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6807                                    sv);
6808     }
6809
6810     /* Cache is held with the later position first, to simplify the code
6811        that deals with unbounded ends.  */
6812        
6813     ASSERT_UTF8_CACHE(cache);
6814     if (cache[1] == 0) {
6815         /* Cache is totally empty  */
6816         cache[0] = utf8;
6817         cache[1] = byte;
6818     } else if (cache[3] == 0) {
6819         if (byte > cache[1]) {
6820             /* New one is larger, so goes first.  */
6821             cache[2] = cache[0];
6822             cache[3] = cache[1];
6823             cache[0] = utf8;
6824             cache[1] = byte;
6825         } else {
6826             cache[2] = utf8;
6827             cache[3] = byte;
6828         }
6829     } else {
6830 #define THREEWAY_SQUARE(a,b,c,d) \
6831             ((float)((d) - (c))) * ((float)((d) - (c))) \
6832             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6833                + ((float)((b) - (a))) * ((float)((b) - (a)))
6834
6835         /* Cache has 2 slots in use, and we know three potential pairs.
6836            Keep the two that give the lowest RMS distance. Do the
6837            calcualation in bytes simply because we always know the byte
6838            length.  squareroot has the same ordering as the positive value,
6839            so don't bother with the actual square root.  */
6840         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6841         if (byte > cache[1]) {
6842             /* New position is after the existing pair of pairs.  */
6843             const float keep_earlier
6844                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6845             const float keep_later
6846                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6847
6848             if (keep_later < keep_earlier) {
6849                 if (keep_later < existing) {
6850                     cache[2] = cache[0];
6851                     cache[3] = cache[1];
6852                     cache[0] = utf8;
6853                     cache[1] = byte;
6854                 }
6855             }
6856             else {
6857                 if (keep_earlier < existing) {
6858                     cache[0] = utf8;
6859                     cache[1] = byte;
6860                 }
6861             }
6862         }
6863         else if (byte > cache[3]) {
6864             /* New position is between the existing pair of pairs.  */
6865             const float keep_earlier
6866                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6867             const float keep_later
6868                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6869
6870             if (keep_later < keep_earlier) {
6871                 if (keep_later < existing) {
6872                     cache[2] = utf8;
6873                     cache[3] = byte;
6874                 }
6875             }
6876             else {
6877                 if (keep_earlier < existing) {
6878                     cache[0] = utf8;
6879                     cache[1] = byte;
6880                 }
6881             }
6882         }
6883         else {
6884             /* New position is before the existing pair of pairs.  */
6885             const float keep_earlier
6886                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6887             const float keep_later
6888                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6889
6890             if (keep_later < keep_earlier) {
6891                 if (keep_later < existing) {
6892                     cache[2] = utf8;
6893                     cache[3] = byte;
6894                 }
6895             }
6896             else {
6897                 if (keep_earlier < existing) {
6898                     cache[0] = cache[2];
6899                     cache[1] = cache[3];
6900                     cache[2] = utf8;
6901                     cache[3] = byte;
6902                 }
6903             }
6904         }
6905     }
6906     ASSERT_UTF8_CACHE(cache);
6907 }
6908
6909 /* We already know all of the way, now we may be able to walk back.  The same
6910    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6911    backward is half the speed of walking forward. */
6912 static STRLEN
6913 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6914                     const U8 *end, STRLEN endu)
6915 {
6916     const STRLEN forw = target - s;
6917     STRLEN backw = end - target;
6918
6919     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6920
6921     if (forw < 2 * backw) {
6922         return utf8_length(s, target);
6923     }
6924
6925     while (end > target) {
6926         end--;
6927         while (UTF8_IS_CONTINUATION(*end)) {
6928             end--;
6929         }
6930         endu--;
6931     }
6932     return endu;
6933 }
6934
6935 /*
6936 =for apidoc sv_pos_b2u
6937
6938 Converts the value pointed to by offsetp from a count of bytes from the
6939 start of the string, to a count of the equivalent number of UTF-8 chars.
6940 Handles magic and type coercion.
6941
6942 =cut
6943 */
6944
6945 /*
6946  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
6947  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6948  * byte offsets.
6949  *
6950  */
6951 void
6952 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
6953 {
6954     const U8* s;
6955     const STRLEN byte = *offsetp;
6956     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
6957     STRLEN blen;
6958     MAGIC* mg = NULL;
6959     const U8* send;
6960     bool found = FALSE;
6961
6962     PERL_ARGS_ASSERT_SV_POS_B2U;
6963
6964     if (!sv)
6965         return;
6966
6967     s = (const U8*)SvPV_const(sv, blen);
6968
6969     if (blen < byte)
6970         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
6971
6972     send = s + byte;
6973
6974     if (!SvREADONLY(sv)
6975         && PL_utf8cache
6976         && SvTYPE(sv) >= SVt_PVMG
6977         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
6978     {
6979         if (mg->mg_ptr) {
6980             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
6981             if (cache[1] == byte) {
6982                 /* An exact match. */
6983                 *offsetp = cache[0];
6984                 return;
6985             }
6986             if (cache[3] == byte) {
6987                 /* An exact match. */
6988                 *offsetp = cache[2];
6989                 return;
6990             }
6991
6992             if (cache[1] < byte) {
6993                 /* We already know part of the way. */
6994                 if (mg->mg_len != -1) {
6995                     /* Actually, we know the end too.  */
6996                     len = cache[0]
6997                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
6998                                               s + blen, mg->mg_len - cache[0]);
6999                 } else {
7000                     len = cache[0] + utf8_length(s + cache[1], send);
7001                 }
7002             }
7003             else if (cache[3] < byte) {
7004                 /* We're between the two cached pairs, so we do the calculation
7005                    offset by the byte/utf-8 positions for the earlier pair,
7006                    then add the utf-8 characters from the string start to
7007                    there.  */
7008                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7009                                           s + cache[1], cache[0] - cache[2])
7010                     + cache[2];
7011
7012             }
7013             else { /* cache[3] > byte */
7014                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7015                                           cache[2]);
7016
7017             }
7018             ASSERT_UTF8_CACHE(cache);
7019             found = TRUE;
7020         } else if (mg->mg_len != -1) {
7021             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7022             found = TRUE;
7023         }
7024     }
7025     if (!found || PL_utf8cache < 0) {
7026         const STRLEN real_len = utf8_length(s, send);
7027
7028         if (found && PL_utf8cache < 0)
7029             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7030         len = real_len;
7031     }
7032     *offsetp = len;
7033
7034     if (PL_utf8cache) {
7035         if (blen == byte)
7036             utf8_mg_len_cache_update(sv, &mg, len);
7037         else
7038             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7039     }
7040 }
7041
7042 static void
7043 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7044                              STRLEN real, SV *const sv)
7045 {
7046     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7047
7048     /* As this is debugging only code, save space by keeping this test here,
7049        rather than inlining it in all the callers.  */
7050     if (from_cache == real)
7051         return;
7052
7053     /* Need to turn the assertions off otherwise we may recurse infinitely
7054        while printing error messages.  */
7055     SAVEI8(PL_utf8cache);
7056     PL_utf8cache = 0;
7057     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7058                func, (UV) from_cache, (UV) real, SVfARG(sv));
7059 }
7060
7061 /*
7062 =for apidoc sv_eq
7063
7064 Returns a boolean indicating whether the strings in the two SVs are
7065 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7066 coerce its args to strings if necessary.
7067
7068 =for apidoc sv_eq_flags
7069
7070 Returns a boolean indicating whether the strings in the two SVs are
7071 identical. Is UTF-8 and 'use bytes' aware and coerces its args to strings
7072 if necessary. If the flags include SV_GMAGIC, it handles get-magic, too.
7073
7074 =cut
7075 */
7076
7077 I32
7078 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
7079 {
7080     dVAR;
7081     const char *pv1;
7082     STRLEN cur1;
7083     const char *pv2;
7084     STRLEN cur2;
7085     I32  eq     = 0;
7086     char *tpv   = NULL;
7087     SV* svrecode = NULL;
7088
7089     if (!sv1) {
7090         pv1 = "";
7091         cur1 = 0;
7092     }
7093     else {
7094         /* if pv1 and pv2 are the same, second SvPV_const call may
7095          * invalidate pv1 (if we are handling magic), so we may need to
7096          * make a copy */
7097         if (sv1 == sv2 && flags & SV_GMAGIC
7098          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7099             pv1 = SvPV_const(sv1, cur1);
7100             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7101         }
7102         pv1 = SvPV_flags_const(sv1, cur1, flags);
7103     }
7104
7105     if (!sv2){
7106         pv2 = "";
7107         cur2 = 0;
7108     }
7109     else
7110         pv2 = SvPV_flags_const(sv2, cur2, flags);
7111
7112     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7113         /* Differing utf8ness.
7114          * Do not UTF8size the comparands as a side-effect. */
7115          if (PL_encoding) {
7116               if (SvUTF8(sv1)) {
7117                    svrecode = newSVpvn(pv2, cur2);
7118                    sv_recode_to_utf8(svrecode, PL_encoding);
7119                    pv2 = SvPV_const(svrecode, cur2);
7120               }
7121               else {
7122                    svrecode = newSVpvn(pv1, cur1);
7123                    sv_recode_to_utf8(svrecode, PL_encoding);
7124                    pv1 = SvPV_const(svrecode, cur1);
7125               }
7126               /* Now both are in UTF-8. */
7127               if (cur1 != cur2) {
7128                    SvREFCNT_dec(svrecode);
7129                    return FALSE;
7130               }
7131          }
7132          else {
7133               if (SvUTF8(sv1)) {
7134                   /* sv1 is the UTF-8 one  */
7135                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7136                                         (const U8*)pv1, cur1) == 0;
7137               }
7138               else {
7139                   /* sv2 is the UTF-8 one  */
7140                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7141                                         (const U8*)pv2, cur2) == 0;
7142               }
7143          }
7144     }
7145
7146     if (cur1 == cur2)
7147         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7148         
7149     SvREFCNT_dec(svrecode);
7150     if (tpv)
7151         Safefree(tpv);
7152
7153     return eq;
7154 }
7155
7156 /*
7157 =for apidoc sv_cmp
7158
7159 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7160 string in C<sv1> is less than, equal to, or greater than the string in
7161 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7162 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7163
7164 =for apidoc sv_cmp_flags
7165
7166 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7167 string in C<sv1> is less than, equal to, or greater than the string in
7168 C<sv2>. Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7169 if necessary. If the flags include SV_GMAGIC, it handles get magic. See
7170 also C<sv_cmp_locale_flags>.
7171
7172 =cut
7173 */
7174
7175 I32
7176 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7177 {
7178     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7179 }
7180
7181 I32
7182 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7183                   const U32 flags)
7184 {
7185     dVAR;
7186     STRLEN cur1, cur2;
7187     const char *pv1, *pv2;
7188     char *tpv = NULL;
7189     I32  cmp;
7190     SV *svrecode = NULL;
7191
7192     if (!sv1) {
7193         pv1 = "";
7194         cur1 = 0;
7195     }
7196     else
7197         pv1 = SvPV_flags_const(sv1, cur1, flags);
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 (SvUTF8(sv1)) {
7210             if (PL_encoding) {
7211                  svrecode = newSVpvn(pv2, cur2);
7212                  sv_recode_to_utf8(svrecode, PL_encoding);
7213                  pv2 = SvPV_const(svrecode, cur2);
7214             }
7215             else {
7216                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7217                                                    (const U8*)pv1, cur1);
7218                 return retval ? retval < 0 ? -1 : +1 : 0;
7219             }
7220         }
7221         else {
7222             if (PL_encoding) {
7223                  svrecode = newSVpvn(pv1, cur1);
7224                  sv_recode_to_utf8(svrecode, PL_encoding);
7225                  pv1 = SvPV_const(svrecode, cur1);
7226             }
7227             else {
7228                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7229                                                   (const U8*)pv2, cur2);
7230                 return retval ? retval < 0 ? -1 : +1 : 0;
7231             }
7232         }
7233     }
7234
7235     if (!cur1) {
7236         cmp = cur2 ? -1 : 0;
7237     } else if (!cur2) {
7238         cmp = 1;
7239     } else {
7240         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7241
7242         if (retval) {
7243             cmp = retval < 0 ? -1 : 1;
7244         } else if (cur1 == cur2) {
7245             cmp = 0;
7246         } else {
7247             cmp = cur1 < cur2 ? -1 : 1;
7248         }
7249     }
7250
7251     SvREFCNT_dec(svrecode);
7252     if (tpv)
7253         Safefree(tpv);
7254
7255     return cmp;
7256 }
7257
7258 /*
7259 =for apidoc sv_cmp_locale
7260
7261 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7262 'use bytes' aware, handles get magic, and will coerce its args to strings
7263 if necessary.  See also C<sv_cmp>.
7264
7265 =for apidoc sv_cmp_locale_flags
7266
7267 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7268 'use bytes' aware and will coerce its args to strings if necessary. If the
7269 flags contain SV_GMAGIC, it handles get magic. See also C<sv_cmp_flags>.
7270
7271 =cut
7272 */
7273
7274 I32
7275 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7276 {
7277     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7278 }
7279
7280 I32
7281 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7282                          const U32 flags)
7283 {
7284     dVAR;
7285 #ifdef USE_LOCALE_COLLATE
7286
7287     char *pv1, *pv2;
7288     STRLEN len1, len2;
7289     I32 retval;
7290
7291     if (PL_collation_standard)
7292         goto raw_compare;
7293
7294     len1 = 0;
7295     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7296     len2 = 0;
7297     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7298
7299     if (!pv1 || !len1) {
7300         if (pv2 && len2)
7301             return -1;
7302         else
7303             goto raw_compare;
7304     }
7305     else {
7306         if (!pv2 || !len2)
7307             return 1;
7308     }
7309
7310     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7311
7312     if (retval)
7313         return retval < 0 ? -1 : 1;
7314
7315     /*
7316      * When the result of collation is equality, that doesn't mean
7317      * that there are no differences -- some locales exclude some
7318      * characters from consideration.  So to avoid false equalities,
7319      * we use the raw string as a tiebreaker.
7320      */
7321
7322   raw_compare:
7323     /*FALLTHROUGH*/
7324
7325 #endif /* USE_LOCALE_COLLATE */
7326
7327     return sv_cmp(sv1, sv2);
7328 }
7329
7330
7331 #ifdef USE_LOCALE_COLLATE
7332
7333 /*
7334 =for apidoc sv_collxfrm
7335
7336 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
7337 C<sv_collxfrm_flags>.
7338
7339 =for apidoc sv_collxfrm_flags
7340
7341 Add Collate Transform magic to an SV if it doesn't already have it. If the
7342 flags contain SV_GMAGIC, it handles get-magic.
7343
7344 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7345 scalar data of the variable, but transformed to such a format that a normal
7346 memory comparison can be used to compare the data according to the locale
7347 settings.
7348
7349 =cut
7350 */
7351
7352 char *
7353 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7354 {
7355     dVAR;
7356     MAGIC *mg;
7357
7358     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7359
7360     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7361     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7362         const char *s;
7363         char *xf;
7364         STRLEN len, xlen;
7365
7366         if (mg)
7367             Safefree(mg->mg_ptr);
7368         s = SvPV_flags_const(sv, len, flags);
7369         if ((xf = mem_collxfrm(s, len, &xlen))) {
7370             if (! mg) {
7371 #ifdef PERL_OLD_COPY_ON_WRITE
7372                 if (SvIsCOW(sv))
7373                     sv_force_normal_flags(sv, 0);
7374 #endif
7375                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7376                                  0, 0);
7377                 assert(mg);
7378             }
7379             mg->mg_ptr = xf;
7380             mg->mg_len = xlen;
7381         }
7382         else {
7383             if (mg) {
7384                 mg->mg_ptr = NULL;
7385                 mg->mg_len = -1;
7386             }
7387         }
7388     }
7389     if (mg && mg->mg_ptr) {
7390         *nxp = mg->mg_len;
7391         return mg->mg_ptr + sizeof(PL_collation_ix);
7392     }
7393     else {
7394         *nxp = 0;
7395         return NULL;
7396     }
7397 }
7398
7399 #endif /* USE_LOCALE_COLLATE */
7400
7401 static char *
7402 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7403 {
7404     SV * const tsv = newSV(0);
7405     ENTER;
7406     SAVEFREESV(tsv);
7407     sv_gets(tsv, fp, 0);
7408     sv_utf8_upgrade_nomg(tsv);
7409     SvCUR_set(sv,append);
7410     sv_catsv(sv,tsv);
7411     LEAVE;
7412     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7413 }
7414
7415 static char *
7416 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7417 {
7418     I32 bytesread;
7419     const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7420       /* Grab the size of the record we're getting */
7421     char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7422 #ifdef VMS
7423     int fd;
7424 #endif
7425
7426     /* Go yank in */
7427 #ifdef VMS
7428     /* VMS wants read instead of fread, because fread doesn't respect */
7429     /* RMS record boundaries. This is not necessarily a good thing to be */
7430     /* doing, but we've got no other real choice - except avoid stdio
7431        as implementation - perhaps write a :vms layer ?
7432     */
7433     fd = PerlIO_fileno(fp);
7434     if (fd != -1) {
7435         bytesread = PerlLIO_read(fd, buffer, recsize);
7436     }
7437     else /* in-memory file from PerlIO::Scalar */
7438 #endif
7439     {
7440         bytesread = PerlIO_read(fp, buffer, recsize);
7441     }
7442
7443     if (bytesread < 0)
7444         bytesread = 0;
7445     SvCUR_set(sv, bytesread + append);
7446     buffer[bytesread] = '\0';
7447     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7448 }
7449
7450 /*
7451 =for apidoc sv_gets
7452
7453 Get a line from the filehandle and store it into the SV, optionally
7454 appending to the currently-stored string.
7455
7456 =cut
7457 */
7458
7459 char *
7460 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7461 {
7462     dVAR;
7463     const char *rsptr;
7464     STRLEN rslen;
7465     register STDCHAR rslast;
7466     register STDCHAR *bp;
7467     register I32 cnt;
7468     I32 i = 0;
7469     I32 rspara = 0;
7470
7471     PERL_ARGS_ASSERT_SV_GETS;
7472
7473     if (SvTHINKFIRST(sv))
7474         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7475     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7476        from <>.
7477        However, perlbench says it's slower, because the existing swipe code
7478        is faster than copy on write.
7479        Swings and roundabouts.  */
7480     SvUPGRADE(sv, SVt_PV);
7481
7482     SvSCREAM_off(sv);
7483
7484     if (append) {
7485         if (PerlIO_isutf8(fp)) {
7486             if (!SvUTF8(sv)) {
7487                 sv_utf8_upgrade_nomg(sv);
7488                 sv_pos_u2b(sv,&append,0);
7489             }
7490         } else if (SvUTF8(sv)) {
7491             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7492         }
7493     }
7494
7495     SvPOK_only(sv);
7496     if (!append) {
7497         SvCUR_set(sv,0);
7498     }
7499     if (PerlIO_isutf8(fp))
7500         SvUTF8_on(sv);
7501
7502     if (IN_PERL_COMPILETIME) {
7503         /* we always read code in line mode */
7504         rsptr = "\n";
7505         rslen = 1;
7506     }
7507     else if (RsSNARF(PL_rs)) {
7508         /* If it is a regular disk file use size from stat() as estimate
7509            of amount we are going to read -- may result in mallocing
7510            more memory than we really need if the layers below reduce
7511            the size we read (e.g. CRLF or a gzip layer).
7512          */
7513         Stat_t st;
7514         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7515             const Off_t offset = PerlIO_tell(fp);
7516             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7517                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7518             }
7519         }
7520         rsptr = NULL;
7521         rslen = 0;
7522     }
7523     else if (RsRECORD(PL_rs)) {
7524         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7525     }
7526     else if (RsPARA(PL_rs)) {
7527         rsptr = "\n\n";
7528         rslen = 2;
7529         rspara = 1;
7530     }
7531     else {
7532         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7533         if (PerlIO_isutf8(fp)) {
7534             rsptr = SvPVutf8(PL_rs, rslen);
7535         }
7536         else {
7537             if (SvUTF8(PL_rs)) {
7538                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7539                     Perl_croak(aTHX_ "Wide character in $/");
7540                 }
7541             }
7542             rsptr = SvPV_const(PL_rs, rslen);
7543         }
7544     }
7545
7546     rslast = rslen ? rsptr[rslen - 1] : '\0';
7547
7548     if (rspara) {               /* have to do this both before and after */
7549         do {                    /* to make sure file boundaries work right */
7550             if (PerlIO_eof(fp))
7551                 return 0;
7552             i = PerlIO_getc(fp);
7553             if (i != '\n') {
7554                 if (i == -1)
7555                     return 0;
7556                 PerlIO_ungetc(fp,i);
7557                 break;
7558             }
7559         } while (i != EOF);
7560     }
7561
7562     /* See if we know enough about I/O mechanism to cheat it ! */
7563
7564     /* This used to be #ifdef test - it is made run-time test for ease
7565        of abstracting out stdio interface. One call should be cheap
7566        enough here - and may even be a macro allowing compile
7567        time optimization.
7568      */
7569
7570     if (PerlIO_fast_gets(fp)) {
7571
7572     /*
7573      * We're going to steal some values from the stdio struct
7574      * and put EVERYTHING in the innermost loop into registers.
7575      */
7576     register STDCHAR *ptr;
7577     STRLEN bpx;
7578     I32 shortbuffered;
7579
7580 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7581     /* An ungetc()d char is handled separately from the regular
7582      * buffer, so we getc() it back out and stuff it in the buffer.
7583      */
7584     i = PerlIO_getc(fp);
7585     if (i == EOF) return 0;
7586     *(--((*fp)->_ptr)) = (unsigned char) i;
7587     (*fp)->_cnt++;
7588 #endif
7589
7590     /* Here is some breathtakingly efficient cheating */
7591
7592     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7593     /* make sure we have the room */
7594     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7595         /* Not room for all of it
7596            if we are looking for a separator and room for some
7597          */
7598         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7599             /* just process what we have room for */
7600             shortbuffered = cnt - SvLEN(sv) + append + 1;
7601             cnt -= shortbuffered;
7602         }
7603         else {
7604             shortbuffered = 0;
7605             /* remember that cnt can be negative */
7606             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7607         }
7608     }
7609     else
7610         shortbuffered = 0;
7611     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7612     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7613     DEBUG_P(PerlIO_printf(Perl_debug_log,
7614         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7615     DEBUG_P(PerlIO_printf(Perl_debug_log,
7616         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7617                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7618                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7619     for (;;) {
7620       screamer:
7621         if (cnt > 0) {
7622             if (rslen) {
7623                 while (cnt > 0) {                    /* this     |  eat */
7624                     cnt--;
7625                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7626                         goto thats_all_folks;        /* screams  |  sed :-) */
7627                 }
7628             }
7629             else {
7630                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7631                 bp += cnt;                           /* screams  |  dust */
7632                 ptr += cnt;                          /* louder   |  sed :-) */
7633                 cnt = 0;
7634                 assert (!shortbuffered);
7635                 goto cannot_be_shortbuffered;
7636             }
7637         }
7638         
7639         if (shortbuffered) {            /* oh well, must extend */
7640             cnt = shortbuffered;
7641             shortbuffered = 0;
7642             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7643             SvCUR_set(sv, bpx);
7644             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7645             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7646             continue;
7647         }
7648
7649     cannot_be_shortbuffered:
7650         DEBUG_P(PerlIO_printf(Perl_debug_log,
7651                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7652                               PTR2UV(ptr),(long)cnt));
7653         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7654
7655         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7656             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7657             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7658             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7659
7660         /* This used to call 'filbuf' in stdio form, but as that behaves like
7661            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7662            another abstraction.  */
7663         i   = PerlIO_getc(fp);          /* get more characters */
7664
7665         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7666             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7667             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7668             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7669
7670         cnt = PerlIO_get_cnt(fp);
7671         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7672         DEBUG_P(PerlIO_printf(Perl_debug_log,
7673             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7674
7675         if (i == EOF)                   /* all done for ever? */
7676             goto thats_really_all_folks;
7677
7678         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7679         SvCUR_set(sv, bpx);
7680         SvGROW(sv, bpx + cnt + 2);
7681         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7682
7683         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7684
7685         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7686             goto thats_all_folks;
7687     }
7688
7689 thats_all_folks:
7690     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7691           memNE((char*)bp - rslen, rsptr, rslen))
7692         goto screamer;                          /* go back to the fray */
7693 thats_really_all_folks:
7694     if (shortbuffered)
7695         cnt += shortbuffered;
7696         DEBUG_P(PerlIO_printf(Perl_debug_log,
7697             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7698     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7699     DEBUG_P(PerlIO_printf(Perl_debug_log,
7700         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7701         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7702         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7703     *bp = '\0';
7704     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7705     DEBUG_P(PerlIO_printf(Perl_debug_log,
7706         "Screamer: done, len=%ld, string=|%.*s|\n",
7707         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7708     }
7709    else
7710     {
7711        /*The big, slow, and stupid way. */
7712 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7713         STDCHAR *buf = NULL;
7714         Newx(buf, 8192, STDCHAR);
7715         assert(buf);
7716 #else
7717         STDCHAR buf[8192];
7718 #endif
7719
7720 screamer2:
7721         if (rslen) {
7722             register const STDCHAR * const bpe = buf + sizeof(buf);
7723             bp = buf;
7724             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7725                 ; /* keep reading */
7726             cnt = bp - buf;
7727         }
7728         else {
7729             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7730             /* Accomodate broken VAXC compiler, which applies U8 cast to
7731              * both args of ?: operator, causing EOF to change into 255
7732              */
7733             if (cnt > 0)
7734                  i = (U8)buf[cnt - 1];
7735             else
7736                  i = EOF;
7737         }
7738
7739         if (cnt < 0)
7740             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7741         if (append)
7742              sv_catpvn(sv, (char *) buf, cnt);
7743         else
7744              sv_setpvn(sv, (char *) buf, cnt);
7745
7746         if (i != EOF &&                 /* joy */
7747             (!rslen ||
7748              SvCUR(sv) < rslen ||
7749              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7750         {
7751             append = -1;
7752             /*
7753              * If we're reading from a TTY and we get a short read,
7754              * indicating that the user hit his EOF character, we need
7755              * to notice it now, because if we try to read from the TTY
7756              * again, the EOF condition will disappear.
7757              *
7758              * The comparison of cnt to sizeof(buf) is an optimization
7759              * that prevents unnecessary calls to feof().
7760              *
7761              * - jik 9/25/96
7762              */
7763             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7764                 goto screamer2;
7765         }
7766
7767 #ifdef USE_HEAP_INSTEAD_OF_STACK
7768         Safefree(buf);
7769 #endif
7770     }
7771
7772     if (rspara) {               /* have to do this both before and after */
7773         while (i != EOF) {      /* to make sure file boundaries work right */
7774             i = PerlIO_getc(fp);
7775             if (i != '\n') {
7776                 PerlIO_ungetc(fp,i);
7777                 break;
7778             }
7779         }
7780     }
7781
7782     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7783 }
7784
7785 /*
7786 =for apidoc sv_inc
7787
7788 Auto-increment of the value in the SV, doing string to numeric conversion
7789 if necessary. Handles 'get' magic and operator overloading.
7790
7791 =cut
7792 */
7793
7794 void
7795 Perl_sv_inc(pTHX_ register SV *const sv)
7796 {
7797     if (!sv)
7798         return;
7799     SvGETMAGIC(sv);
7800     sv_inc_nomg(sv);
7801 }
7802
7803 /*
7804 =for apidoc sv_inc_nomg
7805
7806 Auto-increment of the value in the SV, doing string to numeric conversion
7807 if necessary. Handles operator overloading. Skips handling 'get' magic.
7808
7809 =cut
7810 */
7811
7812 void
7813 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7814 {
7815     dVAR;
7816     register char *d;
7817     int flags;
7818
7819     if (!sv)
7820         return;
7821     if (SvTHINKFIRST(sv)) {
7822         if (SvIsCOW(sv))
7823             sv_force_normal_flags(sv, 0);
7824         if (SvREADONLY(sv)) {
7825             if (IN_PERL_RUNTIME)
7826                 Perl_croak_no_modify(aTHX);
7827         }
7828         if (SvROK(sv)) {
7829             IV i;
7830             if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7831                 return;
7832             i = PTR2IV(SvRV(sv));
7833             sv_unref(sv);
7834             sv_setiv(sv, i);
7835         }
7836     }
7837     flags = SvFLAGS(sv);
7838     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7839         /* It's (privately or publicly) a float, but not tested as an
7840            integer, so test it to see. */
7841         (void) SvIV(sv);
7842         flags = SvFLAGS(sv);
7843     }
7844     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7845         /* It's publicly an integer, or privately an integer-not-float */
7846 #ifdef PERL_PRESERVE_IVUV
7847       oops_its_int:
7848 #endif
7849         if (SvIsUV(sv)) {
7850             if (SvUVX(sv) == UV_MAX)
7851                 sv_setnv(sv, UV_MAX_P1);
7852             else
7853                 (void)SvIOK_only_UV(sv);
7854                 SvUV_set(sv, SvUVX(sv) + 1);
7855         } else {
7856             if (SvIVX(sv) == IV_MAX)
7857                 sv_setuv(sv, (UV)IV_MAX + 1);
7858             else {
7859                 (void)SvIOK_only(sv);
7860                 SvIV_set(sv, SvIVX(sv) + 1);
7861             }   
7862         }
7863         return;
7864     }
7865     if (flags & SVp_NOK) {
7866         const NV was = SvNVX(sv);
7867         if (NV_OVERFLOWS_INTEGERS_AT &&
7868             was >= NV_OVERFLOWS_INTEGERS_AT) {
7869             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7870                            "Lost precision when incrementing %" NVff " by 1",
7871                            was);
7872         }
7873         (void)SvNOK_only(sv);
7874         SvNV_set(sv, was + 1.0);
7875         return;
7876     }
7877
7878     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7879         if ((flags & SVTYPEMASK) < SVt_PVIV)
7880             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7881         (void)SvIOK_only(sv);
7882         SvIV_set(sv, 1);
7883         return;
7884     }
7885     d = SvPVX(sv);
7886     while (isALPHA(*d)) d++;
7887     while (isDIGIT(*d)) d++;
7888     if (d < SvEND(sv)) {
7889 #ifdef PERL_PRESERVE_IVUV
7890         /* Got to punt this as an integer if needs be, but we don't issue
7891            warnings. Probably ought to make the sv_iv_please() that does
7892            the conversion if possible, and silently.  */
7893         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7894         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7895             /* Need to try really hard to see if it's an integer.
7896                9.22337203685478e+18 is an integer.
7897                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7898                so $a="9.22337203685478e+18"; $a+0; $a++
7899                needs to be the same as $a="9.22337203685478e+18"; $a++
7900                or we go insane. */
7901         
7902             (void) sv_2iv(sv);
7903             if (SvIOK(sv))
7904                 goto oops_its_int;
7905
7906             /* sv_2iv *should* have made this an NV */
7907             if (flags & SVp_NOK) {
7908                 (void)SvNOK_only(sv);
7909                 SvNV_set(sv, SvNVX(sv) + 1.0);
7910                 return;
7911             }
7912             /* I don't think we can get here. Maybe I should assert this
7913                And if we do get here I suspect that sv_setnv will croak. NWC
7914                Fall through. */
7915 #if defined(USE_LONG_DOUBLE)
7916             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",
7917                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7918 #else
7919             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7920                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7921 #endif
7922         }
7923 #endif /* PERL_PRESERVE_IVUV */
7924         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
7925         return;
7926     }
7927     d--;
7928     while (d >= SvPVX_const(sv)) {
7929         if (isDIGIT(*d)) {
7930             if (++*d <= '9')
7931                 return;
7932             *(d--) = '0';
7933         }
7934         else {
7935 #ifdef EBCDIC
7936             /* MKS: The original code here died if letters weren't consecutive.
7937              * at least it didn't have to worry about non-C locales.  The
7938              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
7939              * arranged in order (although not consecutively) and that only
7940              * [A-Za-z] are accepted by isALPHA in the C locale.
7941              */
7942             if (*d != 'z' && *d != 'Z') {
7943                 do { ++*d; } while (!isALPHA(*d));
7944                 return;
7945             }
7946             *(d--) -= 'z' - 'a';
7947 #else
7948             ++*d;
7949             if (isALPHA(*d))
7950                 return;
7951             *(d--) -= 'z' - 'a' + 1;
7952 #endif
7953         }
7954     }
7955     /* oh,oh, the number grew */
7956     SvGROW(sv, SvCUR(sv) + 2);
7957     SvCUR_set(sv, SvCUR(sv) + 1);
7958     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
7959         *d = d[-1];
7960     if (isDIGIT(d[1]))
7961         *d = '1';
7962     else
7963         *d = d[1];
7964 }
7965
7966 /*
7967 =for apidoc sv_dec
7968
7969 Auto-decrement of the value in the SV, doing string to numeric conversion
7970 if necessary. Handles 'get' magic and operator overloading.
7971
7972 =cut
7973 */
7974
7975 void
7976 Perl_sv_dec(pTHX_ register SV *const sv)
7977 {
7978     dVAR;
7979     if (!sv)
7980         return;
7981     SvGETMAGIC(sv);
7982     sv_dec_nomg(sv);
7983 }
7984
7985 /*
7986 =for apidoc sv_dec_nomg
7987
7988 Auto-decrement of the value in the SV, doing string to numeric conversion
7989 if necessary. Handles operator overloading. Skips handling 'get' magic.
7990
7991 =cut
7992 */
7993
7994 void
7995 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
7996 {
7997     dVAR;
7998     int flags;
7999
8000     if (!sv)
8001         return;
8002     if (SvTHINKFIRST(sv)) {
8003         if (SvIsCOW(sv))
8004             sv_force_normal_flags(sv, 0);
8005         if (SvREADONLY(sv)) {
8006             if (IN_PERL_RUNTIME)
8007                 Perl_croak_no_modify(aTHX);
8008         }
8009         if (SvROK(sv)) {
8010             IV i;
8011             if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
8012                 return;
8013             i = PTR2IV(SvRV(sv));
8014             sv_unref(sv);
8015             sv_setiv(sv, i);
8016         }
8017     }
8018     /* Unlike sv_inc we don't have to worry about string-never-numbers
8019        and keeping them magic. But we mustn't warn on punting */
8020     flags = SvFLAGS(sv);
8021     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8022         /* It's publicly an integer, or privately an integer-not-float */
8023 #ifdef PERL_PRESERVE_IVUV
8024       oops_its_int:
8025 #endif
8026         if (SvIsUV(sv)) {
8027             if (SvUVX(sv) == 0) {
8028                 (void)SvIOK_only(sv);
8029                 SvIV_set(sv, -1);
8030             }
8031             else {
8032                 (void)SvIOK_only_UV(sv);
8033                 SvUV_set(sv, SvUVX(sv) - 1);
8034             }   
8035         } else {
8036             if (SvIVX(sv) == IV_MIN) {
8037                 sv_setnv(sv, (NV)IV_MIN);
8038                 goto oops_its_num;
8039             }
8040             else {
8041                 (void)SvIOK_only(sv);
8042                 SvIV_set(sv, SvIVX(sv) - 1);
8043             }   
8044         }
8045         return;
8046     }
8047     if (flags & SVp_NOK) {
8048     oops_its_num:
8049         {
8050             const NV was = SvNVX(sv);
8051             if (NV_OVERFLOWS_INTEGERS_AT &&
8052                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8053                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8054                                "Lost precision when decrementing %" NVff " by 1",
8055                                was);
8056             }
8057             (void)SvNOK_only(sv);
8058             SvNV_set(sv, was - 1.0);
8059             return;
8060         }
8061     }
8062     if (!(flags & SVp_POK)) {
8063         if ((flags & SVTYPEMASK) < SVt_PVIV)
8064             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8065         SvIV_set(sv, -1);
8066         (void)SvIOK_only(sv);
8067         return;
8068     }
8069 #ifdef PERL_PRESERVE_IVUV
8070     {
8071         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8072         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8073             /* Need to try really hard to see if it's an integer.
8074                9.22337203685478e+18 is an integer.
8075                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8076                so $a="9.22337203685478e+18"; $a+0; $a--
8077                needs to be the same as $a="9.22337203685478e+18"; $a--
8078                or we go insane. */
8079         
8080             (void) sv_2iv(sv);
8081             if (SvIOK(sv))
8082                 goto oops_its_int;
8083
8084             /* sv_2iv *should* have made this an NV */
8085             if (flags & SVp_NOK) {
8086                 (void)SvNOK_only(sv);
8087                 SvNV_set(sv, SvNVX(sv) - 1.0);
8088                 return;
8089             }
8090             /* I don't think we can get here. Maybe I should assert this
8091                And if we do get here I suspect that sv_setnv will croak. NWC
8092                Fall through. */
8093 #if defined(USE_LONG_DOUBLE)
8094             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",
8095                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8096 #else
8097             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8098                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8099 #endif
8100         }
8101     }
8102 #endif /* PERL_PRESERVE_IVUV */
8103     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8104 }
8105
8106 /* this define is used to eliminate a chunk of duplicated but shared logic
8107  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8108  * used anywhere but here - yves
8109  */
8110 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8111     STMT_START {      \
8112         EXTEND_MORTAL(1); \
8113         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8114     } STMT_END
8115
8116 /*
8117 =for apidoc sv_mortalcopy
8118
8119 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8120 The new SV is marked as mortal. It will be destroyed "soon", either by an
8121 explicit call to FREETMPS, or by an implicit call at places such as
8122 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8123
8124 =cut
8125 */
8126
8127 /* Make a string that will exist for the duration of the expression
8128  * evaluation.  Actually, it may have to last longer than that, but
8129  * hopefully we won't free it until it has been assigned to a
8130  * permanent location. */
8131
8132 SV *
8133 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
8134 {
8135     dVAR;
8136     register SV *sv;
8137
8138     new_SV(sv);
8139     sv_setsv(sv,oldstr);
8140     PUSH_EXTEND_MORTAL__SV_C(sv);
8141     SvTEMP_on(sv);
8142     return sv;
8143 }
8144
8145 /*
8146 =for apidoc sv_newmortal
8147
8148 Creates a new null SV which is mortal.  The reference count of the SV is
8149 set to 1. It will be destroyed "soon", either by an explicit call to
8150 FREETMPS, or by an implicit call at places such as statement boundaries.
8151 See also C<sv_mortalcopy> and C<sv_2mortal>.
8152
8153 =cut
8154 */
8155
8156 SV *
8157 Perl_sv_newmortal(pTHX)
8158 {
8159     dVAR;
8160     register SV *sv;
8161
8162     new_SV(sv);
8163     SvFLAGS(sv) = SVs_TEMP;
8164     PUSH_EXTEND_MORTAL__SV_C(sv);
8165     return sv;
8166 }
8167
8168
8169 /*
8170 =for apidoc newSVpvn_flags
8171
8172 Creates a new SV and copies a string into it.  The reference count for the
8173 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8174 string.  You are responsible for ensuring that the source string is at least
8175 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8176 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8177 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8178 returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
8179 C<SVf_UTF8> flag will be set on the new SV.
8180 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8181
8182     #define newSVpvn_utf8(s, len, u)                    \
8183         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8184
8185 =cut
8186 */
8187
8188 SV *
8189 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8190 {
8191     dVAR;
8192     register SV *sv;
8193
8194     /* All the flags we don't support must be zero.
8195        And we're new code so I'm going to assert this from the start.  */
8196     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8197     new_SV(sv);
8198     sv_setpvn(sv,s,len);
8199
8200     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8201      * and do what it does outselves here.
8202      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8203      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8204      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8205      * eleminate quite a few steps than it looks - Yves (explaining patch by gfx)
8206      */
8207
8208     SvFLAGS(sv) |= flags;
8209
8210     if(flags & SVs_TEMP){
8211         PUSH_EXTEND_MORTAL__SV_C(sv);
8212     }
8213
8214     return sv;
8215 }
8216
8217 /*
8218 =for apidoc sv_2mortal
8219
8220 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8221 by an explicit call to FREETMPS, or by an implicit call at places such as
8222 statement boundaries.  SvTEMP() is turned on which means that the SV's
8223 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
8224 and C<sv_mortalcopy>.
8225
8226 =cut
8227 */
8228
8229 SV *
8230 Perl_sv_2mortal(pTHX_ register SV *const sv)
8231 {
8232     dVAR;
8233     if (!sv)
8234         return NULL;
8235     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8236         return sv;
8237     PUSH_EXTEND_MORTAL__SV_C(sv);
8238     SvTEMP_on(sv);
8239     return sv;
8240 }
8241
8242 /*
8243 =for apidoc newSVpv
8244
8245 Creates a new SV and copies a string into it.  The reference count for the
8246 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8247 strlen().  For efficiency, consider using C<newSVpvn> instead.
8248
8249 =cut
8250 */
8251
8252 SV *
8253 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8254 {
8255     dVAR;
8256     register SV *sv;
8257
8258     new_SV(sv);
8259     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8260     return sv;
8261 }
8262
8263 /*
8264 =for apidoc newSVpvn
8265
8266 Creates a new SV and copies a string into it.  The reference count for the
8267 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8268 string.  You are responsible for ensuring that the source string is at least
8269 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8270
8271 =cut
8272 */
8273
8274 SV *
8275 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
8276 {
8277     dVAR;
8278     register SV *sv;
8279
8280     new_SV(sv);
8281     sv_setpvn(sv,s,len);
8282     return sv;
8283 }
8284
8285 /*
8286 =for apidoc newSVhek
8287
8288 Creates a new SV from the hash key structure.  It will generate scalars that
8289 point to the shared string table where possible. Returns a new (undefined)
8290 SV if the hek is NULL.
8291
8292 =cut
8293 */
8294
8295 SV *
8296 Perl_newSVhek(pTHX_ const HEK *const hek)
8297 {
8298     dVAR;
8299     if (!hek) {
8300         SV *sv;
8301
8302         new_SV(sv);
8303         return sv;
8304     }
8305
8306     if (HEK_LEN(hek) == HEf_SVKEY) {
8307         return newSVsv(*(SV**)HEK_KEY(hek));
8308     } else {
8309         const int flags = HEK_FLAGS(hek);
8310         if (flags & HVhek_WASUTF8) {
8311             /* Trouble :-)
8312                Andreas would like keys he put in as utf8 to come back as utf8
8313             */
8314             STRLEN utf8_len = HEK_LEN(hek);
8315             SV * const sv = newSV_type(SVt_PV);
8316             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8317             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8318             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8319             SvUTF8_on (sv);
8320             return sv;
8321         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8322             /* We don't have a pointer to the hv, so we have to replicate the
8323                flag into every HEK. This hv is using custom a hasing
8324                algorithm. Hence we can't return a shared string scalar, as
8325                that would contain the (wrong) hash value, and might get passed
8326                into an hv routine with a regular hash.
8327                Similarly, a hash that isn't using shared hash keys has to have
8328                the flag in every key so that we know not to try to call
8329                share_hek_kek on it.  */
8330
8331             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8332             if (HEK_UTF8(hek))
8333                 SvUTF8_on (sv);
8334             return sv;
8335         }
8336         /* This will be overwhelminly the most common case.  */
8337         {
8338             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8339                more efficient than sharepvn().  */
8340             SV *sv;
8341
8342             new_SV(sv);
8343             sv_upgrade(sv, SVt_PV);
8344             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8345             SvCUR_set(sv, HEK_LEN(hek));
8346             SvLEN_set(sv, 0);
8347             SvREADONLY_on(sv);
8348             SvFAKE_on(sv);
8349             SvPOK_on(sv);
8350             if (HEK_UTF8(hek))
8351                 SvUTF8_on(sv);
8352             return sv;
8353         }
8354     }
8355 }
8356
8357 /*
8358 =for apidoc newSVpvn_share
8359
8360 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8361 table. If the string does not already exist in the table, it is created
8362 first.  Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
8363 value is used; otherwise the hash is computed. The string's hash can be later
8364 be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
8365 that as the string table is used for shared hash keys these strings will have
8366 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8367
8368 =cut
8369 */
8370
8371 SV *
8372 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8373 {
8374     dVAR;
8375     register SV *sv;
8376     bool is_utf8 = FALSE;
8377     const char *const orig_src = src;
8378
8379     if (len < 0) {
8380         STRLEN tmplen = -len;
8381         is_utf8 = TRUE;
8382         /* See the note in hv.c:hv_fetch() --jhi */
8383         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8384         len = tmplen;
8385     }
8386     if (!hash)
8387         PERL_HASH(hash, src, len);
8388     new_SV(sv);
8389     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8390        changes here, update it there too.  */
8391     sv_upgrade(sv, SVt_PV);
8392     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8393     SvCUR_set(sv, len);
8394     SvLEN_set(sv, 0);
8395     SvREADONLY_on(sv);
8396     SvFAKE_on(sv);
8397     SvPOK_on(sv);
8398     if (is_utf8)
8399         SvUTF8_on(sv);
8400     if (src != orig_src)
8401         Safefree(src);
8402     return sv;
8403 }
8404
8405 /*
8406 =for apidoc newSVpv_share
8407
8408 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8409 string/length pair.
8410
8411 =cut
8412 */
8413
8414 SV *
8415 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8416 {
8417     return newSVpvn_share(src, strlen(src), hash);
8418 }
8419
8420 #if defined(PERL_IMPLICIT_CONTEXT)
8421
8422 /* pTHX_ magic can't cope with varargs, so this is a no-context
8423  * version of the main function, (which may itself be aliased to us).
8424  * Don't access this version directly.
8425  */
8426
8427 SV *
8428 Perl_newSVpvf_nocontext(const char *const pat, ...)
8429 {
8430     dTHX;
8431     register SV *sv;
8432     va_list args;
8433
8434     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8435
8436     va_start(args, pat);
8437     sv = vnewSVpvf(pat, &args);
8438     va_end(args);
8439     return sv;
8440 }
8441 #endif
8442
8443 /*
8444 =for apidoc newSVpvf
8445
8446 Creates a new SV and initializes it with the string formatted like
8447 C<sprintf>.
8448
8449 =cut
8450 */
8451
8452 SV *
8453 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8454 {
8455     register SV *sv;
8456     va_list args;
8457
8458     PERL_ARGS_ASSERT_NEWSVPVF;
8459
8460     va_start(args, pat);
8461     sv = vnewSVpvf(pat, &args);
8462     va_end(args);
8463     return sv;
8464 }
8465
8466 /* backend for newSVpvf() and newSVpvf_nocontext() */
8467
8468 SV *
8469 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8470 {
8471     dVAR;
8472     register SV *sv;
8473
8474     PERL_ARGS_ASSERT_VNEWSVPVF;
8475
8476     new_SV(sv);
8477     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8478     return sv;
8479 }
8480
8481 /*
8482 =for apidoc newSVnv
8483
8484 Creates a new SV and copies a floating point value into it.
8485 The reference count for the SV is set to 1.
8486
8487 =cut
8488 */
8489
8490 SV *
8491 Perl_newSVnv(pTHX_ const NV n)
8492 {
8493     dVAR;
8494     register SV *sv;
8495
8496     new_SV(sv);
8497     sv_setnv(sv,n);
8498     return sv;
8499 }
8500
8501 /*
8502 =for apidoc newSViv
8503
8504 Creates a new SV and copies an integer into it.  The reference count for the
8505 SV is set to 1.
8506
8507 =cut
8508 */
8509
8510 SV *
8511 Perl_newSViv(pTHX_ const IV i)
8512 {
8513     dVAR;
8514     register SV *sv;
8515
8516     new_SV(sv);
8517     sv_setiv(sv,i);
8518     return sv;
8519 }
8520
8521 /*
8522 =for apidoc newSVuv
8523
8524 Creates a new SV and copies an unsigned integer into it.
8525 The reference count for the SV is set to 1.
8526
8527 =cut
8528 */
8529
8530 SV *
8531 Perl_newSVuv(pTHX_ const UV u)
8532 {
8533     dVAR;
8534     register SV *sv;
8535
8536     new_SV(sv);
8537     sv_setuv(sv,u);
8538     return sv;
8539 }
8540
8541 /*
8542 =for apidoc newSV_type
8543
8544 Creates a new SV, of the type specified.  The reference count for the new SV
8545 is set to 1.
8546
8547 =cut
8548 */
8549
8550 SV *
8551 Perl_newSV_type(pTHX_ const svtype type)
8552 {
8553     register SV *sv;
8554
8555     new_SV(sv);
8556     sv_upgrade(sv, type);
8557     return sv;
8558 }
8559
8560 /*
8561 =for apidoc newRV_noinc
8562
8563 Creates an RV wrapper for an SV.  The reference count for the original
8564 SV is B<not> incremented.
8565
8566 =cut
8567 */
8568
8569 SV *
8570 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8571 {
8572     dVAR;
8573     register SV *sv = newSV_type(SVt_IV);
8574
8575     PERL_ARGS_ASSERT_NEWRV_NOINC;
8576
8577     SvTEMP_off(tmpRef);
8578     SvRV_set(sv, tmpRef);
8579     SvROK_on(sv);
8580     return sv;
8581 }
8582
8583 /* newRV_inc is the official function name to use now.
8584  * newRV_inc is in fact #defined to newRV in sv.h
8585  */
8586
8587 SV *
8588 Perl_newRV(pTHX_ SV *const sv)
8589 {
8590     dVAR;
8591
8592     PERL_ARGS_ASSERT_NEWRV;
8593
8594     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8595 }
8596
8597 /*
8598 =for apidoc newSVsv
8599
8600 Creates a new SV which is an exact duplicate of the original SV.
8601 (Uses C<sv_setsv>).
8602
8603 =cut
8604 */
8605
8606 SV *
8607 Perl_newSVsv(pTHX_ register SV *const old)
8608 {
8609     dVAR;
8610     register SV *sv;
8611
8612     if (!old)
8613         return NULL;
8614     if (SvTYPE(old) == SVTYPEMASK) {
8615         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8616         return NULL;
8617     }
8618     new_SV(sv);
8619     /* SV_GMAGIC is the default for sv_setv()
8620        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8621        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8622     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8623     return sv;
8624 }
8625
8626 /*
8627 =for apidoc sv_reset
8628
8629 Underlying implementation for the C<reset> Perl function.
8630 Note that the perl-level function is vaguely deprecated.
8631
8632 =cut
8633 */
8634
8635 void
8636 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8637 {
8638     dVAR;
8639     char todo[PERL_UCHAR_MAX+1];
8640
8641     PERL_ARGS_ASSERT_SV_RESET;
8642
8643     if (!stash)
8644         return;
8645
8646     if (!*s) {          /* reset ?? searches */
8647         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8648         if (mg) {
8649             const U32 count = mg->mg_len / sizeof(PMOP**);
8650             PMOP **pmp = (PMOP**) mg->mg_ptr;
8651             PMOP *const *const end = pmp + count;
8652
8653             while (pmp < end) {
8654 #ifdef USE_ITHREADS
8655                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8656 #else
8657                 (*pmp)->op_pmflags &= ~PMf_USED;
8658 #endif
8659                 ++pmp;
8660             }
8661         }
8662         return;
8663     }
8664
8665     /* reset variables */
8666
8667     if (!HvARRAY(stash))
8668         return;
8669
8670     Zero(todo, 256, char);
8671     while (*s) {
8672         I32 max;
8673         I32 i = (unsigned char)*s;
8674         if (s[1] == '-') {
8675             s += 2;
8676         }
8677         max = (unsigned char)*s++;
8678         for ( ; i <= max; i++) {
8679             todo[i] = 1;
8680         }
8681         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8682             HE *entry;
8683             for (entry = HvARRAY(stash)[i];
8684                  entry;
8685                  entry = HeNEXT(entry))
8686             {
8687                 register GV *gv;
8688                 register SV *sv;
8689
8690                 if (!todo[(U8)*HeKEY(entry)])
8691                     continue;
8692                 gv = MUTABLE_GV(HeVAL(entry));
8693                 sv = GvSV(gv);
8694                 if (sv) {
8695                     if (SvTHINKFIRST(sv)) {
8696                         if (!SvREADONLY(sv) && SvROK(sv))
8697                             sv_unref(sv);
8698                         /* XXX Is this continue a bug? Why should THINKFIRST
8699                            exempt us from resetting arrays and hashes?  */
8700                         continue;
8701                     }
8702                     SvOK_off(sv);
8703                     if (SvTYPE(sv) >= SVt_PV) {
8704                         SvCUR_set(sv, 0);
8705                         if (SvPVX_const(sv) != NULL)
8706                             *SvPVX(sv) = '\0';
8707                         SvTAINT(sv);
8708                     }
8709                 }
8710                 if (GvAV(gv)) {
8711                     av_clear(GvAV(gv));
8712                 }
8713                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8714 #if defined(VMS)
8715                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8716 #else /* ! VMS */
8717                     hv_clear(GvHV(gv));
8718 #  if defined(USE_ENVIRON_ARRAY)
8719                     if (gv == PL_envgv)
8720                         my_clearenv();
8721 #  endif /* USE_ENVIRON_ARRAY */
8722 #endif /* VMS */
8723                 }
8724             }
8725         }
8726     }
8727 }
8728
8729 /*
8730 =for apidoc sv_2io
8731
8732 Using various gambits, try to get an IO from an SV: the IO slot if its a
8733 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8734 named after the PV if we're a string.
8735
8736 =cut
8737 */
8738
8739 IO*
8740 Perl_sv_2io(pTHX_ SV *const sv)
8741 {
8742     IO* io;
8743     GV* gv;
8744
8745     PERL_ARGS_ASSERT_SV_2IO;
8746
8747     switch (SvTYPE(sv)) {
8748     case SVt_PVIO:
8749         io = MUTABLE_IO(sv);
8750         break;
8751     case SVt_PVGV:
8752     case SVt_PVLV:
8753         if (isGV_with_GP(sv)) {
8754             gv = MUTABLE_GV(sv);
8755             io = GvIO(gv);
8756             if (!io)
8757                 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8758             break;
8759         }
8760         /* FALL THROUGH */
8761     default:
8762         if (!SvOK(sv))
8763             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8764         if (SvROK(sv))
8765             return sv_2io(SvRV(sv));
8766         gv = gv_fetchsv(sv, 0, SVt_PVIO);
8767         if (gv)
8768             io = GvIO(gv);
8769         else
8770             io = 0;
8771         if (!io)
8772             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
8773         break;
8774     }
8775     return io;
8776 }
8777
8778 /*
8779 =for apidoc sv_2cv
8780
8781 Using various gambits, try to get a CV from an SV; in addition, try if
8782 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8783 The flags in C<lref> are passed to gv_fetchsv.
8784
8785 =cut
8786 */
8787
8788 CV *
8789 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8790 {
8791     dVAR;
8792     GV *gv = NULL;
8793     CV *cv = NULL;
8794
8795     PERL_ARGS_ASSERT_SV_2CV;
8796
8797     if (!sv) {
8798         *st = NULL;
8799         *gvp = NULL;
8800         return NULL;
8801     }
8802     switch (SvTYPE(sv)) {
8803     case SVt_PVCV:
8804         *st = CvSTASH(sv);
8805         *gvp = NULL;
8806         return MUTABLE_CV(sv);
8807     case SVt_PVHV:
8808     case SVt_PVAV:
8809         *st = NULL;
8810         *gvp = NULL;
8811         return NULL;
8812     case SVt_PVGV:
8813         if (isGV_with_GP(sv)) {
8814             gv = MUTABLE_GV(sv);
8815             *gvp = gv;
8816             *st = GvESTASH(gv);
8817             goto fix_gv;
8818         }
8819         /* FALL THROUGH */
8820
8821     default:
8822         if (SvROK(sv)) {
8823             SvGETMAGIC(sv);
8824             if (SvAMAGIC(sv))
8825                 sv = amagic_deref_call(sv, to_cv_amg);
8826             /* At this point I'd like to do SPAGAIN, but really I need to
8827                force it upon my callers. Hmmm. This is a mess... */
8828
8829             sv = SvRV(sv);
8830             if (SvTYPE(sv) == SVt_PVCV) {
8831                 cv = MUTABLE_CV(sv);
8832                 *gvp = NULL;
8833                 *st = CvSTASH(cv);
8834                 return cv;
8835             }
8836             else if(isGV_with_GP(sv))
8837                 gv = MUTABLE_GV(sv);
8838             else
8839                 Perl_croak(aTHX_ "Not a subroutine reference");
8840         }
8841         else if (isGV_with_GP(sv)) {
8842             SvGETMAGIC(sv);
8843             gv = MUTABLE_GV(sv);
8844         }
8845         else
8846             gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
8847         *gvp = gv;
8848         if (!gv) {
8849             *st = NULL;
8850             return NULL;
8851         }
8852         /* Some flags to gv_fetchsv mean don't really create the GV  */
8853         if (!isGV_with_GP(gv)) {
8854             *st = NULL;
8855             return NULL;
8856         }
8857         *st = GvESTASH(gv);
8858     fix_gv:
8859         if (lref && !GvCVu(gv)) {
8860             SV *tmpsv;
8861             ENTER;
8862             tmpsv = newSV(0);
8863             gv_efullname3(tmpsv, gv, NULL);
8864             /* XXX this is probably not what they think they're getting.
8865              * It has the same effect as "sub name;", i.e. just a forward
8866              * declaration! */
8867             newSUB(start_subparse(FALSE, 0),
8868                    newSVOP(OP_CONST, 0, tmpsv),
8869                    NULL, NULL);
8870             LEAVE;
8871             if (!GvCVu(gv))
8872                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
8873                            SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8874         }
8875         return GvCVu(gv);
8876     }
8877 }
8878
8879 /*
8880 =for apidoc sv_true
8881
8882 Returns true if the SV has a true value by Perl's rules.
8883 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8884 instead use an in-line version.
8885
8886 =cut
8887 */
8888
8889 I32
8890 Perl_sv_true(pTHX_ register SV *const sv)
8891 {
8892     if (!sv)
8893         return 0;
8894     if (SvPOK(sv)) {
8895         register const XPV* const tXpv = (XPV*)SvANY(sv);
8896         if (tXpv &&
8897                 (tXpv->xpv_cur > 1 ||
8898                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
8899             return 1;
8900         else
8901             return 0;
8902     }
8903     else {
8904         if (SvIOK(sv))
8905             return SvIVX(sv) != 0;
8906         else {
8907             if (SvNOK(sv))
8908                 return SvNVX(sv) != 0.0;
8909             else
8910                 return sv_2bool(sv);
8911         }
8912     }
8913 }
8914
8915 /*
8916 =for apidoc sv_pvn_force
8917
8918 Get a sensible string out of the SV somehow.
8919 A private implementation of the C<SvPV_force> macro for compilers which
8920 can't cope with complex macro expressions. Always use the macro instead.
8921
8922 =for apidoc sv_pvn_force_flags
8923
8924 Get a sensible string out of the SV somehow.
8925 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8926 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8927 implemented in terms of this function.
8928 You normally want to use the various wrapper macros instead: see
8929 C<SvPV_force> and C<SvPV_force_nomg>
8930
8931 =cut
8932 */
8933
8934 char *
8935 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8936 {
8937     dVAR;
8938
8939     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8940
8941     if (SvTHINKFIRST(sv) && !SvROK(sv))
8942         sv_force_normal_flags(sv, 0);
8943
8944     if (SvPOK(sv)) {
8945         if (lp)
8946             *lp = SvCUR(sv);
8947     }
8948     else {
8949         char *s;
8950         STRLEN len;
8951  
8952         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
8953             const char * const ref = sv_reftype(sv,0);
8954             if (PL_op)
8955                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
8956                            ref, OP_DESC(PL_op));
8957             else
8958                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
8959         }
8960         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8961             || isGV_with_GP(sv))
8962             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
8963                 OP_DESC(PL_op));
8964         s = sv_2pv_flags(sv, &len, flags);
8965         if (lp)
8966             *lp = len;
8967
8968         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
8969             if (SvROK(sv))
8970                 sv_unref(sv);
8971             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
8972             SvGROW(sv, len + 1);
8973             Move(s,SvPVX(sv),len,char);
8974             SvCUR_set(sv, len);
8975             SvPVX(sv)[len] = '\0';
8976         }
8977         if (!SvPOK(sv)) {
8978             SvPOK_on(sv);               /* validate pointer */
8979             SvTAINT(sv);
8980             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
8981                                   PTR2UV(sv),SvPVX_const(sv)));
8982         }
8983     }
8984     return SvPVX_mutable(sv);
8985 }
8986
8987 /*
8988 =for apidoc sv_pvbyten_force
8989
8990 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
8991
8992 =cut
8993 */
8994
8995 char *
8996 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
8997 {
8998     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8999
9000     sv_pvn_force(sv,lp);
9001     sv_utf8_downgrade(sv,0);
9002     *lp = SvCUR(sv);
9003     return SvPVX(sv);
9004 }
9005
9006 /*
9007 =for apidoc sv_pvutf8n_force
9008
9009 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
9010
9011 =cut
9012 */
9013
9014 char *
9015 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9016 {
9017     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9018
9019     sv_pvn_force(sv,lp);
9020     sv_utf8_upgrade(sv);
9021     *lp = SvCUR(sv);
9022     return SvPVX(sv);
9023 }
9024
9025 /*
9026 =for apidoc sv_reftype
9027
9028 Returns a string describing what the SV is a reference to.
9029
9030 =cut
9031 */
9032
9033 const char *
9034 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9035 {
9036     PERL_ARGS_ASSERT_SV_REFTYPE;
9037
9038     /* The fact that I don't need to downcast to char * everywhere, only in ?:
9039        inside return suggests a const propagation bug in g++.  */
9040     if (ob && SvOBJECT(sv)) {
9041         char * const name = HvNAME_get(SvSTASH(sv));
9042         return name ? name : (char *) "__ANON__";
9043     }
9044     else {
9045         switch (SvTYPE(sv)) {
9046         case SVt_NULL:
9047         case SVt_IV:
9048         case SVt_NV:
9049         case SVt_PV:
9050         case SVt_PVIV:
9051         case SVt_PVNV:
9052         case SVt_PVMG:
9053                                 if (SvVOK(sv))
9054                                     return "VSTRING";
9055                                 if (SvROK(sv))
9056                                     return "REF";
9057                                 else
9058                                     return "SCALAR";
9059
9060         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9061                                 /* tied lvalues should appear to be
9062                                  * scalars for backwards compatitbility */
9063                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9064                                     ? "SCALAR" : "LVALUE");
9065         case SVt_PVAV:          return "ARRAY";
9066         case SVt_PVHV:          return "HASH";
9067         case SVt_PVCV:          return "CODE";
9068         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9069                                     ? "GLOB" : "SCALAR");
9070         case SVt_PVFM:          return "FORMAT";
9071         case SVt_PVIO:          return "IO";
9072         case SVt_BIND:          return "BIND";
9073         case SVt_REGEXP:        return "REGEXP";
9074         default:                return "UNKNOWN";
9075         }
9076     }
9077 }
9078
9079 /*
9080 =for apidoc sv_isobject
9081
9082 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9083 object.  If the SV is not an RV, or if the object is not blessed, then this
9084 will return false.
9085
9086 =cut
9087 */
9088
9089 int
9090 Perl_sv_isobject(pTHX_ SV *sv)
9091 {
9092     if (!sv)
9093         return 0;
9094     SvGETMAGIC(sv);
9095     if (!SvROK(sv))
9096         return 0;
9097     sv = SvRV(sv);
9098     if (!SvOBJECT(sv))
9099         return 0;
9100     return 1;
9101 }
9102
9103 /*
9104 =for apidoc sv_isa
9105
9106 Returns a boolean indicating whether the SV is blessed into the specified
9107 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9108 an inheritance relationship.
9109
9110 =cut
9111 */
9112
9113 int
9114 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9115 {
9116     const char *hvname;
9117
9118     PERL_ARGS_ASSERT_SV_ISA;
9119
9120     if (!sv)
9121         return 0;
9122     SvGETMAGIC(sv);
9123     if (!SvROK(sv))
9124         return 0;
9125     sv = SvRV(sv);
9126     if (!SvOBJECT(sv))
9127         return 0;
9128     hvname = HvNAME_get(SvSTASH(sv));
9129     if (!hvname)
9130         return 0;
9131
9132     return strEQ(hvname, name);
9133 }
9134
9135 /*
9136 =for apidoc newSVrv
9137
9138 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9139 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9140 be blessed in the specified package.  The new SV is returned and its
9141 reference count is 1.
9142
9143 =cut
9144 */
9145
9146 SV*
9147 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9148 {
9149     dVAR;
9150     SV *sv;
9151
9152     PERL_ARGS_ASSERT_NEWSVRV;
9153
9154     new_SV(sv);
9155
9156     SV_CHECK_THINKFIRST_COW_DROP(rv);
9157     (void)SvAMAGIC_off(rv);
9158
9159     if (SvTYPE(rv) >= SVt_PVMG) {
9160         const U32 refcnt = SvREFCNT(rv);
9161         SvREFCNT(rv) = 0;
9162         sv_clear(rv);
9163         SvFLAGS(rv) = 0;
9164         SvREFCNT(rv) = refcnt;
9165
9166         sv_upgrade(rv, SVt_IV);
9167     } else if (SvROK(rv)) {
9168         SvREFCNT_dec(SvRV(rv));
9169     } else {
9170         prepare_SV_for_RV(rv);
9171     }
9172
9173     SvOK_off(rv);
9174     SvRV_set(rv, sv);
9175     SvROK_on(rv);
9176
9177     if (classname) {
9178         HV* const stash = gv_stashpv(classname, GV_ADD);
9179         (void)sv_bless(rv, stash);
9180     }
9181     return sv;
9182 }
9183
9184 /*
9185 =for apidoc sv_setref_pv
9186
9187 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9188 argument will be upgraded to an RV.  That RV will be modified to point to
9189 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9190 into the SV.  The C<classname> argument indicates the package for the
9191 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9192 will have a reference count of 1, and the RV will be returned.
9193
9194 Do not use with other Perl types such as HV, AV, SV, CV, because those
9195 objects will become corrupted by the pointer copy process.
9196
9197 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9198
9199 =cut
9200 */
9201
9202 SV*
9203 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9204 {
9205     dVAR;
9206
9207     PERL_ARGS_ASSERT_SV_SETREF_PV;
9208
9209     if (!pv) {
9210         sv_setsv(rv, &PL_sv_undef);
9211         SvSETMAGIC(rv);
9212     }
9213     else
9214         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9215     return rv;
9216 }
9217
9218 /*
9219 =for apidoc sv_setref_iv
9220
9221 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9222 argument will be upgraded to an RV.  That RV will be modified to point to
9223 the new SV.  The C<classname> argument indicates the package for the
9224 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9225 will have a reference count of 1, and the RV will be returned.
9226
9227 =cut
9228 */
9229
9230 SV*
9231 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9232 {
9233     PERL_ARGS_ASSERT_SV_SETREF_IV;
9234
9235     sv_setiv(newSVrv(rv,classname), iv);
9236     return rv;
9237 }
9238
9239 /*
9240 =for apidoc sv_setref_uv
9241
9242 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9243 argument will be upgraded to an RV.  That RV will be modified to point to
9244 the new SV.  The C<classname> argument indicates the package for the
9245 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9246 will have a reference count of 1, and the RV will be returned.
9247
9248 =cut
9249 */
9250
9251 SV*
9252 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9253 {
9254     PERL_ARGS_ASSERT_SV_SETREF_UV;
9255
9256     sv_setuv(newSVrv(rv,classname), uv);
9257     return rv;
9258 }
9259
9260 /*
9261 =for apidoc sv_setref_nv
9262
9263 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9264 argument will be upgraded to an RV.  That RV will be modified to point to
9265 the new SV.  The C<classname> argument indicates the package for the
9266 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9267 will have a reference count of 1, and the RV will be returned.
9268
9269 =cut
9270 */
9271
9272 SV*
9273 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9274 {
9275     PERL_ARGS_ASSERT_SV_SETREF_NV;
9276
9277     sv_setnv(newSVrv(rv,classname), nv);
9278     return rv;
9279 }
9280
9281 /*
9282 =for apidoc sv_setref_pvn
9283
9284 Copies a string into a new SV, optionally blessing the SV.  The length of the
9285 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9286 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9287 argument indicates the package for the blessing.  Set C<classname> to
9288 C<NULL> to avoid the blessing.  The new SV will have a reference count
9289 of 1, and the RV will be returned.
9290
9291 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9292
9293 =cut
9294 */
9295
9296 SV*
9297 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9298                    const char *const pv, const STRLEN n)
9299 {
9300     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9301
9302     sv_setpvn(newSVrv(rv,classname), pv, n);
9303     return rv;
9304 }
9305
9306 /*
9307 =for apidoc sv_bless
9308
9309 Blesses an SV into a specified package.  The SV must be an RV.  The package
9310 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9311 of the SV is unaffected.
9312
9313 =cut
9314 */
9315
9316 SV*
9317 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9318 {
9319     dVAR;
9320     SV *tmpRef;
9321
9322     PERL_ARGS_ASSERT_SV_BLESS;
9323
9324     if (!SvROK(sv))
9325         Perl_croak(aTHX_ "Can't bless non-reference value");
9326     tmpRef = SvRV(sv);
9327     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9328         if (SvIsCOW(tmpRef))
9329             sv_force_normal_flags(tmpRef, 0);
9330         if (SvREADONLY(tmpRef))
9331             Perl_croak_no_modify(aTHX);
9332         if (SvOBJECT(tmpRef)) {
9333             if (SvTYPE(tmpRef) != SVt_PVIO)
9334                 --PL_sv_objcount;
9335             SvREFCNT_dec(SvSTASH(tmpRef));
9336         }
9337     }
9338     SvOBJECT_on(tmpRef);
9339     if (SvTYPE(tmpRef) != SVt_PVIO)
9340         ++PL_sv_objcount;
9341     SvUPGRADE(tmpRef, SVt_PVMG);
9342     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9343
9344     if (Gv_AMG(stash))
9345         SvAMAGIC_on(sv);
9346     else
9347         (void)SvAMAGIC_off(sv);
9348
9349     if(SvSMAGICAL(tmpRef))
9350         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9351             mg_set(tmpRef);
9352
9353
9354
9355     return sv;
9356 }
9357
9358 /* Downgrades a PVGV to a PVMG. If it’s actually a PVLV, we leave the type
9359  * as it is after unglobbing it.
9360  */
9361
9362 STATIC void
9363 S_sv_unglob(pTHX_ SV *const sv)
9364 {
9365     dVAR;
9366     void *xpvmg;
9367     HV *stash;
9368     SV * const temp = sv_newmortal();
9369
9370     PERL_ARGS_ASSERT_SV_UNGLOB;
9371
9372     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9373     SvFAKE_off(sv);
9374     gv_efullname3(temp, MUTABLE_GV(sv), "*");
9375
9376     if (GvGP(sv)) {
9377         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9378            && HvNAME_get(stash))
9379             mro_method_changed_in(stash);
9380         gp_free(MUTABLE_GV(sv));
9381     }
9382     if (GvSTASH(sv)) {
9383         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9384         GvSTASH(sv) = NULL;
9385     }
9386     GvMULTI_off(sv);
9387     if (GvNAME_HEK(sv)) {
9388         unshare_hek(GvNAME_HEK(sv));
9389     }
9390     isGV_with_GP_off(sv);
9391
9392     if(SvTYPE(sv) == SVt_PVGV) {
9393         /* need to keep SvANY(sv) in the right arena */
9394         xpvmg = new_XPVMG();
9395         StructCopy(SvANY(sv), xpvmg, XPVMG);
9396         del_XPVGV(SvANY(sv));
9397         SvANY(sv) = xpvmg;
9398
9399         SvFLAGS(sv) &= ~SVTYPEMASK;
9400         SvFLAGS(sv) |= SVt_PVMG;
9401     }
9402
9403     /* Intentionally not calling any local SET magic, as this isn't so much a
9404        set operation as merely an internal storage change.  */
9405     sv_setsv_flags(sv, temp, 0);
9406 }
9407
9408 /*
9409 =for apidoc sv_unref_flags
9410
9411 Unsets the RV status of the SV, and decrements the reference count of
9412 whatever was being referenced by the RV.  This can almost be thought of
9413 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9414 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9415 (otherwise the decrementing is conditional on the reference count being
9416 different from one or the reference being a readonly SV).
9417 See C<SvROK_off>.
9418
9419 =cut
9420 */
9421
9422 void
9423 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9424 {
9425     SV* const target = SvRV(ref);
9426
9427     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9428
9429     if (SvWEAKREF(ref)) {
9430         sv_del_backref(target, ref);
9431         SvWEAKREF_off(ref);
9432         SvRV_set(ref, NULL);
9433         return;
9434     }
9435     SvRV_set(ref, NULL);
9436     SvROK_off(ref);
9437     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9438        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9439     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9440         SvREFCNT_dec(target);
9441     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9442         sv_2mortal(target);     /* Schedule for freeing later */
9443 }
9444
9445 /*
9446 =for apidoc sv_untaint
9447
9448 Untaint an SV. Use C<SvTAINTED_off> instead.
9449 =cut
9450 */
9451
9452 void
9453 Perl_sv_untaint(pTHX_ SV *const sv)
9454 {
9455     PERL_ARGS_ASSERT_SV_UNTAINT;
9456
9457     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9458         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9459         if (mg)
9460             mg->mg_len &= ~1;
9461     }
9462 }
9463
9464 /*
9465 =for apidoc sv_tainted
9466
9467 Test an SV for taintedness. Use C<SvTAINTED> instead.
9468 =cut
9469 */
9470
9471 bool
9472 Perl_sv_tainted(pTHX_ SV *const sv)
9473 {
9474     PERL_ARGS_ASSERT_SV_TAINTED;
9475
9476     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9477         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9478         if (mg && (mg->mg_len & 1) )
9479             return TRUE;
9480     }
9481     return FALSE;
9482 }
9483
9484 /*
9485 =for apidoc sv_setpviv
9486
9487 Copies an integer into the given SV, also updating its string value.
9488 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9489
9490 =cut
9491 */
9492
9493 void
9494 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9495 {
9496     char buf[TYPE_CHARS(UV)];
9497     char *ebuf;
9498     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9499
9500     PERL_ARGS_ASSERT_SV_SETPVIV;
9501
9502     sv_setpvn(sv, ptr, ebuf - ptr);
9503 }
9504
9505 /*
9506 =for apidoc sv_setpviv_mg
9507
9508 Like C<sv_setpviv>, but also handles 'set' magic.
9509
9510 =cut
9511 */
9512
9513 void
9514 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9515 {
9516     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9517
9518     sv_setpviv(sv, iv);
9519     SvSETMAGIC(sv);
9520 }
9521
9522 #if defined(PERL_IMPLICIT_CONTEXT)
9523
9524 /* pTHX_ magic can't cope with varargs, so this is a no-context
9525  * version of the main function, (which may itself be aliased to us).
9526  * Don't access this version directly.
9527  */
9528
9529 void
9530 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9531 {
9532     dTHX;
9533     va_list args;
9534
9535     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9536
9537     va_start(args, pat);
9538     sv_vsetpvf(sv, pat, &args);
9539     va_end(args);
9540 }
9541
9542 /* pTHX_ magic can't cope with varargs, so this is a no-context
9543  * version of the main function, (which may itself be aliased to us).
9544  * Don't access this version directly.
9545  */
9546
9547 void
9548 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9549 {
9550     dTHX;
9551     va_list args;
9552
9553     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9554
9555     va_start(args, pat);
9556     sv_vsetpvf_mg(sv, pat, &args);
9557     va_end(args);
9558 }
9559 #endif
9560
9561 /*
9562 =for apidoc sv_setpvf
9563
9564 Works like C<sv_catpvf> but copies the text into the SV instead of
9565 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9566
9567 =cut
9568 */
9569
9570 void
9571 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9572 {
9573     va_list args;
9574
9575     PERL_ARGS_ASSERT_SV_SETPVF;
9576
9577     va_start(args, pat);
9578     sv_vsetpvf(sv, pat, &args);
9579     va_end(args);
9580 }
9581
9582 /*
9583 =for apidoc sv_vsetpvf
9584
9585 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9586 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9587
9588 Usually used via its frontend C<sv_setpvf>.
9589
9590 =cut
9591 */
9592
9593 void
9594 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9595 {
9596     PERL_ARGS_ASSERT_SV_VSETPVF;
9597
9598     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9599 }
9600
9601 /*
9602 =for apidoc sv_setpvf_mg
9603
9604 Like C<sv_setpvf>, but also handles 'set' magic.
9605
9606 =cut
9607 */
9608
9609 void
9610 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9611 {
9612     va_list args;
9613
9614     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9615
9616     va_start(args, pat);
9617     sv_vsetpvf_mg(sv, pat, &args);
9618     va_end(args);
9619 }
9620
9621 /*
9622 =for apidoc sv_vsetpvf_mg
9623
9624 Like C<sv_vsetpvf>, but also handles 'set' magic.
9625
9626 Usually used via its frontend C<sv_setpvf_mg>.
9627
9628 =cut
9629 */
9630
9631 void
9632 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9633 {
9634     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9635
9636     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9637     SvSETMAGIC(sv);
9638 }
9639
9640 #if defined(PERL_IMPLICIT_CONTEXT)
9641
9642 /* pTHX_ magic can't cope with varargs, so this is a no-context
9643  * version of the main function, (which may itself be aliased to us).
9644  * Don't access this version directly.
9645  */
9646
9647 void
9648 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9649 {
9650     dTHX;
9651     va_list args;
9652
9653     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9654
9655     va_start(args, pat);
9656     sv_vcatpvf(sv, pat, &args);
9657     va_end(args);
9658 }
9659
9660 /* pTHX_ magic can't cope with varargs, so this is a no-context
9661  * version of the main function, (which may itself be aliased to us).
9662  * Don't access this version directly.
9663  */
9664
9665 void
9666 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9667 {
9668     dTHX;
9669     va_list args;
9670
9671     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9672
9673     va_start(args, pat);
9674     sv_vcatpvf_mg(sv, pat, &args);
9675     va_end(args);
9676 }
9677 #endif
9678
9679 /*
9680 =for apidoc sv_catpvf
9681
9682 Processes its arguments like C<sprintf> and appends the formatted
9683 output to an SV.  If the appended data contains "wide" characters
9684 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9685 and characters >255 formatted with %c), the original SV might get
9686 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9687 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9688 valid UTF-8; if the original SV was bytes, the pattern should be too.
9689
9690 =cut */
9691
9692 void
9693 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9694 {
9695     va_list args;
9696
9697     PERL_ARGS_ASSERT_SV_CATPVF;
9698
9699     va_start(args, pat);
9700     sv_vcatpvf(sv, pat, &args);
9701     va_end(args);
9702 }
9703
9704 /*
9705 =for apidoc sv_vcatpvf
9706
9707 Processes its arguments like C<vsprintf> and appends the formatted output
9708 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9709
9710 Usually used via its frontend C<sv_catpvf>.
9711
9712 =cut
9713 */
9714
9715 void
9716 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9717 {
9718     PERL_ARGS_ASSERT_SV_VCATPVF;
9719
9720     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9721 }
9722
9723 /*
9724 =for apidoc sv_catpvf_mg
9725
9726 Like C<sv_catpvf>, but also handles 'set' magic.
9727
9728 =cut
9729 */
9730
9731 void
9732 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9733 {
9734     va_list args;
9735
9736     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9737
9738     va_start(args, pat);
9739     sv_vcatpvf_mg(sv, pat, &args);
9740     va_end(args);
9741 }
9742
9743 /*
9744 =for apidoc sv_vcatpvf_mg
9745
9746 Like C<sv_vcatpvf>, but also handles 'set' magic.
9747
9748 Usually used via its frontend C<sv_catpvf_mg>.
9749
9750 =cut
9751 */
9752
9753 void
9754 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9755 {
9756     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9757
9758     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9759     SvSETMAGIC(sv);
9760 }
9761
9762 /*
9763 =for apidoc sv_vsetpvfn
9764
9765 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9766 appending it.
9767
9768 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9769
9770 =cut
9771 */
9772
9773 void
9774 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9775                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9776 {
9777     PERL_ARGS_ASSERT_SV_VSETPVFN;
9778
9779     sv_setpvs(sv, "");
9780     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9781 }
9782
9783
9784 /*
9785  * Warn of missing argument to sprintf, and then return a defined value
9786  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9787  */
9788 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9789 STATIC SV*
9790 S_vcatpvfn_missing_argument(pTHX) {
9791     if (ckWARN(WARN_MISSING)) {
9792         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9793                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9794     }
9795     return &PL_sv_no;
9796 }
9797
9798
9799 STATIC I32
9800 S_expect_number(pTHX_ char **const pattern)
9801 {
9802     dVAR;
9803     I32 var = 0;
9804
9805     PERL_ARGS_ASSERT_EXPECT_NUMBER;
9806
9807     switch (**pattern) {
9808     case '1': case '2': case '3':
9809     case '4': case '5': case '6':
9810     case '7': case '8': case '9':
9811         var = *(*pattern)++ - '0';
9812         while (isDIGIT(**pattern)) {
9813             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9814             if (tmp < var)
9815                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9816             var = tmp;
9817         }
9818     }
9819     return var;
9820 }
9821
9822 STATIC char *
9823 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9824 {
9825     const int neg = nv < 0;
9826     UV uv;
9827
9828     PERL_ARGS_ASSERT_F0CONVERT;
9829
9830     if (neg)
9831         nv = -nv;
9832     if (nv < UV_MAX) {
9833         char *p = endbuf;
9834         nv += 0.5;
9835         uv = (UV)nv;
9836         if (uv & 1 && uv == nv)
9837             uv--;                       /* Round to even */
9838         do {
9839             const unsigned dig = uv % 10;
9840             *--p = '0' + dig;
9841         } while (uv /= 10);
9842         if (neg)
9843             *--p = '-';
9844         *len = endbuf - p;
9845         return p;
9846     }
9847     return NULL;
9848 }
9849
9850
9851 /*
9852 =for apidoc sv_vcatpvfn
9853
9854 Processes its arguments like C<vsprintf> and appends the formatted output
9855 to an SV.  Uses an array of SVs if the C style variable argument list is
9856 missing (NULL).  When running with taint checks enabled, indicates via
9857 C<maybe_tainted> if results are untrustworthy (often due to the use of
9858 locales).
9859
9860 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9861
9862 =cut
9863 */
9864
9865
9866 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
9867                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
9868                         vec_utf8 = DO_UTF8(vecsv);
9869
9870 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9871
9872 void
9873 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9874                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9875 {
9876     dVAR;
9877     char *p;
9878     char *q;
9879     const char *patend;
9880     STRLEN origlen;
9881     I32 svix = 0;
9882     static const char nullstr[] = "(null)";
9883     SV *argsv = NULL;
9884     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
9885     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
9886     SV *nsv = NULL;
9887     /* Times 4: a decimal digit takes more than 3 binary digits.
9888      * NV_DIG: mantissa takes than many decimal digits.
9889      * Plus 32: Playing safe. */
9890     char ebuf[IV_DIG * 4 + NV_DIG + 32];
9891     /* large enough for "%#.#f" --chip */
9892     /* what about long double NVs? --jhi */
9893
9894     PERL_ARGS_ASSERT_SV_VCATPVFN;
9895     PERL_UNUSED_ARG(maybe_tainted);
9896
9897     /* no matter what, this is a string now */
9898     (void)SvPV_force(sv, origlen);
9899
9900     /* special-case "", "%s", and "%-p" (SVf - see below) */
9901     if (patlen == 0)
9902         return;
9903     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
9904         if (args) {
9905             const char * const s = va_arg(*args, char*);
9906             sv_catpv(sv, s ? s : nullstr);
9907         }
9908         else if (svix < svmax) {
9909             sv_catsv(sv, *svargs);
9910         }
9911         else
9912             S_vcatpvfn_missing_argument(aTHX);
9913         return;
9914     }
9915     if (args && patlen == 3 && pat[0] == '%' &&
9916                 pat[1] == '-' && pat[2] == 'p') {
9917         argsv = MUTABLE_SV(va_arg(*args, void*));
9918         sv_catsv(sv, argsv);
9919         return;
9920     }
9921
9922 #ifndef USE_LONG_DOUBLE
9923     /* special-case "%.<number>[gf]" */
9924     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
9925          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9926         unsigned digits = 0;
9927         const char *pp;
9928
9929         pp = pat + 2;
9930         while (*pp >= '0' && *pp <= '9')
9931             digits = 10 * digits + (*pp++ - '0');
9932         if (pp - pat == (int)patlen - 1 && svix < svmax) {
9933             const NV nv = SvNV(*svargs);
9934             if (*pp == 'g') {
9935                 /* Add check for digits != 0 because it seems that some
9936                    gconverts are buggy in this case, and we don't yet have
9937                    a Configure test for this.  */
9938                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9939                      /* 0, point, slack */
9940                     Gconvert(nv, (int)digits, 0, ebuf);
9941                     sv_catpv(sv, ebuf);
9942                     if (*ebuf)  /* May return an empty string for digits==0 */
9943                         return;
9944                 }
9945             } else if (!digits) {
9946                 STRLEN l;
9947
9948                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9949                     sv_catpvn(sv, p, l);
9950                     return;
9951                 }
9952             }
9953         }
9954     }
9955 #endif /* !USE_LONG_DOUBLE */
9956
9957     if (!args && svix < svmax && DO_UTF8(*svargs))
9958         has_utf8 = TRUE;
9959
9960     patend = (char*)pat + patlen;
9961     for (p = (char*)pat; p < patend; p = q) {
9962         bool alt = FALSE;
9963         bool left = FALSE;
9964         bool vectorize = FALSE;
9965         bool vectorarg = FALSE;
9966         bool vec_utf8 = FALSE;
9967         char fill = ' ';
9968         char plus = 0;
9969         char intsize = 0;
9970         STRLEN width = 0;
9971         STRLEN zeros = 0;
9972         bool has_precis = FALSE;
9973         STRLEN precis = 0;
9974         const I32 osvix = svix;
9975         bool is_utf8 = FALSE;  /* is this item utf8?   */
9976 #ifdef HAS_LDBL_SPRINTF_BUG
9977         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9978            with sfio - Allen <allens@cpan.org> */
9979         bool fix_ldbl_sprintf_bug = FALSE;
9980 #endif
9981
9982         char esignbuf[4];
9983         U8 utf8buf[UTF8_MAXBYTES+1];
9984         STRLEN esignlen = 0;
9985
9986         const char *eptr = NULL;
9987         const char *fmtstart;
9988         STRLEN elen = 0;
9989         SV *vecsv = NULL;
9990         const U8 *vecstr = NULL;
9991         STRLEN veclen = 0;
9992         char c = 0;
9993         int i;
9994         unsigned base = 0;
9995         IV iv = 0;
9996         UV uv = 0;
9997         /* we need a long double target in case HAS_LONG_DOUBLE but
9998            not USE_LONG_DOUBLE
9999         */
10000 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10001         long double nv;
10002 #else
10003         NV nv;
10004 #endif
10005         STRLEN have;
10006         STRLEN need;
10007         STRLEN gap;
10008         const char *dotstr = ".";
10009         STRLEN dotstrlen = 1;
10010         I32 efix = 0; /* explicit format parameter index */
10011         I32 ewix = 0; /* explicit width index */
10012         I32 epix = 0; /* explicit precision index */
10013         I32 evix = 0; /* explicit vector index */
10014         bool asterisk = FALSE;
10015
10016         /* echo everything up to the next format specification */
10017         for (q = p; q < patend && *q != '%'; ++q) ;
10018         if (q > p) {
10019             if (has_utf8 && !pat_utf8)
10020                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
10021             else
10022                 sv_catpvn(sv, p, q - p);
10023             p = q;
10024         }
10025         if (q++ >= patend)
10026             break;
10027
10028         fmtstart = q;
10029
10030 /*
10031     We allow format specification elements in this order:
10032         \d+\$              explicit format parameter index
10033         [-+ 0#]+           flags
10034         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10035         0                  flag (as above): repeated to allow "v02"     
10036         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10037         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10038         [hlqLV]            size
10039     [%bcdefginopsuxDFOUX] format (mandatory)
10040 */
10041
10042         if (args) {
10043 /*  
10044         As of perl5.9.3, printf format checking is on by default.
10045         Internally, perl uses %p formats to provide an escape to
10046         some extended formatting.  This block deals with those
10047         extensions: if it does not match, (char*)q is reset and
10048         the normal format processing code is used.
10049
10050         Currently defined extensions are:
10051                 %p              include pointer address (standard)      
10052                 %-p     (SVf)   include an SV (previously %_)
10053                 %-<num>p        include an SV with precision <num>      
10054                 %<num>p         reserved for future extensions
10055
10056         Robin Barker 2005-07-14
10057
10058                 %1p     (VDf)   removed.  RMB 2007-10-19
10059 */
10060             char* r = q; 
10061             bool sv = FALSE;    
10062             STRLEN n = 0;
10063             if (*q == '-')
10064                 sv = *q++;
10065             n = expect_number(&q);
10066             if (*q++ == 'p') {
10067                 if (sv) {                       /* SVf */
10068                     if (n) {
10069                         precis = n;
10070                         has_precis = TRUE;
10071                     }
10072                     argsv = MUTABLE_SV(va_arg(*args, void*));
10073                     eptr = SvPV_const(argsv, elen);
10074                     if (DO_UTF8(argsv))
10075                         is_utf8 = TRUE;
10076                     goto string;
10077                 }
10078                 else if (n) {
10079                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10080                                      "internal %%<num>p might conflict with future printf extensions");
10081                 }
10082             }
10083             q = r; 
10084         }
10085
10086         if ( (width = expect_number(&q)) ) {
10087             if (*q == '$') {
10088                 ++q;
10089                 efix = width;
10090             } else {
10091                 goto gotwidth;
10092             }
10093         }
10094
10095         /* FLAGS */
10096
10097         while (*q) {
10098             switch (*q) {
10099             case ' ':
10100             case '+':
10101                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10102                     q++;
10103                 else
10104                     plus = *q++;
10105                 continue;
10106
10107             case '-':
10108                 left = TRUE;
10109                 q++;
10110                 continue;
10111
10112             case '0':
10113                 fill = *q++;
10114                 continue;
10115
10116             case '#':
10117                 alt = TRUE;
10118                 q++;
10119                 continue;
10120
10121             default:
10122                 break;
10123             }
10124             break;
10125         }
10126
10127       tryasterisk:
10128         if (*q == '*') {
10129             q++;
10130             if ( (ewix = expect_number(&q)) )
10131                 if (*q++ != '$')
10132                     goto unknown;
10133             asterisk = TRUE;
10134         }
10135         if (*q == 'v') {
10136             q++;
10137             if (vectorize)
10138                 goto unknown;
10139             if ((vectorarg = asterisk)) {
10140                 evix = ewix;
10141                 ewix = 0;
10142                 asterisk = FALSE;
10143             }
10144             vectorize = TRUE;
10145             goto tryasterisk;
10146         }
10147
10148         if (!asterisk)
10149         {
10150             if( *q == '0' )
10151                 fill = *q++;
10152             width = expect_number(&q);
10153         }
10154
10155         if (vectorize) {
10156             if (vectorarg) {
10157                 if (args)
10158                     vecsv = va_arg(*args, SV*);
10159                 else if (evix) {
10160                     vecsv = (evix > 0 && evix <= svmax)
10161                         ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10162                 } else {
10163                     vecsv = svix < svmax
10164                         ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10165                 }
10166                 dotstr = SvPV_const(vecsv, dotstrlen);
10167                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10168                    bad with tied or overloaded values that return UTF8.  */
10169                 if (DO_UTF8(vecsv))
10170                     is_utf8 = TRUE;
10171                 else if (has_utf8) {
10172                     vecsv = sv_mortalcopy(vecsv);
10173                     sv_utf8_upgrade(vecsv);
10174                     dotstr = SvPV_const(vecsv, dotstrlen);
10175                     is_utf8 = TRUE;
10176                 }                   
10177             }
10178             if (args) {
10179                 VECTORIZE_ARGS
10180             }
10181             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10182                 vecsv = svargs[efix ? efix-1 : svix++];
10183                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10184                 vec_utf8 = DO_UTF8(vecsv);
10185
10186                 /* if this is a version object, we need to convert
10187                  * back into v-string notation and then let the
10188                  * vectorize happen normally
10189                  */
10190                 if (sv_derived_from(vecsv, "version")) {
10191                     char *version = savesvpv(vecsv);
10192                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10193                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10194                         "vector argument not supported with alpha versions");
10195                         goto unknown;
10196                     }
10197                     vecsv = sv_newmortal();
10198                     scan_vstring(version, version + veclen, vecsv);
10199                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10200                     vec_utf8 = DO_UTF8(vecsv);
10201                     Safefree(version);
10202                 }
10203             }
10204             else {
10205                 vecstr = (U8*)"";
10206                 veclen = 0;
10207             }
10208         }
10209
10210         if (asterisk) {
10211             if (args)
10212                 i = va_arg(*args, int);
10213             else
10214                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10215                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10216             left |= (i < 0);
10217             width = (i < 0) ? -i : i;
10218         }
10219       gotwidth:
10220
10221         /* PRECISION */
10222
10223         if (*q == '.') {
10224             q++;
10225             if (*q == '*') {
10226                 q++;
10227                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10228                     goto unknown;
10229                 /* XXX: todo, support specified precision parameter */
10230                 if (epix)
10231                     goto unknown;
10232                 if (args)
10233                     i = va_arg(*args, int);
10234                 else
10235                     i = (ewix ? ewix <= svmax : svix < svmax)
10236                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10237                 precis = i;
10238                 has_precis = !(i < 0);
10239             }
10240             else {
10241                 precis = 0;
10242                 while (isDIGIT(*q))
10243                     precis = precis * 10 + (*q++ - '0');
10244                 has_precis = TRUE;
10245             }
10246         }
10247
10248         /* SIZE */
10249
10250         switch (*q) {
10251 #ifdef WIN32
10252         case 'I':                       /* Ix, I32x, and I64x */
10253 #  ifdef WIN64
10254             if (q[1] == '6' && q[2] == '4') {
10255                 q += 3;
10256                 intsize = 'q';
10257                 break;
10258             }
10259 #  endif
10260             if (q[1] == '3' && q[2] == '2') {
10261                 q += 3;
10262                 break;
10263             }
10264 #  ifdef WIN64
10265             intsize = 'q';
10266 #  endif
10267             q++;
10268             break;
10269 #endif
10270 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10271         case 'L':                       /* Ld */
10272             /*FALLTHROUGH*/
10273 #ifdef HAS_QUAD
10274         case 'q':                       /* qd */
10275 #endif
10276             intsize = 'q';
10277             q++;
10278             break;
10279 #endif
10280         case 'l':
10281 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10282             if (*++q == 'l') {  /* lld, llf */
10283                 intsize = 'q';
10284                 ++q;
10285             }
10286             else
10287 #endif
10288                 intsize = 'l';
10289             break;
10290         case 'h':
10291             if (*++q == 'h') {  /* hhd, hhu */
10292                 intsize = 'c';
10293                 ++q;
10294             }
10295             else
10296                 intsize = 'h';
10297             break;
10298         case 'V':
10299         case 'z':
10300         case 't':
10301 #if HAS_C99
10302         case 'j':
10303 #endif
10304             intsize = *q++;
10305             break;
10306         }
10307
10308         /* CONVERSION */
10309
10310         if (*q == '%') {
10311             eptr = q++;
10312             elen = 1;
10313             if (vectorize) {
10314                 c = '%';
10315                 goto unknown;
10316             }
10317             goto string;
10318         }
10319
10320         if (!vectorize && !args) {
10321             if (efix) {
10322                 const I32 i = efix-1;
10323                 argsv = (i >= 0 && i < svmax)
10324                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10325             } else {
10326                 argsv = (svix >= 0 && svix < svmax)
10327                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10328             }
10329         }
10330
10331         switch (c = *q++) {
10332
10333             /* STRINGS */
10334
10335         case 'c':
10336             if (vectorize)
10337                 goto unknown;
10338             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10339             if ((uv > 255 ||
10340                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10341                 && !IN_BYTES) {
10342                 eptr = (char*)utf8buf;
10343                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10344                 is_utf8 = TRUE;
10345             }
10346             else {
10347                 c = (char)uv;
10348                 eptr = &c;
10349                 elen = 1;
10350             }
10351             goto string;
10352
10353         case 's':
10354             if (vectorize)
10355                 goto unknown;
10356             if (args) {
10357                 eptr = va_arg(*args, char*);
10358                 if (eptr)
10359                     elen = strlen(eptr);
10360                 else {
10361                     eptr = (char *)nullstr;
10362                     elen = sizeof nullstr - 1;
10363                 }
10364             }
10365             else {
10366                 eptr = SvPV_const(argsv, elen);
10367                 if (DO_UTF8(argsv)) {
10368                     STRLEN old_precis = precis;
10369                     if (has_precis && precis < elen) {
10370                         STRLEN ulen = sv_len_utf8(argsv);
10371                         I32 p = precis > ulen ? ulen : precis;
10372                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
10373                         precis = p;
10374                     }
10375                     if (width) { /* fudge width (can't fudge elen) */
10376                         if (has_precis && precis < elen)
10377                             width += precis - old_precis;
10378                         else
10379                             width += elen - sv_len_utf8(argsv);
10380                     }
10381                     is_utf8 = TRUE;
10382                 }
10383             }
10384
10385         string:
10386             if (has_precis && precis < elen)
10387                 elen = precis;
10388             break;
10389
10390             /* INTEGERS */
10391
10392         case 'p':
10393             if (alt || vectorize)
10394                 goto unknown;
10395             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10396             base = 16;
10397             goto integer;
10398
10399         case 'D':
10400 #ifdef IV_IS_QUAD
10401             intsize = 'q';
10402 #else
10403             intsize = 'l';
10404 #endif
10405             /*FALLTHROUGH*/
10406         case 'd':
10407         case 'i':
10408 #if vdNUMBER
10409         format_vd:
10410 #endif
10411             if (vectorize) {
10412                 STRLEN ulen;
10413                 if (!veclen)
10414                     continue;
10415                 if (vec_utf8)
10416                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10417                                         UTF8_ALLOW_ANYUV);
10418                 else {
10419                     uv = *vecstr;
10420                     ulen = 1;
10421                 }
10422                 vecstr += ulen;
10423                 veclen -= ulen;
10424                 if (plus)
10425                      esignbuf[esignlen++] = plus;
10426             }
10427             else if (args) {
10428                 switch (intsize) {
10429                 case 'c':       iv = (char)va_arg(*args, int); break;
10430                 case 'h':       iv = (short)va_arg(*args, int); break;
10431                 case 'l':       iv = va_arg(*args, long); break;
10432                 case 'V':       iv = va_arg(*args, IV); break;
10433                 case 'z':       iv = va_arg(*args, SSize_t); break;
10434                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10435                 default:        iv = va_arg(*args, int); break;
10436 #if HAS_C99
10437                 case 'j':       iv = va_arg(*args, intmax_t); break;
10438 #endif
10439                 case 'q':
10440 #ifdef HAS_QUAD
10441                                 iv = va_arg(*args, Quad_t); break;
10442 #else
10443                                 goto unknown;
10444 #endif
10445                 }
10446             }
10447             else {
10448                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10449                 switch (intsize) {
10450                 case 'c':       iv = (char)tiv; break;
10451                 case 'h':       iv = (short)tiv; break;
10452                 case 'l':       iv = (long)tiv; break;
10453                 case 'V':
10454                 default:        iv = tiv; break;
10455                 case 'q':
10456 #ifdef HAS_QUAD
10457                                 iv = (Quad_t)tiv; break;
10458 #else
10459                                 goto unknown;
10460 #endif
10461                 }
10462             }
10463             if ( !vectorize )   /* we already set uv above */
10464             {
10465                 if (iv >= 0) {
10466                     uv = iv;
10467                     if (plus)
10468                         esignbuf[esignlen++] = plus;
10469                 }
10470                 else {
10471                     uv = -iv;
10472                     esignbuf[esignlen++] = '-';
10473                 }
10474             }
10475             base = 10;
10476             goto integer;
10477
10478         case 'U':
10479 #ifdef IV_IS_QUAD
10480             intsize = 'q';
10481 #else
10482             intsize = 'l';
10483 #endif
10484             /*FALLTHROUGH*/
10485         case 'u':
10486             base = 10;
10487             goto uns_integer;
10488
10489         case 'B':
10490         case 'b':
10491             base = 2;
10492             goto uns_integer;
10493
10494         case 'O':
10495 #ifdef IV_IS_QUAD
10496             intsize = 'q';
10497 #else
10498             intsize = 'l';
10499 #endif
10500             /*FALLTHROUGH*/
10501         case 'o':
10502             base = 8;
10503             goto uns_integer;
10504
10505         case 'X':
10506         case 'x':
10507             base = 16;
10508
10509         uns_integer:
10510             if (vectorize) {
10511                 STRLEN ulen;
10512         vector:
10513                 if (!veclen)
10514                     continue;
10515                 if (vec_utf8)
10516                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10517                                         UTF8_ALLOW_ANYUV);
10518                 else {
10519                     uv = *vecstr;
10520                     ulen = 1;
10521                 }
10522                 vecstr += ulen;
10523                 veclen -= ulen;
10524             }
10525             else if (args) {
10526                 switch (intsize) {
10527                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10528                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10529                 case 'l':  uv = va_arg(*args, unsigned long); break;
10530                 case 'V':  uv = va_arg(*args, UV); break;
10531                 case 'z':  uv = va_arg(*args, Size_t); break;
10532                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10533 #if HAS_C99
10534                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10535 #endif
10536                 default:   uv = va_arg(*args, unsigned); break;
10537                 case 'q':
10538 #ifdef HAS_QUAD
10539                            uv = va_arg(*args, Uquad_t); break;
10540 #else
10541                            goto unknown;
10542 #endif
10543                 }
10544             }
10545             else {
10546                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10547                 switch (intsize) {
10548                 case 'c':       uv = (unsigned char)tuv; break;
10549                 case 'h':       uv = (unsigned short)tuv; break;
10550                 case 'l':       uv = (unsigned long)tuv; break;
10551                 case 'V':
10552                 default:        uv = tuv; break;
10553                 case 'q':
10554 #ifdef HAS_QUAD
10555                                 uv = (Uquad_t)tuv; break;
10556 #else
10557                                 goto unknown;
10558 #endif
10559                 }
10560             }
10561
10562         integer:
10563             {
10564                 char *ptr = ebuf + sizeof ebuf;
10565                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10566                 zeros = 0;
10567
10568                 switch (base) {
10569                     unsigned dig;
10570                 case 16:
10571                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10572                     do {
10573                         dig = uv & 15;
10574                         *--ptr = p[dig];
10575                     } while (uv >>= 4);
10576                     if (tempalt) {
10577                         esignbuf[esignlen++] = '0';
10578                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10579                     }
10580                     break;
10581                 case 8:
10582                     do {
10583                         dig = uv & 7;
10584                         *--ptr = '0' + dig;
10585                     } while (uv >>= 3);
10586                     if (alt && *ptr != '0')
10587                         *--ptr = '0';
10588                     break;
10589                 case 2:
10590                     do {
10591                         dig = uv & 1;
10592                         *--ptr = '0' + dig;
10593                     } while (uv >>= 1);
10594                     if (tempalt) {
10595                         esignbuf[esignlen++] = '0';
10596                         esignbuf[esignlen++] = c;
10597                     }
10598                     break;
10599                 default:                /* it had better be ten or less */
10600                     do {
10601                         dig = uv % base;
10602                         *--ptr = '0' + dig;
10603                     } while (uv /= base);
10604                     break;
10605                 }
10606                 elen = (ebuf + sizeof ebuf) - ptr;
10607                 eptr = ptr;
10608                 if (has_precis) {
10609                     if (precis > elen)
10610                         zeros = precis - elen;
10611                     else if (precis == 0 && elen == 1 && *eptr == '0'
10612                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10613                         elen = 0;
10614
10615                 /* a precision nullifies the 0 flag. */
10616                     if (fill == '0')
10617                         fill = ' ';
10618                 }
10619             }
10620             break;
10621
10622             /* FLOATING POINT */
10623
10624         case 'F':
10625             c = 'f';            /* maybe %F isn't supported here */
10626             /*FALLTHROUGH*/
10627         case 'e': case 'E':
10628         case 'f':
10629         case 'g': case 'G':
10630             if (vectorize)
10631                 goto unknown;
10632
10633             /* This is evil, but floating point is even more evil */
10634
10635             /* for SV-style calling, we can only get NV
10636                for C-style calling, we assume %f is double;
10637                for simplicity we allow any of %Lf, %llf, %qf for long double
10638             */
10639             switch (intsize) {
10640             case 'V':
10641 #if defined(USE_LONG_DOUBLE)
10642                 intsize = 'q';
10643 #endif
10644                 break;
10645 /* [perl #20339] - we should accept and ignore %lf rather than die */
10646             case 'l':
10647                 /*FALLTHROUGH*/
10648             default:
10649 #if defined(USE_LONG_DOUBLE)
10650                 intsize = args ? 0 : 'q';
10651 #endif
10652                 break;
10653             case 'q':
10654 #if defined(HAS_LONG_DOUBLE)
10655                 break;
10656 #else
10657                 /*FALLTHROUGH*/
10658 #endif
10659             case 'c':
10660             case 'h':
10661             case 'z':
10662             case 't':
10663             case 'j':
10664                 goto unknown;
10665             }
10666
10667             /* now we need (long double) if intsize == 'q', else (double) */
10668             nv = (args) ?
10669 #if LONG_DOUBLESIZE > DOUBLESIZE
10670                 intsize == 'q' ?
10671                     va_arg(*args, long double) :
10672                     va_arg(*args, double)
10673 #else
10674                     va_arg(*args, double)
10675 #endif
10676                 : SvNV(argsv);
10677
10678             need = 0;
10679             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10680                else. frexp() has some unspecified behaviour for those three */
10681             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10682                 i = PERL_INT_MIN;
10683                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10684                    will cast our (long double) to (double) */
10685                 (void)Perl_frexp(nv, &i);
10686                 if (i == PERL_INT_MIN)
10687                     Perl_die(aTHX_ "panic: frexp");
10688                 if (i > 0)
10689                     need = BIT_DIGITS(i);
10690             }
10691             need += has_precis ? precis : 6; /* known default */
10692
10693             if (need < width)
10694                 need = width;
10695
10696 #ifdef HAS_LDBL_SPRINTF_BUG
10697             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10698                with sfio - Allen <allens@cpan.org> */
10699
10700 #  ifdef DBL_MAX
10701 #    define MY_DBL_MAX DBL_MAX
10702 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10703 #    if DOUBLESIZE >= 8
10704 #      define MY_DBL_MAX 1.7976931348623157E+308L
10705 #    else
10706 #      define MY_DBL_MAX 3.40282347E+38L
10707 #    endif
10708 #  endif
10709
10710 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10711 #    define MY_DBL_MAX_BUG 1L
10712 #  else
10713 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10714 #  endif
10715
10716 #  ifdef DBL_MIN
10717 #    define MY_DBL_MIN DBL_MIN
10718 #  else  /* XXX guessing! -Allen */
10719 #    if DOUBLESIZE >= 8
10720 #      define MY_DBL_MIN 2.2250738585072014E-308L
10721 #    else
10722 #      define MY_DBL_MIN 1.17549435E-38L
10723 #    endif
10724 #  endif
10725
10726             if ((intsize == 'q') && (c == 'f') &&
10727                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10728                 (need < DBL_DIG)) {
10729                 /* it's going to be short enough that
10730                  * long double precision is not needed */
10731
10732                 if ((nv <= 0L) && (nv >= -0L))
10733                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10734                 else {
10735                     /* would use Perl_fp_class as a double-check but not
10736                      * functional on IRIX - see perl.h comments */
10737
10738                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10739                         /* It's within the range that a double can represent */
10740 #if defined(DBL_MAX) && !defined(DBL_MIN)
10741                         if ((nv >= ((long double)1/DBL_MAX)) ||
10742                             (nv <= (-(long double)1/DBL_MAX)))
10743 #endif
10744                         fix_ldbl_sprintf_bug = TRUE;
10745                     }
10746                 }
10747                 if (fix_ldbl_sprintf_bug == TRUE) {
10748                     double temp;
10749
10750                     intsize = 0;
10751                     temp = (double)nv;
10752                     nv = (NV)temp;
10753                 }
10754             }
10755
10756 #  undef MY_DBL_MAX
10757 #  undef MY_DBL_MAX_BUG
10758 #  undef MY_DBL_MIN
10759
10760 #endif /* HAS_LDBL_SPRINTF_BUG */
10761
10762             need += 20; /* fudge factor */
10763             if (PL_efloatsize < need) {
10764                 Safefree(PL_efloatbuf);
10765                 PL_efloatsize = need + 20; /* more fudge */
10766                 Newx(PL_efloatbuf, PL_efloatsize, char);
10767                 PL_efloatbuf[0] = '\0';
10768             }
10769
10770             if ( !(width || left || plus || alt) && fill != '0'
10771                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10772                 /* See earlier comment about buggy Gconvert when digits,
10773                    aka precis is 0  */
10774                 if ( c == 'g' && precis) {
10775                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10776                     /* May return an empty string for digits==0 */
10777                     if (*PL_efloatbuf) {
10778                         elen = strlen(PL_efloatbuf);
10779                         goto float_converted;
10780                     }
10781                 } else if ( c == 'f' && !precis) {
10782                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10783                         break;
10784                 }
10785             }
10786             {
10787                 char *ptr = ebuf + sizeof ebuf;
10788                 *--ptr = '\0';
10789                 *--ptr = c;
10790                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10791 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10792                 if (intsize == 'q') {
10793                     /* Copy the one or more characters in a long double
10794                      * format before the 'base' ([efgEFG]) character to
10795                      * the format string. */
10796                     static char const prifldbl[] = PERL_PRIfldbl;
10797                     char const *p = prifldbl + sizeof(prifldbl) - 3;
10798                     while (p >= prifldbl) { *--ptr = *p--; }
10799                 }
10800 #endif
10801                 if (has_precis) {
10802                     base = precis;
10803                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10804                     *--ptr = '.';
10805                 }
10806                 if (width) {
10807                     base = width;
10808                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10809                 }
10810                 if (fill == '0')
10811                     *--ptr = fill;
10812                 if (left)
10813                     *--ptr = '-';
10814                 if (plus)
10815                     *--ptr = plus;
10816                 if (alt)
10817                     *--ptr = '#';
10818                 *--ptr = '%';
10819
10820                 /* No taint.  Otherwise we are in the strange situation
10821                  * where printf() taints but print($float) doesn't.
10822                  * --jhi */
10823 #if defined(HAS_LONG_DOUBLE)
10824                 elen = ((intsize == 'q')
10825                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10826                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
10827 #else
10828                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
10829 #endif
10830             }
10831         float_converted:
10832             eptr = PL_efloatbuf;
10833             break;
10834
10835             /* SPECIAL */
10836
10837         case 'n':
10838             if (vectorize)
10839                 goto unknown;
10840             i = SvCUR(sv) - origlen;
10841             if (args) {
10842                 switch (intsize) {
10843                 case 'c':       *(va_arg(*args, char*)) = i; break;
10844                 case 'h':       *(va_arg(*args, short*)) = i; break;
10845                 default:        *(va_arg(*args, int*)) = i; break;
10846                 case 'l':       *(va_arg(*args, long*)) = i; break;
10847                 case 'V':       *(va_arg(*args, IV*)) = i; break;
10848                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
10849                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
10850 #if HAS_C99
10851                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
10852 #endif
10853                 case 'q':
10854 #ifdef HAS_QUAD
10855                                 *(va_arg(*args, Quad_t*)) = i; break;
10856 #else
10857                                 goto unknown;
10858 #endif
10859                 }
10860             }
10861             else
10862                 sv_setuv_mg(argsv, (UV)i);
10863             continue;   /* not "break" */
10864
10865             /* UNKNOWN */
10866
10867         default:
10868       unknown:
10869             if (!args
10870                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10871                 && ckWARN(WARN_PRINTF))
10872             {
10873                 SV * const msg = sv_newmortal();
10874                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10875                           (PL_op->op_type == OP_PRTF) ? "" : "s");
10876                 if (fmtstart < patend) {
10877                     const char * const fmtend = q < patend ? q : patend;
10878                     const char * f;
10879                     sv_catpvs(msg, "\"%");
10880                     for (f = fmtstart; f < fmtend; f++) {
10881                         if (isPRINT(*f)) {
10882                             sv_catpvn(msg, f, 1);
10883                         } else {
10884                             Perl_sv_catpvf(aTHX_ msg,
10885                                            "\\%03"UVof, (UV)*f & 0xFF);
10886                         }
10887                     }
10888                     sv_catpvs(msg, "\"");
10889                 } else {
10890                     sv_catpvs(msg, "end of string");
10891                 }
10892                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
10893             }
10894
10895             /* output mangled stuff ... */
10896             if (c == '\0')
10897                 --q;
10898             eptr = p;
10899             elen = q - p;
10900
10901             /* ... right here, because formatting flags should not apply */
10902             SvGROW(sv, SvCUR(sv) + elen + 1);
10903             p = SvEND(sv);
10904             Copy(eptr, p, elen, char);
10905             p += elen;
10906             *p = '\0';
10907             SvCUR_set(sv, p - SvPVX_const(sv));
10908             svix = osvix;
10909             continue;   /* not "break" */
10910         }
10911
10912         if (is_utf8 != has_utf8) {
10913             if (is_utf8) {
10914                 if (SvCUR(sv))
10915                     sv_utf8_upgrade(sv);
10916             }
10917             else {
10918                 const STRLEN old_elen = elen;
10919                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
10920                 sv_utf8_upgrade(nsv);
10921                 eptr = SvPVX_const(nsv);
10922                 elen = SvCUR(nsv);
10923
10924                 if (width) { /* fudge width (can't fudge elen) */
10925                     width += elen - old_elen;
10926                 }
10927                 is_utf8 = TRUE;
10928             }
10929         }
10930
10931         have = esignlen + zeros + elen;
10932         if (have < zeros)
10933             Perl_croak_nocontext("%s", PL_memory_wrap);
10934
10935         need = (have > width ? have : width);
10936         gap = need - have;
10937
10938         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
10939             Perl_croak_nocontext("%s", PL_memory_wrap);
10940         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
10941         p = SvEND(sv);
10942         if (esignlen && fill == '0') {
10943             int i;
10944             for (i = 0; i < (int)esignlen; i++)
10945                 *p++ = esignbuf[i];
10946         }
10947         if (gap && !left) {
10948             memset(p, fill, gap);
10949             p += gap;
10950         }
10951         if (esignlen && fill != '0') {
10952             int i;
10953             for (i = 0; i < (int)esignlen; i++)
10954                 *p++ = esignbuf[i];
10955         }
10956         if (zeros) {
10957             int i;
10958             for (i = zeros; i; i--)
10959                 *p++ = '0';
10960         }
10961         if (elen) {
10962             Copy(eptr, p, elen, char);
10963             p += elen;
10964         }
10965         if (gap && left) {
10966             memset(p, ' ', gap);
10967             p += gap;
10968         }
10969         if (vectorize) {
10970             if (veclen) {
10971                 Copy(dotstr, p, dotstrlen, char);
10972                 p += dotstrlen;
10973             }
10974             else
10975                 vectorize = FALSE;              /* done iterating over vecstr */
10976         }
10977         if (is_utf8)
10978             has_utf8 = TRUE;
10979         if (has_utf8)
10980             SvUTF8_on(sv);
10981         *p = '\0';
10982         SvCUR_set(sv, p - SvPVX_const(sv));
10983         if (vectorize) {
10984             esignlen = 0;
10985             goto vector;
10986         }
10987     }
10988     SvTAINT(sv);
10989 }
10990
10991 /* =========================================================================
10992
10993 =head1 Cloning an interpreter
10994
10995 All the macros and functions in this section are for the private use of
10996 the main function, perl_clone().
10997
10998 The foo_dup() functions make an exact copy of an existing foo thingy.
10999 During the course of a cloning, a hash table is used to map old addresses
11000 to new addresses. The table is created and manipulated with the
11001 ptr_table_* functions.
11002
11003 =cut
11004
11005  * =========================================================================*/
11006
11007
11008 #if defined(USE_ITHREADS)
11009
11010 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11011 #ifndef GpREFCNT_inc
11012 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11013 #endif
11014
11015
11016 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11017    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11018    If this changes, please unmerge ss_dup.
11019    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11020 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11021 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11022 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11023 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11024 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11025 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11026 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11027 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11028 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11029 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11030 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11031 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11032 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11033
11034 /* clone a parser */
11035
11036 yy_parser *
11037 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11038 {
11039     yy_parser *parser;
11040
11041     PERL_ARGS_ASSERT_PARSER_DUP;
11042
11043     if (!proto)
11044         return NULL;
11045
11046     /* look for it in the table first */
11047     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11048     if (parser)
11049         return parser;
11050
11051     /* create anew and remember what it is */
11052     Newxz(parser, 1, yy_parser);
11053     ptr_table_store(PL_ptr_table, proto, parser);
11054
11055     /* XXX these not yet duped */
11056     parser->old_parser = NULL;
11057     parser->stack = NULL;
11058     parser->ps = NULL;
11059     parser->stack_size = 0;
11060     /* XXX parser->stack->state = 0; */
11061
11062     /* XXX eventually, just Copy() most of the parser struct ? */
11063
11064     parser->lex_brackets = proto->lex_brackets;
11065     parser->lex_casemods = proto->lex_casemods;
11066     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11067                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11068     parser->lex_casestack = savepvn(proto->lex_casestack,
11069                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11070     parser->lex_defer   = proto->lex_defer;
11071     parser->lex_dojoin  = proto->lex_dojoin;
11072     parser->lex_expect  = proto->lex_expect;
11073     parser->lex_formbrack = proto->lex_formbrack;
11074     parser->lex_inpat   = proto->lex_inpat;
11075     parser->lex_inwhat  = proto->lex_inwhat;
11076     parser->lex_op      = proto->lex_op;
11077     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11078     parser->lex_starts  = proto->lex_starts;
11079     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11080     parser->multi_close = proto->multi_close;
11081     parser->multi_open  = proto->multi_open;
11082     parser->multi_start = proto->multi_start;
11083     parser->multi_end   = proto->multi_end;
11084     parser->pending_ident = proto->pending_ident;
11085     parser->preambled   = proto->preambled;
11086     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11087     parser->linestr     = sv_dup_inc(proto->linestr, param);
11088     parser->expect      = proto->expect;
11089     parser->copline     = proto->copline;
11090     parser->last_lop_op = proto->last_lop_op;
11091     parser->lex_state   = proto->lex_state;
11092     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11093     /* rsfp_filters entries have fake IoDIRP() */
11094     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11095     parser->in_my       = proto->in_my;
11096     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11097     parser->error_count = proto->error_count;
11098
11099
11100     parser->linestr     = sv_dup_inc(proto->linestr, param);
11101
11102     {
11103         char * const ols = SvPVX(proto->linestr);
11104         char * const ls  = SvPVX(parser->linestr);
11105
11106         parser->bufptr      = ls + (proto->bufptr >= ols ?
11107                                     proto->bufptr -  ols : 0);
11108         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11109                                     proto->oldbufptr -  ols : 0);
11110         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11111                                     proto->oldoldbufptr -  ols : 0);
11112         parser->linestart   = ls + (proto->linestart >= ols ?
11113                                     proto->linestart -  ols : 0);
11114         parser->last_uni    = ls + (proto->last_uni >= ols ?
11115                                     proto->last_uni -  ols : 0);
11116         parser->last_lop    = ls + (proto->last_lop >= ols ?
11117                                     proto->last_lop -  ols : 0);
11118
11119         parser->bufend      = ls + SvCUR(parser->linestr);
11120     }
11121
11122     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11123
11124
11125 #ifdef PERL_MAD
11126     parser->endwhite    = proto->endwhite;
11127     parser->faketokens  = proto->faketokens;
11128     parser->lasttoke    = proto->lasttoke;
11129     parser->nextwhite   = proto->nextwhite;
11130     parser->realtokenstart = proto->realtokenstart;
11131     parser->skipwhite   = proto->skipwhite;
11132     parser->thisclose   = proto->thisclose;
11133     parser->thismad     = proto->thismad;
11134     parser->thisopen    = proto->thisopen;
11135     parser->thisstuff   = proto->thisstuff;
11136     parser->thistoken   = proto->thistoken;
11137     parser->thiswhite   = proto->thiswhite;
11138
11139     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11140     parser->curforce    = proto->curforce;
11141 #else
11142     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11143     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11144     parser->nexttoke    = proto->nexttoke;
11145 #endif
11146
11147     /* XXX should clone saved_curcop here, but we aren't passed
11148      * proto_perl; so do it in perl_clone_using instead */
11149
11150     return parser;
11151 }
11152
11153
11154 /* duplicate a file handle */
11155
11156 PerlIO *
11157 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11158 {
11159     PerlIO *ret;
11160
11161     PERL_ARGS_ASSERT_FP_DUP;
11162     PERL_UNUSED_ARG(type);
11163
11164     if (!fp)
11165         return (PerlIO*)NULL;
11166
11167     /* look for it in the table first */
11168     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11169     if (ret)
11170         return ret;
11171
11172     /* create anew and remember what it is */
11173     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11174     ptr_table_store(PL_ptr_table, fp, ret);
11175     return ret;
11176 }
11177
11178 /* duplicate a directory handle */
11179
11180 DIR *
11181 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11182 {
11183     DIR *ret;
11184
11185 #ifdef HAS_FCHDIR
11186     DIR *pwd;
11187     register const Direntry_t *dirent;
11188     char smallbuf[256];
11189     char *name = NULL;
11190     STRLEN len = -1;
11191     long pos;
11192 #endif
11193
11194     PERL_UNUSED_CONTEXT;
11195     PERL_ARGS_ASSERT_DIRP_DUP;
11196
11197     if (!dp)
11198         return (DIR*)NULL;
11199
11200     /* look for it in the table first */
11201     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11202     if (ret)
11203         return ret;
11204
11205 #ifdef HAS_FCHDIR
11206
11207     PERL_UNUSED_ARG(param);
11208
11209     /* create anew */
11210
11211     /* open the current directory (so we can switch back) */
11212     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11213
11214     /* chdir to our dir handle and open the present working directory */
11215     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11216         PerlDir_close(pwd);
11217         return (DIR *)NULL;
11218     }
11219     /* Now we should have two dir handles pointing to the same dir. */
11220
11221     /* Be nice to the calling code and chdir back to where we were. */
11222     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11223
11224     /* We have no need of the pwd handle any more. */
11225     PerlDir_close(pwd);
11226
11227 #ifdef DIRNAMLEN
11228 # define d_namlen(d) (d)->d_namlen
11229 #else
11230 # define d_namlen(d) strlen((d)->d_name)
11231 #endif
11232     /* Iterate once through dp, to get the file name at the current posi-
11233        tion. Then step back. */
11234     pos = PerlDir_tell(dp);
11235     if ((dirent = PerlDir_read(dp))) {
11236         len = d_namlen(dirent);
11237         if (len <= sizeof smallbuf) name = smallbuf;
11238         else Newx(name, len, char);
11239         Move(dirent->d_name, name, len, char);
11240     }
11241     PerlDir_seek(dp, pos);
11242
11243     /* Iterate through the new dir handle, till we find a file with the
11244        right name. */
11245     if (!dirent) /* just before the end */
11246         for(;;) {
11247             pos = PerlDir_tell(ret);
11248             if (PerlDir_read(ret)) continue; /* not there yet */
11249             PerlDir_seek(ret, pos); /* step back */
11250             break;
11251         }
11252     else {
11253         const long pos0 = PerlDir_tell(ret);
11254         for(;;) {
11255             pos = PerlDir_tell(ret);
11256             if ((dirent = PerlDir_read(ret))) {
11257                 if (len == d_namlen(dirent)
11258                  && memEQ(name, dirent->d_name, len)) {
11259                     /* found it */
11260                     PerlDir_seek(ret, pos); /* step back */
11261                     break;
11262                 }
11263                 /* else we are not there yet; keep iterating */
11264             }
11265             else { /* This is not meant to happen. The best we can do is
11266                       reset the iterator to the beginning. */
11267                 PerlDir_seek(ret, pos0);
11268                 break;
11269             }
11270         }
11271     }
11272 #undef d_namlen
11273
11274     if (name && name != smallbuf)
11275         Safefree(name);
11276 #endif
11277
11278 #ifdef WIN32
11279     ret = win32_dirp_dup(dp, param);
11280 #endif
11281
11282     /* pop it in the pointer table */
11283     if (ret)
11284         ptr_table_store(PL_ptr_table, dp, ret);
11285
11286     return ret;
11287 }
11288
11289 /* duplicate a typeglob */
11290
11291 GP *
11292 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11293 {
11294     GP *ret;
11295
11296     PERL_ARGS_ASSERT_GP_DUP;
11297
11298     if (!gp)
11299         return (GP*)NULL;
11300     /* look for it in the table first */
11301     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11302     if (ret)
11303         return ret;
11304
11305     /* create anew and remember what it is */
11306     Newxz(ret, 1, GP);
11307     ptr_table_store(PL_ptr_table, gp, ret);
11308
11309     /* clone */
11310     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11311        on Newxz() to do this for us.  */
11312     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11313     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11314     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11315     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11316     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11317     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11318     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11319     ret->gp_cvgen       = gp->gp_cvgen;
11320     ret->gp_line        = gp->gp_line;
11321     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11322     return ret;
11323 }
11324
11325 /* duplicate a chain of magic */
11326
11327 MAGIC *
11328 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11329 {
11330     MAGIC *mgret = NULL;
11331     MAGIC **mgprev_p = &mgret;
11332
11333     PERL_ARGS_ASSERT_MG_DUP;
11334
11335     for (; mg; mg = mg->mg_moremagic) {
11336         MAGIC *nmg;
11337
11338         if ((param->flags & CLONEf_JOIN_IN)
11339                 && mg->mg_type == PERL_MAGIC_backref)
11340             /* when joining, we let the individual SVs add themselves to
11341              * backref as needed. */
11342             continue;
11343
11344         Newx(nmg, 1, MAGIC);
11345         *mgprev_p = nmg;
11346         mgprev_p = &(nmg->mg_moremagic);
11347
11348         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11349            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11350            from the original commit adding Perl_mg_dup() - revision 4538.
11351            Similarly there is the annotation "XXX random ptr?" next to the
11352            assignment to nmg->mg_ptr.  */
11353         *nmg = *mg;
11354
11355         /* FIXME for plugins
11356         if (nmg->mg_type == PERL_MAGIC_qr) {
11357             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11358         }
11359         else
11360         */
11361         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11362                           ? nmg->mg_type == PERL_MAGIC_backref
11363                                 /* The backref AV has its reference
11364                                  * count deliberately bumped by 1 */
11365                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11366                                                     nmg->mg_obj, param))
11367                                 : sv_dup_inc(nmg->mg_obj, param)
11368                           : sv_dup(nmg->mg_obj, param);
11369
11370         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11371             if (nmg->mg_len > 0) {
11372                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11373                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11374                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11375                 {
11376                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11377                     sv_dup_inc_multiple((SV**)(namtp->table),
11378                                         (SV**)(namtp->table), NofAMmeth, param);
11379                 }
11380             }
11381             else if (nmg->mg_len == HEf_SVKEY)
11382                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11383         }
11384         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11385             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11386         }
11387     }
11388     return mgret;
11389 }
11390
11391 #endif /* USE_ITHREADS */
11392
11393 struct ptr_tbl_arena {
11394     struct ptr_tbl_arena *next;
11395     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11396 };
11397
11398 /* create a new pointer-mapping table */
11399
11400 PTR_TBL_t *
11401 Perl_ptr_table_new(pTHX)
11402 {
11403     PTR_TBL_t *tbl;
11404     PERL_UNUSED_CONTEXT;
11405
11406     Newx(tbl, 1, PTR_TBL_t);
11407     tbl->tbl_max        = 511;
11408     tbl->tbl_items      = 0;
11409     tbl->tbl_arena      = NULL;
11410     tbl->tbl_arena_next = NULL;
11411     tbl->tbl_arena_end  = NULL;
11412     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11413     return tbl;
11414 }
11415
11416 #define PTR_TABLE_HASH(ptr) \
11417   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11418
11419 /* map an existing pointer using a table */
11420
11421 STATIC PTR_TBL_ENT_t *
11422 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11423 {
11424     PTR_TBL_ENT_t *tblent;
11425     const UV hash = PTR_TABLE_HASH(sv);
11426
11427     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11428
11429     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11430     for (; tblent; tblent = tblent->next) {
11431         if (tblent->oldval == sv)
11432             return tblent;
11433     }
11434     return NULL;
11435 }
11436
11437 void *
11438 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11439 {
11440     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11441
11442     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11443     PERL_UNUSED_CONTEXT;
11444
11445     return tblent ? tblent->newval : NULL;
11446 }
11447
11448 /* add a new entry to a pointer-mapping table */
11449
11450 void
11451 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11452 {
11453     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11454
11455     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11456     PERL_UNUSED_CONTEXT;
11457
11458     if (tblent) {
11459         tblent->newval = newsv;
11460     } else {
11461         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11462
11463         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11464             struct ptr_tbl_arena *new_arena;
11465
11466             Newx(new_arena, 1, struct ptr_tbl_arena);
11467             new_arena->next = tbl->tbl_arena;
11468             tbl->tbl_arena = new_arena;
11469             tbl->tbl_arena_next = new_arena->array;
11470             tbl->tbl_arena_end = new_arena->array
11471                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11472         }
11473
11474         tblent = tbl->tbl_arena_next++;
11475
11476         tblent->oldval = oldsv;
11477         tblent->newval = newsv;
11478         tblent->next = tbl->tbl_ary[entry];
11479         tbl->tbl_ary[entry] = tblent;
11480         tbl->tbl_items++;
11481         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11482             ptr_table_split(tbl);
11483     }
11484 }
11485
11486 /* double the hash bucket size of an existing ptr table */
11487
11488 void
11489 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11490 {
11491     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11492     const UV oldsize = tbl->tbl_max + 1;
11493     UV newsize = oldsize * 2;
11494     UV i;
11495
11496     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11497     PERL_UNUSED_CONTEXT;
11498
11499     Renew(ary, newsize, PTR_TBL_ENT_t*);
11500     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11501     tbl->tbl_max = --newsize;
11502     tbl->tbl_ary = ary;
11503     for (i=0; i < oldsize; i++, ary++) {
11504         PTR_TBL_ENT_t **entp = ary;
11505         PTR_TBL_ENT_t *ent = *ary;
11506         PTR_TBL_ENT_t **curentp;
11507         if (!ent)
11508             continue;
11509         curentp = ary + oldsize;
11510         do {
11511             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11512                 *entp = ent->next;
11513                 ent->next = *curentp;
11514                 *curentp = ent;
11515             }
11516             else
11517                 entp = &ent->next;
11518             ent = *entp;
11519         } while (ent);
11520     }
11521 }
11522
11523 /* remove all the entries from a ptr table */
11524 /* Deprecated - will be removed post 5.14 */
11525
11526 void
11527 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11528 {
11529     if (tbl && tbl->tbl_items) {
11530         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11531
11532         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11533
11534         while (arena) {
11535             struct ptr_tbl_arena *next = arena->next;
11536
11537             Safefree(arena);
11538             arena = next;
11539         };
11540
11541         tbl->tbl_items = 0;
11542         tbl->tbl_arena = NULL;
11543         tbl->tbl_arena_next = NULL;
11544         tbl->tbl_arena_end = NULL;
11545     }
11546 }
11547
11548 /* clear and free a ptr table */
11549
11550 void
11551 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11552 {
11553     struct ptr_tbl_arena *arena;
11554
11555     if (!tbl) {
11556         return;
11557     }
11558
11559     arena = tbl->tbl_arena;
11560
11561     while (arena) {
11562         struct ptr_tbl_arena *next = arena->next;
11563
11564         Safefree(arena);
11565         arena = next;
11566     }
11567
11568     Safefree(tbl->tbl_ary);
11569     Safefree(tbl);
11570 }
11571
11572 #if defined(USE_ITHREADS)
11573
11574 void
11575 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11576 {
11577     PERL_ARGS_ASSERT_RVPV_DUP;
11578
11579     if (SvROK(sstr)) {
11580         if (SvWEAKREF(sstr)) {
11581             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11582             if (param->flags & CLONEf_JOIN_IN) {
11583                 /* if joining, we add any back references individually rather
11584                  * than copying the whole backref array */
11585                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11586             }
11587         }
11588         else
11589             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11590     }
11591     else if (SvPVX_const(sstr)) {
11592         /* Has something there */
11593         if (SvLEN(sstr)) {
11594             /* Normal PV - clone whole allocated space */
11595             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11596             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11597                 /* Not that normal - actually sstr is copy on write.
11598                    But we are a true, independant SV, so:  */
11599                 SvREADONLY_off(dstr);
11600                 SvFAKE_off(dstr);
11601             }
11602         }
11603         else {
11604             /* Special case - not normally malloced for some reason */
11605             if (isGV_with_GP(sstr)) {
11606                 /* Don't need to do anything here.  */
11607             }
11608             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
11609                 /* A "shared" PV - clone it as "shared" PV */
11610                 SvPV_set(dstr,
11611                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11612                                          param)));
11613             }
11614             else {
11615                 /* Some other special case - random pointer */
11616                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11617             }
11618         }
11619     }
11620     else {
11621         /* Copy the NULL */
11622         SvPV_set(dstr, NULL);
11623     }
11624 }
11625
11626 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11627 static SV **
11628 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11629                       SSize_t items, CLONE_PARAMS *const param)
11630 {
11631     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11632
11633     while (items-- > 0) {
11634         *dest++ = sv_dup_inc(*source++, param);
11635     }
11636
11637     return dest;
11638 }
11639
11640 /* duplicate an SV of any type (including AV, HV etc) */
11641
11642 static SV *
11643 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11644 {
11645     dVAR;
11646     SV *dstr;
11647
11648     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11649
11650     if (SvTYPE(sstr) == SVTYPEMASK) {
11651 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11652         abort();
11653 #endif
11654         return NULL;
11655     }
11656     /* look for it in the table first */
11657     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11658     if (dstr)
11659         return dstr;
11660
11661     if(param->flags & CLONEf_JOIN_IN) {
11662         /** We are joining here so we don't want do clone
11663             something that is bad **/
11664         if (SvTYPE(sstr) == SVt_PVHV) {
11665             const HEK * const hvname = HvNAME_HEK(sstr);
11666             if (hvname) {
11667                 /** don't clone stashes if they already exist **/
11668                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
11669                 ptr_table_store(PL_ptr_table, sstr, dstr);
11670                 return dstr;
11671             }
11672         }
11673     }
11674
11675     /* create anew and remember what it is */
11676     new_SV(dstr);
11677
11678 #ifdef DEBUG_LEAKING_SCALARS
11679     dstr->sv_debug_optype = sstr->sv_debug_optype;
11680     dstr->sv_debug_line = sstr->sv_debug_line;
11681     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11682     dstr->sv_debug_parent = (SV*)sstr;
11683     FREE_SV_DEBUG_FILE(dstr);
11684     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11685 #endif
11686
11687     ptr_table_store(PL_ptr_table, sstr, dstr);
11688
11689     /* clone */
11690     SvFLAGS(dstr)       = SvFLAGS(sstr);
11691     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11692     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11693
11694 #ifdef DEBUGGING
11695     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11696         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11697                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11698 #endif
11699
11700     /* don't clone objects whose class has asked us not to */
11701     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11702         SvFLAGS(dstr) = 0;
11703         return dstr;
11704     }
11705
11706     switch (SvTYPE(sstr)) {
11707     case SVt_NULL:
11708         SvANY(dstr)     = NULL;
11709         break;
11710     case SVt_IV:
11711         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11712         if(SvROK(sstr)) {
11713             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11714         } else {
11715             SvIV_set(dstr, SvIVX(sstr));
11716         }
11717         break;
11718     case SVt_NV:
11719         SvANY(dstr)     = new_XNV();
11720         SvNV_set(dstr, SvNVX(sstr));
11721         break;
11722         /* case SVt_BIND: */
11723     default:
11724         {
11725             /* These are all the types that need complex bodies allocating.  */
11726             void *new_body;
11727             const svtype sv_type = SvTYPE(sstr);
11728             const struct body_details *const sv_type_details
11729                 = bodies_by_type + sv_type;
11730
11731             switch (sv_type) {
11732             default:
11733                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11734                 break;
11735
11736             case SVt_PVGV:
11737             case SVt_PVIO:
11738             case SVt_PVFM:
11739             case SVt_PVHV:
11740             case SVt_PVAV:
11741             case SVt_PVCV:
11742             case SVt_PVLV:
11743             case SVt_REGEXP:
11744             case SVt_PVMG:
11745             case SVt_PVNV:
11746             case SVt_PVIV:
11747             case SVt_PV:
11748                 assert(sv_type_details->body_size);
11749                 if (sv_type_details->arena) {
11750                     new_body_inline(new_body, sv_type);
11751                     new_body
11752                         = (void*)((char*)new_body - sv_type_details->offset);
11753                 } else {
11754                     new_body = new_NOARENA(sv_type_details);
11755                 }
11756             }
11757             assert(new_body);
11758             SvANY(dstr) = new_body;
11759
11760 #ifndef PURIFY
11761             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11762                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11763                  sv_type_details->copy, char);
11764 #else
11765             Copy(((char*)SvANY(sstr)),
11766                  ((char*)SvANY(dstr)),
11767                  sv_type_details->body_size + sv_type_details->offset, char);
11768 #endif
11769
11770             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11771                 && !isGV_with_GP(dstr)
11772                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
11773                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11774
11775             /* The Copy above means that all the source (unduplicated) pointers
11776                are now in the destination.  We can check the flags and the
11777                pointers in either, but it's possible that there's less cache
11778                missing by always going for the destination.
11779                FIXME - instrument and check that assumption  */
11780             if (sv_type >= SVt_PVMG) {
11781                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11782                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11783                 } else if (SvMAGIC(dstr))
11784                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11785                 if (SvSTASH(dstr))
11786                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
11787             }
11788
11789             /* The cast silences a GCC warning about unhandled types.  */
11790             switch ((int)sv_type) {
11791             case SVt_PV:
11792                 break;
11793             case SVt_PVIV:
11794                 break;
11795             case SVt_PVNV:
11796                 break;
11797             case SVt_PVMG:
11798                 break;
11799             case SVt_REGEXP:
11800                 /* FIXME for plugins */
11801                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
11802                 break;
11803             case SVt_PVLV:
11804                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11805                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11806                     LvTARG(dstr) = dstr;
11807                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
11808                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
11809                 else
11810                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
11811             case SVt_PVGV:
11812                 /* non-GP case already handled above */
11813                 if(isGV_with_GP(sstr)) {
11814                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
11815                     /* Don't call sv_add_backref here as it's going to be
11816                        created as part of the magic cloning of the symbol
11817                        table--unless this is during a join and the stash
11818                        is not actually being cloned.  */
11819                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
11820                        at the point of this comment.  */
11821                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
11822                     if (param->flags & CLONEf_JOIN_IN)
11823                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
11824                     GvGP(dstr)  = gp_dup(GvGP(sstr), param);
11825                     (void)GpREFCNT_inc(GvGP(dstr));
11826                 }
11827                 break;
11828             case SVt_PVIO:
11829                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
11830                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11831                     /* I have no idea why fake dirp (rsfps)
11832                        should be treated differently but otherwise
11833                        we end up with leaks -- sky*/
11834                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
11835                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
11836                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11837                 } else {
11838                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
11839                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
11840                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
11841                     if (IoDIRP(dstr)) {
11842                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
11843                     } else {
11844                         NOOP;
11845                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
11846                     }
11847                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
11848                 }
11849                 if (IoOFP(dstr) == IoIFP(sstr))
11850                     IoOFP(dstr) = IoIFP(dstr);
11851                 else
11852                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
11853                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
11854                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
11855                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
11856                 break;
11857             case SVt_PVAV:
11858                 /* avoid cloning an empty array */
11859                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
11860                     SV **dst_ary, **src_ary;
11861                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
11862
11863                     src_ary = AvARRAY((const AV *)sstr);
11864                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
11865                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
11866                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11867                     AvALLOC((const AV *)dstr) = dst_ary;
11868                     if (AvREAL((const AV *)sstr)) {
11869                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11870                                                       param);
11871                     }
11872                     else {
11873                         while (items-- > 0)
11874                             *dst_ary++ = sv_dup(*src_ary++, param);
11875                     }
11876                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
11877                     while (items-- > 0) {
11878                         *dst_ary++ = &PL_sv_undef;
11879                     }
11880                 }
11881                 else {
11882                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
11883                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
11884                     AvMAX(  (const AV *)dstr)   = -1;
11885                     AvFILLp((const AV *)dstr)   = -1;
11886                 }
11887                 break;
11888             case SVt_PVHV:
11889                 if (HvARRAY((const HV *)sstr)) {
11890                     STRLEN i = 0;
11891                     const bool sharekeys = !!HvSHAREKEYS(sstr);
11892                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
11893                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
11894                     char *darray;
11895                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
11896                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
11897                         char);
11898                     HvARRAY(dstr) = (HE**)darray;
11899                     while (i <= sxhv->xhv_max) {
11900                         const HE * const source = HvARRAY(sstr)[i];
11901                         HvARRAY(dstr)[i] = source
11902                             ? he_dup(source, sharekeys, param) : 0;
11903                         ++i;
11904                     }
11905                     if (SvOOK(sstr)) {
11906                         const struct xpvhv_aux * const saux = HvAUX(sstr);
11907                         struct xpvhv_aux * const daux = HvAUX(dstr);
11908                         /* This flag isn't copied.  */
11909                         /* SvOOK_on(hv) attacks the IV flags.  */
11910                         SvFLAGS(dstr) |= SVf_OOK;
11911
11912                         if (saux->xhv_name_count) {
11913                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
11914                             const I32 count
11915                              = saux->xhv_name_count < 0
11916                                 ? -saux->xhv_name_count
11917                                 :  saux->xhv_name_count;
11918                             HEK **shekp = sname + count;
11919                             HEK **dhekp;
11920                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
11921                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
11922                             while (shekp-- > sname) {
11923                                 dhekp--;
11924                                 *dhekp = hek_dup(*shekp, param);
11925                             }
11926                         }
11927                         else {
11928                             daux->xhv_name_u.xhvnameu_name
11929                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
11930                                           param);
11931                         }
11932                         daux->xhv_name_count = saux->xhv_name_count;
11933
11934                         daux->xhv_riter = saux->xhv_riter;
11935                         daux->xhv_eiter = saux->xhv_eiter
11936                             ? he_dup(saux->xhv_eiter,
11937                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
11938                         /* backref array needs refcnt=2; see sv_add_backref */
11939                         daux->xhv_backreferences =
11940                             (param->flags & CLONEf_JOIN_IN)
11941                                 /* when joining, we let the individual GVs and
11942                                  * CVs add themselves to backref as
11943                                  * needed. This avoids pulling in stuff
11944                                  * that isn't required, and simplifies the
11945                                  * case where stashes aren't cloned back
11946                                  * if they already exist in the parent
11947                                  * thread */
11948                             ? NULL
11949                             : saux->xhv_backreferences
11950                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
11951                                     ? MUTABLE_AV(SvREFCNT_inc(
11952                                           sv_dup_inc((const SV *)
11953                                             saux->xhv_backreferences, param)))
11954                                     : MUTABLE_AV(sv_dup((const SV *)
11955                                             saux->xhv_backreferences, param))
11956                                 : 0;
11957
11958                         daux->xhv_mro_meta = saux->xhv_mro_meta
11959                             ? mro_meta_dup(saux->xhv_mro_meta, param)
11960                             : 0;
11961
11962                         /* Record stashes for possible cloning in Perl_clone(). */
11963                         if (HvNAME(sstr))
11964                             av_push(param->stashes, dstr);
11965                     }
11966                 }
11967                 else
11968                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
11969                 break;
11970             case SVt_PVCV:
11971                 if (!(param->flags & CLONEf_COPY_STACKS)) {
11972                     CvDEPTH(dstr) = 0;
11973                 }
11974                 /*FALLTHROUGH*/
11975             case SVt_PVFM:
11976                 /* NOTE: not refcounted */
11977                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
11978                     hv_dup(CvSTASH(dstr), param);
11979                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
11980                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
11981                 if (!CvISXSUB(dstr)) {
11982                     OP_REFCNT_LOCK;
11983                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
11984                     OP_REFCNT_UNLOCK;
11985                     CvFILE(dstr) = SAVEPV(CvFILE(dstr));
11986                 } else if (CvCONST(dstr)) {
11987                     CvXSUBANY(dstr).any_ptr =
11988                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
11989                 }
11990                 /* don't dup if copying back - CvGV isn't refcounted, so the
11991                  * duped GV may never be freed. A bit of a hack! DAPM */
11992                 SvANY(MUTABLE_CV(dstr))->xcv_gv =
11993                     CvCVGV_RC(dstr)
11994                     ? gv_dup_inc(CvGV(sstr), param)
11995                     : (param->flags & CLONEf_JOIN_IN)
11996                         ? NULL
11997                         : gv_dup(CvGV(sstr), param);
11998
11999                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12000                 CvOUTSIDE(dstr) =
12001                     CvWEAKOUTSIDE(sstr)
12002                     ? cv_dup(    CvOUTSIDE(dstr), param)
12003                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12004                 break;
12005             }
12006         }
12007     }
12008
12009     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12010         ++PL_sv_objcount;
12011
12012     return dstr;
12013  }
12014
12015 SV *
12016 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12017 {
12018     PERL_ARGS_ASSERT_SV_DUP_INC;
12019     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12020 }
12021
12022 SV *
12023 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12024 {
12025     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12026     PERL_ARGS_ASSERT_SV_DUP;
12027
12028     /* Track every SV that (at least initially) had a reference count of 0.
12029        We need to do this by holding an actual reference to it in this array.
12030        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12031        (akin to the stashes hash, and the perl stack), we come unstuck if
12032        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12033        thread) is manipulated in a CLONE method, because CLONE runs before the
12034        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12035        (and fix things up by giving each a reference via the temps stack).
12036        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12037        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12038        before the walk of unreferenced happens and a reference to that is SV
12039        added to the temps stack. At which point we have the same SV considered
12040        to be in use, and free to be re-used. Not good.
12041     */
12042     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12043         assert(param->unreferenced);
12044         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12045     }
12046
12047     return dstr;
12048 }
12049
12050 /* duplicate a context */
12051
12052 PERL_CONTEXT *
12053 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12054 {
12055     PERL_CONTEXT *ncxs;
12056
12057     PERL_ARGS_ASSERT_CX_DUP;
12058
12059     if (!cxs)
12060         return (PERL_CONTEXT*)NULL;
12061
12062     /* look for it in the table first */
12063     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12064     if (ncxs)
12065         return ncxs;
12066
12067     /* create anew and remember what it is */
12068     Newx(ncxs, max + 1, PERL_CONTEXT);
12069     ptr_table_store(PL_ptr_table, cxs, ncxs);
12070     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12071
12072     while (ix >= 0) {
12073         PERL_CONTEXT * const ncx = &ncxs[ix];
12074         if (CxTYPE(ncx) == CXt_SUBST) {
12075             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12076         }
12077         else {
12078             switch (CxTYPE(ncx)) {
12079             case CXt_SUB:
12080                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12081                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12082                                            : cv_dup(ncx->blk_sub.cv,param));
12083                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12084                                            ? av_dup_inc(ncx->blk_sub.argarray,
12085                                                         param)
12086                                            : NULL);
12087                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12088                                                      param);
12089                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12090                                            ncx->blk_sub.oldcomppad);
12091                 break;
12092             case CXt_EVAL:
12093                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12094                                                       param);
12095                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12096                 break;
12097             case CXt_LOOP_LAZYSV:
12098                 ncx->blk_loop.state_u.lazysv.end
12099                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12100                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12101                    actually being the same function, and order equivalance of
12102                    the two unions.
12103                    We can assert the later [but only at run time :-(]  */
12104                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12105                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12106             case CXt_LOOP_FOR:
12107                 ncx->blk_loop.state_u.ary.ary
12108                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12109             case CXt_LOOP_LAZYIV:
12110             case CXt_LOOP_PLAIN:
12111                 if (CxPADLOOP(ncx)) {
12112                     ncx->blk_loop.itervar_u.oldcomppad
12113                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12114                                         ncx->blk_loop.itervar_u.oldcomppad);
12115                 } else {
12116                     ncx->blk_loop.itervar_u.gv
12117                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12118                                     param);
12119                 }
12120                 break;
12121             case CXt_FORMAT:
12122                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12123                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12124                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12125                                                      param);
12126                 break;
12127             case CXt_BLOCK:
12128             case CXt_NULL:
12129                 break;
12130             }
12131         }
12132         --ix;
12133     }
12134     return ncxs;
12135 }
12136
12137 /* duplicate a stack info structure */
12138
12139 PERL_SI *
12140 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12141 {
12142     PERL_SI *nsi;
12143
12144     PERL_ARGS_ASSERT_SI_DUP;
12145
12146     if (!si)
12147         return (PERL_SI*)NULL;
12148
12149     /* look for it in the table first */
12150     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12151     if (nsi)
12152         return nsi;
12153
12154     /* create anew and remember what it is */
12155     Newxz(nsi, 1, PERL_SI);
12156     ptr_table_store(PL_ptr_table, si, nsi);
12157
12158     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12159     nsi->si_cxix        = si->si_cxix;
12160     nsi->si_cxmax       = si->si_cxmax;
12161     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12162     nsi->si_type        = si->si_type;
12163     nsi->si_prev        = si_dup(si->si_prev, param);
12164     nsi->si_next        = si_dup(si->si_next, param);
12165     nsi->si_markoff     = si->si_markoff;
12166
12167     return nsi;
12168 }
12169
12170 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12171 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12172 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12173 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12174 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12175 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12176 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12177 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12178 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12179 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12180 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12181 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12182 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12183 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12184 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12185 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12186
12187 /* XXXXX todo */
12188 #define pv_dup_inc(p)   SAVEPV(p)
12189 #define pv_dup(p)       SAVEPV(p)
12190 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12191
12192 /* map any object to the new equivent - either something in the
12193  * ptr table, or something in the interpreter structure
12194  */
12195
12196 void *
12197 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12198 {
12199     void *ret;
12200
12201     PERL_ARGS_ASSERT_ANY_DUP;
12202
12203     if (!v)
12204         return (void*)NULL;
12205
12206     /* look for it in the table first */
12207     ret = ptr_table_fetch(PL_ptr_table, v);
12208     if (ret)
12209         return ret;
12210
12211     /* see if it is part of the interpreter structure */
12212     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12213         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12214     else {
12215         ret = v;
12216     }
12217
12218     return ret;
12219 }
12220
12221 /* duplicate the save stack */
12222
12223 ANY *
12224 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12225 {
12226     dVAR;
12227     ANY * const ss      = proto_perl->Isavestack;
12228     const I32 max       = proto_perl->Isavestack_max;
12229     I32 ix              = proto_perl->Isavestack_ix;
12230     ANY *nss;
12231     const SV *sv;
12232     const GV *gv;
12233     const AV *av;
12234     const HV *hv;
12235     void* ptr;
12236     int intval;
12237     long longval;
12238     GP *gp;
12239     IV iv;
12240     I32 i;
12241     char *c = NULL;
12242     void (*dptr) (void*);
12243     void (*dxptr) (pTHX_ void*);
12244
12245     PERL_ARGS_ASSERT_SS_DUP;
12246
12247     Newxz(nss, max, ANY);
12248
12249     while (ix > 0) {
12250         const UV uv = POPUV(ss,ix);
12251         const U8 type = (U8)uv & SAVE_MASK;
12252
12253         TOPUV(nss,ix) = uv;
12254         switch (type) {
12255         case SAVEt_CLEARSV:
12256             break;
12257         case SAVEt_HELEM:               /* hash element */
12258             sv = (const SV *)POPPTR(ss,ix);
12259             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12260             /* fall through */
12261         case SAVEt_ITEM:                        /* normal string */
12262         case SAVEt_GVSV:                        /* scalar slot in GV */
12263         case SAVEt_SV:                          /* scalar reference */
12264             sv = (const SV *)POPPTR(ss,ix);
12265             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12266             /* fall through */
12267         case SAVEt_FREESV:
12268         case SAVEt_MORTALIZESV:
12269             sv = (const SV *)POPPTR(ss,ix);
12270             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12271             break;
12272         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12273             c = (char*)POPPTR(ss,ix);
12274             TOPPTR(nss,ix) = savesharedpv(c);
12275             ptr = POPPTR(ss,ix);
12276             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12277             break;
12278         case SAVEt_GENERIC_SVREF:               /* generic sv */
12279         case SAVEt_SVREF:                       /* scalar reference */
12280             sv = (const SV *)POPPTR(ss,ix);
12281             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12282             ptr = POPPTR(ss,ix);
12283             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12284             break;
12285         case SAVEt_HV:                          /* hash reference */
12286         case SAVEt_AV:                          /* array reference */
12287             sv = (const SV *) POPPTR(ss,ix);
12288             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12289             /* fall through */
12290         case SAVEt_COMPPAD:
12291         case SAVEt_NSTAB:
12292             sv = (const SV *) POPPTR(ss,ix);
12293             TOPPTR(nss,ix) = sv_dup(sv, param);
12294             break;
12295         case SAVEt_INT:                         /* int reference */
12296             ptr = POPPTR(ss,ix);
12297             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12298             intval = (int)POPINT(ss,ix);
12299             TOPINT(nss,ix) = intval;
12300             break;
12301         case SAVEt_LONG:                        /* long reference */
12302             ptr = POPPTR(ss,ix);
12303             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12304             longval = (long)POPLONG(ss,ix);
12305             TOPLONG(nss,ix) = longval;
12306             break;
12307         case SAVEt_I32:                         /* I32 reference */
12308         case SAVEt_COP_ARYBASE:                 /* call CopARYBASE_set */
12309             ptr = POPPTR(ss,ix);
12310             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12311             i = POPINT(ss,ix);
12312             TOPINT(nss,ix) = i;
12313             break;
12314         case SAVEt_IV:                          /* IV reference */
12315             ptr = POPPTR(ss,ix);
12316             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12317             iv = POPIV(ss,ix);
12318             TOPIV(nss,ix) = iv;
12319             break;
12320         case SAVEt_HPTR:                        /* HV* reference */
12321         case SAVEt_APTR:                        /* AV* reference */
12322         case SAVEt_SPTR:                        /* SV* reference */
12323             ptr = POPPTR(ss,ix);
12324             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12325             sv = (const SV *)POPPTR(ss,ix);
12326             TOPPTR(nss,ix) = sv_dup(sv, param);
12327             break;
12328         case SAVEt_VPTR:                        /* random* reference */
12329             ptr = POPPTR(ss,ix);
12330             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12331             /* Fall through */
12332         case SAVEt_INT_SMALL:
12333         case SAVEt_I32_SMALL:
12334         case SAVEt_I16:                         /* I16 reference */
12335         case SAVEt_I8:                          /* I8 reference */
12336         case SAVEt_BOOL:
12337             ptr = POPPTR(ss,ix);
12338             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12339             break;
12340         case SAVEt_GENERIC_PVREF:               /* generic char* */
12341         case SAVEt_PPTR:                        /* char* reference */
12342             ptr = POPPTR(ss,ix);
12343             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12344             c = (char*)POPPTR(ss,ix);
12345             TOPPTR(nss,ix) = pv_dup(c);
12346             break;
12347         case SAVEt_GP:                          /* scalar reference */
12348             gp = (GP*)POPPTR(ss,ix);
12349             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12350             (void)GpREFCNT_inc(gp);
12351             gv = (const GV *)POPPTR(ss,ix);
12352             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12353             break;
12354         case SAVEt_FREEOP:
12355             ptr = POPPTR(ss,ix);
12356             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12357                 /* these are assumed to be refcounted properly */
12358                 OP *o;
12359                 switch (((OP*)ptr)->op_type) {
12360                 case OP_LEAVESUB:
12361                 case OP_LEAVESUBLV:
12362                 case OP_LEAVEEVAL:
12363                 case OP_LEAVE:
12364                 case OP_SCOPE:
12365                 case OP_LEAVEWRITE:
12366                     TOPPTR(nss,ix) = ptr;
12367                     o = (OP*)ptr;
12368                     OP_REFCNT_LOCK;
12369                     (void) OpREFCNT_inc(o);
12370                     OP_REFCNT_UNLOCK;
12371                     break;
12372                 default:
12373                     TOPPTR(nss,ix) = NULL;
12374                     break;
12375                 }
12376             }
12377             else
12378                 TOPPTR(nss,ix) = NULL;
12379             break;
12380         case SAVEt_FREECOPHH:
12381             ptr = POPPTR(ss,ix);
12382             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12383             break;
12384         case SAVEt_DELETE:
12385             hv = (const HV *)POPPTR(ss,ix);
12386             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12387             i = POPINT(ss,ix);
12388             TOPINT(nss,ix) = i;
12389             /* Fall through */
12390         case SAVEt_FREEPV:
12391             c = (char*)POPPTR(ss,ix);
12392             TOPPTR(nss,ix) = pv_dup_inc(c);
12393             break;
12394         case SAVEt_STACK_POS:           /* Position on Perl stack */
12395             i = POPINT(ss,ix);
12396             TOPINT(nss,ix) = i;
12397             break;
12398         case SAVEt_DESTRUCTOR:
12399             ptr = POPPTR(ss,ix);
12400             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12401             dptr = POPDPTR(ss,ix);
12402             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12403                                         any_dup(FPTR2DPTR(void *, dptr),
12404                                                 proto_perl));
12405             break;
12406         case SAVEt_DESTRUCTOR_X:
12407             ptr = POPPTR(ss,ix);
12408             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12409             dxptr = POPDXPTR(ss,ix);
12410             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12411                                          any_dup(FPTR2DPTR(void *, dxptr),
12412                                                  proto_perl));
12413             break;
12414         case SAVEt_REGCONTEXT:
12415         case SAVEt_ALLOC:
12416             ix -= uv >> SAVE_TIGHT_SHIFT;
12417             break;
12418         case SAVEt_AELEM:               /* array element */
12419             sv = (const SV *)POPPTR(ss,ix);
12420             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12421             i = POPINT(ss,ix);
12422             TOPINT(nss,ix) = i;
12423             av = (const AV *)POPPTR(ss,ix);
12424             TOPPTR(nss,ix) = av_dup_inc(av, param);
12425             break;
12426         case SAVEt_OP:
12427             ptr = POPPTR(ss,ix);
12428             TOPPTR(nss,ix) = ptr;
12429             break;
12430         case SAVEt_HINTS:
12431             ptr = POPPTR(ss,ix);
12432             ptr = cophh_copy((COPHH*)ptr);
12433             TOPPTR(nss,ix) = ptr;
12434             i = POPINT(ss,ix);
12435             TOPINT(nss,ix) = i;
12436             if (i & HINT_LOCALIZE_HH) {
12437                 hv = (const HV *)POPPTR(ss,ix);
12438                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12439             }
12440             break;
12441         case SAVEt_PADSV_AND_MORTALIZE:
12442             longval = (long)POPLONG(ss,ix);
12443             TOPLONG(nss,ix) = longval;
12444             ptr = POPPTR(ss,ix);
12445             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12446             sv = (const SV *)POPPTR(ss,ix);
12447             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12448             break;
12449         case SAVEt_SET_SVFLAGS:
12450             i = POPINT(ss,ix);
12451             TOPINT(nss,ix) = i;
12452             i = POPINT(ss,ix);
12453             TOPINT(nss,ix) = i;
12454             sv = (const SV *)POPPTR(ss,ix);
12455             TOPPTR(nss,ix) = sv_dup(sv, param);
12456             break;
12457         case SAVEt_RE_STATE:
12458             {
12459                 const struct re_save_state *const old_state
12460                     = (struct re_save_state *)
12461                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12462                 struct re_save_state *const new_state
12463                     = (struct re_save_state *)
12464                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12465
12466                 Copy(old_state, new_state, 1, struct re_save_state);
12467                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12468
12469                 new_state->re_state_bostr
12470                     = pv_dup(old_state->re_state_bostr);
12471                 new_state->re_state_reginput
12472                     = pv_dup(old_state->re_state_reginput);
12473                 new_state->re_state_regeol
12474                     = pv_dup(old_state->re_state_regeol);
12475                 new_state->re_state_regoffs
12476                     = (regexp_paren_pair*)
12477                         any_dup(old_state->re_state_regoffs, proto_perl);
12478                 new_state->re_state_reglastparen
12479                     = (U32*) any_dup(old_state->re_state_reglastparen, 
12480                               proto_perl);
12481                 new_state->re_state_reglastcloseparen
12482                     = (U32*)any_dup(old_state->re_state_reglastcloseparen,
12483                               proto_perl);
12484                 /* XXX This just has to be broken. The old save_re_context
12485                    code did SAVEGENERICPV(PL_reg_start_tmp);
12486                    PL_reg_start_tmp is char **.
12487                    Look above to what the dup code does for
12488                    SAVEt_GENERIC_PVREF
12489                    It can never have worked.
12490                    So this is merely a faithful copy of the exiting bug:  */
12491                 new_state->re_state_reg_start_tmp
12492                     = (char **) pv_dup((char *)
12493                                       old_state->re_state_reg_start_tmp);
12494                 /* I assume that it only ever "worked" because no-one called
12495                    (pseudo)fork while the regexp engine had re-entered itself.
12496                 */
12497 #ifdef PERL_OLD_COPY_ON_WRITE
12498                 new_state->re_state_nrs
12499                     = sv_dup(old_state->re_state_nrs, param);
12500 #endif
12501                 new_state->re_state_reg_magic
12502                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12503                                proto_perl);
12504                 new_state->re_state_reg_oldcurpm
12505                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12506                               proto_perl);
12507                 new_state->re_state_reg_curpm
12508                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12509                                proto_perl);
12510                 new_state->re_state_reg_oldsaved
12511                     = pv_dup(old_state->re_state_reg_oldsaved);
12512                 new_state->re_state_reg_poscache
12513                     = pv_dup(old_state->re_state_reg_poscache);
12514                 new_state->re_state_reg_starttry
12515                     = pv_dup(old_state->re_state_reg_starttry);
12516                 break;
12517             }
12518         case SAVEt_COMPILE_WARNINGS:
12519             ptr = POPPTR(ss,ix);
12520             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12521             break;
12522         case SAVEt_PARSER:
12523             ptr = POPPTR(ss,ix);
12524             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12525             break;
12526         default:
12527             Perl_croak(aTHX_
12528                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12529         }
12530     }
12531
12532     return nss;
12533 }
12534
12535
12536 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12537  * flag to the result. This is done for each stash before cloning starts,
12538  * so we know which stashes want their objects cloned */
12539
12540 static void
12541 do_mark_cloneable_stash(pTHX_ SV *const sv)
12542 {
12543     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12544     if (hvname) {
12545         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12546         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12547         if (cloner && GvCV(cloner)) {
12548             dSP;
12549             UV status;
12550
12551             ENTER;
12552             SAVETMPS;
12553             PUSHMARK(SP);
12554             mXPUSHs(newSVhek(hvname));
12555             PUTBACK;
12556             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12557             SPAGAIN;
12558             status = POPu;
12559             PUTBACK;
12560             FREETMPS;
12561             LEAVE;
12562             if (status)
12563                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12564         }
12565     }
12566 }
12567
12568
12569
12570 /*
12571 =for apidoc perl_clone
12572
12573 Create and return a new interpreter by cloning the current one.
12574
12575 perl_clone takes these flags as parameters:
12576
12577 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12578 without it we only clone the data and zero the stacks,
12579 with it we copy the stacks and the new perl interpreter is
12580 ready to run at the exact same point as the previous one.
12581 The pseudo-fork code uses COPY_STACKS while the
12582 threads->create doesn't.
12583
12584 CLONEf_KEEP_PTR_TABLE
12585 perl_clone keeps a ptr_table with the pointer of the old
12586 variable as a key and the new variable as a value,
12587 this allows it to check if something has been cloned and not
12588 clone it again but rather just use the value and increase the
12589 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
12590 the ptr_table using the function
12591 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12592 reason to keep it around is if you want to dup some of your own
12593 variable who are outside the graph perl scans, example of this
12594 code is in threads.xs create
12595
12596 CLONEf_CLONE_HOST
12597 This is a win32 thing, it is ignored on unix, it tells perls
12598 win32host code (which is c++) to clone itself, this is needed on
12599 win32 if you want to run two threads at the same time,
12600 if you just want to do some stuff in a separate perl interpreter
12601 and then throw it away and return to the original one,
12602 you don't need to do anything.
12603
12604 =cut
12605 */
12606
12607 /* XXX the above needs expanding by someone who actually understands it ! */
12608 EXTERN_C PerlInterpreter *
12609 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12610
12611 PerlInterpreter *
12612 perl_clone(PerlInterpreter *proto_perl, UV flags)
12613 {
12614    dVAR;
12615 #ifdef PERL_IMPLICIT_SYS
12616
12617     PERL_ARGS_ASSERT_PERL_CLONE;
12618
12619    /* perlhost.h so we need to call into it
12620    to clone the host, CPerlHost should have a c interface, sky */
12621
12622    if (flags & CLONEf_CLONE_HOST) {
12623        return perl_clone_host(proto_perl,flags);
12624    }
12625    return perl_clone_using(proto_perl, flags,
12626                             proto_perl->IMem,
12627                             proto_perl->IMemShared,
12628                             proto_perl->IMemParse,
12629                             proto_perl->IEnv,
12630                             proto_perl->IStdIO,
12631                             proto_perl->ILIO,
12632                             proto_perl->IDir,
12633                             proto_perl->ISock,
12634                             proto_perl->IProc);
12635 }
12636
12637 PerlInterpreter *
12638 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12639                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12640                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12641                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12642                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12643                  struct IPerlProc* ipP)
12644 {
12645     /* XXX many of the string copies here can be optimized if they're
12646      * constants; they need to be allocated as common memory and just
12647      * their pointers copied. */
12648
12649     IV i;
12650     CLONE_PARAMS clone_params;
12651     CLONE_PARAMS* const param = &clone_params;
12652
12653     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12654
12655     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12656 #else           /* !PERL_IMPLICIT_SYS */
12657     IV i;
12658     CLONE_PARAMS clone_params;
12659     CLONE_PARAMS* param = &clone_params;
12660     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12661
12662     PERL_ARGS_ASSERT_PERL_CLONE;
12663 #endif          /* PERL_IMPLICIT_SYS */
12664
12665     /* for each stash, determine whether its objects should be cloned */
12666     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12667     PERL_SET_THX(my_perl);
12668
12669 #ifdef DEBUGGING
12670     PoisonNew(my_perl, 1, PerlInterpreter);
12671     PL_op = NULL;
12672     PL_curcop = NULL;
12673     PL_markstack = 0;
12674     PL_scopestack = 0;
12675     PL_scopestack_name = 0;
12676     PL_savestack = 0;
12677     PL_savestack_ix = 0;
12678     PL_savestack_max = -1;
12679     PL_sig_pending = 0;
12680     PL_parser = NULL;
12681     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12682 #  ifdef DEBUG_LEAKING_SCALARS
12683     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12684 #  endif
12685 #else   /* !DEBUGGING */
12686     Zero(my_perl, 1, PerlInterpreter);
12687 #endif  /* DEBUGGING */
12688
12689 #ifdef PERL_IMPLICIT_SYS
12690     /* host pointers */
12691     PL_Mem              = ipM;
12692     PL_MemShared        = ipMS;
12693     PL_MemParse         = ipMP;
12694     PL_Env              = ipE;
12695     PL_StdIO            = ipStd;
12696     PL_LIO              = ipLIO;
12697     PL_Dir              = ipD;
12698     PL_Sock             = ipS;
12699     PL_Proc             = ipP;
12700 #endif          /* PERL_IMPLICIT_SYS */
12701
12702     param->flags = flags;
12703     /* Nothing in the core code uses this, but we make it available to
12704        extensions (using mg_dup).  */
12705     param->proto_perl = proto_perl;
12706     /* Likely nothing will use this, but it is initialised to be consistent
12707        with Perl_clone_params_new().  */
12708     param->new_perl = my_perl;
12709     param->unreferenced = NULL;
12710
12711     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12712
12713     PL_body_arenas = NULL;
12714     Zero(&PL_body_roots, 1, PL_body_roots);
12715     
12716     PL_sv_count         = 0;
12717     PL_sv_objcount      = 0;
12718     PL_sv_root          = NULL;
12719     PL_sv_arenaroot     = NULL;
12720
12721     PL_debug            = proto_perl->Idebug;
12722
12723     PL_hash_seed        = proto_perl->Ihash_seed;
12724     PL_rehash_seed      = proto_perl->Irehash_seed;
12725
12726 #ifdef USE_REENTRANT_API
12727     /* XXX: things like -Dm will segfault here in perlio, but doing
12728      *  PERL_SET_CONTEXT(proto_perl);
12729      * breaks too many other things
12730      */
12731     Perl_reentrant_init(aTHX);
12732 #endif
12733
12734     /* create SV map for pointer relocation */
12735     PL_ptr_table = ptr_table_new();
12736
12737     /* initialize these special pointers as early as possible */
12738     SvANY(&PL_sv_undef)         = NULL;
12739     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
12740     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
12741     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
12742
12743     SvANY(&PL_sv_no)            = new_XPVNV();
12744     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
12745     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12746                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12747     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
12748     SvCUR_set(&PL_sv_no, 0);
12749     SvLEN_set(&PL_sv_no, 1);
12750     SvIV_set(&PL_sv_no, 0);
12751     SvNV_set(&PL_sv_no, 0);
12752     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
12753
12754     SvANY(&PL_sv_yes)           = new_XPVNV();
12755     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
12756     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12757                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12758     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
12759     SvCUR_set(&PL_sv_yes, 1);
12760     SvLEN_set(&PL_sv_yes, 2);
12761     SvIV_set(&PL_sv_yes, 1);
12762     SvNV_set(&PL_sv_yes, 1);
12763     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
12764
12765     /* dbargs array probably holds garbage */
12766     PL_dbargs           = NULL;
12767
12768     /* create (a non-shared!) shared string table */
12769     PL_strtab           = newHV();
12770     HvSHAREKEYS_off(PL_strtab);
12771     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
12772     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
12773
12774     PL_compiling = proto_perl->Icompiling;
12775
12776     /* These two PVs will be free'd special way so must set them same way op.c does */
12777     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
12778     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
12779
12780     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
12781     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
12782
12783     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
12784     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
12785     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
12786     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
12787 #ifdef PERL_DEBUG_READONLY_OPS
12788     PL_slabs = NULL;
12789     PL_slab_count = 0;
12790 #endif
12791
12792     /* pseudo environmental stuff */
12793     PL_origargc         = proto_perl->Iorigargc;
12794     PL_origargv         = proto_perl->Iorigargv;
12795
12796     param->stashes      = newAV();  /* Setup array of objects to call clone on */
12797     /* This makes no difference to the implementation, as it always pushes
12798        and shifts pointers to other SVs without changing their reference
12799        count, with the array becoming empty before it is freed. However, it
12800        makes it conceptually clear what is going on, and will avoid some
12801        work inside av.c, filling slots between AvFILL() and AvMAX() with
12802        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
12803     AvREAL_off(param->stashes);
12804
12805     if (!(flags & CLONEf_COPY_STACKS)) {
12806         param->unreferenced = newAV();
12807     }
12808
12809     /* Set tainting stuff before PerlIO_debug can possibly get called */
12810     PL_tainting         = proto_perl->Itainting;
12811     PL_taint_warn       = proto_perl->Itaint_warn;
12812
12813 #ifdef PERLIO_LAYERS
12814     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
12815     PerlIO_clone(aTHX_ proto_perl, param);
12816 #endif
12817
12818     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
12819     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
12820     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
12821     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
12822     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
12823     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
12824
12825     /* switches */
12826     PL_minus_c          = proto_perl->Iminus_c;
12827     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
12828     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
12829     PL_localpatches     = proto_perl->Ilocalpatches;
12830     PL_splitstr         = proto_perl->Isplitstr;
12831     PL_minus_n          = proto_perl->Iminus_n;
12832     PL_minus_p          = proto_perl->Iminus_p;
12833     PL_minus_l          = proto_perl->Iminus_l;
12834     PL_minus_a          = proto_perl->Iminus_a;
12835     PL_minus_E          = proto_perl->Iminus_E;
12836     PL_minus_F          = proto_perl->Iminus_F;
12837     PL_doswitches       = proto_perl->Idoswitches;
12838     PL_dowarn           = proto_perl->Idowarn;
12839     PL_sawampersand     = proto_perl->Isawampersand;
12840     PL_unsafe           = proto_perl->Iunsafe;
12841     PL_inplace          = SAVEPV(proto_perl->Iinplace);
12842     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
12843     PL_perldb           = proto_perl->Iperldb;
12844     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12845     PL_exit_flags       = proto_perl->Iexit_flags;
12846
12847     /* magical thingies */
12848     /* XXX time(&PL_basetime) when asked for? */
12849     PL_basetime         = proto_perl->Ibasetime;
12850     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
12851
12852     PL_maxsysfd         = proto_perl->Imaxsysfd;
12853     PL_statusvalue      = proto_perl->Istatusvalue;
12854 #ifdef VMS
12855     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
12856 #else
12857     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12858 #endif
12859     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
12860
12861     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
12862     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
12863     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
12864
12865    
12866     /* RE engine related */
12867     Zero(&PL_reg_state, 1, struct re_save_state);
12868     PL_reginterp_cnt    = 0;
12869     PL_regmatch_slab    = NULL;
12870     
12871     /* Clone the regex array */
12872     /* ORANGE FIXME for plugins, probably in the SV dup code.
12873        newSViv(PTR2IV(CALLREGDUPE(
12874        INT2PTR(REGEXP *, SvIVX(regex)), param))))
12875     */
12876     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
12877     PL_regex_pad = AvARRAY(PL_regex_padav);
12878
12879     /* shortcuts to various I/O objects */
12880     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
12881     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
12882     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
12883     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
12884     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
12885     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
12886     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
12887
12888     /* shortcuts to regexp stuff */
12889     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
12890
12891     /* shortcuts to misc objects */
12892     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
12893
12894     /* shortcuts to debugging objects */
12895     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
12896     PL_DBline           = gv_dup(proto_perl->IDBline, param);
12897     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
12898     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
12899     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
12900     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
12901
12902     /* symbol tables */
12903     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
12904     PL_curstash         = hv_dup(proto_perl->Icurstash, param);
12905     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
12906     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
12907     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
12908
12909     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
12910     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
12911     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
12912     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
12913     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
12914     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
12915     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
12916     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
12917
12918     PL_sub_generation   = proto_perl->Isub_generation;
12919     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
12920
12921     /* funky return mechanisms */
12922     PL_forkprocess      = proto_perl->Iforkprocess;
12923
12924     /* subprocess state */
12925     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
12926
12927     /* internal state */
12928     PL_maxo             = proto_perl->Imaxo;
12929     if (proto_perl->Iop_mask)
12930         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
12931     else
12932         PL_op_mask      = NULL;
12933     /* PL_asserting        = proto_perl->Iasserting; */
12934
12935     /* current interpreter roots */
12936     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
12937     OP_REFCNT_LOCK;
12938     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
12939     OP_REFCNT_UNLOCK;
12940     PL_main_start       = proto_perl->Imain_start;
12941     PL_eval_root        = proto_perl->Ieval_root;
12942     PL_eval_start       = proto_perl->Ieval_start;
12943
12944     /* runtime control stuff */
12945     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
12946
12947     PL_filemode         = proto_perl->Ifilemode;
12948     PL_lastfd           = proto_perl->Ilastfd;
12949     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
12950     PL_Argv             = NULL;
12951     PL_Cmd              = NULL;
12952     PL_gensym           = proto_perl->Igensym;
12953     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
12954     PL_laststatval      = proto_perl->Ilaststatval;
12955     PL_laststype        = proto_perl->Ilaststype;
12956     PL_mess_sv          = NULL;
12957
12958     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
12959
12960     /* interpreter atexit processing */
12961     PL_exitlistlen      = proto_perl->Iexitlistlen;
12962     if (PL_exitlistlen) {
12963         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12964         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12965     }
12966     else
12967         PL_exitlist     = (PerlExitListEntry*)NULL;
12968
12969     PL_my_cxt_size = proto_perl->Imy_cxt_size;
12970     if (PL_my_cxt_size) {
12971         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
12972         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
12973 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
12974         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
12975         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
12976 #endif
12977     }
12978     else {
12979         PL_my_cxt_list  = (void**)NULL;
12980 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
12981         PL_my_cxt_keys  = (const char**)NULL;
12982 #endif
12983     }
12984     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
12985     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
12986     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
12987     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
12988
12989     PL_profiledata      = NULL;
12990
12991     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
12992
12993     PAD_CLONE_VARS(proto_perl, param);
12994
12995 #ifdef HAVE_INTERP_INTERN
12996     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
12997 #endif
12998
12999     /* more statics moved here */
13000     PL_generation       = proto_perl->Igeneration;
13001     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13002
13003     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13004     PL_in_clean_all     = proto_perl->Iin_clean_all;
13005
13006     PL_uid              = proto_perl->Iuid;
13007     PL_euid             = proto_perl->Ieuid;
13008     PL_gid              = proto_perl->Igid;
13009     PL_egid             = proto_perl->Iegid;
13010     PL_nomemok          = proto_perl->Inomemok;
13011     PL_an               = proto_perl->Ian;
13012     PL_evalseq          = proto_perl->Ievalseq;
13013     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13014     PL_origalen         = proto_perl->Iorigalen;
13015 #ifdef PERL_USES_PL_PIDSTATUS
13016     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13017 #endif
13018     PL_osname           = SAVEPV(proto_perl->Iosname);
13019     PL_sighandlerp      = proto_perl->Isighandlerp;
13020
13021     PL_runops           = proto_perl->Irunops;
13022
13023     PL_parser           = parser_dup(proto_perl->Iparser, param);
13024
13025     /* XXX this only works if the saved cop has already been cloned */
13026     if (proto_perl->Iparser) {
13027         PL_parser->saved_curcop = (COP*)any_dup(
13028                                     proto_perl->Iparser->saved_curcop,
13029                                     proto_perl);
13030     }
13031
13032     PL_subline          = proto_perl->Isubline;
13033     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13034
13035 #ifdef FCRYPT
13036     PL_cryptseen        = proto_perl->Icryptseen;
13037 #endif
13038
13039     PL_hints            = proto_perl->Ihints;
13040
13041     PL_amagic_generation        = proto_perl->Iamagic_generation;
13042
13043 #ifdef USE_LOCALE_COLLATE
13044     PL_collation_ix     = proto_perl->Icollation_ix;
13045     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13046     PL_collation_standard       = proto_perl->Icollation_standard;
13047     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13048     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13049 #endif /* USE_LOCALE_COLLATE */
13050
13051 #ifdef USE_LOCALE_NUMERIC
13052     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13053     PL_numeric_standard = proto_perl->Inumeric_standard;
13054     PL_numeric_local    = proto_perl->Inumeric_local;
13055     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13056 #endif /* !USE_LOCALE_NUMERIC */
13057
13058     /* utf8 character classes */
13059     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
13060     PL_utf8_ascii       = sv_dup_inc(proto_perl->Iutf8_ascii, param);
13061     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13062     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
13063     PL_utf8_cntrl       = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
13064     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
13065     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
13066     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
13067     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
13068     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
13069     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
13070     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13071     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13072     PL_utf8_X_begin     = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
13073     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13074     PL_utf8_X_prepend   = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
13075     PL_utf8_X_non_hangul        = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
13076     PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
13077     PL_utf8_X_LV        = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
13078     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13079     PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
13080     PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
13081     PL_utf8_X_LV_LVT_V  = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
13082     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13083     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13084     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13085     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13086     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13087     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13088
13089     /* Did the locale setup indicate UTF-8? */
13090     PL_utf8locale       = proto_perl->Iutf8locale;
13091     /* Unicode features (see perlrun/-C) */
13092     PL_unicode          = proto_perl->Iunicode;
13093
13094     /* Pre-5.8 signals control */
13095     PL_signals          = proto_perl->Isignals;
13096
13097     /* times() ticks per second */
13098     PL_clocktick        = proto_perl->Iclocktick;
13099
13100     /* Recursion stopper for PerlIO_find_layer */
13101     PL_in_load_module   = proto_perl->Iin_load_module;
13102
13103     /* sort() routine */
13104     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13105
13106     /* Not really needed/useful since the reenrant_retint is "volatile",
13107      * but do it for consistency's sake. */
13108     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13109
13110     /* Hooks to shared SVs and locks. */
13111     PL_sharehook        = proto_perl->Isharehook;
13112     PL_lockhook         = proto_perl->Ilockhook;
13113     PL_unlockhook       = proto_perl->Iunlockhook;
13114     PL_threadhook       = proto_perl->Ithreadhook;
13115     PL_destroyhook      = proto_perl->Idestroyhook;
13116     PL_signalhook       = proto_perl->Isignalhook;
13117
13118 #ifdef THREADS_HAVE_PIDS
13119     PL_ppid             = proto_perl->Ippid;
13120 #endif
13121
13122     /* swatch cache */
13123     PL_last_swash_hv    = NULL; /* reinits on demand */
13124     PL_last_swash_klen  = 0;
13125     PL_last_swash_key[0]= '\0';
13126     PL_last_swash_tmps  = (U8*)NULL;
13127     PL_last_swash_slen  = 0;
13128
13129     PL_glob_index       = proto_perl->Iglob_index;
13130     PL_srand_called     = proto_perl->Isrand_called;
13131
13132     if (proto_perl->Ipsig_pend) {
13133         Newxz(PL_psig_pend, SIG_SIZE, int);
13134     }
13135     else {
13136         PL_psig_pend    = (int*)NULL;
13137     }
13138
13139     if (proto_perl->Ipsig_name) {
13140         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13141         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13142                             param);
13143         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13144     }
13145     else {
13146         PL_psig_ptr     = (SV**)NULL;
13147         PL_psig_name    = (SV**)NULL;
13148     }
13149
13150     /* intrpvar.h stuff */
13151
13152     if (flags & CLONEf_COPY_STACKS) {
13153         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13154         PL_tmps_ix              = proto_perl->Itmps_ix;
13155         PL_tmps_max             = proto_perl->Itmps_max;
13156         PL_tmps_floor           = proto_perl->Itmps_floor;
13157         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13158         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13159                             PL_tmps_ix+1, param);
13160
13161         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13162         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13163         Newxz(PL_markstack, i, I32);
13164         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13165                                                   - proto_perl->Imarkstack);
13166         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13167                                                   - proto_perl->Imarkstack);
13168         Copy(proto_perl->Imarkstack, PL_markstack,
13169              PL_markstack_ptr - PL_markstack + 1, I32);
13170
13171         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13172          * NOTE: unlike the others! */
13173         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13174         PL_scopestack_max       = proto_perl->Iscopestack_max;
13175         Newxz(PL_scopestack, PL_scopestack_max, I32);
13176         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13177
13178 #ifdef DEBUGGING
13179         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13180         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13181 #endif
13182         /* NOTE: si_dup() looks at PL_markstack */
13183         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13184
13185         /* PL_curstack          = PL_curstackinfo->si_stack; */
13186         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13187         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13188
13189         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13190         PL_stack_base           = AvARRAY(PL_curstack);
13191         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13192                                                    - proto_perl->Istack_base);
13193         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13194
13195         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13196          * NOTE: unlike the others! */
13197         PL_savestack_ix         = proto_perl->Isavestack_ix;
13198         PL_savestack_max        = proto_perl->Isavestack_max;
13199         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13200         PL_savestack            = ss_dup(proto_perl, param);
13201     }
13202     else {
13203         init_stacks();
13204         ENTER;                  /* perl_destruct() wants to LEAVE; */
13205     }
13206
13207     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13208     PL_top_env          = &PL_start_env;
13209
13210     PL_op               = proto_perl->Iop;
13211
13212     PL_Sv               = NULL;
13213     PL_Xpv              = (XPV*)NULL;
13214     my_perl->Ina        = proto_perl->Ina;
13215
13216     PL_statbuf          = proto_perl->Istatbuf;
13217     PL_statcache        = proto_perl->Istatcache;
13218     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13219     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13220 #ifdef HAS_TIMES
13221     PL_timesbuf         = proto_perl->Itimesbuf;
13222 #endif
13223
13224     PL_tainted          = proto_perl->Itainted;
13225     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13226     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13227     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13228     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13229     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13230     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13231     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13232     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13233
13234     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13235     PL_restartop        = proto_perl->Irestartop;
13236     PL_in_eval          = proto_perl->Iin_eval;
13237     PL_delaymagic       = proto_perl->Idelaymagic;
13238     PL_phase            = proto_perl->Iphase;
13239     PL_localizing       = proto_perl->Ilocalizing;
13240
13241     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13242     PL_hv_fetch_ent_mh  = NULL;
13243     PL_modcount         = proto_perl->Imodcount;
13244     PL_lastgotoprobe    = NULL;
13245     PL_dumpindent       = proto_perl->Idumpindent;
13246
13247     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13248     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13249     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13250     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13251     PL_efloatbuf        = NULL;         /* reinits on demand */
13252     PL_efloatsize       = 0;                    /* reinits on demand */
13253
13254     /* regex stuff */
13255
13256     PL_screamfirst      = NULL;
13257     PL_screamnext       = NULL;
13258     PL_maxscream        = -1;                   /* reinits on demand */
13259     PL_lastscream       = NULL;
13260
13261
13262     PL_regdummy         = proto_perl->Iregdummy;
13263     PL_colorset         = 0;            /* reinits PL_colors[] */
13264     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13265
13266
13267
13268     /* Pluggable optimizer */
13269     PL_peepp            = proto_perl->Ipeepp;
13270     PL_rpeepp           = proto_perl->Irpeepp;
13271     /* op_free() hook */
13272     PL_opfreehook       = proto_perl->Iopfreehook;
13273
13274     PL_stashcache       = newHV();
13275
13276     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13277                                             proto_perl->Iwatchaddr);
13278     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13279     if (PL_debug && PL_watchaddr) {
13280         PerlIO_printf(Perl_debug_log,
13281           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13282           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13283           PTR2UV(PL_watchok));
13284     }
13285
13286     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13287     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13288     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13289
13290     /* Call the ->CLONE method, if it exists, for each of the stashes
13291        identified by sv_dup() above.
13292     */
13293     while(av_len(param->stashes) != -1) {
13294         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13295         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13296         if (cloner && GvCV(cloner)) {
13297             dSP;
13298             ENTER;
13299             SAVETMPS;
13300             PUSHMARK(SP);
13301             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13302             PUTBACK;
13303             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13304             FREETMPS;
13305             LEAVE;
13306         }
13307     }
13308
13309     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13310         ptr_table_free(PL_ptr_table);
13311         PL_ptr_table = NULL;
13312     }
13313
13314     if (!(flags & CLONEf_COPY_STACKS)) {
13315         unreferenced_to_tmp_stack(param->unreferenced);
13316     }
13317
13318     SvREFCNT_dec(param->stashes);
13319
13320     /* orphaned? eg threads->new inside BEGIN or use */
13321     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13322         SvREFCNT_inc_simple_void(PL_compcv);
13323         SAVEFREESV(PL_compcv);
13324     }
13325
13326     return my_perl;
13327 }
13328
13329 static void
13330 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13331 {
13332     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13333     
13334     if (AvFILLp(unreferenced) > -1) {
13335         SV **svp = AvARRAY(unreferenced);
13336         SV **const last = svp + AvFILLp(unreferenced);
13337         SSize_t count = 0;
13338
13339         do {
13340             if (SvREFCNT(*svp) == 1)
13341                 ++count;
13342         } while (++svp <= last);
13343
13344         EXTEND_MORTAL(count);
13345         svp = AvARRAY(unreferenced);
13346
13347         do {
13348             if (SvREFCNT(*svp) == 1) {
13349                 /* Our reference is the only one to this SV. This means that
13350                    in this thread, the scalar effectively has a 0 reference.
13351                    That doesn't work (cleanup never happens), so donate our
13352                    reference to it onto the save stack. */
13353                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13354             } else {
13355                 /* As an optimisation, because we are already walking the
13356                    entire array, instead of above doing either
13357                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13358                    release our reference to the scalar, so that at the end of
13359                    the array owns zero references to the scalars it happens to
13360                    point to. We are effectively converting the array from
13361                    AvREAL() on to AvREAL() off. This saves the av_clear()
13362                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13363                    walking the array a second time.  */
13364                 SvREFCNT_dec(*svp);
13365             }
13366
13367         } while (++svp <= last);
13368         AvREAL_off(unreferenced);
13369     }
13370     SvREFCNT_dec(unreferenced);
13371 }
13372
13373 void
13374 Perl_clone_params_del(CLONE_PARAMS *param)
13375 {
13376     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13377        happy: */
13378     PerlInterpreter *const to = param->new_perl;
13379     dTHXa(to);
13380     PerlInterpreter *const was = PERL_GET_THX;
13381
13382     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13383
13384     if (was != to) {
13385         PERL_SET_THX(to);
13386     }
13387
13388     SvREFCNT_dec(param->stashes);
13389     if (param->unreferenced)
13390         unreferenced_to_tmp_stack(param->unreferenced);
13391
13392     Safefree(param);
13393
13394     if (was != to) {
13395         PERL_SET_THX(was);
13396     }
13397 }
13398
13399 CLONE_PARAMS *
13400 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13401 {
13402     dVAR;
13403     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13404        does a dTHX; to get the context from thread local storage.
13405        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13406        a version that passes in my_perl.  */
13407     PerlInterpreter *const was = PERL_GET_THX;
13408     CLONE_PARAMS *param;
13409
13410     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13411
13412     if (was != to) {
13413         PERL_SET_THX(to);
13414     }
13415
13416     /* Given that we've set the context, we can do this unshared.  */
13417     Newx(param, 1, CLONE_PARAMS);
13418
13419     param->flags = 0;
13420     param->proto_perl = from;
13421     param->new_perl = to;
13422     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13423     AvREAL_off(param->stashes);
13424     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13425
13426     if (was != to) {
13427         PERL_SET_THX(was);
13428     }
13429     return param;
13430 }
13431
13432 #endif /* USE_ITHREADS */
13433
13434 /*
13435 =head1 Unicode Support
13436
13437 =for apidoc sv_recode_to_utf8
13438
13439 The encoding is assumed to be an Encode object, on entry the PV
13440 of the sv is assumed to be octets in that encoding, and the sv
13441 will be converted into Unicode (and UTF-8).
13442
13443 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13444 is not a reference, nothing is done to the sv.  If the encoding is not
13445 an C<Encode::XS> Encoding object, bad things will happen.
13446 (See F<lib/encoding.pm> and L<Encode>).
13447
13448 The PV of the sv is returned.
13449
13450 =cut */
13451
13452 char *
13453 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13454 {
13455     dVAR;
13456
13457     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13458
13459     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13460         SV *uni;
13461         STRLEN len;
13462         const char *s;
13463         dSP;
13464         ENTER;
13465         SAVETMPS;
13466         save_re_context();
13467         PUSHMARK(sp);
13468         EXTEND(SP, 3);
13469         XPUSHs(encoding);
13470         XPUSHs(sv);
13471 /*
13472   NI-S 2002/07/09
13473   Passing sv_yes is wrong - it needs to be or'ed set of constants
13474   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13475   remove converted chars from source.
13476
13477   Both will default the value - let them.
13478
13479         XPUSHs(&PL_sv_yes);
13480 */
13481         PUTBACK;
13482         call_method("decode", G_SCALAR);
13483         SPAGAIN;
13484         uni = POPs;
13485         PUTBACK;
13486         s = SvPV_const(uni, len);
13487         if (s != SvPVX_const(sv)) {
13488             SvGROW(sv, len + 1);
13489             Move(s, SvPVX(sv), len + 1, char);
13490             SvCUR_set(sv, len);
13491         }
13492         FREETMPS;
13493         LEAVE;
13494         SvUTF8_on(sv);
13495         return SvPVX(sv);
13496     }
13497     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13498 }
13499
13500 /*
13501 =for apidoc sv_cat_decode
13502
13503 The encoding is assumed to be an Encode object, the PV of the ssv is
13504 assumed to be octets in that encoding and decoding the input starts
13505 from the position which (PV + *offset) pointed to.  The dsv will be
13506 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13507 when the string tstr appears in decoding output or the input ends on
13508 the PV of the ssv. The value which the offset points will be modified
13509 to the last input position on the ssv.
13510
13511 Returns TRUE if the terminator was found, else returns FALSE.
13512
13513 =cut */
13514
13515 bool
13516 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13517                    SV *ssv, int *offset, char *tstr, int tlen)
13518 {
13519     dVAR;
13520     bool ret = FALSE;
13521
13522     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13523
13524     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13525         SV *offsv;
13526         dSP;
13527         ENTER;
13528         SAVETMPS;
13529         save_re_context();
13530         PUSHMARK(sp);
13531         EXTEND(SP, 6);
13532         XPUSHs(encoding);
13533         XPUSHs(dsv);
13534         XPUSHs(ssv);
13535         offsv = newSViv(*offset);
13536         mXPUSHs(offsv);
13537         mXPUSHp(tstr, tlen);
13538         PUTBACK;
13539         call_method("cat_decode", G_SCALAR);
13540         SPAGAIN;
13541         ret = SvTRUE(TOPs);
13542         *offset = SvIV(offsv);
13543         PUTBACK;
13544         FREETMPS;
13545         LEAVE;
13546     }
13547     else
13548         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13549     return ret;
13550
13551 }
13552
13553 /* ---------------------------------------------------------------------
13554  *
13555  * support functions for report_uninit()
13556  */
13557
13558 /* the maxiumum size of array or hash where we will scan looking
13559  * for the undefined element that triggered the warning */
13560
13561 #define FUV_MAX_SEARCH_SIZE 1000
13562
13563 /* Look for an entry in the hash whose value has the same SV as val;
13564  * If so, return a mortal copy of the key. */
13565
13566 STATIC SV*
13567 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13568 {
13569     dVAR;
13570     register HE **array;
13571     I32 i;
13572
13573     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13574
13575     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13576                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13577         return NULL;
13578
13579     array = HvARRAY(hv);
13580
13581     for (i=HvMAX(hv); i>0; i--) {
13582         register HE *entry;
13583         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13584             if (HeVAL(entry) != val)
13585                 continue;
13586             if (    HeVAL(entry) == &PL_sv_undef ||
13587                     HeVAL(entry) == &PL_sv_placeholder)
13588                 continue;
13589             if (!HeKEY(entry))
13590                 return NULL;
13591             if (HeKLEN(entry) == HEf_SVKEY)
13592                 return sv_mortalcopy(HeKEY_sv(entry));
13593             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13594         }
13595     }
13596     return NULL;
13597 }
13598
13599 /* Look for an entry in the array whose value has the same SV as val;
13600  * If so, return the index, otherwise return -1. */
13601
13602 STATIC I32
13603 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13604 {
13605     dVAR;
13606
13607     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13608
13609     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13610                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13611         return -1;
13612
13613     if (val != &PL_sv_undef) {
13614         SV ** const svp = AvARRAY(av);
13615         I32 i;
13616
13617         for (i=AvFILLp(av); i>=0; i--)
13618             if (svp[i] == val)
13619                 return i;
13620     }
13621     return -1;
13622 }
13623
13624 /* S_varname(): return the name of a variable, optionally with a subscript.
13625  * If gv is non-zero, use the name of that global, along with gvtype (one
13626  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13627  * targ.  Depending on the value of the subscript_type flag, return:
13628  */
13629
13630 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13631 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13632 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13633 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13634
13635 STATIC SV*
13636 S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13637         const SV *const keyname, I32 aindex, int subscript_type)
13638 {
13639
13640     SV * const name = sv_newmortal();
13641     if (gv) {
13642         char buffer[2];
13643         buffer[0] = gvtype;
13644         buffer[1] = 0;
13645
13646         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13647
13648         gv_fullname4(name, gv, buffer, 0);
13649
13650         if ((unsigned int)SvPVX(name)[1] <= 26) {
13651             buffer[0] = '^';
13652             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13653
13654             /* Swap the 1 unprintable control character for the 2 byte pretty
13655                version - ie substr($name, 1, 1) = $buffer; */
13656             sv_insert(name, 1, 1, buffer, 2);
13657         }
13658     }
13659     else {
13660         CV * const cv = find_runcv(NULL);
13661         SV *sv;
13662         AV *av;
13663
13664         if (!cv || !CvPADLIST(cv))
13665             return NULL;
13666         av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
13667         sv = *av_fetch(av, targ, FALSE);
13668         sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
13669     }
13670
13671     if (subscript_type == FUV_SUBSCRIPT_HASH) {
13672         SV * const sv = newSV(0);
13673         *SvPVX(name) = '$';
13674         Perl_sv_catpvf(aTHX_ name, "{%s}",
13675             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13676         SvREFCNT_dec(sv);
13677     }
13678     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13679         *SvPVX(name) = '$';
13680         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13681     }
13682     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13683         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13684         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
13685     }
13686
13687     return name;
13688 }
13689
13690
13691 /*
13692 =for apidoc find_uninit_var
13693
13694 Find the name of the undefined variable (if any) that caused the operator o
13695 to issue a "Use of uninitialized value" warning.
13696 If match is true, only return a name if it's value matches uninit_sv.
13697 So roughly speaking, if a unary operator (such as OP_COS) generates a
13698 warning, then following the direct child of the op may yield an
13699 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
13700 other hand, with OP_ADD there are two branches to follow, so we only print
13701 the variable name if we get an exact match.
13702
13703 The name is returned as a mortal SV.
13704
13705 Assumes that PL_op is the op that originally triggered the error, and that
13706 PL_comppad/PL_curpad points to the currently executing pad.
13707
13708 =cut
13709 */
13710
13711 STATIC SV *
13712 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13713                   bool match)
13714 {
13715     dVAR;
13716     SV *sv;
13717     const GV *gv;
13718     const OP *o, *o2, *kid;
13719
13720     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13721                             uninit_sv == &PL_sv_placeholder)))
13722         return NULL;
13723
13724     switch (obase->op_type) {
13725
13726     case OP_RV2AV:
13727     case OP_RV2HV:
13728     case OP_PADAV:
13729     case OP_PADHV:
13730       {
13731         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13732         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13733         I32 index = 0;
13734         SV *keysv = NULL;
13735         int subscript_type = FUV_SUBSCRIPT_WITHIN;
13736
13737         if (pad) { /* @lex, %lex */
13738             sv = PAD_SVl(obase->op_targ);
13739             gv = NULL;
13740         }
13741         else {
13742             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13743             /* @global, %global */
13744                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13745                 if (!gv)
13746                     break;
13747                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
13748             }
13749             else /* @{expr}, %{expr} */
13750                 return find_uninit_var(cUNOPx(obase)->op_first,
13751                                                     uninit_sv, match);
13752         }
13753
13754         /* attempt to find a match within the aggregate */
13755         if (hash) {
13756             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13757             if (keysv)
13758                 subscript_type = FUV_SUBSCRIPT_HASH;
13759         }
13760         else {
13761             index = find_array_subscript((const AV *)sv, uninit_sv);
13762             if (index >= 0)
13763                 subscript_type = FUV_SUBSCRIPT_ARRAY;
13764         }
13765
13766         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13767             break;
13768
13769         return varname(gv, hash ? '%' : '@', obase->op_targ,
13770                                     keysv, index, subscript_type);
13771       }
13772
13773     case OP_PADSV:
13774         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13775             break;
13776         return varname(NULL, '$', obase->op_targ,
13777                                     NULL, 0, FUV_SUBSCRIPT_NONE);
13778
13779     case OP_GVSV:
13780         gv = cGVOPx_gv(obase);
13781         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
13782             break;
13783         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13784
13785     case OP_AELEMFAST:
13786         if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
13787             if (match) {
13788                 SV **svp;
13789                 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
13790                 if (!av || SvRMAGICAL(av))
13791                     break;
13792                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13793                 if (!svp || *svp != uninit_sv)
13794                     break;
13795             }
13796             return varname(NULL, '$', obase->op_targ,
13797                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13798         }
13799         else {
13800             gv = cGVOPx_gv(obase);
13801             if (!gv)
13802                 break;
13803             if (match) {
13804                 SV **svp;
13805                 AV *const av = GvAV(gv);
13806                 if (!av || SvRMAGICAL(av))
13807                     break;
13808                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13809                 if (!svp || *svp != uninit_sv)
13810                     break;
13811             }
13812             return varname(gv, '$', 0,
13813                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13814         }
13815         break;
13816
13817     case OP_EXISTS:
13818         o = cUNOPx(obase)->op_first;
13819         if (!o || o->op_type != OP_NULL ||
13820                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
13821             break;
13822         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
13823
13824     case OP_AELEM:
13825     case OP_HELEM:
13826         if (PL_op == obase)
13827             /* $a[uninit_expr] or $h{uninit_expr} */
13828             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
13829
13830         gv = NULL;
13831         o = cBINOPx(obase)->op_first;
13832         kid = cBINOPx(obase)->op_last;
13833
13834         /* get the av or hv, and optionally the gv */
13835         sv = NULL;
13836         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
13837             sv = PAD_SV(o->op_targ);
13838         }
13839         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
13840                 && cUNOPo->op_first->op_type == OP_GV)
13841         {
13842             gv = cGVOPx_gv(cUNOPo->op_first);
13843             if (!gv)
13844                 break;
13845             sv = o->op_type
13846                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
13847         }
13848         if (!sv)
13849             break;
13850
13851         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
13852             /* index is constant */
13853             if (match) {
13854                 if (SvMAGICAL(sv))
13855                     break;
13856                 if (obase->op_type == OP_HELEM) {
13857                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), cSVOPx_sv(kid), 0, 0);
13858                     if (!he || HeVAL(he) != uninit_sv)
13859                         break;
13860                 }
13861                 else {
13862                     SV * const * const svp = av_fetch(MUTABLE_AV(sv), SvIV(cSVOPx_sv(kid)), FALSE);
13863                     if (!svp || *svp != uninit_sv)
13864                         break;
13865                 }
13866             }
13867             if (obase->op_type == OP_HELEM)
13868                 return varname(gv, '%', o->op_targ,
13869                             cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
13870             else
13871                 return varname(gv, '@', o->op_targ, NULL,
13872                             SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
13873         }
13874         else  {
13875             /* index is an expression;
13876              * attempt to find a match within the aggregate */
13877             if (obase->op_type == OP_HELEM) {
13878                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13879                 if (keysv)
13880                     return varname(gv, '%', o->op_targ,
13881                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
13882             }
13883             else {
13884                 const I32 index
13885                     = find_array_subscript((const AV *)sv, uninit_sv);
13886                 if (index >= 0)
13887                     return varname(gv, '@', o->op_targ,
13888                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
13889             }
13890             if (match)
13891                 break;
13892             return varname(gv,
13893                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
13894                 ? '@' : '%',
13895                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
13896         }
13897         break;
13898
13899     case OP_AASSIGN:
13900         /* only examine RHS */
13901         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
13902
13903     case OP_OPEN:
13904         o = cUNOPx(obase)->op_first;
13905         if (o->op_type == OP_PUSHMARK)
13906             o = o->op_sibling;
13907
13908         if (!o->op_sibling) {
13909             /* one-arg version of open is highly magical */
13910
13911             if (o->op_type == OP_GV) { /* open FOO; */
13912                 gv = cGVOPx_gv(o);
13913                 if (match && GvSV(gv) != uninit_sv)
13914                     break;
13915                 return varname(gv, '$', 0,
13916                             NULL, 0, FUV_SUBSCRIPT_NONE);
13917             }
13918             /* other possibilities not handled are:
13919              * open $x; or open my $x;  should return '${*$x}'
13920              * open expr;               should return '$'.expr ideally
13921              */
13922              break;
13923         }
13924         goto do_op;
13925
13926     /* ops where $_ may be an implicit arg */
13927     case OP_TRANS:
13928     case OP_SUBST:
13929     case OP_MATCH:
13930         if ( !(obase->op_flags & OPf_STACKED)) {
13931             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
13932                                  ? PAD_SVl(obase->op_targ)
13933                                  : DEFSV))
13934             {
13935                 sv = sv_newmortal();
13936                 sv_setpvs(sv, "$_");
13937                 return sv;
13938             }
13939         }
13940         goto do_op;
13941
13942     case OP_PRTF:
13943     case OP_PRINT:
13944     case OP_SAY:
13945         match = 1; /* print etc can return undef on defined args */
13946         /* skip filehandle as it can't produce 'undef' warning  */
13947         o = cUNOPx(obase)->op_first;
13948         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
13949             o = o->op_sibling->op_sibling;
13950         goto do_op2;
13951
13952
13953     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
13954     case OP_RV2SV:
13955     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
13956
13957         /* the following ops are capable of returning PL_sv_undef even for
13958          * defined arg(s) */
13959
13960     case OP_BACKTICK:
13961     case OP_PIPE_OP:
13962     case OP_FILENO:
13963     case OP_BINMODE:
13964     case OP_TIED:
13965     case OP_GETC:
13966     case OP_SYSREAD:
13967     case OP_SEND:
13968     case OP_IOCTL:
13969     case OP_SOCKET:
13970     case OP_SOCKPAIR:
13971     case OP_BIND:
13972     case OP_CONNECT:
13973     case OP_LISTEN:
13974     case OP_ACCEPT:
13975     case OP_SHUTDOWN:
13976     case OP_SSOCKOPT:
13977     case OP_GETPEERNAME:
13978     case OP_FTRREAD:
13979     case OP_FTRWRITE:
13980     case OP_FTREXEC:
13981     case OP_FTROWNED:
13982     case OP_FTEREAD:
13983     case OP_FTEWRITE:
13984     case OP_FTEEXEC:
13985     case OP_FTEOWNED:
13986     case OP_FTIS:
13987     case OP_FTZERO:
13988     case OP_FTSIZE:
13989     case OP_FTFILE:
13990     case OP_FTDIR:
13991     case OP_FTLINK:
13992     case OP_FTPIPE:
13993     case OP_FTSOCK:
13994     case OP_FTBLK:
13995     case OP_FTCHR:
13996     case OP_FTTTY:
13997     case OP_FTSUID:
13998     case OP_FTSGID:
13999     case OP_FTSVTX:
14000     case OP_FTTEXT:
14001     case OP_FTBINARY:
14002     case OP_FTMTIME:
14003     case OP_FTATIME:
14004     case OP_FTCTIME:
14005     case OP_READLINK:
14006     case OP_OPEN_DIR:
14007     case OP_READDIR:
14008     case OP_TELLDIR:
14009     case OP_SEEKDIR:
14010     case OP_REWINDDIR:
14011     case OP_CLOSEDIR:
14012     case OP_GMTIME:
14013     case OP_ALARM:
14014     case OP_SEMGET:
14015     case OP_GETLOGIN:
14016     case OP_UNDEF:
14017     case OP_SUBSTR:
14018     case OP_AEACH:
14019     case OP_EACH:
14020     case OP_SORT:
14021     case OP_CALLER:
14022     case OP_DOFILE:
14023     case OP_PROTOTYPE:
14024     case OP_NCMP:
14025     case OP_SMARTMATCH:
14026     case OP_UNPACK:
14027     case OP_SYSOPEN:
14028     case OP_SYSSEEK:
14029         match = 1;
14030         goto do_op;
14031
14032     case OP_ENTERSUB:
14033     case OP_GOTO:
14034         /* XXX tmp hack: these two may call an XS sub, and currently
14035           XS subs don't have a SUB entry on the context stack, so CV and
14036           pad determination goes wrong, and BAD things happen. So, just
14037           don't try to determine the value under those circumstances.
14038           Need a better fix at dome point. DAPM 11/2007 */
14039         break;
14040
14041     case OP_FLIP:
14042     case OP_FLOP:
14043     {
14044         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14045         if (gv && GvSV(gv) == uninit_sv)
14046             return newSVpvs_flags("$.", SVs_TEMP);
14047         goto do_op;
14048     }
14049
14050     case OP_POS:
14051         /* def-ness of rval pos() is independent of the def-ness of its arg */
14052         if ( !(obase->op_flags & OPf_MOD))
14053             break;
14054
14055     case OP_SCHOMP:
14056     case OP_CHOMP:
14057         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14058             return newSVpvs_flags("${$/}", SVs_TEMP);
14059         /*FALLTHROUGH*/
14060
14061     default:
14062     do_op:
14063         if (!(obase->op_flags & OPf_KIDS))
14064             break;
14065         o = cUNOPx(obase)->op_first;
14066         
14067     do_op2:
14068         if (!o)
14069             break;
14070
14071         /* if all except one arg are constant, or have no side-effects,
14072          * or are optimized away, then it's unambiguous */
14073         o2 = NULL;
14074         for (kid=o; kid; kid = kid->op_sibling) {
14075             if (kid) {
14076                 const OPCODE type = kid->op_type;
14077                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14078                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14079                   || (type == OP_PUSHMARK)
14080                   || (
14081                       /* @$a and %$a, but not @a or %a */
14082                         (type == OP_RV2AV || type == OP_RV2HV)
14083                      && cUNOPx(kid)->op_first
14084                      && cUNOPx(kid)->op_first->op_type != OP_GV
14085                      )
14086                 )
14087                 continue;
14088             }
14089             if (o2) { /* more than one found */
14090                 o2 = NULL;
14091                 break;
14092             }
14093             o2 = kid;
14094         }
14095         if (o2)
14096             return find_uninit_var(o2, uninit_sv, match);
14097
14098         /* scan all args */
14099         while (o) {
14100             sv = find_uninit_var(o, uninit_sv, 1);
14101             if (sv)
14102                 return sv;
14103             o = o->op_sibling;
14104         }
14105         break;
14106     }
14107     return NULL;
14108 }
14109
14110
14111 /*
14112 =for apidoc report_uninit
14113
14114 Print appropriate "Use of uninitialized variable" warning
14115
14116 =cut
14117 */
14118
14119 void
14120 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14121 {
14122     dVAR;
14123     if (PL_op) {
14124         SV* varname = NULL;
14125         if (uninit_sv) {
14126             varname = find_uninit_var(PL_op, uninit_sv,0);
14127             if (varname)
14128                 sv_insert(varname, 0, 0, " ", 1);
14129         }
14130         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14131                 varname ? SvPV_nolen_const(varname) : "",
14132                 " in ", OP_DESC(PL_op));
14133     }
14134     else
14135         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14136                     "", "", "");
14137 }
14138
14139 /*
14140  * Local variables:
14141  * c-indentation-style: bsd
14142  * c-basic-offset: 4
14143  * indent-tabs-mode: t
14144  * End:
14145  *
14146  * ex: set ts=8 sts=4 sw=4 noet:
14147  */