This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Don’t clobber all magic when clobbering vstring
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34
35 #ifndef HAS_C99
36 # if __STDC_VERSION__ >= 199901L && !defined(VMS)
37 #  define HAS_C99 1
38 # endif
39 #endif
40 #if HAS_C99
41 # include <stdint.h>
42 #endif
43
44 #define FCALL *f
45
46 #ifdef __Lynx__
47 /* Missing proto on LynxOS */
48   char *gconvert(double, int, int,  char *);
49 #endif
50
51 #ifdef PERL_UTF8_CACHE_ASSERT
52 /* if adding more checks watch out for the following tests:
53  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54  *   lib/utf8.t lib/Unicode/Collate/t/index.t
55  * --jhi
56  */
57 #   define ASSERT_UTF8_CACHE(cache) \
58     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59                               assert((cache)[2] <= (cache)[3]); \
60                               assert((cache)[3] <= (cache)[1]);} \
61                               } STMT_END
62 #else
63 #   define ASSERT_UTF8_CACHE(cache) NOOP
64 #endif
65
66 #ifdef PERL_OLD_COPY_ON_WRITE
67 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
68 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
69 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
70    on-write.  */
71 #endif
72
73 /* ============================================================================
74
75 =head1 Allocation and deallocation of SVs.
76
77 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
78 sv, av, hv...) contains type and reference count information, and for
79 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
80 contains fields specific to each type.  Some types store all they need
81 in the head, so don't have a body.
82
83 In all but the most memory-paranoid configurations (ex: PURIFY), heads
84 and bodies are allocated out of arenas, which by default are
85 approximately 4K chunks of memory parcelled up into N heads or bodies.
86 Sv-bodies are allocated by their sv-type, guaranteeing size
87 consistency needed to allocate safely from arrays.
88
89 For SV-heads, the first slot in each arena is reserved, and holds a
90 link to the next arena, some flags, and a note of the number of slots.
91 Snaked through each arena chain is a linked list of free items; when
92 this becomes empty, an extra arena is allocated and divided up into N
93 items which are threaded into the free list.
94
95 SV-bodies are similar, but they use arena-sets by default, which
96 separate the link and info from the arena itself, and reclaim the 1st
97 slot in the arena.  SV-bodies are further described later.
98
99 The following global variables are associated with arenas:
100
101     PL_sv_arenaroot     pointer to list of SV arenas
102     PL_sv_root          pointer to list of free SV structures
103
104     PL_body_arenas      head of linked-list of body arenas
105     PL_body_roots[]     array of pointers to list of free bodies of svtype
106                         arrays are indexed by the svtype needed
107
108 A few special SV heads are not allocated from an arena, but are
109 instead directly created in the interpreter structure, eg PL_sv_undef.
110 The size of arenas can be changed from the default by setting
111 PERL_ARENA_SIZE appropriately at compile time.
112
113 The SV arena serves the secondary purpose of allowing still-live SVs
114 to be located and destroyed during final cleanup.
115
116 At the lowest level, the macros new_SV() and del_SV() grab and free
117 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
118 to return the SV to the free list with error checking.) new_SV() calls
119 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
120 SVs in the free list have their SvTYPE field set to all ones.
121
122 At the time of very final cleanup, sv_free_arenas() is called from
123 perl_destruct() to physically free all the arenas allocated since the
124 start of the interpreter.
125
126 The function visit() scans the SV arenas list, and calls a specified
127 function for each SV it finds which is still live - ie which has an SvTYPE
128 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
129 following functions (specified as [function that calls visit()] / [function
130 called by visit() for each SV]):
131
132     sv_report_used() / do_report_used()
133                         dump all remaining SVs (debugging aid)
134
135     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
136                       do_clean_named_io_objs()
137                         Attempt to free all objects pointed to by RVs,
138                         and try to do the same for all objects indirectly
139                         referenced by typeglobs too.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
186 #  define DEBUG_SV_SERIAL(sv)                                               \
187     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
188             PTR2UV(sv), (long)(sv)->sv_debug_serial))
189 #else
190 #  define FREE_SV_DEBUG_FILE(sv)
191 #  define DEBUG_SV_SERIAL(sv)   NOOP
192 #endif
193
194 #ifdef PERL_POISON
195 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
196 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
197 /* Whilst I'd love to do this, it seems that things like to check on
198    unreferenced scalars
199 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
200 */
201 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
202                                 PoisonNew(&SvREFCNT(sv), 1, U32)
203 #else
204 #  define SvARENA_CHAIN(sv)     SvANY(sv)
205 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
206 #  define POSION_SV_HEAD(sv)
207 #endif
208
209 /* Mark an SV head as unused, and add to free list.
210  *
211  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
212  * its refcount artificially decremented during global destruction, so
213  * there may be dangling pointers to it. The last thing we want in that
214  * case is for it to be reused. */
215
216 #define plant_SV(p) \
217     STMT_START {                                        \
218         const U32 old_flags = SvFLAGS(p);                       \
219         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
220         DEBUG_SV_SERIAL(p);                             \
221         FREE_SV_DEBUG_FILE(p);                          \
222         POSION_SV_HEAD(p);                              \
223         SvFLAGS(p) = SVTYPEMASK;                        \
224         if (!(old_flags & SVf_BREAK)) {         \
225             SvARENA_CHAIN_SET(p, PL_sv_root);   \
226             PL_sv_root = (p);                           \
227         }                                               \
228         --PL_sv_count;                                  \
229     } STMT_END
230
231 #define uproot_SV(p) \
232     STMT_START {                                        \
233         (p) = PL_sv_root;                               \
234         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
235         ++PL_sv_count;                                  \
236     } STMT_END
237
238
239 /* make some more SVs by adding another arena */
240
241 STATIC SV*
242 S_more_sv(pTHX)
243 {
244     dVAR;
245     SV* sv;
246     char *chunk;                /* must use New here to match call to */
247     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
248     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
249     uproot_SV(sv);
250     return sv;
251 }
252
253 /* new_SV(): return a new, empty SV head */
254
255 #ifdef DEBUG_LEAKING_SCALARS
256 /* provide a real function for a debugger to play with */
257 STATIC SV*
258 S_new_SV(pTHX_ const char *file, int line, const char *func)
259 {
260     SV* sv;
261
262     if (PL_sv_root)
263         uproot_SV(sv);
264     else
265         sv = S_more_sv(aTHX);
266     SvANY(sv) = 0;
267     SvREFCNT(sv) = 1;
268     SvFLAGS(sv) = 0;
269     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
270     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
271                 ? PL_parser->copline
272                 :  PL_curcop
273                     ? CopLINE(PL_curcop)
274                     : 0
275             );
276     sv->sv_debug_inpad = 0;
277     sv->sv_debug_parent = NULL;
278     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
279
280     sv->sv_debug_serial = PL_sv_serial++;
281
282     MEM_LOG_NEW_SV(sv, file, line, func);
283     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
284             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
285
286     return sv;
287 }
288 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
289
290 #else
291 #  define new_SV(p) \
292     STMT_START {                                        \
293         if (PL_sv_root)                                 \
294             uproot_SV(p);                               \
295         else                                            \
296             (p) = S_more_sv(aTHX);                      \
297         SvANY(p) = 0;                                   \
298         SvREFCNT(p) = 1;                                \
299         SvFLAGS(p) = 0;                                 \
300         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
301     } STMT_END
302 #endif
303
304
305 /* del_SV(): return an empty SV head to the free list */
306
307 #ifdef DEBUGGING
308
309 #define del_SV(p) \
310     STMT_START {                                        \
311         if (DEBUG_D_TEST)                               \
312             del_sv(p);                                  \
313         else                                            \
314             plant_SV(p);                                \
315     } STMT_END
316
317 STATIC void
318 S_del_sv(pTHX_ SV *p)
319 {
320     dVAR;
321
322     PERL_ARGS_ASSERT_DEL_SV;
323
324     if (DEBUG_D_TEST) {
325         SV* sva;
326         bool ok = 0;
327         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
328             const SV * const sv = sva + 1;
329             const SV * const svend = &sva[SvREFCNT(sva)];
330             if (p >= sv && p < svend) {
331                 ok = 1;
332                 break;
333             }
334         }
335         if (!ok) {
336             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
337                              "Attempt to free non-arena SV: 0x%"UVxf
338                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
339             return;
340         }
341     }
342     plant_SV(p);
343 }
344
345 #else /* ! DEBUGGING */
346
347 #define del_SV(p)   plant_SV(p)
348
349 #endif /* DEBUGGING */
350
351
352 /*
353 =head1 SV Manipulation Functions
354
355 =for apidoc sv_add_arena
356
357 Given a chunk of memory, link it to the head of the list of arenas,
358 and split it into a list of free SVs.
359
360 =cut
361 */
362
363 static void
364 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
365 {
366     dVAR;
367     SV *const sva = MUTABLE_SV(ptr);
368     register SV* sv;
369     register SV* svend;
370
371     PERL_ARGS_ASSERT_SV_ADD_ARENA;
372
373     /* The first SV in an arena isn't an SV. */
374     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
375     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
376     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
377
378     PL_sv_arenaroot = sva;
379     PL_sv_root = sva + 1;
380
381     svend = &sva[SvREFCNT(sva) - 1];
382     sv = sva + 1;
383     while (sv < svend) {
384         SvARENA_CHAIN_SET(sv, (sv + 1));
385 #ifdef DEBUGGING
386         SvREFCNT(sv) = 0;
387 #endif
388         /* Must always set typemask because it's always checked in on cleanup
389            when the arenas are walked looking for objects.  */
390         SvFLAGS(sv) = SVTYPEMASK;
391         sv++;
392     }
393     SvARENA_CHAIN_SET(sv, 0);
394 #ifdef DEBUGGING
395     SvREFCNT(sv) = 0;
396 #endif
397     SvFLAGS(sv) = SVTYPEMASK;
398 }
399
400 /* visit(): call the named function for each non-free SV in the arenas
401  * whose flags field matches the flags/mask args. */
402
403 STATIC I32
404 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
405 {
406     dVAR;
407     SV* sva;
408     I32 visited = 0;
409
410     PERL_ARGS_ASSERT_VISIT;
411
412     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
413         register const SV * const svend = &sva[SvREFCNT(sva)];
414         register SV* sv;
415         for (sv = sva + 1; sv < svend; ++sv) {
416             if (SvTYPE(sv) != (svtype)SVTYPEMASK
417                     && (sv->sv_flags & mask) == flags
418                     && SvREFCNT(sv))
419             {
420                 (FCALL)(aTHX_ sv);
421                 ++visited;
422             }
423         }
424     }
425     return visited;
426 }
427
428 #ifdef DEBUGGING
429
430 /* called by sv_report_used() for each live SV */
431
432 static void
433 do_report_used(pTHX_ SV *const sv)
434 {
435     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
436         PerlIO_printf(Perl_debug_log, "****\n");
437         sv_dump(sv);
438     }
439 }
440 #endif
441
442 /*
443 =for apidoc sv_report_used
444
445 Dump the contents of all SVs not yet freed (debugging aid).
446
447 =cut
448 */
449
450 void
451 Perl_sv_report_used(pTHX)
452 {
453 #ifdef DEBUGGING
454     visit(do_report_used, 0, 0);
455 #else
456     PERL_UNUSED_CONTEXT;
457 #endif
458 }
459
460 /* called by sv_clean_objs() for each live SV */
461
462 static void
463 do_clean_objs(pTHX_ SV *const ref)
464 {
465     dVAR;
466     assert (SvROK(ref));
467     {
468         SV * const target = SvRV(ref);
469         if (SvOBJECT(target)) {
470             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
471             if (SvWEAKREF(ref)) {
472                 sv_del_backref(target, ref);
473                 SvWEAKREF_off(ref);
474                 SvRV_set(ref, NULL);
475             } else {
476                 SvROK_off(ref);
477                 SvRV_set(ref, NULL);
478                 SvREFCNT_dec(target);
479             }
480         }
481     }
482
483     /* XXX Might want to check arrays, etc. */
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV_set(sv, NULL);
526         SvREFCNT_dec(obj);
527     }
528     SvREFCNT_dec(sv); /* undo the inc above */
529 }
530
531 /* clear any IO slots in a GV which hold objects (except stderr, defout);
532  * called by sv_clean_objs() for each live GV */
533
534 static void
535 do_clean_named_io_objs(pTHX_ SV *const sv)
536 {
537     dVAR;
538     SV *obj;
539     assert(SvTYPE(sv) == SVt_PVGV);
540     assert(isGV_with_GP(sv));
541     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
542         return;
543
544     SvREFCNT_inc(sv);
545     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546         DEBUG_D((PerlIO_printf(Perl_debug_log,
547                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548         GvIOp(sv) = NULL;
549         SvREFCNT_dec(obj);
550     }
551     SvREFCNT_dec(sv); /* undo the inc above */
552 }
553
554 /* Void wrapper to pass to visit() */
555 static void
556 do_curse(pTHX_ SV * const sv) {
557     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
559         return;
560     (void)curse(sv, 0);
561 }
562
563 /*
564 =for apidoc sv_clean_objs
565
566 Attempt to destroy all objects not yet freed.
567
568 =cut
569 */
570
571 void
572 Perl_sv_clean_objs(pTHX)
573 {
574     dVAR;
575     GV *olddef, *olderr;
576     PL_in_clean_objs = TRUE;
577     visit(do_clean_objs, SVf_ROK, SVf_ROK);
578     /* Some barnacles may yet remain, clinging to typeglobs.
579      * Run the non-IO destructors first: they may want to output
580      * error messages, close files etc */
581     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
582     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
583     /* And if there are some very tenacious barnacles clinging to arrays,
584        closures, or what have you.... */
585     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
586     olddef = PL_defoutgv;
587     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588     if (olddef && isGV_with_GP(olddef))
589         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590     olderr = PL_stderrgv;
591     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592     if (olderr && isGV_with_GP(olderr))
593         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594     SvREFCNT_dec(olddef);
595     PL_in_clean_objs = FALSE;
596 }
597
598 /* called by sv_clean_all() for each live SV */
599
600 static void
601 do_clean_all(pTHX_ SV *const sv)
602 {
603     dVAR;
604     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
605         /* don't clean pid table and strtab */
606         return;
607     }
608     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609     SvFLAGS(sv) |= SVf_BREAK;
610     SvREFCNT_dec(sv);
611 }
612
613 /*
614 =for apidoc sv_clean_all
615
616 Decrement the refcnt of each remaining SV, possibly triggering a
617 cleanup.  This function may have to be called multiple times to free
618 SVs which are in complex self-referential hierarchies.
619
620 =cut
621 */
622
623 I32
624 Perl_sv_clean_all(pTHX)
625 {
626     dVAR;
627     I32 cleaned;
628     PL_in_clean_all = TRUE;
629     cleaned = visit(do_clean_all, 0,0);
630     return cleaned;
631 }
632
633 /*
634   ARENASETS: a meta-arena implementation which separates arena-info
635   into struct arena_set, which contains an array of struct
636   arena_descs, each holding info for a single arena.  By separating
637   the meta-info from the arena, we recover the 1st slot, formerly
638   borrowed for list management.  The arena_set is about the size of an
639   arena, avoiding the needless malloc overhead of a naive linked-list.
640
641   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642   memory in the last arena-set (1/2 on average).  In trade, we get
643   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
644   smaller types).  The recovery of the wasted space allows use of
645   small arenas for large, rare body types, by changing array* fields
646   in body_details_by_type[] below.
647 */
648 struct arena_desc {
649     char       *arena;          /* the raw storage, allocated aligned */
650     size_t      size;           /* its size ~4k typ */
651     svtype      utype;          /* bodytype stored in arena */
652 };
653
654 struct arena_set;
655
656 /* Get the maximum number of elements in set[] such that struct arena_set
657    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
658    therefore likely to be 1 aligned memory page.  */
659
660 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
662
663 struct arena_set {
664     struct arena_set* next;
665     unsigned int   set_size;    /* ie ARENAS_PER_SET */
666     unsigned int   curr;        /* index of next available arena-desc */
667     struct arena_desc set[ARENAS_PER_SET];
668 };
669
670 /*
671 =for apidoc sv_free_arenas
672
673 Deallocate the memory used by all arenas.  Note that all the individual SV
674 heads and bodies within the arenas must already have been freed.
675
676 =cut
677 */
678 void
679 Perl_sv_free_arenas(pTHX)
680 {
681     dVAR;
682     SV* sva;
683     SV* svanext;
684     unsigned int i;
685
686     /* Free arenas here, but be careful about fake ones.  (We assume
687        contiguity of the fake ones with the corresponding real ones.) */
688
689     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
690         svanext = MUTABLE_SV(SvANY(sva));
691         while (svanext && SvFAKE(svanext))
692             svanext = MUTABLE_SV(SvANY(svanext));
693
694         if (!SvFAKE(sva))
695             Safefree(sva);
696     }
697
698     {
699         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701         while (aroot) {
702             struct arena_set *current = aroot;
703             i = aroot->curr;
704             while (i--) {
705                 assert(aroot->set[i].arena);
706                 Safefree(aroot->set[i].arena);
707             }
708             aroot = aroot->next;
709             Safefree(current);
710         }
711     }
712     PL_body_arenas = 0;
713
714     i = PERL_ARENA_ROOTS_SIZE;
715     while (i--)
716         PL_body_roots[i] = 0;
717
718     PL_sv_arenaroot = 0;
719     PL_sv_root = 0;
720 }
721
722 /*
723   Here are mid-level routines that manage the allocation of bodies out
724   of the various arenas.  There are 5 kinds of arenas:
725
726   1. SV-head arenas, which are discussed and handled above
727   2. regular body arenas
728   3. arenas for reduced-size bodies
729   4. Hash-Entry arenas
730
731   Arena types 2 & 3 are chained by body-type off an array of
732   arena-root pointers, which is indexed by svtype.  Some of the
733   larger/less used body types are malloced singly, since a large
734   unused block of them is wasteful.  Also, several svtypes dont have
735   bodies; the data fits into the sv-head itself.  The arena-root
736   pointer thus has a few unused root-pointers (which may be hijacked
737   later for arena types 4,5)
738
739   3 differs from 2 as an optimization; some body types have several
740   unused fields in the front of the structure (which are kept in-place
741   for consistency).  These bodies can be allocated in smaller chunks,
742   because the leading fields arent accessed.  Pointers to such bodies
743   are decremented to point at the unused 'ghost' memory, knowing that
744   the pointers are used with offsets to the real memory.
745
746
747 =head1 SV-Body Allocation
748
749 Allocation of SV-bodies is similar to SV-heads, differing as follows;
750 the allocation mechanism is used for many body types, so is somewhat
751 more complicated, it uses arena-sets, and has no need for still-live
752 SV detection.
753
754 At the outermost level, (new|del)_X*V macros return bodies of the
755 appropriate type.  These macros call either (new|del)_body_type or
756 (new|del)_body_allocated macro pairs, depending on specifics of the
757 type.  Most body types use the former pair, the latter pair is used to
758 allocate body types with "ghost fields".
759
760 "ghost fields" are fields that are unused in certain types, and
761 consequently don't need to actually exist.  They are declared because
762 they're part of a "base type", which allows use of functions as
763 methods.  The simplest examples are AVs and HVs, 2 aggregate types
764 which don't use the fields which support SCALAR semantics.
765
766 For these types, the arenas are carved up into appropriately sized
767 chunks, we thus avoid wasted memory for those unaccessed members.
768 When bodies are allocated, we adjust the pointer back in memory by the
769 size of the part not allocated, so it's as if we allocated the full
770 structure.  (But things will all go boom if you write to the part that
771 is "not there", because you'll be overwriting the last members of the
772 preceding structure in memory.)
773
774 We calculate the correction using the STRUCT_OFFSET macro on the first
775 member present. If the allocated structure is smaller (no initial NV
776 actually allocated) then the net effect is to subtract the size of the NV
777 from the pointer, to return a new pointer as if an initial NV were actually
778 allocated. (We were using structures named *_allocated for this, but
779 this turned out to be a subtle bug, because a structure without an NV
780 could have a lower alignment constraint, but the compiler is allowed to
781 optimised accesses based on the alignment constraint of the actual pointer
782 to the full structure, for example, using a single 64 bit load instruction
783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
784
785 This is the same trick as was used for NV and IV bodies. Ironically it
786 doesn't need to be used for NV bodies any more, because NV is now at
787 the start of the structure. IV bodies don't need it either, because
788 they are no longer allocated.
789
790 In turn, the new_body_* allocators call S_new_body(), which invokes
791 new_body_inline macro, which takes a lock, and takes a body off the
792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
793 necessary to refresh an empty list.  Then the lock is released, and
794 the body is returned.
795
796 Perl_more_bodies allocates a new arena, and carves it up into an array of N
797 bodies, which it strings into a linked list.  It looks up arena-size
798 and body-size from the body_details table described below, thus
799 supporting the multiple body-types.
800
801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802 the (new|del)_X*V macros are mapped directly to malloc/free.
803
804 For each sv-type, struct body_details bodies_by_type[] carries
805 parameters which control these aspects of SV handling:
806
807 Arena_size determines whether arenas are used for this body type, and if
808 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
809 zero, forcing individual mallocs and frees.
810
811 Body_size determines how big a body is, and therefore how many fit into
812 each arena.  Offset carries the body-pointer adjustment needed for
813 "ghost fields", and is used in *_allocated macros.
814
815 But its main purpose is to parameterize info needed in
816 Perl_sv_upgrade().  The info here dramatically simplifies the function
817 vs the implementation in 5.8.8, making it table-driven.  All fields
818 are used for this, except for arena_size.
819
820 For the sv-types that have no bodies, arenas are not used, so those
821 PL_body_roots[sv_type] are unused, and can be overloaded.  In
822 something of a special case, SVt_NULL is borrowed for HE arenas;
823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
824 bodies_by_type[SVt_NULL] slot is not used, as the table is not
825 available in hv.c.
826
827 */
828
829 struct body_details {
830     U8 body_size;       /* Size to allocate  */
831     U8 copy;            /* Size of structure to copy (may be shorter)  */
832     U8 offset;
833     unsigned int type : 4;          /* We have space for a sanity check.  */
834     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
835     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
836     unsigned int arena : 1;         /* Allocated from an arena */
837     size_t arena_size;              /* Size of arena to allocate */
838 };
839
840 #define HADNV FALSE
841 #define NONV TRUE
842
843
844 #ifdef PURIFY
845 /* With -DPURFIY we allocate everything directly, and don't use arenas.
846    This seems a rather elegant way to simplify some of the code below.  */
847 #define HASARENA FALSE
848 #else
849 #define HASARENA TRUE
850 #endif
851 #define NOARENA FALSE
852
853 /* Size the arenas to exactly fit a given number of bodies.  A count
854    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855    simplifying the default.  If count > 0, the arena is sized to fit
856    only that many bodies, allowing arenas to be used for large, rare
857    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
858    limited by PERL_ARENA_SIZE, so we can safely oversize the
859    declarations.
860  */
861 #define FIT_ARENA0(body_size)                           \
862     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863 #define FIT_ARENAn(count,body_size)                     \
864     ( count * body_size <= PERL_ARENA_SIZE)             \
865     ? count * body_size                                 \
866     : FIT_ARENA0 (body_size)
867 #define FIT_ARENA(count,body_size)                      \
868     count                                               \
869     ? FIT_ARENAn (count, body_size)                     \
870     : FIT_ARENA0 (body_size)
871
872 /* Calculate the length to copy. Specifically work out the length less any
873    final padding the compiler needed to add.  See the comment in sv_upgrade
874    for why copying the padding proved to be a bug.  */
875
876 #define copy_length(type, last_member) \
877         STRUCT_OFFSET(type, last_member) \
878         + sizeof (((type*)SvANY((const SV *)0))->last_member)
879
880 static const struct body_details bodies_by_type[] = {
881     /* HEs use this offset for their arena.  */
882     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
883
884     /* The bind placeholder pretends to be an RV for now.
885        Also it's marked as "can't upgrade" to stop anyone using it before it's
886        implemented.  */
887     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
888
889     /* IVs are in the head, so the allocation size is 0.  */
890     { 0,
891       sizeof(IV), /* This is used to copy out the IV body.  */
892       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
893       NOARENA /* IVS don't need an arena  */, 0
894     },
895
896     { sizeof(NV), sizeof(NV),
897       STRUCT_OFFSET(XPVNV, xnv_u),
898       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
899
900     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
901       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
902       + STRUCT_OFFSET(XPV, xpv_cur),
903       SVt_PV, FALSE, NONV, HASARENA,
904       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
905
906     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
907       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
908       + STRUCT_OFFSET(XPV, xpv_cur),
909       SVt_PVIV, FALSE, NONV, HASARENA,
910       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
911
912     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
913       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
914       + STRUCT_OFFSET(XPV, xpv_cur),
915       SVt_PVNV, FALSE, HADNV, HASARENA,
916       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
917
918     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
919       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
920
921     { sizeof(regexp),
922       sizeof(regexp),
923       0,
924       SVt_REGEXP, FALSE, NONV, HASARENA,
925       FIT_ARENA(0, sizeof(regexp))
926     },
927
928     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
929       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
930     
931     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
932       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
933
934     { sizeof(XPVAV),
935       copy_length(XPVAV, xav_alloc),
936       0,
937       SVt_PVAV, TRUE, NONV, HASARENA,
938       FIT_ARENA(0, sizeof(XPVAV)) },
939
940     { sizeof(XPVHV),
941       copy_length(XPVHV, xhv_max),
942       0,
943       SVt_PVHV, TRUE, NONV, HASARENA,
944       FIT_ARENA(0, sizeof(XPVHV)) },
945
946     { sizeof(XPVCV),
947       sizeof(XPVCV),
948       0,
949       SVt_PVCV, TRUE, NONV, HASARENA,
950       FIT_ARENA(0, sizeof(XPVCV)) },
951
952     { sizeof(XPVFM),
953       sizeof(XPVFM),
954       0,
955       SVt_PVFM, TRUE, NONV, NOARENA,
956       FIT_ARENA(20, sizeof(XPVFM)) },
957
958     { sizeof(XPVIO),
959       sizeof(XPVIO),
960       0,
961       SVt_PVIO, TRUE, NONV, HASARENA,
962       FIT_ARENA(24, sizeof(XPVIO)) },
963 };
964
965 #define new_body_allocated(sv_type)             \
966     (void *)((char *)S_new_body(aTHX_ sv_type)  \
967              - bodies_by_type[sv_type].offset)
968
969 /* return a thing to the free list */
970
971 #define del_body(thing, root)                           \
972     STMT_START {                                        \
973         void ** const thing_copy = (void **)thing;      \
974         *thing_copy = *root;                            \
975         *root = (void*)thing_copy;                      \
976     } STMT_END
977
978 #ifdef PURIFY
979
980 #define new_XNV()       safemalloc(sizeof(XPVNV))
981 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
982 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
983
984 #define del_XPVGV(p)    safefree(p)
985
986 #else /* !PURIFY */
987
988 #define new_XNV()       new_body_allocated(SVt_NV)
989 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
990 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
991
992 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
993                                  &PL_body_roots[SVt_PVGV])
994
995 #endif /* PURIFY */
996
997 /* no arena for you! */
998
999 #define new_NOARENA(details) \
1000         safemalloc((details)->body_size + (details)->offset)
1001 #define new_NOARENAZ(details) \
1002         safecalloc((details)->body_size + (details)->offset, 1)
1003
1004 void *
1005 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1006                   const size_t arena_size)
1007 {
1008     dVAR;
1009     void ** const root = &PL_body_roots[sv_type];
1010     struct arena_desc *adesc;
1011     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1012     unsigned int curr;
1013     char *start;
1014     const char *end;
1015     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1016 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1017     static bool done_sanity_check;
1018
1019     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1020      * variables like done_sanity_check. */
1021     if (!done_sanity_check) {
1022         unsigned int i = SVt_LAST;
1023
1024         done_sanity_check = TRUE;
1025
1026         while (i--)
1027             assert (bodies_by_type[i].type == i);
1028     }
1029 #endif
1030
1031     assert(arena_size);
1032
1033     /* may need new arena-set to hold new arena */
1034     if (!aroot || aroot->curr >= aroot->set_size) {
1035         struct arena_set *newroot;
1036         Newxz(newroot, 1, struct arena_set);
1037         newroot->set_size = ARENAS_PER_SET;
1038         newroot->next = aroot;
1039         aroot = newroot;
1040         PL_body_arenas = (void *) newroot;
1041         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1042     }
1043
1044     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1045     curr = aroot->curr++;
1046     adesc = &(aroot->set[curr]);
1047     assert(!adesc->arena);
1048     
1049     Newx(adesc->arena, good_arena_size, char);
1050     adesc->size = good_arena_size;
1051     adesc->utype = sv_type;
1052     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1053                           curr, (void*)adesc->arena, (UV)good_arena_size));
1054
1055     start = (char *) adesc->arena;
1056
1057     /* Get the address of the byte after the end of the last body we can fit.
1058        Remember, this is integer division:  */
1059     end = start + good_arena_size / body_size * body_size;
1060
1061     /* computed count doesn't reflect the 1st slot reservation */
1062 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1063     DEBUG_m(PerlIO_printf(Perl_debug_log,
1064                           "arena %p end %p arena-size %d (from %d) type %d "
1065                           "size %d ct %d\n",
1066                           (void*)start, (void*)end, (int)good_arena_size,
1067                           (int)arena_size, sv_type, (int)body_size,
1068                           (int)good_arena_size / (int)body_size));
1069 #else
1070     DEBUG_m(PerlIO_printf(Perl_debug_log,
1071                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1072                           (void*)start, (void*)end,
1073                           (int)arena_size, sv_type, (int)body_size,
1074                           (int)good_arena_size / (int)body_size));
1075 #endif
1076     *root = (void *)start;
1077
1078     while (1) {
1079         /* Where the next body would start:  */
1080         char * const next = start + body_size;
1081
1082         if (next >= end) {
1083             /* This is the last body:  */
1084             assert(next == end);
1085
1086             *(void **)start = 0;
1087             return *root;
1088         }
1089
1090         *(void**) start = (void *)next;
1091         start = next;
1092     }
1093 }
1094
1095 /* grab a new thing from the free list, allocating more if necessary.
1096    The inline version is used for speed in hot routines, and the
1097    function using it serves the rest (unless PURIFY).
1098 */
1099 #define new_body_inline(xpv, sv_type) \
1100     STMT_START { \
1101         void ** const r3wt = &PL_body_roots[sv_type]; \
1102         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1103           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1104                                              bodies_by_type[sv_type].body_size,\
1105                                              bodies_by_type[sv_type].arena_size)); \
1106         *(r3wt) = *(void**)(xpv); \
1107     } STMT_END
1108
1109 #ifndef PURIFY
1110
1111 STATIC void *
1112 S_new_body(pTHX_ const svtype sv_type)
1113 {
1114     dVAR;
1115     void *xpv;
1116     new_body_inline(xpv, sv_type);
1117     return xpv;
1118 }
1119
1120 #endif
1121
1122 static const struct body_details fake_rv =
1123     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1124
1125 /*
1126 =for apidoc sv_upgrade
1127
1128 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1129 SV, then copies across as much information as possible from the old body.
1130 It croaks if the SV is already in a more complex form than requested.  You
1131 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1132 before calling C<sv_upgrade>, and hence does not croak.  See also
1133 C<svtype>.
1134
1135 =cut
1136 */
1137
1138 void
1139 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1140 {
1141     dVAR;
1142     void*       old_body;
1143     void*       new_body;
1144     const svtype old_type = SvTYPE(sv);
1145     const struct body_details *new_type_details;
1146     const struct body_details *old_type_details
1147         = bodies_by_type + old_type;
1148     SV *referant = NULL;
1149
1150     PERL_ARGS_ASSERT_SV_UPGRADE;
1151
1152     if (old_type == new_type)
1153         return;
1154
1155     /* This clause was purposefully added ahead of the early return above to
1156        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1157        inference by Nick I-S that it would fix other troublesome cases. See
1158        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1159
1160        Given that shared hash key scalars are no longer PVIV, but PV, there is
1161        no longer need to unshare so as to free up the IVX slot for its proper
1162        purpose. So it's safe to move the early return earlier.  */
1163
1164     if (new_type != SVt_PV && SvIsCOW(sv)) {
1165         sv_force_normal_flags(sv, 0);
1166     }
1167
1168     old_body = SvANY(sv);
1169
1170     /* Copying structures onto other structures that have been neatly zeroed
1171        has a subtle gotcha. Consider XPVMG
1172
1173        +------+------+------+------+------+-------+-------+
1174        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1175        +------+------+------+------+------+-------+-------+
1176        0      4      8     12     16     20      24      28
1177
1178        where NVs are aligned to 8 bytes, so that sizeof that structure is
1179        actually 32 bytes long, with 4 bytes of padding at the end:
1180
1181        +------+------+------+------+------+-------+-------+------+
1182        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1183        +------+------+------+------+------+-------+-------+------+
1184        0      4      8     12     16     20      24      28     32
1185
1186        so what happens if you allocate memory for this structure:
1187
1188        +------+------+------+------+------+-------+-------+------+------+...
1189        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1190        +------+------+------+------+------+-------+-------+------+------+...
1191        0      4      8     12     16     20      24      28     32     36
1192
1193        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1194        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1195        started out as zero once, but it's quite possible that it isn't. So now,
1196        rather than a nicely zeroed GP, you have it pointing somewhere random.
1197        Bugs ensue.
1198
1199        (In fact, GP ends up pointing at a previous GP structure, because the
1200        principle cause of the padding in XPVMG getting garbage is a copy of
1201        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1202        this happens to be moot because XPVGV has been re-ordered, with GP
1203        no longer after STASH)
1204
1205        So we are careful and work out the size of used parts of all the
1206        structures.  */
1207
1208     switch (old_type) {
1209     case SVt_NULL:
1210         break;
1211     case SVt_IV:
1212         if (SvROK(sv)) {
1213             referant = SvRV(sv);
1214             old_type_details = &fake_rv;
1215             if (new_type == SVt_NV)
1216                 new_type = SVt_PVNV;
1217         } else {
1218             if (new_type < SVt_PVIV) {
1219                 new_type = (new_type == SVt_NV)
1220                     ? SVt_PVNV : SVt_PVIV;
1221             }
1222         }
1223         break;
1224     case SVt_NV:
1225         if (new_type < SVt_PVNV) {
1226             new_type = SVt_PVNV;
1227         }
1228         break;
1229     case SVt_PV:
1230         assert(new_type > SVt_PV);
1231         assert(SVt_IV < SVt_PV);
1232         assert(SVt_NV < SVt_PV);
1233         break;
1234     case SVt_PVIV:
1235         break;
1236     case SVt_PVNV:
1237         break;
1238     case SVt_PVMG:
1239         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1240            there's no way that it can be safely upgraded, because perl.c
1241            expects to Safefree(SvANY(PL_mess_sv))  */
1242         assert(sv != PL_mess_sv);
1243         /* This flag bit is used to mean other things in other scalar types.
1244            Given that it only has meaning inside the pad, it shouldn't be set
1245            on anything that can get upgraded.  */
1246         assert(!SvPAD_TYPED(sv));
1247         break;
1248     default:
1249         if (old_type_details->cant_upgrade)
1250             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1251                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1252     }
1253
1254     if (old_type > new_type)
1255         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1256                 (int)old_type, (int)new_type);
1257
1258     new_type_details = bodies_by_type + new_type;
1259
1260     SvFLAGS(sv) &= ~SVTYPEMASK;
1261     SvFLAGS(sv) |= new_type;
1262
1263     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1264        the return statements above will have triggered.  */
1265     assert (new_type != SVt_NULL);
1266     switch (new_type) {
1267     case SVt_IV:
1268         assert(old_type == SVt_NULL);
1269         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1270         SvIV_set(sv, 0);
1271         return;
1272     case SVt_NV:
1273         assert(old_type == SVt_NULL);
1274         SvANY(sv) = new_XNV();
1275         SvNV_set(sv, 0);
1276         return;
1277     case SVt_PVHV:
1278     case SVt_PVAV:
1279         assert(new_type_details->body_size);
1280
1281 #ifndef PURIFY  
1282         assert(new_type_details->arena);
1283         assert(new_type_details->arena_size);
1284         /* This points to the start of the allocated area.  */
1285         new_body_inline(new_body, new_type);
1286         Zero(new_body, new_type_details->body_size, char);
1287         new_body = ((char *)new_body) - new_type_details->offset;
1288 #else
1289         /* We always allocated the full length item with PURIFY. To do this
1290            we fake things so that arena is false for all 16 types..  */
1291         new_body = new_NOARENAZ(new_type_details);
1292 #endif
1293         SvANY(sv) = new_body;
1294         if (new_type == SVt_PVAV) {
1295             AvMAX(sv)   = -1;
1296             AvFILLp(sv) = -1;
1297             AvREAL_only(sv);
1298             if (old_type_details->body_size) {
1299                 AvALLOC(sv) = 0;
1300             } else {
1301                 /* It will have been zeroed when the new body was allocated.
1302                    Lets not write to it, in case it confuses a write-back
1303                    cache.  */
1304             }
1305         } else {
1306             assert(!SvOK(sv));
1307             SvOK_off(sv);
1308 #ifndef NODEFAULT_SHAREKEYS
1309             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1310 #endif
1311             HvMAX(sv) = 7; /* (start with 8 buckets) */
1312         }
1313
1314         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1315            The target created by newSVrv also is, and it can have magic.
1316            However, it never has SvPVX set.
1317         */
1318         if (old_type == SVt_IV) {
1319             assert(!SvROK(sv));
1320         } else if (old_type >= SVt_PV) {
1321             assert(SvPVX_const(sv) == 0);
1322         }
1323
1324         if (old_type >= SVt_PVMG) {
1325             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1326             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1327         } else {
1328             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1329         }
1330         break;
1331
1332
1333     case SVt_REGEXP:
1334         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1335            sv_force_normal_flags(sv) is called.  */
1336         SvFAKE_on(sv);
1337     case SVt_PVIV:
1338         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1339            no route from NV to PVIV, NOK can never be true  */
1340         assert(!SvNOKp(sv));
1341         assert(!SvNOK(sv));
1342     case SVt_PVIO:
1343     case SVt_PVFM:
1344     case SVt_PVGV:
1345     case SVt_PVCV:
1346     case SVt_PVLV:
1347     case SVt_PVMG:
1348     case SVt_PVNV:
1349     case SVt_PV:
1350
1351         assert(new_type_details->body_size);
1352         /* We always allocated the full length item with PURIFY. To do this
1353            we fake things so that arena is false for all 16 types..  */
1354         if(new_type_details->arena) {
1355             /* This points to the start of the allocated area.  */
1356             new_body_inline(new_body, new_type);
1357             Zero(new_body, new_type_details->body_size, char);
1358             new_body = ((char *)new_body) - new_type_details->offset;
1359         } else {
1360             new_body = new_NOARENAZ(new_type_details);
1361         }
1362         SvANY(sv) = new_body;
1363
1364         if (old_type_details->copy) {
1365             /* There is now the potential for an upgrade from something without
1366                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1367             int offset = old_type_details->offset;
1368             int length = old_type_details->copy;
1369
1370             if (new_type_details->offset > old_type_details->offset) {
1371                 const int difference
1372                     = new_type_details->offset - old_type_details->offset;
1373                 offset += difference;
1374                 length -= difference;
1375             }
1376             assert (length >= 0);
1377                 
1378             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1379                  char);
1380         }
1381
1382 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1383         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1384          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1385          * NV slot, but the new one does, then we need to initialise the
1386          * freshly created NV slot with whatever the correct bit pattern is
1387          * for 0.0  */
1388         if (old_type_details->zero_nv && !new_type_details->zero_nv
1389             && !isGV_with_GP(sv))
1390             SvNV_set(sv, 0);
1391 #endif
1392
1393         if (new_type == SVt_PVIO) {
1394             IO * const io = MUTABLE_IO(sv);
1395             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1396
1397             SvOBJECT_on(io);
1398             /* Clear the stashcache because a new IO could overrule a package
1399                name */
1400             hv_clear(PL_stashcache);
1401
1402             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1403             IoPAGE_LEN(sv) = 60;
1404         }
1405         if (old_type < SVt_PV) {
1406             /* referant will be NULL unless the old type was SVt_IV emulating
1407                SVt_RV */
1408             sv->sv_u.svu_rv = referant;
1409         }
1410         break;
1411     default:
1412         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1413                    (unsigned long)new_type);
1414     }
1415
1416     if (old_type > SVt_IV) {
1417 #ifdef PURIFY
1418         safefree(old_body);
1419 #else
1420         /* Note that there is an assumption that all bodies of types that
1421            can be upgraded came from arenas. Only the more complex non-
1422            upgradable types are allowed to be directly malloc()ed.  */
1423         assert(old_type_details->arena);
1424         del_body((void*)((char*)old_body + old_type_details->offset),
1425                  &PL_body_roots[old_type]);
1426 #endif
1427     }
1428 }
1429
1430 /*
1431 =for apidoc sv_backoff
1432
1433 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1434 wrapper instead.
1435
1436 =cut
1437 */
1438
1439 int
1440 Perl_sv_backoff(pTHX_ register SV *const sv)
1441 {
1442     STRLEN delta;
1443     const char * const s = SvPVX_const(sv);
1444
1445     PERL_ARGS_ASSERT_SV_BACKOFF;
1446     PERL_UNUSED_CONTEXT;
1447
1448     assert(SvOOK(sv));
1449     assert(SvTYPE(sv) != SVt_PVHV);
1450     assert(SvTYPE(sv) != SVt_PVAV);
1451
1452     SvOOK_offset(sv, delta);
1453     
1454     SvLEN_set(sv, SvLEN(sv) + delta);
1455     SvPV_set(sv, SvPVX(sv) - delta);
1456     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1457     SvFLAGS(sv) &= ~SVf_OOK;
1458     return 0;
1459 }
1460
1461 /*
1462 =for apidoc sv_grow
1463
1464 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1465 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1466 Use the C<SvGROW> wrapper instead.
1467
1468 =cut
1469 */
1470
1471 char *
1472 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1473 {
1474     register char *s;
1475
1476     PERL_ARGS_ASSERT_SV_GROW;
1477
1478     if (PL_madskills && newlen >= 0x100000) {
1479         PerlIO_printf(Perl_debug_log,
1480                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1481     }
1482 #ifdef HAS_64K_LIMIT
1483     if (newlen >= 0x10000) {
1484         PerlIO_printf(Perl_debug_log,
1485                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1486         my_exit(1);
1487     }
1488 #endif /* HAS_64K_LIMIT */
1489     if (SvROK(sv))
1490         sv_unref(sv);
1491     if (SvTYPE(sv) < SVt_PV) {
1492         sv_upgrade(sv, SVt_PV);
1493         s = SvPVX_mutable(sv);
1494     }
1495     else if (SvOOK(sv)) {       /* pv is offset? */
1496         sv_backoff(sv);
1497         s = SvPVX_mutable(sv);
1498         if (newlen > SvLEN(sv))
1499             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1500 #ifdef HAS_64K_LIMIT
1501         if (newlen >= 0x10000)
1502             newlen = 0xFFFF;
1503 #endif
1504     }
1505     else
1506         s = SvPVX_mutable(sv);
1507
1508     if (newlen > SvLEN(sv)) {           /* need more room? */
1509         STRLEN minlen = SvCUR(sv);
1510         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1511         if (newlen < minlen)
1512             newlen = minlen;
1513 #ifndef Perl_safesysmalloc_size
1514         newlen = PERL_STRLEN_ROUNDUP(newlen);
1515 #endif
1516         if (SvLEN(sv) && s) {
1517             s = (char*)saferealloc(s, newlen);
1518         }
1519         else {
1520             s = (char*)safemalloc(newlen);
1521             if (SvPVX_const(sv) && SvCUR(sv)) {
1522                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1523             }
1524         }
1525         SvPV_set(sv, s);
1526 #ifdef Perl_safesysmalloc_size
1527         /* Do this here, do it once, do it right, and then we will never get
1528            called back into sv_grow() unless there really is some growing
1529            needed.  */
1530         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1531 #else
1532         SvLEN_set(sv, newlen);
1533 #endif
1534     }
1535     return s;
1536 }
1537
1538 /*
1539 =for apidoc sv_setiv
1540
1541 Copies an integer into the given SV, upgrading first if necessary.
1542 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1543
1544 =cut
1545 */
1546
1547 void
1548 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1549 {
1550     dVAR;
1551
1552     PERL_ARGS_ASSERT_SV_SETIV;
1553
1554     SV_CHECK_THINKFIRST_COW_DROP(sv);
1555     switch (SvTYPE(sv)) {
1556     case SVt_NULL:
1557     case SVt_NV:
1558         sv_upgrade(sv, SVt_IV);
1559         break;
1560     case SVt_PV:
1561         sv_upgrade(sv, SVt_PVIV);
1562         break;
1563
1564     case SVt_PVGV:
1565         if (!isGV_with_GP(sv))
1566             break;
1567     case SVt_PVAV:
1568     case SVt_PVHV:
1569     case SVt_PVCV:
1570     case SVt_PVFM:
1571     case SVt_PVIO:
1572         /* diag_listed_as: Can't coerce %s to %s in %s */
1573         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1574                    OP_DESC(PL_op));
1575     default: NOOP;
1576     }
1577     (void)SvIOK_only(sv);                       /* validate number */
1578     SvIV_set(sv, i);
1579     SvTAINT(sv);
1580 }
1581
1582 /*
1583 =for apidoc sv_setiv_mg
1584
1585 Like C<sv_setiv>, but also handles 'set' magic.
1586
1587 =cut
1588 */
1589
1590 void
1591 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1592 {
1593     PERL_ARGS_ASSERT_SV_SETIV_MG;
1594
1595     sv_setiv(sv,i);
1596     SvSETMAGIC(sv);
1597 }
1598
1599 /*
1600 =for apidoc sv_setuv
1601
1602 Copies an unsigned integer into the given SV, upgrading first if necessary.
1603 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1604
1605 =cut
1606 */
1607
1608 void
1609 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1610 {
1611     PERL_ARGS_ASSERT_SV_SETUV;
1612
1613     /* With these two if statements:
1614        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1615
1616        without
1617        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1618
1619        If you wish to remove them, please benchmark to see what the effect is
1620     */
1621     if (u <= (UV)IV_MAX) {
1622        sv_setiv(sv, (IV)u);
1623        return;
1624     }
1625     sv_setiv(sv, 0);
1626     SvIsUV_on(sv);
1627     SvUV_set(sv, u);
1628 }
1629
1630 /*
1631 =for apidoc sv_setuv_mg
1632
1633 Like C<sv_setuv>, but also handles 'set' magic.
1634
1635 =cut
1636 */
1637
1638 void
1639 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1640 {
1641     PERL_ARGS_ASSERT_SV_SETUV_MG;
1642
1643     sv_setuv(sv,u);
1644     SvSETMAGIC(sv);
1645 }
1646
1647 /*
1648 =for apidoc sv_setnv
1649
1650 Copies a double into the given SV, upgrading first if necessary.
1651 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1652
1653 =cut
1654 */
1655
1656 void
1657 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1658 {
1659     dVAR;
1660
1661     PERL_ARGS_ASSERT_SV_SETNV;
1662
1663     SV_CHECK_THINKFIRST_COW_DROP(sv);
1664     switch (SvTYPE(sv)) {
1665     case SVt_NULL:
1666     case SVt_IV:
1667         sv_upgrade(sv, SVt_NV);
1668         break;
1669     case SVt_PV:
1670     case SVt_PVIV:
1671         sv_upgrade(sv, SVt_PVNV);
1672         break;
1673
1674     case SVt_PVGV:
1675         if (!isGV_with_GP(sv))
1676             break;
1677     case SVt_PVAV:
1678     case SVt_PVHV:
1679     case SVt_PVCV:
1680     case SVt_PVFM:
1681     case SVt_PVIO:
1682         /* diag_listed_as: Can't coerce %s to %s in %s */
1683         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1684                    OP_DESC(PL_op));
1685     default: NOOP;
1686     }
1687     SvNV_set(sv, num);
1688     (void)SvNOK_only(sv);                       /* validate number */
1689     SvTAINT(sv);
1690 }
1691
1692 /*
1693 =for apidoc sv_setnv_mg
1694
1695 Like C<sv_setnv>, but also handles 'set' magic.
1696
1697 =cut
1698 */
1699
1700 void
1701 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1702 {
1703     PERL_ARGS_ASSERT_SV_SETNV_MG;
1704
1705     sv_setnv(sv,num);
1706     SvSETMAGIC(sv);
1707 }
1708
1709 /* Print an "isn't numeric" warning, using a cleaned-up,
1710  * printable version of the offending string
1711  */
1712
1713 STATIC void
1714 S_not_a_number(pTHX_ SV *const sv)
1715 {
1716      dVAR;
1717      SV *dsv;
1718      char tmpbuf[64];
1719      const char *pv;
1720
1721      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1722
1723      if (DO_UTF8(sv)) {
1724           dsv = newSVpvs_flags("", SVs_TEMP);
1725           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1726      } else {
1727           char *d = tmpbuf;
1728           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1729           /* each *s can expand to 4 chars + "...\0",
1730              i.e. need room for 8 chars */
1731         
1732           const char *s = SvPVX_const(sv);
1733           const char * const end = s + SvCUR(sv);
1734           for ( ; s < end && d < limit; s++ ) {
1735                int ch = *s & 0xFF;
1736                if (ch & 128 && !isPRINT_LC(ch)) {
1737                     *d++ = 'M';
1738                     *d++ = '-';
1739                     ch &= 127;
1740                }
1741                if (ch == '\n') {
1742                     *d++ = '\\';
1743                     *d++ = 'n';
1744                }
1745                else if (ch == '\r') {
1746                     *d++ = '\\';
1747                     *d++ = 'r';
1748                }
1749                else if (ch == '\f') {
1750                     *d++ = '\\';
1751                     *d++ = 'f';
1752                }
1753                else if (ch == '\\') {
1754                     *d++ = '\\';
1755                     *d++ = '\\';
1756                }
1757                else if (ch == '\0') {
1758                     *d++ = '\\';
1759                     *d++ = '0';
1760                }
1761                else if (isPRINT_LC(ch))
1762                     *d++ = ch;
1763                else {
1764                     *d++ = '^';
1765                     *d++ = toCTRL(ch);
1766                }
1767           }
1768           if (s < end) {
1769                *d++ = '.';
1770                *d++ = '.';
1771                *d++ = '.';
1772           }
1773           *d = '\0';
1774           pv = tmpbuf;
1775     }
1776
1777     if (PL_op)
1778         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1779                     "Argument \"%s\" isn't numeric in %s", pv,
1780                     OP_DESC(PL_op));
1781     else
1782         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1783                     "Argument \"%s\" isn't numeric", pv);
1784 }
1785
1786 /*
1787 =for apidoc looks_like_number
1788
1789 Test if the content of an SV looks like a number (or is a number).
1790 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1791 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1792 ignored.
1793
1794 =cut
1795 */
1796
1797 I32
1798 Perl_looks_like_number(pTHX_ SV *const sv)
1799 {
1800     register const char *sbegin;
1801     STRLEN len;
1802
1803     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1804
1805     if (SvPOK(sv) || SvPOKp(sv)) {
1806         sbegin = SvPV_nomg_const(sv, len);
1807     }
1808     else
1809         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1810     return grok_number(sbegin, len, NULL);
1811 }
1812
1813 STATIC bool
1814 S_glob_2number(pTHX_ GV * const gv)
1815 {
1816     SV *const buffer = sv_newmortal();
1817
1818     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1819
1820     gv_efullname3(buffer, gv, "*");
1821
1822     /* We know that all GVs stringify to something that is not-a-number,
1823         so no need to test that.  */
1824     if (ckWARN(WARN_NUMERIC))
1825         not_a_number(buffer);
1826     /* We just want something true to return, so that S_sv_2iuv_common
1827         can tail call us and return true.  */
1828     return TRUE;
1829 }
1830
1831 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1832    until proven guilty, assume that things are not that bad... */
1833
1834 /*
1835    NV_PRESERVES_UV:
1836
1837    As 64 bit platforms often have an NV that doesn't preserve all bits of
1838    an IV (an assumption perl has been based on to date) it becomes necessary
1839    to remove the assumption that the NV always carries enough precision to
1840    recreate the IV whenever needed, and that the NV is the canonical form.
1841    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1842    precision as a side effect of conversion (which would lead to insanity
1843    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1844    1) to distinguish between IV/UV/NV slots that have cached a valid
1845       conversion where precision was lost and IV/UV/NV slots that have a
1846       valid conversion which has lost no precision
1847    2) to ensure that if a numeric conversion to one form is requested that
1848       would lose precision, the precise conversion (or differently
1849       imprecise conversion) is also performed and cached, to prevent
1850       requests for different numeric formats on the same SV causing
1851       lossy conversion chains. (lossless conversion chains are perfectly
1852       acceptable (still))
1853
1854
1855    flags are used:
1856    SvIOKp is true if the IV slot contains a valid value
1857    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1858    SvNOKp is true if the NV slot contains a valid value
1859    SvNOK  is true only if the NV value is accurate
1860
1861    so
1862    while converting from PV to NV, check to see if converting that NV to an
1863    IV(or UV) would lose accuracy over a direct conversion from PV to
1864    IV(or UV). If it would, cache both conversions, return NV, but mark
1865    SV as IOK NOKp (ie not NOK).
1866
1867    While converting from PV to IV, check to see if converting that IV to an
1868    NV would lose accuracy over a direct conversion from PV to NV. If it
1869    would, cache both conversions, flag similarly.
1870
1871    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1872    correctly because if IV & NV were set NV *always* overruled.
1873    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1874    changes - now IV and NV together means that the two are interchangeable:
1875    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1876
1877    The benefit of this is that operations such as pp_add know that if
1878    SvIOK is true for both left and right operands, then integer addition
1879    can be used instead of floating point (for cases where the result won't
1880    overflow). Before, floating point was always used, which could lead to
1881    loss of precision compared with integer addition.
1882
1883    * making IV and NV equal status should make maths accurate on 64 bit
1884      platforms
1885    * may speed up maths somewhat if pp_add and friends start to use
1886      integers when possible instead of fp. (Hopefully the overhead in
1887      looking for SvIOK and checking for overflow will not outweigh the
1888      fp to integer speedup)
1889    * will slow down integer operations (callers of SvIV) on "inaccurate"
1890      values, as the change from SvIOK to SvIOKp will cause a call into
1891      sv_2iv each time rather than a macro access direct to the IV slot
1892    * should speed up number->string conversion on integers as IV is
1893      favoured when IV and NV are equally accurate
1894
1895    ####################################################################
1896    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1897    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1898    On the other hand, SvUOK is true iff UV.
1899    ####################################################################
1900
1901    Your mileage will vary depending your CPU's relative fp to integer
1902    performance ratio.
1903 */
1904
1905 #ifndef NV_PRESERVES_UV
1906 #  define IS_NUMBER_UNDERFLOW_IV 1
1907 #  define IS_NUMBER_UNDERFLOW_UV 2
1908 #  define IS_NUMBER_IV_AND_UV    2
1909 #  define IS_NUMBER_OVERFLOW_IV  4
1910 #  define IS_NUMBER_OVERFLOW_UV  5
1911
1912 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1913
1914 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1915 STATIC int
1916 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1917 #  ifdef DEBUGGING
1918                        , I32 numtype
1919 #  endif
1920                        )
1921 {
1922     dVAR;
1923
1924     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1925
1926     DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1927     if (SvNVX(sv) < (NV)IV_MIN) {
1928         (void)SvIOKp_on(sv);
1929         (void)SvNOK_on(sv);
1930         SvIV_set(sv, IV_MIN);
1931         return IS_NUMBER_UNDERFLOW_IV;
1932     }
1933     if (SvNVX(sv) > (NV)UV_MAX) {
1934         (void)SvIOKp_on(sv);
1935         (void)SvNOK_on(sv);
1936         SvIsUV_on(sv);
1937         SvUV_set(sv, UV_MAX);
1938         return IS_NUMBER_OVERFLOW_UV;
1939     }
1940     (void)SvIOKp_on(sv);
1941     (void)SvNOK_on(sv);
1942     /* Can't use strtol etc to convert this string.  (See truth table in
1943        sv_2iv  */
1944     if (SvNVX(sv) <= (UV)IV_MAX) {
1945         SvIV_set(sv, I_V(SvNVX(sv)));
1946         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1947             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1948         } else {
1949             /* Integer is imprecise. NOK, IOKp */
1950         }
1951         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1952     }
1953     SvIsUV_on(sv);
1954     SvUV_set(sv, U_V(SvNVX(sv)));
1955     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1956         if (SvUVX(sv) == UV_MAX) {
1957             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1958                possibly be preserved by NV. Hence, it must be overflow.
1959                NOK, IOKp */
1960             return IS_NUMBER_OVERFLOW_UV;
1961         }
1962         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1963     } else {
1964         /* Integer is imprecise. NOK, IOKp */
1965     }
1966     return IS_NUMBER_OVERFLOW_IV;
1967 }
1968 #endif /* !NV_PRESERVES_UV*/
1969
1970 STATIC bool
1971 S_sv_2iuv_common(pTHX_ SV *const sv)
1972 {
1973     dVAR;
1974
1975     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1976
1977     if (SvNOKp(sv)) {
1978         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1979          * without also getting a cached IV/UV from it at the same time
1980          * (ie PV->NV conversion should detect loss of accuracy and cache
1981          * IV or UV at same time to avoid this. */
1982         /* IV-over-UV optimisation - choose to cache IV if possible */
1983
1984         if (SvTYPE(sv) == SVt_NV)
1985             sv_upgrade(sv, SVt_PVNV);
1986
1987         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1988         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1989            certainly cast into the IV range at IV_MAX, whereas the correct
1990            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1991            cases go to UV */
1992 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1993         if (Perl_isnan(SvNVX(sv))) {
1994             SvUV_set(sv, 0);
1995             SvIsUV_on(sv);
1996             return FALSE;
1997         }
1998 #endif
1999         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2000             SvIV_set(sv, I_V(SvNVX(sv)));
2001             if (SvNVX(sv) == (NV) SvIVX(sv)
2002 #ifndef NV_PRESERVES_UV
2003                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2004                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2005                 /* Don't flag it as "accurately an integer" if the number
2006                    came from a (by definition imprecise) NV operation, and
2007                    we're outside the range of NV integer precision */
2008 #endif
2009                 ) {
2010                 if (SvNOK(sv))
2011                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2012                 else {
2013                     /* scalar has trailing garbage, eg "42a" */
2014                 }
2015                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2016                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2017                                       PTR2UV(sv),
2018                                       SvNVX(sv),
2019                                       SvIVX(sv)));
2020
2021             } else {
2022                 /* IV not precise.  No need to convert from PV, as NV
2023                    conversion would already have cached IV if it detected
2024                    that PV->IV would be better than PV->NV->IV
2025                    flags already correct - don't set public IOK.  */
2026                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2027                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2028                                       PTR2UV(sv),
2029                                       SvNVX(sv),
2030                                       SvIVX(sv)));
2031             }
2032             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2033                but the cast (NV)IV_MIN rounds to a the value less (more
2034                negative) than IV_MIN which happens to be equal to SvNVX ??
2035                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2036                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2037                (NV)UVX == NVX are both true, but the values differ. :-(
2038                Hopefully for 2s complement IV_MIN is something like
2039                0x8000000000000000 which will be exact. NWC */
2040         }
2041         else {
2042             SvUV_set(sv, U_V(SvNVX(sv)));
2043             if (
2044                 (SvNVX(sv) == (NV) SvUVX(sv))
2045 #ifndef  NV_PRESERVES_UV
2046                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2047                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2048                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2049                 /* Don't flag it as "accurately an integer" if the number
2050                    came from a (by definition imprecise) NV operation, and
2051                    we're outside the range of NV integer precision */
2052 #endif
2053                 && SvNOK(sv)
2054                 )
2055                 SvIOK_on(sv);
2056             SvIsUV_on(sv);
2057             DEBUG_c(PerlIO_printf(Perl_debug_log,
2058                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2059                                   PTR2UV(sv),
2060                                   SvUVX(sv),
2061                                   SvUVX(sv)));
2062         }
2063     }
2064     else if (SvPOKp(sv) && SvLEN(sv)) {
2065         UV value;
2066         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2067         /* We want to avoid a possible problem when we cache an IV/ a UV which
2068            may be later translated to an NV, and the resulting NV is not
2069            the same as the direct translation of the initial string
2070            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2071            be careful to ensure that the value with the .456 is around if the
2072            NV value is requested in the future).
2073         
2074            This means that if we cache such an IV/a UV, we need to cache the
2075            NV as well.  Moreover, we trade speed for space, and do not
2076            cache the NV if we are sure it's not needed.
2077          */
2078
2079         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2080         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2081              == IS_NUMBER_IN_UV) {
2082             /* It's definitely an integer, only upgrade to PVIV */
2083             if (SvTYPE(sv) < SVt_PVIV)
2084                 sv_upgrade(sv, SVt_PVIV);
2085             (void)SvIOK_on(sv);
2086         } else if (SvTYPE(sv) < SVt_PVNV)
2087             sv_upgrade(sv, SVt_PVNV);
2088
2089         /* If NVs preserve UVs then we only use the UV value if we know that
2090            we aren't going to call atof() below. If NVs don't preserve UVs
2091            then the value returned may have more precision than atof() will
2092            return, even though value isn't perfectly accurate.  */
2093         if ((numtype & (IS_NUMBER_IN_UV
2094 #ifdef NV_PRESERVES_UV
2095                         | IS_NUMBER_NOT_INT
2096 #endif
2097             )) == IS_NUMBER_IN_UV) {
2098             /* This won't turn off the public IOK flag if it was set above  */
2099             (void)SvIOKp_on(sv);
2100
2101             if (!(numtype & IS_NUMBER_NEG)) {
2102                 /* positive */;
2103                 if (value <= (UV)IV_MAX) {
2104                     SvIV_set(sv, (IV)value);
2105                 } else {
2106                     /* it didn't overflow, and it was positive. */
2107                     SvUV_set(sv, value);
2108                     SvIsUV_on(sv);
2109                 }
2110             } else {
2111                 /* 2s complement assumption  */
2112                 if (value <= (UV)IV_MIN) {
2113                     SvIV_set(sv, -(IV)value);
2114                 } else {
2115                     /* Too negative for an IV.  This is a double upgrade, but
2116                        I'm assuming it will be rare.  */
2117                     if (SvTYPE(sv) < SVt_PVNV)
2118                         sv_upgrade(sv, SVt_PVNV);
2119                     SvNOK_on(sv);
2120                     SvIOK_off(sv);
2121                     SvIOKp_on(sv);
2122                     SvNV_set(sv, -(NV)value);
2123                     SvIV_set(sv, IV_MIN);
2124                 }
2125             }
2126         }
2127         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2128            will be in the previous block to set the IV slot, and the next
2129            block to set the NV slot.  So no else here.  */
2130         
2131         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2132             != IS_NUMBER_IN_UV) {
2133             /* It wasn't an (integer that doesn't overflow the UV). */
2134             SvNV_set(sv, Atof(SvPVX_const(sv)));
2135
2136             if (! numtype && ckWARN(WARN_NUMERIC))
2137                 not_a_number(sv);
2138
2139 #if defined(USE_LONG_DOUBLE)
2140             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2141                                   PTR2UV(sv), SvNVX(sv)));
2142 #else
2143             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2144                                   PTR2UV(sv), SvNVX(sv)));
2145 #endif
2146
2147 #ifdef NV_PRESERVES_UV
2148             (void)SvIOKp_on(sv);
2149             (void)SvNOK_on(sv);
2150             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2151                 SvIV_set(sv, I_V(SvNVX(sv)));
2152                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2153                     SvIOK_on(sv);
2154                 } else {
2155                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2156                 }
2157                 /* UV will not work better than IV */
2158             } else {
2159                 if (SvNVX(sv) > (NV)UV_MAX) {
2160                     SvIsUV_on(sv);
2161                     /* Integer is inaccurate. NOK, IOKp, is UV */
2162                     SvUV_set(sv, UV_MAX);
2163                 } else {
2164                     SvUV_set(sv, U_V(SvNVX(sv)));
2165                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2166                        NV preservse UV so can do correct comparison.  */
2167                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2168                         SvIOK_on(sv);
2169                     } else {
2170                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2171                     }
2172                 }
2173                 SvIsUV_on(sv);
2174             }
2175 #else /* NV_PRESERVES_UV */
2176             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2177                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2178                 /* The IV/UV slot will have been set from value returned by
2179                    grok_number above.  The NV slot has just been set using
2180                    Atof.  */
2181                 SvNOK_on(sv);
2182                 assert (SvIOKp(sv));
2183             } else {
2184                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2185                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2186                     /* Small enough to preserve all bits. */
2187                     (void)SvIOKp_on(sv);
2188                     SvNOK_on(sv);
2189                     SvIV_set(sv, I_V(SvNVX(sv)));
2190                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2191                         SvIOK_on(sv);
2192                     /* Assumption: first non-preserved integer is < IV_MAX,
2193                        this NV is in the preserved range, therefore: */
2194                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2195                           < (UV)IV_MAX)) {
2196                         Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2197                     }
2198                 } else {
2199                     /* IN_UV NOT_INT
2200                          0      0       already failed to read UV.
2201                          0      1       already failed to read UV.
2202                          1      0       you won't get here in this case. IV/UV
2203                                         slot set, public IOK, Atof() unneeded.
2204                          1      1       already read UV.
2205                        so there's no point in sv_2iuv_non_preserve() attempting
2206                        to use atol, strtol, strtoul etc.  */
2207 #  ifdef DEBUGGING
2208                     sv_2iuv_non_preserve (sv, numtype);
2209 #  else
2210                     sv_2iuv_non_preserve (sv);
2211 #  endif
2212                 }
2213             }
2214 #endif /* NV_PRESERVES_UV */
2215         /* It might be more code efficient to go through the entire logic above
2216            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2217            gets complex and potentially buggy, so more programmer efficient
2218            to do it this way, by turning off the public flags:  */
2219         if (!numtype)
2220             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2221         }
2222     }
2223     else  {
2224         if (isGV_with_GP(sv))
2225             return glob_2number(MUTABLE_GV(sv));
2226
2227         if (!SvPADTMP(sv)) {
2228             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2229                 report_uninit(sv);
2230         }
2231         if (SvTYPE(sv) < SVt_IV)
2232             /* Typically the caller expects that sv_any is not NULL now.  */
2233             sv_upgrade(sv, SVt_IV);
2234         /* Return 0 from the caller.  */
2235         return TRUE;
2236     }
2237     return FALSE;
2238 }
2239
2240 /*
2241 =for apidoc sv_2iv_flags
2242
2243 Return the integer value of an SV, doing any necessary string
2244 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2245 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2246
2247 =cut
2248 */
2249
2250 IV
2251 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2252 {
2253     dVAR;
2254     if (!sv)
2255         return 0;
2256     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2257         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2258            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2259            In practice they are extremely unlikely to actually get anywhere
2260            accessible by user Perl code - the only way that I'm aware of is when
2261            a constant subroutine which is used as the second argument to index.
2262         */
2263         if (flags & SV_GMAGIC)
2264             mg_get(sv);
2265         if (SvIOKp(sv))
2266             return SvIVX(sv);
2267         if (SvNOKp(sv)) {
2268             return I_V(SvNVX(sv));
2269         }
2270         if (SvPOKp(sv) && SvLEN(sv)) {
2271             UV value;
2272             const int numtype
2273                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2274
2275             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2276                 == IS_NUMBER_IN_UV) {
2277                 /* It's definitely an integer */
2278                 if (numtype & IS_NUMBER_NEG) {
2279                     if (value < (UV)IV_MIN)
2280                         return -(IV)value;
2281                 } else {
2282                     if (value < (UV)IV_MAX)
2283                         return (IV)value;
2284                 }
2285             }
2286             if (!numtype) {
2287                 if (ckWARN(WARN_NUMERIC))
2288                     not_a_number(sv);
2289             }
2290             return I_V(Atof(SvPVX_const(sv)));
2291         }
2292         if (SvROK(sv)) {
2293             goto return_rok;
2294         }
2295         assert(SvTYPE(sv) >= SVt_PVMG);
2296         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2297     } else if (SvTHINKFIRST(sv)) {
2298         if (SvROK(sv)) {
2299         return_rok:
2300             if (SvAMAGIC(sv)) {
2301                 SV * tmpstr;
2302                 if (flags & SV_SKIP_OVERLOAD)
2303                     return 0;
2304                 tmpstr = AMG_CALLunary(sv, numer_amg);
2305                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2306                     return SvIV(tmpstr);
2307                 }
2308             }
2309             return PTR2IV(SvRV(sv));
2310         }
2311         if (SvIsCOW(sv)) {
2312             sv_force_normal_flags(sv, 0);
2313         }
2314         if (SvREADONLY(sv) && !SvOK(sv)) {
2315             if (ckWARN(WARN_UNINITIALIZED))
2316                 report_uninit(sv);
2317             return 0;
2318         }
2319     }
2320     if (!SvIOKp(sv)) {
2321         if (S_sv_2iuv_common(aTHX_ sv))
2322             return 0;
2323     }
2324     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2325         PTR2UV(sv),SvIVX(sv)));
2326     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2327 }
2328
2329 /*
2330 =for apidoc sv_2uv_flags
2331
2332 Return the unsigned integer value of an SV, doing any necessary string
2333 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2334 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2335
2336 =cut
2337 */
2338
2339 UV
2340 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2341 {
2342     dVAR;
2343     if (!sv)
2344         return 0;
2345     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2346         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2347            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  */
2348         if (flags & SV_GMAGIC)
2349             mg_get(sv);
2350         if (SvIOKp(sv))
2351             return SvUVX(sv);
2352         if (SvNOKp(sv))
2353             return U_V(SvNVX(sv));
2354         if (SvPOKp(sv) && SvLEN(sv)) {
2355             UV value;
2356             const int numtype
2357                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2358
2359             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2360                 == IS_NUMBER_IN_UV) {
2361                 /* It's definitely an integer */
2362                 if (!(numtype & IS_NUMBER_NEG))
2363                     return value;
2364             }
2365             if (!numtype) {
2366                 if (ckWARN(WARN_NUMERIC))
2367                     not_a_number(sv);
2368             }
2369             return U_V(Atof(SvPVX_const(sv)));
2370         }
2371         if (SvROK(sv)) {
2372             goto return_rok;
2373         }
2374         assert(SvTYPE(sv) >= SVt_PVMG);
2375         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2376     } else if (SvTHINKFIRST(sv)) {
2377         if (SvROK(sv)) {
2378         return_rok:
2379             if (SvAMAGIC(sv)) {
2380                 SV *tmpstr;
2381                 if (flags & SV_SKIP_OVERLOAD)
2382                     return 0;
2383                 tmpstr = AMG_CALLunary(sv, numer_amg);
2384                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2385                     return SvUV(tmpstr);
2386                 }
2387             }
2388             return PTR2UV(SvRV(sv));
2389         }
2390         if (SvIsCOW(sv)) {
2391             sv_force_normal_flags(sv, 0);
2392         }
2393         if (SvREADONLY(sv) && !SvOK(sv)) {
2394             if (ckWARN(WARN_UNINITIALIZED))
2395                 report_uninit(sv);
2396             return 0;
2397         }
2398     }
2399     if (!SvIOKp(sv)) {
2400         if (S_sv_2iuv_common(aTHX_ sv))
2401             return 0;
2402     }
2403
2404     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2405                           PTR2UV(sv),SvUVX(sv)));
2406     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2407 }
2408
2409 /*
2410 =for apidoc sv_2nv_flags
2411
2412 Return the num value of an SV, doing any necessary string or integer
2413 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2414 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2415
2416 =cut
2417 */
2418
2419 NV
2420 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2421 {
2422     dVAR;
2423     if (!sv)
2424         return 0.0;
2425     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2426         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2427            the same flag bit as SVf_IVisUV, so must not let them cache NVs.  */
2428         if (flags & SV_GMAGIC)
2429             mg_get(sv);
2430         if (SvNOKp(sv))
2431             return SvNVX(sv);
2432         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2433             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2434                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2435                 not_a_number(sv);
2436             return Atof(SvPVX_const(sv));
2437         }
2438         if (SvIOKp(sv)) {
2439             if (SvIsUV(sv))
2440                 return (NV)SvUVX(sv);
2441             else
2442                 return (NV)SvIVX(sv);
2443         }
2444         if (SvROK(sv)) {
2445             goto return_rok;
2446         }
2447         assert(SvTYPE(sv) >= SVt_PVMG);
2448         /* This falls through to the report_uninit near the end of the
2449            function. */
2450     } else if (SvTHINKFIRST(sv)) {
2451         if (SvROK(sv)) {
2452         return_rok:
2453             if (SvAMAGIC(sv)) {
2454                 SV *tmpstr;
2455                 if (flags & SV_SKIP_OVERLOAD)
2456                     return 0;
2457                 tmpstr = AMG_CALLunary(sv, numer_amg);
2458                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2459                     return SvNV(tmpstr);
2460                 }
2461             }
2462             return PTR2NV(SvRV(sv));
2463         }
2464         if (SvIsCOW(sv)) {
2465             sv_force_normal_flags(sv, 0);
2466         }
2467         if (SvREADONLY(sv) && !SvOK(sv)) {
2468             if (ckWARN(WARN_UNINITIALIZED))
2469                 report_uninit(sv);
2470             return 0.0;
2471         }
2472     }
2473     if (SvTYPE(sv) < SVt_NV) {
2474         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2475         sv_upgrade(sv, SVt_NV);
2476 #ifdef USE_LONG_DOUBLE
2477         DEBUG_c({
2478             STORE_NUMERIC_LOCAL_SET_STANDARD();
2479             PerlIO_printf(Perl_debug_log,
2480                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2481                           PTR2UV(sv), SvNVX(sv));
2482             RESTORE_NUMERIC_LOCAL();
2483         });
2484 #else
2485         DEBUG_c({
2486             STORE_NUMERIC_LOCAL_SET_STANDARD();
2487             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2488                           PTR2UV(sv), SvNVX(sv));
2489             RESTORE_NUMERIC_LOCAL();
2490         });
2491 #endif
2492     }
2493     else if (SvTYPE(sv) < SVt_PVNV)
2494         sv_upgrade(sv, SVt_PVNV);
2495     if (SvNOKp(sv)) {
2496         return SvNVX(sv);
2497     }
2498     if (SvIOKp(sv)) {
2499         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2500 #ifdef NV_PRESERVES_UV
2501         if (SvIOK(sv))
2502             SvNOK_on(sv);
2503         else
2504             SvNOKp_on(sv);
2505 #else
2506         /* Only set the public NV OK flag if this NV preserves the IV  */
2507         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2508         if (SvIOK(sv) &&
2509             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2510                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2511             SvNOK_on(sv);
2512         else
2513             SvNOKp_on(sv);
2514 #endif
2515     }
2516     else if (SvPOKp(sv) && SvLEN(sv)) {
2517         UV value;
2518         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2519         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2520             not_a_number(sv);
2521 #ifdef NV_PRESERVES_UV
2522         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2523             == IS_NUMBER_IN_UV) {
2524             /* It's definitely an integer */
2525             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2526         } else
2527             SvNV_set(sv, Atof(SvPVX_const(sv)));
2528         if (numtype)
2529             SvNOK_on(sv);
2530         else
2531             SvNOKp_on(sv);
2532 #else
2533         SvNV_set(sv, Atof(SvPVX_const(sv)));
2534         /* Only set the public NV OK flag if this NV preserves the value in
2535            the PV at least as well as an IV/UV would.
2536            Not sure how to do this 100% reliably. */
2537         /* if that shift count is out of range then Configure's test is
2538            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2539            UV_BITS */
2540         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2541             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2542             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2543         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2544             /* Can't use strtol etc to convert this string, so don't try.
2545                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2546             SvNOK_on(sv);
2547         } else {
2548             /* value has been set.  It may not be precise.  */
2549             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2550                 /* 2s complement assumption for (UV)IV_MIN  */
2551                 SvNOK_on(sv); /* Integer is too negative.  */
2552             } else {
2553                 SvNOKp_on(sv);
2554                 SvIOKp_on(sv);
2555
2556                 if (numtype & IS_NUMBER_NEG) {
2557                     SvIV_set(sv, -(IV)value);
2558                 } else if (value <= (UV)IV_MAX) {
2559                     SvIV_set(sv, (IV)value);
2560                 } else {
2561                     SvUV_set(sv, value);
2562                     SvIsUV_on(sv);
2563                 }
2564
2565                 if (numtype & IS_NUMBER_NOT_INT) {
2566                     /* I believe that even if the original PV had decimals,
2567                        they are lost beyond the limit of the FP precision.
2568                        However, neither is canonical, so both only get p
2569                        flags.  NWC, 2000/11/25 */
2570                     /* Both already have p flags, so do nothing */
2571                 } else {
2572                     const NV nv = SvNVX(sv);
2573                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2574                         if (SvIVX(sv) == I_V(nv)) {
2575                             SvNOK_on(sv);
2576                         } else {
2577                             /* It had no "." so it must be integer.  */
2578                         }
2579                         SvIOK_on(sv);
2580                     } else {
2581                         /* between IV_MAX and NV(UV_MAX).
2582                            Could be slightly > UV_MAX */
2583
2584                         if (numtype & IS_NUMBER_NOT_INT) {
2585                             /* UV and NV both imprecise.  */
2586                         } else {
2587                             const UV nv_as_uv = U_V(nv);
2588
2589                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2590                                 SvNOK_on(sv);
2591                             }
2592                             SvIOK_on(sv);
2593                         }
2594                     }
2595                 }
2596             }
2597         }
2598         /* It might be more code efficient to go through the entire logic above
2599            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2600            gets complex and potentially buggy, so more programmer efficient
2601            to do it this way, by turning off the public flags:  */
2602         if (!numtype)
2603             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2604 #endif /* NV_PRESERVES_UV */
2605     }
2606     else  {
2607         if (isGV_with_GP(sv)) {
2608             glob_2number(MUTABLE_GV(sv));
2609             return 0.0;
2610         }
2611
2612         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2613             report_uninit(sv);
2614         assert (SvTYPE(sv) >= SVt_NV);
2615         /* Typically the caller expects that sv_any is not NULL now.  */
2616         /* XXX Ilya implies that this is a bug in callers that assume this
2617            and ideally should be fixed.  */
2618         return 0.0;
2619     }
2620 #if defined(USE_LONG_DOUBLE)
2621     DEBUG_c({
2622         STORE_NUMERIC_LOCAL_SET_STANDARD();
2623         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2624                       PTR2UV(sv), SvNVX(sv));
2625         RESTORE_NUMERIC_LOCAL();
2626     });
2627 #else
2628     DEBUG_c({
2629         STORE_NUMERIC_LOCAL_SET_STANDARD();
2630         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2631                       PTR2UV(sv), SvNVX(sv));
2632         RESTORE_NUMERIC_LOCAL();
2633     });
2634 #endif
2635     return SvNVX(sv);
2636 }
2637
2638 /*
2639 =for apidoc sv_2num
2640
2641 Return an SV with the numeric value of the source SV, doing any necessary
2642 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2643 access this function.
2644
2645 =cut
2646 */
2647
2648 SV *
2649 Perl_sv_2num(pTHX_ register SV *const sv)
2650 {
2651     PERL_ARGS_ASSERT_SV_2NUM;
2652
2653     if (!SvROK(sv))
2654         return sv;
2655     if (SvAMAGIC(sv)) {
2656         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2657         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2658         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2659             return sv_2num(tmpsv);
2660     }
2661     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2662 }
2663
2664 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2665  * UV as a string towards the end of buf, and return pointers to start and
2666  * end of it.
2667  *
2668  * We assume that buf is at least TYPE_CHARS(UV) long.
2669  */
2670
2671 static char *
2672 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2673 {
2674     char *ptr = buf + TYPE_CHARS(UV);
2675     char * const ebuf = ptr;
2676     int sign;
2677
2678     PERL_ARGS_ASSERT_UIV_2BUF;
2679
2680     if (is_uv)
2681         sign = 0;
2682     else if (iv >= 0) {
2683         uv = iv;
2684         sign = 0;
2685     } else {
2686         uv = -iv;
2687         sign = 1;
2688     }
2689     do {
2690         *--ptr = '0' + (char)(uv % 10);
2691     } while (uv /= 10);
2692     if (sign)
2693         *--ptr = '-';
2694     *peob = ebuf;
2695     return ptr;
2696 }
2697
2698 /*
2699 =for apidoc sv_2pv_flags
2700
2701 Returns a pointer to the string value of an SV, and sets *lp to its length.
2702 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2703 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2704 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2705
2706 =cut
2707 */
2708
2709 char *
2710 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2711 {
2712     dVAR;
2713     register char *s;
2714
2715     if (!sv) {
2716         if (lp)
2717             *lp = 0;
2718         return (char *)"";
2719     }
2720     if (SvGMAGICAL(sv)) {
2721         if (flags & SV_GMAGIC)
2722             mg_get(sv);
2723         if (SvPOKp(sv)) {
2724             if (lp)
2725                 *lp = SvCUR(sv);
2726             if (flags & SV_MUTABLE_RETURN)
2727                 return SvPVX_mutable(sv);
2728             if (flags & SV_CONST_RETURN)
2729                 return (char *)SvPVX_const(sv);
2730             return SvPVX(sv);
2731         }
2732         if (SvIOKp(sv) || SvNOKp(sv)) {
2733             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2734             STRLEN len;
2735
2736             if (SvIOKp(sv)) {
2737                 len = SvIsUV(sv)
2738                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2739                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2740             } else if(SvNVX(sv) == 0.0) {
2741                     tbuf[0] = '0';
2742                     tbuf[1] = 0;
2743                     len = 1;
2744             } else {
2745                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2746                 len = strlen(tbuf);
2747             }
2748             assert(!SvROK(sv));
2749             {
2750                 dVAR;
2751
2752                 SvUPGRADE(sv, SVt_PV);
2753                 if (lp)
2754                     *lp = len;
2755                 s = SvGROW_mutable(sv, len + 1);
2756                 SvCUR_set(sv, len);
2757                 SvPOKp_on(sv);
2758                 return (char*)memcpy(s, tbuf, len + 1);
2759             }
2760         }
2761         if (SvROK(sv)) {
2762             goto return_rok;
2763         }
2764         assert(SvTYPE(sv) >= SVt_PVMG);
2765         /* This falls through to the report_uninit near the end of the
2766            function. */
2767     } else if (SvTHINKFIRST(sv)) {
2768         if (SvROK(sv)) {
2769         return_rok:
2770             if (SvAMAGIC(sv)) {
2771                 SV *tmpstr;
2772                 if (flags & SV_SKIP_OVERLOAD)
2773                     return NULL;
2774                 tmpstr = AMG_CALLunary(sv, string_amg);
2775                 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2776                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2777                     /* Unwrap this:  */
2778                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2779                      */
2780
2781                     char *pv;
2782                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2783                         if (flags & SV_CONST_RETURN) {
2784                             pv = (char *) SvPVX_const(tmpstr);
2785                         } else {
2786                             pv = (flags & SV_MUTABLE_RETURN)
2787                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2788                         }
2789                         if (lp)
2790                             *lp = SvCUR(tmpstr);
2791                     } else {
2792                         pv = sv_2pv_flags(tmpstr, lp, flags);
2793                     }
2794                     if (SvUTF8(tmpstr))
2795                         SvUTF8_on(sv);
2796                     else
2797                         SvUTF8_off(sv);
2798                     return pv;
2799                 }
2800             }
2801             {
2802                 STRLEN len;
2803                 char *retval;
2804                 char *buffer;
2805                 SV *const referent = SvRV(sv);
2806
2807                 if (!referent) {
2808                     len = 7;
2809                     retval = buffer = savepvn("NULLREF", len);
2810                 } else if (SvTYPE(referent) == SVt_REGEXP) {
2811                     REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2812                     I32 seen_evals = 0;
2813
2814                     assert(re);
2815                         
2816                     /* If the regex is UTF-8 we want the containing scalar to
2817                        have an UTF-8 flag too */
2818                     if (RX_UTF8(re))
2819                         SvUTF8_on(sv);
2820                     else
2821                         SvUTF8_off(sv); 
2822
2823                     if ((seen_evals = RX_SEEN_EVALS(re)))
2824                         PL_reginterp_cnt += seen_evals;
2825
2826                     if (lp)
2827                         *lp = RX_WRAPLEN(re);
2828  
2829                     return RX_WRAPPED(re);
2830                 } else {
2831                     const char *const typestr = sv_reftype(referent, 0);
2832                     const STRLEN typelen = strlen(typestr);
2833                     UV addr = PTR2UV(referent);
2834                     const char *stashname = NULL;
2835                     STRLEN stashnamelen = 0; /* hush, gcc */
2836                     const char *buffer_end;
2837
2838                     if (SvOBJECT(referent)) {
2839                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2840
2841                         if (name) {
2842                             stashname = HEK_KEY(name);
2843                             stashnamelen = HEK_LEN(name);
2844
2845                             if (HEK_UTF8(name)) {
2846                                 SvUTF8_on(sv);
2847                             } else {
2848                                 SvUTF8_off(sv);
2849                             }
2850                         } else {
2851                             stashname = "__ANON__";
2852                             stashnamelen = 8;
2853                         }
2854                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2855                             + 2 * sizeof(UV) + 2 /* )\0 */;
2856                     } else {
2857                         len = typelen + 3 /* (0x */
2858                             + 2 * sizeof(UV) + 2 /* )\0 */;
2859                     }
2860
2861                     Newx(buffer, len, char);
2862                     buffer_end = retval = buffer + len;
2863
2864                     /* Working backwards  */
2865                     *--retval = '\0';
2866                     *--retval = ')';
2867                     do {
2868                         *--retval = PL_hexdigit[addr & 15];
2869                     } while (addr >>= 4);
2870                     *--retval = 'x';
2871                     *--retval = '0';
2872                     *--retval = '(';
2873
2874                     retval -= typelen;
2875                     memcpy(retval, typestr, typelen);
2876
2877                     if (stashname) {
2878                         *--retval = '=';
2879                         retval -= stashnamelen;
2880                         memcpy(retval, stashname, stashnamelen);
2881                     }
2882                     /* retval may not necessarily have reached the start of the
2883                        buffer here.  */
2884                     assert (retval >= buffer);
2885
2886                     len = buffer_end - retval - 1; /* -1 for that \0  */
2887                 }
2888                 if (lp)
2889                     *lp = len;
2890                 SAVEFREEPV(buffer);
2891                 return retval;
2892             }
2893         }
2894         if (SvREADONLY(sv) && !SvOK(sv)) {
2895             if (lp)
2896                 *lp = 0;
2897             if (flags & SV_UNDEF_RETURNS_NULL)
2898                 return NULL;
2899             if (ckWARN(WARN_UNINITIALIZED))
2900                 report_uninit(sv);
2901             return (char *)"";
2902         }
2903     }
2904     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2905         /* I'm assuming that if both IV and NV are equally valid then
2906            converting the IV is going to be more efficient */
2907         const U32 isUIOK = SvIsUV(sv);
2908         char buf[TYPE_CHARS(UV)];
2909         char *ebuf, *ptr;
2910         STRLEN len;
2911
2912         if (SvTYPE(sv) < SVt_PVIV)
2913             sv_upgrade(sv, SVt_PVIV);
2914         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2915         len = ebuf - ptr;
2916         /* inlined from sv_setpvn */
2917         s = SvGROW_mutable(sv, len + 1);
2918         Move(ptr, s, len, char);
2919         s += len;
2920         *s = '\0';
2921     }
2922     else if (SvNOKp(sv)) {
2923         if (SvTYPE(sv) < SVt_PVNV)
2924             sv_upgrade(sv, SVt_PVNV);
2925         if (SvNVX(sv) == 0.0) {
2926             s = SvGROW_mutable(sv, 2);
2927             *s++ = '0';
2928             *s = '\0';
2929         } else {
2930             dSAVE_ERRNO;
2931             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2932             s = SvGROW_mutable(sv, NV_DIG + 20);
2933             /* some Xenix systems wipe out errno here */
2934             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2935             RESTORE_ERRNO;
2936             while (*s) s++;
2937         }
2938 #ifdef hcx
2939         if (s[-1] == '.')
2940             *--s = '\0';
2941 #endif
2942     }
2943     else {
2944         if (isGV_with_GP(sv)) {
2945             GV *const gv = MUTABLE_GV(sv);
2946             SV *const buffer = sv_newmortal();
2947
2948             gv_efullname3(buffer, gv, "*");
2949
2950             assert(SvPOK(buffer));
2951             if (lp) {
2952                     *lp = SvCUR(buffer);
2953             }
2954             if ( SvUTF8(buffer) ) SvUTF8_on(sv);
2955             return SvPVX(buffer);
2956         }
2957
2958         if (lp)
2959             *lp = 0;
2960         if (flags & SV_UNDEF_RETURNS_NULL)
2961             return NULL;
2962         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2963             report_uninit(sv);
2964         if (SvTYPE(sv) < SVt_PV)
2965             /* Typically the caller expects that sv_any is not NULL now.  */
2966             sv_upgrade(sv, SVt_PV);
2967         return (char *)"";
2968     }
2969     {
2970         const STRLEN len = s - SvPVX_const(sv);
2971         if (lp) 
2972             *lp = len;
2973         SvCUR_set(sv, len);
2974     }
2975     SvPOK_on(sv);
2976     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2977                           PTR2UV(sv),SvPVX_const(sv)));
2978     if (flags & SV_CONST_RETURN)
2979         return (char *)SvPVX_const(sv);
2980     if (flags & SV_MUTABLE_RETURN)
2981         return SvPVX_mutable(sv);
2982     return SvPVX(sv);
2983 }
2984
2985 /*
2986 =for apidoc sv_copypv
2987
2988 Copies a stringified representation of the source SV into the
2989 destination SV.  Automatically performs any necessary mg_get and
2990 coercion of numeric values into strings.  Guaranteed to preserve
2991 UTF8 flag even from overloaded objects.  Similar in nature to
2992 sv_2pv[_flags] but operates directly on an SV instead of just the
2993 string.  Mostly uses sv_2pv_flags to do its work, except when that
2994 would lose the UTF-8'ness of the PV.
2995
2996 =cut
2997 */
2998
2999 void
3000 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3001 {
3002     STRLEN len;
3003     const char * const s = SvPV_const(ssv,len);
3004
3005     PERL_ARGS_ASSERT_SV_COPYPV;
3006
3007     sv_setpvn(dsv,s,len);
3008     if (SvUTF8(ssv))
3009         SvUTF8_on(dsv);
3010     else
3011         SvUTF8_off(dsv);
3012 }
3013
3014 /*
3015 =for apidoc sv_2pvbyte
3016
3017 Return a pointer to the byte-encoded representation of the SV, and set *lp
3018 to its length.  May cause the SV to be downgraded from UTF-8 as a
3019 side-effect.
3020
3021 Usually accessed via the C<SvPVbyte> macro.
3022
3023 =cut
3024 */
3025
3026 char *
3027 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3028 {
3029     PERL_ARGS_ASSERT_SV_2PVBYTE;
3030
3031     SvGETMAGIC(sv);
3032     sv_utf8_downgrade(sv,0);
3033     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3034 }
3035
3036 /*
3037 =for apidoc sv_2pvutf8
3038
3039 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3040 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3041
3042 Usually accessed via the C<SvPVutf8> macro.
3043
3044 =cut
3045 */
3046
3047 char *
3048 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3049 {
3050     PERL_ARGS_ASSERT_SV_2PVUTF8;
3051
3052     sv_utf8_upgrade(sv);
3053     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3054 }
3055
3056
3057 /*
3058 =for apidoc sv_2bool
3059
3060 This macro is only used by sv_true() or its macro equivalent, and only if
3061 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3062 It calls sv_2bool_flags with the SV_GMAGIC flag.
3063
3064 =for apidoc sv_2bool_flags
3065
3066 This function is only used by sv_true() and friends,  and only if
3067 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3068 contain SV_GMAGIC, then it does an mg_get() first.
3069
3070
3071 =cut
3072 */
3073
3074 bool
3075 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3076 {
3077     dVAR;
3078
3079     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3080
3081     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3082
3083     if (!SvOK(sv))
3084         return 0;
3085     if (SvROK(sv)) {
3086         if (SvAMAGIC(sv)) {
3087             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3088             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3089                 return cBOOL(SvTRUE(tmpsv));
3090         }
3091         return SvRV(sv) != 0;
3092     }
3093     if (SvPOKp(sv)) {
3094         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3095         if (Xpvtmp &&
3096                 (*sv->sv_u.svu_pv > '0' ||
3097                 Xpvtmp->xpv_cur > 1 ||
3098                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3099             return 1;
3100         else
3101             return 0;
3102     }
3103     else {
3104         if (SvIOKp(sv))
3105             return SvIVX(sv) != 0;
3106         else {
3107             if (SvNOKp(sv))
3108                 return SvNVX(sv) != 0.0;
3109             else {
3110                 if (isGV_with_GP(sv))
3111                     return TRUE;
3112                 else
3113                     return FALSE;
3114             }
3115         }
3116     }
3117 }
3118
3119 /*
3120 =for apidoc sv_utf8_upgrade
3121
3122 Converts the PV of an SV to its UTF-8-encoded form.
3123 Forces the SV to string form if it is not already.
3124 Will C<mg_get> on C<sv> if appropriate.
3125 Always sets the SvUTF8 flag to avoid future validity checks even
3126 if the whole string is the same in UTF-8 as not.
3127 Returns the number of bytes in the converted string
3128
3129 This is not as a general purpose byte encoding to Unicode interface:
3130 use the Encode extension for that.
3131
3132 =for apidoc sv_utf8_upgrade_nomg
3133
3134 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3135
3136 =for apidoc sv_utf8_upgrade_flags
3137
3138 Converts the PV of an SV to its UTF-8-encoded form.
3139 Forces the SV to string form if it is not already.
3140 Always sets the SvUTF8 flag to avoid future validity checks even
3141 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3142 will C<mg_get> on C<sv> if appropriate, else not.
3143 Returns the number of bytes in the converted string
3144 C<sv_utf8_upgrade> and
3145 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3146
3147 This is not as a general purpose byte encoding to Unicode interface:
3148 use the Encode extension for that.
3149
3150 =cut
3151
3152 The grow version is currently not externally documented.  It adds a parameter,
3153 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3154 have free after it upon return.  This allows the caller to reserve extra space
3155 that it intends to fill, to avoid extra grows.
3156
3157 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3158 which can be used to tell this function to not first check to see if there are
3159 any characters that are different in UTF-8 (variant characters) which would
3160 force it to allocate a new string to sv, but to assume there are.  Typically
3161 this flag is used by a routine that has already parsed the string to find that
3162 there are such characters, and passes this information on so that the work
3163 doesn't have to be repeated.
3164
3165 (One might think that the calling routine could pass in the position of the
3166 first such variant, so it wouldn't have to be found again.  But that is not the
3167 case, because typically when the caller is likely to use this flag, it won't be
3168 calling this routine unless it finds something that won't fit into a byte.
3169 Otherwise it tries to not upgrade and just use bytes.  But some things that
3170 do fit into a byte are variants in utf8, and the caller may not have been
3171 keeping track of these.)
3172
3173 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3174 isn't guaranteed due to having other routines do the work in some input cases,
3175 or if the input is already flagged as being in utf8.
3176
3177 The speed of this could perhaps be improved for many cases if someone wanted to
3178 write a fast function that counts the number of variant characters in a string,
3179 especially if it could return the position of the first one.
3180
3181 */
3182
3183 STRLEN
3184 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3185 {
3186     dVAR;
3187
3188     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3189
3190     if (sv == &PL_sv_undef)
3191         return 0;
3192     if (!SvPOK(sv)) {
3193         STRLEN len = 0;
3194         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3195             (void) sv_2pv_flags(sv,&len, flags);
3196             if (SvUTF8(sv)) {
3197                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3198                 return len;
3199             }
3200         } else {
3201             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3202         }
3203     }
3204
3205     if (SvUTF8(sv)) {
3206         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3207         return SvCUR(sv);
3208     }
3209
3210     if (SvIsCOW(sv)) {
3211         sv_force_normal_flags(sv, 0);
3212     }
3213
3214     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3215         sv_recode_to_utf8(sv, PL_encoding);
3216         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3217         return SvCUR(sv);
3218     }
3219
3220     if (SvCUR(sv) == 0) {
3221         if (extra) SvGROW(sv, extra);
3222     } else { /* Assume Latin-1/EBCDIC */
3223         /* This function could be much more efficient if we
3224          * had a FLAG in SVs to signal if there are any variant
3225          * chars in the PV.  Given that there isn't such a flag
3226          * make the loop as fast as possible (although there are certainly ways
3227          * to speed this up, eg. through vectorization) */
3228         U8 * s = (U8 *) SvPVX_const(sv);
3229         U8 * e = (U8 *) SvEND(sv);
3230         U8 *t = s;
3231         STRLEN two_byte_count = 0;
3232         
3233         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3234
3235         /* See if really will need to convert to utf8.  We mustn't rely on our
3236          * incoming SV being well formed and having a trailing '\0', as certain
3237          * code in pp_formline can send us partially built SVs. */
3238
3239         while (t < e) {
3240             const U8 ch = *t++;
3241             if (NATIVE_IS_INVARIANT(ch)) continue;
3242
3243             t--;    /* t already incremented; re-point to first variant */
3244             two_byte_count = 1;
3245             goto must_be_utf8;
3246         }
3247
3248         /* utf8 conversion not needed because all are invariants.  Mark as
3249          * UTF-8 even if no variant - saves scanning loop */
3250         SvUTF8_on(sv);
3251         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3252         return SvCUR(sv);
3253
3254 must_be_utf8:
3255
3256         /* Here, the string should be converted to utf8, either because of an
3257          * input flag (two_byte_count = 0), or because a character that
3258          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3259          * the beginning of the string (if we didn't examine anything), or to
3260          * the first variant.  In either case, everything from s to t - 1 will
3261          * occupy only 1 byte each on output.
3262          *
3263          * There are two main ways to convert.  One is to create a new string
3264          * and go through the input starting from the beginning, appending each
3265          * converted value onto the new string as we go along.  It's probably
3266          * best to allocate enough space in the string for the worst possible
3267          * case rather than possibly running out of space and having to
3268          * reallocate and then copy what we've done so far.  Since everything
3269          * from s to t - 1 is invariant, the destination can be initialized
3270          * with these using a fast memory copy
3271          *
3272          * The other way is to figure out exactly how big the string should be
3273          * by parsing the entire input.  Then you don't have to make it big
3274          * enough to handle the worst possible case, and more importantly, if
3275          * the string you already have is large enough, you don't have to
3276          * allocate a new string, you can copy the last character in the input
3277          * string to the final position(s) that will be occupied by the
3278          * converted string and go backwards, stopping at t, since everything
3279          * before that is invariant.
3280          *
3281          * There are advantages and disadvantages to each method.
3282          *
3283          * In the first method, we can allocate a new string, do the memory
3284          * copy from the s to t - 1, and then proceed through the rest of the
3285          * string byte-by-byte.
3286          *
3287          * In the second method, we proceed through the rest of the input
3288          * string just calculating how big the converted string will be.  Then
3289          * there are two cases:
3290          *  1)  if the string has enough extra space to handle the converted
3291          *      value.  We go backwards through the string, converting until we
3292          *      get to the position we are at now, and then stop.  If this
3293          *      position is far enough along in the string, this method is
3294          *      faster than the other method.  If the memory copy were the same
3295          *      speed as the byte-by-byte loop, that position would be about
3296          *      half-way, as at the half-way mark, parsing to the end and back
3297          *      is one complete string's parse, the same amount as starting
3298          *      over and going all the way through.  Actually, it would be
3299          *      somewhat less than half-way, as it's faster to just count bytes
3300          *      than to also copy, and we don't have the overhead of allocating
3301          *      a new string, changing the scalar to use it, and freeing the
3302          *      existing one.  But if the memory copy is fast, the break-even
3303          *      point is somewhere after half way.  The counting loop could be
3304          *      sped up by vectorization, etc, to move the break-even point
3305          *      further towards the beginning.
3306          *  2)  if the string doesn't have enough space to handle the converted
3307          *      value.  A new string will have to be allocated, and one might
3308          *      as well, given that, start from the beginning doing the first
3309          *      method.  We've spent extra time parsing the string and in
3310          *      exchange all we've gotten is that we know precisely how big to
3311          *      make the new one.  Perl is more optimized for time than space,
3312          *      so this case is a loser.
3313          * So what I've decided to do is not use the 2nd method unless it is
3314          * guaranteed that a new string won't have to be allocated, assuming
3315          * the worst case.  I also decided not to put any more conditions on it
3316          * than this, for now.  It seems likely that, since the worst case is
3317          * twice as big as the unknown portion of the string (plus 1), we won't
3318          * be guaranteed enough space, causing us to go to the first method,
3319          * unless the string is short, or the first variant character is near
3320          * the end of it.  In either of these cases, it seems best to use the
3321          * 2nd method.  The only circumstance I can think of where this would
3322          * be really slower is if the string had once had much more data in it
3323          * than it does now, but there is still a substantial amount in it  */
3324
3325         {
3326             STRLEN invariant_head = t - s;
3327             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3328             if (SvLEN(sv) < size) {
3329
3330                 /* Here, have decided to allocate a new string */
3331
3332                 U8 *dst;
3333                 U8 *d;
3334
3335                 Newx(dst, size, U8);
3336
3337                 /* If no known invariants at the beginning of the input string,
3338                  * set so starts from there.  Otherwise, can use memory copy to
3339                  * get up to where we are now, and then start from here */
3340
3341                 if (invariant_head <= 0) {
3342                     d = dst;
3343                 } else {
3344                     Copy(s, dst, invariant_head, char);
3345                     d = dst + invariant_head;
3346                 }
3347
3348                 while (t < e) {
3349                     const UV uv = NATIVE8_TO_UNI(*t++);
3350                     if (UNI_IS_INVARIANT(uv))
3351                         *d++ = (U8)UNI_TO_NATIVE(uv);
3352                     else {
3353                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3354                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3355                     }
3356                 }
3357                 *d = '\0';
3358                 SvPV_free(sv); /* No longer using pre-existing string */
3359                 SvPV_set(sv, (char*)dst);
3360                 SvCUR_set(sv, d - dst);
3361                 SvLEN_set(sv, size);
3362             } else {
3363
3364                 /* Here, have decided to get the exact size of the string.
3365                  * Currently this happens only when we know that there is
3366                  * guaranteed enough space to fit the converted string, so
3367                  * don't have to worry about growing.  If two_byte_count is 0,
3368                  * then t points to the first byte of the string which hasn't
3369                  * been examined yet.  Otherwise two_byte_count is 1, and t
3370                  * points to the first byte in the string that will expand to
3371                  * two.  Depending on this, start examining at t or 1 after t.
3372                  * */
3373
3374                 U8 *d = t + two_byte_count;
3375
3376
3377                 /* Count up the remaining bytes that expand to two */
3378
3379                 while (d < e) {
3380                     const U8 chr = *d++;
3381                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3382                 }
3383
3384                 /* The string will expand by just the number of bytes that
3385                  * occupy two positions.  But we are one afterwards because of
3386                  * the increment just above.  This is the place to put the
3387                  * trailing NUL, and to set the length before we decrement */
3388
3389                 d += two_byte_count;
3390                 SvCUR_set(sv, d - s);
3391                 *d-- = '\0';
3392
3393
3394                 /* Having decremented d, it points to the position to put the
3395                  * very last byte of the expanded string.  Go backwards through
3396                  * the string, copying and expanding as we go, stopping when we
3397                  * get to the part that is invariant the rest of the way down */
3398
3399                 e--;
3400                 while (e >= t) {
3401                     const U8 ch = NATIVE8_TO_UNI(*e--);
3402                     if (UNI_IS_INVARIANT(ch)) {
3403                         *d-- = UNI_TO_NATIVE(ch);
3404                     } else {
3405                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3406                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3407                     }
3408                 }
3409             }
3410
3411             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3412                 /* Update pos. We do it at the end rather than during
3413                  * the upgrade, to avoid slowing down the common case
3414                  * (upgrade without pos) */
3415                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3416                 if (mg) {
3417                     I32 pos = mg->mg_len;
3418                     if (pos > 0 && (U32)pos > invariant_head) {
3419                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3420                         STRLEN n = (U32)pos - invariant_head;
3421                         while (n > 0) {
3422                             if (UTF8_IS_START(*d))
3423                                 d++;
3424                             d++;
3425                             n--;
3426                         }
3427                         mg->mg_len  = d - (U8*)SvPVX(sv);
3428                     }
3429                 }
3430                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3431                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3432             }
3433         }
3434     }
3435
3436     /* Mark as UTF-8 even if no variant - saves scanning loop */
3437     SvUTF8_on(sv);
3438     return SvCUR(sv);
3439 }
3440
3441 /*
3442 =for apidoc sv_utf8_downgrade
3443
3444 Attempts to convert the PV of an SV from characters to bytes.
3445 If the PV contains a character that cannot fit
3446 in a byte, this conversion will fail;
3447 in this case, either returns false or, if C<fail_ok> is not
3448 true, croaks.
3449
3450 This is not as a general purpose Unicode to byte encoding interface:
3451 use the Encode extension for that.
3452
3453 =cut
3454 */
3455
3456 bool
3457 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3458 {
3459     dVAR;
3460
3461     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3462
3463     if (SvPOKp(sv) && SvUTF8(sv)) {
3464         if (SvCUR(sv)) {
3465             U8 *s;
3466             STRLEN len;
3467             int mg_flags = SV_GMAGIC;
3468
3469             if (SvIsCOW(sv)) {
3470                 sv_force_normal_flags(sv, 0);
3471             }
3472             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3473                 /* update pos */
3474                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3475                 if (mg) {
3476                     I32 pos = mg->mg_len;
3477                     if (pos > 0) {
3478                         sv_pos_b2u(sv, &pos);
3479                         mg_flags = 0; /* sv_pos_b2u does get magic */
3480                         mg->mg_len  = pos;
3481                     }
3482                 }
3483                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3484                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3485
3486             }
3487             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3488
3489             if (!utf8_to_bytes(s, &len)) {
3490                 if (fail_ok)
3491                     return FALSE;
3492                 else {
3493                     if (PL_op)
3494                         Perl_croak(aTHX_ "Wide character in %s",
3495                                    OP_DESC(PL_op));
3496                     else
3497                         Perl_croak(aTHX_ "Wide character");
3498                 }
3499             }
3500             SvCUR_set(sv, len);
3501         }
3502     }
3503     SvUTF8_off(sv);
3504     return TRUE;
3505 }
3506
3507 /*
3508 =for apidoc sv_utf8_encode
3509
3510 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3511 flag off so that it looks like octets again.
3512
3513 =cut
3514 */
3515
3516 void
3517 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3518 {
3519     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3520
3521     if (SvIsCOW(sv)) {
3522         sv_force_normal_flags(sv, 0);
3523     }
3524     if (SvREADONLY(sv)) {
3525         Perl_croak_no_modify(aTHX);
3526     }
3527     (void) sv_utf8_upgrade(sv);
3528     SvUTF8_off(sv);
3529 }
3530
3531 /*
3532 =for apidoc sv_utf8_decode
3533
3534 If the PV of the SV is an octet sequence in UTF-8
3535 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3536 so that it looks like a character.  If the PV contains only single-byte
3537 characters, the C<SvUTF8> flag stays off.
3538 Scans PV for validity and returns false if the PV is invalid UTF-8.
3539
3540 =cut
3541 */
3542
3543 bool
3544 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3545 {
3546     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3547
3548     if (SvPOKp(sv)) {
3549         const U8 *start, *c;
3550         const U8 *e;
3551
3552         /* The octets may have got themselves encoded - get them back as
3553          * bytes
3554          */
3555         if (!sv_utf8_downgrade(sv, TRUE))
3556             return FALSE;
3557
3558         /* it is actually just a matter of turning the utf8 flag on, but
3559          * we want to make sure everything inside is valid utf8 first.
3560          */
3561         c = start = (const U8 *) SvPVX_const(sv);
3562         if (!is_utf8_string(c, SvCUR(sv)+1))
3563             return FALSE;
3564         e = (const U8 *) SvEND(sv);
3565         while (c < e) {
3566             const U8 ch = *c++;
3567             if (!UTF8_IS_INVARIANT(ch)) {
3568                 SvUTF8_on(sv);
3569                 break;
3570             }
3571         }
3572         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3573             /* adjust pos to the start of a UTF8 char sequence */
3574             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3575             if (mg) {
3576                 I32 pos = mg->mg_len;
3577                 if (pos > 0) {
3578                     for (c = start + pos; c > start; c--) {
3579                         if (UTF8_IS_START(*c))
3580                             break;
3581                     }
3582                     mg->mg_len  = c - start;
3583                 }
3584             }
3585             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3586                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3587         }
3588     }
3589     return TRUE;
3590 }
3591
3592 /*
3593 =for apidoc sv_setsv
3594
3595 Copies the contents of the source SV C<ssv> into the destination SV
3596 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3597 function if the source SV needs to be reused.  Does not handle 'set' magic.
3598 Loosely speaking, it performs a copy-by-value, obliterating any previous
3599 content of the destination.
3600
3601 You probably want to use one of the assortment of wrappers, such as
3602 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3603 C<SvSetMagicSV_nosteal>.
3604
3605 =for apidoc sv_setsv_flags
3606
3607 Copies the contents of the source SV C<ssv> into the destination SV
3608 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3609 function if the source SV needs to be reused.  Does not handle 'set' magic.
3610 Loosely speaking, it performs a copy-by-value, obliterating any previous
3611 content of the destination.
3612 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3613 C<ssv> if appropriate, else not.  If the C<flags>
3614 parameter has the C<NOSTEAL> bit set then the
3615 buffers of temps will not be stolen.  <sv_setsv>
3616 and C<sv_setsv_nomg> are implemented in terms of this function.
3617
3618 You probably want to use one of the assortment of wrappers, such as
3619 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3620 C<SvSetMagicSV_nosteal>.
3621
3622 This is the primary function for copying scalars, and most other
3623 copy-ish functions and macros use this underneath.
3624
3625 =cut
3626 */
3627
3628 static void
3629 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3630 {
3631     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3632     HV *old_stash = NULL;
3633
3634     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3635
3636     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3637         const char * const name = GvNAME(sstr);
3638         const STRLEN len = GvNAMELEN(sstr);
3639         {
3640             if (dtype >= SVt_PV) {
3641                 SvPV_free(dstr);
3642                 SvPV_set(dstr, 0);
3643                 SvLEN_set(dstr, 0);
3644                 SvCUR_set(dstr, 0);
3645             }
3646             SvUPGRADE(dstr, SVt_PVGV);
3647             (void)SvOK_off(dstr);
3648             /* We have to turn this on here, even though we turn it off
3649                below, as GvSTASH will fail an assertion otherwise. */
3650             isGV_with_GP_on(dstr);
3651         }
3652         GvSTASH(dstr) = GvSTASH(sstr);
3653         if (GvSTASH(dstr))
3654             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3655         gv_name_set(MUTABLE_GV(dstr), name, len,
3656                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3657         SvFAKE_on(dstr);        /* can coerce to non-glob */
3658     }
3659
3660     if(GvGP(MUTABLE_GV(sstr))) {
3661         /* If source has method cache entry, clear it */
3662         if(GvCVGEN(sstr)) {
3663             SvREFCNT_dec(GvCV(sstr));
3664             GvCV_set(sstr, NULL);
3665             GvCVGEN(sstr) = 0;
3666         }
3667         /* If source has a real method, then a method is
3668            going to change */
3669         else if(
3670          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3671         ) {
3672             mro_changes = 1;
3673         }
3674     }
3675
3676     /* If dest already had a real method, that's a change as well */
3677     if(
3678         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3679      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3680     ) {
3681         mro_changes = 1;
3682     }
3683
3684     /* We don't need to check the name of the destination if it was not a
3685        glob to begin with. */
3686     if(dtype == SVt_PVGV) {
3687         const char * const name = GvNAME((const GV *)dstr);
3688         if(
3689             strEQ(name,"ISA")
3690          /* The stash may have been detached from the symbol table, so
3691             check its name. */
3692          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3693          && GvAV((const GV *)sstr)
3694         )
3695             mro_changes = 2;
3696         else {
3697             const STRLEN len = GvNAMELEN(dstr);
3698             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3699              || (len == 1 && name[0] == ':')) {
3700                 mro_changes = 3;
3701
3702                 /* Set aside the old stash, so we can reset isa caches on
3703                    its subclasses. */
3704                 if((old_stash = GvHV(dstr)))
3705                     /* Make sure we do not lose it early. */
3706                     SvREFCNT_inc_simple_void_NN(
3707                      sv_2mortal((SV *)old_stash)
3708                     );
3709             }
3710         }
3711     }
3712
3713     gp_free(MUTABLE_GV(dstr));
3714     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3715     (void)SvOK_off(dstr);
3716     isGV_with_GP_on(dstr);
3717     GvINTRO_off(dstr);          /* one-shot flag */
3718     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3719     if (SvTAINTED(sstr))
3720         SvTAINT(dstr);
3721     if (GvIMPORTED(dstr) != GVf_IMPORTED
3722         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3723         {
3724             GvIMPORTED_on(dstr);
3725         }
3726     GvMULTI_on(dstr);
3727     if(mro_changes == 2) {
3728         MAGIC *mg;
3729         SV * const sref = (SV *)GvAV((const GV *)dstr);
3730         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3731             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3732                 AV * const ary = newAV();
3733                 av_push(ary, mg->mg_obj); /* takes the refcount */
3734                 mg->mg_obj = (SV *)ary;
3735             }
3736             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3737         }
3738         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3739         mro_isa_changed_in(GvSTASH(dstr));
3740     }
3741     else if(mro_changes == 3) {
3742         HV * const stash = GvHV(dstr);
3743         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3744             mro_package_moved(
3745                 stash, old_stash,
3746                 (GV *)dstr, 0
3747             );
3748     }
3749     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3750     return;
3751 }
3752
3753 static void
3754 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3755 {
3756     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3757     SV *dref = NULL;
3758     const int intro = GvINTRO(dstr);
3759     SV **location;
3760     U8 import_flag = 0;
3761     const U32 stype = SvTYPE(sref);
3762
3763     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3764
3765     if (intro) {
3766         GvINTRO_off(dstr);      /* one-shot flag */
3767         GvLINE(dstr) = CopLINE(PL_curcop);
3768         GvEGV(dstr) = MUTABLE_GV(dstr);
3769     }
3770     GvMULTI_on(dstr);
3771     switch (stype) {
3772     case SVt_PVCV:
3773         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3774         import_flag = GVf_IMPORTED_CV;
3775         goto common;
3776     case SVt_PVHV:
3777         location = (SV **) &GvHV(dstr);
3778         import_flag = GVf_IMPORTED_HV;
3779         goto common;
3780     case SVt_PVAV:
3781         location = (SV **) &GvAV(dstr);
3782         import_flag = GVf_IMPORTED_AV;
3783         goto common;
3784     case SVt_PVIO:
3785         location = (SV **) &GvIOp(dstr);
3786         goto common;
3787     case SVt_PVFM:
3788         location = (SV **) &GvFORM(dstr);
3789         goto common;
3790     default:
3791         location = &GvSV(dstr);
3792         import_flag = GVf_IMPORTED_SV;
3793     common:
3794         if (intro) {
3795             if (stype == SVt_PVCV) {
3796                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3797                 if (GvCVGEN(dstr)) {
3798                     SvREFCNT_dec(GvCV(dstr));
3799                     GvCV_set(dstr, NULL);
3800                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3801                 }
3802             }
3803             SAVEGENERICSV(*location);
3804         }
3805         else
3806             dref = *location;
3807         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3808             CV* const cv = MUTABLE_CV(*location);
3809             if (cv) {
3810                 if (!GvCVGEN((const GV *)dstr) &&
3811                     (CvROOT(cv) || CvXSUB(cv)) &&
3812                     /* redundant check that avoids creating the extra SV
3813                        most of the time: */
3814                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3815                     {
3816                         SV * const new_const_sv =
3817                             CvCONST((const CV *)sref)
3818                                  ? cv_const_sv((const CV *)sref)
3819                                  : NULL;
3820                         report_redefined_cv(
3821                            sv_2mortal(Perl_newSVpvf(aTHX_
3822                                 "%"HEKf"::%"HEKf,
3823                                 HEKfARG(
3824                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3825                                 ),
3826                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3827                            )),
3828                            cv,
3829                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3830                         );
3831                     }
3832                 if (!intro)
3833                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3834                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3835                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3836                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3837             }
3838             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3839             GvASSUMECV_on(dstr);
3840             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3841         }
3842         *location = sref;
3843         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3844             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3845             GvFLAGS(dstr) |= import_flag;
3846         }
3847         if (stype == SVt_PVHV) {
3848             const char * const name = GvNAME((GV*)dstr);
3849             const STRLEN len = GvNAMELEN(dstr);
3850             if (
3851                 (
3852                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3853                 || (len == 1 && name[0] == ':')
3854                 )
3855              && (!dref || HvENAME_get(dref))
3856             ) {
3857                 mro_package_moved(
3858                     (HV *)sref, (HV *)dref,
3859                     (GV *)dstr, 0
3860                 );
3861             }
3862         }
3863         else if (
3864             stype == SVt_PVAV && sref != dref
3865          && strEQ(GvNAME((GV*)dstr), "ISA")
3866          /* The stash may have been detached from the symbol table, so
3867             check its name before doing anything. */
3868          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3869         ) {
3870             MAGIC *mg;
3871             MAGIC * const omg = dref && SvSMAGICAL(dref)
3872                                  ? mg_find(dref, PERL_MAGIC_isa)
3873                                  : NULL;
3874             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3875                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3876                     AV * const ary = newAV();
3877                     av_push(ary, mg->mg_obj); /* takes the refcount */
3878                     mg->mg_obj = (SV *)ary;
3879                 }
3880                 if (omg) {
3881                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3882                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3883                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3884                         while (items--)
3885                             av_push(
3886                              (AV *)mg->mg_obj,
3887                              SvREFCNT_inc_simple_NN(*svp++)
3888                             );
3889                     }
3890                     else
3891                         av_push(
3892                          (AV *)mg->mg_obj,
3893                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3894                         );
3895                 }
3896                 else
3897                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3898             }
3899             else
3900             {
3901                 sv_magic(
3902                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3903                 );
3904                 mg = mg_find(sref, PERL_MAGIC_isa);
3905             }
3906             /* Since the *ISA assignment could have affected more than
3907                one stash, don't call mro_isa_changed_in directly, but let
3908                magic_clearisa do it for us, as it already has the logic for
3909                dealing with globs vs arrays of globs. */
3910             assert(mg);
3911             Perl_magic_clearisa(aTHX_ NULL, mg);
3912         }
3913         break;
3914     }
3915     SvREFCNT_dec(dref);
3916     if (SvTAINTED(sstr))
3917         SvTAINT(dstr);
3918     return;
3919 }
3920
3921 void
3922 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3923 {
3924     dVAR;
3925     register U32 sflags;
3926     register int dtype;
3927     register svtype stype;
3928
3929     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3930
3931     if (sstr == dstr)
3932         return;
3933
3934     if (SvIS_FREED(dstr)) {
3935         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3936                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3937     }
3938     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3939     if (!sstr)
3940         sstr = &PL_sv_undef;
3941     if (SvIS_FREED(sstr)) {
3942         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3943                    (void*)sstr, (void*)dstr);
3944     }
3945     stype = SvTYPE(sstr);
3946     dtype = SvTYPE(dstr);
3947
3948     (void)SvAMAGIC_off(dstr);
3949     if ( SvVOK(dstr) )
3950     {
3951         /* need to nuke the magic */
3952         sv_unmagic(dstr, PERL_MAGIC_vstring);
3953     }
3954
3955     /* There's a lot of redundancy below but we're going for speed here */
3956
3957     switch (stype) {
3958     case SVt_NULL:
3959       undef_sstr:
3960         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3961             (void)SvOK_off(dstr);
3962             return;
3963         }
3964         break;
3965     case SVt_IV:
3966         if (SvIOK(sstr)) {
3967             switch (dtype) {
3968             case SVt_NULL:
3969                 sv_upgrade(dstr, SVt_IV);
3970                 break;
3971             case SVt_NV:
3972             case SVt_PV:
3973                 sv_upgrade(dstr, SVt_PVIV);
3974                 break;
3975             case SVt_PVGV:
3976             case SVt_PVLV:
3977                 goto end_of_first_switch;
3978             }
3979             (void)SvIOK_only(dstr);
3980             SvIV_set(dstr,  SvIVX(sstr));
3981             if (SvIsUV(sstr))
3982                 SvIsUV_on(dstr);
3983             /* SvTAINTED can only be true if the SV has taint magic, which in
3984                turn means that the SV type is PVMG (or greater). This is the
3985                case statement for SVt_IV, so this cannot be true (whatever gcov
3986                may say).  */
3987             assert(!SvTAINTED(sstr));
3988             return;
3989         }
3990         if (!SvROK(sstr))
3991             goto undef_sstr;
3992         if (dtype < SVt_PV && dtype != SVt_IV)
3993             sv_upgrade(dstr, SVt_IV);
3994         break;
3995
3996     case SVt_NV:
3997         if (SvNOK(sstr)) {
3998             switch (dtype) {
3999             case SVt_NULL:
4000             case SVt_IV:
4001                 sv_upgrade(dstr, SVt_NV);
4002                 break;
4003             case SVt_PV:
4004             case SVt_PVIV:
4005                 sv_upgrade(dstr, SVt_PVNV);
4006                 break;
4007             case SVt_PVGV:
4008             case SVt_PVLV:
4009                 goto end_of_first_switch;
4010             }
4011             SvNV_set(dstr, SvNVX(sstr));
4012             (void)SvNOK_only(dstr);
4013             /* SvTAINTED can only be true if the SV has taint magic, which in
4014                turn means that the SV type is PVMG (or greater). This is the
4015                case statement for SVt_NV, so this cannot be true (whatever gcov
4016                may say).  */
4017             assert(!SvTAINTED(sstr));
4018             return;
4019         }
4020         goto undef_sstr;
4021
4022     case SVt_PVFM:
4023 #ifdef PERL_OLD_COPY_ON_WRITE
4024         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4025             if (dtype < SVt_PVIV)
4026                 sv_upgrade(dstr, SVt_PVIV);
4027             break;
4028         }
4029         /* Fall through */
4030 #endif
4031     case SVt_PV:
4032         if (dtype < SVt_PV)
4033             sv_upgrade(dstr, SVt_PV);
4034         break;
4035     case SVt_PVIV:
4036         if (dtype < SVt_PVIV)
4037             sv_upgrade(dstr, SVt_PVIV);
4038         break;
4039     case SVt_PVNV:
4040         if (dtype < SVt_PVNV)
4041             sv_upgrade(dstr, SVt_PVNV);
4042         break;
4043     default:
4044         {
4045         const char * const type = sv_reftype(sstr,0);
4046         if (PL_op)
4047             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4048         else
4049             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4050         }
4051         break;
4052
4053     case SVt_REGEXP:
4054         if (dtype < SVt_REGEXP)
4055             sv_upgrade(dstr, SVt_REGEXP);
4056         break;
4057
4058         /* case SVt_BIND: */
4059     case SVt_PVLV:
4060     case SVt_PVGV:
4061     case SVt_PVMG:
4062         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4063             mg_get(sstr);
4064             if (SvTYPE(sstr) != stype)
4065                 stype = SvTYPE(sstr);
4066         }
4067         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4068                     glob_assign_glob(dstr, sstr, dtype);
4069                     return;
4070         }
4071         if (stype == SVt_PVLV)
4072             SvUPGRADE(dstr, SVt_PVNV);
4073         else
4074             SvUPGRADE(dstr, (svtype)stype);
4075     }
4076  end_of_first_switch:
4077
4078     /* dstr may have been upgraded.  */
4079     dtype = SvTYPE(dstr);
4080     sflags = SvFLAGS(sstr);
4081
4082     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
4083         /* Assigning to a subroutine sets the prototype.  */
4084         if (SvOK(sstr)) {
4085             STRLEN len;
4086             const char *const ptr = SvPV_const(sstr, len);
4087
4088             SvGROW(dstr, len + 1);
4089             Copy(ptr, SvPVX(dstr), len + 1, char);
4090             SvCUR_set(dstr, len);
4091             SvPOK_only(dstr);
4092             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4093             CvAUTOLOAD_off(dstr);
4094         } else {
4095             SvOK_off(dstr);
4096         }
4097     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4098         const char * const type = sv_reftype(dstr,0);
4099         if (PL_op)
4100             /* diag_listed_as: Cannot copy to %s */
4101             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4102         else
4103             Perl_croak(aTHX_ "Cannot copy to %s", type);
4104     } else if (sflags & SVf_ROK) {
4105         if (isGV_with_GP(dstr)
4106             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4107             sstr = SvRV(sstr);
4108             if (sstr == dstr) {
4109                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4110                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4111                 {
4112                     GvIMPORTED_on(dstr);
4113                 }
4114                 GvMULTI_on(dstr);
4115                 return;
4116             }
4117             glob_assign_glob(dstr, sstr, dtype);
4118             return;
4119         }
4120
4121         if (dtype >= SVt_PV) {
4122             if (isGV_with_GP(dstr)) {
4123                 glob_assign_ref(dstr, sstr);
4124                 return;
4125             }
4126             if (SvPVX_const(dstr)) {
4127                 SvPV_free(dstr);
4128                 SvLEN_set(dstr, 0);
4129                 SvCUR_set(dstr, 0);
4130             }
4131         }
4132         (void)SvOK_off(dstr);
4133         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4134         SvFLAGS(dstr) |= sflags & SVf_ROK;
4135         assert(!(sflags & SVp_NOK));
4136         assert(!(sflags & SVp_IOK));
4137         assert(!(sflags & SVf_NOK));
4138         assert(!(sflags & SVf_IOK));
4139     }
4140     else if (isGV_with_GP(dstr)) {
4141         if (!(sflags & SVf_OK)) {
4142             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4143                            "Undefined value assigned to typeglob");
4144         }
4145         else {
4146             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4147             if (dstr != (const SV *)gv) {
4148                 const char * const name = GvNAME((const GV *)dstr);
4149                 const STRLEN len = GvNAMELEN(dstr);
4150                 HV *old_stash = NULL;
4151                 bool reset_isa = FALSE;
4152                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4153                  || (len == 1 && name[0] == ':')) {
4154                     /* Set aside the old stash, so we can reset isa caches
4155                        on its subclasses. */
4156                     if((old_stash = GvHV(dstr))) {
4157                         /* Make sure we do not lose it early. */
4158                         SvREFCNT_inc_simple_void_NN(
4159                          sv_2mortal((SV *)old_stash)
4160                         );
4161                     }
4162                     reset_isa = TRUE;
4163                 }
4164
4165                 if (GvGP(dstr))
4166                     gp_free(MUTABLE_GV(dstr));
4167                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4168
4169                 if (reset_isa) {
4170                     HV * const stash = GvHV(dstr);
4171                     if(
4172                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4173                     )
4174                         mro_package_moved(
4175                          stash, old_stash,
4176                          (GV *)dstr, 0
4177                         );
4178                 }
4179             }
4180         }
4181     }
4182     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4183         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4184     }
4185     else if (sflags & SVp_POK) {
4186         bool isSwipe = 0;
4187
4188         /*
4189          * Check to see if we can just swipe the string.  If so, it's a
4190          * possible small lose on short strings, but a big win on long ones.
4191          * It might even be a win on short strings if SvPVX_const(dstr)
4192          * has to be allocated and SvPVX_const(sstr) has to be freed.
4193          * Likewise if we can set up COW rather than doing an actual copy, we
4194          * drop to the else clause, as the swipe code and the COW setup code
4195          * have much in common.
4196          */
4197
4198         /* Whichever path we take through the next code, we want this true,
4199            and doing it now facilitates the COW check.  */
4200         (void)SvPOK_only(dstr);
4201
4202         if (
4203             /* If we're already COW then this clause is not true, and if COW
4204                is allowed then we drop down to the else and make dest COW 
4205                with us.  If caller hasn't said that we're allowed to COW
4206                shared hash keys then we don't do the COW setup, even if the
4207                source scalar is a shared hash key scalar.  */
4208             (((flags & SV_COW_SHARED_HASH_KEYS)
4209                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4210                : 1 /* If making a COW copy is forbidden then the behaviour we
4211                        desire is as if the source SV isn't actually already
4212                        COW, even if it is.  So we act as if the source flags
4213                        are not COW, rather than actually testing them.  */
4214               )
4215 #ifndef PERL_OLD_COPY_ON_WRITE
4216              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4217                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4218                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4219                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4220                 but in turn, it's somewhat dead code, never expected to go
4221                 live, but more kept as a placeholder on how to do it better
4222                 in a newer implementation.  */
4223              /* If we are COW and dstr is a suitable target then we drop down
4224                 into the else and make dest a COW of us.  */
4225              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4226 #endif
4227              )
4228             &&
4229             !(isSwipe =
4230                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4231                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4232                  (!(flags & SV_NOSTEAL)) &&
4233                                         /* and we're allowed to steal temps */
4234                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4235                  SvLEN(sstr))             /* and really is a string */
4236 #ifdef PERL_OLD_COPY_ON_WRITE
4237             && ((flags & SV_COW_SHARED_HASH_KEYS)
4238                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4239                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4240                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4241                 : 1)
4242 #endif
4243             ) {
4244             /* Failed the swipe test, and it's not a shared hash key either.
4245                Have to copy the string.  */
4246             STRLEN len = SvCUR(sstr);
4247             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4248             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4249             SvCUR_set(dstr, len);
4250             *SvEND(dstr) = '\0';
4251         } else {
4252             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4253                be true in here.  */
4254             /* Either it's a shared hash key, or it's suitable for
4255                copy-on-write or we can swipe the string.  */
4256             if (DEBUG_C_TEST) {
4257                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4258                 sv_dump(sstr);
4259                 sv_dump(dstr);
4260             }
4261 #ifdef PERL_OLD_COPY_ON_WRITE
4262             if (!isSwipe) {
4263                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4264                     != (SVf_FAKE | SVf_READONLY)) {
4265                     SvREADONLY_on(sstr);
4266                     SvFAKE_on(sstr);
4267                     /* Make the source SV into a loop of 1.
4268                        (about to become 2) */
4269                     SV_COW_NEXT_SV_SET(sstr, sstr);
4270                 }
4271             }
4272 #endif
4273             /* Initial code is common.  */
4274             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4275                 SvPV_free(dstr);
4276             }
4277
4278             if (!isSwipe) {
4279                 /* making another shared SV.  */
4280                 STRLEN cur = SvCUR(sstr);
4281                 STRLEN len = SvLEN(sstr);
4282 #ifdef PERL_OLD_COPY_ON_WRITE
4283                 if (len) {
4284                     assert (SvTYPE(dstr) >= SVt_PVIV);
4285                     /* SvIsCOW_normal */
4286                     /* splice us in between source and next-after-source.  */
4287                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4288                     SV_COW_NEXT_SV_SET(sstr, dstr);
4289                     SvPV_set(dstr, SvPVX_mutable(sstr));
4290                 } else
4291 #endif
4292                 {
4293                     /* SvIsCOW_shared_hash */
4294                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4295                                           "Copy on write: Sharing hash\n"));
4296
4297                     assert (SvTYPE(dstr) >= SVt_PV);
4298                     SvPV_set(dstr,
4299                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4300                 }
4301                 SvLEN_set(dstr, len);
4302                 SvCUR_set(dstr, cur);
4303                 SvREADONLY_on(dstr);
4304                 SvFAKE_on(dstr);
4305             }
4306             else
4307                 {       /* Passes the swipe test.  */
4308                 SvPV_set(dstr, SvPVX_mutable(sstr));
4309                 SvLEN_set(dstr, SvLEN(sstr));
4310                 SvCUR_set(dstr, SvCUR(sstr));
4311
4312                 SvTEMP_off(dstr);
4313                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4314                 SvPV_set(sstr, NULL);
4315                 SvLEN_set(sstr, 0);
4316                 SvCUR_set(sstr, 0);
4317                 SvTEMP_off(sstr);
4318             }
4319         }
4320         if (sflags & SVp_NOK) {
4321             SvNV_set(dstr, SvNVX(sstr));
4322         }
4323         if (sflags & SVp_IOK) {
4324             SvIV_set(dstr, SvIVX(sstr));
4325             /* Must do this otherwise some other overloaded use of 0x80000000
4326                gets confused. I guess SVpbm_VALID */
4327             if (sflags & SVf_IVisUV)
4328                 SvIsUV_on(dstr);
4329         }
4330         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4331         {
4332             const MAGIC * const smg = SvVSTRING_mg(sstr);
4333             if (smg) {
4334                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4335                          smg->mg_ptr, smg->mg_len);
4336                 SvRMAGICAL_on(dstr);
4337             }
4338         }
4339     }
4340     else if (sflags & (SVp_IOK|SVp_NOK)) {
4341         (void)SvOK_off(dstr);
4342         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4343         if (sflags & SVp_IOK) {
4344             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4345             SvIV_set(dstr, SvIVX(sstr));
4346         }
4347         if (sflags & SVp_NOK) {
4348             SvNV_set(dstr, SvNVX(sstr));
4349         }
4350     }
4351     else {
4352         if (isGV_with_GP(sstr)) {
4353             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4354         }
4355         else
4356             (void)SvOK_off(dstr);
4357     }
4358     if (SvTAINTED(sstr))
4359         SvTAINT(dstr);
4360 }
4361
4362 /*
4363 =for apidoc sv_setsv_mg
4364
4365 Like C<sv_setsv>, but also handles 'set' magic.
4366
4367 =cut
4368 */
4369
4370 void
4371 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4372 {
4373     PERL_ARGS_ASSERT_SV_SETSV_MG;
4374
4375     sv_setsv(dstr,sstr);
4376     SvSETMAGIC(dstr);
4377 }
4378
4379 #ifdef PERL_OLD_COPY_ON_WRITE
4380 SV *
4381 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4382 {
4383     STRLEN cur = SvCUR(sstr);
4384     STRLEN len = SvLEN(sstr);
4385     register char *new_pv;
4386
4387     PERL_ARGS_ASSERT_SV_SETSV_COW;
4388
4389     if (DEBUG_C_TEST) {
4390         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4391                       (void*)sstr, (void*)dstr);
4392         sv_dump(sstr);
4393         if (dstr)
4394                     sv_dump(dstr);
4395     }
4396
4397     if (dstr) {
4398         if (SvTHINKFIRST(dstr))
4399             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4400         else if (SvPVX_const(dstr))
4401             Safefree(SvPVX_const(dstr));
4402     }
4403     else
4404         new_SV(dstr);
4405     SvUPGRADE(dstr, SVt_PVIV);
4406
4407     assert (SvPOK(sstr));
4408     assert (SvPOKp(sstr));
4409     assert (!SvIOK(sstr));
4410     assert (!SvIOKp(sstr));
4411     assert (!SvNOK(sstr));
4412     assert (!SvNOKp(sstr));
4413
4414     if (SvIsCOW(sstr)) {
4415
4416         if (SvLEN(sstr) == 0) {
4417             /* source is a COW shared hash key.  */
4418             DEBUG_C(PerlIO_printf(Perl_debug_log,
4419                                   "Fast copy on write: Sharing hash\n"));
4420             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4421             goto common_exit;
4422         }
4423         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4424     } else {
4425         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4426         SvUPGRADE(sstr, SVt_PVIV);
4427         SvREADONLY_on(sstr);
4428         SvFAKE_on(sstr);
4429         DEBUG_C(PerlIO_printf(Perl_debug_log,
4430                               "Fast copy on write: Converting sstr to COW\n"));
4431         SV_COW_NEXT_SV_SET(dstr, sstr);
4432     }
4433     SV_COW_NEXT_SV_SET(sstr, dstr);
4434     new_pv = SvPVX_mutable(sstr);
4435
4436   common_exit:
4437     SvPV_set(dstr, new_pv);
4438     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4439     if (SvUTF8(sstr))
4440         SvUTF8_on(dstr);
4441     SvLEN_set(dstr, len);
4442     SvCUR_set(dstr, cur);
4443     if (DEBUG_C_TEST) {
4444         sv_dump(dstr);
4445     }
4446     return dstr;
4447 }
4448 #endif
4449
4450 /*
4451 =for apidoc sv_setpvn
4452
4453 Copies a string into an SV.  The C<len> parameter indicates the number of
4454 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4455 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4456
4457 =cut
4458 */
4459
4460 void
4461 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4462 {
4463     dVAR;
4464     register char *dptr;
4465
4466     PERL_ARGS_ASSERT_SV_SETPVN;
4467
4468     SV_CHECK_THINKFIRST_COW_DROP(sv);
4469     if (!ptr) {
4470         (void)SvOK_off(sv);
4471         return;
4472     }
4473     else {
4474         /* len is STRLEN which is unsigned, need to copy to signed */
4475         const IV iv = len;
4476         if (iv < 0)
4477             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4478     }
4479     SvUPGRADE(sv, SVt_PV);
4480
4481     dptr = SvGROW(sv, len + 1);
4482     Move(ptr,dptr,len,char);
4483     dptr[len] = '\0';
4484     SvCUR_set(sv, len);
4485     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4486     SvTAINT(sv);
4487     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4488 }
4489
4490 /*
4491 =for apidoc sv_setpvn_mg
4492
4493 Like C<sv_setpvn>, but also handles 'set' magic.
4494
4495 =cut
4496 */
4497
4498 void
4499 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4500 {
4501     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4502
4503     sv_setpvn(sv,ptr,len);
4504     SvSETMAGIC(sv);
4505 }
4506
4507 /*
4508 =for apidoc sv_setpv
4509
4510 Copies a string into an SV.  The string must be null-terminated.  Does not
4511 handle 'set' magic.  See C<sv_setpv_mg>.
4512
4513 =cut
4514 */
4515
4516 void
4517 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4518 {
4519     dVAR;
4520     register STRLEN len;
4521
4522     PERL_ARGS_ASSERT_SV_SETPV;
4523
4524     SV_CHECK_THINKFIRST_COW_DROP(sv);
4525     if (!ptr) {
4526         (void)SvOK_off(sv);
4527         return;
4528     }
4529     len = strlen(ptr);
4530     SvUPGRADE(sv, SVt_PV);
4531
4532     SvGROW(sv, len + 1);
4533     Move(ptr,SvPVX(sv),len+1,char);
4534     SvCUR_set(sv, len);
4535     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4536     SvTAINT(sv);
4537     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4538 }
4539
4540 /*
4541 =for apidoc sv_setpv_mg
4542
4543 Like C<sv_setpv>, but also handles 'set' magic.
4544
4545 =cut
4546 */
4547
4548 void
4549 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4550 {
4551     PERL_ARGS_ASSERT_SV_SETPV_MG;
4552
4553     sv_setpv(sv,ptr);
4554     SvSETMAGIC(sv);
4555 }
4556
4557 void
4558 Perl_sv_sethek(pTHX_ register SV *const sv, const HEK *const hek)
4559 {
4560     dVAR;
4561
4562     PERL_ARGS_ASSERT_SV_SETHEK;
4563
4564     if (!hek) {
4565         return;
4566     }
4567
4568     if (HEK_LEN(hek) == HEf_SVKEY) {
4569         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4570         return;
4571     } else {
4572         const int flags = HEK_FLAGS(hek);
4573         if (flags & HVhek_WASUTF8) {
4574             STRLEN utf8_len = HEK_LEN(hek);
4575             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4576             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4577             SvUTF8_on(sv);
4578             return;
4579         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
4580             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4581             if (HEK_UTF8(hek))
4582                 SvUTF8_on(sv);
4583             else SvUTF8_off(sv);
4584             return;
4585         }
4586         {
4587             SV_CHECK_THINKFIRST_COW_DROP(sv);
4588             SvUPGRADE(sv, SVt_PV);
4589             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4590             SvCUR_set(sv, HEK_LEN(hek));
4591             SvLEN_set(sv, 0);
4592             SvREADONLY_on(sv);
4593             SvFAKE_on(sv);
4594             SvPOK_on(sv);
4595             if (HEK_UTF8(hek))
4596                 SvUTF8_on(sv);
4597             else SvUTF8_off(sv);
4598             return;
4599         }
4600     }
4601 }
4602
4603
4604 /*
4605 =for apidoc sv_usepvn_flags
4606
4607 Tells an SV to use C<ptr> to find its string value.  Normally the
4608 string is stored inside the SV but sv_usepvn allows the SV to use an
4609 outside string.  The C<ptr> should point to memory that was allocated
4610 by C<malloc>.  It must be the start of a mallocked block
4611 of memory, and not a pointer to the middle of it.  The
4612 string length, C<len>, must be supplied.  By default
4613 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4614 so that pointer should not be freed or used by the programmer after
4615 giving it to sv_usepvn, and neither should any pointers from "behind"
4616 that pointer (e.g. ptr + 1) be used.
4617
4618 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4619 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4620 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4621 C<len>, and already meets the requirements for storing in C<SvPVX>).
4622
4623 =cut
4624 */
4625
4626 void
4627 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4628 {
4629     dVAR;
4630     STRLEN allocate;
4631
4632     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4633
4634     SV_CHECK_THINKFIRST_COW_DROP(sv);
4635     SvUPGRADE(sv, SVt_PV);
4636     if (!ptr) {
4637         (void)SvOK_off(sv);
4638         if (flags & SV_SMAGIC)
4639             SvSETMAGIC(sv);
4640         return;
4641     }
4642     if (SvPVX_const(sv))
4643         SvPV_free(sv);
4644
4645 #ifdef DEBUGGING
4646     if (flags & SV_HAS_TRAILING_NUL)
4647         assert(ptr[len] == '\0');
4648 #endif
4649
4650     allocate = (flags & SV_HAS_TRAILING_NUL)
4651         ? len + 1 :
4652 #ifdef Perl_safesysmalloc_size
4653         len + 1;
4654 #else 
4655         PERL_STRLEN_ROUNDUP(len + 1);
4656 #endif
4657     if (flags & SV_HAS_TRAILING_NUL) {
4658         /* It's long enough - do nothing.
4659            Specifically Perl_newCONSTSUB is relying on this.  */
4660     } else {
4661 #ifdef DEBUGGING
4662         /* Force a move to shake out bugs in callers.  */
4663         char *new_ptr = (char*)safemalloc(allocate);
4664         Copy(ptr, new_ptr, len, char);
4665         PoisonFree(ptr,len,char);
4666         Safefree(ptr);
4667         ptr = new_ptr;
4668 #else
4669         ptr = (char*) saferealloc (ptr, allocate);
4670 #endif
4671     }
4672 #ifdef Perl_safesysmalloc_size
4673     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4674 #else
4675     SvLEN_set(sv, allocate);
4676 #endif
4677     SvCUR_set(sv, len);
4678     SvPV_set(sv, ptr);
4679     if (!(flags & SV_HAS_TRAILING_NUL)) {
4680         ptr[len] = '\0';
4681     }
4682     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4683     SvTAINT(sv);
4684     if (flags & SV_SMAGIC)
4685         SvSETMAGIC(sv);
4686 }
4687
4688 #ifdef PERL_OLD_COPY_ON_WRITE
4689 /* Need to do this *after* making the SV normal, as we need the buffer
4690    pointer to remain valid until after we've copied it.  If we let go too early,
4691    another thread could invalidate it by unsharing last of the same hash key
4692    (which it can do by means other than releasing copy-on-write Svs)
4693    or by changing the other copy-on-write SVs in the loop.  */
4694 STATIC void
4695 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4696 {
4697     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4698
4699     { /* this SV was SvIsCOW_normal(sv) */
4700          /* we need to find the SV pointing to us.  */
4701         SV *current = SV_COW_NEXT_SV(after);
4702
4703         if (current == sv) {
4704             /* The SV we point to points back to us (there were only two of us
4705                in the loop.)
4706                Hence other SV is no longer copy on write either.  */
4707             SvFAKE_off(after);
4708             SvREADONLY_off(after);
4709         } else {
4710             /* We need to follow the pointers around the loop.  */
4711             SV *next;
4712             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4713                 assert (next);
4714                 current = next;
4715                  /* don't loop forever if the structure is bust, and we have
4716                     a pointer into a closed loop.  */
4717                 assert (current != after);
4718                 assert (SvPVX_const(current) == pvx);
4719             }
4720             /* Make the SV before us point to the SV after us.  */
4721             SV_COW_NEXT_SV_SET(current, after);
4722         }
4723     }
4724 }
4725 #endif
4726 /*
4727 =for apidoc sv_force_normal_flags
4728
4729 Undo various types of fakery on an SV: if the PV is a shared string, make
4730 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4731 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4732 we do the copy, and is also used locally.  If C<SV_COW_DROP_PV> is set
4733 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4734 SvPOK_off rather than making a copy.  (Used where this
4735 scalar is about to be set to some other value.)  In addition,
4736 the C<flags> parameter gets passed to C<sv_unref_flags()>
4737 when unreffing.  C<sv_force_normal> calls this function
4738 with flags set to 0.
4739
4740 =cut
4741 */
4742
4743 void
4744 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4745 {
4746     dVAR;
4747
4748     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4749
4750 #ifdef PERL_OLD_COPY_ON_WRITE
4751     if (SvREADONLY(sv)) {
4752         if (SvFAKE(sv)) {
4753             const char * const pvx = SvPVX_const(sv);
4754             const STRLEN len = SvLEN(sv);
4755             const STRLEN cur = SvCUR(sv);
4756             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4757                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4758                we'll fail an assertion.  */
4759             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4760
4761             if (DEBUG_C_TEST) {
4762                 PerlIO_printf(Perl_debug_log,
4763                               "Copy on write: Force normal %ld\n",
4764                               (long) flags);
4765                 sv_dump(sv);
4766             }
4767             SvFAKE_off(sv);
4768             SvREADONLY_off(sv);
4769             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4770             SvPV_set(sv, NULL);
4771             SvLEN_set(sv, 0);
4772             if (flags & SV_COW_DROP_PV) {
4773                 /* OK, so we don't need to copy our buffer.  */
4774                 SvPOK_off(sv);
4775             } else {
4776                 SvGROW(sv, cur + 1);
4777                 Move(pvx,SvPVX(sv),cur,char);
4778                 SvCUR_set(sv, cur);
4779                 *SvEND(sv) = '\0';
4780             }
4781             if (len) {
4782                 sv_release_COW(sv, pvx, next);
4783             } else {
4784                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4785             }
4786             if (DEBUG_C_TEST) {
4787                 sv_dump(sv);
4788             }
4789         }
4790         else if (IN_PERL_RUNTIME)
4791             Perl_croak_no_modify(aTHX);
4792     }
4793 #else
4794     if (SvREADONLY(sv)) {
4795         if (SvFAKE(sv) && !isGV_with_GP(sv)) {
4796             const char * const pvx = SvPVX_const(sv);
4797             const STRLEN len = SvCUR(sv);
4798             SvFAKE_off(sv);
4799             SvREADONLY_off(sv);
4800             SvPV_set(sv, NULL);
4801             SvLEN_set(sv, 0);
4802             if (flags & SV_COW_DROP_PV) {
4803                 /* OK, so we don't need to copy our buffer.  */
4804                 SvPOK_off(sv);
4805             } else {
4806                 SvGROW(sv, len + 1);
4807                 Move(pvx,SvPVX(sv),len,char);
4808                 *SvEND(sv) = '\0';
4809             }
4810             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4811         }
4812         else if (IN_PERL_RUNTIME)
4813             Perl_croak_no_modify(aTHX);
4814     }
4815 #endif
4816     if (SvROK(sv))
4817         sv_unref_flags(sv, flags);
4818     else if (SvFAKE(sv) && isGV_with_GP(sv))
4819         sv_unglob(sv, flags);
4820     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4821         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4822            to sv_unglob. We only need it here, so inline it.  */
4823         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4824         SV *const temp = newSV_type(new_type);
4825         void *const temp_p = SvANY(sv);
4826
4827         if (new_type == SVt_PVMG) {
4828             SvMAGIC_set(temp, SvMAGIC(sv));
4829             SvMAGIC_set(sv, NULL);
4830             SvSTASH_set(temp, SvSTASH(sv));
4831             SvSTASH_set(sv, NULL);
4832         }
4833         SvCUR_set(temp, SvCUR(sv));
4834         /* Remember that SvPVX is in the head, not the body. */
4835         if (SvLEN(temp)) {
4836             SvLEN_set(temp, SvLEN(sv));
4837             /* This signals "buffer is owned by someone else" in sv_clear,
4838                which is the least effort way to stop it freeing the buffer.
4839             */
4840             SvLEN_set(sv, SvLEN(sv)+1);
4841         } else {
4842             /* Their buffer is already owned by someone else. */
4843             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4844             SvLEN_set(temp, SvCUR(sv)+1);
4845         }
4846
4847         /* Now swap the rest of the bodies. */
4848
4849         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4850         SvFLAGS(sv) |= new_type;
4851         SvANY(sv) = SvANY(temp);
4852
4853         SvFLAGS(temp) &= ~(SVTYPEMASK);
4854         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4855         SvANY(temp) = temp_p;
4856
4857         SvREFCNT_dec(temp);
4858     }
4859 }
4860
4861 /*
4862 =for apidoc sv_chop
4863
4864 Efficient removal of characters from the beginning of the string buffer.
4865 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4866 the string buffer.  The C<ptr> becomes the first character of the adjusted
4867 string.  Uses the "OOK hack".
4868
4869 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4870 refer to the same chunk of data.
4871
4872 The unfortunate similarity of this function's name to that of Perl's C<chop>
4873 operator is strictly coincidental.  This function works from the left;
4874 C<chop> works from the right.
4875
4876 =cut
4877 */
4878
4879 void
4880 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4881 {
4882     STRLEN delta;
4883     STRLEN old_delta;
4884     U8 *p;
4885 #ifdef DEBUGGING
4886     const U8 *evacp;
4887     STRLEN evacn;
4888 #endif
4889     STRLEN max_delta;
4890
4891     PERL_ARGS_ASSERT_SV_CHOP;
4892
4893     if (!ptr || !SvPOKp(sv))
4894         return;
4895     delta = ptr - SvPVX_const(sv);
4896     if (!delta) {
4897         /* Nothing to do.  */
4898         return;
4899     }
4900     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4901     if (delta > max_delta)
4902         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4903                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4904     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
4905     SV_CHECK_THINKFIRST(sv);
4906
4907     if (!SvOOK(sv)) {
4908         if (!SvLEN(sv)) { /* make copy of shared string */
4909             const char *pvx = SvPVX_const(sv);
4910             const STRLEN len = SvCUR(sv);
4911             SvGROW(sv, len + 1);
4912             Move(pvx,SvPVX(sv),len,char);
4913             *SvEND(sv) = '\0';
4914         }
4915         SvOOK_on(sv);
4916         old_delta = 0;
4917     } else {
4918         SvOOK_offset(sv, old_delta);
4919     }
4920     SvLEN_set(sv, SvLEN(sv) - delta);
4921     SvCUR_set(sv, SvCUR(sv) - delta);
4922     SvPV_set(sv, SvPVX(sv) + delta);
4923
4924     p = (U8 *)SvPVX_const(sv);
4925
4926 #ifdef DEBUGGING
4927     /* how many bytes were evacuated?  we will fill them with sentinel
4928        bytes, except for the part holding the new offset of course. */
4929     evacn = delta;
4930     if (old_delta)
4931         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
4932     assert(evacn);
4933     assert(evacn <= delta + old_delta);
4934     evacp = p - evacn;
4935 #endif
4936
4937     delta += old_delta;
4938     assert(delta);
4939     if (delta < 0x100) {
4940         *--p = (U8) delta;
4941     } else {
4942         *--p = 0;
4943         p -= sizeof(STRLEN);
4944         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4945     }
4946
4947 #ifdef DEBUGGING
4948     /* Fill the preceding buffer with sentinals to verify that no-one is
4949        using it.  */
4950     while (p > evacp) {
4951         --p;
4952         *p = (U8)PTR2UV(p);
4953     }
4954 #endif
4955 }
4956
4957 /*
4958 =for apidoc sv_catpvn
4959
4960 Concatenates the string onto the end of the string which is in the SV.  The
4961 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4962 status set, then the bytes appended should be valid UTF-8.
4963 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4964
4965 =for apidoc sv_catpvn_flags
4966
4967 Concatenates the string onto the end of the string which is in the SV.  The
4968 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4969 status set, then the bytes appended should be valid UTF-8.
4970 If C<flags> has the C<SV_SMAGIC> bit set, will
4971 C<mg_set> on C<dsv> afterwards if appropriate.
4972 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4973 in terms of this function.
4974
4975 =cut
4976 */
4977
4978 void
4979 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4980 {
4981     dVAR;
4982     STRLEN dlen;
4983     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4984
4985     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4986     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
4987
4988     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
4989       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
4990          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
4991          dlen = SvCUR(dsv);
4992       }
4993       else SvGROW(dsv, dlen + slen + 1);
4994       if (sstr == dstr)
4995         sstr = SvPVX_const(dsv);
4996       Move(sstr, SvPVX(dsv) + dlen, slen, char);
4997       SvCUR_set(dsv, SvCUR(dsv) + slen);
4998     }
4999     else {
5000         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5001         const char * const send = sstr + slen;
5002         U8 *d;
5003
5004         /* Something this code does not account for, which I think is
5005            impossible; it would require the same pv to be treated as
5006            bytes *and* utf8, which would indicate a bug elsewhere. */
5007         assert(sstr != dstr);
5008
5009         SvGROW(dsv, dlen + slen * 2 + 1);
5010         d = (U8 *)SvPVX(dsv) + dlen;
5011
5012         while (sstr < send) {
5013             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5014             if (UNI_IS_INVARIANT(uv))
5015                 *d++ = (U8)UTF_TO_NATIVE(uv);
5016             else {
5017                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5018                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5019             }
5020         }
5021         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5022     }
5023     *SvEND(dsv) = '\0';
5024     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5025     SvTAINT(dsv);
5026     if (flags & SV_SMAGIC)
5027         SvSETMAGIC(dsv);
5028 }
5029
5030 /*
5031 =for apidoc sv_catsv
5032
5033 Concatenates the string from SV C<ssv> onto the end of the string in
5034 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
5035 not 'set' magic.  See C<sv_catsv_mg>.
5036
5037 =for apidoc sv_catsv_flags
5038
5039 Concatenates the string from SV C<ssv> onto the end of the string in
5040 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
5041 bit set, will C<mg_get> on the C<ssv>, if appropriate, before
5042 reading it.  If the C<flags> contain C<SV_SMAGIC>, C<mg_set> will be
5043 called on the modified SV afterward, if appropriate.  C<sv_catsv>
5044 and C<sv_catsv_nomg> are implemented in terms of this function.
5045
5046 =cut */
5047
5048 void
5049 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
5050 {
5051     dVAR;
5052  
5053     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5054
5055    if (ssv) {
5056         STRLEN slen;
5057         const char *spv = SvPV_flags_const(ssv, slen, flags);
5058         if (spv) {
5059             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
5060                 mg_get(dsv);
5061             sv_catpvn_flags(dsv, spv, slen,
5062                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5063         }
5064     }
5065     if (flags & SV_SMAGIC)
5066         SvSETMAGIC(dsv);
5067 }
5068
5069 /*
5070 =for apidoc sv_catpv
5071
5072 Concatenates the string onto the end of the string which is in the SV.
5073 If the SV has the UTF-8 status set, then the bytes appended should be
5074 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5075
5076 =cut */
5077
5078 void
5079 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
5080 {
5081     dVAR;
5082     register STRLEN len;
5083     STRLEN tlen;
5084     char *junk;
5085
5086     PERL_ARGS_ASSERT_SV_CATPV;
5087
5088     if (!ptr)
5089         return;
5090     junk = SvPV_force(sv, tlen);
5091     len = strlen(ptr);
5092     SvGROW(sv, tlen + len + 1);
5093     if (ptr == junk)
5094         ptr = SvPVX_const(sv);
5095     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5096     SvCUR_set(sv, SvCUR(sv) + len);
5097     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5098     SvTAINT(sv);
5099 }
5100
5101 /*
5102 =for apidoc sv_catpv_flags
5103
5104 Concatenates the string onto the end of the string which is in the SV.
5105 If the SV has the UTF-8 status set, then the bytes appended should
5106 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5107 on the modified SV if appropriate.
5108
5109 =cut
5110 */
5111
5112 void
5113 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5114 {
5115     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5116     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5117 }
5118
5119 /*
5120 =for apidoc sv_catpv_mg
5121
5122 Like C<sv_catpv>, but also handles 'set' magic.
5123
5124 =cut
5125 */
5126
5127 void
5128 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
5129 {
5130     PERL_ARGS_ASSERT_SV_CATPV_MG;
5131
5132     sv_catpv(sv,ptr);
5133     SvSETMAGIC(sv);
5134 }
5135
5136 /*
5137 =for apidoc newSV
5138
5139 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5140 bytes of preallocated string space the SV should have.  An extra byte for a
5141 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5142 space is allocated.)  The reference count for the new SV is set to 1.
5143
5144 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5145 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5146 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5147 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5148 modules supporting older perls.
5149
5150 =cut
5151 */
5152
5153 SV *
5154 Perl_newSV(pTHX_ const STRLEN len)
5155 {
5156     dVAR;
5157     register SV *sv;
5158
5159     new_SV(sv);
5160     if (len) {
5161         sv_upgrade(sv, SVt_PV);
5162         SvGROW(sv, len + 1);
5163     }
5164     return sv;
5165 }
5166 /*
5167 =for apidoc sv_magicext
5168
5169 Adds magic to an SV, upgrading it if necessary.  Applies the
5170 supplied vtable and returns a pointer to the magic added.
5171
5172 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5173 In particular, you can add magic to SvREADONLY SVs, and add more than
5174 one instance of the same 'how'.
5175
5176 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5177 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5178 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5179 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5180
5181 (This is now used as a subroutine by C<sv_magic>.)
5182
5183 =cut
5184 */
5185 MAGIC * 
5186 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5187                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5188 {
5189     dVAR;
5190     MAGIC* mg;
5191
5192     PERL_ARGS_ASSERT_SV_MAGICEXT;
5193
5194     SvUPGRADE(sv, SVt_PVMG);
5195     Newxz(mg, 1, MAGIC);
5196     mg->mg_moremagic = SvMAGIC(sv);
5197     SvMAGIC_set(sv, mg);
5198
5199     /* Sometimes a magic contains a reference loop, where the sv and
5200        object refer to each other.  To prevent a reference loop that
5201        would prevent such objects being freed, we look for such loops
5202        and if we find one we avoid incrementing the object refcount.
5203
5204        Note we cannot do this to avoid self-tie loops as intervening RV must
5205        have its REFCNT incremented to keep it in existence.
5206
5207     */
5208     if (!obj || obj == sv ||
5209         how == PERL_MAGIC_arylen ||
5210         how == PERL_MAGIC_symtab ||
5211         (SvTYPE(obj) == SVt_PVGV &&
5212             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5213              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5214              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5215     {
5216         mg->mg_obj = obj;
5217     }
5218     else {
5219         mg->mg_obj = SvREFCNT_inc_simple(obj);
5220         mg->mg_flags |= MGf_REFCOUNTED;
5221     }
5222
5223     /* Normal self-ties simply pass a null object, and instead of
5224        using mg_obj directly, use the SvTIED_obj macro to produce a
5225        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5226        with an RV obj pointing to the glob containing the PVIO.  In
5227        this case, to avoid a reference loop, we need to weaken the
5228        reference.
5229     */
5230
5231     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5232         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5233     {
5234       sv_rvweaken(obj);
5235     }
5236
5237     mg->mg_type = how;
5238     mg->mg_len = namlen;
5239     if (name) {
5240         if (namlen > 0)
5241             mg->mg_ptr = savepvn(name, namlen);
5242         else if (namlen == HEf_SVKEY) {
5243             /* Yes, this is casting away const. This is only for the case of
5244                HEf_SVKEY. I think we need to document this aberation of the
5245                constness of the API, rather than making name non-const, as
5246                that change propagating outwards a long way.  */
5247             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5248         } else
5249             mg->mg_ptr = (char *) name;
5250     }
5251     mg->mg_virtual = (MGVTBL *) vtable;
5252
5253     mg_magical(sv);
5254     if (SvGMAGICAL(sv))
5255         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5256     return mg;
5257 }
5258
5259 /*
5260 =for apidoc sv_magic
5261
5262 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5263 necessary, then adds a new magic item of type C<how> to the head of the
5264 magic list.
5265
5266 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5267 handling of the C<name> and C<namlen> arguments.
5268
5269 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5270 to add more than one instance of the same 'how'.
5271
5272 =cut
5273 */
5274
5275 void
5276 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5277              const char *const name, const I32 namlen)
5278 {
5279     dVAR;
5280     const MGVTBL *vtable;
5281     MAGIC* mg;
5282     unsigned int flags;
5283     unsigned int vtable_index;
5284
5285     PERL_ARGS_ASSERT_SV_MAGIC;
5286
5287     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5288         || ((flags = PL_magic_data[how]),
5289             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5290             > magic_vtable_max))
5291         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5292
5293     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5294        Useful for attaching extension internal data to perl vars.
5295        Note that multiple extensions may clash if magical scalars
5296        etc holding private data from one are passed to another. */
5297
5298     vtable = (vtable_index == magic_vtable_max)
5299         ? NULL : PL_magic_vtables + vtable_index;
5300
5301 #ifdef PERL_OLD_COPY_ON_WRITE
5302     if (SvIsCOW(sv))
5303         sv_force_normal_flags(sv, 0);
5304 #endif
5305     if (SvREADONLY(sv)) {
5306         if (
5307             /* its okay to attach magic to shared strings */
5308             (!SvFAKE(sv) || isGV_with_GP(sv))
5309
5310             && IN_PERL_RUNTIME
5311             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5312            )
5313         {
5314             Perl_croak_no_modify(aTHX);
5315         }
5316     }
5317     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5318         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5319             /* sv_magic() refuses to add a magic of the same 'how' as an
5320                existing one
5321              */
5322             if (how == PERL_MAGIC_taint) {
5323                 mg->mg_len |= 1;
5324                 /* Any scalar which already had taint magic on which someone
5325                    (erroneously?) did SvIOK_on() or similar will now be
5326                    incorrectly sporting public "OK" flags.  */
5327                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5328             }
5329             return;
5330         }
5331     }
5332
5333     /* Rest of work is done else where */
5334     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5335
5336     switch (how) {
5337     case PERL_MAGIC_taint:
5338         mg->mg_len = 1;
5339         break;
5340     case PERL_MAGIC_ext:
5341     case PERL_MAGIC_dbfile:
5342         SvRMAGICAL_on(sv);
5343         break;
5344     }
5345 }
5346
5347 static int
5348 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5349 {
5350     MAGIC* mg;
5351     MAGIC** mgp;
5352
5353     assert(flags <= 1);
5354
5355     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5356         return 0;
5357     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5358     for (mg = *mgp; mg; mg = *mgp) {
5359         const MGVTBL* const virt = mg->mg_virtual;
5360         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5361             *mgp = mg->mg_moremagic;
5362             if (virt && virt->svt_free)
5363                 virt->svt_free(aTHX_ sv, mg);
5364             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5365                 if (mg->mg_len > 0)
5366                     Safefree(mg->mg_ptr);
5367                 else if (mg->mg_len == HEf_SVKEY)
5368                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5369                 else if (mg->mg_type == PERL_MAGIC_utf8)
5370                     Safefree(mg->mg_ptr);
5371             }
5372             if (mg->mg_flags & MGf_REFCOUNTED)
5373                 SvREFCNT_dec(mg->mg_obj);
5374             Safefree(mg);
5375         }
5376         else
5377             mgp = &mg->mg_moremagic;
5378     }
5379     if (SvMAGIC(sv)) {
5380         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5381             mg_magical(sv);     /*    else fix the flags now */
5382     }
5383     else {
5384         SvMAGICAL_off(sv);
5385         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5386     }
5387     return 0;
5388 }
5389
5390 /*
5391 =for apidoc sv_unmagic
5392
5393 Removes all magic of type C<type> from an SV.
5394
5395 =cut
5396 */
5397
5398 int
5399 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5400 {
5401     PERL_ARGS_ASSERT_SV_UNMAGIC;
5402     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5403 }
5404
5405 /*
5406 =for apidoc sv_unmagicext
5407
5408 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5409
5410 =cut
5411 */
5412
5413 int
5414 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5415 {
5416     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5417     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5418 }
5419
5420 /*
5421 =for apidoc sv_rvweaken
5422
5423 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5424 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5425 push a back-reference to this RV onto the array of backreferences
5426 associated with that magic.  If the RV is magical, set magic will be
5427 called after the RV is cleared.
5428
5429 =cut
5430 */
5431
5432 SV *
5433 Perl_sv_rvweaken(pTHX_ SV *const sv)
5434 {
5435     SV *tsv;
5436
5437     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5438
5439     if (!SvOK(sv))  /* let undefs pass */
5440         return sv;
5441     if (!SvROK(sv))
5442         Perl_croak(aTHX_ "Can't weaken a nonreference");
5443     else if (SvWEAKREF(sv)) {
5444         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5445         return sv;
5446     }
5447     else if (SvREADONLY(sv)) croak_no_modify();
5448     tsv = SvRV(sv);
5449     Perl_sv_add_backref(aTHX_ tsv, sv);
5450     SvWEAKREF_on(sv);
5451     SvREFCNT_dec(tsv);
5452     return sv;
5453 }
5454
5455 /* Give tsv backref magic if it hasn't already got it, then push a
5456  * back-reference to sv onto the array associated with the backref magic.
5457  *
5458  * As an optimisation, if there's only one backref and it's not an AV,
5459  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5460  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5461  * active.)
5462  */
5463
5464 /* A discussion about the backreferences array and its refcount:
5465  *
5466  * The AV holding the backreferences is pointed to either as the mg_obj of
5467  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5468  * xhv_backreferences field. The array is created with a refcount
5469  * of 2. This means that if during global destruction the array gets
5470  * picked on before its parent to have its refcount decremented by the
5471  * random zapper, it won't actually be freed, meaning it's still there for
5472  * when its parent gets freed.
5473  *
5474  * When the parent SV is freed, the extra ref is killed by
5475  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5476  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5477  *
5478  * When a single backref SV is stored directly, it is not reference
5479  * counted.
5480  */
5481
5482 void
5483 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5484 {
5485     dVAR;
5486     SV **svp;
5487     AV *av = NULL;
5488     MAGIC *mg = NULL;
5489
5490     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5491
5492     /* find slot to store array or singleton backref */
5493
5494     if (SvTYPE(tsv) == SVt_PVHV) {
5495         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5496     } else {
5497         if (! ((mg =
5498             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5499         {
5500             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5501             mg = mg_find(tsv, PERL_MAGIC_backref);
5502         }
5503         svp = &(mg->mg_obj);
5504     }
5505
5506     /* create or retrieve the array */
5507
5508     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5509         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5510     ) {
5511         /* create array */
5512         av = newAV();
5513         AvREAL_off(av);
5514         SvREFCNT_inc_simple_void(av);
5515         /* av now has a refcnt of 2; see discussion above */
5516         if (*svp) {
5517             /* move single existing backref to the array */
5518             av_extend(av, 1);
5519             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5520         }
5521         *svp = (SV*)av;
5522         if (mg)
5523             mg->mg_flags |= MGf_REFCOUNTED;
5524     }
5525     else
5526         av = MUTABLE_AV(*svp);
5527
5528     if (!av) {
5529         /* optimisation: store single backref directly in HvAUX or mg_obj */
5530         *svp = sv;
5531         return;
5532     }
5533     /* push new backref */
5534     assert(SvTYPE(av) == SVt_PVAV);
5535     if (AvFILLp(av) >= AvMAX(av)) {
5536         av_extend(av, AvFILLp(av)+1);
5537     }
5538     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5539 }
5540
5541 /* delete a back-reference to ourselves from the backref magic associated
5542  * with the SV we point to.
5543  */
5544
5545 void
5546 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5547 {
5548     dVAR;
5549     SV **svp = NULL;
5550
5551     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5552
5553     if (SvTYPE(tsv) == SVt_PVHV) {
5554         if (SvOOK(tsv))
5555             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5556     }
5557     else {
5558         MAGIC *const mg
5559             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5560         svp =  mg ? &(mg->mg_obj) : NULL;
5561     }
5562
5563     if (!svp || !*svp)
5564         Perl_croak(aTHX_ "panic: del_backref");
5565
5566     if (SvTYPE(*svp) == SVt_PVAV) {
5567 #ifdef DEBUGGING
5568         int count = 1;
5569 #endif
5570         AV * const av = (AV*)*svp;
5571         SSize_t fill;
5572         assert(!SvIS_FREED(av));
5573         fill = AvFILLp(av);
5574         assert(fill > -1);
5575         svp = AvARRAY(av);
5576         /* for an SV with N weak references to it, if all those
5577          * weak refs are deleted, then sv_del_backref will be called
5578          * N times and O(N^2) compares will be done within the backref
5579          * array. To ameliorate this potential slowness, we:
5580          * 1) make sure this code is as tight as possible;
5581          * 2) when looking for SV, look for it at both the head and tail of the
5582          *    array first before searching the rest, since some create/destroy
5583          *    patterns will cause the backrefs to be freed in order.
5584          */
5585         if (*svp == sv) {
5586             AvARRAY(av)++;
5587             AvMAX(av)--;
5588         }
5589         else {
5590             SV **p = &svp[fill];
5591             SV *const topsv = *p;
5592             if (topsv != sv) {
5593 #ifdef DEBUGGING
5594                 count = 0;
5595 #endif
5596                 while (--p > svp) {
5597                     if (*p == sv) {
5598                         /* We weren't the last entry.
5599                            An unordered list has this property that you
5600                            can take the last element off the end to fill
5601                            the hole, and it's still an unordered list :-)
5602                         */
5603                         *p = topsv;
5604 #ifdef DEBUGGING
5605                         count++;
5606 #else
5607                         break; /* should only be one */
5608 #endif
5609                     }
5610                 }
5611             }
5612         }
5613         assert(count ==1);
5614         AvFILLp(av) = fill-1;
5615     }
5616     else {
5617         /* optimisation: only a single backref, stored directly */
5618         if (*svp != sv)
5619             Perl_croak(aTHX_ "panic: del_backref");
5620         *svp = NULL;
5621     }
5622
5623 }
5624
5625 void
5626 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5627 {
5628     SV **svp;
5629     SV **last;
5630     bool is_array;
5631
5632     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5633
5634     if (!av)
5635         return;
5636
5637     /* after multiple passes through Perl_sv_clean_all() for a thinngy
5638      * that has badly leaked, the backref array may have gotten freed,
5639      * since we only protect it against 1 round of cleanup */
5640     if (SvIS_FREED(av)) {
5641         if (PL_in_clean_all) /* All is fair */
5642             return;
5643         Perl_croak(aTHX_
5644                    "panic: magic_killbackrefs (freed backref AV/SV)");
5645     }
5646
5647
5648     is_array = (SvTYPE(av) == SVt_PVAV);
5649     if (is_array) {
5650         assert(!SvIS_FREED(av));
5651         svp = AvARRAY(av);
5652         if (svp)
5653             last = svp + AvFILLp(av);
5654     }
5655     else {
5656         /* optimisation: only a single backref, stored directly */
5657         svp = (SV**)&av;
5658         last = svp;
5659     }
5660
5661     if (svp) {
5662         while (svp <= last) {
5663             if (*svp) {
5664                 SV *const referrer = *svp;
5665                 if (SvWEAKREF(referrer)) {
5666                     /* XXX Should we check that it hasn't changed? */
5667                     assert(SvROK(referrer));
5668                     SvRV_set(referrer, 0);
5669                     SvOK_off(referrer);
5670                     SvWEAKREF_off(referrer);
5671                     SvSETMAGIC(referrer);
5672                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5673                            SvTYPE(referrer) == SVt_PVLV) {
5674                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5675                     /* You lookin' at me?  */
5676                     assert(GvSTASH(referrer));
5677                     assert(GvSTASH(referrer) == (const HV *)sv);
5678                     GvSTASH(referrer) = 0;
5679                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5680                            SvTYPE(referrer) == SVt_PVFM) {
5681                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5682                         /* You lookin' at me?  */
5683                         assert(CvSTASH(referrer));
5684                         assert(CvSTASH(referrer) == (const HV *)sv);
5685                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5686                     }
5687                     else {
5688                         assert(SvTYPE(sv) == SVt_PVGV);
5689                         /* You lookin' at me?  */
5690                         assert(CvGV(referrer));
5691                         assert(CvGV(referrer) == (const GV *)sv);
5692                         anonymise_cv_maybe(MUTABLE_GV(sv),
5693                                                 MUTABLE_CV(referrer));
5694                     }
5695
5696                 } else {
5697                     Perl_croak(aTHX_
5698                                "panic: magic_killbackrefs (flags=%"UVxf")",
5699                                (UV)SvFLAGS(referrer));
5700                 }
5701
5702                 if (is_array)
5703                     *svp = NULL;
5704             }
5705             svp++;
5706         }
5707     }
5708     if (is_array) {
5709         AvFILLp(av) = -1;
5710         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5711     }
5712     return;
5713 }
5714
5715 /*
5716 =for apidoc sv_insert
5717
5718 Inserts a string at the specified offset/length within the SV.  Similar to
5719 the Perl substr() function.  Handles get magic.
5720
5721 =for apidoc sv_insert_flags
5722
5723 Same as C<sv_insert>, but the extra C<flags> are passed to the
5724 C<SvPV_force_flags> that applies to C<bigstr>.
5725
5726 =cut
5727 */
5728
5729 void
5730 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5731 {
5732     dVAR;
5733     register char *big;
5734     register char *mid;
5735     register char *midend;
5736     register char *bigend;
5737     register SSize_t i;         /* better be sizeof(STRLEN) or bad things happen */
5738     STRLEN curlen;
5739
5740     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5741
5742     if (!bigstr)
5743         Perl_croak(aTHX_ "Can't modify non-existent substring");
5744     SvPV_force_flags(bigstr, curlen, flags);
5745     (void)SvPOK_only_UTF8(bigstr);
5746     if (offset + len > curlen) {
5747         SvGROW(bigstr, offset+len+1);
5748         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5749         SvCUR_set(bigstr, offset+len);
5750     }
5751
5752     SvTAINT(bigstr);
5753     i = littlelen - len;
5754     if (i > 0) {                        /* string might grow */
5755         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5756         mid = big + offset + len;
5757         midend = bigend = big + SvCUR(bigstr);
5758         bigend += i;
5759         *bigend = '\0';
5760         while (midend > mid)            /* shove everything down */
5761             *--bigend = *--midend;
5762         Move(little,big+offset,littlelen,char);
5763         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5764         SvSETMAGIC(bigstr);
5765         return;
5766     }
5767     else if (i == 0) {
5768         Move(little,SvPVX(bigstr)+offset,len,char);
5769         SvSETMAGIC(bigstr);
5770         return;
5771     }
5772
5773     big = SvPVX(bigstr);
5774     mid = big + offset;
5775     midend = mid + len;
5776     bigend = big + SvCUR(bigstr);
5777
5778     if (midend > bigend)
5779         Perl_croak(aTHX_ "panic: sv_insert");
5780
5781     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5782         if (littlelen) {
5783             Move(little, mid, littlelen,char);
5784             mid += littlelen;
5785         }
5786         i = bigend - midend;
5787         if (i > 0) {
5788             Move(midend, mid, i,char);
5789             mid += i;
5790         }
5791         *mid = '\0';
5792         SvCUR_set(bigstr, mid - big);
5793     }
5794     else if ((i = mid - big)) { /* faster from front */
5795         midend -= littlelen;
5796         mid = midend;
5797         Move(big, midend - i, i, char);
5798         sv_chop(bigstr,midend-i);
5799         if (littlelen)
5800             Move(little, mid, littlelen,char);
5801     }
5802     else if (littlelen) {
5803         midend -= littlelen;
5804         sv_chop(bigstr,midend);
5805         Move(little,midend,littlelen,char);
5806     }
5807     else {
5808         sv_chop(bigstr,midend);
5809     }
5810     SvSETMAGIC(bigstr);
5811 }
5812
5813 /*
5814 =for apidoc sv_replace
5815
5816 Make the first argument a copy of the second, then delete the original.
5817 The target SV physically takes over ownership of the body of the source SV
5818 and inherits its flags; however, the target keeps any magic it owns,
5819 and any magic in the source is discarded.
5820 Note that this is a rather specialist SV copying operation; most of the
5821 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5822
5823 =cut
5824 */
5825
5826 void
5827 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5828 {
5829     dVAR;
5830     const U32 refcnt = SvREFCNT(sv);
5831
5832     PERL_ARGS_ASSERT_SV_REPLACE;
5833
5834     SV_CHECK_THINKFIRST_COW_DROP(sv);
5835     if (SvREFCNT(nsv) != 1) {
5836         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5837                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5838     }
5839     if (SvMAGICAL(sv)) {
5840         if (SvMAGICAL(nsv))
5841             mg_free(nsv);
5842         else
5843             sv_upgrade(nsv, SVt_PVMG);
5844         SvMAGIC_set(nsv, SvMAGIC(sv));
5845         SvFLAGS(nsv) |= SvMAGICAL(sv);
5846         SvMAGICAL_off(sv);
5847         SvMAGIC_set(sv, NULL);
5848     }
5849     SvREFCNT(sv) = 0;
5850     sv_clear(sv);
5851     assert(!SvREFCNT(sv));
5852 #ifdef DEBUG_LEAKING_SCALARS
5853     sv->sv_flags  = nsv->sv_flags;
5854     sv->sv_any    = nsv->sv_any;
5855     sv->sv_refcnt = nsv->sv_refcnt;
5856     sv->sv_u      = nsv->sv_u;
5857 #else
5858     StructCopy(nsv,sv,SV);
5859 #endif
5860     if(SvTYPE(sv) == SVt_IV) {
5861         SvANY(sv)
5862             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5863     }
5864         
5865
5866 #ifdef PERL_OLD_COPY_ON_WRITE
5867     if (SvIsCOW_normal(nsv)) {
5868         /* We need to follow the pointers around the loop to make the
5869            previous SV point to sv, rather than nsv.  */
5870         SV *next;
5871         SV *current = nsv;
5872         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5873             assert(next);
5874             current = next;
5875             assert(SvPVX_const(current) == SvPVX_const(nsv));
5876         }
5877         /* Make the SV before us point to the SV after us.  */
5878         if (DEBUG_C_TEST) {
5879             PerlIO_printf(Perl_debug_log, "previous is\n");
5880             sv_dump(current);
5881             PerlIO_printf(Perl_debug_log,
5882                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5883                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5884         }
5885         SV_COW_NEXT_SV_SET(current, sv);
5886     }
5887 #endif
5888     SvREFCNT(sv) = refcnt;
5889     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5890     SvREFCNT(nsv) = 0;
5891     del_SV(nsv);
5892 }
5893
5894 /* We're about to free a GV which has a CV that refers back to us.
5895  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5896  * field) */
5897
5898 STATIC void
5899 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5900 {
5901     SV *gvname;
5902     GV *anongv;
5903
5904     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5905
5906     /* be assertive! */
5907     assert(SvREFCNT(gv) == 0);
5908     assert(isGV(gv) && isGV_with_GP(gv));
5909     assert(GvGP(gv));
5910     assert(!CvANON(cv));
5911     assert(CvGV(cv) == gv);
5912
5913     /* will the CV shortly be freed by gp_free() ? */
5914     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
5915         SvANY(cv)->xcv_gv = NULL;
5916         return;
5917     }
5918
5919     /* if not, anonymise: */
5920     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
5921                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
5922                     : newSVpvn_flags( "__ANON__", 8, 0 );
5923     sv_catpvs(gvname, "::__ANON__");
5924     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5925     SvREFCNT_dec(gvname);
5926
5927     CvANON_on(cv);
5928     CvCVGV_RC_on(cv);
5929     SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
5930 }
5931
5932
5933 /*
5934 =for apidoc sv_clear
5935
5936 Clear an SV: call any destructors, free up any memory used by the body,
5937 and free the body itself.  The SV's head is I<not> freed, although
5938 its type is set to all 1's so that it won't inadvertently be assumed
5939 to be live during global destruction etc.
5940 This function should only be called when REFCNT is zero.  Most of the time
5941 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5942 instead.
5943
5944 =cut
5945 */
5946
5947 void
5948 Perl_sv_clear(pTHX_ SV *const orig_sv)
5949 {
5950     dVAR;
5951     HV *stash;
5952     U32 type;
5953     const struct body_details *sv_type_details;
5954     SV* iter_sv = NULL;
5955     SV* next_sv = NULL;
5956     register SV *sv = orig_sv;
5957     STRLEN hash_index;
5958
5959     PERL_ARGS_ASSERT_SV_CLEAR;
5960
5961     /* within this loop, sv is the SV currently being freed, and
5962      * iter_sv is the most recent AV or whatever that's being iterated
5963      * over to provide more SVs */
5964
5965     while (sv) {
5966
5967         type = SvTYPE(sv);
5968
5969         assert(SvREFCNT(sv) == 0);
5970         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
5971
5972         if (type <= SVt_IV) {
5973             /* See the comment in sv.h about the collusion between this
5974              * early return and the overloading of the NULL slots in the
5975              * size table.  */
5976             if (SvROK(sv))
5977                 goto free_rv;
5978             SvFLAGS(sv) &= SVf_BREAK;
5979             SvFLAGS(sv) |= SVTYPEMASK;
5980             goto free_head;
5981         }
5982
5983         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
5984
5985         if (type >= SVt_PVMG) {
5986             if (SvOBJECT(sv)) {
5987                 if (!curse(sv, 1)) goto get_next_sv;
5988                 type = SvTYPE(sv); /* destructor may have changed it */
5989             }
5990             /* Free back-references before magic, in case the magic calls
5991              * Perl code that has weak references to sv. */
5992             if (type == SVt_PVHV) {
5993                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
5994                 if (SvMAGIC(sv))
5995                     mg_free(sv);
5996             }
5997             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
5998                 SvREFCNT_dec(SvOURSTASH(sv));
5999             } else if (SvMAGIC(sv)) {
6000                 /* Free back-references before other types of magic. */
6001                 sv_unmagic(sv, PERL_MAGIC_backref);
6002                 mg_free(sv);
6003             }
6004             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6005                 SvREFCNT_dec(SvSTASH(sv));
6006         }
6007         switch (type) {
6008             /* case SVt_BIND: */
6009         case SVt_PVIO:
6010             if (IoIFP(sv) &&
6011                 IoIFP(sv) != PerlIO_stdin() &&
6012                 IoIFP(sv) != PerlIO_stdout() &&
6013                 IoIFP(sv) != PerlIO_stderr() &&
6014                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6015             {
6016                 io_close(MUTABLE_IO(sv), FALSE);
6017             }
6018             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6019                 PerlDir_close(IoDIRP(sv));
6020             IoDIRP(sv) = (DIR*)NULL;
6021             Safefree(IoTOP_NAME(sv));
6022             Safefree(IoFMT_NAME(sv));
6023             Safefree(IoBOTTOM_NAME(sv));
6024             goto freescalar;
6025         case SVt_REGEXP:
6026             /* FIXME for plugins */
6027             pregfree2((REGEXP*) sv);
6028             goto freescalar;
6029         case SVt_PVCV:
6030         case SVt_PVFM:
6031             cv_undef(MUTABLE_CV(sv));
6032             /* If we're in a stash, we don't own a reference to it.
6033              * However it does have a back reference to us, which needs to
6034              * be cleared.  */
6035             if ((stash = CvSTASH(sv)))
6036                 sv_del_backref(MUTABLE_SV(stash), sv);
6037             goto freescalar;
6038         case SVt_PVHV:
6039             if (PL_last_swash_hv == (const HV *)sv) {
6040                 PL_last_swash_hv = NULL;
6041             }
6042             if (HvTOTALKEYS((HV*)sv) > 0) {
6043                 const char *name;
6044                 /* this statement should match the one at the beginning of
6045                  * hv_undef_flags() */
6046                 if (   PL_phase != PERL_PHASE_DESTRUCT
6047                     && (name = HvNAME((HV*)sv)))
6048                 {
6049                     if (PL_stashcache)
6050                         (void)hv_delete(PL_stashcache, name,
6051                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6052                     hv_name_set((HV*)sv, NULL, 0, 0);
6053                 }
6054
6055                 /* save old iter_sv in unused SvSTASH field */
6056                 assert(!SvOBJECT(sv));
6057                 SvSTASH(sv) = (HV*)iter_sv;
6058                 iter_sv = sv;
6059
6060                 /* XXX ideally we should save the old value of hash_index
6061                  * too, but I can't think of any place to hide it. The
6062                  * effect of not saving it is that for freeing hashes of
6063                  * hashes, we become quadratic in scanning the HvARRAY of
6064                  * the top hash looking for new entries to free; but
6065                  * hopefully this will be dwarfed by the freeing of all
6066                  * the nested hashes. */
6067                 hash_index = 0;
6068                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6069                 goto get_next_sv; /* process this new sv */
6070             }
6071             /* free empty hash */
6072             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6073             assert(!HvARRAY((HV*)sv));
6074             break;
6075         case SVt_PVAV:
6076             {
6077                 AV* av = MUTABLE_AV(sv);
6078                 if (PL_comppad == av) {
6079                     PL_comppad = NULL;
6080                     PL_curpad = NULL;
6081                 }
6082                 if (AvREAL(av) && AvFILLp(av) > -1) {
6083                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6084                     /* save old iter_sv in top-most slot of AV,
6085                      * and pray that it doesn't get wiped in the meantime */
6086                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6087                     iter_sv = sv;
6088                     goto get_next_sv; /* process this new sv */
6089                 }
6090                 Safefree(AvALLOC(av));
6091             }
6092
6093             break;
6094         case SVt_PVLV:
6095             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6096                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6097                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6098                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6099             }
6100             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6101                 SvREFCNT_dec(LvTARG(sv));
6102         case SVt_PVGV:
6103             if (isGV_with_GP(sv)) {
6104                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6105                    && HvENAME_get(stash))
6106                     mro_method_changed_in(stash);
6107                 gp_free(MUTABLE_GV(sv));
6108                 if (GvNAME_HEK(sv))
6109                     unshare_hek(GvNAME_HEK(sv));
6110                 /* If we're in a stash, we don't own a reference to it.
6111                  * However it does have a back reference to us, which
6112                  * needs to be cleared.  */
6113                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6114                         sv_del_backref(MUTABLE_SV(stash), sv);
6115             }
6116             /* FIXME. There are probably more unreferenced pointers to SVs
6117              * in the interpreter struct that we should check and tidy in
6118              * a similar fashion to this:  */
6119             /* See also S_sv_unglob, which does the same thing. */
6120             if ((const GV *)sv == PL_last_in_gv)
6121                 PL_last_in_gv = NULL;
6122         case SVt_PVMG:
6123         case SVt_PVNV:
6124         case SVt_PVIV:
6125         case SVt_PV:
6126           freescalar:
6127             /* Don't bother with SvOOK_off(sv); as we're only going to
6128              * free it.  */
6129             if (SvOOK(sv)) {
6130                 STRLEN offset;
6131                 SvOOK_offset(sv, offset);
6132                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6133                 /* Don't even bother with turning off the OOK flag.  */
6134             }
6135             if (SvROK(sv)) {
6136             free_rv:
6137                 {
6138                     SV * const target = SvRV(sv);
6139                     if (SvWEAKREF(sv))
6140                         sv_del_backref(target, sv);
6141                     else
6142                         next_sv = target;
6143                 }
6144             }
6145 #ifdef PERL_OLD_COPY_ON_WRITE
6146             else if (SvPVX_const(sv)
6147                      && !(SvTYPE(sv) == SVt_PVIO
6148                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6149             {
6150                 if (SvIsCOW(sv)) {
6151                     if (DEBUG_C_TEST) {
6152                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6153                         sv_dump(sv);
6154                     }
6155                     if (SvLEN(sv)) {
6156                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6157                     } else {
6158                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6159                     }
6160
6161                     SvFAKE_off(sv);
6162                 } else if (SvLEN(sv)) {
6163                     Safefree(SvPVX_const(sv));
6164                 }
6165             }
6166 #else
6167             else if (SvPVX_const(sv) && SvLEN(sv)
6168                      && !(SvTYPE(sv) == SVt_PVIO
6169                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6170                 Safefree(SvPVX_mutable(sv));
6171             else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
6172                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6173                 SvFAKE_off(sv);
6174             }
6175 #endif
6176             break;
6177         case SVt_NV:
6178             break;
6179         }
6180
6181       free_body:
6182
6183         SvFLAGS(sv) &= SVf_BREAK;
6184         SvFLAGS(sv) |= SVTYPEMASK;
6185
6186         sv_type_details = bodies_by_type + type;
6187         if (sv_type_details->arena) {
6188             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6189                      &PL_body_roots[type]);
6190         }
6191         else if (sv_type_details->body_size) {
6192             safefree(SvANY(sv));
6193         }
6194
6195       free_head:
6196         /* caller is responsible for freeing the head of the original sv */
6197         if (sv != orig_sv && !SvREFCNT(sv))
6198             del_SV(sv);
6199
6200         /* grab and free next sv, if any */
6201       get_next_sv:
6202         while (1) {
6203             sv = NULL;
6204             if (next_sv) {
6205                 sv = next_sv;
6206                 next_sv = NULL;
6207             }
6208             else if (!iter_sv) {
6209                 break;
6210             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6211                 AV *const av = (AV*)iter_sv;
6212                 if (AvFILLp(av) > -1) {
6213                     sv = AvARRAY(av)[AvFILLp(av)--];
6214                 }
6215                 else { /* no more elements of current AV to free */
6216                     sv = iter_sv;
6217                     type = SvTYPE(sv);
6218                     /* restore previous value, squirrelled away */
6219                     iter_sv = AvARRAY(av)[AvMAX(av)];
6220                     Safefree(AvALLOC(av));
6221                     goto free_body;
6222                 }
6223             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6224                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6225                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6226                     /* no more elements of current HV to free */
6227                     sv = iter_sv;
6228                     type = SvTYPE(sv);
6229                     /* Restore previous value of iter_sv, squirrelled away */
6230                     assert(!SvOBJECT(sv));
6231                     iter_sv = (SV*)SvSTASH(sv);
6232
6233                     /* ideally we should restore the old hash_index here,
6234                      * but we don't currently save the old value */
6235                     hash_index = 0;
6236
6237                     /* free any remaining detritus from the hash struct */
6238                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6239                     assert(!HvARRAY((HV*)sv));
6240                     goto free_body;
6241                 }
6242             }
6243
6244             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6245
6246             if (!sv)
6247                 continue;
6248             if (!SvREFCNT(sv)) {
6249                 sv_free(sv);
6250                 continue;
6251             }
6252             if (--(SvREFCNT(sv)))
6253                 continue;
6254 #ifdef DEBUGGING
6255             if (SvTEMP(sv)) {
6256                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6257                          "Attempt to free temp prematurely: SV 0x%"UVxf
6258                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6259                 continue;
6260             }
6261 #endif
6262             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6263                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6264                 SvREFCNT(sv) = (~(U32)0)/2;
6265                 continue;
6266             }
6267             break;
6268         } /* while 1 */
6269
6270     } /* while sv */
6271 }
6272
6273 /* This routine curses the sv itself, not the object referenced by sv. So
6274    sv does not have to be ROK. */
6275
6276 static bool
6277 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6278     dVAR;
6279
6280     PERL_ARGS_ASSERT_CURSE;
6281     assert(SvOBJECT(sv));
6282
6283     if (PL_defstash &&  /* Still have a symbol table? */
6284         SvDESTROYABLE(sv))
6285     {
6286         dSP;
6287         HV* stash;
6288         do {
6289             CV* destructor;
6290             stash = SvSTASH(sv);
6291             destructor = StashHANDLER(stash,DESTROY);
6292             if (destructor
6293                 /* A constant subroutine can have no side effects, so
6294                    don't bother calling it.  */
6295                 && !CvCONST(destructor)
6296                 /* Don't bother calling an empty destructor or one that
6297                    returns immediately. */
6298                 && (CvISXSUB(destructor)
6299                 || (CvSTART(destructor)
6300                     && (CvSTART(destructor)->op_next->op_type
6301                                         != OP_LEAVESUB)
6302                     && (CvSTART(destructor)->op_next->op_type
6303                                         != OP_PUSHMARK
6304                         || CvSTART(destructor)->op_next->op_next->op_type
6305                                         != OP_RETURN
6306                        )
6307                    ))
6308                )
6309             {
6310                 SV* const tmpref = newRV(sv);
6311                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6312                 ENTER;
6313                 PUSHSTACKi(PERLSI_DESTROY);
6314                 EXTEND(SP, 2);
6315                 PUSHMARK(SP);
6316                 PUSHs(tmpref);
6317                 PUTBACK;
6318                 call_sv(MUTABLE_SV(destructor),
6319                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6320                 POPSTACK;
6321                 SPAGAIN;
6322                 LEAVE;
6323                 if(SvREFCNT(tmpref) < 2) {
6324                     /* tmpref is not kept alive! */
6325                     SvREFCNT(sv)--;
6326                     SvRV_set(tmpref, NULL);
6327                     SvROK_off(tmpref);
6328                 }
6329                 SvREFCNT_dec(tmpref);
6330             }
6331         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6332
6333
6334         if (check_refcnt && SvREFCNT(sv)) {
6335             if (PL_in_clean_objs)
6336                 Perl_croak(aTHX_
6337                   "DESTROY created new reference to dead object '%"HEKf"'",
6338                    HEKfARG(HvNAME_HEK(stash)));
6339             /* DESTROY gave object new lease on life */
6340             return FALSE;
6341         }
6342     }
6343
6344     if (SvOBJECT(sv)) {
6345         SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6346         SvOBJECT_off(sv);       /* Curse the object. */
6347         if (SvTYPE(sv) != SVt_PVIO)
6348             --PL_sv_objcount;/* XXX Might want something more general */
6349     }
6350     return TRUE;
6351 }
6352
6353 /*
6354 =for apidoc sv_newref
6355
6356 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6357 instead.
6358
6359 =cut
6360 */
6361
6362 SV *
6363 Perl_sv_newref(pTHX_ SV *const sv)
6364 {
6365     PERL_UNUSED_CONTEXT;
6366     if (sv)
6367         (SvREFCNT(sv))++;
6368     return sv;
6369 }
6370
6371 /*
6372 =for apidoc sv_free
6373
6374 Decrement an SV's reference count, and if it drops to zero, call
6375 C<sv_clear> to invoke destructors and free up any memory used by
6376 the body; finally, deallocate the SV's head itself.
6377 Normally called via a wrapper macro C<SvREFCNT_dec>.
6378
6379 =cut
6380 */
6381
6382 void
6383 Perl_sv_free(pTHX_ SV *const sv)
6384 {
6385     dVAR;
6386     if (!sv)
6387         return;
6388     if (SvREFCNT(sv) == 0) {
6389         if (SvFLAGS(sv) & SVf_BREAK)
6390             /* this SV's refcnt has been artificially decremented to
6391              * trigger cleanup */
6392             return;
6393         if (PL_in_clean_all) /* All is fair */
6394             return;
6395         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6396             /* make sure SvREFCNT(sv)==0 happens very seldom */
6397             SvREFCNT(sv) = (~(U32)0)/2;
6398             return;
6399         }
6400         if (ckWARN_d(WARN_INTERNAL)) {
6401 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6402             Perl_dump_sv_child(aTHX_ sv);
6403 #else
6404   #ifdef DEBUG_LEAKING_SCALARS
6405             sv_dump(sv);
6406   #endif
6407 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6408             if (PL_warnhook == PERL_WARNHOOK_FATAL
6409                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6410                 /* Don't let Perl_warner cause us to escape our fate:  */
6411                 abort();
6412             }
6413 #endif
6414             /* This may not return:  */
6415             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6416                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6417                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6418 #endif
6419         }
6420 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6421         abort();
6422 #endif
6423         return;
6424     }
6425     if (--(SvREFCNT(sv)) > 0)
6426         return;
6427     Perl_sv_free2(aTHX_ sv);
6428 }
6429
6430 void
6431 Perl_sv_free2(pTHX_ SV *const sv)
6432 {
6433     dVAR;
6434
6435     PERL_ARGS_ASSERT_SV_FREE2;
6436
6437 #ifdef DEBUGGING
6438     if (SvTEMP(sv)) {
6439         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6440                          "Attempt to free temp prematurely: SV 0x%"UVxf
6441                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6442         return;
6443     }
6444 #endif
6445     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6446         /* make sure SvREFCNT(sv)==0 happens very seldom */
6447         SvREFCNT(sv) = (~(U32)0)/2;
6448         return;
6449     }
6450     sv_clear(sv);
6451     if (! SvREFCNT(sv))
6452         del_SV(sv);
6453 }
6454
6455 /*
6456 =for apidoc sv_len
6457
6458 Returns the length of the string in the SV. Handles magic and type
6459 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6460
6461 =cut
6462 */
6463
6464 STRLEN
6465 Perl_sv_len(pTHX_ register SV *const sv)
6466 {
6467     STRLEN len;
6468
6469     if (!sv)
6470         return 0;
6471
6472     if (SvGMAGICAL(sv))
6473         len = mg_length(sv);
6474     else
6475         (void)SvPV_const(sv, len);
6476     return len;
6477 }
6478
6479 /*
6480 =for apidoc sv_len_utf8
6481
6482 Returns the number of characters in the string in an SV, counting wide
6483 UTF-8 bytes as a single character.  Handles magic and type coercion.
6484
6485 =cut
6486 */
6487
6488 /*
6489  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6490  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6491  * (Note that the mg_len is not the length of the mg_ptr field.
6492  * This allows the cache to store the character length of the string without
6493  * needing to malloc() extra storage to attach to the mg_ptr.)
6494  *
6495  */
6496
6497 STRLEN
6498 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6499 {
6500     if (!sv)
6501         return 0;
6502
6503     if (SvGMAGICAL(sv))
6504         return mg_length(sv);
6505     else
6506     {
6507         STRLEN len;
6508         const U8 *s = (U8*)SvPV_const(sv, len);
6509
6510         if (PL_utf8cache) {
6511             STRLEN ulen;
6512             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6513
6514             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6515                 if (mg->mg_len != -1)
6516                     ulen = mg->mg_len;
6517                 else {
6518                     /* We can use the offset cache for a headstart.
6519                        The longer value is stored in the first pair.  */
6520                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6521
6522                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6523                                                        s + len);
6524                 }
6525                 
6526                 if (PL_utf8cache < 0) {
6527                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6528                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6529                 }
6530             }
6531             else {
6532                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6533                 utf8_mg_len_cache_update(sv, &mg, ulen);
6534             }
6535             return ulen;
6536         }
6537         return Perl_utf8_length(aTHX_ s, s + len);
6538     }
6539 }
6540
6541 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6542    offset.  */
6543 static STRLEN
6544 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6545                       STRLEN *const uoffset_p, bool *const at_end)
6546 {
6547     const U8 *s = start;
6548     STRLEN uoffset = *uoffset_p;
6549
6550     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6551
6552     while (s < send && uoffset) {
6553         --uoffset;
6554         s += UTF8SKIP(s);
6555     }
6556     if (s == send) {
6557         *at_end = TRUE;
6558     }
6559     else if (s > send) {
6560         *at_end = TRUE;
6561         /* This is the existing behaviour. Possibly it should be a croak, as
6562            it's actually a bounds error  */
6563         s = send;
6564     }
6565     *uoffset_p -= uoffset;
6566     return s - start;
6567 }
6568
6569 /* Given the length of the string in both bytes and UTF-8 characters, decide
6570    whether to walk forwards or backwards to find the byte corresponding to
6571    the passed in UTF-8 offset.  */
6572 static STRLEN
6573 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6574                     STRLEN uoffset, const STRLEN uend)
6575 {
6576     STRLEN backw = uend - uoffset;
6577
6578     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6579
6580     if (uoffset < 2 * backw) {
6581         /* The assumption is that going forwards is twice the speed of going
6582            forward (that's where the 2 * backw comes from).
6583            (The real figure of course depends on the UTF-8 data.)  */
6584         const U8 *s = start;
6585
6586         while (s < send && uoffset--)
6587             s += UTF8SKIP(s);
6588         assert (s <= send);
6589         if (s > send)
6590             s = send;
6591         return s - start;
6592     }
6593
6594     while (backw--) {
6595         send--;
6596         while (UTF8_IS_CONTINUATION(*send))
6597             send--;
6598     }
6599     return send - start;
6600 }
6601
6602 /* For the string representation of the given scalar, find the byte
6603    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6604    give another position in the string, *before* the sought offset, which
6605    (which is always true, as 0, 0 is a valid pair of positions), which should
6606    help reduce the amount of linear searching.
6607    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6608    will be used to reduce the amount of linear searching. The cache will be
6609    created if necessary, and the found value offered to it for update.  */
6610 static STRLEN
6611 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6612                     const U8 *const send, STRLEN uoffset,
6613                     STRLEN uoffset0, STRLEN boffset0)
6614 {
6615     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6616     bool found = FALSE;
6617     bool at_end = FALSE;
6618
6619     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6620
6621     assert (uoffset >= uoffset0);
6622
6623     if (!uoffset)
6624         return 0;
6625
6626     if (!SvREADONLY(sv)
6627         && PL_utf8cache
6628         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6629                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6630         if ((*mgp)->mg_ptr) {
6631             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6632             if (cache[0] == uoffset) {
6633                 /* An exact match. */
6634                 return cache[1];
6635             }
6636             if (cache[2] == uoffset) {
6637                 /* An exact match. */
6638                 return cache[3];
6639             }
6640
6641             if (cache[0] < uoffset) {
6642                 /* The cache already knows part of the way.   */
6643                 if (cache[0] > uoffset0) {
6644                     /* The cache knows more than the passed in pair  */
6645                     uoffset0 = cache[0];
6646                     boffset0 = cache[1];
6647                 }
6648                 if ((*mgp)->mg_len != -1) {
6649                     /* And we know the end too.  */
6650                     boffset = boffset0
6651                         + sv_pos_u2b_midway(start + boffset0, send,
6652                                               uoffset - uoffset0,
6653                                               (*mgp)->mg_len - uoffset0);
6654                 } else {
6655                     uoffset -= uoffset0;
6656                     boffset = boffset0
6657                         + sv_pos_u2b_forwards(start + boffset0,
6658                                               send, &uoffset, &at_end);
6659                     uoffset += uoffset0;
6660                 }
6661             }
6662             else if (cache[2] < uoffset) {
6663                 /* We're between the two cache entries.  */
6664                 if (cache[2] > uoffset0) {
6665                     /* and the cache knows more than the passed in pair  */
6666                     uoffset0 = cache[2];
6667                     boffset0 = cache[3];
6668                 }
6669
6670                 boffset = boffset0
6671                     + sv_pos_u2b_midway(start + boffset0,
6672                                           start + cache[1],
6673                                           uoffset - uoffset0,
6674                                           cache[0] - uoffset0);
6675             } else {
6676                 boffset = boffset0
6677                     + sv_pos_u2b_midway(start + boffset0,
6678                                           start + cache[3],
6679                                           uoffset - uoffset0,
6680                                           cache[2] - uoffset0);
6681             }
6682             found = TRUE;
6683         }
6684         else if ((*mgp)->mg_len != -1) {
6685             /* If we can take advantage of a passed in offset, do so.  */
6686             /* In fact, offset0 is either 0, or less than offset, so don't
6687                need to worry about the other possibility.  */
6688             boffset = boffset0
6689                 + sv_pos_u2b_midway(start + boffset0, send,
6690                                       uoffset - uoffset0,
6691                                       (*mgp)->mg_len - uoffset0);
6692             found = TRUE;
6693         }
6694     }
6695
6696     if (!found || PL_utf8cache < 0) {
6697         STRLEN real_boffset;
6698         uoffset -= uoffset0;
6699         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6700                                                       send, &uoffset, &at_end);
6701         uoffset += uoffset0;
6702
6703         if (found && PL_utf8cache < 0)
6704             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6705                                        real_boffset, sv);
6706         boffset = real_boffset;
6707     }
6708
6709     if (PL_utf8cache) {
6710         if (at_end)
6711             utf8_mg_len_cache_update(sv, mgp, uoffset);
6712         else
6713             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6714     }
6715     return boffset;
6716 }
6717
6718
6719 /*
6720 =for apidoc sv_pos_u2b_flags
6721
6722 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6723 the start of the string, to a count of the equivalent number of bytes; if
6724 lenp is non-zero, it does the same to lenp, but this time starting from
6725 the offset, rather than from the start of the string. Handles type coercion.
6726 I<flags> is passed to C<SvPV_flags>, and usually should be
6727 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6728
6729 =cut
6730 */
6731
6732 /*
6733  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6734  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6735  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6736  *
6737  */
6738
6739 STRLEN
6740 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6741                       U32 flags)
6742 {
6743     const U8 *start;
6744     STRLEN len;
6745     STRLEN boffset;
6746
6747     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6748
6749     start = (U8*)SvPV_flags(sv, len, flags);
6750     if (len) {
6751         const U8 * const send = start + len;
6752         MAGIC *mg = NULL;
6753         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6754
6755         if (lenp
6756             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6757                         is 0, and *lenp is already set to that.  */) {
6758             /* Convert the relative offset to absolute.  */
6759             const STRLEN uoffset2 = uoffset + *lenp;
6760             const STRLEN boffset2
6761                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6762                                       uoffset, boffset) - boffset;
6763
6764             *lenp = boffset2;
6765         }
6766     } else {
6767         if (lenp)
6768             *lenp = 0;
6769         boffset = 0;
6770     }
6771
6772     return boffset;
6773 }
6774
6775 /*
6776 =for apidoc sv_pos_u2b
6777
6778 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6779 the start of the string, to a count of the equivalent number of bytes; if
6780 lenp is non-zero, it does the same to lenp, but this time starting from
6781 the offset, rather than from the start of the string. Handles magic and
6782 type coercion.
6783
6784 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6785 than 2Gb.
6786
6787 =cut
6788 */
6789
6790 /*
6791  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6792  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6793  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6794  *
6795  */
6796
6797 /* This function is subject to size and sign problems */
6798
6799 void
6800 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6801 {
6802     PERL_ARGS_ASSERT_SV_POS_U2B;
6803
6804     if (lenp) {
6805         STRLEN ulen = (STRLEN)*lenp;
6806         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6807                                          SV_GMAGIC|SV_CONST_RETURN);
6808         *lenp = (I32)ulen;
6809     } else {
6810         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6811                                          SV_GMAGIC|SV_CONST_RETURN);
6812     }
6813 }
6814
6815 static void
6816 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6817                            const STRLEN ulen)
6818 {
6819     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6820     if (SvREADONLY(sv))
6821         return;
6822
6823     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6824                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6825         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6826     }
6827     assert(*mgp);
6828
6829     (*mgp)->mg_len = ulen;
6830     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
6831     if (ulen != (STRLEN) (*mgp)->mg_len)
6832         (*mgp)->mg_len = -1;
6833 }
6834
6835 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6836    byte length pairing. The (byte) length of the total SV is passed in too,
6837    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6838    may not have updated SvCUR, so we can't rely on reading it directly.
6839
6840    The proffered utf8/byte length pairing isn't used if the cache already has
6841    two pairs, and swapping either for the proffered pair would increase the
6842    RMS of the intervals between known byte offsets.
6843
6844    The cache itself consists of 4 STRLEN values
6845    0: larger UTF-8 offset
6846    1: corresponding byte offset
6847    2: smaller UTF-8 offset
6848    3: corresponding byte offset
6849
6850    Unused cache pairs have the value 0, 0.
6851    Keeping the cache "backwards" means that the invariant of
6852    cache[0] >= cache[2] is maintained even with empty slots, which means that
6853    the code that uses it doesn't need to worry if only 1 entry has actually
6854    been set to non-zero.  It also makes the "position beyond the end of the
6855    cache" logic much simpler, as the first slot is always the one to start
6856    from.   
6857 */
6858 static void
6859 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6860                            const STRLEN utf8, const STRLEN blen)
6861 {
6862     STRLEN *cache;
6863
6864     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6865
6866     if (SvREADONLY(sv))
6867         return;
6868
6869     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6870                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6871         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6872                            0);
6873         (*mgp)->mg_len = -1;
6874     }
6875     assert(*mgp);
6876
6877     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6878         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6879         (*mgp)->mg_ptr = (char *) cache;
6880     }
6881     assert(cache);
6882
6883     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6884         /* SvPOKp() because it's possible that sv has string overloading, and
6885            therefore is a reference, hence SvPVX() is actually a pointer.
6886            This cures the (very real) symptoms of RT 69422, but I'm not actually
6887            sure whether we should even be caching the results of UTF-8
6888            operations on overloading, given that nothing stops overloading
6889            returning a different value every time it's called.  */
6890         const U8 *start = (const U8 *) SvPVX_const(sv);
6891         const STRLEN realutf8 = utf8_length(start, start + byte);
6892
6893         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6894                                    sv);
6895     }
6896
6897     /* Cache is held with the later position first, to simplify the code
6898        that deals with unbounded ends.  */
6899        
6900     ASSERT_UTF8_CACHE(cache);
6901     if (cache[1] == 0) {
6902         /* Cache is totally empty  */
6903         cache[0] = utf8;
6904         cache[1] = byte;
6905     } else if (cache[3] == 0) {
6906         if (byte > cache[1]) {
6907             /* New one is larger, so goes first.  */
6908             cache[2] = cache[0];
6909             cache[3] = cache[1];
6910             cache[0] = utf8;
6911             cache[1] = byte;
6912         } else {
6913             cache[2] = utf8;
6914             cache[3] = byte;
6915         }
6916     } else {
6917 #define THREEWAY_SQUARE(a,b,c,d) \
6918             ((float)((d) - (c))) * ((float)((d) - (c))) \
6919             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6920                + ((float)((b) - (a))) * ((float)((b) - (a)))
6921
6922         /* Cache has 2 slots in use, and we know three potential pairs.
6923            Keep the two that give the lowest RMS distance. Do the
6924            calculation in bytes simply because we always know the byte
6925            length.  squareroot has the same ordering as the positive value,
6926            so don't bother with the actual square root.  */
6927         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6928         if (byte > cache[1]) {
6929             /* New position is after the existing pair of pairs.  */
6930             const float keep_earlier
6931                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6932             const float keep_later
6933                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6934
6935             if (keep_later < keep_earlier) {
6936                 if (keep_later < existing) {
6937                     cache[2] = cache[0];
6938                     cache[3] = cache[1];
6939                     cache[0] = utf8;
6940                     cache[1] = byte;
6941                 }
6942             }
6943             else {
6944                 if (keep_earlier < existing) {
6945                     cache[0] = utf8;
6946                     cache[1] = byte;
6947                 }
6948             }
6949         }
6950         else if (byte > cache[3]) {
6951             /* New position is between the existing pair of pairs.  */
6952             const float keep_earlier
6953                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6954             const float keep_later
6955                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6956
6957             if (keep_later < keep_earlier) {
6958                 if (keep_later < existing) {
6959                     cache[2] = utf8;
6960                     cache[3] = byte;
6961                 }
6962             }
6963             else {
6964                 if (keep_earlier < existing) {
6965                     cache[0] = utf8;
6966                     cache[1] = byte;
6967                 }
6968             }
6969         }
6970         else {
6971             /* New position is before the existing pair of pairs.  */
6972             const float keep_earlier
6973                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6974             const float keep_later
6975                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6976
6977             if (keep_later < keep_earlier) {
6978                 if (keep_later < existing) {
6979                     cache[2] = utf8;
6980                     cache[3] = byte;
6981                 }
6982             }
6983             else {
6984                 if (keep_earlier < existing) {
6985                     cache[0] = cache[2];
6986                     cache[1] = cache[3];
6987                     cache[2] = utf8;
6988                     cache[3] = byte;
6989                 }
6990             }
6991         }
6992     }
6993     ASSERT_UTF8_CACHE(cache);
6994 }
6995
6996 /* We already know all of the way, now we may be able to walk back.  The same
6997    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6998    backward is half the speed of walking forward. */
6999 static STRLEN
7000 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7001                     const U8 *end, STRLEN endu)
7002 {
7003     const STRLEN forw = target - s;
7004     STRLEN backw = end - target;
7005
7006     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7007
7008     if (forw < 2 * backw) {
7009         return utf8_length(s, target);
7010     }
7011
7012     while (end > target) {
7013         end--;
7014         while (UTF8_IS_CONTINUATION(*end)) {
7015             end--;
7016         }
7017         endu--;
7018     }
7019     return endu;
7020 }
7021
7022 /*
7023 =for apidoc sv_pos_b2u
7024
7025 Converts the value pointed to by offsetp from a count of bytes from the
7026 start of the string, to a count of the equivalent number of UTF-8 chars.
7027 Handles magic and type coercion.
7028
7029 =cut
7030 */
7031
7032 /*
7033  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7034  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7035  * byte offsets.
7036  *
7037  */
7038 void
7039 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
7040 {
7041     const U8* s;
7042     const STRLEN byte = *offsetp;
7043     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7044     STRLEN blen;
7045     MAGIC* mg = NULL;
7046     const U8* send;
7047     bool found = FALSE;
7048
7049     PERL_ARGS_ASSERT_SV_POS_B2U;
7050
7051     if (!sv)
7052         return;
7053
7054     s = (const U8*)SvPV_const(sv, blen);
7055
7056     if (blen < byte)
7057         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7058
7059     send = s + byte;
7060
7061     if (!SvREADONLY(sv)
7062         && PL_utf8cache
7063         && SvTYPE(sv) >= SVt_PVMG
7064         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7065     {
7066         if (mg->mg_ptr) {
7067             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7068             if (cache[1] == byte) {
7069                 /* An exact match. */
7070                 *offsetp = cache[0];
7071                 return;
7072             }
7073             if (cache[3] == byte) {
7074                 /* An exact match. */
7075                 *offsetp = cache[2];
7076                 return;
7077             }
7078
7079             if (cache[1] < byte) {
7080                 /* We already know part of the way. */
7081                 if (mg->mg_len != -1) {
7082                     /* Actually, we know the end too.  */
7083                     len = cache[0]
7084                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7085                                               s + blen, mg->mg_len - cache[0]);
7086                 } else {
7087                     len = cache[0] + utf8_length(s + cache[1], send);
7088                 }
7089             }
7090             else if (cache[3] < byte) {
7091                 /* We're between the two cached pairs, so we do the calculation
7092                    offset by the byte/utf-8 positions for the earlier pair,
7093                    then add the utf-8 characters from the string start to
7094                    there.  */
7095                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7096                                           s + cache[1], cache[0] - cache[2])
7097                     + cache[2];
7098
7099             }
7100             else { /* cache[3] > byte */
7101                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7102                                           cache[2]);
7103
7104             }
7105             ASSERT_UTF8_CACHE(cache);
7106             found = TRUE;
7107         } else if (mg->mg_len != -1) {
7108             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7109             found = TRUE;
7110         }
7111     }
7112     if (!found || PL_utf8cache < 0) {
7113         const STRLEN real_len = utf8_length(s, send);
7114
7115         if (found && PL_utf8cache < 0)
7116             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7117         len = real_len;
7118     }
7119     *offsetp = len;
7120
7121     if (PL_utf8cache) {
7122         if (blen == byte)
7123             utf8_mg_len_cache_update(sv, &mg, len);
7124         else
7125             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7126     }
7127 }
7128
7129 static void
7130 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7131                              STRLEN real, SV *const sv)
7132 {
7133     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7134
7135     /* As this is debugging only code, save space by keeping this test here,
7136        rather than inlining it in all the callers.  */
7137     if (from_cache == real)
7138         return;
7139
7140     /* Need to turn the assertions off otherwise we may recurse infinitely
7141        while printing error messages.  */
7142     SAVEI8(PL_utf8cache);
7143     PL_utf8cache = 0;
7144     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7145                func, (UV) from_cache, (UV) real, SVfARG(sv));
7146 }
7147
7148 /*
7149 =for apidoc sv_eq
7150
7151 Returns a boolean indicating whether the strings in the two SVs are
7152 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7153 coerce its args to strings if necessary.
7154
7155 =for apidoc sv_eq_flags
7156
7157 Returns a boolean indicating whether the strings in the two SVs are
7158 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7159 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7160
7161 =cut
7162 */
7163
7164 I32
7165 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
7166 {
7167     dVAR;
7168     const char *pv1;
7169     STRLEN cur1;
7170     const char *pv2;
7171     STRLEN cur2;
7172     I32  eq     = 0;
7173     SV* svrecode = NULL;
7174
7175     if (!sv1) {
7176         pv1 = "";
7177         cur1 = 0;
7178     }
7179     else {
7180         /* if pv1 and pv2 are the same, second SvPV_const call may
7181          * invalidate pv1 (if we are handling magic), so we may need to
7182          * make a copy */
7183         if (sv1 == sv2 && flags & SV_GMAGIC
7184          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7185             pv1 = SvPV_const(sv1, cur1);
7186             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7187         }
7188         pv1 = SvPV_flags_const(sv1, cur1, flags);
7189     }
7190
7191     if (!sv2){
7192         pv2 = "";
7193         cur2 = 0;
7194     }
7195     else
7196         pv2 = SvPV_flags_const(sv2, cur2, flags);
7197
7198     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7199         /* Differing utf8ness.
7200          * Do not UTF8size the comparands as a side-effect. */
7201          if (PL_encoding) {
7202               if (SvUTF8(sv1)) {
7203                    svrecode = newSVpvn(pv2, cur2);
7204                    sv_recode_to_utf8(svrecode, PL_encoding);
7205                    pv2 = SvPV_const(svrecode, cur2);
7206               }
7207               else {
7208                    svrecode = newSVpvn(pv1, cur1);
7209                    sv_recode_to_utf8(svrecode, PL_encoding);
7210                    pv1 = SvPV_const(svrecode, cur1);
7211               }
7212               /* Now both are in UTF-8. */
7213               if (cur1 != cur2) {
7214                    SvREFCNT_dec(svrecode);
7215                    return FALSE;
7216               }
7217          }
7218          else {
7219               if (SvUTF8(sv1)) {
7220                   /* sv1 is the UTF-8 one  */
7221                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7222                                         (const U8*)pv1, cur1) == 0;
7223               }
7224               else {
7225                   /* sv2 is the UTF-8 one  */
7226                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7227                                         (const U8*)pv2, cur2) == 0;
7228               }
7229          }
7230     }
7231
7232     if (cur1 == cur2)
7233         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7234         
7235     SvREFCNT_dec(svrecode);
7236
7237     return eq;
7238 }
7239
7240 /*
7241 =for apidoc sv_cmp
7242
7243 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7244 string in C<sv1> is less than, equal to, or greater than the string in
7245 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7246 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7247
7248 =for apidoc sv_cmp_flags
7249
7250 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7251 string in C<sv1> is less than, equal to, or greater than the string in
7252 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7253 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7254 also C<sv_cmp_locale_flags>.
7255
7256 =cut
7257 */
7258
7259 I32
7260 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7261 {
7262     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7263 }
7264
7265 I32
7266 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7267                   const U32 flags)
7268 {
7269     dVAR;
7270     STRLEN cur1, cur2;
7271     const char *pv1, *pv2;
7272     char *tpv = NULL;
7273     I32  cmp;
7274     SV *svrecode = NULL;
7275
7276     if (!sv1) {
7277         pv1 = "";
7278         cur1 = 0;
7279     }
7280     else
7281         pv1 = SvPV_flags_const(sv1, cur1, flags);
7282
7283     if (!sv2) {
7284         pv2 = "";
7285         cur2 = 0;
7286     }
7287     else
7288         pv2 = SvPV_flags_const(sv2, cur2, flags);
7289
7290     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7291         /* Differing utf8ness.
7292          * Do not UTF8size the comparands as a side-effect. */
7293         if (SvUTF8(sv1)) {
7294             if (PL_encoding) {
7295                  svrecode = newSVpvn(pv2, cur2);
7296                  sv_recode_to_utf8(svrecode, PL_encoding);
7297                  pv2 = SvPV_const(svrecode, cur2);
7298             }
7299             else {
7300                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7301                                                    (const U8*)pv1, cur1);
7302                 return retval ? retval < 0 ? -1 : +1 : 0;
7303             }
7304         }
7305         else {
7306             if (PL_encoding) {
7307                  svrecode = newSVpvn(pv1, cur1);
7308                  sv_recode_to_utf8(svrecode, PL_encoding);
7309                  pv1 = SvPV_const(svrecode, cur1);
7310             }
7311             else {
7312                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7313                                                   (const U8*)pv2, cur2);
7314                 return retval ? retval < 0 ? -1 : +1 : 0;
7315             }
7316         }
7317     }
7318
7319     if (!cur1) {
7320         cmp = cur2 ? -1 : 0;
7321     } else if (!cur2) {
7322         cmp = 1;
7323     } else {
7324         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7325
7326         if (retval) {
7327             cmp = retval < 0 ? -1 : 1;
7328         } else if (cur1 == cur2) {
7329             cmp = 0;
7330         } else {
7331             cmp = cur1 < cur2 ? -1 : 1;
7332         }
7333     }
7334
7335     SvREFCNT_dec(svrecode);
7336     if (tpv)
7337         Safefree(tpv);
7338
7339     return cmp;
7340 }
7341
7342 /*
7343 =for apidoc sv_cmp_locale
7344
7345 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7346 'use bytes' aware, handles get magic, and will coerce its args to strings
7347 if necessary.  See also C<sv_cmp>.
7348
7349 =for apidoc sv_cmp_locale_flags
7350
7351 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7352 'use bytes' aware and will coerce its args to strings if necessary.  If the
7353 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7354
7355 =cut
7356 */
7357
7358 I32
7359 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7360 {
7361     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7362 }
7363
7364 I32
7365 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7366                          const U32 flags)
7367 {
7368     dVAR;
7369 #ifdef USE_LOCALE_COLLATE
7370
7371     char *pv1, *pv2;
7372     STRLEN len1, len2;
7373     I32 retval;
7374
7375     if (PL_collation_standard)
7376         goto raw_compare;
7377
7378     len1 = 0;
7379     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7380     len2 = 0;
7381     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7382
7383     if (!pv1 || !len1) {
7384         if (pv2 && len2)
7385             return -1;
7386         else
7387             goto raw_compare;
7388     }
7389     else {
7390         if (!pv2 || !len2)
7391             return 1;
7392     }
7393
7394     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7395
7396     if (retval)
7397         return retval < 0 ? -1 : 1;
7398
7399     /*
7400      * When the result of collation is equality, that doesn't mean
7401      * that there are no differences -- some locales exclude some
7402      * characters from consideration.  So to avoid false equalities,
7403      * we use the raw string as a tiebreaker.
7404      */
7405
7406   raw_compare:
7407     /*FALLTHROUGH*/
7408
7409 #endif /* USE_LOCALE_COLLATE */
7410
7411     return sv_cmp(sv1, sv2);
7412 }
7413
7414
7415 #ifdef USE_LOCALE_COLLATE
7416
7417 /*
7418 =for apidoc sv_collxfrm
7419
7420 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7421 C<sv_collxfrm_flags>.
7422
7423 =for apidoc sv_collxfrm_flags
7424
7425 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7426 flags contain SV_GMAGIC, it handles get-magic.
7427
7428 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7429 scalar data of the variable, but transformed to such a format that a normal
7430 memory comparison can be used to compare the data according to the locale
7431 settings.
7432
7433 =cut
7434 */
7435
7436 char *
7437 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7438 {
7439     dVAR;
7440     MAGIC *mg;
7441
7442     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7443
7444     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7445     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7446         const char *s;
7447         char *xf;
7448         STRLEN len, xlen;
7449
7450         if (mg)
7451             Safefree(mg->mg_ptr);
7452         s = SvPV_flags_const(sv, len, flags);
7453         if ((xf = mem_collxfrm(s, len, &xlen))) {
7454             if (! mg) {
7455 #ifdef PERL_OLD_COPY_ON_WRITE
7456                 if (SvIsCOW(sv))
7457                     sv_force_normal_flags(sv, 0);
7458 #endif
7459                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7460                                  0, 0);
7461                 assert(mg);
7462             }
7463             mg->mg_ptr = xf;
7464             mg->mg_len = xlen;
7465         }
7466         else {
7467             if (mg) {
7468                 mg->mg_ptr = NULL;
7469                 mg->mg_len = -1;
7470             }
7471         }
7472     }
7473     if (mg && mg->mg_ptr) {
7474         *nxp = mg->mg_len;
7475         return mg->mg_ptr + sizeof(PL_collation_ix);
7476     }
7477     else {
7478         *nxp = 0;
7479         return NULL;
7480     }
7481 }
7482
7483 #endif /* USE_LOCALE_COLLATE */
7484
7485 static char *
7486 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7487 {
7488     SV * const tsv = newSV(0);
7489     ENTER;
7490     SAVEFREESV(tsv);
7491     sv_gets(tsv, fp, 0);
7492     sv_utf8_upgrade_nomg(tsv);
7493     SvCUR_set(sv,append);
7494     sv_catsv(sv,tsv);
7495     LEAVE;
7496     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7497 }
7498
7499 static char *
7500 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7501 {
7502     I32 bytesread;
7503     const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7504       /* Grab the size of the record we're getting */
7505     char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7506 #ifdef VMS
7507     int fd;
7508 #endif
7509
7510     /* Go yank in */
7511 #ifdef VMS
7512     /* VMS wants read instead of fread, because fread doesn't respect */
7513     /* RMS record boundaries. This is not necessarily a good thing to be */
7514     /* doing, but we've got no other real choice - except avoid stdio
7515        as implementation - perhaps write a :vms layer ?
7516     */
7517     fd = PerlIO_fileno(fp);
7518     if (fd != -1) {
7519         bytesread = PerlLIO_read(fd, buffer, recsize);
7520     }
7521     else /* in-memory file from PerlIO::Scalar */
7522 #endif
7523     {
7524         bytesread = PerlIO_read(fp, buffer, recsize);
7525     }
7526
7527     if (bytesread < 0)
7528         bytesread = 0;
7529     SvCUR_set(sv, bytesread + append);
7530     buffer[bytesread] = '\0';
7531     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7532 }
7533
7534 /*
7535 =for apidoc sv_gets
7536
7537 Get a line from the filehandle and store it into the SV, optionally
7538 appending to the currently-stored string.
7539
7540 =cut
7541 */
7542
7543 char *
7544 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7545 {
7546     dVAR;
7547     const char *rsptr;
7548     STRLEN rslen;
7549     register STDCHAR rslast;
7550     register STDCHAR *bp;
7551     register I32 cnt;
7552     I32 i = 0;
7553     I32 rspara = 0;
7554
7555     PERL_ARGS_ASSERT_SV_GETS;
7556
7557     if (SvTHINKFIRST(sv))
7558         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7559     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7560        from <>.
7561        However, perlbench says it's slower, because the existing swipe code
7562        is faster than copy on write.
7563        Swings and roundabouts.  */
7564     SvUPGRADE(sv, SVt_PV);
7565
7566     SvSCREAM_off(sv);
7567
7568     if (append) {
7569         if (PerlIO_isutf8(fp)) {
7570             if (!SvUTF8(sv)) {
7571                 sv_utf8_upgrade_nomg(sv);
7572                 sv_pos_u2b(sv,&append,0);
7573             }
7574         } else if (SvUTF8(sv)) {
7575             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7576         }
7577     }
7578
7579     SvPOK_only(sv);
7580     if (!append) {
7581         SvCUR_set(sv,0);
7582     }
7583     if (PerlIO_isutf8(fp))
7584         SvUTF8_on(sv);
7585
7586     if (IN_PERL_COMPILETIME) {
7587         /* we always read code in line mode */
7588         rsptr = "\n";
7589         rslen = 1;
7590     }
7591     else if (RsSNARF(PL_rs)) {
7592         /* If it is a regular disk file use size from stat() as estimate
7593            of amount we are going to read -- may result in mallocing
7594            more memory than we really need if the layers below reduce
7595            the size we read (e.g. CRLF or a gzip layer).
7596          */
7597         Stat_t st;
7598         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7599             const Off_t offset = PerlIO_tell(fp);
7600             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7601                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7602             }
7603         }
7604         rsptr = NULL;
7605         rslen = 0;
7606     }
7607     else if (RsRECORD(PL_rs)) {
7608         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7609     }
7610     else if (RsPARA(PL_rs)) {
7611         rsptr = "\n\n";
7612         rslen = 2;
7613         rspara = 1;
7614     }
7615     else {
7616         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7617         if (PerlIO_isutf8(fp)) {
7618             rsptr = SvPVutf8(PL_rs, rslen);
7619         }
7620         else {
7621             if (SvUTF8(PL_rs)) {
7622                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7623                     Perl_croak(aTHX_ "Wide character in $/");
7624                 }
7625             }
7626             rsptr = SvPV_const(PL_rs, rslen);
7627         }
7628     }
7629
7630     rslast = rslen ? rsptr[rslen - 1] : '\0';
7631
7632     if (rspara) {               /* have to do this both before and after */
7633         do {                    /* to make sure file boundaries work right */
7634             if (PerlIO_eof(fp))
7635                 return 0;
7636             i = PerlIO_getc(fp);
7637             if (i != '\n') {
7638                 if (i == -1)
7639                     return 0;
7640                 PerlIO_ungetc(fp,i);
7641                 break;
7642             }
7643         } while (i != EOF);
7644     }
7645
7646     /* See if we know enough about I/O mechanism to cheat it ! */
7647
7648     /* This used to be #ifdef test - it is made run-time test for ease
7649        of abstracting out stdio interface. One call should be cheap
7650        enough here - and may even be a macro allowing compile
7651        time optimization.
7652      */
7653
7654     if (PerlIO_fast_gets(fp)) {
7655
7656     /*
7657      * We're going to steal some values from the stdio struct
7658      * and put EVERYTHING in the innermost loop into registers.
7659      */
7660     register STDCHAR *ptr;
7661     STRLEN bpx;
7662     I32 shortbuffered;
7663
7664 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7665     /* An ungetc()d char is handled separately from the regular
7666      * buffer, so we getc() it back out and stuff it in the buffer.
7667      */
7668     i = PerlIO_getc(fp);
7669     if (i == EOF) return 0;
7670     *(--((*fp)->_ptr)) = (unsigned char) i;
7671     (*fp)->_cnt++;
7672 #endif
7673
7674     /* Here is some breathtakingly efficient cheating */
7675
7676     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7677     /* make sure we have the room */
7678     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7679         /* Not room for all of it
7680            if we are looking for a separator and room for some
7681          */
7682         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7683             /* just process what we have room for */
7684             shortbuffered = cnt - SvLEN(sv) + append + 1;
7685             cnt -= shortbuffered;
7686         }
7687         else {
7688             shortbuffered = 0;
7689             /* remember that cnt can be negative */
7690             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7691         }
7692     }
7693     else
7694         shortbuffered = 0;
7695     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7696     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7697     DEBUG_P(PerlIO_printf(Perl_debug_log,
7698         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7699     DEBUG_P(PerlIO_printf(Perl_debug_log,
7700         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7701                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7702                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7703     for (;;) {
7704       screamer:
7705         if (cnt > 0) {
7706             if (rslen) {
7707                 while (cnt > 0) {                    /* this     |  eat */
7708                     cnt--;
7709                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7710                         goto thats_all_folks;        /* screams  |  sed :-) */
7711                 }
7712             }
7713             else {
7714                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7715                 bp += cnt;                           /* screams  |  dust */
7716                 ptr += cnt;                          /* louder   |  sed :-) */
7717                 cnt = 0;
7718                 assert (!shortbuffered);
7719                 goto cannot_be_shortbuffered;
7720             }
7721         }
7722         
7723         if (shortbuffered) {            /* oh well, must extend */
7724             cnt = shortbuffered;
7725             shortbuffered = 0;
7726             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7727             SvCUR_set(sv, bpx);
7728             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7729             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7730             continue;
7731         }
7732
7733     cannot_be_shortbuffered:
7734         DEBUG_P(PerlIO_printf(Perl_debug_log,
7735                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7736                               PTR2UV(ptr),(long)cnt));
7737         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7738
7739         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7740             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7741             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7742             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7743
7744         /* This used to call 'filbuf' in stdio form, but as that behaves like
7745            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7746            another abstraction.  */
7747         i   = PerlIO_getc(fp);          /* get more characters */
7748
7749         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7750             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7751             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7752             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7753
7754         cnt = PerlIO_get_cnt(fp);
7755         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7756         DEBUG_P(PerlIO_printf(Perl_debug_log,
7757             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7758
7759         if (i == EOF)                   /* all done for ever? */
7760             goto thats_really_all_folks;
7761
7762         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7763         SvCUR_set(sv, bpx);
7764         SvGROW(sv, bpx + cnt + 2);
7765         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7766
7767         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7768
7769         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7770             goto thats_all_folks;
7771     }
7772
7773 thats_all_folks:
7774     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7775           memNE((char*)bp - rslen, rsptr, rslen))
7776         goto screamer;                          /* go back to the fray */
7777 thats_really_all_folks:
7778     if (shortbuffered)
7779         cnt += shortbuffered;
7780         DEBUG_P(PerlIO_printf(Perl_debug_log,
7781             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7782     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7783     DEBUG_P(PerlIO_printf(Perl_debug_log,
7784         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7785         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7786         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7787     *bp = '\0';
7788     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7789     DEBUG_P(PerlIO_printf(Perl_debug_log,
7790         "Screamer: done, len=%ld, string=|%.*s|\n",
7791         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7792     }
7793    else
7794     {
7795        /*The big, slow, and stupid way. */
7796 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7797         STDCHAR *buf = NULL;
7798         Newx(buf, 8192, STDCHAR);
7799         assert(buf);
7800 #else
7801         STDCHAR buf[8192];
7802 #endif
7803
7804 screamer2:
7805         if (rslen) {
7806             register const STDCHAR * const bpe = buf + sizeof(buf);
7807             bp = buf;
7808             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7809                 ; /* keep reading */
7810             cnt = bp - buf;
7811         }
7812         else {
7813             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7814             /* Accommodate broken VAXC compiler, which applies U8 cast to
7815              * both args of ?: operator, causing EOF to change into 255
7816              */
7817             if (cnt > 0)
7818                  i = (U8)buf[cnt - 1];
7819             else
7820                  i = EOF;
7821         }
7822
7823         if (cnt < 0)
7824             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7825         if (append)
7826              sv_catpvn(sv, (char *) buf, cnt);
7827         else
7828              sv_setpvn(sv, (char *) buf, cnt);
7829
7830         if (i != EOF &&                 /* joy */
7831             (!rslen ||
7832              SvCUR(sv) < rslen ||
7833              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7834         {
7835             append = -1;
7836             /*
7837              * If we're reading from a TTY and we get a short read,
7838              * indicating that the user hit his EOF character, we need
7839              * to notice it now, because if we try to read from the TTY
7840              * again, the EOF condition will disappear.
7841              *
7842              * The comparison of cnt to sizeof(buf) is an optimization
7843              * that prevents unnecessary calls to feof().
7844              *
7845              * - jik 9/25/96
7846              */
7847             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7848                 goto screamer2;
7849         }
7850
7851 #ifdef USE_HEAP_INSTEAD_OF_STACK
7852         Safefree(buf);
7853 #endif
7854     }
7855
7856     if (rspara) {               /* have to do this both before and after */
7857         while (i != EOF) {      /* to make sure file boundaries work right */
7858             i = PerlIO_getc(fp);
7859             if (i != '\n') {
7860                 PerlIO_ungetc(fp,i);
7861                 break;
7862             }
7863         }
7864     }
7865
7866     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7867 }
7868
7869 /*
7870 =for apidoc sv_inc
7871
7872 Auto-increment of the value in the SV, doing string to numeric conversion
7873 if necessary.  Handles 'get' magic and operator overloading.
7874
7875 =cut
7876 */
7877
7878 void
7879 Perl_sv_inc(pTHX_ register SV *const sv)
7880 {
7881     if (!sv)
7882         return;
7883     SvGETMAGIC(sv);
7884     sv_inc_nomg(sv);
7885 }
7886
7887 /*
7888 =for apidoc sv_inc_nomg
7889
7890 Auto-increment of the value in the SV, doing string to numeric conversion
7891 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
7892
7893 =cut
7894 */
7895
7896 void
7897 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7898 {
7899     dVAR;
7900     register char *d;
7901     int flags;
7902
7903     if (!sv)
7904         return;
7905     if (SvTHINKFIRST(sv)) {
7906         if (SvIsCOW(sv) || isGV_with_GP(sv))
7907             sv_force_normal_flags(sv, 0);
7908         if (SvREADONLY(sv)) {
7909             if (IN_PERL_RUNTIME)
7910                 Perl_croak_no_modify(aTHX);
7911         }
7912         if (SvROK(sv)) {
7913             IV i;
7914             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
7915                 return;
7916             i = PTR2IV(SvRV(sv));
7917             sv_unref(sv);
7918             sv_setiv(sv, i);
7919         }
7920     }
7921     flags = SvFLAGS(sv);
7922     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7923         /* It's (privately or publicly) a float, but not tested as an
7924            integer, so test it to see. */
7925         (void) SvIV(sv);
7926         flags = SvFLAGS(sv);
7927     }
7928     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7929         /* It's publicly an integer, or privately an integer-not-float */
7930 #ifdef PERL_PRESERVE_IVUV
7931       oops_its_int:
7932 #endif
7933         if (SvIsUV(sv)) {
7934             if (SvUVX(sv) == UV_MAX)
7935                 sv_setnv(sv, UV_MAX_P1);
7936             else
7937                 (void)SvIOK_only_UV(sv);
7938                 SvUV_set(sv, SvUVX(sv) + 1);
7939         } else {
7940             if (SvIVX(sv) == IV_MAX)
7941                 sv_setuv(sv, (UV)IV_MAX + 1);
7942             else {
7943                 (void)SvIOK_only(sv);
7944                 SvIV_set(sv, SvIVX(sv) + 1);
7945             }   
7946         }
7947         return;
7948     }
7949     if (flags & SVp_NOK) {
7950         const NV was = SvNVX(sv);
7951         if (NV_OVERFLOWS_INTEGERS_AT &&
7952             was >= NV_OVERFLOWS_INTEGERS_AT) {
7953             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7954                            "Lost precision when incrementing %" NVff " by 1",
7955                            was);
7956         }
7957         (void)SvNOK_only(sv);
7958         SvNV_set(sv, was + 1.0);
7959         return;
7960     }
7961
7962     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7963         if ((flags & SVTYPEMASK) < SVt_PVIV)
7964             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7965         (void)SvIOK_only(sv);
7966         SvIV_set(sv, 1);
7967         return;
7968     }
7969     d = SvPVX(sv);
7970     while (isALPHA(*d)) d++;
7971     while (isDIGIT(*d)) d++;
7972     if (d < SvEND(sv)) {
7973 #ifdef PERL_PRESERVE_IVUV
7974         /* Got to punt this as an integer if needs be, but we don't issue
7975            warnings. Probably ought to make the sv_iv_please() that does
7976            the conversion if possible, and silently.  */
7977         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7978         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7979             /* Need to try really hard to see if it's an integer.
7980                9.22337203685478e+18 is an integer.
7981                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7982                so $a="9.22337203685478e+18"; $a+0; $a++
7983                needs to be the same as $a="9.22337203685478e+18"; $a++
7984                or we go insane. */
7985         
7986             (void) sv_2iv(sv);
7987             if (SvIOK(sv))
7988                 goto oops_its_int;
7989
7990             /* sv_2iv *should* have made this an NV */
7991             if (flags & SVp_NOK) {
7992                 (void)SvNOK_only(sv);
7993                 SvNV_set(sv, SvNVX(sv) + 1.0);
7994                 return;
7995             }
7996             /* I don't think we can get here. Maybe I should assert this
7997                And if we do get here I suspect that sv_setnv will croak. NWC
7998                Fall through. */
7999 #if defined(USE_LONG_DOUBLE)
8000             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",
8001                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8002 #else
8003             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8004                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8005 #endif
8006         }
8007 #endif /* PERL_PRESERVE_IVUV */
8008         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8009         return;
8010     }
8011     d--;
8012     while (d >= SvPVX_const(sv)) {
8013         if (isDIGIT(*d)) {
8014             if (++*d <= '9')
8015                 return;
8016             *(d--) = '0';
8017         }
8018         else {
8019 #ifdef EBCDIC
8020             /* MKS: The original code here died if letters weren't consecutive.
8021              * at least it didn't have to worry about non-C locales.  The
8022              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8023              * arranged in order (although not consecutively) and that only
8024              * [A-Za-z] are accepted by isALPHA in the C locale.
8025              */
8026             if (*d != 'z' && *d != 'Z') {
8027                 do { ++*d; } while (!isALPHA(*d));
8028                 return;
8029             }
8030             *(d--) -= 'z' - 'a';
8031 #else
8032             ++*d;
8033             if (isALPHA(*d))
8034                 return;
8035             *(d--) -= 'z' - 'a' + 1;
8036 #endif
8037         }
8038     }
8039     /* oh,oh, the number grew */
8040     SvGROW(sv, SvCUR(sv) + 2);
8041     SvCUR_set(sv, SvCUR(sv) + 1);
8042     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8043         *d = d[-1];
8044     if (isDIGIT(d[1]))
8045         *d = '1';
8046     else
8047         *d = d[1];
8048 }
8049
8050 /*
8051 =for apidoc sv_dec
8052
8053 Auto-decrement of the value in the SV, doing string to numeric conversion
8054 if necessary.  Handles 'get' magic and operator overloading.
8055
8056 =cut
8057 */
8058
8059 void
8060 Perl_sv_dec(pTHX_ register SV *const sv)
8061 {
8062     dVAR;
8063     if (!sv)
8064         return;
8065     SvGETMAGIC(sv);
8066     sv_dec_nomg(sv);
8067 }
8068
8069 /*
8070 =for apidoc sv_dec_nomg
8071
8072 Auto-decrement of the value in the SV, doing string to numeric conversion
8073 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8074
8075 =cut
8076 */
8077
8078 void
8079 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8080 {
8081     dVAR;
8082     int flags;
8083
8084     if (!sv)
8085         return;
8086     if (SvTHINKFIRST(sv)) {
8087         if (SvIsCOW(sv) || isGV_with_GP(sv))
8088             sv_force_normal_flags(sv, 0);
8089         if (SvREADONLY(sv)) {
8090             if (IN_PERL_RUNTIME)
8091                 Perl_croak_no_modify(aTHX);
8092         }
8093         if (SvROK(sv)) {
8094             IV i;
8095             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8096                 return;
8097             i = PTR2IV(SvRV(sv));
8098             sv_unref(sv);
8099             sv_setiv(sv, i);
8100         }
8101     }
8102     /* Unlike sv_inc we don't have to worry about string-never-numbers
8103        and keeping them magic. But we mustn't warn on punting */
8104     flags = SvFLAGS(sv);
8105     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8106         /* It's publicly an integer, or privately an integer-not-float */
8107 #ifdef PERL_PRESERVE_IVUV
8108       oops_its_int:
8109 #endif
8110         if (SvIsUV(sv)) {
8111             if (SvUVX(sv) == 0) {
8112                 (void)SvIOK_only(sv);
8113                 SvIV_set(sv, -1);
8114             }
8115             else {
8116                 (void)SvIOK_only_UV(sv);
8117                 SvUV_set(sv, SvUVX(sv) - 1);
8118             }   
8119         } else {
8120             if (SvIVX(sv) == IV_MIN) {
8121                 sv_setnv(sv, (NV)IV_MIN);
8122                 goto oops_its_num;
8123             }
8124             else {
8125                 (void)SvIOK_only(sv);
8126                 SvIV_set(sv, SvIVX(sv) - 1);
8127             }   
8128         }
8129         return;
8130     }
8131     if (flags & SVp_NOK) {
8132     oops_its_num:
8133         {
8134             const NV was = SvNVX(sv);
8135             if (NV_OVERFLOWS_INTEGERS_AT &&
8136                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8137                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8138                                "Lost precision when decrementing %" NVff " by 1",
8139                                was);
8140             }
8141             (void)SvNOK_only(sv);
8142             SvNV_set(sv, was - 1.0);
8143             return;
8144         }
8145     }
8146     if (!(flags & SVp_POK)) {
8147         if ((flags & SVTYPEMASK) < SVt_PVIV)
8148             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8149         SvIV_set(sv, -1);
8150         (void)SvIOK_only(sv);
8151         return;
8152     }
8153 #ifdef PERL_PRESERVE_IVUV
8154     {
8155         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8156         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8157             /* Need to try really hard to see if it's an integer.
8158                9.22337203685478e+18 is an integer.
8159                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8160                so $a="9.22337203685478e+18"; $a+0; $a--
8161                needs to be the same as $a="9.22337203685478e+18"; $a--
8162                or we go insane. */
8163         
8164             (void) sv_2iv(sv);
8165             if (SvIOK(sv))
8166                 goto oops_its_int;
8167
8168             /* sv_2iv *should* have made this an NV */
8169             if (flags & SVp_NOK) {
8170                 (void)SvNOK_only(sv);
8171                 SvNV_set(sv, SvNVX(sv) - 1.0);
8172                 return;
8173             }
8174             /* I don't think we can get here. Maybe I should assert this
8175                And if we do get here I suspect that sv_setnv will croak. NWC
8176                Fall through. */
8177 #if defined(USE_LONG_DOUBLE)
8178             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",
8179                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8180 #else
8181             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8182                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8183 #endif
8184         }
8185     }
8186 #endif /* PERL_PRESERVE_IVUV */
8187     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8188 }
8189
8190 /* this define is used to eliminate a chunk of duplicated but shared logic
8191  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8192  * used anywhere but here - yves
8193  */
8194 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8195     STMT_START {      \
8196         EXTEND_MORTAL(1); \
8197         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8198     } STMT_END
8199
8200 /*
8201 =for apidoc sv_mortalcopy
8202
8203 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8204 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8205 explicit call to FREETMPS, or by an implicit call at places such as
8206 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8207
8208 =cut
8209 */
8210
8211 /* Make a string that will exist for the duration of the expression
8212  * evaluation.  Actually, it may have to last longer than that, but
8213  * hopefully we won't free it until it has been assigned to a
8214  * permanent location. */
8215
8216 SV *
8217 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
8218 {
8219     dVAR;
8220     register SV *sv;
8221
8222     new_SV(sv);
8223     sv_setsv(sv,oldstr);
8224     PUSH_EXTEND_MORTAL__SV_C(sv);
8225     SvTEMP_on(sv);
8226     return sv;
8227 }
8228
8229 /*
8230 =for apidoc sv_newmortal
8231
8232 Creates a new null SV which is mortal.  The reference count of the SV is
8233 set to 1.  It will be destroyed "soon", either by an explicit call to
8234 FREETMPS, or by an implicit call at places such as statement boundaries.
8235 See also C<sv_mortalcopy> and C<sv_2mortal>.
8236
8237 =cut
8238 */
8239
8240 SV *
8241 Perl_sv_newmortal(pTHX)
8242 {
8243     dVAR;
8244     register SV *sv;
8245
8246     new_SV(sv);
8247     SvFLAGS(sv) = SVs_TEMP;
8248     PUSH_EXTEND_MORTAL__SV_C(sv);
8249     return sv;
8250 }
8251
8252
8253 /*
8254 =for apidoc newSVpvn_flags
8255
8256 Creates a new SV and copies a string into it.  The reference count for the
8257 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8258 string.  You are responsible for ensuring that the source string is at least
8259 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8260 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8261 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8262 returning.  If C<SVf_UTF8> is set, C<s>
8263 is considered to be in UTF-8 and the
8264 C<SVf_UTF8> flag will be set on the new SV.
8265 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8266
8267     #define newSVpvn_utf8(s, len, u)                    \
8268         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8269
8270 =cut
8271 */
8272
8273 SV *
8274 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8275 {
8276     dVAR;
8277     register SV *sv;
8278
8279     /* All the flags we don't support must be zero.
8280        And we're new code so I'm going to assert this from the start.  */
8281     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8282     new_SV(sv);
8283     sv_setpvn(sv,s,len);
8284
8285     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8286      * and do what it does ourselves here.
8287      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8288      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8289      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8290      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8291      */
8292
8293     SvFLAGS(sv) |= flags;
8294
8295     if(flags & SVs_TEMP){
8296         PUSH_EXTEND_MORTAL__SV_C(sv);
8297     }
8298
8299     return sv;
8300 }
8301
8302 /*
8303 =for apidoc sv_2mortal
8304
8305 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8306 by an explicit call to FREETMPS, or by an implicit call at places such as
8307 statement boundaries.  SvTEMP() is turned on which means that the SV's
8308 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
8309 and C<sv_mortalcopy>.
8310
8311 =cut
8312 */
8313
8314 SV *
8315 Perl_sv_2mortal(pTHX_ register SV *const sv)
8316 {
8317     dVAR;
8318     if (!sv)
8319         return NULL;
8320     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8321         return sv;
8322     PUSH_EXTEND_MORTAL__SV_C(sv);
8323     SvTEMP_on(sv);
8324     return sv;
8325 }
8326
8327 /*
8328 =for apidoc newSVpv
8329
8330 Creates a new SV and copies a string into it.  The reference count for the
8331 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8332 strlen().  For efficiency, consider using C<newSVpvn> instead.
8333
8334 =cut
8335 */
8336
8337 SV *
8338 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8339 {
8340     dVAR;
8341     register SV *sv;
8342
8343     new_SV(sv);
8344     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8345     return sv;
8346 }
8347
8348 /*
8349 =for apidoc newSVpvn
8350
8351 Creates a new SV and copies a string into it.  The reference count for the
8352 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8353 string.  You are responsible for ensuring that the source string is at least
8354 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8355
8356 =cut
8357 */
8358
8359 SV *
8360 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
8361 {
8362     dVAR;
8363     register SV *sv;
8364
8365     new_SV(sv);
8366     sv_setpvn(sv,s,len);
8367     return sv;
8368 }
8369
8370 /*
8371 =for apidoc newSVhek
8372
8373 Creates a new SV from the hash key structure.  It will generate scalars that
8374 point to the shared string table where possible.  Returns a new (undefined)
8375 SV if the hek is NULL.
8376
8377 =cut
8378 */
8379
8380 SV *
8381 Perl_newSVhek(pTHX_ const HEK *const hek)
8382 {
8383     dVAR;
8384     if (!hek) {
8385         SV *sv;
8386
8387         new_SV(sv);
8388         return sv;
8389     }
8390
8391     if (HEK_LEN(hek) == HEf_SVKEY) {
8392         return newSVsv(*(SV**)HEK_KEY(hek));
8393     } else {
8394         const int flags = HEK_FLAGS(hek);
8395         if (flags & HVhek_WASUTF8) {
8396             /* Trouble :-)
8397                Andreas would like keys he put in as utf8 to come back as utf8
8398             */
8399             STRLEN utf8_len = HEK_LEN(hek);
8400             SV * const sv = newSV_type(SVt_PV);
8401             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8402             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8403             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8404             SvUTF8_on (sv);
8405             return sv;
8406         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8407             /* We don't have a pointer to the hv, so we have to replicate the
8408                flag into every HEK. This hv is using custom a hasing
8409                algorithm. Hence we can't return a shared string scalar, as
8410                that would contain the (wrong) hash value, and might get passed
8411                into an hv routine with a regular hash.
8412                Similarly, a hash that isn't using shared hash keys has to have
8413                the flag in every key so that we know not to try to call
8414                share_hek_hek on it.  */
8415
8416             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8417             if (HEK_UTF8(hek))
8418                 SvUTF8_on (sv);
8419             return sv;
8420         }
8421         /* This will be overwhelminly the most common case.  */
8422         {
8423             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8424                more efficient than sharepvn().  */
8425             SV *sv;
8426
8427             new_SV(sv);
8428             sv_upgrade(sv, SVt_PV);
8429             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8430             SvCUR_set(sv, HEK_LEN(hek));
8431             SvLEN_set(sv, 0);
8432             SvREADONLY_on(sv);
8433             SvFAKE_on(sv);
8434             SvPOK_on(sv);
8435             if (HEK_UTF8(hek))
8436                 SvUTF8_on(sv);
8437             return sv;
8438         }
8439     }
8440 }
8441
8442 /*
8443 =for apidoc newSVpvn_share
8444
8445 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8446 table.  If the string does not already exist in the table, it is
8447 created first.  Turns on READONLY and FAKE.  If the C<hash> parameter
8448 is non-zero, that value is used; otherwise the hash is computed.
8449 The string's hash can later be retrieved from the SV
8450 with the C<SvSHARED_HASH()> macro.  The idea here is
8451 that as the string table is used for shared hash keys these strings will have
8452 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8453
8454 =cut
8455 */
8456
8457 SV *
8458 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8459 {
8460     dVAR;
8461     register SV *sv;
8462     bool is_utf8 = FALSE;
8463     const char *const orig_src = src;
8464
8465     if (len < 0) {
8466         STRLEN tmplen = -len;
8467         is_utf8 = TRUE;
8468         /* See the note in hv.c:hv_fetch() --jhi */
8469         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8470         len = tmplen;
8471     }
8472     if (!hash)
8473         PERL_HASH(hash, src, len);
8474     new_SV(sv);
8475     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8476        changes here, update it there too.  */
8477     sv_upgrade(sv, SVt_PV);
8478     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8479     SvCUR_set(sv, len);
8480     SvLEN_set(sv, 0);
8481     SvREADONLY_on(sv);
8482     SvFAKE_on(sv);
8483     SvPOK_on(sv);
8484     if (is_utf8)
8485         SvUTF8_on(sv);
8486     if (src != orig_src)
8487         Safefree(src);
8488     return sv;
8489 }
8490
8491 /*
8492 =for apidoc newSVpv_share
8493
8494 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8495 string/length pair.
8496
8497 =cut
8498 */
8499
8500 SV *
8501 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8502 {
8503     return newSVpvn_share(src, strlen(src), hash);
8504 }
8505
8506 #if defined(PERL_IMPLICIT_CONTEXT)
8507
8508 /* pTHX_ magic can't cope with varargs, so this is a no-context
8509  * version of the main function, (which may itself be aliased to us).
8510  * Don't access this version directly.
8511  */
8512
8513 SV *
8514 Perl_newSVpvf_nocontext(const char *const pat, ...)
8515 {
8516     dTHX;
8517     register SV *sv;
8518     va_list args;
8519
8520     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8521
8522     va_start(args, pat);
8523     sv = vnewSVpvf(pat, &args);
8524     va_end(args);
8525     return sv;
8526 }
8527 #endif
8528
8529 /*
8530 =for apidoc newSVpvf
8531
8532 Creates a new SV and initializes it with the string formatted like
8533 C<sprintf>.
8534
8535 =cut
8536 */
8537
8538 SV *
8539 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8540 {
8541     register SV *sv;
8542     va_list args;
8543
8544     PERL_ARGS_ASSERT_NEWSVPVF;
8545
8546     va_start(args, pat);
8547     sv = vnewSVpvf(pat, &args);
8548     va_end(args);
8549     return sv;
8550 }
8551
8552 /* backend for newSVpvf() and newSVpvf_nocontext() */
8553
8554 SV *
8555 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8556 {
8557     dVAR;
8558     register SV *sv;
8559
8560     PERL_ARGS_ASSERT_VNEWSVPVF;
8561
8562     new_SV(sv);
8563     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8564     return sv;
8565 }
8566
8567 /*
8568 =for apidoc newSVnv
8569
8570 Creates a new SV and copies a floating point value into it.
8571 The reference count for the SV is set to 1.
8572
8573 =cut
8574 */
8575
8576 SV *
8577 Perl_newSVnv(pTHX_ const NV n)
8578 {
8579     dVAR;
8580     register SV *sv;
8581
8582     new_SV(sv);
8583     sv_setnv(sv,n);
8584     return sv;
8585 }
8586
8587 /*
8588 =for apidoc newSViv
8589
8590 Creates a new SV and copies an integer into it.  The reference count for the
8591 SV is set to 1.
8592
8593 =cut
8594 */
8595
8596 SV *
8597 Perl_newSViv(pTHX_ const IV i)
8598 {
8599     dVAR;
8600     register SV *sv;
8601
8602     new_SV(sv);
8603     sv_setiv(sv,i);
8604     return sv;
8605 }
8606
8607 /*
8608 =for apidoc newSVuv
8609
8610 Creates a new SV and copies an unsigned integer into it.
8611 The reference count for the SV is set to 1.
8612
8613 =cut
8614 */
8615
8616 SV *
8617 Perl_newSVuv(pTHX_ const UV u)
8618 {
8619     dVAR;
8620     register SV *sv;
8621
8622     new_SV(sv);
8623     sv_setuv(sv,u);
8624     return sv;
8625 }
8626
8627 /*
8628 =for apidoc newSV_type
8629
8630 Creates a new SV, of the type specified.  The reference count for the new SV
8631 is set to 1.
8632
8633 =cut
8634 */
8635
8636 SV *
8637 Perl_newSV_type(pTHX_ const svtype type)
8638 {
8639     register SV *sv;
8640
8641     new_SV(sv);
8642     sv_upgrade(sv, type);
8643     return sv;
8644 }
8645
8646 /*
8647 =for apidoc newRV_noinc
8648
8649 Creates an RV wrapper for an SV.  The reference count for the original
8650 SV is B<not> incremented.
8651
8652 =cut
8653 */
8654
8655 SV *
8656 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8657 {
8658     dVAR;
8659     register SV *sv = newSV_type(SVt_IV);
8660
8661     PERL_ARGS_ASSERT_NEWRV_NOINC;
8662
8663     SvTEMP_off(tmpRef);
8664     SvRV_set(sv, tmpRef);
8665     SvROK_on(sv);
8666     return sv;
8667 }
8668
8669 /* newRV_inc is the official function name to use now.
8670  * newRV_inc is in fact #defined to newRV in sv.h
8671  */
8672
8673 SV *
8674 Perl_newRV(pTHX_ SV *const sv)
8675 {
8676     dVAR;
8677
8678     PERL_ARGS_ASSERT_NEWRV;
8679
8680     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8681 }
8682
8683 /*
8684 =for apidoc newSVsv
8685
8686 Creates a new SV which is an exact duplicate of the original SV.
8687 (Uses C<sv_setsv>.)
8688
8689 =cut
8690 */
8691
8692 SV *
8693 Perl_newSVsv(pTHX_ register SV *const old)
8694 {
8695     dVAR;
8696     register SV *sv;
8697
8698     if (!old)
8699         return NULL;
8700     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8701         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8702         return NULL;
8703     }
8704     new_SV(sv);
8705     /* SV_GMAGIC is the default for sv_setv()
8706        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8707        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8708     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8709     return sv;
8710 }
8711
8712 /*
8713 =for apidoc sv_reset
8714
8715 Underlying implementation for the C<reset> Perl function.
8716 Note that the perl-level function is vaguely deprecated.
8717
8718 =cut
8719 */
8720
8721 void
8722 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8723 {
8724     dVAR;
8725     char todo[PERL_UCHAR_MAX+1];
8726
8727     PERL_ARGS_ASSERT_SV_RESET;
8728
8729     if (!stash)
8730         return;
8731
8732     if (!*s) {          /* reset ?? searches */
8733         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8734         if (mg) {
8735             const U32 count = mg->mg_len / sizeof(PMOP**);
8736             PMOP **pmp = (PMOP**) mg->mg_ptr;
8737             PMOP *const *const end = pmp + count;
8738
8739             while (pmp < end) {
8740 #ifdef USE_ITHREADS
8741                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8742 #else
8743                 (*pmp)->op_pmflags &= ~PMf_USED;
8744 #endif
8745                 ++pmp;
8746             }
8747         }
8748         return;
8749     }
8750
8751     /* reset variables */
8752
8753     if (!HvARRAY(stash))
8754         return;
8755
8756     Zero(todo, 256, char);
8757     while (*s) {
8758         I32 max;
8759         I32 i = (unsigned char)*s;
8760         if (s[1] == '-') {
8761             s += 2;
8762         }
8763         max = (unsigned char)*s++;
8764         for ( ; i <= max; i++) {
8765             todo[i] = 1;
8766         }
8767         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8768             HE *entry;
8769             for (entry = HvARRAY(stash)[i];
8770                  entry;
8771                  entry = HeNEXT(entry))
8772             {
8773                 register GV *gv;
8774                 register SV *sv;
8775
8776                 if (!todo[(U8)*HeKEY(entry)])
8777                     continue;
8778                 gv = MUTABLE_GV(HeVAL(entry));
8779                 sv = GvSV(gv);
8780                 if (sv) {
8781                     if (SvTHINKFIRST(sv)) {
8782                         if (!SvREADONLY(sv) && SvROK(sv))
8783                             sv_unref(sv);
8784                         /* XXX Is this continue a bug? Why should THINKFIRST
8785                            exempt us from resetting arrays and hashes?  */
8786                         continue;
8787                     }
8788                     SvOK_off(sv);
8789                     if (SvTYPE(sv) >= SVt_PV) {
8790                         SvCUR_set(sv, 0);
8791                         if (SvPVX_const(sv) != NULL)
8792                             *SvPVX(sv) = '\0';
8793                         SvTAINT(sv);
8794                     }
8795                 }
8796                 if (GvAV(gv)) {
8797                     av_clear(GvAV(gv));
8798                 }
8799                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8800 #if defined(VMS)
8801                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8802 #else /* ! VMS */
8803                     hv_clear(GvHV(gv));
8804 #  if defined(USE_ENVIRON_ARRAY)
8805                     if (gv == PL_envgv)
8806                         my_clearenv();
8807 #  endif /* USE_ENVIRON_ARRAY */
8808 #endif /* VMS */
8809                 }
8810             }
8811         }
8812     }
8813 }
8814
8815 /*
8816 =for apidoc sv_2io
8817
8818 Using various gambits, try to get an IO from an SV: the IO slot if its a
8819 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8820 named after the PV if we're a string.
8821
8822 'Get' magic is ignored on the sv passed in, but will be called on
8823 C<SvRV(sv)> if sv is an RV.
8824
8825 =cut
8826 */
8827
8828 IO*
8829 Perl_sv_2io(pTHX_ SV *const sv)
8830 {
8831     IO* io;
8832     GV* gv;
8833
8834     PERL_ARGS_ASSERT_SV_2IO;
8835
8836     switch (SvTYPE(sv)) {
8837     case SVt_PVIO:
8838         io = MUTABLE_IO(sv);
8839         break;
8840     case SVt_PVGV:
8841     case SVt_PVLV:
8842         if (isGV_with_GP(sv)) {
8843             gv = MUTABLE_GV(sv);
8844             io = GvIO(gv);
8845             if (!io)
8846                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
8847                                     HEKfARG(GvNAME_HEK(gv)));
8848             break;
8849         }
8850         /* FALL THROUGH */
8851     default:
8852         if (!SvOK(sv))
8853             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8854         if (SvROK(sv)) {
8855             SvGETMAGIC(SvRV(sv));
8856             return sv_2io(SvRV(sv));
8857         }
8858         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
8859         if (gv)
8860             io = GvIO(gv);
8861         else
8862             io = 0;
8863         if (!io) {
8864             SV *newsv = sv;
8865             if (SvGMAGICAL(sv)) {
8866                 newsv = sv_newmortal();
8867                 sv_setsv_nomg(newsv, sv);
8868             }
8869             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
8870         }
8871         break;
8872     }
8873     return io;
8874 }
8875
8876 /*
8877 =for apidoc sv_2cv
8878
8879 Using various gambits, try to get a CV from an SV; in addition, try if
8880 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8881 The flags in C<lref> are passed to gv_fetchsv.
8882
8883 =cut
8884 */
8885
8886 CV *
8887 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8888 {
8889     dVAR;
8890     GV *gv = NULL;
8891     CV *cv = NULL;
8892
8893     PERL_ARGS_ASSERT_SV_2CV;
8894
8895     if (!sv) {
8896         *st = NULL;
8897         *gvp = NULL;
8898         return NULL;
8899     }
8900     switch (SvTYPE(sv)) {
8901     case SVt_PVCV:
8902         *st = CvSTASH(sv);
8903         *gvp = NULL;
8904         return MUTABLE_CV(sv);
8905     case SVt_PVHV:
8906     case SVt_PVAV:
8907         *st = NULL;
8908         *gvp = NULL;
8909         return NULL;
8910     default:
8911         SvGETMAGIC(sv);
8912         if (SvROK(sv)) {
8913             if (SvAMAGIC(sv))
8914                 sv = amagic_deref_call(sv, to_cv_amg);
8915
8916             sv = SvRV(sv);
8917             if (SvTYPE(sv) == SVt_PVCV) {
8918                 cv = MUTABLE_CV(sv);
8919                 *gvp = NULL;
8920                 *st = CvSTASH(cv);
8921                 return cv;
8922             }
8923             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
8924                 gv = MUTABLE_GV(sv);
8925             else
8926                 Perl_croak(aTHX_ "Not a subroutine reference");
8927         }
8928         else if (isGV_with_GP(sv)) {
8929             gv = MUTABLE_GV(sv);
8930         }
8931         else {
8932             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
8933         }
8934         *gvp = gv;
8935         if (!gv) {
8936             *st = NULL;
8937             return NULL;
8938         }
8939         /* Some flags to gv_fetchsv mean don't really create the GV  */
8940         if (!isGV_with_GP(gv)) {
8941             *st = NULL;
8942             return NULL;
8943         }
8944         *st = GvESTASH(gv);
8945         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
8946             SV *tmpsv;
8947             ENTER;
8948             tmpsv = newSV(0);
8949             gv_efullname3(tmpsv, gv, NULL);
8950             /* XXX this is probably not what they think they're getting.
8951              * It has the same effect as "sub name;", i.e. just a forward
8952              * declaration! */
8953             newSUB(start_subparse(FALSE, 0),
8954                    newSVOP(OP_CONST, 0, tmpsv),
8955                    NULL, NULL);
8956             LEAVE;
8957             if (!GvCVu(gv))
8958                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
8959                            SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8960         }
8961         return GvCVu(gv);
8962     }
8963 }
8964
8965 /*
8966 =for apidoc sv_true
8967
8968 Returns true if the SV has a true value by Perl's rules.
8969 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8970 instead use an in-line version.
8971
8972 =cut
8973 */
8974
8975 I32
8976 Perl_sv_true(pTHX_ register SV *const sv)
8977 {
8978     if (!sv)
8979         return 0;
8980     if (SvPOK(sv)) {
8981         register const XPV* const tXpv = (XPV*)SvANY(sv);
8982         if (tXpv &&
8983                 (tXpv->xpv_cur > 1 ||
8984                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
8985             return 1;
8986         else
8987             return 0;
8988     }
8989     else {
8990         if (SvIOK(sv))
8991             return SvIVX(sv) != 0;
8992         else {
8993             if (SvNOK(sv))
8994                 return SvNVX(sv) != 0.0;
8995             else
8996                 return sv_2bool(sv);
8997         }
8998     }
8999 }
9000
9001 /*
9002 =for apidoc sv_pvn_force
9003
9004 Get a sensible string out of the SV somehow.
9005 A private implementation of the C<SvPV_force> macro for compilers which
9006 can't cope with complex macro expressions.  Always use the macro instead.
9007
9008 =for apidoc sv_pvn_force_flags
9009
9010 Get a sensible string out of the SV somehow.
9011 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9012 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9013 implemented in terms of this function.
9014 You normally want to use the various wrapper macros instead: see
9015 C<SvPV_force> and C<SvPV_force_nomg>
9016
9017 =cut
9018 */
9019
9020 char *
9021 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9022 {
9023     dVAR;
9024
9025     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9026
9027     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9028     if (SvTHINKFIRST(sv) && !SvROK(sv))
9029         sv_force_normal_flags(sv, 0);
9030
9031     if (SvPOK(sv)) {
9032         if (lp)
9033             *lp = SvCUR(sv);
9034     }
9035     else {
9036         char *s;
9037         STRLEN len;
9038  
9039         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9040             const char * const ref = sv_reftype(sv,0);
9041             if (PL_op)
9042                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9043                            ref, OP_DESC(PL_op));
9044             else
9045                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9046         }
9047         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
9048             || isGV_with_GP(sv))
9049             /* diag_listed_as: Can't coerce %s to %s in %s */
9050             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9051                 OP_DESC(PL_op));
9052         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9053         if (lp)
9054             *lp = len;
9055
9056         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9057             if (SvROK(sv))
9058                 sv_unref(sv);
9059             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9060             SvGROW(sv, len + 1);
9061             Move(s,SvPVX(sv),len,char);
9062             SvCUR_set(sv, len);
9063             SvPVX(sv)[len] = '\0';
9064         }
9065         if (!SvPOK(sv)) {
9066             SvPOK_on(sv);               /* validate pointer */
9067             SvTAINT(sv);
9068             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9069                                   PTR2UV(sv),SvPVX_const(sv)));
9070         }
9071     }
9072     return SvPVX_mutable(sv);
9073 }
9074
9075 /*
9076 =for apidoc sv_pvbyten_force
9077
9078 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9079 instead.
9080
9081 =cut
9082 */
9083
9084 char *
9085 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9086 {
9087     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9088
9089     sv_pvn_force(sv,lp);
9090     sv_utf8_downgrade(sv,0);
9091     *lp = SvCUR(sv);
9092     return SvPVX(sv);
9093 }
9094
9095 /*
9096 =for apidoc sv_pvutf8n_force
9097
9098 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9099 instead.
9100
9101 =cut
9102 */
9103
9104 char *
9105 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9106 {
9107     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9108
9109     sv_pvn_force(sv,lp);
9110     sv_utf8_upgrade(sv);
9111     *lp = SvCUR(sv);
9112     return SvPVX(sv);
9113 }
9114
9115 /*
9116 =for apidoc sv_reftype
9117
9118 Returns a string describing what the SV is a reference to.
9119
9120 =cut
9121 */
9122
9123 const char *
9124 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9125 {
9126     PERL_ARGS_ASSERT_SV_REFTYPE;
9127     if (ob && SvOBJECT(sv)) {
9128         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9129     }
9130     else {
9131         switch (SvTYPE(sv)) {
9132         case SVt_NULL:
9133         case SVt_IV:
9134         case SVt_NV:
9135         case SVt_PV:
9136         case SVt_PVIV:
9137         case SVt_PVNV:
9138         case SVt_PVMG:
9139                                 if (SvVOK(sv))
9140                                     return "VSTRING";
9141                                 if (SvROK(sv))
9142                                     return "REF";
9143                                 else
9144                                     return "SCALAR";
9145
9146         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9147                                 /* tied lvalues should appear to be
9148                                  * scalars for backwards compatibility */
9149                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9150                                     ? "SCALAR" : "LVALUE");
9151         case SVt_PVAV:          return "ARRAY";
9152         case SVt_PVHV:          return "HASH";
9153         case SVt_PVCV:          return "CODE";
9154         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9155                                     ? "GLOB" : "SCALAR");
9156         case SVt_PVFM:          return "FORMAT";
9157         case SVt_PVIO:          return "IO";
9158         case SVt_BIND:          return "BIND";
9159         case SVt_REGEXP:        return "REGEXP";
9160         default:                return "UNKNOWN";
9161         }
9162     }
9163 }
9164
9165 /*
9166 =for apidoc sv_ref
9167
9168 Returns a SV describing what the SV passed in is a reference to.
9169
9170 =cut
9171 */
9172
9173 SV *
9174 Perl_sv_ref(pTHX_ register SV *dst, const SV *const sv, const int ob)
9175 {
9176     PERL_ARGS_ASSERT_SV_REF;
9177
9178     if (!dst)
9179         dst = sv_newmortal();
9180
9181     if (ob && SvOBJECT(sv)) {
9182         HvNAME_get(SvSTASH(sv))
9183                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9184                     : sv_setpvn(dst, "__ANON__", 8);
9185     }
9186     else {
9187         const char * reftype = sv_reftype(sv, 0);
9188         sv_setpv(dst, reftype);
9189     }
9190     return dst;
9191 }
9192
9193 /*
9194 =for apidoc sv_isobject
9195
9196 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9197 object.  If the SV is not an RV, or if the object is not blessed, then this
9198 will return false.
9199
9200 =cut
9201 */
9202
9203 int
9204 Perl_sv_isobject(pTHX_ SV *sv)
9205 {
9206     if (!sv)
9207         return 0;
9208     SvGETMAGIC(sv);
9209     if (!SvROK(sv))
9210         return 0;
9211     sv = SvRV(sv);
9212     if (!SvOBJECT(sv))
9213         return 0;
9214     return 1;
9215 }
9216
9217 /*
9218 =for apidoc sv_isa
9219
9220 Returns a boolean indicating whether the SV is blessed into the specified
9221 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9222 an inheritance relationship.
9223
9224 =cut
9225 */
9226
9227 int
9228 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9229 {
9230     const char *hvname;
9231
9232     PERL_ARGS_ASSERT_SV_ISA;
9233
9234     if (!sv)
9235         return 0;
9236     SvGETMAGIC(sv);
9237     if (!SvROK(sv))
9238         return 0;
9239     sv = SvRV(sv);
9240     if (!SvOBJECT(sv))
9241         return 0;
9242     hvname = HvNAME_get(SvSTASH(sv));
9243     if (!hvname)
9244         return 0;
9245
9246     return strEQ(hvname, name);
9247 }
9248
9249 /*
9250 =for apidoc newSVrv
9251
9252 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9253 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9254 be blessed in the specified package.  The new SV is returned and its
9255 reference count is 1.
9256
9257 =cut
9258 */
9259
9260 SV*
9261 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9262 {
9263     dVAR;
9264     SV *sv;
9265
9266     PERL_ARGS_ASSERT_NEWSVRV;
9267
9268     new_SV(sv);
9269
9270     SV_CHECK_THINKFIRST_COW_DROP(rv);
9271     (void)SvAMAGIC_off(rv);
9272
9273     if (SvTYPE(rv) >= SVt_PVMG) {
9274         const U32 refcnt = SvREFCNT(rv);
9275         SvREFCNT(rv) = 0;
9276         sv_clear(rv);
9277         SvFLAGS(rv) = 0;
9278         SvREFCNT(rv) = refcnt;
9279
9280         sv_upgrade(rv, SVt_IV);
9281     } else if (SvROK(rv)) {
9282         SvREFCNT_dec(SvRV(rv));
9283     } else {
9284         prepare_SV_for_RV(rv);
9285     }
9286
9287     SvOK_off(rv);
9288     SvRV_set(rv, sv);
9289     SvROK_on(rv);
9290
9291     if (classname) {
9292         HV* const stash = gv_stashpv(classname, GV_ADD);
9293         (void)sv_bless(rv, stash);
9294     }
9295     return sv;
9296 }
9297
9298 /*
9299 =for apidoc sv_setref_pv
9300
9301 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9302 argument will be upgraded to an RV.  That RV will be modified to point to
9303 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9304 into the SV.  The C<classname> argument indicates the package for the
9305 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9306 will have a reference count of 1, and the RV will be returned.
9307
9308 Do not use with other Perl types such as HV, AV, SV, CV, because those
9309 objects will become corrupted by the pointer copy process.
9310
9311 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9312
9313 =cut
9314 */
9315
9316 SV*
9317 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9318 {
9319     dVAR;
9320
9321     PERL_ARGS_ASSERT_SV_SETREF_PV;
9322
9323     if (!pv) {
9324         sv_setsv(rv, &PL_sv_undef);
9325         SvSETMAGIC(rv);
9326     }
9327     else
9328         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9329     return rv;
9330 }
9331
9332 /*
9333 =for apidoc sv_setref_iv
9334
9335 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9336 argument will be upgraded to an RV.  That RV will be modified to point to
9337 the new SV.  The C<classname> argument indicates the package for the
9338 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9339 will have a reference count of 1, and the RV will be returned.
9340
9341 =cut
9342 */
9343
9344 SV*
9345 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9346 {
9347     PERL_ARGS_ASSERT_SV_SETREF_IV;
9348
9349     sv_setiv(newSVrv(rv,classname), iv);
9350     return rv;
9351 }
9352
9353 /*
9354 =for apidoc sv_setref_uv
9355
9356 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9357 argument will be upgraded to an RV.  That RV will be modified to point to
9358 the new SV.  The C<classname> argument indicates the package for the
9359 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9360 will have a reference count of 1, and the RV will be returned.
9361
9362 =cut
9363 */
9364
9365 SV*
9366 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9367 {
9368     PERL_ARGS_ASSERT_SV_SETREF_UV;
9369
9370     sv_setuv(newSVrv(rv,classname), uv);
9371     return rv;
9372 }
9373
9374 /*
9375 =for apidoc sv_setref_nv
9376
9377 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9378 argument will be upgraded to an RV.  That RV will be modified to point to
9379 the new SV.  The C<classname> argument indicates the package for the
9380 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9381 will have a reference count of 1, and the RV will be returned.
9382
9383 =cut
9384 */
9385
9386 SV*
9387 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9388 {
9389     PERL_ARGS_ASSERT_SV_SETREF_NV;
9390
9391     sv_setnv(newSVrv(rv,classname), nv);
9392     return rv;
9393 }
9394
9395 /*
9396 =for apidoc sv_setref_pvn
9397
9398 Copies a string into a new SV, optionally blessing the SV.  The length of the
9399 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9400 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9401 argument indicates the package for the blessing.  Set C<classname> to
9402 C<NULL> to avoid the blessing.  The new SV will have a reference count
9403 of 1, and the RV will be returned.
9404
9405 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9406
9407 =cut
9408 */
9409
9410 SV*
9411 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9412                    const char *const pv, const STRLEN n)
9413 {
9414     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9415
9416     sv_setpvn(newSVrv(rv,classname), pv, n);
9417     return rv;
9418 }
9419
9420 /*
9421 =for apidoc sv_bless
9422
9423 Blesses an SV into a specified package.  The SV must be an RV.  The package
9424 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9425 of the SV is unaffected.
9426
9427 =cut
9428 */
9429
9430 SV*
9431 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9432 {
9433     dVAR;
9434     SV *tmpRef;
9435
9436     PERL_ARGS_ASSERT_SV_BLESS;
9437
9438     if (!SvROK(sv))
9439         Perl_croak(aTHX_ "Can't bless non-reference value");
9440     tmpRef = SvRV(sv);
9441     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9442         if (SvIsCOW(tmpRef))
9443             sv_force_normal_flags(tmpRef, 0);
9444         if (SvREADONLY(tmpRef))
9445             Perl_croak_no_modify(aTHX);
9446         if (SvOBJECT(tmpRef)) {
9447             if (SvTYPE(tmpRef) != SVt_PVIO)
9448                 --PL_sv_objcount;
9449             SvREFCNT_dec(SvSTASH(tmpRef));
9450         }
9451     }
9452     SvOBJECT_on(tmpRef);
9453     if (SvTYPE(tmpRef) != SVt_PVIO)
9454         ++PL_sv_objcount;
9455     SvUPGRADE(tmpRef, SVt_PVMG);
9456     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9457
9458     if (Gv_AMG(stash))
9459         SvAMAGIC_on(sv);
9460     else
9461         (void)SvAMAGIC_off(sv);
9462
9463     if(SvSMAGICAL(tmpRef))
9464         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9465             mg_set(tmpRef);
9466
9467
9468
9469     return sv;
9470 }
9471
9472 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9473  * as it is after unglobbing it.
9474  */
9475
9476 PERL_STATIC_INLINE void
9477 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9478 {
9479     dVAR;
9480     void *xpvmg;
9481     HV *stash;
9482     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9483
9484     PERL_ARGS_ASSERT_SV_UNGLOB;
9485
9486     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9487     SvFAKE_off(sv);
9488     if (!(flags & SV_COW_DROP_PV))
9489         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9490
9491     if (GvGP(sv)) {
9492         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9493            && HvNAME_get(stash))
9494             mro_method_changed_in(stash);
9495         gp_free(MUTABLE_GV(sv));
9496     }
9497     if (GvSTASH(sv)) {
9498         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9499         GvSTASH(sv) = NULL;
9500     }
9501     GvMULTI_off(sv);
9502     if (GvNAME_HEK(sv)) {
9503         unshare_hek(GvNAME_HEK(sv));
9504     }
9505     isGV_with_GP_off(sv);
9506
9507     if(SvTYPE(sv) == SVt_PVGV) {
9508         /* need to keep SvANY(sv) in the right arena */
9509         xpvmg = new_XPVMG();
9510         StructCopy(SvANY(sv), xpvmg, XPVMG);
9511         del_XPVGV(SvANY(sv));
9512         SvANY(sv) = xpvmg;
9513
9514         SvFLAGS(sv) &= ~SVTYPEMASK;
9515         SvFLAGS(sv) |= SVt_PVMG;
9516     }
9517
9518     /* Intentionally not calling any local SET magic, as this isn't so much a
9519        set operation as merely an internal storage change.  */
9520     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9521     else sv_setsv_flags(sv, temp, 0);
9522
9523     if ((const GV *)sv == PL_last_in_gv)
9524         PL_last_in_gv = NULL;
9525 }
9526
9527 /*
9528 =for apidoc sv_unref_flags
9529
9530 Unsets the RV status of the SV, and decrements the reference count of
9531 whatever was being referenced by the RV.  This can almost be thought of
9532 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9533 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9534 (otherwise the decrementing is conditional on the reference count being
9535 different from one or the reference being a readonly SV).
9536 See C<SvROK_off>.
9537
9538 =cut
9539 */
9540
9541 void
9542 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9543 {
9544     SV* const target = SvRV(ref);
9545
9546     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9547
9548     if (SvWEAKREF(ref)) {
9549         sv_del_backref(target, ref);
9550         SvWEAKREF_off(ref);
9551         SvRV_set(ref, NULL);
9552         return;
9553     }
9554     SvRV_set(ref, NULL);
9555     SvROK_off(ref);
9556     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9557        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9558     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9559         SvREFCNT_dec(target);
9560     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9561         sv_2mortal(target);     /* Schedule for freeing later */
9562 }
9563
9564 /*
9565 =for apidoc sv_untaint
9566
9567 Untaint an SV.  Use C<SvTAINTED_off> instead.
9568
9569 =cut
9570 */
9571
9572 void
9573 Perl_sv_untaint(pTHX_ SV *const sv)
9574 {
9575     PERL_ARGS_ASSERT_SV_UNTAINT;
9576
9577     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9578         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9579         if (mg)
9580             mg->mg_len &= ~1;
9581     }
9582 }
9583
9584 /*
9585 =for apidoc sv_tainted
9586
9587 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9588
9589 =cut
9590 */
9591
9592 bool
9593 Perl_sv_tainted(pTHX_ SV *const sv)
9594 {
9595     PERL_ARGS_ASSERT_SV_TAINTED;
9596
9597     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9598         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9599         if (mg && (mg->mg_len & 1) )
9600             return TRUE;
9601     }
9602     return FALSE;
9603 }
9604
9605 /*
9606 =for apidoc sv_setpviv
9607
9608 Copies an integer into the given SV, also updating its string value.
9609 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9610
9611 =cut
9612 */
9613
9614 void
9615 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9616 {
9617     char buf[TYPE_CHARS(UV)];
9618     char *ebuf;
9619     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9620
9621     PERL_ARGS_ASSERT_SV_SETPVIV;
9622
9623     sv_setpvn(sv, ptr, ebuf - ptr);
9624 }
9625
9626 /*
9627 =for apidoc sv_setpviv_mg
9628
9629 Like C<sv_setpviv>, but also handles 'set' magic.
9630
9631 =cut
9632 */
9633
9634 void
9635 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9636 {
9637     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9638
9639     sv_setpviv(sv, iv);
9640     SvSETMAGIC(sv);
9641 }
9642
9643 #if defined(PERL_IMPLICIT_CONTEXT)
9644
9645 /* pTHX_ magic can't cope with varargs, so this is a no-context
9646  * version of the main function, (which may itself be aliased to us).
9647  * Don't access this version directly.
9648  */
9649
9650 void
9651 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9652 {
9653     dTHX;
9654     va_list args;
9655
9656     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9657
9658     va_start(args, pat);
9659     sv_vsetpvf(sv, pat, &args);
9660     va_end(args);
9661 }
9662
9663 /* pTHX_ magic can't cope with varargs, so this is a no-context
9664  * version of the main function, (which may itself be aliased to us).
9665  * Don't access this version directly.
9666  */
9667
9668 void
9669 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9670 {
9671     dTHX;
9672     va_list args;
9673
9674     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9675
9676     va_start(args, pat);
9677     sv_vsetpvf_mg(sv, pat, &args);
9678     va_end(args);
9679 }
9680 #endif
9681
9682 /*
9683 =for apidoc sv_setpvf
9684
9685 Works like C<sv_catpvf> but copies the text into the SV instead of
9686 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9687
9688 =cut
9689 */
9690
9691 void
9692 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9693 {
9694     va_list args;
9695
9696     PERL_ARGS_ASSERT_SV_SETPVF;
9697
9698     va_start(args, pat);
9699     sv_vsetpvf(sv, pat, &args);
9700     va_end(args);
9701 }
9702
9703 /*
9704 =for apidoc sv_vsetpvf
9705
9706 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9707 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9708
9709 Usually used via its frontend C<sv_setpvf>.
9710
9711 =cut
9712 */
9713
9714 void
9715 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9716 {
9717     PERL_ARGS_ASSERT_SV_VSETPVF;
9718
9719     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9720 }
9721
9722 /*
9723 =for apidoc sv_setpvf_mg
9724
9725 Like C<sv_setpvf>, but also handles 'set' magic.
9726
9727 =cut
9728 */
9729
9730 void
9731 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9732 {
9733     va_list args;
9734
9735     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9736
9737     va_start(args, pat);
9738     sv_vsetpvf_mg(sv, pat, &args);
9739     va_end(args);
9740 }
9741
9742 /*
9743 =for apidoc sv_vsetpvf_mg
9744
9745 Like C<sv_vsetpvf>, but also handles 'set' magic.
9746
9747 Usually used via its frontend C<sv_setpvf_mg>.
9748
9749 =cut
9750 */
9751
9752 void
9753 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9754 {
9755     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9756
9757     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9758     SvSETMAGIC(sv);
9759 }
9760
9761 #if defined(PERL_IMPLICIT_CONTEXT)
9762
9763 /* pTHX_ magic can't cope with varargs, so this is a no-context
9764  * version of the main function, (which may itself be aliased to us).
9765  * Don't access this version directly.
9766  */
9767
9768 void
9769 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9770 {
9771     dTHX;
9772     va_list args;
9773
9774     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9775
9776     va_start(args, pat);
9777     sv_vcatpvf(sv, pat, &args);
9778     va_end(args);
9779 }
9780
9781 /* pTHX_ magic can't cope with varargs, so this is a no-context
9782  * version of the main function, (which may itself be aliased to us).
9783  * Don't access this version directly.
9784  */
9785
9786 void
9787 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9788 {
9789     dTHX;
9790     va_list args;
9791
9792     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9793
9794     va_start(args, pat);
9795     sv_vcatpvf_mg(sv, pat, &args);
9796     va_end(args);
9797 }
9798 #endif
9799
9800 /*
9801 =for apidoc sv_catpvf
9802
9803 Processes its arguments like C<sprintf> and appends the formatted
9804 output to an SV.  If the appended data contains "wide" characters
9805 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9806 and characters >255 formatted with %c), the original SV might get
9807 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9808 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
9809 valid UTF-8; if the original SV was bytes, the pattern should be too.
9810
9811 =cut */
9812
9813 void
9814 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9815 {
9816     va_list args;
9817
9818     PERL_ARGS_ASSERT_SV_CATPVF;
9819
9820     va_start(args, pat);
9821     sv_vcatpvf(sv, pat, &args);
9822     va_end(args);
9823 }
9824
9825 /*
9826 =for apidoc sv_vcatpvf
9827
9828 Processes its arguments like C<vsprintf> and appends the formatted output
9829 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9830
9831 Usually used via its frontend C<sv_catpvf>.
9832
9833 =cut
9834 */
9835
9836 void
9837 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9838 {
9839     PERL_ARGS_ASSERT_SV_VCATPVF;
9840
9841     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9842 }
9843
9844 /*
9845 =for apidoc sv_catpvf_mg
9846
9847 Like C<sv_catpvf>, but also handles 'set' magic.
9848
9849 =cut
9850 */
9851
9852 void
9853 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9854 {
9855     va_list args;
9856
9857     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9858
9859     va_start(args, pat);
9860     sv_vcatpvf_mg(sv, pat, &args);
9861     va_end(args);
9862 }
9863
9864 /*
9865 =for apidoc sv_vcatpvf_mg
9866
9867 Like C<sv_vcatpvf>, but also handles 'set' magic.
9868
9869 Usually used via its frontend C<sv_catpvf_mg>.
9870
9871 =cut
9872 */
9873
9874 void
9875 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9876 {
9877     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9878
9879     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9880     SvSETMAGIC(sv);
9881 }
9882
9883 /*
9884 =for apidoc sv_vsetpvfn
9885
9886 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9887 appending it.
9888
9889 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9890
9891 =cut
9892 */
9893
9894 void
9895 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9896                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9897 {
9898     PERL_ARGS_ASSERT_SV_VSETPVFN;
9899
9900     sv_setpvs(sv, "");
9901     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9902 }
9903
9904
9905 /*
9906  * Warn of missing argument to sprintf, and then return a defined value
9907  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9908  */
9909 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9910 STATIC SV*
9911 S_vcatpvfn_missing_argument(pTHX) {
9912     if (ckWARN(WARN_MISSING)) {
9913         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9914                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9915     }
9916     return &PL_sv_no;
9917 }
9918
9919
9920 STATIC I32
9921 S_expect_number(pTHX_ char **const pattern)
9922 {
9923     dVAR;
9924     I32 var = 0;
9925
9926     PERL_ARGS_ASSERT_EXPECT_NUMBER;
9927
9928     switch (**pattern) {
9929     case '1': case '2': case '3':
9930     case '4': case '5': case '6':
9931     case '7': case '8': case '9':
9932         var = *(*pattern)++ - '0';
9933         while (isDIGIT(**pattern)) {
9934             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9935             if (tmp < var)
9936                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9937             var = tmp;
9938         }
9939     }
9940     return var;
9941 }
9942
9943 STATIC char *
9944 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9945 {
9946     const int neg = nv < 0;
9947     UV uv;
9948
9949     PERL_ARGS_ASSERT_F0CONVERT;
9950
9951     if (neg)
9952         nv = -nv;
9953     if (nv < UV_MAX) {
9954         char *p = endbuf;
9955         nv += 0.5;
9956         uv = (UV)nv;
9957         if (uv & 1 && uv == nv)
9958             uv--;                       /* Round to even */
9959         do {
9960             const unsigned dig = uv % 10;
9961             *--p = '0' + dig;
9962         } while (uv /= 10);
9963         if (neg)
9964             *--p = '-';
9965         *len = endbuf - p;
9966         return p;
9967     }
9968     return NULL;
9969 }
9970
9971
9972 /*
9973 =for apidoc sv_vcatpvfn
9974
9975 Processes its arguments like C<vsprintf> and appends the formatted output
9976 to an SV.  Uses an array of SVs if the C style variable argument list is
9977 missing (NULL).  When running with taint checks enabled, indicates via
9978 C<maybe_tainted> if results are untrustworthy (often due to the use of
9979 locales).
9980
9981 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9982
9983 =cut
9984 */
9985
9986
9987 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
9988                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
9989                         vec_utf8 = DO_UTF8(vecsv);
9990
9991 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9992
9993 void
9994 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9995                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9996 {
9997     dVAR;
9998     char *p;
9999     char *q;
10000     const char *patend;
10001     STRLEN origlen;
10002     I32 svix = 0;
10003     static const char nullstr[] = "(null)";
10004     SV *argsv = NULL;
10005     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10006     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10007     SV *nsv = NULL;
10008     /* Times 4: a decimal digit takes more than 3 binary digits.
10009      * NV_DIG: mantissa takes than many decimal digits.
10010      * Plus 32: Playing safe. */
10011     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10012     /* large enough for "%#.#f" --chip */
10013     /* what about long double NVs? --jhi */
10014
10015     PERL_ARGS_ASSERT_SV_VCATPVFN;
10016     PERL_UNUSED_ARG(maybe_tainted);
10017
10018     /* no matter what, this is a string now */
10019     (void)SvPV_force(sv, origlen);
10020
10021     /* special-case "", "%s", and "%-p" (SVf - see below) */
10022     if (patlen == 0)
10023         return;
10024     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10025         if (args) {
10026             const char * const s = va_arg(*args, char*);
10027             sv_catpv(sv, s ? s : nullstr);
10028         }
10029         else if (svix < svmax) {
10030             sv_catsv(sv, *svargs);
10031         }
10032         else
10033             S_vcatpvfn_missing_argument(aTHX);
10034         return;
10035     }
10036     if (args && patlen == 3 && pat[0] == '%' &&
10037                 pat[1] == '-' && pat[2] == 'p') {
10038         argsv = MUTABLE_SV(va_arg(*args, void*));
10039         sv_catsv(sv, argsv);
10040         return;
10041     }
10042
10043 #ifndef USE_LONG_DOUBLE
10044     /* special-case "%.<number>[gf]" */
10045     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10046          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10047         unsigned digits = 0;
10048         const char *pp;
10049
10050         pp = pat + 2;
10051         while (*pp >= '0' && *pp <= '9')
10052             digits = 10 * digits + (*pp++ - '0');
10053         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10054             const NV nv = SvNV(*svargs);
10055             if (*pp == 'g') {
10056                 /* Add check for digits != 0 because it seems that some
10057                    gconverts are buggy in this case, and we don't yet have
10058                    a Configure test for this.  */
10059                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10060                      /* 0, point, slack */
10061                     Gconvert(nv, (int)digits, 0, ebuf);
10062                     sv_catpv(sv, ebuf);
10063                     if (*ebuf)  /* May return an empty string for digits==0 */
10064                         return;
10065                 }
10066             } else if (!digits) {
10067                 STRLEN l;
10068
10069                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10070                     sv_catpvn(sv, p, l);
10071                     return;
10072                 }
10073             }
10074         }
10075     }
10076 #endif /* !USE_LONG_DOUBLE */
10077
10078     if (!args && svix < svmax && DO_UTF8(*svargs))
10079         has_utf8 = TRUE;
10080
10081     patend = (char*)pat + patlen;
10082     for (p = (char*)pat; p < patend; p = q) {
10083         bool alt = FALSE;
10084         bool left = FALSE;
10085         bool vectorize = FALSE;
10086         bool vectorarg = FALSE;
10087         bool vec_utf8 = FALSE;
10088         char fill = ' ';
10089         char plus = 0;
10090         char intsize = 0;
10091         STRLEN width = 0;
10092         STRLEN zeros = 0;
10093         bool has_precis = FALSE;
10094         STRLEN precis = 0;
10095         const I32 osvix = svix;
10096         bool is_utf8 = FALSE;  /* is this item utf8?   */
10097 #ifdef HAS_LDBL_SPRINTF_BUG
10098         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10099            with sfio - Allen <allens@cpan.org> */
10100         bool fix_ldbl_sprintf_bug = FALSE;
10101 #endif
10102
10103         char esignbuf[4];
10104         U8 utf8buf[UTF8_MAXBYTES+1];
10105         STRLEN esignlen = 0;
10106
10107         const char *eptr = NULL;
10108         const char *fmtstart;
10109         STRLEN elen = 0;
10110         SV *vecsv = NULL;
10111         const U8 *vecstr = NULL;
10112         STRLEN veclen = 0;
10113         char c = 0;
10114         int i;
10115         unsigned base = 0;
10116         IV iv = 0;
10117         UV uv = 0;
10118         /* we need a long double target in case HAS_LONG_DOUBLE but
10119            not USE_LONG_DOUBLE
10120         */
10121 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10122         long double nv;
10123 #else
10124         NV nv;
10125 #endif
10126         STRLEN have;
10127         STRLEN need;
10128         STRLEN gap;
10129         const char *dotstr = ".";
10130         STRLEN dotstrlen = 1;
10131         I32 efix = 0; /* explicit format parameter index */
10132         I32 ewix = 0; /* explicit width index */
10133         I32 epix = 0; /* explicit precision index */
10134         I32 evix = 0; /* explicit vector index */
10135         bool asterisk = FALSE;
10136
10137         /* echo everything up to the next format specification */
10138         for (q = p; q < patend && *q != '%'; ++q) ;
10139         if (q > p) {
10140             if (has_utf8 && !pat_utf8)
10141                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
10142             else
10143                 sv_catpvn(sv, p, q - p);
10144             p = q;
10145         }
10146         if (q++ >= patend)
10147             break;
10148
10149         fmtstart = q;
10150
10151 /*
10152     We allow format specification elements in this order:
10153         \d+\$              explicit format parameter index
10154         [-+ 0#]+           flags
10155         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10156         0                  flag (as above): repeated to allow "v02"     
10157         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10158         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10159         [hlqLV]            size
10160     [%bcdefginopsuxDFOUX] format (mandatory)
10161 */
10162
10163         if (args) {
10164 /*  
10165         As of perl5.9.3, printf format checking is on by default.
10166         Internally, perl uses %p formats to provide an escape to
10167         some extended formatting.  This block deals with those
10168         extensions: if it does not match, (char*)q is reset and
10169         the normal format processing code is used.
10170
10171         Currently defined extensions are:
10172                 %p              include pointer address (standard)      
10173                 %-p     (SVf)   include an SV (previously %_)
10174                 %-<num>p        include an SV with precision <num>      
10175                 %2p             include a HEK
10176                 %3p             include a HEK with precision of 256
10177                 %<num>p         (where num != 2 or 3) reserved for future
10178                                 extensions
10179
10180         Robin Barker 2005-07-14 (but modified since)
10181
10182                 %1p     (VDf)   removed.  RMB 2007-10-19
10183 */
10184             char* r = q; 
10185             bool sv = FALSE;    
10186             STRLEN n = 0;
10187             if (*q == '-')
10188                 sv = *q++;
10189             n = expect_number(&q);
10190             if (*q++ == 'p') {
10191                 if (sv) {                       /* SVf */
10192                     if (n) {
10193                         precis = n;
10194                         has_precis = TRUE;
10195                     }
10196                     argsv = MUTABLE_SV(va_arg(*args, void*));
10197                     eptr = SvPV_const(argsv, elen);
10198                     if (DO_UTF8(argsv))
10199                         is_utf8 = TRUE;
10200                     goto string;
10201                 }
10202                 else if (n==2 || n==3) {        /* HEKf */
10203                     HEK * const hek = va_arg(*args, HEK *);
10204                     eptr = HEK_KEY(hek);
10205                     elen = HEK_LEN(hek);
10206                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10207                     if (n==3) precis = 256, has_precis = TRUE;
10208                     goto string;
10209                 }
10210                 else if (n) {
10211                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10212                                      "internal %%<num>p might conflict with future printf extensions");
10213                 }
10214             }
10215             q = r; 
10216         }
10217
10218         if ( (width = expect_number(&q)) ) {
10219             if (*q == '$') {
10220                 ++q;
10221                 efix = width;
10222             } else {
10223                 goto gotwidth;
10224             }
10225         }
10226
10227         /* FLAGS */
10228
10229         while (*q) {
10230             switch (*q) {
10231             case ' ':
10232             case '+':
10233                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10234                     q++;
10235                 else
10236                     plus = *q++;
10237                 continue;
10238
10239             case '-':
10240                 left = TRUE;
10241                 q++;
10242                 continue;
10243
10244             case '0':
10245                 fill = *q++;
10246                 continue;
10247
10248             case '#':
10249                 alt = TRUE;
10250                 q++;
10251                 continue;
10252
10253             default:
10254                 break;
10255             }
10256             break;
10257         }
10258
10259       tryasterisk:
10260         if (*q == '*') {
10261             q++;
10262             if ( (ewix = expect_number(&q)) )
10263                 if (*q++ != '$')
10264                     goto unknown;
10265             asterisk = TRUE;
10266         }
10267         if (*q == 'v') {
10268             q++;
10269             if (vectorize)
10270                 goto unknown;
10271             if ((vectorarg = asterisk)) {
10272                 evix = ewix;
10273                 ewix = 0;
10274                 asterisk = FALSE;
10275             }
10276             vectorize = TRUE;
10277             goto tryasterisk;
10278         }
10279
10280         if (!asterisk)
10281         {
10282             if( *q == '0' )
10283                 fill = *q++;
10284             width = expect_number(&q);
10285         }
10286
10287         if (vectorize && vectorarg) {
10288             /* vectorizing, but not with the default "." */
10289             if (args)
10290                 vecsv = va_arg(*args, SV*);
10291             else if (evix) {
10292                 vecsv = (evix > 0 && evix <= svmax)
10293                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10294             } else {
10295                 vecsv = svix < svmax
10296                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10297             }
10298             dotstr = SvPV_const(vecsv, dotstrlen);
10299             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10300                bad with tied or overloaded values that return UTF8.  */
10301             if (DO_UTF8(vecsv))
10302                 is_utf8 = TRUE;
10303             else if (has_utf8) {
10304                 vecsv = sv_mortalcopy(vecsv);
10305                 sv_utf8_upgrade(vecsv);
10306                 dotstr = SvPV_const(vecsv, dotstrlen);
10307                 is_utf8 = TRUE;
10308             }               
10309         }
10310
10311         if (asterisk) {
10312             if (args)
10313                 i = va_arg(*args, int);
10314             else
10315                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10316                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10317             left |= (i < 0);
10318             width = (i < 0) ? -i : i;
10319         }
10320       gotwidth:
10321
10322         /* PRECISION */
10323
10324         if (*q == '.') {
10325             q++;
10326             if (*q == '*') {
10327                 q++;
10328                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10329                     goto unknown;
10330                 /* XXX: todo, support specified precision parameter */
10331                 if (epix)
10332                     goto unknown;
10333                 if (args)
10334                     i = va_arg(*args, int);
10335                 else
10336                     i = (ewix ? ewix <= svmax : svix < svmax)
10337                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10338                 precis = i;
10339                 has_precis = !(i < 0);
10340             }
10341             else {
10342                 precis = 0;
10343                 while (isDIGIT(*q))
10344                     precis = precis * 10 + (*q++ - '0');
10345                 has_precis = TRUE;
10346             }
10347         }
10348
10349         if (vectorize) {
10350             if (args) {
10351                 VECTORIZE_ARGS
10352             }
10353             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10354                 vecsv = svargs[efix ? efix-1 : svix++];
10355                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10356                 vec_utf8 = DO_UTF8(vecsv);
10357
10358                 /* if this is a version object, we need to convert
10359                  * back into v-string notation and then let the
10360                  * vectorize happen normally
10361                  */
10362                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10363                     char *version = savesvpv(vecsv);
10364                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10365                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10366                         "vector argument not supported with alpha versions");
10367                         goto unknown;
10368                     }
10369                     vecsv = sv_newmortal();
10370                     scan_vstring(version, version + veclen, vecsv);
10371                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10372                     vec_utf8 = DO_UTF8(vecsv);
10373                     Safefree(version);
10374                 }
10375             }
10376             else {
10377                 vecstr = (U8*)"";
10378                 veclen = 0;
10379             }
10380         }
10381
10382         /* SIZE */
10383
10384         switch (*q) {
10385 #ifdef WIN32
10386         case 'I':                       /* Ix, I32x, and I64x */
10387 #  ifdef WIN64
10388             if (q[1] == '6' && q[2] == '4') {
10389                 q += 3;
10390                 intsize = 'q';
10391                 break;
10392             }
10393 #  endif
10394             if (q[1] == '3' && q[2] == '2') {
10395                 q += 3;
10396                 break;
10397             }
10398 #  ifdef WIN64
10399             intsize = 'q';
10400 #  endif
10401             q++;
10402             break;
10403 #endif
10404 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10405         case 'L':                       /* Ld */
10406             /*FALLTHROUGH*/
10407 #ifdef HAS_QUAD
10408         case 'q':                       /* qd */
10409 #endif
10410             intsize = 'q';
10411             q++;
10412             break;
10413 #endif
10414         case 'l':
10415             ++q;
10416 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10417             if (*q == 'l') {    /* lld, llf */
10418                 intsize = 'q';
10419                 ++q;
10420             }
10421             else
10422 #endif
10423                 intsize = 'l';
10424             break;
10425         case 'h':
10426             if (*++q == 'h') {  /* hhd, hhu */
10427                 intsize = 'c';
10428                 ++q;
10429             }
10430             else
10431                 intsize = 'h';
10432             break;
10433         case 'V':
10434         case 'z':
10435         case 't':
10436 #if HAS_C99
10437         case 'j':
10438 #endif
10439             intsize = *q++;
10440             break;
10441         }
10442
10443         /* CONVERSION */
10444
10445         if (*q == '%') {
10446             eptr = q++;
10447             elen = 1;
10448             if (vectorize) {
10449                 c = '%';
10450                 goto unknown;
10451             }
10452             goto string;
10453         }
10454
10455         if (!vectorize && !args) {
10456             if (efix) {
10457                 const I32 i = efix-1;
10458                 argsv = (i >= 0 && i < svmax)
10459                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10460             } else {
10461                 argsv = (svix >= 0 && svix < svmax)
10462                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10463             }
10464         }
10465
10466         switch (c = *q++) {
10467
10468             /* STRINGS */
10469
10470         case 'c':
10471             if (vectorize)
10472                 goto unknown;
10473             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10474             if ((uv > 255 ||
10475                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10476                 && !IN_BYTES) {
10477                 eptr = (char*)utf8buf;
10478                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10479                 is_utf8 = TRUE;
10480             }
10481             else {
10482                 c = (char)uv;
10483                 eptr = &c;
10484                 elen = 1;
10485             }
10486             goto string;
10487
10488         case 's':
10489             if (vectorize)
10490                 goto unknown;
10491             if (args) {
10492                 eptr = va_arg(*args, char*);
10493                 if (eptr)
10494                     elen = strlen(eptr);
10495                 else {
10496                     eptr = (char *)nullstr;
10497                     elen = sizeof nullstr - 1;
10498                 }
10499             }
10500             else {
10501                 eptr = SvPV_const(argsv, elen);
10502                 if (DO_UTF8(argsv)) {
10503                     STRLEN old_precis = precis;
10504                     if (has_precis && precis < elen) {
10505                         STRLEN ulen = sv_len_utf8(argsv);
10506                         I32 p = precis > ulen ? ulen : precis;
10507                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
10508                         precis = p;
10509                     }
10510                     if (width) { /* fudge width (can't fudge elen) */
10511                         if (has_precis && precis < elen)
10512                             width += precis - old_precis;
10513                         else
10514                             width += elen - sv_len_utf8(argsv);
10515                     }
10516                     is_utf8 = TRUE;
10517                 }
10518             }
10519
10520         string:
10521             if (has_precis && precis < elen)
10522                 elen = precis;
10523             break;
10524
10525             /* INTEGERS */
10526
10527         case 'p':
10528             if (alt || vectorize)
10529                 goto unknown;
10530             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10531             base = 16;
10532             goto integer;
10533
10534         case 'D':
10535 #ifdef IV_IS_QUAD
10536             intsize = 'q';
10537 #else
10538             intsize = 'l';
10539 #endif
10540             /*FALLTHROUGH*/
10541         case 'd':
10542         case 'i':
10543 #if vdNUMBER
10544         format_vd:
10545 #endif
10546             if (vectorize) {
10547                 STRLEN ulen;
10548                 if (!veclen)
10549                     continue;
10550                 if (vec_utf8)
10551                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10552                                         UTF8_ALLOW_ANYUV);
10553                 else {
10554                     uv = *vecstr;
10555                     ulen = 1;
10556                 }
10557                 vecstr += ulen;
10558                 veclen -= ulen;
10559                 if (plus)
10560                      esignbuf[esignlen++] = plus;
10561             }
10562             else if (args) {
10563                 switch (intsize) {
10564                 case 'c':       iv = (char)va_arg(*args, int); break;
10565                 case 'h':       iv = (short)va_arg(*args, int); break;
10566                 case 'l':       iv = va_arg(*args, long); break;
10567                 case 'V':       iv = va_arg(*args, IV); break;
10568                 case 'z':       iv = va_arg(*args, SSize_t); break;
10569                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10570                 default:        iv = va_arg(*args, int); break;
10571 #if HAS_C99
10572                 case 'j':       iv = va_arg(*args, intmax_t); break;
10573 #endif
10574                 case 'q':
10575 #ifdef HAS_QUAD
10576                                 iv = va_arg(*args, Quad_t); break;
10577 #else
10578                                 goto unknown;
10579 #endif
10580                 }
10581             }
10582             else {
10583                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10584                 switch (intsize) {
10585                 case 'c':       iv = (char)tiv; break;
10586                 case 'h':       iv = (short)tiv; break;
10587                 case 'l':       iv = (long)tiv; break;
10588                 case 'V':
10589                 default:        iv = tiv; break;
10590                 case 'q':
10591 #ifdef HAS_QUAD
10592                                 iv = (Quad_t)tiv; break;
10593 #else
10594                                 goto unknown;
10595 #endif
10596                 }
10597             }
10598             if ( !vectorize )   /* we already set uv above */
10599             {
10600                 if (iv >= 0) {
10601                     uv = iv;
10602                     if (plus)
10603                         esignbuf[esignlen++] = plus;
10604                 }
10605                 else {
10606                     uv = -iv;
10607                     esignbuf[esignlen++] = '-';
10608                 }
10609             }
10610             base = 10;
10611             goto integer;
10612
10613         case 'U':
10614 #ifdef IV_IS_QUAD
10615             intsize = 'q';
10616 #else
10617             intsize = 'l';
10618 #endif
10619             /*FALLTHROUGH*/
10620         case 'u':
10621             base = 10;
10622             goto uns_integer;
10623
10624         case 'B':
10625         case 'b':
10626             base = 2;
10627             goto uns_integer;
10628
10629         case 'O':
10630 #ifdef IV_IS_QUAD
10631             intsize = 'q';
10632 #else
10633             intsize = 'l';
10634 #endif
10635             /*FALLTHROUGH*/
10636         case 'o':
10637             base = 8;
10638             goto uns_integer;
10639
10640         case 'X':
10641         case 'x':
10642             base = 16;
10643
10644         uns_integer:
10645             if (vectorize) {
10646                 STRLEN ulen;
10647         vector:
10648                 if (!veclen)
10649                     continue;
10650                 if (vec_utf8)
10651                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10652                                         UTF8_ALLOW_ANYUV);
10653                 else {
10654                     uv = *vecstr;
10655                     ulen = 1;
10656                 }
10657                 vecstr += ulen;
10658                 veclen -= ulen;
10659             }
10660             else if (args) {
10661                 switch (intsize) {
10662                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10663                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10664                 case 'l':  uv = va_arg(*args, unsigned long); break;
10665                 case 'V':  uv = va_arg(*args, UV); break;
10666                 case 'z':  uv = va_arg(*args, Size_t); break;
10667                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10668 #if HAS_C99
10669                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10670 #endif
10671                 default:   uv = va_arg(*args, unsigned); break;
10672                 case 'q':
10673 #ifdef HAS_QUAD
10674                            uv = va_arg(*args, Uquad_t); break;
10675 #else
10676                            goto unknown;
10677 #endif
10678                 }
10679             }
10680             else {
10681                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10682                 switch (intsize) {
10683                 case 'c':       uv = (unsigned char)tuv; break;
10684                 case 'h':       uv = (unsigned short)tuv; break;
10685                 case 'l':       uv = (unsigned long)tuv; break;
10686                 case 'V':
10687                 default:        uv = tuv; break;
10688                 case 'q':
10689 #ifdef HAS_QUAD
10690                                 uv = (Uquad_t)tuv; break;
10691 #else
10692                                 goto unknown;
10693 #endif
10694                 }
10695             }
10696
10697         integer:
10698             {
10699                 char *ptr = ebuf + sizeof ebuf;
10700                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10701                 zeros = 0;
10702
10703                 switch (base) {
10704                     unsigned dig;
10705                 case 16:
10706                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10707                     do {
10708                         dig = uv & 15;
10709                         *--ptr = p[dig];
10710                     } while (uv >>= 4);
10711                     if (tempalt) {
10712                         esignbuf[esignlen++] = '0';
10713                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10714                     }
10715                     break;
10716                 case 8:
10717                     do {
10718                         dig = uv & 7;
10719                         *--ptr = '0' + dig;
10720                     } while (uv >>= 3);
10721                     if (alt && *ptr != '0')
10722                         *--ptr = '0';
10723                     break;
10724                 case 2:
10725                     do {
10726                         dig = uv & 1;
10727                         *--ptr = '0' + dig;
10728                     } while (uv >>= 1);
10729                     if (tempalt) {
10730                         esignbuf[esignlen++] = '0';
10731                         esignbuf[esignlen++] = c;
10732                     }
10733                     break;
10734                 default:                /* it had better be ten or less */
10735                     do {
10736                         dig = uv % base;
10737                         *--ptr = '0' + dig;
10738                     } while (uv /= base);
10739                     break;
10740                 }
10741                 elen = (ebuf + sizeof ebuf) - ptr;
10742                 eptr = ptr;
10743                 if (has_precis) {
10744                     if (precis > elen)
10745                         zeros = precis - elen;
10746                     else if (precis == 0 && elen == 1 && *eptr == '0'
10747                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10748                         elen = 0;
10749
10750                 /* a precision nullifies the 0 flag. */
10751                     if (fill == '0')
10752                         fill = ' ';
10753                 }
10754             }
10755             break;
10756
10757             /* FLOATING POINT */
10758
10759         case 'F':
10760             c = 'f';            /* maybe %F isn't supported here */
10761             /*FALLTHROUGH*/
10762         case 'e': case 'E':
10763         case 'f':
10764         case 'g': case 'G':
10765             if (vectorize)
10766                 goto unknown;
10767
10768             /* This is evil, but floating point is even more evil */
10769
10770             /* for SV-style calling, we can only get NV
10771                for C-style calling, we assume %f is double;
10772                for simplicity we allow any of %Lf, %llf, %qf for long double
10773             */
10774             switch (intsize) {
10775             case 'V':
10776 #if defined(USE_LONG_DOUBLE)
10777                 intsize = 'q';
10778 #endif
10779                 break;
10780 /* [perl #20339] - we should accept and ignore %lf rather than die */
10781             case 'l':
10782                 /*FALLTHROUGH*/
10783             default:
10784 #if defined(USE_LONG_DOUBLE)
10785                 intsize = args ? 0 : 'q';
10786 #endif
10787                 break;
10788             case 'q':
10789 #if defined(HAS_LONG_DOUBLE)
10790                 break;
10791 #else
10792                 /*FALLTHROUGH*/
10793 #endif
10794             case 'c':
10795             case 'h':
10796             case 'z':
10797             case 't':
10798             case 'j':
10799                 goto unknown;
10800             }
10801
10802             /* now we need (long double) if intsize == 'q', else (double) */
10803             nv = (args) ?
10804 #if LONG_DOUBLESIZE > DOUBLESIZE
10805                 intsize == 'q' ?
10806                     va_arg(*args, long double) :
10807                     va_arg(*args, double)
10808 #else
10809                     va_arg(*args, double)
10810 #endif
10811                 : SvNV(argsv);
10812
10813             need = 0;
10814             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10815                else. frexp() has some unspecified behaviour for those three */
10816             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10817                 i = PERL_INT_MIN;
10818                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10819                    will cast our (long double) to (double) */
10820                 (void)Perl_frexp(nv, &i);
10821                 if (i == PERL_INT_MIN)
10822                     Perl_die(aTHX_ "panic: frexp");
10823                 if (i > 0)
10824                     need = BIT_DIGITS(i);
10825             }
10826             need += has_precis ? precis : 6; /* known default */
10827
10828             if (need < width)
10829                 need = width;
10830
10831 #ifdef HAS_LDBL_SPRINTF_BUG
10832             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10833                with sfio - Allen <allens@cpan.org> */
10834
10835 #  ifdef DBL_MAX
10836 #    define MY_DBL_MAX DBL_MAX
10837 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10838 #    if DOUBLESIZE >= 8
10839 #      define MY_DBL_MAX 1.7976931348623157E+308L
10840 #    else
10841 #      define MY_DBL_MAX 3.40282347E+38L
10842 #    endif
10843 #  endif
10844
10845 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10846 #    define MY_DBL_MAX_BUG 1L
10847 #  else
10848 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10849 #  endif
10850
10851 #  ifdef DBL_MIN
10852 #    define MY_DBL_MIN DBL_MIN
10853 #  else  /* XXX guessing! -Allen */
10854 #    if DOUBLESIZE >= 8
10855 #      define MY_DBL_MIN 2.2250738585072014E-308L
10856 #    else
10857 #      define MY_DBL_MIN 1.17549435E-38L
10858 #    endif
10859 #  endif
10860
10861             if ((intsize == 'q') && (c == 'f') &&
10862                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10863                 (need < DBL_DIG)) {
10864                 /* it's going to be short enough that
10865                  * long double precision is not needed */
10866
10867                 if ((nv <= 0L) && (nv >= -0L))
10868                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10869                 else {
10870                     /* would use Perl_fp_class as a double-check but not
10871                      * functional on IRIX - see perl.h comments */
10872
10873                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10874                         /* It's within the range that a double can represent */
10875 #if defined(DBL_MAX) && !defined(DBL_MIN)
10876                         if ((nv >= ((long double)1/DBL_MAX)) ||
10877                             (nv <= (-(long double)1/DBL_MAX)))
10878 #endif
10879                         fix_ldbl_sprintf_bug = TRUE;
10880                     }
10881                 }
10882                 if (fix_ldbl_sprintf_bug == TRUE) {
10883                     double temp;
10884
10885                     intsize = 0;
10886                     temp = (double)nv;
10887                     nv = (NV)temp;
10888                 }
10889             }
10890
10891 #  undef MY_DBL_MAX
10892 #  undef MY_DBL_MAX_BUG
10893 #  undef MY_DBL_MIN
10894
10895 #endif /* HAS_LDBL_SPRINTF_BUG */
10896
10897             need += 20; /* fudge factor */
10898             if (PL_efloatsize < need) {
10899                 Safefree(PL_efloatbuf);
10900                 PL_efloatsize = need + 20; /* more fudge */
10901                 Newx(PL_efloatbuf, PL_efloatsize, char);
10902                 PL_efloatbuf[0] = '\0';
10903             }
10904
10905             if ( !(width || left || plus || alt) && fill != '0'
10906                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10907                 /* See earlier comment about buggy Gconvert when digits,
10908                    aka precis is 0  */
10909                 if ( c == 'g' && precis) {
10910                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10911                     /* May return an empty string for digits==0 */
10912                     if (*PL_efloatbuf) {
10913                         elen = strlen(PL_efloatbuf);
10914                         goto float_converted;
10915                     }
10916                 } else if ( c == 'f' && !precis) {
10917                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10918                         break;
10919                 }
10920             }
10921             {
10922                 char *ptr = ebuf + sizeof ebuf;
10923                 *--ptr = '\0';
10924                 *--ptr = c;
10925                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10926 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10927                 if (intsize == 'q') {
10928                     /* Copy the one or more characters in a long double
10929                      * format before the 'base' ([efgEFG]) character to
10930                      * the format string. */
10931                     static char const prifldbl[] = PERL_PRIfldbl;
10932                     char const *p = prifldbl + sizeof(prifldbl) - 3;
10933                     while (p >= prifldbl) { *--ptr = *p--; }
10934                 }
10935 #endif
10936                 if (has_precis) {
10937                     base = precis;
10938                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10939                     *--ptr = '.';
10940                 }
10941                 if (width) {
10942                     base = width;
10943                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10944                 }
10945                 if (fill == '0')
10946                     *--ptr = fill;
10947                 if (left)
10948                     *--ptr = '-';
10949                 if (plus)
10950                     *--ptr = plus;
10951                 if (alt)
10952                     *--ptr = '#';
10953                 *--ptr = '%';
10954
10955                 /* No taint.  Otherwise we are in the strange situation
10956                  * where printf() taints but print($float) doesn't.
10957                  * --jhi */
10958 #if defined(HAS_LONG_DOUBLE)
10959                 elen = ((intsize == 'q')
10960                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10961                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
10962 #else
10963                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
10964 #endif
10965             }
10966         float_converted:
10967             eptr = PL_efloatbuf;
10968             break;
10969
10970             /* SPECIAL */
10971
10972         case 'n':
10973             if (vectorize)
10974                 goto unknown;
10975             i = SvCUR(sv) - origlen;
10976             if (args) {
10977                 switch (intsize) {
10978                 case 'c':       *(va_arg(*args, char*)) = i; break;
10979                 case 'h':       *(va_arg(*args, short*)) = i; break;
10980                 default:        *(va_arg(*args, int*)) = i; break;
10981                 case 'l':       *(va_arg(*args, long*)) = i; break;
10982                 case 'V':       *(va_arg(*args, IV*)) = i; break;
10983                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
10984                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
10985 #if HAS_C99
10986                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
10987 #endif
10988                 case 'q':
10989 #ifdef HAS_QUAD
10990                                 *(va_arg(*args, Quad_t*)) = i; break;
10991 #else
10992                                 goto unknown;
10993 #endif
10994                 }
10995             }
10996             else
10997                 sv_setuv_mg(argsv, (UV)i);
10998             continue;   /* not "break" */
10999
11000             /* UNKNOWN */
11001
11002         default:
11003       unknown:
11004             if (!args
11005                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11006                 && ckWARN(WARN_PRINTF))
11007             {
11008                 SV * const msg = sv_newmortal();
11009                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11010                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11011                 if (fmtstart < patend) {
11012                     const char * const fmtend = q < patend ? q : patend;
11013                     const char * f;
11014                     sv_catpvs(msg, "\"%");
11015                     for (f = fmtstart; f < fmtend; f++) {
11016                         if (isPRINT(*f)) {
11017                             sv_catpvn(msg, f, 1);
11018                         } else {
11019                             Perl_sv_catpvf(aTHX_ msg,
11020                                            "\\%03"UVof, (UV)*f & 0xFF);
11021                         }
11022                     }
11023                     sv_catpvs(msg, "\"");
11024                 } else {
11025                     sv_catpvs(msg, "end of string");
11026                 }
11027                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11028             }
11029
11030             /* output mangled stuff ... */
11031             if (c == '\0')
11032                 --q;
11033             eptr = p;
11034             elen = q - p;
11035
11036             /* ... right here, because formatting flags should not apply */
11037             SvGROW(sv, SvCUR(sv) + elen + 1);
11038             p = SvEND(sv);
11039             Copy(eptr, p, elen, char);
11040             p += elen;
11041             *p = '\0';
11042             SvCUR_set(sv, p - SvPVX_const(sv));
11043             svix = osvix;
11044             continue;   /* not "break" */
11045         }
11046
11047         if (is_utf8 != has_utf8) {
11048             if (is_utf8) {
11049                 if (SvCUR(sv))
11050                     sv_utf8_upgrade(sv);
11051             }
11052             else {
11053                 const STRLEN old_elen = elen;
11054                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11055                 sv_utf8_upgrade(nsv);
11056                 eptr = SvPVX_const(nsv);
11057                 elen = SvCUR(nsv);
11058
11059                 if (width) { /* fudge width (can't fudge elen) */
11060                     width += elen - old_elen;
11061                 }
11062                 is_utf8 = TRUE;
11063             }
11064         }
11065
11066         have = esignlen + zeros + elen;
11067         if (have < zeros)
11068             Perl_croak_nocontext("%s", PL_memory_wrap);
11069
11070         need = (have > width ? have : width);
11071         gap = need - have;
11072
11073         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11074             Perl_croak_nocontext("%s", PL_memory_wrap);
11075         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11076         p = SvEND(sv);
11077         if (esignlen && fill == '0') {
11078             int i;
11079             for (i = 0; i < (int)esignlen; i++)
11080                 *p++ = esignbuf[i];
11081         }
11082         if (gap && !left) {
11083             memset(p, fill, gap);
11084             p += gap;
11085         }
11086         if (esignlen && fill != '0') {
11087             int i;
11088             for (i = 0; i < (int)esignlen; i++)
11089                 *p++ = esignbuf[i];
11090         }
11091         if (zeros) {
11092             int i;
11093             for (i = zeros; i; i--)
11094                 *p++ = '0';
11095         }
11096         if (elen) {
11097             Copy(eptr, p, elen, char);
11098             p += elen;
11099         }
11100         if (gap && left) {
11101             memset(p, ' ', gap);
11102             p += gap;
11103         }
11104         if (vectorize) {
11105             if (veclen) {
11106                 Copy(dotstr, p, dotstrlen, char);
11107                 p += dotstrlen;
11108             }
11109             else
11110                 vectorize = FALSE;              /* done iterating over vecstr */
11111         }
11112         if (is_utf8)
11113             has_utf8 = TRUE;
11114         if (has_utf8)
11115             SvUTF8_on(sv);
11116         *p = '\0';
11117         SvCUR_set(sv, p - SvPVX_const(sv));
11118         if (vectorize) {
11119             esignlen = 0;
11120             goto vector;
11121         }
11122     }
11123     SvTAINT(sv);
11124 }
11125
11126 /* =========================================================================
11127
11128 =head1 Cloning an interpreter
11129
11130 All the macros and functions in this section are for the private use of
11131 the main function, perl_clone().
11132
11133 The foo_dup() functions make an exact copy of an existing foo thingy.
11134 During the course of a cloning, a hash table is used to map old addresses
11135 to new addresses. The table is created and manipulated with the
11136 ptr_table_* functions.
11137
11138 =cut
11139
11140  * =========================================================================*/
11141
11142
11143 #if defined(USE_ITHREADS)
11144
11145 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11146 #ifndef GpREFCNT_inc
11147 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11148 #endif
11149
11150
11151 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11152    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11153    If this changes, please unmerge ss_dup.
11154    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11155 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11156 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11157 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11158 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11159 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11160 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11161 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11162 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11163 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11164 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11165 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11166 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11167 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11168
11169 /* clone a parser */
11170
11171 yy_parser *
11172 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11173 {
11174     yy_parser *parser;
11175
11176     PERL_ARGS_ASSERT_PARSER_DUP;
11177
11178     if (!proto)
11179         return NULL;
11180
11181     /* look for it in the table first */
11182     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11183     if (parser)
11184         return parser;
11185
11186     /* create anew and remember what it is */
11187     Newxz(parser, 1, yy_parser);
11188     ptr_table_store(PL_ptr_table, proto, parser);
11189
11190     /* XXX these not yet duped */
11191     parser->old_parser = NULL;
11192     parser->stack = NULL;
11193     parser->ps = NULL;
11194     parser->stack_size = 0;
11195     /* XXX parser->stack->state = 0; */
11196
11197     /* XXX eventually, just Copy() most of the parser struct ? */
11198
11199     parser->lex_brackets = proto->lex_brackets;
11200     parser->lex_casemods = proto->lex_casemods;
11201     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11202                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11203     parser->lex_casestack = savepvn(proto->lex_casestack,
11204                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11205     parser->lex_defer   = proto->lex_defer;
11206     parser->lex_dojoin  = proto->lex_dojoin;
11207     parser->lex_expect  = proto->lex_expect;
11208     parser->lex_formbrack = proto->lex_formbrack;
11209     parser->lex_inpat   = proto->lex_inpat;
11210     parser->lex_inwhat  = proto->lex_inwhat;
11211     parser->lex_op      = proto->lex_op;
11212     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11213     parser->lex_starts  = proto->lex_starts;
11214     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11215     parser->multi_close = proto->multi_close;
11216     parser->multi_open  = proto->multi_open;
11217     parser->multi_start = proto->multi_start;
11218     parser->multi_end   = proto->multi_end;
11219     parser->pending_ident = proto->pending_ident;
11220     parser->preambled   = proto->preambled;
11221     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11222     parser->linestr     = sv_dup_inc(proto->linestr, param);
11223     parser->expect      = proto->expect;
11224     parser->copline     = proto->copline;
11225     parser->last_lop_op = proto->last_lop_op;
11226     parser->lex_state   = proto->lex_state;
11227     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11228     /* rsfp_filters entries have fake IoDIRP() */
11229     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11230     parser->in_my       = proto->in_my;
11231     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11232     parser->error_count = proto->error_count;
11233
11234
11235     parser->linestr     = sv_dup_inc(proto->linestr, param);
11236
11237     {
11238         char * const ols = SvPVX(proto->linestr);
11239         char * const ls  = SvPVX(parser->linestr);
11240
11241         parser->bufptr      = ls + (proto->bufptr >= ols ?
11242                                     proto->bufptr -  ols : 0);
11243         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11244                                     proto->oldbufptr -  ols : 0);
11245         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11246                                     proto->oldoldbufptr -  ols : 0);
11247         parser->linestart   = ls + (proto->linestart >= ols ?
11248                                     proto->linestart -  ols : 0);
11249         parser->last_uni    = ls + (proto->last_uni >= ols ?
11250                                     proto->last_uni -  ols : 0);
11251         parser->last_lop    = ls + (proto->last_lop >= ols ?
11252                                     proto->last_lop -  ols : 0);
11253
11254         parser->bufend      = ls + SvCUR(parser->linestr);
11255     }
11256
11257     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11258
11259
11260 #ifdef PERL_MAD
11261     parser->endwhite    = proto->endwhite;
11262     parser->faketokens  = proto->faketokens;
11263     parser->lasttoke    = proto->lasttoke;
11264     parser->nextwhite   = proto->nextwhite;
11265     parser->realtokenstart = proto->realtokenstart;
11266     parser->skipwhite   = proto->skipwhite;
11267     parser->thisclose   = proto->thisclose;
11268     parser->thismad     = proto->thismad;
11269     parser->thisopen    = proto->thisopen;
11270     parser->thisstuff   = proto->thisstuff;
11271     parser->thistoken   = proto->thistoken;
11272     parser->thiswhite   = proto->thiswhite;
11273
11274     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11275     parser->curforce    = proto->curforce;
11276 #else
11277     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11278     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11279     parser->nexttoke    = proto->nexttoke;
11280 #endif
11281
11282     /* XXX should clone saved_curcop here, but we aren't passed
11283      * proto_perl; so do it in perl_clone_using instead */
11284
11285     return parser;
11286 }
11287
11288
11289 /* duplicate a file handle */
11290
11291 PerlIO *
11292 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11293 {
11294     PerlIO *ret;
11295
11296     PERL_ARGS_ASSERT_FP_DUP;
11297     PERL_UNUSED_ARG(type);
11298
11299     if (!fp)
11300         return (PerlIO*)NULL;
11301
11302     /* look for it in the table first */
11303     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11304     if (ret)
11305         return ret;
11306
11307     /* create anew and remember what it is */
11308     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11309     ptr_table_store(PL_ptr_table, fp, ret);
11310     return ret;
11311 }
11312
11313 /* duplicate a directory handle */
11314
11315 DIR *
11316 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11317 {
11318     DIR *ret;
11319
11320 #ifdef HAS_FCHDIR
11321     DIR *pwd;
11322     register const Direntry_t *dirent;
11323     char smallbuf[256];
11324     char *name = NULL;
11325     STRLEN len = -1;
11326     long pos;
11327 #endif
11328
11329     PERL_UNUSED_CONTEXT;
11330     PERL_ARGS_ASSERT_DIRP_DUP;
11331
11332     if (!dp)
11333         return (DIR*)NULL;
11334
11335     /* look for it in the table first */
11336     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11337     if (ret)
11338         return ret;
11339
11340 #ifdef HAS_FCHDIR
11341
11342     PERL_UNUSED_ARG(param);
11343
11344     /* create anew */
11345
11346     /* open the current directory (so we can switch back) */
11347     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11348
11349     /* chdir to our dir handle and open the present working directory */
11350     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11351         PerlDir_close(pwd);
11352         return (DIR *)NULL;
11353     }
11354     /* Now we should have two dir handles pointing to the same dir. */
11355
11356     /* Be nice to the calling code and chdir back to where we were. */
11357     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11358
11359     /* We have no need of the pwd handle any more. */
11360     PerlDir_close(pwd);
11361
11362 #ifdef DIRNAMLEN
11363 # define d_namlen(d) (d)->d_namlen
11364 #else
11365 # define d_namlen(d) strlen((d)->d_name)
11366 #endif
11367     /* Iterate once through dp, to get the file name at the current posi-
11368        tion. Then step back. */
11369     pos = PerlDir_tell(dp);
11370     if ((dirent = PerlDir_read(dp))) {
11371         len = d_namlen(dirent);
11372         if (len <= sizeof smallbuf) name = smallbuf;
11373         else Newx(name, len, char);
11374         Move(dirent->d_name, name, len, char);
11375     }
11376     PerlDir_seek(dp, pos);
11377
11378     /* Iterate through the new dir handle, till we find a file with the
11379        right name. */
11380     if (!dirent) /* just before the end */
11381         for(;;) {
11382             pos = PerlDir_tell(ret);
11383             if (PerlDir_read(ret)) continue; /* not there yet */
11384             PerlDir_seek(ret, pos); /* step back */
11385             break;
11386         }
11387     else {
11388         const long pos0 = PerlDir_tell(ret);
11389         for(;;) {
11390             pos = PerlDir_tell(ret);
11391             if ((dirent = PerlDir_read(ret))) {
11392                 if (len == d_namlen(dirent)
11393                  && memEQ(name, dirent->d_name, len)) {
11394                     /* found it */
11395                     PerlDir_seek(ret, pos); /* step back */
11396                     break;
11397                 }
11398                 /* else we are not there yet; keep iterating */
11399             }
11400             else { /* This is not meant to happen. The best we can do is
11401                       reset the iterator to the beginning. */
11402                 PerlDir_seek(ret, pos0);
11403                 break;
11404             }
11405         }
11406     }
11407 #undef d_namlen
11408
11409     if (name && name != smallbuf)
11410         Safefree(name);
11411 #endif
11412
11413 #ifdef WIN32
11414     ret = win32_dirp_dup(dp, param);
11415 #endif
11416
11417     /* pop it in the pointer table */
11418     if (ret)
11419         ptr_table_store(PL_ptr_table, dp, ret);
11420
11421     return ret;
11422 }
11423
11424 /* duplicate a typeglob */
11425
11426 GP *
11427 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11428 {
11429     GP *ret;
11430
11431     PERL_ARGS_ASSERT_GP_DUP;
11432
11433     if (!gp)
11434         return (GP*)NULL;
11435     /* look for it in the table first */
11436     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11437     if (ret)
11438         return ret;
11439
11440     /* create anew and remember what it is */
11441     Newxz(ret, 1, GP);
11442     ptr_table_store(PL_ptr_table, gp, ret);
11443
11444     /* clone */
11445     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11446        on Newxz() to do this for us.  */
11447     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11448     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11449     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11450     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11451     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11452     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11453     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11454     ret->gp_cvgen       = gp->gp_cvgen;
11455     ret->gp_line        = gp->gp_line;
11456     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11457     return ret;
11458 }
11459
11460 /* duplicate a chain of magic */
11461
11462 MAGIC *
11463 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11464 {
11465     MAGIC *mgret = NULL;
11466     MAGIC **mgprev_p = &mgret;
11467
11468     PERL_ARGS_ASSERT_MG_DUP;
11469
11470     for (; mg; mg = mg->mg_moremagic) {
11471         MAGIC *nmg;
11472
11473         if ((param->flags & CLONEf_JOIN_IN)
11474                 && mg->mg_type == PERL_MAGIC_backref)
11475             /* when joining, we let the individual SVs add themselves to
11476              * backref as needed. */
11477             continue;
11478
11479         Newx(nmg, 1, MAGIC);
11480         *mgprev_p = nmg;
11481         mgprev_p = &(nmg->mg_moremagic);
11482
11483         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11484            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11485            from the original commit adding Perl_mg_dup() - revision 4538.
11486            Similarly there is the annotation "XXX random ptr?" next to the
11487            assignment to nmg->mg_ptr.  */
11488         *nmg = *mg;
11489
11490         /* FIXME for plugins
11491         if (nmg->mg_type == PERL_MAGIC_qr) {
11492             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11493         }
11494         else
11495         */
11496         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11497                           ? nmg->mg_type == PERL_MAGIC_backref
11498                                 /* The backref AV has its reference
11499                                  * count deliberately bumped by 1 */
11500                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11501                                                     nmg->mg_obj, param))
11502                                 : sv_dup_inc(nmg->mg_obj, param)
11503                           : sv_dup(nmg->mg_obj, param);
11504
11505         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11506             if (nmg->mg_len > 0) {
11507                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11508                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11509                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11510                 {
11511                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11512                     sv_dup_inc_multiple((SV**)(namtp->table),
11513                                         (SV**)(namtp->table), NofAMmeth, param);
11514                 }
11515             }
11516             else if (nmg->mg_len == HEf_SVKEY)
11517                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11518         }
11519         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11520             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11521         }
11522     }
11523     return mgret;
11524 }
11525
11526 #endif /* USE_ITHREADS */
11527
11528 struct ptr_tbl_arena {
11529     struct ptr_tbl_arena *next;
11530     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11531 };
11532
11533 /* create a new pointer-mapping table */
11534
11535 PTR_TBL_t *
11536 Perl_ptr_table_new(pTHX)
11537 {
11538     PTR_TBL_t *tbl;
11539     PERL_UNUSED_CONTEXT;
11540
11541     Newx(tbl, 1, PTR_TBL_t);
11542     tbl->tbl_max        = 511;
11543     tbl->tbl_items      = 0;
11544     tbl->tbl_arena      = NULL;
11545     tbl->tbl_arena_next = NULL;
11546     tbl->tbl_arena_end  = NULL;
11547     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11548     return tbl;
11549 }
11550
11551 #define PTR_TABLE_HASH(ptr) \
11552   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11553
11554 /* map an existing pointer using a table */
11555
11556 STATIC PTR_TBL_ENT_t *
11557 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11558 {
11559     PTR_TBL_ENT_t *tblent;
11560     const UV hash = PTR_TABLE_HASH(sv);
11561
11562     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11563
11564     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11565     for (; tblent; tblent = tblent->next) {
11566         if (tblent->oldval == sv)
11567             return tblent;
11568     }
11569     return NULL;
11570 }
11571
11572 void *
11573 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11574 {
11575     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11576
11577     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11578     PERL_UNUSED_CONTEXT;
11579
11580     return tblent ? tblent->newval : NULL;
11581 }
11582
11583 /* add a new entry to a pointer-mapping table */
11584
11585 void
11586 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11587 {
11588     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11589
11590     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11591     PERL_UNUSED_CONTEXT;
11592
11593     if (tblent) {
11594         tblent->newval = newsv;
11595     } else {
11596         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11597
11598         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11599             struct ptr_tbl_arena *new_arena;
11600
11601             Newx(new_arena, 1, struct ptr_tbl_arena);
11602             new_arena->next = tbl->tbl_arena;
11603             tbl->tbl_arena = new_arena;
11604             tbl->tbl_arena_next = new_arena->array;
11605             tbl->tbl_arena_end = new_arena->array
11606                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11607         }
11608
11609         tblent = tbl->tbl_arena_next++;
11610
11611         tblent->oldval = oldsv;
11612         tblent->newval = newsv;
11613         tblent->next = tbl->tbl_ary[entry];
11614         tbl->tbl_ary[entry] = tblent;
11615         tbl->tbl_items++;
11616         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11617             ptr_table_split(tbl);
11618     }
11619 }
11620
11621 /* double the hash bucket size of an existing ptr table */
11622
11623 void
11624 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11625 {
11626     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11627     const UV oldsize = tbl->tbl_max + 1;
11628     UV newsize = oldsize * 2;
11629     UV i;
11630
11631     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11632     PERL_UNUSED_CONTEXT;
11633
11634     Renew(ary, newsize, PTR_TBL_ENT_t*);
11635     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11636     tbl->tbl_max = --newsize;
11637     tbl->tbl_ary = ary;
11638     for (i=0; i < oldsize; i++, ary++) {
11639         PTR_TBL_ENT_t **entp = ary;
11640         PTR_TBL_ENT_t *ent = *ary;
11641         PTR_TBL_ENT_t **curentp;
11642         if (!ent)
11643             continue;
11644         curentp = ary + oldsize;
11645         do {
11646             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11647                 *entp = ent->next;
11648                 ent->next = *curentp;
11649                 *curentp = ent;
11650             }
11651             else
11652                 entp = &ent->next;
11653             ent = *entp;
11654         } while (ent);
11655     }
11656 }
11657
11658 /* remove all the entries from a ptr table */
11659 /* Deprecated - will be removed post 5.14 */
11660
11661 void
11662 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11663 {
11664     if (tbl && tbl->tbl_items) {
11665         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11666
11667         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11668
11669         while (arena) {
11670             struct ptr_tbl_arena *next = arena->next;
11671
11672             Safefree(arena);
11673             arena = next;
11674         };
11675
11676         tbl->tbl_items = 0;
11677         tbl->tbl_arena = NULL;
11678         tbl->tbl_arena_next = NULL;
11679         tbl->tbl_arena_end = NULL;
11680     }
11681 }
11682
11683 /* clear and free a ptr table */
11684
11685 void
11686 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11687 {
11688     struct ptr_tbl_arena *arena;
11689
11690     if (!tbl) {
11691         return;
11692     }
11693
11694     arena = tbl->tbl_arena;
11695
11696     while (arena) {
11697         struct ptr_tbl_arena *next = arena->next;
11698
11699         Safefree(arena);
11700         arena = next;
11701     }
11702
11703     Safefree(tbl->tbl_ary);
11704     Safefree(tbl);
11705 }
11706
11707 #if defined(USE_ITHREADS)
11708
11709 void
11710 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11711 {
11712     PERL_ARGS_ASSERT_RVPV_DUP;
11713
11714     if (SvROK(sstr)) {
11715         if (SvWEAKREF(sstr)) {
11716             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11717             if (param->flags & CLONEf_JOIN_IN) {
11718                 /* if joining, we add any back references individually rather
11719                  * than copying the whole backref array */
11720                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11721             }
11722         }
11723         else
11724             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11725     }
11726     else if (SvPVX_const(sstr)) {
11727         /* Has something there */
11728         if (SvLEN(sstr)) {
11729             /* Normal PV - clone whole allocated space */
11730             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11731             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11732                 /* Not that normal - actually sstr is copy on write.
11733                    But we are a true, independent SV, so:  */
11734                 SvREADONLY_off(dstr);
11735                 SvFAKE_off(dstr);
11736             }
11737         }
11738         else {
11739             /* Special case - not normally malloced for some reason */
11740             if (isGV_with_GP(sstr)) {
11741                 /* Don't need to do anything here.  */
11742             }
11743             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
11744                 /* A "shared" PV - clone it as "shared" PV */
11745                 SvPV_set(dstr,
11746                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11747                                          param)));
11748             }
11749             else {
11750                 /* Some other special case - random pointer */
11751                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11752             }
11753         }
11754     }
11755     else {
11756         /* Copy the NULL */
11757         SvPV_set(dstr, NULL);
11758     }
11759 }
11760
11761 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11762 static SV **
11763 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11764                       SSize_t items, CLONE_PARAMS *const param)
11765 {
11766     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11767
11768     while (items-- > 0) {
11769         *dest++ = sv_dup_inc(*source++, param);
11770     }
11771
11772     return dest;
11773 }
11774
11775 /* duplicate an SV of any type (including AV, HV etc) */
11776
11777 static SV *
11778 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11779 {
11780     dVAR;
11781     SV *dstr;
11782
11783     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11784
11785     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
11786 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11787         abort();
11788 #endif
11789         return NULL;
11790     }
11791     /* look for it in the table first */
11792     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11793     if (dstr)
11794         return dstr;
11795
11796     if(param->flags & CLONEf_JOIN_IN) {
11797         /** We are joining here so we don't want do clone
11798             something that is bad **/
11799         if (SvTYPE(sstr) == SVt_PVHV) {
11800             const HEK * const hvname = HvNAME_HEK(sstr);
11801             if (hvname) {
11802                 /** don't clone stashes if they already exist **/
11803                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11804                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
11805                 ptr_table_store(PL_ptr_table, sstr, dstr);
11806                 return dstr;
11807             }
11808         }
11809     }
11810
11811     /* create anew and remember what it is */
11812     new_SV(dstr);
11813
11814 #ifdef DEBUG_LEAKING_SCALARS
11815     dstr->sv_debug_optype = sstr->sv_debug_optype;
11816     dstr->sv_debug_line = sstr->sv_debug_line;
11817     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11818     dstr->sv_debug_parent = (SV*)sstr;
11819     FREE_SV_DEBUG_FILE(dstr);
11820     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11821 #endif
11822
11823     ptr_table_store(PL_ptr_table, sstr, dstr);
11824
11825     /* clone */
11826     SvFLAGS(dstr)       = SvFLAGS(sstr);
11827     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11828     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11829
11830 #ifdef DEBUGGING
11831     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11832         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11833                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11834 #endif
11835
11836     /* don't clone objects whose class has asked us not to */
11837     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11838         SvFLAGS(dstr) = 0;
11839         return dstr;
11840     }
11841
11842     switch (SvTYPE(sstr)) {
11843     case SVt_NULL:
11844         SvANY(dstr)     = NULL;
11845         break;
11846     case SVt_IV:
11847         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11848         if(SvROK(sstr)) {
11849             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11850         } else {
11851             SvIV_set(dstr, SvIVX(sstr));
11852         }
11853         break;
11854     case SVt_NV:
11855         SvANY(dstr)     = new_XNV();
11856         SvNV_set(dstr, SvNVX(sstr));
11857         break;
11858         /* case SVt_BIND: */
11859     default:
11860         {
11861             /* These are all the types that need complex bodies allocating.  */
11862             void *new_body;
11863             const svtype sv_type = SvTYPE(sstr);
11864             const struct body_details *const sv_type_details
11865                 = bodies_by_type + sv_type;
11866
11867             switch (sv_type) {
11868             default:
11869                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11870                 break;
11871
11872             case SVt_PVGV:
11873             case SVt_PVIO:
11874             case SVt_PVFM:
11875             case SVt_PVHV:
11876             case SVt_PVAV:
11877             case SVt_PVCV:
11878             case SVt_PVLV:
11879             case SVt_REGEXP:
11880             case SVt_PVMG:
11881             case SVt_PVNV:
11882             case SVt_PVIV:
11883             case SVt_PV:
11884                 assert(sv_type_details->body_size);
11885                 if (sv_type_details->arena) {
11886                     new_body_inline(new_body, sv_type);
11887                     new_body
11888                         = (void*)((char*)new_body - sv_type_details->offset);
11889                 } else {
11890                     new_body = new_NOARENA(sv_type_details);
11891                 }
11892             }
11893             assert(new_body);
11894             SvANY(dstr) = new_body;
11895
11896 #ifndef PURIFY
11897             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11898                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11899                  sv_type_details->copy, char);
11900 #else
11901             Copy(((char*)SvANY(sstr)),
11902                  ((char*)SvANY(dstr)),
11903                  sv_type_details->body_size + sv_type_details->offset, char);
11904 #endif
11905
11906             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11907                 && !isGV_with_GP(dstr)
11908                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
11909                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11910
11911             /* The Copy above means that all the source (unduplicated) pointers
11912                are now in the destination.  We can check the flags and the
11913                pointers in either, but it's possible that there's less cache
11914                missing by always going for the destination.
11915                FIXME - instrument and check that assumption  */
11916             if (sv_type >= SVt_PVMG) {
11917                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11918                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11919                 } else if (SvMAGIC(dstr))
11920                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11921                 if (SvSTASH(dstr))
11922                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
11923             }
11924
11925             /* The cast silences a GCC warning about unhandled types.  */
11926             switch ((int)sv_type) {
11927             case SVt_PV:
11928                 break;
11929             case SVt_PVIV:
11930                 break;
11931             case SVt_PVNV:
11932                 break;
11933             case SVt_PVMG:
11934                 break;
11935             case SVt_REGEXP:
11936                 /* FIXME for plugins */
11937                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
11938                 break;
11939             case SVt_PVLV:
11940                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11941                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11942                     LvTARG(dstr) = dstr;
11943                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
11944                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
11945                 else
11946                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
11947             case SVt_PVGV:
11948                 /* non-GP case already handled above */
11949                 if(isGV_with_GP(sstr)) {
11950                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
11951                     /* Don't call sv_add_backref here as it's going to be
11952                        created as part of the magic cloning of the symbol
11953                        table--unless this is during a join and the stash
11954                        is not actually being cloned.  */
11955                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
11956                        at the point of this comment.  */
11957                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
11958                     if (param->flags & CLONEf_JOIN_IN)
11959                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
11960                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
11961                     (void)GpREFCNT_inc(GvGP(dstr));
11962                 }
11963                 break;
11964             case SVt_PVIO:
11965                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
11966                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11967                     /* I have no idea why fake dirp (rsfps)
11968                        should be treated differently but otherwise
11969                        we end up with leaks -- sky*/
11970                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
11971                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
11972                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11973                 } else {
11974                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
11975                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
11976                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
11977                     if (IoDIRP(dstr)) {
11978                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
11979                     } else {
11980                         NOOP;
11981                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
11982                     }
11983                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
11984                 }
11985                 if (IoOFP(dstr) == IoIFP(sstr))
11986                     IoOFP(dstr) = IoIFP(dstr);
11987                 else
11988                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
11989                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
11990                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
11991                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
11992                 break;
11993             case SVt_PVAV:
11994                 /* avoid cloning an empty array */
11995                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
11996                     SV **dst_ary, **src_ary;
11997                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
11998
11999                     src_ary = AvARRAY((const AV *)sstr);
12000                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12001                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12002                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12003                     AvALLOC((const AV *)dstr) = dst_ary;
12004                     if (AvREAL((const AV *)sstr)) {
12005                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12006                                                       param);
12007                     }
12008                     else {
12009                         while (items-- > 0)
12010                             *dst_ary++ = sv_dup(*src_ary++, param);
12011                     }
12012                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12013                     while (items-- > 0) {
12014                         *dst_ary++ = &PL_sv_undef;
12015                     }
12016                 }
12017                 else {
12018                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12019                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12020                     AvMAX(  (const AV *)dstr)   = -1;
12021                     AvFILLp((const AV *)dstr)   = -1;
12022                 }
12023                 break;
12024             case SVt_PVHV:
12025                 if (HvARRAY((const HV *)sstr)) {
12026                     STRLEN i = 0;
12027                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12028                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12029                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12030                     char *darray;
12031                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12032                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12033                         char);
12034                     HvARRAY(dstr) = (HE**)darray;
12035                     while (i <= sxhv->xhv_max) {
12036                         const HE * const source = HvARRAY(sstr)[i];
12037                         HvARRAY(dstr)[i] = source
12038                             ? he_dup(source, sharekeys, param) : 0;
12039                         ++i;
12040                     }
12041                     if (SvOOK(sstr)) {
12042                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12043                         struct xpvhv_aux * const daux = HvAUX(dstr);
12044                         /* This flag isn't copied.  */
12045                         SvOOK_on(dstr);
12046
12047                         if (saux->xhv_name_count) {
12048                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12049                             const I32 count
12050                              = saux->xhv_name_count < 0
12051                                 ? -saux->xhv_name_count
12052                                 :  saux->xhv_name_count;
12053                             HEK **shekp = sname + count;
12054                             HEK **dhekp;
12055                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12056                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12057                             while (shekp-- > sname) {
12058                                 dhekp--;
12059                                 *dhekp = hek_dup(*shekp, param);
12060                             }
12061                         }
12062                         else {
12063                             daux->xhv_name_u.xhvnameu_name
12064                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12065                                           param);
12066                         }
12067                         daux->xhv_name_count = saux->xhv_name_count;
12068
12069                         daux->xhv_riter = saux->xhv_riter;
12070                         daux->xhv_eiter = saux->xhv_eiter
12071                             ? he_dup(saux->xhv_eiter,
12072                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12073                         /* backref array needs refcnt=2; see sv_add_backref */
12074                         daux->xhv_backreferences =
12075                             (param->flags & CLONEf_JOIN_IN)
12076                                 /* when joining, we let the individual GVs and
12077                                  * CVs add themselves to backref as
12078                                  * needed. This avoids pulling in stuff
12079                                  * that isn't required, and simplifies the
12080                                  * case where stashes aren't cloned back
12081                                  * if they already exist in the parent
12082                                  * thread */
12083                             ? NULL
12084                             : saux->xhv_backreferences
12085                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12086                                     ? MUTABLE_AV(SvREFCNT_inc(
12087                                           sv_dup_inc((const SV *)
12088                                             saux->xhv_backreferences, param)))
12089                                     : MUTABLE_AV(sv_dup((const SV *)
12090                                             saux->xhv_backreferences, param))
12091                                 : 0;
12092
12093                         daux->xhv_mro_meta = saux->xhv_mro_meta
12094                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12095                             : 0;
12096
12097                         /* Record stashes for possible cloning in Perl_clone(). */
12098                         if (HvNAME(sstr))
12099                             av_push(param->stashes, dstr);
12100                     }
12101                 }
12102                 else
12103                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12104                 break;
12105             case SVt_PVCV:
12106                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12107                     CvDEPTH(dstr) = 0;
12108                 }
12109                 /*FALLTHROUGH*/
12110             case SVt_PVFM:
12111                 /* NOTE: not refcounted */
12112                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12113                     hv_dup(CvSTASH(dstr), param);
12114                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12115                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12116                 if (!CvISXSUB(dstr)) {
12117                     OP_REFCNT_LOCK;
12118                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12119                     OP_REFCNT_UNLOCK;
12120                 } else if (CvCONST(dstr)) {
12121                     CvXSUBANY(dstr).any_ptr =
12122                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12123                 }
12124                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12125                 /* don't dup if copying back - CvGV isn't refcounted, so the
12126                  * duped GV may never be freed. A bit of a hack! DAPM */
12127                 SvANY(MUTABLE_CV(dstr))->xcv_gv =
12128                     CvCVGV_RC(dstr)
12129                     ? gv_dup_inc(CvGV(sstr), param)
12130                     : (param->flags & CLONEf_JOIN_IN)
12131                         ? NULL
12132                         : gv_dup(CvGV(sstr), param);
12133
12134                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12135                 CvOUTSIDE(dstr) =
12136                     CvWEAKOUTSIDE(sstr)
12137                     ? cv_dup(    CvOUTSIDE(dstr), param)
12138                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12139                 break;
12140             }
12141         }
12142     }
12143
12144     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12145         ++PL_sv_objcount;
12146
12147     return dstr;
12148  }
12149
12150 SV *
12151 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12152 {
12153     PERL_ARGS_ASSERT_SV_DUP_INC;
12154     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12155 }
12156
12157 SV *
12158 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12159 {
12160     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12161     PERL_ARGS_ASSERT_SV_DUP;
12162
12163     /* Track every SV that (at least initially) had a reference count of 0.
12164        We need to do this by holding an actual reference to it in this array.
12165        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12166        (akin to the stashes hash, and the perl stack), we come unstuck if
12167        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12168        thread) is manipulated in a CLONE method, because CLONE runs before the
12169        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12170        (and fix things up by giving each a reference via the temps stack).
12171        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12172        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12173        before the walk of unreferenced happens and a reference to that is SV
12174        added to the temps stack. At which point we have the same SV considered
12175        to be in use, and free to be re-used. Not good.
12176     */
12177     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12178         assert(param->unreferenced);
12179         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12180     }
12181
12182     return dstr;
12183 }
12184
12185 /* duplicate a context */
12186
12187 PERL_CONTEXT *
12188 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12189 {
12190     PERL_CONTEXT *ncxs;
12191
12192     PERL_ARGS_ASSERT_CX_DUP;
12193
12194     if (!cxs)
12195         return (PERL_CONTEXT*)NULL;
12196
12197     /* look for it in the table first */
12198     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12199     if (ncxs)
12200         return ncxs;
12201
12202     /* create anew and remember what it is */
12203     Newx(ncxs, max + 1, PERL_CONTEXT);
12204     ptr_table_store(PL_ptr_table, cxs, ncxs);
12205     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12206
12207     while (ix >= 0) {
12208         PERL_CONTEXT * const ncx = &ncxs[ix];
12209         if (CxTYPE(ncx) == CXt_SUBST) {
12210             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12211         }
12212         else {
12213             switch (CxTYPE(ncx)) {
12214             case CXt_SUB:
12215                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12216                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12217                                            : cv_dup(ncx->blk_sub.cv,param));
12218                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12219                                            ? av_dup_inc(ncx->blk_sub.argarray,
12220                                                         param)
12221                                            : NULL);
12222                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12223                                                      param);
12224                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12225                                            ncx->blk_sub.oldcomppad);
12226                 break;
12227             case CXt_EVAL:
12228                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12229                                                       param);
12230                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12231                 break;
12232             case CXt_LOOP_LAZYSV:
12233                 ncx->blk_loop.state_u.lazysv.end
12234                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12235                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12236                    actually being the same function, and order equivalence of
12237                    the two unions.
12238                    We can assert the later [but only at run time :-(]  */
12239                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12240                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12241             case CXt_LOOP_FOR:
12242                 ncx->blk_loop.state_u.ary.ary
12243                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12244             case CXt_LOOP_LAZYIV:
12245             case CXt_LOOP_PLAIN:
12246                 if (CxPADLOOP(ncx)) {
12247                     ncx->blk_loop.itervar_u.oldcomppad
12248                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12249                                         ncx->blk_loop.itervar_u.oldcomppad);
12250                 } else {
12251                     ncx->blk_loop.itervar_u.gv
12252                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12253                                     param);
12254                 }
12255                 break;
12256             case CXt_FORMAT:
12257                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12258                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12259                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12260                                                      param);
12261                 break;
12262             case CXt_BLOCK:
12263             case CXt_NULL:
12264                 break;
12265             }
12266         }
12267         --ix;
12268     }
12269     return ncxs;
12270 }
12271
12272 /* duplicate a stack info structure */
12273
12274 PERL_SI *
12275 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12276 {
12277     PERL_SI *nsi;
12278
12279     PERL_ARGS_ASSERT_SI_DUP;
12280
12281     if (!si)
12282         return (PERL_SI*)NULL;
12283
12284     /* look for it in the table first */
12285     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12286     if (nsi)
12287         return nsi;
12288
12289     /* create anew and remember what it is */
12290     Newxz(nsi, 1, PERL_SI);
12291     ptr_table_store(PL_ptr_table, si, nsi);
12292
12293     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12294     nsi->si_cxix        = si->si_cxix;
12295     nsi->si_cxmax       = si->si_cxmax;
12296     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12297     nsi->si_type        = si->si_type;
12298     nsi->si_prev        = si_dup(si->si_prev, param);
12299     nsi->si_next        = si_dup(si->si_next, param);
12300     nsi->si_markoff     = si->si_markoff;
12301
12302     return nsi;
12303 }
12304
12305 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12306 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12307 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12308 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12309 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12310 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12311 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12312 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12313 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12314 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12315 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12316 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12317 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12318 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12319 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12320 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12321
12322 /* XXXXX todo */
12323 #define pv_dup_inc(p)   SAVEPV(p)
12324 #define pv_dup(p)       SAVEPV(p)
12325 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12326
12327 /* map any object to the new equivent - either something in the
12328  * ptr table, or something in the interpreter structure
12329  */
12330
12331 void *
12332 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12333 {
12334     void *ret;
12335
12336     PERL_ARGS_ASSERT_ANY_DUP;
12337
12338     if (!v)
12339         return (void*)NULL;
12340
12341     /* look for it in the table first */
12342     ret = ptr_table_fetch(PL_ptr_table, v);
12343     if (ret)
12344         return ret;
12345
12346     /* see if it is part of the interpreter structure */
12347     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12348         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12349     else {
12350         ret = v;
12351     }
12352
12353     return ret;
12354 }
12355
12356 /* duplicate the save stack */
12357
12358 ANY *
12359 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12360 {
12361     dVAR;
12362     ANY * const ss      = proto_perl->Isavestack;
12363     const I32 max       = proto_perl->Isavestack_max;
12364     I32 ix              = proto_perl->Isavestack_ix;
12365     ANY *nss;
12366     const SV *sv;
12367     const GV *gv;
12368     const AV *av;
12369     const HV *hv;
12370     void* ptr;
12371     int intval;
12372     long longval;
12373     GP *gp;
12374     IV iv;
12375     I32 i;
12376     char *c = NULL;
12377     void (*dptr) (void*);
12378     void (*dxptr) (pTHX_ void*);
12379
12380     PERL_ARGS_ASSERT_SS_DUP;
12381
12382     Newxz(nss, max, ANY);
12383
12384     while (ix > 0) {
12385         const UV uv = POPUV(ss,ix);
12386         const U8 type = (U8)uv & SAVE_MASK;
12387
12388         TOPUV(nss,ix) = uv;
12389         switch (type) {
12390         case SAVEt_CLEARSV:
12391             break;
12392         case SAVEt_HELEM:               /* hash element */
12393             sv = (const SV *)POPPTR(ss,ix);
12394             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12395             /* fall through */
12396         case SAVEt_ITEM:                        /* normal string */
12397         case SAVEt_GVSV:                        /* scalar slot in GV */
12398         case SAVEt_SV:                          /* scalar reference */
12399             sv = (const SV *)POPPTR(ss,ix);
12400             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12401             /* fall through */
12402         case SAVEt_FREESV:
12403         case SAVEt_MORTALIZESV:
12404             sv = (const SV *)POPPTR(ss,ix);
12405             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12406             break;
12407         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12408             c = (char*)POPPTR(ss,ix);
12409             TOPPTR(nss,ix) = savesharedpv(c);
12410             ptr = POPPTR(ss,ix);
12411             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12412             break;
12413         case SAVEt_GENERIC_SVREF:               /* generic sv */
12414         case SAVEt_SVREF:                       /* scalar reference */
12415             sv = (const SV *)POPPTR(ss,ix);
12416             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12417             ptr = POPPTR(ss,ix);
12418             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12419             break;
12420         case SAVEt_HV:                          /* hash reference */
12421         case SAVEt_AV:                          /* array reference */
12422             sv = (const SV *) POPPTR(ss,ix);
12423             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12424             /* fall through */
12425         case SAVEt_COMPPAD:
12426         case SAVEt_NSTAB:
12427             sv = (const SV *) POPPTR(ss,ix);
12428             TOPPTR(nss,ix) = sv_dup(sv, param);
12429             break;
12430         case SAVEt_INT:                         /* int reference */
12431             ptr = POPPTR(ss,ix);
12432             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12433             intval = (int)POPINT(ss,ix);
12434             TOPINT(nss,ix) = intval;
12435             break;
12436         case SAVEt_LONG:                        /* long reference */
12437             ptr = POPPTR(ss,ix);
12438             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12439             longval = (long)POPLONG(ss,ix);
12440             TOPLONG(nss,ix) = longval;
12441             break;
12442         case SAVEt_I32:                         /* I32 reference */
12443             ptr = POPPTR(ss,ix);
12444             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12445             i = POPINT(ss,ix);
12446             TOPINT(nss,ix) = i;
12447             break;
12448         case SAVEt_IV:                          /* IV reference */
12449             ptr = POPPTR(ss,ix);
12450             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12451             iv = POPIV(ss,ix);
12452             TOPIV(nss,ix) = iv;
12453             break;
12454         case SAVEt_HPTR:                        /* HV* reference */
12455         case SAVEt_APTR:                        /* AV* reference */
12456         case SAVEt_SPTR:                        /* SV* reference */
12457             ptr = POPPTR(ss,ix);
12458             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12459             sv = (const SV *)POPPTR(ss,ix);
12460             TOPPTR(nss,ix) = sv_dup(sv, param);
12461             break;
12462         case SAVEt_VPTR:                        /* random* reference */
12463             ptr = POPPTR(ss,ix);
12464             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12465             /* Fall through */
12466         case SAVEt_INT_SMALL:
12467         case SAVEt_I32_SMALL:
12468         case SAVEt_I16:                         /* I16 reference */
12469         case SAVEt_I8:                          /* I8 reference */
12470         case SAVEt_BOOL:
12471             ptr = POPPTR(ss,ix);
12472             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12473             break;
12474         case SAVEt_GENERIC_PVREF:               /* generic char* */
12475         case SAVEt_PPTR:                        /* char* reference */
12476             ptr = POPPTR(ss,ix);
12477             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12478             c = (char*)POPPTR(ss,ix);
12479             TOPPTR(nss,ix) = pv_dup(c);
12480             break;
12481         case SAVEt_GP:                          /* scalar reference */
12482             gp = (GP*)POPPTR(ss,ix);
12483             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12484             (void)GpREFCNT_inc(gp);
12485             gv = (const GV *)POPPTR(ss,ix);
12486             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12487             break;
12488         case SAVEt_FREEOP:
12489             ptr = POPPTR(ss,ix);
12490             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12491                 /* these are assumed to be refcounted properly */
12492                 OP *o;
12493                 switch (((OP*)ptr)->op_type) {
12494                 case OP_LEAVESUB:
12495                 case OP_LEAVESUBLV:
12496                 case OP_LEAVEEVAL:
12497                 case OP_LEAVE:
12498                 case OP_SCOPE:
12499                 case OP_LEAVEWRITE:
12500                     TOPPTR(nss,ix) = ptr;
12501                     o = (OP*)ptr;
12502                     OP_REFCNT_LOCK;
12503                     (void) OpREFCNT_inc(o);
12504                     OP_REFCNT_UNLOCK;
12505                     break;
12506                 default:
12507                     TOPPTR(nss,ix) = NULL;
12508                     break;
12509                 }
12510             }
12511             else
12512                 TOPPTR(nss,ix) = NULL;
12513             break;
12514         case SAVEt_FREECOPHH:
12515             ptr = POPPTR(ss,ix);
12516             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12517             break;
12518         case SAVEt_DELETE:
12519             hv = (const HV *)POPPTR(ss,ix);
12520             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12521             i = POPINT(ss,ix);
12522             TOPINT(nss,ix) = i;
12523             /* Fall through */
12524         case SAVEt_FREEPV:
12525             c = (char*)POPPTR(ss,ix);
12526             TOPPTR(nss,ix) = pv_dup_inc(c);
12527             break;
12528         case SAVEt_STACK_POS:           /* Position on Perl stack */
12529             i = POPINT(ss,ix);
12530             TOPINT(nss,ix) = i;
12531             break;
12532         case SAVEt_DESTRUCTOR:
12533             ptr = POPPTR(ss,ix);
12534             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12535             dptr = POPDPTR(ss,ix);
12536             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12537                                         any_dup(FPTR2DPTR(void *, dptr),
12538                                                 proto_perl));
12539             break;
12540         case SAVEt_DESTRUCTOR_X:
12541             ptr = POPPTR(ss,ix);
12542             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12543             dxptr = POPDXPTR(ss,ix);
12544             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12545                                          any_dup(FPTR2DPTR(void *, dxptr),
12546                                                  proto_perl));
12547             break;
12548         case SAVEt_REGCONTEXT:
12549         case SAVEt_ALLOC:
12550             ix -= uv >> SAVE_TIGHT_SHIFT;
12551             break;
12552         case SAVEt_AELEM:               /* array element */
12553             sv = (const SV *)POPPTR(ss,ix);
12554             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12555             i = POPINT(ss,ix);
12556             TOPINT(nss,ix) = i;
12557             av = (const AV *)POPPTR(ss,ix);
12558             TOPPTR(nss,ix) = av_dup_inc(av, param);
12559             break;
12560         case SAVEt_OP:
12561             ptr = POPPTR(ss,ix);
12562             TOPPTR(nss,ix) = ptr;
12563             break;
12564         case SAVEt_HINTS:
12565             ptr = POPPTR(ss,ix);
12566             ptr = cophh_copy((COPHH*)ptr);
12567             TOPPTR(nss,ix) = ptr;
12568             i = POPINT(ss,ix);
12569             TOPINT(nss,ix) = i;
12570             if (i & HINT_LOCALIZE_HH) {
12571                 hv = (const HV *)POPPTR(ss,ix);
12572                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12573             }
12574             break;
12575         case SAVEt_PADSV_AND_MORTALIZE:
12576             longval = (long)POPLONG(ss,ix);
12577             TOPLONG(nss,ix) = longval;
12578             ptr = POPPTR(ss,ix);
12579             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12580             sv = (const SV *)POPPTR(ss,ix);
12581             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12582             break;
12583         case SAVEt_SET_SVFLAGS:
12584             i = POPINT(ss,ix);
12585             TOPINT(nss,ix) = i;
12586             i = POPINT(ss,ix);
12587             TOPINT(nss,ix) = i;
12588             sv = (const SV *)POPPTR(ss,ix);
12589             TOPPTR(nss,ix) = sv_dup(sv, param);
12590             break;
12591         case SAVEt_RE_STATE:
12592             {
12593                 const struct re_save_state *const old_state
12594                     = (struct re_save_state *)
12595                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12596                 struct re_save_state *const new_state
12597                     = (struct re_save_state *)
12598                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12599
12600                 Copy(old_state, new_state, 1, struct re_save_state);
12601                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12602
12603                 new_state->re_state_bostr
12604                     = pv_dup(old_state->re_state_bostr);
12605                 new_state->re_state_reginput
12606                     = pv_dup(old_state->re_state_reginput);
12607                 new_state->re_state_regeol
12608                     = pv_dup(old_state->re_state_regeol);
12609                 new_state->re_state_regoffs
12610                     = (regexp_paren_pair*)
12611                         any_dup(old_state->re_state_regoffs, proto_perl);
12612                 new_state->re_state_reglastparen
12613                     = (U32*) any_dup(old_state->re_state_reglastparen, 
12614                               proto_perl);
12615                 new_state->re_state_reglastcloseparen
12616                     = (U32*)any_dup(old_state->re_state_reglastcloseparen,
12617                               proto_perl);
12618                 /* XXX This just has to be broken. The old save_re_context
12619                    code did SAVEGENERICPV(PL_reg_start_tmp);
12620                    PL_reg_start_tmp is char **.
12621                    Look above to what the dup code does for
12622                    SAVEt_GENERIC_PVREF
12623                    It can never have worked.
12624                    So this is merely a faithful copy of the exiting bug:  */
12625                 new_state->re_state_reg_start_tmp
12626                     = (char **) pv_dup((char *)
12627                                       old_state->re_state_reg_start_tmp);
12628                 /* I assume that it only ever "worked" because no-one called
12629                    (pseudo)fork while the regexp engine had re-entered itself.
12630                 */
12631 #ifdef PERL_OLD_COPY_ON_WRITE
12632                 new_state->re_state_nrs
12633                     = sv_dup(old_state->re_state_nrs, param);
12634 #endif
12635                 new_state->re_state_reg_magic
12636                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12637                                proto_perl);
12638                 new_state->re_state_reg_oldcurpm
12639                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12640                               proto_perl);
12641                 new_state->re_state_reg_curpm
12642                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12643                                proto_perl);
12644                 new_state->re_state_reg_oldsaved
12645                     = pv_dup(old_state->re_state_reg_oldsaved);
12646                 new_state->re_state_reg_poscache
12647                     = pv_dup(old_state->re_state_reg_poscache);
12648                 new_state->re_state_reg_starttry
12649                     = pv_dup(old_state->re_state_reg_starttry);
12650                 break;
12651             }
12652         case SAVEt_COMPILE_WARNINGS:
12653             ptr = POPPTR(ss,ix);
12654             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12655             break;
12656         case SAVEt_PARSER:
12657             ptr = POPPTR(ss,ix);
12658             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12659             break;
12660         default:
12661             Perl_croak(aTHX_
12662                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12663         }
12664     }
12665
12666     return nss;
12667 }
12668
12669
12670 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12671  * flag to the result. This is done for each stash before cloning starts,
12672  * so we know which stashes want their objects cloned */
12673
12674 static void
12675 do_mark_cloneable_stash(pTHX_ SV *const sv)
12676 {
12677     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12678     if (hvname) {
12679         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12680         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12681         if (cloner && GvCV(cloner)) {
12682             dSP;
12683             UV status;
12684
12685             ENTER;
12686             SAVETMPS;
12687             PUSHMARK(SP);
12688             mXPUSHs(newSVhek(hvname));
12689             PUTBACK;
12690             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12691             SPAGAIN;
12692             status = POPu;
12693             PUTBACK;
12694             FREETMPS;
12695             LEAVE;
12696             if (status)
12697                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12698         }
12699     }
12700 }
12701
12702
12703
12704 /*
12705 =for apidoc perl_clone
12706
12707 Create and return a new interpreter by cloning the current one.
12708
12709 perl_clone takes these flags as parameters:
12710
12711 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12712 without it we only clone the data and zero the stacks,
12713 with it we copy the stacks and the new perl interpreter is
12714 ready to run at the exact same point as the previous one.
12715 The pseudo-fork code uses COPY_STACKS while the
12716 threads->create doesn't.
12717
12718 CLONEf_KEEP_PTR_TABLE -
12719 perl_clone keeps a ptr_table with the pointer of the old
12720 variable as a key and the new variable as a value,
12721 this allows it to check if something has been cloned and not
12722 clone it again but rather just use the value and increase the
12723 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
12724 the ptr_table using the function
12725 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12726 reason to keep it around is if you want to dup some of your own
12727 variable who are outside the graph perl scans, example of this
12728 code is in threads.xs create.
12729
12730 CLONEf_CLONE_HOST -
12731 This is a win32 thing, it is ignored on unix, it tells perls
12732 win32host code (which is c++) to clone itself, this is needed on
12733 win32 if you want to run two threads at the same time,
12734 if you just want to do some stuff in a separate perl interpreter
12735 and then throw it away and return to the original one,
12736 you don't need to do anything.
12737
12738 =cut
12739 */
12740
12741 /* XXX the above needs expanding by someone who actually understands it ! */
12742 EXTERN_C PerlInterpreter *
12743 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12744
12745 PerlInterpreter *
12746 perl_clone(PerlInterpreter *proto_perl, UV flags)
12747 {
12748    dVAR;
12749 #ifdef PERL_IMPLICIT_SYS
12750
12751     PERL_ARGS_ASSERT_PERL_CLONE;
12752
12753    /* perlhost.h so we need to call into it
12754    to clone the host, CPerlHost should have a c interface, sky */
12755
12756    if (flags & CLONEf_CLONE_HOST) {
12757        return perl_clone_host(proto_perl,flags);
12758    }
12759    return perl_clone_using(proto_perl, flags,
12760                             proto_perl->IMem,
12761                             proto_perl->IMemShared,
12762                             proto_perl->IMemParse,
12763                             proto_perl->IEnv,
12764                             proto_perl->IStdIO,
12765                             proto_perl->ILIO,
12766                             proto_perl->IDir,
12767                             proto_perl->ISock,
12768                             proto_perl->IProc);
12769 }
12770
12771 PerlInterpreter *
12772 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12773                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12774                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12775                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12776                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12777                  struct IPerlProc* ipP)
12778 {
12779     /* XXX many of the string copies here can be optimized if they're
12780      * constants; they need to be allocated as common memory and just
12781      * their pointers copied. */
12782
12783     IV i;
12784     CLONE_PARAMS clone_params;
12785     CLONE_PARAMS* const param = &clone_params;
12786
12787     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12788
12789     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12790 #else           /* !PERL_IMPLICIT_SYS */
12791     IV i;
12792     CLONE_PARAMS clone_params;
12793     CLONE_PARAMS* param = &clone_params;
12794     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12795
12796     PERL_ARGS_ASSERT_PERL_CLONE;
12797 #endif          /* PERL_IMPLICIT_SYS */
12798
12799     /* for each stash, determine whether its objects should be cloned */
12800     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12801     PERL_SET_THX(my_perl);
12802
12803 #ifdef DEBUGGING
12804     PoisonNew(my_perl, 1, PerlInterpreter);
12805     PL_op = NULL;
12806     PL_curcop = NULL;
12807     PL_defstash = NULL; /* may be used by perl malloc() */
12808     PL_markstack = 0;
12809     PL_scopestack = 0;
12810     PL_scopestack_name = 0;
12811     PL_savestack = 0;
12812     PL_savestack_ix = 0;
12813     PL_savestack_max = -1;
12814     PL_sig_pending = 0;
12815     PL_parser = NULL;
12816     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12817 #  ifdef DEBUG_LEAKING_SCALARS
12818     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12819 #  endif
12820 #else   /* !DEBUGGING */
12821     Zero(my_perl, 1, PerlInterpreter);
12822 #endif  /* DEBUGGING */
12823
12824 #ifdef PERL_IMPLICIT_SYS
12825     /* host pointers */
12826     PL_Mem              = ipM;
12827     PL_MemShared        = ipMS;
12828     PL_MemParse         = ipMP;
12829     PL_Env              = ipE;
12830     PL_StdIO            = ipStd;
12831     PL_LIO              = ipLIO;
12832     PL_Dir              = ipD;
12833     PL_Sock             = ipS;
12834     PL_Proc             = ipP;
12835 #endif          /* PERL_IMPLICIT_SYS */
12836
12837     param->flags = flags;
12838     /* Nothing in the core code uses this, but we make it available to
12839        extensions (using mg_dup).  */
12840     param->proto_perl = proto_perl;
12841     /* Likely nothing will use this, but it is initialised to be consistent
12842        with Perl_clone_params_new().  */
12843     param->new_perl = my_perl;
12844     param->unreferenced = NULL;
12845
12846     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12847
12848     PL_body_arenas = NULL;
12849     Zero(&PL_body_roots, 1, PL_body_roots);
12850     
12851     PL_sv_count         = 0;
12852     PL_sv_objcount      = 0;
12853     PL_sv_root          = NULL;
12854     PL_sv_arenaroot     = NULL;
12855
12856     PL_debug            = proto_perl->Idebug;
12857
12858     PL_hash_seed        = proto_perl->Ihash_seed;
12859     PL_rehash_seed      = proto_perl->Irehash_seed;
12860
12861     SvANY(&PL_sv_undef)         = NULL;
12862     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
12863     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
12864     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
12865     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12866                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12867
12868     SvANY(&PL_sv_yes)           = new_XPVNV();
12869     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
12870     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12871                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12872
12873     /* dbargs array probably holds garbage */
12874     PL_dbargs           = NULL;
12875
12876     PL_compiling = proto_perl->Icompiling;
12877
12878 #ifdef PERL_DEBUG_READONLY_OPS
12879     PL_slabs = NULL;
12880     PL_slab_count = 0;
12881 #endif
12882
12883     /* pseudo environmental stuff */
12884     PL_origargc         = proto_perl->Iorigargc;
12885     PL_origargv         = proto_perl->Iorigargv;
12886
12887     /* Set tainting stuff before PerlIO_debug can possibly get called */
12888     PL_tainting         = proto_perl->Itainting;
12889     PL_taint_warn       = proto_perl->Itaint_warn;
12890
12891     PL_minus_c          = proto_perl->Iminus_c;
12892
12893     PL_localpatches     = proto_perl->Ilocalpatches;
12894     PL_splitstr         = proto_perl->Isplitstr;
12895     PL_minus_n          = proto_perl->Iminus_n;
12896     PL_minus_p          = proto_perl->Iminus_p;
12897     PL_minus_l          = proto_perl->Iminus_l;
12898     PL_minus_a          = proto_perl->Iminus_a;
12899     PL_minus_E          = proto_perl->Iminus_E;
12900     PL_minus_F          = proto_perl->Iminus_F;
12901     PL_doswitches       = proto_perl->Idoswitches;
12902     PL_dowarn           = proto_perl->Idowarn;
12903     PL_sawampersand     = proto_perl->Isawampersand;
12904     PL_unsafe           = proto_perl->Iunsafe;
12905     PL_perldb           = proto_perl->Iperldb;
12906     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12907     PL_exit_flags       = proto_perl->Iexit_flags;
12908
12909     /* XXX time(&PL_basetime) when asked for? */
12910     PL_basetime         = proto_perl->Ibasetime;
12911
12912     PL_maxsysfd         = proto_perl->Imaxsysfd;
12913     PL_statusvalue      = proto_perl->Istatusvalue;
12914 #ifdef VMS
12915     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
12916 #else
12917     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12918 #endif
12919
12920     /* RE engine related */
12921     Zero(&PL_reg_state, 1, struct re_save_state);
12922     PL_reginterp_cnt    = 0;
12923     PL_regmatch_slab    = NULL;
12924
12925     PL_sub_generation   = proto_perl->Isub_generation;
12926
12927     /* funky return mechanisms */
12928     PL_forkprocess      = proto_perl->Iforkprocess;
12929
12930     /* internal state */
12931     PL_maxo             = proto_perl->Imaxo;
12932
12933     PL_main_start       = proto_perl->Imain_start;
12934     PL_eval_root        = proto_perl->Ieval_root;
12935     PL_eval_start       = proto_perl->Ieval_start;
12936
12937     PL_filemode         = proto_perl->Ifilemode;
12938     PL_lastfd           = proto_perl->Ilastfd;
12939     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
12940     PL_Argv             = NULL;
12941     PL_Cmd              = NULL;
12942     PL_gensym           = proto_perl->Igensym;
12943
12944     PL_laststatval      = proto_perl->Ilaststatval;
12945     PL_laststype        = proto_perl->Ilaststype;
12946     PL_mess_sv          = NULL;
12947
12948     PL_profiledata      = NULL;
12949
12950     PL_generation       = proto_perl->Igeneration;
12951
12952     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
12953     PL_in_clean_all     = proto_perl->Iin_clean_all;
12954
12955     PL_uid              = proto_perl->Iuid;
12956     PL_euid             = proto_perl->Ieuid;
12957     PL_gid              = proto_perl->Igid;
12958     PL_egid             = proto_perl->Iegid;
12959     PL_nomemok          = proto_perl->Inomemok;
12960     PL_an               = proto_perl->Ian;
12961     PL_evalseq          = proto_perl->Ievalseq;
12962     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
12963     PL_origalen         = proto_perl->Iorigalen;
12964
12965     PL_sighandlerp      = proto_perl->Isighandlerp;
12966
12967     PL_runops           = proto_perl->Irunops;
12968
12969     PL_subline          = proto_perl->Isubline;
12970
12971 #ifdef FCRYPT
12972     PL_cryptseen        = proto_perl->Icryptseen;
12973 #endif
12974
12975     PL_hints            = proto_perl->Ihints;
12976
12977     PL_amagic_generation        = proto_perl->Iamagic_generation;
12978
12979 #ifdef USE_LOCALE_COLLATE
12980     PL_collation_ix     = proto_perl->Icollation_ix;
12981     PL_collation_standard       = proto_perl->Icollation_standard;
12982     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
12983     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
12984 #endif /* USE_LOCALE_COLLATE */
12985
12986 #ifdef USE_LOCALE_NUMERIC
12987     PL_numeric_standard = proto_perl->Inumeric_standard;
12988     PL_numeric_local    = proto_perl->Inumeric_local;
12989 #endif /* !USE_LOCALE_NUMERIC */
12990
12991     /* Did the locale setup indicate UTF-8? */
12992     PL_utf8locale       = proto_perl->Iutf8locale;
12993     /* Unicode features (see perlrun/-C) */
12994     PL_unicode          = proto_perl->Iunicode;
12995
12996     /* Pre-5.8 signals control */
12997     PL_signals          = proto_perl->Isignals;
12998
12999     /* times() ticks per second */
13000     PL_clocktick        = proto_perl->Iclocktick;
13001
13002     /* Recursion stopper for PerlIO_find_layer */
13003     PL_in_load_module   = proto_perl->Iin_load_module;
13004
13005     /* sort() routine */
13006     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13007
13008     /* Not really needed/useful since the reenrant_retint is "volatile",
13009      * but do it for consistency's sake. */
13010     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13011
13012     /* Hooks to shared SVs and locks. */
13013     PL_sharehook        = proto_perl->Isharehook;
13014     PL_lockhook         = proto_perl->Ilockhook;
13015     PL_unlockhook       = proto_perl->Iunlockhook;
13016     PL_threadhook       = proto_perl->Ithreadhook;
13017     PL_destroyhook      = proto_perl->Idestroyhook;
13018     PL_signalhook       = proto_perl->Isignalhook;
13019
13020     PL_globhook         = proto_perl->Iglobhook;
13021
13022 #ifdef THREADS_HAVE_PIDS
13023     PL_ppid             = proto_perl->Ippid;
13024 #endif
13025
13026     /* swatch cache */
13027     PL_last_swash_hv    = NULL; /* reinits on demand */
13028     PL_last_swash_klen  = 0;
13029     PL_last_swash_key[0]= '\0';
13030     PL_last_swash_tmps  = (U8*)NULL;
13031     PL_last_swash_slen  = 0;
13032
13033     PL_glob_index       = proto_perl->Iglob_index;
13034     PL_srand_called     = proto_perl->Isrand_called;
13035
13036     if (flags & CLONEf_COPY_STACKS) {
13037         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13038         PL_tmps_ix              = proto_perl->Itmps_ix;
13039         PL_tmps_max             = proto_perl->Itmps_max;
13040         PL_tmps_floor           = proto_perl->Itmps_floor;
13041
13042         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13043          * NOTE: unlike the others! */
13044         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13045         PL_scopestack_max       = proto_perl->Iscopestack_max;
13046
13047         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13048          * NOTE: unlike the others! */
13049         PL_savestack_ix         = proto_perl->Isavestack_ix;
13050         PL_savestack_max        = proto_perl->Isavestack_max;
13051     }
13052
13053     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13054     PL_top_env          = &PL_start_env;
13055
13056     PL_op               = proto_perl->Iop;
13057
13058     PL_Sv               = NULL;
13059     PL_Xpv              = (XPV*)NULL;
13060     my_perl->Ina        = proto_perl->Ina;
13061
13062     PL_statbuf          = proto_perl->Istatbuf;
13063     PL_statcache        = proto_perl->Istatcache;
13064
13065 #ifdef HAS_TIMES
13066     PL_timesbuf         = proto_perl->Itimesbuf;
13067 #endif
13068
13069     PL_tainted          = proto_perl->Itainted;
13070     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13071
13072     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13073
13074     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13075     PL_restartop        = proto_perl->Irestartop;
13076     PL_in_eval          = proto_perl->Iin_eval;
13077     PL_delaymagic       = proto_perl->Idelaymagic;
13078     PL_phase            = proto_perl->Iphase;
13079     PL_localizing       = proto_perl->Ilocalizing;
13080
13081     PL_hv_fetch_ent_mh  = NULL;
13082     PL_modcount         = proto_perl->Imodcount;
13083     PL_lastgotoprobe    = NULL;
13084     PL_dumpindent       = proto_perl->Idumpindent;
13085
13086     PL_efloatbuf        = NULL;         /* reinits on demand */
13087     PL_efloatsize       = 0;                    /* reinits on demand */
13088
13089     /* regex stuff */
13090
13091     PL_regdummy         = proto_perl->Iregdummy;
13092     PL_colorset         = 0;            /* reinits PL_colors[] */
13093     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13094
13095     /* Pluggable optimizer */
13096     PL_peepp            = proto_perl->Ipeepp;
13097     PL_rpeepp           = proto_perl->Irpeepp;
13098     /* op_free() hook */
13099     PL_opfreehook       = proto_perl->Iopfreehook;
13100
13101 #ifdef USE_REENTRANT_API
13102     /* XXX: things like -Dm will segfault here in perlio, but doing
13103      *  PERL_SET_CONTEXT(proto_perl);
13104      * breaks too many other things
13105      */
13106     Perl_reentrant_init(aTHX);
13107 #endif
13108
13109     /* create SV map for pointer relocation */
13110     PL_ptr_table = ptr_table_new();
13111
13112     /* initialize these special pointers as early as possible */
13113     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13114
13115     SvANY(&PL_sv_no)            = new_XPVNV();
13116     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
13117     SvCUR_set(&PL_sv_no, 0);
13118     SvLEN_set(&PL_sv_no, 1);
13119     SvIV_set(&PL_sv_no, 0);
13120     SvNV_set(&PL_sv_no, 0);
13121     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13122
13123     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
13124     SvCUR_set(&PL_sv_yes, 1);
13125     SvLEN_set(&PL_sv_yes, 2);
13126     SvIV_set(&PL_sv_yes, 1);
13127     SvNV_set(&PL_sv_yes, 1);
13128     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13129
13130     /* create (a non-shared!) shared string table */
13131     PL_strtab           = newHV();
13132     HvSHAREKEYS_off(PL_strtab);
13133     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13134     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13135
13136     /* These two PVs will be free'd special way so must set them same way op.c does */
13137     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
13138     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
13139
13140     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13141     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13142
13143     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13144     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13145     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13146     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13147
13148     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13149     /* This makes no difference to the implementation, as it always pushes
13150        and shifts pointers to other SVs without changing their reference
13151        count, with the array becoming empty before it is freed. However, it
13152        makes it conceptually clear what is going on, and will avoid some
13153        work inside av.c, filling slots between AvFILL() and AvMAX() with
13154        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13155     AvREAL_off(param->stashes);
13156
13157     if (!(flags & CLONEf_COPY_STACKS)) {
13158         param->unreferenced = newAV();
13159     }
13160
13161 #ifdef PERLIO_LAYERS
13162     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13163     PerlIO_clone(aTHX_ proto_perl, param);
13164 #endif
13165
13166     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13167     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13168     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13169     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13170     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13171     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13172
13173     /* switches */
13174     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13175     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13176     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13177     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13178
13179     /* magical thingies */
13180     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
13181
13182     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13183
13184     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13185     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13186     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13187
13188    
13189     /* Clone the regex array */
13190     /* ORANGE FIXME for plugins, probably in the SV dup code.
13191        newSViv(PTR2IV(CALLREGDUPE(
13192        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13193     */
13194     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13195     PL_regex_pad = AvARRAY(PL_regex_padav);
13196
13197     /* shortcuts to various I/O objects */
13198     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13199     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13200     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13201     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13202     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13203     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13204     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13205
13206     /* shortcuts to regexp stuff */
13207     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13208
13209     /* shortcuts to misc objects */
13210     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13211
13212     /* shortcuts to debugging objects */
13213     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13214     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13215     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13216     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13217     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13218     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13219
13220     /* symbol tables */
13221     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13222     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13223     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13224     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13225     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13226
13227     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13228     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13229     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13230     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13231     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13232     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13233     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13234     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13235
13236     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13237
13238     /* subprocess state */
13239     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13240
13241     if (proto_perl->Iop_mask)
13242         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13243     else
13244         PL_op_mask      = NULL;
13245     /* PL_asserting        = proto_perl->Iasserting; */
13246
13247     /* current interpreter roots */
13248     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13249     OP_REFCNT_LOCK;
13250     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13251     OP_REFCNT_UNLOCK;
13252
13253     /* runtime control stuff */
13254     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13255
13256     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13257
13258     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13259
13260     /* interpreter atexit processing */
13261     PL_exitlistlen      = proto_perl->Iexitlistlen;
13262     if (PL_exitlistlen) {
13263         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13264         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13265     }
13266     else
13267         PL_exitlist     = (PerlExitListEntry*)NULL;
13268
13269     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13270     if (PL_my_cxt_size) {
13271         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13272         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13273 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13274         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13275         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13276 #endif
13277     }
13278     else {
13279         PL_my_cxt_list  = (void**)NULL;
13280 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13281         PL_my_cxt_keys  = (const char**)NULL;
13282 #endif
13283     }
13284     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13285     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13286     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13287     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13288
13289     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13290
13291     PAD_CLONE_VARS(proto_perl, param);
13292
13293 #ifdef HAVE_INTERP_INTERN
13294     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13295 #endif
13296
13297     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13298
13299 #ifdef PERL_USES_PL_PIDSTATUS
13300     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13301 #endif
13302     PL_osname           = SAVEPV(proto_perl->Iosname);
13303     PL_parser           = parser_dup(proto_perl->Iparser, param);
13304
13305     /* XXX this only works if the saved cop has already been cloned */
13306     if (proto_perl->Iparser) {
13307         PL_parser->saved_curcop = (COP*)any_dup(
13308                                     proto_perl->Iparser->saved_curcop,
13309                                     proto_perl);
13310     }
13311
13312     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13313
13314 #ifdef USE_LOCALE_COLLATE
13315     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13316 #endif /* USE_LOCALE_COLLATE */
13317
13318 #ifdef USE_LOCALE_NUMERIC
13319     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13320     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13321 #endif /* !USE_LOCALE_NUMERIC */
13322
13323     /* utf8 character classes */
13324     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
13325     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13326     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
13327     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
13328     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
13329     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
13330     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
13331     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
13332     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
13333     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13334     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13335     PL_utf8_X_begin     = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
13336     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13337     PL_utf8_X_prepend   = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
13338     PL_utf8_X_non_hangul        = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
13339     PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
13340     PL_utf8_X_LV        = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
13341     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13342     PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
13343     PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
13344     PL_utf8_X_LV_LVT_V  = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
13345     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13346     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13347     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13348     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13349     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13350     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13351     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13352     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13353     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13354     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13355
13356
13357     if (proto_perl->Ipsig_pend) {
13358         Newxz(PL_psig_pend, SIG_SIZE, int);
13359     }
13360     else {
13361         PL_psig_pend    = (int*)NULL;
13362     }
13363
13364     if (proto_perl->Ipsig_name) {
13365         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13366         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13367                             param);
13368         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13369     }
13370     else {
13371         PL_psig_ptr     = (SV**)NULL;
13372         PL_psig_name    = (SV**)NULL;
13373     }
13374
13375     if (flags & CLONEf_COPY_STACKS) {
13376         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13377         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13378                             PL_tmps_ix+1, param);
13379
13380         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13381         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13382         Newxz(PL_markstack, i, I32);
13383         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13384                                                   - proto_perl->Imarkstack);
13385         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13386                                                   - proto_perl->Imarkstack);
13387         Copy(proto_perl->Imarkstack, PL_markstack,
13388              PL_markstack_ptr - PL_markstack + 1, I32);
13389
13390         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13391          * NOTE: unlike the others! */
13392         Newxz(PL_scopestack, PL_scopestack_max, I32);
13393         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13394
13395 #ifdef DEBUGGING
13396         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13397         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13398 #endif
13399         /* NOTE: si_dup() looks at PL_markstack */
13400         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13401
13402         /* PL_curstack          = PL_curstackinfo->si_stack; */
13403         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13404         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13405
13406         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13407         PL_stack_base           = AvARRAY(PL_curstack);
13408         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13409                                                    - proto_perl->Istack_base);
13410         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13411
13412         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13413         PL_savestack            = ss_dup(proto_perl, param);
13414     }
13415     else {
13416         init_stacks();
13417         ENTER;                  /* perl_destruct() wants to LEAVE; */
13418     }
13419
13420     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13421     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13422
13423     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13424     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13425     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13426     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13427     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13428     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13429
13430     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13431
13432     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13433     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13434     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13435     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13436
13437     PL_stashcache       = newHV();
13438
13439     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13440                                             proto_perl->Iwatchaddr);
13441     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13442     if (PL_debug && PL_watchaddr) {
13443         PerlIO_printf(Perl_debug_log,
13444           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13445           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13446           PTR2UV(PL_watchok));
13447     }
13448
13449     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13450     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13451     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13452
13453     /* Call the ->CLONE method, if it exists, for each of the stashes
13454        identified by sv_dup() above.
13455     */
13456     while(av_len(param->stashes) != -1) {
13457         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13458         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13459         if (cloner && GvCV(cloner)) {
13460             dSP;
13461             ENTER;
13462             SAVETMPS;
13463             PUSHMARK(SP);
13464             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13465             PUTBACK;
13466             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13467             FREETMPS;
13468             LEAVE;
13469         }
13470     }
13471
13472     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13473         ptr_table_free(PL_ptr_table);
13474         PL_ptr_table = NULL;
13475     }
13476
13477     if (!(flags & CLONEf_COPY_STACKS)) {
13478         unreferenced_to_tmp_stack(param->unreferenced);
13479     }
13480
13481     SvREFCNT_dec(param->stashes);
13482
13483     /* orphaned? eg threads->new inside BEGIN or use */
13484     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13485         SvREFCNT_inc_simple_void(PL_compcv);
13486         SAVEFREESV(PL_compcv);
13487     }
13488
13489     return my_perl;
13490 }
13491
13492 static void
13493 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13494 {
13495     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13496     
13497     if (AvFILLp(unreferenced) > -1) {
13498         SV **svp = AvARRAY(unreferenced);
13499         SV **const last = svp + AvFILLp(unreferenced);
13500         SSize_t count = 0;
13501
13502         do {
13503             if (SvREFCNT(*svp) == 1)
13504                 ++count;
13505         } while (++svp <= last);
13506
13507         EXTEND_MORTAL(count);
13508         svp = AvARRAY(unreferenced);
13509
13510         do {
13511             if (SvREFCNT(*svp) == 1) {
13512                 /* Our reference is the only one to this SV. This means that
13513                    in this thread, the scalar effectively has a 0 reference.
13514                    That doesn't work (cleanup never happens), so donate our
13515                    reference to it onto the save stack. */
13516                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13517             } else {
13518                 /* As an optimisation, because we are already walking the
13519                    entire array, instead of above doing either
13520                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13521                    release our reference to the scalar, so that at the end of
13522                    the array owns zero references to the scalars it happens to
13523                    point to. We are effectively converting the array from
13524                    AvREAL() on to AvREAL() off. This saves the av_clear()
13525                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13526                    walking the array a second time.  */
13527                 SvREFCNT_dec(*svp);
13528             }
13529
13530         } while (++svp <= last);
13531         AvREAL_off(unreferenced);
13532     }
13533     SvREFCNT_dec(unreferenced);
13534 }
13535
13536 void
13537 Perl_clone_params_del(CLONE_PARAMS *param)
13538 {
13539     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13540        happy: */
13541     PerlInterpreter *const to = param->new_perl;
13542     dTHXa(to);
13543     PerlInterpreter *const was = PERL_GET_THX;
13544
13545     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13546
13547     if (was != to) {
13548         PERL_SET_THX(to);
13549     }
13550
13551     SvREFCNT_dec(param->stashes);
13552     if (param->unreferenced)
13553         unreferenced_to_tmp_stack(param->unreferenced);
13554
13555     Safefree(param);
13556
13557     if (was != to) {
13558         PERL_SET_THX(was);
13559     }
13560 }
13561
13562 CLONE_PARAMS *
13563 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13564 {
13565     dVAR;
13566     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13567        does a dTHX; to get the context from thread local storage.
13568        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13569        a version that passes in my_perl.  */
13570     PerlInterpreter *const was = PERL_GET_THX;
13571     CLONE_PARAMS *param;
13572
13573     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13574
13575     if (was != to) {
13576         PERL_SET_THX(to);
13577     }
13578
13579     /* Given that we've set the context, we can do this unshared.  */
13580     Newx(param, 1, CLONE_PARAMS);
13581
13582     param->flags = 0;
13583     param->proto_perl = from;
13584     param->new_perl = to;
13585     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13586     AvREAL_off(param->stashes);
13587     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13588
13589     if (was != to) {
13590         PERL_SET_THX(was);
13591     }
13592     return param;
13593 }
13594
13595 #endif /* USE_ITHREADS */
13596
13597 /*
13598 =head1 Unicode Support
13599
13600 =for apidoc sv_recode_to_utf8
13601
13602 The encoding is assumed to be an Encode object, on entry the PV
13603 of the sv is assumed to be octets in that encoding, and the sv
13604 will be converted into Unicode (and UTF-8).
13605
13606 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13607 is not a reference, nothing is done to the sv.  If the encoding is not
13608 an C<Encode::XS> Encoding object, bad things will happen.
13609 (See F<lib/encoding.pm> and L<Encode>.)
13610
13611 The PV of the sv is returned.
13612
13613 =cut */
13614
13615 char *
13616 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13617 {
13618     dVAR;
13619
13620     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13621
13622     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13623         SV *uni;
13624         STRLEN len;
13625         const char *s;
13626         dSP;
13627         ENTER;
13628         SAVETMPS;
13629         save_re_context();
13630         PUSHMARK(sp);
13631         EXTEND(SP, 3);
13632         XPUSHs(encoding);
13633         XPUSHs(sv);
13634 /*
13635   NI-S 2002/07/09
13636   Passing sv_yes is wrong - it needs to be or'ed set of constants
13637   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13638   remove converted chars from source.
13639
13640   Both will default the value - let them.
13641
13642         XPUSHs(&PL_sv_yes);
13643 */
13644         PUTBACK;
13645         call_method("decode", G_SCALAR);
13646         SPAGAIN;
13647         uni = POPs;
13648         PUTBACK;
13649         s = SvPV_const(uni, len);
13650         if (s != SvPVX_const(sv)) {
13651             SvGROW(sv, len + 1);
13652             Move(s, SvPVX(sv), len + 1, char);
13653             SvCUR_set(sv, len);
13654         }
13655         FREETMPS;
13656         LEAVE;
13657         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13658             /* clear pos and any utf8 cache */
13659             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13660             if (mg)
13661                 mg->mg_len = -1;
13662             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13663                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13664         }
13665         SvUTF8_on(sv);
13666         return SvPVX(sv);
13667     }
13668     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13669 }
13670
13671 /*
13672 =for apidoc sv_cat_decode
13673
13674 The encoding is assumed to be an Encode object, the PV of the ssv is
13675 assumed to be octets in that encoding and decoding the input starts
13676 from the position which (PV + *offset) pointed to.  The dsv will be
13677 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13678 when the string tstr appears in decoding output or the input ends on
13679 the PV of the ssv. The value which the offset points will be modified
13680 to the last input position on the ssv.
13681
13682 Returns TRUE if the terminator was found, else returns FALSE.
13683
13684 =cut */
13685
13686 bool
13687 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13688                    SV *ssv, int *offset, char *tstr, int tlen)
13689 {
13690     dVAR;
13691     bool ret = FALSE;
13692
13693     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13694
13695     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13696         SV *offsv;
13697         dSP;
13698         ENTER;
13699         SAVETMPS;
13700         save_re_context();
13701         PUSHMARK(sp);
13702         EXTEND(SP, 6);
13703         XPUSHs(encoding);
13704         XPUSHs(dsv);
13705         XPUSHs(ssv);
13706         offsv = newSViv(*offset);
13707         mXPUSHs(offsv);
13708         mXPUSHp(tstr, tlen);
13709         PUTBACK;
13710         call_method("cat_decode", G_SCALAR);
13711         SPAGAIN;
13712         ret = SvTRUE(TOPs);
13713         *offset = SvIV(offsv);
13714         PUTBACK;
13715         FREETMPS;
13716         LEAVE;
13717     }
13718     else
13719         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13720     return ret;
13721
13722 }
13723
13724 /* ---------------------------------------------------------------------
13725  *
13726  * support functions for report_uninit()
13727  */
13728
13729 /* the maxiumum size of array or hash where we will scan looking
13730  * for the undefined element that triggered the warning */
13731
13732 #define FUV_MAX_SEARCH_SIZE 1000
13733
13734 /* Look for an entry in the hash whose value has the same SV as val;
13735  * If so, return a mortal copy of the key. */
13736
13737 STATIC SV*
13738 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13739 {
13740     dVAR;
13741     register HE **array;
13742     I32 i;
13743
13744     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13745
13746     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13747                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13748         return NULL;
13749
13750     array = HvARRAY(hv);
13751
13752     for (i=HvMAX(hv); i>0; i--) {
13753         register HE *entry;
13754         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13755             if (HeVAL(entry) != val)
13756                 continue;
13757             if (    HeVAL(entry) == &PL_sv_undef ||
13758                     HeVAL(entry) == &PL_sv_placeholder)
13759                 continue;
13760             if (!HeKEY(entry))
13761                 return NULL;
13762             if (HeKLEN(entry) == HEf_SVKEY)
13763                 return sv_mortalcopy(HeKEY_sv(entry));
13764             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13765         }
13766     }
13767     return NULL;
13768 }
13769
13770 /* Look for an entry in the array whose value has the same SV as val;
13771  * If so, return the index, otherwise return -1. */
13772
13773 STATIC I32
13774 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13775 {
13776     dVAR;
13777
13778     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13779
13780     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13781                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13782         return -1;
13783
13784     if (val != &PL_sv_undef) {
13785         SV ** const svp = AvARRAY(av);
13786         I32 i;
13787
13788         for (i=AvFILLp(av); i>=0; i--)
13789             if (svp[i] == val)
13790                 return i;
13791     }
13792     return -1;
13793 }
13794
13795 /* S_varname(): return the name of a variable, optionally with a subscript.
13796  * If gv is non-zero, use the name of that global, along with gvtype (one
13797  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13798  * targ.  Depending on the value of the subscript_type flag, return:
13799  */
13800
13801 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13802 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13803 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13804 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13805
13806 SV*
13807 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13808         const SV *const keyname, I32 aindex, int subscript_type)
13809 {
13810
13811     SV * const name = sv_newmortal();
13812     if (gv) {
13813         char buffer[2];
13814         buffer[0] = gvtype;
13815         buffer[1] = 0;
13816
13817         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13818
13819         gv_fullname4(name, gv, buffer, 0);
13820
13821         if ((unsigned int)SvPVX(name)[1] <= 26) {
13822             buffer[0] = '^';
13823             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13824
13825             /* Swap the 1 unprintable control character for the 2 byte pretty
13826                version - ie substr($name, 1, 1) = $buffer; */
13827             sv_insert(name, 1, 1, buffer, 2);
13828         }
13829     }
13830     else {
13831         CV * const cv = find_runcv(NULL);
13832         SV *sv;
13833         AV *av;
13834
13835         if (!cv || !CvPADLIST(cv))
13836             return NULL;
13837         av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
13838         sv = *av_fetch(av, targ, FALSE);
13839         sv_setsv(name, sv);
13840     }
13841
13842     if (subscript_type == FUV_SUBSCRIPT_HASH) {
13843         SV * const sv = newSV(0);
13844         *SvPVX(name) = '$';
13845         Perl_sv_catpvf(aTHX_ name, "{%s}",
13846             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13847         SvREFCNT_dec(sv);
13848     }
13849     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13850         *SvPVX(name) = '$';
13851         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13852     }
13853     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13854         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13855         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
13856     }
13857
13858     return name;
13859 }
13860
13861
13862 /*
13863 =for apidoc find_uninit_var
13864
13865 Find the name of the undefined variable (if any) that caused the operator
13866 to issue a "Use of uninitialized value" warning.
13867 If match is true, only return a name if its value matches uninit_sv.
13868 So roughly speaking, if a unary operator (such as OP_COS) generates a
13869 warning, then following the direct child of the op may yield an
13870 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
13871 other hand, with OP_ADD there are two branches to follow, so we only print
13872 the variable name if we get an exact match.
13873
13874 The name is returned as a mortal SV.
13875
13876 Assumes that PL_op is the op that originally triggered the error, and that
13877 PL_comppad/PL_curpad points to the currently executing pad.
13878
13879 =cut
13880 */
13881
13882 STATIC SV *
13883 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13884                   bool match)
13885 {
13886     dVAR;
13887     SV *sv;
13888     const GV *gv;
13889     const OP *o, *o2, *kid;
13890
13891     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13892                             uninit_sv == &PL_sv_placeholder)))
13893         return NULL;
13894
13895     switch (obase->op_type) {
13896
13897     case OP_RV2AV:
13898     case OP_RV2HV:
13899     case OP_PADAV:
13900     case OP_PADHV:
13901       {
13902         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13903         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13904         I32 index = 0;
13905         SV *keysv = NULL;
13906         int subscript_type = FUV_SUBSCRIPT_WITHIN;
13907
13908         if (pad) { /* @lex, %lex */
13909             sv = PAD_SVl(obase->op_targ);
13910             gv = NULL;
13911         }
13912         else {
13913             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13914             /* @global, %global */
13915                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13916                 if (!gv)
13917                     break;
13918                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
13919             }
13920             else if (obase == PL_op) /* @{expr}, %{expr} */
13921                 return find_uninit_var(cUNOPx(obase)->op_first,
13922                                                     uninit_sv, match);
13923             else /* @{expr}, %{expr} as a sub-expression */
13924                 return NULL;
13925         }
13926
13927         /* attempt to find a match within the aggregate */
13928         if (hash) {
13929             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13930             if (keysv)
13931                 subscript_type = FUV_SUBSCRIPT_HASH;
13932         }
13933         else {
13934             index = find_array_subscript((const AV *)sv, uninit_sv);
13935             if (index >= 0)
13936                 subscript_type = FUV_SUBSCRIPT_ARRAY;
13937         }
13938
13939         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13940             break;
13941
13942         return varname(gv, hash ? '%' : '@', obase->op_targ,
13943                                     keysv, index, subscript_type);
13944       }
13945
13946     case OP_RV2SV:
13947         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13948             /* $global */
13949             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13950             if (!gv || !GvSTASH(gv))
13951                 break;
13952             if (match && (GvSV(gv) != uninit_sv))
13953                 break;
13954             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13955         }
13956         /* ${expr} */
13957         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
13958
13959     case OP_PADSV:
13960         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13961             break;
13962         return varname(NULL, '$', obase->op_targ,
13963                                     NULL, 0, FUV_SUBSCRIPT_NONE);
13964
13965     case OP_GVSV:
13966         gv = cGVOPx_gv(obase);
13967         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
13968             break;
13969         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13970
13971     case OP_AELEMFAST_LEX:
13972         if (match) {
13973             SV **svp;
13974             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
13975             if (!av || SvRMAGICAL(av))
13976                 break;
13977             svp = av_fetch(av, (I32)obase->op_private, FALSE);
13978             if (!svp || *svp != uninit_sv)
13979                 break;
13980         }
13981         return varname(NULL, '$', obase->op_targ,
13982                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13983     case OP_AELEMFAST:
13984         {
13985             gv = cGVOPx_gv(obase);
13986             if (!gv)
13987                 break;
13988             if (match) {
13989                 SV **svp;
13990                 AV *const av = GvAV(gv);
13991                 if (!av || SvRMAGICAL(av))
13992                     break;
13993                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13994                 if (!svp || *svp != uninit_sv)
13995                     break;
13996             }
13997             return varname(gv, '$', 0,
13998                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13999         }
14000         break;
14001
14002     case OP_EXISTS:
14003         o = cUNOPx(obase)->op_first;
14004         if (!o || o->op_type != OP_NULL ||
14005                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14006             break;
14007         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14008
14009     case OP_AELEM:
14010     case OP_HELEM:
14011     {
14012         bool negate = FALSE;
14013
14014         if (PL_op == obase)
14015             /* $a[uninit_expr] or $h{uninit_expr} */
14016             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14017
14018         gv = NULL;
14019         o = cBINOPx(obase)->op_first;
14020         kid = cBINOPx(obase)->op_last;
14021
14022         /* get the av or hv, and optionally the gv */
14023         sv = NULL;
14024         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14025             sv = PAD_SV(o->op_targ);
14026         }
14027         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14028                 && cUNOPo->op_first->op_type == OP_GV)
14029         {
14030             gv = cGVOPx_gv(cUNOPo->op_first);
14031             if (!gv)
14032                 break;
14033             sv = o->op_type
14034                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14035         }
14036         if (!sv)
14037             break;
14038
14039         if (kid && kid->op_type == OP_NEGATE) {
14040             negate = TRUE;
14041             kid = cUNOPx(kid)->op_first;
14042         }
14043
14044         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14045             /* index is constant */
14046             SV* kidsv;
14047             if (negate) {
14048                 kidsv = sv_2mortal(newSVpvs("-"));
14049                 sv_catsv(kidsv, cSVOPx_sv(kid));
14050             }
14051             else
14052                 kidsv = cSVOPx_sv(kid);
14053             if (match) {
14054                 if (SvMAGICAL(sv))
14055                     break;
14056                 if (obase->op_type == OP_HELEM) {
14057                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14058                     if (!he || HeVAL(he) != uninit_sv)
14059                         break;
14060                 }
14061                 else {
14062                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14063                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14064                         FALSE);
14065                     if (!svp || *svp != uninit_sv)
14066                         break;
14067                 }
14068             }
14069             if (obase->op_type == OP_HELEM)
14070                 return varname(gv, '%', o->op_targ,
14071                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14072             else
14073                 return varname(gv, '@', o->op_targ, NULL,
14074                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14075                     FUV_SUBSCRIPT_ARRAY);
14076         }
14077         else  {
14078             /* index is an expression;
14079              * attempt to find a match within the aggregate */
14080             if (obase->op_type == OP_HELEM) {
14081                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14082                 if (keysv)
14083                     return varname(gv, '%', o->op_targ,
14084                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14085             }
14086             else {
14087                 const I32 index
14088                     = find_array_subscript((const AV *)sv, uninit_sv);
14089                 if (index >= 0)
14090                     return varname(gv, '@', o->op_targ,
14091                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14092             }
14093             if (match)
14094                 break;
14095             return varname(gv,
14096                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14097                 ? '@' : '%',
14098                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14099         }
14100         break;
14101     }
14102
14103     case OP_AASSIGN:
14104         /* only examine RHS */
14105         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14106
14107     case OP_OPEN:
14108         o = cUNOPx(obase)->op_first;
14109         if (o->op_type == OP_PUSHMARK)
14110             o = o->op_sibling;
14111
14112         if (!o->op_sibling) {
14113             /* one-arg version of open is highly magical */
14114
14115             if (o->op_type == OP_GV) { /* open FOO; */
14116                 gv = cGVOPx_gv(o);
14117                 if (match && GvSV(gv) != uninit_sv)
14118                     break;
14119                 return varname(gv, '$', 0,
14120                             NULL, 0, FUV_SUBSCRIPT_NONE);
14121             }
14122             /* other possibilities not handled are:
14123              * open $x; or open my $x;  should return '${*$x}'
14124              * open expr;               should return '$'.expr ideally
14125              */
14126              break;
14127         }
14128         goto do_op;
14129
14130     /* ops where $_ may be an implicit arg */
14131     case OP_TRANS:
14132     case OP_TRANSR:
14133     case OP_SUBST:
14134     case OP_MATCH:
14135         if ( !(obase->op_flags & OPf_STACKED)) {
14136             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14137                                  ? PAD_SVl(obase->op_targ)
14138                                  : DEFSV))
14139             {
14140                 sv = sv_newmortal();
14141                 sv_setpvs(sv, "$_");
14142                 return sv;
14143             }
14144         }
14145         goto do_op;
14146
14147     case OP_PRTF:
14148     case OP_PRINT:
14149     case OP_SAY:
14150         match = 1; /* print etc can return undef on defined args */
14151         /* skip filehandle as it can't produce 'undef' warning  */
14152         o = cUNOPx(obase)->op_first;
14153         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
14154             o = o->op_sibling->op_sibling;
14155         goto do_op2;
14156
14157
14158     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14159     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14160
14161         /* the following ops are capable of returning PL_sv_undef even for
14162          * defined arg(s) */
14163
14164     case OP_BACKTICK:
14165     case OP_PIPE_OP:
14166     case OP_FILENO:
14167     case OP_BINMODE:
14168     case OP_TIED:
14169     case OP_GETC:
14170     case OP_SYSREAD:
14171     case OP_SEND:
14172     case OP_IOCTL:
14173     case OP_SOCKET:
14174     case OP_SOCKPAIR:
14175     case OP_BIND:
14176     case OP_CONNECT:
14177     case OP_LISTEN:
14178     case OP_ACCEPT:
14179     case OP_SHUTDOWN:
14180     case OP_SSOCKOPT:
14181     case OP_GETPEERNAME:
14182     case OP_FTRREAD:
14183     case OP_FTRWRITE:
14184     case OP_FTREXEC:
14185     case OP_FTROWNED:
14186     case OP_FTEREAD:
14187     case OP_FTEWRITE:
14188     case OP_FTEEXEC:
14189     case OP_FTEOWNED:
14190     case OP_FTIS:
14191     case OP_FTZERO:
14192     case OP_FTSIZE:
14193     case OP_FTFILE:
14194     case OP_FTDIR:
14195     case OP_FTLINK:
14196     case OP_FTPIPE:
14197     case OP_FTSOCK:
14198     case OP_FTBLK:
14199     case OP_FTCHR:
14200     case OP_FTTTY:
14201     case OP_FTSUID:
14202     case OP_FTSGID:
14203     case OP_FTSVTX:
14204     case OP_FTTEXT:
14205     case OP_FTBINARY:
14206     case OP_FTMTIME:
14207     case OP_FTATIME:
14208     case OP_FTCTIME:
14209     case OP_READLINK:
14210     case OP_OPEN_DIR:
14211     case OP_READDIR:
14212     case OP_TELLDIR:
14213     case OP_SEEKDIR:
14214     case OP_REWINDDIR:
14215     case OP_CLOSEDIR:
14216     case OP_GMTIME:
14217     case OP_ALARM:
14218     case OP_SEMGET:
14219     case OP_GETLOGIN:
14220     case OP_UNDEF:
14221     case OP_SUBSTR:
14222     case OP_AEACH:
14223     case OP_EACH:
14224     case OP_SORT:
14225     case OP_CALLER:
14226     case OP_DOFILE:
14227     case OP_PROTOTYPE:
14228     case OP_NCMP:
14229     case OP_SMARTMATCH:
14230     case OP_UNPACK:
14231     case OP_SYSOPEN:
14232     case OP_SYSSEEK:
14233         match = 1;
14234         goto do_op;
14235
14236     case OP_ENTERSUB:
14237     case OP_GOTO:
14238         /* XXX tmp hack: these two may call an XS sub, and currently
14239           XS subs don't have a SUB entry on the context stack, so CV and
14240           pad determination goes wrong, and BAD things happen. So, just
14241           don't try to determine the value under those circumstances.
14242           Need a better fix at dome point. DAPM 11/2007 */
14243         break;
14244
14245     case OP_FLIP:
14246     case OP_FLOP:
14247     {
14248         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14249         if (gv && GvSV(gv) == uninit_sv)
14250             return newSVpvs_flags("$.", SVs_TEMP);
14251         goto do_op;
14252     }
14253
14254     case OP_POS:
14255         /* def-ness of rval pos() is independent of the def-ness of its arg */
14256         if ( !(obase->op_flags & OPf_MOD))
14257             break;
14258
14259     case OP_SCHOMP:
14260     case OP_CHOMP:
14261         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14262             return newSVpvs_flags("${$/}", SVs_TEMP);
14263         /*FALLTHROUGH*/
14264
14265     default:
14266     do_op:
14267         if (!(obase->op_flags & OPf_KIDS))
14268             break;
14269         o = cUNOPx(obase)->op_first;
14270         
14271     do_op2:
14272         if (!o)
14273             break;
14274
14275         /* This loop checks all the kid ops, skipping any that cannot pos-
14276          * sibly be responsible for the uninitialized value; i.e., defined
14277          * constants and ops that return nothing.  If there is only one op
14278          * left that is not skipped, then we *know* it is responsible for
14279          * the uninitialized value.  If there is more than one op left, we
14280          * have to look for an exact match in the while() loop below.
14281          */
14282         o2 = NULL;
14283         for (kid=o; kid; kid = kid->op_sibling) {
14284             if (kid) {
14285                 const OPCODE type = kid->op_type;
14286                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14287                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14288                   || (type == OP_PUSHMARK)
14289                 )
14290                 continue;
14291             }
14292             if (o2) { /* more than one found */
14293                 o2 = NULL;
14294                 break;
14295             }
14296             o2 = kid;
14297         }
14298         if (o2)
14299             return find_uninit_var(o2, uninit_sv, match);
14300
14301         /* scan all args */
14302         while (o) {
14303             sv = find_uninit_var(o, uninit_sv, 1);
14304             if (sv)
14305                 return sv;
14306             o = o->op_sibling;
14307         }
14308         break;
14309     }
14310     return NULL;
14311 }
14312
14313
14314 /*
14315 =for apidoc report_uninit
14316
14317 Print appropriate "Use of uninitialized variable" warning.
14318
14319 =cut
14320 */
14321
14322 void
14323 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14324 {
14325     dVAR;
14326     if (PL_op) {
14327         SV* varname = NULL;
14328         if (uninit_sv && PL_curpad) {
14329             varname = find_uninit_var(PL_op, uninit_sv,0);
14330             if (varname)
14331                 sv_insert(varname, 0, 0, " ", 1);
14332         }
14333         /* diag_listed_as: Use of uninitialized value%s */
14334         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14335                 SVfARG(varname ? varname : &PL_sv_no),
14336                 " in ", OP_DESC(PL_op));
14337     }
14338     else
14339         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14340                     "", "", "");
14341 }
14342
14343 /*
14344  * Local variables:
14345  * c-indentation-style: bsd
14346  * c-basic-offset: 4
14347  * indent-tabs-mode: t
14348  * End:
14349  *
14350  * ex: set ts=8 sts=4 sw=4 noet:
14351  */