This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
General perlfunc edit; document ‘default’
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34
35 #ifndef HAS_C99
36 # if __STDC_VERSION__ >= 199901L && !defined(VMS)
37 #  define HAS_C99 1
38 # endif
39 #endif
40 #if HAS_C99
41 # include <stdint.h>
42 #endif
43
44 #define FCALL *f
45
46 #ifdef __Lynx__
47 /* Missing proto on LynxOS */
48   char *gconvert(double, int, int,  char *);
49 #endif
50
51 #ifdef PERL_UTF8_CACHE_ASSERT
52 /* if adding more checks watch out for the following tests:
53  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54  *   lib/utf8.t lib/Unicode/Collate/t/index.t
55  * --jhi
56  */
57 #   define ASSERT_UTF8_CACHE(cache) \
58     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59                               assert((cache)[2] <= (cache)[3]); \
60                               assert((cache)[3] <= (cache)[1]);} \
61                               } STMT_END
62 #else
63 #   define ASSERT_UTF8_CACHE(cache) NOOP
64 #endif
65
66 #ifdef PERL_OLD_COPY_ON_WRITE
67 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
68 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
69 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
70    on-write.  */
71 #endif
72
73 /* ============================================================================
74
75 =head1 Allocation and deallocation of SVs.
76
77 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
78 sv, av, hv...) contains type and reference count information, and for
79 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
80 contains fields specific to each type.  Some types store all they need
81 in the head, so don't have a body.
82
83 In all but the most memory-paranoid configurations (ex: PURIFY), heads
84 and bodies are allocated out of arenas, which by default are
85 approximately 4K chunks of memory parcelled up into N heads or bodies.
86 Sv-bodies are allocated by their sv-type, guaranteeing size
87 consistency needed to allocate safely from arrays.
88
89 For SV-heads, the first slot in each arena is reserved, and holds a
90 link to the next arena, some flags, and a note of the number of slots.
91 Snaked through each arena chain is a linked list of free items; when
92 this becomes empty, an extra arena is allocated and divided up into N
93 items which are threaded into the free list.
94
95 SV-bodies are similar, but they use arena-sets by default, which
96 separate the link and info from the arena itself, and reclaim the 1st
97 slot in the arena.  SV-bodies are further described later.
98
99 The following global variables are associated with arenas:
100
101     PL_sv_arenaroot     pointer to list of SV arenas
102     PL_sv_root          pointer to list of free SV structures
103
104     PL_body_arenas      head of linked-list of body arenas
105     PL_body_roots[]     array of pointers to list of free bodies of svtype
106                         arrays are indexed by the svtype needed
107
108 A few special SV heads are not allocated from an arena, but are
109 instead directly created in the interpreter structure, eg PL_sv_undef.
110 The size of arenas can be changed from the default by setting
111 PERL_ARENA_SIZE appropriately at compile time.
112
113 The SV arena serves the secondary purpose of allowing still-live SVs
114 to be located and destroyed during final cleanup.
115
116 At the lowest level, the macros new_SV() and del_SV() grab and free
117 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
118 to return the SV to the free list with error checking.) new_SV() calls
119 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
120 SVs in the free list have their SvTYPE field set to all ones.
121
122 At the time of very final cleanup, sv_free_arenas() is called from
123 perl_destruct() to physically free all the arenas allocated since the
124 start of the interpreter.
125
126 The function visit() scans the SV arenas list, and calls a specified
127 function for each SV it finds which is still live - ie which has an SvTYPE
128 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
129 following functions (specified as [function that calls visit()] / [function
130 called by visit() for each SV]):
131
132     sv_report_used() / do_report_used()
133                         dump all remaining SVs (debugging aid)
134
135     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
136                       do_clean_named_io_objs()
137                         Attempt to free all objects pointed to by RVs,
138                         and try to do the same for all objects indirectly
139                         referenced by typeglobs too.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
186 #  define DEBUG_SV_SERIAL(sv)                                               \
187     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
188             PTR2UV(sv), (long)(sv)->sv_debug_serial))
189 #else
190 #  define FREE_SV_DEBUG_FILE(sv)
191 #  define DEBUG_SV_SERIAL(sv)   NOOP
192 #endif
193
194 #ifdef PERL_POISON
195 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
196 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
197 /* Whilst I'd love to do this, it seems that things like to check on
198    unreferenced scalars
199 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
200 */
201 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
202                                 PoisonNew(&SvREFCNT(sv), 1, U32)
203 #else
204 #  define SvARENA_CHAIN(sv)     SvANY(sv)
205 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
206 #  define POSION_SV_HEAD(sv)
207 #endif
208
209 /* Mark an SV head as unused, and add to free list.
210  *
211  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
212  * its refcount artificially decremented during global destruction, so
213  * there may be dangling pointers to it. The last thing we want in that
214  * case is for it to be reused. */
215
216 #define plant_SV(p) \
217     STMT_START {                                        \
218         const U32 old_flags = SvFLAGS(p);                       \
219         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
220         DEBUG_SV_SERIAL(p);                             \
221         FREE_SV_DEBUG_FILE(p);                          \
222         POSION_SV_HEAD(p);                              \
223         SvFLAGS(p) = SVTYPEMASK;                        \
224         if (!(old_flags & SVf_BREAK)) {         \
225             SvARENA_CHAIN_SET(p, PL_sv_root);   \
226             PL_sv_root = (p);                           \
227         }                                               \
228         --PL_sv_count;                                  \
229     } STMT_END
230
231 #define uproot_SV(p) \
232     STMT_START {                                        \
233         (p) = PL_sv_root;                               \
234         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
235         ++PL_sv_count;                                  \
236     } STMT_END
237
238
239 /* make some more SVs by adding another arena */
240
241 STATIC SV*
242 S_more_sv(pTHX)
243 {
244     dVAR;
245     SV* sv;
246     char *chunk;                /* must use New here to match call to */
247     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
248     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
249     uproot_SV(sv);
250     return sv;
251 }
252
253 /* new_SV(): return a new, empty SV head */
254
255 #ifdef DEBUG_LEAKING_SCALARS
256 /* provide a real function for a debugger to play with */
257 STATIC SV*
258 S_new_SV(pTHX_ const char *file, int line, const char *func)
259 {
260     SV* sv;
261
262     if (PL_sv_root)
263         uproot_SV(sv);
264     else
265         sv = S_more_sv(aTHX);
266     SvANY(sv) = 0;
267     SvREFCNT(sv) = 1;
268     SvFLAGS(sv) = 0;
269     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
270     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
271                 ? PL_parser->copline
272                 :  PL_curcop
273                     ? CopLINE(PL_curcop)
274                     : 0
275             );
276     sv->sv_debug_inpad = 0;
277     sv->sv_debug_parent = NULL;
278     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
279
280     sv->sv_debug_serial = PL_sv_serial++;
281
282     MEM_LOG_NEW_SV(sv, file, line, func);
283     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
284             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
285
286     return sv;
287 }
288 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
289
290 #else
291 #  define new_SV(p) \
292     STMT_START {                                        \
293         if (PL_sv_root)                                 \
294             uproot_SV(p);                               \
295         else                                            \
296             (p) = S_more_sv(aTHX);                      \
297         SvANY(p) = 0;                                   \
298         SvREFCNT(p) = 1;                                \
299         SvFLAGS(p) = 0;                                 \
300         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
301     } STMT_END
302 #endif
303
304
305 /* del_SV(): return an empty SV head to the free list */
306
307 #ifdef DEBUGGING
308
309 #define del_SV(p) \
310     STMT_START {                                        \
311         if (DEBUG_D_TEST)                               \
312             del_sv(p);                                  \
313         else                                            \
314             plant_SV(p);                                \
315     } STMT_END
316
317 STATIC void
318 S_del_sv(pTHX_ SV *p)
319 {
320     dVAR;
321
322     PERL_ARGS_ASSERT_DEL_SV;
323
324     if (DEBUG_D_TEST) {
325         SV* sva;
326         bool ok = 0;
327         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
328             const SV * const sv = sva + 1;
329             const SV * const svend = &sva[SvREFCNT(sva)];
330             if (p >= sv && p < svend) {
331                 ok = 1;
332                 break;
333             }
334         }
335         if (!ok) {
336             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
337                              "Attempt to free non-arena SV: 0x%"UVxf
338                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
339             return;
340         }
341     }
342     plant_SV(p);
343 }
344
345 #else /* ! DEBUGGING */
346
347 #define del_SV(p)   plant_SV(p)
348
349 #endif /* DEBUGGING */
350
351
352 /*
353 =head1 SV Manipulation Functions
354
355 =for apidoc sv_add_arena
356
357 Given a chunk of memory, link it to the head of the list of arenas,
358 and split it into a list of free SVs.
359
360 =cut
361 */
362
363 static void
364 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
365 {
366     dVAR;
367     SV *const sva = MUTABLE_SV(ptr);
368     register SV* sv;
369     register SV* svend;
370
371     PERL_ARGS_ASSERT_SV_ADD_ARENA;
372
373     /* The first SV in an arena isn't an SV. */
374     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
375     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
376     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
377
378     PL_sv_arenaroot = sva;
379     PL_sv_root = sva + 1;
380
381     svend = &sva[SvREFCNT(sva) - 1];
382     sv = sva + 1;
383     while (sv < svend) {
384         SvARENA_CHAIN_SET(sv, (sv + 1));
385 #ifdef DEBUGGING
386         SvREFCNT(sv) = 0;
387 #endif
388         /* Must always set typemask because it's always checked in on cleanup
389            when the arenas are walked looking for objects.  */
390         SvFLAGS(sv) = SVTYPEMASK;
391         sv++;
392     }
393     SvARENA_CHAIN_SET(sv, 0);
394 #ifdef DEBUGGING
395     SvREFCNT(sv) = 0;
396 #endif
397     SvFLAGS(sv) = SVTYPEMASK;
398 }
399
400 /* visit(): call the named function for each non-free SV in the arenas
401  * whose flags field matches the flags/mask args. */
402
403 STATIC I32
404 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
405 {
406     dVAR;
407     SV* sva;
408     I32 visited = 0;
409
410     PERL_ARGS_ASSERT_VISIT;
411
412     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
413         register const SV * const svend = &sva[SvREFCNT(sva)];
414         register SV* sv;
415         for (sv = sva + 1; sv < svend; ++sv) {
416             if (SvTYPE(sv) != SVTYPEMASK
417                     && (sv->sv_flags & mask) == flags
418                     && SvREFCNT(sv))
419             {
420                 (FCALL)(aTHX_ sv);
421                 ++visited;
422             }
423         }
424     }
425     return visited;
426 }
427
428 #ifdef DEBUGGING
429
430 /* called by sv_report_used() for each live SV */
431
432 static void
433 do_report_used(pTHX_ SV *const sv)
434 {
435     if (SvTYPE(sv) != SVTYPEMASK) {
436         PerlIO_printf(Perl_debug_log, "****\n");
437         sv_dump(sv);
438     }
439 }
440 #endif
441
442 /*
443 =for apidoc sv_report_used
444
445 Dump the contents of all SVs not yet freed. (Debugging aid).
446
447 =cut
448 */
449
450 void
451 Perl_sv_report_used(pTHX)
452 {
453 #ifdef DEBUGGING
454     visit(do_report_used, 0, 0);
455 #else
456     PERL_UNUSED_CONTEXT;
457 #endif
458 }
459
460 /* called by sv_clean_objs() for each live SV */
461
462 static void
463 do_clean_objs(pTHX_ SV *const ref)
464 {
465     dVAR;
466     assert (SvROK(ref));
467     {
468         SV * const target = SvRV(ref);
469         if (SvOBJECT(target)) {
470             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
471             if (SvWEAKREF(ref)) {
472                 sv_del_backref(target, ref);
473                 SvWEAKREF_off(ref);
474                 SvRV_set(ref, NULL);
475             } else {
476                 SvROK_off(ref);
477                 SvRV_set(ref, NULL);
478                 SvREFCNT_dec(target);
479             }
480         }
481     }
482
483     /* XXX Might want to check arrays, etc. */
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV_set(sv, NULL);
526         SvREFCNT_dec(obj);
527     }
528     SvREFCNT_dec(sv); /* undo the inc above */
529 }
530
531 /* clear any IO slots in a GV which hold objects (except stderr, defout);
532  * called by sv_clean_objs() for each live GV */
533
534 static void
535 do_clean_named_io_objs(pTHX_ SV *const sv)
536 {
537     dVAR;
538     SV *obj;
539     assert(SvTYPE(sv) == SVt_PVGV);
540     assert(isGV_with_GP(sv));
541     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
542         return;
543
544     SvREFCNT_inc(sv);
545     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546         DEBUG_D((PerlIO_printf(Perl_debug_log,
547                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548         GvIOp(sv) = NULL;
549         SvREFCNT_dec(obj);
550     }
551     SvREFCNT_dec(sv); /* undo the inc above */
552 }
553
554 /* Void wrapper to pass to visit() */
555 static void
556 do_curse(pTHX_ SV * const sv) {
557     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
559         return;
560     (void)curse(sv, 0);
561 }
562
563 /*
564 =for apidoc sv_clean_objs
565
566 Attempt to destroy all objects not yet freed
567
568 =cut
569 */
570
571 void
572 Perl_sv_clean_objs(pTHX)
573 {
574     dVAR;
575     GV *olddef, *olderr;
576     PL_in_clean_objs = TRUE;
577     visit(do_clean_objs, SVf_ROK, SVf_ROK);
578     /* Some barnacles may yet remain, clinging to typeglobs.
579      * Run the non-IO destructors first: they may want to output
580      * error messages, close files etc */
581     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
582     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
583     /* And if there are some very tenacious barnacles clinging to arrays,
584        closures, or what have you.... */
585     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
586     olddef = PL_defoutgv;
587     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588     if (olddef && isGV_with_GP(olddef))
589         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590     olderr = PL_stderrgv;
591     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592     if (olderr && isGV_with_GP(olderr))
593         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594     SvREFCNT_dec(olddef);
595     PL_in_clean_objs = FALSE;
596 }
597
598 /* called by sv_clean_all() for each live SV */
599
600 static void
601 do_clean_all(pTHX_ SV *const sv)
602 {
603     dVAR;
604     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
605         /* don't clean pid table and strtab */
606         return;
607     }
608     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609     SvFLAGS(sv) |= SVf_BREAK;
610     SvREFCNT_dec(sv);
611 }
612
613 /*
614 =for apidoc sv_clean_all
615
616 Decrement the refcnt of each remaining SV, possibly triggering a
617 cleanup. This function may have to be called multiple times to free
618 SVs which are in complex self-referential hierarchies.
619
620 =cut
621 */
622
623 I32
624 Perl_sv_clean_all(pTHX)
625 {
626     dVAR;
627     I32 cleaned;
628     PL_in_clean_all = TRUE;
629     cleaned = visit(do_clean_all, 0,0);
630     return cleaned;
631 }
632
633 /*
634   ARENASETS: a meta-arena implementation which separates arena-info
635   into struct arena_set, which contains an array of struct
636   arena_descs, each holding info for a single arena.  By separating
637   the meta-info from the arena, we recover the 1st slot, formerly
638   borrowed for list management.  The arena_set is about the size of an
639   arena, avoiding the needless malloc overhead of a naive linked-list.
640
641   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642   memory in the last arena-set (1/2 on average).  In trade, we get
643   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
644   smaller types).  The recovery of the wasted space allows use of
645   small arenas for large, rare body types, by changing array* fields
646   in body_details_by_type[] below.
647 */
648 struct arena_desc {
649     char       *arena;          /* the raw storage, allocated aligned */
650     size_t      size;           /* its size ~4k typ */
651     svtype      utype;          /* bodytype stored in arena */
652 };
653
654 struct arena_set;
655
656 /* Get the maximum number of elements in set[] such that struct arena_set
657    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
658    therefore likely to be 1 aligned memory page.  */
659
660 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
662
663 struct arena_set {
664     struct arena_set* next;
665     unsigned int   set_size;    /* ie ARENAS_PER_SET */
666     unsigned int   curr;        /* index of next available arena-desc */
667     struct arena_desc set[ARENAS_PER_SET];
668 };
669
670 /*
671 =for apidoc sv_free_arenas
672
673 Deallocate the memory used by all arenas. Note that all the individual SV
674 heads and bodies within the arenas must already have been freed.
675
676 =cut
677 */
678 void
679 Perl_sv_free_arenas(pTHX)
680 {
681     dVAR;
682     SV* sva;
683     SV* svanext;
684     unsigned int i;
685
686     /* Free arenas here, but be careful about fake ones.  (We assume
687        contiguity of the fake ones with the corresponding real ones.) */
688
689     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
690         svanext = MUTABLE_SV(SvANY(sva));
691         while (svanext && SvFAKE(svanext))
692             svanext = MUTABLE_SV(SvANY(svanext));
693
694         if (!SvFAKE(sva))
695             Safefree(sva);
696     }
697
698     {
699         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701         while (aroot) {
702             struct arena_set *current = aroot;
703             i = aroot->curr;
704             while (i--) {
705                 assert(aroot->set[i].arena);
706                 Safefree(aroot->set[i].arena);
707             }
708             aroot = aroot->next;
709             Safefree(current);
710         }
711     }
712     PL_body_arenas = 0;
713
714     i = PERL_ARENA_ROOTS_SIZE;
715     while (i--)
716         PL_body_roots[i] = 0;
717
718     PL_sv_arenaroot = 0;
719     PL_sv_root = 0;
720 }
721
722 /*
723   Here are mid-level routines that manage the allocation of bodies out
724   of the various arenas.  There are 5 kinds of arenas:
725
726   1. SV-head arenas, which are discussed and handled above
727   2. regular body arenas
728   3. arenas for reduced-size bodies
729   4. Hash-Entry arenas
730
731   Arena types 2 & 3 are chained by body-type off an array of
732   arena-root pointers, which is indexed by svtype.  Some of the
733   larger/less used body types are malloced singly, since a large
734   unused block of them is wasteful.  Also, several svtypes dont have
735   bodies; the data fits into the sv-head itself.  The arena-root
736   pointer thus has a few unused root-pointers (which may be hijacked
737   later for arena types 4,5)
738
739   3 differs from 2 as an optimization; some body types have several
740   unused fields in the front of the structure (which are kept in-place
741   for consistency).  These bodies can be allocated in smaller chunks,
742   because the leading fields arent accessed.  Pointers to such bodies
743   are decremented to point at the unused 'ghost' memory, knowing that
744   the pointers are used with offsets to the real memory.
745
746
747 =head1 SV-Body Allocation
748
749 Allocation of SV-bodies is similar to SV-heads, differing as follows;
750 the allocation mechanism is used for many body types, so is somewhat
751 more complicated, it uses arena-sets, and has no need for still-live
752 SV detection.
753
754 At the outermost level, (new|del)_X*V macros return bodies of the
755 appropriate type.  These macros call either (new|del)_body_type or
756 (new|del)_body_allocated macro pairs, depending on specifics of the
757 type.  Most body types use the former pair, the latter pair is used to
758 allocate body types with "ghost fields".
759
760 "ghost fields" are fields that are unused in certain types, and
761 consequently don't need to actually exist.  They are declared because
762 they're part of a "base type", which allows use of functions as
763 methods.  The simplest examples are AVs and HVs, 2 aggregate types
764 which don't use the fields which support SCALAR semantics.
765
766 For these types, the arenas are carved up into appropriately sized
767 chunks, we thus avoid wasted memory for those unaccessed members.
768 When bodies are allocated, we adjust the pointer back in memory by the
769 size of the part not allocated, so it's as if we allocated the full
770 structure.  (But things will all go boom if you write to the part that
771 is "not there", because you'll be overwriting the last members of the
772 preceding structure in memory.)
773
774 We calculate the correction using the STRUCT_OFFSET macro on the first
775 member present. If the allocated structure is smaller (no initial NV
776 actually allocated) then the net effect is to subtract the size of the NV
777 from the pointer, to return a new pointer as if an initial NV were actually
778 allocated. (We were using structures named *_allocated for this, but
779 this turned out to be a subtle bug, because a structure without an NV
780 could have a lower alignment constraint, but the compiler is allowed to
781 optimised accesses based on the alignment constraint of the actual pointer
782 to the full structure, for example, using a single 64 bit load instruction
783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
784
785 This is the same trick as was used for NV and IV bodies. Ironically it
786 doesn't need to be used for NV bodies any more, because NV is now at
787 the start of the structure. IV bodies don't need it either, because
788 they are no longer allocated.
789
790 In turn, the new_body_* allocators call S_new_body(), which invokes
791 new_body_inline macro, which takes a lock, and takes a body off the
792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
793 necessary to refresh an empty list.  Then the lock is released, and
794 the body is returned.
795
796 Perl_more_bodies allocates a new arena, and carves it up into an array of N
797 bodies, which it strings into a linked list.  It looks up arena-size
798 and body-size from the body_details table described below, thus
799 supporting the multiple body-types.
800
801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802 the (new|del)_X*V macros are mapped directly to malloc/free.
803
804 For each sv-type, struct body_details bodies_by_type[] carries
805 parameters which control these aspects of SV handling:
806
807 Arena_size determines whether arenas are used for this body type, and if
808 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
809 zero, forcing individual mallocs and frees.
810
811 Body_size determines how big a body is, and therefore how many fit into
812 each arena.  Offset carries the body-pointer adjustment needed for
813 "ghost fields", and is used in *_allocated macros.
814
815 But its main purpose is to parameterize info needed in
816 Perl_sv_upgrade().  The info here dramatically simplifies the function
817 vs the implementation in 5.8.8, making it table-driven.  All fields
818 are used for this, except for arena_size.
819
820 For the sv-types that have no bodies, arenas are not used, so those
821 PL_body_roots[sv_type] are unused, and can be overloaded.  In
822 something of a special case, SVt_NULL is borrowed for HE arenas;
823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
824 bodies_by_type[SVt_NULL] slot is not used, as the table is not
825 available in hv.c.
826
827 */
828
829 struct body_details {
830     U8 body_size;       /* Size to allocate  */
831     U8 copy;            /* Size of structure to copy (may be shorter)  */
832     U8 offset;
833     unsigned int type : 4;          /* We have space for a sanity check.  */
834     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
835     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
836     unsigned int arena : 1;         /* Allocated from an arena */
837     size_t arena_size;              /* Size of arena to allocate */
838 };
839
840 #define HADNV FALSE
841 #define NONV TRUE
842
843
844 #ifdef PURIFY
845 /* With -DPURFIY we allocate everything directly, and don't use arenas.
846    This seems a rather elegant way to simplify some of the code below.  */
847 #define HASARENA FALSE
848 #else
849 #define HASARENA TRUE
850 #endif
851 #define NOARENA FALSE
852
853 /* Size the arenas to exactly fit a given number of bodies.  A count
854    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855    simplifying the default.  If count > 0, the arena is sized to fit
856    only that many bodies, allowing arenas to be used for large, rare
857    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
858    limited by PERL_ARENA_SIZE, so we can safely oversize the
859    declarations.
860  */
861 #define FIT_ARENA0(body_size)                           \
862     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863 #define FIT_ARENAn(count,body_size)                     \
864     ( count * body_size <= PERL_ARENA_SIZE)             \
865     ? count * body_size                                 \
866     : FIT_ARENA0 (body_size)
867 #define FIT_ARENA(count,body_size)                      \
868     count                                               \
869     ? FIT_ARENAn (count, body_size)                     \
870     : FIT_ARENA0 (body_size)
871
872 /* Calculate the length to copy. Specifically work out the length less any
873    final padding the compiler needed to add.  See the comment in sv_upgrade
874    for why copying the padding proved to be a bug.  */
875
876 #define copy_length(type, last_member) \
877         STRUCT_OFFSET(type, last_member) \
878         + sizeof (((type*)SvANY((const SV *)0))->last_member)
879
880 static const struct body_details bodies_by_type[] = {
881     /* HEs use this offset for their arena.  */
882     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
883
884     /* The bind placeholder pretends to be an RV for now.
885        Also it's marked as "can't upgrade" to stop anyone using it before it's
886        implemented.  */
887     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
888
889     /* IVs are in the head, so the allocation size is 0.  */
890     { 0,
891       sizeof(IV), /* This is used to copy out the IV body.  */
892       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
893       NOARENA /* IVS don't need an arena  */, 0
894     },
895
896     /* 8 bytes on most ILP32 with IEEE doubles */
897     { sizeof(NV), sizeof(NV),
898       STRUCT_OFFSET(XPVNV, xnv_u),
899       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
900
901     /* 8 bytes on most ILP32 with IEEE doubles */
902     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
903       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
904       + STRUCT_OFFSET(XPV, xpv_cur),
905       SVt_PV, FALSE, NONV, HASARENA,
906       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
907
908     /* 12 */
909     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
910       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
911       + STRUCT_OFFSET(XPV, xpv_cur),
912       SVt_PVIV, FALSE, NONV, HASARENA,
913       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
914
915     /* 20 */
916     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
917       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
918       + STRUCT_OFFSET(XPV, xpv_cur),
919       SVt_PVNV, FALSE, HADNV, HASARENA,
920       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
921
922     /* 28 */
923     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
924       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
925
926     /* something big */
927     { sizeof(regexp),
928       sizeof(regexp),
929       0,
930       SVt_REGEXP, FALSE, NONV, HASARENA,
931       FIT_ARENA(0, sizeof(regexp))
932     },
933
934     /* 48 */
935     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
936       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
937     
938     /* 64 */
939     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
940       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
941
942     { sizeof(XPVAV),
943       copy_length(XPVAV, xav_alloc),
944       0,
945       SVt_PVAV, TRUE, NONV, HASARENA,
946       FIT_ARENA(0, sizeof(XPVAV)) },
947
948     { sizeof(XPVHV),
949       copy_length(XPVHV, xhv_max),
950       0,
951       SVt_PVHV, TRUE, NONV, HASARENA,
952       FIT_ARENA(0, sizeof(XPVHV)) },
953
954     /* 56 */
955     { sizeof(XPVCV),
956       sizeof(XPVCV),
957       0,
958       SVt_PVCV, TRUE, NONV, HASARENA,
959       FIT_ARENA(0, sizeof(XPVCV)) },
960
961     { sizeof(XPVFM),
962       sizeof(XPVFM),
963       0,
964       SVt_PVFM, TRUE, NONV, NOARENA,
965       FIT_ARENA(20, sizeof(XPVFM)) },
966
967     /* XPVIO is 84 bytes, fits 48x */
968     { sizeof(XPVIO),
969       sizeof(XPVIO),
970       0,
971       SVt_PVIO, TRUE, NONV, HASARENA,
972       FIT_ARENA(24, sizeof(XPVIO)) },
973 };
974
975 #define new_body_allocated(sv_type)             \
976     (void *)((char *)S_new_body(aTHX_ sv_type)  \
977              - bodies_by_type[sv_type].offset)
978
979 /* return a thing to the free list */
980
981 #define del_body(thing, root)                           \
982     STMT_START {                                        \
983         void ** const thing_copy = (void **)thing;      \
984         *thing_copy = *root;                            \
985         *root = (void*)thing_copy;                      \
986     } STMT_END
987
988 #ifdef PURIFY
989
990 #define new_XNV()       safemalloc(sizeof(XPVNV))
991 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
992 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
993
994 #define del_XPVGV(p)    safefree(p)
995
996 #else /* !PURIFY */
997
998 #define new_XNV()       new_body_allocated(SVt_NV)
999 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1000 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1001
1002 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1003                                  &PL_body_roots[SVt_PVGV])
1004
1005 #endif /* PURIFY */
1006
1007 /* no arena for you! */
1008
1009 #define new_NOARENA(details) \
1010         safemalloc((details)->body_size + (details)->offset)
1011 #define new_NOARENAZ(details) \
1012         safecalloc((details)->body_size + (details)->offset, 1)
1013
1014 void *
1015 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1016                   const size_t arena_size)
1017 {
1018     dVAR;
1019     void ** const root = &PL_body_roots[sv_type];
1020     struct arena_desc *adesc;
1021     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1022     unsigned int curr;
1023     char *start;
1024     const char *end;
1025     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1026 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1027     static bool done_sanity_check;
1028
1029     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1030      * variables like done_sanity_check. */
1031     if (!done_sanity_check) {
1032         unsigned int i = SVt_LAST;
1033
1034         done_sanity_check = TRUE;
1035
1036         while (i--)
1037             assert (bodies_by_type[i].type == i);
1038     }
1039 #endif
1040
1041     assert(arena_size);
1042
1043     /* may need new arena-set to hold new arena */
1044     if (!aroot || aroot->curr >= aroot->set_size) {
1045         struct arena_set *newroot;
1046         Newxz(newroot, 1, struct arena_set);
1047         newroot->set_size = ARENAS_PER_SET;
1048         newroot->next = aroot;
1049         aroot = newroot;
1050         PL_body_arenas = (void *) newroot;
1051         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1052     }
1053
1054     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1055     curr = aroot->curr++;
1056     adesc = &(aroot->set[curr]);
1057     assert(!adesc->arena);
1058     
1059     Newx(adesc->arena, good_arena_size, char);
1060     adesc->size = good_arena_size;
1061     adesc->utype = sv_type;
1062     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1063                           curr, (void*)adesc->arena, (UV)good_arena_size));
1064
1065     start = (char *) adesc->arena;
1066
1067     /* Get the address of the byte after the end of the last body we can fit.
1068        Remember, this is integer division:  */
1069     end = start + good_arena_size / body_size * body_size;
1070
1071     /* computed count doesn't reflect the 1st slot reservation */
1072 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1073     DEBUG_m(PerlIO_printf(Perl_debug_log,
1074                           "arena %p end %p arena-size %d (from %d) type %d "
1075                           "size %d ct %d\n",
1076                           (void*)start, (void*)end, (int)good_arena_size,
1077                           (int)arena_size, sv_type, (int)body_size,
1078                           (int)good_arena_size / (int)body_size));
1079 #else
1080     DEBUG_m(PerlIO_printf(Perl_debug_log,
1081                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1082                           (void*)start, (void*)end,
1083                           (int)arena_size, sv_type, (int)body_size,
1084                           (int)good_arena_size / (int)body_size));
1085 #endif
1086     *root = (void *)start;
1087
1088     while (1) {
1089         /* Where the next body would start:  */
1090         char * const next = start + body_size;
1091
1092         if (next >= end) {
1093             /* This is the last body:  */
1094             assert(next == end);
1095
1096             *(void **)start = 0;
1097             return *root;
1098         }
1099
1100         *(void**) start = (void *)next;
1101         start = next;
1102     }
1103 }
1104
1105 /* grab a new thing from the free list, allocating more if necessary.
1106    The inline version is used for speed in hot routines, and the
1107    function using it serves the rest (unless PURIFY).
1108 */
1109 #define new_body_inline(xpv, sv_type) \
1110     STMT_START { \
1111         void ** const r3wt = &PL_body_roots[sv_type]; \
1112         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1113           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1114                                              bodies_by_type[sv_type].body_size,\
1115                                              bodies_by_type[sv_type].arena_size)); \
1116         *(r3wt) = *(void**)(xpv); \
1117     } STMT_END
1118
1119 #ifndef PURIFY
1120
1121 STATIC void *
1122 S_new_body(pTHX_ const svtype sv_type)
1123 {
1124     dVAR;
1125     void *xpv;
1126     new_body_inline(xpv, sv_type);
1127     return xpv;
1128 }
1129
1130 #endif
1131
1132 static const struct body_details fake_rv =
1133     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1134
1135 /*
1136 =for apidoc sv_upgrade
1137
1138 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1139 SV, then copies across as much information as possible from the old body.
1140 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1141
1142 =cut
1143 */
1144
1145 void
1146 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1147 {
1148     dVAR;
1149     void*       old_body;
1150     void*       new_body;
1151     const svtype old_type = SvTYPE(sv);
1152     const struct body_details *new_type_details;
1153     const struct body_details *old_type_details
1154         = bodies_by_type + old_type;
1155     SV *referant = NULL;
1156
1157     PERL_ARGS_ASSERT_SV_UPGRADE;
1158
1159     if (old_type == new_type)
1160         return;
1161
1162     /* This clause was purposefully added ahead of the early return above to
1163        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1164        inference by Nick I-S that it would fix other troublesome cases. See
1165        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1166
1167        Given that shared hash key scalars are no longer PVIV, but PV, there is
1168        no longer need to unshare so as to free up the IVX slot for its proper
1169        purpose. So it's safe to move the early return earlier.  */
1170
1171     if (new_type != SVt_PV && SvIsCOW(sv)) {
1172         sv_force_normal_flags(sv, 0);
1173     }
1174
1175     old_body = SvANY(sv);
1176
1177     /* Copying structures onto other structures that have been neatly zeroed
1178        has a subtle gotcha. Consider XPVMG
1179
1180        +------+------+------+------+------+-------+-------+
1181        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1182        +------+------+------+------+------+-------+-------+
1183        0      4      8     12     16     20      24      28
1184
1185        where NVs are aligned to 8 bytes, so that sizeof that structure is
1186        actually 32 bytes long, with 4 bytes of padding at the end:
1187
1188        +------+------+------+------+------+-------+-------+------+
1189        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1190        +------+------+------+------+------+-------+-------+------+
1191        0      4      8     12     16     20      24      28     32
1192
1193        so what happens if you allocate memory for this structure:
1194
1195        +------+------+------+------+------+-------+-------+------+------+...
1196        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1197        +------+------+------+------+------+-------+-------+------+------+...
1198        0      4      8     12     16     20      24      28     32     36
1199
1200        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1201        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1202        started out as zero once, but it's quite possible that it isn't. So now,
1203        rather than a nicely zeroed GP, you have it pointing somewhere random.
1204        Bugs ensue.
1205
1206        (In fact, GP ends up pointing at a previous GP structure, because the
1207        principle cause of the padding in XPVMG getting garbage is a copy of
1208        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1209        this happens to be moot because XPVGV has been re-ordered, with GP
1210        no longer after STASH)
1211
1212        So we are careful and work out the size of used parts of all the
1213        structures.  */
1214
1215     switch (old_type) {
1216     case SVt_NULL:
1217         break;
1218     case SVt_IV:
1219         if (SvROK(sv)) {
1220             referant = SvRV(sv);
1221             old_type_details = &fake_rv;
1222             if (new_type == SVt_NV)
1223                 new_type = SVt_PVNV;
1224         } else {
1225             if (new_type < SVt_PVIV) {
1226                 new_type = (new_type == SVt_NV)
1227                     ? SVt_PVNV : SVt_PVIV;
1228             }
1229         }
1230         break;
1231     case SVt_NV:
1232         if (new_type < SVt_PVNV) {
1233             new_type = SVt_PVNV;
1234         }
1235         break;
1236     case SVt_PV:
1237         assert(new_type > SVt_PV);
1238         assert(SVt_IV < SVt_PV);
1239         assert(SVt_NV < SVt_PV);
1240         break;
1241     case SVt_PVIV:
1242         break;
1243     case SVt_PVNV:
1244         break;
1245     case SVt_PVMG:
1246         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1247            there's no way that it can be safely upgraded, because perl.c
1248            expects to Safefree(SvANY(PL_mess_sv))  */
1249         assert(sv != PL_mess_sv);
1250         /* This flag bit is used to mean other things in other scalar types.
1251            Given that it only has meaning inside the pad, it shouldn't be set
1252            on anything that can get upgraded.  */
1253         assert(!SvPAD_TYPED(sv));
1254         break;
1255     default:
1256         if (old_type_details->cant_upgrade)
1257             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1258                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1259     }
1260
1261     if (old_type > new_type)
1262         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1263                 (int)old_type, (int)new_type);
1264
1265     new_type_details = bodies_by_type + new_type;
1266
1267     SvFLAGS(sv) &= ~SVTYPEMASK;
1268     SvFLAGS(sv) |= new_type;
1269
1270     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1271        the return statements above will have triggered.  */
1272     assert (new_type != SVt_NULL);
1273     switch (new_type) {
1274     case SVt_IV:
1275         assert(old_type == SVt_NULL);
1276         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1277         SvIV_set(sv, 0);
1278         return;
1279     case SVt_NV:
1280         assert(old_type == SVt_NULL);
1281         SvANY(sv) = new_XNV();
1282         SvNV_set(sv, 0);
1283         return;
1284     case SVt_PVHV:
1285     case SVt_PVAV:
1286         assert(new_type_details->body_size);
1287
1288 #ifndef PURIFY  
1289         assert(new_type_details->arena);
1290         assert(new_type_details->arena_size);
1291         /* This points to the start of the allocated area.  */
1292         new_body_inline(new_body, new_type);
1293         Zero(new_body, new_type_details->body_size, char);
1294         new_body = ((char *)new_body) - new_type_details->offset;
1295 #else
1296         /* We always allocated the full length item with PURIFY. To do this
1297            we fake things so that arena is false for all 16 types..  */
1298         new_body = new_NOARENAZ(new_type_details);
1299 #endif
1300         SvANY(sv) = new_body;
1301         if (new_type == SVt_PVAV) {
1302             AvMAX(sv)   = -1;
1303             AvFILLp(sv) = -1;
1304             AvREAL_only(sv);
1305             if (old_type_details->body_size) {
1306                 AvALLOC(sv) = 0;
1307             } else {
1308                 /* It will have been zeroed when the new body was allocated.
1309                    Lets not write to it, in case it confuses a write-back
1310                    cache.  */
1311             }
1312         } else {
1313             assert(!SvOK(sv));
1314             SvOK_off(sv);
1315 #ifndef NODEFAULT_SHAREKEYS
1316             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1317 #endif
1318             HvMAX(sv) = 7; /* (start with 8 buckets) */
1319         }
1320
1321         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1322            The target created by newSVrv also is, and it can have magic.
1323            However, it never has SvPVX set.
1324         */
1325         if (old_type == SVt_IV) {
1326             assert(!SvROK(sv));
1327         } else if (old_type >= SVt_PV) {
1328             assert(SvPVX_const(sv) == 0);
1329         }
1330
1331         if (old_type >= SVt_PVMG) {
1332             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1333             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1334         } else {
1335             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1336         }
1337         break;
1338
1339
1340     case SVt_REGEXP:
1341         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1342            sv_force_normal_flags(sv) is called.  */
1343         SvFAKE_on(sv);
1344     case SVt_PVIV:
1345         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1346            no route from NV to PVIV, NOK can never be true  */
1347         assert(!SvNOKp(sv));
1348         assert(!SvNOK(sv));
1349     case SVt_PVIO:
1350     case SVt_PVFM:
1351     case SVt_PVGV:
1352     case SVt_PVCV:
1353     case SVt_PVLV:
1354     case SVt_PVMG:
1355     case SVt_PVNV:
1356     case SVt_PV:
1357
1358         assert(new_type_details->body_size);
1359         /* We always allocated the full length item with PURIFY. To do this
1360            we fake things so that arena is false for all 16 types..  */
1361         if(new_type_details->arena) {
1362             /* This points to the start of the allocated area.  */
1363             new_body_inline(new_body, new_type);
1364             Zero(new_body, new_type_details->body_size, char);
1365             new_body = ((char *)new_body) - new_type_details->offset;
1366         } else {
1367             new_body = new_NOARENAZ(new_type_details);
1368         }
1369         SvANY(sv) = new_body;
1370
1371         if (old_type_details->copy) {
1372             /* There is now the potential for an upgrade from something without
1373                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1374             int offset = old_type_details->offset;
1375             int length = old_type_details->copy;
1376
1377             if (new_type_details->offset > old_type_details->offset) {
1378                 const int difference
1379                     = new_type_details->offset - old_type_details->offset;
1380                 offset += difference;
1381                 length -= difference;
1382             }
1383             assert (length >= 0);
1384                 
1385             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1386                  char);
1387         }
1388
1389 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1390         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1391          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1392          * NV slot, but the new one does, then we need to initialise the
1393          * freshly created NV slot with whatever the correct bit pattern is
1394          * for 0.0  */
1395         if (old_type_details->zero_nv && !new_type_details->zero_nv
1396             && !isGV_with_GP(sv))
1397             SvNV_set(sv, 0);
1398 #endif
1399
1400         if (new_type == SVt_PVIO) {
1401             IO * const io = MUTABLE_IO(sv);
1402             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1403
1404             SvOBJECT_on(io);
1405             /* Clear the stashcache because a new IO could overrule a package
1406                name */
1407             hv_clear(PL_stashcache);
1408
1409             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1410             IoPAGE_LEN(sv) = 60;
1411         }
1412         if (old_type < SVt_PV) {
1413             /* referant will be NULL unless the old type was SVt_IV emulating
1414                SVt_RV */
1415             sv->sv_u.svu_rv = referant;
1416         }
1417         break;
1418     default:
1419         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1420                    (unsigned long)new_type);
1421     }
1422
1423     if (old_type > SVt_IV) {
1424 #ifdef PURIFY
1425         safefree(old_body);
1426 #else
1427         /* Note that there is an assumption that all bodies of types that
1428            can be upgraded came from arenas. Only the more complex non-
1429            upgradable types are allowed to be directly malloc()ed.  */
1430         assert(old_type_details->arena);
1431         del_body((void*)((char*)old_body + old_type_details->offset),
1432                  &PL_body_roots[old_type]);
1433 #endif
1434     }
1435 }
1436
1437 /*
1438 =for apidoc sv_backoff
1439
1440 Remove any string offset. You should normally use the C<SvOOK_off> macro
1441 wrapper instead.
1442
1443 =cut
1444 */
1445
1446 int
1447 Perl_sv_backoff(pTHX_ register SV *const sv)
1448 {
1449     STRLEN delta;
1450     const char * const s = SvPVX_const(sv);
1451
1452     PERL_ARGS_ASSERT_SV_BACKOFF;
1453     PERL_UNUSED_CONTEXT;
1454
1455     assert(SvOOK(sv));
1456     assert(SvTYPE(sv) != SVt_PVHV);
1457     assert(SvTYPE(sv) != SVt_PVAV);
1458
1459     SvOOK_offset(sv, delta);
1460     
1461     SvLEN_set(sv, SvLEN(sv) + delta);
1462     SvPV_set(sv, SvPVX(sv) - delta);
1463     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1464     SvFLAGS(sv) &= ~SVf_OOK;
1465     return 0;
1466 }
1467
1468 /*
1469 =for apidoc sv_grow
1470
1471 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1472 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1473 Use the C<SvGROW> wrapper instead.
1474
1475 =cut
1476 */
1477
1478 char *
1479 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1480 {
1481     register char *s;
1482
1483     PERL_ARGS_ASSERT_SV_GROW;
1484
1485     if (PL_madskills && newlen >= 0x100000) {
1486         PerlIO_printf(Perl_debug_log,
1487                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1488     }
1489 #ifdef HAS_64K_LIMIT
1490     if (newlen >= 0x10000) {
1491         PerlIO_printf(Perl_debug_log,
1492                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1493         my_exit(1);
1494     }
1495 #endif /* HAS_64K_LIMIT */
1496     if (SvROK(sv))
1497         sv_unref(sv);
1498     if (SvTYPE(sv) < SVt_PV) {
1499         sv_upgrade(sv, SVt_PV);
1500         s = SvPVX_mutable(sv);
1501     }
1502     else if (SvOOK(sv)) {       /* pv is offset? */
1503         sv_backoff(sv);
1504         s = SvPVX_mutable(sv);
1505         if (newlen > SvLEN(sv))
1506             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1507 #ifdef HAS_64K_LIMIT
1508         if (newlen >= 0x10000)
1509             newlen = 0xFFFF;
1510 #endif
1511     }
1512     else
1513         s = SvPVX_mutable(sv);
1514
1515     if (newlen > SvLEN(sv)) {           /* need more room? */
1516         STRLEN minlen = SvCUR(sv);
1517         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1518         if (newlen < minlen)
1519             newlen = minlen;
1520 #ifndef Perl_safesysmalloc_size
1521         newlen = PERL_STRLEN_ROUNDUP(newlen);
1522 #endif
1523         if (SvLEN(sv) && s) {
1524             s = (char*)saferealloc(s, newlen);
1525         }
1526         else {
1527             s = (char*)safemalloc(newlen);
1528             if (SvPVX_const(sv) && SvCUR(sv)) {
1529                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1530             }
1531         }
1532         SvPV_set(sv, s);
1533 #ifdef Perl_safesysmalloc_size
1534         /* Do this here, do it once, do it right, and then we will never get
1535            called back into sv_grow() unless there really is some growing
1536            needed.  */
1537         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1538 #else
1539         SvLEN_set(sv, newlen);
1540 #endif
1541     }
1542     return s;
1543 }
1544
1545 /*
1546 =for apidoc sv_setiv
1547
1548 Copies an integer into the given SV, upgrading first if necessary.
1549 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1550
1551 =cut
1552 */
1553
1554 void
1555 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1556 {
1557     dVAR;
1558
1559     PERL_ARGS_ASSERT_SV_SETIV;
1560
1561     SV_CHECK_THINKFIRST_COW_DROP(sv);
1562     switch (SvTYPE(sv)) {
1563     case SVt_NULL:
1564     case SVt_NV:
1565         sv_upgrade(sv, SVt_IV);
1566         break;
1567     case SVt_PV:
1568         sv_upgrade(sv, SVt_PVIV);
1569         break;
1570
1571     case SVt_PVGV:
1572         if (!isGV_with_GP(sv))
1573             break;
1574     case SVt_PVAV:
1575     case SVt_PVHV:
1576     case SVt_PVCV:
1577     case SVt_PVFM:
1578     case SVt_PVIO:
1579         /* diag_listed_as: Can't coerce %s to %s in %s */
1580         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1581                    OP_DESC(PL_op));
1582     default: NOOP;
1583     }
1584     (void)SvIOK_only(sv);                       /* validate number */
1585     SvIV_set(sv, i);
1586     SvTAINT(sv);
1587 }
1588
1589 /*
1590 =for apidoc sv_setiv_mg
1591
1592 Like C<sv_setiv>, but also handles 'set' magic.
1593
1594 =cut
1595 */
1596
1597 void
1598 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1599 {
1600     PERL_ARGS_ASSERT_SV_SETIV_MG;
1601
1602     sv_setiv(sv,i);
1603     SvSETMAGIC(sv);
1604 }
1605
1606 /*
1607 =for apidoc sv_setuv
1608
1609 Copies an unsigned integer into the given SV, upgrading first if necessary.
1610 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1611
1612 =cut
1613 */
1614
1615 void
1616 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1617 {
1618     PERL_ARGS_ASSERT_SV_SETUV;
1619
1620     /* With these two if statements:
1621        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1622
1623        without
1624        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1625
1626        If you wish to remove them, please benchmark to see what the effect is
1627     */
1628     if (u <= (UV)IV_MAX) {
1629        sv_setiv(sv, (IV)u);
1630        return;
1631     }
1632     sv_setiv(sv, 0);
1633     SvIsUV_on(sv);
1634     SvUV_set(sv, u);
1635 }
1636
1637 /*
1638 =for apidoc sv_setuv_mg
1639
1640 Like C<sv_setuv>, but also handles 'set' magic.
1641
1642 =cut
1643 */
1644
1645 void
1646 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1647 {
1648     PERL_ARGS_ASSERT_SV_SETUV_MG;
1649
1650     sv_setuv(sv,u);
1651     SvSETMAGIC(sv);
1652 }
1653
1654 /*
1655 =for apidoc sv_setnv
1656
1657 Copies a double into the given SV, upgrading first if necessary.
1658 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1659
1660 =cut
1661 */
1662
1663 void
1664 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1665 {
1666     dVAR;
1667
1668     PERL_ARGS_ASSERT_SV_SETNV;
1669
1670     SV_CHECK_THINKFIRST_COW_DROP(sv);
1671     switch (SvTYPE(sv)) {
1672     case SVt_NULL:
1673     case SVt_IV:
1674         sv_upgrade(sv, SVt_NV);
1675         break;
1676     case SVt_PV:
1677     case SVt_PVIV:
1678         sv_upgrade(sv, SVt_PVNV);
1679         break;
1680
1681     case SVt_PVGV:
1682         if (!isGV_with_GP(sv))
1683             break;
1684     case SVt_PVAV:
1685     case SVt_PVHV:
1686     case SVt_PVCV:
1687     case SVt_PVFM:
1688     case SVt_PVIO:
1689         /* diag_listed_as: Can't coerce %s to %s in %s */
1690         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1691                    OP_DESC(PL_op));
1692     default: NOOP;
1693     }
1694     SvNV_set(sv, num);
1695     (void)SvNOK_only(sv);                       /* validate number */
1696     SvTAINT(sv);
1697 }
1698
1699 /*
1700 =for apidoc sv_setnv_mg
1701
1702 Like C<sv_setnv>, but also handles 'set' magic.
1703
1704 =cut
1705 */
1706
1707 void
1708 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1709 {
1710     PERL_ARGS_ASSERT_SV_SETNV_MG;
1711
1712     sv_setnv(sv,num);
1713     SvSETMAGIC(sv);
1714 }
1715
1716 /* Print an "isn't numeric" warning, using a cleaned-up,
1717  * printable version of the offending string
1718  */
1719
1720 STATIC void
1721 S_not_a_number(pTHX_ SV *const sv)
1722 {
1723      dVAR;
1724      SV *dsv;
1725      char tmpbuf[64];
1726      const char *pv;
1727
1728      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1729
1730      if (DO_UTF8(sv)) {
1731           dsv = newSVpvs_flags("", SVs_TEMP);
1732           pv = sv_uni_display(dsv, sv, 10, 0);
1733      } else {
1734           char *d = tmpbuf;
1735           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1736           /* each *s can expand to 4 chars + "...\0",
1737              i.e. need room for 8 chars */
1738         
1739           const char *s = SvPVX_const(sv);
1740           const char * const end = s + SvCUR(sv);
1741           for ( ; s < end && d < limit; s++ ) {
1742                int ch = *s & 0xFF;
1743                if (ch & 128 && !isPRINT_LC(ch)) {
1744                     *d++ = 'M';
1745                     *d++ = '-';
1746                     ch &= 127;
1747                }
1748                if (ch == '\n') {
1749                     *d++ = '\\';
1750                     *d++ = 'n';
1751                }
1752                else if (ch == '\r') {
1753                     *d++ = '\\';
1754                     *d++ = 'r';
1755                }
1756                else if (ch == '\f') {
1757                     *d++ = '\\';
1758                     *d++ = 'f';
1759                }
1760                else if (ch == '\\') {
1761                     *d++ = '\\';
1762                     *d++ = '\\';
1763                }
1764                else if (ch == '\0') {
1765                     *d++ = '\\';
1766                     *d++ = '0';
1767                }
1768                else if (isPRINT_LC(ch))
1769                     *d++ = ch;
1770                else {
1771                     *d++ = '^';
1772                     *d++ = toCTRL(ch);
1773                }
1774           }
1775           if (s < end) {
1776                *d++ = '.';
1777                *d++ = '.';
1778                *d++ = '.';
1779           }
1780           *d = '\0';
1781           pv = tmpbuf;
1782     }
1783
1784     if (PL_op)
1785         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1786                     "Argument \"%s\" isn't numeric in %s", pv,
1787                     OP_DESC(PL_op));
1788     else
1789         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1790                     "Argument \"%s\" isn't numeric", pv);
1791 }
1792
1793 /*
1794 =for apidoc looks_like_number
1795
1796 Test if the content of an SV looks like a number (or is a number).
1797 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1798 non-numeric warning), even if your atof() doesn't grok them.
1799
1800 =cut
1801 */
1802
1803 I32
1804 Perl_looks_like_number(pTHX_ SV *const sv)
1805 {
1806     register const char *sbegin;
1807     STRLEN len;
1808
1809     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1810
1811     if (SvPOK(sv)) {
1812         sbegin = SvPVX_const(sv);
1813         len = SvCUR(sv);
1814     }
1815     else if (SvPOKp(sv))
1816         sbegin = SvPV_const(sv, len);
1817     else
1818         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1819     return grok_number(sbegin, len, NULL);
1820 }
1821
1822 STATIC bool
1823 S_glob_2number(pTHX_ GV * const gv)
1824 {
1825     const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1826     SV *const buffer = sv_newmortal();
1827
1828     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1829
1830     /* FAKE globs can get coerced, so need to turn this off temporarily if it
1831        is on.  */
1832     SvFAKE_off(gv);
1833     gv_efullname3(buffer, gv, "*");
1834     SvFLAGS(gv) |= wasfake;
1835
1836     /* We know that all GVs stringify to something that is not-a-number,
1837         so no need to test that.  */
1838     if (ckWARN(WARN_NUMERIC))
1839         not_a_number(buffer);
1840     /* We just want something true to return, so that S_sv_2iuv_common
1841         can tail call us and return true.  */
1842     return TRUE;
1843 }
1844
1845 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1846    until proven guilty, assume that things are not that bad... */
1847
1848 /*
1849    NV_PRESERVES_UV:
1850
1851    As 64 bit platforms often have an NV that doesn't preserve all bits of
1852    an IV (an assumption perl has been based on to date) it becomes necessary
1853    to remove the assumption that the NV always carries enough precision to
1854    recreate the IV whenever needed, and that the NV is the canonical form.
1855    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1856    precision as a side effect of conversion (which would lead to insanity
1857    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1858    1) to distinguish between IV/UV/NV slots that have cached a valid
1859       conversion where precision was lost and IV/UV/NV slots that have a
1860       valid conversion which has lost no precision
1861    2) to ensure that if a numeric conversion to one form is requested that
1862       would lose precision, the precise conversion (or differently
1863       imprecise conversion) is also performed and cached, to prevent
1864       requests for different numeric formats on the same SV causing
1865       lossy conversion chains. (lossless conversion chains are perfectly
1866       acceptable (still))
1867
1868
1869    flags are used:
1870    SvIOKp is true if the IV slot contains a valid value
1871    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1872    SvNOKp is true if the NV slot contains a valid value
1873    SvNOK  is true only if the NV value is accurate
1874
1875    so
1876    while converting from PV to NV, check to see if converting that NV to an
1877    IV(or UV) would lose accuracy over a direct conversion from PV to
1878    IV(or UV). If it would, cache both conversions, return NV, but mark
1879    SV as IOK NOKp (ie not NOK).
1880
1881    While converting from PV to IV, check to see if converting that IV to an
1882    NV would lose accuracy over a direct conversion from PV to NV. If it
1883    would, cache both conversions, flag similarly.
1884
1885    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1886    correctly because if IV & NV were set NV *always* overruled.
1887    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1888    changes - now IV and NV together means that the two are interchangeable:
1889    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1890
1891    The benefit of this is that operations such as pp_add know that if
1892    SvIOK is true for both left and right operands, then integer addition
1893    can be used instead of floating point (for cases where the result won't
1894    overflow). Before, floating point was always used, which could lead to
1895    loss of precision compared with integer addition.
1896
1897    * making IV and NV equal status should make maths accurate on 64 bit
1898      platforms
1899    * may speed up maths somewhat if pp_add and friends start to use
1900      integers when possible instead of fp. (Hopefully the overhead in
1901      looking for SvIOK and checking for overflow will not outweigh the
1902      fp to integer speedup)
1903    * will slow down integer operations (callers of SvIV) on "inaccurate"
1904      values, as the change from SvIOK to SvIOKp will cause a call into
1905      sv_2iv each time rather than a macro access direct to the IV slot
1906    * should speed up number->string conversion on integers as IV is
1907      favoured when IV and NV are equally accurate
1908
1909    ####################################################################
1910    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1911    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1912    On the other hand, SvUOK is true iff UV.
1913    ####################################################################
1914
1915    Your mileage will vary depending your CPU's relative fp to integer
1916    performance ratio.
1917 */
1918
1919 #ifndef NV_PRESERVES_UV
1920 #  define IS_NUMBER_UNDERFLOW_IV 1
1921 #  define IS_NUMBER_UNDERFLOW_UV 2
1922 #  define IS_NUMBER_IV_AND_UV    2
1923 #  define IS_NUMBER_OVERFLOW_IV  4
1924 #  define IS_NUMBER_OVERFLOW_UV  5
1925
1926 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1927
1928 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1929 STATIC int
1930 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1931 #  ifdef DEBUGGING
1932                        , I32 numtype
1933 #  endif
1934                        )
1935 {
1936     dVAR;
1937
1938     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1939
1940     DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1941     if (SvNVX(sv) < (NV)IV_MIN) {
1942         (void)SvIOKp_on(sv);
1943         (void)SvNOK_on(sv);
1944         SvIV_set(sv, IV_MIN);
1945         return IS_NUMBER_UNDERFLOW_IV;
1946     }
1947     if (SvNVX(sv) > (NV)UV_MAX) {
1948         (void)SvIOKp_on(sv);
1949         (void)SvNOK_on(sv);
1950         SvIsUV_on(sv);
1951         SvUV_set(sv, UV_MAX);
1952         return IS_NUMBER_OVERFLOW_UV;
1953     }
1954     (void)SvIOKp_on(sv);
1955     (void)SvNOK_on(sv);
1956     /* Can't use strtol etc to convert this string.  (See truth table in
1957        sv_2iv  */
1958     if (SvNVX(sv) <= (UV)IV_MAX) {
1959         SvIV_set(sv, I_V(SvNVX(sv)));
1960         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1961             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1962         } else {
1963             /* Integer is imprecise. NOK, IOKp */
1964         }
1965         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1966     }
1967     SvIsUV_on(sv);
1968     SvUV_set(sv, U_V(SvNVX(sv)));
1969     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1970         if (SvUVX(sv) == UV_MAX) {
1971             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1972                possibly be preserved by NV. Hence, it must be overflow.
1973                NOK, IOKp */
1974             return IS_NUMBER_OVERFLOW_UV;
1975         }
1976         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1977     } else {
1978         /* Integer is imprecise. NOK, IOKp */
1979     }
1980     return IS_NUMBER_OVERFLOW_IV;
1981 }
1982 #endif /* !NV_PRESERVES_UV*/
1983
1984 STATIC bool
1985 S_sv_2iuv_common(pTHX_ SV *const sv)
1986 {
1987     dVAR;
1988
1989     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1990
1991     if (SvNOKp(sv)) {
1992         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1993          * without also getting a cached IV/UV from it at the same time
1994          * (ie PV->NV conversion should detect loss of accuracy and cache
1995          * IV or UV at same time to avoid this. */
1996         /* IV-over-UV optimisation - choose to cache IV if possible */
1997
1998         if (SvTYPE(sv) == SVt_NV)
1999             sv_upgrade(sv, SVt_PVNV);
2000
2001         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2002         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2003            certainly cast into the IV range at IV_MAX, whereas the correct
2004            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2005            cases go to UV */
2006 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2007         if (Perl_isnan(SvNVX(sv))) {
2008             SvUV_set(sv, 0);
2009             SvIsUV_on(sv);
2010             return FALSE;
2011         }
2012 #endif
2013         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2014             SvIV_set(sv, I_V(SvNVX(sv)));
2015             if (SvNVX(sv) == (NV) SvIVX(sv)
2016 #ifndef NV_PRESERVES_UV
2017                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2018                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2019                 /* Don't flag it as "accurately an integer" if the number
2020                    came from a (by definition imprecise) NV operation, and
2021                    we're outside the range of NV integer precision */
2022 #endif
2023                 ) {
2024                 if (SvNOK(sv))
2025                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2026                 else {
2027                     /* scalar has trailing garbage, eg "42a" */
2028                 }
2029                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2030                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2031                                       PTR2UV(sv),
2032                                       SvNVX(sv),
2033                                       SvIVX(sv)));
2034
2035             } else {
2036                 /* IV not precise.  No need to convert from PV, as NV
2037                    conversion would already have cached IV if it detected
2038                    that PV->IV would be better than PV->NV->IV
2039                    flags already correct - don't set public IOK.  */
2040                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2041                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2042                                       PTR2UV(sv),
2043                                       SvNVX(sv),
2044                                       SvIVX(sv)));
2045             }
2046             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2047                but the cast (NV)IV_MIN rounds to a the value less (more
2048                negative) than IV_MIN which happens to be equal to SvNVX ??
2049                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2050                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2051                (NV)UVX == NVX are both true, but the values differ. :-(
2052                Hopefully for 2s complement IV_MIN is something like
2053                0x8000000000000000 which will be exact. NWC */
2054         }
2055         else {
2056             SvUV_set(sv, U_V(SvNVX(sv)));
2057             if (
2058                 (SvNVX(sv) == (NV) SvUVX(sv))
2059 #ifndef  NV_PRESERVES_UV
2060                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2061                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2062                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2063                 /* Don't flag it as "accurately an integer" if the number
2064                    came from a (by definition imprecise) NV operation, and
2065                    we're outside the range of NV integer precision */
2066 #endif
2067                 && SvNOK(sv)
2068                 )
2069                 SvIOK_on(sv);
2070             SvIsUV_on(sv);
2071             DEBUG_c(PerlIO_printf(Perl_debug_log,
2072                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2073                                   PTR2UV(sv),
2074                                   SvUVX(sv),
2075                                   SvUVX(sv)));
2076         }
2077     }
2078     else if (SvPOKp(sv) && SvLEN(sv)) {
2079         UV value;
2080         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2081         /* We want to avoid a possible problem when we cache an IV/ a UV which
2082            may be later translated to an NV, and the resulting NV is not
2083            the same as the direct translation of the initial string
2084            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2085            be careful to ensure that the value with the .456 is around if the
2086            NV value is requested in the future).
2087         
2088            This means that if we cache such an IV/a UV, we need to cache the
2089            NV as well.  Moreover, we trade speed for space, and do not
2090            cache the NV if we are sure it's not needed.
2091          */
2092
2093         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2094         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2095              == IS_NUMBER_IN_UV) {
2096             /* It's definitely an integer, only upgrade to PVIV */
2097             if (SvTYPE(sv) < SVt_PVIV)
2098                 sv_upgrade(sv, SVt_PVIV);
2099             (void)SvIOK_on(sv);
2100         } else if (SvTYPE(sv) < SVt_PVNV)
2101             sv_upgrade(sv, SVt_PVNV);
2102
2103         /* If NVs preserve UVs then we only use the UV value if we know that
2104            we aren't going to call atof() below. If NVs don't preserve UVs
2105            then the value returned may have more precision than atof() will
2106            return, even though value isn't perfectly accurate.  */
2107         if ((numtype & (IS_NUMBER_IN_UV
2108 #ifdef NV_PRESERVES_UV
2109                         | IS_NUMBER_NOT_INT
2110 #endif
2111             )) == IS_NUMBER_IN_UV) {
2112             /* This won't turn off the public IOK flag if it was set above  */
2113             (void)SvIOKp_on(sv);
2114
2115             if (!(numtype & IS_NUMBER_NEG)) {
2116                 /* positive */;
2117                 if (value <= (UV)IV_MAX) {
2118                     SvIV_set(sv, (IV)value);
2119                 } else {
2120                     /* it didn't overflow, and it was positive. */
2121                     SvUV_set(sv, value);
2122                     SvIsUV_on(sv);
2123                 }
2124             } else {
2125                 /* 2s complement assumption  */
2126                 if (value <= (UV)IV_MIN) {
2127                     SvIV_set(sv, -(IV)value);
2128                 } else {
2129                     /* Too negative for an IV.  This is a double upgrade, but
2130                        I'm assuming it will be rare.  */
2131                     if (SvTYPE(sv) < SVt_PVNV)
2132                         sv_upgrade(sv, SVt_PVNV);
2133                     SvNOK_on(sv);
2134                     SvIOK_off(sv);
2135                     SvIOKp_on(sv);
2136                     SvNV_set(sv, -(NV)value);
2137                     SvIV_set(sv, IV_MIN);
2138                 }
2139             }
2140         }
2141         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2142            will be in the previous block to set the IV slot, and the next
2143            block to set the NV slot.  So no else here.  */
2144         
2145         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2146             != IS_NUMBER_IN_UV) {
2147             /* It wasn't an (integer that doesn't overflow the UV). */
2148             SvNV_set(sv, Atof(SvPVX_const(sv)));
2149
2150             if (! numtype && ckWARN(WARN_NUMERIC))
2151                 not_a_number(sv);
2152
2153 #if defined(USE_LONG_DOUBLE)
2154             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2155                                   PTR2UV(sv), SvNVX(sv)));
2156 #else
2157             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2158                                   PTR2UV(sv), SvNVX(sv)));
2159 #endif
2160
2161 #ifdef NV_PRESERVES_UV
2162             (void)SvIOKp_on(sv);
2163             (void)SvNOK_on(sv);
2164             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2165                 SvIV_set(sv, I_V(SvNVX(sv)));
2166                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2167                     SvIOK_on(sv);
2168                 } else {
2169                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2170                 }
2171                 /* UV will not work better than IV */
2172             } else {
2173                 if (SvNVX(sv) > (NV)UV_MAX) {
2174                     SvIsUV_on(sv);
2175                     /* Integer is inaccurate. NOK, IOKp, is UV */
2176                     SvUV_set(sv, UV_MAX);
2177                 } else {
2178                     SvUV_set(sv, U_V(SvNVX(sv)));
2179                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2180                        NV preservse UV so can do correct comparison.  */
2181                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2182                         SvIOK_on(sv);
2183                     } else {
2184                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2185                     }
2186                 }
2187                 SvIsUV_on(sv);
2188             }
2189 #else /* NV_PRESERVES_UV */
2190             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2191                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2192                 /* The IV/UV slot will have been set from value returned by
2193                    grok_number above.  The NV slot has just been set using
2194                    Atof.  */
2195                 SvNOK_on(sv);
2196                 assert (SvIOKp(sv));
2197             } else {
2198                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2199                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2200                     /* Small enough to preserve all bits. */
2201                     (void)SvIOKp_on(sv);
2202                     SvNOK_on(sv);
2203                     SvIV_set(sv, I_V(SvNVX(sv)));
2204                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2205                         SvIOK_on(sv);
2206                     /* Assumption: first non-preserved integer is < IV_MAX,
2207                        this NV is in the preserved range, therefore: */
2208                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2209                           < (UV)IV_MAX)) {
2210                         Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2211                     }
2212                 } else {
2213                     /* IN_UV NOT_INT
2214                          0      0       already failed to read UV.
2215                          0      1       already failed to read UV.
2216                          1      0       you won't get here in this case. IV/UV
2217                                         slot set, public IOK, Atof() unneeded.
2218                          1      1       already read UV.
2219                        so there's no point in sv_2iuv_non_preserve() attempting
2220                        to use atol, strtol, strtoul etc.  */
2221 #  ifdef DEBUGGING
2222                     sv_2iuv_non_preserve (sv, numtype);
2223 #  else
2224                     sv_2iuv_non_preserve (sv);
2225 #  endif
2226                 }
2227             }
2228 #endif /* NV_PRESERVES_UV */
2229         /* It might be more code efficient to go through the entire logic above
2230            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2231            gets complex and potentially buggy, so more programmer efficient
2232            to do it this way, by turning off the public flags:  */
2233         if (!numtype)
2234             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2235         }
2236     }
2237     else  {
2238         if (isGV_with_GP(sv))
2239             return glob_2number(MUTABLE_GV(sv));
2240
2241         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2242             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2243                 report_uninit(sv);
2244         }
2245         if (SvTYPE(sv) < SVt_IV)
2246             /* Typically the caller expects that sv_any is not NULL now.  */
2247             sv_upgrade(sv, SVt_IV);
2248         /* Return 0 from the caller.  */
2249         return TRUE;
2250     }
2251     return FALSE;
2252 }
2253
2254 /*
2255 =for apidoc sv_2iv_flags
2256
2257 Return the integer value of an SV, doing any necessary string
2258 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2259 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2260
2261 =cut
2262 */
2263
2264 IV
2265 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2266 {
2267     dVAR;
2268     if (!sv)
2269         return 0;
2270     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2271         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2272            cache IVs just in case. In practice it seems that they never
2273            actually anywhere accessible by user Perl code, let alone get used
2274            in anything other than a string context.  */
2275         if (flags & SV_GMAGIC)
2276             mg_get(sv);
2277         if (SvIOKp(sv))
2278             return SvIVX(sv);
2279         if (SvNOKp(sv)) {
2280             return I_V(SvNVX(sv));
2281         }
2282         if (SvPOKp(sv) && SvLEN(sv)) {
2283             UV value;
2284             const int numtype
2285                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2286
2287             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2288                 == IS_NUMBER_IN_UV) {
2289                 /* It's definitely an integer */
2290                 if (numtype & IS_NUMBER_NEG) {
2291                     if (value < (UV)IV_MIN)
2292                         return -(IV)value;
2293                 } else {
2294                     if (value < (UV)IV_MAX)
2295                         return (IV)value;
2296                 }
2297             }
2298             if (!numtype) {
2299                 if (ckWARN(WARN_NUMERIC))
2300                     not_a_number(sv);
2301             }
2302             return I_V(Atof(SvPVX_const(sv)));
2303         }
2304         if (SvROK(sv)) {
2305             goto return_rok;
2306         }
2307         assert(SvTYPE(sv) >= SVt_PVMG);
2308         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2309     } else if (SvTHINKFIRST(sv)) {
2310         if (SvROK(sv)) {
2311         return_rok:
2312             if (SvAMAGIC(sv)) {
2313                 SV * tmpstr;
2314                 if (flags & SV_SKIP_OVERLOAD)
2315                     return 0;
2316                 tmpstr = AMG_CALLunary(sv, numer_amg);
2317                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2318                     return SvIV(tmpstr);
2319                 }
2320             }
2321             return PTR2IV(SvRV(sv));
2322         }
2323         if (SvIsCOW(sv)) {
2324             sv_force_normal_flags(sv, 0);
2325         }
2326         if (SvREADONLY(sv) && !SvOK(sv)) {
2327             if (ckWARN(WARN_UNINITIALIZED))
2328                 report_uninit(sv);
2329             return 0;
2330         }
2331     }
2332     if (!SvIOKp(sv)) {
2333         if (S_sv_2iuv_common(aTHX_ sv))
2334             return 0;
2335     }
2336     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2337         PTR2UV(sv),SvIVX(sv)));
2338     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2339 }
2340
2341 /*
2342 =for apidoc sv_2uv_flags
2343
2344 Return the unsigned integer value of an SV, doing any necessary string
2345 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2346 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2347
2348 =cut
2349 */
2350
2351 UV
2352 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2353 {
2354     dVAR;
2355     if (!sv)
2356         return 0;
2357     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2358         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2359            cache IVs just in case.  */
2360         if (flags & SV_GMAGIC)
2361             mg_get(sv);
2362         if (SvIOKp(sv))
2363             return SvUVX(sv);
2364         if (SvNOKp(sv))
2365             return U_V(SvNVX(sv));
2366         if (SvPOKp(sv) && SvLEN(sv)) {
2367             UV value;
2368             const int numtype
2369                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2370
2371             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2372                 == IS_NUMBER_IN_UV) {
2373                 /* It's definitely an integer */
2374                 if (!(numtype & IS_NUMBER_NEG))
2375                     return value;
2376             }
2377             if (!numtype) {
2378                 if (ckWARN(WARN_NUMERIC))
2379                     not_a_number(sv);
2380             }
2381             return U_V(Atof(SvPVX_const(sv)));
2382         }
2383         if (SvROK(sv)) {
2384             goto return_rok;
2385         }
2386         assert(SvTYPE(sv) >= SVt_PVMG);
2387         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2388     } else if (SvTHINKFIRST(sv)) {
2389         if (SvROK(sv)) {
2390         return_rok:
2391             if (SvAMAGIC(sv)) {
2392                 SV *tmpstr;
2393                 if (flags & SV_SKIP_OVERLOAD)
2394                     return 0;
2395                 tmpstr = AMG_CALLunary(sv, numer_amg);
2396                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2397                     return SvUV(tmpstr);
2398                 }
2399             }
2400             return PTR2UV(SvRV(sv));
2401         }
2402         if (SvIsCOW(sv)) {
2403             sv_force_normal_flags(sv, 0);
2404         }
2405         if (SvREADONLY(sv) && !SvOK(sv)) {
2406             if (ckWARN(WARN_UNINITIALIZED))
2407                 report_uninit(sv);
2408             return 0;
2409         }
2410     }
2411     if (!SvIOKp(sv)) {
2412         if (S_sv_2iuv_common(aTHX_ sv))
2413             return 0;
2414     }
2415
2416     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2417                           PTR2UV(sv),SvUVX(sv)));
2418     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2419 }
2420
2421 /*
2422 =for apidoc sv_2nv_flags
2423
2424 Return the num value of an SV, doing any necessary string or integer
2425 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2426 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2427
2428 =cut
2429 */
2430
2431 NV
2432 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2433 {
2434     dVAR;
2435     if (!sv)
2436         return 0.0;
2437     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2438         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2439            cache IVs just in case.  */
2440         if (flags & SV_GMAGIC)
2441             mg_get(sv);
2442         if (SvNOKp(sv))
2443             return SvNVX(sv);
2444         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2445             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2446                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2447                 not_a_number(sv);
2448             return Atof(SvPVX_const(sv));
2449         }
2450         if (SvIOKp(sv)) {
2451             if (SvIsUV(sv))
2452                 return (NV)SvUVX(sv);
2453             else
2454                 return (NV)SvIVX(sv);
2455         }
2456         if (SvROK(sv)) {
2457             goto return_rok;
2458         }
2459         assert(SvTYPE(sv) >= SVt_PVMG);
2460         /* This falls through to the report_uninit near the end of the
2461            function. */
2462     } else if (SvTHINKFIRST(sv)) {
2463         if (SvROK(sv)) {
2464         return_rok:
2465             if (SvAMAGIC(sv)) {
2466                 SV *tmpstr;
2467                 if (flags & SV_SKIP_OVERLOAD)
2468                     return 0;
2469                 tmpstr = AMG_CALLunary(sv, numer_amg);
2470                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2471                     return SvNV(tmpstr);
2472                 }
2473             }
2474             return PTR2NV(SvRV(sv));
2475         }
2476         if (SvIsCOW(sv)) {
2477             sv_force_normal_flags(sv, 0);
2478         }
2479         if (SvREADONLY(sv) && !SvOK(sv)) {
2480             if (ckWARN(WARN_UNINITIALIZED))
2481                 report_uninit(sv);
2482             return 0.0;
2483         }
2484     }
2485     if (SvTYPE(sv) < SVt_NV) {
2486         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2487         sv_upgrade(sv, SVt_NV);
2488 #ifdef USE_LONG_DOUBLE
2489         DEBUG_c({
2490             STORE_NUMERIC_LOCAL_SET_STANDARD();
2491             PerlIO_printf(Perl_debug_log,
2492                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2493                           PTR2UV(sv), SvNVX(sv));
2494             RESTORE_NUMERIC_LOCAL();
2495         });
2496 #else
2497         DEBUG_c({
2498             STORE_NUMERIC_LOCAL_SET_STANDARD();
2499             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2500                           PTR2UV(sv), SvNVX(sv));
2501             RESTORE_NUMERIC_LOCAL();
2502         });
2503 #endif
2504     }
2505     else if (SvTYPE(sv) < SVt_PVNV)
2506         sv_upgrade(sv, SVt_PVNV);
2507     if (SvNOKp(sv)) {
2508         return SvNVX(sv);
2509     }
2510     if (SvIOKp(sv)) {
2511         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2512 #ifdef NV_PRESERVES_UV
2513         if (SvIOK(sv))
2514             SvNOK_on(sv);
2515         else
2516             SvNOKp_on(sv);
2517 #else
2518         /* Only set the public NV OK flag if this NV preserves the IV  */
2519         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2520         if (SvIOK(sv) &&
2521             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2522                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2523             SvNOK_on(sv);
2524         else
2525             SvNOKp_on(sv);
2526 #endif
2527     }
2528     else if (SvPOKp(sv) && SvLEN(sv)) {
2529         UV value;
2530         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2531         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2532             not_a_number(sv);
2533 #ifdef NV_PRESERVES_UV
2534         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2535             == IS_NUMBER_IN_UV) {
2536             /* It's definitely an integer */
2537             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2538         } else
2539             SvNV_set(sv, Atof(SvPVX_const(sv)));
2540         if (numtype)
2541             SvNOK_on(sv);
2542         else
2543             SvNOKp_on(sv);
2544 #else
2545         SvNV_set(sv, Atof(SvPVX_const(sv)));
2546         /* Only set the public NV OK flag if this NV preserves the value in
2547            the PV at least as well as an IV/UV would.
2548            Not sure how to do this 100% reliably. */
2549         /* if that shift count is out of range then Configure's test is
2550            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2551            UV_BITS */
2552         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2553             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2554             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2555         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2556             /* Can't use strtol etc to convert this string, so don't try.
2557                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2558             SvNOK_on(sv);
2559         } else {
2560             /* value has been set.  It may not be precise.  */
2561             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2562                 /* 2s complement assumption for (UV)IV_MIN  */
2563                 SvNOK_on(sv); /* Integer is too negative.  */
2564             } else {
2565                 SvNOKp_on(sv);
2566                 SvIOKp_on(sv);
2567
2568                 if (numtype & IS_NUMBER_NEG) {
2569                     SvIV_set(sv, -(IV)value);
2570                 } else if (value <= (UV)IV_MAX) {
2571                     SvIV_set(sv, (IV)value);
2572                 } else {
2573                     SvUV_set(sv, value);
2574                     SvIsUV_on(sv);
2575                 }
2576
2577                 if (numtype & IS_NUMBER_NOT_INT) {
2578                     /* I believe that even if the original PV had decimals,
2579                        they are lost beyond the limit of the FP precision.
2580                        However, neither is canonical, so both only get p
2581                        flags.  NWC, 2000/11/25 */
2582                     /* Both already have p flags, so do nothing */
2583                 } else {
2584                     const NV nv = SvNVX(sv);
2585                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2586                         if (SvIVX(sv) == I_V(nv)) {
2587                             SvNOK_on(sv);
2588                         } else {
2589                             /* It had no "." so it must be integer.  */
2590                         }
2591                         SvIOK_on(sv);
2592                     } else {
2593                         /* between IV_MAX and NV(UV_MAX).
2594                            Could be slightly > UV_MAX */
2595
2596                         if (numtype & IS_NUMBER_NOT_INT) {
2597                             /* UV and NV both imprecise.  */
2598                         } else {
2599                             const UV nv_as_uv = U_V(nv);
2600
2601                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2602                                 SvNOK_on(sv);
2603                             }
2604                             SvIOK_on(sv);
2605                         }
2606                     }
2607                 }
2608             }
2609         }
2610         /* It might be more code efficient to go through the entire logic above
2611            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2612            gets complex and potentially buggy, so more programmer efficient
2613            to do it this way, by turning off the public flags:  */
2614         if (!numtype)
2615             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2616 #endif /* NV_PRESERVES_UV */
2617     }
2618     else  {
2619         if (isGV_with_GP(sv)) {
2620             glob_2number(MUTABLE_GV(sv));
2621             return 0.0;
2622         }
2623
2624         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2625             report_uninit(sv);
2626         assert (SvTYPE(sv) >= SVt_NV);
2627         /* Typically the caller expects that sv_any is not NULL now.  */
2628         /* XXX Ilya implies that this is a bug in callers that assume this
2629            and ideally should be fixed.  */
2630         return 0.0;
2631     }
2632 #if defined(USE_LONG_DOUBLE)
2633     DEBUG_c({
2634         STORE_NUMERIC_LOCAL_SET_STANDARD();
2635         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2636                       PTR2UV(sv), SvNVX(sv));
2637         RESTORE_NUMERIC_LOCAL();
2638     });
2639 #else
2640     DEBUG_c({
2641         STORE_NUMERIC_LOCAL_SET_STANDARD();
2642         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2643                       PTR2UV(sv), SvNVX(sv));
2644         RESTORE_NUMERIC_LOCAL();
2645     });
2646 #endif
2647     return SvNVX(sv);
2648 }
2649
2650 /*
2651 =for apidoc sv_2num
2652
2653 Return an SV with the numeric value of the source SV, doing any necessary
2654 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2655 access this function.
2656
2657 =cut
2658 */
2659
2660 SV *
2661 Perl_sv_2num(pTHX_ register SV *const sv)
2662 {
2663     PERL_ARGS_ASSERT_SV_2NUM;
2664
2665     if (!SvROK(sv))
2666         return sv;
2667     if (SvAMAGIC(sv)) {
2668         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2669         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2670         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2671             return sv_2num(tmpsv);
2672     }
2673     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2674 }
2675
2676 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2677  * UV as a string towards the end of buf, and return pointers to start and
2678  * end of it.
2679  *
2680  * We assume that buf is at least TYPE_CHARS(UV) long.
2681  */
2682
2683 static char *
2684 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2685 {
2686     char *ptr = buf + TYPE_CHARS(UV);
2687     char * const ebuf = ptr;
2688     int sign;
2689
2690     PERL_ARGS_ASSERT_UIV_2BUF;
2691
2692     if (is_uv)
2693         sign = 0;
2694     else if (iv >= 0) {
2695         uv = iv;
2696         sign = 0;
2697     } else {
2698         uv = -iv;
2699         sign = 1;
2700     }
2701     do {
2702         *--ptr = '0' + (char)(uv % 10);
2703     } while (uv /= 10);
2704     if (sign)
2705         *--ptr = '-';
2706     *peob = ebuf;
2707     return ptr;
2708 }
2709
2710 /*
2711 =for apidoc sv_2pv_flags
2712
2713 Returns a pointer to the string value of an SV, and sets *lp to its length.
2714 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2715 if necessary.
2716 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2717 usually end up here too.
2718
2719 =cut
2720 */
2721
2722 char *
2723 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2724 {
2725     dVAR;
2726     register char *s;
2727
2728     if (!sv) {
2729         if (lp)
2730             *lp = 0;
2731         return (char *)"";
2732     }
2733     if (SvGMAGICAL(sv)) {
2734         if (flags & SV_GMAGIC)
2735             mg_get(sv);
2736         if (SvPOKp(sv)) {
2737             if (lp)
2738                 *lp = SvCUR(sv);
2739             if (flags & SV_MUTABLE_RETURN)
2740                 return SvPVX_mutable(sv);
2741             if (flags & SV_CONST_RETURN)
2742                 return (char *)SvPVX_const(sv);
2743             return SvPVX(sv);
2744         }
2745         if (SvIOKp(sv) || SvNOKp(sv)) {
2746             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2747             STRLEN len;
2748
2749             if (SvIOKp(sv)) {
2750                 len = SvIsUV(sv)
2751                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2752                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2753             } else if(SvNVX(sv) == 0.0) {
2754                     tbuf[0] = '0';
2755                     tbuf[1] = 0;
2756                     len = 1;
2757             } else {
2758                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2759                 len = strlen(tbuf);
2760             }
2761             assert(!SvROK(sv));
2762             {
2763                 dVAR;
2764
2765                 SvUPGRADE(sv, SVt_PV);
2766                 if (lp)
2767                     *lp = len;
2768                 s = SvGROW_mutable(sv, len + 1);
2769                 SvCUR_set(sv, len);
2770                 SvPOKp_on(sv);
2771                 return (char*)memcpy(s, tbuf, len + 1);
2772             }
2773         }
2774         if (SvROK(sv)) {
2775             goto return_rok;
2776         }
2777         assert(SvTYPE(sv) >= SVt_PVMG);
2778         /* This falls through to the report_uninit near the end of the
2779            function. */
2780     } else if (SvTHINKFIRST(sv)) {
2781         if (SvROK(sv)) {
2782         return_rok:
2783             if (SvAMAGIC(sv)) {
2784                 SV *tmpstr;
2785                 if (flags & SV_SKIP_OVERLOAD)
2786                     return NULL;
2787                 tmpstr = AMG_CALLunary(sv, string_amg);
2788                 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2789                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2790                     /* Unwrap this:  */
2791                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2792                      */
2793
2794                     char *pv;
2795                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2796                         if (flags & SV_CONST_RETURN) {
2797                             pv = (char *) SvPVX_const(tmpstr);
2798                         } else {
2799                             pv = (flags & SV_MUTABLE_RETURN)
2800                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2801                         }
2802                         if (lp)
2803                             *lp = SvCUR(tmpstr);
2804                     } else {
2805                         pv = sv_2pv_flags(tmpstr, lp, flags);
2806                     }
2807                     if (SvUTF8(tmpstr))
2808                         SvUTF8_on(sv);
2809                     else
2810                         SvUTF8_off(sv);
2811                     return pv;
2812                 }
2813             }
2814             {
2815                 STRLEN len;
2816                 char *retval;
2817                 char *buffer;
2818                 SV *const referent = SvRV(sv);
2819
2820                 if (!referent) {
2821                     len = 7;
2822                     retval = buffer = savepvn("NULLREF", len);
2823                 } else if (SvTYPE(referent) == SVt_REGEXP) {
2824                     REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2825                     I32 seen_evals = 0;
2826
2827                     assert(re);
2828                         
2829                     /* If the regex is UTF-8 we want the containing scalar to
2830                        have an UTF-8 flag too */
2831                     if (RX_UTF8(re))
2832                         SvUTF8_on(sv);
2833                     else
2834                         SvUTF8_off(sv); 
2835
2836                     if ((seen_evals = RX_SEEN_EVALS(re)))
2837                         PL_reginterp_cnt += seen_evals;
2838
2839                     if (lp)
2840                         *lp = RX_WRAPLEN(re);
2841  
2842                     return RX_WRAPPED(re);
2843                 } else {
2844                     const char *const typestr = sv_reftype(referent, 0);
2845                     const STRLEN typelen = strlen(typestr);
2846                     UV addr = PTR2UV(referent);
2847                     const char *stashname = NULL;
2848                     STRLEN stashnamelen = 0; /* hush, gcc */
2849                     const char *buffer_end;
2850
2851                     if (SvOBJECT(referent)) {
2852                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2853
2854                         if (name) {
2855                             stashname = HEK_KEY(name);
2856                             stashnamelen = HEK_LEN(name);
2857
2858                             if (HEK_UTF8(name)) {
2859                                 SvUTF8_on(sv);
2860                             } else {
2861                                 SvUTF8_off(sv);
2862                             }
2863                         } else {
2864                             stashname = "__ANON__";
2865                             stashnamelen = 8;
2866                         }
2867                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2868                             + 2 * sizeof(UV) + 2 /* )\0 */;
2869                     } else {
2870                         len = typelen + 3 /* (0x */
2871                             + 2 * sizeof(UV) + 2 /* )\0 */;
2872                     }
2873
2874                     Newx(buffer, len, char);
2875                     buffer_end = retval = buffer + len;
2876
2877                     /* Working backwards  */
2878                     *--retval = '\0';
2879                     *--retval = ')';
2880                     do {
2881                         *--retval = PL_hexdigit[addr & 15];
2882                     } while (addr >>= 4);
2883                     *--retval = 'x';
2884                     *--retval = '0';
2885                     *--retval = '(';
2886
2887                     retval -= typelen;
2888                     memcpy(retval, typestr, typelen);
2889
2890                     if (stashname) {
2891                         *--retval = '=';
2892                         retval -= stashnamelen;
2893                         memcpy(retval, stashname, stashnamelen);
2894                     }
2895                     /* retval may not necessarily have reached the start of the
2896                        buffer here.  */
2897                     assert (retval >= buffer);
2898
2899                     len = buffer_end - retval - 1; /* -1 for that \0  */
2900                 }
2901                 if (lp)
2902                     *lp = len;
2903                 SAVEFREEPV(buffer);
2904                 return retval;
2905             }
2906         }
2907         if (SvREADONLY(sv) && !SvOK(sv)) {
2908             if (lp)
2909                 *lp = 0;
2910             if (flags & SV_UNDEF_RETURNS_NULL)
2911                 return NULL;
2912             if (ckWARN(WARN_UNINITIALIZED))
2913                 report_uninit(sv);
2914             return (char *)"";
2915         }
2916     }
2917     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2918         /* I'm assuming that if both IV and NV are equally valid then
2919            converting the IV is going to be more efficient */
2920         const U32 isUIOK = SvIsUV(sv);
2921         char buf[TYPE_CHARS(UV)];
2922         char *ebuf, *ptr;
2923         STRLEN len;
2924
2925         if (SvTYPE(sv) < SVt_PVIV)
2926             sv_upgrade(sv, SVt_PVIV);
2927         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2928         len = ebuf - ptr;
2929         /* inlined from sv_setpvn */
2930         s = SvGROW_mutable(sv, len + 1);
2931         Move(ptr, s, len, char);
2932         s += len;
2933         *s = '\0';
2934     }
2935     else if (SvNOKp(sv)) {
2936         if (SvTYPE(sv) < SVt_PVNV)
2937             sv_upgrade(sv, SVt_PVNV);
2938         if (SvNVX(sv) == 0.0) {
2939             s = SvGROW_mutable(sv, 2);
2940             *s++ = '0';
2941             *s = '\0';
2942         } else {
2943             dSAVE_ERRNO;
2944             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2945             s = SvGROW_mutable(sv, NV_DIG + 20);
2946             /* some Xenix systems wipe out errno here */
2947             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2948             RESTORE_ERRNO;
2949             while (*s) s++;
2950         }
2951 #ifdef hcx
2952         if (s[-1] == '.')
2953             *--s = '\0';
2954 #endif
2955     }
2956     else {
2957         if (isGV_with_GP(sv)) {
2958             GV *const gv = MUTABLE_GV(sv);
2959             const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2960             SV *const buffer = sv_newmortal();
2961
2962             /* FAKE globs can get coerced, so need to turn this off temporarily
2963                if it is on.  */
2964             SvFAKE_off(gv);
2965             gv_efullname3(buffer, gv, "*");
2966             SvFLAGS(gv) |= wasfake;
2967
2968             if (SvPOK(buffer)) {
2969                 if (lp) {
2970                     *lp = SvCUR(buffer);
2971                 }
2972                 return SvPVX(buffer);
2973             }
2974             else {
2975                 if (lp)
2976                     *lp = 0;
2977                 return (char *)"";
2978             }
2979         }
2980
2981         if (lp)
2982             *lp = 0;
2983         if (flags & SV_UNDEF_RETURNS_NULL)
2984             return NULL;
2985         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2986             report_uninit(sv);
2987         if (SvTYPE(sv) < SVt_PV)
2988             /* Typically the caller expects that sv_any is not NULL now.  */
2989             sv_upgrade(sv, SVt_PV);
2990         return (char *)"";
2991     }
2992     {
2993         const STRLEN len = s - SvPVX_const(sv);
2994         if (lp) 
2995             *lp = len;
2996         SvCUR_set(sv, len);
2997     }
2998     SvPOK_on(sv);
2999     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3000                           PTR2UV(sv),SvPVX_const(sv)));
3001     if (flags & SV_CONST_RETURN)
3002         return (char *)SvPVX_const(sv);
3003     if (flags & SV_MUTABLE_RETURN)
3004         return SvPVX_mutable(sv);
3005     return SvPVX(sv);
3006 }
3007
3008 /*
3009 =for apidoc sv_copypv
3010
3011 Copies a stringified representation of the source SV into the
3012 destination SV.  Automatically performs any necessary mg_get and
3013 coercion of numeric values into strings.  Guaranteed to preserve
3014 UTF8 flag even from overloaded objects.  Similar in nature to
3015 sv_2pv[_flags] but operates directly on an SV instead of just the
3016 string.  Mostly uses sv_2pv_flags to do its work, except when that
3017 would lose the UTF-8'ness of the PV.
3018
3019 =cut
3020 */
3021
3022 void
3023 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3024 {
3025     STRLEN len;
3026     const char * const s = SvPV_const(ssv,len);
3027
3028     PERL_ARGS_ASSERT_SV_COPYPV;
3029
3030     sv_setpvn(dsv,s,len);
3031     if (SvUTF8(ssv))
3032         SvUTF8_on(dsv);
3033     else
3034         SvUTF8_off(dsv);
3035 }
3036
3037 /*
3038 =for apidoc sv_2pvbyte
3039
3040 Return a pointer to the byte-encoded representation of the SV, and set *lp
3041 to its length.  May cause the SV to be downgraded from UTF-8 as a
3042 side-effect.
3043
3044 Usually accessed via the C<SvPVbyte> macro.
3045
3046 =cut
3047 */
3048
3049 char *
3050 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3051 {
3052     PERL_ARGS_ASSERT_SV_2PVBYTE;
3053
3054     SvGETMAGIC(sv);
3055     sv_utf8_downgrade(sv,0);
3056     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3057 }
3058
3059 /*
3060 =for apidoc sv_2pvutf8
3061
3062 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3063 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3064
3065 Usually accessed via the C<SvPVutf8> macro.
3066
3067 =cut
3068 */
3069
3070 char *
3071 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3072 {
3073     PERL_ARGS_ASSERT_SV_2PVUTF8;
3074
3075     sv_utf8_upgrade(sv);
3076     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3077 }
3078
3079
3080 /*
3081 =for apidoc sv_2bool
3082
3083 This macro is only used by sv_true() or its macro equivalent, and only if
3084 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3085 It calls sv_2bool_flags with the SV_GMAGIC flag.
3086
3087 =for apidoc sv_2bool_flags
3088
3089 This function is only used by sv_true() and friends,  and only if
3090 the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
3091 contain SV_GMAGIC, then it does an mg_get() first.
3092
3093
3094 =cut
3095 */
3096
3097 bool
3098 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3099 {
3100     dVAR;
3101
3102     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3103
3104     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3105
3106     if (!SvOK(sv))
3107         return 0;
3108     if (SvROK(sv)) {
3109         if (SvAMAGIC(sv)) {
3110             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3111             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3112                 return cBOOL(SvTRUE(tmpsv));
3113         }
3114         return SvRV(sv) != 0;
3115     }
3116     if (SvPOKp(sv)) {
3117         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3118         if (Xpvtmp &&
3119                 (*sv->sv_u.svu_pv > '0' ||
3120                 Xpvtmp->xpv_cur > 1 ||
3121                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3122             return 1;
3123         else
3124             return 0;
3125     }
3126     else {
3127         if (SvIOKp(sv))
3128             return SvIVX(sv) != 0;
3129         else {
3130             if (SvNOKp(sv))
3131                 return SvNVX(sv) != 0.0;
3132             else {
3133                 if (isGV_with_GP(sv))
3134                     return TRUE;
3135                 else
3136                     return FALSE;
3137             }
3138         }
3139     }
3140 }
3141
3142 /*
3143 =for apidoc sv_utf8_upgrade
3144
3145 Converts the PV of an SV to its UTF-8-encoded form.
3146 Forces the SV to string form if it is not already.
3147 Will C<mg_get> on C<sv> if appropriate.
3148 Always sets the SvUTF8 flag to avoid future validity checks even
3149 if the whole string is the same in UTF-8 as not.
3150 Returns the number of bytes in the converted string
3151
3152 This is not as a general purpose byte encoding to Unicode interface:
3153 use the Encode extension for that.
3154
3155 =for apidoc sv_utf8_upgrade_nomg
3156
3157 Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3158
3159 =for apidoc sv_utf8_upgrade_flags
3160
3161 Converts the PV of an SV to its UTF-8-encoded form.
3162 Forces the SV to string form if it is not already.
3163 Always sets the SvUTF8 flag to avoid future validity checks even
3164 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3165 will C<mg_get> on C<sv> if appropriate, else not.
3166 Returns the number of bytes in the converted string
3167 C<sv_utf8_upgrade> and
3168 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3169
3170 This is not as a general purpose byte encoding to Unicode interface:
3171 use the Encode extension for that.
3172
3173 =cut
3174
3175 The grow version is currently not externally documented.  It adds a parameter,
3176 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3177 have free after it upon return.  This allows the caller to reserve extra space
3178 that it intends to fill, to avoid extra grows.
3179
3180 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3181 which can be used to tell this function to not first check to see if there are
3182 any characters that are different in UTF-8 (variant characters) which would
3183 force it to allocate a new string to sv, but to assume there are.  Typically
3184 this flag is used by a routine that has already parsed the string to find that
3185 there are such characters, and passes this information on so that the work
3186 doesn't have to be repeated.
3187
3188 (One might think that the calling routine could pass in the position of the
3189 first such variant, so it wouldn't have to be found again.  But that is not the
3190 case, because typically when the caller is likely to use this flag, it won't be
3191 calling this routine unless it finds something that won't fit into a byte.
3192 Otherwise it tries to not upgrade and just use bytes.  But some things that
3193 do fit into a byte are variants in utf8, and the caller may not have been
3194 keeping track of these.)
3195
3196 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3197 isn't guaranteed due to having other routines do the work in some input cases,
3198 or if the input is already flagged as being in utf8.
3199
3200 The speed of this could perhaps be improved for many cases if someone wanted to
3201 write a fast function that counts the number of variant characters in a string,
3202 especially if it could return the position of the first one.
3203
3204 */
3205
3206 STRLEN
3207 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3208 {
3209     dVAR;
3210
3211     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3212
3213     if (sv == &PL_sv_undef)
3214         return 0;
3215     if (!SvPOK(sv)) {
3216         STRLEN len = 0;
3217         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3218             (void) sv_2pv_flags(sv,&len, flags);
3219             if (SvUTF8(sv)) {
3220                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3221                 return len;
3222             }
3223         } else {
3224             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3225         }
3226     }
3227
3228     if (SvUTF8(sv)) {
3229         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3230         return SvCUR(sv);
3231     }
3232
3233     if (SvIsCOW(sv)) {
3234         sv_force_normal_flags(sv, 0);
3235     }
3236
3237     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3238         sv_recode_to_utf8(sv, PL_encoding);
3239         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3240         return SvCUR(sv);
3241     }
3242
3243     if (SvCUR(sv) == 0) {
3244         if (extra) SvGROW(sv, extra);
3245     } else { /* Assume Latin-1/EBCDIC */
3246         /* This function could be much more efficient if we
3247          * had a FLAG in SVs to signal if there are any variant
3248          * chars in the PV.  Given that there isn't such a flag
3249          * make the loop as fast as possible (although there are certainly ways
3250          * to speed this up, eg. through vectorization) */
3251         U8 * s = (U8 *) SvPVX_const(sv);
3252         U8 * e = (U8 *) SvEND(sv);
3253         U8 *t = s;
3254         STRLEN two_byte_count = 0;
3255         
3256         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3257
3258         /* See if really will need to convert to utf8.  We mustn't rely on our
3259          * incoming SV being well formed and having a trailing '\0', as certain
3260          * code in pp_formline can send us partially built SVs. */
3261
3262         while (t < e) {
3263             const U8 ch = *t++;
3264             if (NATIVE_IS_INVARIANT(ch)) continue;
3265
3266             t--;    /* t already incremented; re-point to first variant */
3267             two_byte_count = 1;
3268             goto must_be_utf8;
3269         }
3270
3271         /* utf8 conversion not needed because all are invariants.  Mark as
3272          * UTF-8 even if no variant - saves scanning loop */
3273         SvUTF8_on(sv);
3274         return SvCUR(sv);
3275
3276 must_be_utf8:
3277
3278         /* Here, the string should be converted to utf8, either because of an
3279          * input flag (two_byte_count = 0), or because a character that
3280          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3281          * the beginning of the string (if we didn't examine anything), or to
3282          * the first variant.  In either case, everything from s to t - 1 will
3283          * occupy only 1 byte each on output.
3284          *
3285          * There are two main ways to convert.  One is to create a new string
3286          * and go through the input starting from the beginning, appending each
3287          * converted value onto the new string as we go along.  It's probably
3288          * best to allocate enough space in the string for the worst possible
3289          * case rather than possibly running out of space and having to
3290          * reallocate and then copy what we've done so far.  Since everything
3291          * from s to t - 1 is invariant, the destination can be initialized
3292          * with these using a fast memory copy
3293          *
3294          * The other way is to figure out exactly how big the string should be
3295          * by parsing the entire input.  Then you don't have to make it big
3296          * enough to handle the worst possible case, and more importantly, if
3297          * the string you already have is large enough, you don't have to
3298          * allocate a new string, you can copy the last character in the input
3299          * string to the final position(s) that will be occupied by the
3300          * converted string and go backwards, stopping at t, since everything
3301          * before that is invariant.
3302          *
3303          * There are advantages and disadvantages to each method.
3304          *
3305          * In the first method, we can allocate a new string, do the memory
3306          * copy from the s to t - 1, and then proceed through the rest of the
3307          * string byte-by-byte.
3308          *
3309          * In the second method, we proceed through the rest of the input
3310          * string just calculating how big the converted string will be.  Then
3311          * there are two cases:
3312          *  1)  if the string has enough extra space to handle the converted
3313          *      value.  We go backwards through the string, converting until we
3314          *      get to the position we are at now, and then stop.  If this
3315          *      position is far enough along in the string, this method is
3316          *      faster than the other method.  If the memory copy were the same
3317          *      speed as the byte-by-byte loop, that position would be about
3318          *      half-way, as at the half-way mark, parsing to the end and back
3319          *      is one complete string's parse, the same amount as starting
3320          *      over and going all the way through.  Actually, it would be
3321          *      somewhat less than half-way, as it's faster to just count bytes
3322          *      than to also copy, and we don't have the overhead of allocating
3323          *      a new string, changing the scalar to use it, and freeing the
3324          *      existing one.  But if the memory copy is fast, the break-even
3325          *      point is somewhere after half way.  The counting loop could be
3326          *      sped up by vectorization, etc, to move the break-even point
3327          *      further towards the beginning.
3328          *  2)  if the string doesn't have enough space to handle the converted
3329          *      value.  A new string will have to be allocated, and one might
3330          *      as well, given that, start from the beginning doing the first
3331          *      method.  We've spent extra time parsing the string and in
3332          *      exchange all we've gotten is that we know precisely how big to
3333          *      make the new one.  Perl is more optimized for time than space,
3334          *      so this case is a loser.
3335          * So what I've decided to do is not use the 2nd method unless it is
3336          * guaranteed that a new string won't have to be allocated, assuming
3337          * the worst case.  I also decided not to put any more conditions on it
3338          * than this, for now.  It seems likely that, since the worst case is
3339          * twice as big as the unknown portion of the string (plus 1), we won't
3340          * be guaranteed enough space, causing us to go to the first method,
3341          * unless the string is short, or the first variant character is near
3342          * the end of it.  In either of these cases, it seems best to use the
3343          * 2nd method.  The only circumstance I can think of where this would
3344          * be really slower is if the string had once had much more data in it
3345          * than it does now, but there is still a substantial amount in it  */
3346
3347         {
3348             STRLEN invariant_head = t - s;
3349             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3350             if (SvLEN(sv) < size) {
3351
3352                 /* Here, have decided to allocate a new string */
3353
3354                 U8 *dst;
3355                 U8 *d;
3356
3357                 Newx(dst, size, U8);
3358
3359                 /* If no known invariants at the beginning of the input string,
3360                  * set so starts from there.  Otherwise, can use memory copy to
3361                  * get up to where we are now, and then start from here */
3362
3363                 if (invariant_head <= 0) {
3364                     d = dst;
3365                 } else {
3366                     Copy(s, dst, invariant_head, char);
3367                     d = dst + invariant_head;
3368                 }
3369
3370                 while (t < e) {
3371                     const UV uv = NATIVE8_TO_UNI(*t++);
3372                     if (UNI_IS_INVARIANT(uv))
3373                         *d++ = (U8)UNI_TO_NATIVE(uv);
3374                     else {
3375                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3376                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3377                     }
3378                 }
3379                 *d = '\0';
3380                 SvPV_free(sv); /* No longer using pre-existing string */
3381                 SvPV_set(sv, (char*)dst);
3382                 SvCUR_set(sv, d - dst);
3383                 SvLEN_set(sv, size);
3384             } else {
3385
3386                 /* Here, have decided to get the exact size of the string.
3387                  * Currently this happens only when we know that there is
3388                  * guaranteed enough space to fit the converted string, so
3389                  * don't have to worry about growing.  If two_byte_count is 0,
3390                  * then t points to the first byte of the string which hasn't
3391                  * been examined yet.  Otherwise two_byte_count is 1, and t
3392                  * points to the first byte in the string that will expand to
3393                  * two.  Depending on this, start examining at t or 1 after t.
3394                  * */
3395
3396                 U8 *d = t + two_byte_count;
3397
3398
3399                 /* Count up the remaining bytes that expand to two */
3400
3401                 while (d < e) {
3402                     const U8 chr = *d++;
3403                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3404                 }
3405
3406                 /* The string will expand by just the number of bytes that
3407                  * occupy two positions.  But we are one afterwards because of
3408                  * the increment just above.  This is the place to put the
3409                  * trailing NUL, and to set the length before we decrement */
3410
3411                 d += two_byte_count;
3412                 SvCUR_set(sv, d - s);
3413                 *d-- = '\0';
3414
3415
3416                 /* Having decremented d, it points to the position to put the
3417                  * very last byte of the expanded string.  Go backwards through
3418                  * the string, copying and expanding as we go, stopping when we
3419                  * get to the part that is invariant the rest of the way down */
3420
3421                 e--;
3422                 while (e >= t) {
3423                     const U8 ch = NATIVE8_TO_UNI(*e--);
3424                     if (UNI_IS_INVARIANT(ch)) {
3425                         *d-- = UNI_TO_NATIVE(ch);
3426                     } else {
3427                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3428                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3429                     }
3430                 }
3431             }
3432
3433             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3434                 /* Update pos. We do it at the end rather than during
3435                  * the upgrade, to avoid slowing down the common case
3436                  * (upgrade without pos) */
3437                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3438                 if (mg) {
3439                     I32 pos = mg->mg_len;
3440                     if (pos > 0 && (U32)pos > invariant_head) {
3441                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3442                         STRLEN n = (U32)pos - invariant_head;
3443                         while (n > 0) {
3444                             if (UTF8_IS_START(*d))
3445                                 d++;
3446                             d++;
3447                             n--;
3448                         }
3449                         mg->mg_len  = d - (U8*)SvPVX(sv);
3450                     }
3451                 }
3452                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3453                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3454             }
3455         }
3456     }
3457
3458     /* Mark as UTF-8 even if no variant - saves scanning loop */
3459     SvUTF8_on(sv);
3460     return SvCUR(sv);
3461 }
3462
3463 /*
3464 =for apidoc sv_utf8_downgrade
3465
3466 Attempts to convert the PV of an SV from characters to bytes.
3467 If the PV contains a character that cannot fit
3468 in a byte, this conversion will fail;
3469 in this case, either returns false or, if C<fail_ok> is not
3470 true, croaks.
3471
3472 This is not as a general purpose Unicode to byte encoding interface:
3473 use the Encode extension for that.
3474
3475 =cut
3476 */
3477
3478 bool
3479 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3480 {
3481     dVAR;
3482
3483     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3484
3485     if (SvPOKp(sv) && SvUTF8(sv)) {
3486         if (SvCUR(sv)) {
3487             U8 *s;
3488             STRLEN len;
3489             int mg_flags = SV_GMAGIC;
3490
3491             if (SvIsCOW(sv)) {
3492                 sv_force_normal_flags(sv, 0);
3493             }
3494             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3495                 /* update pos */
3496                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3497                 if (mg) {
3498                     I32 pos = mg->mg_len;
3499                     if (pos > 0) {
3500                         sv_pos_b2u(sv, &pos);
3501                         mg_flags = 0; /* sv_pos_b2u does get magic */
3502                         mg->mg_len  = pos;
3503                     }
3504                 }
3505                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3506                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3507
3508             }
3509             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3510
3511             if (!utf8_to_bytes(s, &len)) {
3512                 if (fail_ok)
3513                     return FALSE;
3514                 else {
3515                     if (PL_op)
3516                         Perl_croak(aTHX_ "Wide character in %s",
3517                                    OP_DESC(PL_op));
3518                     else
3519                         Perl_croak(aTHX_ "Wide character");
3520                 }
3521             }
3522             SvCUR_set(sv, len);
3523         }
3524     }
3525     SvUTF8_off(sv);
3526     return TRUE;
3527 }
3528
3529 /*
3530 =for apidoc sv_utf8_encode
3531
3532 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3533 flag off so that it looks like octets again.
3534
3535 =cut
3536 */
3537
3538 void
3539 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3540 {
3541     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3542
3543     if (SvIsCOW(sv)) {
3544         sv_force_normal_flags(sv, 0);
3545     }
3546     if (SvREADONLY(sv)) {
3547         Perl_croak_no_modify(aTHX);
3548     }
3549     (void) sv_utf8_upgrade(sv);
3550     SvUTF8_off(sv);
3551 }
3552
3553 /*
3554 =for apidoc sv_utf8_decode
3555
3556 If the PV of the SV is an octet sequence in UTF-8
3557 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3558 so that it looks like a character. If the PV contains only single-byte
3559 characters, the C<SvUTF8> flag stays being off.
3560 Scans PV for validity and returns false if the PV is invalid UTF-8.
3561
3562 =cut
3563 */
3564
3565 bool
3566 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3567 {
3568     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3569
3570     if (SvPOKp(sv)) {
3571         const U8 *start, *c;
3572         const U8 *e;
3573
3574         /* The octets may have got themselves encoded - get them back as
3575          * bytes
3576          */
3577         if (!sv_utf8_downgrade(sv, TRUE))
3578             return FALSE;
3579
3580         /* it is actually just a matter of turning the utf8 flag on, but
3581          * we want to make sure everything inside is valid utf8 first.
3582          */
3583         c = start = (const U8 *) SvPVX_const(sv);
3584         if (!is_utf8_string(c, SvCUR(sv)+1))
3585             return FALSE;
3586         e = (const U8 *) SvEND(sv);
3587         while (c < e) {
3588             const U8 ch = *c++;
3589             if (!UTF8_IS_INVARIANT(ch)) {
3590                 SvUTF8_on(sv);
3591                 break;
3592             }
3593         }
3594         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3595             /* adjust pos to the start of a UTF8 char sequence */
3596             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3597             if (mg) {
3598                 I32 pos = mg->mg_len;
3599                 if (pos > 0) {
3600                     for (c = start + pos; c > start; c--) {
3601                         if (UTF8_IS_START(*c))
3602                             break;
3603                     }
3604                     mg->mg_len  = c - start;
3605                 }
3606             }
3607             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3608                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3609         }
3610     }
3611     return TRUE;
3612 }
3613
3614 /*
3615 =for apidoc sv_setsv
3616
3617 Copies the contents of the source SV C<ssv> into the destination SV
3618 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3619 function if the source SV needs to be reused. Does not handle 'set' magic.
3620 Loosely speaking, it performs a copy-by-value, obliterating any previous
3621 content of the destination.
3622
3623 You probably want to use one of the assortment of wrappers, such as
3624 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3625 C<SvSetMagicSV_nosteal>.
3626
3627 =for apidoc sv_setsv_flags
3628
3629 Copies the contents of the source SV C<ssv> into the destination SV
3630 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3631 function if the source SV needs to be reused. Does not handle 'set' magic.
3632 Loosely speaking, it performs a copy-by-value, obliterating any previous
3633 content of the destination.
3634 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3635 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3636 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3637 and C<sv_setsv_nomg> are implemented in terms of this function.
3638
3639 You probably want to use one of the assortment of wrappers, such as
3640 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3641 C<SvSetMagicSV_nosteal>.
3642
3643 This is the primary function for copying scalars, and most other
3644 copy-ish functions and macros use this underneath.
3645
3646 =cut
3647 */
3648
3649 static void
3650 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3651 {
3652     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3653     HV *old_stash = NULL;
3654
3655     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3656
3657     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3658         const char * const name = GvNAME(sstr);
3659         const STRLEN len = GvNAMELEN(sstr);
3660         {
3661             if (dtype >= SVt_PV) {
3662                 SvPV_free(dstr);
3663                 SvPV_set(dstr, 0);
3664                 SvLEN_set(dstr, 0);
3665                 SvCUR_set(dstr, 0);
3666             }
3667             SvUPGRADE(dstr, SVt_PVGV);
3668             (void)SvOK_off(dstr);
3669             /* FIXME - why are we doing this, then turning it off and on again
3670                below?  */
3671             isGV_with_GP_on(dstr);
3672         }
3673         GvSTASH(dstr) = GvSTASH(sstr);
3674         if (GvSTASH(dstr))
3675             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3676         gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
3677         SvFAKE_on(dstr);        /* can coerce to non-glob */
3678     }
3679
3680     if(GvGP(MUTABLE_GV(sstr))) {
3681         /* If source has method cache entry, clear it */
3682         if(GvCVGEN(sstr)) {
3683             SvREFCNT_dec(GvCV(sstr));
3684             GvCV_set(sstr, NULL);
3685             GvCVGEN(sstr) = 0;
3686         }
3687         /* If source has a real method, then a method is
3688            going to change */
3689         else if(
3690          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3691         ) {
3692             mro_changes = 1;
3693         }
3694     }
3695
3696     /* If dest already had a real method, that's a change as well */
3697     if(
3698         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3699      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3700     ) {
3701         mro_changes = 1;
3702     }
3703
3704     /* We don’t need to check the name of the destination if it was not a
3705        glob to begin with. */
3706     if(dtype == SVt_PVGV) {
3707         const char * const name = GvNAME((const GV *)dstr);
3708         if(
3709             strEQ(name,"ISA")
3710          /* The stash may have been detached from the symbol table, so
3711             check its name. */
3712          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3713          && GvAV((const GV *)sstr)
3714         )
3715             mro_changes = 2;
3716         else {
3717             const STRLEN len = GvNAMELEN(dstr);
3718             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3719              || (len == 1 && name[0] == ':')) {
3720                 mro_changes = 3;
3721
3722                 /* Set aside the old stash, so we can reset isa caches on
3723                    its subclasses. */
3724                 if((old_stash = GvHV(dstr)))
3725                     /* Make sure we do not lose it early. */
3726                     SvREFCNT_inc_simple_void_NN(
3727                      sv_2mortal((SV *)old_stash)
3728                     );
3729             }
3730         }
3731     }
3732
3733     gp_free(MUTABLE_GV(dstr));
3734     isGV_with_GP_off(dstr);
3735     (void)SvOK_off(dstr);
3736     isGV_with_GP_on(dstr);
3737     GvINTRO_off(dstr);          /* one-shot flag */
3738     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3739     if (SvTAINTED(sstr))
3740         SvTAINT(dstr);
3741     if (GvIMPORTED(dstr) != GVf_IMPORTED
3742         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3743         {
3744             GvIMPORTED_on(dstr);
3745         }
3746     GvMULTI_on(dstr);
3747     if(mro_changes == 2) {
3748         MAGIC *mg;
3749         SV * const sref = (SV *)GvAV((const GV *)dstr);
3750         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3751             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3752                 AV * const ary = newAV();
3753                 av_push(ary, mg->mg_obj); /* takes the refcount */
3754                 mg->mg_obj = (SV *)ary;
3755             }
3756             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3757         }
3758         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3759         mro_isa_changed_in(GvSTASH(dstr));
3760     }
3761     else if(mro_changes == 3) {
3762         HV * const stash = GvHV(dstr);
3763         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3764             mro_package_moved(
3765                 stash, old_stash,
3766                 (GV *)dstr, 0
3767             );
3768     }
3769     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3770     return;
3771 }
3772
3773 static void
3774 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3775 {
3776     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3777     SV *dref = NULL;
3778     const int intro = GvINTRO(dstr);
3779     SV **location;
3780     U8 import_flag = 0;
3781     const U32 stype = SvTYPE(sref);
3782
3783     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3784
3785     if (intro) {
3786         GvINTRO_off(dstr);      /* one-shot flag */
3787         GvLINE(dstr) = CopLINE(PL_curcop);
3788         GvEGV(dstr) = MUTABLE_GV(dstr);
3789     }
3790     GvMULTI_on(dstr);
3791     switch (stype) {
3792     case SVt_PVCV:
3793         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3794         import_flag = GVf_IMPORTED_CV;
3795         goto common;
3796     case SVt_PVHV:
3797         location = (SV **) &GvHV(dstr);
3798         import_flag = GVf_IMPORTED_HV;
3799         goto common;
3800     case SVt_PVAV:
3801         location = (SV **) &GvAV(dstr);
3802         import_flag = GVf_IMPORTED_AV;
3803         goto common;
3804     case SVt_PVIO:
3805         location = (SV **) &GvIOp(dstr);
3806         goto common;
3807     case SVt_PVFM:
3808         location = (SV **) &GvFORM(dstr);
3809         goto common;
3810     default:
3811         location = &GvSV(dstr);
3812         import_flag = GVf_IMPORTED_SV;
3813     common:
3814         if (intro) {
3815             if (stype == SVt_PVCV) {
3816                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3817                 if (GvCVGEN(dstr)) {
3818                     SvREFCNT_dec(GvCV(dstr));
3819                     GvCV_set(dstr, NULL);
3820                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3821                 }
3822             }
3823             SAVEGENERICSV(*location);
3824         }
3825         else
3826             dref = *location;
3827         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3828             CV* const cv = MUTABLE_CV(*location);
3829             if (cv) {
3830                 if (!GvCVGEN((const GV *)dstr) &&
3831                     (CvROOT(cv) || CvXSUB(cv)))
3832                     {
3833                         /* Redefining a sub - warning is mandatory if
3834                            it was a const and its value changed. */
3835                         if (CvCONST(cv) && CvCONST((const CV *)sref)
3836                             && cv_const_sv(cv)
3837                             == cv_const_sv((const CV *)sref)) {
3838                             NOOP;
3839                             /* They are 2 constant subroutines generated from
3840                                the same constant. This probably means that
3841                                they are really the "same" proxy subroutine
3842                                instantiated in 2 places. Most likely this is
3843                                when a constant is exported twice.  Don't warn.
3844                             */
3845                         }
3846                         else if (ckWARN(WARN_REDEFINE)
3847                                  || (CvCONST(cv)
3848                                      && (!CvCONST((const CV *)sref)
3849                                          || sv_cmp(cv_const_sv(cv),
3850                                                    cv_const_sv((const CV *)
3851                                                                sref))))) {
3852                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3853                                         (const char *)
3854                                         (CvCONST(cv)
3855                                          ? "Constant subroutine %s::%s redefined"
3856                                          : "Subroutine %s::%s redefined"),
3857                                         HvNAME_get(GvSTASH((const GV *)dstr)),
3858                                         GvENAME(MUTABLE_GV(dstr)));
3859                         }
3860                     }
3861                 if (!intro)
3862                     cv_ckproto_len(cv, (const GV *)dstr,
3863                                    SvPOK(sref) ? SvPVX_const(sref) : NULL,
3864                                    SvPOK(sref) ? SvCUR(sref) : 0);
3865             }
3866             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3867             GvASSUMECV_on(dstr);
3868             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3869         }
3870         *location = sref;
3871         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3872             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3873             GvFLAGS(dstr) |= import_flag;
3874         }
3875         if (stype == SVt_PVHV) {
3876             const char * const name = GvNAME((GV*)dstr);
3877             const STRLEN len = GvNAMELEN(dstr);
3878             if (
3879                 (
3880                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3881                 || (len == 1 && name[0] == ':')
3882                 )
3883              && (!dref || HvENAME_get(dref))
3884             ) {
3885                 mro_package_moved(
3886                     (HV *)sref, (HV *)dref,
3887                     (GV *)dstr, 0
3888                 );
3889             }
3890         }
3891         else if (
3892             stype == SVt_PVAV && sref != dref
3893          && strEQ(GvNAME((GV*)dstr), "ISA")
3894          /* The stash may have been detached from the symbol table, so
3895             check its name before doing anything. */
3896          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3897         ) {
3898             MAGIC *mg;
3899             MAGIC * const omg = dref && SvSMAGICAL(dref)
3900                                  ? mg_find(dref, PERL_MAGIC_isa)
3901                                  : NULL;
3902             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3903                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3904                     AV * const ary = newAV();
3905                     av_push(ary, mg->mg_obj); /* takes the refcount */
3906                     mg->mg_obj = (SV *)ary;
3907                 }
3908                 if (omg) {
3909                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3910                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3911                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3912                         while (items--)
3913                             av_push(
3914                              (AV *)mg->mg_obj,
3915                              SvREFCNT_inc_simple_NN(*svp++)
3916                             );
3917                     }
3918                     else
3919                         av_push(
3920                          (AV *)mg->mg_obj,
3921                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3922                         );
3923                 }
3924                 else
3925                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3926             }
3927             else
3928             {
3929                 sv_magic(
3930                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3931                 );
3932                 mg = mg_find(sref, PERL_MAGIC_isa);
3933             }
3934             /* Since the *ISA assignment could have affected more than
3935                one stash, don’t call mro_isa_changed_in directly, but let
3936                magic_clearisa do it for us, as it already has the logic for
3937                dealing with globs vs arrays of globs. */
3938             assert(mg);
3939             Perl_magic_clearisa(aTHX_ NULL, mg);
3940         }
3941         break;
3942     }
3943     SvREFCNT_dec(dref);
3944     if (SvTAINTED(sstr))
3945         SvTAINT(dstr);
3946     return;
3947 }
3948
3949 void
3950 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3951 {
3952     dVAR;
3953     register U32 sflags;
3954     register int dtype;
3955     register svtype stype;
3956
3957     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3958
3959     if (sstr == dstr)
3960         return;
3961
3962     if (SvIS_FREED(dstr)) {
3963         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3964                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3965     }
3966     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3967     if (!sstr)
3968         sstr = &PL_sv_undef;
3969     if (SvIS_FREED(sstr)) {
3970         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3971                    (void*)sstr, (void*)dstr);
3972     }
3973     stype = SvTYPE(sstr);
3974     dtype = SvTYPE(dstr);
3975
3976     (void)SvAMAGIC_off(dstr);
3977     if ( SvVOK(dstr) )
3978     {
3979         /* need to nuke the magic */
3980         mg_free(dstr);
3981     }
3982
3983     /* There's a lot of redundancy below but we're going for speed here */
3984
3985     switch (stype) {
3986     case SVt_NULL:
3987       undef_sstr:
3988         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3989             (void)SvOK_off(dstr);
3990             return;
3991         }
3992         break;
3993     case SVt_IV:
3994         if (SvIOK(sstr)) {
3995             switch (dtype) {
3996             case SVt_NULL:
3997                 sv_upgrade(dstr, SVt_IV);
3998                 break;
3999             case SVt_NV:
4000             case SVt_PV:
4001                 sv_upgrade(dstr, SVt_PVIV);
4002                 break;
4003             case SVt_PVGV:
4004             case SVt_PVLV:
4005                 goto end_of_first_switch;
4006             }
4007             (void)SvIOK_only(dstr);
4008             SvIV_set(dstr,  SvIVX(sstr));
4009             if (SvIsUV(sstr))
4010                 SvIsUV_on(dstr);
4011             /* SvTAINTED can only be true if the SV has taint magic, which in
4012                turn means that the SV type is PVMG (or greater). This is the
4013                case statement for SVt_IV, so this cannot be true (whatever gcov
4014                may say).  */
4015             assert(!SvTAINTED(sstr));
4016             return;
4017         }
4018         if (!SvROK(sstr))
4019             goto undef_sstr;
4020         if (dtype < SVt_PV && dtype != SVt_IV)
4021             sv_upgrade(dstr, SVt_IV);
4022         break;
4023
4024     case SVt_NV:
4025         if (SvNOK(sstr)) {
4026             switch (dtype) {
4027             case SVt_NULL:
4028             case SVt_IV:
4029                 sv_upgrade(dstr, SVt_NV);
4030                 break;
4031             case SVt_PV:
4032             case SVt_PVIV:
4033                 sv_upgrade(dstr, SVt_PVNV);
4034                 break;
4035             case SVt_PVGV:
4036             case SVt_PVLV:
4037                 goto end_of_first_switch;
4038             }
4039             SvNV_set(dstr, SvNVX(sstr));
4040             (void)SvNOK_only(dstr);
4041             /* SvTAINTED can only be true if the SV has taint magic, which in
4042                turn means that the SV type is PVMG (or greater). This is the
4043                case statement for SVt_NV, so this cannot be true (whatever gcov
4044                may say).  */
4045             assert(!SvTAINTED(sstr));
4046             return;
4047         }
4048         goto undef_sstr;
4049
4050     case SVt_PVFM:
4051 #ifdef PERL_OLD_COPY_ON_WRITE
4052         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4053             if (dtype < SVt_PVIV)
4054                 sv_upgrade(dstr, SVt_PVIV);
4055             break;
4056         }
4057         /* Fall through */
4058 #endif
4059     case SVt_PV:
4060         if (dtype < SVt_PV)
4061             sv_upgrade(dstr, SVt_PV);
4062         break;
4063     case SVt_PVIV:
4064         if (dtype < SVt_PVIV)
4065             sv_upgrade(dstr, SVt_PVIV);
4066         break;
4067     case SVt_PVNV:
4068         if (dtype < SVt_PVNV)
4069             sv_upgrade(dstr, SVt_PVNV);
4070         break;
4071     default:
4072         {
4073         const char * const type = sv_reftype(sstr,0);
4074         if (PL_op)
4075             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4076         else
4077             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4078         }
4079         break;
4080
4081     case SVt_REGEXP:
4082         if (dtype < SVt_REGEXP)
4083             sv_upgrade(dstr, SVt_REGEXP);
4084         break;
4085
4086         /* case SVt_BIND: */
4087     case SVt_PVLV:
4088     case SVt_PVGV:
4089         /* SvVALID means that this PVGV is playing at being an FBM.  */
4090
4091     case SVt_PVMG:
4092         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4093             mg_get(sstr);
4094             if (SvTYPE(sstr) != stype)
4095                 stype = SvTYPE(sstr);
4096         }
4097         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4098                     glob_assign_glob(dstr, sstr, dtype);
4099                     return;
4100         }
4101         if (stype == SVt_PVLV)
4102             SvUPGRADE(dstr, SVt_PVNV);
4103         else
4104             SvUPGRADE(dstr, (svtype)stype);
4105     }
4106  end_of_first_switch:
4107
4108     /* dstr may have been upgraded.  */
4109     dtype = SvTYPE(dstr);
4110     sflags = SvFLAGS(sstr);
4111
4112     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
4113         /* Assigning to a subroutine sets the prototype.  */
4114         if (SvOK(sstr)) {
4115             STRLEN len;
4116             const char *const ptr = SvPV_const(sstr, len);
4117
4118             SvGROW(dstr, len + 1);
4119             Copy(ptr, SvPVX(dstr), len + 1, char);
4120             SvCUR_set(dstr, len);
4121             SvPOK_only(dstr);
4122             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4123         } else {
4124             SvOK_off(dstr);
4125         }
4126     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4127         const char * const type = sv_reftype(dstr,0);
4128         if (PL_op)
4129             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4130         else
4131             Perl_croak(aTHX_ "Cannot copy to %s", type);
4132     } else if (sflags & SVf_ROK) {
4133         if (isGV_with_GP(dstr)
4134             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4135             sstr = SvRV(sstr);
4136             if (sstr == dstr) {
4137                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4138                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4139                 {
4140                     GvIMPORTED_on(dstr);
4141                 }
4142                 GvMULTI_on(dstr);
4143                 return;
4144             }
4145             glob_assign_glob(dstr, sstr, dtype);
4146             return;
4147         }
4148
4149         if (dtype >= SVt_PV) {
4150             if (isGV_with_GP(dstr)) {
4151                 glob_assign_ref(dstr, sstr);
4152                 return;
4153             }
4154             if (SvPVX_const(dstr)) {
4155                 SvPV_free(dstr);
4156                 SvLEN_set(dstr, 0);
4157                 SvCUR_set(dstr, 0);
4158             }
4159         }
4160         (void)SvOK_off(dstr);
4161         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4162         SvFLAGS(dstr) |= sflags & SVf_ROK;
4163         assert(!(sflags & SVp_NOK));
4164         assert(!(sflags & SVp_IOK));
4165         assert(!(sflags & SVf_NOK));
4166         assert(!(sflags & SVf_IOK));
4167     }
4168     else if (isGV_with_GP(dstr)) {
4169         if (!(sflags & SVf_OK)) {
4170             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4171                            "Undefined value assigned to typeglob");
4172         }
4173         else {
4174             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
4175             if (dstr != (const SV *)gv) {
4176                 const char * const name = GvNAME((const GV *)dstr);
4177                 const STRLEN len = GvNAMELEN(dstr);
4178                 HV *old_stash = NULL;
4179                 bool reset_isa = FALSE;
4180                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4181                  || (len == 1 && name[0] == ':')) {
4182                     /* Set aside the old stash, so we can reset isa caches
4183                        on its subclasses. */
4184                     if((old_stash = GvHV(dstr))) {
4185                         /* Make sure we do not lose it early. */
4186                         SvREFCNT_inc_simple_void_NN(
4187                          sv_2mortal((SV *)old_stash)
4188                         );
4189                     }
4190                     reset_isa = TRUE;
4191                 }
4192
4193                 if (GvGP(dstr))
4194                     gp_free(MUTABLE_GV(dstr));
4195                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4196
4197                 if (reset_isa) {
4198                     HV * const stash = GvHV(dstr);
4199                     if(
4200                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4201                     )
4202                         mro_package_moved(
4203                          stash, old_stash,
4204                          (GV *)dstr, 0
4205                         );
4206                 }
4207             }
4208         }
4209     }
4210     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4211         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4212     }
4213     else if (sflags & SVp_POK) {
4214         bool isSwipe = 0;
4215
4216         /*
4217          * Check to see if we can just swipe the string.  If so, it's a
4218          * possible small lose on short strings, but a big win on long ones.
4219          * It might even be a win on short strings if SvPVX_const(dstr)
4220          * has to be allocated and SvPVX_const(sstr) has to be freed.
4221          * Likewise if we can set up COW rather than doing an actual copy, we
4222          * drop to the else clause, as the swipe code and the COW setup code
4223          * have much in common.
4224          */
4225
4226         /* Whichever path we take through the next code, we want this true,
4227            and doing it now facilitates the COW check.  */
4228         (void)SvPOK_only(dstr);
4229
4230         if (
4231             /* If we're already COW then this clause is not true, and if COW
4232                is allowed then we drop down to the else and make dest COW 
4233                with us.  If caller hasn't said that we're allowed to COW
4234                shared hash keys then we don't do the COW setup, even if the
4235                source scalar is a shared hash key scalar.  */
4236             (((flags & SV_COW_SHARED_HASH_KEYS)
4237                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4238                : 1 /* If making a COW copy is forbidden then the behaviour we
4239                        desire is as if the source SV isn't actually already
4240                        COW, even if it is.  So we act as if the source flags
4241                        are not COW, rather than actually testing them.  */
4242               )
4243 #ifndef PERL_OLD_COPY_ON_WRITE
4244              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4245                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4246                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4247                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4248                 but in turn, it's somewhat dead code, never expected to go
4249                 live, but more kept as a placeholder on how to do it better
4250                 in a newer implementation.  */
4251              /* If we are COW and dstr is a suitable target then we drop down
4252                 into the else and make dest a COW of us.  */
4253              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4254 #endif
4255              )
4256             &&
4257             !(isSwipe =
4258                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4259                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4260                  (!(flags & SV_NOSTEAL)) &&
4261                                         /* and we're allowed to steal temps */
4262                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4263                  SvLEN(sstr))             /* and really is a string */
4264 #ifdef PERL_OLD_COPY_ON_WRITE
4265             && ((flags & SV_COW_SHARED_HASH_KEYS)
4266                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4267                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4268                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4269                 : 1)
4270 #endif
4271             ) {
4272             /* Failed the swipe test, and it's not a shared hash key either.
4273                Have to copy the string.  */
4274             STRLEN len = SvCUR(sstr);
4275             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4276             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4277             SvCUR_set(dstr, len);
4278             *SvEND(dstr) = '\0';
4279         } else {
4280             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4281                be true in here.  */
4282             /* Either it's a shared hash key, or it's suitable for
4283                copy-on-write or we can swipe the string.  */
4284             if (DEBUG_C_TEST) {
4285                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4286                 sv_dump(sstr);
4287                 sv_dump(dstr);
4288             }
4289 #ifdef PERL_OLD_COPY_ON_WRITE
4290             if (!isSwipe) {
4291                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4292                     != (SVf_FAKE | SVf_READONLY)) {
4293                     SvREADONLY_on(sstr);
4294                     SvFAKE_on(sstr);
4295                     /* Make the source SV into a loop of 1.
4296                        (about to become 2) */
4297                     SV_COW_NEXT_SV_SET(sstr, sstr);
4298                 }
4299             }
4300 #endif
4301             /* Initial code is common.  */
4302             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4303                 SvPV_free(dstr);
4304             }
4305
4306             if (!isSwipe) {
4307                 /* making another shared SV.  */
4308                 STRLEN cur = SvCUR(sstr);
4309                 STRLEN len = SvLEN(sstr);
4310 #ifdef PERL_OLD_COPY_ON_WRITE
4311                 if (len) {
4312                     assert (SvTYPE(dstr) >= SVt_PVIV);
4313                     /* SvIsCOW_normal */
4314                     /* splice us in between source and next-after-source.  */
4315                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4316                     SV_COW_NEXT_SV_SET(sstr, dstr);
4317                     SvPV_set(dstr, SvPVX_mutable(sstr));
4318                 } else
4319 #endif
4320                 {
4321                     /* SvIsCOW_shared_hash */
4322                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4323                                           "Copy on write: Sharing hash\n"));
4324
4325                     assert (SvTYPE(dstr) >= SVt_PV);
4326                     SvPV_set(dstr,
4327                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4328                 }
4329                 SvLEN_set(dstr, len);
4330                 SvCUR_set(dstr, cur);
4331                 SvREADONLY_on(dstr);
4332                 SvFAKE_on(dstr);
4333             }
4334             else
4335                 {       /* Passes the swipe test.  */
4336                 SvPV_set(dstr, SvPVX_mutable(sstr));
4337                 SvLEN_set(dstr, SvLEN(sstr));
4338                 SvCUR_set(dstr, SvCUR(sstr));
4339
4340                 SvTEMP_off(dstr);
4341                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4342                 SvPV_set(sstr, NULL);
4343                 SvLEN_set(sstr, 0);
4344                 SvCUR_set(sstr, 0);
4345                 SvTEMP_off(sstr);
4346             }
4347         }
4348         if (sflags & SVp_NOK) {
4349             SvNV_set(dstr, SvNVX(sstr));
4350         }
4351         if (sflags & SVp_IOK) {
4352             SvIV_set(dstr, SvIVX(sstr));
4353             /* Must do this otherwise some other overloaded use of 0x80000000
4354                gets confused. I guess SVpbm_VALID */
4355             if (sflags & SVf_IVisUV)
4356                 SvIsUV_on(dstr);
4357         }
4358         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4359         {
4360             const MAGIC * const smg = SvVSTRING_mg(sstr);
4361             if (smg) {
4362                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4363                          smg->mg_ptr, smg->mg_len);
4364                 SvRMAGICAL_on(dstr);
4365             }
4366         }
4367     }
4368     else if (sflags & (SVp_IOK|SVp_NOK)) {
4369         (void)SvOK_off(dstr);
4370         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4371         if (sflags & SVp_IOK) {
4372             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4373             SvIV_set(dstr, SvIVX(sstr));
4374         }
4375         if (sflags & SVp_NOK) {
4376             SvNV_set(dstr, SvNVX(sstr));
4377         }
4378     }
4379     else {
4380         if (isGV_with_GP(sstr)) {
4381             /* This stringification rule for globs is spread in 3 places.
4382                This feels bad. FIXME.  */
4383             const U32 wasfake = sflags & SVf_FAKE;
4384
4385             /* FAKE globs can get coerced, so need to turn this off
4386                temporarily if it is on.  */
4387             SvFAKE_off(sstr);
4388             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4389             SvFLAGS(sstr) |= wasfake;
4390         }
4391         else
4392             (void)SvOK_off(dstr);
4393     }
4394     if (SvTAINTED(sstr))
4395         SvTAINT(dstr);
4396 }
4397
4398 /*
4399 =for apidoc sv_setsv_mg
4400
4401 Like C<sv_setsv>, but also handles 'set' magic.
4402
4403 =cut
4404 */
4405
4406 void
4407 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4408 {
4409     PERL_ARGS_ASSERT_SV_SETSV_MG;
4410
4411     sv_setsv(dstr,sstr);
4412     SvSETMAGIC(dstr);
4413 }
4414
4415 #ifdef PERL_OLD_COPY_ON_WRITE
4416 SV *
4417 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4418 {
4419     STRLEN cur = SvCUR(sstr);
4420     STRLEN len = SvLEN(sstr);
4421     register char *new_pv;
4422
4423     PERL_ARGS_ASSERT_SV_SETSV_COW;
4424
4425     if (DEBUG_C_TEST) {
4426         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4427                       (void*)sstr, (void*)dstr);
4428         sv_dump(sstr);
4429         if (dstr)
4430                     sv_dump(dstr);
4431     }
4432
4433     if (dstr) {
4434         if (SvTHINKFIRST(dstr))
4435             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4436         else if (SvPVX_const(dstr))
4437             Safefree(SvPVX_const(dstr));
4438     }
4439     else
4440         new_SV(dstr);
4441     SvUPGRADE(dstr, SVt_PVIV);
4442
4443     assert (SvPOK(sstr));
4444     assert (SvPOKp(sstr));
4445     assert (!SvIOK(sstr));
4446     assert (!SvIOKp(sstr));
4447     assert (!SvNOK(sstr));
4448     assert (!SvNOKp(sstr));
4449
4450     if (SvIsCOW(sstr)) {
4451
4452         if (SvLEN(sstr) == 0) {
4453             /* source is a COW shared hash key.  */
4454             DEBUG_C(PerlIO_printf(Perl_debug_log,
4455                                   "Fast copy on write: Sharing hash\n"));
4456             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4457             goto common_exit;
4458         }
4459         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4460     } else {
4461         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4462         SvUPGRADE(sstr, SVt_PVIV);
4463         SvREADONLY_on(sstr);
4464         SvFAKE_on(sstr);
4465         DEBUG_C(PerlIO_printf(Perl_debug_log,
4466                               "Fast copy on write: Converting sstr to COW\n"));
4467         SV_COW_NEXT_SV_SET(dstr, sstr);
4468     }
4469     SV_COW_NEXT_SV_SET(sstr, dstr);
4470     new_pv = SvPVX_mutable(sstr);
4471
4472   common_exit:
4473     SvPV_set(dstr, new_pv);
4474     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4475     if (SvUTF8(sstr))
4476         SvUTF8_on(dstr);
4477     SvLEN_set(dstr, len);
4478     SvCUR_set(dstr, cur);
4479     if (DEBUG_C_TEST) {
4480         sv_dump(dstr);
4481     }
4482     return dstr;
4483 }
4484 #endif
4485
4486 /*
4487 =for apidoc sv_setpvn
4488
4489 Copies a string into an SV.  The C<len> parameter indicates the number of
4490 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4491 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4492
4493 =cut
4494 */
4495
4496 void
4497 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4498 {
4499     dVAR;
4500     register char *dptr;
4501
4502     PERL_ARGS_ASSERT_SV_SETPVN;
4503
4504     SV_CHECK_THINKFIRST_COW_DROP(sv);
4505     if (!ptr) {
4506         (void)SvOK_off(sv);
4507         return;
4508     }
4509     else {
4510         /* len is STRLEN which is unsigned, need to copy to signed */
4511         const IV iv = len;
4512         if (iv < 0)
4513             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4514     }
4515     SvUPGRADE(sv, SVt_PV);
4516
4517     dptr = SvGROW(sv, len + 1);
4518     Move(ptr,dptr,len,char);
4519     dptr[len] = '\0';
4520     SvCUR_set(sv, len);
4521     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4522     SvTAINT(sv);
4523 }
4524
4525 /*
4526 =for apidoc sv_setpvn_mg
4527
4528 Like C<sv_setpvn>, but also handles 'set' magic.
4529
4530 =cut
4531 */
4532
4533 void
4534 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4535 {
4536     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4537
4538     sv_setpvn(sv,ptr,len);
4539     SvSETMAGIC(sv);
4540 }
4541
4542 /*
4543 =for apidoc sv_setpv
4544
4545 Copies a string into an SV.  The string must be null-terminated.  Does not
4546 handle 'set' magic.  See C<sv_setpv_mg>.
4547
4548 =cut
4549 */
4550
4551 void
4552 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4553 {
4554     dVAR;
4555     register STRLEN len;
4556
4557     PERL_ARGS_ASSERT_SV_SETPV;
4558
4559     SV_CHECK_THINKFIRST_COW_DROP(sv);
4560     if (!ptr) {
4561         (void)SvOK_off(sv);
4562         return;
4563     }
4564     len = strlen(ptr);
4565     SvUPGRADE(sv, SVt_PV);
4566
4567     SvGROW(sv, len + 1);
4568     Move(ptr,SvPVX(sv),len+1,char);
4569     SvCUR_set(sv, len);
4570     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4571     SvTAINT(sv);
4572 }
4573
4574 /*
4575 =for apidoc sv_setpv_mg
4576
4577 Like C<sv_setpv>, but also handles 'set' magic.
4578
4579 =cut
4580 */
4581
4582 void
4583 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4584 {
4585     PERL_ARGS_ASSERT_SV_SETPV_MG;
4586
4587     sv_setpv(sv,ptr);
4588     SvSETMAGIC(sv);
4589 }
4590
4591 /*
4592 =for apidoc sv_usepvn_flags
4593
4594 Tells an SV to use C<ptr> to find its string value.  Normally the
4595 string is stored inside the SV but sv_usepvn allows the SV to use an
4596 outside string.  The C<ptr> should point to memory that was allocated
4597 by C<malloc>.  The string length, C<len>, must be supplied.  By default
4598 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4599 so that pointer should not be freed or used by the programmer after
4600 giving it to sv_usepvn, and neither should any pointers from "behind"
4601 that pointer (e.g. ptr + 1) be used.
4602
4603 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4604 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4605 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4606 C<len>, and already meets the requirements for storing in C<SvPVX>)
4607
4608 =cut
4609 */
4610
4611 void
4612 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4613 {
4614     dVAR;
4615     STRLEN allocate;
4616
4617     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4618
4619     SV_CHECK_THINKFIRST_COW_DROP(sv);
4620     SvUPGRADE(sv, SVt_PV);
4621     if (!ptr) {
4622         (void)SvOK_off(sv);
4623         if (flags & SV_SMAGIC)
4624             SvSETMAGIC(sv);
4625         return;
4626     }
4627     if (SvPVX_const(sv))
4628         SvPV_free(sv);
4629
4630 #ifdef DEBUGGING
4631     if (flags & SV_HAS_TRAILING_NUL)
4632         assert(ptr[len] == '\0');
4633 #endif
4634
4635     allocate = (flags & SV_HAS_TRAILING_NUL)
4636         ? len + 1 :
4637 #ifdef Perl_safesysmalloc_size
4638         len + 1;
4639 #else 
4640         PERL_STRLEN_ROUNDUP(len + 1);
4641 #endif
4642     if (flags & SV_HAS_TRAILING_NUL) {
4643         /* It's long enough - do nothing.
4644            Specifically Perl_newCONSTSUB is relying on this.  */
4645     } else {
4646 #ifdef DEBUGGING
4647         /* Force a move to shake out bugs in callers.  */
4648         char *new_ptr = (char*)safemalloc(allocate);
4649         Copy(ptr, new_ptr, len, char);
4650         PoisonFree(ptr,len,char);
4651         Safefree(ptr);
4652         ptr = new_ptr;
4653 #else
4654         ptr = (char*) saferealloc (ptr, allocate);
4655 #endif
4656     }
4657 #ifdef Perl_safesysmalloc_size
4658     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4659 #else
4660     SvLEN_set(sv, allocate);
4661 #endif
4662     SvCUR_set(sv, len);
4663     SvPV_set(sv, ptr);
4664     if (!(flags & SV_HAS_TRAILING_NUL)) {
4665         ptr[len] = '\0';
4666     }
4667     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4668     SvTAINT(sv);
4669     if (flags & SV_SMAGIC)
4670         SvSETMAGIC(sv);
4671 }
4672
4673 #ifdef PERL_OLD_COPY_ON_WRITE
4674 /* Need to do this *after* making the SV normal, as we need the buffer
4675    pointer to remain valid until after we've copied it.  If we let go too early,
4676    another thread could invalidate it by unsharing last of the same hash key
4677    (which it can do by means other than releasing copy-on-write Svs)
4678    or by changing the other copy-on-write SVs in the loop.  */
4679 STATIC void
4680 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4681 {
4682     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4683
4684     { /* this SV was SvIsCOW_normal(sv) */
4685          /* we need to find the SV pointing to us.  */
4686         SV *current = SV_COW_NEXT_SV(after);
4687
4688         if (current == sv) {
4689             /* The SV we point to points back to us (there were only two of us
4690                in the loop.)
4691                Hence other SV is no longer copy on write either.  */
4692             SvFAKE_off(after);
4693             SvREADONLY_off(after);
4694         } else {
4695             /* We need to follow the pointers around the loop.  */
4696             SV *next;
4697             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4698                 assert (next);
4699                 current = next;
4700                  /* don't loop forever if the structure is bust, and we have
4701                     a pointer into a closed loop.  */
4702                 assert (current != after);
4703                 assert (SvPVX_const(current) == pvx);
4704             }
4705             /* Make the SV before us point to the SV after us.  */
4706             SV_COW_NEXT_SV_SET(current, after);
4707         }
4708     }
4709 }
4710 #endif
4711 /*
4712 =for apidoc sv_force_normal_flags
4713
4714 Undo various types of fakery on an SV: if the PV is a shared string, make
4715 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4716 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4717 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4718 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4719 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4720 set to some other value.) In addition, the C<flags> parameter gets passed to
4721 C<sv_unref_flags()> when unreffing. C<sv_force_normal> calls this function
4722 with flags set to 0.
4723
4724 =cut
4725 */
4726
4727 void
4728 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4729 {
4730     dVAR;
4731
4732     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4733
4734 #ifdef PERL_OLD_COPY_ON_WRITE
4735     if (SvREADONLY(sv)) {
4736         if (SvFAKE(sv)) {
4737             const char * const pvx = SvPVX_const(sv);
4738             const STRLEN len = SvLEN(sv);
4739             const STRLEN cur = SvCUR(sv);
4740             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4741                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4742                we'll fail an assertion.  */
4743             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4744
4745             if (DEBUG_C_TEST) {
4746                 PerlIO_printf(Perl_debug_log,
4747                               "Copy on write: Force normal %ld\n",
4748                               (long) flags);
4749                 sv_dump(sv);
4750             }
4751             SvFAKE_off(sv);
4752             SvREADONLY_off(sv);
4753             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4754             SvPV_set(sv, NULL);
4755             SvLEN_set(sv, 0);
4756             if (flags & SV_COW_DROP_PV) {
4757                 /* OK, so we don't need to copy our buffer.  */
4758                 SvPOK_off(sv);
4759             } else {
4760                 SvGROW(sv, cur + 1);
4761                 Move(pvx,SvPVX(sv),cur,char);
4762                 SvCUR_set(sv, cur);
4763                 *SvEND(sv) = '\0';
4764             }
4765             if (len) {
4766                 sv_release_COW(sv, pvx, next);
4767             } else {
4768                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4769             }
4770             if (DEBUG_C_TEST) {
4771                 sv_dump(sv);
4772             }
4773         }
4774         else if (IN_PERL_RUNTIME)
4775             Perl_croak_no_modify(aTHX);
4776     }
4777 #else
4778     if (SvREADONLY(sv)) {
4779         if (SvFAKE(sv)) {
4780             const char * const pvx = SvPVX_const(sv);
4781             const STRLEN len = SvCUR(sv);
4782             SvFAKE_off(sv);
4783             SvREADONLY_off(sv);
4784             SvPV_set(sv, NULL);
4785             SvLEN_set(sv, 0);
4786             SvGROW(sv, len + 1);
4787             Move(pvx,SvPVX(sv),len,char);
4788             *SvEND(sv) = '\0';
4789             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4790         }
4791         else if (IN_PERL_RUNTIME)
4792             Perl_croak_no_modify(aTHX);
4793     }
4794 #endif
4795     if (SvROK(sv))
4796         sv_unref_flags(sv, flags);
4797     else if (SvFAKE(sv) && isGV_with_GP(sv))
4798         sv_unglob(sv);
4799     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4800         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4801            to sv_unglob. We only need it here, so inline it.  */
4802         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4803         SV *const temp = newSV_type(new_type);
4804         void *const temp_p = SvANY(sv);
4805
4806         if (new_type == SVt_PVMG) {
4807             SvMAGIC_set(temp, SvMAGIC(sv));
4808             SvMAGIC_set(sv, NULL);
4809             SvSTASH_set(temp, SvSTASH(sv));
4810             SvSTASH_set(sv, NULL);
4811         }
4812         SvCUR_set(temp, SvCUR(sv));
4813         /* Remember that SvPVX is in the head, not the body. */
4814         if (SvLEN(temp)) {
4815             SvLEN_set(temp, SvLEN(sv));
4816             /* This signals "buffer is owned by someone else" in sv_clear,
4817                which is the least effort way to stop it freeing the buffer.
4818             */
4819             SvLEN_set(sv, SvLEN(sv)+1);
4820         } else {
4821             /* Their buffer is already owned by someone else. */
4822             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4823             SvLEN_set(temp, SvCUR(sv)+1);
4824         }
4825
4826         /* Now swap the rest of the bodies. */
4827
4828         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4829         SvFLAGS(sv) |= new_type;
4830         SvANY(sv) = SvANY(temp);
4831
4832         SvFLAGS(temp) &= ~(SVTYPEMASK);
4833         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4834         SvANY(temp) = temp_p;
4835
4836         SvREFCNT_dec(temp);
4837     }
4838 }
4839
4840 /*
4841 =for apidoc sv_chop
4842
4843 Efficient removal of characters from the beginning of the string buffer.
4844 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4845 the string buffer.  The C<ptr> becomes the first character of the adjusted
4846 string. Uses the "OOK hack".
4847 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4848 refer to the same chunk of data.
4849
4850 =cut
4851 */
4852
4853 void
4854 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4855 {
4856     STRLEN delta;
4857     STRLEN old_delta;
4858     U8 *p;
4859 #ifdef DEBUGGING
4860     const U8 *real_start;
4861 #endif
4862     STRLEN max_delta;
4863
4864     PERL_ARGS_ASSERT_SV_CHOP;
4865
4866     if (!ptr || !SvPOKp(sv))
4867         return;
4868     delta = ptr - SvPVX_const(sv);
4869     if (!delta) {
4870         /* Nothing to do.  */
4871         return;
4872     }
4873     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4874        nothing uses the value of ptr any more.  */
4875     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4876     if (ptr <= SvPVX_const(sv))
4877         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4878                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4879     SV_CHECK_THINKFIRST(sv);
4880     if (delta > max_delta)
4881         Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4882                    SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4883                    SvPVX_const(sv) + max_delta);
4884
4885     if (!SvOOK(sv)) {
4886         if (!SvLEN(sv)) { /* make copy of shared string */
4887             const char *pvx = SvPVX_const(sv);
4888             const STRLEN len = SvCUR(sv);
4889             SvGROW(sv, len + 1);
4890             Move(pvx,SvPVX(sv),len,char);
4891             *SvEND(sv) = '\0';
4892         }
4893         SvFLAGS(sv) |= SVf_OOK;
4894         old_delta = 0;
4895     } else {
4896         SvOOK_offset(sv, old_delta);
4897     }
4898     SvLEN_set(sv, SvLEN(sv) - delta);
4899     SvCUR_set(sv, SvCUR(sv) - delta);
4900     SvPV_set(sv, SvPVX(sv) + delta);
4901
4902     p = (U8 *)SvPVX_const(sv);
4903
4904     delta += old_delta;
4905
4906 #ifdef DEBUGGING
4907     real_start = p - delta;
4908 #endif
4909
4910     assert(delta);
4911     if (delta < 0x100) {
4912         *--p = (U8) delta;
4913     } else {
4914         *--p = 0;
4915         p -= sizeof(STRLEN);
4916         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4917     }
4918
4919 #ifdef DEBUGGING
4920     /* Fill the preceding buffer with sentinals to verify that no-one is
4921        using it.  */
4922     while (p > real_start) {
4923         --p;
4924         *p = (U8)PTR2UV(p);
4925     }
4926 #endif
4927 }
4928
4929 /*
4930 =for apidoc sv_catpvn
4931
4932 Concatenates the string onto the end of the string which is in the SV.  The
4933 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4934 status set, then the bytes appended should be valid UTF-8.
4935 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4936
4937 =for apidoc sv_catpvn_flags
4938
4939 Concatenates the string onto the end of the string which is in the SV.  The
4940 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4941 status set, then the bytes appended should be valid UTF-8.
4942 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4943 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4944 in terms of this function.
4945
4946 =cut
4947 */
4948
4949 void
4950 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4951 {
4952     dVAR;
4953     STRLEN dlen;
4954     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4955
4956     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4957
4958     SvGROW(dsv, dlen + slen + 1);
4959     if (sstr == dstr)
4960         sstr = SvPVX_const(dsv);
4961     Move(sstr, SvPVX(dsv) + dlen, slen, char);
4962     SvCUR_set(dsv, SvCUR(dsv) + slen);
4963     *SvEND(dsv) = '\0';
4964     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4965     SvTAINT(dsv);
4966     if (flags & SV_SMAGIC)
4967         SvSETMAGIC(dsv);
4968 }
4969
4970 /*
4971 =for apidoc sv_catsv
4972
4973 Concatenates the string from SV C<ssv> onto the end of the string in
4974 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4975 not 'set' magic.  See C<sv_catsv_mg>.
4976
4977 =for apidoc sv_catsv_flags
4978
4979 Concatenates the string from SV C<ssv> onto the end of the string in
4980 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4981 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4982 and C<sv_catsv_nomg> are implemented in terms of this function.
4983
4984 =cut */
4985
4986 void
4987 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
4988 {
4989     dVAR;
4990  
4991     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4992
4993    if (ssv) {
4994         STRLEN slen;
4995         const char *spv = SvPV_flags_const(ssv, slen, flags);
4996         if (spv) {
4997             /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4998                 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4999                 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
5000                 get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
5001                 dsv->sv_flags doesn't have that bit set.
5002                 Andy Dougherty  12 Oct 2001
5003             */
5004             const I32 sutf8 = DO_UTF8(ssv);
5005             I32 dutf8;
5006
5007             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
5008                 mg_get(dsv);
5009             dutf8 = DO_UTF8(dsv);
5010
5011             if (dutf8 != sutf8) {
5012                 if (dutf8) {
5013                     /* Not modifying source SV, so taking a temporary copy. */
5014                     SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
5015
5016                     sv_utf8_upgrade(csv);
5017                     spv = SvPV_const(csv, slen);
5018                 }
5019                 else
5020                     /* Leave enough space for the cat that's about to happen */
5021                     sv_utf8_upgrade_flags_grow(dsv, 0, slen);
5022             }
5023             sv_catpvn_nomg(dsv, spv, slen);
5024         }
5025     }
5026     if (flags & SV_SMAGIC)
5027         SvSETMAGIC(dsv);
5028 }
5029
5030 /*
5031 =for apidoc sv_catpv
5032
5033 Concatenates the string onto the end of the string which is in the SV.
5034 If the SV has the UTF-8 status set, then the bytes appended should be
5035 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5036
5037 =cut */
5038
5039 void
5040 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
5041 {
5042     dVAR;
5043     register STRLEN len;
5044     STRLEN tlen;
5045     char *junk;
5046
5047     PERL_ARGS_ASSERT_SV_CATPV;
5048
5049     if (!ptr)
5050         return;
5051     junk = SvPV_force(sv, tlen);
5052     len = strlen(ptr);
5053     SvGROW(sv, tlen + len + 1);
5054     if (ptr == junk)
5055         ptr = SvPVX_const(sv);
5056     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5057     SvCUR_set(sv, SvCUR(sv) + len);
5058     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5059     SvTAINT(sv);
5060 }
5061
5062 /*
5063 =for apidoc sv_catpv_flags
5064
5065 Concatenates the string onto the end of the string which is in the SV.
5066 If the SV has the UTF-8 status set, then the bytes appended should
5067 be valid UTF-8.  If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get>
5068 on the SVs if appropriate, else not.
5069
5070 =cut
5071 */
5072
5073 void
5074 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5075 {
5076     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5077     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5078 }
5079
5080 /*
5081 =for apidoc sv_catpv_mg
5082
5083 Like C<sv_catpv>, but also handles 'set' magic.
5084
5085 =cut
5086 */
5087
5088 void
5089 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
5090 {
5091     PERL_ARGS_ASSERT_SV_CATPV_MG;
5092
5093     sv_catpv(sv,ptr);
5094     SvSETMAGIC(sv);
5095 }
5096
5097 /*
5098 =for apidoc newSV
5099
5100 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5101 bytes of preallocated string space the SV should have.  An extra byte for a
5102 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5103 space is allocated.)  The reference count for the new SV is set to 1.
5104
5105 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5106 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5107 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5108 L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
5109 modules supporting older perls.
5110
5111 =cut
5112 */
5113
5114 SV *
5115 Perl_newSV(pTHX_ const STRLEN len)
5116 {
5117     dVAR;
5118     register SV *sv;
5119
5120     new_SV(sv);
5121     if (len) {
5122         sv_upgrade(sv, SVt_PV);
5123         SvGROW(sv, len + 1);
5124     }
5125     return sv;
5126 }
5127 /*
5128 =for apidoc sv_magicext
5129
5130 Adds magic to an SV, upgrading it if necessary. Applies the
5131 supplied vtable and returns a pointer to the magic added.
5132
5133 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5134 In particular, you can add magic to SvREADONLY SVs, and add more than
5135 one instance of the same 'how'.
5136
5137 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5138 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5139 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5140 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5141
5142 (This is now used as a subroutine by C<sv_magic>.)
5143
5144 =cut
5145 */
5146 MAGIC * 
5147 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5148                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5149 {
5150     dVAR;
5151     MAGIC* mg;
5152
5153     PERL_ARGS_ASSERT_SV_MAGICEXT;
5154
5155     SvUPGRADE(sv, SVt_PVMG);
5156     Newxz(mg, 1, MAGIC);
5157     mg->mg_moremagic = SvMAGIC(sv);
5158     SvMAGIC_set(sv, mg);
5159
5160     /* Sometimes a magic contains a reference loop, where the sv and
5161        object refer to each other.  To prevent a reference loop that
5162        would prevent such objects being freed, we look for such loops
5163        and if we find one we avoid incrementing the object refcount.
5164
5165        Note we cannot do this to avoid self-tie loops as intervening RV must
5166        have its REFCNT incremented to keep it in existence.
5167
5168     */
5169     if (!obj || obj == sv ||
5170         how == PERL_MAGIC_arylen ||
5171         how == PERL_MAGIC_symtab ||
5172         (SvTYPE(obj) == SVt_PVGV &&
5173             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5174              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5175              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5176     {
5177         mg->mg_obj = obj;
5178     }
5179     else {
5180         mg->mg_obj = SvREFCNT_inc_simple(obj);
5181         mg->mg_flags |= MGf_REFCOUNTED;
5182     }
5183
5184     /* Normal self-ties simply pass a null object, and instead of
5185        using mg_obj directly, use the SvTIED_obj macro to produce a
5186        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5187        with an RV obj pointing to the glob containing the PVIO.  In
5188        this case, to avoid a reference loop, we need to weaken the
5189        reference.
5190     */
5191
5192     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5193         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5194     {
5195       sv_rvweaken(obj);
5196     }
5197
5198     mg->mg_type = how;
5199     mg->mg_len = namlen;
5200     if (name) {
5201         if (namlen > 0)
5202             mg->mg_ptr = savepvn(name, namlen);
5203         else if (namlen == HEf_SVKEY) {
5204             /* Yes, this is casting away const. This is only for the case of
5205                HEf_SVKEY. I think we need to document this aberation of the
5206                constness of the API, rather than making name non-const, as
5207                that change propagating outwards a long way.  */
5208             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5209         } else
5210             mg->mg_ptr = (char *) name;
5211     }
5212     mg->mg_virtual = (MGVTBL *) vtable;
5213
5214     mg_magical(sv);
5215     if (SvGMAGICAL(sv))
5216         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5217     return mg;
5218 }
5219
5220 /*
5221 =for apidoc sv_magic
5222
5223 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5224 then adds a new magic item of type C<how> to the head of the magic list.
5225
5226 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5227 handling of the C<name> and C<namlen> arguments.
5228
5229 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5230 to add more than one instance of the same 'how'.
5231
5232 =cut
5233 */
5234
5235 void
5236 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5237              const char *const name, const I32 namlen)
5238 {
5239     dVAR;
5240     const MGVTBL *vtable;
5241     MAGIC* mg;
5242
5243     PERL_ARGS_ASSERT_SV_MAGIC;
5244
5245 #ifdef PERL_OLD_COPY_ON_WRITE
5246     if (SvIsCOW(sv))
5247         sv_force_normal_flags(sv, 0);
5248 #endif
5249     if (SvREADONLY(sv)) {
5250         if (
5251             /* its okay to attach magic to shared strings; the subsequent
5252              * upgrade to PVMG will unshare the string */
5253             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5254
5255             && IN_PERL_RUNTIME
5256             && how != PERL_MAGIC_regex_global
5257             && how != PERL_MAGIC_bm
5258             && how != PERL_MAGIC_fm
5259             && how != PERL_MAGIC_sv
5260             && how != PERL_MAGIC_backref
5261            )
5262         {
5263             Perl_croak_no_modify(aTHX);
5264         }
5265     }
5266     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5267         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5268             /* sv_magic() refuses to add a magic of the same 'how' as an
5269                existing one
5270              */
5271             if (how == PERL_MAGIC_taint) {
5272                 mg->mg_len |= 1;
5273                 /* Any scalar which already had taint magic on which someone
5274                    (erroneously?) did SvIOK_on() or similar will now be
5275                    incorrectly sporting public "OK" flags.  */
5276                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5277             }
5278             return;
5279         }
5280     }
5281
5282     switch (how) {
5283     case PERL_MAGIC_sv:
5284         vtable = &PL_vtbl_sv;
5285         break;
5286     case PERL_MAGIC_overload:
5287         vtable = &PL_vtbl_amagic;
5288         break;
5289     case PERL_MAGIC_overload_elem:
5290         vtable = &PL_vtbl_amagicelem;
5291         break;
5292     case PERL_MAGIC_overload_table:
5293         vtable = &PL_vtbl_ovrld;
5294         break;
5295     case PERL_MAGIC_bm:
5296         vtable = &PL_vtbl_bm;
5297         break;
5298     case PERL_MAGIC_regdata:
5299         vtable = &PL_vtbl_regdata;
5300         break;
5301     case PERL_MAGIC_regdatum:
5302         vtable = &PL_vtbl_regdatum;
5303         break;
5304     case PERL_MAGIC_env:
5305         vtable = &PL_vtbl_env;
5306         break;
5307     case PERL_MAGIC_fm:
5308         vtable = &PL_vtbl_fm;
5309         break;
5310     case PERL_MAGIC_envelem:
5311         vtable = &PL_vtbl_envelem;
5312         break;
5313     case PERL_MAGIC_regex_global:
5314         vtable = &PL_vtbl_mglob;
5315         break;
5316     case PERL_MAGIC_isa:
5317         vtable = &PL_vtbl_isa;
5318         break;
5319     case PERL_MAGIC_isaelem:
5320         vtable = &PL_vtbl_isaelem;
5321         break;
5322     case PERL_MAGIC_nkeys:
5323         vtable = &PL_vtbl_nkeys;
5324         break;
5325     case PERL_MAGIC_dbfile:
5326         vtable = NULL;
5327         break;
5328     case PERL_MAGIC_dbline:
5329         vtable = &PL_vtbl_dbline;
5330         break;
5331 #ifdef USE_LOCALE_COLLATE
5332     case PERL_MAGIC_collxfrm:
5333         vtable = &PL_vtbl_collxfrm;
5334         break;
5335 #endif /* USE_LOCALE_COLLATE */
5336     case PERL_MAGIC_tied:
5337         vtable = &PL_vtbl_pack;
5338         break;
5339     case PERL_MAGIC_tiedelem:
5340     case PERL_MAGIC_tiedscalar:
5341         vtable = &PL_vtbl_packelem;
5342         break;
5343     case PERL_MAGIC_qr:
5344         vtable = &PL_vtbl_regexp;
5345         break;
5346     case PERL_MAGIC_sig:
5347         vtable = &PL_vtbl_sig;
5348         break;
5349     case PERL_MAGIC_sigelem:
5350         vtable = &PL_vtbl_sigelem;
5351         break;
5352     case PERL_MAGIC_taint:
5353         vtable = &PL_vtbl_taint;
5354         break;
5355     case PERL_MAGIC_uvar:
5356         vtable = &PL_vtbl_uvar;
5357         break;
5358     case PERL_MAGIC_vec:
5359         vtable = &PL_vtbl_vec;
5360         break;
5361     case PERL_MAGIC_arylen_p:
5362     case PERL_MAGIC_rhash:
5363     case PERL_MAGIC_symtab:
5364     case PERL_MAGIC_vstring:
5365     case PERL_MAGIC_checkcall:
5366         vtable = NULL;
5367         break;
5368     case PERL_MAGIC_utf8:
5369         vtable = &PL_vtbl_utf8;
5370         break;
5371     case PERL_MAGIC_substr:
5372         vtable = &PL_vtbl_substr;
5373         break;
5374     case PERL_MAGIC_defelem:
5375         vtable = &PL_vtbl_defelem;
5376         break;
5377     case PERL_MAGIC_arylen:
5378         vtable = &PL_vtbl_arylen;
5379         break;
5380     case PERL_MAGIC_pos:
5381         vtable = &PL_vtbl_pos;
5382         break;
5383     case PERL_MAGIC_backref:
5384         vtable = &PL_vtbl_backref;
5385         break;
5386     case PERL_MAGIC_hintselem:
5387         vtable = &PL_vtbl_hintselem;
5388         break;
5389     case PERL_MAGIC_hints:
5390         vtable = &PL_vtbl_hints;
5391         break;
5392     case PERL_MAGIC_ext:
5393         /* Reserved for use by extensions not perl internals.           */
5394         /* Useful for attaching extension internal data to perl vars.   */
5395         /* Note that multiple extensions may clash if magical scalars   */
5396         /* etc holding private data from one are passed to another.     */
5397         vtable = NULL;
5398         break;
5399     default:
5400         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5401     }
5402
5403     /* Rest of work is done else where */
5404     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5405
5406     switch (how) {
5407     case PERL_MAGIC_taint:
5408         mg->mg_len = 1;
5409         break;
5410     case PERL_MAGIC_ext:
5411     case PERL_MAGIC_dbfile:
5412         SvRMAGICAL_on(sv);
5413         break;
5414     }
5415 }
5416
5417 static int
5418 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5419 {
5420     MAGIC* mg;
5421     MAGIC** mgp;
5422
5423     assert(flags <= 1);
5424
5425     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5426         return 0;
5427     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5428     for (mg = *mgp; mg; mg = *mgp) {
5429         const MGVTBL* const virt = mg->mg_virtual;
5430         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5431             *mgp = mg->mg_moremagic;
5432             if (virt && virt->svt_free)
5433                 virt->svt_free(aTHX_ sv, mg);
5434             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5435                 if (mg->mg_len > 0)
5436                     Safefree(mg->mg_ptr);
5437                 else if (mg->mg_len == HEf_SVKEY)
5438                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5439                 else if (mg->mg_type == PERL_MAGIC_utf8)
5440                     Safefree(mg->mg_ptr);
5441             }
5442             if (mg->mg_flags & MGf_REFCOUNTED)
5443                 SvREFCNT_dec(mg->mg_obj);
5444             Safefree(mg);
5445         }
5446         else
5447             mgp = &mg->mg_moremagic;
5448     }
5449     if (SvMAGIC(sv)) {
5450         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5451             mg_magical(sv);     /*    else fix the flags now */
5452     }
5453     else {
5454         SvMAGICAL_off(sv);
5455         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5456     }
5457     return 0;
5458 }
5459
5460 /*
5461 =for apidoc sv_unmagic
5462
5463 Removes all magic of type C<type> from an SV.
5464
5465 =cut
5466 */
5467
5468 int
5469 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5470 {
5471     PERL_ARGS_ASSERT_SV_UNMAGIC;
5472     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5473 }
5474
5475 /*
5476 =for apidoc sv_unmagicext
5477
5478 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5479
5480 =cut
5481 */
5482
5483 int
5484 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5485 {
5486     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5487     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5488 }
5489
5490 /*
5491 =for apidoc sv_rvweaken
5492
5493 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5494 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5495 push a back-reference to this RV onto the array of backreferences
5496 associated with that magic. If the RV is magical, set magic will be
5497 called after the RV is cleared.
5498
5499 =cut
5500 */
5501
5502 SV *
5503 Perl_sv_rvweaken(pTHX_ SV *const sv)
5504 {
5505     SV *tsv;
5506
5507     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5508
5509     if (!SvOK(sv))  /* let undefs pass */
5510         return sv;
5511     if (!SvROK(sv))
5512         Perl_croak(aTHX_ "Can't weaken a nonreference");
5513     else if (SvWEAKREF(sv)) {
5514         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5515         return sv;
5516     }
5517     tsv = SvRV(sv);
5518     Perl_sv_add_backref(aTHX_ tsv, sv);
5519     SvWEAKREF_on(sv);
5520     SvREFCNT_dec(tsv);
5521     return sv;
5522 }
5523
5524 /* Give tsv backref magic if it hasn't already got it, then push a
5525  * back-reference to sv onto the array associated with the backref magic.
5526  *
5527  * As an optimisation, if there's only one backref and it's not an AV,
5528  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5529  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5530  * active.)
5531  */
5532
5533 /* A discussion about the backreferences array and its refcount:
5534  *
5535  * The AV holding the backreferences is pointed to either as the mg_obj of
5536  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5537  * xhv_backreferences field. The array is created with a refcount
5538  * of 2. This means that if during global destruction the array gets
5539  * picked on before its parent to have its refcount decremented by the
5540  * random zapper, it won't actually be freed, meaning it's still there for
5541  * when its parent gets freed.
5542  *
5543  * When the parent SV is freed, the extra ref is killed by
5544  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5545  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5546  *
5547  * When a single backref SV is stored directly, it is not reference
5548  * counted.
5549  */
5550
5551 void
5552 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5553 {
5554     dVAR;
5555     SV **svp;
5556     AV *av = NULL;
5557     MAGIC *mg = NULL;
5558
5559     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5560
5561     /* find slot to store array or singleton backref */
5562
5563     if (SvTYPE(tsv) == SVt_PVHV) {
5564         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5565     } else {
5566         if (! ((mg =
5567             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5568         {
5569             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5570             mg = mg_find(tsv, PERL_MAGIC_backref);
5571         }
5572         svp = &(mg->mg_obj);
5573     }
5574
5575     /* create or retrieve the array */
5576
5577     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5578         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5579     ) {
5580         /* create array */
5581         av = newAV();
5582         AvREAL_off(av);
5583         SvREFCNT_inc_simple_void(av);
5584         /* av now has a refcnt of 2; see discussion above */
5585         if (*svp) {
5586             /* move single existing backref to the array */
5587             av_extend(av, 1);
5588             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5589         }
5590         *svp = (SV*)av;
5591         if (mg)
5592             mg->mg_flags |= MGf_REFCOUNTED;
5593     }
5594     else
5595         av = MUTABLE_AV(*svp);
5596
5597     if (!av) {
5598         /* optimisation: store single backref directly in HvAUX or mg_obj */
5599         *svp = sv;
5600         return;
5601     }
5602     /* push new backref */
5603     assert(SvTYPE(av) == SVt_PVAV);
5604     if (AvFILLp(av) >= AvMAX(av)) {
5605         av_extend(av, AvFILLp(av)+1);
5606     }
5607     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5608 }
5609
5610 /* delete a back-reference to ourselves from the backref magic associated
5611  * with the SV we point to.
5612  */
5613
5614 void
5615 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5616 {
5617     dVAR;
5618     SV **svp = NULL;
5619
5620     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5621
5622     if (SvTYPE(tsv) == SVt_PVHV) {
5623         if (SvOOK(tsv))
5624             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5625     }
5626     else {
5627         MAGIC *const mg
5628             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5629         svp =  mg ? &(mg->mg_obj) : NULL;
5630     }
5631
5632     if (!svp || !*svp)
5633         Perl_croak(aTHX_ "panic: del_backref");
5634
5635     if (SvTYPE(*svp) == SVt_PVAV) {
5636 #ifdef DEBUGGING
5637         int count = 1;
5638 #endif
5639         AV * const av = (AV*)*svp;
5640         SSize_t fill;
5641         assert(!SvIS_FREED(av));
5642         fill = AvFILLp(av);
5643         assert(fill > -1);
5644         svp = AvARRAY(av);
5645         /* for an SV with N weak references to it, if all those
5646          * weak refs are deleted, then sv_del_backref will be called
5647          * N times and O(N^2) compares will be done within the backref
5648          * array. To ameliorate this potential slowness, we:
5649          * 1) make sure this code is as tight as possible;
5650          * 2) when looking for SV, look for it at both the head and tail of the
5651          *    array first before searching the rest, since some create/destroy
5652          *    patterns will cause the backrefs to be freed in order.
5653          */
5654         if (*svp == sv) {
5655             AvARRAY(av)++;
5656             AvMAX(av)--;
5657         }
5658         else {
5659             SV **p = &svp[fill];
5660             SV *const topsv = *p;
5661             if (topsv != sv) {
5662 #ifdef DEBUGGING
5663                 count = 0;
5664 #endif
5665                 while (--p > svp) {
5666                     if (*p == sv) {
5667                         /* We weren't the last entry.
5668                            An unordered list has this property that you
5669                            can take the last element off the end to fill
5670                            the hole, and it's still an unordered list :-)
5671                         */
5672                         *p = topsv;
5673 #ifdef DEBUGGING
5674                         count++;
5675 #else
5676                         break; /* should only be one */
5677 #endif
5678                     }
5679                 }
5680             }
5681         }
5682         assert(count ==1);
5683         AvFILLp(av) = fill-1;
5684     }
5685     else {
5686         /* optimisation: only a single backref, stored directly */
5687         if (*svp != sv)
5688             Perl_croak(aTHX_ "panic: del_backref");
5689         *svp = NULL;
5690     }
5691
5692 }
5693
5694 void
5695 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5696 {
5697     SV **svp;
5698     SV **last;
5699     bool is_array;
5700
5701     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5702
5703     if (!av)
5704         return;
5705
5706     /* after multiple passes through Perl_sv_clean_all() for a thinngy
5707      * that has badly leaked, the backref array may have gotten freed,
5708      * since we only protect it against 1 round of cleanup */
5709     if (SvIS_FREED(av)) {
5710         if (PL_in_clean_all) /* All is fair */
5711             return;
5712         Perl_croak(aTHX_
5713                    "panic: magic_killbackrefs (freed backref AV/SV)");
5714     }
5715
5716
5717     is_array = (SvTYPE(av) == SVt_PVAV);
5718     if (is_array) {
5719         assert(!SvIS_FREED(av));
5720         svp = AvARRAY(av);
5721         if (svp)
5722             last = svp + AvFILLp(av);
5723     }
5724     else {
5725         /* optimisation: only a single backref, stored directly */
5726         svp = (SV**)&av;
5727         last = svp;
5728     }
5729
5730     if (svp) {
5731         while (svp <= last) {
5732             if (*svp) {
5733                 SV *const referrer = *svp;
5734                 if (SvWEAKREF(referrer)) {
5735                     /* XXX Should we check that it hasn't changed? */
5736                     assert(SvROK(referrer));
5737                     SvRV_set(referrer, 0);
5738                     SvOK_off(referrer);
5739                     SvWEAKREF_off(referrer);
5740                     SvSETMAGIC(referrer);
5741                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5742                            SvTYPE(referrer) == SVt_PVLV) {
5743                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5744                     /* You lookin' at me?  */
5745                     assert(GvSTASH(referrer));
5746                     assert(GvSTASH(referrer) == (const HV *)sv);
5747                     GvSTASH(referrer) = 0;
5748                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5749                            SvTYPE(referrer) == SVt_PVFM) {
5750                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5751                         /* You lookin' at me?  */
5752                         assert(CvSTASH(referrer));
5753                         assert(CvSTASH(referrer) == (const HV *)sv);
5754                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5755                     }
5756                     else {
5757                         assert(SvTYPE(sv) == SVt_PVGV);
5758                         /* You lookin' at me?  */
5759                         assert(CvGV(referrer));
5760                         assert(CvGV(referrer) == (const GV *)sv);
5761                         anonymise_cv_maybe(MUTABLE_GV(sv),
5762                                                 MUTABLE_CV(referrer));
5763                     }
5764
5765                 } else {
5766                     Perl_croak(aTHX_
5767                                "panic: magic_killbackrefs (flags=%"UVxf")",
5768                                (UV)SvFLAGS(referrer));
5769                 }
5770
5771                 if (is_array)
5772                     *svp = NULL;
5773             }
5774             svp++;
5775         }
5776     }
5777     if (is_array) {
5778         AvFILLp(av) = -1;
5779         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5780     }
5781     return;
5782 }
5783
5784 /*
5785 =for apidoc sv_insert
5786
5787 Inserts a string at the specified offset/length within the SV. Similar to
5788 the Perl substr() function. Handles get magic.
5789
5790 =for apidoc sv_insert_flags
5791
5792 Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5793
5794 =cut
5795 */
5796
5797 void
5798 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5799 {
5800     dVAR;
5801     register char *big;
5802     register char *mid;
5803     register char *midend;
5804     register char *bigend;
5805     register I32 i;
5806     STRLEN curlen;
5807
5808     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5809
5810     if (!bigstr)
5811         Perl_croak(aTHX_ "Can't modify non-existent substring");
5812     SvPV_force_flags(bigstr, curlen, flags);
5813     (void)SvPOK_only_UTF8(bigstr);
5814     if (offset + len > curlen) {
5815         SvGROW(bigstr, offset+len+1);
5816         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5817         SvCUR_set(bigstr, offset+len);
5818     }
5819
5820     SvTAINT(bigstr);
5821     i = littlelen - len;
5822     if (i > 0) {                        /* string might grow */
5823         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5824         mid = big + offset + len;
5825         midend = bigend = big + SvCUR(bigstr);
5826         bigend += i;
5827         *bigend = '\0';
5828         while (midend > mid)            /* shove everything down */
5829             *--bigend = *--midend;
5830         Move(little,big+offset,littlelen,char);
5831         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5832         SvSETMAGIC(bigstr);
5833         return;
5834     }
5835     else if (i == 0) {
5836         Move(little,SvPVX(bigstr)+offset,len,char);
5837         SvSETMAGIC(bigstr);
5838         return;
5839     }
5840
5841     big = SvPVX(bigstr);
5842     mid = big + offset;
5843     midend = mid + len;
5844     bigend = big + SvCUR(bigstr);
5845
5846     if (midend > bigend)
5847         Perl_croak(aTHX_ "panic: sv_insert");
5848
5849     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5850         if (littlelen) {
5851             Move(little, mid, littlelen,char);
5852             mid += littlelen;
5853         }
5854         i = bigend - midend;
5855         if (i > 0) {
5856             Move(midend, mid, i,char);
5857             mid += i;
5858         }
5859         *mid = '\0';
5860         SvCUR_set(bigstr, mid - big);
5861     }
5862     else if ((i = mid - big)) { /* faster from front */
5863         midend -= littlelen;
5864         mid = midend;
5865         Move(big, midend - i, i, char);
5866         sv_chop(bigstr,midend-i);
5867         if (littlelen)
5868             Move(little, mid, littlelen,char);
5869     }
5870     else if (littlelen) {
5871         midend -= littlelen;
5872         sv_chop(bigstr,midend);
5873         Move(little,midend,littlelen,char);
5874     }
5875     else {
5876         sv_chop(bigstr,midend);
5877     }
5878     SvSETMAGIC(bigstr);
5879 }
5880
5881 /*
5882 =for apidoc sv_replace
5883
5884 Make the first argument a copy of the second, then delete the original.
5885 The target SV physically takes over ownership of the body of the source SV
5886 and inherits its flags; however, the target keeps any magic it owns,
5887 and any magic in the source is discarded.
5888 Note that this is a rather specialist SV copying operation; most of the
5889 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5890
5891 =cut
5892 */
5893
5894 void
5895 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5896 {
5897     dVAR;
5898     const U32 refcnt = SvREFCNT(sv);
5899
5900     PERL_ARGS_ASSERT_SV_REPLACE;
5901
5902     SV_CHECK_THINKFIRST_COW_DROP(sv);
5903     if (SvREFCNT(nsv) != 1) {
5904         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5905                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5906     }
5907     if (SvMAGICAL(sv)) {
5908         if (SvMAGICAL(nsv))
5909             mg_free(nsv);
5910         else
5911             sv_upgrade(nsv, SVt_PVMG);
5912         SvMAGIC_set(nsv, SvMAGIC(sv));
5913         SvFLAGS(nsv) |= SvMAGICAL(sv);
5914         SvMAGICAL_off(sv);
5915         SvMAGIC_set(sv, NULL);
5916     }
5917     SvREFCNT(sv) = 0;
5918     sv_clear(sv);
5919     assert(!SvREFCNT(sv));
5920 #ifdef DEBUG_LEAKING_SCALARS
5921     sv->sv_flags  = nsv->sv_flags;
5922     sv->sv_any    = nsv->sv_any;
5923     sv->sv_refcnt = nsv->sv_refcnt;
5924     sv->sv_u      = nsv->sv_u;
5925 #else
5926     StructCopy(nsv,sv,SV);
5927 #endif
5928     if(SvTYPE(sv) == SVt_IV) {
5929         SvANY(sv)
5930             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5931     }
5932         
5933
5934 #ifdef PERL_OLD_COPY_ON_WRITE
5935     if (SvIsCOW_normal(nsv)) {
5936         /* We need to follow the pointers around the loop to make the
5937            previous SV point to sv, rather than nsv.  */
5938         SV *next;
5939         SV *current = nsv;
5940         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5941             assert(next);
5942             current = next;
5943             assert(SvPVX_const(current) == SvPVX_const(nsv));
5944         }
5945         /* Make the SV before us point to the SV after us.  */
5946         if (DEBUG_C_TEST) {
5947             PerlIO_printf(Perl_debug_log, "previous is\n");
5948             sv_dump(current);
5949             PerlIO_printf(Perl_debug_log,
5950                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5951                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5952         }
5953         SV_COW_NEXT_SV_SET(current, sv);
5954     }
5955 #endif
5956     SvREFCNT(sv) = refcnt;
5957     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5958     SvREFCNT(nsv) = 0;
5959     del_SV(nsv);
5960 }
5961
5962 /* We're about to free a GV which has a CV that refers back to us.
5963  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5964  * field) */
5965
5966 STATIC void
5967 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5968 {
5969     char *stash;
5970     SV *gvname;
5971     GV *anongv;
5972
5973     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5974
5975     /* be assertive! */
5976     assert(SvREFCNT(gv) == 0);
5977     assert(isGV(gv) && isGV_with_GP(gv));
5978     assert(GvGP(gv));
5979     assert(!CvANON(cv));
5980     assert(CvGV(cv) == gv);
5981
5982     /* will the CV shortly be freed by gp_free() ? */
5983     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
5984         SvANY(cv)->xcv_gv = NULL;
5985         return;
5986     }
5987
5988     /* if not, anonymise: */
5989     stash  = GvSTASH(gv) && HvNAME(GvSTASH(gv))
5990               ? HvENAME(GvSTASH(gv)) : NULL;
5991     gvname = Perl_newSVpvf(aTHX_ "%s::__ANON__",
5992                                         stash ? stash : "__ANON__");
5993     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5994     SvREFCNT_dec(gvname);
5995
5996     CvANON_on(cv);
5997     CvCVGV_RC_on(cv);
5998     SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
5999 }
6000
6001
6002 /*
6003 =for apidoc sv_clear
6004
6005 Clear an SV: call any destructors, free up any memory used by the body,
6006 and free the body itself. The SV's head is I<not> freed, although
6007 its type is set to all 1's so that it won't inadvertently be assumed
6008 to be live during global destruction etc.
6009 This function should only be called when REFCNT is zero. Most of the time
6010 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6011 instead.
6012
6013 =cut
6014 */
6015
6016 void
6017 Perl_sv_clear(pTHX_ SV *const orig_sv)
6018 {
6019     dVAR;
6020     HV *stash;
6021     U32 type;
6022     const struct body_details *sv_type_details;
6023     SV* iter_sv = NULL;
6024     SV* next_sv = NULL;
6025     register SV *sv = orig_sv;
6026     STRLEN hash_index;
6027
6028     PERL_ARGS_ASSERT_SV_CLEAR;
6029
6030     /* within this loop, sv is the SV currently being freed, and
6031      * iter_sv is the most recent AV or whatever that's being iterated
6032      * over to provide more SVs */
6033
6034     while (sv) {
6035
6036         type = SvTYPE(sv);
6037
6038         assert(SvREFCNT(sv) == 0);
6039         assert(SvTYPE(sv) != SVTYPEMASK);
6040
6041         if (type <= SVt_IV) {
6042             /* See the comment in sv.h about the collusion between this
6043              * early return and the overloading of the NULL slots in the
6044              * size table.  */
6045             if (SvROK(sv))
6046                 goto free_rv;
6047             SvFLAGS(sv) &= SVf_BREAK;
6048             SvFLAGS(sv) |= SVTYPEMASK;
6049             goto free_head;
6050         }
6051
6052         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6053
6054         if (type >= SVt_PVMG) {
6055             if (SvOBJECT(sv)) {
6056                 if (!curse(sv, 1)) goto get_next_sv;
6057                 type = SvTYPE(sv); /* destructor may have changed it */
6058             }
6059             /* Free back-references before magic, in case the magic calls
6060              * Perl code that has weak references to sv. */
6061             if (type == SVt_PVHV) {
6062                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6063                 if (SvMAGIC(sv))
6064                     mg_free(sv);
6065             }
6066             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6067                 SvREFCNT_dec(SvOURSTASH(sv));
6068             } else if (SvMAGIC(sv)) {
6069                 /* Free back-references before other types of magic. */
6070                 sv_unmagic(sv, PERL_MAGIC_backref);
6071                 mg_free(sv);
6072             }
6073             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6074                 SvREFCNT_dec(SvSTASH(sv));
6075         }
6076         switch (type) {
6077             /* case SVt_BIND: */
6078         case SVt_PVIO:
6079             if (IoIFP(sv) &&
6080                 IoIFP(sv) != PerlIO_stdin() &&
6081                 IoIFP(sv) != PerlIO_stdout() &&
6082                 IoIFP(sv) != PerlIO_stderr() &&
6083                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6084             {
6085                 io_close(MUTABLE_IO(sv), FALSE);
6086             }
6087             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6088                 PerlDir_close(IoDIRP(sv));
6089             IoDIRP(sv) = (DIR*)NULL;
6090             Safefree(IoTOP_NAME(sv));
6091             Safefree(IoFMT_NAME(sv));
6092             Safefree(IoBOTTOM_NAME(sv));
6093             goto freescalar;
6094         case SVt_REGEXP:
6095             /* FIXME for plugins */
6096             pregfree2((REGEXP*) sv);
6097             goto freescalar;
6098         case SVt_PVCV:
6099         case SVt_PVFM:
6100             cv_undef(MUTABLE_CV(sv));
6101             /* If we're in a stash, we don't own a reference to it.
6102              * However it does have a back reference to us, which needs to
6103              * be cleared.  */
6104             if ((stash = CvSTASH(sv)))
6105                 sv_del_backref(MUTABLE_SV(stash), sv);
6106             goto freescalar;
6107         case SVt_PVHV:
6108             if (PL_last_swash_hv == (const HV *)sv) {
6109                 PL_last_swash_hv = NULL;
6110             }
6111             if (HvTOTALKEYS((HV*)sv) > 0) {
6112                 const char *name;
6113                 /* this statement should match the one at the beginning of
6114                  * hv_undef_flags() */
6115                 if (   PL_phase != PERL_PHASE_DESTRUCT
6116                     && (name = HvNAME((HV*)sv)))
6117                 {
6118                     if (PL_stashcache)
6119                         (void)hv_delete(PL_stashcache, name,
6120                             HvNAMELEN_get((HV*)sv), G_DISCARD);
6121                     hv_name_set((HV*)sv, NULL, 0, 0);
6122                 }
6123
6124                 /* save old iter_sv in unused SvSTASH field */
6125                 assert(!SvOBJECT(sv));
6126                 SvSTASH(sv) = (HV*)iter_sv;
6127                 iter_sv = sv;
6128
6129                 /* XXX ideally we should save the old value of hash_index
6130                  * too, but I can't think of any place to hide it. The
6131                  * effect of not saving it is that for freeing hashes of
6132                  * hashes, we become quadratic in scanning the HvARRAY of
6133                  * the top hash looking for new entries to free; but
6134                  * hopefully this will be dwarfed by the freeing of all
6135                  * the nested hashes. */
6136                 hash_index = 0;
6137                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6138                 goto get_next_sv; /* process this new sv */
6139             }
6140             /* free empty hash */
6141             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6142             assert(!HvARRAY((HV*)sv));
6143             break;
6144         case SVt_PVAV:
6145             {
6146                 AV* av = MUTABLE_AV(sv);
6147                 if (PL_comppad == av) {
6148                     PL_comppad = NULL;
6149                     PL_curpad = NULL;
6150                 }
6151                 if (AvREAL(av) && AvFILLp(av) > -1) {
6152                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6153                     /* save old iter_sv in top-most slot of AV,
6154                      * and pray that it doesn't get wiped in the meantime */
6155                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6156                     iter_sv = sv;
6157                     goto get_next_sv; /* process this new sv */
6158                 }
6159                 Safefree(AvALLOC(av));
6160             }
6161
6162             break;
6163         case SVt_PVLV:
6164             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6165                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6166                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6167                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6168             }
6169             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6170                 SvREFCNT_dec(LvTARG(sv));
6171         case SVt_PVGV:
6172             if (isGV_with_GP(sv)) {
6173                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6174                    && HvENAME_get(stash))
6175                     mro_method_changed_in(stash);
6176                 gp_free(MUTABLE_GV(sv));
6177                 if (GvNAME_HEK(sv))
6178                     unshare_hek(GvNAME_HEK(sv));
6179                 /* If we're in a stash, we don't own a reference to it.
6180                  * However it does have a back reference to us, which
6181                  * needs to be cleared.  */
6182                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6183                         sv_del_backref(MUTABLE_SV(stash), sv);
6184             }
6185             /* FIXME. There are probably more unreferenced pointers to SVs
6186              * in the interpreter struct that we should check and tidy in
6187              * a similar fashion to this:  */
6188             if ((const GV *)sv == PL_last_in_gv)
6189                 PL_last_in_gv = NULL;
6190         case SVt_PVMG:
6191         case SVt_PVNV:
6192         case SVt_PVIV:
6193         case SVt_PV:
6194           freescalar:
6195             /* Don't bother with SvOOK_off(sv); as we're only going to
6196              * free it.  */
6197             if (SvOOK(sv)) {
6198                 STRLEN offset;
6199                 SvOOK_offset(sv, offset);
6200                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6201                 /* Don't even bother with turning off the OOK flag.  */
6202             }
6203             if (SvROK(sv)) {
6204             free_rv:
6205                 {
6206                     SV * const target = SvRV(sv);
6207                     if (SvWEAKREF(sv))
6208                         sv_del_backref(target, sv);
6209                     else
6210                         next_sv = target;
6211                 }
6212             }
6213 #ifdef PERL_OLD_COPY_ON_WRITE
6214             else if (SvPVX_const(sv)
6215                      && !(SvTYPE(sv) == SVt_PVIO
6216                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6217             {
6218                 if (SvIsCOW(sv)) {
6219                     if (DEBUG_C_TEST) {
6220                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6221                         sv_dump(sv);
6222                     }
6223                     if (SvLEN(sv)) {
6224                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6225                     } else {
6226                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6227                     }
6228
6229                     SvFAKE_off(sv);
6230                 } else if (SvLEN(sv)) {
6231                     Safefree(SvPVX_const(sv));
6232                 }
6233             }
6234 #else
6235             else if (SvPVX_const(sv) && SvLEN(sv)
6236                      && !(SvTYPE(sv) == SVt_PVIO
6237                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6238                 Safefree(SvPVX_mutable(sv));
6239             else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
6240                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6241                 SvFAKE_off(sv);
6242             }
6243 #endif
6244             break;
6245         case SVt_NV:
6246             break;
6247         }
6248
6249       free_body:
6250
6251         SvFLAGS(sv) &= SVf_BREAK;
6252         SvFLAGS(sv) |= SVTYPEMASK;
6253
6254         sv_type_details = bodies_by_type + type;
6255         if (sv_type_details->arena) {
6256             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6257                      &PL_body_roots[type]);
6258         }
6259         else if (sv_type_details->body_size) {
6260             safefree(SvANY(sv));
6261         }
6262
6263       free_head:
6264         /* caller is responsible for freeing the head of the original sv */
6265         if (sv != orig_sv && !SvREFCNT(sv))
6266             del_SV(sv);
6267
6268         /* grab and free next sv, if any */
6269       get_next_sv:
6270         while (1) {
6271             sv = NULL;
6272             if (next_sv) {
6273                 sv = next_sv;
6274                 next_sv = NULL;
6275             }
6276             else if (!iter_sv) {
6277                 break;
6278             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6279                 AV *const av = (AV*)iter_sv;
6280                 if (AvFILLp(av) > -1) {
6281                     sv = AvARRAY(av)[AvFILLp(av)--];
6282                 }
6283                 else { /* no more elements of current AV to free */
6284                     sv = iter_sv;
6285                     type = SvTYPE(sv);
6286                     /* restore previous value, squirrelled away */
6287                     iter_sv = AvARRAY(av)[AvMAX(av)];
6288                     Safefree(AvALLOC(av));
6289                     goto free_body;
6290                 }
6291             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6292                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6293                 if (!sv) { /* no more elements of current HV to free */
6294                     sv = iter_sv;
6295                     type = SvTYPE(sv);
6296                     /* Restore previous value of iter_sv, squirrelled away */
6297                     assert(!SvOBJECT(sv));
6298                     iter_sv = (SV*)SvSTASH(sv);
6299
6300                     /* ideally we should restore the old hash_index here,
6301                      * but we don't currently save the old value */
6302                     hash_index = 0;
6303
6304                     /* free any remaining detritus from the hash struct */
6305                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6306                     assert(!HvARRAY((HV*)sv));
6307                     goto free_body;
6308                 }
6309             }
6310
6311             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6312
6313             if (!sv)
6314                 continue;
6315             if (!SvREFCNT(sv)) {
6316                 sv_free(sv);
6317                 continue;
6318             }
6319             if (--(SvREFCNT(sv)))
6320                 continue;
6321 #ifdef DEBUGGING
6322             if (SvTEMP(sv)) {
6323                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6324                          "Attempt to free temp prematurely: SV 0x%"UVxf
6325                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6326                 continue;
6327             }
6328 #endif
6329             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6330                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6331                 SvREFCNT(sv) = (~(U32)0)/2;
6332                 continue;
6333             }
6334             break;
6335         } /* while 1 */
6336
6337     } /* while sv */
6338 }
6339
6340 /* This routine curses the sv itself, not the object referenced by sv. So
6341    sv does not have to be ROK. */
6342
6343 static bool
6344 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6345     dVAR;
6346
6347     PERL_ARGS_ASSERT_CURSE;
6348     assert(SvOBJECT(sv));
6349
6350     if (PL_defstash &&  /* Still have a symbol table? */
6351         SvDESTROYABLE(sv))
6352     {
6353         dSP;
6354         HV* stash;
6355         do {
6356             CV* destructor;
6357             stash = SvSTASH(sv);
6358             destructor = StashHANDLER(stash,DESTROY);
6359             if (destructor
6360                 /* A constant subroutine can have no side effects, so
6361                    don't bother calling it.  */
6362                 && !CvCONST(destructor)
6363                 /* Don't bother calling an empty destructor */
6364                 && (CvISXSUB(destructor)
6365                 || (CvSTART(destructor)
6366                     && (CvSTART(destructor)->op_next->op_type
6367                                         != OP_LEAVESUB))))
6368             {
6369                 SV* const tmpref = newRV(sv);
6370                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6371                 ENTER;
6372                 PUSHSTACKi(PERLSI_DESTROY);
6373                 EXTEND(SP, 2);
6374                 PUSHMARK(SP);
6375                 PUSHs(tmpref);
6376                 PUTBACK;
6377                 call_sv(MUTABLE_SV(destructor),
6378                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6379                 POPSTACK;
6380                 SPAGAIN;
6381                 LEAVE;
6382                 if(SvREFCNT(tmpref) < 2) {
6383                     /* tmpref is not kept alive! */
6384                     SvREFCNT(sv)--;
6385                     SvRV_set(tmpref, NULL);
6386                     SvROK_off(tmpref);
6387                 }
6388                 SvREFCNT_dec(tmpref);
6389             }
6390         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6391
6392
6393         if (check_refcnt && SvREFCNT(sv)) {
6394             if (PL_in_clean_objs)
6395                 Perl_croak(aTHX_
6396                     "DESTROY created new reference to dead object '%s'",
6397                     HvNAME_get(stash));
6398             /* DESTROY gave object new lease on life */
6399             return FALSE;
6400         }
6401     }
6402
6403     if (SvOBJECT(sv)) {
6404         SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6405         SvOBJECT_off(sv);       /* Curse the object. */
6406         if (SvTYPE(sv) != SVt_PVIO)
6407             --PL_sv_objcount;/* XXX Might want something more general */
6408     }
6409     return TRUE;
6410 }
6411
6412 /*
6413 =for apidoc sv_newref
6414
6415 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
6416 instead.
6417
6418 =cut
6419 */
6420
6421 SV *
6422 Perl_sv_newref(pTHX_ SV *const sv)
6423 {
6424     PERL_UNUSED_CONTEXT;
6425     if (sv)
6426         (SvREFCNT(sv))++;
6427     return sv;
6428 }
6429
6430 /*
6431 =for apidoc sv_free
6432
6433 Decrement an SV's reference count, and if it drops to zero, call
6434 C<sv_clear> to invoke destructors and free up any memory used by
6435 the body; finally, deallocate the SV's head itself.
6436 Normally called via a wrapper macro C<SvREFCNT_dec>.
6437
6438 =cut
6439 */
6440
6441 void
6442 Perl_sv_free(pTHX_ SV *const sv)
6443 {
6444     dVAR;
6445     if (!sv)
6446         return;
6447     if (SvREFCNT(sv) == 0) {
6448         if (SvFLAGS(sv) & SVf_BREAK)
6449             /* this SV's refcnt has been artificially decremented to
6450              * trigger cleanup */
6451             return;
6452         if (PL_in_clean_all) /* All is fair */
6453             return;
6454         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6455             /* make sure SvREFCNT(sv)==0 happens very seldom */
6456             SvREFCNT(sv) = (~(U32)0)/2;
6457             return;
6458         }
6459         if (ckWARN_d(WARN_INTERNAL)) {
6460 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6461             Perl_dump_sv_child(aTHX_ sv);
6462 #else
6463   #ifdef DEBUG_LEAKING_SCALARS
6464             sv_dump(sv);
6465   #endif
6466 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6467             if (PL_warnhook == PERL_WARNHOOK_FATAL
6468                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6469                 /* Don't let Perl_warner cause us to escape our fate:  */
6470                 abort();
6471             }
6472 #endif
6473             /* This may not return:  */
6474             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6475                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6476                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6477 #endif
6478         }
6479 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6480         abort();
6481 #endif
6482         return;
6483     }
6484     if (--(SvREFCNT(sv)) > 0)
6485         return;
6486     Perl_sv_free2(aTHX_ sv);
6487 }
6488
6489 void
6490 Perl_sv_free2(pTHX_ SV *const sv)
6491 {
6492     dVAR;
6493
6494     PERL_ARGS_ASSERT_SV_FREE2;
6495
6496 #ifdef DEBUGGING
6497     if (SvTEMP(sv)) {
6498         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6499                          "Attempt to free temp prematurely: SV 0x%"UVxf
6500                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6501         return;
6502     }
6503 #endif
6504     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6505         /* make sure SvREFCNT(sv)==0 happens very seldom */
6506         SvREFCNT(sv) = (~(U32)0)/2;
6507         return;
6508     }
6509     sv_clear(sv);
6510     if (! SvREFCNT(sv))
6511         del_SV(sv);
6512 }
6513
6514 /*
6515 =for apidoc sv_len
6516
6517 Returns the length of the string in the SV. Handles magic and type
6518 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6519
6520 =cut
6521 */
6522
6523 STRLEN
6524 Perl_sv_len(pTHX_ register SV *const sv)
6525 {
6526     STRLEN len;
6527
6528     if (!sv)
6529         return 0;
6530
6531     if (SvGMAGICAL(sv))
6532         len = mg_length(sv);
6533     else
6534         (void)SvPV_const(sv, len);
6535     return len;
6536 }
6537
6538 /*
6539 =for apidoc sv_len_utf8
6540
6541 Returns the number of characters in the string in an SV, counting wide
6542 UTF-8 bytes as a single character. Handles magic and type coercion.
6543
6544 =cut
6545 */
6546
6547 /*
6548  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6549  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6550  * (Note that the mg_len is not the length of the mg_ptr field.
6551  * This allows the cache to store the character length of the string without
6552  * needing to malloc() extra storage to attach to the mg_ptr.)
6553  *
6554  */
6555
6556 STRLEN
6557 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6558 {
6559     if (!sv)
6560         return 0;
6561
6562     if (SvGMAGICAL(sv))
6563         return mg_length(sv);
6564     else
6565     {
6566         STRLEN len;
6567         const U8 *s = (U8*)SvPV_const(sv, len);
6568
6569         if (PL_utf8cache) {
6570             STRLEN ulen;
6571             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6572
6573             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6574                 if (mg->mg_len != -1)
6575                     ulen = mg->mg_len;
6576                 else {
6577                     /* We can use the offset cache for a headstart.
6578                        The longer value is stored in the first pair.  */
6579                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6580
6581                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6582                                                        s + len);
6583                 }
6584                 
6585                 if (PL_utf8cache < 0) {
6586                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6587                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6588                 }
6589             }
6590             else {
6591                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6592                 utf8_mg_len_cache_update(sv, &mg, ulen);
6593             }
6594             return ulen;
6595         }
6596         return Perl_utf8_length(aTHX_ s, s + len);
6597     }
6598 }
6599
6600 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6601    offset.  */
6602 static STRLEN
6603 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6604                       STRLEN *const uoffset_p, bool *const at_end)
6605 {
6606     const U8 *s = start;
6607     STRLEN uoffset = *uoffset_p;
6608
6609     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6610
6611     while (s < send && uoffset) {
6612         --uoffset;
6613         s += UTF8SKIP(s);
6614     }
6615     if (s == send) {
6616         *at_end = TRUE;
6617     }
6618     else if (s > send) {
6619         *at_end = TRUE;
6620         /* This is the existing behaviour. Possibly it should be a croak, as
6621            it's actually a bounds error  */
6622         s = send;
6623     }
6624     *uoffset_p -= uoffset;
6625     return s - start;
6626 }
6627
6628 /* Given the length of the string in both bytes and UTF-8 characters, decide
6629    whether to walk forwards or backwards to find the byte corresponding to
6630    the passed in UTF-8 offset.  */
6631 static STRLEN
6632 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6633                     STRLEN uoffset, const STRLEN uend)
6634 {
6635     STRLEN backw = uend - uoffset;
6636
6637     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6638
6639     if (uoffset < 2 * backw) {
6640         /* The assumption is that going forwards is twice the speed of going
6641            forward (that's where the 2 * backw comes from).
6642            (The real figure of course depends on the UTF-8 data.)  */
6643         const U8 *s = start;
6644
6645         while (s < send && uoffset--)
6646             s += UTF8SKIP(s);
6647         assert (s <= send);
6648         if (s > send)
6649             s = send;
6650         return s - start;
6651     }
6652
6653     while (backw--) {
6654         send--;
6655         while (UTF8_IS_CONTINUATION(*send))
6656             send--;
6657     }
6658     return send - start;
6659 }
6660
6661 /* For the string representation of the given scalar, find the byte
6662    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6663    give another position in the string, *before* the sought offset, which
6664    (which is always true, as 0, 0 is a valid pair of positions), which should
6665    help reduce the amount of linear searching.
6666    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6667    will be used to reduce the amount of linear searching. The cache will be
6668    created if necessary, and the found value offered to it for update.  */
6669 static STRLEN
6670 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6671                     const U8 *const send, STRLEN uoffset,
6672                     STRLEN uoffset0, STRLEN boffset0)
6673 {
6674     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6675     bool found = FALSE;
6676     bool at_end = FALSE;
6677
6678     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6679
6680     assert (uoffset >= uoffset0);
6681
6682     if (!uoffset)
6683         return 0;
6684
6685     if (!SvREADONLY(sv)
6686         && PL_utf8cache
6687         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6688                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6689         if ((*mgp)->mg_ptr) {
6690             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6691             if (cache[0] == uoffset) {
6692                 /* An exact match. */
6693                 return cache[1];
6694             }
6695             if (cache[2] == uoffset) {
6696                 /* An exact match. */
6697                 return cache[3];
6698             }
6699
6700             if (cache[0] < uoffset) {
6701                 /* The cache already knows part of the way.   */
6702                 if (cache[0] > uoffset0) {
6703                     /* The cache knows more than the passed in pair  */
6704                     uoffset0 = cache[0];
6705                     boffset0 = cache[1];
6706                 }
6707                 if ((*mgp)->mg_len != -1) {
6708                     /* And we know the end too.  */
6709                     boffset = boffset0
6710                         + sv_pos_u2b_midway(start + boffset0, send,
6711                                               uoffset - uoffset0,
6712                                               (*mgp)->mg_len - uoffset0);
6713                 } else {
6714                     uoffset -= uoffset0;
6715                     boffset = boffset0
6716                         + sv_pos_u2b_forwards(start + boffset0,
6717                                               send, &uoffset, &at_end);
6718                     uoffset += uoffset0;
6719                 }
6720             }
6721             else if (cache[2] < uoffset) {
6722                 /* We're between the two cache entries.  */
6723                 if (cache[2] > uoffset0) {
6724                     /* and the cache knows more than the passed in pair  */
6725                     uoffset0 = cache[2];
6726                     boffset0 = cache[3];
6727                 }
6728
6729                 boffset = boffset0
6730                     + sv_pos_u2b_midway(start + boffset0,
6731                                           start + cache[1],
6732                                           uoffset - uoffset0,
6733                                           cache[0] - uoffset0);
6734             } else {
6735                 boffset = boffset0
6736                     + sv_pos_u2b_midway(start + boffset0,
6737                                           start + cache[3],
6738                                           uoffset - uoffset0,
6739                                           cache[2] - uoffset0);
6740             }
6741             found = TRUE;
6742         }
6743         else if ((*mgp)->mg_len != -1) {
6744             /* If we can take advantage of a passed in offset, do so.  */
6745             /* In fact, offset0 is either 0, or less than offset, so don't
6746                need to worry about the other possibility.  */
6747             boffset = boffset0
6748                 + sv_pos_u2b_midway(start + boffset0, send,
6749                                       uoffset - uoffset0,
6750                                       (*mgp)->mg_len - uoffset0);
6751             found = TRUE;
6752         }
6753     }
6754
6755     if (!found || PL_utf8cache < 0) {
6756         STRLEN real_boffset;
6757         uoffset -= uoffset0;
6758         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6759                                                       send, &uoffset, &at_end);
6760         uoffset += uoffset0;
6761
6762         if (found && PL_utf8cache < 0)
6763             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6764                                        real_boffset, sv);
6765         boffset = real_boffset;
6766     }
6767
6768     if (PL_utf8cache) {
6769         if (at_end)
6770             utf8_mg_len_cache_update(sv, mgp, uoffset);
6771         else
6772             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6773     }
6774     return boffset;
6775 }
6776
6777
6778 /*
6779 =for apidoc sv_pos_u2b_flags
6780
6781 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6782 the start of the string, to a count of the equivalent number of bytes; if
6783 lenp is non-zero, it does the same to lenp, but this time starting from
6784 the offset, rather than from the start of the string. Handles type coercion.
6785 I<flags> is passed to C<SvPV_flags>, and usually should be
6786 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6787
6788 =cut
6789 */
6790
6791 /*
6792  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6793  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6794  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6795  *
6796  */
6797
6798 STRLEN
6799 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6800                       U32 flags)
6801 {
6802     const U8 *start;
6803     STRLEN len;
6804     STRLEN boffset;
6805
6806     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6807
6808     start = (U8*)SvPV_flags(sv, len, flags);
6809     if (len) {
6810         const U8 * const send = start + len;
6811         MAGIC *mg = NULL;
6812         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6813
6814         if (lenp
6815             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6816                         is 0, and *lenp is already set to that.  */) {
6817             /* Convert the relative offset to absolute.  */
6818             const STRLEN uoffset2 = uoffset + *lenp;
6819             const STRLEN boffset2
6820                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6821                                       uoffset, boffset) - boffset;
6822
6823             *lenp = boffset2;
6824         }
6825     } else {
6826         if (lenp)
6827             *lenp = 0;
6828         boffset = 0;
6829     }
6830
6831     return boffset;
6832 }
6833
6834 /*
6835 =for apidoc sv_pos_u2b
6836
6837 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6838 the start of the string, to a count of the equivalent number of bytes; if
6839 lenp is non-zero, it does the same to lenp, but this time starting from
6840 the offset, rather than from the start of the string. Handles magic and
6841 type coercion.
6842
6843 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6844 than 2Gb.
6845
6846 =cut
6847 */
6848
6849 /*
6850  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6851  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6852  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6853  *
6854  */
6855
6856 /* This function is subject to size and sign problems */
6857
6858 void
6859 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6860 {
6861     PERL_ARGS_ASSERT_SV_POS_U2B;
6862
6863     if (lenp) {
6864         STRLEN ulen = (STRLEN)*lenp;
6865         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6866                                          SV_GMAGIC|SV_CONST_RETURN);
6867         *lenp = (I32)ulen;
6868     } else {
6869         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6870                                          SV_GMAGIC|SV_CONST_RETURN);
6871     }
6872 }
6873
6874 static void
6875 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6876                            const STRLEN ulen)
6877 {
6878     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6879     if (SvREADONLY(sv))
6880         return;
6881
6882     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6883                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6884         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6885     }
6886     assert(*mgp);
6887
6888     (*mgp)->mg_len = ulen;
6889     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
6890     if (ulen != (STRLEN) (*mgp)->mg_len)
6891         (*mgp)->mg_len = -1;
6892 }
6893
6894 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6895    byte length pairing. The (byte) length of the total SV is passed in too,
6896    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6897    may not have updated SvCUR, so we can't rely on reading it directly.
6898
6899    The proffered utf8/byte length pairing isn't used if the cache already has
6900    two pairs, and swapping either for the proffered pair would increase the
6901    RMS of the intervals between known byte offsets.
6902
6903    The cache itself consists of 4 STRLEN values
6904    0: larger UTF-8 offset
6905    1: corresponding byte offset
6906    2: smaller UTF-8 offset
6907    3: corresponding byte offset
6908
6909    Unused cache pairs have the value 0, 0.
6910    Keeping the cache "backwards" means that the invariant of
6911    cache[0] >= cache[2] is maintained even with empty slots, which means that
6912    the code that uses it doesn't need to worry if only 1 entry has actually
6913    been set to non-zero.  It also makes the "position beyond the end of the
6914    cache" logic much simpler, as the first slot is always the one to start
6915    from.   
6916 */
6917 static void
6918 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6919                            const STRLEN utf8, const STRLEN blen)
6920 {
6921     STRLEN *cache;
6922
6923     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6924
6925     if (SvREADONLY(sv))
6926         return;
6927
6928     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6929                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6930         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6931                            0);
6932         (*mgp)->mg_len = -1;
6933     }
6934     assert(*mgp);
6935
6936     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6937         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6938         (*mgp)->mg_ptr = (char *) cache;
6939     }
6940     assert(cache);
6941
6942     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6943         /* SvPOKp() because it's possible that sv has string overloading, and
6944            therefore is a reference, hence SvPVX() is actually a pointer.
6945            This cures the (very real) symptoms of RT 69422, but I'm not actually
6946            sure whether we should even be caching the results of UTF-8
6947            operations on overloading, given that nothing stops overloading
6948            returning a different value every time it's called.  */
6949         const U8 *start = (const U8 *) SvPVX_const(sv);
6950         const STRLEN realutf8 = utf8_length(start, start + byte);
6951
6952         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6953                                    sv);
6954     }
6955
6956     /* Cache is held with the later position first, to simplify the code
6957        that deals with unbounded ends.  */
6958        
6959     ASSERT_UTF8_CACHE(cache);
6960     if (cache[1] == 0) {
6961         /* Cache is totally empty  */
6962         cache[0] = utf8;
6963         cache[1] = byte;
6964     } else if (cache[3] == 0) {
6965         if (byte > cache[1]) {
6966             /* New one is larger, so goes first.  */
6967             cache[2] = cache[0];
6968             cache[3] = cache[1];
6969             cache[0] = utf8;
6970             cache[1] = byte;
6971         } else {
6972             cache[2] = utf8;
6973             cache[3] = byte;
6974         }
6975     } else {
6976 #define THREEWAY_SQUARE(a,b,c,d) \
6977             ((float)((d) - (c))) * ((float)((d) - (c))) \
6978             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6979                + ((float)((b) - (a))) * ((float)((b) - (a)))
6980
6981         /* Cache has 2 slots in use, and we know three potential pairs.
6982            Keep the two that give the lowest RMS distance. Do the
6983            calculation in bytes simply because we always know the byte
6984            length.  squareroot has the same ordering as the positive value,
6985            so don't bother with the actual square root.  */
6986         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6987         if (byte > cache[1]) {
6988             /* New position is after the existing pair of pairs.  */
6989             const float keep_earlier
6990                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6991             const float keep_later
6992                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6993
6994             if (keep_later < keep_earlier) {
6995                 if (keep_later < existing) {
6996                     cache[2] = cache[0];
6997                     cache[3] = cache[1];
6998                     cache[0] = utf8;
6999                     cache[1] = byte;
7000                 }
7001             }
7002             else {
7003                 if (keep_earlier < existing) {
7004                     cache[0] = utf8;
7005                     cache[1] = byte;
7006                 }
7007             }
7008         }
7009         else if (byte > cache[3]) {
7010             /* New position is between the existing pair of pairs.  */
7011             const float keep_earlier
7012                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7013             const float keep_later
7014                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7015
7016             if (keep_later < keep_earlier) {
7017                 if (keep_later < existing) {
7018                     cache[2] = utf8;
7019                     cache[3] = byte;
7020                 }
7021             }
7022             else {
7023                 if (keep_earlier < existing) {
7024                     cache[0] = utf8;
7025                     cache[1] = byte;
7026                 }
7027             }
7028         }
7029         else {
7030             /* New position is before the existing pair of pairs.  */
7031             const float keep_earlier
7032                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7033             const float keep_later
7034                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7035
7036             if (keep_later < keep_earlier) {
7037                 if (keep_later < existing) {
7038                     cache[2] = utf8;
7039                     cache[3] = byte;
7040                 }
7041             }
7042             else {
7043                 if (keep_earlier < existing) {
7044                     cache[0] = cache[2];
7045                     cache[1] = cache[3];
7046                     cache[2] = utf8;
7047                     cache[3] = byte;
7048                 }
7049             }
7050         }
7051     }
7052     ASSERT_UTF8_CACHE(cache);
7053 }
7054
7055 /* We already know all of the way, now we may be able to walk back.  The same
7056    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7057    backward is half the speed of walking forward. */
7058 static STRLEN
7059 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7060                     const U8 *end, STRLEN endu)
7061 {
7062     const STRLEN forw = target - s;
7063     STRLEN backw = end - target;
7064
7065     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7066
7067     if (forw < 2 * backw) {
7068         return utf8_length(s, target);
7069     }
7070
7071     while (end > target) {
7072         end--;
7073         while (UTF8_IS_CONTINUATION(*end)) {
7074             end--;
7075         }
7076         endu--;
7077     }
7078     return endu;
7079 }
7080
7081 /*
7082 =for apidoc sv_pos_b2u
7083
7084 Converts the value pointed to by offsetp from a count of bytes from the
7085 start of the string, to a count of the equivalent number of UTF-8 chars.
7086 Handles magic and type coercion.
7087
7088 =cut
7089 */
7090
7091 /*
7092  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7093  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7094  * byte offsets.
7095  *
7096  */
7097 void
7098 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
7099 {
7100     const U8* s;
7101     const STRLEN byte = *offsetp;
7102     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7103     STRLEN blen;
7104     MAGIC* mg = NULL;
7105     const U8* send;
7106     bool found = FALSE;
7107
7108     PERL_ARGS_ASSERT_SV_POS_B2U;
7109
7110     if (!sv)
7111         return;
7112
7113     s = (const U8*)SvPV_const(sv, blen);
7114
7115     if (blen < byte)
7116         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7117
7118     send = s + byte;
7119
7120     if (!SvREADONLY(sv)
7121         && PL_utf8cache
7122         && SvTYPE(sv) >= SVt_PVMG
7123         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7124     {
7125         if (mg->mg_ptr) {
7126             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7127             if (cache[1] == byte) {
7128                 /* An exact match. */
7129                 *offsetp = cache[0];
7130                 return;
7131             }
7132             if (cache[3] == byte) {
7133                 /* An exact match. */
7134                 *offsetp = cache[2];
7135                 return;
7136             }
7137
7138             if (cache[1] < byte) {
7139                 /* We already know part of the way. */
7140                 if (mg->mg_len != -1) {
7141                     /* Actually, we know the end too.  */
7142                     len = cache[0]
7143                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7144                                               s + blen, mg->mg_len - cache[0]);
7145                 } else {
7146                     len = cache[0] + utf8_length(s + cache[1], send);
7147                 }
7148             }
7149             else if (cache[3] < byte) {
7150                 /* We're between the two cached pairs, so we do the calculation
7151                    offset by the byte/utf-8 positions for the earlier pair,
7152                    then add the utf-8 characters from the string start to
7153                    there.  */
7154                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7155                                           s + cache[1], cache[0] - cache[2])
7156                     + cache[2];
7157
7158             }
7159             else { /* cache[3] > byte */
7160                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7161                                           cache[2]);
7162
7163             }
7164             ASSERT_UTF8_CACHE(cache);
7165             found = TRUE;
7166         } else if (mg->mg_len != -1) {
7167             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7168             found = TRUE;
7169         }
7170     }
7171     if (!found || PL_utf8cache < 0) {
7172         const STRLEN real_len = utf8_length(s, send);
7173
7174         if (found && PL_utf8cache < 0)
7175             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7176         len = real_len;
7177     }
7178     *offsetp = len;
7179
7180     if (PL_utf8cache) {
7181         if (blen == byte)
7182             utf8_mg_len_cache_update(sv, &mg, len);
7183         else
7184             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7185     }
7186 }
7187
7188 static void
7189 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7190                              STRLEN real, SV *const sv)
7191 {
7192     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7193
7194     /* As this is debugging only code, save space by keeping this test here,
7195        rather than inlining it in all the callers.  */
7196     if (from_cache == real)
7197         return;
7198
7199     /* Need to turn the assertions off otherwise we may recurse infinitely
7200        while printing error messages.  */
7201     SAVEI8(PL_utf8cache);
7202     PL_utf8cache = 0;
7203     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7204                func, (UV) from_cache, (UV) real, SVfARG(sv));
7205 }
7206
7207 /*
7208 =for apidoc sv_eq
7209
7210 Returns a boolean indicating whether the strings in the two SVs are
7211 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7212 coerce its args to strings if necessary.
7213
7214 =for apidoc sv_eq_flags
7215
7216 Returns a boolean indicating whether the strings in the two SVs are
7217 identical. Is UTF-8 and 'use bytes' aware and coerces its args to strings
7218 if necessary. If the flags include SV_GMAGIC, it handles get-magic, too.
7219
7220 =cut
7221 */
7222
7223 I32
7224 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
7225 {
7226     dVAR;
7227     const char *pv1;
7228     STRLEN cur1;
7229     const char *pv2;
7230     STRLEN cur2;
7231     I32  eq     = 0;
7232     char *tpv   = NULL;
7233     SV* svrecode = NULL;
7234
7235     if (!sv1) {
7236         pv1 = "";
7237         cur1 = 0;
7238     }
7239     else {
7240         /* if pv1 and pv2 are the same, second SvPV_const call may
7241          * invalidate pv1 (if we are handling magic), so we may need to
7242          * make a copy */
7243         if (sv1 == sv2 && flags & SV_GMAGIC
7244          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7245             pv1 = SvPV_const(sv1, cur1);
7246             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7247         }
7248         pv1 = SvPV_flags_const(sv1, cur1, flags);
7249     }
7250
7251     if (!sv2){
7252         pv2 = "";
7253         cur2 = 0;
7254     }
7255     else
7256         pv2 = SvPV_flags_const(sv2, cur2, flags);
7257
7258     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7259         /* Differing utf8ness.
7260          * Do not UTF8size the comparands as a side-effect. */
7261          if (PL_encoding) {
7262               if (SvUTF8(sv1)) {
7263                    svrecode = newSVpvn(pv2, cur2);
7264                    sv_recode_to_utf8(svrecode, PL_encoding);
7265                    pv2 = SvPV_const(svrecode, cur2);
7266               }
7267               else {
7268                    svrecode = newSVpvn(pv1, cur1);
7269                    sv_recode_to_utf8(svrecode, PL_encoding);
7270                    pv1 = SvPV_const(svrecode, cur1);
7271               }
7272               /* Now both are in UTF-8. */
7273               if (cur1 != cur2) {
7274                    SvREFCNT_dec(svrecode);
7275                    return FALSE;
7276               }
7277          }
7278          else {
7279               if (SvUTF8(sv1)) {
7280                   /* sv1 is the UTF-8 one  */
7281                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7282                                         (const U8*)pv1, cur1) == 0;
7283               }
7284               else {
7285                   /* sv2 is the UTF-8 one  */
7286                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7287                                         (const U8*)pv2, cur2) == 0;
7288               }
7289          }
7290     }
7291
7292     if (cur1 == cur2)
7293         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7294         
7295     SvREFCNT_dec(svrecode);
7296     if (tpv)
7297         Safefree(tpv);
7298
7299     return eq;
7300 }
7301
7302 /*
7303 =for apidoc sv_cmp
7304
7305 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7306 string in C<sv1> is less than, equal to, or greater than the string in
7307 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7308 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7309
7310 =for apidoc sv_cmp_flags
7311
7312 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7313 string in C<sv1> is less than, equal to, or greater than the string in
7314 C<sv2>. Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7315 if necessary. If the flags include SV_GMAGIC, it handles get magic. See
7316 also C<sv_cmp_locale_flags>.
7317
7318 =cut
7319 */
7320
7321 I32
7322 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7323 {
7324     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7325 }
7326
7327 I32
7328 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7329                   const U32 flags)
7330 {
7331     dVAR;
7332     STRLEN cur1, cur2;
7333     const char *pv1, *pv2;
7334     char *tpv = NULL;
7335     I32  cmp;
7336     SV *svrecode = NULL;
7337
7338     if (!sv1) {
7339         pv1 = "";
7340         cur1 = 0;
7341     }
7342     else
7343         pv1 = SvPV_flags_const(sv1, cur1, flags);
7344
7345     if (!sv2) {
7346         pv2 = "";
7347         cur2 = 0;
7348     }
7349     else
7350         pv2 = SvPV_flags_const(sv2, cur2, flags);
7351
7352     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7353         /* Differing utf8ness.
7354          * Do not UTF8size the comparands as a side-effect. */
7355         if (SvUTF8(sv1)) {
7356             if (PL_encoding) {
7357                  svrecode = newSVpvn(pv2, cur2);
7358                  sv_recode_to_utf8(svrecode, PL_encoding);
7359                  pv2 = SvPV_const(svrecode, cur2);
7360             }
7361             else {
7362                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7363                                                    (const U8*)pv1, cur1);
7364                 return retval ? retval < 0 ? -1 : +1 : 0;
7365             }
7366         }
7367         else {
7368             if (PL_encoding) {
7369                  svrecode = newSVpvn(pv1, cur1);
7370                  sv_recode_to_utf8(svrecode, PL_encoding);
7371                  pv1 = SvPV_const(svrecode, cur1);
7372             }
7373             else {
7374                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7375                                                   (const U8*)pv2, cur2);
7376                 return retval ? retval < 0 ? -1 : +1 : 0;
7377             }
7378         }
7379     }
7380
7381     if (!cur1) {
7382         cmp = cur2 ? -1 : 0;
7383     } else if (!cur2) {
7384         cmp = 1;
7385     } else {
7386         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7387
7388         if (retval) {
7389             cmp = retval < 0 ? -1 : 1;
7390         } else if (cur1 == cur2) {
7391             cmp = 0;
7392         } else {
7393             cmp = cur1 < cur2 ? -1 : 1;
7394         }
7395     }
7396
7397     SvREFCNT_dec(svrecode);
7398     if (tpv)
7399         Safefree(tpv);
7400
7401     return cmp;
7402 }
7403
7404 /*
7405 =for apidoc sv_cmp_locale
7406
7407 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7408 'use bytes' aware, handles get magic, and will coerce its args to strings
7409 if necessary.  See also C<sv_cmp>.
7410
7411 =for apidoc sv_cmp_locale_flags
7412
7413 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7414 'use bytes' aware and will coerce its args to strings if necessary. If the
7415 flags contain SV_GMAGIC, it handles get magic. See also C<sv_cmp_flags>.
7416
7417 =cut
7418 */
7419
7420 I32
7421 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7422 {
7423     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7424 }
7425
7426 I32
7427 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7428                          const U32 flags)
7429 {
7430     dVAR;
7431 #ifdef USE_LOCALE_COLLATE
7432
7433     char *pv1, *pv2;
7434     STRLEN len1, len2;
7435     I32 retval;
7436
7437     if (PL_collation_standard)
7438         goto raw_compare;
7439
7440     len1 = 0;
7441     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7442     len2 = 0;
7443     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7444
7445     if (!pv1 || !len1) {
7446         if (pv2 && len2)
7447             return -1;
7448         else
7449             goto raw_compare;
7450     }
7451     else {
7452         if (!pv2 || !len2)
7453             return 1;
7454     }
7455
7456     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7457
7458     if (retval)
7459         return retval < 0 ? -1 : 1;
7460
7461     /*
7462      * When the result of collation is equality, that doesn't mean
7463      * that there are no differences -- some locales exclude some
7464      * characters from consideration.  So to avoid false equalities,
7465      * we use the raw string as a tiebreaker.
7466      */
7467
7468   raw_compare:
7469     /*FALLTHROUGH*/
7470
7471 #endif /* USE_LOCALE_COLLATE */
7472
7473     return sv_cmp(sv1, sv2);
7474 }
7475
7476
7477 #ifdef USE_LOCALE_COLLATE
7478
7479 /*
7480 =for apidoc sv_collxfrm
7481
7482 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
7483 C<sv_collxfrm_flags>.
7484
7485 =for apidoc sv_collxfrm_flags
7486
7487 Add Collate Transform magic to an SV if it doesn't already have it. If the
7488 flags contain SV_GMAGIC, it handles get-magic.
7489
7490 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7491 scalar data of the variable, but transformed to such a format that a normal
7492 memory comparison can be used to compare the data according to the locale
7493 settings.
7494
7495 =cut
7496 */
7497
7498 char *
7499 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7500 {
7501     dVAR;
7502     MAGIC *mg;
7503
7504     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7505
7506     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7507     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7508         const char *s;
7509         char *xf;
7510         STRLEN len, xlen;
7511
7512         if (mg)
7513             Safefree(mg->mg_ptr);
7514         s = SvPV_flags_const(sv, len, flags);
7515         if ((xf = mem_collxfrm(s, len, &xlen))) {
7516             if (! mg) {
7517 #ifdef PERL_OLD_COPY_ON_WRITE
7518                 if (SvIsCOW(sv))
7519                     sv_force_normal_flags(sv, 0);
7520 #endif
7521                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7522                                  0, 0);
7523                 assert(mg);
7524             }
7525             mg->mg_ptr = xf;
7526             mg->mg_len = xlen;
7527         }
7528         else {
7529             if (mg) {
7530                 mg->mg_ptr = NULL;
7531                 mg->mg_len = -1;
7532             }
7533         }
7534     }
7535     if (mg && mg->mg_ptr) {
7536         *nxp = mg->mg_len;
7537         return mg->mg_ptr + sizeof(PL_collation_ix);
7538     }
7539     else {
7540         *nxp = 0;
7541         return NULL;
7542     }
7543 }
7544
7545 #endif /* USE_LOCALE_COLLATE */
7546
7547 static char *
7548 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7549 {
7550     SV * const tsv = newSV(0);
7551     ENTER;
7552     SAVEFREESV(tsv);
7553     sv_gets(tsv, fp, 0);
7554     sv_utf8_upgrade_nomg(tsv);
7555     SvCUR_set(sv,append);
7556     sv_catsv(sv,tsv);
7557     LEAVE;
7558     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7559 }
7560
7561 static char *
7562 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7563 {
7564     I32 bytesread;
7565     const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7566       /* Grab the size of the record we're getting */
7567     char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7568 #ifdef VMS
7569     int fd;
7570 #endif
7571
7572     /* Go yank in */
7573 #ifdef VMS
7574     /* VMS wants read instead of fread, because fread doesn't respect */
7575     /* RMS record boundaries. This is not necessarily a good thing to be */
7576     /* doing, but we've got no other real choice - except avoid stdio
7577        as implementation - perhaps write a :vms layer ?
7578     */
7579     fd = PerlIO_fileno(fp);
7580     if (fd != -1) {
7581         bytesread = PerlLIO_read(fd, buffer, recsize);
7582     }
7583     else /* in-memory file from PerlIO::Scalar */
7584 #endif
7585     {
7586         bytesread = PerlIO_read(fp, buffer, recsize);
7587     }
7588
7589     if (bytesread < 0)
7590         bytesread = 0;
7591     SvCUR_set(sv, bytesread + append);
7592     buffer[bytesread] = '\0';
7593     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7594 }
7595
7596 /*
7597 =for apidoc sv_gets
7598
7599 Get a line from the filehandle and store it into the SV, optionally
7600 appending to the currently-stored string.
7601
7602 =cut
7603 */
7604
7605 char *
7606 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7607 {
7608     dVAR;
7609     const char *rsptr;
7610     STRLEN rslen;
7611     register STDCHAR rslast;
7612     register STDCHAR *bp;
7613     register I32 cnt;
7614     I32 i = 0;
7615     I32 rspara = 0;
7616
7617     PERL_ARGS_ASSERT_SV_GETS;
7618
7619     if (SvTHINKFIRST(sv))
7620         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7621     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7622        from <>.
7623        However, perlbench says it's slower, because the existing swipe code
7624        is faster than copy on write.
7625        Swings and roundabouts.  */
7626     SvUPGRADE(sv, SVt_PV);
7627
7628     SvSCREAM_off(sv);
7629
7630     if (append) {
7631         if (PerlIO_isutf8(fp)) {
7632             if (!SvUTF8(sv)) {
7633                 sv_utf8_upgrade_nomg(sv);
7634                 sv_pos_u2b(sv,&append,0);
7635             }
7636         } else if (SvUTF8(sv)) {
7637             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7638         }
7639     }
7640
7641     SvPOK_only(sv);
7642     if (!append) {
7643         SvCUR_set(sv,0);
7644     }
7645     if (PerlIO_isutf8(fp))
7646         SvUTF8_on(sv);
7647
7648     if (IN_PERL_COMPILETIME) {
7649         /* we always read code in line mode */
7650         rsptr = "\n";
7651         rslen = 1;
7652     }
7653     else if (RsSNARF(PL_rs)) {
7654         /* If it is a regular disk file use size from stat() as estimate
7655            of amount we are going to read -- may result in mallocing
7656            more memory than we really need if the layers below reduce
7657            the size we read (e.g. CRLF or a gzip layer).
7658          */
7659         Stat_t st;
7660         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7661             const Off_t offset = PerlIO_tell(fp);
7662             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7663                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7664             }
7665         }
7666         rsptr = NULL;
7667         rslen = 0;
7668     }
7669     else if (RsRECORD(PL_rs)) {
7670         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7671     }
7672     else if (RsPARA(PL_rs)) {
7673         rsptr = "\n\n";
7674         rslen = 2;
7675         rspara = 1;
7676     }
7677     else {
7678         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7679         if (PerlIO_isutf8(fp)) {
7680             rsptr = SvPVutf8(PL_rs, rslen);
7681         }
7682         else {
7683             if (SvUTF8(PL_rs)) {
7684                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7685                     Perl_croak(aTHX_ "Wide character in $/");
7686                 }
7687             }
7688             rsptr = SvPV_const(PL_rs, rslen);
7689         }
7690     }
7691
7692     rslast = rslen ? rsptr[rslen - 1] : '\0';
7693
7694     if (rspara) {               /* have to do this both before and after */
7695         do {                    /* to make sure file boundaries work right */
7696             if (PerlIO_eof(fp))
7697                 return 0;
7698             i = PerlIO_getc(fp);
7699             if (i != '\n') {
7700                 if (i == -1)
7701                     return 0;
7702                 PerlIO_ungetc(fp,i);
7703                 break;
7704             }
7705         } while (i != EOF);
7706     }
7707
7708     /* See if we know enough about I/O mechanism to cheat it ! */
7709
7710     /* This used to be #ifdef test - it is made run-time test for ease
7711        of abstracting out stdio interface. One call should be cheap
7712        enough here - and may even be a macro allowing compile
7713        time optimization.
7714      */
7715
7716     if (PerlIO_fast_gets(fp)) {
7717
7718     /*
7719      * We're going to steal some values from the stdio struct
7720      * and put EVERYTHING in the innermost loop into registers.
7721      */
7722     register STDCHAR *ptr;
7723     STRLEN bpx;
7724     I32 shortbuffered;
7725
7726 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7727     /* An ungetc()d char is handled separately from the regular
7728      * buffer, so we getc() it back out and stuff it in the buffer.
7729      */
7730     i = PerlIO_getc(fp);
7731     if (i == EOF) return 0;
7732     *(--((*fp)->_ptr)) = (unsigned char) i;
7733     (*fp)->_cnt++;
7734 #endif
7735
7736     /* Here is some breathtakingly efficient cheating */
7737
7738     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7739     /* make sure we have the room */
7740     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7741         /* Not room for all of it
7742            if we are looking for a separator and room for some
7743          */
7744         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7745             /* just process what we have room for */
7746             shortbuffered = cnt - SvLEN(sv) + append + 1;
7747             cnt -= shortbuffered;
7748         }
7749         else {
7750             shortbuffered = 0;
7751             /* remember that cnt can be negative */
7752             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7753         }
7754     }
7755     else
7756         shortbuffered = 0;
7757     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7758     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7759     DEBUG_P(PerlIO_printf(Perl_debug_log,
7760         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7761     DEBUG_P(PerlIO_printf(Perl_debug_log,
7762         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7763                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7764                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7765     for (;;) {
7766       screamer:
7767         if (cnt > 0) {
7768             if (rslen) {
7769                 while (cnt > 0) {                    /* this     |  eat */
7770                     cnt--;
7771                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7772                         goto thats_all_folks;        /* screams  |  sed :-) */
7773                 }
7774             }
7775             else {
7776                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7777                 bp += cnt;                           /* screams  |  dust */
7778                 ptr += cnt;                          /* louder   |  sed :-) */
7779                 cnt = 0;
7780                 assert (!shortbuffered);
7781                 goto cannot_be_shortbuffered;
7782             }
7783         }
7784         
7785         if (shortbuffered) {            /* oh well, must extend */
7786             cnt = shortbuffered;
7787             shortbuffered = 0;
7788             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7789             SvCUR_set(sv, bpx);
7790             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7791             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7792             continue;
7793         }
7794
7795     cannot_be_shortbuffered:
7796         DEBUG_P(PerlIO_printf(Perl_debug_log,
7797                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7798                               PTR2UV(ptr),(long)cnt));
7799         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7800
7801         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7802             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7803             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7804             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7805
7806         /* This used to call 'filbuf' in stdio form, but as that behaves like
7807            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7808            another abstraction.  */
7809         i   = PerlIO_getc(fp);          /* get more characters */
7810
7811         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7812             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7813             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7814             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7815
7816         cnt = PerlIO_get_cnt(fp);
7817         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7818         DEBUG_P(PerlIO_printf(Perl_debug_log,
7819             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7820
7821         if (i == EOF)                   /* all done for ever? */
7822             goto thats_really_all_folks;
7823
7824         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7825         SvCUR_set(sv, bpx);
7826         SvGROW(sv, bpx + cnt + 2);
7827         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7828
7829         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7830
7831         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7832             goto thats_all_folks;
7833     }
7834
7835 thats_all_folks:
7836     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7837           memNE((char*)bp - rslen, rsptr, rslen))
7838         goto screamer;                          /* go back to the fray */
7839 thats_really_all_folks:
7840     if (shortbuffered)
7841         cnt += shortbuffered;
7842         DEBUG_P(PerlIO_printf(Perl_debug_log,
7843             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7844     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7845     DEBUG_P(PerlIO_printf(Perl_debug_log,
7846         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7847         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7848         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7849     *bp = '\0';
7850     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7851     DEBUG_P(PerlIO_printf(Perl_debug_log,
7852         "Screamer: done, len=%ld, string=|%.*s|\n",
7853         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7854     }
7855    else
7856     {
7857        /*The big, slow, and stupid way. */
7858 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7859         STDCHAR *buf = NULL;
7860         Newx(buf, 8192, STDCHAR);
7861         assert(buf);
7862 #else
7863         STDCHAR buf[8192];
7864 #endif
7865
7866 screamer2:
7867         if (rslen) {
7868             register const STDCHAR * const bpe = buf + sizeof(buf);
7869             bp = buf;
7870             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7871                 ; /* keep reading */
7872             cnt = bp - buf;
7873         }
7874         else {
7875             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7876             /* Accommodate broken VAXC compiler, which applies U8 cast to
7877              * both args of ?: operator, causing EOF to change into 255
7878              */
7879             if (cnt > 0)
7880                  i = (U8)buf[cnt - 1];
7881             else
7882                  i = EOF;
7883         }
7884
7885         if (cnt < 0)
7886             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7887         if (append)
7888              sv_catpvn(sv, (char *) buf, cnt);
7889         else
7890              sv_setpvn(sv, (char *) buf, cnt);
7891
7892         if (i != EOF &&                 /* joy */
7893             (!rslen ||
7894              SvCUR(sv) < rslen ||
7895              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7896         {
7897             append = -1;
7898             /*
7899              * If we're reading from a TTY and we get a short read,
7900              * indicating that the user hit his EOF character, we need
7901              * to notice it now, because if we try to read from the TTY
7902              * again, the EOF condition will disappear.
7903              *
7904              * The comparison of cnt to sizeof(buf) is an optimization
7905              * that prevents unnecessary calls to feof().
7906              *
7907              * - jik 9/25/96
7908              */
7909             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7910                 goto screamer2;
7911         }
7912
7913 #ifdef USE_HEAP_INSTEAD_OF_STACK
7914         Safefree(buf);
7915 #endif
7916     }
7917
7918     if (rspara) {               /* have to do this both before and after */
7919         while (i != EOF) {      /* to make sure file boundaries work right */
7920             i = PerlIO_getc(fp);
7921             if (i != '\n') {
7922                 PerlIO_ungetc(fp,i);
7923                 break;
7924             }
7925         }
7926     }
7927
7928     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7929 }
7930
7931 /*
7932 =for apidoc sv_inc
7933
7934 Auto-increment of the value in the SV, doing string to numeric conversion
7935 if necessary. Handles 'get' magic and operator overloading.
7936
7937 =cut
7938 */
7939
7940 void
7941 Perl_sv_inc(pTHX_ register SV *const sv)
7942 {
7943     if (!sv)
7944         return;
7945     SvGETMAGIC(sv);
7946     sv_inc_nomg(sv);
7947 }
7948
7949 /*
7950 =for apidoc sv_inc_nomg
7951
7952 Auto-increment of the value in the SV, doing string to numeric conversion
7953 if necessary. Handles operator overloading. Skips handling 'get' magic.
7954
7955 =cut
7956 */
7957
7958 void
7959 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7960 {
7961     dVAR;
7962     register char *d;
7963     int flags;
7964
7965     if (!sv)
7966         return;
7967     if (SvTHINKFIRST(sv)) {
7968         if (SvIsCOW(sv))
7969             sv_force_normal_flags(sv, 0);
7970         if (SvREADONLY(sv)) {
7971             if (IN_PERL_RUNTIME)
7972                 Perl_croak_no_modify(aTHX);
7973         }
7974         if (SvROK(sv)) {
7975             IV i;
7976             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
7977                 return;
7978             i = PTR2IV(SvRV(sv));
7979             sv_unref(sv);
7980             sv_setiv(sv, i);
7981         }
7982     }
7983     flags = SvFLAGS(sv);
7984     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7985         /* It's (privately or publicly) a float, but not tested as an
7986            integer, so test it to see. */
7987         (void) SvIV(sv);
7988         flags = SvFLAGS(sv);
7989     }
7990     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7991         /* It's publicly an integer, or privately an integer-not-float */
7992 #ifdef PERL_PRESERVE_IVUV
7993       oops_its_int:
7994 #endif
7995         if (SvIsUV(sv)) {
7996             if (SvUVX(sv) == UV_MAX)
7997                 sv_setnv(sv, UV_MAX_P1);
7998             else
7999                 (void)SvIOK_only_UV(sv);
8000                 SvUV_set(sv, SvUVX(sv) + 1);
8001         } else {
8002             if (SvIVX(sv) == IV_MAX)
8003                 sv_setuv(sv, (UV)IV_MAX + 1);
8004             else {
8005                 (void)SvIOK_only(sv);
8006                 SvIV_set(sv, SvIVX(sv) + 1);
8007             }   
8008         }
8009         return;
8010     }
8011     if (flags & SVp_NOK) {
8012         const NV was = SvNVX(sv);
8013         if (NV_OVERFLOWS_INTEGERS_AT &&
8014             was >= NV_OVERFLOWS_INTEGERS_AT) {
8015             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8016                            "Lost precision when incrementing %" NVff " by 1",
8017                            was);
8018         }
8019         (void)SvNOK_only(sv);
8020         SvNV_set(sv, was + 1.0);
8021         return;
8022     }
8023
8024     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8025         if ((flags & SVTYPEMASK) < SVt_PVIV)
8026             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8027         (void)SvIOK_only(sv);
8028         SvIV_set(sv, 1);
8029         return;
8030     }
8031     d = SvPVX(sv);
8032     while (isALPHA(*d)) d++;
8033     while (isDIGIT(*d)) d++;
8034     if (d < SvEND(sv)) {
8035 #ifdef PERL_PRESERVE_IVUV
8036         /* Got to punt this as an integer if needs be, but we don't issue
8037            warnings. Probably ought to make the sv_iv_please() that does
8038            the conversion if possible, and silently.  */
8039         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8040         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8041             /* Need to try really hard to see if it's an integer.
8042                9.22337203685478e+18 is an integer.
8043                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8044                so $a="9.22337203685478e+18"; $a+0; $a++
8045                needs to be the same as $a="9.22337203685478e+18"; $a++
8046                or we go insane. */
8047         
8048             (void) sv_2iv(sv);
8049             if (SvIOK(sv))
8050                 goto oops_its_int;
8051
8052             /* sv_2iv *should* have made this an NV */
8053             if (flags & SVp_NOK) {
8054                 (void)SvNOK_only(sv);
8055                 SvNV_set(sv, SvNVX(sv) + 1.0);
8056                 return;
8057             }
8058             /* I don't think we can get here. Maybe I should assert this
8059                And if we do get here I suspect that sv_setnv will croak. NWC
8060                Fall through. */
8061 #if defined(USE_LONG_DOUBLE)
8062             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",
8063                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8064 #else
8065             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8066                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8067 #endif
8068         }
8069 #endif /* PERL_PRESERVE_IVUV */
8070         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8071         return;
8072     }
8073     d--;
8074     while (d >= SvPVX_const(sv)) {
8075         if (isDIGIT(*d)) {
8076             if (++*d <= '9')
8077                 return;
8078             *(d--) = '0';
8079         }
8080         else {
8081 #ifdef EBCDIC
8082             /* MKS: The original code here died if letters weren't consecutive.
8083              * at least it didn't have to worry about non-C locales.  The
8084              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8085              * arranged in order (although not consecutively) and that only
8086              * [A-Za-z] are accepted by isALPHA in the C locale.
8087              */
8088             if (*d != 'z' && *d != 'Z') {
8089                 do { ++*d; } while (!isALPHA(*d));
8090                 return;
8091             }
8092             *(d--) -= 'z' - 'a';
8093 #else
8094             ++*d;
8095             if (isALPHA(*d))
8096                 return;
8097             *(d--) -= 'z' - 'a' + 1;
8098 #endif
8099         }
8100     }
8101     /* oh,oh, the number grew */
8102     SvGROW(sv, SvCUR(sv) + 2);
8103     SvCUR_set(sv, SvCUR(sv) + 1);
8104     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8105         *d = d[-1];
8106     if (isDIGIT(d[1]))
8107         *d = '1';
8108     else
8109         *d = d[1];
8110 }
8111
8112 /*
8113 =for apidoc sv_dec
8114
8115 Auto-decrement of the value in the SV, doing string to numeric conversion
8116 if necessary. Handles 'get' magic and operator overloading.
8117
8118 =cut
8119 */
8120
8121 void
8122 Perl_sv_dec(pTHX_ register SV *const sv)
8123 {
8124     dVAR;
8125     if (!sv)
8126         return;
8127     SvGETMAGIC(sv);
8128     sv_dec_nomg(sv);
8129 }
8130
8131 /*
8132 =for apidoc sv_dec_nomg
8133
8134 Auto-decrement of the value in the SV, doing string to numeric conversion
8135 if necessary. Handles operator overloading. Skips handling 'get' magic.
8136
8137 =cut
8138 */
8139
8140 void
8141 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8142 {
8143     dVAR;
8144     int flags;
8145
8146     if (!sv)
8147         return;
8148     if (SvTHINKFIRST(sv)) {
8149         if (SvIsCOW(sv))
8150             sv_force_normal_flags(sv, 0);
8151         if (SvREADONLY(sv)) {
8152             if (IN_PERL_RUNTIME)
8153                 Perl_croak_no_modify(aTHX);
8154         }
8155         if (SvROK(sv)) {
8156             IV i;
8157             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8158                 return;
8159             i = PTR2IV(SvRV(sv));
8160             sv_unref(sv);
8161             sv_setiv(sv, i);
8162         }
8163     }
8164     /* Unlike sv_inc we don't have to worry about string-never-numbers
8165        and keeping them magic. But we mustn't warn on punting */
8166     flags = SvFLAGS(sv);
8167     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8168         /* It's publicly an integer, or privately an integer-not-float */
8169 #ifdef PERL_PRESERVE_IVUV
8170       oops_its_int:
8171 #endif
8172         if (SvIsUV(sv)) {
8173             if (SvUVX(sv) == 0) {
8174                 (void)SvIOK_only(sv);
8175                 SvIV_set(sv, -1);
8176             }
8177             else {
8178                 (void)SvIOK_only_UV(sv);
8179                 SvUV_set(sv, SvUVX(sv) - 1);
8180             }   
8181         } else {
8182             if (SvIVX(sv) == IV_MIN) {
8183                 sv_setnv(sv, (NV)IV_MIN);
8184                 goto oops_its_num;
8185             }
8186             else {
8187                 (void)SvIOK_only(sv);
8188                 SvIV_set(sv, SvIVX(sv) - 1);
8189             }   
8190         }
8191         return;
8192     }
8193     if (flags & SVp_NOK) {
8194     oops_its_num:
8195         {
8196             const NV was = SvNVX(sv);
8197             if (NV_OVERFLOWS_INTEGERS_AT &&
8198                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8199                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8200                                "Lost precision when decrementing %" NVff " by 1",
8201                                was);
8202             }
8203             (void)SvNOK_only(sv);
8204             SvNV_set(sv, was - 1.0);
8205             return;
8206         }
8207     }
8208     if (!(flags & SVp_POK)) {
8209         if ((flags & SVTYPEMASK) < SVt_PVIV)
8210             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8211         SvIV_set(sv, -1);
8212         (void)SvIOK_only(sv);
8213         return;
8214     }
8215 #ifdef PERL_PRESERVE_IVUV
8216     {
8217         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8218         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8219             /* Need to try really hard to see if it's an integer.
8220                9.22337203685478e+18 is an integer.
8221                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8222                so $a="9.22337203685478e+18"; $a+0; $a--
8223                needs to be the same as $a="9.22337203685478e+18"; $a--
8224                or we go insane. */
8225         
8226             (void) sv_2iv(sv);
8227             if (SvIOK(sv))
8228                 goto oops_its_int;
8229
8230             /* sv_2iv *should* have made this an NV */
8231             if (flags & SVp_NOK) {
8232                 (void)SvNOK_only(sv);
8233                 SvNV_set(sv, SvNVX(sv) - 1.0);
8234                 return;
8235             }
8236             /* I don't think we can get here. Maybe I should assert this
8237                And if we do get here I suspect that sv_setnv will croak. NWC
8238                Fall through. */
8239 #if defined(USE_LONG_DOUBLE)
8240             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",
8241                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8242 #else
8243             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8244                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8245 #endif
8246         }
8247     }
8248 #endif /* PERL_PRESERVE_IVUV */
8249     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8250 }
8251
8252 /* this define is used to eliminate a chunk of duplicated but shared logic
8253  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8254  * used anywhere but here - yves
8255  */
8256 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8257     STMT_START {      \
8258         EXTEND_MORTAL(1); \
8259         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8260     } STMT_END
8261
8262 /*
8263 =for apidoc sv_mortalcopy
8264
8265 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8266 The new SV is marked as mortal. It will be destroyed "soon", either by an
8267 explicit call to FREETMPS, or by an implicit call at places such as
8268 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8269
8270 =cut
8271 */
8272
8273 /* Make a string that will exist for the duration of the expression
8274  * evaluation.  Actually, it may have to last longer than that, but
8275  * hopefully we won't free it until it has been assigned to a
8276  * permanent location. */
8277
8278 SV *
8279 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
8280 {
8281     dVAR;
8282     register SV *sv;
8283
8284     new_SV(sv);
8285     sv_setsv(sv,oldstr);
8286     PUSH_EXTEND_MORTAL__SV_C(sv);
8287     SvTEMP_on(sv);
8288     return sv;
8289 }
8290
8291 /*
8292 =for apidoc sv_newmortal
8293
8294 Creates a new null SV which is mortal.  The reference count of the SV is
8295 set to 1. It will be destroyed "soon", either by an explicit call to
8296 FREETMPS, or by an implicit call at places such as statement boundaries.
8297 See also C<sv_mortalcopy> and C<sv_2mortal>.
8298
8299 =cut
8300 */
8301
8302 SV *
8303 Perl_sv_newmortal(pTHX)
8304 {
8305     dVAR;
8306     register SV *sv;
8307
8308     new_SV(sv);
8309     SvFLAGS(sv) = SVs_TEMP;
8310     PUSH_EXTEND_MORTAL__SV_C(sv);
8311     return sv;
8312 }
8313
8314
8315 /*
8316 =for apidoc newSVpvn_flags
8317
8318 Creates a new SV and copies a string into it.  The reference count for the
8319 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8320 string.  You are responsible for ensuring that the source string is at least
8321 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8322 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8323 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8324 returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
8325 C<SVf_UTF8> flag will be set on the new SV.
8326 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8327
8328     #define newSVpvn_utf8(s, len, u)                    \
8329         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8330
8331 =cut
8332 */
8333
8334 SV *
8335 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8336 {
8337     dVAR;
8338     register SV *sv;
8339
8340     /* All the flags we don't support must be zero.
8341        And we're new code so I'm going to assert this from the start.  */
8342     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8343     new_SV(sv);
8344     sv_setpvn(sv,s,len);
8345
8346     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8347      * and do what it does ourselves here.
8348      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8349      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8350      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8351      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8352      */
8353
8354     SvFLAGS(sv) |= flags;
8355
8356     if(flags & SVs_TEMP){
8357         PUSH_EXTEND_MORTAL__SV_C(sv);
8358     }
8359
8360     return sv;
8361 }
8362
8363 /*
8364 =for apidoc sv_2mortal
8365
8366 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8367 by an explicit call to FREETMPS, or by an implicit call at places such as
8368 statement boundaries.  SvTEMP() is turned on which means that the SV's
8369 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
8370 and C<sv_mortalcopy>.
8371
8372 =cut
8373 */
8374
8375 SV *
8376 Perl_sv_2mortal(pTHX_ register SV *const sv)
8377 {
8378     dVAR;
8379     if (!sv)
8380         return NULL;
8381     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8382         return sv;
8383     PUSH_EXTEND_MORTAL__SV_C(sv);
8384     SvTEMP_on(sv);
8385     return sv;
8386 }
8387
8388 /*
8389 =for apidoc newSVpv
8390
8391 Creates a new SV and copies a string into it.  The reference count for the
8392 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8393 strlen().  For efficiency, consider using C<newSVpvn> instead.
8394
8395 =cut
8396 */
8397
8398 SV *
8399 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8400 {
8401     dVAR;
8402     register SV *sv;
8403
8404     new_SV(sv);
8405     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8406     return sv;
8407 }
8408
8409 /*
8410 =for apidoc newSVpvn
8411
8412 Creates a new SV and copies a string into it.  The reference count for the
8413 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8414 string.  You are responsible for ensuring that the source string is at least
8415 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8416
8417 =cut
8418 */
8419
8420 SV *
8421 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
8422 {
8423     dVAR;
8424     register SV *sv;
8425
8426     new_SV(sv);
8427     sv_setpvn(sv,s,len);
8428     return sv;
8429 }
8430
8431 /*
8432 =for apidoc newSVhek
8433
8434 Creates a new SV from the hash key structure.  It will generate scalars that
8435 point to the shared string table where possible. Returns a new (undefined)
8436 SV if the hek is NULL.
8437
8438 =cut
8439 */
8440
8441 SV *
8442 Perl_newSVhek(pTHX_ const HEK *const hek)
8443 {
8444     dVAR;
8445     if (!hek) {
8446         SV *sv;
8447
8448         new_SV(sv);
8449         return sv;
8450     }
8451
8452     if (HEK_LEN(hek) == HEf_SVKEY) {
8453         return newSVsv(*(SV**)HEK_KEY(hek));
8454     } else {
8455         const int flags = HEK_FLAGS(hek);
8456         if (flags & HVhek_WASUTF8) {
8457             /* Trouble :-)
8458                Andreas would like keys he put in as utf8 to come back as utf8
8459             */
8460             STRLEN utf8_len = HEK_LEN(hek);
8461             SV * const sv = newSV_type(SVt_PV);
8462             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8463             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8464             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8465             SvUTF8_on (sv);
8466             return sv;
8467         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8468             /* We don't have a pointer to the hv, so we have to replicate the
8469                flag into every HEK. This hv is using custom a hasing
8470                algorithm. Hence we can't return a shared string scalar, as
8471                that would contain the (wrong) hash value, and might get passed
8472                into an hv routine with a regular hash.
8473                Similarly, a hash that isn't using shared hash keys has to have
8474                the flag in every key so that we know not to try to call
8475                share_hek_kek on it.  */
8476
8477             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8478             if (HEK_UTF8(hek))
8479                 SvUTF8_on (sv);
8480             return sv;
8481         }
8482         /* This will be overwhelminly the most common case.  */
8483         {
8484             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8485                more efficient than sharepvn().  */
8486             SV *sv;
8487
8488             new_SV(sv);
8489             sv_upgrade(sv, SVt_PV);
8490             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8491             SvCUR_set(sv, HEK_LEN(hek));
8492             SvLEN_set(sv, 0);
8493             SvREADONLY_on(sv);
8494             SvFAKE_on(sv);
8495             SvPOK_on(sv);
8496             if (HEK_UTF8(hek))
8497                 SvUTF8_on(sv);
8498             return sv;
8499         }
8500     }
8501 }
8502
8503 /*
8504 =for apidoc newSVpvn_share
8505
8506 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8507 table. If the string does not already exist in the table, it is created
8508 first.  Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
8509 value is used; otherwise the hash is computed. The string's hash can be later
8510 be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
8511 that as the string table is used for shared hash keys these strings will have
8512 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8513
8514 =cut
8515 */
8516
8517 SV *
8518 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8519 {
8520     dVAR;
8521     register SV *sv;
8522     bool is_utf8 = FALSE;
8523     const char *const orig_src = src;
8524
8525     if (len < 0) {
8526         STRLEN tmplen = -len;
8527         is_utf8 = TRUE;
8528         /* See the note in hv.c:hv_fetch() --jhi */
8529         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8530         len = tmplen;
8531     }
8532     if (!hash)
8533         PERL_HASH(hash, src, len);
8534     new_SV(sv);
8535     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8536        changes here, update it there too.  */
8537     sv_upgrade(sv, SVt_PV);
8538     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8539     SvCUR_set(sv, len);
8540     SvLEN_set(sv, 0);
8541     SvREADONLY_on(sv);
8542     SvFAKE_on(sv);
8543     SvPOK_on(sv);
8544     if (is_utf8)
8545         SvUTF8_on(sv);
8546     if (src != orig_src)
8547         Safefree(src);
8548     return sv;
8549 }
8550
8551 /*
8552 =for apidoc newSVpv_share
8553
8554 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8555 string/length pair.
8556
8557 =cut
8558 */
8559
8560 SV *
8561 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8562 {
8563     return newSVpvn_share(src, strlen(src), hash);
8564 }
8565
8566 #if defined(PERL_IMPLICIT_CONTEXT)
8567
8568 /* pTHX_ magic can't cope with varargs, so this is a no-context
8569  * version of the main function, (which may itself be aliased to us).
8570  * Don't access this version directly.
8571  */
8572
8573 SV *
8574 Perl_newSVpvf_nocontext(const char *const pat, ...)
8575 {
8576     dTHX;
8577     register SV *sv;
8578     va_list args;
8579
8580     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8581
8582     va_start(args, pat);
8583     sv = vnewSVpvf(pat, &args);
8584     va_end(args);
8585     return sv;
8586 }
8587 #endif
8588
8589 /*
8590 =for apidoc newSVpvf
8591
8592 Creates a new SV and initializes it with the string formatted like
8593 C<sprintf>.
8594
8595 =cut
8596 */
8597
8598 SV *
8599 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8600 {
8601     register SV *sv;
8602     va_list args;
8603
8604     PERL_ARGS_ASSERT_NEWSVPVF;
8605
8606     va_start(args, pat);
8607     sv = vnewSVpvf(pat, &args);
8608     va_end(args);
8609     return sv;
8610 }
8611
8612 /* backend for newSVpvf() and newSVpvf_nocontext() */
8613
8614 SV *
8615 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8616 {
8617     dVAR;
8618     register SV *sv;
8619
8620     PERL_ARGS_ASSERT_VNEWSVPVF;
8621
8622     new_SV(sv);
8623     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8624     return sv;
8625 }
8626
8627 /*
8628 =for apidoc newSVnv
8629
8630 Creates a new SV and copies a floating point value into it.
8631 The reference count for the SV is set to 1.
8632
8633 =cut
8634 */
8635
8636 SV *
8637 Perl_newSVnv(pTHX_ const NV n)
8638 {
8639     dVAR;
8640     register SV *sv;
8641
8642     new_SV(sv);
8643     sv_setnv(sv,n);
8644     return sv;
8645 }
8646
8647 /*
8648 =for apidoc newSViv
8649
8650 Creates a new SV and copies an integer into it.  The reference count for the
8651 SV is set to 1.
8652
8653 =cut
8654 */
8655
8656 SV *
8657 Perl_newSViv(pTHX_ const IV i)
8658 {
8659     dVAR;
8660     register SV *sv;
8661
8662     new_SV(sv);
8663     sv_setiv(sv,i);
8664     return sv;
8665 }
8666
8667 /*
8668 =for apidoc newSVuv
8669
8670 Creates a new SV and copies an unsigned integer into it.
8671 The reference count for the SV is set to 1.
8672
8673 =cut
8674 */
8675
8676 SV *
8677 Perl_newSVuv(pTHX_ const UV u)
8678 {
8679     dVAR;
8680     register SV *sv;
8681
8682     new_SV(sv);
8683     sv_setuv(sv,u);
8684     return sv;
8685 }
8686
8687 /*
8688 =for apidoc newSV_type
8689
8690 Creates a new SV, of the type specified.  The reference count for the new SV
8691 is set to 1.
8692
8693 =cut
8694 */
8695
8696 SV *
8697 Perl_newSV_type(pTHX_ const svtype type)
8698 {
8699     register SV *sv;
8700
8701     new_SV(sv);
8702     sv_upgrade(sv, type);
8703     return sv;
8704 }
8705
8706 /*
8707 =for apidoc newRV_noinc
8708
8709 Creates an RV wrapper for an SV.  The reference count for the original
8710 SV is B<not> incremented.
8711
8712 =cut
8713 */
8714
8715 SV *
8716 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8717 {
8718     dVAR;
8719     register SV *sv = newSV_type(SVt_IV);
8720
8721     PERL_ARGS_ASSERT_NEWRV_NOINC;
8722
8723     SvTEMP_off(tmpRef);
8724     SvRV_set(sv, tmpRef);
8725     SvROK_on(sv);
8726     return sv;
8727 }
8728
8729 /* newRV_inc is the official function name to use now.
8730  * newRV_inc is in fact #defined to newRV in sv.h
8731  */
8732
8733 SV *
8734 Perl_newRV(pTHX_ SV *const sv)
8735 {
8736     dVAR;
8737
8738     PERL_ARGS_ASSERT_NEWRV;
8739
8740     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8741 }
8742
8743 /*
8744 =for apidoc newSVsv
8745
8746 Creates a new SV which is an exact duplicate of the original SV.
8747 (Uses C<sv_setsv>).
8748
8749 =cut
8750 */
8751
8752 SV *
8753 Perl_newSVsv(pTHX_ register SV *const old)
8754 {
8755     dVAR;
8756     register SV *sv;
8757
8758     if (!old)
8759         return NULL;
8760     if (SvTYPE(old) == SVTYPEMASK) {
8761         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8762         return NULL;
8763     }
8764     new_SV(sv);
8765     /* SV_GMAGIC is the default for sv_setv()
8766        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8767        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8768     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8769     return sv;
8770 }
8771
8772 /*
8773 =for apidoc sv_reset
8774
8775 Underlying implementation for the C<reset> Perl function.
8776 Note that the perl-level function is vaguely deprecated.
8777
8778 =cut
8779 */
8780
8781 void
8782 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8783 {
8784     dVAR;
8785     char todo[PERL_UCHAR_MAX+1];
8786
8787     PERL_ARGS_ASSERT_SV_RESET;
8788
8789     if (!stash)
8790         return;
8791
8792     if (!*s) {          /* reset ?? searches */
8793         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8794         if (mg) {
8795             const U32 count = mg->mg_len / sizeof(PMOP**);
8796             PMOP **pmp = (PMOP**) mg->mg_ptr;
8797             PMOP *const *const end = pmp + count;
8798
8799             while (pmp < end) {
8800 #ifdef USE_ITHREADS
8801                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8802 #else
8803                 (*pmp)->op_pmflags &= ~PMf_USED;
8804 #endif
8805                 ++pmp;
8806             }
8807         }
8808         return;
8809     }
8810
8811     /* reset variables */
8812
8813     if (!HvARRAY(stash))
8814         return;
8815
8816     Zero(todo, 256, char);
8817     while (*s) {
8818         I32 max;
8819         I32 i = (unsigned char)*s;
8820         if (s[1] == '-') {
8821             s += 2;
8822         }
8823         max = (unsigned char)*s++;
8824         for ( ; i <= max; i++) {
8825             todo[i] = 1;
8826         }
8827         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8828             HE *entry;
8829             for (entry = HvARRAY(stash)[i];
8830                  entry;
8831                  entry = HeNEXT(entry))
8832             {
8833                 register GV *gv;
8834                 register SV *sv;
8835
8836                 if (!todo[(U8)*HeKEY(entry)])
8837                     continue;
8838                 gv = MUTABLE_GV(HeVAL(entry));
8839                 sv = GvSV(gv);
8840                 if (sv) {
8841                     if (SvTHINKFIRST(sv)) {
8842                         if (!SvREADONLY(sv) && SvROK(sv))
8843                             sv_unref(sv);
8844                         /* XXX Is this continue a bug? Why should THINKFIRST
8845                            exempt us from resetting arrays and hashes?  */
8846                         continue;
8847                     }
8848                     SvOK_off(sv);
8849                     if (SvTYPE(sv) >= SVt_PV) {
8850                         SvCUR_set(sv, 0);
8851                         if (SvPVX_const(sv) != NULL)
8852                             *SvPVX(sv) = '\0';
8853                         SvTAINT(sv);
8854                     }
8855                 }
8856                 if (GvAV(gv)) {
8857                     av_clear(GvAV(gv));
8858                 }
8859                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8860 #if defined(VMS)
8861                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8862 #else /* ! VMS */
8863                     hv_clear(GvHV(gv));
8864 #  if defined(USE_ENVIRON_ARRAY)
8865                     if (gv == PL_envgv)
8866                         my_clearenv();
8867 #  endif /* USE_ENVIRON_ARRAY */
8868 #endif /* VMS */
8869                 }
8870             }
8871         }
8872     }
8873 }
8874
8875 /*
8876 =for apidoc sv_2io
8877
8878 Using various gambits, try to get an IO from an SV: the IO slot if its a
8879 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8880 named after the PV if we're a string.
8881
8882 =cut
8883 */
8884
8885 IO*
8886 Perl_sv_2io(pTHX_ SV *const sv)
8887 {
8888     IO* io;
8889     GV* gv;
8890
8891     PERL_ARGS_ASSERT_SV_2IO;
8892
8893     switch (SvTYPE(sv)) {
8894     case SVt_PVIO:
8895         io = MUTABLE_IO(sv);
8896         break;
8897     case SVt_PVGV:
8898     case SVt_PVLV:
8899         if (isGV_with_GP(sv)) {
8900             gv = MUTABLE_GV(sv);
8901             io = GvIO(gv);
8902             if (!io)
8903                 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8904             break;
8905         }
8906         /* FALL THROUGH */
8907     default:
8908         if (!SvOK(sv))
8909             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8910         if (SvROK(sv))
8911             return sv_2io(SvRV(sv));
8912         gv = gv_fetchsv(sv, 0, SVt_PVIO);
8913         if (gv)
8914             io = GvIO(gv);
8915         else
8916             io = 0;
8917         if (!io)
8918             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
8919         break;
8920     }
8921     return io;
8922 }
8923
8924 /*
8925 =for apidoc sv_2cv
8926
8927 Using various gambits, try to get a CV from an SV; in addition, try if
8928 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8929 The flags in C<lref> are passed to gv_fetchsv.
8930
8931 =cut
8932 */
8933
8934 CV *
8935 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8936 {
8937     dVAR;
8938     GV *gv = NULL;
8939     CV *cv = NULL;
8940
8941     PERL_ARGS_ASSERT_SV_2CV;
8942
8943     if (!sv) {
8944         *st = NULL;
8945         *gvp = NULL;
8946         return NULL;
8947     }
8948     switch (SvTYPE(sv)) {
8949     case SVt_PVCV:
8950         *st = CvSTASH(sv);
8951         *gvp = NULL;
8952         return MUTABLE_CV(sv);
8953     case SVt_PVHV:
8954     case SVt_PVAV:
8955         *st = NULL;
8956         *gvp = NULL;
8957         return NULL;
8958     case SVt_PVGV:
8959         if (isGV_with_GP(sv)) {
8960             gv = MUTABLE_GV(sv);
8961             *gvp = gv;
8962             *st = GvESTASH(gv);
8963             goto fix_gv;
8964         }
8965         /* FALL THROUGH */
8966
8967     default:
8968         if (SvROK(sv)) {
8969             SvGETMAGIC(sv);
8970             if (SvAMAGIC(sv))
8971                 sv = amagic_deref_call(sv, to_cv_amg);
8972             /* At this point I'd like to do SPAGAIN, but really I need to
8973                force it upon my callers. Hmmm. This is a mess... */
8974
8975             sv = SvRV(sv);
8976             if (SvTYPE(sv) == SVt_PVCV) {
8977                 cv = MUTABLE_CV(sv);
8978                 *gvp = NULL;
8979                 *st = CvSTASH(cv);
8980                 return cv;
8981             }
8982             else if(isGV_with_GP(sv))
8983                 gv = MUTABLE_GV(sv);
8984             else
8985                 Perl_croak(aTHX_ "Not a subroutine reference");
8986         }
8987         else if (isGV_with_GP(sv)) {
8988             SvGETMAGIC(sv);
8989             gv = MUTABLE_GV(sv);
8990         }
8991         else
8992             gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
8993         *gvp = gv;
8994         if (!gv) {
8995             *st = NULL;
8996             return NULL;
8997         }
8998         /* Some flags to gv_fetchsv mean don't really create the GV  */
8999         if (!isGV_with_GP(gv)) {
9000             *st = NULL;
9001             return NULL;
9002         }
9003         *st = GvESTASH(gv);
9004     fix_gv:
9005         if (lref && !GvCVu(gv)) {
9006             SV *tmpsv;
9007             ENTER;
9008             tmpsv = newSV(0);
9009             gv_efullname3(tmpsv, gv, NULL);
9010             /* XXX this is probably not what they think they're getting.
9011              * It has the same effect as "sub name;", i.e. just a forward
9012              * declaration! */
9013             newSUB(start_subparse(FALSE, 0),
9014                    newSVOP(OP_CONST, 0, tmpsv),
9015                    NULL, NULL);
9016             LEAVE;
9017             if (!GvCVu(gv))
9018                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
9019                            SVfARG(SvOK(sv) ? sv : &PL_sv_no));
9020         }
9021         return GvCVu(gv);
9022     }
9023 }
9024
9025 /*
9026 =for apidoc sv_true
9027
9028 Returns true if the SV has a true value by Perl's rules.
9029 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9030 instead use an in-line version.
9031
9032 =cut
9033 */
9034
9035 I32
9036 Perl_sv_true(pTHX_ register SV *const sv)
9037 {
9038     if (!sv)
9039         return 0;
9040     if (SvPOK(sv)) {
9041         register const XPV* const tXpv = (XPV*)SvANY(sv);
9042         if (tXpv &&
9043                 (tXpv->xpv_cur > 1 ||
9044                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9045             return 1;
9046         else
9047             return 0;
9048     }
9049     else {
9050         if (SvIOK(sv))
9051             return SvIVX(sv) != 0;
9052         else {
9053             if (SvNOK(sv))
9054                 return SvNVX(sv) != 0.0;
9055             else
9056                 return sv_2bool(sv);
9057         }
9058     }
9059 }
9060
9061 /*
9062 =for apidoc sv_pvn_force
9063
9064 Get a sensible string out of the SV somehow.
9065 A private implementation of the C<SvPV_force> macro for compilers which
9066 can't cope with complex macro expressions. Always use the macro instead.
9067
9068 =for apidoc sv_pvn_force_flags
9069
9070 Get a sensible string out of the SV somehow.
9071 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9072 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9073 implemented in terms of this function.
9074 You normally want to use the various wrapper macros instead: see
9075 C<SvPV_force> and C<SvPV_force_nomg>
9076
9077 =cut
9078 */
9079
9080 char *
9081 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9082 {
9083     dVAR;
9084
9085     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9086
9087     if (SvTHINKFIRST(sv) && !SvROK(sv))
9088         sv_force_normal_flags(sv, 0);
9089
9090     if (SvPOK(sv)) {
9091         if (lp)
9092             *lp = SvCUR(sv);
9093     }
9094     else {
9095         char *s;
9096         STRLEN len;
9097  
9098         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9099             const char * const ref = sv_reftype(sv,0);
9100             if (PL_op)
9101                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9102                            ref, OP_DESC(PL_op));
9103             else
9104                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9105         }
9106         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
9107             || isGV_with_GP(sv))
9108             /* diag_listed_as: Can't coerce %s to %s in %s */
9109             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9110                 OP_DESC(PL_op));
9111         s = sv_2pv_flags(sv, &len, flags);
9112         if (lp)
9113             *lp = len;
9114
9115         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9116             if (SvROK(sv))
9117                 sv_unref(sv);
9118             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9119             SvGROW(sv, len + 1);
9120             Move(s,SvPVX(sv),len,char);
9121             SvCUR_set(sv, len);
9122             SvPVX(sv)[len] = '\0';
9123         }
9124         if (!SvPOK(sv)) {
9125             SvPOK_on(sv);               /* validate pointer */
9126             SvTAINT(sv);
9127             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9128                                   PTR2UV(sv),SvPVX_const(sv)));
9129         }
9130     }
9131     return SvPVX_mutable(sv);
9132 }
9133
9134 /*
9135 =for apidoc sv_pvbyten_force
9136
9137 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
9138
9139 =cut
9140 */
9141
9142 char *
9143 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9144 {
9145     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9146
9147     sv_pvn_force(sv,lp);
9148     sv_utf8_downgrade(sv,0);
9149     *lp = SvCUR(sv);
9150     return SvPVX(sv);
9151 }
9152
9153 /*
9154 =for apidoc sv_pvutf8n_force
9155
9156 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
9157
9158 =cut
9159 */
9160
9161 char *
9162 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9163 {
9164     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9165
9166     sv_pvn_force(sv,lp);
9167     sv_utf8_upgrade(sv);
9168     *lp = SvCUR(sv);
9169     return SvPVX(sv);
9170 }
9171
9172 /*
9173 =for apidoc sv_reftype
9174
9175 Returns a string describing what the SV is a reference to.
9176
9177 =cut
9178 */
9179
9180 const char *
9181 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9182 {
9183     PERL_ARGS_ASSERT_SV_REFTYPE;
9184
9185     /* The fact that I don't need to downcast to char * everywhere, only in ?:
9186        inside return suggests a const propagation bug in g++.  */
9187     if (ob && SvOBJECT(sv)) {
9188         char * const name = HvNAME_get(SvSTASH(sv));
9189         return name ? name : (char *) "__ANON__";
9190     }
9191     else {
9192         switch (SvTYPE(sv)) {
9193         case SVt_NULL:
9194         case SVt_IV:
9195         case SVt_NV:
9196         case SVt_PV:
9197         case SVt_PVIV:
9198         case SVt_PVNV:
9199         case SVt_PVMG:
9200                                 if (SvVOK(sv))
9201                                     return "VSTRING";
9202                                 if (SvROK(sv))
9203                                     return "REF";
9204                                 else
9205                                     return "SCALAR";
9206
9207         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9208                                 /* tied lvalues should appear to be
9209                                  * scalars for backwards compatibility */
9210                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9211                                     ? "SCALAR" : "LVALUE");
9212         case SVt_PVAV:          return "ARRAY";
9213         case SVt_PVHV:          return "HASH";
9214         case SVt_PVCV:          return "CODE";
9215         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9216                                     ? "GLOB" : "SCALAR");
9217         case SVt_PVFM:          return "FORMAT";
9218         case SVt_PVIO:          return "IO";
9219         case SVt_BIND:          return "BIND";
9220         case SVt_REGEXP:        return "REGEXP";
9221         default:                return "UNKNOWN";
9222         }
9223     }
9224 }
9225
9226 /*
9227 =for apidoc sv_isobject
9228
9229 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9230 object.  If the SV is not an RV, or if the object is not blessed, then this
9231 will return false.
9232
9233 =cut
9234 */
9235
9236 int
9237 Perl_sv_isobject(pTHX_ SV *sv)
9238 {
9239     if (!sv)
9240         return 0;
9241     SvGETMAGIC(sv);
9242     if (!SvROK(sv))
9243         return 0;
9244     sv = SvRV(sv);
9245     if (!SvOBJECT(sv))
9246         return 0;
9247     return 1;
9248 }
9249
9250 /*
9251 =for apidoc sv_isa
9252
9253 Returns a boolean indicating whether the SV is blessed into the specified
9254 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9255 an inheritance relationship.
9256
9257 =cut
9258 */
9259
9260 int
9261 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9262 {
9263     const char *hvname;
9264
9265     PERL_ARGS_ASSERT_SV_ISA;
9266
9267     if (!sv)
9268         return 0;
9269     SvGETMAGIC(sv);
9270     if (!SvROK(sv))
9271         return 0;
9272     sv = SvRV(sv);
9273     if (!SvOBJECT(sv))
9274         return 0;
9275     hvname = HvNAME_get(SvSTASH(sv));
9276     if (!hvname)
9277         return 0;
9278
9279     return strEQ(hvname, name);
9280 }
9281
9282 /*
9283 =for apidoc newSVrv
9284
9285 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9286 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9287 be blessed in the specified package.  The new SV is returned and its
9288 reference count is 1.
9289
9290 =cut
9291 */
9292
9293 SV*
9294 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9295 {
9296     dVAR;
9297     SV *sv;
9298
9299     PERL_ARGS_ASSERT_NEWSVRV;
9300
9301     new_SV(sv);
9302
9303     SV_CHECK_THINKFIRST_COW_DROP(rv);
9304     (void)SvAMAGIC_off(rv);
9305
9306     if (SvTYPE(rv) >= SVt_PVMG) {
9307         const U32 refcnt = SvREFCNT(rv);
9308         SvREFCNT(rv) = 0;
9309         sv_clear(rv);
9310         SvFLAGS(rv) = 0;
9311         SvREFCNT(rv) = refcnt;
9312
9313         sv_upgrade(rv, SVt_IV);
9314     } else if (SvROK(rv)) {
9315         SvREFCNT_dec(SvRV(rv));
9316     } else {
9317         prepare_SV_for_RV(rv);
9318     }
9319
9320     SvOK_off(rv);
9321     SvRV_set(rv, sv);
9322     SvROK_on(rv);
9323
9324     if (classname) {
9325         HV* const stash = gv_stashpv(classname, GV_ADD);
9326         (void)sv_bless(rv, stash);
9327     }
9328     return sv;
9329 }
9330
9331 /*
9332 =for apidoc sv_setref_pv
9333
9334 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9335 argument will be upgraded to an RV.  That RV will be modified to point to
9336 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9337 into the 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 Do not use with other Perl types such as HV, AV, SV, CV, because those
9342 objects will become corrupted by the pointer copy process.
9343
9344 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9345
9346 =cut
9347 */
9348
9349 SV*
9350 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9351 {
9352     dVAR;
9353
9354     PERL_ARGS_ASSERT_SV_SETREF_PV;
9355
9356     if (!pv) {
9357         sv_setsv(rv, &PL_sv_undef);
9358         SvSETMAGIC(rv);
9359     }
9360     else
9361         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9362     return rv;
9363 }
9364
9365 /*
9366 =for apidoc sv_setref_iv
9367
9368 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9369 argument will be upgraded to an RV.  That RV will be modified to point to
9370 the new SV.  The C<classname> argument indicates the package for the
9371 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9372 will have a reference count of 1, and the RV will be returned.
9373
9374 =cut
9375 */
9376
9377 SV*
9378 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9379 {
9380     PERL_ARGS_ASSERT_SV_SETREF_IV;
9381
9382     sv_setiv(newSVrv(rv,classname), iv);
9383     return rv;
9384 }
9385
9386 /*
9387 =for apidoc sv_setref_uv
9388
9389 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9390 argument will be upgraded to an RV.  That RV will be modified to point to
9391 the new SV.  The C<classname> argument indicates the package for the
9392 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9393 will have a reference count of 1, and the RV will be returned.
9394
9395 =cut
9396 */
9397
9398 SV*
9399 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9400 {
9401     PERL_ARGS_ASSERT_SV_SETREF_UV;
9402
9403     sv_setuv(newSVrv(rv,classname), uv);
9404     return rv;
9405 }
9406
9407 /*
9408 =for apidoc sv_setref_nv
9409
9410 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9411 argument will be upgraded to an RV.  That RV will be modified to point to
9412 the new SV.  The C<classname> argument indicates the package for the
9413 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9414 will have a reference count of 1, and the RV will be returned.
9415
9416 =cut
9417 */
9418
9419 SV*
9420 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9421 {
9422     PERL_ARGS_ASSERT_SV_SETREF_NV;
9423
9424     sv_setnv(newSVrv(rv,classname), nv);
9425     return rv;
9426 }
9427
9428 /*
9429 =for apidoc sv_setref_pvn
9430
9431 Copies a string into a new SV, optionally blessing the SV.  The length of the
9432 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9433 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9434 argument indicates the package for the blessing.  Set C<classname> to
9435 C<NULL> to avoid the blessing.  The new SV will have a reference count
9436 of 1, and the RV will be returned.
9437
9438 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9439
9440 =cut
9441 */
9442
9443 SV*
9444 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9445                    const char *const pv, const STRLEN n)
9446 {
9447     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9448
9449     sv_setpvn(newSVrv(rv,classname), pv, n);
9450     return rv;
9451 }
9452
9453 /*
9454 =for apidoc sv_bless
9455
9456 Blesses an SV into a specified package.  The SV must be an RV.  The package
9457 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9458 of the SV is unaffected.
9459
9460 =cut
9461 */
9462
9463 SV*
9464 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9465 {
9466     dVAR;
9467     SV *tmpRef;
9468
9469     PERL_ARGS_ASSERT_SV_BLESS;
9470
9471     if (!SvROK(sv))
9472         Perl_croak(aTHX_ "Can't bless non-reference value");
9473     tmpRef = SvRV(sv);
9474     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9475         if (SvIsCOW(tmpRef))
9476             sv_force_normal_flags(tmpRef, 0);
9477         if (SvREADONLY(tmpRef))
9478             Perl_croak_no_modify(aTHX);
9479         if (SvOBJECT(tmpRef)) {
9480             if (SvTYPE(tmpRef) != SVt_PVIO)
9481                 --PL_sv_objcount;
9482             SvREFCNT_dec(SvSTASH(tmpRef));
9483         }
9484     }
9485     SvOBJECT_on(tmpRef);
9486     if (SvTYPE(tmpRef) != SVt_PVIO)
9487         ++PL_sv_objcount;
9488     SvUPGRADE(tmpRef, SVt_PVMG);
9489     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9490
9491     if (Gv_AMG(stash))
9492         SvAMAGIC_on(sv);
9493     else
9494         (void)SvAMAGIC_off(sv);
9495
9496     if(SvSMAGICAL(tmpRef))
9497         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9498             mg_set(tmpRef);
9499
9500
9501
9502     return sv;
9503 }
9504
9505 /* Downgrades a PVGV to a PVMG. If it’s actually a PVLV, we leave the type
9506  * as it is after unglobbing it.
9507  */
9508
9509 STATIC void
9510 S_sv_unglob(pTHX_ SV *const sv)
9511 {
9512     dVAR;
9513     void *xpvmg;
9514     HV *stash;
9515     SV * const temp = sv_newmortal();
9516
9517     PERL_ARGS_ASSERT_SV_UNGLOB;
9518
9519     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9520     SvFAKE_off(sv);
9521     gv_efullname3(temp, MUTABLE_GV(sv), "*");
9522
9523     if (GvGP(sv)) {
9524         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9525            && HvNAME_get(stash))
9526             mro_method_changed_in(stash);
9527         gp_free(MUTABLE_GV(sv));
9528     }
9529     if (GvSTASH(sv)) {
9530         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9531         GvSTASH(sv) = NULL;
9532     }
9533     GvMULTI_off(sv);
9534     if (GvNAME_HEK(sv)) {
9535         unshare_hek(GvNAME_HEK(sv));
9536     }
9537     isGV_with_GP_off(sv);
9538
9539     if(SvTYPE(sv) == SVt_PVGV) {
9540         /* need to keep SvANY(sv) in the right arena */
9541         xpvmg = new_XPVMG();
9542         StructCopy(SvANY(sv), xpvmg, XPVMG);
9543         del_XPVGV(SvANY(sv));
9544         SvANY(sv) = xpvmg;
9545
9546         SvFLAGS(sv) &= ~SVTYPEMASK;
9547         SvFLAGS(sv) |= SVt_PVMG;
9548     }
9549
9550     /* Intentionally not calling any local SET magic, as this isn't so much a
9551        set operation as merely an internal storage change.  */
9552     sv_setsv_flags(sv, temp, 0);
9553 }
9554
9555 /*
9556 =for apidoc sv_unref_flags
9557
9558 Unsets the RV status of the SV, and decrements the reference count of
9559 whatever was being referenced by the RV.  This can almost be thought of
9560 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9561 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9562 (otherwise the decrementing is conditional on the reference count being
9563 different from one or the reference being a readonly SV).
9564 See C<SvROK_off>.
9565
9566 =cut
9567 */
9568
9569 void
9570 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9571 {
9572     SV* const target = SvRV(ref);
9573
9574     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9575
9576     if (SvWEAKREF(ref)) {
9577         sv_del_backref(target, ref);
9578         SvWEAKREF_off(ref);
9579         SvRV_set(ref, NULL);
9580         return;
9581     }
9582     SvRV_set(ref, NULL);
9583     SvROK_off(ref);
9584     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9585        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9586     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9587         SvREFCNT_dec(target);
9588     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9589         sv_2mortal(target);     /* Schedule for freeing later */
9590 }
9591
9592 /*
9593 =for apidoc sv_untaint
9594
9595 Untaint an SV. Use C<SvTAINTED_off> instead.
9596 =cut
9597 */
9598
9599 void
9600 Perl_sv_untaint(pTHX_ SV *const sv)
9601 {
9602     PERL_ARGS_ASSERT_SV_UNTAINT;
9603
9604     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9605         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9606         if (mg)
9607             mg->mg_len &= ~1;
9608     }
9609 }
9610
9611 /*
9612 =for apidoc sv_tainted
9613
9614 Test an SV for taintedness. Use C<SvTAINTED> instead.
9615 =cut
9616 */
9617
9618 bool
9619 Perl_sv_tainted(pTHX_ SV *const sv)
9620 {
9621     PERL_ARGS_ASSERT_SV_TAINTED;
9622
9623     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9624         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9625         if (mg && (mg->mg_len & 1) )
9626             return TRUE;
9627     }
9628     return FALSE;
9629 }
9630
9631 /*
9632 =for apidoc sv_setpviv
9633
9634 Copies an integer into the given SV, also updating its string value.
9635 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9636
9637 =cut
9638 */
9639
9640 void
9641 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9642 {
9643     char buf[TYPE_CHARS(UV)];
9644     char *ebuf;
9645     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9646
9647     PERL_ARGS_ASSERT_SV_SETPVIV;
9648
9649     sv_setpvn(sv, ptr, ebuf - ptr);
9650 }
9651
9652 /*
9653 =for apidoc sv_setpviv_mg
9654
9655 Like C<sv_setpviv>, but also handles 'set' magic.
9656
9657 =cut
9658 */
9659
9660 void
9661 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9662 {
9663     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9664
9665     sv_setpviv(sv, iv);
9666     SvSETMAGIC(sv);
9667 }
9668
9669 #if defined(PERL_IMPLICIT_CONTEXT)
9670
9671 /* pTHX_ magic can't cope with varargs, so this is a no-context
9672  * version of the main function, (which may itself be aliased to us).
9673  * Don't access this version directly.
9674  */
9675
9676 void
9677 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9678 {
9679     dTHX;
9680     va_list args;
9681
9682     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9683
9684     va_start(args, pat);
9685     sv_vsetpvf(sv, pat, &args);
9686     va_end(args);
9687 }
9688
9689 /* pTHX_ magic can't cope with varargs, so this is a no-context
9690  * version of the main function, (which may itself be aliased to us).
9691  * Don't access this version directly.
9692  */
9693
9694 void
9695 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9696 {
9697     dTHX;
9698     va_list args;
9699
9700     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9701
9702     va_start(args, pat);
9703     sv_vsetpvf_mg(sv, pat, &args);
9704     va_end(args);
9705 }
9706 #endif
9707
9708 /*
9709 =for apidoc sv_setpvf
9710
9711 Works like C<sv_catpvf> but copies the text into the SV instead of
9712 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9713
9714 =cut
9715 */
9716
9717 void
9718 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9719 {
9720     va_list args;
9721
9722     PERL_ARGS_ASSERT_SV_SETPVF;
9723
9724     va_start(args, pat);
9725     sv_vsetpvf(sv, pat, &args);
9726     va_end(args);
9727 }
9728
9729 /*
9730 =for apidoc sv_vsetpvf
9731
9732 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9733 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9734
9735 Usually used via its frontend C<sv_setpvf>.
9736
9737 =cut
9738 */
9739
9740 void
9741 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9742 {
9743     PERL_ARGS_ASSERT_SV_VSETPVF;
9744
9745     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9746 }
9747
9748 /*
9749 =for apidoc sv_setpvf_mg
9750
9751 Like C<sv_setpvf>, but also handles 'set' magic.
9752
9753 =cut
9754 */
9755
9756 void
9757 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9758 {
9759     va_list args;
9760
9761     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9762
9763     va_start(args, pat);
9764     sv_vsetpvf_mg(sv, pat, &args);
9765     va_end(args);
9766 }
9767
9768 /*
9769 =for apidoc sv_vsetpvf_mg
9770
9771 Like C<sv_vsetpvf>, but also handles 'set' magic.
9772
9773 Usually used via its frontend C<sv_setpvf_mg>.
9774
9775 =cut
9776 */
9777
9778 void
9779 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9780 {
9781     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9782
9783     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9784     SvSETMAGIC(sv);
9785 }
9786
9787 #if defined(PERL_IMPLICIT_CONTEXT)
9788
9789 /* pTHX_ magic can't cope with varargs, so this is a no-context
9790  * version of the main function, (which may itself be aliased to us).
9791  * Don't access this version directly.
9792  */
9793
9794 void
9795 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9796 {
9797     dTHX;
9798     va_list args;
9799
9800     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9801
9802     va_start(args, pat);
9803     sv_vcatpvf(sv, pat, &args);
9804     va_end(args);
9805 }
9806
9807 /* pTHX_ magic can't cope with varargs, so this is a no-context
9808  * version of the main function, (which may itself be aliased to us).
9809  * Don't access this version directly.
9810  */
9811
9812 void
9813 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9814 {
9815     dTHX;
9816     va_list args;
9817
9818     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9819
9820     va_start(args, pat);
9821     sv_vcatpvf_mg(sv, pat, &args);
9822     va_end(args);
9823 }
9824 #endif
9825
9826 /*
9827 =for apidoc sv_catpvf
9828
9829 Processes its arguments like C<sprintf> and appends the formatted
9830 output to an SV.  If the appended data contains "wide" characters
9831 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9832 and characters >255 formatted with %c), the original SV might get
9833 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9834 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9835 valid UTF-8; if the original SV was bytes, the pattern should be too.
9836
9837 =cut */
9838
9839 void
9840 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9841 {
9842     va_list args;
9843
9844     PERL_ARGS_ASSERT_SV_CATPVF;
9845
9846     va_start(args, pat);
9847     sv_vcatpvf(sv, pat, &args);
9848     va_end(args);
9849 }
9850
9851 /*
9852 =for apidoc sv_vcatpvf
9853
9854 Processes its arguments like C<vsprintf> and appends the formatted output
9855 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9856
9857 Usually used via its frontend C<sv_catpvf>.
9858
9859 =cut
9860 */
9861
9862 void
9863 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9864 {
9865     PERL_ARGS_ASSERT_SV_VCATPVF;
9866
9867     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9868 }
9869
9870 /*
9871 =for apidoc sv_catpvf_mg
9872
9873 Like C<sv_catpvf>, but also handles 'set' magic.
9874
9875 =cut
9876 */
9877
9878 void
9879 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9880 {
9881     va_list args;
9882
9883     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9884
9885     va_start(args, pat);
9886     sv_vcatpvf_mg(sv, pat, &args);
9887     va_end(args);
9888 }
9889
9890 /*
9891 =for apidoc sv_vcatpvf_mg
9892
9893 Like C<sv_vcatpvf>, but also handles 'set' magic.
9894
9895 Usually used via its frontend C<sv_catpvf_mg>.
9896
9897 =cut
9898 */
9899
9900 void
9901 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9902 {
9903     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9904
9905     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9906     SvSETMAGIC(sv);
9907 }
9908
9909 /*
9910 =for apidoc sv_vsetpvfn
9911
9912 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9913 appending it.
9914
9915 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9916
9917 =cut
9918 */
9919
9920 void
9921 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9922                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9923 {
9924     PERL_ARGS_ASSERT_SV_VSETPVFN;
9925
9926     sv_setpvs(sv, "");
9927     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9928 }
9929
9930
9931 /*
9932  * Warn of missing argument to sprintf, and then return a defined value
9933  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9934  */
9935 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9936 STATIC SV*
9937 S_vcatpvfn_missing_argument(pTHX) {
9938     if (ckWARN(WARN_MISSING)) {
9939         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9940                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9941     }
9942     return &PL_sv_no;
9943 }
9944
9945
9946 STATIC I32
9947 S_expect_number(pTHX_ char **const pattern)
9948 {
9949     dVAR;
9950     I32 var = 0;
9951
9952     PERL_ARGS_ASSERT_EXPECT_NUMBER;
9953
9954     switch (**pattern) {
9955     case '1': case '2': case '3':
9956     case '4': case '5': case '6':
9957     case '7': case '8': case '9':
9958         var = *(*pattern)++ - '0';
9959         while (isDIGIT(**pattern)) {
9960             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9961             if (tmp < var)
9962                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9963             var = tmp;
9964         }
9965     }
9966     return var;
9967 }
9968
9969 STATIC char *
9970 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9971 {
9972     const int neg = nv < 0;
9973     UV uv;
9974
9975     PERL_ARGS_ASSERT_F0CONVERT;
9976
9977     if (neg)
9978         nv = -nv;
9979     if (nv < UV_MAX) {
9980         char *p = endbuf;
9981         nv += 0.5;
9982         uv = (UV)nv;
9983         if (uv & 1 && uv == nv)
9984             uv--;                       /* Round to even */
9985         do {
9986             const unsigned dig = uv % 10;
9987             *--p = '0' + dig;
9988         } while (uv /= 10);
9989         if (neg)
9990             *--p = '-';
9991         *len = endbuf - p;
9992         return p;
9993     }
9994     return NULL;
9995 }
9996
9997
9998 /*
9999 =for apidoc sv_vcatpvfn
10000
10001 Processes its arguments like C<vsprintf> and appends the formatted output
10002 to an SV.  Uses an array of SVs if the C style variable argument list is
10003 missing (NULL).  When running with taint checks enabled, indicates via
10004 C<maybe_tainted> if results are untrustworthy (often due to the use of
10005 locales).
10006
10007 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10008
10009 =cut
10010 */
10011
10012
10013 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10014                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10015                         vec_utf8 = DO_UTF8(vecsv);
10016
10017 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10018
10019 void
10020 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10021                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10022 {
10023     dVAR;
10024     char *p;
10025     char *q;
10026     const char *patend;
10027     STRLEN origlen;
10028     I32 svix = 0;
10029     static const char nullstr[] = "(null)";
10030     SV *argsv = NULL;
10031     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10032     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10033     SV *nsv = NULL;
10034     /* Times 4: a decimal digit takes more than 3 binary digits.
10035      * NV_DIG: mantissa takes than many decimal digits.
10036      * Plus 32: Playing safe. */
10037     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10038     /* large enough for "%#.#f" --chip */
10039     /* what about long double NVs? --jhi */
10040
10041     PERL_ARGS_ASSERT_SV_VCATPVFN;
10042     PERL_UNUSED_ARG(maybe_tainted);
10043
10044     /* no matter what, this is a string now */
10045     (void)SvPV_force(sv, origlen);
10046
10047     /* special-case "", "%s", and "%-p" (SVf - see below) */
10048     if (patlen == 0)
10049         return;
10050     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10051         if (args) {
10052             const char * const s = va_arg(*args, char*);
10053             sv_catpv(sv, s ? s : nullstr);
10054         }
10055         else if (svix < svmax) {
10056             sv_catsv(sv, *svargs);
10057         }
10058         else
10059             S_vcatpvfn_missing_argument(aTHX);
10060         return;
10061     }
10062     if (args && patlen == 3 && pat[0] == '%' &&
10063                 pat[1] == '-' && pat[2] == 'p') {
10064         argsv = MUTABLE_SV(va_arg(*args, void*));
10065         sv_catsv(sv, argsv);
10066         return;
10067     }
10068
10069 #ifndef USE_LONG_DOUBLE
10070     /* special-case "%.<number>[gf]" */
10071     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10072          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10073         unsigned digits = 0;
10074         const char *pp;
10075
10076         pp = pat + 2;
10077         while (*pp >= '0' && *pp <= '9')
10078             digits = 10 * digits + (*pp++ - '0');
10079         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10080             const NV nv = SvNV(*svargs);
10081             if (*pp == 'g') {
10082                 /* Add check for digits != 0 because it seems that some
10083                    gconverts are buggy in this case, and we don't yet have
10084                    a Configure test for this.  */
10085                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10086                      /* 0, point, slack */
10087                     Gconvert(nv, (int)digits, 0, ebuf);
10088                     sv_catpv(sv, ebuf);
10089                     if (*ebuf)  /* May return an empty string for digits==0 */
10090                         return;
10091                 }
10092             } else if (!digits) {
10093                 STRLEN l;
10094
10095                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10096                     sv_catpvn(sv, p, l);
10097                     return;
10098                 }
10099             }
10100         }
10101     }
10102 #endif /* !USE_LONG_DOUBLE */
10103
10104     if (!args && svix < svmax && DO_UTF8(*svargs))
10105         has_utf8 = TRUE;
10106
10107     patend = (char*)pat + patlen;
10108     for (p = (char*)pat; p < patend; p = q) {
10109         bool alt = FALSE;
10110         bool left = FALSE;
10111         bool vectorize = FALSE;
10112         bool vectorarg = FALSE;
10113         bool vec_utf8 = FALSE;
10114         char fill = ' ';
10115         char plus = 0;
10116         char intsize = 0;
10117         STRLEN width = 0;
10118         STRLEN zeros = 0;
10119         bool has_precis = FALSE;
10120         STRLEN precis = 0;
10121         const I32 osvix = svix;
10122         bool is_utf8 = FALSE;  /* is this item utf8?   */
10123 #ifdef HAS_LDBL_SPRINTF_BUG
10124         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10125            with sfio - Allen <allens@cpan.org> */
10126         bool fix_ldbl_sprintf_bug = FALSE;
10127 #endif
10128
10129         char esignbuf[4];
10130         U8 utf8buf[UTF8_MAXBYTES+1];
10131         STRLEN esignlen = 0;
10132
10133         const char *eptr = NULL;
10134         const char *fmtstart;
10135         STRLEN elen = 0;
10136         SV *vecsv = NULL;
10137         const U8 *vecstr = NULL;
10138         STRLEN veclen = 0;
10139         char c = 0;
10140         int i;
10141         unsigned base = 0;
10142         IV iv = 0;
10143         UV uv = 0;
10144         /* we need a long double target in case HAS_LONG_DOUBLE but
10145            not USE_LONG_DOUBLE
10146         */
10147 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10148         long double nv;
10149 #else
10150         NV nv;
10151 #endif
10152         STRLEN have;
10153         STRLEN need;
10154         STRLEN gap;
10155         const char *dotstr = ".";
10156         STRLEN dotstrlen = 1;
10157         I32 efix = 0; /* explicit format parameter index */
10158         I32 ewix = 0; /* explicit width index */
10159         I32 epix = 0; /* explicit precision index */
10160         I32 evix = 0; /* explicit vector index */
10161         bool asterisk = FALSE;
10162
10163         /* echo everything up to the next format specification */
10164         for (q = p; q < patend && *q != '%'; ++q) ;
10165         if (q > p) {
10166             if (has_utf8 && !pat_utf8)
10167                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
10168             else
10169                 sv_catpvn(sv, p, q - p);
10170             p = q;
10171         }
10172         if (q++ >= patend)
10173             break;
10174
10175         fmtstart = q;
10176
10177 /*
10178     We allow format specification elements in this order:
10179         \d+\$              explicit format parameter index
10180         [-+ 0#]+           flags
10181         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10182         0                  flag (as above): repeated to allow "v02"     
10183         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10184         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10185         [hlqLV]            size
10186     [%bcdefginopsuxDFOUX] format (mandatory)
10187 */
10188
10189         if (args) {
10190 /*  
10191         As of perl5.9.3, printf format checking is on by default.
10192         Internally, perl uses %p formats to provide an escape to
10193         some extended formatting.  This block deals with those
10194         extensions: if it does not match, (char*)q is reset and
10195         the normal format processing code is used.
10196
10197         Currently defined extensions are:
10198                 %p              include pointer address (standard)      
10199                 %-p     (SVf)   include an SV (previously %_)
10200                 %-<num>p        include an SV with precision <num>      
10201                 %<num>p         reserved for future extensions
10202
10203         Robin Barker 2005-07-14
10204
10205                 %1p     (VDf)   removed.  RMB 2007-10-19
10206 */
10207             char* r = q; 
10208             bool sv = FALSE;    
10209             STRLEN n = 0;
10210             if (*q == '-')
10211                 sv = *q++;
10212             n = expect_number(&q);
10213             if (*q++ == 'p') {
10214                 if (sv) {                       /* SVf */
10215                     if (n) {
10216                         precis = n;
10217                         has_precis = TRUE;
10218                     }
10219                     argsv = MUTABLE_SV(va_arg(*args, void*));
10220                     eptr = SvPV_const(argsv, elen);
10221                     if (DO_UTF8(argsv))
10222                         is_utf8 = TRUE;
10223                     goto string;
10224                 }
10225                 else if (n) {
10226                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10227                                      "internal %%<num>p might conflict with future printf extensions");
10228                 }
10229             }
10230             q = r; 
10231         }
10232
10233         if ( (width = expect_number(&q)) ) {
10234             if (*q == '$') {
10235                 ++q;
10236                 efix = width;
10237             } else {
10238                 goto gotwidth;
10239             }
10240         }
10241
10242         /* FLAGS */
10243
10244         while (*q) {
10245             switch (*q) {
10246             case ' ':
10247             case '+':
10248                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10249                     q++;
10250                 else
10251                     plus = *q++;
10252                 continue;
10253
10254             case '-':
10255                 left = TRUE;
10256                 q++;
10257                 continue;
10258
10259             case '0':
10260                 fill = *q++;
10261                 continue;
10262
10263             case '#':
10264                 alt = TRUE;
10265                 q++;
10266                 continue;
10267
10268             default:
10269                 break;
10270             }
10271             break;
10272         }
10273
10274       tryasterisk:
10275         if (*q == '*') {
10276             q++;
10277             if ( (ewix = expect_number(&q)) )
10278                 if (*q++ != '$')
10279                     goto unknown;
10280             asterisk = TRUE;
10281         }
10282         if (*q == 'v') {
10283             q++;
10284             if (vectorize)
10285                 goto unknown;
10286             if ((vectorarg = asterisk)) {
10287                 evix = ewix;
10288                 ewix = 0;
10289                 asterisk = FALSE;
10290             }
10291             vectorize = TRUE;
10292             goto tryasterisk;
10293         }
10294
10295         if (!asterisk)
10296         {
10297             if( *q == '0' )
10298                 fill = *q++;
10299             width = expect_number(&q);
10300         }
10301
10302         if (vectorize && vectorarg) {
10303             /* vectorizing, but not with the default "." */
10304             if (args)
10305                 vecsv = va_arg(*args, SV*);
10306             else if (evix) {
10307                 vecsv = (evix > 0 && evix <= svmax)
10308                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10309             } else {
10310                 vecsv = svix < svmax
10311                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10312             }
10313             dotstr = SvPV_const(vecsv, dotstrlen);
10314             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10315                bad with tied or overloaded values that return UTF8.  */
10316             if (DO_UTF8(vecsv))
10317                 is_utf8 = TRUE;
10318             else if (has_utf8) {
10319                 vecsv = sv_mortalcopy(vecsv);
10320                 sv_utf8_upgrade(vecsv);
10321                 dotstr = SvPV_const(vecsv, dotstrlen);
10322                 is_utf8 = TRUE;
10323             }               
10324         }
10325
10326         if (asterisk) {
10327             if (args)
10328                 i = va_arg(*args, int);
10329             else
10330                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10331                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10332             left |= (i < 0);
10333             width = (i < 0) ? -i : i;
10334         }
10335       gotwidth:
10336
10337         /* PRECISION */
10338
10339         if (*q == '.') {
10340             q++;
10341             if (*q == '*') {
10342                 q++;
10343                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10344                     goto unknown;
10345                 /* XXX: todo, support specified precision parameter */
10346                 if (epix)
10347                     goto unknown;
10348                 if (args)
10349                     i = va_arg(*args, int);
10350                 else
10351                     i = (ewix ? ewix <= svmax : svix < svmax)
10352                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10353                 precis = i;
10354                 has_precis = !(i < 0);
10355             }
10356             else {
10357                 precis = 0;
10358                 while (isDIGIT(*q))
10359                     precis = precis * 10 + (*q++ - '0');
10360                 has_precis = TRUE;
10361             }
10362         }
10363
10364         if (vectorize) {
10365             if (args) {
10366                 VECTORIZE_ARGS
10367             }
10368             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10369                 vecsv = svargs[efix ? efix-1 : svix++];
10370                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10371                 vec_utf8 = DO_UTF8(vecsv);
10372
10373                 /* if this is a version object, we need to convert
10374                  * back into v-string notation and then let the
10375                  * vectorize happen normally
10376                  */
10377                 if (sv_derived_from(vecsv, "version")) {
10378                     char *version = savesvpv(vecsv);
10379                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10380                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10381                         "vector argument not supported with alpha versions");
10382                         goto unknown;
10383                     }
10384                     vecsv = sv_newmortal();
10385                     scan_vstring(version, version + veclen, vecsv);
10386                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10387                     vec_utf8 = DO_UTF8(vecsv);
10388                     Safefree(version);
10389                 }
10390             }
10391             else {
10392                 vecstr = (U8*)"";
10393                 veclen = 0;
10394             }
10395         }
10396
10397         /* SIZE */
10398
10399         switch (*q) {
10400 #ifdef WIN32
10401         case 'I':                       /* Ix, I32x, and I64x */
10402 #  ifdef WIN64
10403             if (q[1] == '6' && q[2] == '4') {
10404                 q += 3;
10405                 intsize = 'q';
10406                 break;
10407             }
10408 #  endif
10409             if (q[1] == '3' && q[2] == '2') {
10410                 q += 3;
10411                 break;
10412             }
10413 #  ifdef WIN64
10414             intsize = 'q';
10415 #  endif
10416             q++;
10417             break;
10418 #endif
10419 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10420         case 'L':                       /* Ld */
10421             /*FALLTHROUGH*/
10422 #ifdef HAS_QUAD
10423         case 'q':                       /* qd */
10424 #endif
10425             intsize = 'q';
10426             q++;
10427             break;
10428 #endif
10429         case 'l':
10430             ++q;
10431 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10432             if (*q == 'l') {    /* lld, llf */
10433                 intsize = 'q';
10434                 ++q;
10435             }
10436             else
10437 #endif
10438                 intsize = 'l';
10439             break;
10440         case 'h':
10441             if (*++q == 'h') {  /* hhd, hhu */
10442                 intsize = 'c';
10443                 ++q;
10444             }
10445             else
10446                 intsize = 'h';
10447             break;
10448         case 'V':
10449         case 'z':
10450         case 't':
10451 #if HAS_C99
10452         case 'j':
10453 #endif
10454             intsize = *q++;
10455             break;
10456         }
10457
10458         /* CONVERSION */
10459
10460         if (*q == '%') {
10461             eptr = q++;
10462             elen = 1;
10463             if (vectorize) {
10464                 c = '%';
10465                 goto unknown;
10466             }
10467             goto string;
10468         }
10469
10470         if (!vectorize && !args) {
10471             if (efix) {
10472                 const I32 i = efix-1;
10473                 argsv = (i >= 0 && i < svmax)
10474                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10475             } else {
10476                 argsv = (svix >= 0 && svix < svmax)
10477                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10478             }
10479         }
10480
10481         switch (c = *q++) {
10482
10483             /* STRINGS */
10484
10485         case 'c':
10486             if (vectorize)
10487                 goto unknown;
10488             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10489             if ((uv > 255 ||
10490                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10491                 && !IN_BYTES) {
10492                 eptr = (char*)utf8buf;
10493                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10494                 is_utf8 = TRUE;
10495             }
10496             else {
10497                 c = (char)uv;
10498                 eptr = &c;
10499                 elen = 1;
10500             }
10501             goto string;
10502
10503         case 's':
10504             if (vectorize)
10505                 goto unknown;
10506             if (args) {
10507                 eptr = va_arg(*args, char*);
10508                 if (eptr)
10509                     elen = strlen(eptr);
10510                 else {
10511                     eptr = (char *)nullstr;
10512                     elen = sizeof nullstr - 1;
10513                 }
10514             }
10515             else {
10516                 eptr = SvPV_const(argsv, elen);
10517                 if (DO_UTF8(argsv)) {
10518                     STRLEN old_precis = precis;
10519                     if (has_precis && precis < elen) {
10520                         STRLEN ulen = sv_len_utf8(argsv);
10521                         I32 p = precis > ulen ? ulen : precis;
10522                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
10523                         precis = p;
10524                     }
10525                     if (width) { /* fudge width (can't fudge elen) */
10526                         if (has_precis && precis < elen)
10527                             width += precis - old_precis;
10528                         else
10529                             width += elen - sv_len_utf8(argsv);
10530                     }
10531                     is_utf8 = TRUE;
10532                 }
10533             }
10534
10535         string:
10536             if (has_precis && precis < elen)
10537                 elen = precis;
10538             break;
10539
10540             /* INTEGERS */
10541
10542         case 'p':
10543             if (alt || vectorize)
10544                 goto unknown;
10545             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10546             base = 16;
10547             goto integer;
10548
10549         case 'D':
10550 #ifdef IV_IS_QUAD
10551             intsize = 'q';
10552 #else
10553             intsize = 'l';
10554 #endif
10555             /*FALLTHROUGH*/
10556         case 'd':
10557         case 'i':
10558 #if vdNUMBER
10559         format_vd:
10560 #endif
10561             if (vectorize) {
10562                 STRLEN ulen;
10563                 if (!veclen)
10564                     continue;
10565                 if (vec_utf8)
10566                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10567                                         UTF8_ALLOW_ANYUV);
10568                 else {
10569                     uv = *vecstr;
10570                     ulen = 1;
10571                 }
10572                 vecstr += ulen;
10573                 veclen -= ulen;
10574                 if (plus)
10575                      esignbuf[esignlen++] = plus;
10576             }
10577             else if (args) {
10578                 switch (intsize) {
10579                 case 'c':       iv = (char)va_arg(*args, int); break;
10580                 case 'h':       iv = (short)va_arg(*args, int); break;
10581                 case 'l':       iv = va_arg(*args, long); break;
10582                 case 'V':       iv = va_arg(*args, IV); break;
10583                 case 'z':       iv = va_arg(*args, SSize_t); break;
10584                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10585                 default:        iv = va_arg(*args, int); break;
10586 #if HAS_C99
10587                 case 'j':       iv = va_arg(*args, intmax_t); break;
10588 #endif
10589                 case 'q':
10590 #ifdef HAS_QUAD
10591                                 iv = va_arg(*args, Quad_t); break;
10592 #else
10593                                 goto unknown;
10594 #endif
10595                 }
10596             }
10597             else {
10598                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10599                 switch (intsize) {
10600                 case 'c':       iv = (char)tiv; break;
10601                 case 'h':       iv = (short)tiv; break;
10602                 case 'l':       iv = (long)tiv; break;
10603                 case 'V':
10604                 default:        iv = tiv; break;
10605                 case 'q':
10606 #ifdef HAS_QUAD
10607                                 iv = (Quad_t)tiv; break;
10608 #else
10609                                 goto unknown;
10610 #endif
10611                 }
10612             }
10613             if ( !vectorize )   /* we already set uv above */
10614             {
10615                 if (iv >= 0) {
10616                     uv = iv;
10617                     if (plus)
10618                         esignbuf[esignlen++] = plus;
10619                 }
10620                 else {
10621                     uv = -iv;
10622                     esignbuf[esignlen++] = '-';
10623                 }
10624             }
10625             base = 10;
10626             goto integer;
10627
10628         case 'U':
10629 #ifdef IV_IS_QUAD
10630             intsize = 'q';
10631 #else
10632             intsize = 'l';
10633 #endif
10634             /*FALLTHROUGH*/
10635         case 'u':
10636             base = 10;
10637             goto uns_integer;
10638
10639         case 'B':
10640         case 'b':
10641             base = 2;
10642             goto uns_integer;
10643
10644         case 'O':
10645 #ifdef IV_IS_QUAD
10646             intsize = 'q';
10647 #else
10648             intsize = 'l';
10649 #endif
10650             /*FALLTHROUGH*/
10651         case 'o':
10652             base = 8;
10653             goto uns_integer;
10654
10655         case 'X':
10656         case 'x':
10657             base = 16;
10658
10659         uns_integer:
10660             if (vectorize) {
10661                 STRLEN ulen;
10662         vector:
10663                 if (!veclen)
10664                     continue;
10665                 if (vec_utf8)
10666                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10667                                         UTF8_ALLOW_ANYUV);
10668                 else {
10669                     uv = *vecstr;
10670                     ulen = 1;
10671                 }
10672                 vecstr += ulen;
10673                 veclen -= ulen;
10674             }
10675             else if (args) {
10676                 switch (intsize) {
10677                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10678                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10679                 case 'l':  uv = va_arg(*args, unsigned long); break;
10680                 case 'V':  uv = va_arg(*args, UV); break;
10681                 case 'z':  uv = va_arg(*args, Size_t); break;
10682                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10683 #if HAS_C99
10684                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10685 #endif
10686                 default:   uv = va_arg(*args, unsigned); break;
10687                 case 'q':
10688 #ifdef HAS_QUAD
10689                            uv = va_arg(*args, Uquad_t); break;
10690 #else
10691                            goto unknown;
10692 #endif
10693                 }
10694             }
10695             else {
10696                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10697                 switch (intsize) {
10698                 case 'c':       uv = (unsigned char)tuv; break;
10699                 case 'h':       uv = (unsigned short)tuv; break;
10700                 case 'l':       uv = (unsigned long)tuv; break;
10701                 case 'V':
10702                 default:        uv = tuv; break;
10703                 case 'q':
10704 #ifdef HAS_QUAD
10705                                 uv = (Uquad_t)tuv; break;
10706 #else
10707                                 goto unknown;
10708 #endif
10709                 }
10710             }
10711
10712         integer:
10713             {
10714                 char *ptr = ebuf + sizeof ebuf;
10715                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10716                 zeros = 0;
10717
10718                 switch (base) {
10719                     unsigned dig;
10720                 case 16:
10721                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10722                     do {
10723                         dig = uv & 15;
10724                         *--ptr = p[dig];
10725                     } while (uv >>= 4);
10726                     if (tempalt) {
10727                         esignbuf[esignlen++] = '0';
10728                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10729                     }
10730                     break;
10731                 case 8:
10732                     do {
10733                         dig = uv & 7;
10734                         *--ptr = '0' + dig;
10735                     } while (uv >>= 3);
10736                     if (alt && *ptr != '0')
10737                         *--ptr = '0';
10738                     break;
10739                 case 2:
10740                     do {
10741                         dig = uv & 1;
10742                         *--ptr = '0' + dig;
10743                     } while (uv >>= 1);
10744                     if (tempalt) {
10745                         esignbuf[esignlen++] = '0';
10746                         esignbuf[esignlen++] = c;
10747                     }
10748                     break;
10749                 default:                /* it had better be ten or less */
10750                     do {
10751                         dig = uv % base;
10752                         *--ptr = '0' + dig;
10753                     } while (uv /= base);
10754                     break;
10755                 }
10756                 elen = (ebuf + sizeof ebuf) - ptr;
10757                 eptr = ptr;
10758                 if (has_precis) {
10759                     if (precis > elen)
10760                         zeros = precis - elen;
10761                     else if (precis == 0 && elen == 1 && *eptr == '0'
10762                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10763                         elen = 0;
10764
10765                 /* a precision nullifies the 0 flag. */
10766                     if (fill == '0')
10767                         fill = ' ';
10768                 }
10769             }
10770             break;
10771
10772             /* FLOATING POINT */
10773
10774         case 'F':
10775             c = 'f';            /* maybe %F isn't supported here */
10776             /*FALLTHROUGH*/
10777         case 'e': case 'E':
10778         case 'f':
10779         case 'g': case 'G':
10780             if (vectorize)
10781                 goto unknown;
10782
10783             /* This is evil, but floating point is even more evil */
10784
10785             /* for SV-style calling, we can only get NV
10786                for C-style calling, we assume %f is double;
10787                for simplicity we allow any of %Lf, %llf, %qf for long double
10788             */
10789             switch (intsize) {
10790             case 'V':
10791 #if defined(USE_LONG_DOUBLE)
10792                 intsize = 'q';
10793 #endif
10794                 break;
10795 /* [perl #20339] - we should accept and ignore %lf rather than die */
10796             case 'l':
10797                 /*FALLTHROUGH*/
10798             default:
10799 #if defined(USE_LONG_DOUBLE)
10800                 intsize = args ? 0 : 'q';
10801 #endif
10802                 break;
10803             case 'q':
10804 #if defined(HAS_LONG_DOUBLE)
10805                 break;
10806 #else
10807                 /*FALLTHROUGH*/
10808 #endif
10809             case 'c':
10810             case 'h':
10811             case 'z':
10812             case 't':
10813             case 'j':
10814                 goto unknown;
10815             }
10816
10817             /* now we need (long double) if intsize == 'q', else (double) */
10818             nv = (args) ?
10819 #if LONG_DOUBLESIZE > DOUBLESIZE
10820                 intsize == 'q' ?
10821                     va_arg(*args, long double) :
10822                     va_arg(*args, double)
10823 #else
10824                     va_arg(*args, double)
10825 #endif
10826                 : SvNV(argsv);
10827
10828             need = 0;
10829             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10830                else. frexp() has some unspecified behaviour for those three */
10831             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10832                 i = PERL_INT_MIN;
10833                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10834                    will cast our (long double) to (double) */
10835                 (void)Perl_frexp(nv, &i);
10836                 if (i == PERL_INT_MIN)
10837                     Perl_die(aTHX_ "panic: frexp");
10838                 if (i > 0)
10839                     need = BIT_DIGITS(i);
10840             }
10841             need += has_precis ? precis : 6; /* known default */
10842
10843             if (need < width)
10844                 need = width;
10845
10846 #ifdef HAS_LDBL_SPRINTF_BUG
10847             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10848                with sfio - Allen <allens@cpan.org> */
10849
10850 #  ifdef DBL_MAX
10851 #    define MY_DBL_MAX DBL_MAX
10852 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10853 #    if DOUBLESIZE >= 8
10854 #      define MY_DBL_MAX 1.7976931348623157E+308L
10855 #    else
10856 #      define MY_DBL_MAX 3.40282347E+38L
10857 #    endif
10858 #  endif
10859
10860 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10861 #    define MY_DBL_MAX_BUG 1L
10862 #  else
10863 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10864 #  endif
10865
10866 #  ifdef DBL_MIN
10867 #    define MY_DBL_MIN DBL_MIN
10868 #  else  /* XXX guessing! -Allen */
10869 #    if DOUBLESIZE >= 8
10870 #      define MY_DBL_MIN 2.2250738585072014E-308L
10871 #    else
10872 #      define MY_DBL_MIN 1.17549435E-38L
10873 #    endif
10874 #  endif
10875
10876             if ((intsize == 'q') && (c == 'f') &&
10877                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10878                 (need < DBL_DIG)) {
10879                 /* it's going to be short enough that
10880                  * long double precision is not needed */
10881
10882                 if ((nv <= 0L) && (nv >= -0L))
10883                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10884                 else {
10885                     /* would use Perl_fp_class as a double-check but not
10886                      * functional on IRIX - see perl.h comments */
10887
10888                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10889                         /* It's within the range that a double can represent */
10890 #if defined(DBL_MAX) && !defined(DBL_MIN)
10891                         if ((nv >= ((long double)1/DBL_MAX)) ||
10892                             (nv <= (-(long double)1/DBL_MAX)))
10893 #endif
10894                         fix_ldbl_sprintf_bug = TRUE;
10895                     }
10896                 }
10897                 if (fix_ldbl_sprintf_bug == TRUE) {
10898                     double temp;
10899
10900                     intsize = 0;
10901                     temp = (double)nv;
10902                     nv = (NV)temp;
10903                 }
10904             }
10905
10906 #  undef MY_DBL_MAX
10907 #  undef MY_DBL_MAX_BUG
10908 #  undef MY_DBL_MIN
10909
10910 #endif /* HAS_LDBL_SPRINTF_BUG */
10911
10912             need += 20; /* fudge factor */
10913             if (PL_efloatsize < need) {
10914                 Safefree(PL_efloatbuf);
10915                 PL_efloatsize = need + 20; /* more fudge */
10916                 Newx(PL_efloatbuf, PL_efloatsize, char);
10917                 PL_efloatbuf[0] = '\0';
10918             }
10919
10920             if ( !(width || left || plus || alt) && fill != '0'
10921                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10922                 /* See earlier comment about buggy Gconvert when digits,
10923                    aka precis is 0  */
10924                 if ( c == 'g' && precis) {
10925                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10926                     /* May return an empty string for digits==0 */
10927                     if (*PL_efloatbuf) {
10928                         elen = strlen(PL_efloatbuf);
10929                         goto float_converted;
10930                     }
10931                 } else if ( c == 'f' && !precis) {
10932                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10933                         break;
10934                 }
10935             }
10936             {
10937                 char *ptr = ebuf + sizeof ebuf;
10938                 *--ptr = '\0';
10939                 *--ptr = c;
10940                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10941 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10942                 if (intsize == 'q') {
10943                     /* Copy the one or more characters in a long double
10944                      * format before the 'base' ([efgEFG]) character to
10945                      * the format string. */
10946                     static char const prifldbl[] = PERL_PRIfldbl;
10947                     char const *p = prifldbl + sizeof(prifldbl) - 3;
10948                     while (p >= prifldbl) { *--ptr = *p--; }
10949                 }
10950 #endif
10951                 if (has_precis) {
10952                     base = precis;
10953                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10954                     *--ptr = '.';
10955                 }
10956                 if (width) {
10957                     base = width;
10958                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10959                 }
10960                 if (fill == '0')
10961                     *--ptr = fill;
10962                 if (left)
10963                     *--ptr = '-';
10964                 if (plus)
10965                     *--ptr = plus;
10966                 if (alt)
10967                     *--ptr = '#';
10968                 *--ptr = '%';
10969
10970                 /* No taint.  Otherwise we are in the strange situation
10971                  * where printf() taints but print($float) doesn't.
10972                  * --jhi */
10973 #if defined(HAS_LONG_DOUBLE)
10974                 elen = ((intsize == 'q')
10975                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10976                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
10977 #else
10978                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
10979 #endif
10980             }
10981         float_converted:
10982             eptr = PL_efloatbuf;
10983             break;
10984
10985             /* SPECIAL */
10986
10987         case 'n':
10988             if (vectorize)
10989                 goto unknown;
10990             i = SvCUR(sv) - origlen;
10991             if (args) {
10992                 switch (intsize) {
10993                 case 'c':       *(va_arg(*args, char*)) = i; break;
10994                 case 'h':       *(va_arg(*args, short*)) = i; break;
10995                 default:        *(va_arg(*args, int*)) = i; break;
10996                 case 'l':       *(va_arg(*args, long*)) = i; break;
10997                 case 'V':       *(va_arg(*args, IV*)) = i; break;
10998                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
10999                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11000 #if HAS_C99
11001                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11002 #endif
11003                 case 'q':
11004 #ifdef HAS_QUAD
11005                                 *(va_arg(*args, Quad_t*)) = i; break;
11006 #else
11007                                 goto unknown;
11008 #endif
11009                 }
11010             }
11011             else
11012                 sv_setuv_mg(argsv, (UV)i);
11013             continue;   /* not "break" */
11014
11015             /* UNKNOWN */
11016
11017         default:
11018       unknown:
11019             if (!args
11020                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11021                 && ckWARN(WARN_PRINTF))
11022             {
11023                 SV * const msg = sv_newmortal();
11024                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11025                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11026                 if (fmtstart < patend) {
11027                     const char * const fmtend = q < patend ? q : patend;
11028                     const char * f;
11029                     sv_catpvs(msg, "\"%");
11030                     for (f = fmtstart; f < fmtend; f++) {
11031                         if (isPRINT(*f)) {
11032                             sv_catpvn(msg, f, 1);
11033                         } else {
11034                             Perl_sv_catpvf(aTHX_ msg,
11035                                            "\\%03"UVof, (UV)*f & 0xFF);
11036                         }
11037                     }
11038                     sv_catpvs(msg, "\"");
11039                 } else {
11040                     sv_catpvs(msg, "end of string");
11041                 }
11042                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11043             }
11044
11045             /* output mangled stuff ... */
11046             if (c == '\0')
11047                 --q;
11048             eptr = p;
11049             elen = q - p;
11050
11051             /* ... right here, because formatting flags should not apply */
11052             SvGROW(sv, SvCUR(sv) + elen + 1);
11053             p = SvEND(sv);
11054             Copy(eptr, p, elen, char);
11055             p += elen;
11056             *p = '\0';
11057             SvCUR_set(sv, p - SvPVX_const(sv));
11058             svix = osvix;
11059             continue;   /* not "break" */
11060         }
11061
11062         if (is_utf8 != has_utf8) {
11063             if (is_utf8) {
11064                 if (SvCUR(sv))
11065                     sv_utf8_upgrade(sv);
11066             }
11067             else {
11068                 const STRLEN old_elen = elen;
11069                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11070                 sv_utf8_upgrade(nsv);
11071                 eptr = SvPVX_const(nsv);
11072                 elen = SvCUR(nsv);
11073
11074                 if (width) { /* fudge width (can't fudge elen) */
11075                     width += elen - old_elen;
11076                 }
11077                 is_utf8 = TRUE;
11078             }
11079         }
11080
11081         have = esignlen + zeros + elen;
11082         if (have < zeros)
11083             Perl_croak_nocontext("%s", PL_memory_wrap);
11084
11085         need = (have > width ? have : width);
11086         gap = need - have;
11087
11088         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11089             Perl_croak_nocontext("%s", PL_memory_wrap);
11090         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11091         p = SvEND(sv);
11092         if (esignlen && fill == '0') {
11093             int i;
11094             for (i = 0; i < (int)esignlen; i++)
11095                 *p++ = esignbuf[i];
11096         }
11097         if (gap && !left) {
11098             memset(p, fill, gap);
11099             p += gap;
11100         }
11101         if (esignlen && fill != '0') {
11102             int i;
11103             for (i = 0; i < (int)esignlen; i++)
11104                 *p++ = esignbuf[i];
11105         }
11106         if (zeros) {
11107             int i;
11108             for (i = zeros; i; i--)
11109                 *p++ = '0';
11110         }
11111         if (elen) {
11112             Copy(eptr, p, elen, char);
11113             p += elen;
11114         }
11115         if (gap && left) {
11116             memset(p, ' ', gap);
11117             p += gap;
11118         }
11119         if (vectorize) {
11120             if (veclen) {
11121                 Copy(dotstr, p, dotstrlen, char);
11122                 p += dotstrlen;
11123             }
11124             else
11125                 vectorize = FALSE;              /* done iterating over vecstr */
11126         }
11127         if (is_utf8)
11128             has_utf8 = TRUE;
11129         if (has_utf8)
11130             SvUTF8_on(sv);
11131         *p = '\0';
11132         SvCUR_set(sv, p - SvPVX_const(sv));
11133         if (vectorize) {
11134             esignlen = 0;
11135             goto vector;
11136         }
11137     }
11138     SvTAINT(sv);
11139 }
11140
11141 /* =========================================================================
11142
11143 =head1 Cloning an interpreter
11144
11145 All the macros and functions in this section are for the private use of
11146 the main function, perl_clone().
11147
11148 The foo_dup() functions make an exact copy of an existing foo thingy.
11149 During the course of a cloning, a hash table is used to map old addresses
11150 to new addresses. The table is created and manipulated with the
11151 ptr_table_* functions.
11152
11153 =cut
11154
11155  * =========================================================================*/
11156
11157
11158 #if defined(USE_ITHREADS)
11159
11160 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11161 #ifndef GpREFCNT_inc
11162 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11163 #endif
11164
11165
11166 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11167    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11168    If this changes, please unmerge ss_dup.
11169    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11170 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11171 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11172 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11173 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11174 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11175 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11176 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11177 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11178 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11179 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11180 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11181 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11182 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11183
11184 /* clone a parser */
11185
11186 yy_parser *
11187 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11188 {
11189     yy_parser *parser;
11190
11191     PERL_ARGS_ASSERT_PARSER_DUP;
11192
11193     if (!proto)
11194         return NULL;
11195
11196     /* look for it in the table first */
11197     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11198     if (parser)
11199         return parser;
11200
11201     /* create anew and remember what it is */
11202     Newxz(parser, 1, yy_parser);
11203     ptr_table_store(PL_ptr_table, proto, parser);
11204
11205     /* XXX these not yet duped */
11206     parser->old_parser = NULL;
11207     parser->stack = NULL;
11208     parser->ps = NULL;
11209     parser->stack_size = 0;
11210     /* XXX parser->stack->state = 0; */
11211
11212     /* XXX eventually, just Copy() most of the parser struct ? */
11213
11214     parser->lex_brackets = proto->lex_brackets;
11215     parser->lex_casemods = proto->lex_casemods;
11216     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11217                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11218     parser->lex_casestack = savepvn(proto->lex_casestack,
11219                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11220     parser->lex_defer   = proto->lex_defer;
11221     parser->lex_dojoin  = proto->lex_dojoin;
11222     parser->lex_expect  = proto->lex_expect;
11223     parser->lex_formbrack = proto->lex_formbrack;
11224     parser->lex_inpat   = proto->lex_inpat;
11225     parser->lex_inwhat  = proto->lex_inwhat;
11226     parser->lex_op      = proto->lex_op;
11227     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11228     parser->lex_starts  = proto->lex_starts;
11229     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11230     parser->multi_close = proto->multi_close;
11231     parser->multi_open  = proto->multi_open;
11232     parser->multi_start = proto->multi_start;
11233     parser->multi_end   = proto->multi_end;
11234     parser->pending_ident = proto->pending_ident;
11235     parser->preambled   = proto->preambled;
11236     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11237     parser->linestr     = sv_dup_inc(proto->linestr, param);
11238     parser->expect      = proto->expect;
11239     parser->copline     = proto->copline;
11240     parser->last_lop_op = proto->last_lop_op;
11241     parser->lex_state   = proto->lex_state;
11242     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11243     /* rsfp_filters entries have fake IoDIRP() */
11244     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11245     parser->in_my       = proto->in_my;
11246     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11247     parser->error_count = proto->error_count;
11248
11249
11250     parser->linestr     = sv_dup_inc(proto->linestr, param);
11251
11252     {
11253         char * const ols = SvPVX(proto->linestr);
11254         char * const ls  = SvPVX(parser->linestr);
11255
11256         parser->bufptr      = ls + (proto->bufptr >= ols ?
11257                                     proto->bufptr -  ols : 0);
11258         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11259                                     proto->oldbufptr -  ols : 0);
11260         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11261                                     proto->oldoldbufptr -  ols : 0);
11262         parser->linestart   = ls + (proto->linestart >= ols ?
11263                                     proto->linestart -  ols : 0);
11264         parser->last_uni    = ls + (proto->last_uni >= ols ?
11265                                     proto->last_uni -  ols : 0);
11266         parser->last_lop    = ls + (proto->last_lop >= ols ?
11267                                     proto->last_lop -  ols : 0);
11268
11269         parser->bufend      = ls + SvCUR(parser->linestr);
11270     }
11271
11272     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11273
11274
11275 #ifdef PERL_MAD
11276     parser->endwhite    = proto->endwhite;
11277     parser->faketokens  = proto->faketokens;
11278     parser->lasttoke    = proto->lasttoke;
11279     parser->nextwhite   = proto->nextwhite;
11280     parser->realtokenstart = proto->realtokenstart;
11281     parser->skipwhite   = proto->skipwhite;
11282     parser->thisclose   = proto->thisclose;
11283     parser->thismad     = proto->thismad;
11284     parser->thisopen    = proto->thisopen;
11285     parser->thisstuff   = proto->thisstuff;
11286     parser->thistoken   = proto->thistoken;
11287     parser->thiswhite   = proto->thiswhite;
11288
11289     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11290     parser->curforce    = proto->curforce;
11291 #else
11292     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11293     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11294     parser->nexttoke    = proto->nexttoke;
11295 #endif
11296
11297     /* XXX should clone saved_curcop here, but we aren't passed
11298      * proto_perl; so do it in perl_clone_using instead */
11299
11300     return parser;
11301 }
11302
11303
11304 /* duplicate a file handle */
11305
11306 PerlIO *
11307 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11308 {
11309     PerlIO *ret;
11310
11311     PERL_ARGS_ASSERT_FP_DUP;
11312     PERL_UNUSED_ARG(type);
11313
11314     if (!fp)
11315         return (PerlIO*)NULL;
11316
11317     /* look for it in the table first */
11318     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11319     if (ret)
11320         return ret;
11321
11322     /* create anew and remember what it is */
11323     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11324     ptr_table_store(PL_ptr_table, fp, ret);
11325     return ret;
11326 }
11327
11328 /* duplicate a directory handle */
11329
11330 DIR *
11331 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11332 {
11333     DIR *ret;
11334
11335 #ifdef HAS_FCHDIR
11336     DIR *pwd;
11337     register const Direntry_t *dirent;
11338     char smallbuf[256];
11339     char *name = NULL;
11340     STRLEN len = -1;
11341     long pos;
11342 #endif
11343
11344     PERL_UNUSED_CONTEXT;
11345     PERL_ARGS_ASSERT_DIRP_DUP;
11346
11347     if (!dp)
11348         return (DIR*)NULL;
11349
11350     /* look for it in the table first */
11351     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11352     if (ret)
11353         return ret;
11354
11355 #ifdef HAS_FCHDIR
11356
11357     PERL_UNUSED_ARG(param);
11358
11359     /* create anew */
11360
11361     /* open the current directory (so we can switch back) */
11362     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11363
11364     /* chdir to our dir handle and open the present working directory */
11365     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11366         PerlDir_close(pwd);
11367         return (DIR *)NULL;
11368     }
11369     /* Now we should have two dir handles pointing to the same dir. */
11370
11371     /* Be nice to the calling code and chdir back to where we were. */
11372     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11373
11374     /* We have no need of the pwd handle any more. */
11375     PerlDir_close(pwd);
11376
11377 #ifdef DIRNAMLEN
11378 # define d_namlen(d) (d)->d_namlen
11379 #else
11380 # define d_namlen(d) strlen((d)->d_name)
11381 #endif
11382     /* Iterate once through dp, to get the file name at the current posi-
11383        tion. Then step back. */
11384     pos = PerlDir_tell(dp);
11385     if ((dirent = PerlDir_read(dp))) {
11386         len = d_namlen(dirent);
11387         if (len <= sizeof smallbuf) name = smallbuf;
11388         else Newx(name, len, char);
11389         Move(dirent->d_name, name, len, char);
11390     }
11391     PerlDir_seek(dp, pos);
11392
11393     /* Iterate through the new dir handle, till we find a file with the
11394        right name. */
11395     if (!dirent) /* just before the end */
11396         for(;;) {
11397             pos = PerlDir_tell(ret);
11398             if (PerlDir_read(ret)) continue; /* not there yet */
11399             PerlDir_seek(ret, pos); /* step back */
11400             break;
11401         }
11402     else {
11403         const long pos0 = PerlDir_tell(ret);
11404         for(;;) {
11405             pos = PerlDir_tell(ret);
11406             if ((dirent = PerlDir_read(ret))) {
11407                 if (len == d_namlen(dirent)
11408                  && memEQ(name, dirent->d_name, len)) {
11409                     /* found it */
11410                     PerlDir_seek(ret, pos); /* step back */
11411                     break;
11412                 }
11413                 /* else we are not there yet; keep iterating */
11414             }
11415             else { /* This is not meant to happen. The best we can do is
11416                       reset the iterator to the beginning. */
11417                 PerlDir_seek(ret, pos0);
11418                 break;
11419             }
11420         }
11421     }
11422 #undef d_namlen
11423
11424     if (name && name != smallbuf)
11425         Safefree(name);
11426 #endif
11427
11428 #ifdef WIN32
11429     ret = win32_dirp_dup(dp, param);
11430 #endif
11431
11432     /* pop it in the pointer table */
11433     if (ret)
11434         ptr_table_store(PL_ptr_table, dp, ret);
11435
11436     return ret;
11437 }
11438
11439 /* duplicate a typeglob */
11440
11441 GP *
11442 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11443 {
11444     GP *ret;
11445
11446     PERL_ARGS_ASSERT_GP_DUP;
11447
11448     if (!gp)
11449         return (GP*)NULL;
11450     /* look for it in the table first */
11451     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11452     if (ret)
11453         return ret;
11454
11455     /* create anew and remember what it is */
11456     Newxz(ret, 1, GP);
11457     ptr_table_store(PL_ptr_table, gp, ret);
11458
11459     /* clone */
11460     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11461        on Newxz() to do this for us.  */
11462     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11463     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11464     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11465     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11466     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11467     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11468     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11469     ret->gp_cvgen       = gp->gp_cvgen;
11470     ret->gp_line        = gp->gp_line;
11471     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11472     return ret;
11473 }
11474
11475 /* duplicate a chain of magic */
11476
11477 MAGIC *
11478 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11479 {
11480     MAGIC *mgret = NULL;
11481     MAGIC **mgprev_p = &mgret;
11482
11483     PERL_ARGS_ASSERT_MG_DUP;
11484
11485     for (; mg; mg = mg->mg_moremagic) {
11486         MAGIC *nmg;
11487
11488         if ((param->flags & CLONEf_JOIN_IN)
11489                 && mg->mg_type == PERL_MAGIC_backref)
11490             /* when joining, we let the individual SVs add themselves to
11491              * backref as needed. */
11492             continue;
11493
11494         Newx(nmg, 1, MAGIC);
11495         *mgprev_p = nmg;
11496         mgprev_p = &(nmg->mg_moremagic);
11497
11498         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11499            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11500            from the original commit adding Perl_mg_dup() - revision 4538.
11501            Similarly there is the annotation "XXX random ptr?" next to the
11502            assignment to nmg->mg_ptr.  */
11503         *nmg = *mg;
11504
11505         /* FIXME for plugins
11506         if (nmg->mg_type == PERL_MAGIC_qr) {
11507             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11508         }
11509         else
11510         */
11511         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11512                           ? nmg->mg_type == PERL_MAGIC_backref
11513                                 /* The backref AV has its reference
11514                                  * count deliberately bumped by 1 */
11515                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11516                                                     nmg->mg_obj, param))
11517                                 : sv_dup_inc(nmg->mg_obj, param)
11518                           : sv_dup(nmg->mg_obj, param);
11519
11520         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11521             if (nmg->mg_len > 0) {
11522                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11523                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11524                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11525                 {
11526                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11527                     sv_dup_inc_multiple((SV**)(namtp->table),
11528                                         (SV**)(namtp->table), NofAMmeth, param);
11529                 }
11530             }
11531             else if (nmg->mg_len == HEf_SVKEY)
11532                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11533         }
11534         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11535             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11536         }
11537     }
11538     return mgret;
11539 }
11540
11541 #endif /* USE_ITHREADS */
11542
11543 struct ptr_tbl_arena {
11544     struct ptr_tbl_arena *next;
11545     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11546 };
11547
11548 /* create a new pointer-mapping table */
11549
11550 PTR_TBL_t *
11551 Perl_ptr_table_new(pTHX)
11552 {
11553     PTR_TBL_t *tbl;
11554     PERL_UNUSED_CONTEXT;
11555
11556     Newx(tbl, 1, PTR_TBL_t);
11557     tbl->tbl_max        = 511;
11558     tbl->tbl_items      = 0;
11559     tbl->tbl_arena      = NULL;
11560     tbl->tbl_arena_next = NULL;
11561     tbl->tbl_arena_end  = NULL;
11562     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11563     return tbl;
11564 }
11565
11566 #define PTR_TABLE_HASH(ptr) \
11567   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11568
11569 /* map an existing pointer using a table */
11570
11571 STATIC PTR_TBL_ENT_t *
11572 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11573 {
11574     PTR_TBL_ENT_t *tblent;
11575     const UV hash = PTR_TABLE_HASH(sv);
11576
11577     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11578
11579     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11580     for (; tblent; tblent = tblent->next) {
11581         if (tblent->oldval == sv)
11582             return tblent;
11583     }
11584     return NULL;
11585 }
11586
11587 void *
11588 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11589 {
11590     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11591
11592     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11593     PERL_UNUSED_CONTEXT;
11594
11595     return tblent ? tblent->newval : NULL;
11596 }
11597
11598 /* add a new entry to a pointer-mapping table */
11599
11600 void
11601 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11602 {
11603     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11604
11605     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11606     PERL_UNUSED_CONTEXT;
11607
11608     if (tblent) {
11609         tblent->newval = newsv;
11610     } else {
11611         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11612
11613         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11614             struct ptr_tbl_arena *new_arena;
11615
11616             Newx(new_arena, 1, struct ptr_tbl_arena);
11617             new_arena->next = tbl->tbl_arena;
11618             tbl->tbl_arena = new_arena;
11619             tbl->tbl_arena_next = new_arena->array;
11620             tbl->tbl_arena_end = new_arena->array
11621                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11622         }
11623
11624         tblent = tbl->tbl_arena_next++;
11625
11626         tblent->oldval = oldsv;
11627         tblent->newval = newsv;
11628         tblent->next = tbl->tbl_ary[entry];
11629         tbl->tbl_ary[entry] = tblent;
11630         tbl->tbl_items++;
11631         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11632             ptr_table_split(tbl);
11633     }
11634 }
11635
11636 /* double the hash bucket size of an existing ptr table */
11637
11638 void
11639 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11640 {
11641     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11642     const UV oldsize = tbl->tbl_max + 1;
11643     UV newsize = oldsize * 2;
11644     UV i;
11645
11646     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11647     PERL_UNUSED_CONTEXT;
11648
11649     Renew(ary, newsize, PTR_TBL_ENT_t*);
11650     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11651     tbl->tbl_max = --newsize;
11652     tbl->tbl_ary = ary;
11653     for (i=0; i < oldsize; i++, ary++) {
11654         PTR_TBL_ENT_t **entp = ary;
11655         PTR_TBL_ENT_t *ent = *ary;
11656         PTR_TBL_ENT_t **curentp;
11657         if (!ent)
11658             continue;
11659         curentp = ary + oldsize;
11660         do {
11661             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11662                 *entp = ent->next;
11663                 ent->next = *curentp;
11664                 *curentp = ent;
11665             }
11666             else
11667                 entp = &ent->next;
11668             ent = *entp;
11669         } while (ent);
11670     }
11671 }
11672
11673 /* remove all the entries from a ptr table */
11674 /* Deprecated - will be removed post 5.14 */
11675
11676 void
11677 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11678 {
11679     if (tbl && tbl->tbl_items) {
11680         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11681
11682         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11683
11684         while (arena) {
11685             struct ptr_tbl_arena *next = arena->next;
11686
11687             Safefree(arena);
11688             arena = next;
11689         };
11690
11691         tbl->tbl_items = 0;
11692         tbl->tbl_arena = NULL;
11693         tbl->tbl_arena_next = NULL;
11694         tbl->tbl_arena_end = NULL;
11695     }
11696 }
11697
11698 /* clear and free a ptr table */
11699
11700 void
11701 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11702 {
11703     struct ptr_tbl_arena *arena;
11704
11705     if (!tbl) {
11706         return;
11707     }
11708
11709     arena = tbl->tbl_arena;
11710
11711     while (arena) {
11712         struct ptr_tbl_arena *next = arena->next;
11713
11714         Safefree(arena);
11715         arena = next;
11716     }
11717
11718     Safefree(tbl->tbl_ary);
11719     Safefree(tbl);
11720 }
11721
11722 #if defined(USE_ITHREADS)
11723
11724 void
11725 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11726 {
11727     PERL_ARGS_ASSERT_RVPV_DUP;
11728
11729     if (SvROK(sstr)) {
11730         if (SvWEAKREF(sstr)) {
11731             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11732             if (param->flags & CLONEf_JOIN_IN) {
11733                 /* if joining, we add any back references individually rather
11734                  * than copying the whole backref array */
11735                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11736             }
11737         }
11738         else
11739             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11740     }
11741     else if (SvPVX_const(sstr)) {
11742         /* Has something there */
11743         if (SvLEN(sstr)) {
11744             /* Normal PV - clone whole allocated space */
11745             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11746             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11747                 /* Not that normal - actually sstr is copy on write.
11748                    But we are a true, independent SV, so:  */
11749                 SvREADONLY_off(dstr);
11750                 SvFAKE_off(dstr);
11751             }
11752         }
11753         else {
11754             /* Special case - not normally malloced for some reason */
11755             if (isGV_with_GP(sstr)) {
11756                 /* Don't need to do anything here.  */
11757             }
11758             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
11759                 /* A "shared" PV - clone it as "shared" PV */
11760                 SvPV_set(dstr,
11761                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11762                                          param)));
11763             }
11764             else {
11765                 /* Some other special case - random pointer */
11766                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11767             }
11768         }
11769     }
11770     else {
11771         /* Copy the NULL */
11772         SvPV_set(dstr, NULL);
11773     }
11774 }
11775
11776 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11777 static SV **
11778 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11779                       SSize_t items, CLONE_PARAMS *const param)
11780 {
11781     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11782
11783     while (items-- > 0) {
11784         *dest++ = sv_dup_inc(*source++, param);
11785     }
11786
11787     return dest;
11788 }
11789
11790 /* duplicate an SV of any type (including AV, HV etc) */
11791
11792 static SV *
11793 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11794 {
11795     dVAR;
11796     SV *dstr;
11797
11798     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11799
11800     if (SvTYPE(sstr) == SVTYPEMASK) {
11801 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11802         abort();
11803 #endif
11804         return NULL;
11805     }
11806     /* look for it in the table first */
11807     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11808     if (dstr)
11809         return dstr;
11810
11811     if(param->flags & CLONEf_JOIN_IN) {
11812         /** We are joining here so we don't want do clone
11813             something that is bad **/
11814         if (SvTYPE(sstr) == SVt_PVHV) {
11815             const HEK * const hvname = HvNAME_HEK(sstr);
11816             if (hvname) {
11817                 /** don't clone stashes if they already exist **/
11818                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
11819                 ptr_table_store(PL_ptr_table, sstr, dstr);
11820                 return dstr;
11821             }
11822         }
11823     }
11824
11825     /* create anew and remember what it is */
11826     new_SV(dstr);
11827
11828 #ifdef DEBUG_LEAKING_SCALARS
11829     dstr->sv_debug_optype = sstr->sv_debug_optype;
11830     dstr->sv_debug_line = sstr->sv_debug_line;
11831     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11832     dstr->sv_debug_parent = (SV*)sstr;
11833     FREE_SV_DEBUG_FILE(dstr);
11834     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11835 #endif
11836
11837     ptr_table_store(PL_ptr_table, sstr, dstr);
11838
11839     /* clone */
11840     SvFLAGS(dstr)       = SvFLAGS(sstr);
11841     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11842     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11843
11844 #ifdef DEBUGGING
11845     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11846         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11847                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11848 #endif
11849
11850     /* don't clone objects whose class has asked us not to */
11851     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11852         SvFLAGS(dstr) = 0;
11853         return dstr;
11854     }
11855
11856     switch (SvTYPE(sstr)) {
11857     case SVt_NULL:
11858         SvANY(dstr)     = NULL;
11859         break;
11860     case SVt_IV:
11861         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11862         if(SvROK(sstr)) {
11863             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11864         } else {
11865             SvIV_set(dstr, SvIVX(sstr));
11866         }
11867         break;
11868     case SVt_NV:
11869         SvANY(dstr)     = new_XNV();
11870         SvNV_set(dstr, SvNVX(sstr));
11871         break;
11872         /* case SVt_BIND: */
11873     default:
11874         {
11875             /* These are all the types that need complex bodies allocating.  */
11876             void *new_body;
11877             const svtype sv_type = SvTYPE(sstr);
11878             const struct body_details *const sv_type_details
11879                 = bodies_by_type + sv_type;
11880
11881             switch (sv_type) {
11882             default:
11883                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11884                 break;
11885
11886             case SVt_PVGV:
11887             case SVt_PVIO:
11888             case SVt_PVFM:
11889             case SVt_PVHV:
11890             case SVt_PVAV:
11891             case SVt_PVCV:
11892             case SVt_PVLV:
11893             case SVt_REGEXP:
11894             case SVt_PVMG:
11895             case SVt_PVNV:
11896             case SVt_PVIV:
11897             case SVt_PV:
11898                 assert(sv_type_details->body_size);
11899                 if (sv_type_details->arena) {
11900                     new_body_inline(new_body, sv_type);
11901                     new_body
11902                         = (void*)((char*)new_body - sv_type_details->offset);
11903                 } else {
11904                     new_body = new_NOARENA(sv_type_details);
11905                 }
11906             }
11907             assert(new_body);
11908             SvANY(dstr) = new_body;
11909
11910 #ifndef PURIFY
11911             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11912                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11913                  sv_type_details->copy, char);
11914 #else
11915             Copy(((char*)SvANY(sstr)),
11916                  ((char*)SvANY(dstr)),
11917                  sv_type_details->body_size + sv_type_details->offset, char);
11918 #endif
11919
11920             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11921                 && !isGV_with_GP(dstr)
11922                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
11923                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11924
11925             /* The Copy above means that all the source (unduplicated) pointers
11926                are now in the destination.  We can check the flags and the
11927                pointers in either, but it's possible that there's less cache
11928                missing by always going for the destination.
11929                FIXME - instrument and check that assumption  */
11930             if (sv_type >= SVt_PVMG) {
11931                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11932                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11933                 } else if (SvMAGIC(dstr))
11934                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11935                 if (SvSTASH(dstr))
11936                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
11937             }
11938
11939             /* The cast silences a GCC warning about unhandled types.  */
11940             switch ((int)sv_type) {
11941             case SVt_PV:
11942                 break;
11943             case SVt_PVIV:
11944                 break;
11945             case SVt_PVNV:
11946                 break;
11947             case SVt_PVMG:
11948                 break;
11949             case SVt_REGEXP:
11950                 /* FIXME for plugins */
11951                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
11952                 break;
11953             case SVt_PVLV:
11954                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11955                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11956                     LvTARG(dstr) = dstr;
11957                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
11958                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
11959                 else
11960                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
11961             case SVt_PVGV:
11962                 /* non-GP case already handled above */
11963                 if(isGV_with_GP(sstr)) {
11964                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
11965                     /* Don't call sv_add_backref here as it's going to be
11966                        created as part of the magic cloning of the symbol
11967                        table--unless this is during a join and the stash
11968                        is not actually being cloned.  */
11969                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
11970                        at the point of this comment.  */
11971                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
11972                     if (param->flags & CLONEf_JOIN_IN)
11973                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
11974                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
11975                     (void)GpREFCNT_inc(GvGP(dstr));
11976                 }
11977                 break;
11978             case SVt_PVIO:
11979                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
11980                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11981                     /* I have no idea why fake dirp (rsfps)
11982                        should be treated differently but otherwise
11983                        we end up with leaks -- sky*/
11984                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
11985                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
11986                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11987                 } else {
11988                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
11989                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
11990                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
11991                     if (IoDIRP(dstr)) {
11992                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
11993                     } else {
11994                         NOOP;
11995                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
11996                     }
11997                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
11998                 }
11999                 if (IoOFP(dstr) == IoIFP(sstr))
12000                     IoOFP(dstr) = IoIFP(dstr);
12001                 else
12002                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12003                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12004                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12005                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12006                 break;
12007             case SVt_PVAV:
12008                 /* avoid cloning an empty array */
12009                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12010                     SV **dst_ary, **src_ary;
12011                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12012
12013                     src_ary = AvARRAY((const AV *)sstr);
12014                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12015                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12016                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12017                     AvALLOC((const AV *)dstr) = dst_ary;
12018                     if (AvREAL((const AV *)sstr)) {
12019                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12020                                                       param);
12021                     }
12022                     else {
12023                         while (items-- > 0)
12024                             *dst_ary++ = sv_dup(*src_ary++, param);
12025                     }
12026                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12027                     while (items-- > 0) {
12028                         *dst_ary++ = &PL_sv_undef;
12029                     }
12030                 }
12031                 else {
12032                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12033                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12034                     AvMAX(  (const AV *)dstr)   = -1;
12035                     AvFILLp((const AV *)dstr)   = -1;
12036                 }
12037                 break;
12038             case SVt_PVHV:
12039                 if (HvARRAY((const HV *)sstr)) {
12040                     STRLEN i = 0;
12041                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12042                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12043                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12044                     char *darray;
12045                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12046                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12047                         char);
12048                     HvARRAY(dstr) = (HE**)darray;
12049                     while (i <= sxhv->xhv_max) {
12050                         const HE * const source = HvARRAY(sstr)[i];
12051                         HvARRAY(dstr)[i] = source
12052                             ? he_dup(source, sharekeys, param) : 0;
12053                         ++i;
12054                     }
12055                     if (SvOOK(sstr)) {
12056                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12057                         struct xpvhv_aux * const daux = HvAUX(dstr);
12058                         /* This flag isn't copied.  */
12059                         /* SvOOK_on(hv) attacks the IV flags.  */
12060                         SvFLAGS(dstr) |= SVf_OOK;
12061
12062                         if (saux->xhv_name_count) {
12063                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12064                             const I32 count
12065                              = saux->xhv_name_count < 0
12066                                 ? -saux->xhv_name_count
12067                                 :  saux->xhv_name_count;
12068                             HEK **shekp = sname + count;
12069                             HEK **dhekp;
12070                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12071                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12072                             while (shekp-- > sname) {
12073                                 dhekp--;
12074                                 *dhekp = hek_dup(*shekp, param);
12075                             }
12076                         }
12077                         else {
12078                             daux->xhv_name_u.xhvnameu_name
12079                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12080                                           param);
12081                         }
12082                         daux->xhv_name_count = saux->xhv_name_count;
12083
12084                         daux->xhv_riter = saux->xhv_riter;
12085                         daux->xhv_eiter = saux->xhv_eiter
12086                             ? he_dup(saux->xhv_eiter,
12087                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12088                         /* backref array needs refcnt=2; see sv_add_backref */
12089                         daux->xhv_backreferences =
12090                             (param->flags & CLONEf_JOIN_IN)
12091                                 /* when joining, we let the individual GVs and
12092                                  * CVs add themselves to backref as
12093                                  * needed. This avoids pulling in stuff
12094                                  * that isn't required, and simplifies the
12095                                  * case where stashes aren't cloned back
12096                                  * if they already exist in the parent
12097                                  * thread */
12098                             ? NULL
12099                             : saux->xhv_backreferences
12100                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12101                                     ? MUTABLE_AV(SvREFCNT_inc(
12102                                           sv_dup_inc((const SV *)
12103                                             saux->xhv_backreferences, param)))
12104                                     : MUTABLE_AV(sv_dup((const SV *)
12105                                             saux->xhv_backreferences, param))
12106                                 : 0;
12107
12108                         daux->xhv_mro_meta = saux->xhv_mro_meta
12109                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12110                             : 0;
12111
12112                         /* Record stashes for possible cloning in Perl_clone(). */
12113                         if (HvNAME(sstr))
12114                             av_push(param->stashes, dstr);
12115                     }
12116                 }
12117                 else
12118                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12119                 break;
12120             case SVt_PVCV:
12121                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12122                     CvDEPTH(dstr) = 0;
12123                 }
12124                 /*FALLTHROUGH*/
12125             case SVt_PVFM:
12126                 /* NOTE: not refcounted */
12127                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12128                     hv_dup(CvSTASH(dstr), param);
12129                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12130                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12131                 if (!CvISXSUB(dstr)) {
12132                     OP_REFCNT_LOCK;
12133                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12134                     OP_REFCNT_UNLOCK;
12135                     CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12136                 } else if (CvCONST(dstr)) {
12137                     CvXSUBANY(dstr).any_ptr =
12138                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12139                 }
12140                 /* don't dup if copying back - CvGV isn't refcounted, so the
12141                  * duped GV may never be freed. A bit of a hack! DAPM */
12142                 SvANY(MUTABLE_CV(dstr))->xcv_gv =
12143                     CvCVGV_RC(dstr)
12144                     ? gv_dup_inc(CvGV(sstr), param)
12145                     : (param->flags & CLONEf_JOIN_IN)
12146                         ? NULL
12147                         : gv_dup(CvGV(sstr), param);
12148
12149                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12150                 CvOUTSIDE(dstr) =
12151                     CvWEAKOUTSIDE(sstr)
12152                     ? cv_dup(    CvOUTSIDE(dstr), param)
12153                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12154                 break;
12155             }
12156         }
12157     }
12158
12159     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12160         ++PL_sv_objcount;
12161
12162     return dstr;
12163  }
12164
12165 SV *
12166 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12167 {
12168     PERL_ARGS_ASSERT_SV_DUP_INC;
12169     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12170 }
12171
12172 SV *
12173 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12174 {
12175     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12176     PERL_ARGS_ASSERT_SV_DUP;
12177
12178     /* Track every SV that (at least initially) had a reference count of 0.
12179        We need to do this by holding an actual reference to it in this array.
12180        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12181        (akin to the stashes hash, and the perl stack), we come unstuck if
12182        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12183        thread) is manipulated in a CLONE method, because CLONE runs before the
12184        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12185        (and fix things up by giving each a reference via the temps stack).
12186        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12187        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12188        before the walk of unreferenced happens and a reference to that is SV
12189        added to the temps stack. At which point we have the same SV considered
12190        to be in use, and free to be re-used. Not good.
12191     */
12192     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12193         assert(param->unreferenced);
12194         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12195     }
12196
12197     return dstr;
12198 }
12199
12200 /* duplicate a context */
12201
12202 PERL_CONTEXT *
12203 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12204 {
12205     PERL_CONTEXT *ncxs;
12206
12207     PERL_ARGS_ASSERT_CX_DUP;
12208
12209     if (!cxs)
12210         return (PERL_CONTEXT*)NULL;
12211
12212     /* look for it in the table first */
12213     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12214     if (ncxs)
12215         return ncxs;
12216
12217     /* create anew and remember what it is */
12218     Newx(ncxs, max + 1, PERL_CONTEXT);
12219     ptr_table_store(PL_ptr_table, cxs, ncxs);
12220     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12221
12222     while (ix >= 0) {
12223         PERL_CONTEXT * const ncx = &ncxs[ix];
12224         if (CxTYPE(ncx) == CXt_SUBST) {
12225             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12226         }
12227         else {
12228             switch (CxTYPE(ncx)) {
12229             case CXt_SUB:
12230                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12231                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12232                                            : cv_dup(ncx->blk_sub.cv,param));
12233                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12234                                            ? av_dup_inc(ncx->blk_sub.argarray,
12235                                                         param)
12236                                            : NULL);
12237                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12238                                                      param);
12239                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12240                                            ncx->blk_sub.oldcomppad);
12241                 break;
12242             case CXt_EVAL:
12243                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12244                                                       param);
12245                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12246                 break;
12247             case CXt_LOOP_LAZYSV:
12248                 ncx->blk_loop.state_u.lazysv.end
12249                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12250                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12251                    actually being the same function, and order equivalence of
12252                    the two unions.
12253                    We can assert the later [but only at run time :-(]  */
12254                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12255                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12256             case CXt_LOOP_FOR:
12257                 ncx->blk_loop.state_u.ary.ary
12258                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12259             case CXt_LOOP_LAZYIV:
12260             case CXt_LOOP_PLAIN:
12261                 if (CxPADLOOP(ncx)) {
12262                     ncx->blk_loop.itervar_u.oldcomppad
12263                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12264                                         ncx->blk_loop.itervar_u.oldcomppad);
12265                 } else {
12266                     ncx->blk_loop.itervar_u.gv
12267                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12268                                     param);
12269                 }
12270                 break;
12271             case CXt_FORMAT:
12272                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12273                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12274                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12275                                                      param);
12276                 break;
12277             case CXt_BLOCK:
12278             case CXt_NULL:
12279                 break;
12280             }
12281         }
12282         --ix;
12283     }
12284     return ncxs;
12285 }
12286
12287 /* duplicate a stack info structure */
12288
12289 PERL_SI *
12290 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12291 {
12292     PERL_SI *nsi;
12293
12294     PERL_ARGS_ASSERT_SI_DUP;
12295
12296     if (!si)
12297         return (PERL_SI*)NULL;
12298
12299     /* look for it in the table first */
12300     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12301     if (nsi)
12302         return nsi;
12303
12304     /* create anew and remember what it is */
12305     Newxz(nsi, 1, PERL_SI);
12306     ptr_table_store(PL_ptr_table, si, nsi);
12307
12308     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12309     nsi->si_cxix        = si->si_cxix;
12310     nsi->si_cxmax       = si->si_cxmax;
12311     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12312     nsi->si_type        = si->si_type;
12313     nsi->si_prev        = si_dup(si->si_prev, param);
12314     nsi->si_next        = si_dup(si->si_next, param);
12315     nsi->si_markoff     = si->si_markoff;
12316
12317     return nsi;
12318 }
12319
12320 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12321 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12322 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12323 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12324 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12325 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12326 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12327 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12328 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12329 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12330 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12331 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12332 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12333 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12334 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12335 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12336
12337 /* XXXXX todo */
12338 #define pv_dup_inc(p)   SAVEPV(p)
12339 #define pv_dup(p)       SAVEPV(p)
12340 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12341
12342 /* map any object to the new equivent - either something in the
12343  * ptr table, or something in the interpreter structure
12344  */
12345
12346 void *
12347 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12348 {
12349     void *ret;
12350
12351     PERL_ARGS_ASSERT_ANY_DUP;
12352
12353     if (!v)
12354         return (void*)NULL;
12355
12356     /* look for it in the table first */
12357     ret = ptr_table_fetch(PL_ptr_table, v);
12358     if (ret)
12359         return ret;
12360
12361     /* see if it is part of the interpreter structure */
12362     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12363         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12364     else {
12365         ret = v;
12366     }
12367
12368     return ret;
12369 }
12370
12371 /* duplicate the save stack */
12372
12373 ANY *
12374 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12375 {
12376     dVAR;
12377     ANY * const ss      = proto_perl->Isavestack;
12378     const I32 max       = proto_perl->Isavestack_max;
12379     I32 ix              = proto_perl->Isavestack_ix;
12380     ANY *nss;
12381     const SV *sv;
12382     const GV *gv;
12383     const AV *av;
12384     const HV *hv;
12385     void* ptr;
12386     int intval;
12387     long longval;
12388     GP *gp;
12389     IV iv;
12390     I32 i;
12391     char *c = NULL;
12392     void (*dptr) (void*);
12393     void (*dxptr) (pTHX_ void*);
12394
12395     PERL_ARGS_ASSERT_SS_DUP;
12396
12397     Newxz(nss, max, ANY);
12398
12399     while (ix > 0) {
12400         const UV uv = POPUV(ss,ix);
12401         const U8 type = (U8)uv & SAVE_MASK;
12402
12403         TOPUV(nss,ix) = uv;
12404         switch (type) {
12405         case SAVEt_CLEARSV:
12406             break;
12407         case SAVEt_HELEM:               /* hash element */
12408             sv = (const SV *)POPPTR(ss,ix);
12409             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12410             /* fall through */
12411         case SAVEt_ITEM:                        /* normal string */
12412         case SAVEt_GVSV:                        /* scalar slot in GV */
12413         case SAVEt_SV:                          /* scalar reference */
12414             sv = (const SV *)POPPTR(ss,ix);
12415             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12416             /* fall through */
12417         case SAVEt_FREESV:
12418         case SAVEt_MORTALIZESV:
12419             sv = (const SV *)POPPTR(ss,ix);
12420             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12421             break;
12422         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12423             c = (char*)POPPTR(ss,ix);
12424             TOPPTR(nss,ix) = savesharedpv(c);
12425             ptr = POPPTR(ss,ix);
12426             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12427             break;
12428         case SAVEt_GENERIC_SVREF:               /* generic sv */
12429         case SAVEt_SVREF:                       /* scalar reference */
12430             sv = (const SV *)POPPTR(ss,ix);
12431             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12432             ptr = POPPTR(ss,ix);
12433             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12434             break;
12435         case SAVEt_HV:                          /* hash reference */
12436         case SAVEt_AV:                          /* array reference */
12437             sv = (const SV *) POPPTR(ss,ix);
12438             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12439             /* fall through */
12440         case SAVEt_COMPPAD:
12441         case SAVEt_NSTAB:
12442             sv = (const SV *) POPPTR(ss,ix);
12443             TOPPTR(nss,ix) = sv_dup(sv, param);
12444             break;
12445         case SAVEt_INT:                         /* int reference */
12446             ptr = POPPTR(ss,ix);
12447             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12448             intval = (int)POPINT(ss,ix);
12449             TOPINT(nss,ix) = intval;
12450             break;
12451         case SAVEt_LONG:                        /* long reference */
12452             ptr = POPPTR(ss,ix);
12453             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12454             longval = (long)POPLONG(ss,ix);
12455             TOPLONG(nss,ix) = longval;
12456             break;
12457         case SAVEt_I32:                         /* I32 reference */
12458         case SAVEt_COP_ARYBASE:                 /* call CopARYBASE_set */
12459             ptr = POPPTR(ss,ix);
12460             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12461             i = POPINT(ss,ix);
12462             TOPINT(nss,ix) = i;
12463             break;
12464         case SAVEt_IV:                          /* IV reference */
12465             ptr = POPPTR(ss,ix);
12466             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12467             iv = POPIV(ss,ix);
12468             TOPIV(nss,ix) = iv;
12469             break;
12470         case SAVEt_HPTR:                        /* HV* reference */
12471         case SAVEt_APTR:                        /* AV* reference */
12472         case SAVEt_SPTR:                        /* SV* reference */
12473             ptr = POPPTR(ss,ix);
12474             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12475             sv = (const SV *)POPPTR(ss,ix);
12476             TOPPTR(nss,ix) = sv_dup(sv, param);
12477             break;
12478         case SAVEt_VPTR:                        /* random* reference */
12479             ptr = POPPTR(ss,ix);
12480             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12481             /* Fall through */
12482         case SAVEt_INT_SMALL:
12483         case SAVEt_I32_SMALL:
12484         case SAVEt_I16:                         /* I16 reference */
12485         case SAVEt_I8:                          /* I8 reference */
12486         case SAVEt_BOOL:
12487             ptr = POPPTR(ss,ix);
12488             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12489             break;
12490         case SAVEt_GENERIC_PVREF:               /* generic char* */
12491         case SAVEt_PPTR:                        /* char* reference */
12492             ptr = POPPTR(ss,ix);
12493             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12494             c = (char*)POPPTR(ss,ix);
12495             TOPPTR(nss,ix) = pv_dup(c);
12496             break;
12497         case SAVEt_GP:                          /* scalar reference */
12498             gp = (GP*)POPPTR(ss,ix);
12499             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12500             (void)GpREFCNT_inc(gp);
12501             gv = (const GV *)POPPTR(ss,ix);
12502             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12503             break;
12504         case SAVEt_FREEOP:
12505             ptr = POPPTR(ss,ix);
12506             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12507                 /* these are assumed to be refcounted properly */
12508                 OP *o;
12509                 switch (((OP*)ptr)->op_type) {
12510                 case OP_LEAVESUB:
12511                 case OP_LEAVESUBLV:
12512                 case OP_LEAVEEVAL:
12513                 case OP_LEAVE:
12514                 case OP_SCOPE:
12515                 case OP_LEAVEWRITE:
12516                     TOPPTR(nss,ix) = ptr;
12517                     o = (OP*)ptr;
12518                     OP_REFCNT_LOCK;
12519                     (void) OpREFCNT_inc(o);
12520                     OP_REFCNT_UNLOCK;
12521                     break;
12522                 default:
12523                     TOPPTR(nss,ix) = NULL;
12524                     break;
12525                 }
12526             }
12527             else
12528                 TOPPTR(nss,ix) = NULL;
12529             break;
12530         case SAVEt_FREECOPHH:
12531             ptr = POPPTR(ss,ix);
12532             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12533             break;
12534         case SAVEt_DELETE:
12535             hv = (const HV *)POPPTR(ss,ix);
12536             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12537             i = POPINT(ss,ix);
12538             TOPINT(nss,ix) = i;
12539             /* Fall through */
12540         case SAVEt_FREEPV:
12541             c = (char*)POPPTR(ss,ix);
12542             TOPPTR(nss,ix) = pv_dup_inc(c);
12543             break;
12544         case SAVEt_STACK_POS:           /* Position on Perl stack */
12545             i = POPINT(ss,ix);
12546             TOPINT(nss,ix) = i;
12547             break;
12548         case SAVEt_DESTRUCTOR:
12549             ptr = POPPTR(ss,ix);
12550             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12551             dptr = POPDPTR(ss,ix);
12552             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12553                                         any_dup(FPTR2DPTR(void *, dptr),
12554                                                 proto_perl));
12555             break;
12556         case SAVEt_DESTRUCTOR_X:
12557             ptr = POPPTR(ss,ix);
12558             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12559             dxptr = POPDXPTR(ss,ix);
12560             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12561                                          any_dup(FPTR2DPTR(void *, dxptr),
12562                                                  proto_perl));
12563             break;
12564         case SAVEt_REGCONTEXT:
12565         case SAVEt_ALLOC:
12566             ix -= uv >> SAVE_TIGHT_SHIFT;
12567             break;
12568         case SAVEt_AELEM:               /* array element */
12569             sv = (const SV *)POPPTR(ss,ix);
12570             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12571             i = POPINT(ss,ix);
12572             TOPINT(nss,ix) = i;
12573             av = (const AV *)POPPTR(ss,ix);
12574             TOPPTR(nss,ix) = av_dup_inc(av, param);
12575             break;
12576         case SAVEt_OP:
12577             ptr = POPPTR(ss,ix);
12578             TOPPTR(nss,ix) = ptr;
12579             break;
12580         case SAVEt_HINTS:
12581             ptr = POPPTR(ss,ix);
12582             ptr = cophh_copy((COPHH*)ptr);
12583             TOPPTR(nss,ix) = ptr;
12584             i = POPINT(ss,ix);
12585             TOPINT(nss,ix) = i;
12586             if (i & HINT_LOCALIZE_HH) {
12587                 hv = (const HV *)POPPTR(ss,ix);
12588                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12589             }
12590             break;
12591         case SAVEt_PADSV_AND_MORTALIZE:
12592             longval = (long)POPLONG(ss,ix);
12593             TOPLONG(nss,ix) = longval;
12594             ptr = POPPTR(ss,ix);
12595             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12596             sv = (const SV *)POPPTR(ss,ix);
12597             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12598             break;
12599         case SAVEt_SET_SVFLAGS:
12600             i = POPINT(ss,ix);
12601             TOPINT(nss,ix) = i;
12602             i = POPINT(ss,ix);
12603             TOPINT(nss,ix) = i;
12604             sv = (const SV *)POPPTR(ss,ix);
12605             TOPPTR(nss,ix) = sv_dup(sv, param);
12606             break;
12607         case SAVEt_RE_STATE:
12608             {
12609                 const struct re_save_state *const old_state
12610                     = (struct re_save_state *)
12611                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12612                 struct re_save_state *const new_state
12613                     = (struct re_save_state *)
12614                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12615
12616                 Copy(old_state, new_state, 1, struct re_save_state);
12617                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12618
12619                 new_state->re_state_bostr
12620                     = pv_dup(old_state->re_state_bostr);
12621                 new_state->re_state_reginput
12622                     = pv_dup(old_state->re_state_reginput);
12623                 new_state->re_state_regeol
12624                     = pv_dup(old_state->re_state_regeol);
12625                 new_state->re_state_regoffs
12626                     = (regexp_paren_pair*)
12627                         any_dup(old_state->re_state_regoffs, proto_perl);
12628                 new_state->re_state_reglastparen
12629                     = (U32*) any_dup(old_state->re_state_reglastparen, 
12630                               proto_perl);
12631                 new_state->re_state_reglastcloseparen
12632                     = (U32*)any_dup(old_state->re_state_reglastcloseparen,
12633                               proto_perl);
12634                 /* XXX This just has to be broken. The old save_re_context
12635                    code did SAVEGENERICPV(PL_reg_start_tmp);
12636                    PL_reg_start_tmp is char **.
12637                    Look above to what the dup code does for
12638                    SAVEt_GENERIC_PVREF
12639                    It can never have worked.
12640                    So this is merely a faithful copy of the exiting bug:  */
12641                 new_state->re_state_reg_start_tmp
12642                     = (char **) pv_dup((char *)
12643                                       old_state->re_state_reg_start_tmp);
12644                 /* I assume that it only ever "worked" because no-one called
12645                    (pseudo)fork while the regexp engine had re-entered itself.
12646                 */
12647 #ifdef PERL_OLD_COPY_ON_WRITE
12648                 new_state->re_state_nrs
12649                     = sv_dup(old_state->re_state_nrs, param);
12650 #endif
12651                 new_state->re_state_reg_magic
12652                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12653                                proto_perl);
12654                 new_state->re_state_reg_oldcurpm
12655                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12656                               proto_perl);
12657                 new_state->re_state_reg_curpm
12658                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12659                                proto_perl);
12660                 new_state->re_state_reg_oldsaved
12661                     = pv_dup(old_state->re_state_reg_oldsaved);
12662                 new_state->re_state_reg_poscache
12663                     = pv_dup(old_state->re_state_reg_poscache);
12664                 new_state->re_state_reg_starttry
12665                     = pv_dup(old_state->re_state_reg_starttry);
12666                 break;
12667             }
12668         case SAVEt_COMPILE_WARNINGS:
12669             ptr = POPPTR(ss,ix);
12670             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12671             break;
12672         case SAVEt_PARSER:
12673             ptr = POPPTR(ss,ix);
12674             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12675             break;
12676         default:
12677             Perl_croak(aTHX_
12678                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12679         }
12680     }
12681
12682     return nss;
12683 }
12684
12685
12686 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12687  * flag to the result. This is done for each stash before cloning starts,
12688  * so we know which stashes want their objects cloned */
12689
12690 static void
12691 do_mark_cloneable_stash(pTHX_ SV *const sv)
12692 {
12693     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12694     if (hvname) {
12695         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12696         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12697         if (cloner && GvCV(cloner)) {
12698             dSP;
12699             UV status;
12700
12701             ENTER;
12702             SAVETMPS;
12703             PUSHMARK(SP);
12704             mXPUSHs(newSVhek(hvname));
12705             PUTBACK;
12706             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12707             SPAGAIN;
12708             status = POPu;
12709             PUTBACK;
12710             FREETMPS;
12711             LEAVE;
12712             if (status)
12713                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12714         }
12715     }
12716 }
12717
12718
12719
12720 /*
12721 =for apidoc perl_clone
12722
12723 Create and return a new interpreter by cloning the current one.
12724
12725 perl_clone takes these flags as parameters:
12726
12727 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12728 without it we only clone the data and zero the stacks,
12729 with it we copy the stacks and the new perl interpreter is
12730 ready to run at the exact same point as the previous one.
12731 The pseudo-fork code uses COPY_STACKS while the
12732 threads->create doesn't.
12733
12734 CLONEf_KEEP_PTR_TABLE
12735 perl_clone keeps a ptr_table with the pointer of the old
12736 variable as a key and the new variable as a value,
12737 this allows it to check if something has been cloned and not
12738 clone it again but rather just use the value and increase the
12739 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
12740 the ptr_table using the function
12741 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12742 reason to keep it around is if you want to dup some of your own
12743 variable who are outside the graph perl scans, example of this
12744 code is in threads.xs create
12745
12746 CLONEf_CLONE_HOST
12747 This is a win32 thing, it is ignored on unix, it tells perls
12748 win32host code (which is c++) to clone itself, this is needed on
12749 win32 if you want to run two threads at the same time,
12750 if you just want to do some stuff in a separate perl interpreter
12751 and then throw it away and return to the original one,
12752 you don't need to do anything.
12753
12754 =cut
12755 */
12756
12757 /* XXX the above needs expanding by someone who actually understands it ! */
12758 EXTERN_C PerlInterpreter *
12759 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12760
12761 PerlInterpreter *
12762 perl_clone(PerlInterpreter *proto_perl, UV flags)
12763 {
12764    dVAR;
12765 #ifdef PERL_IMPLICIT_SYS
12766
12767     PERL_ARGS_ASSERT_PERL_CLONE;
12768
12769    /* perlhost.h so we need to call into it
12770    to clone the host, CPerlHost should have a c interface, sky */
12771
12772    if (flags & CLONEf_CLONE_HOST) {
12773        return perl_clone_host(proto_perl,flags);
12774    }
12775    return perl_clone_using(proto_perl, flags,
12776                             proto_perl->IMem,
12777                             proto_perl->IMemShared,
12778                             proto_perl->IMemParse,
12779                             proto_perl->IEnv,
12780                             proto_perl->IStdIO,
12781                             proto_perl->ILIO,
12782                             proto_perl->IDir,
12783                             proto_perl->ISock,
12784                             proto_perl->IProc);
12785 }
12786
12787 PerlInterpreter *
12788 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12789                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12790                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12791                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12792                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12793                  struct IPerlProc* ipP)
12794 {
12795     /* XXX many of the string copies here can be optimized if they're
12796      * constants; they need to be allocated as common memory and just
12797      * their pointers copied. */
12798
12799     IV i;
12800     CLONE_PARAMS clone_params;
12801     CLONE_PARAMS* const param = &clone_params;
12802
12803     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12804
12805     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12806 #else           /* !PERL_IMPLICIT_SYS */
12807     IV i;
12808     CLONE_PARAMS clone_params;
12809     CLONE_PARAMS* param = &clone_params;
12810     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12811
12812     PERL_ARGS_ASSERT_PERL_CLONE;
12813 #endif          /* PERL_IMPLICIT_SYS */
12814
12815     /* for each stash, determine whether its objects should be cloned */
12816     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12817     PERL_SET_THX(my_perl);
12818
12819 #ifdef DEBUGGING
12820     PoisonNew(my_perl, 1, PerlInterpreter);
12821     PL_op = NULL;
12822     PL_curcop = NULL;
12823     PL_markstack = 0;
12824     PL_scopestack = 0;
12825     PL_scopestack_name = 0;
12826     PL_savestack = 0;
12827     PL_savestack_ix = 0;
12828     PL_savestack_max = -1;
12829     PL_sig_pending = 0;
12830     PL_parser = NULL;
12831     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12832 #  ifdef DEBUG_LEAKING_SCALARS
12833     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12834 #  endif
12835 #else   /* !DEBUGGING */
12836     Zero(my_perl, 1, PerlInterpreter);
12837 #endif  /* DEBUGGING */
12838
12839 #ifdef PERL_IMPLICIT_SYS
12840     /* host pointers */
12841     PL_Mem              = ipM;
12842     PL_MemShared        = ipMS;
12843     PL_MemParse         = ipMP;
12844     PL_Env              = ipE;
12845     PL_StdIO            = ipStd;
12846     PL_LIO              = ipLIO;
12847     PL_Dir              = ipD;
12848     PL_Sock             = ipS;
12849     PL_Proc             = ipP;
12850 #endif          /* PERL_IMPLICIT_SYS */
12851
12852     param->flags = flags;
12853     /* Nothing in the core code uses this, but we make it available to
12854        extensions (using mg_dup).  */
12855     param->proto_perl = proto_perl;
12856     /* Likely nothing will use this, but it is initialised to be consistent
12857        with Perl_clone_params_new().  */
12858     param->new_perl = my_perl;
12859     param->unreferenced = NULL;
12860
12861     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12862
12863     PL_body_arenas = NULL;
12864     Zero(&PL_body_roots, 1, PL_body_roots);
12865     
12866     PL_sv_count         = 0;
12867     PL_sv_objcount      = 0;
12868     PL_sv_root          = NULL;
12869     PL_sv_arenaroot     = NULL;
12870
12871     PL_debug            = proto_perl->Idebug;
12872
12873     PL_hash_seed        = proto_perl->Ihash_seed;
12874     PL_rehash_seed      = proto_perl->Irehash_seed;
12875
12876 #ifdef USE_REENTRANT_API
12877     /* XXX: things like -Dm will segfault here in perlio, but doing
12878      *  PERL_SET_CONTEXT(proto_perl);
12879      * breaks too many other things
12880      */
12881     Perl_reentrant_init(aTHX);
12882 #endif
12883
12884     /* create SV map for pointer relocation */
12885     PL_ptr_table = ptr_table_new();
12886
12887     /* initialize these special pointers as early as possible */
12888     SvANY(&PL_sv_undef)         = NULL;
12889     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
12890     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
12891     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
12892
12893     SvANY(&PL_sv_no)            = new_XPVNV();
12894     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
12895     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12896                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12897     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
12898     SvCUR_set(&PL_sv_no, 0);
12899     SvLEN_set(&PL_sv_no, 1);
12900     SvIV_set(&PL_sv_no, 0);
12901     SvNV_set(&PL_sv_no, 0);
12902     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
12903
12904     SvANY(&PL_sv_yes)           = new_XPVNV();
12905     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
12906     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12907                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12908     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
12909     SvCUR_set(&PL_sv_yes, 1);
12910     SvLEN_set(&PL_sv_yes, 2);
12911     SvIV_set(&PL_sv_yes, 1);
12912     SvNV_set(&PL_sv_yes, 1);
12913     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
12914
12915     /* dbargs array probably holds garbage */
12916     PL_dbargs           = NULL;
12917
12918     /* create (a non-shared!) shared string table */
12919     PL_strtab           = newHV();
12920     HvSHAREKEYS_off(PL_strtab);
12921     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
12922     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
12923
12924     PL_compiling = proto_perl->Icompiling;
12925
12926     /* These two PVs will be free'd special way so must set them same way op.c does */
12927     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
12928     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
12929
12930     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
12931     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
12932
12933     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
12934     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
12935     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
12936     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
12937 #ifdef PERL_DEBUG_READONLY_OPS
12938     PL_slabs = NULL;
12939     PL_slab_count = 0;
12940 #endif
12941
12942     /* pseudo environmental stuff */
12943     PL_origargc         = proto_perl->Iorigargc;
12944     PL_origargv         = proto_perl->Iorigargv;
12945
12946     param->stashes      = newAV();  /* Setup array of objects to call clone on */
12947     /* This makes no difference to the implementation, as it always pushes
12948        and shifts pointers to other SVs without changing their reference
12949        count, with the array becoming empty before it is freed. However, it
12950        makes it conceptually clear what is going on, and will avoid some
12951        work inside av.c, filling slots between AvFILL() and AvMAX() with
12952        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
12953     AvREAL_off(param->stashes);
12954
12955     if (!(flags & CLONEf_COPY_STACKS)) {
12956         param->unreferenced = newAV();
12957     }
12958
12959     /* Set tainting stuff before PerlIO_debug can possibly get called */
12960     PL_tainting         = proto_perl->Itainting;
12961     PL_taint_warn       = proto_perl->Itaint_warn;
12962
12963 #ifdef PERLIO_LAYERS
12964     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
12965     PerlIO_clone(aTHX_ proto_perl, param);
12966 #endif
12967
12968     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
12969     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
12970     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
12971     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
12972     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
12973     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
12974
12975     /* switches */
12976     PL_minus_c          = proto_perl->Iminus_c;
12977     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
12978     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
12979     PL_localpatches     = proto_perl->Ilocalpatches;
12980     PL_splitstr         = proto_perl->Isplitstr;
12981     PL_minus_n          = proto_perl->Iminus_n;
12982     PL_minus_p          = proto_perl->Iminus_p;
12983     PL_minus_l          = proto_perl->Iminus_l;
12984     PL_minus_a          = proto_perl->Iminus_a;
12985     PL_minus_E          = proto_perl->Iminus_E;
12986     PL_minus_F          = proto_perl->Iminus_F;
12987     PL_doswitches       = proto_perl->Idoswitches;
12988     PL_dowarn           = proto_perl->Idowarn;
12989     PL_sawampersand     = proto_perl->Isawampersand;
12990     PL_unsafe           = proto_perl->Iunsafe;
12991     PL_inplace          = SAVEPV(proto_perl->Iinplace);
12992     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
12993     PL_perldb           = proto_perl->Iperldb;
12994     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12995     PL_exit_flags       = proto_perl->Iexit_flags;
12996
12997     /* magical thingies */
12998     /* XXX time(&PL_basetime) when asked for? */
12999     PL_basetime         = proto_perl->Ibasetime;
13000     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
13001
13002     PL_maxsysfd         = proto_perl->Imaxsysfd;
13003     PL_statusvalue      = proto_perl->Istatusvalue;
13004 #ifdef VMS
13005     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13006 #else
13007     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13008 #endif
13009     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13010
13011     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13012     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13013     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13014
13015    
13016     /* RE engine related */
13017     Zero(&PL_reg_state, 1, struct re_save_state);
13018     PL_reginterp_cnt    = 0;
13019     PL_regmatch_slab    = NULL;
13020     
13021     /* Clone the regex array */
13022     /* ORANGE FIXME for plugins, probably in the SV dup code.
13023        newSViv(PTR2IV(CALLREGDUPE(
13024        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13025     */
13026     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13027     PL_regex_pad = AvARRAY(PL_regex_padav);
13028
13029     /* shortcuts to various I/O objects */
13030     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13031     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13032     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13033     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13034     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13035     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13036     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13037
13038     /* shortcuts to regexp stuff */
13039     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13040
13041     /* shortcuts to misc objects */
13042     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13043
13044     /* shortcuts to debugging objects */
13045     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13046     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13047     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13048     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13049     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13050     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13051
13052     /* symbol tables */
13053     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13054     PL_curstash         = hv_dup(proto_perl->Icurstash, param);
13055     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13056     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13057     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13058
13059     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13060     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13061     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13062     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13063     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13064     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13065     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13066     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13067
13068     PL_sub_generation   = proto_perl->Isub_generation;
13069     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13070
13071     /* funky return mechanisms */
13072     PL_forkprocess      = proto_perl->Iforkprocess;
13073
13074     /* subprocess state */
13075     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13076
13077     /* internal state */
13078     PL_maxo             = proto_perl->Imaxo;
13079     if (proto_perl->Iop_mask)
13080         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13081     else
13082         PL_op_mask      = NULL;
13083     /* PL_asserting        = proto_perl->Iasserting; */
13084
13085     /* current interpreter roots */
13086     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13087     OP_REFCNT_LOCK;
13088     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13089     OP_REFCNT_UNLOCK;
13090     PL_main_start       = proto_perl->Imain_start;
13091     PL_eval_root        = proto_perl->Ieval_root;
13092     PL_eval_start       = proto_perl->Ieval_start;
13093
13094     /* runtime control stuff */
13095     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13096
13097     PL_filemode         = proto_perl->Ifilemode;
13098     PL_lastfd           = proto_perl->Ilastfd;
13099     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13100     PL_Argv             = NULL;
13101     PL_Cmd              = NULL;
13102     PL_gensym           = proto_perl->Igensym;
13103     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13104     PL_laststatval      = proto_perl->Ilaststatval;
13105     PL_laststype        = proto_perl->Ilaststype;
13106     PL_mess_sv          = NULL;
13107
13108     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13109
13110     /* interpreter atexit processing */
13111     PL_exitlistlen      = proto_perl->Iexitlistlen;
13112     if (PL_exitlistlen) {
13113         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13114         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13115     }
13116     else
13117         PL_exitlist     = (PerlExitListEntry*)NULL;
13118
13119     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13120     if (PL_my_cxt_size) {
13121         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13122         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13123 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13124         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13125         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13126 #endif
13127     }
13128     else {
13129         PL_my_cxt_list  = (void**)NULL;
13130 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13131         PL_my_cxt_keys  = (const char**)NULL;
13132 #endif
13133     }
13134     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13135     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13136     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13137     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13138
13139     PL_profiledata      = NULL;
13140
13141     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13142
13143     PAD_CLONE_VARS(proto_perl, param);
13144
13145 #ifdef HAVE_INTERP_INTERN
13146     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13147 #endif
13148
13149     /* more statics moved here */
13150     PL_generation       = proto_perl->Igeneration;
13151     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13152
13153     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13154     PL_in_clean_all     = proto_perl->Iin_clean_all;
13155
13156     PL_uid              = proto_perl->Iuid;
13157     PL_euid             = proto_perl->Ieuid;
13158     PL_gid              = proto_perl->Igid;
13159     PL_egid             = proto_perl->Iegid;
13160     PL_nomemok          = proto_perl->Inomemok;
13161     PL_an               = proto_perl->Ian;
13162     PL_evalseq          = proto_perl->Ievalseq;
13163     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13164     PL_origalen         = proto_perl->Iorigalen;
13165 #ifdef PERL_USES_PL_PIDSTATUS
13166     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13167 #endif
13168     PL_osname           = SAVEPV(proto_perl->Iosname);
13169     PL_sighandlerp      = proto_perl->Isighandlerp;
13170
13171     PL_runops           = proto_perl->Irunops;
13172
13173     PL_parser           = parser_dup(proto_perl->Iparser, param);
13174
13175     /* XXX this only works if the saved cop has already been cloned */
13176     if (proto_perl->Iparser) {
13177         PL_parser->saved_curcop = (COP*)any_dup(
13178                                     proto_perl->Iparser->saved_curcop,
13179                                     proto_perl);
13180     }
13181
13182     PL_subline          = proto_perl->Isubline;
13183     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13184
13185 #ifdef FCRYPT
13186     PL_cryptseen        = proto_perl->Icryptseen;
13187 #endif
13188
13189     PL_hints            = proto_perl->Ihints;
13190
13191     PL_amagic_generation        = proto_perl->Iamagic_generation;
13192
13193 #ifdef USE_LOCALE_COLLATE
13194     PL_collation_ix     = proto_perl->Icollation_ix;
13195     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13196     PL_collation_standard       = proto_perl->Icollation_standard;
13197     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13198     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13199 #endif /* USE_LOCALE_COLLATE */
13200
13201 #ifdef USE_LOCALE_NUMERIC
13202     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13203     PL_numeric_standard = proto_perl->Inumeric_standard;
13204     PL_numeric_local    = proto_perl->Inumeric_local;
13205     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13206 #endif /* !USE_LOCALE_NUMERIC */
13207
13208     /* utf8 character classes */
13209     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
13210     PL_utf8_ascii       = sv_dup_inc(proto_perl->Iutf8_ascii, param);
13211     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13212     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
13213     PL_utf8_cntrl       = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
13214     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
13215     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
13216     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
13217     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
13218     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
13219     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
13220     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13221     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13222     PL_utf8_X_begin     = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
13223     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13224     PL_utf8_X_prepend   = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
13225     PL_utf8_X_non_hangul        = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
13226     PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
13227     PL_utf8_X_LV        = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
13228     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13229     PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
13230     PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
13231     PL_utf8_X_LV_LVT_V  = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
13232     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13233     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13234     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13235     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13236     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13237     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13238     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13239     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13240     PL_utf8_foldable    = hv_dup_inc(proto_perl->Iutf8_foldable, param);
13241
13242     /* Did the locale setup indicate UTF-8? */
13243     PL_utf8locale       = proto_perl->Iutf8locale;
13244     /* Unicode features (see perlrun/-C) */
13245     PL_unicode          = proto_perl->Iunicode;
13246
13247     /* Pre-5.8 signals control */
13248     PL_signals          = proto_perl->Isignals;
13249
13250     /* times() ticks per second */
13251     PL_clocktick        = proto_perl->Iclocktick;
13252
13253     /* Recursion stopper for PerlIO_find_layer */
13254     PL_in_load_module   = proto_perl->Iin_load_module;
13255
13256     /* sort() routine */
13257     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13258
13259     /* Not really needed/useful since the reenrant_retint is "volatile",
13260      * but do it for consistency's sake. */
13261     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13262
13263     /* Hooks to shared SVs and locks. */
13264     PL_sharehook        = proto_perl->Isharehook;
13265     PL_lockhook         = proto_perl->Ilockhook;
13266     PL_unlockhook       = proto_perl->Iunlockhook;
13267     PL_threadhook       = proto_perl->Ithreadhook;
13268     PL_destroyhook      = proto_perl->Idestroyhook;
13269     PL_signalhook       = proto_perl->Isignalhook;
13270
13271 #ifdef THREADS_HAVE_PIDS
13272     PL_ppid             = proto_perl->Ippid;
13273 #endif
13274
13275     /* swatch cache */
13276     PL_last_swash_hv    = NULL; /* reinits on demand */
13277     PL_last_swash_klen  = 0;
13278     PL_last_swash_key[0]= '\0';
13279     PL_last_swash_tmps  = (U8*)NULL;
13280     PL_last_swash_slen  = 0;
13281
13282     PL_glob_index       = proto_perl->Iglob_index;
13283     PL_srand_called     = proto_perl->Isrand_called;
13284
13285     if (proto_perl->Ipsig_pend) {
13286         Newxz(PL_psig_pend, SIG_SIZE, int);
13287     }
13288     else {
13289         PL_psig_pend    = (int*)NULL;
13290     }
13291
13292     if (proto_perl->Ipsig_name) {
13293         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13294         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13295                             param);
13296         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13297     }
13298     else {
13299         PL_psig_ptr     = (SV**)NULL;
13300         PL_psig_name    = (SV**)NULL;
13301     }
13302
13303     /* intrpvar.h stuff */
13304
13305     if (flags & CLONEf_COPY_STACKS) {
13306         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13307         PL_tmps_ix              = proto_perl->Itmps_ix;
13308         PL_tmps_max             = proto_perl->Itmps_max;
13309         PL_tmps_floor           = proto_perl->Itmps_floor;
13310         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13311         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13312                             PL_tmps_ix+1, param);
13313
13314         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13315         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13316         Newxz(PL_markstack, i, I32);
13317         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13318                                                   - proto_perl->Imarkstack);
13319         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13320                                                   - proto_perl->Imarkstack);
13321         Copy(proto_perl->Imarkstack, PL_markstack,
13322              PL_markstack_ptr - PL_markstack + 1, I32);
13323
13324         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13325          * NOTE: unlike the others! */
13326         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13327         PL_scopestack_max       = proto_perl->Iscopestack_max;
13328         Newxz(PL_scopestack, PL_scopestack_max, I32);
13329         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13330
13331 #ifdef DEBUGGING
13332         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13333         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13334 #endif
13335         /* NOTE: si_dup() looks at PL_markstack */
13336         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13337
13338         /* PL_curstack          = PL_curstackinfo->si_stack; */
13339         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13340         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13341
13342         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13343         PL_stack_base           = AvARRAY(PL_curstack);
13344         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13345                                                    - proto_perl->Istack_base);
13346         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13347
13348         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13349          * NOTE: unlike the others! */
13350         PL_savestack_ix         = proto_perl->Isavestack_ix;
13351         PL_savestack_max        = proto_perl->Isavestack_max;
13352         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13353         PL_savestack            = ss_dup(proto_perl, param);
13354     }
13355     else {
13356         init_stacks();
13357         ENTER;                  /* perl_destruct() wants to LEAVE; */
13358     }
13359
13360     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13361     PL_top_env          = &PL_start_env;
13362
13363     PL_op               = proto_perl->Iop;
13364
13365     PL_Sv               = NULL;
13366     PL_Xpv              = (XPV*)NULL;
13367     my_perl->Ina        = proto_perl->Ina;
13368
13369     PL_statbuf          = proto_perl->Istatbuf;
13370     PL_statcache        = proto_perl->Istatcache;
13371     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13372     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13373 #ifdef HAS_TIMES
13374     PL_timesbuf         = proto_perl->Itimesbuf;
13375 #endif
13376
13377     PL_tainted          = proto_perl->Itainted;
13378     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13379     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13380     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13381     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13382     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13383     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13384     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13385     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13386
13387     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13388     PL_restartop        = proto_perl->Irestartop;
13389     PL_in_eval          = proto_perl->Iin_eval;
13390     PL_delaymagic       = proto_perl->Idelaymagic;
13391     PL_phase            = proto_perl->Iphase;
13392     PL_localizing       = proto_perl->Ilocalizing;
13393
13394     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13395     PL_hv_fetch_ent_mh  = NULL;
13396     PL_modcount         = proto_perl->Imodcount;
13397     PL_lastgotoprobe    = NULL;
13398     PL_dumpindent       = proto_perl->Idumpindent;
13399
13400     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13401     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13402     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13403     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13404     PL_efloatbuf        = NULL;         /* reinits on demand */
13405     PL_efloatsize       = 0;                    /* reinits on demand */
13406
13407     /* regex stuff */
13408
13409     PL_screamfirst      = NULL;
13410     PL_screamnext       = NULL;
13411     PL_maxscream        = -1;                   /* reinits on demand */
13412     PL_lastscream       = NULL;
13413
13414
13415     PL_regdummy         = proto_perl->Iregdummy;
13416     PL_colorset         = 0;            /* reinits PL_colors[] */
13417     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13418
13419
13420
13421     /* Pluggable optimizer */
13422     PL_peepp            = proto_perl->Ipeepp;
13423     PL_rpeepp           = proto_perl->Irpeepp;
13424     /* op_free() hook */
13425     PL_opfreehook       = proto_perl->Iopfreehook;
13426
13427     PL_stashcache       = newHV();
13428
13429     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13430                                             proto_perl->Iwatchaddr);
13431     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13432     if (PL_debug && PL_watchaddr) {
13433         PerlIO_printf(Perl_debug_log,
13434           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13435           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13436           PTR2UV(PL_watchok));
13437     }
13438
13439     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13440     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13441     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13442
13443     /* Call the ->CLONE method, if it exists, for each of the stashes
13444        identified by sv_dup() above.
13445     */
13446     while(av_len(param->stashes) != -1) {
13447         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13448         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13449         if (cloner && GvCV(cloner)) {
13450             dSP;
13451             ENTER;
13452             SAVETMPS;
13453             PUSHMARK(SP);
13454             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13455             PUTBACK;
13456             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13457             FREETMPS;
13458             LEAVE;
13459         }
13460     }
13461
13462     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13463         ptr_table_free(PL_ptr_table);
13464         PL_ptr_table = NULL;
13465     }
13466
13467     if (!(flags & CLONEf_COPY_STACKS)) {
13468         unreferenced_to_tmp_stack(param->unreferenced);
13469     }
13470
13471     SvREFCNT_dec(param->stashes);
13472
13473     /* orphaned? eg threads->new inside BEGIN or use */
13474     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13475         SvREFCNT_inc_simple_void(PL_compcv);
13476         SAVEFREESV(PL_compcv);
13477     }
13478
13479     return my_perl;
13480 }
13481
13482 static void
13483 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13484 {
13485     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13486     
13487     if (AvFILLp(unreferenced) > -1) {
13488         SV **svp = AvARRAY(unreferenced);
13489         SV **const last = svp + AvFILLp(unreferenced);
13490         SSize_t count = 0;
13491
13492         do {
13493             if (SvREFCNT(*svp) == 1)
13494                 ++count;
13495         } while (++svp <= last);
13496
13497         EXTEND_MORTAL(count);
13498         svp = AvARRAY(unreferenced);
13499
13500         do {
13501             if (SvREFCNT(*svp) == 1) {
13502                 /* Our reference is the only one to this SV. This means that
13503                    in this thread, the scalar effectively has a 0 reference.
13504                    That doesn't work (cleanup never happens), so donate our
13505                    reference to it onto the save stack. */
13506                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13507             } else {
13508                 /* As an optimisation, because we are already walking the
13509                    entire array, instead of above doing either
13510                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13511                    release our reference to the scalar, so that at the end of
13512                    the array owns zero references to the scalars it happens to
13513                    point to. We are effectively converting the array from
13514                    AvREAL() on to AvREAL() off. This saves the av_clear()
13515                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13516                    walking the array a second time.  */
13517                 SvREFCNT_dec(*svp);
13518             }
13519
13520         } while (++svp <= last);
13521         AvREAL_off(unreferenced);
13522     }
13523     SvREFCNT_dec(unreferenced);
13524 }
13525
13526 void
13527 Perl_clone_params_del(CLONE_PARAMS *param)
13528 {
13529     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13530        happy: */
13531     PerlInterpreter *const to = param->new_perl;
13532     dTHXa(to);
13533     PerlInterpreter *const was = PERL_GET_THX;
13534
13535     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13536
13537     if (was != to) {
13538         PERL_SET_THX(to);
13539     }
13540
13541     SvREFCNT_dec(param->stashes);
13542     if (param->unreferenced)
13543         unreferenced_to_tmp_stack(param->unreferenced);
13544
13545     Safefree(param);
13546
13547     if (was != to) {
13548         PERL_SET_THX(was);
13549     }
13550 }
13551
13552 CLONE_PARAMS *
13553 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13554 {
13555     dVAR;
13556     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13557        does a dTHX; to get the context from thread local storage.
13558        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13559        a version that passes in my_perl.  */
13560     PerlInterpreter *const was = PERL_GET_THX;
13561     CLONE_PARAMS *param;
13562
13563     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13564
13565     if (was != to) {
13566         PERL_SET_THX(to);
13567     }
13568
13569     /* Given that we've set the context, we can do this unshared.  */
13570     Newx(param, 1, CLONE_PARAMS);
13571
13572     param->flags = 0;
13573     param->proto_perl = from;
13574     param->new_perl = to;
13575     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13576     AvREAL_off(param->stashes);
13577     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13578
13579     if (was != to) {
13580         PERL_SET_THX(was);
13581     }
13582     return param;
13583 }
13584
13585 #endif /* USE_ITHREADS */
13586
13587 /*
13588 =head1 Unicode Support
13589
13590 =for apidoc sv_recode_to_utf8
13591
13592 The encoding is assumed to be an Encode object, on entry the PV
13593 of the sv is assumed to be octets in that encoding, and the sv
13594 will be converted into Unicode (and UTF-8).
13595
13596 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13597 is not a reference, nothing is done to the sv.  If the encoding is not
13598 an C<Encode::XS> Encoding object, bad things will happen.
13599 (See F<lib/encoding.pm> and L<Encode>).
13600
13601 The PV of the sv is returned.
13602
13603 =cut */
13604
13605 char *
13606 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13607 {
13608     dVAR;
13609
13610     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13611
13612     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13613         SV *uni;
13614         STRLEN len;
13615         const char *s;
13616         dSP;
13617         ENTER;
13618         SAVETMPS;
13619         save_re_context();
13620         PUSHMARK(sp);
13621         EXTEND(SP, 3);
13622         XPUSHs(encoding);
13623         XPUSHs(sv);
13624 /*
13625   NI-S 2002/07/09
13626   Passing sv_yes is wrong - it needs to be or'ed set of constants
13627   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13628   remove converted chars from source.
13629
13630   Both will default the value - let them.
13631
13632         XPUSHs(&PL_sv_yes);
13633 */
13634         PUTBACK;
13635         call_method("decode", G_SCALAR);
13636         SPAGAIN;
13637         uni = POPs;
13638         PUTBACK;
13639         s = SvPV_const(uni, len);
13640         if (s != SvPVX_const(sv)) {
13641             SvGROW(sv, len + 1);
13642             Move(s, SvPVX(sv), len + 1, char);
13643             SvCUR_set(sv, len);
13644         }
13645         FREETMPS;
13646         LEAVE;
13647         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13648             /* clear pos and any utf8 cache */
13649             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13650             if (mg)
13651                 mg->mg_len = -1;
13652             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13653                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13654         }
13655         SvUTF8_on(sv);
13656         return SvPVX(sv);
13657     }
13658     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13659 }
13660
13661 /*
13662 =for apidoc sv_cat_decode
13663
13664 The encoding is assumed to be an Encode object, the PV of the ssv is
13665 assumed to be octets in that encoding and decoding the input starts
13666 from the position which (PV + *offset) pointed to.  The dsv will be
13667 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13668 when the string tstr appears in decoding output or the input ends on
13669 the PV of the ssv. The value which the offset points will be modified
13670 to the last input position on the ssv.
13671
13672 Returns TRUE if the terminator was found, else returns FALSE.
13673
13674 =cut */
13675
13676 bool
13677 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13678                    SV *ssv, int *offset, char *tstr, int tlen)
13679 {
13680     dVAR;
13681     bool ret = FALSE;
13682
13683     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13684
13685     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13686         SV *offsv;
13687         dSP;
13688         ENTER;
13689         SAVETMPS;
13690         save_re_context();
13691         PUSHMARK(sp);
13692         EXTEND(SP, 6);
13693         XPUSHs(encoding);
13694         XPUSHs(dsv);
13695         XPUSHs(ssv);
13696         offsv = newSViv(*offset);
13697         mXPUSHs(offsv);
13698         mXPUSHp(tstr, tlen);
13699         PUTBACK;
13700         call_method("cat_decode", G_SCALAR);
13701         SPAGAIN;
13702         ret = SvTRUE(TOPs);
13703         *offset = SvIV(offsv);
13704         PUTBACK;
13705         FREETMPS;
13706         LEAVE;
13707     }
13708     else
13709         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13710     return ret;
13711
13712 }
13713
13714 /* ---------------------------------------------------------------------
13715  *
13716  * support functions for report_uninit()
13717  */
13718
13719 /* the maxiumum size of array or hash where we will scan looking
13720  * for the undefined element that triggered the warning */
13721
13722 #define FUV_MAX_SEARCH_SIZE 1000
13723
13724 /* Look for an entry in the hash whose value has the same SV as val;
13725  * If so, return a mortal copy of the key. */
13726
13727 STATIC SV*
13728 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13729 {
13730     dVAR;
13731     register HE **array;
13732     I32 i;
13733
13734     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13735
13736     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13737                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13738         return NULL;
13739
13740     array = HvARRAY(hv);
13741
13742     for (i=HvMAX(hv); i>0; i--) {
13743         register HE *entry;
13744         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13745             if (HeVAL(entry) != val)
13746                 continue;
13747             if (    HeVAL(entry) == &PL_sv_undef ||
13748                     HeVAL(entry) == &PL_sv_placeholder)
13749                 continue;
13750             if (!HeKEY(entry))
13751                 return NULL;
13752             if (HeKLEN(entry) == HEf_SVKEY)
13753                 return sv_mortalcopy(HeKEY_sv(entry));
13754             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13755         }
13756     }
13757     return NULL;
13758 }
13759
13760 /* Look for an entry in the array whose value has the same SV as val;
13761  * If so, return the index, otherwise return -1. */
13762
13763 STATIC I32
13764 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13765 {
13766     dVAR;
13767
13768     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13769
13770     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13771                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13772         return -1;
13773
13774     if (val != &PL_sv_undef) {
13775         SV ** const svp = AvARRAY(av);
13776         I32 i;
13777
13778         for (i=AvFILLp(av); i>=0; i--)
13779             if (svp[i] == val)
13780                 return i;
13781     }
13782     return -1;
13783 }
13784
13785 /* S_varname(): return the name of a variable, optionally with a subscript.
13786  * If gv is non-zero, use the name of that global, along with gvtype (one
13787  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13788  * targ.  Depending on the value of the subscript_type flag, return:
13789  */
13790
13791 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13792 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13793 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13794 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13795
13796 STATIC SV*
13797 S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13798         const SV *const keyname, I32 aindex, int subscript_type)
13799 {
13800
13801     SV * const name = sv_newmortal();
13802     if (gv) {
13803         char buffer[2];
13804         buffer[0] = gvtype;
13805         buffer[1] = 0;
13806
13807         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13808
13809         gv_fullname4(name, gv, buffer, 0);
13810
13811         if ((unsigned int)SvPVX(name)[1] <= 26) {
13812             buffer[0] = '^';
13813             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13814
13815             /* Swap the 1 unprintable control character for the 2 byte pretty
13816                version - ie substr($name, 1, 1) = $buffer; */
13817             sv_insert(name, 1, 1, buffer, 2);
13818         }
13819     }
13820     else {
13821         CV * const cv = find_runcv(NULL);
13822         SV *sv;
13823         AV *av;
13824
13825         if (!cv || !CvPADLIST(cv))
13826             return NULL;
13827         av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
13828         sv = *av_fetch(av, targ, FALSE);
13829         sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
13830     }
13831
13832     if (subscript_type == FUV_SUBSCRIPT_HASH) {
13833         SV * const sv = newSV(0);
13834         *SvPVX(name) = '$';
13835         Perl_sv_catpvf(aTHX_ name, "{%s}",
13836             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13837         SvREFCNT_dec(sv);
13838     }
13839     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13840         *SvPVX(name) = '$';
13841         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13842     }
13843     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13844         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13845         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
13846     }
13847
13848     return name;
13849 }
13850
13851
13852 /*
13853 =for apidoc find_uninit_var
13854
13855 Find the name of the undefined variable (if any) that caused the operator o
13856 to issue a "Use of uninitialized value" warning.
13857 If match is true, only return a name if it's value matches uninit_sv.
13858 So roughly speaking, if a unary operator (such as OP_COS) generates a
13859 warning, then following the direct child of the op may yield an
13860 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
13861 other hand, with OP_ADD there are two branches to follow, so we only print
13862 the variable name if we get an exact match.
13863
13864 The name is returned as a mortal SV.
13865
13866 Assumes that PL_op is the op that originally triggered the error, and that
13867 PL_comppad/PL_curpad points to the currently executing pad.
13868
13869 =cut
13870 */
13871
13872 STATIC SV *
13873 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13874                   bool match)
13875 {
13876     dVAR;
13877     SV *sv;
13878     const GV *gv;
13879     const OP *o, *o2, *kid;
13880
13881     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13882                             uninit_sv == &PL_sv_placeholder)))
13883         return NULL;
13884
13885     switch (obase->op_type) {
13886
13887     case OP_RV2AV:
13888     case OP_RV2HV:
13889     case OP_PADAV:
13890     case OP_PADHV:
13891       {
13892         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13893         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13894         I32 index = 0;
13895         SV *keysv = NULL;
13896         int subscript_type = FUV_SUBSCRIPT_WITHIN;
13897
13898         if (pad) { /* @lex, %lex */
13899             sv = PAD_SVl(obase->op_targ);
13900             gv = NULL;
13901         }
13902         else {
13903             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13904             /* @global, %global */
13905                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13906                 if (!gv)
13907                     break;
13908                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
13909             }
13910             else /* @{expr}, %{expr} */
13911                 return find_uninit_var(cUNOPx(obase)->op_first,
13912                                                     uninit_sv, match);
13913         }
13914
13915         /* attempt to find a match within the aggregate */
13916         if (hash) {
13917             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13918             if (keysv)
13919                 subscript_type = FUV_SUBSCRIPT_HASH;
13920         }
13921         else {
13922             index = find_array_subscript((const AV *)sv, uninit_sv);
13923             if (index >= 0)
13924                 subscript_type = FUV_SUBSCRIPT_ARRAY;
13925         }
13926
13927         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13928             break;
13929
13930         return varname(gv, hash ? '%' : '@', obase->op_targ,
13931                                     keysv, index, subscript_type);
13932       }
13933
13934     case OP_PADSV:
13935         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13936             break;
13937         return varname(NULL, '$', obase->op_targ,
13938                                     NULL, 0, FUV_SUBSCRIPT_NONE);
13939
13940     case OP_GVSV:
13941         gv = cGVOPx_gv(obase);
13942         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
13943             break;
13944         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13945
13946     case OP_AELEMFAST:
13947         if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
13948             if (match) {
13949                 SV **svp;
13950                 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
13951                 if (!av || SvRMAGICAL(av))
13952                     break;
13953                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13954                 if (!svp || *svp != uninit_sv)
13955                     break;
13956             }
13957             return varname(NULL, '$', obase->op_targ,
13958                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13959         }
13960         else {
13961             gv = cGVOPx_gv(obase);
13962             if (!gv)
13963                 break;
13964             if (match) {
13965                 SV **svp;
13966                 AV *const av = GvAV(gv);
13967                 if (!av || SvRMAGICAL(av))
13968                     break;
13969                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13970                 if (!svp || *svp != uninit_sv)
13971                     break;
13972             }
13973             return varname(gv, '$', 0,
13974                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13975         }
13976         break;
13977
13978     case OP_EXISTS:
13979         o = cUNOPx(obase)->op_first;
13980         if (!o || o->op_type != OP_NULL ||
13981                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
13982             break;
13983         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
13984
13985     case OP_AELEM:
13986     case OP_HELEM:
13987         if (PL_op == obase)
13988             /* $a[uninit_expr] or $h{uninit_expr} */
13989             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
13990
13991         gv = NULL;
13992         o = cBINOPx(obase)->op_first;
13993         kid = cBINOPx(obase)->op_last;
13994
13995         /* get the av or hv, and optionally the gv */
13996         sv = NULL;
13997         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
13998             sv = PAD_SV(o->op_targ);
13999         }
14000         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14001                 && cUNOPo->op_first->op_type == OP_GV)
14002         {
14003             gv = cGVOPx_gv(cUNOPo->op_first);
14004             if (!gv)
14005                 break;
14006             sv = o->op_type
14007                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14008         }
14009         if (!sv)
14010             break;
14011
14012         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14013             /* index is constant */
14014             if (match) {
14015                 if (SvMAGICAL(sv))
14016                     break;
14017                 if (obase->op_type == OP_HELEM) {
14018                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), cSVOPx_sv(kid), 0, 0);
14019                     if (!he || HeVAL(he) != uninit_sv)
14020                         break;
14021                 }
14022                 else {
14023                     SV * const * const svp = av_fetch(MUTABLE_AV(sv), SvIV(cSVOPx_sv(kid)), FALSE);
14024                     if (!svp || *svp != uninit_sv)
14025                         break;
14026                 }
14027             }
14028             if (obase->op_type == OP_HELEM)
14029                 return varname(gv, '%', o->op_targ,
14030                             cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
14031             else
14032                 return varname(gv, '@', o->op_targ, NULL,
14033                             SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
14034         }
14035         else  {
14036             /* index is an expression;
14037              * attempt to find a match within the aggregate */
14038             if (obase->op_type == OP_HELEM) {
14039                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14040                 if (keysv)
14041                     return varname(gv, '%', o->op_targ,
14042                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14043             }
14044             else {
14045                 const I32 index
14046                     = find_array_subscript((const AV *)sv, uninit_sv);
14047                 if (index >= 0)
14048                     return varname(gv, '@', o->op_targ,
14049                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14050             }
14051             if (match)
14052                 break;
14053             return varname(gv,
14054                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14055                 ? '@' : '%',
14056                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14057         }
14058         break;
14059
14060     case OP_AASSIGN:
14061         /* only examine RHS */
14062         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14063
14064     case OP_OPEN:
14065         o = cUNOPx(obase)->op_first;
14066         if (o->op_type == OP_PUSHMARK)
14067             o = o->op_sibling;
14068
14069         if (!o->op_sibling) {
14070             /* one-arg version of open is highly magical */
14071
14072             if (o->op_type == OP_GV) { /* open FOO; */
14073                 gv = cGVOPx_gv(o);
14074                 if (match && GvSV(gv) != uninit_sv)
14075                     break;
14076                 return varname(gv, '$', 0,
14077                             NULL, 0, FUV_SUBSCRIPT_NONE);
14078             }
14079             /* other possibilities not handled are:
14080              * open $x; or open my $x;  should return '${*$x}'
14081              * open expr;               should return '$'.expr ideally
14082              */
14083              break;
14084         }
14085         goto do_op;
14086
14087     /* ops where $_ may be an implicit arg */
14088     case OP_TRANS:
14089     case OP_SUBST:
14090     case OP_MATCH:
14091         if ( !(obase->op_flags & OPf_STACKED)) {
14092             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14093                                  ? PAD_SVl(obase->op_targ)
14094                                  : DEFSV))
14095             {
14096                 sv = sv_newmortal();
14097                 sv_setpvs(sv, "$_");
14098                 return sv;
14099             }
14100         }
14101         goto do_op;
14102
14103     case OP_PRTF:
14104     case OP_PRINT:
14105     case OP_SAY:
14106         match = 1; /* print etc can return undef on defined args */
14107         /* skip filehandle as it can't produce 'undef' warning  */
14108         o = cUNOPx(obase)->op_first;
14109         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
14110             o = o->op_sibling->op_sibling;
14111         goto do_op2;
14112
14113
14114     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14115     case OP_RV2SV:
14116     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14117
14118         /* the following ops are capable of returning PL_sv_undef even for
14119          * defined arg(s) */
14120
14121     case OP_BACKTICK:
14122     case OP_PIPE_OP:
14123     case OP_FILENO:
14124     case OP_BINMODE:
14125     case OP_TIED:
14126     case OP_GETC:
14127     case OP_SYSREAD:
14128     case OP_SEND:
14129     case OP_IOCTL:
14130     case OP_SOCKET:
14131     case OP_SOCKPAIR:
14132     case OP_BIND:
14133     case OP_CONNECT:
14134     case OP_LISTEN:
14135     case OP_ACCEPT:
14136     case OP_SHUTDOWN:
14137     case OP_SSOCKOPT:
14138     case OP_GETPEERNAME:
14139     case OP_FTRREAD:
14140     case OP_FTRWRITE:
14141     case OP_FTREXEC:
14142     case OP_FTROWNED:
14143     case OP_FTEREAD:
14144     case OP_FTEWRITE:
14145     case OP_FTEEXEC:
14146     case OP_FTEOWNED:
14147     case OP_FTIS:
14148     case OP_FTZERO:
14149     case OP_FTSIZE:
14150     case OP_FTFILE:
14151     case OP_FTDIR:
14152     case OP_FTLINK:
14153     case OP_FTPIPE:
14154     case OP_FTSOCK:
14155     case OP_FTBLK:
14156     case OP_FTCHR:
14157     case OP_FTTTY:
14158     case OP_FTSUID:
14159     case OP_FTSGID:
14160     case OP_FTSVTX:
14161     case OP_FTTEXT:
14162     case OP_FTBINARY:
14163     case OP_FTMTIME:
14164     case OP_FTATIME:
14165     case OP_FTCTIME:
14166     case OP_READLINK:
14167     case OP_OPEN_DIR:
14168     case OP_READDIR:
14169     case OP_TELLDIR:
14170     case OP_SEEKDIR:
14171     case OP_REWINDDIR:
14172     case OP_CLOSEDIR:
14173     case OP_GMTIME:
14174     case OP_ALARM:
14175     case OP_SEMGET:
14176     case OP_GETLOGIN:
14177     case OP_UNDEF:
14178     case OP_SUBSTR:
14179     case OP_AEACH:
14180     case OP_EACH:
14181     case OP_SORT:
14182     case OP_CALLER:
14183     case OP_DOFILE:
14184     case OP_PROTOTYPE:
14185     case OP_NCMP:
14186     case OP_SMARTMATCH:
14187     case OP_UNPACK:
14188     case OP_SYSOPEN:
14189     case OP_SYSSEEK:
14190         match = 1;
14191         goto do_op;
14192
14193     case OP_ENTERSUB:
14194     case OP_GOTO:
14195         /* XXX tmp hack: these two may call an XS sub, and currently
14196           XS subs don't have a SUB entry on the context stack, so CV and
14197           pad determination goes wrong, and BAD things happen. So, just
14198           don't try to determine the value under those circumstances.
14199           Need a better fix at dome point. DAPM 11/2007 */
14200         break;
14201
14202     case OP_FLIP:
14203     case OP_FLOP:
14204     {
14205         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14206         if (gv && GvSV(gv) == uninit_sv)
14207             return newSVpvs_flags("$.", SVs_TEMP);
14208         goto do_op;
14209     }
14210
14211     case OP_POS:
14212         /* def-ness of rval pos() is independent of the def-ness of its arg */
14213         if ( !(obase->op_flags & OPf_MOD))
14214             break;
14215
14216     case OP_SCHOMP:
14217     case OP_CHOMP:
14218         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14219             return newSVpvs_flags("${$/}", SVs_TEMP);
14220         /*FALLTHROUGH*/
14221
14222     default:
14223     do_op:
14224         if (!(obase->op_flags & OPf_KIDS))
14225             break;
14226         o = cUNOPx(obase)->op_first;
14227         
14228     do_op2:
14229         if (!o)
14230             break;
14231
14232         /* if all except one arg are constant, or have no side-effects,
14233          * or are optimized away, then it's unambiguous */
14234         o2 = NULL;
14235         for (kid=o; kid; kid = kid->op_sibling) {
14236             if (kid) {
14237                 const OPCODE type = kid->op_type;
14238                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14239                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14240                   || (type == OP_PUSHMARK)
14241                   || (
14242                       /* @$a and %$a, but not @a or %a */
14243                         (type == OP_RV2AV || type == OP_RV2HV)
14244                      && cUNOPx(kid)->op_first
14245                      && cUNOPx(kid)->op_first->op_type != OP_GV
14246                      )
14247                 )
14248                 continue;
14249             }
14250             if (o2) { /* more than one found */
14251                 o2 = NULL;
14252                 break;
14253             }
14254             o2 = kid;
14255         }
14256         if (o2)
14257             return find_uninit_var(o2, uninit_sv, match);
14258
14259         /* scan all args */
14260         while (o) {
14261             sv = find_uninit_var(o, uninit_sv, 1);
14262             if (sv)
14263                 return sv;
14264             o = o->op_sibling;
14265         }
14266         break;
14267     }
14268     return NULL;
14269 }
14270
14271
14272 /*
14273 =for apidoc report_uninit
14274
14275 Print appropriate "Use of uninitialized variable" warning
14276
14277 =cut
14278 */
14279
14280 void
14281 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14282 {
14283     dVAR;
14284     if (PL_op) {
14285         SV* varname = NULL;
14286         if (uninit_sv) {
14287             varname = find_uninit_var(PL_op, uninit_sv,0);
14288             if (varname)
14289                 sv_insert(varname, 0, 0, " ", 1);
14290         }
14291         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14292                 varname ? SvPV_nolen_const(varname) : "",
14293                 " in ", OP_DESC(PL_op));
14294     }
14295     else
14296         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14297                     "", "", "");
14298 }
14299
14300 /*
14301  * Local variables:
14302  * c-indentation-style: bsd
14303  * c-basic-offset: 4
14304  * indent-tabs-mode: t
14305  * End:
14306  *
14307  * ex: set ts=8 sts=4 sw=4 noet:
14308  */