This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Recursive MULTICALL prematurely freed CV
[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 #define FCALL *f
36
37 #ifdef __Lynx__
38 /* Missing proto on LynxOS */
39   char *gconvert(double, int, int,  char *);
40 #endif
41
42 #ifdef PERL_UTF8_CACHE_ASSERT
43 /* if adding more checks watch out for the following tests:
44  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
45  *   lib/utf8.t lib/Unicode/Collate/t/index.t
46  * --jhi
47  */
48 #   define ASSERT_UTF8_CACHE(cache) \
49     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
50                               assert((cache)[2] <= (cache)[3]); \
51                               assert((cache)[3] <= (cache)[1]);} \
52                               } STMT_END
53 #else
54 #   define ASSERT_UTF8_CACHE(cache) NOOP
55 #endif
56
57 #ifdef PERL_OLD_COPY_ON_WRITE
58 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
59 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
60 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
61    on-write.  */
62 #endif
63
64 /* ============================================================================
65
66 =head1 Allocation and deallocation of SVs.
67
68 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
69 sv, av, hv...) contains type and reference count information, and for
70 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
71 contains fields specific to each type.  Some types store all they need
72 in the head, so don't have a body.
73
74 In all but the most memory-paranoid configuations (ex: PURIFY), heads
75 and bodies are allocated out of arenas, which by default are
76 approximately 4K chunks of memory parcelled up into N heads or bodies.
77 Sv-bodies are allocated by their sv-type, guaranteeing size
78 consistency needed to allocate safely from arrays.
79
80 For SV-heads, the first slot in each arena is reserved, and holds a
81 link to the next arena, some flags, and a note of the number of slots.
82 Snaked through each arena chain is a linked list of free items; when
83 this becomes empty, an extra arena is allocated and divided up into N
84 items which are threaded into the free list.
85
86 SV-bodies are similar, but they use arena-sets by default, which
87 separate the link and info from the arena itself, and reclaim the 1st
88 slot in the arena.  SV-bodies are further described later.
89
90 The following global variables are associated with arenas:
91
92     PL_sv_arenaroot     pointer to list of SV arenas
93     PL_sv_root          pointer to list of free SV structures
94
95     PL_body_arenas      head of linked-list of body arenas
96     PL_body_roots[]     array of pointers to list of free bodies of svtype
97                         arrays are indexed by the svtype needed
98
99 A few special SV heads are not allocated from an arena, but are
100 instead directly created in the interpreter structure, eg PL_sv_undef.
101 The size of arenas can be changed from the default by setting
102 PERL_ARENA_SIZE appropriately at compile time.
103
104 The SV arena serves the secondary purpose of allowing still-live SVs
105 to be located and destroyed during final cleanup.
106
107 At the lowest level, the macros new_SV() and del_SV() grab and free
108 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
109 to return the SV to the free list with error checking.) new_SV() calls
110 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
111 SVs in the free list have their SvTYPE field set to all ones.
112
113 At the time of very final cleanup, sv_free_arenas() is called from
114 perl_destruct() to physically free all the arenas allocated since the
115 start of the interpreter.
116
117 The function visit() scans the SV arenas list, and calls a specified
118 function for each SV it finds which is still live - ie which has an SvTYPE
119 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
120 following functions (specified as [function that calls visit()] / [function
121 called by visit() for each SV]):
122
123     sv_report_used() / do_report_used()
124                         dump all remaining SVs (debugging aid)
125
126     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
127                       do_clean_named_io_objs()
128                         Attempt to free all objects pointed to by RVs,
129                         and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
130                         try to do the same for all objects indirectly
131                         referenced by typeglobs too.  Called once from
132                         perl_destruct(), prior to calling sv_clean_all()
133                         below.
134
135     sv_clean_all() / do_clean_all()
136                         SvREFCNT_dec(sv) each remaining SV, possibly
137                         triggering an sv_free(). It also sets the
138                         SVf_BREAK flag on the SV to indicate that the
139                         refcnt has been artificially lowered, and thus
140                         stopping sv_free() from giving spurious warnings
141                         about SVs which unexpectedly have a refcnt
142                         of zero.  called repeatedly from perl_destruct()
143                         until there are no SVs left.
144
145 =head2 Arena allocator API Summary
146
147 Private API to rest of sv.c
148
149     new_SV(),  del_SV(),
150
151     new_XPVNV(), del_XPVGV(),
152     etc
153
154 Public API:
155
156     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
157
158 =cut
159
160  * ========================================================================= */
161
162 /*
163  * "A time to plant, and a time to uproot what was planted..."
164  */
165
166 #ifdef PERL_MEM_LOG
167 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
168             Perl_mem_log_new_sv(sv, file, line, func)
169 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
170             Perl_mem_log_del_sv(sv, file, line, func)
171 #else
172 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
173 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
174 #endif
175
176 #ifdef DEBUG_LEAKING_SCALARS
177 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
178 #  define DEBUG_SV_SERIAL(sv)                                               \
179     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
180             PTR2UV(sv), (long)(sv)->sv_debug_serial))
181 #else
182 #  define FREE_SV_DEBUG_FILE(sv)
183 #  define DEBUG_SV_SERIAL(sv)   NOOP
184 #endif
185
186 #ifdef PERL_POISON
187 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
188 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
189 /* Whilst I'd love to do this, it seems that things like to check on
190    unreferenced scalars
191 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
192 */
193 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
194                                 PoisonNew(&SvREFCNT(sv), 1, U32)
195 #else
196 #  define SvARENA_CHAIN(sv)     SvANY(sv)
197 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
198 #  define POSION_SV_HEAD(sv)
199 #endif
200
201 /* Mark an SV head as unused, and add to free list.
202  *
203  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
204  * its refcount artificially decremented during global destruction, so
205  * there may be dangling pointers to it. The last thing we want in that
206  * case is for it to be reused. */
207
208 #define plant_SV(p) \
209     STMT_START {                                        \
210         const U32 old_flags = SvFLAGS(p);                       \
211         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
212         DEBUG_SV_SERIAL(p);                             \
213         FREE_SV_DEBUG_FILE(p);                          \
214         POSION_SV_HEAD(p);                              \
215         SvFLAGS(p) = SVTYPEMASK;                        \
216         if (!(old_flags & SVf_BREAK)) {         \
217             SvARENA_CHAIN_SET(p, PL_sv_root);   \
218             PL_sv_root = (p);                           \
219         }                                               \
220         --PL_sv_count;                                  \
221     } STMT_END
222
223 #define uproot_SV(p) \
224     STMT_START {                                        \
225         (p) = PL_sv_root;                               \
226         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
227         ++PL_sv_count;                                  \
228     } STMT_END
229
230
231 /* make some more SVs by adding another arena */
232
233 STATIC SV*
234 S_more_sv(pTHX)
235 {
236     dVAR;
237     SV* sv;
238     char *chunk;                /* must use New here to match call to */
239     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
240     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
241     uproot_SV(sv);
242     return sv;
243 }
244
245 /* new_SV(): return a new, empty SV head */
246
247 #ifdef DEBUG_LEAKING_SCALARS
248 /* provide a real function for a debugger to play with */
249 STATIC SV*
250 S_new_SV(pTHX_ const char *file, int line, const char *func)
251 {
252     SV* sv;
253
254     if (PL_sv_root)
255         uproot_SV(sv);
256     else
257         sv = S_more_sv(aTHX);
258     SvANY(sv) = 0;
259     SvREFCNT(sv) = 1;
260     SvFLAGS(sv) = 0;
261     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
262     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
263                 ? PL_parser->copline
264                 :  PL_curcop
265                     ? CopLINE(PL_curcop)
266                     : 0
267             );
268     sv->sv_debug_inpad = 0;
269     sv->sv_debug_parent = NULL;
270     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
271
272     sv->sv_debug_serial = PL_sv_serial++;
273
274     MEM_LOG_NEW_SV(sv, file, line, func);
275     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
276             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
277
278     return sv;
279 }
280 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
281
282 #else
283 #  define new_SV(p) \
284     STMT_START {                                        \
285         if (PL_sv_root)                                 \
286             uproot_SV(p);                               \
287         else                                            \
288             (p) = S_more_sv(aTHX);                      \
289         SvANY(p) = 0;                                   \
290         SvREFCNT(p) = 1;                                \
291         SvFLAGS(p) = 0;                                 \
292         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
293     } STMT_END
294 #endif
295
296
297 /* del_SV(): return an empty SV head to the free list */
298
299 #ifdef DEBUGGING
300
301 #define del_SV(p) \
302     STMT_START {                                        \
303         if (DEBUG_D_TEST)                               \
304             del_sv(p);                                  \
305         else                                            \
306             plant_SV(p);                                \
307     } STMT_END
308
309 STATIC void
310 S_del_sv(pTHX_ SV *p)
311 {
312     dVAR;
313
314     PERL_ARGS_ASSERT_DEL_SV;
315
316     if (DEBUG_D_TEST) {
317         SV* sva;
318         bool ok = 0;
319         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
320             const SV * const sv = sva + 1;
321             const SV * const svend = &sva[SvREFCNT(sva)];
322             if (p >= sv && p < svend) {
323                 ok = 1;
324                 break;
325             }
326         }
327         if (!ok) {
328             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
329                              "Attempt to free non-arena SV: 0x%"UVxf
330                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
331             return;
332         }
333     }
334     plant_SV(p);
335 }
336
337 #else /* ! DEBUGGING */
338
339 #define del_SV(p)   plant_SV(p)
340
341 #endif /* DEBUGGING */
342
343
344 /*
345 =head1 SV Manipulation Functions
346
347 =for apidoc sv_add_arena
348
349 Given a chunk of memory, link it to the head of the list of arenas,
350 and split it into a list of free SVs.
351
352 =cut
353 */
354
355 static void
356 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
357 {
358     dVAR;
359     SV *const sva = MUTABLE_SV(ptr);
360     register SV* sv;
361     register SV* svend;
362
363     PERL_ARGS_ASSERT_SV_ADD_ARENA;
364
365     /* The first SV in an arena isn't an SV. */
366     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
367     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
368     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
369
370     PL_sv_arenaroot = sva;
371     PL_sv_root = sva + 1;
372
373     svend = &sva[SvREFCNT(sva) - 1];
374     sv = sva + 1;
375     while (sv < svend) {
376         SvARENA_CHAIN_SET(sv, (sv + 1));
377 #ifdef DEBUGGING
378         SvREFCNT(sv) = 0;
379 #endif
380         /* Must always set typemask because it's always checked in on cleanup
381            when the arenas are walked looking for objects.  */
382         SvFLAGS(sv) = SVTYPEMASK;
383         sv++;
384     }
385     SvARENA_CHAIN_SET(sv, 0);
386 #ifdef DEBUGGING
387     SvREFCNT(sv) = 0;
388 #endif
389     SvFLAGS(sv) = SVTYPEMASK;
390 }
391
392 /* visit(): call the named function for each non-free SV in the arenas
393  * whose flags field matches the flags/mask args. */
394
395 STATIC I32
396 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
397 {
398     dVAR;
399     SV* sva;
400     I32 visited = 0;
401
402     PERL_ARGS_ASSERT_VISIT;
403
404     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
405         register const SV * const svend = &sva[SvREFCNT(sva)];
406         register SV* sv;
407         for (sv = sva + 1; sv < svend; ++sv) {
408             if (SvTYPE(sv) != SVTYPEMASK
409                     && (sv->sv_flags & mask) == flags
410                     && SvREFCNT(sv))
411             {
412                 (FCALL)(aTHX_ sv);
413                 ++visited;
414             }
415         }
416     }
417     return visited;
418 }
419
420 #ifdef DEBUGGING
421
422 /* called by sv_report_used() for each live SV */
423
424 static void
425 do_report_used(pTHX_ SV *const sv)
426 {
427     if (SvTYPE(sv) != SVTYPEMASK) {
428         PerlIO_printf(Perl_debug_log, "****\n");
429         sv_dump(sv);
430     }
431 }
432 #endif
433
434 /*
435 =for apidoc sv_report_used
436
437 Dump the contents of all SVs not yet freed. (Debugging aid).
438
439 =cut
440 */
441
442 void
443 Perl_sv_report_used(pTHX)
444 {
445 #ifdef DEBUGGING
446     visit(do_report_used, 0, 0);
447 #else
448     PERL_UNUSED_CONTEXT;
449 #endif
450 }
451
452 /* called by sv_clean_objs() for each live SV */
453
454 static void
455 do_clean_objs(pTHX_ SV *const ref)
456 {
457     dVAR;
458     assert (SvROK(ref));
459     {
460         SV * const target = SvRV(ref);
461         if (SvOBJECT(target)) {
462             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
463             if (SvWEAKREF(ref)) {
464                 sv_del_backref(target, ref);
465                 SvWEAKREF_off(ref);
466                 SvRV_set(ref, NULL);
467             } else {
468                 SvROK_off(ref);
469                 SvRV_set(ref, NULL);
470                 SvREFCNT_dec(target);
471             }
472         }
473     }
474
475     /* XXX Might want to check arrays, etc. */
476 }
477
478
479 #ifndef DISABLE_DESTRUCTOR_KLUDGE
480
481 /* clear any slots in a GV which hold objects - except IO;
482  * called by sv_clean_objs() for each live GV */
483
484 static void
485 do_clean_named_objs(pTHX_ SV *const sv)
486 {
487     dVAR;
488     SV *obj;
489     assert(SvTYPE(sv) == SVt_PVGV);
490     assert(isGV_with_GP(sv));
491     if (!GvGP(sv))
492         return;
493
494     /* freeing GP entries may indirectly free the current GV;
495      * hold onto it while we mess with the GP slots */
496     SvREFCNT_inc(sv);
497
498     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
499         DEBUG_D((PerlIO_printf(Perl_debug_log,
500                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
501         GvSV(sv) = NULL;
502         SvREFCNT_dec(obj);
503     }
504     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
507         GvAV(sv) = NULL;
508         SvREFCNT_dec(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
513         GvHV(sv) = NULL;
514         SvREFCNT_dec(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
519         GvCV(sv) = NULL;
520         SvREFCNT_dec(obj);
521     }
522     SvREFCNT_dec(sv); /* undo the inc above */
523 }
524
525 /* clear any IO slots in a GV which hold objects (except stderr, defout);
526  * called by sv_clean_objs() for each live GV */
527
528 static void
529 do_clean_named_io_objs(pTHX_ SV *const sv)
530 {
531     dVAR;
532     SV *obj;
533     assert(SvTYPE(sv) == SVt_PVGV);
534     assert(isGV_with_GP(sv));
535     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
536         return;
537
538     SvREFCNT_inc(sv);
539     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
540         DEBUG_D((PerlIO_printf(Perl_debug_log,
541                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
542         GvIOp(sv) = NULL;
543         SvREFCNT_dec(obj);
544     }
545     SvREFCNT_dec(sv); /* undo the inc above */
546 }
547 #endif
548
549 /*
550 =for apidoc sv_clean_objs
551
552 Attempt to destroy all objects not yet freed
553
554 =cut
555 */
556
557 void
558 Perl_sv_clean_objs(pTHX)
559 {
560     dVAR;
561     GV *olddef, *olderr;
562     PL_in_clean_objs = TRUE;
563     visit(do_clean_objs, SVf_ROK, SVf_ROK);
564 #ifndef DISABLE_DESTRUCTOR_KLUDGE
565     /* Some barnacles may yet remain, clinging to typeglobs.
566      * Run the non-IO destructors first: they may want to output
567      * error messages, close files etc */
568     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
569     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
570     olddef = PL_defoutgv;
571     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
572     if (olddef && isGV_with_GP(olddef))
573         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
574     olderr = PL_stderrgv;
575     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
576     if (olderr && isGV_with_GP(olderr))
577         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
578     SvREFCNT_dec(olddef);
579 #endif
580     PL_in_clean_objs = FALSE;
581 }
582
583 /* called by sv_clean_all() for each live SV */
584
585 static void
586 do_clean_all(pTHX_ SV *const sv)
587 {
588     dVAR;
589     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
590         /* don't clean pid table and strtab */
591         return;
592     }
593     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
594     SvFLAGS(sv) |= SVf_BREAK;
595     SvREFCNT_dec(sv);
596 }
597
598 /*
599 =for apidoc sv_clean_all
600
601 Decrement the refcnt of each remaining SV, possibly triggering a
602 cleanup. This function may have to be called multiple times to free
603 SVs which are in complex self-referential hierarchies.
604
605 =cut
606 */
607
608 I32
609 Perl_sv_clean_all(pTHX)
610 {
611     dVAR;
612     I32 cleaned;
613     PL_in_clean_all = TRUE;
614     cleaned = visit(do_clean_all, 0,0);
615     return cleaned;
616 }
617
618 /*
619   ARENASETS: a meta-arena implementation which separates arena-info
620   into struct arena_set, which contains an array of struct
621   arena_descs, each holding info for a single arena.  By separating
622   the meta-info from the arena, we recover the 1st slot, formerly
623   borrowed for list management.  The arena_set is about the size of an
624   arena, avoiding the needless malloc overhead of a naive linked-list.
625
626   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
627   memory in the last arena-set (1/2 on average).  In trade, we get
628   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
629   smaller types).  The recovery of the wasted space allows use of
630   small arenas for large, rare body types, by changing array* fields
631   in body_details_by_type[] below.
632 */
633 struct arena_desc {
634     char       *arena;          /* the raw storage, allocated aligned */
635     size_t      size;           /* its size ~4k typ */
636     svtype      utype;          /* bodytype stored in arena */
637 };
638
639 struct arena_set;
640
641 /* Get the maximum number of elements in set[] such that struct arena_set
642    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
643    therefore likely to be 1 aligned memory page.  */
644
645 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
646                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
647
648 struct arena_set {
649     struct arena_set* next;
650     unsigned int   set_size;    /* ie ARENAS_PER_SET */
651     unsigned int   curr;        /* index of next available arena-desc */
652     struct arena_desc set[ARENAS_PER_SET];
653 };
654
655 /*
656 =for apidoc sv_free_arenas
657
658 Deallocate the memory used by all arenas. Note that all the individual SV
659 heads and bodies within the arenas must already have been freed.
660
661 =cut
662 */
663 void
664 Perl_sv_free_arenas(pTHX)
665 {
666     dVAR;
667     SV* sva;
668     SV* svanext;
669     unsigned int i;
670
671     /* Free arenas here, but be careful about fake ones.  (We assume
672        contiguity of the fake ones with the corresponding real ones.) */
673
674     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
675         svanext = MUTABLE_SV(SvANY(sva));
676         while (svanext && SvFAKE(svanext))
677             svanext = MUTABLE_SV(SvANY(svanext));
678
679         if (!SvFAKE(sva))
680             Safefree(sva);
681     }
682
683     {
684         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
685
686         while (aroot) {
687             struct arena_set *current = aroot;
688             i = aroot->curr;
689             while (i--) {
690                 assert(aroot->set[i].arena);
691                 Safefree(aroot->set[i].arena);
692             }
693             aroot = aroot->next;
694             Safefree(current);
695         }
696     }
697     PL_body_arenas = 0;
698
699     i = PERL_ARENA_ROOTS_SIZE;
700     while (i--)
701         PL_body_roots[i] = 0;
702
703     PL_sv_arenaroot = 0;
704     PL_sv_root = 0;
705 }
706
707 /*
708   Here are mid-level routines that manage the allocation of bodies out
709   of the various arenas.  There are 5 kinds of arenas:
710
711   1. SV-head arenas, which are discussed and handled above
712   2. regular body arenas
713   3. arenas for reduced-size bodies
714   4. Hash-Entry arenas
715
716   Arena types 2 & 3 are chained by body-type off an array of
717   arena-root pointers, which is indexed by svtype.  Some of the
718   larger/less used body types are malloced singly, since a large
719   unused block of them is wasteful.  Also, several svtypes dont have
720   bodies; the data fits into the sv-head itself.  The arena-root
721   pointer thus has a few unused root-pointers (which may be hijacked
722   later for arena types 4,5)
723
724   3 differs from 2 as an optimization; some body types have several
725   unused fields in the front of the structure (which are kept in-place
726   for consistency).  These bodies can be allocated in smaller chunks,
727   because the leading fields arent accessed.  Pointers to such bodies
728   are decremented to point at the unused 'ghost' memory, knowing that
729   the pointers are used with offsets to the real memory.
730
731
732 =head1 SV-Body Allocation
733
734 Allocation of SV-bodies is similar to SV-heads, differing as follows;
735 the allocation mechanism is used for many body types, so is somewhat
736 more complicated, it uses arena-sets, and has no need for still-live
737 SV detection.
738
739 At the outermost level, (new|del)_X*V macros return bodies of the
740 appropriate type.  These macros call either (new|del)_body_type or
741 (new|del)_body_allocated macro pairs, depending on specifics of the
742 type.  Most body types use the former pair, the latter pair is used to
743 allocate body types with "ghost fields".
744
745 "ghost fields" are fields that are unused in certain types, and
746 consequently don't need to actually exist.  They are declared because
747 they're part of a "base type", which allows use of functions as
748 methods.  The simplest examples are AVs and HVs, 2 aggregate types
749 which don't use the fields which support SCALAR semantics.
750
751 For these types, the arenas are carved up into appropriately sized
752 chunks, we thus avoid wasted memory for those unaccessed members.
753 When bodies are allocated, we adjust the pointer back in memory by the
754 size of the part not allocated, so it's as if we allocated the full
755 structure.  (But things will all go boom if you write to the part that
756 is "not there", because you'll be overwriting the last members of the
757 preceding structure in memory.)
758
759 We calculate the correction using the STRUCT_OFFSET macro on the first
760 member present. If the allocated structure is smaller (no initial NV
761 actually allocated) then the net effect is to subtract the size of the NV
762 from the pointer, to return a new pointer as if an initial NV were actually
763 allocated. (We were using structures named *_allocated for this, but
764 this turned out to be a subtle bug, because a structure without an NV
765 could have a lower alignment constraint, but the compiler is allowed to
766 optimised accesses based on the alignment constraint of the actual pointer
767 to the full structure, for example, using a single 64 bit load instruction
768 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
769
770 This is the same trick as was used for NV and IV bodies. Ironically it
771 doesn't need to be used for NV bodies any more, because NV is now at
772 the start of the structure. IV bodies don't need it either, because
773 they are no longer allocated.
774
775 In turn, the new_body_* allocators call S_new_body(), which invokes
776 new_body_inline macro, which takes a lock, and takes a body off the
777 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
778 necessary to refresh an empty list.  Then the lock is released, and
779 the body is returned.
780
781 Perl_more_bodies allocates a new arena, and carves it up into an array of N
782 bodies, which it strings into a linked list.  It looks up arena-size
783 and body-size from the body_details table described below, thus
784 supporting the multiple body-types.
785
786 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
787 the (new|del)_X*V macros are mapped directly to malloc/free.
788
789 For each sv-type, struct body_details bodies_by_type[] carries
790 parameters which control these aspects of SV handling:
791
792 Arena_size determines whether arenas are used for this body type, and if
793 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
794 zero, forcing individual mallocs and frees.
795
796 Body_size determines how big a body is, and therefore how many fit into
797 each arena.  Offset carries the body-pointer adjustment needed for
798 "ghost fields", and is used in *_allocated macros.
799
800 But its main purpose is to parameterize info needed in
801 Perl_sv_upgrade().  The info here dramatically simplifies the function
802 vs the implementation in 5.8.8, making it table-driven.  All fields
803 are used for this, except for arena_size.
804
805 For the sv-types that have no bodies, arenas are not used, so those
806 PL_body_roots[sv_type] are unused, and can be overloaded.  In
807 something of a special case, SVt_NULL is borrowed for HE arenas;
808 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
809 bodies_by_type[SVt_NULL] slot is not used, as the table is not
810 available in hv.c.
811
812 */
813
814 struct body_details {
815     U8 body_size;       /* Size to allocate  */
816     U8 copy;            /* Size of structure to copy (may be shorter)  */
817     U8 offset;
818     unsigned int type : 4;          /* We have space for a sanity check.  */
819     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
820     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
821     unsigned int arena : 1;         /* Allocated from an arena */
822     size_t arena_size;              /* Size of arena to allocate */
823 };
824
825 #define HADNV FALSE
826 #define NONV TRUE
827
828
829 #ifdef PURIFY
830 /* With -DPURFIY we allocate everything directly, and don't use arenas.
831    This seems a rather elegant way to simplify some of the code below.  */
832 #define HASARENA FALSE
833 #else
834 #define HASARENA TRUE
835 #endif
836 #define NOARENA FALSE
837
838 /* Size the arenas to exactly fit a given number of bodies.  A count
839    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
840    simplifying the default.  If count > 0, the arena is sized to fit
841    only that many bodies, allowing arenas to be used for large, rare
842    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
843    limited by PERL_ARENA_SIZE, so we can safely oversize the
844    declarations.
845  */
846 #define FIT_ARENA0(body_size)                           \
847     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
848 #define FIT_ARENAn(count,body_size)                     \
849     ( count * body_size <= PERL_ARENA_SIZE)             \
850     ? count * body_size                                 \
851     : FIT_ARENA0 (body_size)
852 #define FIT_ARENA(count,body_size)                      \
853     count                                               \
854     ? FIT_ARENAn (count, body_size)                     \
855     : FIT_ARENA0 (body_size)
856
857 /* Calculate the length to copy. Specifically work out the length less any
858    final padding the compiler needed to add.  See the comment in sv_upgrade
859    for why copying the padding proved to be a bug.  */
860
861 #define copy_length(type, last_member) \
862         STRUCT_OFFSET(type, last_member) \
863         + sizeof (((type*)SvANY((const SV *)0))->last_member)
864
865 static const struct body_details bodies_by_type[] = {
866     /* HEs use this offset for their arena.  */
867     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
868
869     /* The bind placeholder pretends to be an RV for now.
870        Also it's marked as "can't upgrade" to stop anyone using it before it's
871        implemented.  */
872     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
873
874     /* IVs are in the head, so the allocation size is 0.  */
875     { 0,
876       sizeof(IV), /* This is used to copy out the IV body.  */
877       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
878       NOARENA /* IVS don't need an arena  */, 0
879     },
880
881     /* 8 bytes on most ILP32 with IEEE doubles */
882     { sizeof(NV), sizeof(NV),
883       STRUCT_OFFSET(XPVNV, xnv_u),
884       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
885
886     /* 8 bytes on most ILP32 with IEEE doubles */
887     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
888       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
889       + STRUCT_OFFSET(XPV, xpv_cur),
890       SVt_PV, FALSE, NONV, HASARENA,
891       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
892
893     /* 12 */
894     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
895       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
896       + STRUCT_OFFSET(XPV, xpv_cur),
897       SVt_PVIV, FALSE, NONV, HASARENA,
898       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
899
900     /* 20 */
901     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
902       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
903       + STRUCT_OFFSET(XPV, xpv_cur),
904       SVt_PVNV, FALSE, HADNV, HASARENA,
905       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
906
907     /* 28 */
908     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
909       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
910
911     /* something big */
912     { sizeof(regexp),
913       sizeof(regexp),
914       0,
915       SVt_REGEXP, FALSE, NONV, HASARENA,
916       FIT_ARENA(0, sizeof(regexp))
917     },
918
919     /* 48 */
920     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
921       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
922     
923     /* 64 */
924     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
925       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
926
927     { sizeof(XPVAV),
928       copy_length(XPVAV, xav_alloc),
929       0,
930       SVt_PVAV, TRUE, NONV, HASARENA,
931       FIT_ARENA(0, sizeof(XPVAV)) },
932
933     { sizeof(XPVHV),
934       copy_length(XPVHV, xhv_max),
935       0,
936       SVt_PVHV, TRUE, NONV, HASARENA,
937       FIT_ARENA(0, sizeof(XPVHV)) },
938
939     /* 56 */
940     { sizeof(XPVCV),
941       sizeof(XPVCV),
942       0,
943       SVt_PVCV, TRUE, NONV, HASARENA,
944       FIT_ARENA(0, sizeof(XPVCV)) },
945
946     { sizeof(XPVFM),
947       sizeof(XPVFM),
948       0,
949       SVt_PVFM, TRUE, NONV, NOARENA,
950       FIT_ARENA(20, sizeof(XPVFM)) },
951
952     /* XPVIO is 84 bytes, fits 48x */
953     { sizeof(XPVIO),
954       sizeof(XPVIO),
955       0,
956       SVt_PVIO, TRUE, NONV, HASARENA,
957       FIT_ARENA(24, sizeof(XPVIO)) },
958 };
959
960 #define new_body_allocated(sv_type)             \
961     (void *)((char *)S_new_body(aTHX_ sv_type)  \
962              - bodies_by_type[sv_type].offset)
963
964 /* return a thing to the free list */
965
966 #define del_body(thing, root)                           \
967     STMT_START {                                        \
968         void ** const thing_copy = (void **)thing;      \
969         *thing_copy = *root;                            \
970         *root = (void*)thing_copy;                      \
971     } STMT_END
972
973 #ifdef PURIFY
974
975 #define new_XNV()       safemalloc(sizeof(XPVNV))
976 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
977 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
978
979 #define del_XPVGV(p)    safefree(p)
980
981 #else /* !PURIFY */
982
983 #define new_XNV()       new_body_allocated(SVt_NV)
984 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
985 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
986
987 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
988                                  &PL_body_roots[SVt_PVGV])
989
990 #endif /* PURIFY */
991
992 /* no arena for you! */
993
994 #define new_NOARENA(details) \
995         safemalloc((details)->body_size + (details)->offset)
996 #define new_NOARENAZ(details) \
997         safecalloc((details)->body_size + (details)->offset, 1)
998
999 void *
1000 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1001                   const size_t arena_size)
1002 {
1003     dVAR;
1004     void ** const root = &PL_body_roots[sv_type];
1005     struct arena_desc *adesc;
1006     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1007     unsigned int curr;
1008     char *start;
1009     const char *end;
1010     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1011 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1012     static bool done_sanity_check;
1013
1014     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1015      * variables like done_sanity_check. */
1016     if (!done_sanity_check) {
1017         unsigned int i = SVt_LAST;
1018
1019         done_sanity_check = TRUE;
1020
1021         while (i--)
1022             assert (bodies_by_type[i].type == i);
1023     }
1024 #endif
1025
1026     assert(arena_size);
1027
1028     /* may need new arena-set to hold new arena */
1029     if (!aroot || aroot->curr >= aroot->set_size) {
1030         struct arena_set *newroot;
1031         Newxz(newroot, 1, struct arena_set);
1032         newroot->set_size = ARENAS_PER_SET;
1033         newroot->next = aroot;
1034         aroot = newroot;
1035         PL_body_arenas = (void *) newroot;
1036         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1037     }
1038
1039     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1040     curr = aroot->curr++;
1041     adesc = &(aroot->set[curr]);
1042     assert(!adesc->arena);
1043     
1044     Newx(adesc->arena, good_arena_size, char);
1045     adesc->size = good_arena_size;
1046     adesc->utype = sv_type;
1047     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1048                           curr, (void*)adesc->arena, (UV)good_arena_size));
1049
1050     start = (char *) adesc->arena;
1051
1052     /* Get the address of the byte after the end of the last body we can fit.
1053        Remember, this is integer division:  */
1054     end = start + good_arena_size / body_size * body_size;
1055
1056     /* computed count doesnt reflect the 1st slot reservation */
1057 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1058     DEBUG_m(PerlIO_printf(Perl_debug_log,
1059                           "arena %p end %p arena-size %d (from %d) type %d "
1060                           "size %d ct %d\n",
1061                           (void*)start, (void*)end, (int)good_arena_size,
1062                           (int)arena_size, sv_type, (int)body_size,
1063                           (int)good_arena_size / (int)body_size));
1064 #else
1065     DEBUG_m(PerlIO_printf(Perl_debug_log,
1066                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1067                           (void*)start, (void*)end,
1068                           (int)arena_size, sv_type, (int)body_size,
1069                           (int)good_arena_size / (int)body_size));
1070 #endif
1071     *root = (void *)start;
1072
1073     while (1) {
1074         /* Where the next body would start:  */
1075         char * const next = start + body_size;
1076
1077         if (next >= end) {
1078             /* This is the last body:  */
1079             assert(next == end);
1080
1081             *(void **)start = 0;
1082             return *root;
1083         }
1084
1085         *(void**) start = (void *)next;
1086         start = next;
1087     }
1088 }
1089
1090 /* grab a new thing from the free list, allocating more if necessary.
1091    The inline version is used for speed in hot routines, and the
1092    function using it serves the rest (unless PURIFY).
1093 */
1094 #define new_body_inline(xpv, sv_type) \
1095     STMT_START { \
1096         void ** const r3wt = &PL_body_roots[sv_type]; \
1097         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1098           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1099                                              bodies_by_type[sv_type].body_size,\
1100                                              bodies_by_type[sv_type].arena_size)); \
1101         *(r3wt) = *(void**)(xpv); \
1102     } STMT_END
1103
1104 #ifndef PURIFY
1105
1106 STATIC void *
1107 S_new_body(pTHX_ const svtype sv_type)
1108 {
1109     dVAR;
1110     void *xpv;
1111     new_body_inline(xpv, sv_type);
1112     return xpv;
1113 }
1114
1115 #endif
1116
1117 static const struct body_details fake_rv =
1118     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1119
1120 /*
1121 =for apidoc sv_upgrade
1122
1123 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1124 SV, then copies across as much information as possible from the old body.
1125 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1126
1127 =cut
1128 */
1129
1130 void
1131 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1132 {
1133     dVAR;
1134     void*       old_body;
1135     void*       new_body;
1136     const svtype old_type = SvTYPE(sv);
1137     const struct body_details *new_type_details;
1138     const struct body_details *old_type_details
1139         = bodies_by_type + old_type;
1140     SV *referant = NULL;
1141
1142     PERL_ARGS_ASSERT_SV_UPGRADE;
1143
1144     if (old_type == new_type)
1145         return;
1146
1147     /* This clause was purposefully added ahead of the early return above to
1148        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1149        inference by Nick I-S that it would fix other troublesome cases. See
1150        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1151
1152        Given that shared hash key scalars are no longer PVIV, but PV, there is
1153        no longer need to unshare so as to free up the IVX slot for its proper
1154        purpose. So it's safe to move the early return earlier.  */
1155
1156     if (new_type != SVt_PV && SvIsCOW(sv)) {
1157         sv_force_normal_flags(sv, 0);
1158     }
1159
1160     old_body = SvANY(sv);
1161
1162     /* Copying structures onto other structures that have been neatly zeroed
1163        has a subtle gotcha. Consider XPVMG
1164
1165        +------+------+------+------+------+-------+-------+
1166        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1167        +------+------+------+------+------+-------+-------+
1168        0      4      8     12     16     20      24      28
1169
1170        where NVs are aligned to 8 bytes, so that sizeof that structure is
1171        actually 32 bytes long, with 4 bytes of padding at the end:
1172
1173        +------+------+------+------+------+-------+-------+------+
1174        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1175        +------+------+------+------+------+-------+-------+------+
1176        0      4      8     12     16     20      24      28     32
1177
1178        so what happens if you allocate memory for this structure:
1179
1180        +------+------+------+------+------+-------+-------+------+------+...
1181        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1182        +------+------+------+------+------+-------+-------+------+------+...
1183        0      4      8     12     16     20      24      28     32     36
1184
1185        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1186        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1187        started out as zero once, but it's quite possible that it isn't. So now,
1188        rather than a nicely zeroed GP, you have it pointing somewhere random.
1189        Bugs ensue.
1190
1191        (In fact, GP ends up pointing at a previous GP structure, because the
1192        principle cause of the padding in XPVMG getting garbage is a copy of
1193        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1194        this happens to be moot because XPVGV has been re-ordered, with GP
1195        no longer after STASH)
1196
1197        So we are careful and work out the size of used parts of all the
1198        structures.  */
1199
1200     switch (old_type) {
1201     case SVt_NULL:
1202         break;
1203     case SVt_IV:
1204         if (SvROK(sv)) {
1205             referant = SvRV(sv);
1206             old_type_details = &fake_rv;
1207             if (new_type == SVt_NV)
1208                 new_type = SVt_PVNV;
1209         } else {
1210             if (new_type < SVt_PVIV) {
1211                 new_type = (new_type == SVt_NV)
1212                     ? SVt_PVNV : SVt_PVIV;
1213             }
1214         }
1215         break;
1216     case SVt_NV:
1217         if (new_type < SVt_PVNV) {
1218             new_type = SVt_PVNV;
1219         }
1220         break;
1221     case SVt_PV:
1222         assert(new_type > SVt_PV);
1223         assert(SVt_IV < SVt_PV);
1224         assert(SVt_NV < SVt_PV);
1225         break;
1226     case SVt_PVIV:
1227         break;
1228     case SVt_PVNV:
1229         break;
1230     case SVt_PVMG:
1231         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1232            there's no way that it can be safely upgraded, because perl.c
1233            expects to Safefree(SvANY(PL_mess_sv))  */
1234         assert(sv != PL_mess_sv);
1235         /* This flag bit is used to mean other things in other scalar types.
1236            Given that it only has meaning inside the pad, it shouldn't be set
1237            on anything that can get upgraded.  */
1238         assert(!SvPAD_TYPED(sv));
1239         break;
1240     default:
1241         if (old_type_details->cant_upgrade)
1242             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1243                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1244     }
1245
1246     if (old_type > new_type)
1247         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1248                 (int)old_type, (int)new_type);
1249
1250     new_type_details = bodies_by_type + new_type;
1251
1252     SvFLAGS(sv) &= ~SVTYPEMASK;
1253     SvFLAGS(sv) |= new_type;
1254
1255     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1256        the return statements above will have triggered.  */
1257     assert (new_type != SVt_NULL);
1258     switch (new_type) {
1259     case SVt_IV:
1260         assert(old_type == SVt_NULL);
1261         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1262         SvIV_set(sv, 0);
1263         return;
1264     case SVt_NV:
1265         assert(old_type == SVt_NULL);
1266         SvANY(sv) = new_XNV();
1267         SvNV_set(sv, 0);
1268         return;
1269     case SVt_PVHV:
1270     case SVt_PVAV:
1271         assert(new_type_details->body_size);
1272
1273 #ifndef PURIFY  
1274         assert(new_type_details->arena);
1275         assert(new_type_details->arena_size);
1276         /* This points to the start of the allocated area.  */
1277         new_body_inline(new_body, new_type);
1278         Zero(new_body, new_type_details->body_size, char);
1279         new_body = ((char *)new_body) - new_type_details->offset;
1280 #else
1281         /* We always allocated the full length item with PURIFY. To do this
1282            we fake things so that arena is false for all 16 types..  */
1283         new_body = new_NOARENAZ(new_type_details);
1284 #endif
1285         SvANY(sv) = new_body;
1286         if (new_type == SVt_PVAV) {
1287             AvMAX(sv)   = -1;
1288             AvFILLp(sv) = -1;
1289             AvREAL_only(sv);
1290             if (old_type_details->body_size) {
1291                 AvALLOC(sv) = 0;
1292             } else {
1293                 /* It will have been zeroed when the new body was allocated.
1294                    Lets not write to it, in case it confuses a write-back
1295                    cache.  */
1296             }
1297         } else {
1298             assert(!SvOK(sv));
1299             SvOK_off(sv);
1300 #ifndef NODEFAULT_SHAREKEYS
1301             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1302 #endif
1303             HvMAX(sv) = 7; /* (start with 8 buckets) */
1304         }
1305
1306         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1307            The target created by newSVrv also is, and it can have magic.
1308            However, it never has SvPVX set.
1309         */
1310         if (old_type == SVt_IV) {
1311             assert(!SvROK(sv));
1312         } else if (old_type >= SVt_PV) {
1313             assert(SvPVX_const(sv) == 0);
1314         }
1315
1316         if (old_type >= SVt_PVMG) {
1317             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1318             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1319         } else {
1320             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1321         }
1322         break;
1323
1324
1325     case SVt_REGEXP:
1326         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1327            sv_force_normal_flags(sv) is called.  */
1328         SvFAKE_on(sv);
1329     case SVt_PVIV:
1330         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1331            no route from NV to PVIV, NOK can never be true  */
1332         assert(!SvNOKp(sv));
1333         assert(!SvNOK(sv));
1334     case SVt_PVIO:
1335     case SVt_PVFM:
1336     case SVt_PVGV:
1337     case SVt_PVCV:
1338     case SVt_PVLV:
1339     case SVt_PVMG:
1340     case SVt_PVNV:
1341     case SVt_PV:
1342
1343         assert(new_type_details->body_size);
1344         /* We always allocated the full length item with PURIFY. To do this
1345            we fake things so that arena is false for all 16 types..  */
1346         if(new_type_details->arena) {
1347             /* This points to the start of the allocated area.  */
1348             new_body_inline(new_body, new_type);
1349             Zero(new_body, new_type_details->body_size, char);
1350             new_body = ((char *)new_body) - new_type_details->offset;
1351         } else {
1352             new_body = new_NOARENAZ(new_type_details);
1353         }
1354         SvANY(sv) = new_body;
1355
1356         if (old_type_details->copy) {
1357             /* There is now the potential for an upgrade from something without
1358                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1359             int offset = old_type_details->offset;
1360             int length = old_type_details->copy;
1361
1362             if (new_type_details->offset > old_type_details->offset) {
1363                 const int difference
1364                     = new_type_details->offset - old_type_details->offset;
1365                 offset += difference;
1366                 length -= difference;
1367             }
1368             assert (length >= 0);
1369                 
1370             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1371                  char);
1372         }
1373
1374 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1375         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1376          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1377          * NV slot, but the new one does, then we need to initialise the
1378          * freshly created NV slot with whatever the correct bit pattern is
1379          * for 0.0  */
1380         if (old_type_details->zero_nv && !new_type_details->zero_nv
1381             && !isGV_with_GP(sv))
1382             SvNV_set(sv, 0);
1383 #endif
1384
1385         if (new_type == SVt_PVIO) {
1386             IO * const io = MUTABLE_IO(sv);
1387             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1388
1389             SvOBJECT_on(io);
1390             /* Clear the stashcache because a new IO could overrule a package
1391                name */
1392             hv_clear(PL_stashcache);
1393
1394             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1395             IoPAGE_LEN(sv) = 60;
1396         }
1397         if (old_type < SVt_PV) {
1398             /* referant will be NULL unless the old type was SVt_IV emulating
1399                SVt_RV */
1400             sv->sv_u.svu_rv = referant;
1401         }
1402         break;
1403     default:
1404         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1405                    (unsigned long)new_type);
1406     }
1407
1408     if (old_type > SVt_IV) {
1409 #ifdef PURIFY
1410         safefree(old_body);
1411 #else
1412         /* Note that there is an assumption that all bodies of types that
1413            can be upgraded came from arenas. Only the more complex non-
1414            upgradable types are allowed to be directly malloc()ed.  */
1415         assert(old_type_details->arena);
1416         del_body((void*)((char*)old_body + old_type_details->offset),
1417                  &PL_body_roots[old_type]);
1418 #endif
1419     }
1420 }
1421
1422 /*
1423 =for apidoc sv_backoff
1424
1425 Remove any string offset. You should normally use the C<SvOOK_off> macro
1426 wrapper instead.
1427
1428 =cut
1429 */
1430
1431 int
1432 Perl_sv_backoff(pTHX_ register SV *const sv)
1433 {
1434     STRLEN delta;
1435     const char * const s = SvPVX_const(sv);
1436
1437     PERL_ARGS_ASSERT_SV_BACKOFF;
1438     PERL_UNUSED_CONTEXT;
1439
1440     assert(SvOOK(sv));
1441     assert(SvTYPE(sv) != SVt_PVHV);
1442     assert(SvTYPE(sv) != SVt_PVAV);
1443
1444     SvOOK_offset(sv, delta);
1445     
1446     SvLEN_set(sv, SvLEN(sv) + delta);
1447     SvPV_set(sv, SvPVX(sv) - delta);
1448     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1449     SvFLAGS(sv) &= ~SVf_OOK;
1450     return 0;
1451 }
1452
1453 /*
1454 =for apidoc sv_grow
1455
1456 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1457 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1458 Use the C<SvGROW> wrapper instead.
1459
1460 =cut
1461 */
1462
1463 char *
1464 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1465 {
1466     register char *s;
1467
1468     PERL_ARGS_ASSERT_SV_GROW;
1469
1470     if (PL_madskills && newlen >= 0x100000) {
1471         PerlIO_printf(Perl_debug_log,
1472                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1473     }
1474 #ifdef HAS_64K_LIMIT
1475     if (newlen >= 0x10000) {
1476         PerlIO_printf(Perl_debug_log,
1477                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1478         my_exit(1);
1479     }
1480 #endif /* HAS_64K_LIMIT */
1481     if (SvROK(sv))
1482         sv_unref(sv);
1483     if (SvTYPE(sv) < SVt_PV) {
1484         sv_upgrade(sv, SVt_PV);
1485         s = SvPVX_mutable(sv);
1486     }
1487     else if (SvOOK(sv)) {       /* pv is offset? */
1488         sv_backoff(sv);
1489         s = SvPVX_mutable(sv);
1490         if (newlen > SvLEN(sv))
1491             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1492 #ifdef HAS_64K_LIMIT
1493         if (newlen >= 0x10000)
1494             newlen = 0xFFFF;
1495 #endif
1496     }
1497     else
1498         s = SvPVX_mutable(sv);
1499
1500     if (newlen > SvLEN(sv)) {           /* need more room? */
1501         STRLEN minlen = SvCUR(sv);
1502         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1503         if (newlen < minlen)
1504             newlen = minlen;
1505 #ifndef Perl_safesysmalloc_size
1506         newlen = PERL_STRLEN_ROUNDUP(newlen);
1507 #endif
1508         if (SvLEN(sv) && s) {
1509             s = (char*)saferealloc(s, newlen);
1510         }
1511         else {
1512             s = (char*)safemalloc(newlen);
1513             if (SvPVX_const(sv) && SvCUR(sv)) {
1514                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1515             }
1516         }
1517         SvPV_set(sv, s);
1518 #ifdef Perl_safesysmalloc_size
1519         /* Do this here, do it once, do it right, and then we will never get
1520            called back into sv_grow() unless there really is some growing
1521            needed.  */
1522         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1523 #else
1524         SvLEN_set(sv, newlen);
1525 #endif
1526     }
1527     return s;
1528 }
1529
1530 /*
1531 =for apidoc sv_setiv
1532
1533 Copies an integer into the given SV, upgrading first if necessary.
1534 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1535
1536 =cut
1537 */
1538
1539 void
1540 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1541 {
1542     dVAR;
1543
1544     PERL_ARGS_ASSERT_SV_SETIV;
1545
1546     SV_CHECK_THINKFIRST_COW_DROP(sv);
1547     switch (SvTYPE(sv)) {
1548     case SVt_NULL:
1549     case SVt_NV:
1550         sv_upgrade(sv, SVt_IV);
1551         break;
1552     case SVt_PV:
1553         sv_upgrade(sv, SVt_PVIV);
1554         break;
1555
1556     case SVt_PVGV:
1557         if (!isGV_with_GP(sv))
1558             break;
1559     case SVt_PVAV:
1560     case SVt_PVHV:
1561     case SVt_PVCV:
1562     case SVt_PVFM:
1563     case SVt_PVIO:
1564         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1565                    OP_DESC(PL_op));
1566     default: NOOP;
1567     }
1568     (void)SvIOK_only(sv);                       /* validate number */
1569     SvIV_set(sv, i);
1570     SvTAINT(sv);
1571 }
1572
1573 /*
1574 =for apidoc sv_setiv_mg
1575
1576 Like C<sv_setiv>, but also handles 'set' magic.
1577
1578 =cut
1579 */
1580
1581 void
1582 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1583 {
1584     PERL_ARGS_ASSERT_SV_SETIV_MG;
1585
1586     sv_setiv(sv,i);
1587     SvSETMAGIC(sv);
1588 }
1589
1590 /*
1591 =for apidoc sv_setuv
1592
1593 Copies an unsigned integer into the given SV, upgrading first if necessary.
1594 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1595
1596 =cut
1597 */
1598
1599 void
1600 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1601 {
1602     PERL_ARGS_ASSERT_SV_SETUV;
1603
1604     /* With these two if statements:
1605        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1606
1607        without
1608        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1609
1610        If you wish to remove them, please benchmark to see what the effect is
1611     */
1612     if (u <= (UV)IV_MAX) {
1613        sv_setiv(sv, (IV)u);
1614        return;
1615     }
1616     sv_setiv(sv, 0);
1617     SvIsUV_on(sv);
1618     SvUV_set(sv, u);
1619 }
1620
1621 /*
1622 =for apidoc sv_setuv_mg
1623
1624 Like C<sv_setuv>, but also handles 'set' magic.
1625
1626 =cut
1627 */
1628
1629 void
1630 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1631 {
1632     PERL_ARGS_ASSERT_SV_SETUV_MG;
1633
1634     sv_setuv(sv,u);
1635     SvSETMAGIC(sv);
1636 }
1637
1638 /*
1639 =for apidoc sv_setnv
1640
1641 Copies a double into the given SV, upgrading first if necessary.
1642 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1643
1644 =cut
1645 */
1646
1647 void
1648 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1649 {
1650     dVAR;
1651
1652     PERL_ARGS_ASSERT_SV_SETNV;
1653
1654     SV_CHECK_THINKFIRST_COW_DROP(sv);
1655     switch (SvTYPE(sv)) {
1656     case SVt_NULL:
1657     case SVt_IV:
1658         sv_upgrade(sv, SVt_NV);
1659         break;
1660     case SVt_PV:
1661     case SVt_PVIV:
1662         sv_upgrade(sv, SVt_PVNV);
1663         break;
1664
1665     case SVt_PVGV:
1666         if (!isGV_with_GP(sv))
1667             break;
1668     case SVt_PVAV:
1669     case SVt_PVHV:
1670     case SVt_PVCV:
1671     case SVt_PVFM:
1672     case SVt_PVIO:
1673         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1674                    OP_DESC(PL_op));
1675     default: NOOP;
1676     }
1677     SvNV_set(sv, num);
1678     (void)SvNOK_only(sv);                       /* validate number */
1679     SvTAINT(sv);
1680 }
1681
1682 /*
1683 =for apidoc sv_setnv_mg
1684
1685 Like C<sv_setnv>, but also handles 'set' magic.
1686
1687 =cut
1688 */
1689
1690 void
1691 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1692 {
1693     PERL_ARGS_ASSERT_SV_SETNV_MG;
1694
1695     sv_setnv(sv,num);
1696     SvSETMAGIC(sv);
1697 }
1698
1699 /* Print an "isn't numeric" warning, using a cleaned-up,
1700  * printable version of the offending string
1701  */
1702
1703 STATIC void
1704 S_not_a_number(pTHX_ SV *const sv)
1705 {
1706      dVAR;
1707      SV *dsv;
1708      char tmpbuf[64];
1709      const char *pv;
1710
1711      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1712
1713      if (DO_UTF8(sv)) {
1714           dsv = newSVpvs_flags("", SVs_TEMP);
1715           pv = sv_uni_display(dsv, sv, 10, 0);
1716      } else {
1717           char *d = tmpbuf;
1718           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1719           /* each *s can expand to 4 chars + "...\0",
1720              i.e. need room for 8 chars */
1721         
1722           const char *s = SvPVX_const(sv);
1723           const char * const end = s + SvCUR(sv);
1724           for ( ; s < end && d < limit; s++ ) {
1725                int ch = *s & 0xFF;
1726                if (ch & 128 && !isPRINT_LC(ch)) {
1727                     *d++ = 'M';
1728                     *d++ = '-';
1729                     ch &= 127;
1730                }
1731                if (ch == '\n') {
1732                     *d++ = '\\';
1733                     *d++ = 'n';
1734                }
1735                else if (ch == '\r') {
1736                     *d++ = '\\';
1737                     *d++ = 'r';
1738                }
1739                else if (ch == '\f') {
1740                     *d++ = '\\';
1741                     *d++ = 'f';
1742                }
1743                else if (ch == '\\') {
1744                     *d++ = '\\';
1745                     *d++ = '\\';
1746                }
1747                else if (ch == '\0') {
1748                     *d++ = '\\';
1749                     *d++ = '0';
1750                }
1751                else if (isPRINT_LC(ch))
1752                     *d++ = ch;
1753                else {
1754                     *d++ = '^';
1755                     *d++ = toCTRL(ch);
1756                }
1757           }
1758           if (s < end) {
1759                *d++ = '.';
1760                *d++ = '.';
1761                *d++ = '.';
1762           }
1763           *d = '\0';
1764           pv = tmpbuf;
1765     }
1766
1767     if (PL_op)
1768         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1769                     "Argument \"%s\" isn't numeric in %s", pv,
1770                     OP_DESC(PL_op));
1771     else
1772         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1773                     "Argument \"%s\" isn't numeric", pv);
1774 }
1775
1776 /*
1777 =for apidoc looks_like_number
1778
1779 Test if the content of an SV looks like a number (or is a number).
1780 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1781 non-numeric warning), even if your atof() doesn't grok them.
1782
1783 =cut
1784 */
1785
1786 I32
1787 Perl_looks_like_number(pTHX_ SV *const sv)
1788 {
1789     register const char *sbegin;
1790     STRLEN len;
1791
1792     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1793
1794     if (SvPOK(sv)) {
1795         sbegin = SvPVX_const(sv);
1796         len = SvCUR(sv);
1797     }
1798     else if (SvPOKp(sv))
1799         sbegin = SvPV_const(sv, len);
1800     else
1801         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1802     return grok_number(sbegin, len, NULL);
1803 }
1804
1805 STATIC bool
1806 S_glob_2number(pTHX_ GV * const gv)
1807 {
1808     const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1809     SV *const buffer = sv_newmortal();
1810
1811     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1812
1813     /* FAKE globs can get coerced, so need to turn this off temporarily if it
1814        is on.  */
1815     SvFAKE_off(gv);
1816     gv_efullname3(buffer, gv, "*");
1817     SvFLAGS(gv) |= wasfake;
1818
1819     /* We know that all GVs stringify to something that is not-a-number,
1820         so no need to test that.  */
1821     if (ckWARN(WARN_NUMERIC))
1822         not_a_number(buffer);
1823     /* We just want something true to return, so that S_sv_2iuv_common
1824         can tail call us and return true.  */
1825     return TRUE;
1826 }
1827
1828 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1829    until proven guilty, assume that things are not that bad... */
1830
1831 /*
1832    NV_PRESERVES_UV:
1833
1834    As 64 bit platforms often have an NV that doesn't preserve all bits of
1835    an IV (an assumption perl has been based on to date) it becomes necessary
1836    to remove the assumption that the NV always carries enough precision to
1837    recreate the IV whenever needed, and that the NV is the canonical form.
1838    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1839    precision as a side effect of conversion (which would lead to insanity
1840    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1841    1) to distinguish between IV/UV/NV slots that have cached a valid
1842       conversion where precision was lost and IV/UV/NV slots that have a
1843       valid conversion which has lost no precision
1844    2) to ensure that if a numeric conversion to one form is requested that
1845       would lose precision, the precise conversion (or differently
1846       imprecise conversion) is also performed and cached, to prevent
1847       requests for different numeric formats on the same SV causing
1848       lossy conversion chains. (lossless conversion chains are perfectly
1849       acceptable (still))
1850
1851
1852    flags are used:
1853    SvIOKp is true if the IV slot contains a valid value
1854    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1855    SvNOKp is true if the NV slot contains a valid value
1856    SvNOK  is true only if the NV value is accurate
1857
1858    so
1859    while converting from PV to NV, check to see if converting that NV to an
1860    IV(or UV) would lose accuracy over a direct conversion from PV to
1861    IV(or UV). If it would, cache both conversions, return NV, but mark
1862    SV as IOK NOKp (ie not NOK).
1863
1864    While converting from PV to IV, check to see if converting that IV to an
1865    NV would lose accuracy over a direct conversion from PV to NV. If it
1866    would, cache both conversions, flag similarly.
1867
1868    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1869    correctly because if IV & NV were set NV *always* overruled.
1870    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1871    changes - now IV and NV together means that the two are interchangeable:
1872    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1873
1874    The benefit of this is that operations such as pp_add know that if
1875    SvIOK is true for both left and right operands, then integer addition
1876    can be used instead of floating point (for cases where the result won't
1877    overflow). Before, floating point was always used, which could lead to
1878    loss of precision compared with integer addition.
1879
1880    * making IV and NV equal status should make maths accurate on 64 bit
1881      platforms
1882    * may speed up maths somewhat if pp_add and friends start to use
1883      integers when possible instead of fp. (Hopefully the overhead in
1884      looking for SvIOK and checking for overflow will not outweigh the
1885      fp to integer speedup)
1886    * will slow down integer operations (callers of SvIV) on "inaccurate"
1887      values, as the change from SvIOK to SvIOKp will cause a call into
1888      sv_2iv each time rather than a macro access direct to the IV slot
1889    * should speed up number->string conversion on integers as IV is
1890      favoured when IV and NV are equally accurate
1891
1892    ####################################################################
1893    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1894    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1895    On the other hand, SvUOK is true iff UV.
1896    ####################################################################
1897
1898    Your mileage will vary depending your CPU's relative fp to integer
1899    performance ratio.
1900 */
1901
1902 #ifndef NV_PRESERVES_UV
1903 #  define IS_NUMBER_UNDERFLOW_IV 1
1904 #  define IS_NUMBER_UNDERFLOW_UV 2
1905 #  define IS_NUMBER_IV_AND_UV    2
1906 #  define IS_NUMBER_OVERFLOW_IV  4
1907 #  define IS_NUMBER_OVERFLOW_UV  5
1908
1909 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1910
1911 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1912 STATIC int
1913 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1914 #  ifdef DEBUGGING
1915                        , I32 numtype
1916 #  endif
1917                        )
1918 {
1919     dVAR;
1920
1921     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1922
1923     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));
1924     if (SvNVX(sv) < (NV)IV_MIN) {
1925         (void)SvIOKp_on(sv);
1926         (void)SvNOK_on(sv);
1927         SvIV_set(sv, IV_MIN);
1928         return IS_NUMBER_UNDERFLOW_IV;
1929     }
1930     if (SvNVX(sv) > (NV)UV_MAX) {
1931         (void)SvIOKp_on(sv);
1932         (void)SvNOK_on(sv);
1933         SvIsUV_on(sv);
1934         SvUV_set(sv, UV_MAX);
1935         return IS_NUMBER_OVERFLOW_UV;
1936     }
1937     (void)SvIOKp_on(sv);
1938     (void)SvNOK_on(sv);
1939     /* Can't use strtol etc to convert this string.  (See truth table in
1940        sv_2iv  */
1941     if (SvNVX(sv) <= (UV)IV_MAX) {
1942         SvIV_set(sv, I_V(SvNVX(sv)));
1943         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1944             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1945         } else {
1946             /* Integer is imprecise. NOK, IOKp */
1947         }
1948         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1949     }
1950     SvIsUV_on(sv);
1951     SvUV_set(sv, U_V(SvNVX(sv)));
1952     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1953         if (SvUVX(sv) == UV_MAX) {
1954             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1955                possibly be preserved by NV. Hence, it must be overflow.
1956                NOK, IOKp */
1957             return IS_NUMBER_OVERFLOW_UV;
1958         }
1959         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1960     } else {
1961         /* Integer is imprecise. NOK, IOKp */
1962     }
1963     return IS_NUMBER_OVERFLOW_IV;
1964 }
1965 #endif /* !NV_PRESERVES_UV*/
1966
1967 STATIC bool
1968 S_sv_2iuv_common(pTHX_ SV *const sv)
1969 {
1970     dVAR;
1971
1972     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1973
1974     if (SvNOKp(sv)) {
1975         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1976          * without also getting a cached IV/UV from it at the same time
1977          * (ie PV->NV conversion should detect loss of accuracy and cache
1978          * IV or UV at same time to avoid this. */
1979         /* IV-over-UV optimisation - choose to cache IV if possible */
1980
1981         if (SvTYPE(sv) == SVt_NV)
1982             sv_upgrade(sv, SVt_PVNV);
1983
1984         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1985         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1986            certainly cast into the IV range at IV_MAX, whereas the correct
1987            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1988            cases go to UV */
1989 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1990         if (Perl_isnan(SvNVX(sv))) {
1991             SvUV_set(sv, 0);
1992             SvIsUV_on(sv);
1993             return FALSE;
1994         }
1995 #endif
1996         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1997             SvIV_set(sv, I_V(SvNVX(sv)));
1998             if (SvNVX(sv) == (NV) SvIVX(sv)
1999 #ifndef NV_PRESERVES_UV
2000                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2001                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2002                 /* Don't flag it as "accurately an integer" if the number
2003                    came from a (by definition imprecise) NV operation, and
2004                    we're outside the range of NV integer precision */
2005 #endif
2006                 ) {
2007                 if (SvNOK(sv))
2008                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2009                 else {
2010                     /* scalar has trailing garbage, eg "42a" */
2011                 }
2012                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2013                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2014                                       PTR2UV(sv),
2015                                       SvNVX(sv),
2016                                       SvIVX(sv)));
2017
2018             } else {
2019                 /* IV not precise.  No need to convert from PV, as NV
2020                    conversion would already have cached IV if it detected
2021                    that PV->IV would be better than PV->NV->IV
2022                    flags already correct - don't set public IOK.  */
2023                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2024                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2025                                       PTR2UV(sv),
2026                                       SvNVX(sv),
2027                                       SvIVX(sv)));
2028             }
2029             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2030                but the cast (NV)IV_MIN rounds to a the value less (more
2031                negative) than IV_MIN which happens to be equal to SvNVX ??
2032                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2033                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2034                (NV)UVX == NVX are both true, but the values differ. :-(
2035                Hopefully for 2s complement IV_MIN is something like
2036                0x8000000000000000 which will be exact. NWC */
2037         }
2038         else {
2039             SvUV_set(sv, U_V(SvNVX(sv)));
2040             if (
2041                 (SvNVX(sv) == (NV) SvUVX(sv))
2042 #ifndef  NV_PRESERVES_UV
2043                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2044                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2045                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2046                 /* Don't flag it as "accurately an integer" if the number
2047                    came from a (by definition imprecise) NV operation, and
2048                    we're outside the range of NV integer precision */
2049 #endif
2050                 && SvNOK(sv)
2051                 )
2052                 SvIOK_on(sv);
2053             SvIsUV_on(sv);
2054             DEBUG_c(PerlIO_printf(Perl_debug_log,
2055                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2056                                   PTR2UV(sv),
2057                                   SvUVX(sv),
2058                                   SvUVX(sv)));
2059         }
2060     }
2061     else if (SvPOKp(sv) && SvLEN(sv)) {
2062         UV value;
2063         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2064         /* We want to avoid a possible problem when we cache an IV/ a UV which
2065            may be later translated to an NV, and the resulting NV is not
2066            the same as the direct translation of the initial string
2067            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2068            be careful to ensure that the value with the .456 is around if the
2069            NV value is requested in the future).
2070         
2071            This means that if we cache such an IV/a UV, we need to cache the
2072            NV as well.  Moreover, we trade speed for space, and do not
2073            cache the NV if we are sure it's not needed.
2074          */
2075
2076         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2077         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2078              == IS_NUMBER_IN_UV) {
2079             /* It's definitely an integer, only upgrade to PVIV */
2080             if (SvTYPE(sv) < SVt_PVIV)
2081                 sv_upgrade(sv, SVt_PVIV);
2082             (void)SvIOK_on(sv);
2083         } else if (SvTYPE(sv) < SVt_PVNV)
2084             sv_upgrade(sv, SVt_PVNV);
2085
2086         /* If NVs preserve UVs then we only use the UV value if we know that
2087            we aren't going to call atof() below. If NVs don't preserve UVs
2088            then the value returned may have more precision than atof() will
2089            return, even though value isn't perfectly accurate.  */
2090         if ((numtype & (IS_NUMBER_IN_UV
2091 #ifdef NV_PRESERVES_UV
2092                         | IS_NUMBER_NOT_INT
2093 #endif
2094             )) == IS_NUMBER_IN_UV) {
2095             /* This won't turn off the public IOK flag if it was set above  */
2096             (void)SvIOKp_on(sv);
2097
2098             if (!(numtype & IS_NUMBER_NEG)) {
2099                 /* positive */;
2100                 if (value <= (UV)IV_MAX) {
2101                     SvIV_set(sv, (IV)value);
2102                 } else {
2103                     /* it didn't overflow, and it was positive. */
2104                     SvUV_set(sv, value);
2105                     SvIsUV_on(sv);
2106                 }
2107             } else {
2108                 /* 2s complement assumption  */
2109                 if (value <= (UV)IV_MIN) {
2110                     SvIV_set(sv, -(IV)value);
2111                 } else {
2112                     /* Too negative for an IV.  This is a double upgrade, but
2113                        I'm assuming it will be rare.  */
2114                     if (SvTYPE(sv) < SVt_PVNV)
2115                         sv_upgrade(sv, SVt_PVNV);
2116                     SvNOK_on(sv);
2117                     SvIOK_off(sv);
2118                     SvIOKp_on(sv);
2119                     SvNV_set(sv, -(NV)value);
2120                     SvIV_set(sv, IV_MIN);
2121                 }
2122             }
2123         }
2124         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2125            will be in the previous block to set the IV slot, and the next
2126            block to set the NV slot.  So no else here.  */
2127         
2128         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2129             != IS_NUMBER_IN_UV) {
2130             /* It wasn't an (integer that doesn't overflow the UV). */
2131             SvNV_set(sv, Atof(SvPVX_const(sv)));
2132
2133             if (! numtype && ckWARN(WARN_NUMERIC))
2134                 not_a_number(sv);
2135
2136 #if defined(USE_LONG_DOUBLE)
2137             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2138                                   PTR2UV(sv), SvNVX(sv)));
2139 #else
2140             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2141                                   PTR2UV(sv), SvNVX(sv)));
2142 #endif
2143
2144 #ifdef NV_PRESERVES_UV
2145             (void)SvIOKp_on(sv);
2146             (void)SvNOK_on(sv);
2147             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2148                 SvIV_set(sv, I_V(SvNVX(sv)));
2149                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2150                     SvIOK_on(sv);
2151                 } else {
2152                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2153                 }
2154                 /* UV will not work better than IV */
2155             } else {
2156                 if (SvNVX(sv) > (NV)UV_MAX) {
2157                     SvIsUV_on(sv);
2158                     /* Integer is inaccurate. NOK, IOKp, is UV */
2159                     SvUV_set(sv, UV_MAX);
2160                 } else {
2161                     SvUV_set(sv, U_V(SvNVX(sv)));
2162                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2163                        NV preservse UV so can do correct comparison.  */
2164                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2165                         SvIOK_on(sv);
2166                     } else {
2167                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2168                     }
2169                 }
2170                 SvIsUV_on(sv);
2171             }
2172 #else /* NV_PRESERVES_UV */
2173             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2174                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2175                 /* The IV/UV slot will have been set from value returned by
2176                    grok_number above.  The NV slot has just been set using
2177                    Atof.  */
2178                 SvNOK_on(sv);
2179                 assert (SvIOKp(sv));
2180             } else {
2181                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2182                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2183                     /* Small enough to preserve all bits. */
2184                     (void)SvIOKp_on(sv);
2185                     SvNOK_on(sv);
2186                     SvIV_set(sv, I_V(SvNVX(sv)));
2187                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2188                         SvIOK_on(sv);
2189                     /* Assumption: first non-preserved integer is < IV_MAX,
2190                        this NV is in the preserved range, therefore: */
2191                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2192                           < (UV)IV_MAX)) {
2193                         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);
2194                     }
2195                 } else {
2196                     /* IN_UV NOT_INT
2197                          0      0       already failed to read UV.
2198                          0      1       already failed to read UV.
2199                          1      0       you won't get here in this case. IV/UV
2200                                         slot set, public IOK, Atof() unneeded.
2201                          1      1       already read UV.
2202                        so there's no point in sv_2iuv_non_preserve() attempting
2203                        to use atol, strtol, strtoul etc.  */
2204 #  ifdef DEBUGGING
2205                     sv_2iuv_non_preserve (sv, numtype);
2206 #  else
2207                     sv_2iuv_non_preserve (sv);
2208 #  endif
2209                 }
2210             }
2211 #endif /* NV_PRESERVES_UV */
2212         /* It might be more code efficient to go through the entire logic above
2213            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2214            gets complex and potentially buggy, so more programmer efficient
2215            to do it this way, by turning off the public flags:  */
2216         if (!numtype)
2217             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2218         }
2219     }
2220     else  {
2221         if (isGV_with_GP(sv))
2222             return glob_2number(MUTABLE_GV(sv));
2223
2224         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2225             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2226                 report_uninit(sv);
2227         }
2228         if (SvTYPE(sv) < SVt_IV)
2229             /* Typically the caller expects that sv_any is not NULL now.  */
2230             sv_upgrade(sv, SVt_IV);
2231         /* Return 0 from the caller.  */
2232         return TRUE;
2233     }
2234     return FALSE;
2235 }
2236
2237 /*
2238 =for apidoc sv_2iv_flags
2239
2240 Return the integer value of an SV, doing any necessary string
2241 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2242 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2243
2244 =cut
2245 */
2246
2247 IV
2248 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2249 {
2250     dVAR;
2251     if (!sv)
2252         return 0;
2253     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2254         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2255            cache IVs just in case. In practice it seems that they never
2256            actually anywhere accessible by user Perl code, let alone get used
2257            in anything other than a string context.  */
2258         if (flags & SV_GMAGIC)
2259             mg_get(sv);
2260         if (SvIOKp(sv))
2261             return SvIVX(sv);
2262         if (SvNOKp(sv)) {
2263             return I_V(SvNVX(sv));
2264         }
2265         if (SvPOKp(sv) && SvLEN(sv)) {
2266             UV value;
2267             const int numtype
2268                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2269
2270             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2271                 == IS_NUMBER_IN_UV) {
2272                 /* It's definitely an integer */
2273                 if (numtype & IS_NUMBER_NEG) {
2274                     if (value < (UV)IV_MIN)
2275                         return -(IV)value;
2276                 } else {
2277                     if (value < (UV)IV_MAX)
2278                         return (IV)value;
2279                 }
2280             }
2281             if (!numtype) {
2282                 if (ckWARN(WARN_NUMERIC))
2283                     not_a_number(sv);
2284             }
2285             return I_V(Atof(SvPVX_const(sv)));
2286         }
2287         if (SvROK(sv)) {
2288             goto return_rok;
2289         }
2290         assert(SvTYPE(sv) >= SVt_PVMG);
2291         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2292     } else if (SvTHINKFIRST(sv)) {
2293         if (SvROK(sv)) {
2294         return_rok:
2295             if (SvAMAGIC(sv)) {
2296                 SV * tmpstr;
2297                 if (flags & SV_SKIP_OVERLOAD)
2298                     return 0;
2299                 tmpstr=AMG_CALLun(sv,numer);
2300                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2301                     return SvIV(tmpstr);
2302                 }
2303             }
2304             return PTR2IV(SvRV(sv));
2305         }
2306         if (SvIsCOW(sv)) {
2307             sv_force_normal_flags(sv, 0);
2308         }
2309         if (SvREADONLY(sv) && !SvOK(sv)) {
2310             if (ckWARN(WARN_UNINITIALIZED))
2311                 report_uninit(sv);
2312             return 0;
2313         }
2314     }
2315     if (!SvIOKp(sv)) {
2316         if (S_sv_2iuv_common(aTHX_ sv))
2317             return 0;
2318     }
2319     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2320         PTR2UV(sv),SvIVX(sv)));
2321     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2322 }
2323
2324 /*
2325 =for apidoc sv_2uv_flags
2326
2327 Return the unsigned integer value of an SV, doing any necessary string
2328 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2329 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2330
2331 =cut
2332 */
2333
2334 UV
2335 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2336 {
2337     dVAR;
2338     if (!sv)
2339         return 0;
2340     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2341         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2342            cache IVs just in case.  */
2343         if (flags & SV_GMAGIC)
2344             mg_get(sv);
2345         if (SvIOKp(sv))
2346             return SvUVX(sv);
2347         if (SvNOKp(sv))
2348             return U_V(SvNVX(sv));
2349         if (SvPOKp(sv) && SvLEN(sv)) {
2350             UV value;
2351             const int numtype
2352                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2353
2354             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2355                 == IS_NUMBER_IN_UV) {
2356                 /* It's definitely an integer */
2357                 if (!(numtype & IS_NUMBER_NEG))
2358                     return value;
2359             }
2360             if (!numtype) {
2361                 if (ckWARN(WARN_NUMERIC))
2362                     not_a_number(sv);
2363             }
2364             return U_V(Atof(SvPVX_const(sv)));
2365         }
2366         if (SvROK(sv)) {
2367             goto return_rok;
2368         }
2369         assert(SvTYPE(sv) >= SVt_PVMG);
2370         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2371     } else if (SvTHINKFIRST(sv)) {
2372         if (SvROK(sv)) {
2373         return_rok:
2374             if (SvAMAGIC(sv)) {
2375                 SV *tmpstr;
2376                 if (flags & SV_SKIP_OVERLOAD)
2377                     return 0;
2378                 tmpstr = AMG_CALLun(sv,numer);
2379                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2380                     return SvUV(tmpstr);
2381                 }
2382             }
2383             return PTR2UV(SvRV(sv));
2384         }
2385         if (SvIsCOW(sv)) {
2386             sv_force_normal_flags(sv, 0);
2387         }
2388         if (SvREADONLY(sv) && !SvOK(sv)) {
2389             if (ckWARN(WARN_UNINITIALIZED))
2390                 report_uninit(sv);
2391             return 0;
2392         }
2393     }
2394     if (!SvIOKp(sv)) {
2395         if (S_sv_2iuv_common(aTHX_ sv))
2396             return 0;
2397     }
2398
2399     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2400                           PTR2UV(sv),SvUVX(sv)));
2401     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2402 }
2403
2404 /*
2405 =for apidoc sv_2nv_flags
2406
2407 Return the num value of an SV, doing any necessary string or integer
2408 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2409 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2410
2411 =cut
2412 */
2413
2414 NV
2415 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2416 {
2417     dVAR;
2418     if (!sv)
2419         return 0.0;
2420     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2421         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2422            cache IVs just in case.  */
2423         if (flags & SV_GMAGIC)
2424             mg_get(sv);
2425         if (SvNOKp(sv))
2426             return SvNVX(sv);
2427         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2428             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2429                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2430                 not_a_number(sv);
2431             return Atof(SvPVX_const(sv));
2432         }
2433         if (SvIOKp(sv)) {
2434             if (SvIsUV(sv))
2435                 return (NV)SvUVX(sv);
2436             else
2437                 return (NV)SvIVX(sv);
2438         }
2439         if (SvROK(sv)) {
2440             goto return_rok;
2441         }
2442         assert(SvTYPE(sv) >= SVt_PVMG);
2443         /* This falls through to the report_uninit near the end of the
2444            function. */
2445     } else if (SvTHINKFIRST(sv)) {
2446         if (SvROK(sv)) {
2447         return_rok:
2448             if (SvAMAGIC(sv)) {
2449                 SV *tmpstr;
2450                 if (flags & SV_SKIP_OVERLOAD)
2451                     return 0;
2452                 tmpstr = AMG_CALLun(sv,numer);
2453                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2454                     return SvNV(tmpstr);
2455                 }
2456             }
2457             return PTR2NV(SvRV(sv));
2458         }
2459         if (SvIsCOW(sv)) {
2460             sv_force_normal_flags(sv, 0);
2461         }
2462         if (SvREADONLY(sv) && !SvOK(sv)) {
2463             if (ckWARN(WARN_UNINITIALIZED))
2464                 report_uninit(sv);
2465             return 0.0;
2466         }
2467     }
2468     if (SvTYPE(sv) < SVt_NV) {
2469         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2470         sv_upgrade(sv, SVt_NV);
2471 #ifdef USE_LONG_DOUBLE
2472         DEBUG_c({
2473             STORE_NUMERIC_LOCAL_SET_STANDARD();
2474             PerlIO_printf(Perl_debug_log,
2475                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2476                           PTR2UV(sv), SvNVX(sv));
2477             RESTORE_NUMERIC_LOCAL();
2478         });
2479 #else
2480         DEBUG_c({
2481             STORE_NUMERIC_LOCAL_SET_STANDARD();
2482             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2483                           PTR2UV(sv), SvNVX(sv));
2484             RESTORE_NUMERIC_LOCAL();
2485         });
2486 #endif
2487     }
2488     else if (SvTYPE(sv) < SVt_PVNV)
2489         sv_upgrade(sv, SVt_PVNV);
2490     if (SvNOKp(sv)) {
2491         return SvNVX(sv);
2492     }
2493     if (SvIOKp(sv)) {
2494         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2495 #ifdef NV_PRESERVES_UV
2496         if (SvIOK(sv))
2497             SvNOK_on(sv);
2498         else
2499             SvNOKp_on(sv);
2500 #else
2501         /* Only set the public NV OK flag if this NV preserves the IV  */
2502         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2503         if (SvIOK(sv) &&
2504             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2505                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2506             SvNOK_on(sv);
2507         else
2508             SvNOKp_on(sv);
2509 #endif
2510     }
2511     else if (SvPOKp(sv) && SvLEN(sv)) {
2512         UV value;
2513         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2514         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2515             not_a_number(sv);
2516 #ifdef NV_PRESERVES_UV
2517         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2518             == IS_NUMBER_IN_UV) {
2519             /* It's definitely an integer */
2520             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2521         } else
2522             SvNV_set(sv, Atof(SvPVX_const(sv)));
2523         if (numtype)
2524             SvNOK_on(sv);
2525         else
2526             SvNOKp_on(sv);
2527 #else
2528         SvNV_set(sv, Atof(SvPVX_const(sv)));
2529         /* Only set the public NV OK flag if this NV preserves the value in
2530            the PV at least as well as an IV/UV would.
2531            Not sure how to do this 100% reliably. */
2532         /* if that shift count is out of range then Configure's test is
2533            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2534            UV_BITS */
2535         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2536             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2537             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2538         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2539             /* Can't use strtol etc to convert this string, so don't try.
2540                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2541             SvNOK_on(sv);
2542         } else {
2543             /* value has been set.  It may not be precise.  */
2544             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2545                 /* 2s complement assumption for (UV)IV_MIN  */
2546                 SvNOK_on(sv); /* Integer is too negative.  */
2547             } else {
2548                 SvNOKp_on(sv);
2549                 SvIOKp_on(sv);
2550
2551                 if (numtype & IS_NUMBER_NEG) {
2552                     SvIV_set(sv, -(IV)value);
2553                 } else if (value <= (UV)IV_MAX) {
2554                     SvIV_set(sv, (IV)value);
2555                 } else {
2556                     SvUV_set(sv, value);
2557                     SvIsUV_on(sv);
2558                 }
2559
2560                 if (numtype & IS_NUMBER_NOT_INT) {
2561                     /* I believe that even if the original PV had decimals,
2562                        they are lost beyond the limit of the FP precision.
2563                        However, neither is canonical, so both only get p
2564                        flags.  NWC, 2000/11/25 */
2565                     /* Both already have p flags, so do nothing */
2566                 } else {
2567                     const NV nv = SvNVX(sv);
2568                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2569                         if (SvIVX(sv) == I_V(nv)) {
2570                             SvNOK_on(sv);
2571                         } else {
2572                             /* It had no "." so it must be integer.  */
2573                         }
2574                         SvIOK_on(sv);
2575                     } else {
2576                         /* between IV_MAX and NV(UV_MAX).
2577                            Could be slightly > UV_MAX */
2578
2579                         if (numtype & IS_NUMBER_NOT_INT) {
2580                             /* UV and NV both imprecise.  */
2581                         } else {
2582                             const UV nv_as_uv = U_V(nv);
2583
2584                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2585                                 SvNOK_on(sv);
2586                             }
2587                             SvIOK_on(sv);
2588                         }
2589                     }
2590                 }
2591             }
2592         }
2593         /* It might be more code efficient to go through the entire logic above
2594            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2595            gets complex and potentially buggy, so more programmer efficient
2596            to do it this way, by turning off the public flags:  */
2597         if (!numtype)
2598             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2599 #endif /* NV_PRESERVES_UV */
2600     }
2601     else  {
2602         if (isGV_with_GP(sv)) {
2603             glob_2number(MUTABLE_GV(sv));
2604             return 0.0;
2605         }
2606
2607         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2608             report_uninit(sv);
2609         assert (SvTYPE(sv) >= SVt_NV);
2610         /* Typically the caller expects that sv_any is not NULL now.  */
2611         /* XXX Ilya implies that this is a bug in callers that assume this
2612            and ideally should be fixed.  */
2613         return 0.0;
2614     }
2615 #if defined(USE_LONG_DOUBLE)
2616     DEBUG_c({
2617         STORE_NUMERIC_LOCAL_SET_STANDARD();
2618         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2619                       PTR2UV(sv), SvNVX(sv));
2620         RESTORE_NUMERIC_LOCAL();
2621     });
2622 #else
2623     DEBUG_c({
2624         STORE_NUMERIC_LOCAL_SET_STANDARD();
2625         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2626                       PTR2UV(sv), SvNVX(sv));
2627         RESTORE_NUMERIC_LOCAL();
2628     });
2629 #endif
2630     return SvNVX(sv);
2631 }
2632
2633 /*
2634 =for apidoc sv_2num
2635
2636 Return an SV with the numeric value of the source SV, doing any necessary
2637 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2638 access this function.
2639
2640 =cut
2641 */
2642
2643 SV *
2644 Perl_sv_2num(pTHX_ register SV *const sv)
2645 {
2646     PERL_ARGS_ASSERT_SV_2NUM;
2647
2648     if (!SvROK(sv))
2649         return sv;
2650     if (SvAMAGIC(sv)) {
2651         SV * const tmpsv = AMG_CALLun(sv,numer);
2652         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2653         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2654             return sv_2num(tmpsv);
2655     }
2656     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2657 }
2658
2659 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2660  * UV as a string towards the end of buf, and return pointers to start and
2661  * end of it.
2662  *
2663  * We assume that buf is at least TYPE_CHARS(UV) long.
2664  */
2665
2666 static char *
2667 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2668 {
2669     char *ptr = buf + TYPE_CHARS(UV);
2670     char * const ebuf = ptr;
2671     int sign;
2672
2673     PERL_ARGS_ASSERT_UIV_2BUF;
2674
2675     if (is_uv)
2676         sign = 0;
2677     else if (iv >= 0) {
2678         uv = iv;
2679         sign = 0;
2680     } else {
2681         uv = -iv;
2682         sign = 1;
2683     }
2684     do {
2685         *--ptr = '0' + (char)(uv % 10);
2686     } while (uv /= 10);
2687     if (sign)
2688         *--ptr = '-';
2689     *peob = ebuf;
2690     return ptr;
2691 }
2692
2693 /*
2694 =for apidoc sv_2pv_flags
2695
2696 Returns a pointer to the string value of an SV, and sets *lp to its length.
2697 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2698 if necessary.
2699 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2700 usually end up here too.
2701
2702 =cut
2703 */
2704
2705 char *
2706 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2707 {
2708     dVAR;
2709     register char *s;
2710
2711     if (!sv) {
2712         if (lp)
2713             *lp = 0;
2714         return (char *)"";
2715     }
2716     if (SvGMAGICAL(sv)) {
2717         if (flags & SV_GMAGIC)
2718             mg_get(sv);
2719         if (SvPOKp(sv)) {
2720             if (lp)
2721                 *lp = SvCUR(sv);
2722             if (flags & SV_MUTABLE_RETURN)
2723                 return SvPVX_mutable(sv);
2724             if (flags & SV_CONST_RETURN)
2725                 return (char *)SvPVX_const(sv);
2726             return SvPVX(sv);
2727         }
2728         if (SvIOKp(sv) || SvNOKp(sv)) {
2729             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2730             STRLEN len;
2731
2732             if (SvIOKp(sv)) {
2733                 len = SvIsUV(sv)
2734                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2735                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2736             } else if(SvNVX(sv) == 0.0) {
2737                     tbuf[0] = '0';
2738                     tbuf[1] = 0;
2739                     len = 1;
2740             } else {
2741                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2742                 len = strlen(tbuf);
2743             }
2744             assert(!SvROK(sv));
2745             {
2746                 dVAR;
2747
2748                 SvUPGRADE(sv, SVt_PV);
2749                 if (lp)
2750                     *lp = len;
2751                 s = SvGROW_mutable(sv, len + 1);
2752                 SvCUR_set(sv, len);
2753                 SvPOKp_on(sv);
2754                 return (char*)memcpy(s, tbuf, len + 1);
2755             }
2756         }
2757         if (SvROK(sv)) {
2758             goto return_rok;
2759         }
2760         assert(SvTYPE(sv) >= SVt_PVMG);
2761         /* This falls through to the report_uninit near the end of the
2762            function. */
2763     } else if (SvTHINKFIRST(sv)) {
2764         if (SvROK(sv)) {
2765         return_rok:
2766             if (SvAMAGIC(sv)) {
2767                 SV *tmpstr;
2768                 if (flags & SV_SKIP_OVERLOAD)
2769                     return NULL;
2770                 tmpstr = AMG_CALLun(sv,string);
2771                 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2772                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2773                     /* Unwrap this:  */
2774                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2775                      */
2776
2777                     char *pv;
2778                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2779                         if (flags & SV_CONST_RETURN) {
2780                             pv = (char *) SvPVX_const(tmpstr);
2781                         } else {
2782                             pv = (flags & SV_MUTABLE_RETURN)
2783                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2784                         }
2785                         if (lp)
2786                             *lp = SvCUR(tmpstr);
2787                     } else {
2788                         pv = sv_2pv_flags(tmpstr, lp, flags);
2789                     }
2790                     if (SvUTF8(tmpstr))
2791                         SvUTF8_on(sv);
2792                     else
2793                         SvUTF8_off(sv);
2794                     return pv;
2795                 }
2796             }
2797             {
2798                 STRLEN len;
2799                 char *retval;
2800                 char *buffer;
2801                 SV *const referent = SvRV(sv);
2802
2803                 if (!referent) {
2804                     len = 7;
2805                     retval = buffer = savepvn("NULLREF", len);
2806                 } else if (SvTYPE(referent) == SVt_REGEXP) {
2807                     REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2808                     I32 seen_evals = 0;
2809
2810                     assert(re);
2811                         
2812                     /* If the regex is UTF-8 we want the containing scalar to
2813                        have an UTF-8 flag too */
2814                     if (RX_UTF8(re))
2815                         SvUTF8_on(sv);
2816                     else
2817                         SvUTF8_off(sv); 
2818
2819                     if ((seen_evals = RX_SEEN_EVALS(re)))
2820                         PL_reginterp_cnt += seen_evals;
2821
2822                     if (lp)
2823                         *lp = RX_WRAPLEN(re);
2824  
2825                     return RX_WRAPPED(re);
2826                 } else {
2827                     const char *const typestr = sv_reftype(referent, 0);
2828                     const STRLEN typelen = strlen(typestr);
2829                     UV addr = PTR2UV(referent);
2830                     const char *stashname = NULL;
2831                     STRLEN stashnamelen = 0; /* hush, gcc */
2832                     const char *buffer_end;
2833
2834                     if (SvOBJECT(referent)) {
2835                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2836
2837                         if (name) {
2838                             stashname = HEK_KEY(name);
2839                             stashnamelen = HEK_LEN(name);
2840
2841                             if (HEK_UTF8(name)) {
2842                                 SvUTF8_on(sv);
2843                             } else {
2844                                 SvUTF8_off(sv);
2845                             }
2846                         } else {
2847                             stashname = "__ANON__";
2848                             stashnamelen = 8;
2849                         }
2850                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2851                             + 2 * sizeof(UV) + 2 /* )\0 */;
2852                     } else {
2853                         len = typelen + 3 /* (0x */
2854                             + 2 * sizeof(UV) + 2 /* )\0 */;
2855                     }
2856
2857                     Newx(buffer, len, char);
2858                     buffer_end = retval = buffer + len;
2859
2860                     /* Working backwards  */
2861                     *--retval = '\0';
2862                     *--retval = ')';
2863                     do {
2864                         *--retval = PL_hexdigit[addr & 15];
2865                     } while (addr >>= 4);
2866                     *--retval = 'x';
2867                     *--retval = '0';
2868                     *--retval = '(';
2869
2870                     retval -= typelen;
2871                     memcpy(retval, typestr, typelen);
2872
2873                     if (stashname) {
2874                         *--retval = '=';
2875                         retval -= stashnamelen;
2876                         memcpy(retval, stashname, stashnamelen);
2877                     }
2878                     /* retval may not neccesarily have reached the start of the
2879                        buffer here.  */
2880                     assert (retval >= buffer);
2881
2882                     len = buffer_end - retval - 1; /* -1 for that \0  */
2883                 }
2884                 if (lp)
2885                     *lp = len;
2886                 SAVEFREEPV(buffer);
2887                 return retval;
2888             }
2889         }
2890         if (SvREADONLY(sv) && !SvOK(sv)) {
2891             if (lp)
2892                 *lp = 0;
2893             if (flags & SV_UNDEF_RETURNS_NULL)
2894                 return NULL;
2895             if (ckWARN(WARN_UNINITIALIZED))
2896                 report_uninit(sv);
2897             return (char *)"";
2898         }
2899     }
2900     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2901         /* I'm assuming that if both IV and NV are equally valid then
2902            converting the IV is going to be more efficient */
2903         const U32 isUIOK = SvIsUV(sv);
2904         char buf[TYPE_CHARS(UV)];
2905         char *ebuf, *ptr;
2906         STRLEN len;
2907
2908         if (SvTYPE(sv) < SVt_PVIV)
2909             sv_upgrade(sv, SVt_PVIV);
2910         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2911         len = ebuf - ptr;
2912         /* inlined from sv_setpvn */
2913         s = SvGROW_mutable(sv, len + 1);
2914         Move(ptr, s, len, char);
2915         s += len;
2916         *s = '\0';
2917     }
2918     else if (SvNOKp(sv)) {
2919         if (SvTYPE(sv) < SVt_PVNV)
2920             sv_upgrade(sv, SVt_PVNV);
2921         if (SvNVX(sv) == 0.0) {
2922             s = SvGROW_mutable(sv, 2);
2923             *s++ = '0';
2924             *s = '\0';
2925         } else {
2926             dSAVE_ERRNO;
2927             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2928             s = SvGROW_mutable(sv, NV_DIG + 20);
2929             /* some Xenix systems wipe out errno here */
2930             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2931             RESTORE_ERRNO;
2932             while (*s) s++;
2933         }
2934 #ifdef hcx
2935         if (s[-1] == '.')
2936             *--s = '\0';
2937 #endif
2938     }
2939     else {
2940         if (isGV_with_GP(sv)) {
2941             GV *const gv = MUTABLE_GV(sv);
2942             const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2943             SV *const buffer = sv_newmortal();
2944
2945             /* FAKE globs can get coerced, so need to turn this off temporarily
2946                if it is on.  */
2947             SvFAKE_off(gv);
2948             gv_efullname3(buffer, gv, "*");
2949             SvFLAGS(gv) |= wasfake;
2950
2951             if (SvPOK(buffer)) {
2952                 if (lp) {
2953                     *lp = SvCUR(buffer);
2954                 }
2955                 return SvPVX(buffer);
2956             }
2957             else {
2958                 if (lp)
2959                     *lp = 0;
2960                 return (char *)"";
2961             }
2962         }
2963
2964         if (lp)
2965             *lp = 0;
2966         if (flags & SV_UNDEF_RETURNS_NULL)
2967             return NULL;
2968         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2969             report_uninit(sv);
2970         if (SvTYPE(sv) < SVt_PV)
2971             /* Typically the caller expects that sv_any is not NULL now.  */
2972             sv_upgrade(sv, SVt_PV);
2973         return (char *)"";
2974     }
2975     {
2976         const STRLEN len = s - SvPVX_const(sv);
2977         if (lp) 
2978             *lp = len;
2979         SvCUR_set(sv, len);
2980     }
2981     SvPOK_on(sv);
2982     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2983                           PTR2UV(sv),SvPVX_const(sv)));
2984     if (flags & SV_CONST_RETURN)
2985         return (char *)SvPVX_const(sv);
2986     if (flags & SV_MUTABLE_RETURN)
2987         return SvPVX_mutable(sv);
2988     return SvPVX(sv);
2989 }
2990
2991 /*
2992 =for apidoc sv_copypv
2993
2994 Copies a stringified representation of the source SV into the
2995 destination SV.  Automatically performs any necessary mg_get and
2996 coercion of numeric values into strings.  Guaranteed to preserve
2997 UTF8 flag even from overloaded objects.  Similar in nature to
2998 sv_2pv[_flags] but operates directly on an SV instead of just the
2999 string.  Mostly uses sv_2pv_flags to do its work, except when that
3000 would lose the UTF-8'ness of the PV.
3001
3002 =cut
3003 */
3004
3005 void
3006 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3007 {
3008     STRLEN len;
3009     const char * const s = SvPV_const(ssv,len);
3010
3011     PERL_ARGS_ASSERT_SV_COPYPV;
3012
3013     sv_setpvn(dsv,s,len);
3014     if (SvUTF8(ssv))
3015         SvUTF8_on(dsv);
3016     else
3017         SvUTF8_off(dsv);
3018 }
3019
3020 /*
3021 =for apidoc sv_2pvbyte
3022
3023 Return a pointer to the byte-encoded representation of the SV, and set *lp
3024 to its length.  May cause the SV to be downgraded from UTF-8 as a
3025 side-effect.
3026
3027 Usually accessed via the C<SvPVbyte> macro.
3028
3029 =cut
3030 */
3031
3032 char *
3033 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3034 {
3035     PERL_ARGS_ASSERT_SV_2PVBYTE;
3036
3037     sv_utf8_downgrade(sv,0);
3038     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3039 }
3040
3041 /*
3042 =for apidoc sv_2pvutf8
3043
3044 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3045 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3046
3047 Usually accessed via the C<SvPVutf8> macro.
3048
3049 =cut
3050 */
3051
3052 char *
3053 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3054 {
3055     PERL_ARGS_ASSERT_SV_2PVUTF8;
3056
3057     sv_utf8_upgrade(sv);
3058     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3059 }
3060
3061
3062 /*
3063 =for apidoc sv_2bool
3064
3065 This macro is only used by sv_true() or its macro equivalent, and only if
3066 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3067 It calls sv_2bool_flags with the SV_GMAGIC flag.
3068
3069 =for apidoc sv_2bool_flags
3070
3071 This function is only used by sv_true() and friends,  and only if
3072 the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
3073 contain SV_GMAGIC, then it does an mg_get() first.
3074
3075
3076 =cut
3077 */
3078
3079 bool
3080 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3081 {
3082     dVAR;
3083
3084     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3085
3086     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3087
3088     if (!SvOK(sv))
3089         return 0;
3090     if (SvROK(sv)) {
3091         if (SvAMAGIC(sv)) {
3092             SV * const tmpsv = AMG_CALLun(sv,bool_);
3093             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3094                 return cBOOL(SvTRUE(tmpsv));
3095         }
3096         return SvRV(sv) != 0;
3097     }
3098     if (SvPOKp(sv)) {
3099         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3100         if (Xpvtmp &&
3101                 (*sv->sv_u.svu_pv > '0' ||
3102                 Xpvtmp->xpv_cur > 1 ||
3103                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3104             return 1;
3105         else
3106             return 0;
3107     }
3108     else {
3109         if (SvIOKp(sv))
3110             return SvIVX(sv) != 0;
3111         else {
3112             if (SvNOKp(sv))
3113                 return SvNVX(sv) != 0.0;
3114             else {
3115                 if (isGV_with_GP(sv))
3116                     return TRUE;
3117                 else
3118                     return FALSE;
3119             }
3120         }
3121     }
3122 }
3123
3124 /*
3125 =for apidoc sv_utf8_upgrade
3126
3127 Converts the PV of an SV to its UTF-8-encoded form.
3128 Forces the SV to string form if it is not already.
3129 Will C<mg_get> on C<sv> if appropriate.
3130 Always sets the SvUTF8 flag to avoid future validity checks even
3131 if the whole string is the same in UTF-8 as not.
3132 Returns the number of bytes in the converted string
3133
3134 This is not as a general purpose byte encoding to Unicode interface:
3135 use the Encode extension for that.
3136
3137 =for apidoc sv_utf8_upgrade_nomg
3138
3139 Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3140
3141 =for apidoc sv_utf8_upgrade_flags
3142
3143 Converts the PV of an SV to its UTF-8-encoded form.
3144 Forces the SV to string form if it is not already.
3145 Always sets the SvUTF8 flag to avoid future validity checks even
3146 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3147 will C<mg_get> on C<sv> if appropriate, else not.
3148 Returns the number of bytes in the converted string
3149 C<sv_utf8_upgrade> and
3150 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3151
3152 This is not as a general purpose byte encoding to Unicode interface:
3153 use the Encode extension for that.
3154
3155 =cut
3156
3157 The grow version is currently not externally documented.  It adds a parameter,
3158 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3159 have free after it upon return.  This allows the caller to reserve extra space
3160 that it intends to fill, to avoid extra grows.
3161
3162 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3163 which can be used to tell this function to not first check to see if there are
3164 any characters that are different in UTF-8 (variant characters) which would
3165 force it to allocate a new string to sv, but to assume there are.  Typically
3166 this flag is used by a routine that has already parsed the string to find that
3167 there are such characters, and passes this information on so that the work
3168 doesn't have to be repeated.
3169
3170 (One might think that the calling routine could pass in the position of the
3171 first such variant, so it wouldn't have to be found again.  But that is not the
3172 case, because typically when the caller is likely to use this flag, it won't be
3173 calling this routine unless it finds something that won't fit into a byte.
3174 Otherwise it tries to not upgrade and just use bytes.  But some things that
3175 do fit into a byte are variants in utf8, and the caller may not have been
3176 keeping track of these.)
3177
3178 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3179 isn't guaranteed due to having other routines do the work in some input cases,
3180 or if the input is already flagged as being in utf8.
3181
3182 The speed of this could perhaps be improved for many cases if someone wanted to
3183 write a fast function that counts the number of variant characters in a string,
3184 especially if it could return the position of the first one.
3185
3186 */
3187
3188 STRLEN
3189 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3190 {
3191     dVAR;
3192
3193     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3194
3195     if (sv == &PL_sv_undef)
3196         return 0;
3197     if (!SvPOK(sv)) {
3198         STRLEN len = 0;
3199         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3200             (void) sv_2pv_flags(sv,&len, flags);
3201             if (SvUTF8(sv)) {
3202                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3203                 return len;
3204             }
3205         } else {
3206             (void) SvPV_force(sv,len);
3207         }
3208     }
3209
3210     if (SvUTF8(sv)) {
3211         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3212         return SvCUR(sv);
3213     }
3214
3215     if (SvIsCOW(sv)) {
3216         sv_force_normal_flags(sv, 0);
3217     }
3218
3219     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3220         sv_recode_to_utf8(sv, PL_encoding);
3221         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3222         return SvCUR(sv);
3223     }
3224
3225     if (SvCUR(sv) == 0) {
3226         if (extra) SvGROW(sv, extra);
3227     } else { /* Assume Latin-1/EBCDIC */
3228         /* This function could be much more efficient if we
3229          * had a FLAG in SVs to signal if there are any variant
3230          * chars in the PV.  Given that there isn't such a flag
3231          * make the loop as fast as possible (although there are certainly ways
3232          * to speed this up, eg. through vectorization) */
3233         U8 * s = (U8 *) SvPVX_const(sv);
3234         U8 * e = (U8 *) SvEND(sv);
3235         U8 *t = s;
3236         STRLEN two_byte_count = 0;
3237         
3238         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3239
3240         /* See if really will need to convert to utf8.  We mustn't rely on our
3241          * incoming SV being well formed and having a trailing '\0', as certain
3242          * code in pp_formline can send us partially built SVs. */
3243
3244         while (t < e) {
3245             const U8 ch = *t++;
3246             if (NATIVE_IS_INVARIANT(ch)) continue;
3247
3248             t--;    /* t already incremented; re-point to first variant */
3249             two_byte_count = 1;
3250             goto must_be_utf8;
3251         }
3252
3253         /* utf8 conversion not needed because all are invariants.  Mark as
3254          * UTF-8 even if no variant - saves scanning loop */
3255         SvUTF8_on(sv);
3256         return SvCUR(sv);
3257
3258 must_be_utf8:
3259
3260         /* Here, the string should be converted to utf8, either because of an
3261          * input flag (two_byte_count = 0), or because a character that
3262          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3263          * the beginning of the string (if we didn't examine anything), or to
3264          * the first variant.  In either case, everything from s to t - 1 will
3265          * occupy only 1 byte each on output.
3266          *
3267          * There are two main ways to convert.  One is to create a new string
3268          * and go through the input starting from the beginning, appending each
3269          * converted value onto the new string as we go along.  It's probably
3270          * best to allocate enough space in the string for the worst possible
3271          * case rather than possibly running out of space and having to
3272          * reallocate and then copy what we've done so far.  Since everything
3273          * from s to t - 1 is invariant, the destination can be initialized
3274          * with these using a fast memory copy
3275          *
3276          * The other way is to figure out exactly how big the string should be
3277          * by parsing the entire input.  Then you don't have to make it big
3278          * enough to handle the worst possible case, and more importantly, if
3279          * the string you already have is large enough, you don't have to
3280          * allocate a new string, you can copy the last character in the input
3281          * string to the final position(s) that will be occupied by the
3282          * converted string and go backwards, stopping at t, since everything
3283          * before that is invariant.
3284          *
3285          * There are advantages and disadvantages to each method.
3286          *
3287          * In the first method, we can allocate a new string, do the memory
3288          * copy from the s to t - 1, and then proceed through the rest of the
3289          * string byte-by-byte.
3290          *
3291          * In the second method, we proceed through the rest of the input
3292          * string just calculating how big the converted string will be.  Then
3293          * there are two cases:
3294          *  1)  if the string has enough extra space to handle the converted
3295          *      value.  We go backwards through the string, converting until we
3296          *      get to the position we are at now, and then stop.  If this
3297          *      position is far enough along in the string, this method is
3298          *      faster than the other method.  If the memory copy were the same
3299          *      speed as the byte-by-byte loop, that position would be about
3300          *      half-way, as at the half-way mark, parsing to the end and back
3301          *      is one complete string's parse, the same amount as starting
3302          *      over and going all the way through.  Actually, it would be
3303          *      somewhat less than half-way, as it's faster to just count bytes
3304          *      than to also copy, and we don't have the overhead of allocating
3305          *      a new string, changing the scalar to use it, and freeing the
3306          *      existing one.  But if the memory copy is fast, the break-even
3307          *      point is somewhere after half way.  The counting loop could be
3308          *      sped up by vectorization, etc, to move the break-even point
3309          *      further towards the beginning.
3310          *  2)  if the string doesn't have enough space to handle the converted
3311          *      value.  A new string will have to be allocated, and one might
3312          *      as well, given that, start from the beginning doing the first
3313          *      method.  We've spent extra time parsing the string and in
3314          *      exchange all we've gotten is that we know precisely how big to
3315          *      make the new one.  Perl is more optimized for time than space,
3316          *      so this case is a loser.
3317          * So what I've decided to do is not use the 2nd method unless it is
3318          * guaranteed that a new string won't have to be allocated, assuming
3319          * the worst case.  I also decided not to put any more conditions on it
3320          * than this, for now.  It seems likely that, since the worst case is
3321          * twice as big as the unknown portion of the string (plus 1), we won't
3322          * be guaranteed enough space, causing us to go to the first method,
3323          * unless the string is short, or the first variant character is near
3324          * the end of it.  In either of these cases, it seems best to use the
3325          * 2nd method.  The only circumstance I can think of where this would
3326          * be really slower is if the string had once had much more data in it
3327          * than it does now, but there is still a substantial amount in it  */
3328
3329         {
3330             STRLEN invariant_head = t - s;
3331             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3332             if (SvLEN(sv) < size) {
3333
3334                 /* Here, have decided to allocate a new string */
3335
3336                 U8 *dst;
3337                 U8 *d;
3338
3339                 Newx(dst, size, U8);
3340
3341                 /* If no known invariants at the beginning of the input string,
3342                  * set so starts from there.  Otherwise, can use memory copy to
3343                  * get up to where we are now, and then start from here */
3344
3345                 if (invariant_head <= 0) {
3346                     d = dst;
3347                 } else {
3348                     Copy(s, dst, invariant_head, char);
3349                     d = dst + invariant_head;
3350                 }
3351
3352                 while (t < e) {
3353                     const UV uv = NATIVE8_TO_UNI(*t++);
3354                     if (UNI_IS_INVARIANT(uv))
3355                         *d++ = (U8)UNI_TO_NATIVE(uv);
3356                     else {
3357                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3358                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3359                     }
3360                 }
3361                 *d = '\0';
3362                 SvPV_free(sv); /* No longer using pre-existing string */
3363                 SvPV_set(sv, (char*)dst);
3364                 SvCUR_set(sv, d - dst);
3365                 SvLEN_set(sv, size);
3366             } else {
3367
3368                 /* Here, have decided to get the exact size of the string.
3369                  * Currently this happens only when we know that there is
3370                  * guaranteed enough space to fit the converted string, so
3371                  * don't have to worry about growing.  If two_byte_count is 0,
3372                  * then t points to the first byte of the string which hasn't
3373                  * been examined yet.  Otherwise two_byte_count is 1, and t
3374                  * points to the first byte in the string that will expand to
3375                  * two.  Depending on this, start examining at t or 1 after t.
3376                  * */
3377
3378                 U8 *d = t + two_byte_count;
3379
3380
3381                 /* Count up the remaining bytes that expand to two */
3382
3383                 while (d < e) {
3384                     const U8 chr = *d++;
3385                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3386                 }
3387
3388                 /* The string will expand by just the number of bytes that
3389                  * occupy two positions.  But we are one afterwards because of
3390                  * the increment just above.  This is the place to put the
3391                  * trailing NUL, and to set the length before we decrement */
3392
3393                 d += two_byte_count;
3394                 SvCUR_set(sv, d - s);
3395                 *d-- = '\0';
3396
3397
3398                 /* Having decremented d, it points to the position to put the
3399                  * very last byte of the expanded string.  Go backwards through
3400                  * the string, copying and expanding as we go, stopping when we
3401                  * get to the part that is invariant the rest of the way down */
3402
3403                 e--;
3404                 while (e >= t) {
3405                     const U8 ch = NATIVE8_TO_UNI(*e--);
3406                     if (UNI_IS_INVARIANT(ch)) {
3407                         *d-- = UNI_TO_NATIVE(ch);
3408                     } else {
3409                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3410                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3411                     }
3412                 }
3413             }
3414         }
3415     }
3416
3417     /* Mark as UTF-8 even if no variant - saves scanning loop */
3418     SvUTF8_on(sv);
3419     return SvCUR(sv);
3420 }
3421
3422 /*
3423 =for apidoc sv_utf8_downgrade
3424
3425 Attempts to convert the PV of an SV from characters to bytes.
3426 If the PV contains a character that cannot fit
3427 in a byte, this conversion will fail;
3428 in this case, either returns false or, if C<fail_ok> is not
3429 true, croaks.
3430
3431 This is not as a general purpose Unicode to byte encoding interface:
3432 use the Encode extension for that.
3433
3434 =cut
3435 */
3436
3437 bool
3438 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3439 {
3440     dVAR;
3441
3442     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3443
3444     if (SvPOKp(sv) && SvUTF8(sv)) {
3445         if (SvCUR(sv)) {
3446             U8 *s;
3447             STRLEN len;
3448
3449             if (SvIsCOW(sv)) {
3450                 sv_force_normal_flags(sv, 0);
3451             }
3452             s = (U8 *) SvPV(sv, len);
3453             if (!utf8_to_bytes(s, &len)) {
3454                 if (fail_ok)
3455                     return FALSE;
3456                 else {
3457                     if (PL_op)
3458                         Perl_croak(aTHX_ "Wide character in %s",
3459                                    OP_DESC(PL_op));
3460                     else
3461                         Perl_croak(aTHX_ "Wide character");
3462                 }
3463             }
3464             SvCUR_set(sv, len);
3465         }
3466     }
3467     SvUTF8_off(sv);
3468     return TRUE;
3469 }
3470
3471 /*
3472 =for apidoc sv_utf8_encode
3473
3474 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3475 flag off so that it looks like octets again.
3476
3477 =cut
3478 */
3479
3480 void
3481 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3482 {
3483     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3484
3485     if (SvIsCOW(sv)) {
3486         sv_force_normal_flags(sv, 0);
3487     }
3488     if (SvREADONLY(sv)) {
3489         Perl_croak_no_modify(aTHX);
3490     }
3491     (void) sv_utf8_upgrade(sv);
3492     SvUTF8_off(sv);
3493 }
3494
3495 /*
3496 =for apidoc sv_utf8_decode
3497
3498 If the PV of the SV is an octet sequence in UTF-8
3499 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3500 so that it looks like a character. If the PV contains only single-byte
3501 characters, the C<SvUTF8> flag stays being off.
3502 Scans PV for validity and returns false if the PV is invalid UTF-8.
3503
3504 =cut
3505 */
3506
3507 bool
3508 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3509 {
3510     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3511
3512     if (SvPOKp(sv)) {
3513         const U8 *c;
3514         const U8 *e;
3515
3516         /* The octets may have got themselves encoded - get them back as
3517          * bytes
3518          */
3519         if (!sv_utf8_downgrade(sv, TRUE))
3520             return FALSE;
3521
3522         /* it is actually just a matter of turning the utf8 flag on, but
3523          * we want to make sure everything inside is valid utf8 first.
3524          */
3525         c = (const U8 *) SvPVX_const(sv);
3526         if (!is_utf8_string(c, SvCUR(sv)+1))
3527             return FALSE;
3528         e = (const U8 *) SvEND(sv);
3529         while (c < e) {
3530             const U8 ch = *c++;
3531             if (!UTF8_IS_INVARIANT(ch)) {
3532                 SvUTF8_on(sv);
3533                 break;
3534             }
3535         }
3536     }
3537     return TRUE;
3538 }
3539
3540 /*
3541 =for apidoc sv_setsv
3542
3543 Copies the contents of the source SV C<ssv> into the destination SV
3544 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3545 function if the source SV needs to be reused. Does not handle 'set' magic.
3546 Loosely speaking, it performs a copy-by-value, obliterating any previous
3547 content of the destination.
3548
3549 You probably want to use one of the assortment of wrappers, such as
3550 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3551 C<SvSetMagicSV_nosteal>.
3552
3553 =for apidoc sv_setsv_flags
3554
3555 Copies the contents of the source SV C<ssv> into the destination SV
3556 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3557 function if the source SV needs to be reused. Does not handle 'set' magic.
3558 Loosely speaking, it performs a copy-by-value, obliterating any previous
3559 content of the destination.
3560 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3561 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3562 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3563 and C<sv_setsv_nomg> are implemented in terms of this function.
3564
3565 You probably want to use one of the assortment of wrappers, such as
3566 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3567 C<SvSetMagicSV_nosteal>.
3568
3569 This is the primary function for copying scalars, and most other
3570 copy-ish functions and macros use this underneath.
3571
3572 =cut
3573 */
3574
3575 static void
3576 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3577 {
3578     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3579     HV *old_stash = NULL;
3580
3581     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3582
3583     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3584         const char * const name = GvNAME(sstr);
3585         const STRLEN len = GvNAMELEN(sstr);
3586         {
3587             if (dtype >= SVt_PV) {
3588                 SvPV_free(dstr);
3589                 SvPV_set(dstr, 0);
3590                 SvLEN_set(dstr, 0);
3591                 SvCUR_set(dstr, 0);
3592             }
3593             SvUPGRADE(dstr, SVt_PVGV);
3594             (void)SvOK_off(dstr);
3595             /* FIXME - why are we doing this, then turning it off and on again
3596                below?  */
3597             isGV_with_GP_on(dstr);
3598         }
3599         GvSTASH(dstr) = GvSTASH(sstr);
3600         if (GvSTASH(dstr))
3601             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3602         gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
3603         SvFAKE_on(dstr);        /* can coerce to non-glob */
3604     }
3605
3606     if(GvGP(MUTABLE_GV(sstr))) {
3607         /* If source has method cache entry, clear it */
3608         if(GvCVGEN(sstr)) {
3609             SvREFCNT_dec(GvCV(sstr));
3610             GvCV(sstr) = NULL;
3611             GvCVGEN(sstr) = 0;
3612         }
3613         /* If source has a real method, then a method is
3614            going to change */
3615         else if(GvCV((const GV *)sstr)) {
3616             mro_changes = 1;
3617         }
3618     }
3619
3620     /* If dest already had a real method, that's a change as well */
3621     if(!mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)) {
3622         mro_changes = 1;
3623     }
3624
3625     /* We don’t need to check the name of the destination if it was not a
3626        glob to begin with. */
3627     if(dtype == SVt_PVGV) {
3628         const char * const name = GvNAME((const GV *)dstr);
3629         if(strEQ(name,"ISA"))
3630             mro_changes = 2;
3631         else {
3632             const STRLEN len = GvNAMELEN(dstr);
3633             if (len > 1 && name[len-2] == ':' && name[len-1] == ':') {
3634                 mro_changes = 3;
3635
3636                 /* Set aside the old stash, so we can reset isa caches on
3637                    its subclasses. */
3638                 old_stash = GvHV(dstr);
3639             }
3640         }
3641     }
3642
3643     gp_free(MUTABLE_GV(dstr));
3644     isGV_with_GP_off(dstr);
3645     (void)SvOK_off(dstr);
3646     isGV_with_GP_on(dstr);
3647     GvINTRO_off(dstr);          /* one-shot flag */
3648     GvGP(dstr) = gp_ref(GvGP(sstr));
3649     if (SvTAINTED(sstr))
3650         SvTAINT(dstr);
3651     if (GvIMPORTED(dstr) != GVf_IMPORTED
3652         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3653         {
3654             GvIMPORTED_on(dstr);
3655         }
3656     GvMULTI_on(dstr);
3657     if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3658     else if(mro_changes == 3) {
3659         HV * const stash = GvHV(dstr);
3660         if((stash && HvNAME(stash)) || (old_stash && HvNAME(old_stash)))
3661             mro_package_moved(
3662                 stash && HvNAME(stash) ? stash : NULL,
3663                 old_stash && HvNAME(old_stash) ? old_stash : NULL,
3664                 (GV *)dstr, NULL, 0
3665             );
3666     }
3667     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3668     return;
3669 }
3670
3671 static void
3672 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3673 {
3674     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3675     SV *dref = NULL;
3676     const int intro = GvINTRO(dstr);
3677     SV **location;
3678     U8 import_flag = 0;
3679     const U32 stype = SvTYPE(sref);
3680
3681     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3682
3683     if (intro) {
3684         GvINTRO_off(dstr);      /* one-shot flag */
3685         GvLINE(dstr) = CopLINE(PL_curcop);
3686         GvEGV(dstr) = MUTABLE_GV(dstr);
3687     }
3688     GvMULTI_on(dstr);
3689     switch (stype) {
3690     case SVt_PVCV:
3691         location = (SV **) &GvCV(dstr);
3692         import_flag = GVf_IMPORTED_CV;
3693         goto common;
3694     case SVt_PVHV:
3695         location = (SV **) &GvHV(dstr);
3696         import_flag = GVf_IMPORTED_HV;
3697         goto common;
3698     case SVt_PVAV:
3699         location = (SV **) &GvAV(dstr);
3700         import_flag = GVf_IMPORTED_AV;
3701         goto common;
3702     case SVt_PVIO:
3703         location = (SV **) &GvIOp(dstr);
3704         goto common;
3705     case SVt_PVFM:
3706         location = (SV **) &GvFORM(dstr);
3707         goto common;
3708     default:
3709         location = &GvSV(dstr);
3710         import_flag = GVf_IMPORTED_SV;
3711     common:
3712         if (intro) {
3713             if (stype == SVt_PVCV) {
3714                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3715                 if (GvCVGEN(dstr)) {
3716                     SvREFCNT_dec(GvCV(dstr));
3717                     GvCV(dstr) = NULL;
3718                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3719                 }
3720             }
3721             SAVEGENERICSV(*location);
3722         }
3723         else
3724             dref = *location;
3725         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3726             CV* const cv = MUTABLE_CV(*location);
3727             if (cv) {
3728                 if (!GvCVGEN((const GV *)dstr) &&
3729                     (CvROOT(cv) || CvXSUB(cv)))
3730                     {
3731                         /* Redefining a sub - warning is mandatory if
3732                            it was a const and its value changed. */
3733                         if (CvCONST(cv) && CvCONST((const CV *)sref)
3734                             && cv_const_sv(cv)
3735                             == cv_const_sv((const CV *)sref)) {
3736                             NOOP;
3737                             /* They are 2 constant subroutines generated from
3738                                the same constant. This probably means that
3739                                they are really the "same" proxy subroutine
3740                                instantiated in 2 places. Most likely this is
3741                                when a constant is exported twice.  Don't warn.
3742                             */
3743                         }
3744                         else if (ckWARN(WARN_REDEFINE)
3745                                  || (CvCONST(cv)
3746                                      && (!CvCONST((const CV *)sref)
3747                                          || sv_cmp(cv_const_sv(cv),
3748                                                    cv_const_sv((const CV *)
3749                                                                sref))))) {
3750                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3751                                         (const char *)
3752                                         (CvCONST(cv)
3753                                          ? "Constant subroutine %s::%s redefined"
3754                                          : "Subroutine %s::%s redefined"),
3755                                         HvNAME_get(GvSTASH((const GV *)dstr)),
3756                                         GvENAME(MUTABLE_GV(dstr)));
3757                         }
3758                     }
3759                 if (!intro)
3760                     cv_ckproto_len(cv, (const GV *)dstr,
3761                                    SvPOK(sref) ? SvPVX_const(sref) : NULL,
3762                                    SvPOK(sref) ? SvCUR(sref) : 0);
3763             }
3764             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3765             GvASSUMECV_on(dstr);
3766             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3767         }
3768         *location = sref;
3769         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3770             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3771             GvFLAGS(dstr) |= import_flag;
3772         }
3773         if (stype == SVt_PVHV) {
3774             const char * const name = GvNAME((GV*)dstr);
3775             const STRLEN len = GvNAMELEN(dstr);
3776             if (
3777                 len > 1 && name[len-2] == ':' && name[len-1] == ':'
3778              && (HvNAME(dref) || HvNAME(sref))
3779             ) {
3780                 mro_package_moved(
3781                     HvNAME(sref) ? (HV *)sref : NULL,
3782                     HvNAME(dref) ? (HV *)dref : NULL,
3783                     (GV *)dstr, NULL, 0
3784                 );
3785             }
3786         }
3787         else if (stype == SVt_PVAV && strEQ(GvNAME((GV*)dstr), "ISA")) {
3788             sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3789             mro_isa_changed_in(GvSTASH(dstr));
3790         }
3791         break;
3792     }
3793     SvREFCNT_dec(dref);
3794     if (SvTAINTED(sstr))
3795         SvTAINT(dstr);
3796     return;
3797 }
3798
3799 void
3800 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3801 {
3802     dVAR;
3803     register U32 sflags;
3804     register int dtype;
3805     register svtype stype;
3806
3807     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3808
3809     if (sstr == dstr)
3810         return;
3811
3812     if (SvIS_FREED(dstr)) {
3813         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3814                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3815     }
3816     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3817     if (!sstr)
3818         sstr = &PL_sv_undef;
3819     if (SvIS_FREED(sstr)) {
3820         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3821                    (void*)sstr, (void*)dstr);
3822     }
3823     stype = SvTYPE(sstr);
3824     dtype = SvTYPE(dstr);
3825
3826     (void)SvAMAGIC_off(dstr);
3827     if ( SvVOK(dstr) )
3828     {
3829         /* need to nuke the magic */
3830         mg_free(dstr);
3831     }
3832
3833     /* There's a lot of redundancy below but we're going for speed here */
3834
3835     switch (stype) {
3836     case SVt_NULL:
3837       undef_sstr:
3838         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3839             (void)SvOK_off(dstr);
3840             return;
3841         }
3842         break;
3843     case SVt_IV:
3844         if (SvIOK(sstr)) {
3845             switch (dtype) {
3846             case SVt_NULL:
3847                 sv_upgrade(dstr, SVt_IV);
3848                 break;
3849             case SVt_NV:
3850             case SVt_PV:
3851                 sv_upgrade(dstr, SVt_PVIV);
3852                 break;
3853             case SVt_PVGV:
3854             case SVt_PVLV:
3855                 goto end_of_first_switch;
3856             }
3857             (void)SvIOK_only(dstr);
3858             SvIV_set(dstr,  SvIVX(sstr));
3859             if (SvIsUV(sstr))
3860                 SvIsUV_on(dstr);
3861             /* SvTAINTED can only be true if the SV has taint magic, which in
3862                turn means that the SV type is PVMG (or greater). This is the
3863                case statement for SVt_IV, so this cannot be true (whatever gcov
3864                may say).  */
3865             assert(!SvTAINTED(sstr));
3866             return;
3867         }
3868         if (!SvROK(sstr))
3869             goto undef_sstr;
3870         if (dtype < SVt_PV && dtype != SVt_IV)
3871             sv_upgrade(dstr, SVt_IV);
3872         break;
3873
3874     case SVt_NV:
3875         if (SvNOK(sstr)) {
3876             switch (dtype) {
3877             case SVt_NULL:
3878             case SVt_IV:
3879                 sv_upgrade(dstr, SVt_NV);
3880                 break;
3881             case SVt_PV:
3882             case SVt_PVIV:
3883                 sv_upgrade(dstr, SVt_PVNV);
3884                 break;
3885             case SVt_PVGV:
3886             case SVt_PVLV:
3887                 goto end_of_first_switch;
3888             }
3889             SvNV_set(dstr, SvNVX(sstr));
3890             (void)SvNOK_only(dstr);
3891             /* SvTAINTED can only be true if the SV has taint magic, which in
3892                turn means that the SV type is PVMG (or greater). This is the
3893                case statement for SVt_NV, so this cannot be true (whatever gcov
3894                may say).  */
3895             assert(!SvTAINTED(sstr));
3896             return;
3897         }
3898         goto undef_sstr;
3899
3900     case SVt_PVFM:
3901 #ifdef PERL_OLD_COPY_ON_WRITE
3902         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3903             if (dtype < SVt_PVIV)
3904                 sv_upgrade(dstr, SVt_PVIV);
3905             break;
3906         }
3907         /* Fall through */
3908 #endif
3909     case SVt_PV:
3910         if (dtype < SVt_PV)
3911             sv_upgrade(dstr, SVt_PV);
3912         break;
3913     case SVt_PVIV:
3914         if (dtype < SVt_PVIV)
3915             sv_upgrade(dstr, SVt_PVIV);
3916         break;
3917     case SVt_PVNV:
3918         if (dtype < SVt_PVNV)
3919             sv_upgrade(dstr, SVt_PVNV);
3920         break;
3921     default:
3922         {
3923         const char * const type = sv_reftype(sstr,0);
3924         if (PL_op)
3925             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
3926         else
3927             Perl_croak(aTHX_ "Bizarre copy of %s", type);
3928         }
3929         break;
3930
3931     case SVt_REGEXP:
3932         if (dtype < SVt_REGEXP)
3933             sv_upgrade(dstr, SVt_REGEXP);
3934         break;
3935
3936         /* case SVt_BIND: */
3937     case SVt_PVLV:
3938     case SVt_PVGV:
3939         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
3940             glob_assign_glob(dstr, sstr, dtype);
3941             return;
3942         }
3943         /* SvVALID means that this PVGV is playing at being an FBM.  */
3944         /*FALLTHROUGH*/
3945
3946     case SVt_PVMG:
3947         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3948             mg_get(sstr);
3949             if (SvTYPE(sstr) != stype)
3950                 stype = SvTYPE(sstr);
3951             if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
3952                     glob_assign_glob(dstr, sstr, dtype);
3953                     return;
3954             }
3955         }
3956         if (stype == SVt_PVLV)
3957             SvUPGRADE(dstr, SVt_PVNV);
3958         else
3959             SvUPGRADE(dstr, (svtype)stype);
3960     }
3961  end_of_first_switch:
3962
3963     /* dstr may have been upgraded.  */
3964     dtype = SvTYPE(dstr);
3965     sflags = SvFLAGS(sstr);
3966
3967     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
3968         /* Assigning to a subroutine sets the prototype.  */
3969         if (SvOK(sstr)) {
3970             STRLEN len;
3971             const char *const ptr = SvPV_const(sstr, len);
3972
3973             SvGROW(dstr, len + 1);
3974             Copy(ptr, SvPVX(dstr), len + 1, char);
3975             SvCUR_set(dstr, len);
3976             SvPOK_only(dstr);
3977             SvFLAGS(dstr) |= sflags & SVf_UTF8;
3978         } else {
3979             SvOK_off(dstr);
3980         }
3981     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3982         const char * const type = sv_reftype(dstr,0);
3983         if (PL_op)
3984             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
3985         else
3986             Perl_croak(aTHX_ "Cannot copy to %s", type);
3987     } else if (sflags & SVf_ROK) {
3988         if (isGV_with_GP(dstr)
3989             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
3990             sstr = SvRV(sstr);
3991             if (sstr == dstr) {
3992                 if (GvIMPORTED(dstr) != GVf_IMPORTED
3993                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3994                 {
3995                     GvIMPORTED_on(dstr);
3996                 }
3997                 GvMULTI_on(dstr);
3998                 return;
3999             }
4000             glob_assign_glob(dstr, sstr, dtype);
4001             return;
4002         }
4003
4004         if (dtype >= SVt_PV) {
4005             if (isGV_with_GP(dstr)) {
4006                 glob_assign_ref(dstr, sstr);
4007                 return;
4008             }
4009             if (SvPVX_const(dstr)) {
4010                 SvPV_free(dstr);
4011                 SvLEN_set(dstr, 0);
4012                 SvCUR_set(dstr, 0);
4013             }
4014         }
4015         (void)SvOK_off(dstr);
4016         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4017         SvFLAGS(dstr) |= sflags & SVf_ROK;
4018         assert(!(sflags & SVp_NOK));
4019         assert(!(sflags & SVp_IOK));
4020         assert(!(sflags & SVf_NOK));
4021         assert(!(sflags & SVf_IOK));
4022     }
4023     else if (isGV_with_GP(dstr)) {
4024         if (!(sflags & SVf_OK)) {
4025             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4026                            "Undefined value assigned to typeglob");
4027         }
4028         else {
4029             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
4030             if (dstr != (const SV *)gv) {
4031                 const char * const name = GvNAME((const GV *)dstr);
4032                 const STRLEN len = GvNAMELEN(dstr);
4033                 HV *old_stash = NULL;
4034                 bool reset_isa = FALSE;
4035                 if (len > 1 && name[len-2] == ':' && name[len-1] == ':') {
4036                     /* Set aside the old stash, so we can reset isa caches
4037                        on its subclasses. */
4038                     old_stash = GvHV(dstr);
4039                     reset_isa = TRUE;
4040                 }
4041
4042                 if (GvGP(dstr))
4043                     gp_free(MUTABLE_GV(dstr));
4044                 GvGP(dstr) = gp_ref(GvGP(gv));
4045
4046                 if (reset_isa) {
4047                     HV * const stash = GvHV(dstr);
4048                     if(
4049                         (stash && HvNAME(stash))
4050                      || (old_stash && HvNAME(old_stash))
4051                     )
4052                         mro_package_moved(
4053                          stash && HvNAME(stash) ? stash : NULL,
4054                          old_stash && HvNAME(old_stash) ? old_stash : NULL,
4055                          (GV *)dstr, NULL, 0
4056                         );
4057                 }
4058             }
4059         }
4060     }
4061     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4062         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4063     }
4064     else if (sflags & SVp_POK) {
4065         bool isSwipe = 0;
4066
4067         /*
4068          * Check to see if we can just swipe the string.  If so, it's a
4069          * possible small lose on short strings, but a big win on long ones.
4070          * It might even be a win on short strings if SvPVX_const(dstr)
4071          * has to be allocated and SvPVX_const(sstr) has to be freed.
4072          * Likewise if we can set up COW rather than doing an actual copy, we
4073          * drop to the else clause, as the swipe code and the COW setup code
4074          * have much in common.
4075          */
4076
4077         /* Whichever path we take through the next code, we want this true,
4078            and doing it now facilitates the COW check.  */
4079         (void)SvPOK_only(dstr);
4080
4081         if (
4082             /* If we're already COW then this clause is not true, and if COW
4083                is allowed then we drop down to the else and make dest COW 
4084                with us.  If caller hasn't said that we're allowed to COW
4085                shared hash keys then we don't do the COW setup, even if the
4086                source scalar is a shared hash key scalar.  */
4087             (((flags & SV_COW_SHARED_HASH_KEYS)
4088                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4089                : 1 /* If making a COW copy is forbidden then the behaviour we
4090                        desire is as if the source SV isn't actually already
4091                        COW, even if it is.  So we act as if the source flags
4092                        are not COW, rather than actually testing them.  */
4093               )
4094 #ifndef PERL_OLD_COPY_ON_WRITE
4095              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4096                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4097                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4098                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4099                 but in turn, it's somewhat dead code, never expected to go
4100                 live, but more kept as a placeholder on how to do it better
4101                 in a newer implementation.  */
4102              /* If we are COW and dstr is a suitable target then we drop down
4103                 into the else and make dest a COW of us.  */
4104              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4105 #endif
4106              )
4107             &&
4108             !(isSwipe =
4109                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4110                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4111                  (!(flags & SV_NOSTEAL)) &&
4112                                         /* and we're allowed to steal temps */
4113                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4114                  SvLEN(sstr))             /* and really is a string */
4115 #ifdef PERL_OLD_COPY_ON_WRITE
4116             && ((flags & SV_COW_SHARED_HASH_KEYS)
4117                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4118                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4119                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4120                 : 1)
4121 #endif
4122             ) {
4123             /* Failed the swipe test, and it's not a shared hash key either.
4124                Have to copy the string.  */
4125             STRLEN len = SvCUR(sstr);
4126             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4127             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4128             SvCUR_set(dstr, len);
4129             *SvEND(dstr) = '\0';
4130         } else {
4131             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4132                be true in here.  */
4133             /* Either it's a shared hash key, or it's suitable for
4134                copy-on-write or we can swipe the string.  */
4135             if (DEBUG_C_TEST) {
4136                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4137                 sv_dump(sstr);
4138                 sv_dump(dstr);
4139             }
4140 #ifdef PERL_OLD_COPY_ON_WRITE
4141             if (!isSwipe) {
4142                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4143                     != (SVf_FAKE | SVf_READONLY)) {
4144                     SvREADONLY_on(sstr);
4145                     SvFAKE_on(sstr);
4146                     /* Make the source SV into a loop of 1.
4147                        (about to become 2) */
4148                     SV_COW_NEXT_SV_SET(sstr, sstr);
4149                 }
4150             }
4151 #endif
4152             /* Initial code is common.  */
4153             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4154                 SvPV_free(dstr);
4155             }
4156
4157             if (!isSwipe) {
4158                 /* making another shared SV.  */
4159                 STRLEN cur = SvCUR(sstr);
4160                 STRLEN len = SvLEN(sstr);
4161 #ifdef PERL_OLD_COPY_ON_WRITE
4162                 if (len) {
4163                     assert (SvTYPE(dstr) >= SVt_PVIV);
4164                     /* SvIsCOW_normal */
4165                     /* splice us in between source and next-after-source.  */
4166                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4167                     SV_COW_NEXT_SV_SET(sstr, dstr);
4168                     SvPV_set(dstr, SvPVX_mutable(sstr));
4169                 } else
4170 #endif
4171                 {
4172                     /* SvIsCOW_shared_hash */
4173                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4174                                           "Copy on write: Sharing hash\n"));
4175
4176                     assert (SvTYPE(dstr) >= SVt_PV);
4177                     SvPV_set(dstr,
4178                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4179                 }
4180                 SvLEN_set(dstr, len);
4181                 SvCUR_set(dstr, cur);
4182                 SvREADONLY_on(dstr);
4183                 SvFAKE_on(dstr);
4184             }
4185             else
4186                 {       /* Passes the swipe test.  */
4187                 SvPV_set(dstr, SvPVX_mutable(sstr));
4188                 SvLEN_set(dstr, SvLEN(sstr));
4189                 SvCUR_set(dstr, SvCUR(sstr));
4190
4191                 SvTEMP_off(dstr);
4192                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4193                 SvPV_set(sstr, NULL);
4194                 SvLEN_set(sstr, 0);
4195                 SvCUR_set(sstr, 0);
4196                 SvTEMP_off(sstr);
4197             }
4198         }
4199         if (sflags & SVp_NOK) {
4200             SvNV_set(dstr, SvNVX(sstr));
4201         }
4202         if (sflags & SVp_IOK) {
4203             SvIV_set(dstr, SvIVX(sstr));
4204             /* Must do this otherwise some other overloaded use of 0x80000000
4205                gets confused. I guess SVpbm_VALID */
4206             if (sflags & SVf_IVisUV)
4207                 SvIsUV_on(dstr);
4208         }
4209         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4210         {
4211             const MAGIC * const smg = SvVSTRING_mg(sstr);
4212             if (smg) {
4213                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4214                          smg->mg_ptr, smg->mg_len);
4215                 SvRMAGICAL_on(dstr);
4216             }
4217         }
4218     }
4219     else if (sflags & (SVp_IOK|SVp_NOK)) {
4220         (void)SvOK_off(dstr);
4221         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4222         if (sflags & SVp_IOK) {
4223             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4224             SvIV_set(dstr, SvIVX(sstr));
4225         }
4226         if (sflags & SVp_NOK) {
4227             SvNV_set(dstr, SvNVX(sstr));
4228         }
4229     }
4230     else {
4231         if (isGV_with_GP(sstr)) {
4232             /* This stringification rule for globs is spread in 3 places.
4233                This feels bad. FIXME.  */
4234             const U32 wasfake = sflags & SVf_FAKE;
4235
4236             /* FAKE globs can get coerced, so need to turn this off
4237                temporarily if it is on.  */
4238             SvFAKE_off(sstr);
4239             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4240             SvFLAGS(sstr) |= wasfake;
4241         }
4242         else
4243             (void)SvOK_off(dstr);
4244     }
4245     if (SvTAINTED(sstr))
4246         SvTAINT(dstr);
4247 }
4248
4249 /*
4250 =for apidoc sv_setsv_mg
4251
4252 Like C<sv_setsv>, but also handles 'set' magic.
4253
4254 =cut
4255 */
4256
4257 void
4258 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4259 {
4260     PERL_ARGS_ASSERT_SV_SETSV_MG;
4261
4262     sv_setsv(dstr,sstr);
4263     SvSETMAGIC(dstr);
4264 }
4265
4266 #ifdef PERL_OLD_COPY_ON_WRITE
4267 SV *
4268 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4269 {
4270     STRLEN cur = SvCUR(sstr);
4271     STRLEN len = SvLEN(sstr);
4272     register char *new_pv;
4273
4274     PERL_ARGS_ASSERT_SV_SETSV_COW;
4275
4276     if (DEBUG_C_TEST) {
4277         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4278                       (void*)sstr, (void*)dstr);
4279         sv_dump(sstr);
4280         if (dstr)
4281                     sv_dump(dstr);
4282     }
4283
4284     if (dstr) {
4285         if (SvTHINKFIRST(dstr))
4286             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4287         else if (SvPVX_const(dstr))
4288             Safefree(SvPVX_const(dstr));
4289     }
4290     else
4291         new_SV(dstr);
4292     SvUPGRADE(dstr, SVt_PVIV);
4293
4294     assert (SvPOK(sstr));
4295     assert (SvPOKp(sstr));
4296     assert (!SvIOK(sstr));
4297     assert (!SvIOKp(sstr));
4298     assert (!SvNOK(sstr));
4299     assert (!SvNOKp(sstr));
4300
4301     if (SvIsCOW(sstr)) {
4302
4303         if (SvLEN(sstr) == 0) {
4304             /* source is a COW shared hash key.  */
4305             DEBUG_C(PerlIO_printf(Perl_debug_log,
4306                                   "Fast copy on write: Sharing hash\n"));
4307             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4308             goto common_exit;
4309         }
4310         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4311     } else {
4312         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4313         SvUPGRADE(sstr, SVt_PVIV);
4314         SvREADONLY_on(sstr);
4315         SvFAKE_on(sstr);
4316         DEBUG_C(PerlIO_printf(Perl_debug_log,
4317                               "Fast copy on write: Converting sstr to COW\n"));
4318         SV_COW_NEXT_SV_SET(dstr, sstr);
4319     }
4320     SV_COW_NEXT_SV_SET(sstr, dstr);
4321     new_pv = SvPVX_mutable(sstr);
4322
4323   common_exit:
4324     SvPV_set(dstr, new_pv);
4325     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4326     if (SvUTF8(sstr))
4327         SvUTF8_on(dstr);
4328     SvLEN_set(dstr, len);
4329     SvCUR_set(dstr, cur);
4330     if (DEBUG_C_TEST) {
4331         sv_dump(dstr);
4332     }
4333     return dstr;
4334 }
4335 #endif
4336
4337 /*
4338 =for apidoc sv_setpvn
4339
4340 Copies a string into an SV.  The C<len> parameter indicates the number of
4341 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4342 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4343
4344 =cut
4345 */
4346
4347 void
4348 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4349 {
4350     dVAR;
4351     register char *dptr;
4352
4353     PERL_ARGS_ASSERT_SV_SETPVN;
4354
4355     SV_CHECK_THINKFIRST_COW_DROP(sv);
4356     if (!ptr) {
4357         (void)SvOK_off(sv);
4358         return;
4359     }
4360     else {
4361         /* len is STRLEN which is unsigned, need to copy to signed */
4362         const IV iv = len;
4363         if (iv < 0)
4364             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4365     }
4366     SvUPGRADE(sv, SVt_PV);
4367
4368     dptr = SvGROW(sv, len + 1);
4369     Move(ptr,dptr,len,char);
4370     dptr[len] = '\0';
4371     SvCUR_set(sv, len);
4372     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4373     SvTAINT(sv);
4374 }
4375
4376 /*
4377 =for apidoc sv_setpvn_mg
4378
4379 Like C<sv_setpvn>, but also handles 'set' magic.
4380
4381 =cut
4382 */
4383
4384 void
4385 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4386 {
4387     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4388
4389     sv_setpvn(sv,ptr,len);
4390     SvSETMAGIC(sv);
4391 }
4392
4393 /*
4394 =for apidoc sv_setpv
4395
4396 Copies a string into an SV.  The string must be null-terminated.  Does not
4397 handle 'set' magic.  See C<sv_setpv_mg>.
4398
4399 =cut
4400 */
4401
4402 void
4403 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4404 {
4405     dVAR;
4406     register STRLEN len;
4407
4408     PERL_ARGS_ASSERT_SV_SETPV;
4409
4410     SV_CHECK_THINKFIRST_COW_DROP(sv);
4411     if (!ptr) {
4412         (void)SvOK_off(sv);
4413         return;
4414     }
4415     len = strlen(ptr);
4416     SvUPGRADE(sv, SVt_PV);
4417
4418     SvGROW(sv, len + 1);
4419     Move(ptr,SvPVX(sv),len+1,char);
4420     SvCUR_set(sv, len);
4421     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4422     SvTAINT(sv);
4423 }
4424
4425 /*
4426 =for apidoc sv_setpv_mg
4427
4428 Like C<sv_setpv>, but also handles 'set' magic.
4429
4430 =cut
4431 */
4432
4433 void
4434 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4435 {
4436     PERL_ARGS_ASSERT_SV_SETPV_MG;
4437
4438     sv_setpv(sv,ptr);
4439     SvSETMAGIC(sv);
4440 }
4441
4442 /*
4443 =for apidoc sv_usepvn_flags
4444
4445 Tells an SV to use C<ptr> to find its string value.  Normally the
4446 string is stored inside the SV but sv_usepvn allows the SV to use an
4447 outside string.  The C<ptr> should point to memory that was allocated
4448 by C<malloc>.  The string length, C<len>, must be supplied.  By default
4449 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4450 so that pointer should not be freed or used by the programmer after
4451 giving it to sv_usepvn, and neither should any pointers from "behind"
4452 that pointer (e.g. ptr + 1) be used.
4453
4454 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4455 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4456 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4457 C<len>, and already meets the requirements for storing in C<SvPVX>)
4458
4459 =cut
4460 */
4461
4462 void
4463 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4464 {
4465     dVAR;
4466     STRLEN allocate;
4467
4468     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4469
4470     SV_CHECK_THINKFIRST_COW_DROP(sv);
4471     SvUPGRADE(sv, SVt_PV);
4472     if (!ptr) {
4473         (void)SvOK_off(sv);
4474         if (flags & SV_SMAGIC)
4475             SvSETMAGIC(sv);
4476         return;
4477     }
4478     if (SvPVX_const(sv))
4479         SvPV_free(sv);
4480
4481 #ifdef DEBUGGING
4482     if (flags & SV_HAS_TRAILING_NUL)
4483         assert(ptr[len] == '\0');
4484 #endif
4485
4486     allocate = (flags & SV_HAS_TRAILING_NUL)
4487         ? len + 1 :
4488 #ifdef Perl_safesysmalloc_size
4489         len + 1;
4490 #else 
4491         PERL_STRLEN_ROUNDUP(len + 1);
4492 #endif
4493     if (flags & SV_HAS_TRAILING_NUL) {
4494         /* It's long enough - do nothing.
4495            Specfically Perl_newCONSTSUB is relying on this.  */
4496     } else {
4497 #ifdef DEBUGGING
4498         /* Force a move to shake out bugs in callers.  */
4499         char *new_ptr = (char*)safemalloc(allocate);
4500         Copy(ptr, new_ptr, len, char);
4501         PoisonFree(ptr,len,char);
4502         Safefree(ptr);
4503         ptr = new_ptr;
4504 #else
4505         ptr = (char*) saferealloc (ptr, allocate);
4506 #endif
4507     }
4508 #ifdef Perl_safesysmalloc_size
4509     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4510 #else
4511     SvLEN_set(sv, allocate);
4512 #endif
4513     SvCUR_set(sv, len);
4514     SvPV_set(sv, ptr);
4515     if (!(flags & SV_HAS_TRAILING_NUL)) {
4516         ptr[len] = '\0';
4517     }
4518     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4519     SvTAINT(sv);
4520     if (flags & SV_SMAGIC)
4521         SvSETMAGIC(sv);
4522 }
4523
4524 #ifdef PERL_OLD_COPY_ON_WRITE
4525 /* Need to do this *after* making the SV normal, as we need the buffer
4526    pointer to remain valid until after we've copied it.  If we let go too early,
4527    another thread could invalidate it by unsharing last of the same hash key
4528    (which it can do by means other than releasing copy-on-write Svs)
4529    or by changing the other copy-on-write SVs in the loop.  */
4530 STATIC void
4531 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4532 {
4533     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4534
4535     { /* this SV was SvIsCOW_normal(sv) */
4536          /* we need to find the SV pointing to us.  */
4537         SV *current = SV_COW_NEXT_SV(after);
4538
4539         if (current == sv) {
4540             /* The SV we point to points back to us (there were only two of us
4541                in the loop.)
4542                Hence other SV is no longer copy on write either.  */
4543             SvFAKE_off(after);
4544             SvREADONLY_off(after);
4545         } else {
4546             /* We need to follow the pointers around the loop.  */
4547             SV *next;
4548             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4549                 assert (next);
4550                 current = next;
4551                  /* don't loop forever if the structure is bust, and we have
4552                     a pointer into a closed loop.  */
4553                 assert (current != after);
4554                 assert (SvPVX_const(current) == pvx);
4555             }
4556             /* Make the SV before us point to the SV after us.  */
4557             SV_COW_NEXT_SV_SET(current, after);
4558         }
4559     }
4560 }
4561 #endif
4562 /*
4563 =for apidoc sv_force_normal_flags
4564
4565 Undo various types of fakery on an SV: if the PV is a shared string, make
4566 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4567 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4568 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4569 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4570 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4571 set to some other value.) In addition, the C<flags> parameter gets passed to
4572 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4573 with flags set to 0.
4574
4575 =cut
4576 */
4577
4578 void
4579 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4580 {
4581     dVAR;
4582
4583     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4584
4585 #ifdef PERL_OLD_COPY_ON_WRITE
4586     if (SvREADONLY(sv)) {
4587         if (SvFAKE(sv)) {
4588             const char * const pvx = SvPVX_const(sv);
4589             const STRLEN len = SvLEN(sv);
4590             const STRLEN cur = SvCUR(sv);
4591             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4592                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4593                we'll fail an assertion.  */
4594             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4595
4596             if (DEBUG_C_TEST) {
4597                 PerlIO_printf(Perl_debug_log,
4598                               "Copy on write: Force normal %ld\n",
4599                               (long) flags);
4600                 sv_dump(sv);
4601             }
4602             SvFAKE_off(sv);
4603             SvREADONLY_off(sv);
4604             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4605             SvPV_set(sv, NULL);
4606             SvLEN_set(sv, 0);
4607             if (flags & SV_COW_DROP_PV) {
4608                 /* OK, so we don't need to copy our buffer.  */
4609                 SvPOK_off(sv);
4610             } else {
4611                 SvGROW(sv, cur + 1);
4612                 Move(pvx,SvPVX(sv),cur,char);
4613                 SvCUR_set(sv, cur);
4614                 *SvEND(sv) = '\0';
4615             }
4616             if (len) {
4617                 sv_release_COW(sv, pvx, next);
4618             } else {
4619                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4620             }
4621             if (DEBUG_C_TEST) {
4622                 sv_dump(sv);
4623             }
4624         }
4625         else if (IN_PERL_RUNTIME)
4626             Perl_croak_no_modify(aTHX);
4627     }
4628 #else
4629     if (SvREADONLY(sv)) {
4630         if (SvFAKE(sv)) {
4631             const char * const pvx = SvPVX_const(sv);
4632             const STRLEN len = SvCUR(sv);
4633             SvFAKE_off(sv);
4634             SvREADONLY_off(sv);
4635             SvPV_set(sv, NULL);
4636             SvLEN_set(sv, 0);
4637             SvGROW(sv, len + 1);
4638             Move(pvx,SvPVX(sv),len,char);
4639             *SvEND(sv) = '\0';
4640             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4641         }
4642         else if (IN_PERL_RUNTIME)
4643             Perl_croak_no_modify(aTHX);
4644     }
4645 #endif
4646     if (SvROK(sv))
4647         sv_unref_flags(sv, flags);
4648     else if (SvFAKE(sv) && isGV_with_GP(sv))
4649         sv_unglob(sv);
4650     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4651         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analagous
4652            to sv_unglob. We only need it here, so inline it.  */
4653         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4654         SV *const temp = newSV_type(new_type);
4655         void *const temp_p = SvANY(sv);
4656
4657         if (new_type == SVt_PVMG) {
4658             SvMAGIC_set(temp, SvMAGIC(sv));
4659             SvMAGIC_set(sv, NULL);
4660             SvSTASH_set(temp, SvSTASH(sv));
4661             SvSTASH_set(sv, NULL);
4662         }
4663         SvCUR_set(temp, SvCUR(sv));
4664         /* Remember that SvPVX is in the head, not the body. */
4665         if (SvLEN(temp)) {
4666             SvLEN_set(temp, SvLEN(sv));
4667             /* This signals "buffer is owned by someone else" in sv_clear,
4668                which is the least effort way to stop it freeing the buffer.
4669             */
4670             SvLEN_set(sv, SvLEN(sv)+1);
4671         } else {
4672             /* Their buffer is already owned by someone else. */
4673             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4674             SvLEN_set(temp, SvCUR(sv)+1);
4675         }
4676
4677         /* Now swap the rest of the bodies. */
4678
4679         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4680         SvFLAGS(sv) |= new_type;
4681         SvANY(sv) = SvANY(temp);
4682
4683         SvFLAGS(temp) &= ~(SVTYPEMASK);
4684         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4685         SvANY(temp) = temp_p;
4686
4687         SvREFCNT_dec(temp);
4688     }
4689 }
4690
4691 /*
4692 =for apidoc sv_chop
4693
4694 Efficient removal of characters from the beginning of the string buffer.
4695 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4696 the string buffer.  The C<ptr> becomes the first character of the adjusted
4697 string. Uses the "OOK hack".
4698 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4699 refer to the same chunk of data.
4700
4701 =cut
4702 */
4703
4704 void
4705 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4706 {
4707     STRLEN delta;
4708     STRLEN old_delta;
4709     U8 *p;
4710 #ifdef DEBUGGING
4711     const U8 *real_start;
4712 #endif
4713     STRLEN max_delta;
4714
4715     PERL_ARGS_ASSERT_SV_CHOP;
4716
4717     if (!ptr || !SvPOKp(sv))
4718         return;
4719     delta = ptr - SvPVX_const(sv);
4720     if (!delta) {
4721         /* Nothing to do.  */
4722         return;
4723     }
4724     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4725        nothing uses the value of ptr any more.  */
4726     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4727     if (ptr <= SvPVX_const(sv))
4728         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4729                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4730     SV_CHECK_THINKFIRST(sv);
4731     if (delta > max_delta)
4732         Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4733                    SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4734                    SvPVX_const(sv) + max_delta);
4735
4736     if (!SvOOK(sv)) {
4737         if (!SvLEN(sv)) { /* make copy of shared string */
4738             const char *pvx = SvPVX_const(sv);
4739             const STRLEN len = SvCUR(sv);
4740             SvGROW(sv, len + 1);
4741             Move(pvx,SvPVX(sv),len,char);
4742             *SvEND(sv) = '\0';
4743         }
4744         SvFLAGS(sv) |= SVf_OOK;
4745         old_delta = 0;
4746     } else {
4747         SvOOK_offset(sv, old_delta);
4748     }
4749     SvLEN_set(sv, SvLEN(sv) - delta);
4750     SvCUR_set(sv, SvCUR(sv) - delta);
4751     SvPV_set(sv, SvPVX(sv) + delta);
4752
4753     p = (U8 *)SvPVX_const(sv);
4754
4755     delta += old_delta;
4756
4757 #ifdef DEBUGGING
4758     real_start = p - delta;
4759 #endif
4760
4761     assert(delta);
4762     if (delta < 0x100) {
4763         *--p = (U8) delta;
4764     } else {
4765         *--p = 0;
4766         p -= sizeof(STRLEN);
4767         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4768     }
4769
4770 #ifdef DEBUGGING
4771     /* Fill the preceding buffer with sentinals to verify that no-one is
4772        using it.  */
4773     while (p > real_start) {
4774         --p;
4775         *p = (U8)PTR2UV(p);
4776     }
4777 #endif
4778 }
4779
4780 /*
4781 =for apidoc sv_catpvn
4782
4783 Concatenates the string onto the end of the string which is in the SV.  The
4784 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4785 status set, then the bytes appended should be valid UTF-8.
4786 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4787
4788 =for apidoc sv_catpvn_flags
4789
4790 Concatenates the string onto the end of the string which is in the SV.  The
4791 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4792 status set, then the bytes appended should be valid UTF-8.
4793 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4794 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4795 in terms of this function.
4796
4797 =cut
4798 */
4799
4800 void
4801 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4802 {
4803     dVAR;
4804     STRLEN dlen;
4805     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4806
4807     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4808
4809     SvGROW(dsv, dlen + slen + 1);
4810     if (sstr == dstr)
4811         sstr = SvPVX_const(dsv);
4812     Move(sstr, SvPVX(dsv) + dlen, slen, char);
4813     SvCUR_set(dsv, SvCUR(dsv) + slen);
4814     *SvEND(dsv) = '\0';
4815     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4816     SvTAINT(dsv);
4817     if (flags & SV_SMAGIC)
4818         SvSETMAGIC(dsv);
4819 }
4820
4821 /*
4822 =for apidoc sv_catsv
4823
4824 Concatenates the string from SV C<ssv> onto the end of the string in
4825 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4826 not 'set' magic.  See C<sv_catsv_mg>.
4827
4828 =for apidoc sv_catsv_flags
4829
4830 Concatenates the string from SV C<ssv> onto the end of the string in
4831 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4832 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4833 and C<sv_catsv_nomg> are implemented in terms of this function.
4834
4835 =cut */
4836
4837 void
4838 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
4839 {
4840     dVAR;
4841  
4842     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4843
4844    if (ssv) {
4845         STRLEN slen;
4846         const char *spv = SvPV_flags_const(ssv, slen, flags);
4847         if (spv) {
4848             /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4849                 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4850                 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4851                 get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
4852                 dsv->sv_flags doesn't have that bit set.
4853                 Andy Dougherty  12 Oct 2001
4854             */
4855             const I32 sutf8 = DO_UTF8(ssv);
4856             I32 dutf8;
4857
4858             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4859                 mg_get(dsv);
4860             dutf8 = DO_UTF8(dsv);
4861
4862             if (dutf8 != sutf8) {
4863                 if (dutf8) {
4864                     /* Not modifying source SV, so taking a temporary copy. */
4865                     SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
4866
4867                     sv_utf8_upgrade(csv);
4868                     spv = SvPV_const(csv, slen);
4869                 }
4870                 else
4871                     /* Leave enough space for the cat that's about to happen */
4872                     sv_utf8_upgrade_flags_grow(dsv, 0, slen);
4873             }
4874             sv_catpvn_nomg(dsv, spv, slen);
4875         }
4876     }
4877     if (flags & SV_SMAGIC)
4878         SvSETMAGIC(dsv);
4879 }
4880
4881 /*
4882 =for apidoc sv_catpv
4883
4884 Concatenates the string onto the end of the string which is in the SV.
4885 If the SV has the UTF-8 status set, then the bytes appended should be
4886 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
4887
4888 =cut */
4889
4890 void
4891 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
4892 {
4893     dVAR;
4894     register STRLEN len;
4895     STRLEN tlen;
4896     char *junk;
4897
4898     PERL_ARGS_ASSERT_SV_CATPV;
4899
4900     if (!ptr)
4901         return;
4902     junk = SvPV_force(sv, tlen);
4903     len = strlen(ptr);
4904     SvGROW(sv, tlen + len + 1);
4905     if (ptr == junk)
4906         ptr = SvPVX_const(sv);
4907     Move(ptr,SvPVX(sv)+tlen,len+1,char);
4908     SvCUR_set(sv, SvCUR(sv) + len);
4909     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4910     SvTAINT(sv);
4911 }
4912
4913 /*
4914 =for apidoc sv_catpv_flags
4915
4916 Concatenates the string onto the end of the string which is in the SV.
4917 If the SV has the UTF-8 status set, then the bytes appended should
4918 be valid UTF-8.  If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get>
4919 on the SVs if appropriate, else not.
4920
4921 =cut
4922 */
4923
4924 void
4925 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, I32 flags)
4926 {
4927     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
4928     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
4929 }
4930
4931 /*
4932 =for apidoc sv_catpv_mg
4933
4934 Like C<sv_catpv>, but also handles 'set' magic.
4935
4936 =cut
4937 */
4938
4939 void
4940 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4941 {
4942     PERL_ARGS_ASSERT_SV_CATPV_MG;
4943
4944     sv_catpv(sv,ptr);
4945     SvSETMAGIC(sv);
4946 }
4947
4948 /*
4949 =for apidoc newSV
4950
4951 Creates a new SV.  A non-zero C<len> parameter indicates the number of
4952 bytes of preallocated string space the SV should have.  An extra byte for a
4953 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
4954 space is allocated.)  The reference count for the new SV is set to 1.
4955
4956 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4957 parameter, I<x>, a debug aid which allowed callers to identify themselves.
4958 This aid has been superseded by a new build option, PERL_MEM_LOG (see
4959 L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
4960 modules supporting older perls.
4961
4962 =cut
4963 */
4964
4965 SV *
4966 Perl_newSV(pTHX_ const STRLEN len)
4967 {
4968     dVAR;
4969     register SV *sv;
4970
4971     new_SV(sv);
4972     if (len) {
4973         sv_upgrade(sv, SVt_PV);
4974         SvGROW(sv, len + 1);
4975     }
4976     return sv;
4977 }
4978 /*
4979 =for apidoc sv_magicext
4980
4981 Adds magic to an SV, upgrading it if necessary. Applies the
4982 supplied vtable and returns a pointer to the magic added.
4983
4984 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4985 In particular, you can add magic to SvREADONLY SVs, and add more than
4986 one instance of the same 'how'.
4987
4988 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4989 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4990 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4991 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4992
4993 (This is now used as a subroutine by C<sv_magic>.)
4994
4995 =cut
4996 */
4997 MAGIC * 
4998 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
4999                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5000 {
5001     dVAR;
5002     MAGIC* mg;
5003
5004     PERL_ARGS_ASSERT_SV_MAGICEXT;
5005
5006     SvUPGRADE(sv, SVt_PVMG);
5007     Newxz(mg, 1, MAGIC);
5008     mg->mg_moremagic = SvMAGIC(sv);
5009     SvMAGIC_set(sv, mg);
5010
5011     /* Sometimes a magic contains a reference loop, where the sv and
5012        object refer to each other.  To prevent a reference loop that
5013        would prevent such objects being freed, we look for such loops
5014        and if we find one we avoid incrementing the object refcount.
5015
5016        Note we cannot do this to avoid self-tie loops as intervening RV must
5017        have its REFCNT incremented to keep it in existence.
5018
5019     */
5020     if (!obj || obj == sv ||
5021         how == PERL_MAGIC_arylen ||
5022         how == PERL_MAGIC_symtab ||
5023         (SvTYPE(obj) == SVt_PVGV &&
5024             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5025              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5026              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5027     {
5028         mg->mg_obj = obj;
5029     }
5030     else {
5031         mg->mg_obj = SvREFCNT_inc_simple(obj);
5032         mg->mg_flags |= MGf_REFCOUNTED;
5033     }
5034
5035     /* Normal self-ties simply pass a null object, and instead of
5036        using mg_obj directly, use the SvTIED_obj macro to produce a
5037        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5038        with an RV obj pointing to the glob containing the PVIO.  In
5039        this case, to avoid a reference loop, we need to weaken the
5040        reference.
5041     */
5042
5043     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5044         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5045     {
5046       sv_rvweaken(obj);
5047     }
5048
5049     mg->mg_type = how;
5050     mg->mg_len = namlen;
5051     if (name) {
5052         if (namlen > 0)
5053             mg->mg_ptr = savepvn(name, namlen);
5054         else if (namlen == HEf_SVKEY) {
5055             /* Yes, this is casting away const. This is only for the case of
5056                HEf_SVKEY. I think we need to document this abberation of the
5057                constness of the API, rather than making name non-const, as
5058                that change propagating outwards a long way.  */
5059             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5060         } else
5061             mg->mg_ptr = (char *) name;
5062     }
5063     mg->mg_virtual = (MGVTBL *) vtable;
5064
5065     mg_magical(sv);
5066     if (SvGMAGICAL(sv))
5067         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5068     return mg;
5069 }
5070
5071 /*
5072 =for apidoc sv_magic
5073
5074 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5075 then adds a new magic item of type C<how> to the head of the magic list.
5076
5077 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5078 handling of the C<name> and C<namlen> arguments.
5079
5080 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5081 to add more than one instance of the same 'how'.
5082
5083 =cut
5084 */
5085
5086 void
5087 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5088              const char *const name, const I32 namlen)
5089 {
5090     dVAR;
5091     const MGVTBL *vtable;
5092     MAGIC* mg;
5093
5094     PERL_ARGS_ASSERT_SV_MAGIC;
5095
5096 #ifdef PERL_OLD_COPY_ON_WRITE
5097     if (SvIsCOW(sv))
5098         sv_force_normal_flags(sv, 0);
5099 #endif
5100     if (SvREADONLY(sv)) {
5101         if (
5102             /* its okay to attach magic to shared strings; the subsequent
5103              * upgrade to PVMG will unshare the string */
5104             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5105
5106             && IN_PERL_RUNTIME
5107             && how != PERL_MAGIC_regex_global
5108             && how != PERL_MAGIC_bm
5109             && how != PERL_MAGIC_fm
5110             && how != PERL_MAGIC_sv
5111             && how != PERL_MAGIC_backref
5112            )
5113         {
5114             Perl_croak_no_modify(aTHX);
5115         }
5116     }
5117     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5118         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5119             /* sv_magic() refuses to add a magic of the same 'how' as an
5120                existing one
5121              */
5122             if (how == PERL_MAGIC_taint) {
5123                 mg->mg_len |= 1;
5124                 /* Any scalar which already had taint magic on which someone
5125                    (erroneously?) did SvIOK_on() or similar will now be
5126                    incorrectly sporting public "OK" flags.  */
5127                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5128             }
5129             return;
5130         }
5131     }
5132
5133     switch (how) {
5134     case PERL_MAGIC_sv:
5135         vtable = &PL_vtbl_sv;
5136         break;
5137     case PERL_MAGIC_overload:
5138         vtable = &PL_vtbl_amagic;
5139         break;
5140     case PERL_MAGIC_overload_elem:
5141         vtable = &PL_vtbl_amagicelem;
5142         break;
5143     case PERL_MAGIC_overload_table:
5144         vtable = &PL_vtbl_ovrld;
5145         break;
5146     case PERL_MAGIC_bm:
5147         vtable = &PL_vtbl_bm;
5148         break;
5149     case PERL_MAGIC_regdata:
5150         vtable = &PL_vtbl_regdata;
5151         break;
5152     case PERL_MAGIC_regdatum:
5153         vtable = &PL_vtbl_regdatum;
5154         break;
5155     case PERL_MAGIC_env:
5156         vtable = &PL_vtbl_env;
5157         break;
5158     case PERL_MAGIC_fm:
5159         vtable = &PL_vtbl_fm;
5160         break;
5161     case PERL_MAGIC_envelem:
5162         vtable = &PL_vtbl_envelem;
5163         break;
5164     case PERL_MAGIC_regex_global:
5165         vtable = &PL_vtbl_mglob;
5166         break;
5167     case PERL_MAGIC_isa:
5168         vtable = &PL_vtbl_isa;
5169         break;
5170     case PERL_MAGIC_isaelem:
5171         vtable = &PL_vtbl_isaelem;
5172         break;
5173     case PERL_MAGIC_nkeys:
5174         vtable = &PL_vtbl_nkeys;
5175         break;
5176     case PERL_MAGIC_dbfile:
5177         vtable = NULL;
5178         break;
5179     case PERL_MAGIC_dbline:
5180         vtable = &PL_vtbl_dbline;
5181         break;
5182 #ifdef USE_LOCALE_COLLATE
5183     case PERL_MAGIC_collxfrm:
5184         vtable = &PL_vtbl_collxfrm;
5185         break;
5186 #endif /* USE_LOCALE_COLLATE */
5187     case PERL_MAGIC_tied:
5188         vtable = &PL_vtbl_pack;
5189         break;
5190     case PERL_MAGIC_tiedelem:
5191     case PERL_MAGIC_tiedscalar:
5192         vtable = &PL_vtbl_packelem;
5193         break;
5194     case PERL_MAGIC_qr:
5195         vtable = &PL_vtbl_regexp;
5196         break;
5197     case PERL_MAGIC_sig:
5198         vtable = &PL_vtbl_sig;
5199         break;
5200     case PERL_MAGIC_sigelem:
5201         vtable = &PL_vtbl_sigelem;
5202         break;
5203     case PERL_MAGIC_taint:
5204         vtable = &PL_vtbl_taint;
5205         break;
5206     case PERL_MAGIC_uvar:
5207         vtable = &PL_vtbl_uvar;
5208         break;
5209     case PERL_MAGIC_vec:
5210         vtable = &PL_vtbl_vec;
5211         break;
5212     case PERL_MAGIC_arylen_p:
5213     case PERL_MAGIC_rhash:
5214     case PERL_MAGIC_symtab:
5215     case PERL_MAGIC_vstring:
5216     case PERL_MAGIC_checkcall:
5217         vtable = NULL;
5218         break;
5219     case PERL_MAGIC_utf8:
5220         vtable = &PL_vtbl_utf8;
5221         break;
5222     case PERL_MAGIC_substr:
5223         vtable = &PL_vtbl_substr;
5224         break;
5225     case PERL_MAGIC_defelem:
5226         vtable = &PL_vtbl_defelem;
5227         break;
5228     case PERL_MAGIC_arylen:
5229         vtable = &PL_vtbl_arylen;
5230         break;
5231     case PERL_MAGIC_pos:
5232         vtable = &PL_vtbl_pos;
5233         break;
5234     case PERL_MAGIC_backref:
5235         vtable = &PL_vtbl_backref;
5236         break;
5237     case PERL_MAGIC_hintselem:
5238         vtable = &PL_vtbl_hintselem;
5239         break;
5240     case PERL_MAGIC_hints:
5241         vtable = &PL_vtbl_hints;
5242         break;
5243     case PERL_MAGIC_ext:
5244         /* Reserved for use by extensions not perl internals.           */
5245         /* Useful for attaching extension internal data to perl vars.   */
5246         /* Note that multiple extensions may clash if magical scalars   */
5247         /* etc holding private data from one are passed to another.     */
5248         vtable = NULL;
5249         break;
5250     default:
5251         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5252     }
5253
5254     /* Rest of work is done else where */
5255     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5256
5257     switch (how) {
5258     case PERL_MAGIC_taint:
5259         mg->mg_len = 1;
5260         break;
5261     case PERL_MAGIC_ext:
5262     case PERL_MAGIC_dbfile:
5263         SvRMAGICAL_on(sv);
5264         break;
5265     }
5266 }
5267
5268 /*
5269 =for apidoc sv_unmagic
5270
5271 Removes all magic of type C<type> from an SV.
5272
5273 =cut
5274 */
5275
5276 int
5277 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5278 {
5279     MAGIC* mg;
5280     MAGIC** mgp;
5281
5282     PERL_ARGS_ASSERT_SV_UNMAGIC;
5283
5284     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5285         return 0;
5286     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5287     for (mg = *mgp; mg; mg = *mgp) {
5288         if (mg->mg_type == type) {
5289             const MGVTBL* const vtbl = mg->mg_virtual;
5290             *mgp = mg->mg_moremagic;
5291             if (vtbl && vtbl->svt_free)
5292                 vtbl->svt_free(aTHX_ sv, mg);
5293             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5294                 if (mg->mg_len > 0)
5295                     Safefree(mg->mg_ptr);
5296                 else if (mg->mg_len == HEf_SVKEY)
5297                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5298                 else if (mg->mg_type == PERL_MAGIC_utf8)
5299                     Safefree(mg->mg_ptr);
5300             }
5301             if (mg->mg_flags & MGf_REFCOUNTED)
5302                 SvREFCNT_dec(mg->mg_obj);
5303             Safefree(mg);
5304         }
5305         else
5306             mgp = &mg->mg_moremagic;
5307     }
5308     if (SvMAGIC(sv)) {
5309         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5310             mg_magical(sv);     /*    else fix the flags now */
5311     }
5312     else {
5313         SvMAGICAL_off(sv);
5314         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5315     }
5316     return 0;
5317 }
5318
5319 /*
5320 =for apidoc sv_rvweaken
5321
5322 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5323 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5324 push a back-reference to this RV onto the array of backreferences
5325 associated with that magic. If the RV is magical, set magic will be
5326 called after the RV is cleared.
5327
5328 =cut
5329 */
5330
5331 SV *
5332 Perl_sv_rvweaken(pTHX_ SV *const sv)
5333 {
5334     SV *tsv;
5335
5336     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5337
5338     if (!SvOK(sv))  /* let undefs pass */
5339         return sv;
5340     if (!SvROK(sv))
5341         Perl_croak(aTHX_ "Can't weaken a nonreference");
5342     else if (SvWEAKREF(sv)) {
5343         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5344         return sv;
5345     }
5346     tsv = SvRV(sv);
5347     Perl_sv_add_backref(aTHX_ tsv, sv);
5348     SvWEAKREF_on(sv);
5349     SvREFCNT_dec(tsv);
5350     return sv;
5351 }
5352
5353 /* Give tsv backref magic if it hasn't already got it, then push a
5354  * back-reference to sv onto the array associated with the backref magic.
5355  *
5356  * As an optimisation, if there's only one backref and it's not an AV,
5357  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5358  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5359  * active.)
5360  *
5361  * If an HV's backref is stored in magic, it is moved back to HvAUX.
5362  */
5363
5364 /* A discussion about the backreferences array and its refcount:
5365  *
5366  * The AV holding the backreferences is pointed to either as the mg_obj of
5367  * PERL_MAGIC_backref, or in the specific case of a HV that has the hv_aux
5368  * structure, from the xhv_backreferences field. (A HV without hv_aux will
5369  * have the standard magic instead.) The array is created with a refcount
5370  * of 2. This means that if during global destruction the array gets
5371  * picked on before its parent to have its refcount decremented by the
5372  * random zapper, it won't actually be freed, meaning it's still there for
5373  * when its parent gets freed.
5374  *
5375  * When the parent SV is freed, the extra ref is killed by
5376  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5377  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5378  *
5379  * When a single backref SV is stored directly, it is not reference
5380  * counted.
5381  */
5382
5383 void
5384 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5385 {
5386     dVAR;
5387     SV **svp;
5388     AV *av = NULL;
5389     MAGIC *mg = NULL;
5390
5391     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5392
5393     /* find slot to store array or singleton backref */
5394
5395     if (SvTYPE(tsv) == SVt_PVHV) {
5396         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5397
5398         if (!*svp) {
5399             if ((mg = mg_find(tsv, PERL_MAGIC_backref))) {
5400                 /* Aha. They've got it stowed in magic instead.
5401                  * Move it back to xhv_backreferences */
5402                 *svp = mg->mg_obj;
5403                 /* Stop mg_free decreasing the reference count.  */
5404                 mg->mg_obj = NULL;
5405                 /* Stop mg_free even calling the destructor, given that
5406                    there's no AV to free up.  */
5407                 mg->mg_virtual = 0;
5408                 sv_unmagic(tsv, PERL_MAGIC_backref);
5409                 mg = NULL;
5410             }
5411         }
5412     } else {
5413         if (! ((mg =
5414             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5415         {
5416             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5417             mg = mg_find(tsv, PERL_MAGIC_backref);
5418         }
5419         svp = &(mg->mg_obj);
5420     }
5421
5422     /* create or retrieve the array */
5423
5424     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5425         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5426     ) {
5427         /* create array */
5428         av = newAV();
5429         AvREAL_off(av);
5430         SvREFCNT_inc_simple_void(av);
5431         /* av now has a refcnt of 2; see discussion above */
5432         if (*svp) {
5433             /* move single existing backref to the array */
5434             av_extend(av, 1);
5435             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5436         }
5437         *svp = (SV*)av;
5438         if (mg)
5439             mg->mg_flags |= MGf_REFCOUNTED;
5440     }
5441     else
5442         av = MUTABLE_AV(*svp);
5443
5444     if (!av) {
5445         /* optimisation: store single backref directly in HvAUX or mg_obj */
5446         *svp = sv;
5447         return;
5448     }
5449     /* push new backref */
5450     assert(SvTYPE(av) == SVt_PVAV);
5451     if (AvFILLp(av) >= AvMAX(av)) {
5452         av_extend(av, AvFILLp(av)+1);
5453     }
5454     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5455 }
5456
5457 /* delete a back-reference to ourselves from the backref magic associated
5458  * with the SV we point to.
5459  */
5460
5461 void
5462 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5463 {
5464     dVAR;
5465     SV **svp = NULL;
5466     I32 i;
5467
5468     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5469
5470     if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
5471         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5472     }
5473     if (!svp || !*svp) {
5474         MAGIC *const mg
5475             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5476         svp =  mg ? &(mg->mg_obj) : NULL;
5477     }
5478
5479     if (!svp || !*svp)
5480         Perl_croak(aTHX_ "panic: del_backref");
5481
5482     if (SvTYPE(*svp) == SVt_PVAV) {
5483         int count = 0;
5484         AV * const av = (AV*)*svp;
5485         assert(!SvIS_FREED(av));
5486         svp = AvARRAY(av);
5487         for (i = AvFILLp(av); i >= 0; i--) {
5488             if (svp[i] == sv) {
5489                 const SSize_t fill = AvFILLp(av);
5490                 if (i != fill) {
5491                     /* We weren't the last entry.
5492                        An unordered list has this property that you can take the
5493                        last element off the end to fill the hole, and it's still
5494                        an unordered list :-)
5495                     */
5496                     svp[i] = svp[fill];
5497                 }
5498                 svp[fill] = NULL;
5499                 AvFILLp(av) = fill - 1;
5500                 count++;
5501 #ifndef DEBUGGING
5502                 break; /* should only be one */
5503 #endif
5504             }
5505         }
5506         assert(count == 1);
5507     }
5508     else {
5509         /* optimisation: only a single backref, stored directly */
5510         if (*svp != sv)
5511             Perl_croak(aTHX_ "panic: del_backref");
5512         *svp = NULL;
5513     }
5514
5515 }
5516
5517 void
5518 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5519 {
5520     SV **svp;
5521     SV **last;
5522     bool is_array;
5523
5524     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5525
5526     if (!av)
5527         return;
5528
5529     is_array = (SvTYPE(av) == SVt_PVAV);
5530     if (is_array) {
5531         assert(!SvIS_FREED(av));
5532         svp = AvARRAY(av);
5533         if (svp)
5534             last = svp + AvFILLp(av);
5535     }
5536     else {
5537         /* optimisation: only a single backref, stored directly */
5538         svp = (SV**)&av;
5539         last = svp;
5540     }
5541
5542     if (svp) {
5543         while (svp <= last) {
5544             if (*svp) {
5545                 SV *const referrer = *svp;
5546                 if (SvWEAKREF(referrer)) {
5547                     /* XXX Should we check that it hasn't changed? */
5548                     assert(SvROK(referrer));
5549                     SvRV_set(referrer, 0);
5550                     SvOK_off(referrer);
5551                     SvWEAKREF_off(referrer);
5552                     SvSETMAGIC(referrer);
5553                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5554                            SvTYPE(referrer) == SVt_PVLV) {
5555                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5556                     /* You lookin' at me?  */
5557                     assert(GvSTASH(referrer));
5558                     assert(GvSTASH(referrer) == (const HV *)sv);
5559                     GvSTASH(referrer) = 0;
5560                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5561                            SvTYPE(referrer) == SVt_PVFM) {
5562                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5563                         /* You lookin' at me?  */
5564                         assert(CvSTASH(referrer));
5565                         assert(CvSTASH(referrer) == (const HV *)sv);
5566                         CvSTASH(referrer) = 0;
5567                     }
5568                     else {
5569                         assert(SvTYPE(sv) == SVt_PVGV);
5570                         /* You lookin' at me?  */
5571                         assert(CvGV(referrer));
5572                         assert(CvGV(referrer) == (const GV *)sv);
5573                         anonymise_cv_maybe(MUTABLE_GV(sv),
5574                                                 MUTABLE_CV(referrer));
5575                     }
5576
5577                 } else {
5578                     Perl_croak(aTHX_
5579                                "panic: magic_killbackrefs (flags=%"UVxf")",
5580                                (UV)SvFLAGS(referrer));
5581                 }
5582
5583                 if (is_array)
5584                     *svp = NULL;
5585             }
5586             svp++;
5587         }
5588     }
5589     if (is_array) {
5590         AvFILLp(av) = -1;
5591         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5592     }
5593     return;
5594 }
5595
5596 /*
5597 =for apidoc sv_insert
5598
5599 Inserts a string at the specified offset/length within the SV. Similar to
5600 the Perl substr() function. Handles get magic.
5601
5602 =for apidoc sv_insert_flags
5603
5604 Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5605
5606 =cut
5607 */
5608
5609 void
5610 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5611 {
5612     dVAR;
5613     register char *big;
5614     register char *mid;
5615     register char *midend;
5616     register char *bigend;
5617     register I32 i;
5618     STRLEN curlen;
5619
5620     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5621
5622     if (!bigstr)
5623         Perl_croak(aTHX_ "Can't modify non-existent substring");
5624     SvPV_force_flags(bigstr, curlen, flags);
5625     (void)SvPOK_only_UTF8(bigstr);
5626     if (offset + len > curlen) {
5627         SvGROW(bigstr, offset+len+1);
5628         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5629         SvCUR_set(bigstr, offset+len);
5630     }
5631
5632     SvTAINT(bigstr);
5633     i = littlelen - len;
5634     if (i > 0) {                        /* string might grow */
5635         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5636         mid = big + offset + len;
5637         midend = bigend = big + SvCUR(bigstr);
5638         bigend += i;
5639         *bigend = '\0';
5640         while (midend > mid)            /* shove everything down */
5641             *--bigend = *--midend;
5642         Move(little,big+offset,littlelen,char);
5643         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5644         SvSETMAGIC(bigstr);
5645         return;
5646     }
5647     else if (i == 0) {
5648         Move(little,SvPVX(bigstr)+offset,len,char);
5649         SvSETMAGIC(bigstr);
5650         return;
5651     }
5652
5653     big = SvPVX(bigstr);
5654     mid = big + offset;
5655     midend = mid + len;
5656     bigend = big + SvCUR(bigstr);
5657
5658     if (midend > bigend)
5659         Perl_croak(aTHX_ "panic: sv_insert");
5660
5661     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5662         if (littlelen) {
5663             Move(little, mid, littlelen,char);
5664             mid += littlelen;
5665         }
5666         i = bigend - midend;
5667         if (i > 0) {
5668             Move(midend, mid, i,char);
5669             mid += i;
5670         }
5671         *mid = '\0';
5672         SvCUR_set(bigstr, mid - big);
5673     }
5674     else if ((i = mid - big)) { /* faster from front */
5675         midend -= littlelen;
5676         mid = midend;
5677         Move(big, midend - i, i, char);
5678         sv_chop(bigstr,midend-i);
5679         if (littlelen)
5680             Move(little, mid, littlelen,char);
5681     }
5682     else if (littlelen) {
5683         midend -= littlelen;
5684         sv_chop(bigstr,midend);
5685         Move(little,midend,littlelen,char);
5686     }
5687     else {
5688         sv_chop(bigstr,midend);
5689     }
5690     SvSETMAGIC(bigstr);
5691 }
5692
5693 /*
5694 =for apidoc sv_replace
5695
5696 Make the first argument a copy of the second, then delete the original.
5697 The target SV physically takes over ownership of the body of the source SV
5698 and inherits its flags; however, the target keeps any magic it owns,
5699 and any magic in the source is discarded.
5700 Note that this is a rather specialist SV copying operation; most of the
5701 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5702
5703 =cut
5704 */
5705
5706 void
5707 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5708 {
5709     dVAR;
5710     const U32 refcnt = SvREFCNT(sv);
5711
5712     PERL_ARGS_ASSERT_SV_REPLACE;
5713
5714     SV_CHECK_THINKFIRST_COW_DROP(sv);
5715     if (SvREFCNT(nsv) != 1) {
5716         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5717                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5718     }
5719     if (SvMAGICAL(sv)) {
5720         if (SvMAGICAL(nsv))
5721             mg_free(nsv);
5722         else
5723             sv_upgrade(nsv, SVt_PVMG);
5724         SvMAGIC_set(nsv, SvMAGIC(sv));
5725         SvFLAGS(nsv) |= SvMAGICAL(sv);
5726         SvMAGICAL_off(sv);
5727         SvMAGIC_set(sv, NULL);
5728     }
5729     SvREFCNT(sv) = 0;
5730     sv_clear(sv);
5731     assert(!SvREFCNT(sv));
5732 #ifdef DEBUG_LEAKING_SCALARS
5733     sv->sv_flags  = nsv->sv_flags;
5734     sv->sv_any    = nsv->sv_any;
5735     sv->sv_refcnt = nsv->sv_refcnt;
5736     sv->sv_u      = nsv->sv_u;
5737 #else
5738     StructCopy(nsv,sv,SV);
5739 #endif
5740     if(SvTYPE(sv) == SVt_IV) {
5741         SvANY(sv)
5742             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5743     }
5744         
5745
5746 #ifdef PERL_OLD_COPY_ON_WRITE
5747     if (SvIsCOW_normal(nsv)) {
5748         /* We need to follow the pointers around the loop to make the
5749            previous SV point to sv, rather than nsv.  */
5750         SV *next;
5751         SV *current = nsv;
5752         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5753             assert(next);
5754             current = next;
5755             assert(SvPVX_const(current) == SvPVX_const(nsv));
5756         }
5757         /* Make the SV before us point to the SV after us.  */
5758         if (DEBUG_C_TEST) {
5759             PerlIO_printf(Perl_debug_log, "previous is\n");
5760             sv_dump(current);
5761             PerlIO_printf(Perl_debug_log,
5762                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5763                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5764         }
5765         SV_COW_NEXT_SV_SET(current, sv);
5766     }
5767 #endif
5768     SvREFCNT(sv) = refcnt;
5769     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5770     SvREFCNT(nsv) = 0;
5771     del_SV(nsv);
5772 }
5773
5774 /* We're about to free a GV which has a CV that refers back to us.
5775  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5776  * field) */
5777
5778 STATIC void
5779 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5780 {
5781     char *stash;
5782     SV *gvname;
5783     GV *anongv;
5784
5785     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5786
5787     /* be assertive! */
5788     assert(SvREFCNT(gv) == 0);
5789     assert(isGV(gv) && isGV_with_GP(gv));
5790     assert(GvGP(gv));
5791     assert(!CvANON(cv));
5792     assert(CvGV(cv) == gv);
5793
5794     /* will the CV shortly be freed by gp_free() ? */
5795     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
5796         SvANY(cv)->xcv_gv = NULL;
5797         return;
5798     }
5799
5800     /* if not, anonymise: */
5801     stash  = GvSTASH(gv) ? HvNAME(GvSTASH(gv)) : NULL;
5802     gvname = Perl_newSVpvf(aTHX_ "%s::__ANON__",
5803                                         stash ? stash : "__ANON__");
5804     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5805     SvREFCNT_dec(gvname);
5806
5807     CvANON_on(cv);
5808     CvCVGV_RC_on(cv);
5809     SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
5810 }
5811
5812
5813 /*
5814 =for apidoc sv_clear
5815
5816 Clear an SV: call any destructors, free up any memory used by the body,
5817 and free the body itself. The SV's head is I<not> freed, although
5818 its type is set to all 1's so that it won't inadvertently be assumed
5819 to be live during global destruction etc.
5820 This function should only be called when REFCNT is zero. Most of the time
5821 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5822 instead.
5823
5824 =cut
5825 */
5826
5827 void
5828 Perl_sv_clear(pTHX_ SV *const orig_sv)
5829 {
5830     dVAR;
5831     HV *stash;
5832     U32 type;
5833     const struct body_details *sv_type_details;
5834     SV* iter_sv = NULL;
5835     SV* next_sv = NULL;
5836     register SV *sv = orig_sv;
5837
5838     PERL_ARGS_ASSERT_SV_CLEAR;
5839
5840     /* within this loop, sv is the SV currently being freed, and
5841      * iter_sv is the most recent AV or whatever that's being iterated
5842      * over to provide more SVs */
5843
5844     while (sv) {
5845
5846         type = SvTYPE(sv);
5847
5848         assert(SvREFCNT(sv) == 0);
5849         assert(SvTYPE(sv) != SVTYPEMASK);
5850
5851         if (type <= SVt_IV) {
5852             /* See the comment in sv.h about the collusion between this
5853              * early return and the overloading of the NULL slots in the
5854              * size table.  */
5855             if (SvROK(sv))
5856                 goto free_rv;
5857             SvFLAGS(sv) &= SVf_BREAK;
5858             SvFLAGS(sv) |= SVTYPEMASK;
5859             goto free_head;
5860         }
5861
5862         if (SvOBJECT(sv)) {
5863             if (PL_defstash &&  /* Still have a symbol table? */
5864                 SvDESTROYABLE(sv))
5865             {
5866                 dSP;
5867                 HV* stash;
5868                 do {
5869                     CV* destructor;
5870                     stash = SvSTASH(sv);
5871                     destructor = StashHANDLER(stash,DESTROY);
5872                     if (destructor
5873                         /* A constant subroutine can have no side effects, so
5874                            don't bother calling it.  */
5875                         && !CvCONST(destructor)
5876                         /* Don't bother calling an empty destructor */
5877                         && (CvISXSUB(destructor)
5878                         || (CvSTART(destructor)
5879                             && (CvSTART(destructor)->op_next->op_type
5880                                                 != OP_LEAVESUB))))
5881                     {
5882                         SV* const tmpref = newRV(sv);
5883                         SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5884                         ENTER;
5885                         PUSHSTACKi(PERLSI_DESTROY);
5886                         EXTEND(SP, 2);
5887                         PUSHMARK(SP);
5888                         PUSHs(tmpref);
5889                         PUTBACK;
5890                         call_sv(MUTABLE_SV(destructor),
5891                                     G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5892                         POPSTACK;
5893                         SPAGAIN;
5894                         LEAVE;
5895                         if(SvREFCNT(tmpref) < 2) {
5896                             /* tmpref is not kept alive! */
5897                             SvREFCNT(sv)--;
5898                             SvRV_set(tmpref, NULL);
5899                             SvROK_off(tmpref);
5900                         }
5901                         SvREFCNT_dec(tmpref);
5902                     }
5903                 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5904
5905
5906                 if (SvREFCNT(sv)) {
5907                     if (PL_in_clean_objs)
5908                         Perl_croak(aTHX_
5909                             "DESTROY created new reference to dead object '%s'",
5910                             HvNAME_get(stash));
5911                     /* DESTROY gave object new lease on life */
5912                     goto get_next_sv;
5913                 }
5914             }
5915
5916             if (SvOBJECT(sv)) {
5917                 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5918                 SvOBJECT_off(sv);       /* Curse the object. */
5919                 if (type != SVt_PVIO)
5920                     --PL_sv_objcount;/* XXX Might want something more general */
5921             }
5922         }
5923         if (type >= SVt_PVMG) {
5924             if (type == SVt_PVMG && SvPAD_OUR(sv)) {
5925                 SvREFCNT_dec(SvOURSTASH(sv));
5926             } else if (SvMAGIC(sv))
5927                 mg_free(sv);
5928             if (type == SVt_PVMG && SvPAD_TYPED(sv))
5929                 SvREFCNT_dec(SvSTASH(sv));
5930         }
5931         switch (type) {
5932             /* case SVt_BIND: */
5933         case SVt_PVIO:
5934             if (IoIFP(sv) &&
5935                 IoIFP(sv) != PerlIO_stdin() &&
5936                 IoIFP(sv) != PerlIO_stdout() &&
5937                 IoIFP(sv) != PerlIO_stderr() &&
5938                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5939             {
5940                 io_close(MUTABLE_IO(sv), FALSE);
5941             }
5942             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5943                 PerlDir_close(IoDIRP(sv));
5944             IoDIRP(sv) = (DIR*)NULL;
5945             Safefree(IoTOP_NAME(sv));
5946             Safefree(IoFMT_NAME(sv));
5947             Safefree(IoBOTTOM_NAME(sv));
5948             goto freescalar;
5949         case SVt_REGEXP:
5950             /* FIXME for plugins */
5951             pregfree2((REGEXP*) sv);
5952             goto freescalar;
5953         case SVt_PVCV:
5954         case SVt_PVFM:
5955             cv_undef(MUTABLE_CV(sv));
5956             /* If we're in a stash, we don't own a reference to it.
5957              * However it does have a back reference to us, which needs to
5958              * be cleared.  */
5959             if ((stash = CvSTASH(sv)))
5960                 sv_del_backref(MUTABLE_SV(stash), sv);
5961             goto freescalar;
5962         case SVt_PVHV:
5963             if (PL_last_swash_hv == (const HV *)sv) {
5964                 PL_last_swash_hv = NULL;
5965             }
5966             Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
5967             hv_undef(MUTABLE_HV(sv));
5968             break;
5969         case SVt_PVAV:
5970             {
5971                 AV* av = MUTABLE_AV(sv);
5972                 if (PL_comppad == av) {
5973                     PL_comppad = NULL;
5974                     PL_curpad = NULL;
5975                 }
5976                 if (AvREAL(av) && AvFILLp(av) > -1) {
5977                     next_sv = AvARRAY(av)[AvFILLp(av)--];
5978                     /* save old iter_sv in top-most slot of AV,
5979                      * and pray that it doesn't get wiped in the meantime */
5980                     AvARRAY(av)[AvMAX(av)] = iter_sv;
5981                     iter_sv = sv;
5982                     goto get_next_sv; /* process this new sv */
5983                 }
5984                 Safefree(AvALLOC(av));
5985             }
5986
5987             break;
5988         case SVt_PVLV:
5989             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5990                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5991                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5992                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5993             }
5994             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
5995                 SvREFCNT_dec(LvTARG(sv));
5996         case SVt_PVGV:
5997             if (isGV_with_GP(sv)) {
5998                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
5999                    && HvNAME_get(stash))
6000                     mro_method_changed_in(stash);
6001                 gp_free(MUTABLE_GV(sv));
6002                 if (GvNAME_HEK(sv))
6003                     unshare_hek(GvNAME_HEK(sv));
6004                 /* If we're in a stash, we don't own a reference to it.
6005                  * However it does have a back reference to us, which
6006                  * needs to be cleared.  */
6007                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6008                         sv_del_backref(MUTABLE_SV(stash), sv);
6009             }
6010             /* FIXME. There are probably more unreferenced pointers to SVs
6011              * in the interpreter struct that we should check and tidy in
6012              * a similar fashion to this:  */
6013             if ((const GV *)sv == PL_last_in_gv)
6014                 PL_last_in_gv = NULL;
6015         case SVt_PVMG:
6016         case SVt_PVNV:
6017         case SVt_PVIV:
6018         case SVt_PV:
6019           freescalar:
6020             /* Don't bother with SvOOK_off(sv); as we're only going to
6021              * free it.  */
6022             if (SvOOK(sv)) {
6023                 STRLEN offset;
6024                 SvOOK_offset(sv, offset);
6025                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6026                 /* Don't even bother with turning off the OOK flag.  */
6027             }
6028             if (SvROK(sv)) {
6029             free_rv:
6030                 {
6031                     SV * const target = SvRV(sv);
6032                     if (SvWEAKREF(sv))
6033                         sv_del_backref(target, sv);
6034                     else
6035                         next_sv = target;
6036                 }
6037             }
6038 #ifdef PERL_OLD_COPY_ON_WRITE
6039             else if (SvPVX_const(sv)
6040                      && !(SvTYPE(sv) == SVt_PVIO
6041                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6042             {
6043                 if (SvIsCOW(sv)) {
6044                     if (DEBUG_C_TEST) {
6045                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6046                         sv_dump(sv);
6047                     }
6048                     if (SvLEN(sv)) {
6049                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6050                     } else {
6051                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6052                     }
6053
6054                     SvFAKE_off(sv);
6055                 } else if (SvLEN(sv)) {
6056                     Safefree(SvPVX_const(sv));
6057                 }
6058             }
6059 #else
6060             else if (SvPVX_const(sv) && SvLEN(sv)
6061                      && !(SvTYPE(sv) == SVt_PVIO
6062                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6063                 Safefree(SvPVX_mutable(sv));
6064             else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
6065                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6066                 SvFAKE_off(sv);
6067             }
6068 #endif
6069             break;
6070         case SVt_NV:
6071             break;
6072         }
6073
6074       free_body:
6075
6076         SvFLAGS(sv) &= SVf_BREAK;
6077         SvFLAGS(sv) |= SVTYPEMASK;
6078
6079         sv_type_details = bodies_by_type + type;
6080         if (sv_type_details->arena) {
6081             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6082                      &PL_body_roots[type]);
6083         }
6084         else if (sv_type_details->body_size) {
6085             safefree(SvANY(sv));
6086         }
6087
6088       free_head:
6089         /* caller is responsible for freeing the head of the original sv */
6090         if (sv != orig_sv && !SvREFCNT(sv))
6091             del_SV(sv);
6092
6093         /* grab and free next sv, if any */
6094       get_next_sv:
6095         while (1) {
6096             sv = NULL;
6097             if (next_sv) {
6098                 sv = next_sv;
6099                 next_sv = NULL;
6100             }
6101             else if (!iter_sv) {
6102                 break;
6103             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6104                 AV *const av = (AV*)iter_sv;
6105                 if (AvFILLp(av) > -1) {
6106                     sv = AvARRAY(av)[AvFILLp(av)--];
6107                 }
6108                 else { /* no more elements of current AV to free */
6109                     sv = iter_sv;
6110                     type = SvTYPE(sv);
6111                     /* restore previous value, squirrelled away */
6112                     iter_sv = AvARRAY(av)[AvMAX(av)];
6113                     Safefree(AvALLOC(av));
6114                     goto free_body;
6115                 }
6116             }
6117
6118             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6119
6120             if (!sv)
6121                 continue;
6122             if (!SvREFCNT(sv)) {
6123                 sv_free(sv);
6124                 continue;
6125             }
6126             if (--(SvREFCNT(sv)))
6127                 continue;
6128 #ifdef DEBUGGING
6129             if (SvTEMP(sv)) {
6130                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6131                          "Attempt to free temp prematurely: SV 0x%"UVxf
6132                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6133                 continue;
6134             }
6135 #endif
6136             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6137                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6138                 SvREFCNT(sv) = (~(U32)0)/2;
6139                 continue;
6140             }
6141             break;
6142         } /* while 1 */
6143
6144     } /* while sv */
6145 }
6146
6147 /*
6148 =for apidoc sv_newref
6149
6150 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
6151 instead.
6152
6153 =cut
6154 */
6155
6156 SV *
6157 Perl_sv_newref(pTHX_ SV *const sv)
6158 {
6159     PERL_UNUSED_CONTEXT;
6160     if (sv)
6161         (SvREFCNT(sv))++;
6162     return sv;
6163 }
6164
6165 /*
6166 =for apidoc sv_free
6167
6168 Decrement an SV's reference count, and if it drops to zero, call
6169 C<sv_clear> to invoke destructors and free up any memory used by
6170 the body; finally, deallocate the SV's head itself.
6171 Normally called via a wrapper macro C<SvREFCNT_dec>.
6172
6173 =cut
6174 */
6175
6176 void
6177 Perl_sv_free(pTHX_ SV *const sv)
6178 {
6179     dVAR;
6180     if (!sv)
6181         return;
6182     if (SvREFCNT(sv) == 0) {
6183         if (SvFLAGS(sv) & SVf_BREAK)
6184             /* this SV's refcnt has been artificially decremented to
6185              * trigger cleanup */
6186             return;
6187         if (PL_in_clean_all) /* All is fair */
6188             return;
6189         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6190             /* make sure SvREFCNT(sv)==0 happens very seldom */
6191             SvREFCNT(sv) = (~(U32)0)/2;
6192             return;
6193         }
6194         if (ckWARN_d(WARN_INTERNAL)) {
6195 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6196             Perl_dump_sv_child(aTHX_ sv);
6197 #else
6198   #ifdef DEBUG_LEAKING_SCALARS
6199             sv_dump(sv);
6200   #endif
6201 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6202             if (PL_warnhook == PERL_WARNHOOK_FATAL
6203                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6204                 /* Don't let Perl_warner cause us to escape our fate:  */
6205                 abort();
6206             }
6207 #endif
6208             /* This may not return:  */
6209             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6210                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6211                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6212 #endif
6213         }
6214 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6215         abort();
6216 #endif
6217         return;
6218     }
6219     if (--(SvREFCNT(sv)) > 0)
6220         return;
6221     Perl_sv_free2(aTHX_ sv);
6222 }
6223
6224 void
6225 Perl_sv_free2(pTHX_ SV *const sv)
6226 {
6227     dVAR;
6228
6229     PERL_ARGS_ASSERT_SV_FREE2;
6230
6231 #ifdef DEBUGGING
6232     if (SvTEMP(sv)) {
6233         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6234                          "Attempt to free temp prematurely: SV 0x%"UVxf
6235                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6236         return;
6237     }
6238 #endif
6239     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6240         /* make sure SvREFCNT(sv)==0 happens very seldom */
6241         SvREFCNT(sv) = (~(U32)0)/2;
6242         return;
6243     }
6244     sv_clear(sv);
6245     if (! SvREFCNT(sv))
6246         del_SV(sv);
6247 }
6248
6249 /*
6250 =for apidoc sv_len
6251
6252 Returns the length of the string in the SV. Handles magic and type
6253 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6254
6255 =cut
6256 */
6257
6258 STRLEN
6259 Perl_sv_len(pTHX_ register SV *const sv)
6260 {
6261     STRLEN len;
6262
6263     if (!sv)
6264         return 0;
6265
6266     if (SvGMAGICAL(sv))
6267         len = mg_length(sv);
6268     else
6269         (void)SvPV_const(sv, len);
6270     return len;
6271 }
6272
6273 /*
6274 =for apidoc sv_len_utf8
6275
6276 Returns the number of characters in the string in an SV, counting wide
6277 UTF-8 bytes as a single character. Handles magic and type coercion.
6278
6279 =cut
6280 */
6281
6282 /*
6283  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6284  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6285  * (Note that the mg_len is not the length of the mg_ptr field.
6286  * This allows the cache to store the character length of the string without
6287  * needing to malloc() extra storage to attach to the mg_ptr.)
6288  *
6289  */
6290
6291 STRLEN
6292 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6293 {
6294     if (!sv)
6295         return 0;
6296
6297     if (SvGMAGICAL(sv))
6298         return mg_length(sv);
6299     else
6300     {
6301         STRLEN len;
6302         const U8 *s = (U8*)SvPV_const(sv, len);
6303
6304         if (PL_utf8cache) {
6305             STRLEN ulen;
6306             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6307
6308             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6309                 if (mg->mg_len != -1)
6310                     ulen = mg->mg_len;
6311                 else {
6312                     /* We can use the offset cache for a headstart.
6313                        The longer value is stored in the first pair.  */
6314                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6315
6316                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6317                                                        s + len);
6318                 }
6319                 
6320                 if (PL_utf8cache < 0) {
6321                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6322                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6323                 }
6324             }
6325             else {
6326                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6327                 utf8_mg_len_cache_update(sv, &mg, ulen);
6328             }
6329             return ulen;
6330         }
6331         return Perl_utf8_length(aTHX_ s, s + len);
6332     }
6333 }
6334
6335 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6336    offset.  */
6337 static STRLEN
6338 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6339                       STRLEN *const uoffset_p, bool *const at_end)
6340 {
6341     const U8 *s = start;
6342     STRLEN uoffset = *uoffset_p;
6343
6344     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6345
6346     while (s < send && uoffset) {
6347         --uoffset;
6348         s += UTF8SKIP(s);
6349     }
6350     if (s == send) {
6351         *at_end = TRUE;
6352     }
6353     else if (s > send) {
6354         *at_end = TRUE;
6355         /* This is the existing behaviour. Possibly it should be a croak, as
6356            it's actually a bounds error  */
6357         s = send;
6358     }
6359     *uoffset_p -= uoffset;
6360     return s - start;
6361 }
6362
6363 /* Given the length of the string in both bytes and UTF-8 characters, decide
6364    whether to walk forwards or backwards to find the byte corresponding to
6365    the passed in UTF-8 offset.  */
6366 static STRLEN
6367 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6368                     STRLEN uoffset, const STRLEN uend)
6369 {
6370     STRLEN backw = uend - uoffset;
6371
6372     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6373
6374     if (uoffset < 2 * backw) {
6375         /* The assumption is that going forwards is twice the speed of going
6376            forward (that's where the 2 * backw comes from).
6377            (The real figure of course depends on the UTF-8 data.)  */
6378         const U8 *s = start;
6379
6380         while (s < send && uoffset--)
6381             s += UTF8SKIP(s);
6382         assert (s <= send);
6383         if (s > send)
6384             s = send;
6385         return s - start;
6386     }
6387
6388     while (backw--) {
6389         send--;
6390         while (UTF8_IS_CONTINUATION(*send))
6391             send--;
6392     }
6393     return send - start;
6394 }
6395
6396 /* For the string representation of the given scalar, find the byte
6397    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6398    give another position in the string, *before* the sought offset, which
6399    (which is always true, as 0, 0 is a valid pair of positions), which should
6400    help reduce the amount of linear searching.
6401    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6402    will be used to reduce the amount of linear searching. The cache will be
6403    created if necessary, and the found value offered to it for update.  */
6404 static STRLEN
6405 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6406                     const U8 *const send, STRLEN uoffset,
6407                     STRLEN uoffset0, STRLEN boffset0)
6408 {
6409     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6410     bool found = FALSE;
6411     bool at_end = FALSE;
6412
6413     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6414
6415     assert (uoffset >= uoffset0);
6416
6417     if (!uoffset)
6418         return 0;
6419
6420     if (!SvREADONLY(sv)
6421         && PL_utf8cache
6422         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6423                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6424         if ((*mgp)->mg_ptr) {
6425             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6426             if (cache[0] == uoffset) {
6427                 /* An exact match. */
6428                 return cache[1];
6429             }
6430             if (cache[2] == uoffset) {
6431                 /* An exact match. */
6432                 return cache[3];
6433             }
6434
6435             if (cache[0] < uoffset) {
6436                 /* The cache already knows part of the way.   */
6437                 if (cache[0] > uoffset0) {
6438                     /* The cache knows more than the passed in pair  */
6439                     uoffset0 = cache[0];
6440                     boffset0 = cache[1];
6441                 }
6442                 if ((*mgp)->mg_len != -1) {
6443                     /* And we know the end too.  */
6444                     boffset = boffset0
6445                         + sv_pos_u2b_midway(start + boffset0, send,
6446                                               uoffset - uoffset0,
6447                                               (*mgp)->mg_len - uoffset0);
6448                 } else {
6449                     uoffset -= uoffset0;
6450                     boffset = boffset0
6451                         + sv_pos_u2b_forwards(start + boffset0,
6452                                               send, &uoffset, &at_end);
6453                     uoffset += uoffset0;
6454                 }
6455             }
6456             else if (cache[2] < uoffset) {
6457                 /* We're between the two cache entries.  */
6458                 if (cache[2] > uoffset0) {
6459                     /* and the cache knows more than the passed in pair  */
6460                     uoffset0 = cache[2];
6461                     boffset0 = cache[3];
6462                 }
6463
6464                 boffset = boffset0
6465                     + sv_pos_u2b_midway(start + boffset0,
6466                                           start + cache[1],
6467                                           uoffset - uoffset0,
6468                                           cache[0] - uoffset0);
6469             } else {
6470                 boffset = boffset0
6471                     + sv_pos_u2b_midway(start + boffset0,
6472                                           start + cache[3],
6473                                           uoffset - uoffset0,
6474                                           cache[2] - uoffset0);
6475             }
6476             found = TRUE;
6477         }
6478         else if ((*mgp)->mg_len != -1) {
6479             /* If we can take advantage of a passed in offset, do so.  */
6480             /* In fact, offset0 is either 0, or less than offset, so don't
6481                need to worry about the other possibility.  */
6482             boffset = boffset0
6483                 + sv_pos_u2b_midway(start + boffset0, send,
6484                                       uoffset - uoffset0,
6485                                       (*mgp)->mg_len - uoffset0);
6486             found = TRUE;
6487         }
6488     }
6489
6490     if (!found || PL_utf8cache < 0) {
6491         STRLEN real_boffset;
6492         uoffset -= uoffset0;
6493         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6494                                                       send, &uoffset, &at_end);
6495         uoffset += uoffset0;
6496
6497         if (found && PL_utf8cache < 0)
6498             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6499                                        real_boffset, sv);
6500         boffset = real_boffset;
6501     }
6502
6503     if (PL_utf8cache) {
6504         if (at_end)
6505             utf8_mg_len_cache_update(sv, mgp, uoffset);
6506         else
6507             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6508     }
6509     return boffset;
6510 }
6511
6512
6513 /*
6514 =for apidoc sv_pos_u2b_flags
6515
6516 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6517 the start of the string, to a count of the equivalent number of bytes; if
6518 lenp is non-zero, it does the same to lenp, but this time starting from
6519 the offset, rather than from the start of the string. Handles type coercion.
6520 I<flags> is passed to C<SvPV_flags>, and usually should be
6521 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6522
6523 =cut
6524 */
6525
6526 /*
6527  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6528  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6529  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6530  *
6531  */
6532
6533 STRLEN
6534 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6535                       U32 flags)
6536 {
6537     const U8 *start;
6538     STRLEN len;
6539     STRLEN boffset;
6540
6541     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6542
6543     start = (U8*)SvPV_flags(sv, len, flags);
6544     if (len) {
6545         const U8 * const send = start + len;
6546         MAGIC *mg = NULL;
6547         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6548
6549         if (lenp
6550             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6551                         is 0, and *lenp is already set to that.  */) {
6552             /* Convert the relative offset to absolute.  */
6553             const STRLEN uoffset2 = uoffset + *lenp;
6554             const STRLEN boffset2
6555                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6556                                       uoffset, boffset) - boffset;
6557
6558             *lenp = boffset2;
6559         }
6560     } else {
6561         if (lenp)
6562             *lenp = 0;
6563         boffset = 0;
6564     }
6565
6566     return boffset;
6567 }
6568
6569 /*
6570 =for apidoc sv_pos_u2b
6571
6572 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6573 the start of the string, to a count of the equivalent number of bytes; if
6574 lenp is non-zero, it does the same to lenp, but this time starting from
6575 the offset, rather than from the start of the string. Handles magic and
6576 type coercion.
6577
6578 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6579 than 2Gb.
6580
6581 =cut
6582 */
6583
6584 /*
6585  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6586  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6587  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6588  *
6589  */
6590
6591 /* This function is subject to size and sign problems */
6592
6593 void
6594 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6595 {
6596     PERL_ARGS_ASSERT_SV_POS_U2B;
6597
6598     if (lenp) {
6599         STRLEN ulen = (STRLEN)*lenp;
6600         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6601                                          SV_GMAGIC|SV_CONST_RETURN);
6602         *lenp = (I32)ulen;
6603     } else {
6604         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6605                                          SV_GMAGIC|SV_CONST_RETURN);
6606     }
6607 }
6608
6609 static void
6610 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6611                            const STRLEN ulen)
6612 {
6613     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6614     if (SvREADONLY(sv))
6615         return;
6616
6617     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6618                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6619         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6620     }
6621     assert(*mgp);
6622
6623     (*mgp)->mg_len = ulen;
6624     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
6625     if (ulen != (STRLEN) (*mgp)->mg_len)
6626         (*mgp)->mg_len = -1;
6627 }
6628
6629 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6630    byte length pairing. The (byte) length of the total SV is passed in too,
6631    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6632    may not have updated SvCUR, so we can't rely on reading it directly.
6633
6634    The proffered utf8/byte length pairing isn't used if the cache already has
6635    two pairs, and swapping either for the proffered pair would increase the
6636    RMS of the intervals between known byte offsets.
6637
6638    The cache itself consists of 4 STRLEN values
6639    0: larger UTF-8 offset
6640    1: corresponding byte offset
6641    2: smaller UTF-8 offset
6642    3: corresponding byte offset
6643
6644    Unused cache pairs have the value 0, 0.
6645    Keeping the cache "backwards" means that the invariant of
6646    cache[0] >= cache[2] is maintained even with empty slots, which means that
6647    the code that uses it doesn't need to worry if only 1 entry has actually
6648    been set to non-zero.  It also makes the "position beyond the end of the
6649    cache" logic much simpler, as the first slot is always the one to start
6650    from.   
6651 */
6652 static void
6653 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6654                            const STRLEN utf8, const STRLEN blen)
6655 {
6656     STRLEN *cache;
6657
6658     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6659
6660     if (SvREADONLY(sv))
6661         return;
6662
6663     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6664                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6665         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6666                            0);
6667         (*mgp)->mg_len = -1;
6668     }
6669     assert(*mgp);
6670
6671     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6672         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6673         (*mgp)->mg_ptr = (char *) cache;
6674     }
6675     assert(cache);
6676
6677     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6678         /* SvPOKp() because it's possible that sv has string overloading, and
6679            therefore is a reference, hence SvPVX() is actually a pointer.
6680            This cures the (very real) symptoms of RT 69422, but I'm not actually
6681            sure whether we should even be caching the results of UTF-8
6682            operations on overloading, given that nothing stops overloading
6683            returning a different value every time it's called.  */
6684         const U8 *start = (const U8 *) SvPVX_const(sv);
6685         const STRLEN realutf8 = utf8_length(start, start + byte);
6686
6687         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6688                                    sv);
6689     }
6690
6691     /* Cache is held with the later position first, to simplify the code
6692        that deals with unbounded ends.  */
6693        
6694     ASSERT_UTF8_CACHE(cache);
6695     if (cache[1] == 0) {
6696         /* Cache is totally empty  */
6697         cache[0] = utf8;
6698         cache[1] = byte;
6699     } else if (cache[3] == 0) {
6700         if (byte > cache[1]) {
6701             /* New one is larger, so goes first.  */
6702             cache[2] = cache[0];
6703             cache[3] = cache[1];
6704             cache[0] = utf8;
6705             cache[1] = byte;
6706         } else {
6707             cache[2] = utf8;
6708             cache[3] = byte;
6709         }
6710     } else {
6711 #define THREEWAY_SQUARE(a,b,c,d) \
6712             ((float)((d) - (c))) * ((float)((d) - (c))) \
6713             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6714                + ((float)((b) - (a))) * ((float)((b) - (a)))
6715
6716         /* Cache has 2 slots in use, and we know three potential pairs.
6717            Keep the two that give the lowest RMS distance. Do the
6718            calcualation in bytes simply because we always know the byte
6719            length.  squareroot has the same ordering as the positive value,
6720            so don't bother with the actual square root.  */
6721         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6722         if (byte > cache[1]) {
6723             /* New position is after the existing pair of pairs.  */
6724             const float keep_earlier
6725                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6726             const float keep_later
6727                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6728
6729             if (keep_later < keep_earlier) {
6730                 if (keep_later < existing) {
6731                     cache[2] = cache[0];
6732                     cache[3] = cache[1];
6733                     cache[0] = utf8;
6734                     cache[1] = byte;
6735                 }
6736             }
6737             else {
6738                 if (keep_earlier < existing) {
6739                     cache[0] = utf8;
6740                     cache[1] = byte;
6741                 }
6742             }
6743         }
6744         else if (byte > cache[3]) {
6745             /* New position is between the existing pair of pairs.  */
6746             const float keep_earlier
6747                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6748             const float keep_later
6749                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6750
6751             if (keep_later < keep_earlier) {
6752                 if (keep_later < existing) {
6753                     cache[2] = utf8;
6754                     cache[3] = byte;
6755                 }
6756             }
6757             else {
6758                 if (keep_earlier < existing) {
6759                     cache[0] = utf8;
6760                     cache[1] = byte;
6761                 }
6762             }
6763         }
6764         else {
6765             /* New position is before the existing pair of pairs.  */
6766             const float keep_earlier
6767                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6768             const float keep_later
6769                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6770
6771             if (keep_later < keep_earlier) {
6772                 if (keep_later < existing) {
6773                     cache[2] = utf8;
6774                     cache[3] = byte;
6775                 }
6776             }
6777             else {
6778                 if (keep_earlier < existing) {
6779                     cache[0] = cache[2];
6780                     cache[1] = cache[3];
6781                     cache[2] = utf8;
6782                     cache[3] = byte;
6783                 }
6784             }
6785         }
6786     }
6787     ASSERT_UTF8_CACHE(cache);
6788 }
6789
6790 /* We already know all of the way, now we may be able to walk back.  The same
6791    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6792    backward is half the speed of walking forward. */
6793 static STRLEN
6794 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6795                     const U8 *end, STRLEN endu)
6796 {
6797     const STRLEN forw = target - s;
6798     STRLEN backw = end - target;
6799
6800     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6801
6802     if (forw < 2 * backw) {
6803         return utf8_length(s, target);
6804     }
6805
6806     while (end > target) {
6807         end--;
6808         while (UTF8_IS_CONTINUATION(*end)) {
6809             end--;
6810         }
6811         endu--;
6812     }
6813     return endu;
6814 }
6815
6816 /*
6817 =for apidoc sv_pos_b2u
6818
6819 Converts the value pointed to by offsetp from a count of bytes from the
6820 start of the string, to a count of the equivalent number of UTF-8 chars.
6821 Handles magic and type coercion.
6822
6823 =cut
6824 */
6825
6826 /*
6827  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
6828  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6829  * byte offsets.
6830  *
6831  */
6832 void
6833 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
6834 {
6835     const U8* s;
6836     const STRLEN byte = *offsetp;
6837     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
6838     STRLEN blen;
6839     MAGIC* mg = NULL;
6840     const U8* send;
6841     bool found = FALSE;
6842
6843     PERL_ARGS_ASSERT_SV_POS_B2U;
6844
6845     if (!sv)
6846         return;
6847
6848     s = (const U8*)SvPV_const(sv, blen);
6849
6850     if (blen < byte)
6851         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
6852
6853     send = s + byte;
6854
6855     if (!SvREADONLY(sv)
6856         && PL_utf8cache
6857         && SvTYPE(sv) >= SVt_PVMG
6858         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
6859     {
6860         if (mg->mg_ptr) {
6861             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
6862             if (cache[1] == byte) {
6863                 /* An exact match. */
6864                 *offsetp = cache[0];
6865                 return;
6866             }
6867             if (cache[3] == byte) {
6868                 /* An exact match. */
6869                 *offsetp = cache[2];
6870                 return;
6871             }
6872
6873             if (cache[1] < byte) {
6874                 /* We already know part of the way. */
6875                 if (mg->mg_len != -1) {
6876                     /* Actually, we know the end too.  */
6877                     len = cache[0]
6878                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
6879                                               s + blen, mg->mg_len - cache[0]);
6880                 } else {
6881                     len = cache[0] + utf8_length(s + cache[1], send);
6882                 }
6883             }
6884             else if (cache[3] < byte) {
6885                 /* We're between the two cached pairs, so we do the calculation
6886                    offset by the byte/utf-8 positions for the earlier pair,
6887                    then add the utf-8 characters from the string start to
6888                    there.  */
6889                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
6890                                           s + cache[1], cache[0] - cache[2])
6891                     + cache[2];
6892
6893             }
6894             else { /* cache[3] > byte */
6895                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
6896                                           cache[2]);
6897
6898             }
6899             ASSERT_UTF8_CACHE(cache);
6900             found = TRUE;
6901         } else if (mg->mg_len != -1) {
6902             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
6903             found = TRUE;
6904         }
6905     }
6906     if (!found || PL_utf8cache < 0) {
6907         const STRLEN real_len = utf8_length(s, send);
6908
6909         if (found && PL_utf8cache < 0)
6910             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
6911         len = real_len;
6912     }
6913     *offsetp = len;
6914
6915     if (PL_utf8cache) {
6916         if (blen == byte)
6917             utf8_mg_len_cache_update(sv, &mg, len);
6918         else
6919             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
6920     }
6921 }
6922
6923 static void
6924 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
6925                              STRLEN real, SV *const sv)
6926 {
6927     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
6928
6929     /* As this is debugging only code, save space by keeping this test here,
6930        rather than inlining it in all the callers.  */
6931     if (from_cache == real)
6932         return;
6933
6934     /* Need to turn the assertions off otherwise we may recurse infinitely
6935        while printing error messages.  */
6936     SAVEI8(PL_utf8cache);
6937     PL_utf8cache = 0;
6938     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
6939                func, (UV) from_cache, (UV) real, SVfARG(sv));
6940 }
6941
6942 /*
6943 =for apidoc sv_eq
6944
6945 Returns a boolean indicating whether the strings in the two SVs are
6946 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6947 coerce its args to strings if necessary.
6948
6949 =for apidoc sv_eq_flags
6950
6951 Returns a boolean indicating whether the strings in the two SVs are
6952 identical. Is UTF-8 and 'use bytes' aware and coerces its args to strings
6953 if necessary. If the flags include SV_GMAGIC, it handles get-magic, too.
6954
6955 =cut
6956 */
6957
6958 I32
6959 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const I32 flags)
6960 {
6961     dVAR;
6962     const char *pv1;
6963     STRLEN cur1;
6964     const char *pv2;
6965     STRLEN cur2;
6966     I32  eq     = 0;
6967     char *tpv   = NULL;
6968     SV* svrecode = NULL;
6969
6970     if (!sv1) {
6971         pv1 = "";
6972         cur1 = 0;
6973     }
6974     else {
6975         /* if pv1 and pv2 are the same, second SvPV_const call may
6976          * invalidate pv1 (if we are handling magic), so we may need to
6977          * make a copy */
6978         if (sv1 == sv2 && flags & SV_GMAGIC
6979          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
6980             pv1 = SvPV_const(sv1, cur1);
6981             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
6982         }
6983         pv1 = SvPV_flags_const(sv1, cur1, flags);
6984     }
6985
6986     if (!sv2){
6987         pv2 = "";
6988         cur2 = 0;
6989     }
6990     else
6991         pv2 = SvPV_flags_const(sv2, cur2, flags);
6992
6993     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6994         /* Differing utf8ness.
6995          * Do not UTF8size the comparands as a side-effect. */
6996          if (PL_encoding) {
6997               if (SvUTF8(sv1)) {
6998                    svrecode = newSVpvn(pv2, cur2);
6999                    sv_recode_to_utf8(svrecode, PL_encoding);
7000                    pv2 = SvPV_const(svrecode, cur2);
7001               }
7002               else {
7003                    svrecode = newSVpvn(pv1, cur1);
7004                    sv_recode_to_utf8(svrecode, PL_encoding);
7005                    pv1 = SvPV_const(svrecode, cur1);
7006               }
7007               /* Now both are in UTF-8. */
7008               if (cur1 != cur2) {
7009                    SvREFCNT_dec(svrecode);
7010                    return FALSE;
7011               }
7012          }
7013          else {
7014               bool is_utf8 = TRUE;
7015
7016               if (SvUTF8(sv1)) {
7017                    /* sv1 is the UTF-8 one,
7018                     * if is equal it must be downgrade-able */
7019                    char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
7020                                                      &cur1, &is_utf8);
7021                    if (pv != pv1)
7022                         pv1 = tpv = pv;
7023               }
7024               else {
7025                    /* sv2 is the UTF-8 one,
7026                     * if is equal it must be downgrade-able */
7027                    char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
7028                                                       &cur2, &is_utf8);
7029                    if (pv != pv2)
7030                         pv2 = tpv = pv;
7031               }
7032               if (is_utf8) {
7033                    /* Downgrade not possible - cannot be eq */
7034                    assert (tpv == 0);
7035                    return FALSE;
7036               }
7037          }
7038     }
7039
7040     if (cur1 == cur2)
7041         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7042         
7043     SvREFCNT_dec(svrecode);
7044     if (tpv)
7045         Safefree(tpv);
7046
7047     return eq;
7048 }
7049
7050 /*
7051 =for apidoc sv_cmp
7052
7053 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7054 string in C<sv1> is less than, equal to, or greater than the string in
7055 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7056 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7057
7058 =for apidoc sv_cmp_flags
7059
7060 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7061 string in C<sv1> is less than, equal to, or greater than the string in
7062 C<sv2>. Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7063 if necessary. If the flags include SV_GMAGIC, it handles get magic. See
7064 also C<sv_cmp_locale_flags>.
7065
7066 =cut
7067 */
7068
7069 I32
7070 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7071 {
7072     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7073 }
7074
7075 I32
7076 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2, const I32 flags)
7077 {
7078     dVAR;
7079     STRLEN cur1, cur2;
7080     const char *pv1, *pv2;
7081     char *tpv = NULL;
7082     I32  cmp;
7083     SV *svrecode = NULL;
7084
7085     if (!sv1) {
7086         pv1 = "";
7087         cur1 = 0;
7088     }
7089     else
7090         pv1 = SvPV_flags_const(sv1, cur1, flags);
7091
7092     if (!sv2) {
7093         pv2 = "";
7094         cur2 = 0;
7095     }
7096     else
7097         pv2 = SvPV_flags_const(sv2, cur2, flags);
7098
7099     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7100         /* Differing utf8ness.
7101          * Do not UTF8size the comparands as a side-effect. */
7102         if (SvUTF8(sv1)) {
7103             if (PL_encoding) {
7104                  svrecode = newSVpvn(pv2, cur2);
7105                  sv_recode_to_utf8(svrecode, PL_encoding);
7106                  pv2 = SvPV_const(svrecode, cur2);
7107             }
7108             else {
7109                  pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
7110             }
7111         }
7112         else {
7113             if (PL_encoding) {
7114                  svrecode = newSVpvn(pv1, cur1);
7115                  sv_recode_to_utf8(svrecode, PL_encoding);
7116                  pv1 = SvPV_const(svrecode, cur1);
7117             }
7118             else {
7119                  pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
7120             }
7121         }
7122     }
7123
7124     if (!cur1) {
7125         cmp = cur2 ? -1 : 0;
7126     } else if (!cur2) {
7127         cmp = 1;
7128     } else {
7129         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7130
7131         if (retval) {
7132             cmp = retval < 0 ? -1 : 1;
7133         } else if (cur1 == cur2) {
7134             cmp = 0;
7135         } else {
7136             cmp = cur1 < cur2 ? -1 : 1;
7137         }
7138     }
7139
7140     SvREFCNT_dec(svrecode);
7141     if (tpv)
7142         Safefree(tpv);
7143
7144     return cmp;
7145 }
7146
7147 /*
7148 =for apidoc sv_cmp_locale
7149
7150 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7151 'use bytes' aware, handles get magic, and will coerce its args to strings
7152 if necessary.  See also C<sv_cmp>.
7153
7154 =for apidoc sv_cmp_locale_flags
7155
7156 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7157 'use bytes' aware and will coerce its args to strings if necessary. If the
7158 flags contain SV_GMAGIC, it handles get magic. See also C<sv_cmp_flags>.
7159
7160 =cut
7161 */
7162
7163 I32
7164 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7165 {
7166     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7167 }
7168
7169 I32
7170 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2, const I32 flags)
7171 {
7172     dVAR;
7173 #ifdef USE_LOCALE_COLLATE
7174
7175     char *pv1, *pv2;
7176     STRLEN len1, len2;
7177     I32 retval;
7178
7179     if (PL_collation_standard)
7180         goto raw_compare;
7181
7182     len1 = 0;
7183     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7184     len2 = 0;
7185     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7186
7187     if (!pv1 || !len1) {
7188         if (pv2 && len2)
7189             return -1;
7190         else
7191             goto raw_compare;
7192     }
7193     else {
7194         if (!pv2 || !len2)
7195             return 1;
7196     }
7197
7198     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7199
7200     if (retval)
7201         return retval < 0 ? -1 : 1;
7202
7203     /*
7204      * When the result of collation is equality, that doesn't mean
7205      * that there are no differences -- some locales exclude some
7206      * characters from consideration.  So to avoid false equalities,
7207      * we use the raw string as a tiebreaker.
7208      */
7209
7210   raw_compare:
7211     /*FALLTHROUGH*/
7212
7213 #endif /* USE_LOCALE_COLLATE */
7214
7215     return sv_cmp(sv1, sv2);
7216 }
7217
7218
7219 #ifdef USE_LOCALE_COLLATE
7220
7221 /*
7222 =for apidoc sv_collxfrm
7223
7224 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
7225 C<sv_collxfrm_flags>.
7226
7227 =for apidoc sv_collxfrm_flags
7228
7229 Add Collate Transform magic to an SV if it doesn't already have it. If the
7230 flags contain SV_GMAGIC, it handles get-magic.
7231
7232 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7233 scalar data of the variable, but transformed to such a format that a normal
7234 memory comparison can be used to compare the data according to the locale
7235 settings.
7236
7237 =cut
7238 */
7239
7240 char *
7241 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7242 {
7243     dVAR;
7244     MAGIC *mg;
7245
7246     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7247
7248     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7249     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7250         const char *s;
7251         char *xf;
7252         STRLEN len, xlen;
7253
7254         if (mg)
7255             Safefree(mg->mg_ptr);
7256         s = SvPV_flags_const(sv, len, flags);
7257         if ((xf = mem_collxfrm(s, len, &xlen))) {
7258             if (! mg) {
7259 #ifdef PERL_OLD_COPY_ON_WRITE
7260                 if (SvIsCOW(sv))
7261                     sv_force_normal_flags(sv, 0);
7262 #endif
7263                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7264                                  0, 0);
7265                 assert(mg);
7266             }
7267             mg->mg_ptr = xf;
7268             mg->mg_len = xlen;
7269         }
7270         else {
7271             if (mg) {
7272                 mg->mg_ptr = NULL;
7273                 mg->mg_len = -1;
7274             }
7275         }
7276     }
7277     if (mg && mg->mg_ptr) {
7278         *nxp = mg->mg_len;
7279         return mg->mg_ptr + sizeof(PL_collation_ix);
7280     }
7281     else {
7282         *nxp = 0;
7283         return NULL;
7284     }
7285 }
7286
7287 #endif /* USE_LOCALE_COLLATE */
7288
7289 /*
7290 =for apidoc sv_gets
7291
7292 Get a line from the filehandle and store it into the SV, optionally
7293 appending to the currently-stored string.
7294
7295 =cut
7296 */
7297
7298 char *
7299 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7300 {
7301     dVAR;
7302     const char *rsptr;
7303     STRLEN rslen;
7304     register STDCHAR rslast;
7305     register STDCHAR *bp;
7306     register I32 cnt;
7307     I32 i = 0;
7308     I32 rspara = 0;
7309
7310     PERL_ARGS_ASSERT_SV_GETS;
7311
7312     if (SvTHINKFIRST(sv))
7313         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7314     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7315        from <>.
7316        However, perlbench says it's slower, because the existing swipe code
7317        is faster than copy on write.
7318        Swings and roundabouts.  */
7319     SvUPGRADE(sv, SVt_PV);
7320
7321     SvSCREAM_off(sv);
7322
7323     if (append) {
7324         if (PerlIO_isutf8(fp)) {
7325             if (!SvUTF8(sv)) {
7326                 sv_utf8_upgrade_nomg(sv);
7327                 sv_pos_u2b(sv,&append,0);
7328             }
7329         } else if (SvUTF8(sv)) {
7330             SV * const tsv = newSV(0);
7331             sv_gets(tsv, fp, 0);
7332             sv_utf8_upgrade_nomg(tsv);
7333             SvCUR_set(sv,append);
7334             sv_catsv(sv,tsv);
7335             sv_free(tsv);
7336             goto return_string_or_null;
7337         }
7338     }
7339
7340     SvPOK_only(sv);
7341     if (!append) {
7342         SvCUR_set(sv,0);
7343     }
7344     if (PerlIO_isutf8(fp))
7345         SvUTF8_on(sv);
7346
7347     if (IN_PERL_COMPILETIME) {
7348         /* we always read code in line mode */
7349         rsptr = "\n";
7350         rslen = 1;
7351     }
7352     else if (RsSNARF(PL_rs)) {
7353         /* If it is a regular disk file use size from stat() as estimate
7354            of amount we are going to read -- may result in mallocing
7355            more memory than we really need if the layers below reduce
7356            the size we read (e.g. CRLF or a gzip layer).
7357          */
7358         Stat_t st;
7359         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7360             const Off_t offset = PerlIO_tell(fp);
7361             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7362                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7363             }
7364         }
7365         rsptr = NULL;
7366         rslen = 0;
7367     }
7368     else if (RsRECORD(PL_rs)) {
7369       I32 bytesread;
7370       char *buffer;
7371       U32 recsize;
7372 #ifdef VMS
7373       int fd;
7374 #endif
7375
7376       /* Grab the size of the record we're getting */
7377       recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7378       buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7379       /* Go yank in */
7380 #ifdef VMS
7381       /* VMS wants read instead of fread, because fread doesn't respect */
7382       /* RMS record boundaries. This is not necessarily a good thing to be */
7383       /* doing, but we've got no other real choice - except avoid stdio
7384          as implementation - perhaps write a :vms layer ?
7385        */
7386       fd = PerlIO_fileno(fp);
7387       if (fd == -1) { /* in-memory file from PerlIO::Scalar */
7388           bytesread = PerlIO_read(fp, buffer, recsize);
7389       }
7390       else {
7391           bytesread = PerlLIO_read(fd, buffer, recsize);
7392       }
7393 #else
7394       bytesread = PerlIO_read(fp, buffer, recsize);
7395 #endif
7396       if (bytesread < 0)
7397           bytesread = 0;
7398       SvCUR_set(sv, bytesread + append);
7399       buffer[bytesread] = '\0';
7400       goto return_string_or_null;
7401     }
7402     else if (RsPARA(PL_rs)) {
7403         rsptr = "\n\n";
7404         rslen = 2;
7405         rspara = 1;
7406     }
7407     else {
7408         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7409         if (PerlIO_isutf8(fp)) {
7410             rsptr = SvPVutf8(PL_rs, rslen);
7411         }
7412         else {
7413             if (SvUTF8(PL_rs)) {
7414                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7415                     Perl_croak(aTHX_ "Wide character in $/");
7416                 }
7417             }
7418             rsptr = SvPV_const(PL_rs, rslen);
7419         }
7420     }
7421
7422     rslast = rslen ? rsptr[rslen - 1] : '\0';
7423
7424     if (rspara) {               /* have to do this both before and after */
7425         do {                    /* to make sure file boundaries work right */
7426             if (PerlIO_eof(fp))
7427                 return 0;
7428             i = PerlIO_getc(fp);
7429             if (i != '\n') {
7430                 if (i == -1)
7431                     return 0;
7432                 PerlIO_ungetc(fp,i);
7433                 break;
7434             }
7435         } while (i != EOF);
7436     }
7437
7438     /* See if we know enough about I/O mechanism to cheat it ! */
7439
7440     /* This used to be #ifdef test - it is made run-time test for ease
7441        of abstracting out stdio interface. One call should be cheap
7442        enough here - and may even be a macro allowing compile
7443        time optimization.
7444      */
7445
7446     if (PerlIO_fast_gets(fp)) {
7447
7448     /*
7449      * We're going to steal some values from the stdio struct
7450      * and put EVERYTHING in the innermost loop into registers.
7451      */
7452     register STDCHAR *ptr;
7453     STRLEN bpx;
7454     I32 shortbuffered;
7455
7456 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7457     /* An ungetc()d char is handled separately from the regular
7458      * buffer, so we getc() it back out and stuff it in the buffer.
7459      */
7460     i = PerlIO_getc(fp);
7461     if (i == EOF) return 0;
7462     *(--((*fp)->_ptr)) = (unsigned char) i;
7463     (*fp)->_cnt++;
7464 #endif
7465
7466     /* Here is some breathtakingly efficient cheating */
7467
7468     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7469     /* make sure we have the room */
7470     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7471         /* Not room for all of it
7472            if we are looking for a separator and room for some
7473          */
7474         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7475             /* just process what we have room for */
7476             shortbuffered = cnt - SvLEN(sv) + append + 1;
7477             cnt -= shortbuffered;
7478         }
7479         else {
7480             shortbuffered = 0;
7481             /* remember that cnt can be negative */
7482             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7483         }
7484     }
7485     else
7486         shortbuffered = 0;
7487     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7488     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7489     DEBUG_P(PerlIO_printf(Perl_debug_log,
7490         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7491     DEBUG_P(PerlIO_printf(Perl_debug_log,
7492         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7493                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7494                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7495     for (;;) {
7496       screamer:
7497         if (cnt > 0) {
7498             if (rslen) {
7499                 while (cnt > 0) {                    /* this     |  eat */
7500                     cnt--;
7501                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7502                         goto thats_all_folks;        /* screams  |  sed :-) */
7503                 }
7504             }
7505             else {
7506                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7507                 bp += cnt;                           /* screams  |  dust */
7508                 ptr += cnt;                          /* louder   |  sed :-) */
7509                 cnt = 0;
7510             }
7511         }
7512         
7513         if (shortbuffered) {            /* oh well, must extend */
7514             cnt = shortbuffered;
7515             shortbuffered = 0;
7516             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7517             SvCUR_set(sv, bpx);
7518             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7519             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7520             continue;
7521         }
7522
7523         DEBUG_P(PerlIO_printf(Perl_debug_log,
7524                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7525                               PTR2UV(ptr),(long)cnt));
7526         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7527 #if 0
7528         DEBUG_P(PerlIO_printf(Perl_debug_log,
7529             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7530             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7531             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7532 #endif
7533         /* This used to call 'filbuf' in stdio form, but as that behaves like
7534            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7535            another abstraction.  */
7536         i   = PerlIO_getc(fp);          /* get more characters */
7537 #if 0
7538         DEBUG_P(PerlIO_printf(Perl_debug_log,
7539             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7540             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7541             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7542 #endif
7543         cnt = PerlIO_get_cnt(fp);
7544         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7545         DEBUG_P(PerlIO_printf(Perl_debug_log,
7546             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7547
7548         if (i == EOF)                   /* all done for ever? */
7549             goto thats_really_all_folks;
7550
7551         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7552         SvCUR_set(sv, bpx);
7553         SvGROW(sv, bpx + cnt + 2);
7554         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7555
7556         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7557
7558         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7559             goto thats_all_folks;
7560     }
7561
7562 thats_all_folks:
7563     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7564           memNE((char*)bp - rslen, rsptr, rslen))
7565         goto screamer;                          /* go back to the fray */
7566 thats_really_all_folks:
7567     if (shortbuffered)
7568         cnt += shortbuffered;
7569         DEBUG_P(PerlIO_printf(Perl_debug_log,
7570             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7571     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7572     DEBUG_P(PerlIO_printf(Perl_debug_log,
7573         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7574         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7575         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7576     *bp = '\0';
7577     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7578     DEBUG_P(PerlIO_printf(Perl_debug_log,
7579         "Screamer: done, len=%ld, string=|%.*s|\n",
7580         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7581     }
7582    else
7583     {
7584        /*The big, slow, and stupid way. */
7585 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7586         STDCHAR *buf = NULL;
7587         Newx(buf, 8192, STDCHAR);
7588         assert(buf);
7589 #else
7590         STDCHAR buf[8192];
7591 #endif
7592
7593 screamer2:
7594         if (rslen) {
7595             register const STDCHAR * const bpe = buf + sizeof(buf);
7596             bp = buf;
7597             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7598                 ; /* keep reading */
7599             cnt = bp - buf;
7600         }
7601         else {
7602             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7603             /* Accomodate broken VAXC compiler, which applies U8 cast to
7604              * both args of ?: operator, causing EOF to change into 255
7605              */
7606             if (cnt > 0)
7607                  i = (U8)buf[cnt - 1];
7608             else
7609                  i = EOF;
7610         }
7611
7612         if (cnt < 0)
7613             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7614         if (append)
7615              sv_catpvn(sv, (char *) buf, cnt);
7616         else
7617              sv_setpvn(sv, (char *) buf, cnt);
7618
7619         if (i != EOF &&                 /* joy */
7620             (!rslen ||
7621              SvCUR(sv) < rslen ||
7622              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7623         {
7624             append = -1;
7625             /*
7626              * If we're reading from a TTY and we get a short read,
7627              * indicating that the user hit his EOF character, we need
7628              * to notice it now, because if we try to read from the TTY
7629              * again, the EOF condition will disappear.
7630              *
7631              * The comparison of cnt to sizeof(buf) is an optimization
7632              * that prevents unnecessary calls to feof().
7633              *
7634              * - jik 9/25/96
7635              */
7636             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7637                 goto screamer2;
7638         }
7639
7640 #ifdef USE_HEAP_INSTEAD_OF_STACK
7641         Safefree(buf);
7642 #endif
7643     }
7644
7645     if (rspara) {               /* have to do this both before and after */
7646         while (i != EOF) {      /* to make sure file boundaries work right */
7647             i = PerlIO_getc(fp);
7648             if (i != '\n') {
7649                 PerlIO_ungetc(fp,i);
7650                 break;
7651             }
7652         }
7653     }
7654
7655 return_string_or_null:
7656     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7657 }
7658
7659 /*
7660 =for apidoc sv_inc
7661
7662 Auto-increment of the value in the SV, doing string to numeric conversion
7663 if necessary. Handles 'get' magic and operator overloading.
7664
7665 =cut
7666 */
7667
7668 void
7669 Perl_sv_inc(pTHX_ register SV *const sv)
7670 {
7671     if (!sv)
7672         return;
7673     SvGETMAGIC(sv);
7674     sv_inc_nomg(sv);
7675 }
7676
7677 /*
7678 =for apidoc sv_inc_nomg
7679
7680 Auto-increment of the value in the SV, doing string to numeric conversion
7681 if necessary. Handles operator overloading. Skips handling 'get' magic.
7682
7683 =cut
7684 */
7685
7686 void
7687 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7688 {
7689     dVAR;
7690     register char *d;
7691     int flags;
7692
7693     if (!sv)
7694         return;
7695     if (SvTHINKFIRST(sv)) {
7696         if (SvIsCOW(sv))
7697             sv_force_normal_flags(sv, 0);
7698         if (SvREADONLY(sv)) {
7699             if (IN_PERL_RUNTIME)
7700                 Perl_croak_no_modify(aTHX);
7701         }
7702         if (SvROK(sv)) {
7703             IV i;
7704             if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7705                 return;
7706             i = PTR2IV(SvRV(sv));
7707             sv_unref(sv);
7708             sv_setiv(sv, i);
7709         }
7710     }
7711     flags = SvFLAGS(sv);
7712     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7713         /* It's (privately or publicly) a float, but not tested as an
7714            integer, so test it to see. */
7715         (void) SvIV(sv);
7716         flags = SvFLAGS(sv);
7717     }
7718     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7719         /* It's publicly an integer, or privately an integer-not-float */
7720 #ifdef PERL_PRESERVE_IVUV
7721       oops_its_int:
7722 #endif
7723         if (SvIsUV(sv)) {
7724             if (SvUVX(sv) == UV_MAX)
7725                 sv_setnv(sv, UV_MAX_P1);
7726             else
7727                 (void)SvIOK_only_UV(sv);
7728                 SvUV_set(sv, SvUVX(sv) + 1);
7729         } else {
7730             if (SvIVX(sv) == IV_MAX)
7731                 sv_setuv(sv, (UV)IV_MAX + 1);
7732             else {
7733                 (void)SvIOK_only(sv);
7734                 SvIV_set(sv, SvIVX(sv) + 1);
7735             }   
7736         }
7737         return;
7738     }
7739     if (flags & SVp_NOK) {
7740         const NV was = SvNVX(sv);
7741         if (NV_OVERFLOWS_INTEGERS_AT &&
7742             was >= NV_OVERFLOWS_INTEGERS_AT) {
7743             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7744                            "Lost precision when incrementing %" NVff " by 1",
7745                            was);
7746         }
7747         (void)SvNOK_only(sv);
7748         SvNV_set(sv, was + 1.0);
7749         return;
7750     }
7751
7752     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7753         if ((flags & SVTYPEMASK) < SVt_PVIV)
7754             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7755         (void)SvIOK_only(sv);
7756         SvIV_set(sv, 1);
7757         return;
7758     }
7759     d = SvPVX(sv);
7760     while (isALPHA(*d)) d++;
7761     while (isDIGIT(*d)) d++;
7762     if (d < SvEND(sv)) {
7763 #ifdef PERL_PRESERVE_IVUV
7764         /* Got to punt this as an integer if needs be, but we don't issue
7765            warnings. Probably ought to make the sv_iv_please() that does
7766            the conversion if possible, and silently.  */
7767         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7768         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7769             /* Need to try really hard to see if it's an integer.
7770                9.22337203685478e+18 is an integer.
7771                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7772                so $a="9.22337203685478e+18"; $a+0; $a++
7773                needs to be the same as $a="9.22337203685478e+18"; $a++
7774                or we go insane. */
7775         
7776             (void) sv_2iv(sv);
7777             if (SvIOK(sv))
7778                 goto oops_its_int;
7779
7780             /* sv_2iv *should* have made this an NV */
7781             if (flags & SVp_NOK) {
7782                 (void)SvNOK_only(sv);
7783                 SvNV_set(sv, SvNVX(sv) + 1.0);
7784                 return;
7785             }
7786             /* I don't think we can get here. Maybe I should assert this
7787                And if we do get here I suspect that sv_setnv will croak. NWC
7788                Fall through. */
7789 #if defined(USE_LONG_DOUBLE)
7790             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",
7791                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7792 #else
7793             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7794                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7795 #endif
7796         }
7797 #endif /* PERL_PRESERVE_IVUV */
7798         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
7799         return;
7800     }
7801     d--;
7802     while (d >= SvPVX_const(sv)) {
7803         if (isDIGIT(*d)) {
7804             if (++*d <= '9')
7805                 return;
7806             *(d--) = '0';
7807         }
7808         else {
7809 #ifdef EBCDIC
7810             /* MKS: The original code here died if letters weren't consecutive.
7811              * at least it didn't have to worry about non-C locales.  The
7812              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
7813              * arranged in order (although not consecutively) and that only
7814              * [A-Za-z] are accepted by isALPHA in the C locale.
7815              */
7816             if (*d != 'z' && *d != 'Z') {
7817                 do { ++*d; } while (!isALPHA(*d));
7818                 return;
7819             }
7820             *(d--) -= 'z' - 'a';
7821 #else
7822             ++*d;
7823             if (isALPHA(*d))
7824                 return;
7825             *(d--) -= 'z' - 'a' + 1;
7826 #endif
7827         }
7828     }
7829     /* oh,oh, the number grew */
7830     SvGROW(sv, SvCUR(sv) + 2);
7831     SvCUR_set(sv, SvCUR(sv) + 1);
7832     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
7833         *d = d[-1];
7834     if (isDIGIT(d[1]))
7835         *d = '1';
7836     else
7837         *d = d[1];
7838 }
7839
7840 /*
7841 =for apidoc sv_dec
7842
7843 Auto-decrement of the value in the SV, doing string to numeric conversion
7844 if necessary. Handles 'get' magic and operator overloading.
7845
7846 =cut
7847 */
7848
7849 void
7850 Perl_sv_dec(pTHX_ register SV *const sv)
7851 {
7852     dVAR;
7853     if (!sv)
7854         return;
7855     SvGETMAGIC(sv);
7856     sv_dec_nomg(sv);
7857 }
7858
7859 /*
7860 =for apidoc sv_dec_nomg
7861
7862 Auto-decrement of the value in the SV, doing string to numeric conversion
7863 if necessary. Handles operator overloading. Skips handling 'get' magic.
7864
7865 =cut
7866 */
7867
7868 void
7869 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
7870 {
7871     dVAR;
7872     int flags;
7873
7874     if (!sv)
7875         return;
7876     if (SvTHINKFIRST(sv)) {
7877         if (SvIsCOW(sv))
7878             sv_force_normal_flags(sv, 0);
7879         if (SvREADONLY(sv)) {
7880             if (IN_PERL_RUNTIME)
7881                 Perl_croak_no_modify(aTHX);
7882         }
7883         if (SvROK(sv)) {
7884             IV i;
7885             if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7886                 return;
7887             i = PTR2IV(SvRV(sv));
7888             sv_unref(sv);
7889             sv_setiv(sv, i);
7890         }
7891     }
7892     /* Unlike sv_inc we don't have to worry about string-never-numbers
7893        and keeping them magic. But we mustn't warn on punting */
7894     flags = SvFLAGS(sv);
7895     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7896         /* It's publicly an integer, or privately an integer-not-float */
7897 #ifdef PERL_PRESERVE_IVUV
7898       oops_its_int:
7899 #endif
7900         if (SvIsUV(sv)) {
7901             if (SvUVX(sv) == 0) {
7902                 (void)SvIOK_only(sv);
7903                 SvIV_set(sv, -1);
7904             }
7905             else {
7906                 (void)SvIOK_only_UV(sv);
7907                 SvUV_set(sv, SvUVX(sv) - 1);
7908             }   
7909         } else {
7910             if (SvIVX(sv) == IV_MIN) {
7911                 sv_setnv(sv, (NV)IV_MIN);
7912                 goto oops_its_num;
7913             }
7914             else {
7915                 (void)SvIOK_only(sv);
7916                 SvIV_set(sv, SvIVX(sv) - 1);
7917             }   
7918         }
7919         return;
7920     }
7921     if (flags & SVp_NOK) {
7922     oops_its_num:
7923         {
7924             const NV was = SvNVX(sv);
7925             if (NV_OVERFLOWS_INTEGERS_AT &&
7926                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
7927                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7928                                "Lost precision when decrementing %" NVff " by 1",
7929                                was);
7930             }
7931             (void)SvNOK_only(sv);
7932             SvNV_set(sv, was - 1.0);
7933             return;
7934         }
7935     }
7936     if (!(flags & SVp_POK)) {
7937         if ((flags & SVTYPEMASK) < SVt_PVIV)
7938             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
7939         SvIV_set(sv, -1);
7940         (void)SvIOK_only(sv);
7941         return;
7942     }
7943 #ifdef PERL_PRESERVE_IVUV
7944     {
7945         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7946         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7947             /* Need to try really hard to see if it's an integer.
7948                9.22337203685478e+18 is an integer.
7949                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7950                so $a="9.22337203685478e+18"; $a+0; $a--
7951                needs to be the same as $a="9.22337203685478e+18"; $a--
7952                or we go insane. */
7953         
7954             (void) sv_2iv(sv);
7955             if (SvIOK(sv))
7956                 goto oops_its_int;
7957
7958             /* sv_2iv *should* have made this an NV */
7959             if (flags & SVp_NOK) {
7960                 (void)SvNOK_only(sv);
7961                 SvNV_set(sv, SvNVX(sv) - 1.0);
7962                 return;
7963             }
7964             /* I don't think we can get here. Maybe I should assert this
7965                And if we do get here I suspect that sv_setnv will croak. NWC
7966                Fall through. */
7967 #if defined(USE_LONG_DOUBLE)
7968             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",
7969                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7970 #else
7971             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7972                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7973 #endif
7974         }
7975     }
7976 #endif /* PERL_PRESERVE_IVUV */
7977     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
7978 }
7979
7980 /* this define is used to eliminate a chunk of duplicated but shared logic
7981  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
7982  * used anywhere but here - yves
7983  */
7984 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
7985     STMT_START {      \
7986         EXTEND_MORTAL(1); \
7987         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
7988     } STMT_END
7989
7990 /*
7991 =for apidoc sv_mortalcopy
7992
7993 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
7994 The new SV is marked as mortal. It will be destroyed "soon", either by an
7995 explicit call to FREETMPS, or by an implicit call at places such as
7996 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
7997
7998 =cut
7999 */
8000
8001 /* Make a string that will exist for the duration of the expression
8002  * evaluation.  Actually, it may have to last longer than that, but
8003  * hopefully we won't free it until it has been assigned to a
8004  * permanent location. */
8005
8006 SV *
8007 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
8008 {
8009     dVAR;
8010     register SV *sv;
8011
8012     new_SV(sv);
8013     sv_setsv(sv,oldstr);
8014     PUSH_EXTEND_MORTAL__SV_C(sv);
8015     SvTEMP_on(sv);
8016     return sv;
8017 }
8018
8019 /*
8020 =for apidoc sv_newmortal
8021
8022 Creates a new null SV which is mortal.  The reference count of the SV is
8023 set to 1. It will be destroyed "soon", either by an explicit call to
8024 FREETMPS, or by an implicit call at places such as statement boundaries.
8025 See also C<sv_mortalcopy> and C<sv_2mortal>.
8026
8027 =cut
8028 */
8029
8030 SV *
8031 Perl_sv_newmortal(pTHX)
8032 {
8033     dVAR;
8034     register SV *sv;
8035
8036     new_SV(sv);
8037     SvFLAGS(sv) = SVs_TEMP;
8038     PUSH_EXTEND_MORTAL__SV_C(sv);
8039     return sv;
8040 }
8041
8042
8043 /*
8044 =for apidoc newSVpvn_flags
8045
8046 Creates a new SV and copies a string into it.  The reference count for the
8047 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8048 string.  You are responsible for ensuring that the source string is at least
8049 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8050 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8051 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8052 returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
8053 C<SVf_UTF8> flag will be set on the new SV.
8054 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8055
8056     #define newSVpvn_utf8(s, len, u)                    \
8057         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8058
8059 =cut
8060 */
8061
8062 SV *
8063 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8064 {
8065     dVAR;
8066     register SV *sv;
8067
8068     /* All the flags we don't support must be zero.
8069        And we're new code so I'm going to assert this from the start.  */
8070     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8071     new_SV(sv);
8072     sv_setpvn(sv,s,len);
8073
8074     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8075      * and do what it does outselves here.
8076      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8077      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8078      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8079      * eleminate quite a few steps than it looks - Yves (explaining patch by gfx)
8080      */
8081
8082     SvFLAGS(sv) |= flags;
8083
8084     if(flags & SVs_TEMP){
8085         PUSH_EXTEND_MORTAL__SV_C(sv);
8086     }
8087
8088     return sv;
8089 }
8090
8091 /*
8092 =for apidoc sv_2mortal
8093
8094 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8095 by an explicit call to FREETMPS, or by an implicit call at places such as
8096 statement boundaries.  SvTEMP() is turned on which means that the SV's
8097 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
8098 and C<sv_mortalcopy>.
8099
8100 =cut
8101 */
8102
8103 SV *
8104 Perl_sv_2mortal(pTHX_ register SV *const sv)
8105 {
8106     dVAR;
8107     if (!sv)
8108         return NULL;
8109     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8110         return sv;
8111     PUSH_EXTEND_MORTAL__SV_C(sv);
8112     SvTEMP_on(sv);
8113     return sv;
8114 }
8115
8116 /*
8117 =for apidoc newSVpv
8118
8119 Creates a new SV and copies a string into it.  The reference count for the
8120 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8121 strlen().  For efficiency, consider using C<newSVpvn> instead.
8122
8123 =cut
8124 */
8125
8126 SV *
8127 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8128 {
8129     dVAR;
8130     register SV *sv;
8131
8132     new_SV(sv);
8133     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8134     return sv;
8135 }
8136
8137 /*
8138 =for apidoc newSVpvn
8139
8140 Creates a new SV and copies a string into it.  The reference count for the
8141 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8142 string.  You are responsible for ensuring that the source string is at least
8143 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8144
8145 =cut
8146 */
8147
8148 SV *
8149 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
8150 {
8151     dVAR;
8152     register SV *sv;
8153
8154     new_SV(sv);
8155     sv_setpvn(sv,s,len);
8156     return sv;
8157 }
8158
8159 /*
8160 =for apidoc newSVhek
8161
8162 Creates a new SV from the hash key structure.  It will generate scalars that
8163 point to the shared string table where possible. Returns a new (undefined)
8164 SV if the hek is NULL.
8165
8166 =cut
8167 */
8168
8169 SV *
8170 Perl_newSVhek(pTHX_ const HEK *const hek)
8171 {
8172     dVAR;
8173     if (!hek) {
8174         SV *sv;
8175
8176         new_SV(sv);
8177         return sv;
8178     }
8179
8180     if (HEK_LEN(hek) == HEf_SVKEY) {
8181         return newSVsv(*(SV**)HEK_KEY(hek));
8182     } else {
8183         const int flags = HEK_FLAGS(hek);
8184         if (flags & HVhek_WASUTF8) {
8185             /* Trouble :-)
8186                Andreas would like keys he put in as utf8 to come back as utf8
8187             */
8188             STRLEN utf8_len = HEK_LEN(hek);
8189             const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8190             SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
8191
8192             SvUTF8_on (sv);
8193             Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
8194             return sv;
8195         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8196             /* We don't have a pointer to the hv, so we have to replicate the
8197                flag into every HEK. This hv is using custom a hasing
8198                algorithm. Hence we can't return a shared string scalar, as
8199                that would contain the (wrong) hash value, and might get passed
8200                into an hv routine with a regular hash.
8201                Similarly, a hash that isn't using shared hash keys has to have
8202                the flag in every key so that we know not to try to call
8203                share_hek_kek on it.  */
8204
8205             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8206             if (HEK_UTF8(hek))
8207                 SvUTF8_on (sv);
8208             return sv;
8209         }
8210         /* This will be overwhelminly the most common case.  */
8211         {
8212             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8213                more efficient than sharepvn().  */
8214             SV *sv;
8215
8216             new_SV(sv);
8217             sv_upgrade(sv, SVt_PV);
8218             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8219             SvCUR_set(sv, HEK_LEN(hek));
8220             SvLEN_set(sv, 0);
8221             SvREADONLY_on(sv);
8222             SvFAKE_on(sv);
8223             SvPOK_on(sv);
8224             if (HEK_UTF8(hek))
8225                 SvUTF8_on(sv);
8226             return sv;
8227         }
8228     }
8229 }
8230
8231 /*
8232 =for apidoc newSVpvn_share
8233
8234 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8235 table. If the string does not already exist in the table, it is created
8236 first.  Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
8237 value is used; otherwise the hash is computed. The string's hash can be later
8238 be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
8239 that as the string table is used for shared hash keys these strings will have
8240 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8241
8242 =cut
8243 */
8244
8245 SV *
8246 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8247 {
8248     dVAR;
8249     register SV *sv;
8250     bool is_utf8 = FALSE;
8251     const char *const orig_src = src;
8252
8253     if (len < 0) {
8254         STRLEN tmplen = -len;
8255         is_utf8 = TRUE;
8256         /* See the note in hv.c:hv_fetch() --jhi */
8257         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8258         len = tmplen;
8259     }
8260     if (!hash)
8261         PERL_HASH(hash, src, len);
8262     new_SV(sv);
8263     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8264        changes here, update it there too.  */
8265     sv_upgrade(sv, SVt_PV);
8266     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8267     SvCUR_set(sv, len);
8268     SvLEN_set(sv, 0);
8269     SvREADONLY_on(sv);
8270     SvFAKE_on(sv);
8271     SvPOK_on(sv);
8272     if (is_utf8)
8273         SvUTF8_on(sv);
8274     if (src != orig_src)
8275         Safefree(src);
8276     return sv;
8277 }
8278
8279 /*
8280 =for apidoc newSVpv_share
8281
8282 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8283 string/length pair.
8284
8285 =cut
8286 */
8287
8288 SV *
8289 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8290 {
8291     return newSVpvn_share(src, strlen(src), hash);
8292 }
8293
8294 #if defined(PERL_IMPLICIT_CONTEXT)
8295
8296 /* pTHX_ magic can't cope with varargs, so this is a no-context
8297  * version of the main function, (which may itself be aliased to us).
8298  * Don't access this version directly.
8299  */
8300
8301 SV *
8302 Perl_newSVpvf_nocontext(const char *const pat, ...)
8303 {
8304     dTHX;
8305     register SV *sv;
8306     va_list args;
8307
8308     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8309
8310     va_start(args, pat);
8311     sv = vnewSVpvf(pat, &args);
8312     va_end(args);
8313     return sv;
8314 }
8315 #endif
8316
8317 /*
8318 =for apidoc newSVpvf
8319
8320 Creates a new SV and initializes it with the string formatted like
8321 C<sprintf>.
8322
8323 =cut
8324 */
8325
8326 SV *
8327 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8328 {
8329     register SV *sv;
8330     va_list args;
8331
8332     PERL_ARGS_ASSERT_NEWSVPVF;
8333
8334     va_start(args, pat);
8335     sv = vnewSVpvf(pat, &args);
8336     va_end(args);
8337     return sv;
8338 }
8339
8340 /* backend for newSVpvf() and newSVpvf_nocontext() */
8341
8342 SV *
8343 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8344 {
8345     dVAR;
8346     register SV *sv;
8347
8348     PERL_ARGS_ASSERT_VNEWSVPVF;
8349
8350     new_SV(sv);
8351     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8352     return sv;
8353 }
8354
8355 /*
8356 =for apidoc newSVnv
8357
8358 Creates a new SV and copies a floating point value into it.
8359 The reference count for the SV is set to 1.
8360
8361 =cut
8362 */
8363
8364 SV *
8365 Perl_newSVnv(pTHX_ const NV n)
8366 {
8367     dVAR;
8368     register SV *sv;
8369
8370     new_SV(sv);
8371     sv_setnv(sv,n);
8372     return sv;
8373 }
8374
8375 /*
8376 =for apidoc newSViv
8377
8378 Creates a new SV and copies an integer into it.  The reference count for the
8379 SV is set to 1.
8380
8381 =cut
8382 */
8383
8384 SV *
8385 Perl_newSViv(pTHX_ const IV i)
8386 {
8387     dVAR;
8388     register SV *sv;
8389
8390     new_SV(sv);
8391     sv_setiv(sv,i);
8392     return sv;
8393 }
8394
8395 /*
8396 =for apidoc newSVuv
8397
8398 Creates a new SV and copies an unsigned integer into it.
8399 The reference count for the SV is set to 1.
8400
8401 =cut
8402 */
8403
8404 SV *
8405 Perl_newSVuv(pTHX_ const UV u)
8406 {
8407     dVAR;
8408     register SV *sv;
8409
8410     new_SV(sv);
8411     sv_setuv(sv,u);
8412     return sv;
8413 }
8414
8415 /*
8416 =for apidoc newSV_type
8417
8418 Creates a new SV, of the type specified.  The reference count for the new SV
8419 is set to 1.
8420
8421 =cut
8422 */
8423
8424 SV *
8425 Perl_newSV_type(pTHX_ const svtype type)
8426 {
8427     register SV *sv;
8428
8429     new_SV(sv);
8430     sv_upgrade(sv, type);
8431     return sv;
8432 }
8433
8434 /*
8435 =for apidoc newRV_noinc
8436
8437 Creates an RV wrapper for an SV.  The reference count for the original
8438 SV is B<not> incremented.
8439
8440 =cut
8441 */
8442
8443 SV *
8444 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8445 {
8446     dVAR;
8447     register SV *sv = newSV_type(SVt_IV);
8448
8449     PERL_ARGS_ASSERT_NEWRV_NOINC;
8450
8451     SvTEMP_off(tmpRef);
8452     SvRV_set(sv, tmpRef);
8453     SvROK_on(sv);
8454     return sv;
8455 }
8456
8457 /* newRV_inc is the official function name to use now.
8458  * newRV_inc is in fact #defined to newRV in sv.h
8459  */
8460
8461 SV *
8462 Perl_newRV(pTHX_ SV *const sv)
8463 {
8464     dVAR;
8465
8466     PERL_ARGS_ASSERT_NEWRV;
8467
8468     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8469 }
8470
8471 /*
8472 =for apidoc newSVsv
8473
8474 Creates a new SV which is an exact duplicate of the original SV.
8475 (Uses C<sv_setsv>).
8476
8477 =cut
8478 */
8479
8480 SV *
8481 Perl_newSVsv(pTHX_ register SV *const old)
8482 {
8483     dVAR;
8484     register SV *sv;
8485
8486     if (!old)
8487         return NULL;
8488     if (SvTYPE(old) == SVTYPEMASK) {
8489         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8490         return NULL;
8491     }
8492     new_SV(sv);
8493     /* SV_GMAGIC is the default for sv_setv()
8494        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8495        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8496     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8497     return sv;
8498 }
8499
8500 /*
8501 =for apidoc sv_reset
8502
8503 Underlying implementation for the C<reset> Perl function.
8504 Note that the perl-level function is vaguely deprecated.
8505
8506 =cut
8507 */
8508
8509 void
8510 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8511 {
8512     dVAR;
8513     char todo[PERL_UCHAR_MAX+1];
8514
8515     PERL_ARGS_ASSERT_SV_RESET;
8516
8517     if (!stash)
8518         return;
8519
8520     if (!*s) {          /* reset ?? searches */
8521         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8522         if (mg) {
8523             const U32 count = mg->mg_len / sizeof(PMOP**);
8524             PMOP **pmp = (PMOP**) mg->mg_ptr;
8525             PMOP *const *const end = pmp + count;
8526
8527             while (pmp < end) {
8528 #ifdef USE_ITHREADS
8529                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8530 #else
8531                 (*pmp)->op_pmflags &= ~PMf_USED;
8532 #endif
8533                 ++pmp;
8534             }
8535         }
8536         return;
8537     }
8538
8539     /* reset variables */
8540
8541     if (!HvARRAY(stash))
8542         return;
8543
8544     Zero(todo, 256, char);
8545     while (*s) {
8546         I32 max;
8547         I32 i = (unsigned char)*s;
8548         if (s[1] == '-') {
8549             s += 2;
8550         }
8551         max = (unsigned char)*s++;
8552         for ( ; i <= max; i++) {
8553             todo[i] = 1;
8554         }
8555         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8556             HE *entry;
8557             for (entry = HvARRAY(stash)[i];
8558                  entry;
8559                  entry = HeNEXT(entry))
8560             {
8561                 register GV *gv;
8562                 register SV *sv;
8563
8564                 if (!todo[(U8)*HeKEY(entry)])
8565                     continue;
8566                 gv = MUTABLE_GV(HeVAL(entry));
8567                 sv = GvSV(gv);
8568                 if (sv) {
8569                     if (SvTHINKFIRST(sv)) {
8570                         if (!SvREADONLY(sv) && SvROK(sv))
8571                             sv_unref(sv);
8572                         /* XXX Is this continue a bug? Why should THINKFIRST
8573                            exempt us from resetting arrays and hashes?  */
8574                         continue;
8575                     }
8576                     SvOK_off(sv);
8577                     if (SvTYPE(sv) >= SVt_PV) {
8578                         SvCUR_set(sv, 0);
8579                         if (SvPVX_const(sv) != NULL)
8580                             *SvPVX(sv) = '\0';
8581                         SvTAINT(sv);
8582                     }
8583                 }
8584                 if (GvAV(gv)) {
8585                     av_clear(GvAV(gv));
8586                 }
8587                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8588 #if defined(VMS)
8589                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8590 #else /* ! VMS */
8591                     hv_clear(GvHV(gv));
8592 #  if defined(USE_ENVIRON_ARRAY)
8593                     if (gv == PL_envgv)
8594                         my_clearenv();
8595 #  endif /* USE_ENVIRON_ARRAY */
8596 #endif /* VMS */
8597                 }
8598             }
8599         }
8600     }
8601 }
8602
8603 /*
8604 =for apidoc sv_2io
8605
8606 Using various gambits, try to get an IO from an SV: the IO slot if its a
8607 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8608 named after the PV if we're a string.
8609
8610 =cut
8611 */
8612
8613 IO*
8614 Perl_sv_2io(pTHX_ SV *const sv)
8615 {
8616     IO* io;
8617     GV* gv;
8618
8619     PERL_ARGS_ASSERT_SV_2IO;
8620
8621     switch (SvTYPE(sv)) {
8622     case SVt_PVIO:
8623         io = MUTABLE_IO(sv);
8624         break;
8625     case SVt_PVGV:
8626     case SVt_PVLV:
8627         if (isGV_with_GP(sv)) {
8628             gv = MUTABLE_GV(sv);
8629             io = GvIO(gv);
8630             if (!io)
8631                 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8632             break;
8633         }
8634         /* FALL THROUGH */
8635     default:
8636         if (!SvOK(sv))
8637             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8638         if (SvROK(sv))
8639             return sv_2io(SvRV(sv));
8640         gv = gv_fetchsv(sv, 0, SVt_PVIO);
8641         if (gv)
8642             io = GvIO(gv);
8643         else
8644             io = 0;
8645         if (!io)
8646             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
8647         break;
8648     }
8649     return io;
8650 }
8651
8652 /*
8653 =for apidoc sv_2cv
8654
8655 Using various gambits, try to get a CV from an SV; in addition, try if
8656 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8657 The flags in C<lref> are passed to gv_fetchsv.
8658
8659 =cut
8660 */
8661
8662 CV *
8663 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8664 {
8665     dVAR;
8666     GV *gv = NULL;
8667     CV *cv = NULL;
8668
8669     PERL_ARGS_ASSERT_SV_2CV;
8670
8671     if (!sv) {
8672         *st = NULL;
8673         *gvp = NULL;
8674         return NULL;
8675     }
8676     switch (SvTYPE(sv)) {
8677     case SVt_PVCV:
8678         *st = CvSTASH(sv);
8679         *gvp = NULL;
8680         return MUTABLE_CV(sv);
8681     case SVt_PVHV:
8682     case SVt_PVAV:
8683         *st = NULL;
8684         *gvp = NULL;
8685         return NULL;
8686     case SVt_PVGV:
8687         if (isGV_with_GP(sv)) {
8688             gv = MUTABLE_GV(sv);
8689             *gvp = gv;
8690             *st = GvESTASH(gv);
8691             goto fix_gv;
8692         }
8693         /* FALL THROUGH */
8694
8695     default:
8696         if (SvROK(sv)) {
8697             SV * const *sp = &sv;       /* Used in tryAMAGICunDEREF macro. */
8698             SvGETMAGIC(sv);
8699             tryAMAGICunDEREF(to_cv);
8700
8701             sv = SvRV(sv);
8702             if (SvTYPE(sv) == SVt_PVCV) {
8703                 cv = MUTABLE_CV(sv);
8704                 *gvp = NULL;
8705                 *st = CvSTASH(cv);
8706                 return cv;
8707             }
8708             else if(isGV_with_GP(sv))
8709                 gv = MUTABLE_GV(sv);
8710             else
8711                 Perl_croak(aTHX_ "Not a subroutine reference");
8712         }
8713         else if (isGV_with_GP(sv)) {
8714             SvGETMAGIC(sv);
8715             gv = MUTABLE_GV(sv);
8716         }
8717         else
8718             gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
8719         *gvp = gv;
8720         if (!gv) {
8721             *st = NULL;
8722             return NULL;
8723         }
8724         /* Some flags to gv_fetchsv mean don't really create the GV  */
8725         if (!isGV_with_GP(gv)) {
8726             *st = NULL;
8727             return NULL;
8728         }
8729         *st = GvESTASH(gv);
8730     fix_gv:
8731         if (lref && !GvCVu(gv)) {
8732             SV *tmpsv;
8733             ENTER;
8734             tmpsv = newSV(0);
8735             gv_efullname3(tmpsv, gv, NULL);
8736             /* XXX this is probably not what they think they're getting.
8737              * It has the same effect as "sub name;", i.e. just a forward
8738              * declaration! */
8739             newSUB(start_subparse(FALSE, 0),
8740                    newSVOP(OP_CONST, 0, tmpsv),
8741                    NULL, NULL);
8742             LEAVE;
8743             if (!GvCVu(gv))
8744                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
8745                            SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8746         }
8747         return GvCVu(gv);
8748     }
8749 }
8750
8751 /*
8752 =for apidoc sv_true
8753
8754 Returns true if the SV has a true value by Perl's rules.
8755 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8756 instead use an in-line version.
8757
8758 =cut
8759 */
8760
8761 I32
8762 Perl_sv_true(pTHX_ register SV *const sv)
8763 {
8764     if (!sv)
8765         return 0;
8766     if (SvPOK(sv)) {
8767         register const XPV* const tXpv = (XPV*)SvANY(sv);
8768         if (tXpv &&
8769                 (tXpv->xpv_cur > 1 ||
8770                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
8771             return 1;
8772         else
8773             return 0;
8774     }
8775     else {
8776         if (SvIOK(sv))
8777             return SvIVX(sv) != 0;
8778         else {
8779             if (SvNOK(sv))
8780                 return SvNVX(sv) != 0.0;
8781             else
8782                 return sv_2bool(sv);
8783         }
8784     }
8785 }
8786
8787 /*
8788 =for apidoc sv_pvn_force
8789
8790 Get a sensible string out of the SV somehow.
8791 A private implementation of the C<SvPV_force> macro for compilers which
8792 can't cope with complex macro expressions. Always use the macro instead.
8793
8794 =for apidoc sv_pvn_force_flags
8795
8796 Get a sensible string out of the SV somehow.
8797 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8798 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8799 implemented in terms of this function.
8800 You normally want to use the various wrapper macros instead: see
8801 C<SvPV_force> and C<SvPV_force_nomg>
8802
8803 =cut
8804 */
8805
8806 char *
8807 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8808 {
8809     dVAR;
8810
8811     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8812
8813     if (SvTHINKFIRST(sv) && !SvROK(sv))
8814         sv_force_normal_flags(sv, 0);
8815
8816     if (SvPOK(sv)) {
8817         if (lp)
8818             *lp = SvCUR(sv);
8819     }
8820     else {
8821         char *s;
8822         STRLEN len;
8823  
8824         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
8825             const char * const ref = sv_reftype(sv,0);
8826             if (PL_op)
8827                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
8828                            ref, OP_DESC(PL_op));
8829             else
8830                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
8831         }
8832         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8833             || isGV_with_GP(sv))
8834             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
8835                 OP_DESC(PL_op));
8836         s = sv_2pv_flags(sv, &len, flags);
8837         if (lp)
8838             *lp = len;
8839
8840         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
8841             if (SvROK(sv))
8842                 sv_unref(sv);
8843             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
8844             SvGROW(sv, len + 1);
8845             Move(s,SvPVX(sv),len,char);
8846             SvCUR_set(sv, len);
8847             SvPVX(sv)[len] = '\0';
8848         }
8849         if (!SvPOK(sv)) {
8850             SvPOK_on(sv);               /* validate pointer */
8851             SvTAINT(sv);
8852             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
8853                                   PTR2UV(sv),SvPVX_const(sv)));
8854         }
8855     }
8856     return SvPVX_mutable(sv);
8857 }
8858
8859 /*
8860 =for apidoc sv_pvbyten_force
8861
8862 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
8863
8864 =cut
8865 */
8866
8867 char *
8868 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
8869 {
8870     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8871
8872     sv_pvn_force(sv,lp);
8873     sv_utf8_downgrade(sv,0);
8874     *lp = SvCUR(sv);
8875     return SvPVX(sv);
8876 }
8877
8878 /*
8879 =for apidoc sv_pvutf8n_force
8880
8881 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
8882
8883 =cut
8884 */
8885
8886 char *
8887 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
8888 {
8889     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
8890
8891     sv_pvn_force(sv,lp);
8892     sv_utf8_upgrade(sv);
8893     *lp = SvCUR(sv);
8894     return SvPVX(sv);
8895 }
8896
8897 /*
8898 =for apidoc sv_reftype
8899
8900 Returns a string describing what the SV is a reference to.
8901
8902 =cut
8903 */
8904
8905 const char *
8906 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
8907 {
8908     PERL_ARGS_ASSERT_SV_REFTYPE;
8909
8910     /* The fact that I don't need to downcast to char * everywhere, only in ?:
8911        inside return suggests a const propagation bug in g++.  */
8912     if (ob && SvOBJECT(sv)) {
8913         char * const name = HvNAME_get(SvSTASH(sv));
8914         return name ? name : (char *) "__ANON__";
8915     }
8916     else {
8917         switch (SvTYPE(sv)) {
8918         case SVt_NULL:
8919         case SVt_IV:
8920         case SVt_NV:
8921         case SVt_PV:
8922         case SVt_PVIV:
8923         case SVt_PVNV:
8924         case SVt_PVMG:
8925                                 if (SvVOK(sv))
8926                                     return "VSTRING";
8927                                 if (SvROK(sv))
8928                                     return "REF";
8929                                 else
8930                                     return "SCALAR";
8931
8932         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
8933                                 /* tied lvalues should appear to be
8934                                  * scalars for backwards compatitbility */
8935                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
8936                                     ? "SCALAR" : "LVALUE");
8937         case SVt_PVAV:          return "ARRAY";
8938         case SVt_PVHV:          return "HASH";
8939         case SVt_PVCV:          return "CODE";
8940         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
8941                                     ? "GLOB" : "SCALAR");
8942         case SVt_PVFM:          return "FORMAT";
8943         case SVt_PVIO:          return "IO";
8944         case SVt_BIND:          return "BIND";
8945         case SVt_REGEXP:        return "REGEXP";
8946         default:                return "UNKNOWN";
8947         }
8948     }
8949 }
8950
8951 /*
8952 =for apidoc sv_isobject
8953
8954 Returns a boolean indicating whether the SV is an RV pointing to a blessed
8955 object.  If the SV is not an RV, or if the object is not blessed, then this
8956 will return false.
8957
8958 =cut
8959 */
8960
8961 int
8962 Perl_sv_isobject(pTHX_ SV *sv)
8963 {
8964     if (!sv)
8965         return 0;
8966     SvGETMAGIC(sv);
8967     if (!SvROK(sv))
8968         return 0;
8969     sv = SvRV(sv);
8970     if (!SvOBJECT(sv))
8971         return 0;
8972     return 1;
8973 }
8974
8975 /*
8976 =for apidoc sv_isa
8977
8978 Returns a boolean indicating whether the SV is blessed into the specified
8979 class.  This does not check for subtypes; use C<sv_derived_from> to verify
8980 an inheritance relationship.
8981
8982 =cut
8983 */
8984
8985 int
8986 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
8987 {
8988     const char *hvname;
8989
8990     PERL_ARGS_ASSERT_SV_ISA;
8991
8992     if (!sv)
8993         return 0;
8994     SvGETMAGIC(sv);
8995     if (!SvROK(sv))
8996         return 0;
8997     sv = SvRV(sv);
8998     if (!SvOBJECT(sv))
8999         return 0;
9000     hvname = HvNAME_get(SvSTASH(sv));
9001     if (!hvname)
9002         return 0;
9003
9004     return strEQ(hvname, name);
9005 }
9006
9007 /*
9008 =for apidoc newSVrv
9009
9010 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9011 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9012 be blessed in the specified package.  The new SV is returned and its
9013 reference count is 1.
9014
9015 =cut
9016 */
9017
9018 SV*
9019 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9020 {
9021     dVAR;
9022     SV *sv;
9023
9024     PERL_ARGS_ASSERT_NEWSVRV;
9025
9026     new_SV(sv);
9027
9028     SV_CHECK_THINKFIRST_COW_DROP(rv);
9029     (void)SvAMAGIC_off(rv);
9030
9031     if (SvTYPE(rv) >= SVt_PVMG) {
9032         const U32 refcnt = SvREFCNT(rv);
9033         SvREFCNT(rv) = 0;
9034         sv_clear(rv);
9035         SvFLAGS(rv) = 0;
9036         SvREFCNT(rv) = refcnt;
9037
9038         sv_upgrade(rv, SVt_IV);
9039     } else if (SvROK(rv)) {
9040         SvREFCNT_dec(SvRV(rv));
9041     } else {
9042         prepare_SV_for_RV(rv);
9043     }
9044
9045     SvOK_off(rv);
9046     SvRV_set(rv, sv);
9047     SvROK_on(rv);
9048
9049     if (classname) {
9050         HV* const stash = gv_stashpv(classname, GV_ADD);
9051         (void)sv_bless(rv, stash);
9052     }
9053     return sv;
9054 }
9055
9056 /*
9057 =for apidoc sv_setref_pv
9058
9059 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9060 argument will be upgraded to an RV.  That RV will be modified to point to
9061 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9062 into the SV.  The C<classname> argument indicates the package for the
9063 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9064 will have a reference count of 1, and the RV will be returned.
9065
9066 Do not use with other Perl types such as HV, AV, SV, CV, because those
9067 objects will become corrupted by the pointer copy process.
9068
9069 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9070
9071 =cut
9072 */
9073
9074 SV*
9075 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9076 {
9077     dVAR;
9078
9079     PERL_ARGS_ASSERT_SV_SETREF_PV;
9080
9081     if (!pv) {
9082         sv_setsv(rv, &PL_sv_undef);
9083         SvSETMAGIC(rv);
9084     }
9085     else
9086         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9087     return rv;
9088 }
9089
9090 /*
9091 =for apidoc sv_setref_iv
9092
9093 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9094 argument will be upgraded to an RV.  That RV will be modified to point to
9095 the new SV.  The C<classname> argument indicates the package for the
9096 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9097 will have a reference count of 1, and the RV will be returned.
9098
9099 =cut
9100 */
9101
9102 SV*
9103 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9104 {
9105     PERL_ARGS_ASSERT_SV_SETREF_IV;
9106
9107     sv_setiv(newSVrv(rv,classname), iv);
9108     return rv;
9109 }
9110
9111 /*
9112 =for apidoc sv_setref_uv
9113
9114 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9115 argument will be upgraded to an RV.  That RV will be modified to point to
9116 the new SV.  The C<classname> argument indicates the package for the
9117 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9118 will have a reference count of 1, and the RV will be returned.
9119
9120 =cut
9121 */
9122
9123 SV*
9124 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9125 {
9126     PERL_ARGS_ASSERT_SV_SETREF_UV;
9127
9128     sv_setuv(newSVrv(rv,classname), uv);
9129     return rv;
9130 }
9131
9132 /*
9133 =for apidoc sv_setref_nv
9134
9135 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9136 argument will be upgraded to an RV.  That RV will be modified to point to
9137 the new SV.  The C<classname> argument indicates the package for the
9138 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9139 will have a reference count of 1, and the RV will be returned.
9140
9141 =cut
9142 */
9143
9144 SV*
9145 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9146 {
9147     PERL_ARGS_ASSERT_SV_SETREF_NV;
9148
9149     sv_setnv(newSVrv(rv,classname), nv);
9150     return rv;
9151 }
9152
9153 /*
9154 =for apidoc sv_setref_pvn
9155
9156 Copies a string into a new SV, optionally blessing the SV.  The length of the
9157 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9158 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9159 argument indicates the package for the blessing.  Set C<classname> to
9160 C<NULL> to avoid the blessing.  The new SV will have a reference count
9161 of 1, and the RV will be returned.
9162
9163 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9164
9165 =cut
9166 */
9167
9168 SV*
9169 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9170                    const char *const pv, const STRLEN n)
9171 {
9172     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9173
9174     sv_setpvn(newSVrv(rv,classname), pv, n);
9175     return rv;
9176 }
9177
9178 /*
9179 =for apidoc sv_bless
9180
9181 Blesses an SV into a specified package.  The SV must be an RV.  The package
9182 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9183 of the SV is unaffected.
9184
9185 =cut
9186 */
9187
9188 SV*
9189 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9190 {
9191     dVAR;
9192     SV *tmpRef;
9193
9194     PERL_ARGS_ASSERT_SV_BLESS;
9195
9196     if (!SvROK(sv))
9197         Perl_croak(aTHX_ "Can't bless non-reference value");
9198     tmpRef = SvRV(sv);
9199     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9200         if (SvIsCOW(tmpRef))
9201             sv_force_normal_flags(tmpRef, 0);
9202         if (SvREADONLY(tmpRef))
9203             Perl_croak_no_modify(aTHX);
9204         if (SvOBJECT(tmpRef)) {
9205             if (SvTYPE(tmpRef) != SVt_PVIO)
9206                 --PL_sv_objcount;
9207             SvREFCNT_dec(SvSTASH(tmpRef));
9208         }
9209     }
9210     SvOBJECT_on(tmpRef);
9211     if (SvTYPE(tmpRef) != SVt_PVIO)
9212         ++PL_sv_objcount;
9213     SvUPGRADE(tmpRef, SVt_PVMG);
9214     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9215
9216     if (Gv_AMG(stash))
9217         SvAMAGIC_on(sv);
9218     else
9219         (void)SvAMAGIC_off(sv);
9220
9221     if(SvSMAGICAL(tmpRef))
9222         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9223             mg_set(tmpRef);
9224
9225
9226
9227     return sv;
9228 }
9229
9230 /* Downgrades a PVGV to a PVMG. If it’s actually a PVLV, we leave the type
9231  * as it is after unglobbing it.
9232  */
9233
9234 STATIC void
9235 S_sv_unglob(pTHX_ SV *const sv)
9236 {
9237     dVAR;
9238     void *xpvmg;
9239     HV *stash;
9240     SV * const temp = sv_newmortal();
9241
9242     PERL_ARGS_ASSERT_SV_UNGLOB;
9243
9244     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9245     SvFAKE_off(sv);
9246     gv_efullname3(temp, MUTABLE_GV(sv), "*");
9247
9248     if (GvGP(sv)) {
9249         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9250            && HvNAME_get(stash))
9251             mro_method_changed_in(stash);
9252         gp_free(MUTABLE_GV(sv));
9253     }
9254     if (GvSTASH(sv)) {
9255         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9256         GvSTASH(sv) = NULL;
9257     }
9258     GvMULTI_off(sv);
9259     if (GvNAME_HEK(sv)) {
9260         unshare_hek(GvNAME_HEK(sv));
9261     }
9262     isGV_with_GP_off(sv);
9263
9264     if(SvTYPE(sv) == SVt_PVGV) {
9265         /* need to keep SvANY(sv) in the right arena */
9266         xpvmg = new_XPVMG();
9267         StructCopy(SvANY(sv), xpvmg, XPVMG);
9268         del_XPVGV(SvANY(sv));
9269         SvANY(sv) = xpvmg;
9270
9271         SvFLAGS(sv) &= ~SVTYPEMASK;
9272         SvFLAGS(sv) |= SVt_PVMG;
9273     }
9274
9275     /* Intentionally not calling any local SET magic, as this isn't so much a
9276        set operation as merely an internal storage change.  */
9277     sv_setsv_flags(sv, temp, 0);
9278 }
9279
9280 /*
9281 =for apidoc sv_unref_flags
9282
9283 Unsets the RV status of the SV, and decrements the reference count of
9284 whatever was being referenced by the RV.  This can almost be thought of
9285 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9286 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9287 (otherwise the decrementing is conditional on the reference count being
9288 different from one or the reference being a readonly SV).
9289 See C<SvROK_off>.
9290
9291 =cut
9292 */
9293
9294 void
9295 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9296 {
9297     SV* const target = SvRV(ref);
9298
9299     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9300
9301     if (SvWEAKREF(ref)) {
9302         sv_del_backref(target, ref);
9303         SvWEAKREF_off(ref);
9304         SvRV_set(ref, NULL);
9305         return;
9306     }
9307     SvRV_set(ref, NULL);
9308     SvROK_off(ref);
9309     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9310        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9311     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9312         SvREFCNT_dec(target);
9313     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9314         sv_2mortal(target);     /* Schedule for freeing later */
9315 }
9316
9317 /*
9318 =for apidoc sv_untaint
9319
9320 Untaint an SV. Use C<SvTAINTED_off> instead.
9321 =cut
9322 */
9323
9324 void
9325 Perl_sv_untaint(pTHX_ SV *const sv)
9326 {
9327     PERL_ARGS_ASSERT_SV_UNTAINT;
9328
9329     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9330         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9331         if (mg)
9332             mg->mg_len &= ~1;
9333     }
9334 }
9335
9336 /*
9337 =for apidoc sv_tainted
9338
9339 Test an SV for taintedness. Use C<SvTAINTED> instead.
9340 =cut
9341 */
9342
9343 bool
9344 Perl_sv_tainted(pTHX_ SV *const sv)
9345 {
9346     PERL_ARGS_ASSERT_SV_TAINTED;
9347
9348     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9349         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9350         if (mg && (mg->mg_len & 1) )
9351             return TRUE;
9352     }
9353     return FALSE;
9354 }
9355
9356 /*
9357 =for apidoc sv_setpviv
9358
9359 Copies an integer into the given SV, also updating its string value.
9360 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9361
9362 =cut
9363 */
9364
9365 void
9366 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9367 {
9368     char buf[TYPE_CHARS(UV)];
9369     char *ebuf;
9370     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9371
9372     PERL_ARGS_ASSERT_SV_SETPVIV;
9373
9374     sv_setpvn(sv, ptr, ebuf - ptr);
9375 }
9376
9377 /*
9378 =for apidoc sv_setpviv_mg
9379
9380 Like C<sv_setpviv>, but also handles 'set' magic.
9381
9382 =cut
9383 */
9384
9385 void
9386 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9387 {
9388     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9389
9390     sv_setpviv(sv, iv);
9391     SvSETMAGIC(sv);
9392 }
9393
9394 #if defined(PERL_IMPLICIT_CONTEXT)
9395
9396 /* pTHX_ magic can't cope with varargs, so this is a no-context
9397  * version of the main function, (which may itself be aliased to us).
9398  * Don't access this version directly.
9399  */
9400
9401 void
9402 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9403 {
9404     dTHX;
9405     va_list args;
9406
9407     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9408
9409     va_start(args, pat);
9410     sv_vsetpvf(sv, pat, &args);
9411     va_end(args);
9412 }
9413
9414 /* pTHX_ magic can't cope with varargs, so this is a no-context
9415  * version of the main function, (which may itself be aliased to us).
9416  * Don't access this version directly.
9417  */
9418
9419 void
9420 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9421 {
9422     dTHX;
9423     va_list args;
9424
9425     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9426
9427     va_start(args, pat);
9428     sv_vsetpvf_mg(sv, pat, &args);
9429     va_end(args);
9430 }
9431 #endif
9432
9433 /*
9434 =for apidoc sv_setpvf
9435
9436 Works like C<sv_catpvf> but copies the text into the SV instead of
9437 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9438
9439 =cut
9440 */
9441
9442 void
9443 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9444 {
9445     va_list args;
9446
9447     PERL_ARGS_ASSERT_SV_SETPVF;
9448
9449     va_start(args, pat);
9450     sv_vsetpvf(sv, pat, &args);
9451     va_end(args);
9452 }
9453
9454 /*
9455 =for apidoc sv_vsetpvf
9456
9457 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9458 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9459
9460 Usually used via its frontend C<sv_setpvf>.
9461
9462 =cut
9463 */
9464
9465 void
9466 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9467 {
9468     PERL_ARGS_ASSERT_SV_VSETPVF;
9469
9470     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9471 }
9472
9473 /*
9474 =for apidoc sv_setpvf_mg
9475
9476 Like C<sv_setpvf>, but also handles 'set' magic.
9477
9478 =cut
9479 */
9480
9481 void
9482 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9483 {
9484     va_list args;
9485
9486     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9487
9488     va_start(args, pat);
9489     sv_vsetpvf_mg(sv, pat, &args);
9490     va_end(args);
9491 }
9492
9493 /*
9494 =for apidoc sv_vsetpvf_mg
9495
9496 Like C<sv_vsetpvf>, but also handles 'set' magic.
9497
9498 Usually used via its frontend C<sv_setpvf_mg>.
9499
9500 =cut
9501 */
9502
9503 void
9504 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9505 {
9506     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9507
9508     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9509     SvSETMAGIC(sv);
9510 }
9511
9512 #if defined(PERL_IMPLICIT_CONTEXT)
9513
9514 /* pTHX_ magic can't cope with varargs, so this is a no-context
9515  * version of the main function, (which may itself be aliased to us).
9516  * Don't access this version directly.
9517  */
9518
9519 void
9520 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9521 {
9522     dTHX;
9523     va_list args;
9524
9525     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9526
9527     va_start(args, pat);
9528     sv_vcatpvf(sv, pat, &args);
9529     va_end(args);
9530 }
9531
9532 /* pTHX_ magic can't cope with varargs, so this is a no-context
9533  * version of the main function, (which may itself be aliased to us).
9534  * Don't access this version directly.
9535  */
9536
9537 void
9538 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9539 {
9540     dTHX;
9541     va_list args;
9542
9543     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9544
9545     va_start(args, pat);
9546     sv_vcatpvf_mg(sv, pat, &args);
9547     va_end(args);
9548 }
9549 #endif
9550
9551 /*
9552 =for apidoc sv_catpvf
9553
9554 Processes its arguments like C<sprintf> and appends the formatted
9555 output to an SV.  If the appended data contains "wide" characters
9556 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9557 and characters >255 formatted with %c), the original SV might get
9558 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9559 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9560 valid UTF-8; if the original SV was bytes, the pattern should be too.
9561
9562 =cut */
9563
9564 void
9565 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9566 {
9567     va_list args;
9568
9569     PERL_ARGS_ASSERT_SV_CATPVF;
9570
9571     va_start(args, pat);
9572     sv_vcatpvf(sv, pat, &args);
9573     va_end(args);
9574 }
9575
9576 /*
9577 =for apidoc sv_vcatpvf
9578
9579 Processes its arguments like C<vsprintf> and appends the formatted output
9580 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9581
9582 Usually used via its frontend C<sv_catpvf>.
9583
9584 =cut
9585 */
9586
9587 void
9588 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9589 {
9590     PERL_ARGS_ASSERT_SV_VCATPVF;
9591
9592     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9593 }
9594
9595 /*
9596 =for apidoc sv_catpvf_mg
9597
9598 Like C<sv_catpvf>, but also handles 'set' magic.
9599
9600 =cut
9601 */
9602
9603 void
9604 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9605 {
9606     va_list args;
9607
9608     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9609
9610     va_start(args, pat);
9611     sv_vcatpvf_mg(sv, pat, &args);
9612     va_end(args);
9613 }
9614
9615 /*
9616 =for apidoc sv_vcatpvf_mg
9617
9618 Like C<sv_vcatpvf>, but also handles 'set' magic.
9619
9620 Usually used via its frontend C<sv_catpvf_mg>.
9621
9622 =cut
9623 */
9624
9625 void
9626 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9627 {
9628     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9629
9630     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9631     SvSETMAGIC(sv);
9632 }
9633
9634 /*
9635 =for apidoc sv_vsetpvfn
9636
9637 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9638 appending it.
9639
9640 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9641
9642 =cut
9643 */
9644
9645 void
9646 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9647                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9648 {
9649     PERL_ARGS_ASSERT_SV_VSETPVFN;
9650
9651     sv_setpvs(sv, "");
9652     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9653 }
9654
9655
9656 /*
9657  * Warn of missing argument to sprintf, and then return a defined value
9658  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9659  */
9660 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9661 STATIC SV*
9662 S_vcatpvfn_missing_argument(pTHX) {
9663     if (ckWARN(WARN_MISSING)) {
9664         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9665                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9666     }
9667     return &PL_sv_no;
9668 }
9669
9670
9671 STATIC I32
9672 S_expect_number(pTHX_ char **const pattern)
9673 {
9674     dVAR;
9675     I32 var = 0;
9676
9677     PERL_ARGS_ASSERT_EXPECT_NUMBER;
9678
9679     switch (**pattern) {
9680     case '1': case '2': case '3':
9681     case '4': case '5': case '6':
9682     case '7': case '8': case '9':
9683         var = *(*pattern)++ - '0';
9684         while (isDIGIT(**pattern)) {
9685             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9686             if (tmp < var)
9687                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9688             var = tmp;
9689         }
9690     }
9691     return var;
9692 }
9693
9694 STATIC char *
9695 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9696 {
9697     const int neg = nv < 0;
9698     UV uv;
9699
9700     PERL_ARGS_ASSERT_F0CONVERT;
9701
9702     if (neg)
9703         nv = -nv;
9704     if (nv < UV_MAX) {
9705         char *p = endbuf;
9706         nv += 0.5;
9707         uv = (UV)nv;
9708         if (uv & 1 && uv == nv)
9709             uv--;                       /* Round to even */
9710         do {
9711             const unsigned dig = uv % 10;
9712             *--p = '0' + dig;
9713         } while (uv /= 10);
9714         if (neg)
9715             *--p = '-';
9716         *len = endbuf - p;
9717         return p;
9718     }
9719     return NULL;
9720 }
9721
9722
9723 /*
9724 =for apidoc sv_vcatpvfn
9725
9726 Processes its arguments like C<vsprintf> and appends the formatted output
9727 to an SV.  Uses an array of SVs if the C style variable argument list is
9728 missing (NULL).  When running with taint checks enabled, indicates via
9729 C<maybe_tainted> if results are untrustworthy (often due to the use of
9730 locales).
9731
9732 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9733
9734 =cut
9735 */
9736
9737
9738 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
9739                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
9740                         vec_utf8 = DO_UTF8(vecsv);
9741
9742 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9743
9744 void
9745 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9746                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9747 {
9748     dVAR;
9749     char *p;
9750     char *q;
9751     const char *patend;
9752     STRLEN origlen;
9753     I32 svix = 0;
9754     static const char nullstr[] = "(null)";
9755     SV *argsv = NULL;
9756     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
9757     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
9758     SV *nsv = NULL;
9759     /* Times 4: a decimal digit takes more than 3 binary digits.
9760      * NV_DIG: mantissa takes than many decimal digits.
9761      * Plus 32: Playing safe. */
9762     char ebuf[IV_DIG * 4 + NV_DIG + 32];
9763     /* large enough for "%#.#f" --chip */
9764     /* what about long double NVs? --jhi */
9765
9766     PERL_ARGS_ASSERT_SV_VCATPVFN;
9767     PERL_UNUSED_ARG(maybe_tainted);
9768
9769     /* no matter what, this is a string now */
9770     (void)SvPV_force(sv, origlen);
9771
9772     /* special-case "", "%s", and "%-p" (SVf - see below) */
9773     if (patlen == 0)
9774         return;
9775     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
9776         if (args) {
9777             const char * const s = va_arg(*args, char*);
9778             sv_catpv(sv, s ? s : nullstr);
9779         }
9780         else if (svix < svmax) {
9781             sv_catsv(sv, *svargs);
9782         }
9783         else
9784             S_vcatpvfn_missing_argument(aTHX);
9785         return;
9786     }
9787     if (args && patlen == 3 && pat[0] == '%' &&
9788                 pat[1] == '-' && pat[2] == 'p') {
9789         argsv = MUTABLE_SV(va_arg(*args, void*));
9790         sv_catsv(sv, argsv);
9791         return;
9792     }
9793
9794 #ifndef USE_LONG_DOUBLE
9795     /* special-case "%.<number>[gf]" */
9796     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
9797          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9798         unsigned digits = 0;
9799         const char *pp;
9800
9801         pp = pat + 2;
9802         while (*pp >= '0' && *pp <= '9')
9803             digits = 10 * digits + (*pp++ - '0');
9804         if (pp - pat == (int)patlen - 1 && svix < svmax) {
9805             const NV nv = SvNV(*svargs);
9806             if (*pp == 'g') {
9807                 /* Add check for digits != 0 because it seems that some
9808                    gconverts are buggy in this case, and we don't yet have
9809                    a Configure test for this.  */
9810                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9811                      /* 0, point, slack */
9812                     Gconvert(nv, (int)digits, 0, ebuf);
9813                     sv_catpv(sv, ebuf);
9814                     if (*ebuf)  /* May return an empty string for digits==0 */
9815                         return;
9816                 }
9817             } else if (!digits) {
9818                 STRLEN l;
9819
9820                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9821                     sv_catpvn(sv, p, l);
9822                     return;
9823                 }
9824             }
9825         }
9826     }
9827 #endif /* !USE_LONG_DOUBLE */
9828
9829     if (!args && svix < svmax && DO_UTF8(*svargs))
9830         has_utf8 = TRUE;
9831
9832     patend = (char*)pat + patlen;
9833     for (p = (char*)pat; p < patend; p = q) {
9834         bool alt = FALSE;
9835         bool left = FALSE;
9836         bool vectorize = FALSE;
9837         bool vectorarg = FALSE;
9838         bool vec_utf8 = FALSE;
9839         char fill = ' ';
9840         char plus = 0;
9841         char intsize = 0;
9842         STRLEN width = 0;
9843         STRLEN zeros = 0;
9844         bool has_precis = FALSE;
9845         STRLEN precis = 0;
9846         const I32 osvix = svix;
9847         bool is_utf8 = FALSE;  /* is this item utf8?   */
9848 #ifdef HAS_LDBL_SPRINTF_BUG
9849         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9850            with sfio - Allen <allens@cpan.org> */
9851         bool fix_ldbl_sprintf_bug = FALSE;
9852 #endif
9853
9854         char esignbuf[4];
9855         U8 utf8buf[UTF8_MAXBYTES+1];
9856         STRLEN esignlen = 0;
9857
9858         const char *eptr = NULL;
9859         const char *fmtstart;
9860         STRLEN elen = 0;
9861         SV *vecsv = NULL;
9862         const U8 *vecstr = NULL;
9863         STRLEN veclen = 0;
9864         char c = 0;
9865         int i;
9866         unsigned base = 0;
9867         IV iv = 0;
9868         UV uv = 0;
9869         /* we need a long double target in case HAS_LONG_DOUBLE but
9870            not USE_LONG_DOUBLE
9871         */
9872 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9873         long double nv;
9874 #else
9875         NV nv;
9876 #endif
9877         STRLEN have;
9878         STRLEN need;
9879         STRLEN gap;
9880         const char *dotstr = ".";
9881         STRLEN dotstrlen = 1;
9882         I32 efix = 0; /* explicit format parameter index */
9883         I32 ewix = 0; /* explicit width index */
9884         I32 epix = 0; /* explicit precision index */
9885         I32 evix = 0; /* explicit vector index */
9886         bool asterisk = FALSE;
9887
9888         /* echo everything up to the next format specification */
9889         for (q = p; q < patend && *q != '%'; ++q) ;
9890         if (q > p) {
9891             if (has_utf8 && !pat_utf8)
9892                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9893             else
9894                 sv_catpvn(sv, p, q - p);
9895             p = q;
9896         }
9897         if (q++ >= patend)
9898             break;
9899
9900         fmtstart = q;
9901
9902 /*
9903     We allow format specification elements in this order:
9904         \d+\$              explicit format parameter index
9905         [-+ 0#]+           flags
9906         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
9907         0                  flag (as above): repeated to allow "v02"     
9908         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
9909         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9910         [hlqLV]            size
9911     [%bcdefginopsuxDFOUX] format (mandatory)
9912 */
9913
9914         if (args) {
9915 /*  
9916         As of perl5.9.3, printf format checking is on by default.
9917         Internally, perl uses %p formats to provide an escape to
9918         some extended formatting.  This block deals with those
9919         extensions: if it does not match, (char*)q is reset and
9920         the normal format processing code is used.
9921
9922         Currently defined extensions are:
9923                 %p              include pointer address (standard)      
9924                 %-p     (SVf)   include an SV (previously %_)
9925                 %-<num>p        include an SV with precision <num>      
9926                 %<num>p         reserved for future extensions
9927
9928         Robin Barker 2005-07-14
9929
9930                 %1p     (VDf)   removed.  RMB 2007-10-19
9931 */
9932             char* r = q; 
9933             bool sv = FALSE;    
9934             STRLEN n = 0;
9935             if (*q == '-')
9936                 sv = *q++;
9937             n = expect_number(&q);
9938             if (*q++ == 'p') {
9939                 if (sv) {                       /* SVf */
9940                     if (n) {
9941                         precis = n;
9942                         has_precis = TRUE;
9943                     }
9944                     argsv = MUTABLE_SV(va_arg(*args, void*));
9945                     eptr = SvPV_const(argsv, elen);
9946                     if (DO_UTF8(argsv))
9947                         is_utf8 = TRUE;
9948                     goto string;
9949                 }
9950                 else if (n) {
9951                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
9952                                      "internal %%<num>p might conflict with future printf extensions");
9953                 }
9954             }
9955             q = r; 
9956         }
9957
9958         if ( (width = expect_number(&q)) ) {
9959             if (*q == '$') {
9960                 ++q;
9961                 efix = width;
9962             } else {
9963                 goto gotwidth;
9964             }
9965         }
9966
9967         /* FLAGS */
9968
9969         while (*q) {
9970             switch (*q) {
9971             case ' ':
9972             case '+':
9973                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
9974                     q++;
9975                 else
9976                     plus = *q++;
9977                 continue;
9978
9979             case '-':
9980                 left = TRUE;
9981                 q++;
9982                 continue;
9983
9984             case '0':
9985                 fill = *q++;
9986                 continue;
9987
9988             case '#':
9989                 alt = TRUE;
9990                 q++;
9991                 continue;
9992
9993             default:
9994                 break;
9995             }
9996             break;
9997         }
9998
9999       tryasterisk:
10000         if (*q == '*') {
10001             q++;
10002             if ( (ewix = expect_number(&q)) )
10003                 if (*q++ != '$')
10004                     goto unknown;
10005             asterisk = TRUE;
10006         }
10007         if (*q == 'v') {
10008             q++;
10009             if (vectorize)
10010                 goto unknown;
10011             if ((vectorarg = asterisk)) {
10012                 evix = ewix;
10013                 ewix = 0;
10014                 asterisk = FALSE;
10015             }
10016             vectorize = TRUE;
10017             goto tryasterisk;
10018         }
10019
10020         if (!asterisk)
10021         {
10022             if( *q == '0' )
10023                 fill = *q++;
10024             width = expect_number(&q);
10025         }
10026
10027         if (vectorize) {
10028             if (vectorarg) {
10029                 if (args)
10030                     vecsv = va_arg(*args, SV*);
10031                 else if (evix) {
10032                     vecsv = (evix > 0 && evix <= svmax)
10033                         ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10034                 } else {
10035                     vecsv = svix < svmax
10036                         ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10037                 }
10038                 dotstr = SvPV_const(vecsv, dotstrlen);
10039                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10040                    bad with tied or overloaded values that return UTF8.  */
10041                 if (DO_UTF8(vecsv))
10042                     is_utf8 = TRUE;
10043                 else if (has_utf8) {
10044                     vecsv = sv_mortalcopy(vecsv);
10045                     sv_utf8_upgrade(vecsv);
10046                     dotstr = SvPV_const(vecsv, dotstrlen);
10047                     is_utf8 = TRUE;
10048                 }                   
10049             }
10050             if (args) {
10051                 VECTORIZE_ARGS
10052             }
10053             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10054                 vecsv = svargs[efix ? efix-1 : svix++];
10055                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10056                 vec_utf8 = DO_UTF8(vecsv);
10057
10058                 /* if this is a version object, we need to convert
10059                  * back into v-string notation and then let the
10060                  * vectorize happen normally
10061                  */
10062                 if (sv_derived_from(vecsv, "version")) {
10063                     char *version = savesvpv(vecsv);
10064                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10065                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10066                         "vector argument not supported with alpha versions");
10067                         goto unknown;
10068                     }
10069                     vecsv = sv_newmortal();
10070                     scan_vstring(version, version + veclen, vecsv);
10071                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10072                     vec_utf8 = DO_UTF8(vecsv);
10073                     Safefree(version);
10074                 }
10075             }
10076             else {
10077                 vecstr = (U8*)"";
10078                 veclen = 0;
10079             }
10080         }
10081
10082         if (asterisk) {
10083             if (args)
10084                 i = va_arg(*args, int);
10085             else
10086                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10087                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10088             left |= (i < 0);
10089             width = (i < 0) ? -i : i;
10090         }
10091       gotwidth:
10092
10093         /* PRECISION */
10094
10095         if (*q == '.') {
10096             q++;
10097             if (*q == '*') {
10098                 q++;
10099                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10100                     goto unknown;
10101                 /* XXX: todo, support specified precision parameter */
10102                 if (epix)
10103                     goto unknown;
10104                 if (args)
10105                     i = va_arg(*args, int);
10106                 else
10107                     i = (ewix ? ewix <= svmax : svix < svmax)
10108                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10109                 precis = i;
10110                 has_precis = !(i < 0);
10111             }
10112             else {
10113                 precis = 0;
10114                 while (isDIGIT(*q))
10115                     precis = precis * 10 + (*q++ - '0');
10116                 has_precis = TRUE;
10117             }
10118         }
10119
10120         /* SIZE */
10121
10122         switch (*q) {
10123 #ifdef WIN32
10124         case 'I':                       /* Ix, I32x, and I64x */
10125 #  ifdef WIN64
10126             if (q[1] == '6' && q[2] == '4') {
10127                 q += 3;
10128                 intsize = 'q';
10129                 break;
10130             }
10131 #  endif
10132             if (q[1] == '3' && q[2] == '2') {
10133                 q += 3;
10134                 break;
10135             }
10136 #  ifdef WIN64
10137             intsize = 'q';
10138 #  endif
10139             q++;
10140             break;
10141 #endif
10142 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10143         case 'L':                       /* Ld */
10144             /*FALLTHROUGH*/
10145 #ifdef HAS_QUAD
10146         case 'q':                       /* qd */
10147 #endif
10148             intsize = 'q';
10149             q++;
10150             break;
10151 #endif
10152         case 'l':
10153 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10154             if (*(q + 1) == 'l') {      /* lld, llf */
10155                 intsize = 'q';
10156                 q += 2;
10157                 break;
10158              }
10159 #endif
10160             /*FALLTHROUGH*/
10161         case 'h':
10162             /*FALLTHROUGH*/
10163         case 'V':
10164             intsize = *q++;
10165             break;
10166         }
10167
10168         /* CONVERSION */
10169
10170         if (*q == '%') {
10171             eptr = q++;
10172             elen = 1;
10173             if (vectorize) {
10174                 c = '%';
10175                 goto unknown;
10176             }
10177             goto string;
10178         }
10179
10180         if (!vectorize && !args) {
10181             if (efix) {
10182                 const I32 i = efix-1;
10183                 argsv = (i >= 0 && i < svmax)
10184                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10185             } else {
10186                 argsv = (svix >= 0 && svix < svmax)
10187                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10188             }
10189         }
10190
10191         switch (c = *q++) {
10192
10193             /* STRINGS */
10194
10195         case 'c':
10196             if (vectorize)
10197                 goto unknown;
10198             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10199             if ((uv > 255 ||
10200                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10201                 && !IN_BYTES) {
10202                 eptr = (char*)utf8buf;
10203                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10204                 is_utf8 = TRUE;
10205             }
10206             else {
10207                 c = (char)uv;
10208                 eptr = &c;
10209                 elen = 1;
10210             }
10211             goto string;
10212
10213         case 's':
10214             if (vectorize)
10215                 goto unknown;
10216             if (args) {
10217                 eptr = va_arg(*args, char*);
10218                 if (eptr)
10219                     elen = strlen(eptr);
10220                 else {
10221                     eptr = (char *)nullstr;
10222                     elen = sizeof nullstr - 1;
10223                 }
10224             }
10225             else {
10226                 eptr = SvPV_const(argsv, elen);
10227                 if (DO_UTF8(argsv)) {
10228                     STRLEN old_precis = precis;
10229                     if (has_precis && precis < elen) {
10230                         STRLEN ulen = sv_len_utf8(argsv);
10231                         I32 p = precis > ulen ? ulen : precis;
10232                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
10233                         precis = p;
10234                     }
10235                     if (width) { /* fudge width (can't fudge elen) */
10236                         if (has_precis && precis < elen)
10237                             width += precis - old_precis;
10238                         else
10239                             width += elen - sv_len_utf8(argsv);
10240                     }
10241                     is_utf8 = TRUE;
10242                 }
10243             }
10244
10245         string:
10246             if (has_precis && precis < elen)
10247                 elen = precis;
10248             break;
10249
10250             /* INTEGERS */
10251
10252         case 'p':
10253             if (alt || vectorize)
10254                 goto unknown;
10255             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10256             base = 16;
10257             goto integer;
10258
10259         case 'D':
10260 #ifdef IV_IS_QUAD
10261             intsize = 'q';
10262 #else
10263             intsize = 'l';
10264 #endif
10265             /*FALLTHROUGH*/
10266         case 'd':
10267         case 'i':
10268 #if vdNUMBER
10269         format_vd:
10270 #endif
10271             if (vectorize) {
10272                 STRLEN ulen;
10273                 if (!veclen)
10274                     continue;
10275                 if (vec_utf8)
10276                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10277                                         UTF8_ALLOW_ANYUV);
10278                 else {
10279                     uv = *vecstr;
10280                     ulen = 1;
10281                 }
10282                 vecstr += ulen;
10283                 veclen -= ulen;
10284                 if (plus)
10285                      esignbuf[esignlen++] = plus;
10286             }
10287             else if (args) {
10288                 switch (intsize) {
10289                 case 'h':       iv = (short)va_arg(*args, int); break;
10290                 case 'l':       iv = va_arg(*args, long); break;
10291                 case 'V':       iv = va_arg(*args, IV); break;
10292                 default:        iv = va_arg(*args, int); break;
10293                 case 'q':
10294 #ifdef HAS_QUAD
10295                                 iv = va_arg(*args, Quad_t); break;
10296 #else
10297                                 goto unknown;
10298 #endif
10299                 }
10300             }
10301             else {
10302                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10303                 switch (intsize) {
10304                 case 'h':       iv = (short)tiv; break;
10305                 case 'l':       iv = (long)tiv; break;
10306                 case 'V':
10307                 default:        iv = tiv; break;
10308                 case 'q':
10309 #ifdef HAS_QUAD
10310                                 iv = (Quad_t)tiv; break;
10311 #else
10312                                 goto unknown;
10313 #endif
10314                 }
10315             }
10316             if ( !vectorize )   /* we already set uv above */
10317             {
10318                 if (iv >= 0) {
10319                     uv = iv;
10320                     if (plus)
10321                         esignbuf[esignlen++] = plus;
10322                 }
10323                 else {
10324                     uv = -iv;
10325                     esignbuf[esignlen++] = '-';
10326                 }
10327             }
10328             base = 10;
10329             goto integer;
10330
10331         case 'U':
10332 #ifdef IV_IS_QUAD
10333             intsize = 'q';
10334 #else
10335             intsize = 'l';
10336 #endif
10337             /*FALLTHROUGH*/
10338         case 'u':
10339             base = 10;
10340             goto uns_integer;
10341
10342         case 'B':
10343         case 'b':
10344             base = 2;
10345             goto uns_integer;
10346
10347         case 'O':
10348 #ifdef IV_IS_QUAD
10349             intsize = 'q';
10350 #else
10351             intsize = 'l';
10352 #endif
10353             /*FALLTHROUGH*/
10354         case 'o':
10355             base = 8;
10356             goto uns_integer;
10357
10358         case 'X':
10359         case 'x':
10360             base = 16;
10361
10362         uns_integer:
10363             if (vectorize) {
10364                 STRLEN ulen;
10365         vector:
10366                 if (!veclen)
10367                     continue;
10368                 if (vec_utf8)
10369                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10370                                         UTF8_ALLOW_ANYUV);
10371                 else {
10372                     uv = *vecstr;
10373                     ulen = 1;
10374                 }
10375                 vecstr += ulen;
10376                 veclen -= ulen;
10377             }
10378             else if (args) {
10379                 switch (intsize) {
10380                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10381                 case 'l':  uv = va_arg(*args, unsigned long); break;
10382                 case 'V':  uv = va_arg(*args, UV); break;
10383                 default:   uv = va_arg(*args, unsigned); break;
10384                 case 'q':
10385 #ifdef HAS_QUAD
10386                            uv = va_arg(*args, Uquad_t); break;
10387 #else
10388                            goto unknown;
10389 #endif
10390                 }
10391             }
10392             else {
10393                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10394                 switch (intsize) {
10395                 case 'h':       uv = (unsigned short)tuv; break;
10396                 case 'l':       uv = (unsigned long)tuv; break;
10397                 case 'V':
10398                 default:        uv = tuv; break;
10399                 case 'q':
10400 #ifdef HAS_QUAD
10401                                 uv = (Uquad_t)tuv; break;
10402 #else
10403                                 goto unknown;
10404 #endif
10405                 }
10406             }
10407
10408         integer:
10409             {
10410                 char *ptr = ebuf + sizeof ebuf;
10411                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10412                 zeros = 0;
10413
10414                 switch (base) {
10415                     unsigned dig;
10416                 case 16:
10417                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10418                     do {
10419                         dig = uv & 15;
10420                         *--ptr = p[dig];
10421                     } while (uv >>= 4);
10422                     if (tempalt) {
10423                         esignbuf[esignlen++] = '0';
10424                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10425                     }
10426                     break;
10427                 case 8:
10428                     do {
10429                         dig = uv & 7;
10430                         *--ptr = '0' + dig;
10431                     } while (uv >>= 3);
10432                     if (alt && *ptr != '0')
10433                         *--ptr = '0';
10434                     break;
10435                 case 2:
10436                     do {
10437                         dig = uv & 1;
10438                         *--ptr = '0' + dig;
10439                     } while (uv >>= 1);
10440                     if (tempalt) {
10441                         esignbuf[esignlen++] = '0';
10442                         esignbuf[esignlen++] = c;
10443                     }
10444                     break;
10445                 default:                /* it had better be ten or less */
10446                     do {
10447                         dig = uv % base;
10448                         *--ptr = '0' + dig;
10449                     } while (uv /= base);
10450                     break;
10451                 }
10452                 elen = (ebuf + sizeof ebuf) - ptr;
10453                 eptr = ptr;
10454                 if (has_precis) {
10455                     if (precis > elen)
10456                         zeros = precis - elen;
10457                     else if (precis == 0 && elen == 1 && *eptr == '0'
10458                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10459                         elen = 0;
10460
10461                 /* a precision nullifies the 0 flag. */
10462                     if (fill == '0')
10463                         fill = ' ';
10464                 }
10465             }
10466             break;
10467
10468             /* FLOATING POINT */
10469
10470         case 'F':
10471             c = 'f';            /* maybe %F isn't supported here */
10472             /*FALLTHROUGH*/
10473         case 'e': case 'E':
10474         case 'f':
10475         case 'g': case 'G':
10476             if (vectorize)
10477                 goto unknown;
10478
10479             /* This is evil, but floating point is even more evil */
10480
10481             /* for SV-style calling, we can only get NV
10482                for C-style calling, we assume %f is double;
10483                for simplicity we allow any of %Lf, %llf, %qf for long double
10484             */
10485             switch (intsize) {
10486             case 'V':
10487 #if defined(USE_LONG_DOUBLE)
10488                 intsize = 'q';
10489 #endif
10490                 break;
10491 /* [perl #20339] - we should accept and ignore %lf rather than die */
10492             case 'l':
10493                 /*FALLTHROUGH*/
10494             default:
10495 #if defined(USE_LONG_DOUBLE)
10496                 intsize = args ? 0 : 'q';
10497 #endif
10498                 break;
10499             case 'q':
10500 #if defined(HAS_LONG_DOUBLE)
10501                 break;
10502 #else
10503                 /*FALLTHROUGH*/
10504 #endif
10505             case 'h':
10506                 goto unknown;
10507             }
10508
10509             /* now we need (long double) if intsize == 'q', else (double) */
10510             nv = (args) ?
10511 #if LONG_DOUBLESIZE > DOUBLESIZE
10512                 intsize == 'q' ?
10513                     va_arg(*args, long double) :
10514                     va_arg(*args, double)
10515 #else
10516                     va_arg(*args, double)
10517 #endif
10518                 : SvNV(argsv);
10519
10520             need = 0;
10521             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10522                else. frexp() has some unspecified behaviour for those three */
10523             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10524                 i = PERL_INT_MIN;
10525                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10526                    will cast our (long double) to (double) */
10527                 (void)Perl_frexp(nv, &i);
10528                 if (i == PERL_INT_MIN)
10529                     Perl_die(aTHX_ "panic: frexp");
10530                 if (i > 0)
10531                     need = BIT_DIGITS(i);
10532             }
10533             need += has_precis ? precis : 6; /* known default */
10534
10535             if (need < width)
10536                 need = width;
10537
10538 #ifdef HAS_LDBL_SPRINTF_BUG
10539             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10540                with sfio - Allen <allens@cpan.org> */
10541
10542 #  ifdef DBL_MAX
10543 #    define MY_DBL_MAX DBL_MAX
10544 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10545 #    if DOUBLESIZE >= 8
10546 #      define MY_DBL_MAX 1.7976931348623157E+308L
10547 #    else
10548 #      define MY_DBL_MAX 3.40282347E+38L
10549 #    endif
10550 #  endif
10551
10552 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10553 #    define MY_DBL_MAX_BUG 1L
10554 #  else
10555 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10556 #  endif
10557
10558 #  ifdef DBL_MIN
10559 #    define MY_DBL_MIN DBL_MIN
10560 #  else  /* XXX guessing! -Allen */
10561 #    if DOUBLESIZE >= 8
10562 #      define MY_DBL_MIN 2.2250738585072014E-308L
10563 #    else
10564 #      define MY_DBL_MIN 1.17549435E-38L
10565 #    endif
10566 #  endif
10567
10568             if ((intsize == 'q') && (c == 'f') &&
10569                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10570                 (need < DBL_DIG)) {
10571                 /* it's going to be short enough that
10572                  * long double precision is not needed */
10573
10574                 if ((nv <= 0L) && (nv >= -0L))
10575                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10576                 else {
10577                     /* would use Perl_fp_class as a double-check but not
10578                      * functional on IRIX - see perl.h comments */
10579
10580                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10581                         /* It's within the range that a double can represent */
10582 #if defined(DBL_MAX) && !defined(DBL_MIN)
10583                         if ((nv >= ((long double)1/DBL_MAX)) ||
10584                             (nv <= (-(long double)1/DBL_MAX)))
10585 #endif
10586                         fix_ldbl_sprintf_bug = TRUE;
10587                     }
10588                 }
10589                 if (fix_ldbl_sprintf_bug == TRUE) {
10590                     double temp;
10591
10592                     intsize = 0;
10593                     temp = (double)nv;
10594                     nv = (NV)temp;
10595                 }
10596             }
10597
10598 #  undef MY_DBL_MAX
10599 #  undef MY_DBL_MAX_BUG
10600 #  undef MY_DBL_MIN
10601
10602 #endif /* HAS_LDBL_SPRINTF_BUG */
10603
10604             need += 20; /* fudge factor */
10605             if (PL_efloatsize < need) {
10606                 Safefree(PL_efloatbuf);
10607                 PL_efloatsize = need + 20; /* more fudge */
10608                 Newx(PL_efloatbuf, PL_efloatsize, char);
10609                 PL_efloatbuf[0] = '\0';
10610             }
10611
10612             if ( !(width || left || plus || alt) && fill != '0'
10613                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10614                 /* See earlier comment about buggy Gconvert when digits,
10615                    aka precis is 0  */
10616                 if ( c == 'g' && precis) {
10617                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10618                     /* May return an empty string for digits==0 */
10619                     if (*PL_efloatbuf) {
10620                         elen = strlen(PL_efloatbuf);
10621                         goto float_converted;
10622                     }
10623                 } else if ( c == 'f' && !precis) {
10624                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10625                         break;
10626                 }
10627             }
10628             {
10629                 char *ptr = ebuf + sizeof ebuf;
10630                 *--ptr = '\0';
10631                 *--ptr = c;
10632                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10633 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10634                 if (intsize == 'q') {
10635                     /* Copy the one or more characters in a long double
10636                      * format before the 'base' ([efgEFG]) character to
10637                      * the format string. */
10638                     static char const prifldbl[] = PERL_PRIfldbl;
10639                     char const *p = prifldbl + sizeof(prifldbl) - 3;
10640                     while (p >= prifldbl) { *--ptr = *p--; }
10641                 }
10642 #endif
10643                 if (has_precis) {
10644                     base = precis;
10645                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10646                     *--ptr = '.';
10647                 }
10648                 if (width) {
10649                     base = width;
10650                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10651                 }
10652                 if (fill == '0')
10653                     *--ptr = fill;
10654                 if (left)
10655                     *--ptr = '-';
10656                 if (plus)
10657                     *--ptr = plus;
10658                 if (alt)
10659                     *--ptr = '#';
10660                 *--ptr = '%';
10661
10662                 /* No taint.  Otherwise we are in the strange situation
10663                  * where printf() taints but print($float) doesn't.
10664                  * --jhi */
10665 #if defined(HAS_LONG_DOUBLE)
10666                 elen = ((intsize == 'q')
10667                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10668                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
10669 #else
10670                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
10671 #endif
10672             }
10673         float_converted:
10674             eptr = PL_efloatbuf;
10675             break;
10676
10677             /* SPECIAL */
10678
10679         case 'n':
10680             if (vectorize)
10681                 goto unknown;
10682             i = SvCUR(sv) - origlen;
10683             if (args) {
10684                 switch (intsize) {
10685                 case 'h':       *(va_arg(*args, short*)) = i; break;
10686                 default:        *(va_arg(*args, int*)) = i; break;
10687                 case 'l':       *(va_arg(*args, long*)) = i; break;
10688                 case 'V':       *(va_arg(*args, IV*)) = i; break;
10689                 case 'q':
10690 #ifdef HAS_QUAD
10691                                 *(va_arg(*args, Quad_t*)) = i; break;
10692 #else
10693                                 goto unknown;
10694 #endif
10695                 }
10696             }
10697             else
10698                 sv_setuv_mg(argsv, (UV)i);
10699             continue;   /* not "break" */
10700
10701             /* UNKNOWN */
10702
10703         default:
10704       unknown:
10705             if (!args
10706                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10707                 && ckWARN(WARN_PRINTF))
10708             {
10709                 SV * const msg = sv_newmortal();
10710                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10711                           (PL_op->op_type == OP_PRTF) ? "" : "s");
10712                 if (fmtstart < patend) {
10713                     const char * const fmtend = q < patend ? q : patend;
10714                     const char * f;
10715                     sv_catpvs(msg, "\"%");
10716                     for (f = fmtstart; f < fmtend; f++) {
10717                         if (isPRINT(*f)) {
10718                             sv_catpvn(msg, f, 1);
10719                         } else {
10720                             Perl_sv_catpvf(aTHX_ msg,
10721                                            "\\%03"UVof, (UV)*f & 0xFF);
10722                         }
10723                     }
10724                     sv_catpvs(msg, "\"");
10725                 } else {
10726                     sv_catpvs(msg, "end of string");
10727                 }
10728                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
10729             }
10730
10731             /* output mangled stuff ... */
10732             if (c == '\0')
10733                 --q;
10734             eptr = p;
10735             elen = q - p;
10736
10737             /* ... right here, because formatting flags should not apply */
10738             SvGROW(sv, SvCUR(sv) + elen + 1);
10739             p = SvEND(sv);
10740             Copy(eptr, p, elen, char);
10741             p += elen;
10742             *p = '\0';
10743             SvCUR_set(sv, p - SvPVX_const(sv));
10744             svix = osvix;
10745             continue;   /* not "break" */
10746         }
10747
10748         if (is_utf8 != has_utf8) {
10749             if (is_utf8) {
10750                 if (SvCUR(sv))
10751                     sv_utf8_upgrade(sv);
10752             }
10753             else {
10754                 const STRLEN old_elen = elen;
10755                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
10756                 sv_utf8_upgrade(nsv);
10757                 eptr = SvPVX_const(nsv);
10758                 elen = SvCUR(nsv);
10759
10760                 if (width) { /* fudge width (can't fudge elen) */
10761                     width += elen - old_elen;
10762                 }
10763                 is_utf8 = TRUE;
10764             }
10765         }
10766
10767         have = esignlen + zeros + elen;
10768         if (have < zeros)
10769             Perl_croak_nocontext("%s", PL_memory_wrap);
10770
10771         need = (have > width ? have : width);
10772         gap = need - have;
10773
10774         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
10775             Perl_croak_nocontext("%s", PL_memory_wrap);
10776         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
10777         p = SvEND(sv);
10778         if (esignlen && fill == '0') {
10779             int i;
10780             for (i = 0; i < (int)esignlen; i++)
10781                 *p++ = esignbuf[i];
10782         }
10783         if (gap && !left) {
10784             memset(p, fill, gap);
10785             p += gap;
10786         }
10787         if (esignlen && fill != '0') {
10788             int i;
10789             for (i = 0; i < (int)esignlen; i++)
10790                 *p++ = esignbuf[i];
10791         }
10792         if (zeros) {
10793             int i;
10794             for (i = zeros; i; i--)
10795                 *p++ = '0';
10796         }
10797         if (elen) {
10798             Copy(eptr, p, elen, char);
10799             p += elen;
10800         }
10801         if (gap && left) {
10802             memset(p, ' ', gap);
10803             p += gap;
10804         }
10805         if (vectorize) {
10806             if (veclen) {
10807                 Copy(dotstr, p, dotstrlen, char);
10808                 p += dotstrlen;
10809             }
10810             else
10811                 vectorize = FALSE;              /* done iterating over vecstr */
10812         }
10813         if (is_utf8)
10814             has_utf8 = TRUE;
10815         if (has_utf8)
10816             SvUTF8_on(sv);
10817         *p = '\0';
10818         SvCUR_set(sv, p - SvPVX_const(sv));
10819         if (vectorize) {
10820             esignlen = 0;
10821             goto vector;
10822         }
10823     }
10824     SvTAINT(sv);
10825 }
10826
10827 /* =========================================================================
10828
10829 =head1 Cloning an interpreter
10830
10831 All the macros and functions in this section are for the private use of
10832 the main function, perl_clone().
10833
10834 The foo_dup() functions make an exact copy of an existing foo thingy.
10835 During the course of a cloning, a hash table is used to map old addresses
10836 to new addresses. The table is created and manipulated with the
10837 ptr_table_* functions.
10838
10839 =cut
10840
10841  * =========================================================================*/
10842
10843
10844 #if defined(USE_ITHREADS)
10845
10846 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
10847 #ifndef GpREFCNT_inc
10848 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10849 #endif
10850
10851
10852 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
10853    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
10854    If this changes, please unmerge ss_dup.
10855    Likewise, sv_dup_inc_multiple() relies on this fact.  */
10856 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
10857 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
10858 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
10859 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
10860 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
10861 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
10862 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
10863 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
10864 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
10865 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
10866 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
10867 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
10868 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
10869
10870 /* clone a parser */
10871
10872 yy_parser *
10873 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
10874 {
10875     yy_parser *parser;
10876
10877     PERL_ARGS_ASSERT_PARSER_DUP;
10878
10879     if (!proto)
10880         return NULL;
10881
10882     /* look for it in the table first */
10883     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
10884     if (parser)
10885         return parser;
10886
10887     /* create anew and remember what it is */
10888     Newxz(parser, 1, yy_parser);
10889     ptr_table_store(PL_ptr_table, proto, parser);
10890
10891     /* XXX these not yet duped */
10892     parser->old_parser = NULL;
10893     parser->stack = NULL;
10894     parser->ps = NULL;
10895     parser->stack_size = 0;
10896     /* XXX parser->stack->state = 0; */
10897
10898     /* XXX eventually, just Copy() most of the parser struct ? */
10899
10900     parser->lex_brackets = proto->lex_brackets;
10901     parser->lex_casemods = proto->lex_casemods;
10902     parser->lex_brackstack = savepvn(proto->lex_brackstack,
10903                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
10904     parser->lex_casestack = savepvn(proto->lex_casestack,
10905                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
10906     parser->lex_defer   = proto->lex_defer;
10907     parser->lex_dojoin  = proto->lex_dojoin;
10908     parser->lex_expect  = proto->lex_expect;
10909     parser->lex_formbrack = proto->lex_formbrack;
10910     parser->lex_inpat   = proto->lex_inpat;
10911     parser->lex_inwhat  = proto->lex_inwhat;
10912     parser->lex_op      = proto->lex_op;
10913     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
10914     parser->lex_starts  = proto->lex_starts;
10915     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
10916     parser->multi_close = proto->multi_close;
10917     parser->multi_open  = proto->multi_open;
10918     parser->multi_start = proto->multi_start;
10919     parser->multi_end   = proto->multi_end;
10920     parser->pending_ident = proto->pending_ident;
10921     parser->preambled   = proto->preambled;
10922     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
10923     parser->linestr     = sv_dup_inc(proto->linestr, param);
10924     parser->expect      = proto->expect;
10925     parser->copline     = proto->copline;
10926     parser->last_lop_op = proto->last_lop_op;
10927     parser->lex_state   = proto->lex_state;
10928     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
10929     /* rsfp_filters entries have fake IoDIRP() */
10930     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
10931     parser->in_my       = proto->in_my;
10932     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
10933     parser->error_count = proto->error_count;
10934
10935
10936     parser->linestr     = sv_dup_inc(proto->linestr, param);
10937
10938     {
10939         char * const ols = SvPVX(proto->linestr);
10940         char * const ls  = SvPVX(parser->linestr);
10941
10942         parser->bufptr      = ls + (proto->bufptr >= ols ?
10943                                     proto->bufptr -  ols : 0);
10944         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
10945                                     proto->oldbufptr -  ols : 0);
10946         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
10947                                     proto->oldoldbufptr -  ols : 0);
10948         parser->linestart   = ls + (proto->linestart >= ols ?
10949                                     proto->linestart -  ols : 0);
10950         parser->last_uni    = ls + (proto->last_uni >= ols ?
10951                                     proto->last_uni -  ols : 0);
10952         parser->last_lop    = ls + (proto->last_lop >= ols ?
10953                                     proto->last_lop -  ols : 0);
10954
10955         parser->bufend      = ls + SvCUR(parser->linestr);
10956     }
10957
10958     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
10959
10960
10961 #ifdef PERL_MAD
10962     parser->endwhite    = proto->endwhite;
10963     parser->faketokens  = proto->faketokens;
10964     parser->lasttoke    = proto->lasttoke;
10965     parser->nextwhite   = proto->nextwhite;
10966     parser->realtokenstart = proto->realtokenstart;
10967     parser->skipwhite   = proto->skipwhite;
10968     parser->thisclose   = proto->thisclose;
10969     parser->thismad     = proto->thismad;
10970     parser->thisopen    = proto->thisopen;
10971     parser->thisstuff   = proto->thisstuff;
10972     parser->thistoken   = proto->thistoken;
10973     parser->thiswhite   = proto->thiswhite;
10974
10975     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
10976     parser->curforce    = proto->curforce;
10977 #else
10978     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
10979     Copy(proto->nexttype, parser->nexttype, 5,  I32);
10980     parser->nexttoke    = proto->nexttoke;
10981 #endif
10982
10983     /* XXX should clone saved_curcop here, but we aren't passed
10984      * proto_perl; so do it in perl_clone_using instead */
10985
10986     return parser;
10987 }
10988
10989
10990 /* duplicate a file handle */
10991
10992 PerlIO *
10993 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
10994 {
10995     PerlIO *ret;
10996
10997     PERL_ARGS_ASSERT_FP_DUP;
10998     PERL_UNUSED_ARG(type);
10999
11000     if (!fp)
11001         return (PerlIO*)NULL;
11002
11003     /* look for it in the table first */
11004     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11005     if (ret)
11006         return ret;
11007
11008     /* create anew and remember what it is */
11009     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11010     ptr_table_store(PL_ptr_table, fp, ret);
11011     return ret;
11012 }
11013
11014 /* duplicate a directory handle */
11015
11016 DIR *
11017 Perl_dirp_dup(pTHX_ DIR *const dp)
11018 {
11019 #ifdef HAS_FCHDIR
11020     DIR *ret;
11021     DIR *pwd;
11022     register const Direntry_t *dirent;
11023     char smallbuf[256];
11024     char *name = NULL;
11025     STRLEN len = -1;
11026     long pos;
11027 #endif
11028
11029     PERL_UNUSED_CONTEXT;
11030
11031 #ifdef HAS_FCHDIR
11032     if (!dp)
11033         return (DIR*)NULL;
11034     /* look for it in the table first */
11035     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11036     if (ret)
11037         return ret;
11038
11039     /* create anew */
11040
11041     /* open the current directory (so we can switch back) */
11042     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11043
11044     /* chdir to our dir handle and open the present working directory */
11045     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11046         PerlDir_close(pwd);
11047         return (DIR *)NULL;
11048     }
11049     /* Now we should have two dir handles pointing to the same dir. */
11050
11051     /* Be nice to the calling code and chdir back to where we were. */
11052     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11053
11054     /* We have no need of the pwd handle any more. */
11055     PerlDir_close(pwd);
11056
11057 #ifdef DIRNAMLEN
11058 # define d_namlen(d) (d)->d_namlen
11059 #else
11060 # define d_namlen(d) strlen((d)->d_name)
11061 #endif
11062     /* Iterate once through dp, to get the file name at the current posi-
11063        tion. Then step back. */
11064     pos = PerlDir_tell(dp);
11065     if ((dirent = PerlDir_read(dp))) {
11066         len = d_namlen(dirent);
11067         if (len <= sizeof smallbuf) name = smallbuf;
11068         else Newx(name, len, char);
11069         Move(dirent->d_name, name, len, char);
11070     }
11071     PerlDir_seek(dp, pos);
11072
11073     /* Iterate through the new dir handle, till we find a file with the
11074        right name. */
11075     if (!dirent) /* just before the end */
11076         for(;;) {
11077             pos = PerlDir_tell(ret);
11078             if (PerlDir_read(ret)) continue; /* not there yet */
11079             PerlDir_seek(ret, pos); /* step back */
11080             break;
11081         }
11082     else {
11083         const long pos0 = PerlDir_tell(ret);
11084         for(;;) {
11085             pos = PerlDir_tell(ret);
11086             if ((dirent = PerlDir_read(ret))) {
11087                 if (len == d_namlen(dirent)
11088                  && memEQ(name, dirent->d_name, len)) {
11089                     /* found it */
11090                     PerlDir_seek(ret, pos); /* step back */
11091                     break;
11092                 }
11093                 /* else we are not there yet; keep iterating */
11094             }
11095             else { /* This is not meant to happen. The best we can do is
11096                       reset the iterator to the beginning. */
11097                 PerlDir_seek(ret, pos0);
11098                 break;
11099             }
11100         }
11101     }
11102 #undef d_namlen
11103
11104     if (name && name != smallbuf)
11105         Safefree(name);
11106
11107     /* pop it in the pointer table */
11108     ptr_table_store(PL_ptr_table, dp, ret);
11109
11110     return ret;
11111 #else
11112     return (DIR*)NULL;
11113 #endif
11114 }
11115
11116 /* duplicate a typeglob */
11117
11118 GP *
11119 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11120 {
11121     GP *ret;
11122
11123     PERL_ARGS_ASSERT_GP_DUP;
11124
11125     if (!gp)
11126         return (GP*)NULL;
11127     /* look for it in the table first */
11128     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11129     if (ret)
11130         return ret;
11131
11132     /* create anew and remember what it is */
11133     Newxz(ret, 1, GP);
11134     ptr_table_store(PL_ptr_table, gp, ret);
11135
11136     /* clone */
11137     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11138        on Newxz() to do this for us.  */
11139     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11140     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11141     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11142     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11143     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11144     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11145     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11146     ret->gp_cvgen       = gp->gp_cvgen;
11147     ret->gp_line        = gp->gp_line;
11148     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11149     return ret;
11150 }
11151
11152 /* duplicate a chain of magic */
11153
11154 MAGIC *
11155 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11156 {
11157     MAGIC *mgret = NULL;
11158     MAGIC **mgprev_p = &mgret;
11159
11160     PERL_ARGS_ASSERT_MG_DUP;
11161
11162     for (; mg; mg = mg->mg_moremagic) {
11163         MAGIC *nmg;
11164
11165         if ((param->flags & CLONEf_JOIN_IN)
11166                 && mg->mg_type == PERL_MAGIC_backref)
11167             /* when joining, we let the individual SVs add themselves to
11168              * backref as needed. */
11169             continue;
11170
11171         Newx(nmg, 1, MAGIC);
11172         *mgprev_p = nmg;
11173         mgprev_p = &(nmg->mg_moremagic);
11174
11175         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11176            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11177            from the original commit adding Perl_mg_dup() - revision 4538.
11178            Similarly there is the annotation "XXX random ptr?" next to the
11179            assignment to nmg->mg_ptr.  */
11180         *nmg = *mg;
11181
11182         /* FIXME for plugins
11183         if (nmg->mg_type == PERL_MAGIC_qr) {
11184             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11185         }
11186         else
11187         */
11188         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11189                           ? nmg->mg_type == PERL_MAGIC_backref
11190                                 /* The backref AV has its reference
11191                                  * count deliberately bumped by 1 */
11192                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11193                                                     nmg->mg_obj, param))
11194                                 : sv_dup_inc(nmg->mg_obj, param)
11195                           : sv_dup(nmg->mg_obj, param);
11196
11197         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11198             if (nmg->mg_len > 0) {
11199                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11200                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11201                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11202                 {
11203                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11204                     sv_dup_inc_multiple((SV**)(namtp->table),
11205                                         (SV**)(namtp->table), NofAMmeth, param);
11206                 }
11207             }
11208             else if (nmg->mg_len == HEf_SVKEY)
11209                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11210         }
11211         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11212             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11213         }
11214     }
11215     return mgret;
11216 }
11217
11218 #endif /* USE_ITHREADS */
11219
11220 struct ptr_tbl_arena {
11221     struct ptr_tbl_arena *next;
11222     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11223 };
11224
11225 /* create a new pointer-mapping table */
11226
11227 PTR_TBL_t *
11228 Perl_ptr_table_new(pTHX)
11229 {
11230     PTR_TBL_t *tbl;
11231     PERL_UNUSED_CONTEXT;
11232
11233     Newx(tbl, 1, PTR_TBL_t);
11234     tbl->tbl_max        = 511;
11235     tbl->tbl_items      = 0;
11236     tbl->tbl_arena      = NULL;
11237     tbl->tbl_arena_next = NULL;
11238     tbl->tbl_arena_end  = NULL;
11239     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11240     return tbl;
11241 }
11242
11243 #define PTR_TABLE_HASH(ptr) \
11244   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11245
11246 /* map an existing pointer using a table */
11247
11248 STATIC PTR_TBL_ENT_t *
11249 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11250 {
11251     PTR_TBL_ENT_t *tblent;
11252     const UV hash = PTR_TABLE_HASH(sv);
11253
11254     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11255
11256     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11257     for (; tblent; tblent = tblent->next) {
11258         if (tblent->oldval == sv)
11259             return tblent;
11260     }
11261     return NULL;
11262 }
11263
11264 void *
11265 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11266 {
11267     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11268
11269     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11270     PERL_UNUSED_CONTEXT;
11271
11272     return tblent ? tblent->newval : NULL;
11273 }
11274
11275 /* add a new entry to a pointer-mapping table */
11276
11277 void
11278 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11279 {
11280     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11281
11282     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11283     PERL_UNUSED_CONTEXT;
11284
11285     if (tblent) {
11286         tblent->newval = newsv;
11287     } else {
11288         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11289
11290         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11291             struct ptr_tbl_arena *new_arena;
11292
11293             Newx(new_arena, 1, struct ptr_tbl_arena);
11294             new_arena->next = tbl->tbl_arena;
11295             tbl->tbl_arena = new_arena;
11296             tbl->tbl_arena_next = new_arena->array;
11297             tbl->tbl_arena_end = new_arena->array
11298                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11299         }
11300
11301         tblent = tbl->tbl_arena_next++;
11302
11303         tblent->oldval = oldsv;
11304         tblent->newval = newsv;
11305         tblent->next = tbl->tbl_ary[entry];
11306         tbl->tbl_ary[entry] = tblent;
11307         tbl->tbl_items++;
11308         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11309             ptr_table_split(tbl);
11310     }
11311 }
11312
11313 /* double the hash bucket size of an existing ptr table */
11314
11315 void
11316 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11317 {
11318     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11319     const UV oldsize = tbl->tbl_max + 1;
11320     UV newsize = oldsize * 2;
11321     UV i;
11322
11323     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11324     PERL_UNUSED_CONTEXT;
11325
11326     Renew(ary, newsize, PTR_TBL_ENT_t*);
11327     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11328     tbl->tbl_max = --newsize;
11329     tbl->tbl_ary = ary;
11330     for (i=0; i < oldsize; i++, ary++) {
11331         PTR_TBL_ENT_t **entp = ary;
11332         PTR_TBL_ENT_t *ent = *ary;
11333         PTR_TBL_ENT_t **curentp;
11334         if (!ent)
11335             continue;
11336         curentp = ary + oldsize;
11337         do {
11338             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11339                 *entp = ent->next;
11340                 ent->next = *curentp;
11341                 *curentp = ent;
11342             }
11343             else
11344                 entp = &ent->next;
11345             ent = *entp;
11346         } while (ent);
11347     }
11348 }
11349
11350 /* remove all the entries from a ptr table */
11351 /* Deprecated - will be removed post 5.14 */
11352
11353 void
11354 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11355 {
11356     if (tbl && tbl->tbl_items) {
11357         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11358
11359         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11360
11361         while (arena) {
11362             struct ptr_tbl_arena *next = arena->next;
11363
11364             Safefree(arena);
11365             arena = next;
11366         };
11367
11368         tbl->tbl_items = 0;
11369         tbl->tbl_arena = NULL;
11370         tbl->tbl_arena_next = NULL;
11371         tbl->tbl_arena_end = NULL;
11372     }
11373 }
11374
11375 /* clear and free a ptr table */
11376
11377 void
11378 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11379 {
11380     struct ptr_tbl_arena *arena;
11381
11382     if (!tbl) {
11383         return;
11384     }
11385
11386     arena = tbl->tbl_arena;
11387
11388     while (arena) {
11389         struct ptr_tbl_arena *next = arena->next;
11390
11391         Safefree(arena);
11392         arena = next;
11393     }
11394
11395     Safefree(tbl->tbl_ary);
11396     Safefree(tbl);
11397 }
11398
11399 #if defined(USE_ITHREADS)
11400
11401 void
11402 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11403 {
11404     PERL_ARGS_ASSERT_RVPV_DUP;
11405
11406     if (SvROK(sstr)) {
11407         if (SvWEAKREF(sstr)) {
11408             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11409             if (param->flags & CLONEf_JOIN_IN) {
11410                 /* if joining, we add any back references individually rather
11411                  * than copying the whole backref array */
11412                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11413             }
11414         }
11415         else
11416             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11417     }
11418     else if (SvPVX_const(sstr)) {
11419         /* Has something there */
11420         if (SvLEN(sstr)) {
11421             /* Normal PV - clone whole allocated space */
11422             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11423             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11424                 /* Not that normal - actually sstr is copy on write.
11425                    But we are a true, independant SV, so:  */
11426                 SvREADONLY_off(dstr);
11427                 SvFAKE_off(dstr);
11428             }
11429         }
11430         else {
11431             /* Special case - not normally malloced for some reason */
11432             if (isGV_with_GP(sstr)) {
11433                 /* Don't need to do anything here.  */
11434             }
11435             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
11436                 /* A "shared" PV - clone it as "shared" PV */
11437                 SvPV_set(dstr,
11438                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11439                                          param)));
11440             }
11441             else {
11442                 /* Some other special case - random pointer */
11443                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11444             }
11445         }
11446     }
11447     else {
11448         /* Copy the NULL */
11449         SvPV_set(dstr, NULL);
11450     }
11451 }
11452
11453 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11454 static SV **
11455 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11456                       SSize_t items, CLONE_PARAMS *const param)
11457 {
11458     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11459
11460     while (items-- > 0) {
11461         *dest++ = sv_dup_inc(*source++, param);
11462     }
11463
11464     return dest;
11465 }
11466
11467 /* duplicate an SV of any type (including AV, HV etc) */
11468
11469 static SV *
11470 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11471 {
11472     dVAR;
11473     SV *dstr;
11474
11475     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11476
11477     if (SvTYPE(sstr) == SVTYPEMASK) {
11478 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11479         abort();
11480 #endif
11481         return NULL;
11482     }
11483     /* look for it in the table first */
11484     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11485     if (dstr)
11486         return dstr;
11487
11488     if(param->flags & CLONEf_JOIN_IN) {
11489         /** We are joining here so we don't want do clone
11490             something that is bad **/
11491         if (SvTYPE(sstr) == SVt_PVHV) {
11492             const HEK * const hvname = HvNAME_HEK(sstr);
11493             if (hvname) {
11494                 /** don't clone stashes if they already exist **/
11495                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
11496                 ptr_table_store(PL_ptr_table, sstr, dstr);
11497                 return dstr;
11498             }
11499         }
11500     }
11501
11502     /* create anew and remember what it is */
11503     new_SV(dstr);
11504
11505 #ifdef DEBUG_LEAKING_SCALARS
11506     dstr->sv_debug_optype = sstr->sv_debug_optype;
11507     dstr->sv_debug_line = sstr->sv_debug_line;
11508     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11509     dstr->sv_debug_parent = (SV*)sstr;
11510     FREE_SV_DEBUG_FILE(dstr);
11511     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11512 #endif
11513
11514     ptr_table_store(PL_ptr_table, sstr, dstr);
11515
11516     /* clone */
11517     SvFLAGS(dstr)       = SvFLAGS(sstr);
11518     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11519     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11520
11521 #ifdef DEBUGGING
11522     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11523         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11524                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11525 #endif
11526
11527     /* don't clone objects whose class has asked us not to */
11528     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11529         SvFLAGS(dstr) = 0;
11530         return dstr;
11531     }
11532
11533     switch (SvTYPE(sstr)) {
11534     case SVt_NULL:
11535         SvANY(dstr)     = NULL;
11536         break;
11537     case SVt_IV:
11538         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11539         if(SvROK(sstr)) {
11540             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11541         } else {
11542             SvIV_set(dstr, SvIVX(sstr));
11543         }
11544         break;
11545     case SVt_NV:
11546         SvANY(dstr)     = new_XNV();
11547         SvNV_set(dstr, SvNVX(sstr));
11548         break;
11549         /* case SVt_BIND: */
11550     default:
11551         {
11552             /* These are all the types that need complex bodies allocating.  */
11553             void *new_body;
11554             const svtype sv_type = SvTYPE(sstr);
11555             const struct body_details *const sv_type_details
11556                 = bodies_by_type + sv_type;
11557
11558             switch (sv_type) {
11559             default:
11560                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11561                 break;
11562
11563             case SVt_PVGV:
11564             case SVt_PVIO:
11565             case SVt_PVFM:
11566             case SVt_PVHV:
11567             case SVt_PVAV:
11568             case SVt_PVCV:
11569             case SVt_PVLV:
11570             case SVt_REGEXP:
11571             case SVt_PVMG:
11572             case SVt_PVNV:
11573             case SVt_PVIV:
11574             case SVt_PV:
11575                 assert(sv_type_details->body_size);
11576                 if (sv_type_details->arena) {
11577                     new_body_inline(new_body, sv_type);
11578                     new_body
11579                         = (void*)((char*)new_body - sv_type_details->offset);
11580                 } else {
11581                     new_body = new_NOARENA(sv_type_details);
11582                 }
11583             }
11584             assert(new_body);
11585             SvANY(dstr) = new_body;
11586
11587 #ifndef PURIFY
11588             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11589                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11590                  sv_type_details->copy, char);
11591 #else
11592             Copy(((char*)SvANY(sstr)),
11593                  ((char*)SvANY(dstr)),
11594                  sv_type_details->body_size + sv_type_details->offset, char);
11595 #endif
11596
11597             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11598                 && !isGV_with_GP(dstr)
11599                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
11600                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11601
11602             /* The Copy above means that all the source (unduplicated) pointers
11603                are now in the destination.  We can check the flags and the
11604                pointers in either, but it's possible that there's less cache
11605                missing by always going for the destination.
11606                FIXME - instrument and check that assumption  */
11607             if (sv_type >= SVt_PVMG) {
11608                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11609                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11610                 } else if (SvMAGIC(dstr))
11611                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11612                 if (SvSTASH(dstr))
11613                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
11614             }
11615
11616             /* The cast silences a GCC warning about unhandled types.  */
11617             switch ((int)sv_type) {
11618             case SVt_PV:
11619                 break;
11620             case SVt_PVIV:
11621                 break;
11622             case SVt_PVNV:
11623                 break;
11624             case SVt_PVMG:
11625                 break;
11626             case SVt_REGEXP:
11627                 /* FIXME for plugins */
11628                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
11629                 break;
11630             case SVt_PVLV:
11631                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11632                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11633                     LvTARG(dstr) = dstr;
11634                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
11635                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
11636                 else
11637                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
11638             case SVt_PVGV:
11639                 /* non-GP case already handled above */
11640                 if(isGV_with_GP(sstr)) {
11641                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
11642                     /* Don't call sv_add_backref here as it's going to be
11643                        created as part of the magic cloning of the symbol
11644                        table--unless this is during a join and the stash
11645                        is not actually being cloned.  */
11646                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
11647                        at the point of this comment.  */
11648                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
11649                     if (param->flags & CLONEf_JOIN_IN)
11650                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
11651                     GvGP(dstr)  = gp_dup(GvGP(sstr), param);
11652                     (void)GpREFCNT_inc(GvGP(dstr));
11653                 }
11654                 break;
11655             case SVt_PVIO:
11656                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
11657                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11658                     /* I have no idea why fake dirp (rsfps)
11659                        should be treated differently but otherwise
11660                        we end up with leaks -- sky*/
11661                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
11662                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
11663                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11664                 } else {
11665                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
11666                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
11667                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
11668                     if (IoDIRP(dstr)) {
11669                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr));
11670                     } else {
11671                         NOOP;
11672                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
11673                     }
11674                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
11675                 }
11676                 if (IoOFP(dstr) == IoIFP(sstr))
11677                     IoOFP(dstr) = IoIFP(dstr);
11678                 else
11679                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
11680                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
11681                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
11682                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
11683                 break;
11684             case SVt_PVAV:
11685                 /* avoid cloning an empty array */
11686                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
11687                     SV **dst_ary, **src_ary;
11688                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
11689
11690                     src_ary = AvARRAY((const AV *)sstr);
11691                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
11692                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
11693                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11694                     AvALLOC((const AV *)dstr) = dst_ary;
11695                     if (AvREAL((const AV *)sstr)) {
11696                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11697                                                       param);
11698                     }
11699                     else {
11700                         while (items-- > 0)
11701                             *dst_ary++ = sv_dup(*src_ary++, param);
11702                     }
11703                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
11704                     while (items-- > 0) {
11705                         *dst_ary++ = &PL_sv_undef;
11706                     }
11707                 }
11708                 else {
11709                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
11710                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
11711                     AvMAX(  (const AV *)dstr)   = -1;
11712                     AvFILLp((const AV *)dstr)   = -1;
11713                 }
11714                 break;
11715             case SVt_PVHV:
11716                 if (HvARRAY((const HV *)sstr)) {
11717                     STRLEN i = 0;
11718                     const bool sharekeys = !!HvSHAREKEYS(sstr);
11719                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
11720                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
11721                     char *darray;
11722                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
11723                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
11724                         char);
11725                     HvARRAY(dstr) = (HE**)darray;
11726                     while (i <= sxhv->xhv_max) {
11727                         const HE * const source = HvARRAY(sstr)[i];
11728                         HvARRAY(dstr)[i] = source
11729                             ? he_dup(source, sharekeys, param) : 0;
11730                         ++i;
11731                     }
11732                     if (SvOOK(sstr)) {
11733                         HEK *hvname;
11734                         const struct xpvhv_aux * const saux = HvAUX(sstr);
11735                         struct xpvhv_aux * const daux = HvAUX(dstr);
11736                         /* This flag isn't copied.  */
11737                         /* SvOOK_on(hv) attacks the IV flags.  */
11738                         SvFLAGS(dstr) |= SVf_OOK;
11739
11740                         hvname = saux->xhv_name;
11741                         daux->xhv_name = hek_dup(hvname, param);
11742
11743                         daux->xhv_riter = saux->xhv_riter;
11744                         daux->xhv_eiter = saux->xhv_eiter
11745                             ? he_dup(saux->xhv_eiter,
11746                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
11747                         /* backref array needs refcnt=2; see sv_add_backref */
11748                         daux->xhv_backreferences =
11749                             (param->flags & CLONEf_JOIN_IN)
11750                                 /* when joining, we let the individual GVs and
11751                                  * CVs add themselves to backref as
11752                                  * needed. This avoids pulling in stuff
11753                                  * that isn't required, and simplifies the
11754                                  * case where stashes aren't cloned back
11755                                  * if they already exist in the parent
11756                                  * thread */
11757                             ? NULL
11758                             : saux->xhv_backreferences
11759                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
11760                                     ? MUTABLE_AV(SvREFCNT_inc(
11761                                           sv_dup_inc((const SV *)
11762                                             saux->xhv_backreferences, param)))
11763                                     : MUTABLE_AV(sv_dup((const SV *)
11764                                             saux->xhv_backreferences, param))
11765                                 : 0;
11766
11767                         daux->xhv_mro_meta = saux->xhv_mro_meta
11768                             ? mro_meta_dup(saux->xhv_mro_meta, param)
11769                             : 0;
11770
11771                         /* Record stashes for possible cloning in Perl_clone(). */
11772                         if (hvname)
11773                             av_push(param->stashes, dstr);
11774                     }
11775                 }
11776                 else
11777                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
11778                 break;
11779             case SVt_PVCV:
11780                 if (!(param->flags & CLONEf_COPY_STACKS)) {
11781                     CvDEPTH(dstr) = 0;
11782                 }
11783                 /*FALLTHROUGH*/
11784             case SVt_PVFM:
11785                 /* NOTE: not refcounted */
11786                 CvSTASH(dstr)   = hv_dup(CvSTASH(dstr), param);
11787                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
11788                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
11789                 OP_REFCNT_LOCK;
11790                 if (!CvISXSUB(dstr))
11791                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
11792                 OP_REFCNT_UNLOCK;
11793                 if (CvCONST(dstr) && CvISXSUB(dstr)) {
11794                     CvXSUBANY(dstr).any_ptr =
11795                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
11796                 }
11797                 /* don't dup if copying back - CvGV isn't refcounted, so the
11798                  * duped GV may never be freed. A bit of a hack! DAPM */
11799                 SvANY(MUTABLE_CV(dstr))->xcv_gv =
11800                     CvCVGV_RC(dstr)
11801                     ? gv_dup_inc(CvGV(sstr), param)
11802                     : (param->flags & CLONEf_JOIN_IN)
11803                         ? NULL
11804                         : gv_dup(CvGV(sstr), param);
11805
11806                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
11807                 CvOUTSIDE(dstr) =
11808                     CvWEAKOUTSIDE(sstr)
11809                     ? cv_dup(    CvOUTSIDE(dstr), param)
11810                     : cv_dup_inc(CvOUTSIDE(dstr), param);
11811                 if (!CvISXSUB(dstr))
11812                     CvFILE(dstr) = SAVEPV(CvFILE(dstr));
11813                 break;
11814             }
11815         }
11816     }
11817
11818     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
11819         ++PL_sv_objcount;
11820
11821     return dstr;
11822  }
11823
11824 SV *
11825 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11826 {
11827     PERL_ARGS_ASSERT_SV_DUP_INC;
11828     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
11829 }
11830
11831 SV *
11832 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11833 {
11834     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
11835     PERL_ARGS_ASSERT_SV_DUP;
11836
11837     /* Track every SV that (at least initially) had a reference count of 0.
11838        We need to do this by holding an actual reference to it in this array.
11839        If we attempt to cheat, turn AvREAL_off(), and store only pointers
11840        (akin to the stashes hash, and the perl stack), we come unstuck if
11841        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
11842        thread) is manipulated in a CLONE method, because CLONE runs before the
11843        unreferenced array is walked to find SVs still with SvREFCNT() == 0
11844        (and fix things up by giving each a reference via the temps stack).
11845        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
11846        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
11847        before the walk of unreferenced happens and a reference to that is SV
11848        added to the temps stack. At which point we have the same SV considered
11849        to be in use, and free to be re-used. Not good.
11850     */
11851     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
11852         assert(param->unreferenced);
11853         av_push(param->unreferenced, SvREFCNT_inc(dstr));
11854     }
11855
11856     return dstr;
11857 }
11858
11859 /* duplicate a context */
11860
11861 PERL_CONTEXT *
11862 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
11863 {
11864     PERL_CONTEXT *ncxs;
11865
11866     PERL_ARGS_ASSERT_CX_DUP;
11867
11868     if (!cxs)
11869         return (PERL_CONTEXT*)NULL;
11870
11871     /* look for it in the table first */
11872     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
11873     if (ncxs)
11874         return ncxs;
11875
11876     /* create anew and remember what it is */
11877     Newx(ncxs, max + 1, PERL_CONTEXT);
11878     ptr_table_store(PL_ptr_table, cxs, ncxs);
11879     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
11880
11881     while (ix >= 0) {
11882         PERL_CONTEXT * const ncx = &ncxs[ix];
11883         if (CxTYPE(ncx) == CXt_SUBST) {
11884             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
11885         }
11886         else {
11887             switch (CxTYPE(ncx)) {
11888             case CXt_SUB:
11889                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
11890                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
11891                                            : cv_dup(ncx->blk_sub.cv,param));
11892                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
11893                                            ? av_dup_inc(ncx->blk_sub.argarray,
11894                                                         param)
11895                                            : NULL);
11896                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
11897                                                      param);
11898                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
11899                                            ncx->blk_sub.oldcomppad);
11900                 break;
11901             case CXt_EVAL:
11902                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
11903                                                       param);
11904                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
11905                 break;
11906             case CXt_LOOP_LAZYSV:
11907                 ncx->blk_loop.state_u.lazysv.end
11908                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
11909                 /* We are taking advantage of av_dup_inc and sv_dup_inc
11910                    actually being the same function, and order equivalance of
11911                    the two unions.
11912                    We can assert the later [but only at run time :-(]  */
11913                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
11914                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
11915             case CXt_LOOP_FOR:
11916                 ncx->blk_loop.state_u.ary.ary
11917                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
11918             case CXt_LOOP_LAZYIV:
11919             case CXt_LOOP_PLAIN:
11920                 if (CxPADLOOP(ncx)) {
11921                     ncx->blk_loop.itervar_u.oldcomppad
11922                         = (PAD*)ptr_table_fetch(PL_ptr_table,
11923                                         ncx->blk_loop.itervar_u.oldcomppad);
11924                 } else {
11925                     ncx->blk_loop.itervar_u.gv
11926                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
11927                                     param);
11928                 }
11929                 break;
11930             case CXt_FORMAT:
11931                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
11932                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
11933                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
11934                                                      param);
11935                 break;
11936             case CXt_BLOCK:
11937             case CXt_NULL:
11938                 break;
11939             }
11940         }
11941         --ix;
11942     }
11943     return ncxs;
11944 }
11945
11946 /* duplicate a stack info structure */
11947
11948 PERL_SI *
11949 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
11950 {
11951     PERL_SI *nsi;
11952
11953     PERL_ARGS_ASSERT_SI_DUP;
11954
11955     if (!si)
11956         return (PERL_SI*)NULL;
11957
11958     /* look for it in the table first */
11959     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
11960     if (nsi)
11961         return nsi;
11962
11963     /* create anew and remember what it is */
11964     Newxz(nsi, 1, PERL_SI);
11965     ptr_table_store(PL_ptr_table, si, nsi);
11966
11967     nsi->si_stack       = av_dup_inc(si->si_stack, param);
11968     nsi->si_cxix        = si->si_cxix;
11969     nsi->si_cxmax       = si->si_cxmax;
11970     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
11971     nsi->si_type        = si->si_type;
11972     nsi->si_prev        = si_dup(si->si_prev, param);
11973     nsi->si_next        = si_dup(si->si_next, param);
11974     nsi->si_markoff     = si->si_markoff;
11975
11976     return nsi;
11977 }
11978
11979 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
11980 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
11981 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
11982 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
11983 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
11984 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
11985 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
11986 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
11987 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
11988 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
11989 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
11990 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
11991 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
11992 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
11993 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
11994 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11995
11996 /* XXXXX todo */
11997 #define pv_dup_inc(p)   SAVEPV(p)
11998 #define pv_dup(p)       SAVEPV(p)
11999 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12000
12001 /* map any object to the new equivent - either something in the
12002  * ptr table, or something in the interpreter structure
12003  */
12004
12005 void *
12006 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12007 {
12008     void *ret;
12009
12010     PERL_ARGS_ASSERT_ANY_DUP;
12011
12012     if (!v)
12013         return (void*)NULL;
12014
12015     /* look for it in the table first */
12016     ret = ptr_table_fetch(PL_ptr_table, v);
12017     if (ret)
12018         return ret;
12019
12020     /* see if it is part of the interpreter structure */
12021     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12022         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12023     else {
12024         ret = v;
12025     }
12026
12027     return ret;
12028 }
12029
12030 /* duplicate the save stack */
12031
12032 ANY *
12033 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12034 {
12035     dVAR;
12036     ANY * const ss      = proto_perl->Isavestack;
12037     const I32 max       = proto_perl->Isavestack_max;
12038     I32 ix              = proto_perl->Isavestack_ix;
12039     ANY *nss;
12040     const SV *sv;
12041     const GV *gv;
12042     const AV *av;
12043     const HV *hv;
12044     void* ptr;
12045     int intval;
12046     long longval;
12047     GP *gp;
12048     IV iv;
12049     I32 i;
12050     char *c = NULL;
12051     void (*dptr) (void*);
12052     void (*dxptr) (pTHX_ void*);
12053
12054     PERL_ARGS_ASSERT_SS_DUP;
12055
12056     Newxz(nss, max, ANY);
12057
12058     while (ix > 0) {
12059         const UV uv = POPUV(ss,ix);
12060         const U8 type = (U8)uv & SAVE_MASK;
12061
12062         TOPUV(nss,ix) = uv;
12063         switch (type) {
12064         case SAVEt_CLEARSV:
12065             break;
12066         case SAVEt_HELEM:               /* hash element */
12067             sv = (const SV *)POPPTR(ss,ix);
12068             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12069             /* fall through */
12070         case SAVEt_ITEM:                        /* normal string */
12071         case SAVEt_GVSV:                        /* scalar slot in GV */
12072         case SAVEt_SV:                          /* scalar reference */
12073             sv = (const SV *)POPPTR(ss,ix);
12074             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12075             /* fall through */
12076         case SAVEt_FREESV:
12077         case SAVEt_MORTALIZESV:
12078             sv = (const SV *)POPPTR(ss,ix);
12079             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12080             break;
12081         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12082             c = (char*)POPPTR(ss,ix);
12083             TOPPTR(nss,ix) = savesharedpv(c);
12084             ptr = POPPTR(ss,ix);
12085             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12086             break;
12087         case SAVEt_GENERIC_SVREF:               /* generic sv */
12088         case SAVEt_SVREF:                       /* scalar reference */
12089             sv = (const SV *)POPPTR(ss,ix);
12090             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12091             ptr = POPPTR(ss,ix);
12092             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12093             break;
12094         case SAVEt_HV:                          /* hash reference */
12095         case SAVEt_AV:                          /* array reference */
12096             sv = (const SV *) POPPTR(ss,ix);
12097             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12098             /* fall through */
12099         case SAVEt_COMPPAD:
12100         case SAVEt_NSTAB:
12101             sv = (const SV *) POPPTR(ss,ix);
12102             TOPPTR(nss,ix) = sv_dup(sv, param);
12103             break;
12104         case SAVEt_INT:                         /* int reference */
12105             ptr = POPPTR(ss,ix);
12106             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12107             intval = (int)POPINT(ss,ix);
12108             TOPINT(nss,ix) = intval;
12109             break;
12110         case SAVEt_LONG:                        /* long reference */
12111             ptr = POPPTR(ss,ix);
12112             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12113             longval = (long)POPLONG(ss,ix);
12114             TOPLONG(nss,ix) = longval;
12115             break;
12116         case SAVEt_I32:                         /* I32 reference */
12117         case SAVEt_COP_ARYBASE:                 /* call CopARYBASE_set */
12118             ptr = POPPTR(ss,ix);
12119             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12120             i = POPINT(ss,ix);
12121             TOPINT(nss,ix) = i;
12122             break;
12123         case SAVEt_IV:                          /* IV reference */
12124             ptr = POPPTR(ss,ix);
12125             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12126             iv = POPIV(ss,ix);
12127             TOPIV(nss,ix) = iv;
12128             break;
12129         case SAVEt_HPTR:                        /* HV* reference */
12130         case SAVEt_APTR:                        /* AV* reference */
12131         case SAVEt_SPTR:                        /* SV* reference */
12132             ptr = POPPTR(ss,ix);
12133             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12134             sv = (const SV *)POPPTR(ss,ix);
12135             TOPPTR(nss,ix) = sv_dup(sv, param);
12136             break;
12137         case SAVEt_VPTR:                        /* random* reference */
12138             ptr = POPPTR(ss,ix);
12139             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12140             /* Fall through */
12141         case SAVEt_INT_SMALL:
12142         case SAVEt_I32_SMALL:
12143         case SAVEt_I16:                         /* I16 reference */
12144         case SAVEt_I8:                          /* I8 reference */
12145         case SAVEt_BOOL:
12146             ptr = POPPTR(ss,ix);
12147             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12148             break;
12149         case SAVEt_GENERIC_PVREF:               /* generic char* */
12150         case SAVEt_PPTR:                        /* char* reference */
12151             ptr = POPPTR(ss,ix);
12152             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12153             c = (char*)POPPTR(ss,ix);
12154             TOPPTR(nss,ix) = pv_dup(c);
12155             break;
12156         case SAVEt_GP:                          /* scalar reference */
12157             gv = (const GV *)POPPTR(ss,ix);
12158             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12159             gp = (GP*)POPPTR(ss,ix);
12160             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12161             (void)GpREFCNT_inc(gp);
12162             i = POPINT(ss,ix);
12163             TOPINT(nss,ix) = i;
12164             break;
12165         case SAVEt_FREEOP:
12166             ptr = POPPTR(ss,ix);
12167             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12168                 /* these are assumed to be refcounted properly */
12169                 OP *o;
12170                 switch (((OP*)ptr)->op_type) {
12171                 case OP_LEAVESUB:
12172                 case OP_LEAVESUBLV:
12173                 case OP_LEAVEEVAL:
12174                 case OP_LEAVE:
12175                 case OP_SCOPE:
12176                 case OP_LEAVEWRITE:
12177                     TOPPTR(nss,ix) = ptr;
12178                     o = (OP*)ptr;
12179                     OP_REFCNT_LOCK;
12180                     (void) OpREFCNT_inc(o);
12181                     OP_REFCNT_UNLOCK;
12182                     break;
12183                 default:
12184                     TOPPTR(nss,ix) = NULL;
12185                     break;
12186                 }
12187             }
12188             else
12189                 TOPPTR(nss,ix) = NULL;
12190             break;
12191         case SAVEt_DELETE:
12192             hv = (const HV *)POPPTR(ss,ix);
12193             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12194             i = POPINT(ss,ix);
12195             TOPINT(nss,ix) = i;
12196             /* Fall through */
12197         case SAVEt_FREEPV:
12198             c = (char*)POPPTR(ss,ix);
12199             TOPPTR(nss,ix) = pv_dup_inc(c);
12200             break;
12201         case SAVEt_STACK_POS:           /* Position on Perl stack */
12202             i = POPINT(ss,ix);
12203             TOPINT(nss,ix) = i;
12204             break;
12205         case SAVEt_DESTRUCTOR:
12206             ptr = POPPTR(ss,ix);
12207             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12208             dptr = POPDPTR(ss,ix);
12209             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12210                                         any_dup(FPTR2DPTR(void *, dptr),
12211                                                 proto_perl));
12212             break;
12213         case SAVEt_DESTRUCTOR_X:
12214             ptr = POPPTR(ss,ix);
12215             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12216             dxptr = POPDXPTR(ss,ix);
12217             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12218                                          any_dup(FPTR2DPTR(void *, dxptr),
12219                                                  proto_perl));
12220             break;
12221         case SAVEt_REGCONTEXT:
12222         case SAVEt_ALLOC:
12223             ix -= uv >> SAVE_TIGHT_SHIFT;
12224             break;
12225         case SAVEt_AELEM:               /* array element */
12226             sv = (const SV *)POPPTR(ss,ix);
12227             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12228             i = POPINT(ss,ix);
12229             TOPINT(nss,ix) = i;
12230             av = (const AV *)POPPTR(ss,ix);
12231             TOPPTR(nss,ix) = av_dup_inc(av, param);
12232             break;
12233         case SAVEt_OP:
12234             ptr = POPPTR(ss,ix);
12235             TOPPTR(nss,ix) = ptr;
12236             break;
12237         case SAVEt_HINTS:
12238             ptr = POPPTR(ss,ix);
12239             if (ptr) {
12240                 HINTS_REFCNT_LOCK;
12241                 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
12242                 HINTS_REFCNT_UNLOCK;
12243             }
12244             TOPPTR(nss,ix) = ptr;
12245             i = POPINT(ss,ix);
12246             TOPINT(nss,ix) = i;
12247             if (i & HINT_LOCALIZE_HH) {
12248                 hv = (const HV *)POPPTR(ss,ix);
12249                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12250             }
12251             break;
12252         case SAVEt_PADSV_AND_MORTALIZE:
12253             longval = (long)POPLONG(ss,ix);
12254             TOPLONG(nss,ix) = longval;
12255             ptr = POPPTR(ss,ix);
12256             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12257             sv = (const SV *)POPPTR(ss,ix);
12258             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12259             break;
12260         case SAVEt_SET_SVFLAGS:
12261             i = POPINT(ss,ix);
12262             TOPINT(nss,ix) = i;
12263             i = POPINT(ss,ix);
12264             TOPINT(nss,ix) = i;
12265             sv = (const SV *)POPPTR(ss,ix);
12266             TOPPTR(nss,ix) = sv_dup(sv, param);
12267             break;
12268         case SAVEt_RE_STATE:
12269             {
12270                 const struct re_save_state *const old_state
12271                     = (struct re_save_state *)
12272                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12273                 struct re_save_state *const new_state
12274                     = (struct re_save_state *)
12275                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12276
12277                 Copy(old_state, new_state, 1, struct re_save_state);
12278                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12279
12280                 new_state->re_state_bostr
12281                     = pv_dup(old_state->re_state_bostr);
12282                 new_state->re_state_reginput
12283                     = pv_dup(old_state->re_state_reginput);
12284                 new_state->re_state_regeol
12285                     = pv_dup(old_state->re_state_regeol);
12286                 new_state->re_state_regoffs
12287                     = (regexp_paren_pair*)
12288                         any_dup(old_state->re_state_regoffs, proto_perl);
12289                 new_state->re_state_reglastparen
12290                     = (U32*) any_dup(old_state->re_state_reglastparen, 
12291                               proto_perl);
12292                 new_state->re_state_reglastcloseparen
12293                     = (U32*)any_dup(old_state->re_state_reglastcloseparen,
12294                               proto_perl);
12295                 /* XXX This just has to be broken. The old save_re_context
12296                    code did SAVEGENERICPV(PL_reg_start_tmp);
12297                    PL_reg_start_tmp is char **.
12298                    Look above to what the dup code does for
12299                    SAVEt_GENERIC_PVREF
12300                    It can never have worked.
12301                    So this is merely a faithful copy of the exiting bug:  */
12302                 new_state->re_state_reg_start_tmp
12303                     = (char **) pv_dup((char *)
12304                                       old_state->re_state_reg_start_tmp);
12305                 /* I assume that it only ever "worked" because no-one called
12306                    (pseudo)fork while the regexp engine had re-entered itself.
12307                 */
12308 #ifdef PERL_OLD_COPY_ON_WRITE
12309                 new_state->re_state_nrs
12310                     = sv_dup(old_state->re_state_nrs, param);
12311 #endif
12312                 new_state->re_state_reg_magic
12313                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12314                                proto_perl);
12315                 new_state->re_state_reg_oldcurpm
12316                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12317                               proto_perl);
12318                 new_state->re_state_reg_curpm
12319                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12320                                proto_perl);
12321                 new_state->re_state_reg_oldsaved
12322                     = pv_dup(old_state->re_state_reg_oldsaved);
12323                 new_state->re_state_reg_poscache
12324                     = pv_dup(old_state->re_state_reg_poscache);
12325                 new_state->re_state_reg_starttry
12326                     = pv_dup(old_state->re_state_reg_starttry);
12327                 break;
12328             }
12329         case SAVEt_COMPILE_WARNINGS:
12330             ptr = POPPTR(ss,ix);
12331             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12332             break;
12333         case SAVEt_PARSER:
12334             ptr = POPPTR(ss,ix);
12335             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12336             break;
12337         default:
12338             Perl_croak(aTHX_
12339                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12340         }
12341     }
12342
12343     return nss;
12344 }
12345
12346
12347 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12348  * flag to the result. This is done for each stash before cloning starts,
12349  * so we know which stashes want their objects cloned */
12350
12351 static void
12352 do_mark_cloneable_stash(pTHX_ SV *const sv)
12353 {
12354     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12355     if (hvname) {
12356         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12357         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12358         if (cloner && GvCV(cloner)) {
12359             dSP;
12360             UV status;
12361
12362             ENTER;
12363             SAVETMPS;
12364             PUSHMARK(SP);
12365             mXPUSHs(newSVhek(hvname));
12366             PUTBACK;
12367             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12368             SPAGAIN;
12369             status = POPu;
12370             PUTBACK;
12371             FREETMPS;
12372             LEAVE;
12373             if (status)
12374                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12375         }
12376     }
12377 }
12378
12379
12380
12381 /*
12382 =for apidoc perl_clone
12383
12384 Create and return a new interpreter by cloning the current one.
12385
12386 perl_clone takes these flags as parameters:
12387
12388 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12389 without it we only clone the data and zero the stacks,
12390 with it we copy the stacks and the new perl interpreter is
12391 ready to run at the exact same point as the previous one.
12392 The pseudo-fork code uses COPY_STACKS while the
12393 threads->create doesn't.
12394
12395 CLONEf_KEEP_PTR_TABLE
12396 perl_clone keeps a ptr_table with the pointer of the old
12397 variable as a key and the new variable as a value,
12398 this allows it to check if something has been cloned and not
12399 clone it again but rather just use the value and increase the
12400 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
12401 the ptr_table using the function
12402 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12403 reason to keep it around is if you want to dup some of your own
12404 variable who are outside the graph perl scans, example of this
12405 code is in threads.xs create
12406
12407 CLONEf_CLONE_HOST
12408 This is a win32 thing, it is ignored on unix, it tells perls
12409 win32host code (which is c++) to clone itself, this is needed on
12410 win32 if you want to run two threads at the same time,
12411 if you just want to do some stuff in a separate perl interpreter
12412 and then throw it away and return to the original one,
12413 you don't need to do anything.
12414
12415 =cut
12416 */
12417
12418 /* XXX the above needs expanding by someone who actually understands it ! */
12419 EXTERN_C PerlInterpreter *
12420 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12421
12422 PerlInterpreter *
12423 perl_clone(PerlInterpreter *proto_perl, UV flags)
12424 {
12425    dVAR;
12426 #ifdef PERL_IMPLICIT_SYS
12427
12428     PERL_ARGS_ASSERT_PERL_CLONE;
12429
12430    /* perlhost.h so we need to call into it
12431    to clone the host, CPerlHost should have a c interface, sky */
12432
12433    if (flags & CLONEf_CLONE_HOST) {
12434        return perl_clone_host(proto_perl,flags);
12435    }
12436    return perl_clone_using(proto_perl, flags,
12437                             proto_perl->IMem,
12438                             proto_perl->IMemShared,
12439                             proto_perl->IMemParse,
12440                             proto_perl->IEnv,
12441                             proto_perl->IStdIO,
12442                             proto_perl->ILIO,
12443                             proto_perl->IDir,
12444                             proto_perl->ISock,
12445                             proto_perl->IProc);
12446 }
12447
12448 PerlInterpreter *
12449 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12450                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12451                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12452                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12453                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12454                  struct IPerlProc* ipP)
12455 {
12456     /* XXX many of the string copies here can be optimized if they're
12457      * constants; they need to be allocated as common memory and just
12458      * their pointers copied. */
12459
12460     IV i;
12461     CLONE_PARAMS clone_params;
12462     CLONE_PARAMS* const param = &clone_params;
12463
12464     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12465
12466     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12467 #else           /* !PERL_IMPLICIT_SYS */
12468     IV i;
12469     CLONE_PARAMS clone_params;
12470     CLONE_PARAMS* param = &clone_params;
12471     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12472
12473     PERL_ARGS_ASSERT_PERL_CLONE;
12474 #endif          /* PERL_IMPLICIT_SYS */
12475
12476     /* for each stash, determine whether its objects should be cloned */
12477     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12478     PERL_SET_THX(my_perl);
12479
12480 #ifdef DEBUGGING
12481     PoisonNew(my_perl, 1, PerlInterpreter);
12482     PL_op = NULL;
12483     PL_curcop = NULL;
12484     PL_markstack = 0;
12485     PL_scopestack = 0;
12486     PL_scopestack_name = 0;
12487     PL_savestack = 0;
12488     PL_savestack_ix = 0;
12489     PL_savestack_max = -1;
12490     PL_sig_pending = 0;
12491     PL_parser = NULL;
12492     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12493 #  ifdef DEBUG_LEAKING_SCALARS
12494     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12495 #  endif
12496 #else   /* !DEBUGGING */
12497     Zero(my_perl, 1, PerlInterpreter);
12498 #endif  /* DEBUGGING */
12499
12500 #ifdef PERL_IMPLICIT_SYS
12501     /* host pointers */
12502     PL_Mem              = ipM;
12503     PL_MemShared        = ipMS;
12504     PL_MemParse         = ipMP;
12505     PL_Env              = ipE;
12506     PL_StdIO            = ipStd;
12507     PL_LIO              = ipLIO;
12508     PL_Dir              = ipD;
12509     PL_Sock             = ipS;
12510     PL_Proc             = ipP;
12511 #endif          /* PERL_IMPLICIT_SYS */
12512
12513     param->flags = flags;
12514     /* Nothing in the core code uses this, but we make it available to
12515        extensions (using mg_dup).  */
12516     param->proto_perl = proto_perl;
12517     /* Likely nothing will use this, but it is initialised to be consistent
12518        with Perl_clone_params_new().  */
12519     param->proto_perl = my_perl;
12520     param->unreferenced = NULL;
12521
12522     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12523
12524     PL_body_arenas = NULL;
12525     Zero(&PL_body_roots, 1, PL_body_roots);
12526     
12527     PL_sv_count         = 0;
12528     PL_sv_objcount      = 0;
12529     PL_sv_root          = NULL;
12530     PL_sv_arenaroot     = NULL;
12531
12532     PL_debug            = proto_perl->Idebug;
12533
12534     PL_hash_seed        = proto_perl->Ihash_seed;
12535     PL_rehash_seed      = proto_perl->Irehash_seed;
12536
12537 #ifdef USE_REENTRANT_API
12538     /* XXX: things like -Dm will segfault here in perlio, but doing
12539      *  PERL_SET_CONTEXT(proto_perl);
12540      * breaks too many other things
12541      */
12542     Perl_reentrant_init(aTHX);
12543 #endif
12544
12545     /* create SV map for pointer relocation */
12546     PL_ptr_table = ptr_table_new();
12547
12548     /* initialize these special pointers as early as possible */
12549     SvANY(&PL_sv_undef)         = NULL;
12550     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
12551     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
12552     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
12553
12554     SvANY(&PL_sv_no)            = new_XPVNV();
12555     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
12556     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12557                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12558     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
12559     SvCUR_set(&PL_sv_no, 0);
12560     SvLEN_set(&PL_sv_no, 1);
12561     SvIV_set(&PL_sv_no, 0);
12562     SvNV_set(&PL_sv_no, 0);
12563     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
12564
12565     SvANY(&PL_sv_yes)           = new_XPVNV();
12566     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
12567     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12568                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12569     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
12570     SvCUR_set(&PL_sv_yes, 1);
12571     SvLEN_set(&PL_sv_yes, 2);
12572     SvIV_set(&PL_sv_yes, 1);
12573     SvNV_set(&PL_sv_yes, 1);
12574     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
12575
12576     /* dbargs array probably holds garbage */
12577     PL_dbargs           = NULL;
12578
12579     /* create (a non-shared!) shared string table */
12580     PL_strtab           = newHV();
12581     HvSHAREKEYS_off(PL_strtab);
12582     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
12583     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
12584
12585     PL_compiling = proto_perl->Icompiling;
12586
12587     /* These two PVs will be free'd special way so must set them same way op.c does */
12588     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
12589     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
12590
12591     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
12592     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
12593
12594     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
12595     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
12596     if (PL_compiling.cop_hints_hash) {
12597         HINTS_REFCNT_LOCK;
12598         PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
12599         HINTS_REFCNT_UNLOCK;
12600     }
12601     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
12602 #ifdef PERL_DEBUG_READONLY_OPS
12603     PL_slabs = NULL;
12604     PL_slab_count = 0;
12605 #endif
12606
12607     /* pseudo environmental stuff */
12608     PL_origargc         = proto_perl->Iorigargc;
12609     PL_origargv         = proto_perl->Iorigargv;
12610
12611     param->stashes      = newAV();  /* Setup array of objects to call clone on */
12612     /* This makes no difference to the implementation, as it always pushes
12613        and shifts pointers to other SVs without changing their reference
12614        count, with the array becoming empty before it is freed. However, it
12615        makes it conceptually clear what is going on, and will avoid some
12616        work inside av.c, filling slots between AvFILL() and AvMAX() with
12617        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
12618     AvREAL_off(param->stashes);
12619
12620     if (!(flags & CLONEf_COPY_STACKS)) {
12621         param->unreferenced = newAV();
12622     }
12623
12624     /* Set tainting stuff before PerlIO_debug can possibly get called */
12625     PL_tainting         = proto_perl->Itainting;
12626     PL_taint_warn       = proto_perl->Itaint_warn;
12627
12628 #ifdef PERLIO_LAYERS
12629     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
12630     PerlIO_clone(aTHX_ proto_perl, param);
12631 #endif
12632
12633     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
12634     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
12635     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
12636     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
12637     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
12638     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
12639
12640     /* switches */
12641     PL_minus_c          = proto_perl->Iminus_c;
12642     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
12643     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
12644     PL_localpatches     = proto_perl->Ilocalpatches;
12645     PL_splitstr         = proto_perl->Isplitstr;
12646     PL_minus_n          = proto_perl->Iminus_n;
12647     PL_minus_p          = proto_perl->Iminus_p;
12648     PL_minus_l          = proto_perl->Iminus_l;
12649     PL_minus_a          = proto_perl->Iminus_a;
12650     PL_minus_E          = proto_perl->Iminus_E;
12651     PL_minus_F          = proto_perl->Iminus_F;
12652     PL_doswitches       = proto_perl->Idoswitches;
12653     PL_dowarn           = proto_perl->Idowarn;
12654     PL_doextract        = proto_perl->Idoextract;
12655     PL_sawampersand     = proto_perl->Isawampersand;
12656     PL_unsafe           = proto_perl->Iunsafe;
12657     PL_inplace          = SAVEPV(proto_perl->Iinplace);
12658     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
12659     PL_perldb           = proto_perl->Iperldb;
12660     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12661     PL_exit_flags       = proto_perl->Iexit_flags;
12662
12663     /* magical thingies */
12664     /* XXX time(&PL_basetime) when asked for? */
12665     PL_basetime         = proto_perl->Ibasetime;
12666     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
12667
12668     PL_maxsysfd         = proto_perl->Imaxsysfd;
12669     PL_statusvalue      = proto_perl->Istatusvalue;
12670 #ifdef VMS
12671     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
12672 #else
12673     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12674 #endif
12675     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
12676
12677     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
12678     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
12679     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
12680
12681    
12682     /* RE engine related */
12683     Zero(&PL_reg_state, 1, struct re_save_state);
12684     PL_reginterp_cnt    = 0;
12685     PL_regmatch_slab    = NULL;
12686     
12687     /* Clone the regex array */
12688     /* ORANGE FIXME for plugins, probably in the SV dup code.
12689        newSViv(PTR2IV(CALLREGDUPE(
12690        INT2PTR(REGEXP *, SvIVX(regex)), param))))
12691     */
12692     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
12693     PL_regex_pad = AvARRAY(PL_regex_padav);
12694
12695     /* shortcuts to various I/O objects */
12696     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
12697     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
12698     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
12699     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
12700     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
12701     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
12702     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
12703
12704     /* shortcuts to regexp stuff */
12705     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
12706
12707     /* shortcuts to misc objects */
12708     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
12709
12710     /* shortcuts to debugging objects */
12711     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
12712     PL_DBline           = gv_dup(proto_perl->IDBline, param);
12713     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
12714     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
12715     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
12716     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
12717
12718     /* symbol tables */
12719     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
12720     PL_curstash         = hv_dup(proto_perl->Icurstash, param);
12721     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
12722     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
12723     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
12724
12725     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
12726     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
12727     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
12728     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
12729     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
12730     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
12731     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
12732     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
12733
12734     PL_sub_generation   = proto_perl->Isub_generation;
12735     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
12736
12737     /* funky return mechanisms */
12738     PL_forkprocess      = proto_perl->Iforkprocess;
12739
12740     /* subprocess state */
12741     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
12742
12743     /* internal state */
12744     PL_maxo             = proto_perl->Imaxo;
12745     if (proto_perl->Iop_mask)
12746         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
12747     else
12748         PL_op_mask      = NULL;
12749     /* PL_asserting        = proto_perl->Iasserting; */
12750
12751     /* current interpreter roots */
12752     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
12753     OP_REFCNT_LOCK;
12754     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
12755     OP_REFCNT_UNLOCK;
12756     PL_main_start       = proto_perl->Imain_start;
12757     PL_eval_root        = proto_perl->Ieval_root;
12758     PL_eval_start       = proto_perl->Ieval_start;
12759
12760     /* runtime control stuff */
12761     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
12762
12763     PL_filemode         = proto_perl->Ifilemode;
12764     PL_lastfd           = proto_perl->Ilastfd;
12765     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
12766     PL_Argv             = NULL;
12767     PL_Cmd              = NULL;
12768     PL_gensym           = proto_perl->Igensym;
12769     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
12770     PL_laststatval      = proto_perl->Ilaststatval;
12771     PL_laststype        = proto_perl->Ilaststype;
12772     PL_mess_sv          = NULL;
12773
12774     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
12775
12776     /* interpreter atexit processing */
12777     PL_exitlistlen      = proto_perl->Iexitlistlen;
12778     if (PL_exitlistlen) {
12779         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12780         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12781     }
12782     else
12783         PL_exitlist     = (PerlExitListEntry*)NULL;
12784
12785     PL_my_cxt_size = proto_perl->Imy_cxt_size;
12786     if (PL_my_cxt_size) {
12787         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
12788         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
12789 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
12790         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
12791         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
12792 #endif
12793     }
12794     else {
12795         PL_my_cxt_list  = (void**)NULL;
12796 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
12797         PL_my_cxt_keys  = (const char**)NULL;
12798 #endif
12799     }
12800     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
12801     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
12802     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
12803
12804     PL_profiledata      = NULL;
12805
12806     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
12807
12808     PAD_CLONE_VARS(proto_perl, param);
12809
12810 #ifdef HAVE_INTERP_INTERN
12811     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
12812 #endif
12813
12814     /* more statics moved here */
12815     PL_generation       = proto_perl->Igeneration;
12816     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
12817
12818     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
12819     PL_in_clean_all     = proto_perl->Iin_clean_all;
12820
12821     PL_uid              = proto_perl->Iuid;
12822     PL_euid             = proto_perl->Ieuid;
12823     PL_gid              = proto_perl->Igid;
12824     PL_egid             = proto_perl->Iegid;
12825     PL_nomemok          = proto_perl->Inomemok;
12826     PL_an               = proto_perl->Ian;
12827     PL_evalseq          = proto_perl->Ievalseq;
12828     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
12829     PL_origalen         = proto_perl->Iorigalen;
12830 #ifdef PERL_USES_PL_PIDSTATUS
12831     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
12832 #endif
12833     PL_osname           = SAVEPV(proto_perl->Iosname);
12834     PL_sighandlerp      = proto_perl->Isighandlerp;
12835
12836     PL_runops           = proto_perl->Irunops;
12837
12838     PL_parser           = parser_dup(proto_perl->Iparser, param);
12839
12840     /* XXX this only works if the saved cop has already been cloned */
12841     if (proto_perl->Iparser) {
12842         PL_parser->saved_curcop = (COP*)any_dup(
12843                                     proto_perl->Iparser->saved_curcop,
12844                                     proto_perl);
12845     }
12846
12847     PL_subline          = proto_perl->Isubline;
12848     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
12849
12850 #ifdef FCRYPT
12851     PL_cryptseen        = proto_perl->Icryptseen;
12852 #endif
12853
12854     PL_hints            = proto_perl->Ihints;
12855
12856     PL_amagic_generation        = proto_perl->Iamagic_generation;
12857
12858 #ifdef USE_LOCALE_COLLATE
12859     PL_collation_ix     = proto_perl->Icollation_ix;
12860     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
12861     PL_collation_standard       = proto_perl->Icollation_standard;
12862     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
12863     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
12864 #endif /* USE_LOCALE_COLLATE */
12865
12866 #ifdef USE_LOCALE_NUMERIC
12867     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
12868     PL_numeric_standard = proto_perl->Inumeric_standard;
12869     PL_numeric_local    = proto_perl->Inumeric_local;
12870     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
12871 #endif /* !USE_LOCALE_NUMERIC */
12872
12873     /* utf8 character classes */
12874     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
12875     PL_utf8_ascii       = sv_dup_inc(proto_perl->Iutf8_ascii, param);
12876     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
12877     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
12878     PL_utf8_cntrl       = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
12879     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
12880     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
12881     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
12882     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
12883     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
12884     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
12885     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
12886     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
12887     PL_utf8_X_begin     = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
12888     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
12889     PL_utf8_X_prepend   = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
12890     PL_utf8_X_non_hangul        = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
12891     PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
12892     PL_utf8_X_LV        = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
12893     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
12894     PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
12895     PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
12896     PL_utf8_X_LV_LVT_V  = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
12897     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
12898     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
12899     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
12900     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
12901     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
12902     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
12903
12904     /* Did the locale setup indicate UTF-8? */
12905     PL_utf8locale       = proto_perl->Iutf8locale;
12906     /* Unicode features (see perlrun/-C) */
12907     PL_unicode          = proto_perl->Iunicode;
12908
12909     /* Pre-5.8 signals control */
12910     PL_signals          = proto_perl->Isignals;
12911
12912     /* times() ticks per second */
12913     PL_clocktick        = proto_perl->Iclocktick;
12914
12915     /* Recursion stopper for PerlIO_find_layer */
12916     PL_in_load_module   = proto_perl->Iin_load_module;
12917
12918     /* sort() routine */
12919     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
12920
12921     /* Not really needed/useful since the reenrant_retint is "volatile",
12922      * but do it for consistency's sake. */
12923     PL_reentrant_retint = proto_perl->Ireentrant_retint;
12924
12925     /* Hooks to shared SVs and locks. */
12926     PL_sharehook        = proto_perl->Isharehook;
12927     PL_lockhook         = proto_perl->Ilockhook;
12928     PL_unlockhook       = proto_perl->Iunlockhook;
12929     PL_threadhook       = proto_perl->Ithreadhook;
12930     PL_destroyhook      = proto_perl->Idestroyhook;
12931     PL_signalhook       = proto_perl->Isignalhook;
12932
12933 #ifdef THREADS_HAVE_PIDS
12934     PL_ppid             = proto_perl->Ippid;
12935 #endif
12936
12937     /* swatch cache */
12938     PL_last_swash_hv    = NULL; /* reinits on demand */
12939     PL_last_swash_klen  = 0;
12940     PL_last_swash_key[0]= '\0';
12941     PL_last_swash_tmps  = (U8*)NULL;
12942     PL_last_swash_slen  = 0;
12943
12944     PL_glob_index       = proto_perl->Iglob_index;
12945     PL_srand_called     = proto_perl->Isrand_called;
12946
12947     if (proto_perl->Ipsig_pend) {
12948         Newxz(PL_psig_pend, SIG_SIZE, int);
12949     }
12950     else {
12951         PL_psig_pend    = (int*)NULL;
12952     }
12953
12954     if (proto_perl->Ipsig_name) {
12955         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
12956         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
12957                             param);
12958         PL_psig_ptr = PL_psig_name + SIG_SIZE;
12959     }
12960     else {
12961         PL_psig_ptr     = (SV**)NULL;
12962         PL_psig_name    = (SV**)NULL;
12963     }
12964
12965     /* intrpvar.h stuff */
12966
12967     if (flags & CLONEf_COPY_STACKS) {
12968         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
12969         PL_tmps_ix              = proto_perl->Itmps_ix;
12970         PL_tmps_max             = proto_perl->Itmps_max;
12971         PL_tmps_floor           = proto_perl->Itmps_floor;
12972         Newx(PL_tmps_stack, PL_tmps_max, SV*);
12973         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
12974                             PL_tmps_ix+1, param);
12975
12976         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
12977         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
12978         Newxz(PL_markstack, i, I32);
12979         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
12980                                                   - proto_perl->Imarkstack);
12981         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
12982                                                   - proto_perl->Imarkstack);
12983         Copy(proto_perl->Imarkstack, PL_markstack,
12984              PL_markstack_ptr - PL_markstack + 1, I32);
12985
12986         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
12987          * NOTE: unlike the others! */
12988         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
12989         PL_scopestack_max       = proto_perl->Iscopestack_max;
12990         Newxz(PL_scopestack, PL_scopestack_max, I32);
12991         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
12992
12993 #ifdef DEBUGGING
12994         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
12995         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
12996 #endif
12997         /* NOTE: si_dup() looks at PL_markstack */
12998         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
12999
13000         /* PL_curstack          = PL_curstackinfo->si_stack; */
13001         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13002         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13003
13004         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13005         PL_stack_base           = AvARRAY(PL_curstack);
13006         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13007                                                    - proto_perl->Istack_base);
13008         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13009
13010         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13011          * NOTE: unlike the others! */
13012         PL_savestack_ix         = proto_perl->Isavestack_ix;
13013         PL_savestack_max        = proto_perl->Isavestack_max;
13014         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13015         PL_savestack            = ss_dup(proto_perl, param);
13016     }
13017     else {
13018         init_stacks();
13019         ENTER;                  /* perl_destruct() wants to LEAVE; */
13020     }
13021
13022     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13023     PL_top_env          = &PL_start_env;
13024
13025     PL_op               = proto_perl->Iop;
13026
13027     PL_Sv               = NULL;
13028     PL_Xpv              = (XPV*)NULL;
13029     my_perl->Ina        = proto_perl->Ina;
13030
13031     PL_statbuf          = proto_perl->Istatbuf;
13032     PL_statcache        = proto_perl->Istatcache;
13033     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13034     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13035 #ifdef HAS_TIMES
13036     PL_timesbuf         = proto_perl->Itimesbuf;
13037 #endif
13038
13039     PL_tainted          = proto_perl->Itainted;
13040     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13041     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13042     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13043     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13044     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13045     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13046     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13047     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13048
13049     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13050     PL_restartop        = proto_perl->Irestartop;
13051     PL_in_eval          = proto_perl->Iin_eval;
13052     PL_delaymagic       = proto_perl->Idelaymagic;
13053     PL_dirty            = proto_perl->Idirty;
13054     PL_localizing       = proto_perl->Ilocalizing;
13055
13056     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13057     PL_hv_fetch_ent_mh  = NULL;
13058     PL_modcount         = proto_perl->Imodcount;
13059     PL_lastgotoprobe    = NULL;
13060     PL_dumpindent       = proto_perl->Idumpindent;
13061
13062     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13063     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13064     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13065     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13066     PL_efloatbuf        = NULL;         /* reinits on demand */
13067     PL_efloatsize       = 0;                    /* reinits on demand */
13068
13069     /* regex stuff */
13070
13071     PL_screamfirst      = NULL;
13072     PL_screamnext       = NULL;
13073     PL_maxscream        = -1;                   /* reinits on demand */
13074     PL_lastscream       = NULL;
13075
13076
13077     PL_regdummy         = proto_perl->Iregdummy;
13078     PL_colorset         = 0;            /* reinits PL_colors[] */
13079     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13080
13081
13082
13083     /* Pluggable optimizer */
13084     PL_peepp            = proto_perl->Ipeepp;
13085     PL_rpeepp           = proto_perl->Irpeepp;
13086     /* op_free() hook */
13087     PL_opfreehook       = proto_perl->Iopfreehook;
13088
13089     PL_stashcache       = newHV();
13090
13091     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13092                                             proto_perl->Iwatchaddr);
13093     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13094     if (PL_debug && PL_watchaddr) {
13095         PerlIO_printf(Perl_debug_log,
13096           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13097           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13098           PTR2UV(PL_watchok));
13099     }
13100
13101     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13102     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13103
13104     /* Call the ->CLONE method, if it exists, for each of the stashes
13105        identified by sv_dup() above.
13106     */
13107     while(av_len(param->stashes) != -1) {
13108         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13109         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13110         if (cloner && GvCV(cloner)) {
13111             dSP;
13112             ENTER;
13113             SAVETMPS;
13114             PUSHMARK(SP);
13115             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13116             PUTBACK;
13117             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13118             FREETMPS;
13119             LEAVE;
13120         }
13121     }
13122
13123     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13124         ptr_table_free(PL_ptr_table);
13125         PL_ptr_table = NULL;
13126     }
13127
13128     if (!(flags & CLONEf_COPY_STACKS)) {
13129         unreferenced_to_tmp_stack(param->unreferenced);
13130     }
13131
13132     SvREFCNT_dec(param->stashes);
13133
13134     /* orphaned? eg threads->new inside BEGIN or use */
13135     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13136         SvREFCNT_inc_simple_void(PL_compcv);
13137         SAVEFREESV(PL_compcv);
13138     }
13139
13140     return my_perl;
13141 }
13142
13143 static void
13144 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13145 {
13146     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13147     
13148     if (AvFILLp(unreferenced) > -1) {
13149         SV **svp = AvARRAY(unreferenced);
13150         SV **const last = svp + AvFILLp(unreferenced);
13151         SSize_t count = 0;
13152
13153         do {
13154             if (SvREFCNT(*svp) == 1)
13155                 ++count;
13156         } while (++svp <= last);
13157
13158         EXTEND_MORTAL(count);
13159         svp = AvARRAY(unreferenced);
13160
13161         do {
13162             if (SvREFCNT(*svp) == 1) {
13163                 /* Our reference is the only one to this SV. This means that
13164                    in this thread, the scalar effectively has a 0 reference.
13165                    That doesn't work (cleanup never happens), so donate our
13166                    reference to it onto the save stack. */
13167                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13168             } else {
13169                 /* As an optimisation, because we are already walking the
13170                    entire array, instead of above doing either
13171                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13172                    release our reference to the scalar, so that at the end of
13173                    the array owns zero references to the scalars it happens to
13174                    point to. We are effectively converting the array from
13175                    AvREAL() on to AvREAL() off. This saves the av_clear()
13176                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13177                    walking the array a second time.  */
13178                 SvREFCNT_dec(*svp);
13179             }
13180
13181         } while (++svp <= last);
13182         AvREAL_off(unreferenced);
13183     }
13184     SvREFCNT_dec(unreferenced);
13185 }
13186
13187 void
13188 Perl_clone_params_del(CLONE_PARAMS *param)
13189 {
13190     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13191        happy: */
13192     PerlInterpreter *const to = param->new_perl;
13193     dTHXa(to);
13194     PerlInterpreter *const was = PERL_GET_THX;
13195
13196     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13197
13198     if (was != to) {
13199         PERL_SET_THX(to);
13200     }
13201
13202     SvREFCNT_dec(param->stashes);
13203     if (param->unreferenced)
13204         unreferenced_to_tmp_stack(param->unreferenced);
13205
13206     Safefree(param);
13207
13208     if (was != to) {
13209         PERL_SET_THX(was);
13210     }
13211 }
13212
13213 CLONE_PARAMS *
13214 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13215 {
13216     dVAR;
13217     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13218        does a dTHX; to get the context from thread local storage.
13219        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13220        a version that passes in my_perl.  */
13221     PerlInterpreter *const was = PERL_GET_THX;
13222     CLONE_PARAMS *param;
13223
13224     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13225
13226     if (was != to) {
13227         PERL_SET_THX(to);
13228     }
13229
13230     /* Given that we've set the context, we can do this unshared.  */
13231     Newx(param, 1, CLONE_PARAMS);
13232
13233     param->flags = 0;
13234     param->proto_perl = from;
13235     param->new_perl = to;
13236     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13237     AvREAL_off(param->stashes);
13238     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13239
13240     if (was != to) {
13241         PERL_SET_THX(was);
13242     }
13243     return param;
13244 }
13245
13246 #endif /* USE_ITHREADS */
13247
13248 /*
13249 =head1 Unicode Support
13250
13251 =for apidoc sv_recode_to_utf8
13252
13253 The encoding is assumed to be an Encode object, on entry the PV
13254 of the sv is assumed to be octets in that encoding, and the sv
13255 will be converted into Unicode (and UTF-8).
13256
13257 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13258 is not a reference, nothing is done to the sv.  If the encoding is not
13259 an C<Encode::XS> Encoding object, bad things will happen.
13260 (See F<lib/encoding.pm> and L<Encode>).
13261
13262 The PV of the sv is returned.
13263
13264 =cut */
13265
13266 char *
13267 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13268 {
13269     dVAR;
13270
13271     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13272
13273     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13274         SV *uni;
13275         STRLEN len;
13276         const char *s;
13277         dSP;
13278         ENTER;
13279         SAVETMPS;
13280         save_re_context();
13281         PUSHMARK(sp);
13282         EXTEND(SP, 3);
13283         XPUSHs(encoding);
13284         XPUSHs(sv);
13285 /*
13286   NI-S 2002/07/09
13287   Passing sv_yes is wrong - it needs to be or'ed set of constants
13288   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13289   remove converted chars from source.
13290
13291   Both will default the value - let them.
13292
13293         XPUSHs(&PL_sv_yes);
13294 */
13295         PUTBACK;
13296         call_method("decode", G_SCALAR);
13297         SPAGAIN;
13298         uni = POPs;
13299         PUTBACK;
13300         s = SvPV_const(uni, len);
13301         if (s != SvPVX_const(sv)) {
13302             SvGROW(sv, len + 1);
13303             Move(s, SvPVX(sv), len + 1, char);
13304             SvCUR_set(sv, len);
13305         }
13306         FREETMPS;
13307         LEAVE;
13308         SvUTF8_on(sv);
13309         return SvPVX(sv);
13310     }
13311     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13312 }
13313
13314 /*
13315 =for apidoc sv_cat_decode
13316
13317 The encoding is assumed to be an Encode object, the PV of the ssv is
13318 assumed to be octets in that encoding and decoding the input starts
13319 from the position which (PV + *offset) pointed to.  The dsv will be
13320 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13321 when the string tstr appears in decoding output or the input ends on
13322 the PV of the ssv. The value which the offset points will be modified
13323 to the last input position on the ssv.
13324
13325 Returns TRUE if the terminator was found, else returns FALSE.
13326
13327 =cut */
13328
13329 bool
13330 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13331                    SV *ssv, int *offset, char *tstr, int tlen)
13332 {
13333     dVAR;
13334     bool ret = FALSE;
13335
13336     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13337
13338     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13339         SV *offsv;
13340         dSP;
13341         ENTER;
13342         SAVETMPS;
13343         save_re_context();
13344         PUSHMARK(sp);
13345         EXTEND(SP, 6);
13346         XPUSHs(encoding);
13347         XPUSHs(dsv);
13348         XPUSHs(ssv);
13349         offsv = newSViv(*offset);
13350         mXPUSHs(offsv);
13351         mXPUSHp(tstr, tlen);
13352         PUTBACK;
13353         call_method("cat_decode", G_SCALAR);
13354         SPAGAIN;
13355         ret = SvTRUE(TOPs);
13356         *offset = SvIV(offsv);
13357         PUTBACK;
13358         FREETMPS;
13359         LEAVE;
13360     }
13361     else
13362         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13363     return ret;
13364
13365 }
13366
13367 /* ---------------------------------------------------------------------
13368  *
13369  * support functions for report_uninit()
13370  */
13371
13372 /* the maxiumum size of array or hash where we will scan looking
13373  * for the undefined element that triggered the warning */
13374
13375 #define FUV_MAX_SEARCH_SIZE 1000
13376
13377 /* Look for an entry in the hash whose value has the same SV as val;
13378  * If so, return a mortal copy of the key. */
13379
13380 STATIC SV*
13381 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13382 {
13383     dVAR;
13384     register HE **array;
13385     I32 i;
13386
13387     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13388
13389     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13390                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13391         return NULL;
13392
13393     array = HvARRAY(hv);
13394
13395     for (i=HvMAX(hv); i>0; i--) {
13396         register HE *entry;
13397         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13398             if (HeVAL(entry) != val)
13399                 continue;
13400             if (    HeVAL(entry) == &PL_sv_undef ||
13401                     HeVAL(entry) == &PL_sv_placeholder)
13402                 continue;
13403             if (!HeKEY(entry))
13404                 return NULL;
13405             if (HeKLEN(entry) == HEf_SVKEY)
13406                 return sv_mortalcopy(HeKEY_sv(entry));
13407             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13408         }
13409     }
13410     return NULL;
13411 }
13412
13413 /* Look for an entry in the array whose value has the same SV as val;
13414  * If so, return the index, otherwise return -1. */
13415
13416 STATIC I32
13417 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13418 {
13419     dVAR;
13420
13421     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13422
13423     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13424                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13425         return -1;
13426
13427     if (val != &PL_sv_undef) {
13428         SV ** const svp = AvARRAY(av);
13429         I32 i;
13430
13431         for (i=AvFILLp(av); i>=0; i--)
13432             if (svp[i] == val)
13433                 return i;
13434     }
13435     return -1;
13436 }
13437
13438 /* S_varname(): return the name of a variable, optionally with a subscript.
13439  * If gv is non-zero, use the name of that global, along with gvtype (one
13440  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13441  * targ.  Depending on the value of the subscript_type flag, return:
13442  */
13443
13444 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13445 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13446 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13447 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13448
13449 STATIC SV*
13450 S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13451         const SV *const keyname, I32 aindex, int subscript_type)
13452 {
13453
13454     SV * const name = sv_newmortal();
13455     if (gv) {
13456         char buffer[2];
13457         buffer[0] = gvtype;
13458         buffer[1] = 0;
13459
13460         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13461
13462         gv_fullname4(name, gv, buffer, 0);
13463
13464         if ((unsigned int)SvPVX(name)[1] <= 26) {
13465             buffer[0] = '^';
13466             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13467
13468             /* Swap the 1 unprintable control character for the 2 byte pretty
13469                version - ie substr($name, 1, 1) = $buffer; */
13470             sv_insert(name, 1, 1, buffer, 2);
13471         }
13472     }
13473     else {
13474         CV * const cv = find_runcv(NULL);
13475         SV *sv;
13476         AV *av;
13477
13478         if (!cv || !CvPADLIST(cv))
13479             return NULL;
13480         av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
13481         sv = *av_fetch(av, targ, FALSE);
13482         sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
13483     }
13484
13485     if (subscript_type == FUV_SUBSCRIPT_HASH) {
13486         SV * const sv = newSV(0);
13487         *SvPVX(name) = '$';
13488         Perl_sv_catpvf(aTHX_ name, "{%s}",
13489             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13490         SvREFCNT_dec(sv);
13491     }
13492     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13493         *SvPVX(name) = '$';
13494         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13495     }
13496     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13497         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13498         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
13499     }
13500
13501     return name;
13502 }
13503
13504
13505 /*
13506 =for apidoc find_uninit_var
13507
13508 Find the name of the undefined variable (if any) that caused the operator o
13509 to issue a "Use of uninitialized value" warning.
13510 If match is true, only return a name if it's value matches uninit_sv.
13511 So roughly speaking, if a unary operator (such as OP_COS) generates a
13512 warning, then following the direct child of the op may yield an
13513 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
13514 other hand, with OP_ADD there are two branches to follow, so we only print
13515 the variable name if we get an exact match.
13516
13517 The name is returned as a mortal SV.
13518
13519 Assumes that PL_op is the op that originally triggered the error, and that
13520 PL_comppad/PL_curpad points to the currently executing pad.
13521
13522 =cut
13523 */
13524
13525 STATIC SV *
13526 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13527                   bool match)
13528 {
13529     dVAR;
13530     SV *sv;
13531     const GV *gv;
13532     const OP *o, *o2, *kid;
13533
13534     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13535                             uninit_sv == &PL_sv_placeholder)))
13536         return NULL;
13537
13538     switch (obase->op_type) {
13539
13540     case OP_RV2AV:
13541     case OP_RV2HV:
13542     case OP_PADAV:
13543     case OP_PADHV:
13544       {
13545         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13546         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13547         I32 index = 0;
13548         SV *keysv = NULL;
13549         int subscript_type = FUV_SUBSCRIPT_WITHIN;
13550
13551         if (pad) { /* @lex, %lex */
13552             sv = PAD_SVl(obase->op_targ);
13553             gv = NULL;
13554         }
13555         else {
13556             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13557             /* @global, %global */
13558                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13559                 if (!gv)
13560                     break;
13561                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
13562             }
13563             else /* @{expr}, %{expr} */
13564                 return find_uninit_var(cUNOPx(obase)->op_first,
13565                                                     uninit_sv, match);
13566         }
13567
13568         /* attempt to find a match within the aggregate */
13569         if (hash) {
13570             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13571             if (keysv)
13572                 subscript_type = FUV_SUBSCRIPT_HASH;
13573         }
13574         else {
13575             index = find_array_subscript((const AV *)sv, uninit_sv);
13576             if (index >= 0)
13577                 subscript_type = FUV_SUBSCRIPT_ARRAY;
13578         }
13579
13580         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13581             break;
13582
13583         return varname(gv, hash ? '%' : '@', obase->op_targ,
13584                                     keysv, index, subscript_type);
13585       }
13586
13587     case OP_PADSV:
13588         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13589             break;
13590         return varname(NULL, '$', obase->op_targ,
13591                                     NULL, 0, FUV_SUBSCRIPT_NONE);
13592
13593     case OP_GVSV:
13594         gv = cGVOPx_gv(obase);
13595         if (!gv || (match && GvSV(gv) != uninit_sv))
13596             break;
13597         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13598
13599     case OP_AELEMFAST:
13600         if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
13601             if (match) {
13602                 SV **svp;
13603                 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
13604                 if (!av || SvRMAGICAL(av))
13605                     break;
13606                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13607                 if (!svp || *svp != uninit_sv)
13608                     break;
13609             }
13610             return varname(NULL, '$', obase->op_targ,
13611                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13612         }
13613         else {
13614             gv = cGVOPx_gv(obase);
13615             if (!gv)
13616                 break;
13617             if (match) {
13618                 SV **svp;
13619                 AV *const av = GvAV(gv);
13620                 if (!av || SvRMAGICAL(av))
13621                     break;
13622                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13623                 if (!svp || *svp != uninit_sv)
13624                     break;
13625             }
13626             return varname(gv, '$', 0,
13627                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13628         }
13629         break;
13630
13631     case OP_EXISTS:
13632         o = cUNOPx(obase)->op_first;
13633         if (!o || o->op_type != OP_NULL ||
13634                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
13635             break;
13636         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
13637
13638     case OP_AELEM:
13639     case OP_HELEM:
13640         if (PL_op == obase)
13641             /* $a[uninit_expr] or $h{uninit_expr} */
13642             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
13643
13644         gv = NULL;
13645         o = cBINOPx(obase)->op_first;
13646         kid = cBINOPx(obase)->op_last;
13647
13648         /* get the av or hv, and optionally the gv */
13649         sv = NULL;
13650         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
13651             sv = PAD_SV(o->op_targ);
13652         }
13653         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
13654                 && cUNOPo->op_first->op_type == OP_GV)
13655         {
13656             gv = cGVOPx_gv(cUNOPo->op_first);
13657             if (!gv)
13658                 break;
13659             sv = o->op_type
13660                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
13661         }
13662         if (!sv)
13663             break;
13664
13665         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
13666             /* index is constant */
13667             if (match) {
13668                 if (SvMAGICAL(sv))
13669                     break;
13670                 if (obase->op_type == OP_HELEM) {
13671                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), cSVOPx_sv(kid), 0, 0);
13672                     if (!he || HeVAL(he) != uninit_sv)
13673                         break;
13674                 }
13675                 else {
13676                     SV * const * const svp = av_fetch(MUTABLE_AV(sv), SvIV(cSVOPx_sv(kid)), FALSE);
13677                     if (!svp || *svp != uninit_sv)
13678                         break;
13679                 }
13680             }
13681             if (obase->op_type == OP_HELEM)
13682                 return varname(gv, '%', o->op_targ,
13683                             cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
13684             else
13685                 return varname(gv, '@', o->op_targ, NULL,
13686                             SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
13687         }
13688         else  {
13689             /* index is an expression;
13690              * attempt to find a match within the aggregate */
13691             if (obase->op_type == OP_HELEM) {
13692                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13693                 if (keysv)
13694                     return varname(gv, '%', o->op_targ,
13695                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
13696             }
13697             else {
13698                 const I32 index
13699                     = find_array_subscript((const AV *)sv, uninit_sv);
13700                 if (index >= 0)
13701                     return varname(gv, '@', o->op_targ,
13702                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
13703             }
13704             if (match)
13705                 break;
13706             return varname(gv,
13707                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
13708                 ? '@' : '%',
13709                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
13710         }
13711         break;
13712
13713     case OP_AASSIGN:
13714         /* only examine RHS */
13715         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
13716
13717     case OP_OPEN:
13718         o = cUNOPx(obase)->op_first;
13719         if (o->op_type == OP_PUSHMARK)
13720             o = o->op_sibling;
13721
13722         if (!o->op_sibling) {
13723             /* one-arg version of open is highly magical */
13724
13725             if (o->op_type == OP_GV) { /* open FOO; */
13726                 gv = cGVOPx_gv(o);
13727                 if (match && GvSV(gv) != uninit_sv)
13728                     break;
13729                 return varname(gv, '$', 0,
13730                             NULL, 0, FUV_SUBSCRIPT_NONE);
13731             }
13732             /* other possibilities not handled are:
13733              * open $x; or open my $x;  should return '${*$x}'
13734              * open expr;               should return '$'.expr ideally
13735              */
13736              break;
13737         }
13738         goto do_op;
13739
13740     /* ops where $_ may be an implicit arg */
13741     case OP_TRANS:
13742     case OP_SUBST:
13743     case OP_MATCH:
13744         if ( !(obase->op_flags & OPf_STACKED)) {
13745             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
13746                                  ? PAD_SVl(obase->op_targ)
13747                                  : DEFSV))
13748             {
13749                 sv = sv_newmortal();
13750                 sv_setpvs(sv, "$_");
13751                 return sv;
13752             }
13753         }
13754         goto do_op;
13755
13756     case OP_PRTF:
13757     case OP_PRINT:
13758     case OP_SAY:
13759         match = 1; /* print etc can return undef on defined args */
13760         /* skip filehandle as it can't produce 'undef' warning  */
13761         o = cUNOPx(obase)->op_first;
13762         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
13763             o = o->op_sibling->op_sibling;
13764         goto do_op2;
13765
13766
13767     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
13768     case OP_RV2SV:
13769     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
13770
13771         /* the following ops are capable of returning PL_sv_undef even for
13772          * defined arg(s) */
13773
13774     case OP_BACKTICK:
13775     case OP_PIPE_OP:
13776     case OP_FILENO:
13777     case OP_BINMODE:
13778     case OP_TIED:
13779     case OP_GETC:
13780     case OP_SYSREAD:
13781     case OP_SEND:
13782     case OP_IOCTL:
13783     case OP_SOCKET:
13784     case OP_SOCKPAIR:
13785     case OP_BIND:
13786     case OP_CONNECT:
13787     case OP_LISTEN:
13788     case OP_ACCEPT:
13789     case OP_SHUTDOWN:
13790     case OP_SSOCKOPT:
13791     case OP_GETPEERNAME:
13792     case OP_FTRREAD:
13793     case OP_FTRWRITE:
13794     case OP_FTREXEC:
13795     case OP_FTROWNED:
13796     case OP_FTEREAD:
13797     case OP_FTEWRITE:
13798     case OP_FTEEXEC:
13799     case OP_FTEOWNED:
13800     case OP_FTIS:
13801     case OP_FTZERO:
13802     case OP_FTSIZE:
13803     case OP_FTFILE:
13804     case OP_FTDIR:
13805     case OP_FTLINK:
13806     case OP_FTPIPE:
13807     case OP_FTSOCK:
13808     case OP_FTBLK:
13809     case OP_FTCHR:
13810     case OP_FTTTY:
13811     case OP_FTSUID:
13812     case OP_FTSGID:
13813     case OP_FTSVTX:
13814     case OP_FTTEXT:
13815     case OP_FTBINARY:
13816     case OP_FTMTIME:
13817     case OP_FTATIME:
13818     case OP_FTCTIME:
13819     case OP_READLINK:
13820     case OP_OPEN_DIR:
13821     case OP_READDIR:
13822     case OP_TELLDIR:
13823     case OP_SEEKDIR:
13824     case OP_REWINDDIR:
13825     case OP_CLOSEDIR:
13826     case OP_GMTIME:
13827     case OP_ALARM:
13828     case OP_SEMGET:
13829     case OP_GETLOGIN:
13830     case OP_UNDEF:
13831     case OP_SUBSTR:
13832     case OP_AEACH:
13833     case OP_EACH:
13834     case OP_SORT:
13835     case OP_CALLER:
13836     case OP_DOFILE:
13837     case OP_PROTOTYPE:
13838     case OP_NCMP:
13839     case OP_SMARTMATCH:
13840     case OP_UNPACK:
13841     case OP_SYSOPEN:
13842     case OP_SYSSEEK:
13843         match = 1;
13844         goto do_op;
13845
13846     case OP_ENTERSUB:
13847     case OP_GOTO:
13848         /* XXX tmp hack: these two may call an XS sub, and currently
13849           XS subs don't have a SUB entry on the context stack, so CV and
13850           pad determination goes wrong, and BAD things happen. So, just
13851           don't try to determine the value under those circumstances.
13852           Need a better fix at dome point. DAPM 11/2007 */
13853         break;
13854
13855     case OP_FLIP:
13856     case OP_FLOP:
13857     {
13858         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
13859         if (gv && GvSV(gv) == uninit_sv)
13860             return newSVpvs_flags("$.", SVs_TEMP);
13861         goto do_op;
13862     }
13863
13864     case OP_POS:
13865         /* def-ness of rval pos() is independent of the def-ness of its arg */
13866         if ( !(obase->op_flags & OPf_MOD))
13867             break;
13868
13869     case OP_SCHOMP:
13870     case OP_CHOMP:
13871         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
13872             return newSVpvs_flags("${$/}", SVs_TEMP);
13873         /*FALLTHROUGH*/
13874
13875     default:
13876     do_op:
13877         if (!(obase->op_flags & OPf_KIDS))
13878             break;
13879         o = cUNOPx(obase)->op_first;
13880         
13881     do_op2:
13882         if (!o)
13883             break;
13884
13885         /* if all except one arg are constant, or have no side-effects,
13886          * or are optimized away, then it's unambiguous */
13887         o2 = NULL;
13888         for (kid=o; kid; kid = kid->op_sibling) {
13889             if (kid) {
13890                 const OPCODE type = kid->op_type;
13891                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
13892                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
13893                   || (type == OP_PUSHMARK)
13894                 )
13895                 continue;
13896             }
13897             if (o2) { /* more than one found */
13898                 o2 = NULL;
13899                 break;
13900             }
13901             o2 = kid;
13902         }
13903         if (o2)
13904             return find_uninit_var(o2, uninit_sv, match);
13905
13906         /* scan all args */
13907         while (o) {
13908             sv = find_uninit_var(o, uninit_sv, 1);
13909             if (sv)
13910                 return sv;
13911             o = o->op_sibling;
13912         }
13913         break;
13914     }
13915     return NULL;
13916 }
13917
13918
13919 /*
13920 =for apidoc report_uninit
13921
13922 Print appropriate "Use of uninitialized variable" warning
13923
13924 =cut
13925 */
13926
13927 void
13928 Perl_report_uninit(pTHX_ const SV *uninit_sv)
13929 {
13930     dVAR;
13931     if (PL_op) {
13932         SV* varname = NULL;
13933         if (uninit_sv) {
13934             varname = find_uninit_var(PL_op, uninit_sv,0);
13935             if (varname)
13936                 sv_insert(varname, 0, 0, " ", 1);
13937         }
13938         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13939                 varname ? SvPV_nolen_const(varname) : "",
13940                 " in ", OP_DESC(PL_op));
13941     }
13942     else
13943         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13944                     "", "", "");
13945 }
13946
13947 /*
13948  * Local variables:
13949  * c-indentation-style: bsd
13950  * c-basic-offset: 4
13951  * indent-tabs-mode: t
13952  * End:
13953  *
13954  * ex: set ts=8 sts=4 sw=4 noet:
13955  */