This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Correct perldiag entry for sv_replace panic
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34
35 #ifndef HAS_C99
36 # if __STDC_VERSION__ >= 199901L && !defined(VMS)
37 #  define HAS_C99 1
38 # endif
39 #endif
40 #if HAS_C99
41 # include <stdint.h>
42 #endif
43
44 #define FCALL *f
45
46 #ifdef __Lynx__
47 /* Missing proto on LynxOS */
48   char *gconvert(double, int, int,  char *);
49 #endif
50
51 #ifdef PERL_UTF8_CACHE_ASSERT
52 /* if adding more checks watch out for the following tests:
53  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54  *   lib/utf8.t lib/Unicode/Collate/t/index.t
55  * --jhi
56  */
57 #   define ASSERT_UTF8_CACHE(cache) \
58     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59                               assert((cache)[2] <= (cache)[3]); \
60                               assert((cache)[3] <= (cache)[1]);} \
61                               } STMT_END
62 #else
63 #   define ASSERT_UTF8_CACHE(cache) NOOP
64 #endif
65
66 #ifdef PERL_OLD_COPY_ON_WRITE
67 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
68 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
69 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
70    on-write.  */
71 #endif
72
73 /* ============================================================================
74
75 =head1 Allocation and deallocation of SVs.
76
77 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
78 sv, av, hv...) contains type and reference count information, and for
79 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
80 contains fields specific to each type.  Some types store all they need
81 in the head, so don't have a body.
82
83 In all but the most memory-paranoid configurations (ex: PURIFY), heads
84 and bodies are allocated out of arenas, which by default are
85 approximately 4K chunks of memory parcelled up into N heads or bodies.
86 Sv-bodies are allocated by their sv-type, guaranteeing size
87 consistency needed to allocate safely from arrays.
88
89 For SV-heads, the first slot in each arena is reserved, and holds a
90 link to the next arena, some flags, and a note of the number of slots.
91 Snaked through each arena chain is a linked list of free items; when
92 this becomes empty, an extra arena is allocated and divided up into N
93 items which are threaded into the free list.
94
95 SV-bodies are similar, but they use arena-sets by default, which
96 separate the link and info from the arena itself, and reclaim the 1st
97 slot in the arena.  SV-bodies are further described later.
98
99 The following global variables are associated with arenas:
100
101     PL_sv_arenaroot     pointer to list of SV arenas
102     PL_sv_root          pointer to list of free SV structures
103
104     PL_body_arenas      head of linked-list of body arenas
105     PL_body_roots[]     array of pointers to list of free bodies of svtype
106                         arrays are indexed by the svtype needed
107
108 A few special SV heads are not allocated from an arena, but are
109 instead directly created in the interpreter structure, eg PL_sv_undef.
110 The size of arenas can be changed from the default by setting
111 PERL_ARENA_SIZE appropriately at compile time.
112
113 The SV arena serves the secondary purpose of allowing still-live SVs
114 to be located and destroyed during final cleanup.
115
116 At the lowest level, the macros new_SV() and del_SV() grab and free
117 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
118 to return the SV to the free list with error checking.) new_SV() calls
119 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
120 SVs in the free list have their SvTYPE field set to all ones.
121
122 At the time of very final cleanup, sv_free_arenas() is called from
123 perl_destruct() to physically free all the arenas allocated since the
124 start of the interpreter.
125
126 The function visit() scans the SV arenas list, and calls a specified
127 function for each SV it finds which is still live - ie which has an SvTYPE
128 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
129 following functions (specified as [function that calls visit()] / [function
130 called by visit() for each SV]):
131
132     sv_report_used() / do_report_used()
133                         dump all remaining SVs (debugging aid)
134
135     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
136                       do_clean_named_io_objs()
137                         Attempt to free all objects pointed to by RVs,
138                         and try to do the same for all objects indirectly
139                         referenced by typeglobs too.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
186 #  define DEBUG_SV_SERIAL(sv)                                               \
187     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
188             PTR2UV(sv), (long)(sv)->sv_debug_serial))
189 #else
190 #  define FREE_SV_DEBUG_FILE(sv)
191 #  define DEBUG_SV_SERIAL(sv)   NOOP
192 #endif
193
194 #ifdef PERL_POISON
195 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
196 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
197 /* Whilst I'd love to do this, it seems that things like to check on
198    unreferenced scalars
199 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
200 */
201 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
202                                 PoisonNew(&SvREFCNT(sv), 1, U32)
203 #else
204 #  define SvARENA_CHAIN(sv)     SvANY(sv)
205 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
206 #  define POSION_SV_HEAD(sv)
207 #endif
208
209 /* Mark an SV head as unused, and add to free list.
210  *
211  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
212  * its refcount artificially decremented during global destruction, so
213  * there may be dangling pointers to it. The last thing we want in that
214  * case is for it to be reused. */
215
216 #define plant_SV(p) \
217     STMT_START {                                        \
218         const U32 old_flags = SvFLAGS(p);                       \
219         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
220         DEBUG_SV_SERIAL(p);                             \
221         FREE_SV_DEBUG_FILE(p);                          \
222         POSION_SV_HEAD(p);                              \
223         SvFLAGS(p) = SVTYPEMASK;                        \
224         if (!(old_flags & SVf_BREAK)) {         \
225             SvARENA_CHAIN_SET(p, PL_sv_root);   \
226             PL_sv_root = (p);                           \
227         }                                               \
228         --PL_sv_count;                                  \
229     } STMT_END
230
231 #define uproot_SV(p) \
232     STMT_START {                                        \
233         (p) = PL_sv_root;                               \
234         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
235         ++PL_sv_count;                                  \
236     } STMT_END
237
238
239 /* make some more SVs by adding another arena */
240
241 STATIC SV*
242 S_more_sv(pTHX)
243 {
244     dVAR;
245     SV* sv;
246     char *chunk;                /* must use New here to match call to */
247     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
248     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
249     uproot_SV(sv);
250     return sv;
251 }
252
253 /* new_SV(): return a new, empty SV head */
254
255 #ifdef DEBUG_LEAKING_SCALARS
256 /* provide a real function for a debugger to play with */
257 STATIC SV*
258 S_new_SV(pTHX_ const char *file, int line, const char *func)
259 {
260     SV* sv;
261
262     if (PL_sv_root)
263         uproot_SV(sv);
264     else
265         sv = S_more_sv(aTHX);
266     SvANY(sv) = 0;
267     SvREFCNT(sv) = 1;
268     SvFLAGS(sv) = 0;
269     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
270     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
271                 ? PL_parser->copline
272                 :  PL_curcop
273                     ? CopLINE(PL_curcop)
274                     : 0
275             );
276     sv->sv_debug_inpad = 0;
277     sv->sv_debug_parent = NULL;
278     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
279
280     sv->sv_debug_serial = PL_sv_serial++;
281
282     MEM_LOG_NEW_SV(sv, file, line, func);
283     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
284             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
285
286     return sv;
287 }
288 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
289
290 #else
291 #  define new_SV(p) \
292     STMT_START {                                        \
293         if (PL_sv_root)                                 \
294             uproot_SV(p);                               \
295         else                                            \
296             (p) = S_more_sv(aTHX);                      \
297         SvANY(p) = 0;                                   \
298         SvREFCNT(p) = 1;                                \
299         SvFLAGS(p) = 0;                                 \
300         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
301     } STMT_END
302 #endif
303
304
305 /* del_SV(): return an empty SV head to the free list */
306
307 #ifdef DEBUGGING
308
309 #define del_SV(p) \
310     STMT_START {                                        \
311         if (DEBUG_D_TEST)                               \
312             del_sv(p);                                  \
313         else                                            \
314             plant_SV(p);                                \
315     } STMT_END
316
317 STATIC void
318 S_del_sv(pTHX_ SV *p)
319 {
320     dVAR;
321
322     PERL_ARGS_ASSERT_DEL_SV;
323
324     if (DEBUG_D_TEST) {
325         SV* sva;
326         bool ok = 0;
327         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
328             const SV * const sv = sva + 1;
329             const SV * const svend = &sva[SvREFCNT(sva)];
330             if (p >= sv && p < svend) {
331                 ok = 1;
332                 break;
333             }
334         }
335         if (!ok) {
336             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
337                              "Attempt to free non-arena SV: 0x%"UVxf
338                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
339             return;
340         }
341     }
342     plant_SV(p);
343 }
344
345 #else /* ! DEBUGGING */
346
347 #define del_SV(p)   plant_SV(p)
348
349 #endif /* DEBUGGING */
350
351
352 /*
353 =head1 SV Manipulation Functions
354
355 =for apidoc sv_add_arena
356
357 Given a chunk of memory, link it to the head of the list of arenas,
358 and split it into a list of free SVs.
359
360 =cut
361 */
362
363 static void
364 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
365 {
366     dVAR;
367     SV *const sva = MUTABLE_SV(ptr);
368     register SV* sv;
369     register SV* svend;
370
371     PERL_ARGS_ASSERT_SV_ADD_ARENA;
372
373     /* The first SV in an arena isn't an SV. */
374     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
375     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
376     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
377
378     PL_sv_arenaroot = sva;
379     PL_sv_root = sva + 1;
380
381     svend = &sva[SvREFCNT(sva) - 1];
382     sv = sva + 1;
383     while (sv < svend) {
384         SvARENA_CHAIN_SET(sv, (sv + 1));
385 #ifdef DEBUGGING
386         SvREFCNT(sv) = 0;
387 #endif
388         /* Must always set typemask because it's always checked in on cleanup
389            when the arenas are walked looking for objects.  */
390         SvFLAGS(sv) = SVTYPEMASK;
391         sv++;
392     }
393     SvARENA_CHAIN_SET(sv, 0);
394 #ifdef DEBUGGING
395     SvREFCNT(sv) = 0;
396 #endif
397     SvFLAGS(sv) = SVTYPEMASK;
398 }
399
400 /* visit(): call the named function for each non-free SV in the arenas
401  * whose flags field matches the flags/mask args. */
402
403 STATIC I32
404 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
405 {
406     dVAR;
407     SV* sva;
408     I32 visited = 0;
409
410     PERL_ARGS_ASSERT_VISIT;
411
412     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
413         register const SV * const svend = &sva[SvREFCNT(sva)];
414         register SV* sv;
415         for (sv = sva + 1; sv < svend; ++sv) {
416             if (SvTYPE(sv) != (svtype)SVTYPEMASK
417                     && (sv->sv_flags & mask) == flags
418                     && SvREFCNT(sv))
419             {
420                 (FCALL)(aTHX_ sv);
421                 ++visited;
422             }
423         }
424     }
425     return visited;
426 }
427
428 #ifdef DEBUGGING
429
430 /* called by sv_report_used() for each live SV */
431
432 static void
433 do_report_used(pTHX_ SV *const sv)
434 {
435     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
436         PerlIO_printf(Perl_debug_log, "****\n");
437         sv_dump(sv);
438     }
439 }
440 #endif
441
442 /*
443 =for apidoc sv_report_used
444
445 Dump the contents of all SVs not yet freed (debugging aid).
446
447 =cut
448 */
449
450 void
451 Perl_sv_report_used(pTHX)
452 {
453 #ifdef DEBUGGING
454     visit(do_report_used, 0, 0);
455 #else
456     PERL_UNUSED_CONTEXT;
457 #endif
458 }
459
460 /* called by sv_clean_objs() for each live SV */
461
462 static void
463 do_clean_objs(pTHX_ SV *const ref)
464 {
465     dVAR;
466     assert (SvROK(ref));
467     {
468         SV * const target = SvRV(ref);
469         if (SvOBJECT(target)) {
470             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
471             if (SvWEAKREF(ref)) {
472                 sv_del_backref(target, ref);
473                 SvWEAKREF_off(ref);
474                 SvRV_set(ref, NULL);
475             } else {
476                 SvROK_off(ref);
477                 SvRV_set(ref, NULL);
478                 SvREFCNT_dec(target);
479             }
480         }
481     }
482
483     /* XXX Might want to check arrays, etc. */
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV_set(sv, NULL);
526         SvREFCNT_dec(obj);
527     }
528     SvREFCNT_dec(sv); /* undo the inc above */
529 }
530
531 /* clear any IO slots in a GV which hold objects (except stderr, defout);
532  * called by sv_clean_objs() for each live GV */
533
534 static void
535 do_clean_named_io_objs(pTHX_ SV *const sv)
536 {
537     dVAR;
538     SV *obj;
539     assert(SvTYPE(sv) == SVt_PVGV);
540     assert(isGV_with_GP(sv));
541     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
542         return;
543
544     SvREFCNT_inc(sv);
545     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546         DEBUG_D((PerlIO_printf(Perl_debug_log,
547                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548         GvIOp(sv) = NULL;
549         SvREFCNT_dec(obj);
550     }
551     SvREFCNT_dec(sv); /* undo the inc above */
552 }
553
554 /* Void wrapper to pass to visit() */
555 static void
556 do_curse(pTHX_ SV * const sv) {
557     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
559         return;
560     (void)curse(sv, 0);
561 }
562
563 /*
564 =for apidoc sv_clean_objs
565
566 Attempt to destroy all objects not yet freed.
567
568 =cut
569 */
570
571 void
572 Perl_sv_clean_objs(pTHX)
573 {
574     dVAR;
575     GV *olddef, *olderr;
576     PL_in_clean_objs = TRUE;
577     visit(do_clean_objs, SVf_ROK, SVf_ROK);
578     /* Some barnacles may yet remain, clinging to typeglobs.
579      * Run the non-IO destructors first: they may want to output
580      * error messages, close files etc */
581     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
582     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
583     /* And if there are some very tenacious barnacles clinging to arrays,
584        closures, or what have you.... */
585     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
586     olddef = PL_defoutgv;
587     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588     if (olddef && isGV_with_GP(olddef))
589         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590     olderr = PL_stderrgv;
591     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592     if (olderr && isGV_with_GP(olderr))
593         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594     SvREFCNT_dec(olddef);
595     PL_in_clean_objs = FALSE;
596 }
597
598 /* called by sv_clean_all() for each live SV */
599
600 static void
601 do_clean_all(pTHX_ SV *const sv)
602 {
603     dVAR;
604     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
605         /* don't clean pid table and strtab */
606         return;
607     }
608     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609     SvFLAGS(sv) |= SVf_BREAK;
610     SvREFCNT_dec(sv);
611 }
612
613 /*
614 =for apidoc sv_clean_all
615
616 Decrement the refcnt of each remaining SV, possibly triggering a
617 cleanup.  This function may have to be called multiple times to free
618 SVs which are in complex self-referential hierarchies.
619
620 =cut
621 */
622
623 I32
624 Perl_sv_clean_all(pTHX)
625 {
626     dVAR;
627     I32 cleaned;
628     PL_in_clean_all = TRUE;
629     cleaned = visit(do_clean_all, 0,0);
630     return cleaned;
631 }
632
633 /*
634   ARENASETS: a meta-arena implementation which separates arena-info
635   into struct arena_set, which contains an array of struct
636   arena_descs, each holding info for a single arena.  By separating
637   the meta-info from the arena, we recover the 1st slot, formerly
638   borrowed for list management.  The arena_set is about the size of an
639   arena, avoiding the needless malloc overhead of a naive linked-list.
640
641   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642   memory in the last arena-set (1/2 on average).  In trade, we get
643   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
644   smaller types).  The recovery of the wasted space allows use of
645   small arenas for large, rare body types, by changing array* fields
646   in body_details_by_type[] below.
647 */
648 struct arena_desc {
649     char       *arena;          /* the raw storage, allocated aligned */
650     size_t      size;           /* its size ~4k typ */
651     svtype      utype;          /* bodytype stored in arena */
652 };
653
654 struct arena_set;
655
656 /* Get the maximum number of elements in set[] such that struct arena_set
657    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
658    therefore likely to be 1 aligned memory page.  */
659
660 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
662
663 struct arena_set {
664     struct arena_set* next;
665     unsigned int   set_size;    /* ie ARENAS_PER_SET */
666     unsigned int   curr;        /* index of next available arena-desc */
667     struct arena_desc set[ARENAS_PER_SET];
668 };
669
670 /*
671 =for apidoc sv_free_arenas
672
673 Deallocate the memory used by all arenas.  Note that all the individual SV
674 heads and bodies within the arenas must already have been freed.
675
676 =cut
677 */
678 void
679 Perl_sv_free_arenas(pTHX)
680 {
681     dVAR;
682     SV* sva;
683     SV* svanext;
684     unsigned int i;
685
686     /* Free arenas here, but be careful about fake ones.  (We assume
687        contiguity of the fake ones with the corresponding real ones.) */
688
689     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
690         svanext = MUTABLE_SV(SvANY(sva));
691         while (svanext && SvFAKE(svanext))
692             svanext = MUTABLE_SV(SvANY(svanext));
693
694         if (!SvFAKE(sva))
695             Safefree(sva);
696     }
697
698     {
699         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701         while (aroot) {
702             struct arena_set *current = aroot;
703             i = aroot->curr;
704             while (i--) {
705                 assert(aroot->set[i].arena);
706                 Safefree(aroot->set[i].arena);
707             }
708             aroot = aroot->next;
709             Safefree(current);
710         }
711     }
712     PL_body_arenas = 0;
713
714     i = PERL_ARENA_ROOTS_SIZE;
715     while (i--)
716         PL_body_roots[i] = 0;
717
718     PL_sv_arenaroot = 0;
719     PL_sv_root = 0;
720 }
721
722 /*
723   Here are mid-level routines that manage the allocation of bodies out
724   of the various arenas.  There are 5 kinds of arenas:
725
726   1. SV-head arenas, which are discussed and handled above
727   2. regular body arenas
728   3. arenas for reduced-size bodies
729   4. Hash-Entry arenas
730
731   Arena types 2 & 3 are chained by body-type off an array of
732   arena-root pointers, which is indexed by svtype.  Some of the
733   larger/less used body types are malloced singly, since a large
734   unused block of them is wasteful.  Also, several svtypes dont have
735   bodies; the data fits into the sv-head itself.  The arena-root
736   pointer thus has a few unused root-pointers (which may be hijacked
737   later for arena types 4,5)
738
739   3 differs from 2 as an optimization; some body types have several
740   unused fields in the front of the structure (which are kept in-place
741   for consistency).  These bodies can be allocated in smaller chunks,
742   because the leading fields arent accessed.  Pointers to such bodies
743   are decremented to point at the unused 'ghost' memory, knowing that
744   the pointers are used with offsets to the real memory.
745
746
747 =head1 SV-Body Allocation
748
749 Allocation of SV-bodies is similar to SV-heads, differing as follows;
750 the allocation mechanism is used for many body types, so is somewhat
751 more complicated, it uses arena-sets, and has no need for still-live
752 SV detection.
753
754 At the outermost level, (new|del)_X*V macros return bodies of the
755 appropriate type.  These macros call either (new|del)_body_type or
756 (new|del)_body_allocated macro pairs, depending on specifics of the
757 type.  Most body types use the former pair, the latter pair is used to
758 allocate body types with "ghost fields".
759
760 "ghost fields" are fields that are unused in certain types, and
761 consequently don't need to actually exist.  They are declared because
762 they're part of a "base type", which allows use of functions as
763 methods.  The simplest examples are AVs and HVs, 2 aggregate types
764 which don't use the fields which support SCALAR semantics.
765
766 For these types, the arenas are carved up into appropriately sized
767 chunks, we thus avoid wasted memory for those unaccessed members.
768 When bodies are allocated, we adjust the pointer back in memory by the
769 size of the part not allocated, so it's as if we allocated the full
770 structure.  (But things will all go boom if you write to the part that
771 is "not there", because you'll be overwriting the last members of the
772 preceding structure in memory.)
773
774 We calculate the correction using the STRUCT_OFFSET macro on the first
775 member present. If the allocated structure is smaller (no initial NV
776 actually allocated) then the net effect is to subtract the size of the NV
777 from the pointer, to return a new pointer as if an initial NV were actually
778 allocated. (We were using structures named *_allocated for this, but
779 this turned out to be a subtle bug, because a structure without an NV
780 could have a lower alignment constraint, but the compiler is allowed to
781 optimised accesses based on the alignment constraint of the actual pointer
782 to the full structure, for example, using a single 64 bit load instruction
783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
784
785 This is the same trick as was used for NV and IV bodies. Ironically it
786 doesn't need to be used for NV bodies any more, because NV is now at
787 the start of the structure. IV bodies don't need it either, because
788 they are no longer allocated.
789
790 In turn, the new_body_* allocators call S_new_body(), which invokes
791 new_body_inline macro, which takes a lock, and takes a body off the
792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
793 necessary to refresh an empty list.  Then the lock is released, and
794 the body is returned.
795
796 Perl_more_bodies allocates a new arena, and carves it up into an array of N
797 bodies, which it strings into a linked list.  It looks up arena-size
798 and body-size from the body_details table described below, thus
799 supporting the multiple body-types.
800
801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802 the (new|del)_X*V macros are mapped directly to malloc/free.
803
804 For each sv-type, struct body_details bodies_by_type[] carries
805 parameters which control these aspects of SV handling:
806
807 Arena_size determines whether arenas are used for this body type, and if
808 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
809 zero, forcing individual mallocs and frees.
810
811 Body_size determines how big a body is, and therefore how many fit into
812 each arena.  Offset carries the body-pointer adjustment needed for
813 "ghost fields", and is used in *_allocated macros.
814
815 But its main purpose is to parameterize info needed in
816 Perl_sv_upgrade().  The info here dramatically simplifies the function
817 vs the implementation in 5.8.8, making it table-driven.  All fields
818 are used for this, except for arena_size.
819
820 For the sv-types that have no bodies, arenas are not used, so those
821 PL_body_roots[sv_type] are unused, and can be overloaded.  In
822 something of a special case, SVt_NULL is borrowed for HE arenas;
823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
824 bodies_by_type[SVt_NULL] slot is not used, as the table is not
825 available in hv.c.
826
827 */
828
829 struct body_details {
830     U8 body_size;       /* Size to allocate  */
831     U8 copy;            /* Size of structure to copy (may be shorter)  */
832     U8 offset;
833     unsigned int type : 4;          /* We have space for a sanity check.  */
834     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
835     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
836     unsigned int arena : 1;         /* Allocated from an arena */
837     size_t arena_size;              /* Size of arena to allocate */
838 };
839
840 #define HADNV FALSE
841 #define NONV TRUE
842
843
844 #ifdef PURIFY
845 /* With -DPURFIY we allocate everything directly, and don't use arenas.
846    This seems a rather elegant way to simplify some of the code below.  */
847 #define HASARENA FALSE
848 #else
849 #define HASARENA TRUE
850 #endif
851 #define NOARENA FALSE
852
853 /* Size the arenas to exactly fit a given number of bodies.  A count
854    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855    simplifying the default.  If count > 0, the arena is sized to fit
856    only that many bodies, allowing arenas to be used for large, rare
857    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
858    limited by PERL_ARENA_SIZE, so we can safely oversize the
859    declarations.
860  */
861 #define FIT_ARENA0(body_size)                           \
862     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863 #define FIT_ARENAn(count,body_size)                     \
864     ( count * body_size <= PERL_ARENA_SIZE)             \
865     ? count * body_size                                 \
866     : FIT_ARENA0 (body_size)
867 #define FIT_ARENA(count,body_size)                      \
868     count                                               \
869     ? FIT_ARENAn (count, body_size)                     \
870     : FIT_ARENA0 (body_size)
871
872 /* Calculate the length to copy. Specifically work out the length less any
873    final padding the compiler needed to add.  See the comment in sv_upgrade
874    for why copying the padding proved to be a bug.  */
875
876 #define copy_length(type, last_member) \
877         STRUCT_OFFSET(type, last_member) \
878         + sizeof (((type*)SvANY((const SV *)0))->last_member)
879
880 static const struct body_details bodies_by_type[] = {
881     /* HEs use this offset for their arena.  */
882     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
883
884     /* The bind placeholder pretends to be an RV for now.
885        Also it's marked as "can't upgrade" to stop anyone using it before it's
886        implemented.  */
887     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
888
889     /* IVs are in the head, so the allocation size is 0.  */
890     { 0,
891       sizeof(IV), /* This is used to copy out the IV body.  */
892       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
893       NOARENA /* IVS don't need an arena  */, 0
894     },
895
896     { sizeof(NV), sizeof(NV),
897       STRUCT_OFFSET(XPVNV, xnv_u),
898       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
899
900     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
901       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
902       + STRUCT_OFFSET(XPV, xpv_cur),
903       SVt_PV, FALSE, NONV, HASARENA,
904       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
905
906     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
907       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
908       + STRUCT_OFFSET(XPV, xpv_cur),
909       SVt_PVIV, FALSE, NONV, HASARENA,
910       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
911
912     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
913       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
914       + STRUCT_OFFSET(XPV, xpv_cur),
915       SVt_PVNV, FALSE, HADNV, HASARENA,
916       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
917
918     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
919       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
920
921     { sizeof(regexp),
922       sizeof(regexp),
923       0,
924       SVt_REGEXP, FALSE, NONV, HASARENA,
925       FIT_ARENA(0, sizeof(regexp))
926     },
927
928     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
929       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
930     
931     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
932       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
933
934     { sizeof(XPVAV),
935       copy_length(XPVAV, xav_alloc),
936       0,
937       SVt_PVAV, TRUE, NONV, HASARENA,
938       FIT_ARENA(0, sizeof(XPVAV)) },
939
940     { sizeof(XPVHV),
941       copy_length(XPVHV, xhv_max),
942       0,
943       SVt_PVHV, TRUE, NONV, HASARENA,
944       FIT_ARENA(0, sizeof(XPVHV)) },
945
946     { sizeof(XPVCV),
947       sizeof(XPVCV),
948       0,
949       SVt_PVCV, TRUE, NONV, HASARENA,
950       FIT_ARENA(0, sizeof(XPVCV)) },
951
952     { sizeof(XPVFM),
953       sizeof(XPVFM),
954       0,
955       SVt_PVFM, TRUE, NONV, NOARENA,
956       FIT_ARENA(20, sizeof(XPVFM)) },
957
958     { sizeof(XPVIO),
959       sizeof(XPVIO),
960       0,
961       SVt_PVIO, TRUE, NONV, HASARENA,
962       FIT_ARENA(24, sizeof(XPVIO)) },
963 };
964
965 #define new_body_allocated(sv_type)             \
966     (void *)((char *)S_new_body(aTHX_ sv_type)  \
967              - bodies_by_type[sv_type].offset)
968
969 /* return a thing to the free list */
970
971 #define del_body(thing, root)                           \
972     STMT_START {                                        \
973         void ** const thing_copy = (void **)thing;      \
974         *thing_copy = *root;                            \
975         *root = (void*)thing_copy;                      \
976     } STMT_END
977
978 #ifdef PURIFY
979
980 #define new_XNV()       safemalloc(sizeof(XPVNV))
981 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
982 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
983
984 #define del_XPVGV(p)    safefree(p)
985
986 #else /* !PURIFY */
987
988 #define new_XNV()       new_body_allocated(SVt_NV)
989 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
990 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
991
992 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
993                                  &PL_body_roots[SVt_PVGV])
994
995 #endif /* PURIFY */
996
997 /* no arena for you! */
998
999 #define new_NOARENA(details) \
1000         safemalloc((details)->body_size + (details)->offset)
1001 #define new_NOARENAZ(details) \
1002         safecalloc((details)->body_size + (details)->offset, 1)
1003
1004 void *
1005 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1006                   const size_t arena_size)
1007 {
1008     dVAR;
1009     void ** const root = &PL_body_roots[sv_type];
1010     struct arena_desc *adesc;
1011     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1012     unsigned int curr;
1013     char *start;
1014     const char *end;
1015     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1016 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1017     static bool done_sanity_check;
1018
1019     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1020      * variables like done_sanity_check. */
1021     if (!done_sanity_check) {
1022         unsigned int i = SVt_LAST;
1023
1024         done_sanity_check = TRUE;
1025
1026         while (i--)
1027             assert (bodies_by_type[i].type == i);
1028     }
1029 #endif
1030
1031     assert(arena_size);
1032
1033     /* may need new arena-set to hold new arena */
1034     if (!aroot || aroot->curr >= aroot->set_size) {
1035         struct arena_set *newroot;
1036         Newxz(newroot, 1, struct arena_set);
1037         newroot->set_size = ARENAS_PER_SET;
1038         newroot->next = aroot;
1039         aroot = newroot;
1040         PL_body_arenas = (void *) newroot;
1041         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1042     }
1043
1044     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1045     curr = aroot->curr++;
1046     adesc = &(aroot->set[curr]);
1047     assert(!adesc->arena);
1048     
1049     Newx(adesc->arena, good_arena_size, char);
1050     adesc->size = good_arena_size;
1051     adesc->utype = sv_type;
1052     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1053                           curr, (void*)adesc->arena, (UV)good_arena_size));
1054
1055     start = (char *) adesc->arena;
1056
1057     /* Get the address of the byte after the end of the last body we can fit.
1058        Remember, this is integer division:  */
1059     end = start + good_arena_size / body_size * body_size;
1060
1061     /* computed count doesn't reflect the 1st slot reservation */
1062 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1063     DEBUG_m(PerlIO_printf(Perl_debug_log,
1064                           "arena %p end %p arena-size %d (from %d) type %d "
1065                           "size %d ct %d\n",
1066                           (void*)start, (void*)end, (int)good_arena_size,
1067                           (int)arena_size, sv_type, (int)body_size,
1068                           (int)good_arena_size / (int)body_size));
1069 #else
1070     DEBUG_m(PerlIO_printf(Perl_debug_log,
1071                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1072                           (void*)start, (void*)end,
1073                           (int)arena_size, sv_type, (int)body_size,
1074                           (int)good_arena_size / (int)body_size));
1075 #endif
1076     *root = (void *)start;
1077
1078     while (1) {
1079         /* Where the next body would start:  */
1080         char * const next = start + body_size;
1081
1082         if (next >= end) {
1083             /* This is the last body:  */
1084             assert(next == end);
1085
1086             *(void **)start = 0;
1087             return *root;
1088         }
1089
1090         *(void**) start = (void *)next;
1091         start = next;
1092     }
1093 }
1094
1095 /* grab a new thing from the free list, allocating more if necessary.
1096    The inline version is used for speed in hot routines, and the
1097    function using it serves the rest (unless PURIFY).
1098 */
1099 #define new_body_inline(xpv, sv_type) \
1100     STMT_START { \
1101         void ** const r3wt = &PL_body_roots[sv_type]; \
1102         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1103           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1104                                              bodies_by_type[sv_type].body_size,\
1105                                              bodies_by_type[sv_type].arena_size)); \
1106         *(r3wt) = *(void**)(xpv); \
1107     } STMT_END
1108
1109 #ifndef PURIFY
1110
1111 STATIC void *
1112 S_new_body(pTHX_ const svtype sv_type)
1113 {
1114     dVAR;
1115     void *xpv;
1116     new_body_inline(xpv, sv_type);
1117     return xpv;
1118 }
1119
1120 #endif
1121
1122 static const struct body_details fake_rv =
1123     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1124
1125 /*
1126 =for apidoc sv_upgrade
1127
1128 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1129 SV, then copies across as much information as possible from the old body.
1130 It croaks if the SV is already in a more complex form than requested.  You
1131 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1132 before calling C<sv_upgrade>, and hence does not croak.  See also
1133 C<svtype>.
1134
1135 =cut
1136 */
1137
1138 void
1139 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1140 {
1141     dVAR;
1142     void*       old_body;
1143     void*       new_body;
1144     const svtype old_type = SvTYPE(sv);
1145     const struct body_details *new_type_details;
1146     const struct body_details *old_type_details
1147         = bodies_by_type + old_type;
1148     SV *referant = NULL;
1149
1150     PERL_ARGS_ASSERT_SV_UPGRADE;
1151
1152     if (old_type == new_type)
1153         return;
1154
1155     /* This clause was purposefully added ahead of the early return above to
1156        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1157        inference by Nick I-S that it would fix other troublesome cases. See
1158        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1159
1160        Given that shared hash key scalars are no longer PVIV, but PV, there is
1161        no longer need to unshare so as to free up the IVX slot for its proper
1162        purpose. So it's safe to move the early return earlier.  */
1163
1164     if (new_type != SVt_PV && SvIsCOW(sv)) {
1165         sv_force_normal_flags(sv, 0);
1166     }
1167
1168     old_body = SvANY(sv);
1169
1170     /* Copying structures onto other structures that have been neatly zeroed
1171        has a subtle gotcha. Consider XPVMG
1172
1173        +------+------+------+------+------+-------+-------+
1174        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1175        +------+------+------+------+------+-------+-------+
1176        0      4      8     12     16     20      24      28
1177
1178        where NVs are aligned to 8 bytes, so that sizeof that structure is
1179        actually 32 bytes long, with 4 bytes of padding at the end:
1180
1181        +------+------+------+------+------+-------+-------+------+
1182        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1183        +------+------+------+------+------+-------+-------+------+
1184        0      4      8     12     16     20      24      28     32
1185
1186        so what happens if you allocate memory for this structure:
1187
1188        +------+------+------+------+------+-------+-------+------+------+...
1189        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1190        +------+------+------+------+------+-------+-------+------+------+...
1191        0      4      8     12     16     20      24      28     32     36
1192
1193        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1194        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1195        started out as zero once, but it's quite possible that it isn't. So now,
1196        rather than a nicely zeroed GP, you have it pointing somewhere random.
1197        Bugs ensue.
1198
1199        (In fact, GP ends up pointing at a previous GP structure, because the
1200        principle cause of the padding in XPVMG getting garbage is a copy of
1201        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1202        this happens to be moot because XPVGV has been re-ordered, with GP
1203        no longer after STASH)
1204
1205        So we are careful and work out the size of used parts of all the
1206        structures.  */
1207
1208     switch (old_type) {
1209     case SVt_NULL:
1210         break;
1211     case SVt_IV:
1212         if (SvROK(sv)) {
1213             referant = SvRV(sv);
1214             old_type_details = &fake_rv;
1215             if (new_type == SVt_NV)
1216                 new_type = SVt_PVNV;
1217         } else {
1218             if (new_type < SVt_PVIV) {
1219                 new_type = (new_type == SVt_NV)
1220                     ? SVt_PVNV : SVt_PVIV;
1221             }
1222         }
1223         break;
1224     case SVt_NV:
1225         if (new_type < SVt_PVNV) {
1226             new_type = SVt_PVNV;
1227         }
1228         break;
1229     case SVt_PV:
1230         assert(new_type > SVt_PV);
1231         assert(SVt_IV < SVt_PV);
1232         assert(SVt_NV < SVt_PV);
1233         break;
1234     case SVt_PVIV:
1235         break;
1236     case SVt_PVNV:
1237         break;
1238     case SVt_PVMG:
1239         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1240            there's no way that it can be safely upgraded, because perl.c
1241            expects to Safefree(SvANY(PL_mess_sv))  */
1242         assert(sv != PL_mess_sv);
1243         /* This flag bit is used to mean other things in other scalar types.
1244            Given that it only has meaning inside the pad, it shouldn't be set
1245            on anything that can get upgraded.  */
1246         assert(!SvPAD_TYPED(sv));
1247         break;
1248     default:
1249         if (old_type_details->cant_upgrade)
1250             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1251                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1252     }
1253
1254     if (old_type > new_type)
1255         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1256                 (int)old_type, (int)new_type);
1257
1258     new_type_details = bodies_by_type + new_type;
1259
1260     SvFLAGS(sv) &= ~SVTYPEMASK;
1261     SvFLAGS(sv) |= new_type;
1262
1263     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1264        the return statements above will have triggered.  */
1265     assert (new_type != SVt_NULL);
1266     switch (new_type) {
1267     case SVt_IV:
1268         assert(old_type == SVt_NULL);
1269         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1270         SvIV_set(sv, 0);
1271         return;
1272     case SVt_NV:
1273         assert(old_type == SVt_NULL);
1274         SvANY(sv) = new_XNV();
1275         SvNV_set(sv, 0);
1276         return;
1277     case SVt_PVHV:
1278     case SVt_PVAV:
1279         assert(new_type_details->body_size);
1280
1281 #ifndef PURIFY  
1282         assert(new_type_details->arena);
1283         assert(new_type_details->arena_size);
1284         /* This points to the start of the allocated area.  */
1285         new_body_inline(new_body, new_type);
1286         Zero(new_body, new_type_details->body_size, char);
1287         new_body = ((char *)new_body) - new_type_details->offset;
1288 #else
1289         /* We always allocated the full length item with PURIFY. To do this
1290            we fake things so that arena is false for all 16 types..  */
1291         new_body = new_NOARENAZ(new_type_details);
1292 #endif
1293         SvANY(sv) = new_body;
1294         if (new_type == SVt_PVAV) {
1295             AvMAX(sv)   = -1;
1296             AvFILLp(sv) = -1;
1297             AvREAL_only(sv);
1298             if (old_type_details->body_size) {
1299                 AvALLOC(sv) = 0;
1300             } else {
1301                 /* It will have been zeroed when the new body was allocated.
1302                    Lets not write to it, in case it confuses a write-back
1303                    cache.  */
1304             }
1305         } else {
1306             assert(!SvOK(sv));
1307             SvOK_off(sv);
1308 #ifndef NODEFAULT_SHAREKEYS
1309             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1310 #endif
1311             HvMAX(sv) = 7; /* (start with 8 buckets) */
1312         }
1313
1314         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1315            The target created by newSVrv also is, and it can have magic.
1316            However, it never has SvPVX set.
1317         */
1318         if (old_type == SVt_IV) {
1319             assert(!SvROK(sv));
1320         } else if (old_type >= SVt_PV) {
1321             assert(SvPVX_const(sv) == 0);
1322         }
1323
1324         if (old_type >= SVt_PVMG) {
1325             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1326             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1327         } else {
1328             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1329         }
1330         break;
1331
1332
1333     case SVt_REGEXP:
1334         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1335            sv_force_normal_flags(sv) is called.  */
1336         SvFAKE_on(sv);
1337     case SVt_PVIV:
1338         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1339            no route from NV to PVIV, NOK can never be true  */
1340         assert(!SvNOKp(sv));
1341         assert(!SvNOK(sv));
1342     case SVt_PVIO:
1343     case SVt_PVFM:
1344     case SVt_PVGV:
1345     case SVt_PVCV:
1346     case SVt_PVLV:
1347     case SVt_PVMG:
1348     case SVt_PVNV:
1349     case SVt_PV:
1350
1351         assert(new_type_details->body_size);
1352         /* We always allocated the full length item with PURIFY. To do this
1353            we fake things so that arena is false for all 16 types..  */
1354         if(new_type_details->arena) {
1355             /* This points to the start of the allocated area.  */
1356             new_body_inline(new_body, new_type);
1357             Zero(new_body, new_type_details->body_size, char);
1358             new_body = ((char *)new_body) - new_type_details->offset;
1359         } else {
1360             new_body = new_NOARENAZ(new_type_details);
1361         }
1362         SvANY(sv) = new_body;
1363
1364         if (old_type_details->copy) {
1365             /* There is now the potential for an upgrade from something without
1366                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1367             int offset = old_type_details->offset;
1368             int length = old_type_details->copy;
1369
1370             if (new_type_details->offset > old_type_details->offset) {
1371                 const int difference
1372                     = new_type_details->offset - old_type_details->offset;
1373                 offset += difference;
1374                 length -= difference;
1375             }
1376             assert (length >= 0);
1377                 
1378             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1379                  char);
1380         }
1381
1382 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1383         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1384          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1385          * NV slot, but the new one does, then we need to initialise the
1386          * freshly created NV slot with whatever the correct bit pattern is
1387          * for 0.0  */
1388         if (old_type_details->zero_nv && !new_type_details->zero_nv
1389             && !isGV_with_GP(sv))
1390             SvNV_set(sv, 0);
1391 #endif
1392
1393         if (new_type == SVt_PVIO) {
1394             IO * const io = MUTABLE_IO(sv);
1395             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1396
1397             SvOBJECT_on(io);
1398             /* Clear the stashcache because a new IO could overrule a package
1399                name */
1400             hv_clear(PL_stashcache);
1401
1402             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1403             IoPAGE_LEN(sv) = 60;
1404         }
1405         if (old_type < SVt_PV) {
1406             /* referant will be NULL unless the old type was SVt_IV emulating
1407                SVt_RV */
1408             sv->sv_u.svu_rv = referant;
1409         }
1410         break;
1411     default:
1412         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1413                    (unsigned long)new_type);
1414     }
1415
1416     if (old_type > SVt_IV) {
1417 #ifdef PURIFY
1418         safefree(old_body);
1419 #else
1420         /* Note that there is an assumption that all bodies of types that
1421            can be upgraded came from arenas. Only the more complex non-
1422            upgradable types are allowed to be directly malloc()ed.  */
1423         assert(old_type_details->arena);
1424         del_body((void*)((char*)old_body + old_type_details->offset),
1425                  &PL_body_roots[old_type]);
1426 #endif
1427     }
1428 }
1429
1430 /*
1431 =for apidoc sv_backoff
1432
1433 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1434 wrapper instead.
1435
1436 =cut
1437 */
1438
1439 int
1440 Perl_sv_backoff(pTHX_ register SV *const sv)
1441 {
1442     STRLEN delta;
1443     const char * const s = SvPVX_const(sv);
1444
1445     PERL_ARGS_ASSERT_SV_BACKOFF;
1446     PERL_UNUSED_CONTEXT;
1447
1448     assert(SvOOK(sv));
1449     assert(SvTYPE(sv) != SVt_PVHV);
1450     assert(SvTYPE(sv) != SVt_PVAV);
1451
1452     SvOOK_offset(sv, delta);
1453     
1454     SvLEN_set(sv, SvLEN(sv) + delta);
1455     SvPV_set(sv, SvPVX(sv) - delta);
1456     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1457     SvFLAGS(sv) &= ~SVf_OOK;
1458     return 0;
1459 }
1460
1461 /*
1462 =for apidoc sv_grow
1463
1464 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1465 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1466 Use the C<SvGROW> wrapper instead.
1467
1468 =cut
1469 */
1470
1471 char *
1472 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1473 {
1474     register char *s;
1475
1476     PERL_ARGS_ASSERT_SV_GROW;
1477
1478     if (PL_madskills && newlen >= 0x100000) {
1479         PerlIO_printf(Perl_debug_log,
1480                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1481     }
1482 #ifdef HAS_64K_LIMIT
1483     if (newlen >= 0x10000) {
1484         PerlIO_printf(Perl_debug_log,
1485                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1486         my_exit(1);
1487     }
1488 #endif /* HAS_64K_LIMIT */
1489     if (SvROK(sv))
1490         sv_unref(sv);
1491     if (SvTYPE(sv) < SVt_PV) {
1492         sv_upgrade(sv, SVt_PV);
1493         s = SvPVX_mutable(sv);
1494     }
1495     else if (SvOOK(sv)) {       /* pv is offset? */
1496         sv_backoff(sv);
1497         s = SvPVX_mutable(sv);
1498         if (newlen > SvLEN(sv))
1499             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1500 #ifdef HAS_64K_LIMIT
1501         if (newlen >= 0x10000)
1502             newlen = 0xFFFF;
1503 #endif
1504     }
1505     else
1506         s = SvPVX_mutable(sv);
1507
1508     if (newlen > SvLEN(sv)) {           /* need more room? */
1509         STRLEN minlen = SvCUR(sv);
1510         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1511         if (newlen < minlen)
1512             newlen = minlen;
1513 #ifndef Perl_safesysmalloc_size
1514         newlen = PERL_STRLEN_ROUNDUP(newlen);
1515 #endif
1516         if (SvLEN(sv) && s) {
1517             s = (char*)saferealloc(s, newlen);
1518         }
1519         else {
1520             s = (char*)safemalloc(newlen);
1521             if (SvPVX_const(sv) && SvCUR(sv)) {
1522                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1523             }
1524         }
1525         SvPV_set(sv, s);
1526 #ifdef Perl_safesysmalloc_size
1527         /* Do this here, do it once, do it right, and then we will never get
1528            called back into sv_grow() unless there really is some growing
1529            needed.  */
1530         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1531 #else
1532         SvLEN_set(sv, newlen);
1533 #endif
1534     }
1535     return s;
1536 }
1537
1538 /*
1539 =for apidoc sv_setiv
1540
1541 Copies an integer into the given SV, upgrading first if necessary.
1542 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1543
1544 =cut
1545 */
1546
1547 void
1548 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1549 {
1550     dVAR;
1551
1552     PERL_ARGS_ASSERT_SV_SETIV;
1553
1554     SV_CHECK_THINKFIRST_COW_DROP(sv);
1555     switch (SvTYPE(sv)) {
1556     case SVt_NULL:
1557     case SVt_NV:
1558         sv_upgrade(sv, SVt_IV);
1559         break;
1560     case SVt_PV:
1561         sv_upgrade(sv, SVt_PVIV);
1562         break;
1563
1564     case SVt_PVGV:
1565         if (!isGV_with_GP(sv))
1566             break;
1567     case SVt_PVAV:
1568     case SVt_PVHV:
1569     case SVt_PVCV:
1570     case SVt_PVFM:
1571     case SVt_PVIO:
1572         /* diag_listed_as: Can't coerce %s to %s in %s */
1573         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1574                    OP_DESC(PL_op));
1575     default: NOOP;
1576     }
1577     (void)SvIOK_only(sv);                       /* validate number */
1578     SvIV_set(sv, i);
1579     SvTAINT(sv);
1580 }
1581
1582 /*
1583 =for apidoc sv_setiv_mg
1584
1585 Like C<sv_setiv>, but also handles 'set' magic.
1586
1587 =cut
1588 */
1589
1590 void
1591 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1592 {
1593     PERL_ARGS_ASSERT_SV_SETIV_MG;
1594
1595     sv_setiv(sv,i);
1596     SvSETMAGIC(sv);
1597 }
1598
1599 /*
1600 =for apidoc sv_setuv
1601
1602 Copies an unsigned integer into the given SV, upgrading first if necessary.
1603 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1604
1605 =cut
1606 */
1607
1608 void
1609 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1610 {
1611     PERL_ARGS_ASSERT_SV_SETUV;
1612
1613     /* With these two if statements:
1614        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1615
1616        without
1617        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1618
1619        If you wish to remove them, please benchmark to see what the effect is
1620     */
1621     if (u <= (UV)IV_MAX) {
1622        sv_setiv(sv, (IV)u);
1623        return;
1624     }
1625     sv_setiv(sv, 0);
1626     SvIsUV_on(sv);
1627     SvUV_set(sv, u);
1628 }
1629
1630 /*
1631 =for apidoc sv_setuv_mg
1632
1633 Like C<sv_setuv>, but also handles 'set' magic.
1634
1635 =cut
1636 */
1637
1638 void
1639 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1640 {
1641     PERL_ARGS_ASSERT_SV_SETUV_MG;
1642
1643     sv_setuv(sv,u);
1644     SvSETMAGIC(sv);
1645 }
1646
1647 /*
1648 =for apidoc sv_setnv
1649
1650 Copies a double into the given SV, upgrading first if necessary.
1651 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1652
1653 =cut
1654 */
1655
1656 void
1657 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1658 {
1659     dVAR;
1660
1661     PERL_ARGS_ASSERT_SV_SETNV;
1662
1663     SV_CHECK_THINKFIRST_COW_DROP(sv);
1664     switch (SvTYPE(sv)) {
1665     case SVt_NULL:
1666     case SVt_IV:
1667         sv_upgrade(sv, SVt_NV);
1668         break;
1669     case SVt_PV:
1670     case SVt_PVIV:
1671         sv_upgrade(sv, SVt_PVNV);
1672         break;
1673
1674     case SVt_PVGV:
1675         if (!isGV_with_GP(sv))
1676             break;
1677     case SVt_PVAV:
1678     case SVt_PVHV:
1679     case SVt_PVCV:
1680     case SVt_PVFM:
1681     case SVt_PVIO:
1682         /* diag_listed_as: Can't coerce %s to %s in %s */
1683         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1684                    OP_DESC(PL_op));
1685     default: NOOP;
1686     }
1687     SvNV_set(sv, num);
1688     (void)SvNOK_only(sv);                       /* validate number */
1689     SvTAINT(sv);
1690 }
1691
1692 /*
1693 =for apidoc sv_setnv_mg
1694
1695 Like C<sv_setnv>, but also handles 'set' magic.
1696
1697 =cut
1698 */
1699
1700 void
1701 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1702 {
1703     PERL_ARGS_ASSERT_SV_SETNV_MG;
1704
1705     sv_setnv(sv,num);
1706     SvSETMAGIC(sv);
1707 }
1708
1709 /* Print an "isn't numeric" warning, using a cleaned-up,
1710  * printable version of the offending string
1711  */
1712
1713 STATIC void
1714 S_not_a_number(pTHX_ SV *const sv)
1715 {
1716      dVAR;
1717      SV *dsv;
1718      char tmpbuf[64];
1719      const char *pv;
1720
1721      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1722
1723      if (DO_UTF8(sv)) {
1724           dsv = newSVpvs_flags("", SVs_TEMP);
1725           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1726      } else {
1727           char *d = tmpbuf;
1728           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1729           /* each *s can expand to 4 chars + "...\0",
1730              i.e. need room for 8 chars */
1731         
1732           const char *s = SvPVX_const(sv);
1733           const char * const end = s + SvCUR(sv);
1734           for ( ; s < end && d < limit; s++ ) {
1735                int ch = *s & 0xFF;
1736                if (ch & 128 && !isPRINT_LC(ch)) {
1737                     *d++ = 'M';
1738                     *d++ = '-';
1739                     ch &= 127;
1740                }
1741                if (ch == '\n') {
1742                     *d++ = '\\';
1743                     *d++ = 'n';
1744                }
1745                else if (ch == '\r') {
1746                     *d++ = '\\';
1747                     *d++ = 'r';
1748                }
1749                else if (ch == '\f') {
1750                     *d++ = '\\';
1751                     *d++ = 'f';
1752                }
1753                else if (ch == '\\') {
1754                     *d++ = '\\';
1755                     *d++ = '\\';
1756                }
1757                else if (ch == '\0') {
1758                     *d++ = '\\';
1759                     *d++ = '0';
1760                }
1761                else if (isPRINT_LC(ch))
1762                     *d++ = ch;
1763                else {
1764                     *d++ = '^';
1765                     *d++ = toCTRL(ch);
1766                }
1767           }
1768           if (s < end) {
1769                *d++ = '.';
1770                *d++ = '.';
1771                *d++ = '.';
1772           }
1773           *d = '\0';
1774           pv = tmpbuf;
1775     }
1776
1777     if (PL_op)
1778         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1779                     "Argument \"%s\" isn't numeric in %s", pv,
1780                     OP_DESC(PL_op));
1781     else
1782         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1783                     "Argument \"%s\" isn't numeric", pv);
1784 }
1785
1786 /*
1787 =for apidoc looks_like_number
1788
1789 Test if the content of an SV looks like a number (or is a number).
1790 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1791 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1792 ignored.
1793
1794 =cut
1795 */
1796
1797 I32
1798 Perl_looks_like_number(pTHX_ SV *const sv)
1799 {
1800     register const char *sbegin;
1801     STRLEN len;
1802
1803     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1804
1805     if (SvPOK(sv) || SvPOKp(sv)) {
1806         sbegin = SvPV_nomg_const(sv, len);
1807     }
1808     else
1809         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1810     return grok_number(sbegin, len, NULL);
1811 }
1812
1813 STATIC bool
1814 S_glob_2number(pTHX_ GV * const gv)
1815 {
1816     SV *const buffer = sv_newmortal();
1817
1818     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1819
1820     gv_efullname3(buffer, gv, "*");
1821
1822     /* We know that all GVs stringify to something that is not-a-number,
1823         so no need to test that.  */
1824     if (ckWARN(WARN_NUMERIC))
1825         not_a_number(buffer);
1826     /* We just want something true to return, so that S_sv_2iuv_common
1827         can tail call us and return true.  */
1828     return TRUE;
1829 }
1830
1831 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1832    until proven guilty, assume that things are not that bad... */
1833
1834 /*
1835    NV_PRESERVES_UV:
1836
1837    As 64 bit platforms often have an NV that doesn't preserve all bits of
1838    an IV (an assumption perl has been based on to date) it becomes necessary
1839    to remove the assumption that the NV always carries enough precision to
1840    recreate the IV whenever needed, and that the NV is the canonical form.
1841    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1842    precision as a side effect of conversion (which would lead to insanity
1843    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1844    1) to distinguish between IV/UV/NV slots that have cached a valid
1845       conversion where precision was lost and IV/UV/NV slots that have a
1846       valid conversion which has lost no precision
1847    2) to ensure that if a numeric conversion to one form is requested that
1848       would lose precision, the precise conversion (or differently
1849       imprecise conversion) is also performed and cached, to prevent
1850       requests for different numeric formats on the same SV causing
1851       lossy conversion chains. (lossless conversion chains are perfectly
1852       acceptable (still))
1853
1854
1855    flags are used:
1856    SvIOKp is true if the IV slot contains a valid value
1857    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1858    SvNOKp is true if the NV slot contains a valid value
1859    SvNOK  is true only if the NV value is accurate
1860
1861    so
1862    while converting from PV to NV, check to see if converting that NV to an
1863    IV(or UV) would lose accuracy over a direct conversion from PV to
1864    IV(or UV). If it would, cache both conversions, return NV, but mark
1865    SV as IOK NOKp (ie not NOK).
1866
1867    While converting from PV to IV, check to see if converting that IV to an
1868    NV would lose accuracy over a direct conversion from PV to NV. If it
1869    would, cache both conversions, flag similarly.
1870
1871    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1872    correctly because if IV & NV were set NV *always* overruled.
1873    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1874    changes - now IV and NV together means that the two are interchangeable:
1875    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1876
1877    The benefit of this is that operations such as pp_add know that if
1878    SvIOK is true for both left and right operands, then integer addition
1879    can be used instead of floating point (for cases where the result won't
1880    overflow). Before, floating point was always used, which could lead to
1881    loss of precision compared with integer addition.
1882
1883    * making IV and NV equal status should make maths accurate on 64 bit
1884      platforms
1885    * may speed up maths somewhat if pp_add and friends start to use
1886      integers when possible instead of fp. (Hopefully the overhead in
1887      looking for SvIOK and checking for overflow will not outweigh the
1888      fp to integer speedup)
1889    * will slow down integer operations (callers of SvIV) on "inaccurate"
1890      values, as the change from SvIOK to SvIOKp will cause a call into
1891      sv_2iv each time rather than a macro access direct to the IV slot
1892    * should speed up number->string conversion on integers as IV is
1893      favoured when IV and NV are equally accurate
1894
1895    ####################################################################
1896    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1897    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1898    On the other hand, SvUOK is true iff UV.
1899    ####################################################################
1900
1901    Your mileage will vary depending your CPU's relative fp to integer
1902    performance ratio.
1903 */
1904
1905 #ifndef NV_PRESERVES_UV
1906 #  define IS_NUMBER_UNDERFLOW_IV 1
1907 #  define IS_NUMBER_UNDERFLOW_UV 2
1908 #  define IS_NUMBER_IV_AND_UV    2
1909 #  define IS_NUMBER_OVERFLOW_IV  4
1910 #  define IS_NUMBER_OVERFLOW_UV  5
1911
1912 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1913
1914 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1915 STATIC int
1916 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1917 #  ifdef DEBUGGING
1918                        , I32 numtype
1919 #  endif
1920                        )
1921 {
1922     dVAR;
1923
1924     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1925
1926     DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1927     if (SvNVX(sv) < (NV)IV_MIN) {
1928         (void)SvIOKp_on(sv);
1929         (void)SvNOK_on(sv);
1930         SvIV_set(sv, IV_MIN);
1931         return IS_NUMBER_UNDERFLOW_IV;
1932     }
1933     if (SvNVX(sv) > (NV)UV_MAX) {
1934         (void)SvIOKp_on(sv);
1935         (void)SvNOK_on(sv);
1936         SvIsUV_on(sv);
1937         SvUV_set(sv, UV_MAX);
1938         return IS_NUMBER_OVERFLOW_UV;
1939     }
1940     (void)SvIOKp_on(sv);
1941     (void)SvNOK_on(sv);
1942     /* Can't use strtol etc to convert this string.  (See truth table in
1943        sv_2iv  */
1944     if (SvNVX(sv) <= (UV)IV_MAX) {
1945         SvIV_set(sv, I_V(SvNVX(sv)));
1946         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1947             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1948         } else {
1949             /* Integer is imprecise. NOK, IOKp */
1950         }
1951         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1952     }
1953     SvIsUV_on(sv);
1954     SvUV_set(sv, U_V(SvNVX(sv)));
1955     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1956         if (SvUVX(sv) == UV_MAX) {
1957             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1958                possibly be preserved by NV. Hence, it must be overflow.
1959                NOK, IOKp */
1960             return IS_NUMBER_OVERFLOW_UV;
1961         }
1962         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1963     } else {
1964         /* Integer is imprecise. NOK, IOKp */
1965     }
1966     return IS_NUMBER_OVERFLOW_IV;
1967 }
1968 #endif /* !NV_PRESERVES_UV*/
1969
1970 STATIC bool
1971 S_sv_2iuv_common(pTHX_ SV *const sv)
1972 {
1973     dVAR;
1974
1975     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1976
1977     if (SvNOKp(sv)) {
1978         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1979          * without also getting a cached IV/UV from it at the same time
1980          * (ie PV->NV conversion should detect loss of accuracy and cache
1981          * IV or UV at same time to avoid this. */
1982         /* IV-over-UV optimisation - choose to cache IV if possible */
1983
1984         if (SvTYPE(sv) == SVt_NV)
1985             sv_upgrade(sv, SVt_PVNV);
1986
1987         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1988         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1989            certainly cast into the IV range at IV_MAX, whereas the correct
1990            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1991            cases go to UV */
1992 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1993         if (Perl_isnan(SvNVX(sv))) {
1994             SvUV_set(sv, 0);
1995             SvIsUV_on(sv);
1996             return FALSE;
1997         }
1998 #endif
1999         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2000             SvIV_set(sv, I_V(SvNVX(sv)));
2001             if (SvNVX(sv) == (NV) SvIVX(sv)
2002 #ifndef NV_PRESERVES_UV
2003                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2004                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2005                 /* Don't flag it as "accurately an integer" if the number
2006                    came from a (by definition imprecise) NV operation, and
2007                    we're outside the range of NV integer precision */
2008 #endif
2009                 ) {
2010                 if (SvNOK(sv))
2011                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2012                 else {
2013                     /* scalar has trailing garbage, eg "42a" */
2014                 }
2015                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2016                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2017                                       PTR2UV(sv),
2018                                       SvNVX(sv),
2019                                       SvIVX(sv)));
2020
2021             } else {
2022                 /* IV not precise.  No need to convert from PV, as NV
2023                    conversion would already have cached IV if it detected
2024                    that PV->IV would be better than PV->NV->IV
2025                    flags already correct - don't set public IOK.  */
2026                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2027                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2028                                       PTR2UV(sv),
2029                                       SvNVX(sv),
2030                                       SvIVX(sv)));
2031             }
2032             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2033                but the cast (NV)IV_MIN rounds to a the value less (more
2034                negative) than IV_MIN which happens to be equal to SvNVX ??
2035                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2036                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2037                (NV)UVX == NVX are both true, but the values differ. :-(
2038                Hopefully for 2s complement IV_MIN is something like
2039                0x8000000000000000 which will be exact. NWC */
2040         }
2041         else {
2042             SvUV_set(sv, U_V(SvNVX(sv)));
2043             if (
2044                 (SvNVX(sv) == (NV) SvUVX(sv))
2045 #ifndef  NV_PRESERVES_UV
2046                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2047                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2048                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2049                 /* Don't flag it as "accurately an integer" if the number
2050                    came from a (by definition imprecise) NV operation, and
2051                    we're outside the range of NV integer precision */
2052 #endif
2053                 && SvNOK(sv)
2054                 )
2055                 SvIOK_on(sv);
2056             SvIsUV_on(sv);
2057             DEBUG_c(PerlIO_printf(Perl_debug_log,
2058                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2059                                   PTR2UV(sv),
2060                                   SvUVX(sv),
2061                                   SvUVX(sv)));
2062         }
2063     }
2064     else if (SvPOKp(sv) && SvLEN(sv)) {
2065         UV value;
2066         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2067         /* We want to avoid a possible problem when we cache an IV/ a UV which
2068            may be later translated to an NV, and the resulting NV is not
2069            the same as the direct translation of the initial string
2070            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2071            be careful to ensure that the value with the .456 is around if the
2072            NV value is requested in the future).
2073         
2074            This means that if we cache such an IV/a UV, we need to cache the
2075            NV as well.  Moreover, we trade speed for space, and do not
2076            cache the NV if we are sure it's not needed.
2077          */
2078
2079         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2080         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2081              == IS_NUMBER_IN_UV) {
2082             /* It's definitely an integer, only upgrade to PVIV */
2083             if (SvTYPE(sv) < SVt_PVIV)
2084                 sv_upgrade(sv, SVt_PVIV);
2085             (void)SvIOK_on(sv);
2086         } else if (SvTYPE(sv) < SVt_PVNV)
2087             sv_upgrade(sv, SVt_PVNV);
2088
2089         /* If NVs preserve UVs then we only use the UV value if we know that
2090            we aren't going to call atof() below. If NVs don't preserve UVs
2091            then the value returned may have more precision than atof() will
2092            return, even though value isn't perfectly accurate.  */
2093         if ((numtype & (IS_NUMBER_IN_UV
2094 #ifdef NV_PRESERVES_UV
2095                         | IS_NUMBER_NOT_INT
2096 #endif
2097             )) == IS_NUMBER_IN_UV) {
2098             /* This won't turn off the public IOK flag if it was set above  */
2099             (void)SvIOKp_on(sv);
2100
2101             if (!(numtype & IS_NUMBER_NEG)) {
2102                 /* positive */;
2103                 if (value <= (UV)IV_MAX) {
2104                     SvIV_set(sv, (IV)value);
2105                 } else {
2106                     /* it didn't overflow, and it was positive. */
2107                     SvUV_set(sv, value);
2108                     SvIsUV_on(sv);
2109                 }
2110             } else {
2111                 /* 2s complement assumption  */
2112                 if (value <= (UV)IV_MIN) {
2113                     SvIV_set(sv, -(IV)value);
2114                 } else {
2115                     /* Too negative for an IV.  This is a double upgrade, but
2116                        I'm assuming it will be rare.  */
2117                     if (SvTYPE(sv) < SVt_PVNV)
2118                         sv_upgrade(sv, SVt_PVNV);
2119                     SvNOK_on(sv);
2120                     SvIOK_off(sv);
2121                     SvIOKp_on(sv);
2122                     SvNV_set(sv, -(NV)value);
2123                     SvIV_set(sv, IV_MIN);
2124                 }
2125             }
2126         }
2127         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2128            will be in the previous block to set the IV slot, and the next
2129            block to set the NV slot.  So no else here.  */
2130         
2131         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2132             != IS_NUMBER_IN_UV) {
2133             /* It wasn't an (integer that doesn't overflow the UV). */
2134             SvNV_set(sv, Atof(SvPVX_const(sv)));
2135
2136             if (! numtype && ckWARN(WARN_NUMERIC))
2137                 not_a_number(sv);
2138
2139 #if defined(USE_LONG_DOUBLE)
2140             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2141                                   PTR2UV(sv), SvNVX(sv)));
2142 #else
2143             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2144                                   PTR2UV(sv), SvNVX(sv)));
2145 #endif
2146
2147 #ifdef NV_PRESERVES_UV
2148             (void)SvIOKp_on(sv);
2149             (void)SvNOK_on(sv);
2150             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2151                 SvIV_set(sv, I_V(SvNVX(sv)));
2152                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2153                     SvIOK_on(sv);
2154                 } else {
2155                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2156                 }
2157                 /* UV will not work better than IV */
2158             } else {
2159                 if (SvNVX(sv) > (NV)UV_MAX) {
2160                     SvIsUV_on(sv);
2161                     /* Integer is inaccurate. NOK, IOKp, is UV */
2162                     SvUV_set(sv, UV_MAX);
2163                 } else {
2164                     SvUV_set(sv, U_V(SvNVX(sv)));
2165                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2166                        NV preservse UV so can do correct comparison.  */
2167                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2168                         SvIOK_on(sv);
2169                     } else {
2170                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2171                     }
2172                 }
2173                 SvIsUV_on(sv);
2174             }
2175 #else /* NV_PRESERVES_UV */
2176             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2177                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2178                 /* The IV/UV slot will have been set from value returned by
2179                    grok_number above.  The NV slot has just been set using
2180                    Atof.  */
2181                 SvNOK_on(sv);
2182                 assert (SvIOKp(sv));
2183             } else {
2184                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2185                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2186                     /* Small enough to preserve all bits. */
2187                     (void)SvIOKp_on(sv);
2188                     SvNOK_on(sv);
2189                     SvIV_set(sv, I_V(SvNVX(sv)));
2190                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2191                         SvIOK_on(sv);
2192                     /* Assumption: first non-preserved integer is < IV_MAX,
2193                        this NV is in the preserved range, therefore: */
2194                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2195                           < (UV)IV_MAX)) {
2196                         Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2197                     }
2198                 } else {
2199                     /* IN_UV NOT_INT
2200                          0      0       already failed to read UV.
2201                          0      1       already failed to read UV.
2202                          1      0       you won't get here in this case. IV/UV
2203                                         slot set, public IOK, Atof() unneeded.
2204                          1      1       already read UV.
2205                        so there's no point in sv_2iuv_non_preserve() attempting
2206                        to use atol, strtol, strtoul etc.  */
2207 #  ifdef DEBUGGING
2208                     sv_2iuv_non_preserve (sv, numtype);
2209 #  else
2210                     sv_2iuv_non_preserve (sv);
2211 #  endif
2212                 }
2213             }
2214 #endif /* NV_PRESERVES_UV */
2215         /* It might be more code efficient to go through the entire logic above
2216            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2217            gets complex and potentially buggy, so more programmer efficient
2218            to do it this way, by turning off the public flags:  */
2219         if (!numtype)
2220             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2221         }
2222     }
2223     else  {
2224         if (isGV_with_GP(sv))
2225             return glob_2number(MUTABLE_GV(sv));
2226
2227         if (!SvPADTMP(sv)) {
2228             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2229                 report_uninit(sv);
2230         }
2231         if (SvTYPE(sv) < SVt_IV)
2232             /* Typically the caller expects that sv_any is not NULL now.  */
2233             sv_upgrade(sv, SVt_IV);
2234         /* Return 0 from the caller.  */
2235         return TRUE;
2236     }
2237     return FALSE;
2238 }
2239
2240 /*
2241 =for apidoc sv_2iv_flags
2242
2243 Return the integer value of an SV, doing any necessary string
2244 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2245 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2246
2247 =cut
2248 */
2249
2250 IV
2251 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2252 {
2253     dVAR;
2254     if (!sv)
2255         return 0;
2256     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2257         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2258            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2259            In practice they are extremely unlikely to actually get anywhere
2260            accessible by user Perl code - the only way that I'm aware of is when
2261            a constant subroutine which is used as the second argument to index.
2262         */
2263         if (flags & SV_GMAGIC)
2264             mg_get(sv);
2265         if (SvIOKp(sv))
2266             return SvIVX(sv);
2267         if (SvNOKp(sv)) {
2268             return I_V(SvNVX(sv));
2269         }
2270         if (SvPOKp(sv) && SvLEN(sv)) {
2271             UV value;
2272             const int numtype
2273                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2274
2275             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2276                 == IS_NUMBER_IN_UV) {
2277                 /* It's definitely an integer */
2278                 if (numtype & IS_NUMBER_NEG) {
2279                     if (value < (UV)IV_MIN)
2280                         return -(IV)value;
2281                 } else {
2282                     if (value < (UV)IV_MAX)
2283                         return (IV)value;
2284                 }
2285             }
2286             if (!numtype) {
2287                 if (ckWARN(WARN_NUMERIC))
2288                     not_a_number(sv);
2289             }
2290             return I_V(Atof(SvPVX_const(sv)));
2291         }
2292         if (SvROK(sv)) {
2293             goto return_rok;
2294         }
2295         assert(SvTYPE(sv) >= SVt_PVMG);
2296         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2297     } else if (SvTHINKFIRST(sv)) {
2298         if (SvROK(sv)) {
2299         return_rok:
2300             if (SvAMAGIC(sv)) {
2301                 SV * tmpstr;
2302                 if (flags & SV_SKIP_OVERLOAD)
2303                     return 0;
2304                 tmpstr = AMG_CALLunary(sv, numer_amg);
2305                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2306                     return SvIV(tmpstr);
2307                 }
2308             }
2309             return PTR2IV(SvRV(sv));
2310         }
2311         if (SvIsCOW(sv)) {
2312             sv_force_normal_flags(sv, 0);
2313         }
2314         if (SvREADONLY(sv) && !SvOK(sv)) {
2315             if (ckWARN(WARN_UNINITIALIZED))
2316                 report_uninit(sv);
2317             return 0;
2318         }
2319     }
2320     if (!SvIOKp(sv)) {
2321         if (S_sv_2iuv_common(aTHX_ sv))
2322             return 0;
2323     }
2324     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2325         PTR2UV(sv),SvIVX(sv)));
2326     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2327 }
2328
2329 /*
2330 =for apidoc sv_2uv_flags
2331
2332 Return the unsigned integer value of an SV, doing any necessary string
2333 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2334 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2335
2336 =cut
2337 */
2338
2339 UV
2340 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2341 {
2342     dVAR;
2343     if (!sv)
2344         return 0;
2345     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2346         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2347            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  */
2348         if (flags & SV_GMAGIC)
2349             mg_get(sv);
2350         if (SvIOKp(sv))
2351             return SvUVX(sv);
2352         if (SvNOKp(sv))
2353             return U_V(SvNVX(sv));
2354         if (SvPOKp(sv) && SvLEN(sv)) {
2355             UV value;
2356             const int numtype
2357                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2358
2359             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2360                 == IS_NUMBER_IN_UV) {
2361                 /* It's definitely an integer */
2362                 if (!(numtype & IS_NUMBER_NEG))
2363                     return value;
2364             }
2365             if (!numtype) {
2366                 if (ckWARN(WARN_NUMERIC))
2367                     not_a_number(sv);
2368             }
2369             return U_V(Atof(SvPVX_const(sv)));
2370         }
2371         if (SvROK(sv)) {
2372             goto return_rok;
2373         }
2374         assert(SvTYPE(sv) >= SVt_PVMG);
2375         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2376     } else if (SvTHINKFIRST(sv)) {
2377         if (SvROK(sv)) {
2378         return_rok:
2379             if (SvAMAGIC(sv)) {
2380                 SV *tmpstr;
2381                 if (flags & SV_SKIP_OVERLOAD)
2382                     return 0;
2383                 tmpstr = AMG_CALLunary(sv, numer_amg);
2384                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2385                     return SvUV(tmpstr);
2386                 }
2387             }
2388             return PTR2UV(SvRV(sv));
2389         }
2390         if (SvIsCOW(sv)) {
2391             sv_force_normal_flags(sv, 0);
2392         }
2393         if (SvREADONLY(sv) && !SvOK(sv)) {
2394             if (ckWARN(WARN_UNINITIALIZED))
2395                 report_uninit(sv);
2396             return 0;
2397         }
2398     }
2399     if (!SvIOKp(sv)) {
2400         if (S_sv_2iuv_common(aTHX_ sv))
2401             return 0;
2402     }
2403
2404     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2405                           PTR2UV(sv),SvUVX(sv)));
2406     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2407 }
2408
2409 /*
2410 =for apidoc sv_2nv_flags
2411
2412 Return the num value of an SV, doing any necessary string or integer
2413 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2414 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2415
2416 =cut
2417 */
2418
2419 NV
2420 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2421 {
2422     dVAR;
2423     if (!sv)
2424         return 0.0;
2425     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2426         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2427            the same flag bit as SVf_IVisUV, so must not let them cache NVs.  */
2428         if (flags & SV_GMAGIC)
2429             mg_get(sv);
2430         if (SvNOKp(sv))
2431             return SvNVX(sv);
2432         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2433             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2434                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2435                 not_a_number(sv);
2436             return Atof(SvPVX_const(sv));
2437         }
2438         if (SvIOKp(sv)) {
2439             if (SvIsUV(sv))
2440                 return (NV)SvUVX(sv);
2441             else
2442                 return (NV)SvIVX(sv);
2443         }
2444         if (SvROK(sv)) {
2445             goto return_rok;
2446         }
2447         assert(SvTYPE(sv) >= SVt_PVMG);
2448         /* This falls through to the report_uninit near the end of the
2449            function. */
2450     } else if (SvTHINKFIRST(sv)) {
2451         if (SvROK(sv)) {
2452         return_rok:
2453             if (SvAMAGIC(sv)) {
2454                 SV *tmpstr;
2455                 if (flags & SV_SKIP_OVERLOAD)
2456                     return 0;
2457                 tmpstr = AMG_CALLunary(sv, numer_amg);
2458                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2459                     return SvNV(tmpstr);
2460                 }
2461             }
2462             return PTR2NV(SvRV(sv));
2463         }
2464         if (SvIsCOW(sv)) {
2465             sv_force_normal_flags(sv, 0);
2466         }
2467         if (SvREADONLY(sv) && !SvOK(sv)) {
2468             if (ckWARN(WARN_UNINITIALIZED))
2469                 report_uninit(sv);
2470             return 0.0;
2471         }
2472     }
2473     if (SvTYPE(sv) < SVt_NV) {
2474         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2475         sv_upgrade(sv, SVt_NV);
2476 #ifdef USE_LONG_DOUBLE
2477         DEBUG_c({
2478             STORE_NUMERIC_LOCAL_SET_STANDARD();
2479             PerlIO_printf(Perl_debug_log,
2480                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2481                           PTR2UV(sv), SvNVX(sv));
2482             RESTORE_NUMERIC_LOCAL();
2483         });
2484 #else
2485         DEBUG_c({
2486             STORE_NUMERIC_LOCAL_SET_STANDARD();
2487             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2488                           PTR2UV(sv), SvNVX(sv));
2489             RESTORE_NUMERIC_LOCAL();
2490         });
2491 #endif
2492     }
2493     else if (SvTYPE(sv) < SVt_PVNV)
2494         sv_upgrade(sv, SVt_PVNV);
2495     if (SvNOKp(sv)) {
2496         return SvNVX(sv);
2497     }
2498     if (SvIOKp(sv)) {
2499         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2500 #ifdef NV_PRESERVES_UV
2501         if (SvIOK(sv))
2502             SvNOK_on(sv);
2503         else
2504             SvNOKp_on(sv);
2505 #else
2506         /* Only set the public NV OK flag if this NV preserves the IV  */
2507         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2508         if (SvIOK(sv) &&
2509             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2510                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2511             SvNOK_on(sv);
2512         else
2513             SvNOKp_on(sv);
2514 #endif
2515     }
2516     else if (SvPOKp(sv) && SvLEN(sv)) {
2517         UV value;
2518         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2519         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2520             not_a_number(sv);
2521 #ifdef NV_PRESERVES_UV
2522         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2523             == IS_NUMBER_IN_UV) {
2524             /* It's definitely an integer */
2525             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2526         } else
2527             SvNV_set(sv, Atof(SvPVX_const(sv)));
2528         if (numtype)
2529             SvNOK_on(sv);
2530         else
2531             SvNOKp_on(sv);
2532 #else
2533         SvNV_set(sv, Atof(SvPVX_const(sv)));
2534         /* Only set the public NV OK flag if this NV preserves the value in
2535            the PV at least as well as an IV/UV would.
2536            Not sure how to do this 100% reliably. */
2537         /* if that shift count is out of range then Configure's test is
2538            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2539            UV_BITS */
2540         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2541             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2542             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2543         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2544             /* Can't use strtol etc to convert this string, so don't try.
2545                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2546             SvNOK_on(sv);
2547         } else {
2548             /* value has been set.  It may not be precise.  */
2549             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2550                 /* 2s complement assumption for (UV)IV_MIN  */
2551                 SvNOK_on(sv); /* Integer is too negative.  */
2552             } else {
2553                 SvNOKp_on(sv);
2554                 SvIOKp_on(sv);
2555
2556                 if (numtype & IS_NUMBER_NEG) {
2557                     SvIV_set(sv, -(IV)value);
2558                 } else if (value <= (UV)IV_MAX) {
2559                     SvIV_set(sv, (IV)value);
2560                 } else {
2561                     SvUV_set(sv, value);
2562                     SvIsUV_on(sv);
2563                 }
2564
2565                 if (numtype & IS_NUMBER_NOT_INT) {
2566                     /* I believe that even if the original PV had decimals,
2567                        they are lost beyond the limit of the FP precision.
2568                        However, neither is canonical, so both only get p
2569                        flags.  NWC, 2000/11/25 */
2570                     /* Both already have p flags, so do nothing */
2571                 } else {
2572                     const NV nv = SvNVX(sv);
2573                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2574                         if (SvIVX(sv) == I_V(nv)) {
2575                             SvNOK_on(sv);
2576                         } else {
2577                             /* It had no "." so it must be integer.  */
2578                         }
2579                         SvIOK_on(sv);
2580                     } else {
2581                         /* between IV_MAX and NV(UV_MAX).
2582                            Could be slightly > UV_MAX */
2583
2584                         if (numtype & IS_NUMBER_NOT_INT) {
2585                             /* UV and NV both imprecise.  */
2586                         } else {
2587                             const UV nv_as_uv = U_V(nv);
2588
2589                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2590                                 SvNOK_on(sv);
2591                             }
2592                             SvIOK_on(sv);
2593                         }
2594                     }
2595                 }
2596             }
2597         }
2598         /* It might be more code efficient to go through the entire logic above
2599            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2600            gets complex and potentially buggy, so more programmer efficient
2601            to do it this way, by turning off the public flags:  */
2602         if (!numtype)
2603             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2604 #endif /* NV_PRESERVES_UV */
2605     }
2606     else  {
2607         if (isGV_with_GP(sv)) {
2608             glob_2number(MUTABLE_GV(sv));
2609             return 0.0;
2610         }
2611
2612         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2613             report_uninit(sv);
2614         assert (SvTYPE(sv) >= SVt_NV);
2615         /* Typically the caller expects that sv_any is not NULL now.  */
2616         /* XXX Ilya implies that this is a bug in callers that assume this
2617            and ideally should be fixed.  */
2618         return 0.0;
2619     }
2620 #if defined(USE_LONG_DOUBLE)
2621     DEBUG_c({
2622         STORE_NUMERIC_LOCAL_SET_STANDARD();
2623         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2624                       PTR2UV(sv), SvNVX(sv));
2625         RESTORE_NUMERIC_LOCAL();
2626     });
2627 #else
2628     DEBUG_c({
2629         STORE_NUMERIC_LOCAL_SET_STANDARD();
2630         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2631                       PTR2UV(sv), SvNVX(sv));
2632         RESTORE_NUMERIC_LOCAL();
2633     });
2634 #endif
2635     return SvNVX(sv);
2636 }
2637
2638 /*
2639 =for apidoc sv_2num
2640
2641 Return an SV with the numeric value of the source SV, doing any necessary
2642 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2643 access this function.
2644
2645 =cut
2646 */
2647
2648 SV *
2649 Perl_sv_2num(pTHX_ register SV *const sv)
2650 {
2651     PERL_ARGS_ASSERT_SV_2NUM;
2652
2653     if (!SvROK(sv))
2654         return sv;
2655     if (SvAMAGIC(sv)) {
2656         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2657         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2658         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2659             return sv_2num(tmpsv);
2660     }
2661     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2662 }
2663
2664 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2665  * UV as a string towards the end of buf, and return pointers to start and
2666  * end of it.
2667  *
2668  * We assume that buf is at least TYPE_CHARS(UV) long.
2669  */
2670
2671 static char *
2672 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2673 {
2674     char *ptr = buf + TYPE_CHARS(UV);
2675     char * const ebuf = ptr;
2676     int sign;
2677
2678     PERL_ARGS_ASSERT_UIV_2BUF;
2679
2680     if (is_uv)
2681         sign = 0;
2682     else if (iv >= 0) {
2683         uv = iv;
2684         sign = 0;
2685     } else {
2686         uv = -iv;
2687         sign = 1;
2688     }
2689     do {
2690         *--ptr = '0' + (char)(uv % 10);
2691     } while (uv /= 10);
2692     if (sign)
2693         *--ptr = '-';
2694     *peob = ebuf;
2695     return ptr;
2696 }
2697
2698 /*
2699 =for apidoc sv_2pv_flags
2700
2701 Returns a pointer to the string value of an SV, and sets *lp to its length.
2702 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2703 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2704 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2705
2706 =cut
2707 */
2708
2709 char *
2710 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2711 {
2712     dVAR;
2713     register char *s;
2714
2715     if (!sv) {
2716         if (lp)
2717             *lp = 0;
2718         return (char *)"";
2719     }
2720     if (SvGMAGICAL(sv)) {
2721         if (flags & SV_GMAGIC)
2722             mg_get(sv);
2723         if (SvPOKp(sv)) {
2724             if (lp)
2725                 *lp = SvCUR(sv);
2726             if (flags & SV_MUTABLE_RETURN)
2727                 return SvPVX_mutable(sv);
2728             if (flags & SV_CONST_RETURN)
2729                 return (char *)SvPVX_const(sv);
2730             return SvPVX(sv);
2731         }
2732         if (SvIOKp(sv) || SvNOKp(sv)) {
2733             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2734             STRLEN len;
2735
2736             if (SvIOKp(sv)) {
2737                 len = SvIsUV(sv)
2738                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2739                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2740             } else if(SvNVX(sv) == 0.0) {
2741                     tbuf[0] = '0';
2742                     tbuf[1] = 0;
2743                     len = 1;
2744             } else {
2745                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2746                 len = strlen(tbuf);
2747             }
2748             assert(!SvROK(sv));
2749             {
2750                 dVAR;
2751
2752                 SvUPGRADE(sv, SVt_PV);
2753                 if (lp)
2754                     *lp = len;
2755                 s = SvGROW_mutable(sv, len + 1);
2756                 SvCUR_set(sv, len);
2757                 SvPOKp_on(sv);
2758                 return (char*)memcpy(s, tbuf, len + 1);
2759             }
2760         }
2761         if (SvROK(sv)) {
2762             goto return_rok;
2763         }
2764         assert(SvTYPE(sv) >= SVt_PVMG);
2765         /* This falls through to the report_uninit near the end of the
2766            function. */
2767     } else if (SvTHINKFIRST(sv)) {
2768         if (SvROK(sv)) {
2769         return_rok:
2770             if (SvAMAGIC(sv)) {
2771                 SV *tmpstr;
2772                 if (flags & SV_SKIP_OVERLOAD)
2773                     return NULL;
2774                 tmpstr = AMG_CALLunary(sv, string_amg);
2775                 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2776                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2777                     /* Unwrap this:  */
2778                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2779                      */
2780
2781                     char *pv;
2782                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2783                         if (flags & SV_CONST_RETURN) {
2784                             pv = (char *) SvPVX_const(tmpstr);
2785                         } else {
2786                             pv = (flags & SV_MUTABLE_RETURN)
2787                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2788                         }
2789                         if (lp)
2790                             *lp = SvCUR(tmpstr);
2791                     } else {
2792                         pv = sv_2pv_flags(tmpstr, lp, flags);
2793                     }
2794                     if (SvUTF8(tmpstr))
2795                         SvUTF8_on(sv);
2796                     else
2797                         SvUTF8_off(sv);
2798                     return pv;
2799                 }
2800             }
2801             {
2802                 STRLEN len;
2803                 char *retval;
2804                 char *buffer;
2805                 SV *const referent = SvRV(sv);
2806
2807                 if (!referent) {
2808                     len = 7;
2809                     retval = buffer = savepvn("NULLREF", len);
2810                 } else if (SvTYPE(referent) == SVt_REGEXP) {
2811                     REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2812                     I32 seen_evals = 0;
2813
2814                     assert(re);
2815                         
2816                     /* If the regex is UTF-8 we want the containing scalar to
2817                        have an UTF-8 flag too */
2818                     if (RX_UTF8(re))
2819                         SvUTF8_on(sv);
2820                     else
2821                         SvUTF8_off(sv); 
2822
2823                     if ((seen_evals = RX_SEEN_EVALS(re)))
2824                         PL_reginterp_cnt += seen_evals;
2825
2826                     if (lp)
2827                         *lp = RX_WRAPLEN(re);
2828  
2829                     return RX_WRAPPED(re);
2830                 } else {
2831                     const char *const typestr = sv_reftype(referent, 0);
2832                     const STRLEN typelen = strlen(typestr);
2833                     UV addr = PTR2UV(referent);
2834                     const char *stashname = NULL;
2835                     STRLEN stashnamelen = 0; /* hush, gcc */
2836                     const char *buffer_end;
2837
2838                     if (SvOBJECT(referent)) {
2839                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2840
2841                         if (name) {
2842                             stashname = HEK_KEY(name);
2843                             stashnamelen = HEK_LEN(name);
2844
2845                             if (HEK_UTF8(name)) {
2846                                 SvUTF8_on(sv);
2847                             } else {
2848                                 SvUTF8_off(sv);
2849                             }
2850                         } else {
2851                             stashname = "__ANON__";
2852                             stashnamelen = 8;
2853                         }
2854                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2855                             + 2 * sizeof(UV) + 2 /* )\0 */;
2856                     } else {
2857                         len = typelen + 3 /* (0x */
2858                             + 2 * sizeof(UV) + 2 /* )\0 */;
2859                     }
2860
2861                     Newx(buffer, len, char);
2862                     buffer_end = retval = buffer + len;
2863
2864                     /* Working backwards  */
2865                     *--retval = '\0';
2866                     *--retval = ')';
2867                     do {
2868                         *--retval = PL_hexdigit[addr & 15];
2869                     } while (addr >>= 4);
2870                     *--retval = 'x';
2871                     *--retval = '0';
2872                     *--retval = '(';
2873
2874                     retval -= typelen;
2875                     memcpy(retval, typestr, typelen);
2876
2877                     if (stashname) {
2878                         *--retval = '=';
2879                         retval -= stashnamelen;
2880                         memcpy(retval, stashname, stashnamelen);
2881                     }
2882                     /* retval may not necessarily have reached the start of the
2883                        buffer here.  */
2884                     assert (retval >= buffer);
2885
2886                     len = buffer_end - retval - 1; /* -1 for that \0  */
2887                 }
2888                 if (lp)
2889                     *lp = len;
2890                 SAVEFREEPV(buffer);
2891                 return retval;
2892             }
2893         }
2894         if (SvREADONLY(sv) && !SvOK(sv)) {
2895             if (lp)
2896                 *lp = 0;
2897             if (flags & SV_UNDEF_RETURNS_NULL)
2898                 return NULL;
2899             if (ckWARN(WARN_UNINITIALIZED))
2900                 report_uninit(sv);
2901             return (char *)"";
2902         }
2903     }
2904     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2905         /* I'm assuming that if both IV and NV are equally valid then
2906            converting the IV is going to be more efficient */
2907         const U32 isUIOK = SvIsUV(sv);
2908         char buf[TYPE_CHARS(UV)];
2909         char *ebuf, *ptr;
2910         STRLEN len;
2911
2912         if (SvTYPE(sv) < SVt_PVIV)
2913             sv_upgrade(sv, SVt_PVIV);
2914         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2915         len = ebuf - ptr;
2916         /* inlined from sv_setpvn */
2917         s = SvGROW_mutable(sv, len + 1);
2918         Move(ptr, s, len, char);
2919         s += len;
2920         *s = '\0';
2921     }
2922     else if (SvNOKp(sv)) {
2923         if (SvTYPE(sv) < SVt_PVNV)
2924             sv_upgrade(sv, SVt_PVNV);
2925         if (SvNVX(sv) == 0.0) {
2926             s = SvGROW_mutable(sv, 2);
2927             *s++ = '0';
2928             *s = '\0';
2929         } else {
2930             dSAVE_ERRNO;
2931             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2932             s = SvGROW_mutable(sv, NV_DIG + 20);
2933             /* some Xenix systems wipe out errno here */
2934             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2935             RESTORE_ERRNO;
2936             while (*s) s++;
2937         }
2938 #ifdef hcx
2939         if (s[-1] == '.')
2940             *--s = '\0';
2941 #endif
2942     }
2943     else {
2944         if (isGV_with_GP(sv)) {
2945             GV *const gv = MUTABLE_GV(sv);
2946             SV *const buffer = sv_newmortal();
2947
2948             gv_efullname3(buffer, gv, "*");
2949
2950             assert(SvPOK(buffer));
2951             if (lp) {
2952                     *lp = SvCUR(buffer);
2953             }
2954             if ( SvUTF8(buffer) ) SvUTF8_on(sv);
2955             return SvPVX(buffer);
2956         }
2957
2958         if (lp)
2959             *lp = 0;
2960         if (flags & SV_UNDEF_RETURNS_NULL)
2961             return NULL;
2962         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2963             report_uninit(sv);
2964         if (SvTYPE(sv) < SVt_PV)
2965             /* Typically the caller expects that sv_any is not NULL now.  */
2966             sv_upgrade(sv, SVt_PV);
2967         return (char *)"";
2968     }
2969     {
2970         const STRLEN len = s - SvPVX_const(sv);
2971         if (lp) 
2972             *lp = len;
2973         SvCUR_set(sv, len);
2974     }
2975     SvPOK_on(sv);
2976     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2977                           PTR2UV(sv),SvPVX_const(sv)));
2978     if (flags & SV_CONST_RETURN)
2979         return (char *)SvPVX_const(sv);
2980     if (flags & SV_MUTABLE_RETURN)
2981         return SvPVX_mutable(sv);
2982     return SvPVX(sv);
2983 }
2984
2985 /*
2986 =for apidoc sv_copypv
2987
2988 Copies a stringified representation of the source SV into the
2989 destination SV.  Automatically performs any necessary mg_get and
2990 coercion of numeric values into strings.  Guaranteed to preserve
2991 UTF8 flag even from overloaded objects.  Similar in nature to
2992 sv_2pv[_flags] but operates directly on an SV instead of just the
2993 string.  Mostly uses sv_2pv_flags to do its work, except when that
2994 would lose the UTF-8'ness of the PV.
2995
2996 =cut
2997 */
2998
2999 void
3000 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3001 {
3002     STRLEN len;
3003     const char * const s = SvPV_const(ssv,len);
3004
3005     PERL_ARGS_ASSERT_SV_COPYPV;
3006
3007     sv_setpvn(dsv,s,len);
3008     if (SvUTF8(ssv))
3009         SvUTF8_on(dsv);
3010     else
3011         SvUTF8_off(dsv);
3012 }
3013
3014 /*
3015 =for apidoc sv_2pvbyte
3016
3017 Return a pointer to the byte-encoded representation of the SV, and set *lp
3018 to its length.  May cause the SV to be downgraded from UTF-8 as a
3019 side-effect.
3020
3021 Usually accessed via the C<SvPVbyte> macro.
3022
3023 =cut
3024 */
3025
3026 char *
3027 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3028 {
3029     PERL_ARGS_ASSERT_SV_2PVBYTE;
3030
3031     SvGETMAGIC(sv);
3032     sv_utf8_downgrade(sv,0);
3033     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3034 }
3035
3036 /*
3037 =for apidoc sv_2pvutf8
3038
3039 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3040 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3041
3042 Usually accessed via the C<SvPVutf8> macro.
3043
3044 =cut
3045 */
3046
3047 char *
3048 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3049 {
3050     PERL_ARGS_ASSERT_SV_2PVUTF8;
3051
3052     sv_utf8_upgrade(sv);
3053     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3054 }
3055
3056
3057 /*
3058 =for apidoc sv_2bool
3059
3060 This macro is only used by sv_true() or its macro equivalent, and only if
3061 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3062 It calls sv_2bool_flags with the SV_GMAGIC flag.
3063
3064 =for apidoc sv_2bool_flags
3065
3066 This function is only used by sv_true() and friends,  and only if
3067 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3068 contain SV_GMAGIC, then it does an mg_get() first.
3069
3070
3071 =cut
3072 */
3073
3074 bool
3075 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3076 {
3077     dVAR;
3078
3079     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3080
3081     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3082
3083     if (!SvOK(sv))
3084         return 0;
3085     if (SvROK(sv)) {
3086         if (SvAMAGIC(sv)) {
3087             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3088             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3089                 return cBOOL(SvTRUE(tmpsv));
3090         }
3091         return SvRV(sv) != 0;
3092     }
3093     if (SvPOKp(sv)) {
3094         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3095         if (Xpvtmp &&
3096                 (*sv->sv_u.svu_pv > '0' ||
3097                 Xpvtmp->xpv_cur > 1 ||
3098                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3099             return 1;
3100         else
3101             return 0;
3102     }
3103     else {
3104         if (SvIOKp(sv))
3105             return SvIVX(sv) != 0;
3106         else {
3107             if (SvNOKp(sv))
3108                 return SvNVX(sv) != 0.0;
3109             else {
3110                 if (isGV_with_GP(sv))
3111                     return TRUE;
3112                 else
3113                     return FALSE;
3114             }
3115         }
3116     }
3117 }
3118
3119 /*
3120 =for apidoc sv_utf8_upgrade
3121
3122 Converts the PV of an SV to its UTF-8-encoded form.
3123 Forces the SV to string form if it is not already.
3124 Will C<mg_get> on C<sv> if appropriate.
3125 Always sets the SvUTF8 flag to avoid future validity checks even
3126 if the whole string is the same in UTF-8 as not.
3127 Returns the number of bytes in the converted string
3128
3129 This is not as a general purpose byte encoding to Unicode interface:
3130 use the Encode extension for that.
3131
3132 =for apidoc sv_utf8_upgrade_nomg
3133
3134 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3135
3136 =for apidoc sv_utf8_upgrade_flags
3137
3138 Converts the PV of an SV to its UTF-8-encoded form.
3139 Forces the SV to string form if it is not already.
3140 Always sets the SvUTF8 flag to avoid future validity checks even
3141 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3142 will C<mg_get> on C<sv> if appropriate, else not.
3143 Returns the number of bytes in the converted string
3144 C<sv_utf8_upgrade> and
3145 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3146
3147 This is not as a general purpose byte encoding to Unicode interface:
3148 use the Encode extension for that.
3149
3150 =cut
3151
3152 The grow version is currently not externally documented.  It adds a parameter,
3153 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3154 have free after it upon return.  This allows the caller to reserve extra space
3155 that it intends to fill, to avoid extra grows.
3156
3157 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3158 which can be used to tell this function to not first check to see if there are
3159 any characters that are different in UTF-8 (variant characters) which would
3160 force it to allocate a new string to sv, but to assume there are.  Typically
3161 this flag is used by a routine that has already parsed the string to find that
3162 there are such characters, and passes this information on so that the work
3163 doesn't have to be repeated.
3164
3165 (One might think that the calling routine could pass in the position of the
3166 first such variant, so it wouldn't have to be found again.  But that is not the
3167 case, because typically when the caller is likely to use this flag, it won't be
3168 calling this routine unless it finds something that won't fit into a byte.
3169 Otherwise it tries to not upgrade and just use bytes.  But some things that
3170 do fit into a byte are variants in utf8, and the caller may not have been
3171 keeping track of these.)
3172
3173 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3174 isn't guaranteed due to having other routines do the work in some input cases,
3175 or if the input is already flagged as being in utf8.
3176
3177 The speed of this could perhaps be improved for many cases if someone wanted to
3178 write a fast function that counts the number of variant characters in a string,
3179 especially if it could return the position of the first one.
3180
3181 */
3182
3183 STRLEN
3184 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3185 {
3186     dVAR;
3187
3188     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3189
3190     if (sv == &PL_sv_undef)
3191         return 0;
3192     if (!SvPOK(sv)) {
3193         STRLEN len = 0;
3194         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3195             (void) sv_2pv_flags(sv,&len, flags);
3196             if (SvUTF8(sv)) {
3197                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3198                 return len;
3199             }
3200         } else {
3201             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3202         }
3203     }
3204
3205     if (SvUTF8(sv)) {
3206         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3207         return SvCUR(sv);
3208     }
3209
3210     if (SvIsCOW(sv)) {
3211         sv_force_normal_flags(sv, 0);
3212     }
3213
3214     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3215         sv_recode_to_utf8(sv, PL_encoding);
3216         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3217         return SvCUR(sv);
3218     }
3219
3220     if (SvCUR(sv) == 0) {
3221         if (extra) SvGROW(sv, extra);
3222     } else { /* Assume Latin-1/EBCDIC */
3223         /* This function could be much more efficient if we
3224          * had a FLAG in SVs to signal if there are any variant
3225          * chars in the PV.  Given that there isn't such a flag
3226          * make the loop as fast as possible (although there are certainly ways
3227          * to speed this up, eg. through vectorization) */
3228         U8 * s = (U8 *) SvPVX_const(sv);
3229         U8 * e = (U8 *) SvEND(sv);
3230         U8 *t = s;
3231         STRLEN two_byte_count = 0;
3232         
3233         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3234
3235         /* See if really will need to convert to utf8.  We mustn't rely on our
3236          * incoming SV being well formed and having a trailing '\0', as certain
3237          * code in pp_formline can send us partially built SVs. */
3238
3239         while (t < e) {
3240             const U8 ch = *t++;
3241             if (NATIVE_IS_INVARIANT(ch)) continue;
3242
3243             t--;    /* t already incremented; re-point to first variant */
3244             two_byte_count = 1;
3245             goto must_be_utf8;
3246         }
3247
3248         /* utf8 conversion not needed because all are invariants.  Mark as
3249          * UTF-8 even if no variant - saves scanning loop */
3250         SvUTF8_on(sv);
3251         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3252         return SvCUR(sv);
3253
3254 must_be_utf8:
3255
3256         /* Here, the string should be converted to utf8, either because of an
3257          * input flag (two_byte_count = 0), or because a character that
3258          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3259          * the beginning of the string (if we didn't examine anything), or to
3260          * the first variant.  In either case, everything from s to t - 1 will
3261          * occupy only 1 byte each on output.
3262          *
3263          * There are two main ways to convert.  One is to create a new string
3264          * and go through the input starting from the beginning, appending each
3265          * converted value onto the new string as we go along.  It's probably
3266          * best to allocate enough space in the string for the worst possible
3267          * case rather than possibly running out of space and having to
3268          * reallocate and then copy what we've done so far.  Since everything
3269          * from s to t - 1 is invariant, the destination can be initialized
3270          * with these using a fast memory copy
3271          *
3272          * The other way is to figure out exactly how big the string should be
3273          * by parsing the entire input.  Then you don't have to make it big
3274          * enough to handle the worst possible case, and more importantly, if
3275          * the string you already have is large enough, you don't have to
3276          * allocate a new string, you can copy the last character in the input
3277          * string to the final position(s) that will be occupied by the
3278          * converted string and go backwards, stopping at t, since everything
3279          * before that is invariant.
3280          *
3281          * There are advantages and disadvantages to each method.
3282          *
3283          * In the first method, we can allocate a new string, do the memory
3284          * copy from the s to t - 1, and then proceed through the rest of the
3285          * string byte-by-byte.
3286          *
3287          * In the second method, we proceed through the rest of the input
3288          * string just calculating how big the converted string will be.  Then
3289          * there are two cases:
3290          *  1)  if the string has enough extra space to handle the converted
3291          *      value.  We go backwards through the string, converting until we
3292          *      get to the position we are at now, and then stop.  If this
3293          *      position is far enough along in the string, this method is
3294          *      faster than the other method.  If the memory copy were the same
3295          *      speed as the byte-by-byte loop, that position would be about
3296          *      half-way, as at the half-way mark, parsing to the end and back
3297          *      is one complete string's parse, the same amount as starting
3298          *      over and going all the way through.  Actually, it would be
3299          *      somewhat less than half-way, as it's faster to just count bytes
3300          *      than to also copy, and we don't have the overhead of allocating
3301          *      a new string, changing the scalar to use it, and freeing the
3302          *      existing one.  But if the memory copy is fast, the break-even
3303          *      point is somewhere after half way.  The counting loop could be
3304          *      sped up by vectorization, etc, to move the break-even point
3305          *      further towards the beginning.
3306          *  2)  if the string doesn't have enough space to handle the converted
3307          *      value.  A new string will have to be allocated, and one might
3308          *      as well, given that, start from the beginning doing the first
3309          *      method.  We've spent extra time parsing the string and in
3310          *      exchange all we've gotten is that we know precisely how big to
3311          *      make the new one.  Perl is more optimized for time than space,
3312          *      so this case is a loser.
3313          * So what I've decided to do is not use the 2nd method unless it is
3314          * guaranteed that a new string won't have to be allocated, assuming
3315          * the worst case.  I also decided not to put any more conditions on it
3316          * than this, for now.  It seems likely that, since the worst case is
3317          * twice as big as the unknown portion of the string (plus 1), we won't
3318          * be guaranteed enough space, causing us to go to the first method,
3319          * unless the string is short, or the first variant character is near
3320          * the end of it.  In either of these cases, it seems best to use the
3321          * 2nd method.  The only circumstance I can think of where this would
3322          * be really slower is if the string had once had much more data in it
3323          * than it does now, but there is still a substantial amount in it  */
3324
3325         {
3326             STRLEN invariant_head = t - s;
3327             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3328             if (SvLEN(sv) < size) {
3329
3330                 /* Here, have decided to allocate a new string */
3331
3332                 U8 *dst;
3333                 U8 *d;
3334
3335                 Newx(dst, size, U8);
3336
3337                 /* If no known invariants at the beginning of the input string,
3338                  * set so starts from there.  Otherwise, can use memory copy to
3339                  * get up to where we are now, and then start from here */
3340
3341                 if (invariant_head <= 0) {
3342                     d = dst;
3343                 } else {
3344                     Copy(s, dst, invariant_head, char);
3345                     d = dst + invariant_head;
3346                 }
3347
3348                 while (t < e) {
3349                     const UV uv = NATIVE8_TO_UNI(*t++);
3350                     if (UNI_IS_INVARIANT(uv))
3351                         *d++ = (U8)UNI_TO_NATIVE(uv);
3352                     else {
3353                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3354                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3355                     }
3356                 }
3357                 *d = '\0';
3358                 SvPV_free(sv); /* No longer using pre-existing string */
3359                 SvPV_set(sv, (char*)dst);
3360                 SvCUR_set(sv, d - dst);
3361                 SvLEN_set(sv, size);
3362             } else {
3363
3364                 /* Here, have decided to get the exact size of the string.
3365                  * Currently this happens only when we know that there is
3366                  * guaranteed enough space to fit the converted string, so
3367                  * don't have to worry about growing.  If two_byte_count is 0,
3368                  * then t points to the first byte of the string which hasn't
3369                  * been examined yet.  Otherwise two_byte_count is 1, and t
3370                  * points to the first byte in the string that will expand to
3371                  * two.  Depending on this, start examining at t or 1 after t.
3372                  * */
3373
3374                 U8 *d = t + two_byte_count;
3375
3376
3377                 /* Count up the remaining bytes that expand to two */
3378
3379                 while (d < e) {
3380                     const U8 chr = *d++;
3381                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3382                 }
3383
3384                 /* The string will expand by just the number of bytes that
3385                  * occupy two positions.  But we are one afterwards because of
3386                  * the increment just above.  This is the place to put the
3387                  * trailing NUL, and to set the length before we decrement */
3388
3389                 d += two_byte_count;
3390                 SvCUR_set(sv, d - s);
3391                 *d-- = '\0';
3392
3393
3394                 /* Having decremented d, it points to the position to put the
3395                  * very last byte of the expanded string.  Go backwards through
3396                  * the string, copying and expanding as we go, stopping when we
3397                  * get to the part that is invariant the rest of the way down */
3398
3399                 e--;
3400                 while (e >= t) {
3401                     const U8 ch = NATIVE8_TO_UNI(*e--);
3402                     if (UNI_IS_INVARIANT(ch)) {
3403                         *d-- = UNI_TO_NATIVE(ch);
3404                     } else {
3405                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3406                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3407                     }
3408                 }
3409             }
3410
3411             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3412                 /* Update pos. We do it at the end rather than during
3413                  * the upgrade, to avoid slowing down the common case
3414                  * (upgrade without pos) */
3415                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3416                 if (mg) {
3417                     I32 pos = mg->mg_len;
3418                     if (pos > 0 && (U32)pos > invariant_head) {
3419                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3420                         STRLEN n = (U32)pos - invariant_head;
3421                         while (n > 0) {
3422                             if (UTF8_IS_START(*d))
3423                                 d++;
3424                             d++;
3425                             n--;
3426                         }
3427                         mg->mg_len  = d - (U8*)SvPVX(sv);
3428                     }
3429                 }
3430                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3431                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3432             }
3433         }
3434     }
3435
3436     /* Mark as UTF-8 even if no variant - saves scanning loop */
3437     SvUTF8_on(sv);
3438     return SvCUR(sv);
3439 }
3440
3441 /*
3442 =for apidoc sv_utf8_downgrade
3443
3444 Attempts to convert the PV of an SV from characters to bytes.
3445 If the PV contains a character that cannot fit
3446 in a byte, this conversion will fail;
3447 in this case, either returns false or, if C<fail_ok> is not
3448 true, croaks.
3449
3450 This is not as a general purpose Unicode to byte encoding interface:
3451 use the Encode extension for that.
3452
3453 =cut
3454 */
3455
3456 bool
3457 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3458 {
3459     dVAR;
3460
3461     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3462
3463     if (SvPOKp(sv) && SvUTF8(sv)) {
3464         if (SvCUR(sv)) {
3465             U8 *s;
3466             STRLEN len;
3467             int mg_flags = SV_GMAGIC;
3468
3469             if (SvIsCOW(sv)) {
3470                 sv_force_normal_flags(sv, 0);
3471             }
3472             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3473                 /* update pos */
3474                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3475                 if (mg) {
3476                     I32 pos = mg->mg_len;
3477                     if (pos > 0) {
3478                         sv_pos_b2u(sv, &pos);
3479                         mg_flags = 0; /* sv_pos_b2u does get magic */
3480                         mg->mg_len  = pos;
3481                     }
3482                 }
3483                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3484                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3485
3486             }
3487             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3488
3489             if (!utf8_to_bytes(s, &len)) {
3490                 if (fail_ok)
3491                     return FALSE;
3492                 else {
3493                     if (PL_op)
3494                         Perl_croak(aTHX_ "Wide character in %s",
3495                                    OP_DESC(PL_op));
3496                     else
3497                         Perl_croak(aTHX_ "Wide character");
3498                 }
3499             }
3500             SvCUR_set(sv, len);
3501         }
3502     }
3503     SvUTF8_off(sv);
3504     return TRUE;
3505 }
3506
3507 /*
3508 =for apidoc sv_utf8_encode
3509
3510 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3511 flag off so that it looks like octets again.
3512
3513 =cut
3514 */
3515
3516 void
3517 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3518 {
3519     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3520
3521     if (SvIsCOW(sv)) {
3522         sv_force_normal_flags(sv, 0);
3523     }
3524     if (SvREADONLY(sv)) {
3525         Perl_croak_no_modify(aTHX);
3526     }
3527     (void) sv_utf8_upgrade(sv);
3528     SvUTF8_off(sv);
3529 }
3530
3531 /*
3532 =for apidoc sv_utf8_decode
3533
3534 If the PV of the SV is an octet sequence in UTF-8
3535 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3536 so that it looks like a character.  If the PV contains only single-byte
3537 characters, the C<SvUTF8> flag stays off.
3538 Scans PV for validity and returns false if the PV is invalid UTF-8.
3539
3540 =cut
3541 */
3542
3543 bool
3544 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3545 {
3546     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3547
3548     if (SvPOKp(sv)) {
3549         const U8 *start, *c;
3550         const U8 *e;
3551
3552         /* The octets may have got themselves encoded - get them back as
3553          * bytes
3554          */
3555         if (!sv_utf8_downgrade(sv, TRUE))
3556             return FALSE;
3557
3558         /* it is actually just a matter of turning the utf8 flag on, but
3559          * we want to make sure everything inside is valid utf8 first.
3560          */
3561         c = start = (const U8 *) SvPVX_const(sv);
3562         if (!is_utf8_string(c, SvCUR(sv)+1))
3563             return FALSE;
3564         e = (const U8 *) SvEND(sv);
3565         while (c < e) {
3566             const U8 ch = *c++;
3567             if (!UTF8_IS_INVARIANT(ch)) {
3568                 SvUTF8_on(sv);
3569                 break;
3570             }
3571         }
3572         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3573             /* adjust pos to the start of a UTF8 char sequence */
3574             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3575             if (mg) {
3576                 I32 pos = mg->mg_len;
3577                 if (pos > 0) {
3578                     for (c = start + pos; c > start; c--) {
3579                         if (UTF8_IS_START(*c))
3580                             break;
3581                     }
3582                     mg->mg_len  = c - start;
3583                 }
3584             }
3585             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3586                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3587         }
3588     }
3589     return TRUE;
3590 }
3591
3592 /*
3593 =for apidoc sv_setsv
3594
3595 Copies the contents of the source SV C<ssv> into the destination SV
3596 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3597 function if the source SV needs to be reused.  Does not handle 'set' magic.
3598 Loosely speaking, it performs a copy-by-value, obliterating any previous
3599 content of the destination.
3600
3601 You probably want to use one of the assortment of wrappers, such as
3602 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3603 C<SvSetMagicSV_nosteal>.
3604
3605 =for apidoc sv_setsv_flags
3606
3607 Copies the contents of the source SV C<ssv> into the destination SV
3608 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3609 function if the source SV needs to be reused.  Does not handle 'set' magic.
3610 Loosely speaking, it performs a copy-by-value, obliterating any previous
3611 content of the destination.
3612 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3613 C<ssv> if appropriate, else not.  If the C<flags>
3614 parameter has the C<NOSTEAL> bit set then the
3615 buffers of temps will not be stolen.  <sv_setsv>
3616 and C<sv_setsv_nomg> are implemented in terms of this function.
3617
3618 You probably want to use one of the assortment of wrappers, such as
3619 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3620 C<SvSetMagicSV_nosteal>.
3621
3622 This is the primary function for copying scalars, and most other
3623 copy-ish functions and macros use this underneath.
3624
3625 =cut
3626 */
3627
3628 static void
3629 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3630 {
3631     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3632     HV *old_stash = NULL;
3633
3634     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3635
3636     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3637         const char * const name = GvNAME(sstr);
3638         const STRLEN len = GvNAMELEN(sstr);
3639         {
3640             if (dtype >= SVt_PV) {
3641                 SvPV_free(dstr);
3642                 SvPV_set(dstr, 0);
3643                 SvLEN_set(dstr, 0);
3644                 SvCUR_set(dstr, 0);
3645             }
3646             SvUPGRADE(dstr, SVt_PVGV);
3647             (void)SvOK_off(dstr);
3648             /* FIXME - why are we doing this, then turning it off and on again
3649                below?  */
3650             isGV_with_GP_on(dstr);
3651         }
3652         GvSTASH(dstr) = GvSTASH(sstr);
3653         if (GvSTASH(dstr))
3654             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3655         gv_name_set(MUTABLE_GV(dstr), name, len,
3656                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3657         SvFAKE_on(dstr);        /* can coerce to non-glob */
3658     }
3659
3660     if(GvGP(MUTABLE_GV(sstr))) {
3661         /* If source has method cache entry, clear it */
3662         if(GvCVGEN(sstr)) {
3663             SvREFCNT_dec(GvCV(sstr));
3664             GvCV_set(sstr, NULL);
3665             GvCVGEN(sstr) = 0;
3666         }
3667         /* If source has a real method, then a method is
3668            going to change */
3669         else if(
3670          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3671         ) {
3672             mro_changes = 1;
3673         }
3674     }
3675
3676     /* If dest already had a real method, that's a change as well */
3677     if(
3678         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3679      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3680     ) {
3681         mro_changes = 1;
3682     }
3683
3684     /* We don't need to check the name of the destination if it was not a
3685        glob to begin with. */
3686     if(dtype == SVt_PVGV) {
3687         const char * const name = GvNAME((const GV *)dstr);
3688         if(
3689             strEQ(name,"ISA")
3690          /* The stash may have been detached from the symbol table, so
3691             check its name. */
3692          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3693          && GvAV((const GV *)sstr)
3694         )
3695             mro_changes = 2;
3696         else {
3697             const STRLEN len = GvNAMELEN(dstr);
3698             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3699              || (len == 1 && name[0] == ':')) {
3700                 mro_changes = 3;
3701
3702                 /* Set aside the old stash, so we can reset isa caches on
3703                    its subclasses. */
3704                 if((old_stash = GvHV(dstr)))
3705                     /* Make sure we do not lose it early. */
3706                     SvREFCNT_inc_simple_void_NN(
3707                      sv_2mortal((SV *)old_stash)
3708                     );
3709             }
3710         }
3711     }
3712
3713     gp_free(MUTABLE_GV(dstr));
3714     isGV_with_GP_off(dstr);
3715     (void)SvOK_off(dstr);
3716     isGV_with_GP_on(dstr);
3717     GvINTRO_off(dstr);          /* one-shot flag */
3718     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3719     if (SvTAINTED(sstr))
3720         SvTAINT(dstr);
3721     if (GvIMPORTED(dstr) != GVf_IMPORTED
3722         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3723         {
3724             GvIMPORTED_on(dstr);
3725         }
3726     GvMULTI_on(dstr);
3727     if(mro_changes == 2) {
3728         MAGIC *mg;
3729         SV * const sref = (SV *)GvAV((const GV *)dstr);
3730         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3731             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3732                 AV * const ary = newAV();
3733                 av_push(ary, mg->mg_obj); /* takes the refcount */
3734                 mg->mg_obj = (SV *)ary;
3735             }
3736             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3737         }
3738         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3739         mro_isa_changed_in(GvSTASH(dstr));
3740     }
3741     else if(mro_changes == 3) {
3742         HV * const stash = GvHV(dstr);
3743         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3744             mro_package_moved(
3745                 stash, old_stash,
3746                 (GV *)dstr, 0
3747             );
3748     }
3749     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3750     return;
3751 }
3752
3753 static void
3754 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3755 {
3756     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3757     SV *dref = NULL;
3758     const int intro = GvINTRO(dstr);
3759     SV **location;
3760     U8 import_flag = 0;
3761     const U32 stype = SvTYPE(sref);
3762
3763     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3764
3765     if (intro) {
3766         GvINTRO_off(dstr);      /* one-shot flag */
3767         GvLINE(dstr) = CopLINE(PL_curcop);
3768         GvEGV(dstr) = MUTABLE_GV(dstr);
3769     }
3770     GvMULTI_on(dstr);
3771     switch (stype) {
3772     case SVt_PVCV:
3773         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3774         import_flag = GVf_IMPORTED_CV;
3775         goto common;
3776     case SVt_PVHV:
3777         location = (SV **) &GvHV(dstr);
3778         import_flag = GVf_IMPORTED_HV;
3779         goto common;
3780     case SVt_PVAV:
3781         location = (SV **) &GvAV(dstr);
3782         import_flag = GVf_IMPORTED_AV;
3783         goto common;
3784     case SVt_PVIO:
3785         location = (SV **) &GvIOp(dstr);
3786         goto common;
3787     case SVt_PVFM:
3788         location = (SV **) &GvFORM(dstr);
3789         goto common;
3790     default:
3791         location = &GvSV(dstr);
3792         import_flag = GVf_IMPORTED_SV;
3793     common:
3794         if (intro) {
3795             if (stype == SVt_PVCV) {
3796                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3797                 if (GvCVGEN(dstr)) {
3798                     SvREFCNT_dec(GvCV(dstr));
3799                     GvCV_set(dstr, NULL);
3800                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3801                 }
3802             }
3803             SAVEGENERICSV(*location);
3804         }
3805         else
3806             dref = *location;
3807         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3808             CV* const cv = MUTABLE_CV(*location);
3809             if (cv) {
3810                 if (!GvCVGEN((const GV *)dstr) &&
3811                     (CvROOT(cv) || CvXSUB(cv)) &&
3812                     /* redundant check that avoids creating the extra SV
3813                        most of the time: */
3814                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3815                     {
3816                         SV * const new_const_sv =
3817                             CvCONST((const CV *)sref)
3818                                  ? cv_const_sv((const CV *)sref)
3819                                  : NULL;
3820                         report_redefined_cv(
3821                            sv_2mortal(Perl_newSVpvf(aTHX_
3822                                 "%"HEKf"::%"HEKf,
3823                                 HEKfARG(
3824                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3825                                 ),
3826                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3827                            )),
3828                            cv,
3829                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3830                         );
3831                     }
3832                 if (!intro)
3833                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3834                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3835                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3836                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3837             }
3838             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3839             GvASSUMECV_on(dstr);
3840             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3841         }
3842         *location = sref;
3843         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3844             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3845             GvFLAGS(dstr) |= import_flag;
3846         }
3847         if (stype == SVt_PVHV) {
3848             const char * const name = GvNAME((GV*)dstr);
3849             const STRLEN len = GvNAMELEN(dstr);
3850             if (
3851                 (
3852                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3853                 || (len == 1 && name[0] == ':')
3854                 )
3855              && (!dref || HvENAME_get(dref))
3856             ) {
3857                 mro_package_moved(
3858                     (HV *)sref, (HV *)dref,
3859                     (GV *)dstr, 0
3860                 );
3861             }
3862         }
3863         else if (
3864             stype == SVt_PVAV && sref != dref
3865          && strEQ(GvNAME((GV*)dstr), "ISA")
3866          /* The stash may have been detached from the symbol table, so
3867             check its name before doing anything. */
3868          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3869         ) {
3870             MAGIC *mg;
3871             MAGIC * const omg = dref && SvSMAGICAL(dref)
3872                                  ? mg_find(dref, PERL_MAGIC_isa)
3873                                  : NULL;
3874             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3875                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3876                     AV * const ary = newAV();
3877                     av_push(ary, mg->mg_obj); /* takes the refcount */
3878                     mg->mg_obj = (SV *)ary;
3879                 }
3880                 if (omg) {
3881                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3882                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3883                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3884                         while (items--)
3885                             av_push(
3886                              (AV *)mg->mg_obj,
3887                              SvREFCNT_inc_simple_NN(*svp++)
3888                             );
3889                     }
3890                     else
3891                         av_push(
3892                          (AV *)mg->mg_obj,
3893                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3894                         );
3895                 }
3896                 else
3897                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3898             }
3899             else
3900             {
3901                 sv_magic(
3902                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3903                 );
3904                 mg = mg_find(sref, PERL_MAGIC_isa);
3905             }
3906             /* Since the *ISA assignment could have affected more than
3907                one stash, don't call mro_isa_changed_in directly, but let
3908                magic_clearisa do it for us, as it already has the logic for
3909                dealing with globs vs arrays of globs. */
3910             assert(mg);
3911             Perl_magic_clearisa(aTHX_ NULL, mg);
3912         }
3913         break;
3914     }
3915     SvREFCNT_dec(dref);
3916     if (SvTAINTED(sstr))
3917         SvTAINT(dstr);
3918     return;
3919 }
3920
3921 void
3922 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3923 {
3924     dVAR;
3925     register U32 sflags;
3926     register int dtype;
3927     register svtype stype;
3928
3929     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3930
3931     if (sstr == dstr)
3932         return;
3933
3934     if (SvIS_FREED(dstr)) {
3935         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3936                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3937     }
3938     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3939     if (!sstr)
3940         sstr = &PL_sv_undef;
3941     if (SvIS_FREED(sstr)) {
3942         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3943                    (void*)sstr, (void*)dstr);
3944     }
3945     stype = SvTYPE(sstr);
3946     dtype = SvTYPE(dstr);
3947
3948     (void)SvAMAGIC_off(dstr);
3949     if ( SvVOK(dstr) )
3950     {
3951         /* need to nuke the magic */
3952         mg_free(dstr);
3953     }
3954
3955     /* There's a lot of redundancy below but we're going for speed here */
3956
3957     switch (stype) {
3958     case SVt_NULL:
3959       undef_sstr:
3960         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3961             (void)SvOK_off(dstr);
3962             return;
3963         }
3964         break;
3965     case SVt_IV:
3966         if (SvIOK(sstr)) {
3967             switch (dtype) {
3968             case SVt_NULL:
3969                 sv_upgrade(dstr, SVt_IV);
3970                 break;
3971             case SVt_NV:
3972             case SVt_PV:
3973                 sv_upgrade(dstr, SVt_PVIV);
3974                 break;
3975             case SVt_PVGV:
3976             case SVt_PVLV:
3977                 goto end_of_first_switch;
3978             }
3979             (void)SvIOK_only(dstr);
3980             SvIV_set(dstr,  SvIVX(sstr));
3981             if (SvIsUV(sstr))
3982                 SvIsUV_on(dstr);
3983             /* SvTAINTED can only be true if the SV has taint magic, which in
3984                turn means that the SV type is PVMG (or greater). This is the
3985                case statement for SVt_IV, so this cannot be true (whatever gcov
3986                may say).  */
3987             assert(!SvTAINTED(sstr));
3988             return;
3989         }
3990         if (!SvROK(sstr))
3991             goto undef_sstr;
3992         if (dtype < SVt_PV && dtype != SVt_IV)
3993             sv_upgrade(dstr, SVt_IV);
3994         break;
3995
3996     case SVt_NV:
3997         if (SvNOK(sstr)) {
3998             switch (dtype) {
3999             case SVt_NULL:
4000             case SVt_IV:
4001                 sv_upgrade(dstr, SVt_NV);
4002                 break;
4003             case SVt_PV:
4004             case SVt_PVIV:
4005                 sv_upgrade(dstr, SVt_PVNV);
4006                 break;
4007             case SVt_PVGV:
4008             case SVt_PVLV:
4009                 goto end_of_first_switch;
4010             }
4011             SvNV_set(dstr, SvNVX(sstr));
4012             (void)SvNOK_only(dstr);
4013             /* SvTAINTED can only be true if the SV has taint magic, which in
4014                turn means that the SV type is PVMG (or greater). This is the
4015                case statement for SVt_NV, so this cannot be true (whatever gcov
4016                may say).  */
4017             assert(!SvTAINTED(sstr));
4018             return;
4019         }
4020         goto undef_sstr;
4021
4022     case SVt_PVFM:
4023 #ifdef PERL_OLD_COPY_ON_WRITE
4024         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4025             if (dtype < SVt_PVIV)
4026                 sv_upgrade(dstr, SVt_PVIV);
4027             break;
4028         }
4029         /* Fall through */
4030 #endif
4031     case SVt_PV:
4032         if (dtype < SVt_PV)
4033             sv_upgrade(dstr, SVt_PV);
4034         break;
4035     case SVt_PVIV:
4036         if (dtype < SVt_PVIV)
4037             sv_upgrade(dstr, SVt_PVIV);
4038         break;
4039     case SVt_PVNV:
4040         if (dtype < SVt_PVNV)
4041             sv_upgrade(dstr, SVt_PVNV);
4042         break;
4043     default:
4044         {
4045         const char * const type = sv_reftype(sstr,0);
4046         if (PL_op)
4047             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4048         else
4049             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4050         }
4051         break;
4052
4053     case SVt_REGEXP:
4054         if (dtype < SVt_REGEXP)
4055             sv_upgrade(dstr, SVt_REGEXP);
4056         break;
4057
4058         /* case SVt_BIND: */
4059     case SVt_PVLV:
4060     case SVt_PVGV:
4061     case SVt_PVMG:
4062         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4063             mg_get(sstr);
4064             if (SvTYPE(sstr) != stype)
4065                 stype = SvTYPE(sstr);
4066         }
4067         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4068                     glob_assign_glob(dstr, sstr, dtype);
4069                     return;
4070         }
4071         if (stype == SVt_PVLV)
4072             SvUPGRADE(dstr, SVt_PVNV);
4073         else
4074             SvUPGRADE(dstr, (svtype)stype);
4075     }
4076  end_of_first_switch:
4077
4078     /* dstr may have been upgraded.  */
4079     dtype = SvTYPE(dstr);
4080     sflags = SvFLAGS(sstr);
4081
4082     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
4083         /* Assigning to a subroutine sets the prototype.  */
4084         if (SvOK(sstr)) {
4085             STRLEN len;
4086             const char *const ptr = SvPV_const(sstr, len);
4087
4088             SvGROW(dstr, len + 1);
4089             Copy(ptr, SvPVX(dstr), len + 1, char);
4090             SvCUR_set(dstr, len);
4091             SvPOK_only(dstr);
4092             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4093             CvAUTOLOAD_off(dstr);
4094         } else {
4095             SvOK_off(dstr);
4096         }
4097     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4098         const char * const type = sv_reftype(dstr,0);
4099         if (PL_op)
4100             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4101         else
4102             Perl_croak(aTHX_ "Cannot copy to %s", type);
4103     } else if (sflags & SVf_ROK) {
4104         if (isGV_with_GP(dstr)
4105             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4106             sstr = SvRV(sstr);
4107             if (sstr == dstr) {
4108                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4109                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4110                 {
4111                     GvIMPORTED_on(dstr);
4112                 }
4113                 GvMULTI_on(dstr);
4114                 return;
4115             }
4116             glob_assign_glob(dstr, sstr, dtype);
4117             return;
4118         }
4119
4120         if (dtype >= SVt_PV) {
4121             if (isGV_with_GP(dstr)) {
4122                 glob_assign_ref(dstr, sstr);
4123                 return;
4124             }
4125             if (SvPVX_const(dstr)) {
4126                 SvPV_free(dstr);
4127                 SvLEN_set(dstr, 0);
4128                 SvCUR_set(dstr, 0);
4129             }
4130         }
4131         (void)SvOK_off(dstr);
4132         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4133         SvFLAGS(dstr) |= sflags & SVf_ROK;
4134         assert(!(sflags & SVp_NOK));
4135         assert(!(sflags & SVp_IOK));
4136         assert(!(sflags & SVf_NOK));
4137         assert(!(sflags & SVf_IOK));
4138     }
4139     else if (isGV_with_GP(dstr)) {
4140         if (!(sflags & SVf_OK)) {
4141             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4142                            "Undefined value assigned to typeglob");
4143         }
4144         else {
4145             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4146             if (dstr != (const SV *)gv) {
4147                 const char * const name = GvNAME((const GV *)dstr);
4148                 const STRLEN len = GvNAMELEN(dstr);
4149                 HV *old_stash = NULL;
4150                 bool reset_isa = FALSE;
4151                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4152                  || (len == 1 && name[0] == ':')) {
4153                     /* Set aside the old stash, so we can reset isa caches
4154                        on its subclasses. */
4155                     if((old_stash = GvHV(dstr))) {
4156                         /* Make sure we do not lose it early. */
4157                         SvREFCNT_inc_simple_void_NN(
4158                          sv_2mortal((SV *)old_stash)
4159                         );
4160                     }
4161                     reset_isa = TRUE;
4162                 }
4163
4164                 if (GvGP(dstr))
4165                     gp_free(MUTABLE_GV(dstr));
4166                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4167
4168                 if (reset_isa) {
4169                     HV * const stash = GvHV(dstr);
4170                     if(
4171                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4172                     )
4173                         mro_package_moved(
4174                          stash, old_stash,
4175                          (GV *)dstr, 0
4176                         );
4177                 }
4178             }
4179         }
4180     }
4181     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4182         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4183     }
4184     else if (sflags & SVp_POK) {
4185         bool isSwipe = 0;
4186
4187         /*
4188          * Check to see if we can just swipe the string.  If so, it's a
4189          * possible small lose on short strings, but a big win on long ones.
4190          * It might even be a win on short strings if SvPVX_const(dstr)
4191          * has to be allocated and SvPVX_const(sstr) has to be freed.
4192          * Likewise if we can set up COW rather than doing an actual copy, we
4193          * drop to the else clause, as the swipe code and the COW setup code
4194          * have much in common.
4195          */
4196
4197         /* Whichever path we take through the next code, we want this true,
4198            and doing it now facilitates the COW check.  */
4199         (void)SvPOK_only(dstr);
4200
4201         if (
4202             /* If we're already COW then this clause is not true, and if COW
4203                is allowed then we drop down to the else and make dest COW 
4204                with us.  If caller hasn't said that we're allowed to COW
4205                shared hash keys then we don't do the COW setup, even if the
4206                source scalar is a shared hash key scalar.  */
4207             (((flags & SV_COW_SHARED_HASH_KEYS)
4208                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4209                : 1 /* If making a COW copy is forbidden then the behaviour we
4210                        desire is as if the source SV isn't actually already
4211                        COW, even if it is.  So we act as if the source flags
4212                        are not COW, rather than actually testing them.  */
4213               )
4214 #ifndef PERL_OLD_COPY_ON_WRITE
4215              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4216                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4217                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4218                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4219                 but in turn, it's somewhat dead code, never expected to go
4220                 live, but more kept as a placeholder on how to do it better
4221                 in a newer implementation.  */
4222              /* If we are COW and dstr is a suitable target then we drop down
4223                 into the else and make dest a COW of us.  */
4224              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4225 #endif
4226              )
4227             &&
4228             !(isSwipe =
4229                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4230                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4231                  (!(flags & SV_NOSTEAL)) &&
4232                                         /* and we're allowed to steal temps */
4233                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4234                  SvLEN(sstr))             /* and really is a string */
4235 #ifdef PERL_OLD_COPY_ON_WRITE
4236             && ((flags & SV_COW_SHARED_HASH_KEYS)
4237                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4238                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4239                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4240                 : 1)
4241 #endif
4242             ) {
4243             /* Failed the swipe test, and it's not a shared hash key either.
4244                Have to copy the string.  */
4245             STRLEN len = SvCUR(sstr);
4246             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4247             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4248             SvCUR_set(dstr, len);
4249             *SvEND(dstr) = '\0';
4250         } else {
4251             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4252                be true in here.  */
4253             /* Either it's a shared hash key, or it's suitable for
4254                copy-on-write or we can swipe the string.  */
4255             if (DEBUG_C_TEST) {
4256                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4257                 sv_dump(sstr);
4258                 sv_dump(dstr);
4259             }
4260 #ifdef PERL_OLD_COPY_ON_WRITE
4261             if (!isSwipe) {
4262                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4263                     != (SVf_FAKE | SVf_READONLY)) {
4264                     SvREADONLY_on(sstr);
4265                     SvFAKE_on(sstr);
4266                     /* Make the source SV into a loop of 1.
4267                        (about to become 2) */
4268                     SV_COW_NEXT_SV_SET(sstr, sstr);
4269                 }
4270             }
4271 #endif
4272             /* Initial code is common.  */
4273             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4274                 SvPV_free(dstr);
4275             }
4276
4277             if (!isSwipe) {
4278                 /* making another shared SV.  */
4279                 STRLEN cur = SvCUR(sstr);
4280                 STRLEN len = SvLEN(sstr);
4281 #ifdef PERL_OLD_COPY_ON_WRITE
4282                 if (len) {
4283                     assert (SvTYPE(dstr) >= SVt_PVIV);
4284                     /* SvIsCOW_normal */
4285                     /* splice us in between source and next-after-source.  */
4286                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4287                     SV_COW_NEXT_SV_SET(sstr, dstr);
4288                     SvPV_set(dstr, SvPVX_mutable(sstr));
4289                 } else
4290 #endif
4291                 {
4292                     /* SvIsCOW_shared_hash */
4293                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4294                                           "Copy on write: Sharing hash\n"));
4295
4296                     assert (SvTYPE(dstr) >= SVt_PV);
4297                     SvPV_set(dstr,
4298                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4299                 }
4300                 SvLEN_set(dstr, len);
4301                 SvCUR_set(dstr, cur);
4302                 SvREADONLY_on(dstr);
4303                 SvFAKE_on(dstr);
4304             }
4305             else
4306                 {       /* Passes the swipe test.  */
4307                 SvPV_set(dstr, SvPVX_mutable(sstr));
4308                 SvLEN_set(dstr, SvLEN(sstr));
4309                 SvCUR_set(dstr, SvCUR(sstr));
4310
4311                 SvTEMP_off(dstr);
4312                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4313                 SvPV_set(sstr, NULL);
4314                 SvLEN_set(sstr, 0);
4315                 SvCUR_set(sstr, 0);
4316                 SvTEMP_off(sstr);
4317             }
4318         }
4319         if (sflags & SVp_NOK) {
4320             SvNV_set(dstr, SvNVX(sstr));
4321         }
4322         if (sflags & SVp_IOK) {
4323             SvIV_set(dstr, SvIVX(sstr));
4324             /* Must do this otherwise some other overloaded use of 0x80000000
4325                gets confused. I guess SVpbm_VALID */
4326             if (sflags & SVf_IVisUV)
4327                 SvIsUV_on(dstr);
4328         }
4329         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4330         {
4331             const MAGIC * const smg = SvVSTRING_mg(sstr);
4332             if (smg) {
4333                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4334                          smg->mg_ptr, smg->mg_len);
4335                 SvRMAGICAL_on(dstr);
4336             }
4337         }
4338     }
4339     else if (sflags & (SVp_IOK|SVp_NOK)) {
4340         (void)SvOK_off(dstr);
4341         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4342         if (sflags & SVp_IOK) {
4343             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4344             SvIV_set(dstr, SvIVX(sstr));
4345         }
4346         if (sflags & SVp_NOK) {
4347             SvNV_set(dstr, SvNVX(sstr));
4348         }
4349     }
4350     else {
4351         if (isGV_with_GP(sstr)) {
4352             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4353         }
4354         else
4355             (void)SvOK_off(dstr);
4356     }
4357     if (SvTAINTED(sstr))
4358         SvTAINT(dstr);
4359 }
4360
4361 /*
4362 =for apidoc sv_setsv_mg
4363
4364 Like C<sv_setsv>, but also handles 'set' magic.
4365
4366 =cut
4367 */
4368
4369 void
4370 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4371 {
4372     PERL_ARGS_ASSERT_SV_SETSV_MG;
4373
4374     sv_setsv(dstr,sstr);
4375     SvSETMAGIC(dstr);
4376 }
4377
4378 #ifdef PERL_OLD_COPY_ON_WRITE
4379 SV *
4380 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4381 {
4382     STRLEN cur = SvCUR(sstr);
4383     STRLEN len = SvLEN(sstr);
4384     register char *new_pv;
4385
4386     PERL_ARGS_ASSERT_SV_SETSV_COW;
4387
4388     if (DEBUG_C_TEST) {
4389         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4390                       (void*)sstr, (void*)dstr);
4391         sv_dump(sstr);
4392         if (dstr)
4393                     sv_dump(dstr);
4394     }
4395
4396     if (dstr) {
4397         if (SvTHINKFIRST(dstr))
4398             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4399         else if (SvPVX_const(dstr))
4400             Safefree(SvPVX_const(dstr));
4401     }
4402     else
4403         new_SV(dstr);
4404     SvUPGRADE(dstr, SVt_PVIV);
4405
4406     assert (SvPOK(sstr));
4407     assert (SvPOKp(sstr));
4408     assert (!SvIOK(sstr));
4409     assert (!SvIOKp(sstr));
4410     assert (!SvNOK(sstr));
4411     assert (!SvNOKp(sstr));
4412
4413     if (SvIsCOW(sstr)) {
4414
4415         if (SvLEN(sstr) == 0) {
4416             /* source is a COW shared hash key.  */
4417             DEBUG_C(PerlIO_printf(Perl_debug_log,
4418                                   "Fast copy on write: Sharing hash\n"));
4419             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4420             goto common_exit;
4421         }
4422         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4423     } else {
4424         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4425         SvUPGRADE(sstr, SVt_PVIV);
4426         SvREADONLY_on(sstr);
4427         SvFAKE_on(sstr);
4428         DEBUG_C(PerlIO_printf(Perl_debug_log,
4429                               "Fast copy on write: Converting sstr to COW\n"));
4430         SV_COW_NEXT_SV_SET(dstr, sstr);
4431     }
4432     SV_COW_NEXT_SV_SET(sstr, dstr);
4433     new_pv = SvPVX_mutable(sstr);
4434
4435   common_exit:
4436     SvPV_set(dstr, new_pv);
4437     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4438     if (SvUTF8(sstr))
4439         SvUTF8_on(dstr);
4440     SvLEN_set(dstr, len);
4441     SvCUR_set(dstr, cur);
4442     if (DEBUG_C_TEST) {
4443         sv_dump(dstr);
4444     }
4445     return dstr;
4446 }
4447 #endif
4448
4449 /*
4450 =for apidoc sv_setpvn
4451
4452 Copies a string into an SV.  The C<len> parameter indicates the number of
4453 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4454 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4455
4456 =cut
4457 */
4458
4459 void
4460 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4461 {
4462     dVAR;
4463     register char *dptr;
4464
4465     PERL_ARGS_ASSERT_SV_SETPVN;
4466
4467     SV_CHECK_THINKFIRST_COW_DROP(sv);
4468     if (!ptr) {
4469         (void)SvOK_off(sv);
4470         return;
4471     }
4472     else {
4473         /* len is STRLEN which is unsigned, need to copy to signed */
4474         const IV iv = len;
4475         if (iv < 0)
4476             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4477     }
4478     SvUPGRADE(sv, SVt_PV);
4479
4480     dptr = SvGROW(sv, len + 1);
4481     Move(ptr,dptr,len,char);
4482     dptr[len] = '\0';
4483     SvCUR_set(sv, len);
4484     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4485     SvTAINT(sv);
4486     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4487 }
4488
4489 /*
4490 =for apidoc sv_setpvn_mg
4491
4492 Like C<sv_setpvn>, but also handles 'set' magic.
4493
4494 =cut
4495 */
4496
4497 void
4498 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4499 {
4500     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4501
4502     sv_setpvn(sv,ptr,len);
4503     SvSETMAGIC(sv);
4504 }
4505
4506 /*
4507 =for apidoc sv_setpv
4508
4509 Copies a string into an SV.  The string must be null-terminated.  Does not
4510 handle 'set' magic.  See C<sv_setpv_mg>.
4511
4512 =cut
4513 */
4514
4515 void
4516 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4517 {
4518     dVAR;
4519     register STRLEN len;
4520
4521     PERL_ARGS_ASSERT_SV_SETPV;
4522
4523     SV_CHECK_THINKFIRST_COW_DROP(sv);
4524     if (!ptr) {
4525         (void)SvOK_off(sv);
4526         return;
4527     }
4528     len = strlen(ptr);
4529     SvUPGRADE(sv, SVt_PV);
4530
4531     SvGROW(sv, len + 1);
4532     Move(ptr,SvPVX(sv),len+1,char);
4533     SvCUR_set(sv, len);
4534     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4535     SvTAINT(sv);
4536     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4537 }
4538
4539 /*
4540 =for apidoc sv_setpv_mg
4541
4542 Like C<sv_setpv>, but also handles 'set' magic.
4543
4544 =cut
4545 */
4546
4547 void
4548 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4549 {
4550     PERL_ARGS_ASSERT_SV_SETPV_MG;
4551
4552     sv_setpv(sv,ptr);
4553     SvSETMAGIC(sv);
4554 }
4555
4556 void
4557 Perl_sv_sethek(pTHX_ register SV *const sv, const HEK *const hek)
4558 {
4559     dVAR;
4560
4561     PERL_ARGS_ASSERT_SV_SETHEK;
4562
4563     if (!hek) {
4564         return;
4565     }
4566
4567     if (HEK_LEN(hek) == HEf_SVKEY) {
4568         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4569         return;
4570     } else {
4571         const int flags = HEK_FLAGS(hek);
4572         if (flags & HVhek_WASUTF8) {
4573             STRLEN utf8_len = HEK_LEN(hek);
4574             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4575             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4576             SvUTF8_on(sv);
4577             return;
4578         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
4579             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4580             if (HEK_UTF8(hek))
4581                 SvUTF8_on(sv);
4582             else SvUTF8_off(sv);
4583             return;
4584         }
4585         {
4586             SvUPGRADE(sv, SVt_PV);
4587             sv_usepvn_flags(sv, (char *)HEK_KEY(share_hek_hek(hek)), HEK_LEN(hek), SV_HAS_TRAILING_NUL);
4588             SvLEN_set(sv, 0);
4589             SvREADONLY_on(sv);
4590             SvFAKE_on(sv);
4591             SvPOK_on(sv);
4592             if (HEK_UTF8(hek))
4593                 SvUTF8_on(sv);
4594             else SvUTF8_off(sv);
4595             return;
4596         }
4597     }
4598 }
4599
4600
4601 /*
4602 =for apidoc sv_usepvn_flags
4603
4604 Tells an SV to use C<ptr> to find its string value.  Normally the
4605 string is stored inside the SV but sv_usepvn allows the SV to use an
4606 outside string.  The C<ptr> should point to memory that was allocated
4607 by C<malloc>.  The string length, C<len>, must be supplied.  By default
4608 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4609 so that pointer should not be freed or used by the programmer after
4610 giving it to sv_usepvn, and neither should any pointers from "behind"
4611 that pointer (e.g. ptr + 1) be used.
4612
4613 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4614 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4615 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4616 C<len>, and already meets the requirements for storing in C<SvPVX>).
4617
4618 =cut
4619 */
4620
4621 void
4622 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4623 {
4624     dVAR;
4625     STRLEN allocate;
4626
4627     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4628
4629     SV_CHECK_THINKFIRST_COW_DROP(sv);
4630     SvUPGRADE(sv, SVt_PV);
4631     if (!ptr) {
4632         (void)SvOK_off(sv);
4633         if (flags & SV_SMAGIC)
4634             SvSETMAGIC(sv);
4635         return;
4636     }
4637     if (SvPVX_const(sv))
4638         SvPV_free(sv);
4639
4640 #ifdef DEBUGGING
4641     if (flags & SV_HAS_TRAILING_NUL)
4642         assert(ptr[len] == '\0');
4643 #endif
4644
4645     allocate = (flags & SV_HAS_TRAILING_NUL)
4646         ? len + 1 :
4647 #ifdef Perl_safesysmalloc_size
4648         len + 1;
4649 #else 
4650         PERL_STRLEN_ROUNDUP(len + 1);
4651 #endif
4652     if (flags & SV_HAS_TRAILING_NUL) {
4653         /* It's long enough - do nothing.
4654            Specifically Perl_newCONSTSUB is relying on this.  */
4655     } else {
4656 #ifdef DEBUGGING
4657         /* Force a move to shake out bugs in callers.  */
4658         char *new_ptr = (char*)safemalloc(allocate);
4659         Copy(ptr, new_ptr, len, char);
4660         PoisonFree(ptr,len,char);
4661         Safefree(ptr);
4662         ptr = new_ptr;
4663 #else
4664         ptr = (char*) saferealloc (ptr, allocate);
4665 #endif
4666     }
4667 #ifdef Perl_safesysmalloc_size
4668     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4669 #else
4670     SvLEN_set(sv, allocate);
4671 #endif
4672     SvCUR_set(sv, len);
4673     SvPV_set(sv, ptr);
4674     if (!(flags & SV_HAS_TRAILING_NUL)) {
4675         ptr[len] = '\0';
4676     }
4677     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4678     SvTAINT(sv);
4679     if (flags & SV_SMAGIC)
4680         SvSETMAGIC(sv);
4681 }
4682
4683 #ifdef PERL_OLD_COPY_ON_WRITE
4684 /* Need to do this *after* making the SV normal, as we need the buffer
4685    pointer to remain valid until after we've copied it.  If we let go too early,
4686    another thread could invalidate it by unsharing last of the same hash key
4687    (which it can do by means other than releasing copy-on-write Svs)
4688    or by changing the other copy-on-write SVs in the loop.  */
4689 STATIC void
4690 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4691 {
4692     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4693
4694     { /* this SV was SvIsCOW_normal(sv) */
4695          /* we need to find the SV pointing to us.  */
4696         SV *current = SV_COW_NEXT_SV(after);
4697
4698         if (current == sv) {
4699             /* The SV we point to points back to us (there were only two of us
4700                in the loop.)
4701                Hence other SV is no longer copy on write either.  */
4702             SvFAKE_off(after);
4703             SvREADONLY_off(after);
4704         } else {
4705             /* We need to follow the pointers around the loop.  */
4706             SV *next;
4707             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4708                 assert (next);
4709                 current = next;
4710                  /* don't loop forever if the structure is bust, and we have
4711                     a pointer into a closed loop.  */
4712                 assert (current != after);
4713                 assert (SvPVX_const(current) == pvx);
4714             }
4715             /* Make the SV before us point to the SV after us.  */
4716             SV_COW_NEXT_SV_SET(current, after);
4717         }
4718     }
4719 }
4720 #endif
4721 /*
4722 =for apidoc sv_force_normal_flags
4723
4724 Undo various types of fakery on an SV: if the PV is a shared string, make
4725 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4726 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4727 we do the copy, and is also used locally.  If C<SV_COW_DROP_PV> is set
4728 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4729 SvPOK_off rather than making a copy.  (Used where this
4730 scalar is about to be set to some other value.)  In addition,
4731 the C<flags> parameter gets passed to C<sv_unref_flags()>
4732 when unreffing.  C<sv_force_normal> calls this function
4733 with flags set to 0.
4734
4735 =cut
4736 */
4737
4738 void
4739 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4740 {
4741     dVAR;
4742
4743     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4744
4745 #ifdef PERL_OLD_COPY_ON_WRITE
4746     if (SvREADONLY(sv)) {
4747         if (SvFAKE(sv)) {
4748             const char * const pvx = SvPVX_const(sv);
4749             const STRLEN len = SvLEN(sv);
4750             const STRLEN cur = SvCUR(sv);
4751             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4752                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4753                we'll fail an assertion.  */
4754             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4755
4756             if (DEBUG_C_TEST) {
4757                 PerlIO_printf(Perl_debug_log,
4758                               "Copy on write: Force normal %ld\n",
4759                               (long) flags);
4760                 sv_dump(sv);
4761             }
4762             SvFAKE_off(sv);
4763             SvREADONLY_off(sv);
4764             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4765             SvPV_set(sv, NULL);
4766             SvLEN_set(sv, 0);
4767             if (flags & SV_COW_DROP_PV) {
4768                 /* OK, so we don't need to copy our buffer.  */
4769                 SvPOK_off(sv);
4770             } else {
4771                 SvGROW(sv, cur + 1);
4772                 Move(pvx,SvPVX(sv),cur,char);
4773                 SvCUR_set(sv, cur);
4774                 *SvEND(sv) = '\0';
4775             }
4776             if (len) {
4777                 sv_release_COW(sv, pvx, next);
4778             } else {
4779                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4780             }
4781             if (DEBUG_C_TEST) {
4782                 sv_dump(sv);
4783             }
4784         }
4785         else if (IN_PERL_RUNTIME)
4786             Perl_croak_no_modify(aTHX);
4787     }
4788 #else
4789     if (SvREADONLY(sv)) {
4790         if (SvFAKE(sv) && !isGV_with_GP(sv)) {
4791             const char * const pvx = SvPVX_const(sv);
4792             const STRLEN len = SvCUR(sv);
4793             SvFAKE_off(sv);
4794             SvREADONLY_off(sv);
4795             SvPV_set(sv, NULL);
4796             SvLEN_set(sv, 0);
4797             SvGROW(sv, len + 1);
4798             Move(pvx,SvPVX(sv),len,char);
4799             *SvEND(sv) = '\0';
4800             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4801         }
4802         else if (IN_PERL_RUNTIME)
4803             Perl_croak_no_modify(aTHX);
4804     }
4805 #endif
4806     if (SvROK(sv))
4807         sv_unref_flags(sv, flags);
4808     else if (SvFAKE(sv) && isGV_with_GP(sv))
4809         sv_unglob(sv);
4810     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4811         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4812            to sv_unglob. We only need it here, so inline it.  */
4813         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4814         SV *const temp = newSV_type(new_type);
4815         void *const temp_p = SvANY(sv);
4816
4817         if (new_type == SVt_PVMG) {
4818             SvMAGIC_set(temp, SvMAGIC(sv));
4819             SvMAGIC_set(sv, NULL);
4820             SvSTASH_set(temp, SvSTASH(sv));
4821             SvSTASH_set(sv, NULL);
4822         }
4823         SvCUR_set(temp, SvCUR(sv));
4824         /* Remember that SvPVX is in the head, not the body. */
4825         if (SvLEN(temp)) {
4826             SvLEN_set(temp, SvLEN(sv));
4827             /* This signals "buffer is owned by someone else" in sv_clear,
4828                which is the least effort way to stop it freeing the buffer.
4829             */
4830             SvLEN_set(sv, SvLEN(sv)+1);
4831         } else {
4832             /* Their buffer is already owned by someone else. */
4833             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4834             SvLEN_set(temp, SvCUR(sv)+1);
4835         }
4836
4837         /* Now swap the rest of the bodies. */
4838
4839         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4840         SvFLAGS(sv) |= new_type;
4841         SvANY(sv) = SvANY(temp);
4842
4843         SvFLAGS(temp) &= ~(SVTYPEMASK);
4844         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4845         SvANY(temp) = temp_p;
4846
4847         SvREFCNT_dec(temp);
4848     }
4849 }
4850
4851 /*
4852 =for apidoc sv_chop
4853
4854 Efficient removal of characters from the beginning of the string buffer.
4855 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4856 the string buffer.  The C<ptr> becomes the first character of the adjusted
4857 string.  Uses the "OOK hack".
4858
4859 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4860 refer to the same chunk of data.
4861
4862 The unfortunate similarity of this function's name to that of Perl's C<chop>
4863 operator is strictly coincidental.  This function works from the left;
4864 C<chop> works from the right.
4865
4866 =cut
4867 */
4868
4869 void
4870 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4871 {
4872     STRLEN delta;
4873     STRLEN old_delta;
4874     U8 *p;
4875 #ifdef DEBUGGING
4876     const U8 *evacp;
4877     STRLEN evacn;
4878 #endif
4879     STRLEN max_delta;
4880
4881     PERL_ARGS_ASSERT_SV_CHOP;
4882
4883     if (!ptr || !SvPOKp(sv))
4884         return;
4885     delta = ptr - SvPVX_const(sv);
4886     if (!delta) {
4887         /* Nothing to do.  */
4888         return;
4889     }
4890     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4891     if (delta > max_delta)
4892         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4893                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4894     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
4895     SV_CHECK_THINKFIRST(sv);
4896
4897     if (!SvOOK(sv)) {
4898         if (!SvLEN(sv)) { /* make copy of shared string */
4899             const char *pvx = SvPVX_const(sv);
4900             const STRLEN len = SvCUR(sv);
4901             SvGROW(sv, len + 1);
4902             Move(pvx,SvPVX(sv),len,char);
4903             *SvEND(sv) = '\0';
4904         }
4905         SvFLAGS(sv) |= SVf_OOK;
4906         old_delta = 0;
4907     } else {
4908         SvOOK_offset(sv, old_delta);
4909     }
4910     SvLEN_set(sv, SvLEN(sv) - delta);
4911     SvCUR_set(sv, SvCUR(sv) - delta);
4912     SvPV_set(sv, SvPVX(sv) + delta);
4913
4914     p = (U8 *)SvPVX_const(sv);
4915
4916 #ifdef DEBUGGING
4917     /* how many bytes were evacuated?  we will fill them with sentinel
4918        bytes, except for the part holding the new offset of course. */
4919     evacn = delta;
4920     if (old_delta)
4921         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
4922     assert(evacn);
4923     assert(evacn <= delta + old_delta);
4924     evacp = p - evacn;
4925 #endif
4926
4927     delta += old_delta;
4928     assert(delta);
4929     if (delta < 0x100) {
4930         *--p = (U8) delta;
4931     } else {
4932         *--p = 0;
4933         p -= sizeof(STRLEN);
4934         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4935     }
4936
4937 #ifdef DEBUGGING
4938     /* Fill the preceding buffer with sentinals to verify that no-one is
4939        using it.  */
4940     while (p > evacp) {
4941         --p;
4942         *p = (U8)PTR2UV(p);
4943     }
4944 #endif
4945 }
4946
4947 /*
4948 =for apidoc sv_catpvn
4949
4950 Concatenates the string onto the end of the string which is in the SV.  The
4951 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4952 status set, then the bytes appended should be valid UTF-8.
4953 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4954
4955 =for apidoc sv_catpvn_flags
4956
4957 Concatenates the string onto the end of the string which is in the SV.  The
4958 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4959 status set, then the bytes appended should be valid UTF-8.
4960 If C<flags> has the C<SV_SMAGIC> bit set, will
4961 C<mg_set> on C<dsv> afterwards if appropriate.
4962 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4963 in terms of this function.
4964
4965 =cut
4966 */
4967
4968 void
4969 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4970 {
4971     dVAR;
4972     STRLEN dlen;
4973     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4974
4975     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4976     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
4977
4978     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
4979       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
4980          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
4981          dlen = SvCUR(dsv);
4982       }
4983       else SvGROW(dsv, dlen + slen + 1);
4984       if (sstr == dstr)
4985         sstr = SvPVX_const(dsv);
4986       Move(sstr, SvPVX(dsv) + dlen, slen, char);
4987       SvCUR_set(dsv, SvCUR(dsv) + slen);
4988     }
4989     else {
4990         /* We inline bytes_to_utf8, to avoid an extra malloc. */
4991         const char * const send = sstr + slen;
4992         U8 *d;
4993
4994         /* Something this code does not account for, which I think is
4995            impossible; it would require the same pv to be treated as
4996            bytes *and* utf8, which would indicate a bug elsewhere. */
4997         assert(sstr != dstr);
4998
4999         SvGROW(dsv, dlen + slen * 2 + 1);
5000         d = (U8 *)SvPVX(dsv) + dlen;
5001
5002         while (sstr < send) {
5003             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5004             if (UNI_IS_INVARIANT(uv))
5005                 *d++ = (U8)UTF_TO_NATIVE(uv);
5006             else {
5007                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5008                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5009             }
5010         }
5011         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5012     }
5013     *SvEND(dsv) = '\0';
5014     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5015     SvTAINT(dsv);
5016     if (flags & SV_SMAGIC)
5017         SvSETMAGIC(dsv);
5018 }
5019
5020 /*
5021 =for apidoc sv_catsv
5022
5023 Concatenates the string from SV C<ssv> onto the end of the string in
5024 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
5025 not 'set' magic.  See C<sv_catsv_mg>.
5026
5027 =for apidoc sv_catsv_flags
5028
5029 Concatenates the string from SV C<ssv> onto the end of the string in
5030 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
5031 bit set, will C<mg_get> on the C<ssv>, if appropriate, before
5032 reading it.  If the C<flags> contain C<SV_SMAGIC>, C<mg_set> will be
5033 called on the modified SV afterward, if appropriate.  C<sv_catsv>
5034 and C<sv_catsv_nomg> are implemented in terms of this function.
5035
5036 =cut */
5037
5038 void
5039 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
5040 {
5041     dVAR;
5042  
5043     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5044
5045    if (ssv) {
5046         STRLEN slen;
5047         const char *spv = SvPV_flags_const(ssv, slen, flags);
5048         if (spv) {
5049             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
5050                 mg_get(dsv);
5051             sv_catpvn_flags(dsv, spv, slen,
5052                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5053         }
5054     }
5055     if (flags & SV_SMAGIC)
5056         SvSETMAGIC(dsv);
5057 }
5058
5059 /*
5060 =for apidoc sv_catpv
5061
5062 Concatenates the string onto the end of the string which is in the SV.
5063 If the SV has the UTF-8 status set, then the bytes appended should be
5064 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5065
5066 =cut */
5067
5068 void
5069 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
5070 {
5071     dVAR;
5072     register STRLEN len;
5073     STRLEN tlen;
5074     char *junk;
5075
5076     PERL_ARGS_ASSERT_SV_CATPV;
5077
5078     if (!ptr)
5079         return;
5080     junk = SvPV_force(sv, tlen);
5081     len = strlen(ptr);
5082     SvGROW(sv, tlen + len + 1);
5083     if (ptr == junk)
5084         ptr = SvPVX_const(sv);
5085     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5086     SvCUR_set(sv, SvCUR(sv) + len);
5087     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5088     SvTAINT(sv);
5089 }
5090
5091 /*
5092 =for apidoc sv_catpv_flags
5093
5094 Concatenates the string onto the end of the string which is in the SV.
5095 If the SV has the UTF-8 status set, then the bytes appended should
5096 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5097 on the modified SV if appropriate.
5098
5099 =cut
5100 */
5101
5102 void
5103 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5104 {
5105     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5106     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5107 }
5108
5109 /*
5110 =for apidoc sv_catpv_mg
5111
5112 Like C<sv_catpv>, but also handles 'set' magic.
5113
5114 =cut
5115 */
5116
5117 void
5118 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
5119 {
5120     PERL_ARGS_ASSERT_SV_CATPV_MG;
5121
5122     sv_catpv(sv,ptr);
5123     SvSETMAGIC(sv);
5124 }
5125
5126 /*
5127 =for apidoc newSV
5128
5129 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5130 bytes of preallocated string space the SV should have.  An extra byte for a
5131 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5132 space is allocated.)  The reference count for the new SV is set to 1.
5133
5134 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5135 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5136 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5137 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5138 modules supporting older perls.
5139
5140 =cut
5141 */
5142
5143 SV *
5144 Perl_newSV(pTHX_ const STRLEN len)
5145 {
5146     dVAR;
5147     register SV *sv;
5148
5149     new_SV(sv);
5150     if (len) {
5151         sv_upgrade(sv, SVt_PV);
5152         SvGROW(sv, len + 1);
5153     }
5154     return sv;
5155 }
5156 /*
5157 =for apidoc sv_magicext
5158
5159 Adds magic to an SV, upgrading it if necessary.  Applies the
5160 supplied vtable and returns a pointer to the magic added.
5161
5162 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5163 In particular, you can add magic to SvREADONLY SVs, and add more than
5164 one instance of the same 'how'.
5165
5166 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5167 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5168 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5169 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5170
5171 (This is now used as a subroutine by C<sv_magic>.)
5172
5173 =cut
5174 */
5175 MAGIC * 
5176 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5177                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5178 {
5179     dVAR;
5180     MAGIC* mg;
5181
5182     PERL_ARGS_ASSERT_SV_MAGICEXT;
5183
5184     SvUPGRADE(sv, SVt_PVMG);
5185     Newxz(mg, 1, MAGIC);
5186     mg->mg_moremagic = SvMAGIC(sv);
5187     SvMAGIC_set(sv, mg);
5188
5189     /* Sometimes a magic contains a reference loop, where the sv and
5190        object refer to each other.  To prevent a reference loop that
5191        would prevent such objects being freed, we look for such loops
5192        and if we find one we avoid incrementing the object refcount.
5193
5194        Note we cannot do this to avoid self-tie loops as intervening RV must
5195        have its REFCNT incremented to keep it in existence.
5196
5197     */
5198     if (!obj || obj == sv ||
5199         how == PERL_MAGIC_arylen ||
5200         how == PERL_MAGIC_symtab ||
5201         (SvTYPE(obj) == SVt_PVGV &&
5202             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5203              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5204              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5205     {
5206         mg->mg_obj = obj;
5207     }
5208     else {
5209         mg->mg_obj = SvREFCNT_inc_simple(obj);
5210         mg->mg_flags |= MGf_REFCOUNTED;
5211     }
5212
5213     /* Normal self-ties simply pass a null object, and instead of
5214        using mg_obj directly, use the SvTIED_obj macro to produce a
5215        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5216        with an RV obj pointing to the glob containing the PVIO.  In
5217        this case, to avoid a reference loop, we need to weaken the
5218        reference.
5219     */
5220
5221     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5222         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5223     {
5224       sv_rvweaken(obj);
5225     }
5226
5227     mg->mg_type = how;
5228     mg->mg_len = namlen;
5229     if (name) {
5230         if (namlen > 0)
5231             mg->mg_ptr = savepvn(name, namlen);
5232         else if (namlen == HEf_SVKEY) {
5233             /* Yes, this is casting away const. This is only for the case of
5234                HEf_SVKEY. I think we need to document this aberation of the
5235                constness of the API, rather than making name non-const, as
5236                that change propagating outwards a long way.  */
5237             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5238         } else
5239             mg->mg_ptr = (char *) name;
5240     }
5241     mg->mg_virtual = (MGVTBL *) vtable;
5242
5243     mg_magical(sv);
5244     if (SvGMAGICAL(sv))
5245         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5246     return mg;
5247 }
5248
5249 /*
5250 =for apidoc sv_magic
5251
5252 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5253 necessary, then adds a new magic item of type C<how> to the head of the
5254 magic list.
5255
5256 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5257 handling of the C<name> and C<namlen> arguments.
5258
5259 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5260 to add more than one instance of the same 'how'.
5261
5262 =cut
5263 */
5264
5265 void
5266 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5267              const char *const name, const I32 namlen)
5268 {
5269     dVAR;
5270     const MGVTBL *vtable;
5271     MAGIC* mg;
5272     unsigned int flags;
5273     unsigned int vtable_index;
5274
5275     PERL_ARGS_ASSERT_SV_MAGIC;
5276
5277     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5278         || ((flags = PL_magic_data[how]),
5279             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5280             > magic_vtable_max))
5281         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5282
5283     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5284        Useful for attaching extension internal data to perl vars.
5285        Note that multiple extensions may clash if magical scalars
5286        etc holding private data from one are passed to another. */
5287
5288     vtable = (vtable_index == magic_vtable_max)
5289         ? NULL : PL_magic_vtables + vtable_index;
5290
5291 #ifdef PERL_OLD_COPY_ON_WRITE
5292     if (SvIsCOW(sv))
5293         sv_force_normal_flags(sv, 0);
5294 #endif
5295     if (SvREADONLY(sv)) {
5296         if (
5297             /* its okay to attach magic to shared strings; the subsequent
5298              * upgrade to PVMG will unshare the string */
5299             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5300
5301             && IN_PERL_RUNTIME
5302             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5303            )
5304         {
5305             Perl_croak_no_modify(aTHX);
5306         }
5307     }
5308     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5309         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5310             /* sv_magic() refuses to add a magic of the same 'how' as an
5311                existing one
5312              */
5313             if (how == PERL_MAGIC_taint) {
5314                 mg->mg_len |= 1;
5315                 /* Any scalar which already had taint magic on which someone
5316                    (erroneously?) did SvIOK_on() or similar will now be
5317                    incorrectly sporting public "OK" flags.  */
5318                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5319             }
5320             return;
5321         }
5322     }
5323
5324     /* Rest of work is done else where */
5325     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5326
5327     switch (how) {
5328     case PERL_MAGIC_taint:
5329         mg->mg_len = 1;
5330         break;
5331     case PERL_MAGIC_ext:
5332     case PERL_MAGIC_dbfile:
5333         SvRMAGICAL_on(sv);
5334         break;
5335     }
5336 }
5337
5338 static int
5339 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5340 {
5341     MAGIC* mg;
5342     MAGIC** mgp;
5343
5344     assert(flags <= 1);
5345
5346     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5347         return 0;
5348     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5349     for (mg = *mgp; mg; mg = *mgp) {
5350         const MGVTBL* const virt = mg->mg_virtual;
5351         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5352             *mgp = mg->mg_moremagic;
5353             if (virt && virt->svt_free)
5354                 virt->svt_free(aTHX_ sv, mg);
5355             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5356                 if (mg->mg_len > 0)
5357                     Safefree(mg->mg_ptr);
5358                 else if (mg->mg_len == HEf_SVKEY)
5359                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5360                 else if (mg->mg_type == PERL_MAGIC_utf8)
5361                     Safefree(mg->mg_ptr);
5362             }
5363             if (mg->mg_flags & MGf_REFCOUNTED)
5364                 SvREFCNT_dec(mg->mg_obj);
5365             Safefree(mg);
5366         }
5367         else
5368             mgp = &mg->mg_moremagic;
5369     }
5370     if (SvMAGIC(sv)) {
5371         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5372             mg_magical(sv);     /*    else fix the flags now */
5373     }
5374     else {
5375         SvMAGICAL_off(sv);
5376         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5377     }
5378     return 0;
5379 }
5380
5381 /*
5382 =for apidoc sv_unmagic
5383
5384 Removes all magic of type C<type> from an SV.
5385
5386 =cut
5387 */
5388
5389 int
5390 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5391 {
5392     PERL_ARGS_ASSERT_SV_UNMAGIC;
5393     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5394 }
5395
5396 /*
5397 =for apidoc sv_unmagicext
5398
5399 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5400
5401 =cut
5402 */
5403
5404 int
5405 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5406 {
5407     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5408     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5409 }
5410
5411 /*
5412 =for apidoc sv_rvweaken
5413
5414 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5415 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5416 push a back-reference to this RV onto the array of backreferences
5417 associated with that magic.  If the RV is magical, set magic will be
5418 called after the RV is cleared.
5419
5420 =cut
5421 */
5422
5423 SV *
5424 Perl_sv_rvweaken(pTHX_ SV *const sv)
5425 {
5426     SV *tsv;
5427
5428     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5429
5430     if (!SvOK(sv))  /* let undefs pass */
5431         return sv;
5432     if (!SvROK(sv))
5433         Perl_croak(aTHX_ "Can't weaken a nonreference");
5434     else if (SvWEAKREF(sv)) {
5435         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5436         return sv;
5437     }
5438     else if (SvREADONLY(sv)) croak_no_modify();
5439     tsv = SvRV(sv);
5440     Perl_sv_add_backref(aTHX_ tsv, sv);
5441     SvWEAKREF_on(sv);
5442     SvREFCNT_dec(tsv);
5443     return sv;
5444 }
5445
5446 /* Give tsv backref magic if it hasn't already got it, then push a
5447  * back-reference to sv onto the array associated with the backref magic.
5448  *
5449  * As an optimisation, if there's only one backref and it's not an AV,
5450  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5451  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5452  * active.)
5453  */
5454
5455 /* A discussion about the backreferences array and its refcount:
5456  *
5457  * The AV holding the backreferences is pointed to either as the mg_obj of
5458  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5459  * xhv_backreferences field. The array is created with a refcount
5460  * of 2. This means that if during global destruction the array gets
5461  * picked on before its parent to have its refcount decremented by the
5462  * random zapper, it won't actually be freed, meaning it's still there for
5463  * when its parent gets freed.
5464  *
5465  * When the parent SV is freed, the extra ref is killed by
5466  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5467  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5468  *
5469  * When a single backref SV is stored directly, it is not reference
5470  * counted.
5471  */
5472
5473 void
5474 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5475 {
5476     dVAR;
5477     SV **svp;
5478     AV *av = NULL;
5479     MAGIC *mg = NULL;
5480
5481     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5482
5483     /* find slot to store array or singleton backref */
5484
5485     if (SvTYPE(tsv) == SVt_PVHV) {
5486         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5487     } else {
5488         if (! ((mg =
5489             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5490         {
5491             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5492             mg = mg_find(tsv, PERL_MAGIC_backref);
5493         }
5494         svp = &(mg->mg_obj);
5495     }
5496
5497     /* create or retrieve the array */
5498
5499     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5500         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5501     ) {
5502         /* create array */
5503         av = newAV();
5504         AvREAL_off(av);
5505         SvREFCNT_inc_simple_void(av);
5506         /* av now has a refcnt of 2; see discussion above */
5507         if (*svp) {
5508             /* move single existing backref to the array */
5509             av_extend(av, 1);
5510             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5511         }
5512         *svp = (SV*)av;
5513         if (mg)
5514             mg->mg_flags |= MGf_REFCOUNTED;
5515     }
5516     else
5517         av = MUTABLE_AV(*svp);
5518
5519     if (!av) {
5520         /* optimisation: store single backref directly in HvAUX or mg_obj */
5521         *svp = sv;
5522         return;
5523     }
5524     /* push new backref */
5525     assert(SvTYPE(av) == SVt_PVAV);
5526     if (AvFILLp(av) >= AvMAX(av)) {
5527         av_extend(av, AvFILLp(av)+1);
5528     }
5529     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5530 }
5531
5532 /* delete a back-reference to ourselves from the backref magic associated
5533  * with the SV we point to.
5534  */
5535
5536 void
5537 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5538 {
5539     dVAR;
5540     SV **svp = NULL;
5541
5542     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5543
5544     if (SvTYPE(tsv) == SVt_PVHV) {
5545         if (SvOOK(tsv))
5546             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5547     }
5548     else {
5549         MAGIC *const mg
5550             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5551         svp =  mg ? &(mg->mg_obj) : NULL;
5552     }
5553
5554     if (!svp || !*svp)
5555         Perl_croak(aTHX_ "panic: del_backref");
5556
5557     if (SvTYPE(*svp) == SVt_PVAV) {
5558 #ifdef DEBUGGING
5559         int count = 1;
5560 #endif
5561         AV * const av = (AV*)*svp;
5562         SSize_t fill;
5563         assert(!SvIS_FREED(av));
5564         fill = AvFILLp(av);
5565         assert(fill > -1);
5566         svp = AvARRAY(av);
5567         /* for an SV with N weak references to it, if all those
5568          * weak refs are deleted, then sv_del_backref will be called
5569          * N times and O(N^2) compares will be done within the backref
5570          * array. To ameliorate this potential slowness, we:
5571          * 1) make sure this code is as tight as possible;
5572          * 2) when looking for SV, look for it at both the head and tail of the
5573          *    array first before searching the rest, since some create/destroy
5574          *    patterns will cause the backrefs to be freed in order.
5575          */
5576         if (*svp == sv) {
5577             AvARRAY(av)++;
5578             AvMAX(av)--;
5579         }
5580         else {
5581             SV **p = &svp[fill];
5582             SV *const topsv = *p;
5583             if (topsv != sv) {
5584 #ifdef DEBUGGING
5585                 count = 0;
5586 #endif
5587                 while (--p > svp) {
5588                     if (*p == sv) {
5589                         /* We weren't the last entry.
5590                            An unordered list has this property that you
5591                            can take the last element off the end to fill
5592                            the hole, and it's still an unordered list :-)
5593                         */
5594                         *p = topsv;
5595 #ifdef DEBUGGING
5596                         count++;
5597 #else
5598                         break; /* should only be one */
5599 #endif
5600                     }
5601                 }
5602             }
5603         }
5604         assert(count ==1);
5605         AvFILLp(av) = fill-1;
5606     }
5607     else {
5608         /* optimisation: only a single backref, stored directly */
5609         if (*svp != sv)
5610             Perl_croak(aTHX_ "panic: del_backref");
5611         *svp = NULL;
5612     }
5613
5614 }
5615
5616 void
5617 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5618 {
5619     SV **svp;
5620     SV **last;
5621     bool is_array;
5622
5623     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5624
5625     if (!av)
5626         return;
5627
5628     /* after multiple passes through Perl_sv_clean_all() for a thinngy
5629      * that has badly leaked, the backref array may have gotten freed,
5630      * since we only protect it against 1 round of cleanup */
5631     if (SvIS_FREED(av)) {
5632         if (PL_in_clean_all) /* All is fair */
5633             return;
5634         Perl_croak(aTHX_
5635                    "panic: magic_killbackrefs (freed backref AV/SV)");
5636     }
5637
5638
5639     is_array = (SvTYPE(av) == SVt_PVAV);
5640     if (is_array) {
5641         assert(!SvIS_FREED(av));
5642         svp = AvARRAY(av);
5643         if (svp)
5644             last = svp + AvFILLp(av);
5645     }
5646     else {
5647         /* optimisation: only a single backref, stored directly */
5648         svp = (SV**)&av;
5649         last = svp;
5650     }
5651
5652     if (svp) {
5653         while (svp <= last) {
5654             if (*svp) {
5655                 SV *const referrer = *svp;
5656                 if (SvWEAKREF(referrer)) {
5657                     /* XXX Should we check that it hasn't changed? */
5658                     assert(SvROK(referrer));
5659                     SvRV_set(referrer, 0);
5660                     SvOK_off(referrer);
5661                     SvWEAKREF_off(referrer);
5662                     SvSETMAGIC(referrer);
5663                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5664                            SvTYPE(referrer) == SVt_PVLV) {
5665                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5666                     /* You lookin' at me?  */
5667                     assert(GvSTASH(referrer));
5668                     assert(GvSTASH(referrer) == (const HV *)sv);
5669                     GvSTASH(referrer) = 0;
5670                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5671                            SvTYPE(referrer) == SVt_PVFM) {
5672                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5673                         /* You lookin' at me?  */
5674                         assert(CvSTASH(referrer));
5675                         assert(CvSTASH(referrer) == (const HV *)sv);
5676                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5677                     }
5678                     else {
5679                         assert(SvTYPE(sv) == SVt_PVGV);
5680                         /* You lookin' at me?  */
5681                         assert(CvGV(referrer));
5682                         assert(CvGV(referrer) == (const GV *)sv);
5683                         anonymise_cv_maybe(MUTABLE_GV(sv),
5684                                                 MUTABLE_CV(referrer));
5685                     }
5686
5687                 } else {
5688                     Perl_croak(aTHX_
5689                                "panic: magic_killbackrefs (flags=%"UVxf")",
5690                                (UV)SvFLAGS(referrer));
5691                 }
5692
5693                 if (is_array)
5694                     *svp = NULL;
5695             }
5696             svp++;
5697         }
5698     }
5699     if (is_array) {
5700         AvFILLp(av) = -1;
5701         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5702     }
5703     return;
5704 }
5705
5706 /*
5707 =for apidoc sv_insert
5708
5709 Inserts a string at the specified offset/length within the SV.  Similar to
5710 the Perl substr() function.  Handles get magic.
5711
5712 =for apidoc sv_insert_flags
5713
5714 Same as C<sv_insert>, but the extra C<flags> are passed to the
5715 C<SvPV_force_flags> that applies to C<bigstr>.
5716
5717 =cut
5718 */
5719
5720 void
5721 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5722 {
5723     dVAR;
5724     register char *big;
5725     register char *mid;
5726     register char *midend;
5727     register char *bigend;
5728     register SSize_t i;         /* better be sizeof(STRLEN) or bad things happen */
5729     STRLEN curlen;
5730
5731     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5732
5733     if (!bigstr)
5734         Perl_croak(aTHX_ "Can't modify non-existent substring");
5735     SvPV_force_flags(bigstr, curlen, flags);
5736     (void)SvPOK_only_UTF8(bigstr);
5737     if (offset + len > curlen) {
5738         SvGROW(bigstr, offset+len+1);
5739         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5740         SvCUR_set(bigstr, offset+len);
5741     }
5742
5743     SvTAINT(bigstr);
5744     i = littlelen - len;
5745     if (i > 0) {                        /* string might grow */
5746         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5747         mid = big + offset + len;
5748         midend = bigend = big + SvCUR(bigstr);
5749         bigend += i;
5750         *bigend = '\0';
5751         while (midend > mid)            /* shove everything down */
5752             *--bigend = *--midend;
5753         Move(little,big+offset,littlelen,char);
5754         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5755         SvSETMAGIC(bigstr);
5756         return;
5757     }
5758     else if (i == 0) {
5759         Move(little,SvPVX(bigstr)+offset,len,char);
5760         SvSETMAGIC(bigstr);
5761         return;
5762     }
5763
5764     big = SvPVX(bigstr);
5765     mid = big + offset;
5766     midend = mid + len;
5767     bigend = big + SvCUR(bigstr);
5768
5769     if (midend > bigend)
5770         Perl_croak(aTHX_ "panic: sv_insert");
5771
5772     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5773         if (littlelen) {
5774             Move(little, mid, littlelen,char);
5775             mid += littlelen;
5776         }
5777         i = bigend - midend;
5778         if (i > 0) {
5779             Move(midend, mid, i,char);
5780             mid += i;
5781         }
5782         *mid = '\0';
5783         SvCUR_set(bigstr, mid - big);
5784     }
5785     else if ((i = mid - big)) { /* faster from front */
5786         midend -= littlelen;
5787         mid = midend;
5788         Move(big, midend - i, i, char);
5789         sv_chop(bigstr,midend-i);
5790         if (littlelen)
5791             Move(little, mid, littlelen,char);
5792     }
5793     else if (littlelen) {
5794         midend -= littlelen;
5795         sv_chop(bigstr,midend);
5796         Move(little,midend,littlelen,char);
5797     }
5798     else {
5799         sv_chop(bigstr,midend);
5800     }
5801     SvSETMAGIC(bigstr);
5802 }
5803
5804 /*
5805 =for apidoc sv_replace
5806
5807 Make the first argument a copy of the second, then delete the original.
5808 The target SV physically takes over ownership of the body of the source SV
5809 and inherits its flags; however, the target keeps any magic it owns,
5810 and any magic in the source is discarded.
5811 Note that this is a rather specialist SV copying operation; most of the
5812 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5813
5814 =cut
5815 */
5816
5817 void
5818 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5819 {
5820     dVAR;
5821     const U32 refcnt = SvREFCNT(sv);
5822
5823     PERL_ARGS_ASSERT_SV_REPLACE;
5824
5825     SV_CHECK_THINKFIRST_COW_DROP(sv);
5826     if (SvREFCNT(nsv) != 1) {
5827         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5828                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5829     }
5830     if (SvMAGICAL(sv)) {
5831         if (SvMAGICAL(nsv))
5832             mg_free(nsv);
5833         else
5834             sv_upgrade(nsv, SVt_PVMG);
5835         SvMAGIC_set(nsv, SvMAGIC(sv));
5836         SvFLAGS(nsv) |= SvMAGICAL(sv);
5837         SvMAGICAL_off(sv);
5838         SvMAGIC_set(sv, NULL);
5839     }
5840     SvREFCNT(sv) = 0;
5841     sv_clear(sv);
5842     assert(!SvREFCNT(sv));
5843 #ifdef DEBUG_LEAKING_SCALARS
5844     sv->sv_flags  = nsv->sv_flags;
5845     sv->sv_any    = nsv->sv_any;
5846     sv->sv_refcnt = nsv->sv_refcnt;
5847     sv->sv_u      = nsv->sv_u;
5848 #else
5849     StructCopy(nsv,sv,SV);
5850 #endif
5851     if(SvTYPE(sv) == SVt_IV) {
5852         SvANY(sv)
5853             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5854     }
5855         
5856
5857 #ifdef PERL_OLD_COPY_ON_WRITE
5858     if (SvIsCOW_normal(nsv)) {
5859         /* We need to follow the pointers around the loop to make the
5860            previous SV point to sv, rather than nsv.  */
5861         SV *next;
5862         SV *current = nsv;
5863         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5864             assert(next);
5865             current = next;
5866             assert(SvPVX_const(current) == SvPVX_const(nsv));
5867         }
5868         /* Make the SV before us point to the SV after us.  */
5869         if (DEBUG_C_TEST) {
5870             PerlIO_printf(Perl_debug_log, "previous is\n");
5871             sv_dump(current);
5872             PerlIO_printf(Perl_debug_log,
5873                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5874                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5875         }
5876         SV_COW_NEXT_SV_SET(current, sv);
5877     }
5878 #endif
5879     SvREFCNT(sv) = refcnt;
5880     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5881     SvREFCNT(nsv) = 0;
5882     del_SV(nsv);
5883 }
5884
5885 /* We're about to free a GV which has a CV that refers back to us.
5886  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5887  * field) */
5888
5889 STATIC void
5890 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5891 {
5892     SV *gvname;
5893     GV *anongv;
5894
5895     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5896
5897     /* be assertive! */
5898     assert(SvREFCNT(gv) == 0);
5899     assert(isGV(gv) && isGV_with_GP(gv));
5900     assert(GvGP(gv));
5901     assert(!CvANON(cv));
5902     assert(CvGV(cv) == gv);
5903
5904     /* will the CV shortly be freed by gp_free() ? */
5905     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
5906         SvANY(cv)->xcv_gv = NULL;
5907         return;
5908     }
5909
5910     /* if not, anonymise: */
5911     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
5912                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
5913                     : newSVpvn_flags( "__ANON__", 8, 0 );
5914     sv_catpvs(gvname, "::__ANON__");
5915     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5916     SvREFCNT_dec(gvname);
5917
5918     CvANON_on(cv);
5919     CvCVGV_RC_on(cv);
5920     SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
5921 }
5922
5923
5924 /*
5925 =for apidoc sv_clear
5926
5927 Clear an SV: call any destructors, free up any memory used by the body,
5928 and free the body itself.  The SV's head is I<not> freed, although
5929 its type is set to all 1's so that it won't inadvertently be assumed
5930 to be live during global destruction etc.
5931 This function should only be called when REFCNT is zero.  Most of the time
5932 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5933 instead.
5934
5935 =cut
5936 */
5937
5938 void
5939 Perl_sv_clear(pTHX_ SV *const orig_sv)
5940 {
5941     dVAR;
5942     HV *stash;
5943     U32 type;
5944     const struct body_details *sv_type_details;
5945     SV* iter_sv = NULL;
5946     SV* next_sv = NULL;
5947     register SV *sv = orig_sv;
5948     STRLEN hash_index;
5949
5950     PERL_ARGS_ASSERT_SV_CLEAR;
5951
5952     /* within this loop, sv is the SV currently being freed, and
5953      * iter_sv is the most recent AV or whatever that's being iterated
5954      * over to provide more SVs */
5955
5956     while (sv) {
5957
5958         type = SvTYPE(sv);
5959
5960         assert(SvREFCNT(sv) == 0);
5961         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
5962
5963         if (type <= SVt_IV) {
5964             /* See the comment in sv.h about the collusion between this
5965              * early return and the overloading of the NULL slots in the
5966              * size table.  */
5967             if (SvROK(sv))
5968                 goto free_rv;
5969             SvFLAGS(sv) &= SVf_BREAK;
5970             SvFLAGS(sv) |= SVTYPEMASK;
5971             goto free_head;
5972         }
5973
5974         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
5975
5976         if (type >= SVt_PVMG) {
5977             if (SvOBJECT(sv)) {
5978                 if (!curse(sv, 1)) goto get_next_sv;
5979                 type = SvTYPE(sv); /* destructor may have changed it */
5980             }
5981             /* Free back-references before magic, in case the magic calls
5982              * Perl code that has weak references to sv. */
5983             if (type == SVt_PVHV) {
5984                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
5985                 if (SvMAGIC(sv))
5986                     mg_free(sv);
5987             }
5988             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
5989                 SvREFCNT_dec(SvOURSTASH(sv));
5990             } else if (SvMAGIC(sv)) {
5991                 /* Free back-references before other types of magic. */
5992                 sv_unmagic(sv, PERL_MAGIC_backref);
5993                 mg_free(sv);
5994             }
5995             if (type == SVt_PVMG && SvPAD_TYPED(sv))
5996                 SvREFCNT_dec(SvSTASH(sv));
5997         }
5998         switch (type) {
5999             /* case SVt_BIND: */
6000         case SVt_PVIO:
6001             if (IoIFP(sv) &&
6002                 IoIFP(sv) != PerlIO_stdin() &&
6003                 IoIFP(sv) != PerlIO_stdout() &&
6004                 IoIFP(sv) != PerlIO_stderr() &&
6005                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6006             {
6007                 io_close(MUTABLE_IO(sv), FALSE);
6008             }
6009             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6010                 PerlDir_close(IoDIRP(sv));
6011             IoDIRP(sv) = (DIR*)NULL;
6012             Safefree(IoTOP_NAME(sv));
6013             Safefree(IoFMT_NAME(sv));
6014             Safefree(IoBOTTOM_NAME(sv));
6015             goto freescalar;
6016         case SVt_REGEXP:
6017             /* FIXME for plugins */
6018             pregfree2((REGEXP*) sv);
6019             goto freescalar;
6020         case SVt_PVCV:
6021         case SVt_PVFM:
6022             cv_undef(MUTABLE_CV(sv));
6023             /* If we're in a stash, we don't own a reference to it.
6024              * However it does have a back reference to us, which needs to
6025              * be cleared.  */
6026             if ((stash = CvSTASH(sv)))
6027                 sv_del_backref(MUTABLE_SV(stash), sv);
6028             goto freescalar;
6029         case SVt_PVHV:
6030             if (PL_last_swash_hv == (const HV *)sv) {
6031                 PL_last_swash_hv = NULL;
6032             }
6033             if (HvTOTALKEYS((HV*)sv) > 0) {
6034                 const char *name;
6035                 /* this statement should match the one at the beginning of
6036                  * hv_undef_flags() */
6037                 if (   PL_phase != PERL_PHASE_DESTRUCT
6038                     && (name = HvNAME((HV*)sv)))
6039                 {
6040                     if (PL_stashcache)
6041                         (void)hv_delete(PL_stashcache, name,
6042                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6043                     hv_name_set((HV*)sv, NULL, 0, 0);
6044                 }
6045
6046                 /* save old iter_sv in unused SvSTASH field */
6047                 assert(!SvOBJECT(sv));
6048                 SvSTASH(sv) = (HV*)iter_sv;
6049                 iter_sv = sv;
6050
6051                 /* XXX ideally we should save the old value of hash_index
6052                  * too, but I can't think of any place to hide it. The
6053                  * effect of not saving it is that for freeing hashes of
6054                  * hashes, we become quadratic in scanning the HvARRAY of
6055                  * the top hash looking for new entries to free; but
6056                  * hopefully this will be dwarfed by the freeing of all
6057                  * the nested hashes. */
6058                 hash_index = 0;
6059                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6060                 goto get_next_sv; /* process this new sv */
6061             }
6062             /* free empty hash */
6063             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6064             assert(!HvARRAY((HV*)sv));
6065             break;
6066         case SVt_PVAV:
6067             {
6068                 AV* av = MUTABLE_AV(sv);
6069                 if (PL_comppad == av) {
6070                     PL_comppad = NULL;
6071                     PL_curpad = NULL;
6072                 }
6073                 if (AvREAL(av) && AvFILLp(av) > -1) {
6074                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6075                     /* save old iter_sv in top-most slot of AV,
6076                      * and pray that it doesn't get wiped in the meantime */
6077                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6078                     iter_sv = sv;
6079                     goto get_next_sv; /* process this new sv */
6080                 }
6081                 Safefree(AvALLOC(av));
6082             }
6083
6084             break;
6085         case SVt_PVLV:
6086             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6087                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6088                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6089                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6090             }
6091             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6092                 SvREFCNT_dec(LvTARG(sv));
6093         case SVt_PVGV:
6094             if (isGV_with_GP(sv)) {
6095                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6096                    && HvENAME_get(stash))
6097                     mro_method_changed_in(stash);
6098                 gp_free(MUTABLE_GV(sv));
6099                 if (GvNAME_HEK(sv))
6100                     unshare_hek(GvNAME_HEK(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
6103                  * needs to be cleared.  */
6104                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6105                         sv_del_backref(MUTABLE_SV(stash), sv);
6106             }
6107             /* FIXME. There are probably more unreferenced pointers to SVs
6108              * in the interpreter struct that we should check and tidy in
6109              * a similar fashion to this:  */
6110             if ((const GV *)sv == PL_last_in_gv)
6111                 PL_last_in_gv = NULL;
6112         case SVt_PVMG:
6113         case SVt_PVNV:
6114         case SVt_PVIV:
6115         case SVt_PV:
6116           freescalar:
6117             /* Don't bother with SvOOK_off(sv); as we're only going to
6118              * free it.  */
6119             if (SvOOK(sv)) {
6120                 STRLEN offset;
6121                 SvOOK_offset(sv, offset);
6122                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6123                 /* Don't even bother with turning off the OOK flag.  */
6124             }
6125             if (SvROK(sv)) {
6126             free_rv:
6127                 {
6128                     SV * const target = SvRV(sv);
6129                     if (SvWEAKREF(sv))
6130                         sv_del_backref(target, sv);
6131                     else
6132                         next_sv = target;
6133                 }
6134             }
6135 #ifdef PERL_OLD_COPY_ON_WRITE
6136             else if (SvPVX_const(sv)
6137                      && !(SvTYPE(sv) == SVt_PVIO
6138                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6139             {
6140                 if (SvIsCOW(sv)) {
6141                     if (DEBUG_C_TEST) {
6142                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6143                         sv_dump(sv);
6144                     }
6145                     if (SvLEN(sv)) {
6146                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6147                     } else {
6148                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6149                     }
6150
6151                     SvFAKE_off(sv);
6152                 } else if (SvLEN(sv)) {
6153                     Safefree(SvPVX_const(sv));
6154                 }
6155             }
6156 #else
6157             else if (SvPVX_const(sv) && SvLEN(sv)
6158                      && !(SvTYPE(sv) == SVt_PVIO
6159                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6160                 Safefree(SvPVX_mutable(sv));
6161             else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
6162                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6163                 SvFAKE_off(sv);
6164             }
6165 #endif
6166             break;
6167         case SVt_NV:
6168             break;
6169         }
6170
6171       free_body:
6172
6173         SvFLAGS(sv) &= SVf_BREAK;
6174         SvFLAGS(sv) |= SVTYPEMASK;
6175
6176         sv_type_details = bodies_by_type + type;
6177         if (sv_type_details->arena) {
6178             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6179                      &PL_body_roots[type]);
6180         }
6181         else if (sv_type_details->body_size) {
6182             safefree(SvANY(sv));
6183         }
6184
6185       free_head:
6186         /* caller is responsible for freeing the head of the original sv */
6187         if (sv != orig_sv && !SvREFCNT(sv))
6188             del_SV(sv);
6189
6190         /* grab and free next sv, if any */
6191       get_next_sv:
6192         while (1) {
6193             sv = NULL;
6194             if (next_sv) {
6195                 sv = next_sv;
6196                 next_sv = NULL;
6197             }
6198             else if (!iter_sv) {
6199                 break;
6200             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6201                 AV *const av = (AV*)iter_sv;
6202                 if (AvFILLp(av) > -1) {
6203                     sv = AvARRAY(av)[AvFILLp(av)--];
6204                 }
6205                 else { /* no more elements of current AV to free */
6206                     sv = iter_sv;
6207                     type = SvTYPE(sv);
6208                     /* restore previous value, squirrelled away */
6209                     iter_sv = AvARRAY(av)[AvMAX(av)];
6210                     Safefree(AvALLOC(av));
6211                     goto free_body;
6212                 }
6213             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6214                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6215                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6216                     /* no more elements of current HV to free */
6217                     sv = iter_sv;
6218                     type = SvTYPE(sv);
6219                     /* Restore previous value of iter_sv, squirrelled away */
6220                     assert(!SvOBJECT(sv));
6221                     iter_sv = (SV*)SvSTASH(sv);
6222
6223                     /* ideally we should restore the old hash_index here,
6224                      * but we don't currently save the old value */
6225                     hash_index = 0;
6226
6227                     /* free any remaining detritus from the hash struct */
6228                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6229                     assert(!HvARRAY((HV*)sv));
6230                     goto free_body;
6231                 }
6232             }
6233
6234             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6235
6236             if (!sv)
6237                 continue;
6238             if (!SvREFCNT(sv)) {
6239                 sv_free(sv);
6240                 continue;
6241             }
6242             if (--(SvREFCNT(sv)))
6243                 continue;
6244 #ifdef DEBUGGING
6245             if (SvTEMP(sv)) {
6246                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6247                          "Attempt to free temp prematurely: SV 0x%"UVxf
6248                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6249                 continue;
6250             }
6251 #endif
6252             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6253                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6254                 SvREFCNT(sv) = (~(U32)0)/2;
6255                 continue;
6256             }
6257             break;
6258         } /* while 1 */
6259
6260     } /* while sv */
6261 }
6262
6263 /* This routine curses the sv itself, not the object referenced by sv. So
6264    sv does not have to be ROK. */
6265
6266 static bool
6267 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6268     dVAR;
6269
6270     PERL_ARGS_ASSERT_CURSE;
6271     assert(SvOBJECT(sv));
6272
6273     if (PL_defstash &&  /* Still have a symbol table? */
6274         SvDESTROYABLE(sv))
6275     {
6276         dSP;
6277         HV* stash;
6278         do {
6279             CV* destructor;
6280             stash = SvSTASH(sv);
6281             destructor = StashHANDLER(stash,DESTROY);
6282             if (destructor
6283                 /* A constant subroutine can have no side effects, so
6284                    don't bother calling it.  */
6285                 && !CvCONST(destructor)
6286                 /* Don't bother calling an empty destructor or one that
6287                    returns immediately. */
6288                 && (CvISXSUB(destructor)
6289                 || (CvSTART(destructor)
6290                     && (CvSTART(destructor)->op_next->op_type
6291                                         != OP_LEAVESUB)
6292                     && (CvSTART(destructor)->op_next->op_type
6293                                         != OP_PUSHMARK
6294                         || CvSTART(destructor)->op_next->op_next->op_type
6295                                         != OP_RETURN
6296                        )
6297                    ))
6298                )
6299             {
6300                 SV* const tmpref = newRV(sv);
6301                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6302                 ENTER;
6303                 PUSHSTACKi(PERLSI_DESTROY);
6304                 EXTEND(SP, 2);
6305                 PUSHMARK(SP);
6306                 PUSHs(tmpref);
6307                 PUTBACK;
6308                 call_sv(MUTABLE_SV(destructor),
6309                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6310                 POPSTACK;
6311                 SPAGAIN;
6312                 LEAVE;
6313                 if(SvREFCNT(tmpref) < 2) {
6314                     /* tmpref is not kept alive! */
6315                     SvREFCNT(sv)--;
6316                     SvRV_set(tmpref, NULL);
6317                     SvROK_off(tmpref);
6318                 }
6319                 SvREFCNT_dec(tmpref);
6320             }
6321         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6322
6323
6324         if (check_refcnt && SvREFCNT(sv)) {
6325             if (PL_in_clean_objs)
6326                 Perl_croak(aTHX_
6327                   "DESTROY created new reference to dead object '%"HEKf"'",
6328                    HEKfARG(HvNAME_HEK(stash)));
6329             /* DESTROY gave object new lease on life */
6330             return FALSE;
6331         }
6332     }
6333
6334     if (SvOBJECT(sv)) {
6335         SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6336         SvOBJECT_off(sv);       /* Curse the object. */
6337         if (SvTYPE(sv) != SVt_PVIO)
6338             --PL_sv_objcount;/* XXX Might want something more general */
6339     }
6340     return TRUE;
6341 }
6342
6343 /*
6344 =for apidoc sv_newref
6345
6346 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6347 instead.
6348
6349 =cut
6350 */
6351
6352 SV *
6353 Perl_sv_newref(pTHX_ SV *const sv)
6354 {
6355     PERL_UNUSED_CONTEXT;
6356     if (sv)
6357         (SvREFCNT(sv))++;
6358     return sv;
6359 }
6360
6361 /*
6362 =for apidoc sv_free
6363
6364 Decrement an SV's reference count, and if it drops to zero, call
6365 C<sv_clear> to invoke destructors and free up any memory used by
6366 the body; finally, deallocate the SV's head itself.
6367 Normally called via a wrapper macro C<SvREFCNT_dec>.
6368
6369 =cut
6370 */
6371
6372 void
6373 Perl_sv_free(pTHX_ SV *const sv)
6374 {
6375     dVAR;
6376     if (!sv)
6377         return;
6378     if (SvREFCNT(sv) == 0) {
6379         if (SvFLAGS(sv) & SVf_BREAK)
6380             /* this SV's refcnt has been artificially decremented to
6381              * trigger cleanup */
6382             return;
6383         if (PL_in_clean_all) /* All is fair */
6384             return;
6385         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6386             /* make sure SvREFCNT(sv)==0 happens very seldom */
6387             SvREFCNT(sv) = (~(U32)0)/2;
6388             return;
6389         }
6390         if (ckWARN_d(WARN_INTERNAL)) {
6391 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6392             Perl_dump_sv_child(aTHX_ sv);
6393 #else
6394   #ifdef DEBUG_LEAKING_SCALARS
6395             sv_dump(sv);
6396   #endif
6397 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6398             if (PL_warnhook == PERL_WARNHOOK_FATAL
6399                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6400                 /* Don't let Perl_warner cause us to escape our fate:  */
6401                 abort();
6402             }
6403 #endif
6404             /* This may not return:  */
6405             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6406                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6407                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6408 #endif
6409         }
6410 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6411         abort();
6412 #endif
6413         return;
6414     }
6415     if (--(SvREFCNT(sv)) > 0)
6416         return;
6417     Perl_sv_free2(aTHX_ sv);
6418 }
6419
6420 void
6421 Perl_sv_free2(pTHX_ SV *const sv)
6422 {
6423     dVAR;
6424
6425     PERL_ARGS_ASSERT_SV_FREE2;
6426
6427 #ifdef DEBUGGING
6428     if (SvTEMP(sv)) {
6429         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6430                          "Attempt to free temp prematurely: SV 0x%"UVxf
6431                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6432         return;
6433     }
6434 #endif
6435     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6436         /* make sure SvREFCNT(sv)==0 happens very seldom */
6437         SvREFCNT(sv) = (~(U32)0)/2;
6438         return;
6439     }
6440     sv_clear(sv);
6441     if (! SvREFCNT(sv))
6442         del_SV(sv);
6443 }
6444
6445 /*
6446 =for apidoc sv_len
6447
6448 Returns the length of the string in the SV. Handles magic and type
6449 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6450
6451 =cut
6452 */
6453
6454 STRLEN
6455 Perl_sv_len(pTHX_ register SV *const sv)
6456 {
6457     STRLEN len;
6458
6459     if (!sv)
6460         return 0;
6461
6462     if (SvGMAGICAL(sv))
6463         len = mg_length(sv);
6464     else
6465         (void)SvPV_const(sv, len);
6466     return len;
6467 }
6468
6469 /*
6470 =for apidoc sv_len_utf8
6471
6472 Returns the number of characters in the string in an SV, counting wide
6473 UTF-8 bytes as a single character.  Handles magic and type coercion.
6474
6475 =cut
6476 */
6477
6478 /*
6479  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6480  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6481  * (Note that the mg_len is not the length of the mg_ptr field.
6482  * This allows the cache to store the character length of the string without
6483  * needing to malloc() extra storage to attach to the mg_ptr.)
6484  *
6485  */
6486
6487 STRLEN
6488 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6489 {
6490     if (!sv)
6491         return 0;
6492
6493     if (SvGMAGICAL(sv))
6494         return mg_length(sv);
6495     else
6496     {
6497         STRLEN len;
6498         const U8 *s = (U8*)SvPV_const(sv, len);
6499
6500         if (PL_utf8cache) {
6501             STRLEN ulen;
6502             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6503
6504             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6505                 if (mg->mg_len != -1)
6506                     ulen = mg->mg_len;
6507                 else {
6508                     /* We can use the offset cache for a headstart.
6509                        The longer value is stored in the first pair.  */
6510                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6511
6512                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6513                                                        s + len);
6514                 }
6515                 
6516                 if (PL_utf8cache < 0) {
6517                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6518                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6519                 }
6520             }
6521             else {
6522                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6523                 utf8_mg_len_cache_update(sv, &mg, ulen);
6524             }
6525             return ulen;
6526         }
6527         return Perl_utf8_length(aTHX_ s, s + len);
6528     }
6529 }
6530
6531 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6532    offset.  */
6533 static STRLEN
6534 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6535                       STRLEN *const uoffset_p, bool *const at_end)
6536 {
6537     const U8 *s = start;
6538     STRLEN uoffset = *uoffset_p;
6539
6540     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6541
6542     while (s < send && uoffset) {
6543         --uoffset;
6544         s += UTF8SKIP(s);
6545     }
6546     if (s == send) {
6547         *at_end = TRUE;
6548     }
6549     else if (s > send) {
6550         *at_end = TRUE;
6551         /* This is the existing behaviour. Possibly it should be a croak, as
6552            it's actually a bounds error  */
6553         s = send;
6554     }
6555     *uoffset_p -= uoffset;
6556     return s - start;
6557 }
6558
6559 /* Given the length of the string in both bytes and UTF-8 characters, decide
6560    whether to walk forwards or backwards to find the byte corresponding to
6561    the passed in UTF-8 offset.  */
6562 static STRLEN
6563 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6564                     STRLEN uoffset, const STRLEN uend)
6565 {
6566     STRLEN backw = uend - uoffset;
6567
6568     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6569
6570     if (uoffset < 2 * backw) {
6571         /* The assumption is that going forwards is twice the speed of going
6572            forward (that's where the 2 * backw comes from).
6573            (The real figure of course depends on the UTF-8 data.)  */
6574         const U8 *s = start;
6575
6576         while (s < send && uoffset--)
6577             s += UTF8SKIP(s);
6578         assert (s <= send);
6579         if (s > send)
6580             s = send;
6581         return s - start;
6582     }
6583
6584     while (backw--) {
6585         send--;
6586         while (UTF8_IS_CONTINUATION(*send))
6587             send--;
6588     }
6589     return send - start;
6590 }
6591
6592 /* For the string representation of the given scalar, find the byte
6593    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6594    give another position in the string, *before* the sought offset, which
6595    (which is always true, as 0, 0 is a valid pair of positions), which should
6596    help reduce the amount of linear searching.
6597    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6598    will be used to reduce the amount of linear searching. The cache will be
6599    created if necessary, and the found value offered to it for update.  */
6600 static STRLEN
6601 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6602                     const U8 *const send, STRLEN uoffset,
6603                     STRLEN uoffset0, STRLEN boffset0)
6604 {
6605     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6606     bool found = FALSE;
6607     bool at_end = FALSE;
6608
6609     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6610
6611     assert (uoffset >= uoffset0);
6612
6613     if (!uoffset)
6614         return 0;
6615
6616     if (!SvREADONLY(sv)
6617         && PL_utf8cache
6618         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6619                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6620         if ((*mgp)->mg_ptr) {
6621             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6622             if (cache[0] == uoffset) {
6623                 /* An exact match. */
6624                 return cache[1];
6625             }
6626             if (cache[2] == uoffset) {
6627                 /* An exact match. */
6628                 return cache[3];
6629             }
6630
6631             if (cache[0] < uoffset) {
6632                 /* The cache already knows part of the way.   */
6633                 if (cache[0] > uoffset0) {
6634                     /* The cache knows more than the passed in pair  */
6635                     uoffset0 = cache[0];
6636                     boffset0 = cache[1];
6637                 }
6638                 if ((*mgp)->mg_len != -1) {
6639                     /* And we know the end too.  */
6640                     boffset = boffset0
6641                         + sv_pos_u2b_midway(start + boffset0, send,
6642                                               uoffset - uoffset0,
6643                                               (*mgp)->mg_len - uoffset0);
6644                 } else {
6645                     uoffset -= uoffset0;
6646                     boffset = boffset0
6647                         + sv_pos_u2b_forwards(start + boffset0,
6648                                               send, &uoffset, &at_end);
6649                     uoffset += uoffset0;
6650                 }
6651             }
6652             else if (cache[2] < uoffset) {
6653                 /* We're between the two cache entries.  */
6654                 if (cache[2] > uoffset0) {
6655                     /* and the cache knows more than the passed in pair  */
6656                     uoffset0 = cache[2];
6657                     boffset0 = cache[3];
6658                 }
6659
6660                 boffset = boffset0
6661                     + sv_pos_u2b_midway(start + boffset0,
6662                                           start + cache[1],
6663                                           uoffset - uoffset0,
6664                                           cache[0] - uoffset0);
6665             } else {
6666                 boffset = boffset0
6667                     + sv_pos_u2b_midway(start + boffset0,
6668                                           start + cache[3],
6669                                           uoffset - uoffset0,
6670                                           cache[2] - uoffset0);
6671             }
6672             found = TRUE;
6673         }
6674         else if ((*mgp)->mg_len != -1) {
6675             /* If we can take advantage of a passed in offset, do so.  */
6676             /* In fact, offset0 is either 0, or less than offset, so don't
6677                need to worry about the other possibility.  */
6678             boffset = boffset0
6679                 + sv_pos_u2b_midway(start + boffset0, send,
6680                                       uoffset - uoffset0,
6681                                       (*mgp)->mg_len - uoffset0);
6682             found = TRUE;
6683         }
6684     }
6685
6686     if (!found || PL_utf8cache < 0) {
6687         STRLEN real_boffset;
6688         uoffset -= uoffset0;
6689         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6690                                                       send, &uoffset, &at_end);
6691         uoffset += uoffset0;
6692
6693         if (found && PL_utf8cache < 0)
6694             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6695                                        real_boffset, sv);
6696         boffset = real_boffset;
6697     }
6698
6699     if (PL_utf8cache) {
6700         if (at_end)
6701             utf8_mg_len_cache_update(sv, mgp, uoffset);
6702         else
6703             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6704     }
6705     return boffset;
6706 }
6707
6708
6709 /*
6710 =for apidoc sv_pos_u2b_flags
6711
6712 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6713 the start of the string, to a count of the equivalent number of bytes; if
6714 lenp is non-zero, it does the same to lenp, but this time starting from
6715 the offset, rather than from the start of the string. Handles type coercion.
6716 I<flags> is passed to C<SvPV_flags>, and usually should be
6717 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6718
6719 =cut
6720 */
6721
6722 /*
6723  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6724  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6725  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6726  *
6727  */
6728
6729 STRLEN
6730 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6731                       U32 flags)
6732 {
6733     const U8 *start;
6734     STRLEN len;
6735     STRLEN boffset;
6736
6737     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6738
6739     start = (U8*)SvPV_flags(sv, len, flags);
6740     if (len) {
6741         const U8 * const send = start + len;
6742         MAGIC *mg = NULL;
6743         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6744
6745         if (lenp
6746             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6747                         is 0, and *lenp is already set to that.  */) {
6748             /* Convert the relative offset to absolute.  */
6749             const STRLEN uoffset2 = uoffset + *lenp;
6750             const STRLEN boffset2
6751                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6752                                       uoffset, boffset) - boffset;
6753
6754             *lenp = boffset2;
6755         }
6756     } else {
6757         if (lenp)
6758             *lenp = 0;
6759         boffset = 0;
6760     }
6761
6762     return boffset;
6763 }
6764
6765 /*
6766 =for apidoc sv_pos_u2b
6767
6768 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6769 the start of the string, to a count of the equivalent number of bytes; if
6770 lenp is non-zero, it does the same to lenp, but this time starting from
6771 the offset, rather than from the start of the string. Handles magic and
6772 type coercion.
6773
6774 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6775 than 2Gb.
6776
6777 =cut
6778 */
6779
6780 /*
6781  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6782  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6783  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6784  *
6785  */
6786
6787 /* This function is subject to size and sign problems */
6788
6789 void
6790 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6791 {
6792     PERL_ARGS_ASSERT_SV_POS_U2B;
6793
6794     if (lenp) {
6795         STRLEN ulen = (STRLEN)*lenp;
6796         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6797                                          SV_GMAGIC|SV_CONST_RETURN);
6798         *lenp = (I32)ulen;
6799     } else {
6800         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6801                                          SV_GMAGIC|SV_CONST_RETURN);
6802     }
6803 }
6804
6805 static void
6806 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6807                            const STRLEN ulen)
6808 {
6809     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6810     if (SvREADONLY(sv))
6811         return;
6812
6813     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6814                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6815         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6816     }
6817     assert(*mgp);
6818
6819     (*mgp)->mg_len = ulen;
6820     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
6821     if (ulen != (STRLEN) (*mgp)->mg_len)
6822         (*mgp)->mg_len = -1;
6823 }
6824
6825 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6826    byte length pairing. The (byte) length of the total SV is passed in too,
6827    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6828    may not have updated SvCUR, so we can't rely on reading it directly.
6829
6830    The proffered utf8/byte length pairing isn't used if the cache already has
6831    two pairs, and swapping either for the proffered pair would increase the
6832    RMS of the intervals between known byte offsets.
6833
6834    The cache itself consists of 4 STRLEN values
6835    0: larger UTF-8 offset
6836    1: corresponding byte offset
6837    2: smaller UTF-8 offset
6838    3: corresponding byte offset
6839
6840    Unused cache pairs have the value 0, 0.
6841    Keeping the cache "backwards" means that the invariant of
6842    cache[0] >= cache[2] is maintained even with empty slots, which means that
6843    the code that uses it doesn't need to worry if only 1 entry has actually
6844    been set to non-zero.  It also makes the "position beyond the end of the
6845    cache" logic much simpler, as the first slot is always the one to start
6846    from.   
6847 */
6848 static void
6849 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6850                            const STRLEN utf8, const STRLEN blen)
6851 {
6852     STRLEN *cache;
6853
6854     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6855
6856     if (SvREADONLY(sv))
6857         return;
6858
6859     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6860                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6861         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6862                            0);
6863         (*mgp)->mg_len = -1;
6864     }
6865     assert(*mgp);
6866
6867     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6868         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6869         (*mgp)->mg_ptr = (char *) cache;
6870     }
6871     assert(cache);
6872
6873     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6874         /* SvPOKp() because it's possible that sv has string overloading, and
6875            therefore is a reference, hence SvPVX() is actually a pointer.
6876            This cures the (very real) symptoms of RT 69422, but I'm not actually
6877            sure whether we should even be caching the results of UTF-8
6878            operations on overloading, given that nothing stops overloading
6879            returning a different value every time it's called.  */
6880         const U8 *start = (const U8 *) SvPVX_const(sv);
6881         const STRLEN realutf8 = utf8_length(start, start + byte);
6882
6883         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6884                                    sv);
6885     }
6886
6887     /* Cache is held with the later position first, to simplify the code
6888        that deals with unbounded ends.  */
6889        
6890     ASSERT_UTF8_CACHE(cache);
6891     if (cache[1] == 0) {
6892         /* Cache is totally empty  */
6893         cache[0] = utf8;
6894         cache[1] = byte;
6895     } else if (cache[3] == 0) {
6896         if (byte > cache[1]) {
6897             /* New one is larger, so goes first.  */
6898             cache[2] = cache[0];
6899             cache[3] = cache[1];
6900             cache[0] = utf8;
6901             cache[1] = byte;
6902         } else {
6903             cache[2] = utf8;
6904             cache[3] = byte;
6905         }
6906     } else {
6907 #define THREEWAY_SQUARE(a,b,c,d) \
6908             ((float)((d) - (c))) * ((float)((d) - (c))) \
6909             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6910                + ((float)((b) - (a))) * ((float)((b) - (a)))
6911
6912         /* Cache has 2 slots in use, and we know three potential pairs.
6913            Keep the two that give the lowest RMS distance. Do the
6914            calculation in bytes simply because we always know the byte
6915            length.  squareroot has the same ordering as the positive value,
6916            so don't bother with the actual square root.  */
6917         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6918         if (byte > cache[1]) {
6919             /* New position is after the existing pair of pairs.  */
6920             const float keep_earlier
6921                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6922             const float keep_later
6923                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6924
6925             if (keep_later < keep_earlier) {
6926                 if (keep_later < existing) {
6927                     cache[2] = cache[0];
6928                     cache[3] = cache[1];
6929                     cache[0] = utf8;
6930                     cache[1] = byte;
6931                 }
6932             }
6933             else {
6934                 if (keep_earlier < existing) {
6935                     cache[0] = utf8;
6936                     cache[1] = byte;
6937                 }
6938             }
6939         }
6940         else if (byte > cache[3]) {
6941             /* New position is between the existing pair of pairs.  */
6942             const float keep_earlier
6943                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6944             const float keep_later
6945                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6946
6947             if (keep_later < keep_earlier) {
6948                 if (keep_later < existing) {
6949                     cache[2] = utf8;
6950                     cache[3] = byte;
6951                 }
6952             }
6953             else {
6954                 if (keep_earlier < existing) {
6955                     cache[0] = utf8;
6956                     cache[1] = byte;
6957                 }
6958             }
6959         }
6960         else {
6961             /* New position is before the existing pair of pairs.  */
6962             const float keep_earlier
6963                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6964             const float keep_later
6965                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6966
6967             if (keep_later < keep_earlier) {
6968                 if (keep_later < existing) {
6969                     cache[2] = utf8;
6970                     cache[3] = byte;
6971                 }
6972             }
6973             else {
6974                 if (keep_earlier < existing) {
6975                     cache[0] = cache[2];
6976                     cache[1] = cache[3];
6977                     cache[2] = utf8;
6978                     cache[3] = byte;
6979                 }
6980             }
6981         }
6982     }
6983     ASSERT_UTF8_CACHE(cache);
6984 }
6985
6986 /* We already know all of the way, now we may be able to walk back.  The same
6987    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6988    backward is half the speed of walking forward. */
6989 static STRLEN
6990 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6991                     const U8 *end, STRLEN endu)
6992 {
6993     const STRLEN forw = target - s;
6994     STRLEN backw = end - target;
6995
6996     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6997
6998     if (forw < 2 * backw) {
6999         return utf8_length(s, target);
7000     }
7001
7002     while (end > target) {
7003         end--;
7004         while (UTF8_IS_CONTINUATION(*end)) {
7005             end--;
7006         }
7007         endu--;
7008     }
7009     return endu;
7010 }
7011
7012 /*
7013 =for apidoc sv_pos_b2u
7014
7015 Converts the value pointed to by offsetp from a count of bytes from the
7016 start of the string, to a count of the equivalent number of UTF-8 chars.
7017 Handles magic and type coercion.
7018
7019 =cut
7020 */
7021
7022 /*
7023  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7024  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7025  * byte offsets.
7026  *
7027  */
7028 void
7029 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
7030 {
7031     const U8* s;
7032     const STRLEN byte = *offsetp;
7033     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7034     STRLEN blen;
7035     MAGIC* mg = NULL;
7036     const U8* send;
7037     bool found = FALSE;
7038
7039     PERL_ARGS_ASSERT_SV_POS_B2U;
7040
7041     if (!sv)
7042         return;
7043
7044     s = (const U8*)SvPV_const(sv, blen);
7045
7046     if (blen < byte)
7047         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7048
7049     send = s + byte;
7050
7051     if (!SvREADONLY(sv)
7052         && PL_utf8cache
7053         && SvTYPE(sv) >= SVt_PVMG
7054         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7055     {
7056         if (mg->mg_ptr) {
7057             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7058             if (cache[1] == byte) {
7059                 /* An exact match. */
7060                 *offsetp = cache[0];
7061                 return;
7062             }
7063             if (cache[3] == byte) {
7064                 /* An exact match. */
7065                 *offsetp = cache[2];
7066                 return;
7067             }
7068
7069             if (cache[1] < byte) {
7070                 /* We already know part of the way. */
7071                 if (mg->mg_len != -1) {
7072                     /* Actually, we know the end too.  */
7073                     len = cache[0]
7074                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7075                                               s + blen, mg->mg_len - cache[0]);
7076                 } else {
7077                     len = cache[0] + utf8_length(s + cache[1], send);
7078                 }
7079             }
7080             else if (cache[3] < byte) {
7081                 /* We're between the two cached pairs, so we do the calculation
7082                    offset by the byte/utf-8 positions for the earlier pair,
7083                    then add the utf-8 characters from the string start to
7084                    there.  */
7085                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7086                                           s + cache[1], cache[0] - cache[2])
7087                     + cache[2];
7088
7089             }
7090             else { /* cache[3] > byte */
7091                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7092                                           cache[2]);
7093
7094             }
7095             ASSERT_UTF8_CACHE(cache);
7096             found = TRUE;
7097         } else if (mg->mg_len != -1) {
7098             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7099             found = TRUE;
7100         }
7101     }
7102     if (!found || PL_utf8cache < 0) {
7103         const STRLEN real_len = utf8_length(s, send);
7104
7105         if (found && PL_utf8cache < 0)
7106             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7107         len = real_len;
7108     }
7109     *offsetp = len;
7110
7111     if (PL_utf8cache) {
7112         if (blen == byte)
7113             utf8_mg_len_cache_update(sv, &mg, len);
7114         else
7115             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7116     }
7117 }
7118
7119 static void
7120 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7121                              STRLEN real, SV *const sv)
7122 {
7123     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7124
7125     /* As this is debugging only code, save space by keeping this test here,
7126        rather than inlining it in all the callers.  */
7127     if (from_cache == real)
7128         return;
7129
7130     /* Need to turn the assertions off otherwise we may recurse infinitely
7131        while printing error messages.  */
7132     SAVEI8(PL_utf8cache);
7133     PL_utf8cache = 0;
7134     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7135                func, (UV) from_cache, (UV) real, SVfARG(sv));
7136 }
7137
7138 /*
7139 =for apidoc sv_eq
7140
7141 Returns a boolean indicating whether the strings in the two SVs are
7142 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7143 coerce its args to strings if necessary.
7144
7145 =for apidoc sv_eq_flags
7146
7147 Returns a boolean indicating whether the strings in the two SVs are
7148 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7149 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7150
7151 =cut
7152 */
7153
7154 I32
7155 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
7156 {
7157     dVAR;
7158     const char *pv1;
7159     STRLEN cur1;
7160     const char *pv2;
7161     STRLEN cur2;
7162     I32  eq     = 0;
7163     SV* svrecode = NULL;
7164
7165     if (!sv1) {
7166         pv1 = "";
7167         cur1 = 0;
7168     }
7169     else {
7170         /* if pv1 and pv2 are the same, second SvPV_const call may
7171          * invalidate pv1 (if we are handling magic), so we may need to
7172          * make a copy */
7173         if (sv1 == sv2 && flags & SV_GMAGIC
7174          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7175             pv1 = SvPV_const(sv1, cur1);
7176             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7177         }
7178         pv1 = SvPV_flags_const(sv1, cur1, flags);
7179     }
7180
7181     if (!sv2){
7182         pv2 = "";
7183         cur2 = 0;
7184     }
7185     else
7186         pv2 = SvPV_flags_const(sv2, cur2, flags);
7187
7188     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7189         /* Differing utf8ness.
7190          * Do not UTF8size the comparands as a side-effect. */
7191          if (PL_encoding) {
7192               if (SvUTF8(sv1)) {
7193                    svrecode = newSVpvn(pv2, cur2);
7194                    sv_recode_to_utf8(svrecode, PL_encoding);
7195                    pv2 = SvPV_const(svrecode, cur2);
7196               }
7197               else {
7198                    svrecode = newSVpvn(pv1, cur1);
7199                    sv_recode_to_utf8(svrecode, PL_encoding);
7200                    pv1 = SvPV_const(svrecode, cur1);
7201               }
7202               /* Now both are in UTF-8. */
7203               if (cur1 != cur2) {
7204                    SvREFCNT_dec(svrecode);
7205                    return FALSE;
7206               }
7207          }
7208          else {
7209               if (SvUTF8(sv1)) {
7210                   /* sv1 is the UTF-8 one  */
7211                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7212                                         (const U8*)pv1, cur1) == 0;
7213               }
7214               else {
7215                   /* sv2 is the UTF-8 one  */
7216                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7217                                         (const U8*)pv2, cur2) == 0;
7218               }
7219          }
7220     }
7221
7222     if (cur1 == cur2)
7223         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7224         
7225     SvREFCNT_dec(svrecode);
7226
7227     return eq;
7228 }
7229
7230 /*
7231 =for apidoc sv_cmp
7232
7233 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7234 string in C<sv1> is less than, equal to, or greater than the string in
7235 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7236 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7237
7238 =for apidoc sv_cmp_flags
7239
7240 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7241 string in C<sv1> is less than, equal to, or greater than the string in
7242 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7243 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7244 also C<sv_cmp_locale_flags>.
7245
7246 =cut
7247 */
7248
7249 I32
7250 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7251 {
7252     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7253 }
7254
7255 I32
7256 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7257                   const U32 flags)
7258 {
7259     dVAR;
7260     STRLEN cur1, cur2;
7261     const char *pv1, *pv2;
7262     char *tpv = NULL;
7263     I32  cmp;
7264     SV *svrecode = NULL;
7265
7266     if (!sv1) {
7267         pv1 = "";
7268         cur1 = 0;
7269     }
7270     else
7271         pv1 = SvPV_flags_const(sv1, cur1, flags);
7272
7273     if (!sv2) {
7274         pv2 = "";
7275         cur2 = 0;
7276     }
7277     else
7278         pv2 = SvPV_flags_const(sv2, cur2, flags);
7279
7280     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7281         /* Differing utf8ness.
7282          * Do not UTF8size the comparands as a side-effect. */
7283         if (SvUTF8(sv1)) {
7284             if (PL_encoding) {
7285                  svrecode = newSVpvn(pv2, cur2);
7286                  sv_recode_to_utf8(svrecode, PL_encoding);
7287                  pv2 = SvPV_const(svrecode, cur2);
7288             }
7289             else {
7290                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7291                                                    (const U8*)pv1, cur1);
7292                 return retval ? retval < 0 ? -1 : +1 : 0;
7293             }
7294         }
7295         else {
7296             if (PL_encoding) {
7297                  svrecode = newSVpvn(pv1, cur1);
7298                  sv_recode_to_utf8(svrecode, PL_encoding);
7299                  pv1 = SvPV_const(svrecode, cur1);
7300             }
7301             else {
7302                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7303                                                   (const U8*)pv2, cur2);
7304                 return retval ? retval < 0 ? -1 : +1 : 0;
7305             }
7306         }
7307     }
7308
7309     if (!cur1) {
7310         cmp = cur2 ? -1 : 0;
7311     } else if (!cur2) {
7312         cmp = 1;
7313     } else {
7314         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7315
7316         if (retval) {
7317             cmp = retval < 0 ? -1 : 1;
7318         } else if (cur1 == cur2) {
7319             cmp = 0;
7320         } else {
7321             cmp = cur1 < cur2 ? -1 : 1;
7322         }
7323     }
7324
7325     SvREFCNT_dec(svrecode);
7326     if (tpv)
7327         Safefree(tpv);
7328
7329     return cmp;
7330 }
7331
7332 /*
7333 =for apidoc sv_cmp_locale
7334
7335 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7336 'use bytes' aware, handles get magic, and will coerce its args to strings
7337 if necessary.  See also C<sv_cmp>.
7338
7339 =for apidoc sv_cmp_locale_flags
7340
7341 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7342 'use bytes' aware and will coerce its args to strings if necessary.  If the
7343 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7344
7345 =cut
7346 */
7347
7348 I32
7349 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7350 {
7351     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7352 }
7353
7354 I32
7355 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7356                          const U32 flags)
7357 {
7358     dVAR;
7359 #ifdef USE_LOCALE_COLLATE
7360
7361     char *pv1, *pv2;
7362     STRLEN len1, len2;
7363     I32 retval;
7364
7365     if (PL_collation_standard)
7366         goto raw_compare;
7367
7368     len1 = 0;
7369     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7370     len2 = 0;
7371     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7372
7373     if (!pv1 || !len1) {
7374         if (pv2 && len2)
7375             return -1;
7376         else
7377             goto raw_compare;
7378     }
7379     else {
7380         if (!pv2 || !len2)
7381             return 1;
7382     }
7383
7384     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7385
7386     if (retval)
7387         return retval < 0 ? -1 : 1;
7388
7389     /*
7390      * When the result of collation is equality, that doesn't mean
7391      * that there are no differences -- some locales exclude some
7392      * characters from consideration.  So to avoid false equalities,
7393      * we use the raw string as a tiebreaker.
7394      */
7395
7396   raw_compare:
7397     /*FALLTHROUGH*/
7398
7399 #endif /* USE_LOCALE_COLLATE */
7400
7401     return sv_cmp(sv1, sv2);
7402 }
7403
7404
7405 #ifdef USE_LOCALE_COLLATE
7406
7407 /*
7408 =for apidoc sv_collxfrm
7409
7410 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7411 C<sv_collxfrm_flags>.
7412
7413 =for apidoc sv_collxfrm_flags
7414
7415 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7416 flags contain SV_GMAGIC, it handles get-magic.
7417
7418 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7419 scalar data of the variable, but transformed to such a format that a normal
7420 memory comparison can be used to compare the data according to the locale
7421 settings.
7422
7423 =cut
7424 */
7425
7426 char *
7427 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7428 {
7429     dVAR;
7430     MAGIC *mg;
7431
7432     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7433
7434     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7435     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7436         const char *s;
7437         char *xf;
7438         STRLEN len, xlen;
7439
7440         if (mg)
7441             Safefree(mg->mg_ptr);
7442         s = SvPV_flags_const(sv, len, flags);
7443         if ((xf = mem_collxfrm(s, len, &xlen))) {
7444             if (! mg) {
7445 #ifdef PERL_OLD_COPY_ON_WRITE
7446                 if (SvIsCOW(sv))
7447                     sv_force_normal_flags(sv, 0);
7448 #endif
7449                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7450                                  0, 0);
7451                 assert(mg);
7452             }
7453             mg->mg_ptr = xf;
7454             mg->mg_len = xlen;
7455         }
7456         else {
7457             if (mg) {
7458                 mg->mg_ptr = NULL;
7459                 mg->mg_len = -1;
7460             }
7461         }
7462     }
7463     if (mg && mg->mg_ptr) {
7464         *nxp = mg->mg_len;
7465         return mg->mg_ptr + sizeof(PL_collation_ix);
7466     }
7467     else {
7468         *nxp = 0;
7469         return NULL;
7470     }
7471 }
7472
7473 #endif /* USE_LOCALE_COLLATE */
7474
7475 static char *
7476 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7477 {
7478     SV * const tsv = newSV(0);
7479     ENTER;
7480     SAVEFREESV(tsv);
7481     sv_gets(tsv, fp, 0);
7482     sv_utf8_upgrade_nomg(tsv);
7483     SvCUR_set(sv,append);
7484     sv_catsv(sv,tsv);
7485     LEAVE;
7486     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7487 }
7488
7489 static char *
7490 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7491 {
7492     I32 bytesread;
7493     const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7494       /* Grab the size of the record we're getting */
7495     char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7496 #ifdef VMS
7497     int fd;
7498 #endif
7499
7500     /* Go yank in */
7501 #ifdef VMS
7502     /* VMS wants read instead of fread, because fread doesn't respect */
7503     /* RMS record boundaries. This is not necessarily a good thing to be */
7504     /* doing, but we've got no other real choice - except avoid stdio
7505        as implementation - perhaps write a :vms layer ?
7506     */
7507     fd = PerlIO_fileno(fp);
7508     if (fd != -1) {
7509         bytesread = PerlLIO_read(fd, buffer, recsize);
7510     }
7511     else /* in-memory file from PerlIO::Scalar */
7512 #endif
7513     {
7514         bytesread = PerlIO_read(fp, buffer, recsize);
7515     }
7516
7517     if (bytesread < 0)
7518         bytesread = 0;
7519     SvCUR_set(sv, bytesread + append);
7520     buffer[bytesread] = '\0';
7521     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7522 }
7523
7524 /*
7525 =for apidoc sv_gets
7526
7527 Get a line from the filehandle and store it into the SV, optionally
7528 appending to the currently-stored string.
7529
7530 =cut
7531 */
7532
7533 char *
7534 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7535 {
7536     dVAR;
7537     const char *rsptr;
7538     STRLEN rslen;
7539     register STDCHAR rslast;
7540     register STDCHAR *bp;
7541     register I32 cnt;
7542     I32 i = 0;
7543     I32 rspara = 0;
7544
7545     PERL_ARGS_ASSERT_SV_GETS;
7546
7547     if (SvTHINKFIRST(sv))
7548         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7549     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7550        from <>.
7551        However, perlbench says it's slower, because the existing swipe code
7552        is faster than copy on write.
7553        Swings and roundabouts.  */
7554     SvUPGRADE(sv, SVt_PV);
7555
7556     SvSCREAM_off(sv);
7557
7558     if (append) {
7559         if (PerlIO_isutf8(fp)) {
7560             if (!SvUTF8(sv)) {
7561                 sv_utf8_upgrade_nomg(sv);
7562                 sv_pos_u2b(sv,&append,0);
7563             }
7564         } else if (SvUTF8(sv)) {
7565             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7566         }
7567     }
7568
7569     SvPOK_only(sv);
7570     if (!append) {
7571         SvCUR_set(sv,0);
7572     }
7573     if (PerlIO_isutf8(fp))
7574         SvUTF8_on(sv);
7575
7576     if (IN_PERL_COMPILETIME) {
7577         /* we always read code in line mode */
7578         rsptr = "\n";
7579         rslen = 1;
7580     }
7581     else if (RsSNARF(PL_rs)) {
7582         /* If it is a regular disk file use size from stat() as estimate
7583            of amount we are going to read -- may result in mallocing
7584            more memory than we really need if the layers below reduce
7585            the size we read (e.g. CRLF or a gzip layer).
7586          */
7587         Stat_t st;
7588         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7589             const Off_t offset = PerlIO_tell(fp);
7590             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7591                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7592             }
7593         }
7594         rsptr = NULL;
7595         rslen = 0;
7596     }
7597     else if (RsRECORD(PL_rs)) {
7598         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7599     }
7600     else if (RsPARA(PL_rs)) {
7601         rsptr = "\n\n";
7602         rslen = 2;
7603         rspara = 1;
7604     }
7605     else {
7606         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7607         if (PerlIO_isutf8(fp)) {
7608             rsptr = SvPVutf8(PL_rs, rslen);
7609         }
7610         else {
7611             if (SvUTF8(PL_rs)) {
7612                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7613                     Perl_croak(aTHX_ "Wide character in $/");
7614                 }
7615             }
7616             rsptr = SvPV_const(PL_rs, rslen);
7617         }
7618     }
7619
7620     rslast = rslen ? rsptr[rslen - 1] : '\0';
7621
7622     if (rspara) {               /* have to do this both before and after */
7623         do {                    /* to make sure file boundaries work right */
7624             if (PerlIO_eof(fp))
7625                 return 0;
7626             i = PerlIO_getc(fp);
7627             if (i != '\n') {
7628                 if (i == -1)
7629                     return 0;
7630                 PerlIO_ungetc(fp,i);
7631                 break;
7632             }
7633         } while (i != EOF);
7634     }
7635
7636     /* See if we know enough about I/O mechanism to cheat it ! */
7637
7638     /* This used to be #ifdef test - it is made run-time test for ease
7639        of abstracting out stdio interface. One call should be cheap
7640        enough here - and may even be a macro allowing compile
7641        time optimization.
7642      */
7643
7644     if (PerlIO_fast_gets(fp)) {
7645
7646     /*
7647      * We're going to steal some values from the stdio struct
7648      * and put EVERYTHING in the innermost loop into registers.
7649      */
7650     register STDCHAR *ptr;
7651     STRLEN bpx;
7652     I32 shortbuffered;
7653
7654 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7655     /* An ungetc()d char is handled separately from the regular
7656      * buffer, so we getc() it back out and stuff it in the buffer.
7657      */
7658     i = PerlIO_getc(fp);
7659     if (i == EOF) return 0;
7660     *(--((*fp)->_ptr)) = (unsigned char) i;
7661     (*fp)->_cnt++;
7662 #endif
7663
7664     /* Here is some breathtakingly efficient cheating */
7665
7666     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7667     /* make sure we have the room */
7668     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7669         /* Not room for all of it
7670            if we are looking for a separator and room for some
7671          */
7672         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7673             /* just process what we have room for */
7674             shortbuffered = cnt - SvLEN(sv) + append + 1;
7675             cnt -= shortbuffered;
7676         }
7677         else {
7678             shortbuffered = 0;
7679             /* remember that cnt can be negative */
7680             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7681         }
7682     }
7683     else
7684         shortbuffered = 0;
7685     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7686     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7687     DEBUG_P(PerlIO_printf(Perl_debug_log,
7688         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7689     DEBUG_P(PerlIO_printf(Perl_debug_log,
7690         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7691                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7692                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7693     for (;;) {
7694       screamer:
7695         if (cnt > 0) {
7696             if (rslen) {
7697                 while (cnt > 0) {                    /* this     |  eat */
7698                     cnt--;
7699                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7700                         goto thats_all_folks;        /* screams  |  sed :-) */
7701                 }
7702             }
7703             else {
7704                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7705                 bp += cnt;                           /* screams  |  dust */
7706                 ptr += cnt;                          /* louder   |  sed :-) */
7707                 cnt = 0;
7708                 assert (!shortbuffered);
7709                 goto cannot_be_shortbuffered;
7710             }
7711         }
7712         
7713         if (shortbuffered) {            /* oh well, must extend */
7714             cnt = shortbuffered;
7715             shortbuffered = 0;
7716             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7717             SvCUR_set(sv, bpx);
7718             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7719             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7720             continue;
7721         }
7722
7723     cannot_be_shortbuffered:
7724         DEBUG_P(PerlIO_printf(Perl_debug_log,
7725                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7726                               PTR2UV(ptr),(long)cnt));
7727         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7728
7729         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7730             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7731             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7732             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7733
7734         /* This used to call 'filbuf' in stdio form, but as that behaves like
7735            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7736            another abstraction.  */
7737         i   = PerlIO_getc(fp);          /* get more characters */
7738
7739         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7740             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7741             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7742             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7743
7744         cnt = PerlIO_get_cnt(fp);
7745         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7746         DEBUG_P(PerlIO_printf(Perl_debug_log,
7747             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7748
7749         if (i == EOF)                   /* all done for ever? */
7750             goto thats_really_all_folks;
7751
7752         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7753         SvCUR_set(sv, bpx);
7754         SvGROW(sv, bpx + cnt + 2);
7755         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7756
7757         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7758
7759         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7760             goto thats_all_folks;
7761     }
7762
7763 thats_all_folks:
7764     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7765           memNE((char*)bp - rslen, rsptr, rslen))
7766         goto screamer;                          /* go back to the fray */
7767 thats_really_all_folks:
7768     if (shortbuffered)
7769         cnt += shortbuffered;
7770         DEBUG_P(PerlIO_printf(Perl_debug_log,
7771             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7772     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7773     DEBUG_P(PerlIO_printf(Perl_debug_log,
7774         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7775         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7776         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7777     *bp = '\0';
7778     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7779     DEBUG_P(PerlIO_printf(Perl_debug_log,
7780         "Screamer: done, len=%ld, string=|%.*s|\n",
7781         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7782     }
7783    else
7784     {
7785        /*The big, slow, and stupid way. */
7786 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7787         STDCHAR *buf = NULL;
7788         Newx(buf, 8192, STDCHAR);
7789         assert(buf);
7790 #else
7791         STDCHAR buf[8192];
7792 #endif
7793
7794 screamer2:
7795         if (rslen) {
7796             register const STDCHAR * const bpe = buf + sizeof(buf);
7797             bp = buf;
7798             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7799                 ; /* keep reading */
7800             cnt = bp - buf;
7801         }
7802         else {
7803             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7804             /* Accommodate broken VAXC compiler, which applies U8 cast to
7805              * both args of ?: operator, causing EOF to change into 255
7806              */
7807             if (cnt > 0)
7808                  i = (U8)buf[cnt - 1];
7809             else
7810                  i = EOF;
7811         }
7812
7813         if (cnt < 0)
7814             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7815         if (append)
7816              sv_catpvn(sv, (char *) buf, cnt);
7817         else
7818              sv_setpvn(sv, (char *) buf, cnt);
7819
7820         if (i != EOF &&                 /* joy */
7821             (!rslen ||
7822              SvCUR(sv) < rslen ||
7823              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7824         {
7825             append = -1;
7826             /*
7827              * If we're reading from a TTY and we get a short read,
7828              * indicating that the user hit his EOF character, we need
7829              * to notice it now, because if we try to read from the TTY
7830              * again, the EOF condition will disappear.
7831              *
7832              * The comparison of cnt to sizeof(buf) is an optimization
7833              * that prevents unnecessary calls to feof().
7834              *
7835              * - jik 9/25/96
7836              */
7837             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7838                 goto screamer2;
7839         }
7840
7841 #ifdef USE_HEAP_INSTEAD_OF_STACK
7842         Safefree(buf);
7843 #endif
7844     }
7845
7846     if (rspara) {               /* have to do this both before and after */
7847         while (i != EOF) {      /* to make sure file boundaries work right */
7848             i = PerlIO_getc(fp);
7849             if (i != '\n') {
7850                 PerlIO_ungetc(fp,i);
7851                 break;
7852             }
7853         }
7854     }
7855
7856     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7857 }
7858
7859 /*
7860 =for apidoc sv_inc
7861
7862 Auto-increment of the value in the SV, doing string to numeric conversion
7863 if necessary.  Handles 'get' magic and operator overloading.
7864
7865 =cut
7866 */
7867
7868 void
7869 Perl_sv_inc(pTHX_ register SV *const sv)
7870 {
7871     if (!sv)
7872         return;
7873     SvGETMAGIC(sv);
7874     sv_inc_nomg(sv);
7875 }
7876
7877 /*
7878 =for apidoc sv_inc_nomg
7879
7880 Auto-increment of the value in the SV, doing string to numeric conversion
7881 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
7882
7883 =cut
7884 */
7885
7886 void
7887 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7888 {
7889     dVAR;
7890     register char *d;
7891     int flags;
7892
7893     if (!sv)
7894         return;
7895     if (SvTHINKFIRST(sv)) {
7896         if (SvIsCOW(sv) || isGV_with_GP(sv))
7897             sv_force_normal_flags(sv, 0);
7898         if (SvREADONLY(sv)) {
7899             if (IN_PERL_RUNTIME)
7900                 Perl_croak_no_modify(aTHX);
7901         }
7902         if (SvROK(sv)) {
7903             IV i;
7904             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
7905                 return;
7906             i = PTR2IV(SvRV(sv));
7907             sv_unref(sv);
7908             sv_setiv(sv, i);
7909         }
7910     }
7911     flags = SvFLAGS(sv);
7912     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7913         /* It's (privately or publicly) a float, but not tested as an
7914            integer, so test it to see. */
7915         (void) SvIV(sv);
7916         flags = SvFLAGS(sv);
7917     }
7918     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7919         /* It's publicly an integer, or privately an integer-not-float */
7920 #ifdef PERL_PRESERVE_IVUV
7921       oops_its_int:
7922 #endif
7923         if (SvIsUV(sv)) {
7924             if (SvUVX(sv) == UV_MAX)
7925                 sv_setnv(sv, UV_MAX_P1);
7926             else
7927                 (void)SvIOK_only_UV(sv);
7928                 SvUV_set(sv, SvUVX(sv) + 1);
7929         } else {
7930             if (SvIVX(sv) == IV_MAX)
7931                 sv_setuv(sv, (UV)IV_MAX + 1);
7932             else {
7933                 (void)SvIOK_only(sv);
7934                 SvIV_set(sv, SvIVX(sv) + 1);
7935             }   
7936         }
7937         return;
7938     }
7939     if (flags & SVp_NOK) {
7940         const NV was = SvNVX(sv);
7941         if (NV_OVERFLOWS_INTEGERS_AT &&
7942             was >= NV_OVERFLOWS_INTEGERS_AT) {
7943             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7944                            "Lost precision when incrementing %" NVff " by 1",
7945                            was);
7946         }
7947         (void)SvNOK_only(sv);
7948         SvNV_set(sv, was + 1.0);
7949         return;
7950     }
7951
7952     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7953         if ((flags & SVTYPEMASK) < SVt_PVIV)
7954             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7955         (void)SvIOK_only(sv);
7956         SvIV_set(sv, 1);
7957         return;
7958     }
7959     d = SvPVX(sv);
7960     while (isALPHA(*d)) d++;
7961     while (isDIGIT(*d)) d++;
7962     if (d < SvEND(sv)) {
7963 #ifdef PERL_PRESERVE_IVUV
7964         /* Got to punt this as an integer if needs be, but we don't issue
7965            warnings. Probably ought to make the sv_iv_please() that does
7966            the conversion if possible, and silently.  */
7967         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7968         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7969             /* Need to try really hard to see if it's an integer.
7970                9.22337203685478e+18 is an integer.
7971                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7972                so $a="9.22337203685478e+18"; $a+0; $a++
7973                needs to be the same as $a="9.22337203685478e+18"; $a++
7974                or we go insane. */
7975         
7976             (void) sv_2iv(sv);
7977             if (SvIOK(sv))
7978                 goto oops_its_int;
7979
7980             /* sv_2iv *should* have made this an NV */
7981             if (flags & SVp_NOK) {
7982                 (void)SvNOK_only(sv);
7983                 SvNV_set(sv, SvNVX(sv) + 1.0);
7984                 return;
7985             }
7986             /* I don't think we can get here. Maybe I should assert this
7987                And if we do get here I suspect that sv_setnv will croak. NWC
7988                Fall through. */
7989 #if defined(USE_LONG_DOUBLE)
7990             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",
7991                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7992 #else
7993             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7994                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7995 #endif
7996         }
7997 #endif /* PERL_PRESERVE_IVUV */
7998         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
7999         return;
8000     }
8001     d--;
8002     while (d >= SvPVX_const(sv)) {
8003         if (isDIGIT(*d)) {
8004             if (++*d <= '9')
8005                 return;
8006             *(d--) = '0';
8007         }
8008         else {
8009 #ifdef EBCDIC
8010             /* MKS: The original code here died if letters weren't consecutive.
8011              * at least it didn't have to worry about non-C locales.  The
8012              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8013              * arranged in order (although not consecutively) and that only
8014              * [A-Za-z] are accepted by isALPHA in the C locale.
8015              */
8016             if (*d != 'z' && *d != 'Z') {
8017                 do { ++*d; } while (!isALPHA(*d));
8018                 return;
8019             }
8020             *(d--) -= 'z' - 'a';
8021 #else
8022             ++*d;
8023             if (isALPHA(*d))
8024                 return;
8025             *(d--) -= 'z' - 'a' + 1;
8026 #endif
8027         }
8028     }
8029     /* oh,oh, the number grew */
8030     SvGROW(sv, SvCUR(sv) + 2);
8031     SvCUR_set(sv, SvCUR(sv) + 1);
8032     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8033         *d = d[-1];
8034     if (isDIGIT(d[1]))
8035         *d = '1';
8036     else
8037         *d = d[1];
8038 }
8039
8040 /*
8041 =for apidoc sv_dec
8042
8043 Auto-decrement of the value in the SV, doing string to numeric conversion
8044 if necessary.  Handles 'get' magic and operator overloading.
8045
8046 =cut
8047 */
8048
8049 void
8050 Perl_sv_dec(pTHX_ register SV *const sv)
8051 {
8052     dVAR;
8053     if (!sv)
8054         return;
8055     SvGETMAGIC(sv);
8056     sv_dec_nomg(sv);
8057 }
8058
8059 /*
8060 =for apidoc sv_dec_nomg
8061
8062 Auto-decrement of the value in the SV, doing string to numeric conversion
8063 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8064
8065 =cut
8066 */
8067
8068 void
8069 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8070 {
8071     dVAR;
8072     int flags;
8073
8074     if (!sv)
8075         return;
8076     if (SvTHINKFIRST(sv)) {
8077         if (SvIsCOW(sv) || isGV_with_GP(sv))
8078             sv_force_normal_flags(sv, 0);
8079         if (SvREADONLY(sv)) {
8080             if (IN_PERL_RUNTIME)
8081                 Perl_croak_no_modify(aTHX);
8082         }
8083         if (SvROK(sv)) {
8084             IV i;
8085             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8086                 return;
8087             i = PTR2IV(SvRV(sv));
8088             sv_unref(sv);
8089             sv_setiv(sv, i);
8090         }
8091     }
8092     /* Unlike sv_inc we don't have to worry about string-never-numbers
8093        and keeping them magic. But we mustn't warn on punting */
8094     flags = SvFLAGS(sv);
8095     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8096         /* It's publicly an integer, or privately an integer-not-float */
8097 #ifdef PERL_PRESERVE_IVUV
8098       oops_its_int:
8099 #endif
8100         if (SvIsUV(sv)) {
8101             if (SvUVX(sv) == 0) {
8102                 (void)SvIOK_only(sv);
8103                 SvIV_set(sv, -1);
8104             }
8105             else {
8106                 (void)SvIOK_only_UV(sv);
8107                 SvUV_set(sv, SvUVX(sv) - 1);
8108             }   
8109         } else {
8110             if (SvIVX(sv) == IV_MIN) {
8111                 sv_setnv(sv, (NV)IV_MIN);
8112                 goto oops_its_num;
8113             }
8114             else {
8115                 (void)SvIOK_only(sv);
8116                 SvIV_set(sv, SvIVX(sv) - 1);
8117             }   
8118         }
8119         return;
8120     }
8121     if (flags & SVp_NOK) {
8122     oops_its_num:
8123         {
8124             const NV was = SvNVX(sv);
8125             if (NV_OVERFLOWS_INTEGERS_AT &&
8126                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8127                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8128                                "Lost precision when decrementing %" NVff " by 1",
8129                                was);
8130             }
8131             (void)SvNOK_only(sv);
8132             SvNV_set(sv, was - 1.0);
8133             return;
8134         }
8135     }
8136     if (!(flags & SVp_POK)) {
8137         if ((flags & SVTYPEMASK) < SVt_PVIV)
8138             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8139         SvIV_set(sv, -1);
8140         (void)SvIOK_only(sv);
8141         return;
8142     }
8143 #ifdef PERL_PRESERVE_IVUV
8144     {
8145         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8146         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8147             /* Need to try really hard to see if it's an integer.
8148                9.22337203685478e+18 is an integer.
8149                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8150                so $a="9.22337203685478e+18"; $a+0; $a--
8151                needs to be the same as $a="9.22337203685478e+18"; $a--
8152                or we go insane. */
8153         
8154             (void) sv_2iv(sv);
8155             if (SvIOK(sv))
8156                 goto oops_its_int;
8157
8158             /* sv_2iv *should* have made this an NV */
8159             if (flags & SVp_NOK) {
8160                 (void)SvNOK_only(sv);
8161                 SvNV_set(sv, SvNVX(sv) - 1.0);
8162                 return;
8163             }
8164             /* I don't think we can get here. Maybe I should assert this
8165                And if we do get here I suspect that sv_setnv will croak. NWC
8166                Fall through. */
8167 #if defined(USE_LONG_DOUBLE)
8168             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",
8169                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8170 #else
8171             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8172                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8173 #endif
8174         }
8175     }
8176 #endif /* PERL_PRESERVE_IVUV */
8177     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8178 }
8179
8180 /* this define is used to eliminate a chunk of duplicated but shared logic
8181  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8182  * used anywhere but here - yves
8183  */
8184 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8185     STMT_START {      \
8186         EXTEND_MORTAL(1); \
8187         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8188     } STMT_END
8189
8190 /*
8191 =for apidoc sv_mortalcopy
8192
8193 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8194 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8195 explicit call to FREETMPS, or by an implicit call at places such as
8196 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8197
8198 =cut
8199 */
8200
8201 /* Make a string that will exist for the duration of the expression
8202  * evaluation.  Actually, it may have to last longer than that, but
8203  * hopefully we won't free it until it has been assigned to a
8204  * permanent location. */
8205
8206 SV *
8207 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
8208 {
8209     dVAR;
8210     register SV *sv;
8211
8212     new_SV(sv);
8213     sv_setsv(sv,oldstr);
8214     PUSH_EXTEND_MORTAL__SV_C(sv);
8215     SvTEMP_on(sv);
8216     return sv;
8217 }
8218
8219 /*
8220 =for apidoc sv_newmortal
8221
8222 Creates a new null SV which is mortal.  The reference count of the SV is
8223 set to 1.  It will be destroyed "soon", either by an explicit call to
8224 FREETMPS, or by an implicit call at places such as statement boundaries.
8225 See also C<sv_mortalcopy> and C<sv_2mortal>.
8226
8227 =cut
8228 */
8229
8230 SV *
8231 Perl_sv_newmortal(pTHX)
8232 {
8233     dVAR;
8234     register SV *sv;
8235
8236     new_SV(sv);
8237     SvFLAGS(sv) = SVs_TEMP;
8238     PUSH_EXTEND_MORTAL__SV_C(sv);
8239     return sv;
8240 }
8241
8242
8243 /*
8244 =for apidoc newSVpvn_flags
8245
8246 Creates a new SV and copies a string into it.  The reference count for the
8247 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8248 string.  You are responsible for ensuring that the source string is at least
8249 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8250 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8251 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8252 returning.  If C<SVf_UTF8> is set, C<s>
8253 is considered to be in UTF-8 and the
8254 C<SVf_UTF8> flag will be set on the new SV.
8255 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8256
8257     #define newSVpvn_utf8(s, len, u)                    \
8258         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8259
8260 =cut
8261 */
8262
8263 SV *
8264 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8265 {
8266     dVAR;
8267     register SV *sv;
8268
8269     /* All the flags we don't support must be zero.
8270        And we're new code so I'm going to assert this from the start.  */
8271     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8272     new_SV(sv);
8273     sv_setpvn(sv,s,len);
8274
8275     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8276      * and do what it does ourselves here.
8277      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8278      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8279      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8280      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8281      */
8282
8283     SvFLAGS(sv) |= flags;
8284
8285     if(flags & SVs_TEMP){
8286         PUSH_EXTEND_MORTAL__SV_C(sv);
8287     }
8288
8289     return sv;
8290 }
8291
8292 /*
8293 =for apidoc sv_2mortal
8294
8295 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8296 by an explicit call to FREETMPS, or by an implicit call at places such as
8297 statement boundaries.  SvTEMP() is turned on which means that the SV's
8298 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
8299 and C<sv_mortalcopy>.
8300
8301 =cut
8302 */
8303
8304 SV *
8305 Perl_sv_2mortal(pTHX_ register SV *const sv)
8306 {
8307     dVAR;
8308     if (!sv)
8309         return NULL;
8310     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8311         return sv;
8312     PUSH_EXTEND_MORTAL__SV_C(sv);
8313     SvTEMP_on(sv);
8314     return sv;
8315 }
8316
8317 /*
8318 =for apidoc newSVpv
8319
8320 Creates a new SV and copies a string into it.  The reference count for the
8321 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8322 strlen().  For efficiency, consider using C<newSVpvn> instead.
8323
8324 =cut
8325 */
8326
8327 SV *
8328 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8329 {
8330     dVAR;
8331     register SV *sv;
8332
8333     new_SV(sv);
8334     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8335     return sv;
8336 }
8337
8338 /*
8339 =for apidoc newSVpvn
8340
8341 Creates a new SV and copies a string into it.  The reference count for the
8342 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8343 string.  You are responsible for ensuring that the source string is at least
8344 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8345
8346 =cut
8347 */
8348
8349 SV *
8350 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
8351 {
8352     dVAR;
8353     register SV *sv;
8354
8355     new_SV(sv);
8356     sv_setpvn(sv,s,len);
8357     return sv;
8358 }
8359
8360 /*
8361 =for apidoc newSVhek
8362
8363 Creates a new SV from the hash key structure.  It will generate scalars that
8364 point to the shared string table where possible.  Returns a new (undefined)
8365 SV if the hek is NULL.
8366
8367 =cut
8368 */
8369
8370 SV *
8371 Perl_newSVhek(pTHX_ const HEK *const hek)
8372 {
8373     dVAR;
8374     if (!hek) {
8375         SV *sv;
8376
8377         new_SV(sv);
8378         return sv;
8379     }
8380
8381     if (HEK_LEN(hek) == HEf_SVKEY) {
8382         return newSVsv(*(SV**)HEK_KEY(hek));
8383     } else {
8384         const int flags = HEK_FLAGS(hek);
8385         if (flags & HVhek_WASUTF8) {
8386             /* Trouble :-)
8387                Andreas would like keys he put in as utf8 to come back as utf8
8388             */
8389             STRLEN utf8_len = HEK_LEN(hek);
8390             SV * const sv = newSV_type(SVt_PV);
8391             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8392             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8393             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8394             SvUTF8_on (sv);
8395             return sv;
8396         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8397             /* We don't have a pointer to the hv, so we have to replicate the
8398                flag into every HEK. This hv is using custom a hasing
8399                algorithm. Hence we can't return a shared string scalar, as
8400                that would contain the (wrong) hash value, and might get passed
8401                into an hv routine with a regular hash.
8402                Similarly, a hash that isn't using shared hash keys has to have
8403                the flag in every key so that we know not to try to call
8404                share_hek_hek on it.  */
8405
8406             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8407             if (HEK_UTF8(hek))
8408                 SvUTF8_on (sv);
8409             return sv;
8410         }
8411         /* This will be overwhelminly the most common case.  */
8412         {
8413             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8414                more efficient than sharepvn().  */
8415             SV *sv;
8416
8417             new_SV(sv);
8418             sv_upgrade(sv, SVt_PV);
8419             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8420             SvCUR_set(sv, HEK_LEN(hek));
8421             SvLEN_set(sv, 0);
8422             SvREADONLY_on(sv);
8423             SvFAKE_on(sv);
8424             SvPOK_on(sv);
8425             if (HEK_UTF8(hek))
8426                 SvUTF8_on(sv);
8427             return sv;
8428         }
8429     }
8430 }
8431
8432 /*
8433 =for apidoc newSVpvn_share
8434
8435 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8436 table.  If the string does not already exist in the table, it is
8437 created first.  Turns on READONLY and FAKE.  If the C<hash> parameter
8438 is non-zero, that value is used; otherwise the hash is computed.
8439 The string's hash can be later be retrieved from the SV
8440 with the C<SvSHARED_HASH()> macro.  The idea here is
8441 that as the string table is used for shared hash keys these strings will have
8442 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8443
8444 =cut
8445 */
8446
8447 SV *
8448 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8449 {
8450     dVAR;
8451     register SV *sv;
8452     bool is_utf8 = FALSE;
8453     const char *const orig_src = src;
8454
8455     if (len < 0) {
8456         STRLEN tmplen = -len;
8457         is_utf8 = TRUE;
8458         /* See the note in hv.c:hv_fetch() --jhi */
8459         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8460         len = tmplen;
8461     }
8462     if (!hash)
8463         PERL_HASH(hash, src, len);
8464     new_SV(sv);
8465     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8466        changes here, update it there too.  */
8467     sv_upgrade(sv, SVt_PV);
8468     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8469     SvCUR_set(sv, len);
8470     SvLEN_set(sv, 0);
8471     SvREADONLY_on(sv);
8472     SvFAKE_on(sv);
8473     SvPOK_on(sv);
8474     if (is_utf8)
8475         SvUTF8_on(sv);
8476     if (src != orig_src)
8477         Safefree(src);
8478     return sv;
8479 }
8480
8481 /*
8482 =for apidoc newSVpv_share
8483
8484 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8485 string/length pair.
8486
8487 =cut
8488 */
8489
8490 SV *
8491 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8492 {
8493     return newSVpvn_share(src, strlen(src), hash);
8494 }
8495
8496 #if defined(PERL_IMPLICIT_CONTEXT)
8497
8498 /* pTHX_ magic can't cope with varargs, so this is a no-context
8499  * version of the main function, (which may itself be aliased to us).
8500  * Don't access this version directly.
8501  */
8502
8503 SV *
8504 Perl_newSVpvf_nocontext(const char *const pat, ...)
8505 {
8506     dTHX;
8507     register SV *sv;
8508     va_list args;
8509
8510     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8511
8512     va_start(args, pat);
8513     sv = vnewSVpvf(pat, &args);
8514     va_end(args);
8515     return sv;
8516 }
8517 #endif
8518
8519 /*
8520 =for apidoc newSVpvf
8521
8522 Creates a new SV and initializes it with the string formatted like
8523 C<sprintf>.
8524
8525 =cut
8526 */
8527
8528 SV *
8529 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8530 {
8531     register SV *sv;
8532     va_list args;
8533
8534     PERL_ARGS_ASSERT_NEWSVPVF;
8535
8536     va_start(args, pat);
8537     sv = vnewSVpvf(pat, &args);
8538     va_end(args);
8539     return sv;
8540 }
8541
8542 /* backend for newSVpvf() and newSVpvf_nocontext() */
8543
8544 SV *
8545 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8546 {
8547     dVAR;
8548     register SV *sv;
8549
8550     PERL_ARGS_ASSERT_VNEWSVPVF;
8551
8552     new_SV(sv);
8553     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8554     return sv;
8555 }
8556
8557 /*
8558 =for apidoc newSVnv
8559
8560 Creates a new SV and copies a floating point value into it.
8561 The reference count for the SV is set to 1.
8562
8563 =cut
8564 */
8565
8566 SV *
8567 Perl_newSVnv(pTHX_ const NV n)
8568 {
8569     dVAR;
8570     register SV *sv;
8571
8572     new_SV(sv);
8573     sv_setnv(sv,n);
8574     return sv;
8575 }
8576
8577 /*
8578 =for apidoc newSViv
8579
8580 Creates a new SV and copies an integer into it.  The reference count for the
8581 SV is set to 1.
8582
8583 =cut
8584 */
8585
8586 SV *
8587 Perl_newSViv(pTHX_ const IV i)
8588 {
8589     dVAR;
8590     register SV *sv;
8591
8592     new_SV(sv);
8593     sv_setiv(sv,i);
8594     return sv;
8595 }
8596
8597 /*
8598 =for apidoc newSVuv
8599
8600 Creates a new SV and copies an unsigned integer into it.
8601 The reference count for the SV is set to 1.
8602
8603 =cut
8604 */
8605
8606 SV *
8607 Perl_newSVuv(pTHX_ const UV u)
8608 {
8609     dVAR;
8610     register SV *sv;
8611
8612     new_SV(sv);
8613     sv_setuv(sv,u);
8614     return sv;
8615 }
8616
8617 /*
8618 =for apidoc newSV_type
8619
8620 Creates a new SV, of the type specified.  The reference count for the new SV
8621 is set to 1.
8622
8623 =cut
8624 */
8625
8626 SV *
8627 Perl_newSV_type(pTHX_ const svtype type)
8628 {
8629     register SV *sv;
8630
8631     new_SV(sv);
8632     sv_upgrade(sv, type);
8633     return sv;
8634 }
8635
8636 /*
8637 =for apidoc newRV_noinc
8638
8639 Creates an RV wrapper for an SV.  The reference count for the original
8640 SV is B<not> incremented.
8641
8642 =cut
8643 */
8644
8645 SV *
8646 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8647 {
8648     dVAR;
8649     register SV *sv = newSV_type(SVt_IV);
8650
8651     PERL_ARGS_ASSERT_NEWRV_NOINC;
8652
8653     SvTEMP_off(tmpRef);
8654     SvRV_set(sv, tmpRef);
8655     SvROK_on(sv);
8656     return sv;
8657 }
8658
8659 /* newRV_inc is the official function name to use now.
8660  * newRV_inc is in fact #defined to newRV in sv.h
8661  */
8662
8663 SV *
8664 Perl_newRV(pTHX_ SV *const sv)
8665 {
8666     dVAR;
8667
8668     PERL_ARGS_ASSERT_NEWRV;
8669
8670     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8671 }
8672
8673 /*
8674 =for apidoc newSVsv
8675
8676 Creates a new SV which is an exact duplicate of the original SV.
8677 (Uses C<sv_setsv>.)
8678
8679 =cut
8680 */
8681
8682 SV *
8683 Perl_newSVsv(pTHX_ register SV *const old)
8684 {
8685     dVAR;
8686     register SV *sv;
8687
8688     if (!old)
8689         return NULL;
8690     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8691         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8692         return NULL;
8693     }
8694     new_SV(sv);
8695     /* SV_GMAGIC is the default for sv_setv()
8696        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8697        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8698     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8699     return sv;
8700 }
8701
8702 /*
8703 =for apidoc sv_reset
8704
8705 Underlying implementation for the C<reset> Perl function.
8706 Note that the perl-level function is vaguely deprecated.
8707
8708 =cut
8709 */
8710
8711 void
8712 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8713 {
8714     dVAR;
8715     char todo[PERL_UCHAR_MAX+1];
8716
8717     PERL_ARGS_ASSERT_SV_RESET;
8718
8719     if (!stash)
8720         return;
8721
8722     if (!*s) {          /* reset ?? searches */
8723         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8724         if (mg) {
8725             const U32 count = mg->mg_len / sizeof(PMOP**);
8726             PMOP **pmp = (PMOP**) mg->mg_ptr;
8727             PMOP *const *const end = pmp + count;
8728
8729             while (pmp < end) {
8730 #ifdef USE_ITHREADS
8731                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8732 #else
8733                 (*pmp)->op_pmflags &= ~PMf_USED;
8734 #endif
8735                 ++pmp;
8736             }
8737         }
8738         return;
8739     }
8740
8741     /* reset variables */
8742
8743     if (!HvARRAY(stash))
8744         return;
8745
8746     Zero(todo, 256, char);
8747     while (*s) {
8748         I32 max;
8749         I32 i = (unsigned char)*s;
8750         if (s[1] == '-') {
8751             s += 2;
8752         }
8753         max = (unsigned char)*s++;
8754         for ( ; i <= max; i++) {
8755             todo[i] = 1;
8756         }
8757         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8758             HE *entry;
8759             for (entry = HvARRAY(stash)[i];
8760                  entry;
8761                  entry = HeNEXT(entry))
8762             {
8763                 register GV *gv;
8764                 register SV *sv;
8765
8766                 if (!todo[(U8)*HeKEY(entry)])
8767                     continue;
8768                 gv = MUTABLE_GV(HeVAL(entry));
8769                 sv = GvSV(gv);
8770                 if (sv) {
8771                     if (SvTHINKFIRST(sv)) {
8772                         if (!SvREADONLY(sv) && SvROK(sv))
8773                             sv_unref(sv);
8774                         /* XXX Is this continue a bug? Why should THINKFIRST
8775                            exempt us from resetting arrays and hashes?  */
8776                         continue;
8777                     }
8778                     SvOK_off(sv);
8779                     if (SvTYPE(sv) >= SVt_PV) {
8780                         SvCUR_set(sv, 0);
8781                         if (SvPVX_const(sv) != NULL)
8782                             *SvPVX(sv) = '\0';
8783                         SvTAINT(sv);
8784                     }
8785                 }
8786                 if (GvAV(gv)) {
8787                     av_clear(GvAV(gv));
8788                 }
8789                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8790 #if defined(VMS)
8791                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8792 #else /* ! VMS */
8793                     hv_clear(GvHV(gv));
8794 #  if defined(USE_ENVIRON_ARRAY)
8795                     if (gv == PL_envgv)
8796                         my_clearenv();
8797 #  endif /* USE_ENVIRON_ARRAY */
8798 #endif /* VMS */
8799                 }
8800             }
8801         }
8802     }
8803 }
8804
8805 /*
8806 =for apidoc sv_2io
8807
8808 Using various gambits, try to get an IO from an SV: the IO slot if its a
8809 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8810 named after the PV if we're a string.
8811
8812 'Get' magic is ignored on the sv passed in, but will be called on
8813 C<SvRV(sv)> if sv is an RV.
8814
8815 =cut
8816 */
8817
8818 IO*
8819 Perl_sv_2io(pTHX_ SV *const sv)
8820 {
8821     IO* io;
8822     GV* gv;
8823
8824     PERL_ARGS_ASSERT_SV_2IO;
8825
8826     switch (SvTYPE(sv)) {
8827     case SVt_PVIO:
8828         io = MUTABLE_IO(sv);
8829         break;
8830     case SVt_PVGV:
8831     case SVt_PVLV:
8832         if (isGV_with_GP(sv)) {
8833             gv = MUTABLE_GV(sv);
8834             io = GvIO(gv);
8835             if (!io)
8836                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
8837                                     HEKfARG(GvNAME_HEK(gv)));
8838             break;
8839         }
8840         /* FALL THROUGH */
8841     default:
8842         if (!SvOK(sv))
8843             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8844         if (SvROK(sv)) {
8845             SvGETMAGIC(SvRV(sv));
8846             return sv_2io(SvRV(sv));
8847         }
8848         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
8849         if (gv)
8850             io = GvIO(gv);
8851         else
8852             io = 0;
8853         if (!io) {
8854             SV *newsv = sv;
8855             if (SvGMAGICAL(sv)) {
8856                 newsv = sv_newmortal();
8857                 sv_setsv_nomg(newsv, sv);
8858             }
8859             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
8860         }
8861         break;
8862     }
8863     return io;
8864 }
8865
8866 /*
8867 =for apidoc sv_2cv
8868
8869 Using various gambits, try to get a CV from an SV; in addition, try if
8870 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8871 The flags in C<lref> are passed to gv_fetchsv.
8872
8873 =cut
8874 */
8875
8876 CV *
8877 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8878 {
8879     dVAR;
8880     GV *gv = NULL;
8881     CV *cv = NULL;
8882
8883     PERL_ARGS_ASSERT_SV_2CV;
8884
8885     if (!sv) {
8886         *st = NULL;
8887         *gvp = NULL;
8888         return NULL;
8889     }
8890     switch (SvTYPE(sv)) {
8891     case SVt_PVCV:
8892         *st = CvSTASH(sv);
8893         *gvp = NULL;
8894         return MUTABLE_CV(sv);
8895     case SVt_PVHV:
8896     case SVt_PVAV:
8897         *st = NULL;
8898         *gvp = NULL;
8899         return NULL;
8900     default:
8901         SvGETMAGIC(sv);
8902         if (SvROK(sv)) {
8903             if (SvAMAGIC(sv))
8904                 sv = amagic_deref_call(sv, to_cv_amg);
8905
8906             sv = SvRV(sv);
8907             if (SvTYPE(sv) == SVt_PVCV) {
8908                 cv = MUTABLE_CV(sv);
8909                 *gvp = NULL;
8910                 *st = CvSTASH(cv);
8911                 return cv;
8912             }
8913             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
8914                 gv = MUTABLE_GV(sv);
8915             else
8916                 Perl_croak(aTHX_ "Not a subroutine reference");
8917         }
8918         else if (isGV_with_GP(sv)) {
8919             gv = MUTABLE_GV(sv);
8920         }
8921         else {
8922             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
8923         }
8924         *gvp = gv;
8925         if (!gv) {
8926             *st = NULL;
8927             return NULL;
8928         }
8929         /* Some flags to gv_fetchsv mean don't really create the GV  */
8930         if (!isGV_with_GP(gv)) {
8931             *st = NULL;
8932             return NULL;
8933         }
8934         *st = GvESTASH(gv);
8935         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
8936             SV *tmpsv;
8937             ENTER;
8938             tmpsv = newSV(0);
8939             gv_efullname3(tmpsv, gv, NULL);
8940             /* XXX this is probably not what they think they're getting.
8941              * It has the same effect as "sub name;", i.e. just a forward
8942              * declaration! */
8943             newSUB(start_subparse(FALSE, 0),
8944                    newSVOP(OP_CONST, 0, tmpsv),
8945                    NULL, NULL);
8946             LEAVE;
8947             if (!GvCVu(gv))
8948                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
8949                            SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8950         }
8951         return GvCVu(gv);
8952     }
8953 }
8954
8955 /*
8956 =for apidoc sv_true
8957
8958 Returns true if the SV has a true value by Perl's rules.
8959 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8960 instead use an in-line version.
8961
8962 =cut
8963 */
8964
8965 I32
8966 Perl_sv_true(pTHX_ register SV *const sv)
8967 {
8968     if (!sv)
8969         return 0;
8970     if (SvPOK(sv)) {
8971         register const XPV* const tXpv = (XPV*)SvANY(sv);
8972         if (tXpv &&
8973                 (tXpv->xpv_cur > 1 ||
8974                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
8975             return 1;
8976         else
8977             return 0;
8978     }
8979     else {
8980         if (SvIOK(sv))
8981             return SvIVX(sv) != 0;
8982         else {
8983             if (SvNOK(sv))
8984                 return SvNVX(sv) != 0.0;
8985             else
8986                 return sv_2bool(sv);
8987         }
8988     }
8989 }
8990
8991 /*
8992 =for apidoc sv_pvn_force
8993
8994 Get a sensible string out of the SV somehow.
8995 A private implementation of the C<SvPV_force> macro for compilers which
8996 can't cope with complex macro expressions.  Always use the macro instead.
8997
8998 =for apidoc sv_pvn_force_flags
8999
9000 Get a sensible string out of the SV somehow.
9001 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9002 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9003 implemented in terms of this function.
9004 You normally want to use the various wrapper macros instead: see
9005 C<SvPV_force> and C<SvPV_force_nomg>
9006
9007 =cut
9008 */
9009
9010 char *
9011 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9012 {
9013     dVAR;
9014
9015     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9016
9017     if (SvTHINKFIRST(sv) && !SvROK(sv))
9018         sv_force_normal_flags(sv, 0);
9019
9020     if (SvPOK(sv)) {
9021         if (lp)
9022             *lp = SvCUR(sv);
9023     }
9024     else {
9025         char *s;
9026         STRLEN len;
9027  
9028         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9029             const char * const ref = sv_reftype(sv,0);
9030             if (PL_op)
9031                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9032                            ref, OP_DESC(PL_op));
9033             else
9034                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9035         }
9036         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
9037             || isGV_with_GP(sv))
9038             /* diag_listed_as: Can't coerce %s to %s in %s */
9039             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9040                 OP_DESC(PL_op));
9041         s = sv_2pv_flags(sv, &len, flags);
9042         if (lp)
9043             *lp = len;
9044
9045         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9046             if (SvROK(sv))
9047                 sv_unref(sv);
9048             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9049             SvGROW(sv, len + 1);
9050             Move(s,SvPVX(sv),len,char);
9051             SvCUR_set(sv, len);
9052             SvPVX(sv)[len] = '\0';
9053         }
9054         if (!SvPOK(sv)) {
9055             SvPOK_on(sv);               /* validate pointer */
9056             SvTAINT(sv);
9057             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9058                                   PTR2UV(sv),SvPVX_const(sv)));
9059         }
9060     }
9061     return SvPVX_mutable(sv);
9062 }
9063
9064 /*
9065 =for apidoc sv_pvbyten_force
9066
9067 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9068 instead.
9069
9070 =cut
9071 */
9072
9073 char *
9074 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9075 {
9076     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9077
9078     sv_pvn_force(sv,lp);
9079     sv_utf8_downgrade(sv,0);
9080     *lp = SvCUR(sv);
9081     return SvPVX(sv);
9082 }
9083
9084 /*
9085 =for apidoc sv_pvutf8n_force
9086
9087 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9088 instead.
9089
9090 =cut
9091 */
9092
9093 char *
9094 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9095 {
9096     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9097
9098     sv_pvn_force(sv,lp);
9099     sv_utf8_upgrade(sv);
9100     *lp = SvCUR(sv);
9101     return SvPVX(sv);
9102 }
9103
9104 /*
9105 =for apidoc sv_reftype
9106
9107 Returns a string describing what the SV is a reference to.
9108
9109 =cut
9110 */
9111
9112 const char *
9113 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9114 {
9115     PERL_ARGS_ASSERT_SV_REFTYPE;
9116     if (ob && SvOBJECT(sv)) {
9117         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9118     }
9119     else {
9120         switch (SvTYPE(sv)) {
9121         case SVt_NULL:
9122         case SVt_IV:
9123         case SVt_NV:
9124         case SVt_PV:
9125         case SVt_PVIV:
9126         case SVt_PVNV:
9127         case SVt_PVMG:
9128                                 if (SvVOK(sv))
9129                                     return "VSTRING";
9130                                 if (SvROK(sv))
9131                                     return "REF";
9132                                 else
9133                                     return "SCALAR";
9134
9135         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9136                                 /* tied lvalues should appear to be
9137                                  * scalars for backwards compatibility */
9138                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9139                                     ? "SCALAR" : "LVALUE");
9140         case SVt_PVAV:          return "ARRAY";
9141         case SVt_PVHV:          return "HASH";
9142         case SVt_PVCV:          return "CODE";
9143         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9144                                     ? "GLOB" : "SCALAR");
9145         case SVt_PVFM:          return "FORMAT";
9146         case SVt_PVIO:          return "IO";
9147         case SVt_BIND:          return "BIND";
9148         case SVt_REGEXP:        return "REGEXP";
9149         default:                return "UNKNOWN";
9150         }
9151     }
9152 }
9153
9154 /*
9155 =for apidoc sv_ref
9156
9157 Returns a SV describing what the SV passed in is a reference to.
9158
9159 =cut
9160 */
9161
9162 SV *
9163 Perl_sv_ref(pTHX_ register SV *dst, const SV *const sv, const int ob)
9164 {
9165     PERL_ARGS_ASSERT_SV_REF;
9166
9167     if (!dst)
9168         dst = sv_newmortal();
9169
9170     if (ob && SvOBJECT(sv)) {
9171         HvNAME_get(SvSTASH(sv))
9172                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9173                     : sv_setpvn(dst, "__ANON__", 8);
9174     }
9175     else {
9176         const char * reftype = sv_reftype(sv, 0);
9177         sv_setpv(dst, reftype);
9178     }
9179     return dst;
9180 }
9181
9182 /*
9183 =for apidoc sv_isobject
9184
9185 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9186 object.  If the SV is not an RV, or if the object is not blessed, then this
9187 will return false.
9188
9189 =cut
9190 */
9191
9192 int
9193 Perl_sv_isobject(pTHX_ SV *sv)
9194 {
9195     if (!sv)
9196         return 0;
9197     SvGETMAGIC(sv);
9198     if (!SvROK(sv))
9199         return 0;
9200     sv = SvRV(sv);
9201     if (!SvOBJECT(sv))
9202         return 0;
9203     return 1;
9204 }
9205
9206 /*
9207 =for apidoc sv_isa
9208
9209 Returns a boolean indicating whether the SV is blessed into the specified
9210 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9211 an inheritance relationship.
9212
9213 =cut
9214 */
9215
9216 int
9217 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9218 {
9219     const char *hvname;
9220
9221     PERL_ARGS_ASSERT_SV_ISA;
9222
9223     if (!sv)
9224         return 0;
9225     SvGETMAGIC(sv);
9226     if (!SvROK(sv))
9227         return 0;
9228     sv = SvRV(sv);
9229     if (!SvOBJECT(sv))
9230         return 0;
9231     hvname = HvNAME_get(SvSTASH(sv));
9232     if (!hvname)
9233         return 0;
9234
9235     return strEQ(hvname, name);
9236 }
9237
9238 /*
9239 =for apidoc newSVrv
9240
9241 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9242 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9243 be blessed in the specified package.  The new SV is returned and its
9244 reference count is 1.
9245
9246 =cut
9247 */
9248
9249 SV*
9250 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9251 {
9252     dVAR;
9253     SV *sv;
9254
9255     PERL_ARGS_ASSERT_NEWSVRV;
9256
9257     new_SV(sv);
9258
9259     SV_CHECK_THINKFIRST_COW_DROP(rv);
9260     (void)SvAMAGIC_off(rv);
9261
9262     if (SvTYPE(rv) >= SVt_PVMG) {
9263         const U32 refcnt = SvREFCNT(rv);
9264         SvREFCNT(rv) = 0;
9265         sv_clear(rv);
9266         SvFLAGS(rv) = 0;
9267         SvREFCNT(rv) = refcnt;
9268
9269         sv_upgrade(rv, SVt_IV);
9270     } else if (SvROK(rv)) {
9271         SvREFCNT_dec(SvRV(rv));
9272     } else {
9273         prepare_SV_for_RV(rv);
9274     }
9275
9276     SvOK_off(rv);
9277     SvRV_set(rv, sv);
9278     SvROK_on(rv);
9279
9280     if (classname) {
9281         HV* const stash = gv_stashpv(classname, GV_ADD);
9282         (void)sv_bless(rv, stash);
9283     }
9284     return sv;
9285 }
9286
9287 /*
9288 =for apidoc sv_setref_pv
9289
9290 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9291 argument will be upgraded to an RV.  That RV will be modified to point to
9292 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9293 into the SV.  The C<classname> argument indicates the package for the
9294 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9295 will have a reference count of 1, and the RV will be returned.
9296
9297 Do not use with other Perl types such as HV, AV, SV, CV, because those
9298 objects will become corrupted by the pointer copy process.
9299
9300 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9301
9302 =cut
9303 */
9304
9305 SV*
9306 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9307 {
9308     dVAR;
9309
9310     PERL_ARGS_ASSERT_SV_SETREF_PV;
9311
9312     if (!pv) {
9313         sv_setsv(rv, &PL_sv_undef);
9314         SvSETMAGIC(rv);
9315     }
9316     else
9317         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9318     return rv;
9319 }
9320
9321 /*
9322 =for apidoc sv_setref_iv
9323
9324 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9325 argument will be upgraded to an RV.  That RV will be modified to point to
9326 the new SV.  The C<classname> argument indicates the package for the
9327 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9328 will have a reference count of 1, and the RV will be returned.
9329
9330 =cut
9331 */
9332
9333 SV*
9334 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9335 {
9336     PERL_ARGS_ASSERT_SV_SETREF_IV;
9337
9338     sv_setiv(newSVrv(rv,classname), iv);
9339     return rv;
9340 }
9341
9342 /*
9343 =for apidoc sv_setref_uv
9344
9345 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9346 argument will be upgraded to an RV.  That RV will be modified to point to
9347 the new SV.  The C<classname> argument indicates the package for the
9348 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9349 will have a reference count of 1, and the RV will be returned.
9350
9351 =cut
9352 */
9353
9354 SV*
9355 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9356 {
9357     PERL_ARGS_ASSERT_SV_SETREF_UV;
9358
9359     sv_setuv(newSVrv(rv,classname), uv);
9360     return rv;
9361 }
9362
9363 /*
9364 =for apidoc sv_setref_nv
9365
9366 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9367 argument will be upgraded to an RV.  That RV will be modified to point to
9368 the new SV.  The C<classname> argument indicates the package for the
9369 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9370 will have a reference count of 1, and the RV will be returned.
9371
9372 =cut
9373 */
9374
9375 SV*
9376 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9377 {
9378     PERL_ARGS_ASSERT_SV_SETREF_NV;
9379
9380     sv_setnv(newSVrv(rv,classname), nv);
9381     return rv;
9382 }
9383
9384 /*
9385 =for apidoc sv_setref_pvn
9386
9387 Copies a string into a new SV, optionally blessing the SV.  The length of the
9388 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9389 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9390 argument indicates the package for the blessing.  Set C<classname> to
9391 C<NULL> to avoid the blessing.  The new SV will have a reference count
9392 of 1, and the RV will be returned.
9393
9394 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9395
9396 =cut
9397 */
9398
9399 SV*
9400 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9401                    const char *const pv, const STRLEN n)
9402 {
9403     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9404
9405     sv_setpvn(newSVrv(rv,classname), pv, n);
9406     return rv;
9407 }
9408
9409 /*
9410 =for apidoc sv_bless
9411
9412 Blesses an SV into a specified package.  The SV must be an RV.  The package
9413 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9414 of the SV is unaffected.
9415
9416 =cut
9417 */
9418
9419 SV*
9420 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9421 {
9422     dVAR;
9423     SV *tmpRef;
9424
9425     PERL_ARGS_ASSERT_SV_BLESS;
9426
9427     if (!SvROK(sv))
9428         Perl_croak(aTHX_ "Can't bless non-reference value");
9429     tmpRef = SvRV(sv);
9430     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9431         if (SvIsCOW(tmpRef))
9432             sv_force_normal_flags(tmpRef, 0);
9433         if (SvREADONLY(tmpRef))
9434             Perl_croak_no_modify(aTHX);
9435         if (SvOBJECT(tmpRef)) {
9436             if (SvTYPE(tmpRef) != SVt_PVIO)
9437                 --PL_sv_objcount;
9438             SvREFCNT_dec(SvSTASH(tmpRef));
9439         }
9440     }
9441     SvOBJECT_on(tmpRef);
9442     if (SvTYPE(tmpRef) != SVt_PVIO)
9443         ++PL_sv_objcount;
9444     SvUPGRADE(tmpRef, SVt_PVMG);
9445     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9446
9447     if (Gv_AMG(stash))
9448         SvAMAGIC_on(sv);
9449     else
9450         (void)SvAMAGIC_off(sv);
9451
9452     if(SvSMAGICAL(tmpRef))
9453         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9454             mg_set(tmpRef);
9455
9456
9457
9458     return sv;
9459 }
9460
9461 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9462  * as it is after unglobbing it.
9463  */
9464
9465 STATIC void
9466 S_sv_unglob(pTHX_ SV *const sv)
9467 {
9468     dVAR;
9469     void *xpvmg;
9470     HV *stash;
9471     SV * const temp = sv_newmortal();
9472
9473     PERL_ARGS_ASSERT_SV_UNGLOB;
9474
9475     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9476     SvFAKE_off(sv);
9477     gv_efullname3(temp, MUTABLE_GV(sv), "*");
9478
9479     if (GvGP(sv)) {
9480         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9481            && HvNAME_get(stash))
9482             mro_method_changed_in(stash);
9483         gp_free(MUTABLE_GV(sv));
9484     }
9485     if (GvSTASH(sv)) {
9486         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9487         GvSTASH(sv) = NULL;
9488     }
9489     GvMULTI_off(sv);
9490     if (GvNAME_HEK(sv)) {
9491         unshare_hek(GvNAME_HEK(sv));
9492     }
9493     isGV_with_GP_off(sv);
9494
9495     if(SvTYPE(sv) == SVt_PVGV) {
9496         /* need to keep SvANY(sv) in the right arena */
9497         xpvmg = new_XPVMG();
9498         StructCopy(SvANY(sv), xpvmg, XPVMG);
9499         del_XPVGV(SvANY(sv));
9500         SvANY(sv) = xpvmg;
9501
9502         SvFLAGS(sv) &= ~SVTYPEMASK;
9503         SvFLAGS(sv) |= SVt_PVMG;
9504     }
9505
9506     /* Intentionally not calling any local SET magic, as this isn't so much a
9507        set operation as merely an internal storage change.  */
9508     sv_setsv_flags(sv, temp, 0);
9509 }
9510
9511 /*
9512 =for apidoc sv_unref_flags
9513
9514 Unsets the RV status of the SV, and decrements the reference count of
9515 whatever was being referenced by the RV.  This can almost be thought of
9516 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9517 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9518 (otherwise the decrementing is conditional on the reference count being
9519 different from one or the reference being a readonly SV).
9520 See C<SvROK_off>.
9521
9522 =cut
9523 */
9524
9525 void
9526 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9527 {
9528     SV* const target = SvRV(ref);
9529
9530     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9531
9532     if (SvWEAKREF(ref)) {
9533         sv_del_backref(target, ref);
9534         SvWEAKREF_off(ref);
9535         SvRV_set(ref, NULL);
9536         return;
9537     }
9538     SvRV_set(ref, NULL);
9539     SvROK_off(ref);
9540     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9541        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9542     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9543         SvREFCNT_dec(target);
9544     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9545         sv_2mortal(target);     /* Schedule for freeing later */
9546 }
9547
9548 /*
9549 =for apidoc sv_untaint
9550
9551 Untaint an SV.  Use C<SvTAINTED_off> instead.
9552
9553 =cut
9554 */
9555
9556 void
9557 Perl_sv_untaint(pTHX_ SV *const sv)
9558 {
9559     PERL_ARGS_ASSERT_SV_UNTAINT;
9560
9561     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9562         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9563         if (mg)
9564             mg->mg_len &= ~1;
9565     }
9566 }
9567
9568 /*
9569 =for apidoc sv_tainted
9570
9571 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9572
9573 =cut
9574 */
9575
9576 bool
9577 Perl_sv_tainted(pTHX_ SV *const sv)
9578 {
9579     PERL_ARGS_ASSERT_SV_TAINTED;
9580
9581     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9582         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9583         if (mg && (mg->mg_len & 1) )
9584             return TRUE;
9585     }
9586     return FALSE;
9587 }
9588
9589 /*
9590 =for apidoc sv_setpviv
9591
9592 Copies an integer into the given SV, also updating its string value.
9593 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9594
9595 =cut
9596 */
9597
9598 void
9599 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9600 {
9601     char buf[TYPE_CHARS(UV)];
9602     char *ebuf;
9603     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9604
9605     PERL_ARGS_ASSERT_SV_SETPVIV;
9606
9607     sv_setpvn(sv, ptr, ebuf - ptr);
9608 }
9609
9610 /*
9611 =for apidoc sv_setpviv_mg
9612
9613 Like C<sv_setpviv>, but also handles 'set' magic.
9614
9615 =cut
9616 */
9617
9618 void
9619 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9620 {
9621     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9622
9623     sv_setpviv(sv, iv);
9624     SvSETMAGIC(sv);
9625 }
9626
9627 #if defined(PERL_IMPLICIT_CONTEXT)
9628
9629 /* pTHX_ magic can't cope with varargs, so this is a no-context
9630  * version of the main function, (which may itself be aliased to us).
9631  * Don't access this version directly.
9632  */
9633
9634 void
9635 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9636 {
9637     dTHX;
9638     va_list args;
9639
9640     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9641
9642     va_start(args, pat);
9643     sv_vsetpvf(sv, pat, &args);
9644     va_end(args);
9645 }
9646
9647 /* pTHX_ magic can't cope with varargs, so this is a no-context
9648  * version of the main function, (which may itself be aliased to us).
9649  * Don't access this version directly.
9650  */
9651
9652 void
9653 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9654 {
9655     dTHX;
9656     va_list args;
9657
9658     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9659
9660     va_start(args, pat);
9661     sv_vsetpvf_mg(sv, pat, &args);
9662     va_end(args);
9663 }
9664 #endif
9665
9666 /*
9667 =for apidoc sv_setpvf
9668
9669 Works like C<sv_catpvf> but copies the text into the SV instead of
9670 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9671
9672 =cut
9673 */
9674
9675 void
9676 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9677 {
9678     va_list args;
9679
9680     PERL_ARGS_ASSERT_SV_SETPVF;
9681
9682     va_start(args, pat);
9683     sv_vsetpvf(sv, pat, &args);
9684     va_end(args);
9685 }
9686
9687 /*
9688 =for apidoc sv_vsetpvf
9689
9690 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9691 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9692
9693 Usually used via its frontend C<sv_setpvf>.
9694
9695 =cut
9696 */
9697
9698 void
9699 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9700 {
9701     PERL_ARGS_ASSERT_SV_VSETPVF;
9702
9703     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9704 }
9705
9706 /*
9707 =for apidoc sv_setpvf_mg
9708
9709 Like C<sv_setpvf>, but also handles 'set' magic.
9710
9711 =cut
9712 */
9713
9714 void
9715 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9716 {
9717     va_list args;
9718
9719     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9720
9721     va_start(args, pat);
9722     sv_vsetpvf_mg(sv, pat, &args);
9723     va_end(args);
9724 }
9725
9726 /*
9727 =for apidoc sv_vsetpvf_mg
9728
9729 Like C<sv_vsetpvf>, but also handles 'set' magic.
9730
9731 Usually used via its frontend C<sv_setpvf_mg>.
9732
9733 =cut
9734 */
9735
9736 void
9737 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9738 {
9739     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9740
9741     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9742     SvSETMAGIC(sv);
9743 }
9744
9745 #if defined(PERL_IMPLICIT_CONTEXT)
9746
9747 /* pTHX_ magic can't cope with varargs, so this is a no-context
9748  * version of the main function, (which may itself be aliased to us).
9749  * Don't access this version directly.
9750  */
9751
9752 void
9753 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9754 {
9755     dTHX;
9756     va_list args;
9757
9758     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9759
9760     va_start(args, pat);
9761     sv_vcatpvf(sv, pat, &args);
9762     va_end(args);
9763 }
9764
9765 /* pTHX_ magic can't cope with varargs, so this is a no-context
9766  * version of the main function, (which may itself be aliased to us).
9767  * Don't access this version directly.
9768  */
9769
9770 void
9771 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9772 {
9773     dTHX;
9774     va_list args;
9775
9776     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9777
9778     va_start(args, pat);
9779     sv_vcatpvf_mg(sv, pat, &args);
9780     va_end(args);
9781 }
9782 #endif
9783
9784 /*
9785 =for apidoc sv_catpvf
9786
9787 Processes its arguments like C<sprintf> and appends the formatted
9788 output to an SV.  If the appended data contains "wide" characters
9789 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9790 and characters >255 formatted with %c), the original SV might get
9791 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9792 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
9793 valid UTF-8; if the original SV was bytes, the pattern should be too.
9794
9795 =cut */
9796
9797 void
9798 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9799 {
9800     va_list args;
9801
9802     PERL_ARGS_ASSERT_SV_CATPVF;
9803
9804     va_start(args, pat);
9805     sv_vcatpvf(sv, pat, &args);
9806     va_end(args);
9807 }
9808
9809 /*
9810 =for apidoc sv_vcatpvf
9811
9812 Processes its arguments like C<vsprintf> and appends the formatted output
9813 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9814
9815 Usually used via its frontend C<sv_catpvf>.
9816
9817 =cut
9818 */
9819
9820 void
9821 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9822 {
9823     PERL_ARGS_ASSERT_SV_VCATPVF;
9824
9825     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9826 }
9827
9828 /*
9829 =for apidoc sv_catpvf_mg
9830
9831 Like C<sv_catpvf>, but also handles 'set' magic.
9832
9833 =cut
9834 */
9835
9836 void
9837 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9838 {
9839     va_list args;
9840
9841     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9842
9843     va_start(args, pat);
9844     sv_vcatpvf_mg(sv, pat, &args);
9845     va_end(args);
9846 }
9847
9848 /*
9849 =for apidoc sv_vcatpvf_mg
9850
9851 Like C<sv_vcatpvf>, but also handles 'set' magic.
9852
9853 Usually used via its frontend C<sv_catpvf_mg>.
9854
9855 =cut
9856 */
9857
9858 void
9859 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9860 {
9861     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9862
9863     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9864     SvSETMAGIC(sv);
9865 }
9866
9867 /*
9868 =for apidoc sv_vsetpvfn
9869
9870 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9871 appending it.
9872
9873 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9874
9875 =cut
9876 */
9877
9878 void
9879 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9880                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9881 {
9882     PERL_ARGS_ASSERT_SV_VSETPVFN;
9883
9884     sv_setpvs(sv, "");
9885     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9886 }
9887
9888
9889 /*
9890  * Warn of missing argument to sprintf, and then return a defined value
9891  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9892  */
9893 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9894 STATIC SV*
9895 S_vcatpvfn_missing_argument(pTHX) {
9896     if (ckWARN(WARN_MISSING)) {
9897         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9898                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9899     }
9900     return &PL_sv_no;
9901 }
9902
9903
9904 STATIC I32
9905 S_expect_number(pTHX_ char **const pattern)
9906 {
9907     dVAR;
9908     I32 var = 0;
9909
9910     PERL_ARGS_ASSERT_EXPECT_NUMBER;
9911
9912     switch (**pattern) {
9913     case '1': case '2': case '3':
9914     case '4': case '5': case '6':
9915     case '7': case '8': case '9':
9916         var = *(*pattern)++ - '0';
9917         while (isDIGIT(**pattern)) {
9918             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9919             if (tmp < var)
9920                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9921             var = tmp;
9922         }
9923     }
9924     return var;
9925 }
9926
9927 STATIC char *
9928 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9929 {
9930     const int neg = nv < 0;
9931     UV uv;
9932
9933     PERL_ARGS_ASSERT_F0CONVERT;
9934
9935     if (neg)
9936         nv = -nv;
9937     if (nv < UV_MAX) {
9938         char *p = endbuf;
9939         nv += 0.5;
9940         uv = (UV)nv;
9941         if (uv & 1 && uv == nv)
9942             uv--;                       /* Round to even */
9943         do {
9944             const unsigned dig = uv % 10;
9945             *--p = '0' + dig;
9946         } while (uv /= 10);
9947         if (neg)
9948             *--p = '-';
9949         *len = endbuf - p;
9950         return p;
9951     }
9952     return NULL;
9953 }
9954
9955
9956 /*
9957 =for apidoc sv_vcatpvfn
9958
9959 Processes its arguments like C<vsprintf> and appends the formatted output
9960 to an SV.  Uses an array of SVs if the C style variable argument list is
9961 missing (NULL).  When running with taint checks enabled, indicates via
9962 C<maybe_tainted> if results are untrustworthy (often due to the use of
9963 locales).
9964
9965 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9966
9967 =cut
9968 */
9969
9970
9971 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
9972                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
9973                         vec_utf8 = DO_UTF8(vecsv);
9974
9975 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9976
9977 void
9978 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9979                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9980 {
9981     dVAR;
9982     char *p;
9983     char *q;
9984     const char *patend;
9985     STRLEN origlen;
9986     I32 svix = 0;
9987     static const char nullstr[] = "(null)";
9988     SV *argsv = NULL;
9989     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
9990     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
9991     SV *nsv = NULL;
9992     /* Times 4: a decimal digit takes more than 3 binary digits.
9993      * NV_DIG: mantissa takes than many decimal digits.
9994      * Plus 32: Playing safe. */
9995     char ebuf[IV_DIG * 4 + NV_DIG + 32];
9996     /* large enough for "%#.#f" --chip */
9997     /* what about long double NVs? --jhi */
9998
9999     PERL_ARGS_ASSERT_SV_VCATPVFN;
10000     PERL_UNUSED_ARG(maybe_tainted);
10001
10002     /* no matter what, this is a string now */
10003     (void)SvPV_force(sv, origlen);
10004
10005     /* special-case "", "%s", and "%-p" (SVf - see below) */
10006     if (patlen == 0)
10007         return;
10008     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10009         if (args) {
10010             const char * const s = va_arg(*args, char*);
10011             sv_catpv(sv, s ? s : nullstr);
10012         }
10013         else if (svix < svmax) {
10014             sv_catsv(sv, *svargs);
10015         }
10016         else
10017             S_vcatpvfn_missing_argument(aTHX);
10018         return;
10019     }
10020     if (args && patlen == 3 && pat[0] == '%' &&
10021                 pat[1] == '-' && pat[2] == 'p') {
10022         argsv = MUTABLE_SV(va_arg(*args, void*));
10023         sv_catsv(sv, argsv);
10024         return;
10025     }
10026
10027 #ifndef USE_LONG_DOUBLE
10028     /* special-case "%.<number>[gf]" */
10029     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10030          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10031         unsigned digits = 0;
10032         const char *pp;
10033
10034         pp = pat + 2;
10035         while (*pp >= '0' && *pp <= '9')
10036             digits = 10 * digits + (*pp++ - '0');
10037         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10038             const NV nv = SvNV(*svargs);
10039             if (*pp == 'g') {
10040                 /* Add check for digits != 0 because it seems that some
10041                    gconverts are buggy in this case, and we don't yet have
10042                    a Configure test for this.  */
10043                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10044                      /* 0, point, slack */
10045                     Gconvert(nv, (int)digits, 0, ebuf);
10046                     sv_catpv(sv, ebuf);
10047                     if (*ebuf)  /* May return an empty string for digits==0 */
10048                         return;
10049                 }
10050             } else if (!digits) {
10051                 STRLEN l;
10052
10053                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10054                     sv_catpvn(sv, p, l);
10055                     return;
10056                 }
10057             }
10058         }
10059     }
10060 #endif /* !USE_LONG_DOUBLE */
10061
10062     if (!args && svix < svmax && DO_UTF8(*svargs))
10063         has_utf8 = TRUE;
10064
10065     patend = (char*)pat + patlen;
10066     for (p = (char*)pat; p < patend; p = q) {
10067         bool alt = FALSE;
10068         bool left = FALSE;
10069         bool vectorize = FALSE;
10070         bool vectorarg = FALSE;
10071         bool vec_utf8 = FALSE;
10072         char fill = ' ';
10073         char plus = 0;
10074         char intsize = 0;
10075         STRLEN width = 0;
10076         STRLEN zeros = 0;
10077         bool has_precis = FALSE;
10078         STRLEN precis = 0;
10079         const I32 osvix = svix;
10080         bool is_utf8 = FALSE;  /* is this item utf8?   */
10081 #ifdef HAS_LDBL_SPRINTF_BUG
10082         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10083            with sfio - Allen <allens@cpan.org> */
10084         bool fix_ldbl_sprintf_bug = FALSE;
10085 #endif
10086
10087         char esignbuf[4];
10088         U8 utf8buf[UTF8_MAXBYTES+1];
10089         STRLEN esignlen = 0;
10090
10091         const char *eptr = NULL;
10092         const char *fmtstart;
10093         STRLEN elen = 0;
10094         SV *vecsv = NULL;
10095         const U8 *vecstr = NULL;
10096         STRLEN veclen = 0;
10097         char c = 0;
10098         int i;
10099         unsigned base = 0;
10100         IV iv = 0;
10101         UV uv = 0;
10102         /* we need a long double target in case HAS_LONG_DOUBLE but
10103            not USE_LONG_DOUBLE
10104         */
10105 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10106         long double nv;
10107 #else
10108         NV nv;
10109 #endif
10110         STRLEN have;
10111         STRLEN need;
10112         STRLEN gap;
10113         const char *dotstr = ".";
10114         STRLEN dotstrlen = 1;
10115         I32 efix = 0; /* explicit format parameter index */
10116         I32 ewix = 0; /* explicit width index */
10117         I32 epix = 0; /* explicit precision index */
10118         I32 evix = 0; /* explicit vector index */
10119         bool asterisk = FALSE;
10120
10121         /* echo everything up to the next format specification */
10122         for (q = p; q < patend && *q != '%'; ++q) ;
10123         if (q > p) {
10124             if (has_utf8 && !pat_utf8)
10125                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
10126             else
10127                 sv_catpvn(sv, p, q - p);
10128             p = q;
10129         }
10130         if (q++ >= patend)
10131             break;
10132
10133         fmtstart = q;
10134
10135 /*
10136     We allow format specification elements in this order:
10137         \d+\$              explicit format parameter index
10138         [-+ 0#]+           flags
10139         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10140         0                  flag (as above): repeated to allow "v02"     
10141         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10142         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10143         [hlqLV]            size
10144     [%bcdefginopsuxDFOUX] format (mandatory)
10145 */
10146
10147         if (args) {
10148 /*  
10149         As of perl5.9.3, printf format checking is on by default.
10150         Internally, perl uses %p formats to provide an escape to
10151         some extended formatting.  This block deals with those
10152         extensions: if it does not match, (char*)q is reset and
10153         the normal format processing code is used.
10154
10155         Currently defined extensions are:
10156                 %p              include pointer address (standard)      
10157                 %-p     (SVf)   include an SV (previously %_)
10158                 %-<num>p        include an SV with precision <num>      
10159                 %2p             include a HEK
10160                 %3p             include a HEK with precision of 256
10161                 %<num>p         (where num != 2 or 3) reserved for future
10162                                 extensions
10163
10164         Robin Barker 2005-07-14 (but modified since)
10165
10166                 %1p     (VDf)   removed.  RMB 2007-10-19
10167 */
10168             char* r = q; 
10169             bool sv = FALSE;    
10170             STRLEN n = 0;
10171             if (*q == '-')
10172                 sv = *q++;
10173             n = expect_number(&q);
10174             if (*q++ == 'p') {
10175                 if (sv) {                       /* SVf */
10176                     if (n) {
10177                         precis = n;
10178                         has_precis = TRUE;
10179                     }
10180                     argsv = MUTABLE_SV(va_arg(*args, void*));
10181                     eptr = SvPV_const(argsv, elen);
10182                     if (DO_UTF8(argsv))
10183                         is_utf8 = TRUE;
10184                     goto string;
10185                 }
10186                 else if (n==2 || n==3) {        /* HEKf */
10187                     HEK * const hek = va_arg(*args, HEK *);
10188                     eptr = HEK_KEY(hek);
10189                     elen = HEK_LEN(hek);
10190                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10191                     if (n==3) precis = 256, has_precis = TRUE;
10192                     goto string;
10193                 }
10194                 else if (n) {
10195                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10196                                      "internal %%<num>p might conflict with future printf extensions");
10197                 }
10198             }
10199             q = r; 
10200         }
10201
10202         if ( (width = expect_number(&q)) ) {
10203             if (*q == '$') {
10204                 ++q;
10205                 efix = width;
10206             } else {
10207                 goto gotwidth;
10208             }
10209         }
10210
10211         /* FLAGS */
10212
10213         while (*q) {
10214             switch (*q) {
10215             case ' ':
10216             case '+':
10217                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10218                     q++;
10219                 else
10220                     plus = *q++;
10221                 continue;
10222
10223             case '-':
10224                 left = TRUE;
10225                 q++;
10226                 continue;
10227
10228             case '0':
10229                 fill = *q++;
10230                 continue;
10231
10232             case '#':
10233                 alt = TRUE;
10234                 q++;
10235                 continue;
10236
10237             default:
10238                 break;
10239             }
10240             break;
10241         }
10242
10243       tryasterisk:
10244         if (*q == '*') {
10245             q++;
10246             if ( (ewix = expect_number(&q)) )
10247                 if (*q++ != '$')
10248                     goto unknown;
10249             asterisk = TRUE;
10250         }
10251         if (*q == 'v') {
10252             q++;
10253             if (vectorize)
10254                 goto unknown;
10255             if ((vectorarg = asterisk)) {
10256                 evix = ewix;
10257                 ewix = 0;
10258                 asterisk = FALSE;
10259             }
10260             vectorize = TRUE;
10261             goto tryasterisk;
10262         }
10263
10264         if (!asterisk)
10265         {
10266             if( *q == '0' )
10267                 fill = *q++;
10268             width = expect_number(&q);
10269         }
10270
10271         if (vectorize && vectorarg) {
10272             /* vectorizing, but not with the default "." */
10273             if (args)
10274                 vecsv = va_arg(*args, SV*);
10275             else if (evix) {
10276                 vecsv = (evix > 0 && evix <= svmax)
10277                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10278             } else {
10279                 vecsv = svix < svmax
10280                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10281             }
10282             dotstr = SvPV_const(vecsv, dotstrlen);
10283             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10284                bad with tied or overloaded values that return UTF8.  */
10285             if (DO_UTF8(vecsv))
10286                 is_utf8 = TRUE;
10287             else if (has_utf8) {
10288                 vecsv = sv_mortalcopy(vecsv);
10289                 sv_utf8_upgrade(vecsv);
10290                 dotstr = SvPV_const(vecsv, dotstrlen);
10291                 is_utf8 = TRUE;
10292             }               
10293         }
10294
10295         if (asterisk) {
10296             if (args)
10297                 i = va_arg(*args, int);
10298             else
10299                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10300                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10301             left |= (i < 0);
10302             width = (i < 0) ? -i : i;
10303         }
10304       gotwidth:
10305
10306         /* PRECISION */
10307
10308         if (*q == '.') {
10309             q++;
10310             if (*q == '*') {
10311                 q++;
10312                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10313                     goto unknown;
10314                 /* XXX: todo, support specified precision parameter */
10315                 if (epix)
10316                     goto unknown;
10317                 if (args)
10318                     i = va_arg(*args, int);
10319                 else
10320                     i = (ewix ? ewix <= svmax : svix < svmax)
10321                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10322                 precis = i;
10323                 has_precis = !(i < 0);
10324             }
10325             else {
10326                 precis = 0;
10327                 while (isDIGIT(*q))
10328                     precis = precis * 10 + (*q++ - '0');
10329                 has_precis = TRUE;
10330             }
10331         }
10332
10333         if (vectorize) {
10334             if (args) {
10335                 VECTORIZE_ARGS
10336             }
10337             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10338                 vecsv = svargs[efix ? efix-1 : svix++];
10339                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10340                 vec_utf8 = DO_UTF8(vecsv);
10341
10342                 /* if this is a version object, we need to convert
10343                  * back into v-string notation and then let the
10344                  * vectorize happen normally
10345                  */
10346                 if (sv_derived_from(vecsv, "version")) {
10347                     char *version = savesvpv(vecsv);
10348                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10349                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10350                         "vector argument not supported with alpha versions");
10351                         goto unknown;
10352                     }
10353                     vecsv = sv_newmortal();
10354                     scan_vstring(version, version + veclen, vecsv);
10355                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10356                     vec_utf8 = DO_UTF8(vecsv);
10357                     Safefree(version);
10358                 }
10359             }
10360             else {
10361                 vecstr = (U8*)"";
10362                 veclen = 0;
10363             }
10364         }
10365
10366         /* SIZE */
10367
10368         switch (*q) {
10369 #ifdef WIN32
10370         case 'I':                       /* Ix, I32x, and I64x */
10371 #  ifdef WIN64
10372             if (q[1] == '6' && q[2] == '4') {
10373                 q += 3;
10374                 intsize = 'q';
10375                 break;
10376             }
10377 #  endif
10378             if (q[1] == '3' && q[2] == '2') {
10379                 q += 3;
10380                 break;
10381             }
10382 #  ifdef WIN64
10383             intsize = 'q';
10384 #  endif
10385             q++;
10386             break;
10387 #endif
10388 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10389         case 'L':                       /* Ld */
10390             /*FALLTHROUGH*/
10391 #ifdef HAS_QUAD
10392         case 'q':                       /* qd */
10393 #endif
10394             intsize = 'q';
10395             q++;
10396             break;
10397 #endif
10398         case 'l':
10399             ++q;
10400 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10401             if (*q == 'l') {    /* lld, llf */
10402                 intsize = 'q';
10403                 ++q;
10404             }
10405             else
10406 #endif
10407                 intsize = 'l';
10408             break;
10409         case 'h':
10410             if (*++q == 'h') {  /* hhd, hhu */
10411                 intsize = 'c';
10412                 ++q;
10413             }
10414             else
10415                 intsize = 'h';
10416             break;
10417         case 'V':
10418         case 'z':
10419         case 't':
10420 #if HAS_C99
10421         case 'j':
10422 #endif
10423             intsize = *q++;
10424             break;
10425         }
10426
10427         /* CONVERSION */
10428
10429         if (*q == '%') {
10430             eptr = q++;
10431             elen = 1;
10432             if (vectorize) {
10433                 c = '%';
10434                 goto unknown;
10435             }
10436             goto string;
10437         }
10438
10439         if (!vectorize && !args) {
10440             if (efix) {
10441                 const I32 i = efix-1;
10442                 argsv = (i >= 0 && i < svmax)
10443                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10444             } else {
10445                 argsv = (svix >= 0 && svix < svmax)
10446                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10447             }
10448         }
10449
10450         switch (c = *q++) {
10451
10452             /* STRINGS */
10453
10454         case 'c':
10455             if (vectorize)
10456                 goto unknown;
10457             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10458             if ((uv > 255 ||
10459                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10460                 && !IN_BYTES) {
10461                 eptr = (char*)utf8buf;
10462                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10463                 is_utf8 = TRUE;
10464             }
10465             else {
10466                 c = (char)uv;
10467                 eptr = &c;
10468                 elen = 1;
10469             }
10470             goto string;
10471
10472         case 's':
10473             if (vectorize)
10474                 goto unknown;
10475             if (args) {
10476                 eptr = va_arg(*args, char*);
10477                 if (eptr)
10478                     elen = strlen(eptr);
10479                 else {
10480                     eptr = (char *)nullstr;
10481                     elen = sizeof nullstr - 1;
10482                 }
10483             }
10484             else {
10485                 eptr = SvPV_const(argsv, elen);
10486                 if (DO_UTF8(argsv)) {
10487                     STRLEN old_precis = precis;
10488                     if (has_precis && precis < elen) {
10489                         STRLEN ulen = sv_len_utf8(argsv);
10490                         I32 p = precis > ulen ? ulen : precis;
10491                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
10492                         precis = p;
10493                     }
10494                     if (width) { /* fudge width (can't fudge elen) */
10495                         if (has_precis && precis < elen)
10496                             width += precis - old_precis;
10497                         else
10498                             width += elen - sv_len_utf8(argsv);
10499                     }
10500                     is_utf8 = TRUE;
10501                 }
10502             }
10503
10504         string:
10505             if (has_precis && precis < elen)
10506                 elen = precis;
10507             break;
10508
10509             /* INTEGERS */
10510
10511         case 'p':
10512             if (alt || vectorize)
10513                 goto unknown;
10514             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10515             base = 16;
10516             goto integer;
10517
10518         case 'D':
10519 #ifdef IV_IS_QUAD
10520             intsize = 'q';
10521 #else
10522             intsize = 'l';
10523 #endif
10524             /*FALLTHROUGH*/
10525         case 'd':
10526         case 'i':
10527 #if vdNUMBER
10528         format_vd:
10529 #endif
10530             if (vectorize) {
10531                 STRLEN ulen;
10532                 if (!veclen)
10533                     continue;
10534                 if (vec_utf8)
10535                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10536                                         UTF8_ALLOW_ANYUV);
10537                 else {
10538                     uv = *vecstr;
10539                     ulen = 1;
10540                 }
10541                 vecstr += ulen;
10542                 veclen -= ulen;
10543                 if (plus)
10544                      esignbuf[esignlen++] = plus;
10545             }
10546             else if (args) {
10547                 switch (intsize) {
10548                 case 'c':       iv = (char)va_arg(*args, int); break;
10549                 case 'h':       iv = (short)va_arg(*args, int); break;
10550                 case 'l':       iv = va_arg(*args, long); break;
10551                 case 'V':       iv = va_arg(*args, IV); break;
10552                 case 'z':       iv = va_arg(*args, SSize_t); break;
10553                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10554                 default:        iv = va_arg(*args, int); break;
10555 #if HAS_C99
10556                 case 'j':       iv = va_arg(*args, intmax_t); break;
10557 #endif
10558                 case 'q':
10559 #ifdef HAS_QUAD
10560                                 iv = va_arg(*args, Quad_t); break;
10561 #else
10562                                 goto unknown;
10563 #endif
10564                 }
10565             }
10566             else {
10567                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10568                 switch (intsize) {
10569                 case 'c':       iv = (char)tiv; break;
10570                 case 'h':       iv = (short)tiv; break;
10571                 case 'l':       iv = (long)tiv; break;
10572                 case 'V':
10573                 default:        iv = tiv; break;
10574                 case 'q':
10575 #ifdef HAS_QUAD
10576                                 iv = (Quad_t)tiv; break;
10577 #else
10578                                 goto unknown;
10579 #endif
10580                 }
10581             }
10582             if ( !vectorize )   /* we already set uv above */
10583             {
10584                 if (iv >= 0) {
10585                     uv = iv;
10586                     if (plus)
10587                         esignbuf[esignlen++] = plus;
10588                 }
10589                 else {
10590                     uv = -iv;
10591                     esignbuf[esignlen++] = '-';
10592                 }
10593             }
10594             base = 10;
10595             goto integer;
10596
10597         case 'U':
10598 #ifdef IV_IS_QUAD
10599             intsize = 'q';
10600 #else
10601             intsize = 'l';
10602 #endif
10603             /*FALLTHROUGH*/
10604         case 'u':
10605             base = 10;
10606             goto uns_integer;
10607
10608         case 'B':
10609         case 'b':
10610             base = 2;
10611             goto uns_integer;
10612
10613         case 'O':
10614 #ifdef IV_IS_QUAD
10615             intsize = 'q';
10616 #else
10617             intsize = 'l';
10618 #endif
10619             /*FALLTHROUGH*/
10620         case 'o':
10621             base = 8;
10622             goto uns_integer;
10623
10624         case 'X':
10625         case 'x':
10626             base = 16;
10627
10628         uns_integer:
10629             if (vectorize) {
10630                 STRLEN ulen;
10631         vector:
10632                 if (!veclen)
10633                     continue;
10634                 if (vec_utf8)
10635                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10636                                         UTF8_ALLOW_ANYUV);
10637                 else {
10638                     uv = *vecstr;
10639                     ulen = 1;
10640                 }
10641                 vecstr += ulen;
10642                 veclen -= ulen;
10643             }
10644             else if (args) {
10645                 switch (intsize) {
10646                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10647                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10648                 case 'l':  uv = va_arg(*args, unsigned long); break;
10649                 case 'V':  uv = va_arg(*args, UV); break;
10650                 case 'z':  uv = va_arg(*args, Size_t); break;
10651                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10652 #if HAS_C99
10653                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10654 #endif
10655                 default:   uv = va_arg(*args, unsigned); break;
10656                 case 'q':
10657 #ifdef HAS_QUAD
10658                            uv = va_arg(*args, Uquad_t); break;
10659 #else
10660                            goto unknown;
10661 #endif
10662                 }
10663             }
10664             else {
10665                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10666                 switch (intsize) {
10667                 case 'c':       uv = (unsigned char)tuv; break;
10668                 case 'h':       uv = (unsigned short)tuv; break;
10669                 case 'l':       uv = (unsigned long)tuv; break;
10670                 case 'V':
10671                 default:        uv = tuv; break;
10672                 case 'q':
10673 #ifdef HAS_QUAD
10674                                 uv = (Uquad_t)tuv; break;
10675 #else
10676                                 goto unknown;
10677 #endif
10678                 }
10679             }
10680
10681         integer:
10682             {
10683                 char *ptr = ebuf + sizeof ebuf;
10684                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10685                 zeros = 0;
10686
10687                 switch (base) {
10688                     unsigned dig;
10689                 case 16:
10690                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10691                     do {
10692                         dig = uv & 15;
10693                         *--ptr = p[dig];
10694                     } while (uv >>= 4);
10695                     if (tempalt) {
10696                         esignbuf[esignlen++] = '0';
10697                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10698                     }
10699                     break;
10700                 case 8:
10701                     do {
10702                         dig = uv & 7;
10703                         *--ptr = '0' + dig;
10704                     } while (uv >>= 3);
10705                     if (alt && *ptr != '0')
10706                         *--ptr = '0';
10707                     break;
10708                 case 2:
10709                     do {
10710                         dig = uv & 1;
10711                         *--ptr = '0' + dig;
10712                     } while (uv >>= 1);
10713                     if (tempalt) {
10714                         esignbuf[esignlen++] = '0';
10715                         esignbuf[esignlen++] = c;
10716                     }
10717                     break;
10718                 default:                /* it had better be ten or less */
10719                     do {
10720                         dig = uv % base;
10721                         *--ptr = '0' + dig;
10722                     } while (uv /= base);
10723                     break;
10724                 }
10725                 elen = (ebuf + sizeof ebuf) - ptr;
10726                 eptr = ptr;
10727                 if (has_precis) {
10728                     if (precis > elen)
10729                         zeros = precis - elen;
10730                     else if (precis == 0 && elen == 1 && *eptr == '0'
10731                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10732                         elen = 0;
10733
10734                 /* a precision nullifies the 0 flag. */
10735                     if (fill == '0')
10736                         fill = ' ';
10737                 }
10738             }
10739             break;
10740
10741             /* FLOATING POINT */
10742
10743         case 'F':
10744             c = 'f';            /* maybe %F isn't supported here */
10745             /*FALLTHROUGH*/
10746         case 'e': case 'E':
10747         case 'f':
10748         case 'g': case 'G':
10749             if (vectorize)
10750                 goto unknown;
10751
10752             /* This is evil, but floating point is even more evil */
10753
10754             /* for SV-style calling, we can only get NV
10755                for C-style calling, we assume %f is double;
10756                for simplicity we allow any of %Lf, %llf, %qf for long double
10757             */
10758             switch (intsize) {
10759             case 'V':
10760 #if defined(USE_LONG_DOUBLE)
10761                 intsize = 'q';
10762 #endif
10763                 break;
10764 /* [perl #20339] - we should accept and ignore %lf rather than die */
10765             case 'l':
10766                 /*FALLTHROUGH*/
10767             default:
10768 #if defined(USE_LONG_DOUBLE)
10769                 intsize = args ? 0 : 'q';
10770 #endif
10771                 break;
10772             case 'q':
10773 #if defined(HAS_LONG_DOUBLE)
10774                 break;
10775 #else
10776                 /*FALLTHROUGH*/
10777 #endif
10778             case 'c':
10779             case 'h':
10780             case 'z':
10781             case 't':
10782             case 'j':
10783                 goto unknown;
10784             }
10785
10786             /* now we need (long double) if intsize == 'q', else (double) */
10787             nv = (args) ?
10788 #if LONG_DOUBLESIZE > DOUBLESIZE
10789                 intsize == 'q' ?
10790                     va_arg(*args, long double) :
10791                     va_arg(*args, double)
10792 #else
10793                     va_arg(*args, double)
10794 #endif
10795                 : SvNV(argsv);
10796
10797             need = 0;
10798             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10799                else. frexp() has some unspecified behaviour for those three */
10800             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10801                 i = PERL_INT_MIN;
10802                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10803                    will cast our (long double) to (double) */
10804                 (void)Perl_frexp(nv, &i);
10805                 if (i == PERL_INT_MIN)
10806                     Perl_die(aTHX_ "panic: frexp");
10807                 if (i > 0)
10808                     need = BIT_DIGITS(i);
10809             }
10810             need += has_precis ? precis : 6; /* known default */
10811
10812             if (need < width)
10813                 need = width;
10814
10815 #ifdef HAS_LDBL_SPRINTF_BUG
10816             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10817                with sfio - Allen <allens@cpan.org> */
10818
10819 #  ifdef DBL_MAX
10820 #    define MY_DBL_MAX DBL_MAX
10821 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10822 #    if DOUBLESIZE >= 8
10823 #      define MY_DBL_MAX 1.7976931348623157E+308L
10824 #    else
10825 #      define MY_DBL_MAX 3.40282347E+38L
10826 #    endif
10827 #  endif
10828
10829 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10830 #    define MY_DBL_MAX_BUG 1L
10831 #  else
10832 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10833 #  endif
10834
10835 #  ifdef DBL_MIN
10836 #    define MY_DBL_MIN DBL_MIN
10837 #  else  /* XXX guessing! -Allen */
10838 #    if DOUBLESIZE >= 8
10839 #      define MY_DBL_MIN 2.2250738585072014E-308L
10840 #    else
10841 #      define MY_DBL_MIN 1.17549435E-38L
10842 #    endif
10843 #  endif
10844
10845             if ((intsize == 'q') && (c == 'f') &&
10846                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10847                 (need < DBL_DIG)) {
10848                 /* it's going to be short enough that
10849                  * long double precision is not needed */
10850
10851                 if ((nv <= 0L) && (nv >= -0L))
10852                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10853                 else {
10854                     /* would use Perl_fp_class as a double-check but not
10855                      * functional on IRIX - see perl.h comments */
10856
10857                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10858                         /* It's within the range that a double can represent */
10859 #if defined(DBL_MAX) && !defined(DBL_MIN)
10860                         if ((nv >= ((long double)1/DBL_MAX)) ||
10861                             (nv <= (-(long double)1/DBL_MAX)))
10862 #endif
10863                         fix_ldbl_sprintf_bug = TRUE;
10864                     }
10865                 }
10866                 if (fix_ldbl_sprintf_bug == TRUE) {
10867                     double temp;
10868
10869                     intsize = 0;
10870                     temp = (double)nv;
10871                     nv = (NV)temp;
10872                 }
10873             }
10874
10875 #  undef MY_DBL_MAX
10876 #  undef MY_DBL_MAX_BUG
10877 #  undef MY_DBL_MIN
10878
10879 #endif /* HAS_LDBL_SPRINTF_BUG */
10880
10881             need += 20; /* fudge factor */
10882             if (PL_efloatsize < need) {
10883                 Safefree(PL_efloatbuf);
10884                 PL_efloatsize = need + 20; /* more fudge */
10885                 Newx(PL_efloatbuf, PL_efloatsize, char);
10886                 PL_efloatbuf[0] = '\0';
10887             }
10888
10889             if ( !(width || left || plus || alt) && fill != '0'
10890                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10891                 /* See earlier comment about buggy Gconvert when digits,
10892                    aka precis is 0  */
10893                 if ( c == 'g' && precis) {
10894                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10895                     /* May return an empty string for digits==0 */
10896                     if (*PL_efloatbuf) {
10897                         elen = strlen(PL_efloatbuf);
10898                         goto float_converted;
10899                     }
10900                 } else if ( c == 'f' && !precis) {
10901                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10902                         break;
10903                 }
10904             }
10905             {
10906                 char *ptr = ebuf + sizeof ebuf;
10907                 *--ptr = '\0';
10908                 *--ptr = c;
10909                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10910 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10911                 if (intsize == 'q') {
10912                     /* Copy the one or more characters in a long double
10913                      * format before the 'base' ([efgEFG]) character to
10914                      * the format string. */
10915                     static char const prifldbl[] = PERL_PRIfldbl;
10916                     char const *p = prifldbl + sizeof(prifldbl) - 3;
10917                     while (p >= prifldbl) { *--ptr = *p--; }
10918                 }
10919 #endif
10920                 if (has_precis) {
10921                     base = precis;
10922                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10923                     *--ptr = '.';
10924                 }
10925                 if (width) {
10926                     base = width;
10927                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10928                 }
10929                 if (fill == '0')
10930                     *--ptr = fill;
10931                 if (left)
10932                     *--ptr = '-';
10933                 if (plus)
10934                     *--ptr = plus;
10935                 if (alt)
10936                     *--ptr = '#';
10937                 *--ptr = '%';
10938
10939                 /* No taint.  Otherwise we are in the strange situation
10940                  * where printf() taints but print($float) doesn't.
10941                  * --jhi */
10942 #if defined(HAS_LONG_DOUBLE)
10943                 elen = ((intsize == 'q')
10944                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10945                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
10946 #else
10947                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
10948 #endif
10949             }
10950         float_converted:
10951             eptr = PL_efloatbuf;
10952             break;
10953
10954             /* SPECIAL */
10955
10956         case 'n':
10957             if (vectorize)
10958                 goto unknown;
10959             i = SvCUR(sv) - origlen;
10960             if (args) {
10961                 switch (intsize) {
10962                 case 'c':       *(va_arg(*args, char*)) = i; break;
10963                 case 'h':       *(va_arg(*args, short*)) = i; break;
10964                 default:        *(va_arg(*args, int*)) = i; break;
10965                 case 'l':       *(va_arg(*args, long*)) = i; break;
10966                 case 'V':       *(va_arg(*args, IV*)) = i; break;
10967                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
10968                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
10969 #if HAS_C99
10970                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
10971 #endif
10972                 case 'q':
10973 #ifdef HAS_QUAD
10974                                 *(va_arg(*args, Quad_t*)) = i; break;
10975 #else
10976                                 goto unknown;
10977 #endif
10978                 }
10979             }
10980             else
10981                 sv_setuv_mg(argsv, (UV)i);
10982             continue;   /* not "break" */
10983
10984             /* UNKNOWN */
10985
10986         default:
10987       unknown:
10988             if (!args
10989                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10990                 && ckWARN(WARN_PRINTF))
10991             {
10992                 SV * const msg = sv_newmortal();
10993                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10994                           (PL_op->op_type == OP_PRTF) ? "" : "s");
10995                 if (fmtstart < patend) {
10996                     const char * const fmtend = q < patend ? q : patend;
10997                     const char * f;
10998                     sv_catpvs(msg, "\"%");
10999                     for (f = fmtstart; f < fmtend; f++) {
11000                         if (isPRINT(*f)) {
11001                             sv_catpvn(msg, f, 1);
11002                         } else {
11003                             Perl_sv_catpvf(aTHX_ msg,
11004                                            "\\%03"UVof, (UV)*f & 0xFF);
11005                         }
11006                     }
11007                     sv_catpvs(msg, "\"");
11008                 } else {
11009                     sv_catpvs(msg, "end of string");
11010                 }
11011                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11012             }
11013
11014             /* output mangled stuff ... */
11015             if (c == '\0')
11016                 --q;
11017             eptr = p;
11018             elen = q - p;
11019
11020             /* ... right here, because formatting flags should not apply */
11021             SvGROW(sv, SvCUR(sv) + elen + 1);
11022             p = SvEND(sv);
11023             Copy(eptr, p, elen, char);
11024             p += elen;
11025             *p = '\0';
11026             SvCUR_set(sv, p - SvPVX_const(sv));
11027             svix = osvix;
11028             continue;   /* not "break" */
11029         }
11030
11031         if (is_utf8 != has_utf8) {
11032             if (is_utf8) {
11033                 if (SvCUR(sv))
11034                     sv_utf8_upgrade(sv);
11035             }
11036             else {
11037                 const STRLEN old_elen = elen;
11038                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11039                 sv_utf8_upgrade(nsv);
11040                 eptr = SvPVX_const(nsv);
11041                 elen = SvCUR(nsv);
11042
11043                 if (width) { /* fudge width (can't fudge elen) */
11044                     width += elen - old_elen;
11045                 }
11046                 is_utf8 = TRUE;
11047             }
11048         }
11049
11050         have = esignlen + zeros + elen;
11051         if (have < zeros)
11052             Perl_croak_nocontext("%s", PL_memory_wrap);
11053
11054         need = (have > width ? have : width);
11055         gap = need - have;
11056
11057         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11058             Perl_croak_nocontext("%s", PL_memory_wrap);
11059         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11060         p = SvEND(sv);
11061         if (esignlen && fill == '0') {
11062             int i;
11063             for (i = 0; i < (int)esignlen; i++)
11064                 *p++ = esignbuf[i];
11065         }
11066         if (gap && !left) {
11067             memset(p, fill, gap);
11068             p += gap;
11069         }
11070         if (esignlen && fill != '0') {
11071             int i;
11072             for (i = 0; i < (int)esignlen; i++)
11073                 *p++ = esignbuf[i];
11074         }
11075         if (zeros) {
11076             int i;
11077             for (i = zeros; i; i--)
11078                 *p++ = '0';
11079         }
11080         if (elen) {
11081             Copy(eptr, p, elen, char);
11082             p += elen;
11083         }
11084         if (gap && left) {
11085             memset(p, ' ', gap);
11086             p += gap;
11087         }
11088         if (vectorize) {
11089             if (veclen) {
11090                 Copy(dotstr, p, dotstrlen, char);
11091                 p += dotstrlen;
11092             }
11093             else
11094                 vectorize = FALSE;              /* done iterating over vecstr */
11095         }
11096         if (is_utf8)
11097             has_utf8 = TRUE;
11098         if (has_utf8)
11099             SvUTF8_on(sv);
11100         *p = '\0';
11101         SvCUR_set(sv, p - SvPVX_const(sv));
11102         if (vectorize) {
11103             esignlen = 0;
11104             goto vector;
11105         }
11106     }
11107     SvTAINT(sv);
11108 }
11109
11110 /* =========================================================================
11111
11112 =head1 Cloning an interpreter
11113
11114 All the macros and functions in this section are for the private use of
11115 the main function, perl_clone().
11116
11117 The foo_dup() functions make an exact copy of an existing foo thingy.
11118 During the course of a cloning, a hash table is used to map old addresses
11119 to new addresses. The table is created and manipulated with the
11120 ptr_table_* functions.
11121
11122 =cut
11123
11124  * =========================================================================*/
11125
11126
11127 #if defined(USE_ITHREADS)
11128
11129 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11130 #ifndef GpREFCNT_inc
11131 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11132 #endif
11133
11134
11135 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11136    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11137    If this changes, please unmerge ss_dup.
11138    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11139 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11140 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11141 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11142 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11143 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11144 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11145 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11146 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11147 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11148 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11149 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11150 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11151 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11152
11153 /* clone a parser */
11154
11155 yy_parser *
11156 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11157 {
11158     yy_parser *parser;
11159
11160     PERL_ARGS_ASSERT_PARSER_DUP;
11161
11162     if (!proto)
11163         return NULL;
11164
11165     /* look for it in the table first */
11166     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11167     if (parser)
11168         return parser;
11169
11170     /* create anew and remember what it is */
11171     Newxz(parser, 1, yy_parser);
11172     ptr_table_store(PL_ptr_table, proto, parser);
11173
11174     /* XXX these not yet duped */
11175     parser->old_parser = NULL;
11176     parser->stack = NULL;
11177     parser->ps = NULL;
11178     parser->stack_size = 0;
11179     /* XXX parser->stack->state = 0; */
11180
11181     /* XXX eventually, just Copy() most of the parser struct ? */
11182
11183     parser->lex_brackets = proto->lex_brackets;
11184     parser->lex_casemods = proto->lex_casemods;
11185     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11186                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11187     parser->lex_casestack = savepvn(proto->lex_casestack,
11188                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11189     parser->lex_defer   = proto->lex_defer;
11190     parser->lex_dojoin  = proto->lex_dojoin;
11191     parser->lex_expect  = proto->lex_expect;
11192     parser->lex_formbrack = proto->lex_formbrack;
11193     parser->lex_inpat   = proto->lex_inpat;
11194     parser->lex_inwhat  = proto->lex_inwhat;
11195     parser->lex_op      = proto->lex_op;
11196     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11197     parser->lex_starts  = proto->lex_starts;
11198     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11199     parser->multi_close = proto->multi_close;
11200     parser->multi_open  = proto->multi_open;
11201     parser->multi_start = proto->multi_start;
11202     parser->multi_end   = proto->multi_end;
11203     parser->pending_ident = proto->pending_ident;
11204     parser->preambled   = proto->preambled;
11205     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11206     parser->linestr     = sv_dup_inc(proto->linestr, param);
11207     parser->expect      = proto->expect;
11208     parser->copline     = proto->copline;
11209     parser->last_lop_op = proto->last_lop_op;
11210     parser->lex_state   = proto->lex_state;
11211     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11212     /* rsfp_filters entries have fake IoDIRP() */
11213     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11214     parser->in_my       = proto->in_my;
11215     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11216     parser->error_count = proto->error_count;
11217
11218
11219     parser->linestr     = sv_dup_inc(proto->linestr, param);
11220
11221     {
11222         char * const ols = SvPVX(proto->linestr);
11223         char * const ls  = SvPVX(parser->linestr);
11224
11225         parser->bufptr      = ls + (proto->bufptr >= ols ?
11226                                     proto->bufptr -  ols : 0);
11227         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11228                                     proto->oldbufptr -  ols : 0);
11229         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11230                                     proto->oldoldbufptr -  ols : 0);
11231         parser->linestart   = ls + (proto->linestart >= ols ?
11232                                     proto->linestart -  ols : 0);
11233         parser->last_uni    = ls + (proto->last_uni >= ols ?
11234                                     proto->last_uni -  ols : 0);
11235         parser->last_lop    = ls + (proto->last_lop >= ols ?
11236                                     proto->last_lop -  ols : 0);
11237
11238         parser->bufend      = ls + SvCUR(parser->linestr);
11239     }
11240
11241     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11242
11243
11244 #ifdef PERL_MAD
11245     parser->endwhite    = proto->endwhite;
11246     parser->faketokens  = proto->faketokens;
11247     parser->lasttoke    = proto->lasttoke;
11248     parser->nextwhite   = proto->nextwhite;
11249     parser->realtokenstart = proto->realtokenstart;
11250     parser->skipwhite   = proto->skipwhite;
11251     parser->thisclose   = proto->thisclose;
11252     parser->thismad     = proto->thismad;
11253     parser->thisopen    = proto->thisopen;
11254     parser->thisstuff   = proto->thisstuff;
11255     parser->thistoken   = proto->thistoken;
11256     parser->thiswhite   = proto->thiswhite;
11257
11258     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11259     parser->curforce    = proto->curforce;
11260 #else
11261     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11262     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11263     parser->nexttoke    = proto->nexttoke;
11264 #endif
11265
11266     /* XXX should clone saved_curcop here, but we aren't passed
11267      * proto_perl; so do it in perl_clone_using instead */
11268
11269     return parser;
11270 }
11271
11272
11273 /* duplicate a file handle */
11274
11275 PerlIO *
11276 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11277 {
11278     PerlIO *ret;
11279
11280     PERL_ARGS_ASSERT_FP_DUP;
11281     PERL_UNUSED_ARG(type);
11282
11283     if (!fp)
11284         return (PerlIO*)NULL;
11285
11286     /* look for it in the table first */
11287     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11288     if (ret)
11289         return ret;
11290
11291     /* create anew and remember what it is */
11292     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11293     ptr_table_store(PL_ptr_table, fp, ret);
11294     return ret;
11295 }
11296
11297 /* duplicate a directory handle */
11298
11299 DIR *
11300 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11301 {
11302     DIR *ret;
11303
11304 #ifdef HAS_FCHDIR
11305     DIR *pwd;
11306     register const Direntry_t *dirent;
11307     char smallbuf[256];
11308     char *name = NULL;
11309     STRLEN len = -1;
11310     long pos;
11311 #endif
11312
11313     PERL_UNUSED_CONTEXT;
11314     PERL_ARGS_ASSERT_DIRP_DUP;
11315
11316     if (!dp)
11317         return (DIR*)NULL;
11318
11319     /* look for it in the table first */
11320     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11321     if (ret)
11322         return ret;
11323
11324 #ifdef HAS_FCHDIR
11325
11326     PERL_UNUSED_ARG(param);
11327
11328     /* create anew */
11329
11330     /* open the current directory (so we can switch back) */
11331     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11332
11333     /* chdir to our dir handle and open the present working directory */
11334     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11335         PerlDir_close(pwd);
11336         return (DIR *)NULL;
11337     }
11338     /* Now we should have two dir handles pointing to the same dir. */
11339
11340     /* Be nice to the calling code and chdir back to where we were. */
11341     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11342
11343     /* We have no need of the pwd handle any more. */
11344     PerlDir_close(pwd);
11345
11346 #ifdef DIRNAMLEN
11347 # define d_namlen(d) (d)->d_namlen
11348 #else
11349 # define d_namlen(d) strlen((d)->d_name)
11350 #endif
11351     /* Iterate once through dp, to get the file name at the current posi-
11352        tion. Then step back. */
11353     pos = PerlDir_tell(dp);
11354     if ((dirent = PerlDir_read(dp))) {
11355         len = d_namlen(dirent);
11356         if (len <= sizeof smallbuf) name = smallbuf;
11357         else Newx(name, len, char);
11358         Move(dirent->d_name, name, len, char);
11359     }
11360     PerlDir_seek(dp, pos);
11361
11362     /* Iterate through the new dir handle, till we find a file with the
11363        right name. */
11364     if (!dirent) /* just before the end */
11365         for(;;) {
11366             pos = PerlDir_tell(ret);
11367             if (PerlDir_read(ret)) continue; /* not there yet */
11368             PerlDir_seek(ret, pos); /* step back */
11369             break;
11370         }
11371     else {
11372         const long pos0 = PerlDir_tell(ret);
11373         for(;;) {
11374             pos = PerlDir_tell(ret);
11375             if ((dirent = PerlDir_read(ret))) {
11376                 if (len == d_namlen(dirent)
11377                  && memEQ(name, dirent->d_name, len)) {
11378                     /* found it */
11379                     PerlDir_seek(ret, pos); /* step back */
11380                     break;
11381                 }
11382                 /* else we are not there yet; keep iterating */
11383             }
11384             else { /* This is not meant to happen. The best we can do is
11385                       reset the iterator to the beginning. */
11386                 PerlDir_seek(ret, pos0);
11387                 break;
11388             }
11389         }
11390     }
11391 #undef d_namlen
11392
11393     if (name && name != smallbuf)
11394         Safefree(name);
11395 #endif
11396
11397 #ifdef WIN32
11398     ret = win32_dirp_dup(dp, param);
11399 #endif
11400
11401     /* pop it in the pointer table */
11402     if (ret)
11403         ptr_table_store(PL_ptr_table, dp, ret);
11404
11405     return ret;
11406 }
11407
11408 /* duplicate a typeglob */
11409
11410 GP *
11411 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11412 {
11413     GP *ret;
11414
11415     PERL_ARGS_ASSERT_GP_DUP;
11416
11417     if (!gp)
11418         return (GP*)NULL;
11419     /* look for it in the table first */
11420     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11421     if (ret)
11422         return ret;
11423
11424     /* create anew and remember what it is */
11425     Newxz(ret, 1, GP);
11426     ptr_table_store(PL_ptr_table, gp, ret);
11427
11428     /* clone */
11429     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11430        on Newxz() to do this for us.  */
11431     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11432     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11433     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11434     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11435     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11436     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11437     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11438     ret->gp_cvgen       = gp->gp_cvgen;
11439     ret->gp_line        = gp->gp_line;
11440     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11441     return ret;
11442 }
11443
11444 /* duplicate a chain of magic */
11445
11446 MAGIC *
11447 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11448 {
11449     MAGIC *mgret = NULL;
11450     MAGIC **mgprev_p = &mgret;
11451
11452     PERL_ARGS_ASSERT_MG_DUP;
11453
11454     for (; mg; mg = mg->mg_moremagic) {
11455         MAGIC *nmg;
11456
11457         if ((param->flags & CLONEf_JOIN_IN)
11458                 && mg->mg_type == PERL_MAGIC_backref)
11459             /* when joining, we let the individual SVs add themselves to
11460              * backref as needed. */
11461             continue;
11462
11463         Newx(nmg, 1, MAGIC);
11464         *mgprev_p = nmg;
11465         mgprev_p = &(nmg->mg_moremagic);
11466
11467         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11468            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11469            from the original commit adding Perl_mg_dup() - revision 4538.
11470            Similarly there is the annotation "XXX random ptr?" next to the
11471            assignment to nmg->mg_ptr.  */
11472         *nmg = *mg;
11473
11474         /* FIXME for plugins
11475         if (nmg->mg_type == PERL_MAGIC_qr) {
11476             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11477         }
11478         else
11479         */
11480         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11481                           ? nmg->mg_type == PERL_MAGIC_backref
11482                                 /* The backref AV has its reference
11483                                  * count deliberately bumped by 1 */
11484                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11485                                                     nmg->mg_obj, param))
11486                                 : sv_dup_inc(nmg->mg_obj, param)
11487                           : sv_dup(nmg->mg_obj, param);
11488
11489         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11490             if (nmg->mg_len > 0) {
11491                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11492                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11493                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11494                 {
11495                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11496                     sv_dup_inc_multiple((SV**)(namtp->table),
11497                                         (SV**)(namtp->table), NofAMmeth, param);
11498                 }
11499             }
11500             else if (nmg->mg_len == HEf_SVKEY)
11501                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11502         }
11503         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11504             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11505         }
11506     }
11507     return mgret;
11508 }
11509
11510 #endif /* USE_ITHREADS */
11511
11512 struct ptr_tbl_arena {
11513     struct ptr_tbl_arena *next;
11514     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11515 };
11516
11517 /* create a new pointer-mapping table */
11518
11519 PTR_TBL_t *
11520 Perl_ptr_table_new(pTHX)
11521 {
11522     PTR_TBL_t *tbl;
11523     PERL_UNUSED_CONTEXT;
11524
11525     Newx(tbl, 1, PTR_TBL_t);
11526     tbl->tbl_max        = 511;
11527     tbl->tbl_items      = 0;
11528     tbl->tbl_arena      = NULL;
11529     tbl->tbl_arena_next = NULL;
11530     tbl->tbl_arena_end  = NULL;
11531     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11532     return tbl;
11533 }
11534
11535 #define PTR_TABLE_HASH(ptr) \
11536   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11537
11538 /* map an existing pointer using a table */
11539
11540 STATIC PTR_TBL_ENT_t *
11541 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11542 {
11543     PTR_TBL_ENT_t *tblent;
11544     const UV hash = PTR_TABLE_HASH(sv);
11545
11546     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11547
11548     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11549     for (; tblent; tblent = tblent->next) {
11550         if (tblent->oldval == sv)
11551             return tblent;
11552     }
11553     return NULL;
11554 }
11555
11556 void *
11557 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11558 {
11559     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11560
11561     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11562     PERL_UNUSED_CONTEXT;
11563
11564     return tblent ? tblent->newval : NULL;
11565 }
11566
11567 /* add a new entry to a pointer-mapping table */
11568
11569 void
11570 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11571 {
11572     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11573
11574     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11575     PERL_UNUSED_CONTEXT;
11576
11577     if (tblent) {
11578         tblent->newval = newsv;
11579     } else {
11580         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11581
11582         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11583             struct ptr_tbl_arena *new_arena;
11584
11585             Newx(new_arena, 1, struct ptr_tbl_arena);
11586             new_arena->next = tbl->tbl_arena;
11587             tbl->tbl_arena = new_arena;
11588             tbl->tbl_arena_next = new_arena->array;
11589             tbl->tbl_arena_end = new_arena->array
11590                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11591         }
11592
11593         tblent = tbl->tbl_arena_next++;
11594
11595         tblent->oldval = oldsv;
11596         tblent->newval = newsv;
11597         tblent->next = tbl->tbl_ary[entry];
11598         tbl->tbl_ary[entry] = tblent;
11599         tbl->tbl_items++;
11600         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11601             ptr_table_split(tbl);
11602     }
11603 }
11604
11605 /* double the hash bucket size of an existing ptr table */
11606
11607 void
11608 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11609 {
11610     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11611     const UV oldsize = tbl->tbl_max + 1;
11612     UV newsize = oldsize * 2;
11613     UV i;
11614
11615     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11616     PERL_UNUSED_CONTEXT;
11617
11618     Renew(ary, newsize, PTR_TBL_ENT_t*);
11619     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11620     tbl->tbl_max = --newsize;
11621     tbl->tbl_ary = ary;
11622     for (i=0; i < oldsize; i++, ary++) {
11623         PTR_TBL_ENT_t **entp = ary;
11624         PTR_TBL_ENT_t *ent = *ary;
11625         PTR_TBL_ENT_t **curentp;
11626         if (!ent)
11627             continue;
11628         curentp = ary + oldsize;
11629         do {
11630             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11631                 *entp = ent->next;
11632                 ent->next = *curentp;
11633                 *curentp = ent;
11634             }
11635             else
11636                 entp = &ent->next;
11637             ent = *entp;
11638         } while (ent);
11639     }
11640 }
11641
11642 /* remove all the entries from a ptr table */
11643 /* Deprecated - will be removed post 5.14 */
11644
11645 void
11646 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11647 {
11648     if (tbl && tbl->tbl_items) {
11649         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11650
11651         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11652
11653         while (arena) {
11654             struct ptr_tbl_arena *next = arena->next;
11655
11656             Safefree(arena);
11657             arena = next;
11658         };
11659
11660         tbl->tbl_items = 0;
11661         tbl->tbl_arena = NULL;
11662         tbl->tbl_arena_next = NULL;
11663         tbl->tbl_arena_end = NULL;
11664     }
11665 }
11666
11667 /* clear and free a ptr table */
11668
11669 void
11670 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11671 {
11672     struct ptr_tbl_arena *arena;
11673
11674     if (!tbl) {
11675         return;
11676     }
11677
11678     arena = tbl->tbl_arena;
11679
11680     while (arena) {
11681         struct ptr_tbl_arena *next = arena->next;
11682
11683         Safefree(arena);
11684         arena = next;
11685     }
11686
11687     Safefree(tbl->tbl_ary);
11688     Safefree(tbl);
11689 }
11690
11691 #if defined(USE_ITHREADS)
11692
11693 void
11694 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11695 {
11696     PERL_ARGS_ASSERT_RVPV_DUP;
11697
11698     if (SvROK(sstr)) {
11699         if (SvWEAKREF(sstr)) {
11700             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11701             if (param->flags & CLONEf_JOIN_IN) {
11702                 /* if joining, we add any back references individually rather
11703                  * than copying the whole backref array */
11704                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11705             }
11706         }
11707         else
11708             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11709     }
11710     else if (SvPVX_const(sstr)) {
11711         /* Has something there */
11712         if (SvLEN(sstr)) {
11713             /* Normal PV - clone whole allocated space */
11714             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11715             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11716                 /* Not that normal - actually sstr is copy on write.
11717                    But we are a true, independent SV, so:  */
11718                 SvREADONLY_off(dstr);
11719                 SvFAKE_off(dstr);
11720             }
11721         }
11722         else {
11723             /* Special case - not normally malloced for some reason */
11724             if (isGV_with_GP(sstr)) {
11725                 /* Don't need to do anything here.  */
11726             }
11727             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
11728                 /* A "shared" PV - clone it as "shared" PV */
11729                 SvPV_set(dstr,
11730                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11731                                          param)));
11732             }
11733             else {
11734                 /* Some other special case - random pointer */
11735                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11736             }
11737         }
11738     }
11739     else {
11740         /* Copy the NULL */
11741         SvPV_set(dstr, NULL);
11742     }
11743 }
11744
11745 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11746 static SV **
11747 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11748                       SSize_t items, CLONE_PARAMS *const param)
11749 {
11750     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11751
11752     while (items-- > 0) {
11753         *dest++ = sv_dup_inc(*source++, param);
11754     }
11755
11756     return dest;
11757 }
11758
11759 /* duplicate an SV of any type (including AV, HV etc) */
11760
11761 static SV *
11762 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11763 {
11764     dVAR;
11765     SV *dstr;
11766
11767     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11768
11769     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
11770 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11771         abort();
11772 #endif
11773         return NULL;
11774     }
11775     /* look for it in the table first */
11776     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11777     if (dstr)
11778         return dstr;
11779
11780     if(param->flags & CLONEf_JOIN_IN) {
11781         /** We are joining here so we don't want do clone
11782             something that is bad **/
11783         if (SvTYPE(sstr) == SVt_PVHV) {
11784             const HEK * const hvname = HvNAME_HEK(sstr);
11785             if (hvname) {
11786                 /** don't clone stashes if they already exist **/
11787                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11788                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
11789                 ptr_table_store(PL_ptr_table, sstr, dstr);
11790                 return dstr;
11791             }
11792         }
11793     }
11794
11795     /* create anew and remember what it is */
11796     new_SV(dstr);
11797
11798 #ifdef DEBUG_LEAKING_SCALARS
11799     dstr->sv_debug_optype = sstr->sv_debug_optype;
11800     dstr->sv_debug_line = sstr->sv_debug_line;
11801     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11802     dstr->sv_debug_parent = (SV*)sstr;
11803     FREE_SV_DEBUG_FILE(dstr);
11804     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11805 #endif
11806
11807     ptr_table_store(PL_ptr_table, sstr, dstr);
11808
11809     /* clone */
11810     SvFLAGS(dstr)       = SvFLAGS(sstr);
11811     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11812     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11813
11814 #ifdef DEBUGGING
11815     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11816         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11817                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11818 #endif
11819
11820     /* don't clone objects whose class has asked us not to */
11821     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11822         SvFLAGS(dstr) = 0;
11823         return dstr;
11824     }
11825
11826     switch (SvTYPE(sstr)) {
11827     case SVt_NULL:
11828         SvANY(dstr)     = NULL;
11829         break;
11830     case SVt_IV:
11831         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11832         if(SvROK(sstr)) {
11833             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11834         } else {
11835             SvIV_set(dstr, SvIVX(sstr));
11836         }
11837         break;
11838     case SVt_NV:
11839         SvANY(dstr)     = new_XNV();
11840         SvNV_set(dstr, SvNVX(sstr));
11841         break;
11842         /* case SVt_BIND: */
11843     default:
11844         {
11845             /* These are all the types that need complex bodies allocating.  */
11846             void *new_body;
11847             const svtype sv_type = SvTYPE(sstr);
11848             const struct body_details *const sv_type_details
11849                 = bodies_by_type + sv_type;
11850
11851             switch (sv_type) {
11852             default:
11853                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11854                 break;
11855
11856             case SVt_PVGV:
11857             case SVt_PVIO:
11858             case SVt_PVFM:
11859             case SVt_PVHV:
11860             case SVt_PVAV:
11861             case SVt_PVCV:
11862             case SVt_PVLV:
11863             case SVt_REGEXP:
11864             case SVt_PVMG:
11865             case SVt_PVNV:
11866             case SVt_PVIV:
11867             case SVt_PV:
11868                 assert(sv_type_details->body_size);
11869                 if (sv_type_details->arena) {
11870                     new_body_inline(new_body, sv_type);
11871                     new_body
11872                         = (void*)((char*)new_body - sv_type_details->offset);
11873                 } else {
11874                     new_body = new_NOARENA(sv_type_details);
11875                 }
11876             }
11877             assert(new_body);
11878             SvANY(dstr) = new_body;
11879
11880 #ifndef PURIFY
11881             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11882                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11883                  sv_type_details->copy, char);
11884 #else
11885             Copy(((char*)SvANY(sstr)),
11886                  ((char*)SvANY(dstr)),
11887                  sv_type_details->body_size + sv_type_details->offset, char);
11888 #endif
11889
11890             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11891                 && !isGV_with_GP(dstr)
11892                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
11893                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11894
11895             /* The Copy above means that all the source (unduplicated) pointers
11896                are now in the destination.  We can check the flags and the
11897                pointers in either, but it's possible that there's less cache
11898                missing by always going for the destination.
11899                FIXME - instrument and check that assumption  */
11900             if (sv_type >= SVt_PVMG) {
11901                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11902                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11903                 } else if (SvMAGIC(dstr))
11904                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11905                 if (SvSTASH(dstr))
11906                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
11907             }
11908
11909             /* The cast silences a GCC warning about unhandled types.  */
11910             switch ((int)sv_type) {
11911             case SVt_PV:
11912                 break;
11913             case SVt_PVIV:
11914                 break;
11915             case SVt_PVNV:
11916                 break;
11917             case SVt_PVMG:
11918                 break;
11919             case SVt_REGEXP:
11920                 /* FIXME for plugins */
11921                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
11922                 break;
11923             case SVt_PVLV:
11924                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11925                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11926                     LvTARG(dstr) = dstr;
11927                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
11928                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
11929                 else
11930                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
11931             case SVt_PVGV:
11932                 /* non-GP case already handled above */
11933                 if(isGV_with_GP(sstr)) {
11934                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
11935                     /* Don't call sv_add_backref here as it's going to be
11936                        created as part of the magic cloning of the symbol
11937                        table--unless this is during a join and the stash
11938                        is not actually being cloned.  */
11939                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
11940                        at the point of this comment.  */
11941                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
11942                     if (param->flags & CLONEf_JOIN_IN)
11943                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
11944                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
11945                     (void)GpREFCNT_inc(GvGP(dstr));
11946                 }
11947                 break;
11948             case SVt_PVIO:
11949                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
11950                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11951                     /* I have no idea why fake dirp (rsfps)
11952                        should be treated differently but otherwise
11953                        we end up with leaks -- sky*/
11954                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
11955                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
11956                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11957                 } else {
11958                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
11959                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
11960                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
11961                     if (IoDIRP(dstr)) {
11962                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
11963                     } else {
11964                         NOOP;
11965                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
11966                     }
11967                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
11968                 }
11969                 if (IoOFP(dstr) == IoIFP(sstr))
11970                     IoOFP(dstr) = IoIFP(dstr);
11971                 else
11972                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
11973                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
11974                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
11975                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
11976                 break;
11977             case SVt_PVAV:
11978                 /* avoid cloning an empty array */
11979                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
11980                     SV **dst_ary, **src_ary;
11981                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
11982
11983                     src_ary = AvARRAY((const AV *)sstr);
11984                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
11985                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
11986                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11987                     AvALLOC((const AV *)dstr) = dst_ary;
11988                     if (AvREAL((const AV *)sstr)) {
11989                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11990                                                       param);
11991                     }
11992                     else {
11993                         while (items-- > 0)
11994                             *dst_ary++ = sv_dup(*src_ary++, param);
11995                     }
11996                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
11997                     while (items-- > 0) {
11998                         *dst_ary++ = &PL_sv_undef;
11999                     }
12000                 }
12001                 else {
12002                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12003                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12004                     AvMAX(  (const AV *)dstr)   = -1;
12005                     AvFILLp((const AV *)dstr)   = -1;
12006                 }
12007                 break;
12008             case SVt_PVHV:
12009                 if (HvARRAY((const HV *)sstr)) {
12010                     STRLEN i = 0;
12011                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12012                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12013                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12014                     char *darray;
12015                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12016                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12017                         char);
12018                     HvARRAY(dstr) = (HE**)darray;
12019                     while (i <= sxhv->xhv_max) {
12020                         const HE * const source = HvARRAY(sstr)[i];
12021                         HvARRAY(dstr)[i] = source
12022                             ? he_dup(source, sharekeys, param) : 0;
12023                         ++i;
12024                     }
12025                     if (SvOOK(sstr)) {
12026                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12027                         struct xpvhv_aux * const daux = HvAUX(dstr);
12028                         /* This flag isn't copied.  */
12029                         /* SvOOK_on(hv) attacks the IV flags.  */
12030                         SvFLAGS(dstr) |= SVf_OOK;
12031
12032                         if (saux->xhv_name_count) {
12033                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12034                             const I32 count
12035                              = saux->xhv_name_count < 0
12036                                 ? -saux->xhv_name_count
12037                                 :  saux->xhv_name_count;
12038                             HEK **shekp = sname + count;
12039                             HEK **dhekp;
12040                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12041                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12042                             while (shekp-- > sname) {
12043                                 dhekp--;
12044                                 *dhekp = hek_dup(*shekp, param);
12045                             }
12046                         }
12047                         else {
12048                             daux->xhv_name_u.xhvnameu_name
12049                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12050                                           param);
12051                         }
12052                         daux->xhv_name_count = saux->xhv_name_count;
12053
12054                         daux->xhv_riter = saux->xhv_riter;
12055                         daux->xhv_eiter = saux->xhv_eiter
12056                             ? he_dup(saux->xhv_eiter,
12057                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12058                         /* backref array needs refcnt=2; see sv_add_backref */
12059                         daux->xhv_backreferences =
12060                             (param->flags & CLONEf_JOIN_IN)
12061                                 /* when joining, we let the individual GVs and
12062                                  * CVs add themselves to backref as
12063                                  * needed. This avoids pulling in stuff
12064                                  * that isn't required, and simplifies the
12065                                  * case where stashes aren't cloned back
12066                                  * if they already exist in the parent
12067                                  * thread */
12068                             ? NULL
12069                             : saux->xhv_backreferences
12070                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12071                                     ? MUTABLE_AV(SvREFCNT_inc(
12072                                           sv_dup_inc((const SV *)
12073                                             saux->xhv_backreferences, param)))
12074                                     : MUTABLE_AV(sv_dup((const SV *)
12075                                             saux->xhv_backreferences, param))
12076                                 : 0;
12077
12078                         daux->xhv_mro_meta = saux->xhv_mro_meta
12079                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12080                             : 0;
12081
12082                         /* Record stashes for possible cloning in Perl_clone(). */
12083                         if (HvNAME(sstr))
12084                             av_push(param->stashes, dstr);
12085                     }
12086                 }
12087                 else
12088                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12089                 break;
12090             case SVt_PVCV:
12091                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12092                     CvDEPTH(dstr) = 0;
12093                 }
12094                 /*FALLTHROUGH*/
12095             case SVt_PVFM:
12096                 /* NOTE: not refcounted */
12097                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12098                     hv_dup(CvSTASH(dstr), param);
12099                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12100                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12101                 if (!CvISXSUB(dstr)) {
12102                     OP_REFCNT_LOCK;
12103                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12104                     OP_REFCNT_UNLOCK;
12105                 } else if (CvCONST(dstr)) {
12106                     CvXSUBANY(dstr).any_ptr =
12107                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12108                 }
12109                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12110                 /* don't dup if copying back - CvGV isn't refcounted, so the
12111                  * duped GV may never be freed. A bit of a hack! DAPM */
12112                 SvANY(MUTABLE_CV(dstr))->xcv_gv =
12113                     CvCVGV_RC(dstr)
12114                     ? gv_dup_inc(CvGV(sstr), param)
12115                     : (param->flags & CLONEf_JOIN_IN)
12116                         ? NULL
12117                         : gv_dup(CvGV(sstr), param);
12118
12119                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12120                 CvOUTSIDE(dstr) =
12121                     CvWEAKOUTSIDE(sstr)
12122                     ? cv_dup(    CvOUTSIDE(dstr), param)
12123                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12124                 break;
12125             }
12126         }
12127     }
12128
12129     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12130         ++PL_sv_objcount;
12131
12132     return dstr;
12133  }
12134
12135 SV *
12136 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12137 {
12138     PERL_ARGS_ASSERT_SV_DUP_INC;
12139     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12140 }
12141
12142 SV *
12143 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12144 {
12145     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12146     PERL_ARGS_ASSERT_SV_DUP;
12147
12148     /* Track every SV that (at least initially) had a reference count of 0.
12149        We need to do this by holding an actual reference to it in this array.
12150        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12151        (akin to the stashes hash, and the perl stack), we come unstuck if
12152        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12153        thread) is manipulated in a CLONE method, because CLONE runs before the
12154        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12155        (and fix things up by giving each a reference via the temps stack).
12156        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12157        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12158        before the walk of unreferenced happens and a reference to that is SV
12159        added to the temps stack. At which point we have the same SV considered
12160        to be in use, and free to be re-used. Not good.
12161     */
12162     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12163         assert(param->unreferenced);
12164         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12165     }
12166
12167     return dstr;
12168 }
12169
12170 /* duplicate a context */
12171
12172 PERL_CONTEXT *
12173 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12174 {
12175     PERL_CONTEXT *ncxs;
12176
12177     PERL_ARGS_ASSERT_CX_DUP;
12178
12179     if (!cxs)
12180         return (PERL_CONTEXT*)NULL;
12181
12182     /* look for it in the table first */
12183     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12184     if (ncxs)
12185         return ncxs;
12186
12187     /* create anew and remember what it is */
12188     Newx(ncxs, max + 1, PERL_CONTEXT);
12189     ptr_table_store(PL_ptr_table, cxs, ncxs);
12190     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12191
12192     while (ix >= 0) {
12193         PERL_CONTEXT * const ncx = &ncxs[ix];
12194         if (CxTYPE(ncx) == CXt_SUBST) {
12195             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12196         }
12197         else {
12198             switch (CxTYPE(ncx)) {
12199             case CXt_SUB:
12200                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12201                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12202                                            : cv_dup(ncx->blk_sub.cv,param));
12203                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12204                                            ? av_dup_inc(ncx->blk_sub.argarray,
12205                                                         param)
12206                                            : NULL);
12207                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12208                                                      param);
12209                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12210                                            ncx->blk_sub.oldcomppad);
12211                 break;
12212             case CXt_EVAL:
12213                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12214                                                       param);
12215                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12216                 break;
12217             case CXt_LOOP_LAZYSV:
12218                 ncx->blk_loop.state_u.lazysv.end
12219                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12220                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12221                    actually being the same function, and order equivalence of
12222                    the two unions.
12223                    We can assert the later [but only at run time :-(]  */
12224                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12225                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12226             case CXt_LOOP_FOR:
12227                 ncx->blk_loop.state_u.ary.ary
12228                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12229             case CXt_LOOP_LAZYIV:
12230             case CXt_LOOP_PLAIN:
12231                 if (CxPADLOOP(ncx)) {
12232                     ncx->blk_loop.itervar_u.oldcomppad
12233                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12234                                         ncx->blk_loop.itervar_u.oldcomppad);
12235                 } else {
12236                     ncx->blk_loop.itervar_u.gv
12237                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12238                                     param);
12239                 }
12240                 break;
12241             case CXt_FORMAT:
12242                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12243                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12244                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12245                                                      param);
12246                 break;
12247             case CXt_BLOCK:
12248             case CXt_NULL:
12249                 break;
12250             }
12251         }
12252         --ix;
12253     }
12254     return ncxs;
12255 }
12256
12257 /* duplicate a stack info structure */
12258
12259 PERL_SI *
12260 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12261 {
12262     PERL_SI *nsi;
12263
12264     PERL_ARGS_ASSERT_SI_DUP;
12265
12266     if (!si)
12267         return (PERL_SI*)NULL;
12268
12269     /* look for it in the table first */
12270     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12271     if (nsi)
12272         return nsi;
12273
12274     /* create anew and remember what it is */
12275     Newxz(nsi, 1, PERL_SI);
12276     ptr_table_store(PL_ptr_table, si, nsi);
12277
12278     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12279     nsi->si_cxix        = si->si_cxix;
12280     nsi->si_cxmax       = si->si_cxmax;
12281     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12282     nsi->si_type        = si->si_type;
12283     nsi->si_prev        = si_dup(si->si_prev, param);
12284     nsi->si_next        = si_dup(si->si_next, param);
12285     nsi->si_markoff     = si->si_markoff;
12286
12287     return nsi;
12288 }
12289
12290 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12291 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12292 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12293 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12294 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12295 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12296 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12297 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12298 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12299 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12300 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12301 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12302 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12303 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12304 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12305 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12306
12307 /* XXXXX todo */
12308 #define pv_dup_inc(p)   SAVEPV(p)
12309 #define pv_dup(p)       SAVEPV(p)
12310 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12311
12312 /* map any object to the new equivent - either something in the
12313  * ptr table, or something in the interpreter structure
12314  */
12315
12316 void *
12317 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12318 {
12319     void *ret;
12320
12321     PERL_ARGS_ASSERT_ANY_DUP;
12322
12323     if (!v)
12324         return (void*)NULL;
12325
12326     /* look for it in the table first */
12327     ret = ptr_table_fetch(PL_ptr_table, v);
12328     if (ret)
12329         return ret;
12330
12331     /* see if it is part of the interpreter structure */
12332     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12333         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12334     else {
12335         ret = v;
12336     }
12337
12338     return ret;
12339 }
12340
12341 /* duplicate the save stack */
12342
12343 ANY *
12344 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12345 {
12346     dVAR;
12347     ANY * const ss      = proto_perl->Isavestack;
12348     const I32 max       = proto_perl->Isavestack_max;
12349     I32 ix              = proto_perl->Isavestack_ix;
12350     ANY *nss;
12351     const SV *sv;
12352     const GV *gv;
12353     const AV *av;
12354     const HV *hv;
12355     void* ptr;
12356     int intval;
12357     long longval;
12358     GP *gp;
12359     IV iv;
12360     I32 i;
12361     char *c = NULL;
12362     void (*dptr) (void*);
12363     void (*dxptr) (pTHX_ void*);
12364
12365     PERL_ARGS_ASSERT_SS_DUP;
12366
12367     Newxz(nss, max, ANY);
12368
12369     while (ix > 0) {
12370         const UV uv = POPUV(ss,ix);
12371         const U8 type = (U8)uv & SAVE_MASK;
12372
12373         TOPUV(nss,ix) = uv;
12374         switch (type) {
12375         case SAVEt_CLEARSV:
12376             break;
12377         case SAVEt_HELEM:               /* hash element */
12378             sv = (const SV *)POPPTR(ss,ix);
12379             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12380             /* fall through */
12381         case SAVEt_ITEM:                        /* normal string */
12382         case SAVEt_GVSV:                        /* scalar slot in GV */
12383         case SAVEt_SV:                          /* scalar reference */
12384             sv = (const SV *)POPPTR(ss,ix);
12385             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12386             /* fall through */
12387         case SAVEt_FREESV:
12388         case SAVEt_MORTALIZESV:
12389             sv = (const SV *)POPPTR(ss,ix);
12390             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12391             break;
12392         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12393             c = (char*)POPPTR(ss,ix);
12394             TOPPTR(nss,ix) = savesharedpv(c);
12395             ptr = POPPTR(ss,ix);
12396             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12397             break;
12398         case SAVEt_GENERIC_SVREF:               /* generic sv */
12399         case SAVEt_SVREF:                       /* scalar reference */
12400             sv = (const SV *)POPPTR(ss,ix);
12401             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12402             ptr = POPPTR(ss,ix);
12403             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12404             break;
12405         case SAVEt_HV:                          /* hash reference */
12406         case SAVEt_AV:                          /* array reference */
12407             sv = (const SV *) POPPTR(ss,ix);
12408             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12409             /* fall through */
12410         case SAVEt_COMPPAD:
12411         case SAVEt_NSTAB:
12412             sv = (const SV *) POPPTR(ss,ix);
12413             TOPPTR(nss,ix) = sv_dup(sv, param);
12414             break;
12415         case SAVEt_INT:                         /* int reference */
12416             ptr = POPPTR(ss,ix);
12417             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12418             intval = (int)POPINT(ss,ix);
12419             TOPINT(nss,ix) = intval;
12420             break;
12421         case SAVEt_LONG:                        /* long reference */
12422             ptr = POPPTR(ss,ix);
12423             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12424             longval = (long)POPLONG(ss,ix);
12425             TOPLONG(nss,ix) = longval;
12426             break;
12427         case SAVEt_I32:                         /* I32 reference */
12428             ptr = POPPTR(ss,ix);
12429             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12430             i = POPINT(ss,ix);
12431             TOPINT(nss,ix) = i;
12432             break;
12433         case SAVEt_IV:                          /* IV reference */
12434             ptr = POPPTR(ss,ix);
12435             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12436             iv = POPIV(ss,ix);
12437             TOPIV(nss,ix) = iv;
12438             break;
12439         case SAVEt_HPTR:                        /* HV* reference */
12440         case SAVEt_APTR:                        /* AV* reference */
12441         case SAVEt_SPTR:                        /* SV* reference */
12442             ptr = POPPTR(ss,ix);
12443             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12444             sv = (const SV *)POPPTR(ss,ix);
12445             TOPPTR(nss,ix) = sv_dup(sv, param);
12446             break;
12447         case SAVEt_VPTR:                        /* random* reference */
12448             ptr = POPPTR(ss,ix);
12449             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12450             /* Fall through */
12451         case SAVEt_INT_SMALL:
12452         case SAVEt_I32_SMALL:
12453         case SAVEt_I16:                         /* I16 reference */
12454         case SAVEt_I8:                          /* I8 reference */
12455         case SAVEt_BOOL:
12456             ptr = POPPTR(ss,ix);
12457             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12458             break;
12459         case SAVEt_GENERIC_PVREF:               /* generic char* */
12460         case SAVEt_PPTR:                        /* char* reference */
12461             ptr = POPPTR(ss,ix);
12462             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12463             c = (char*)POPPTR(ss,ix);
12464             TOPPTR(nss,ix) = pv_dup(c);
12465             break;
12466         case SAVEt_GP:                          /* scalar reference */
12467             gp = (GP*)POPPTR(ss,ix);
12468             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12469             (void)GpREFCNT_inc(gp);
12470             gv = (const GV *)POPPTR(ss,ix);
12471             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12472             break;
12473         case SAVEt_FREEOP:
12474             ptr = POPPTR(ss,ix);
12475             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12476                 /* these are assumed to be refcounted properly */
12477                 OP *o;
12478                 switch (((OP*)ptr)->op_type) {
12479                 case OP_LEAVESUB:
12480                 case OP_LEAVESUBLV:
12481                 case OP_LEAVEEVAL:
12482                 case OP_LEAVE:
12483                 case OP_SCOPE:
12484                 case OP_LEAVEWRITE:
12485                     TOPPTR(nss,ix) = ptr;
12486                     o = (OP*)ptr;
12487                     OP_REFCNT_LOCK;
12488                     (void) OpREFCNT_inc(o);
12489                     OP_REFCNT_UNLOCK;
12490                     break;
12491                 default:
12492                     TOPPTR(nss,ix) = NULL;
12493                     break;
12494                 }
12495             }
12496             else
12497                 TOPPTR(nss,ix) = NULL;
12498             break;
12499         case SAVEt_FREECOPHH:
12500             ptr = POPPTR(ss,ix);
12501             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12502             break;
12503         case SAVEt_DELETE:
12504             hv = (const HV *)POPPTR(ss,ix);
12505             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12506             i = POPINT(ss,ix);
12507             TOPINT(nss,ix) = i;
12508             /* Fall through */
12509         case SAVEt_FREEPV:
12510             c = (char*)POPPTR(ss,ix);
12511             TOPPTR(nss,ix) = pv_dup_inc(c);
12512             break;
12513         case SAVEt_STACK_POS:           /* Position on Perl stack */
12514             i = POPINT(ss,ix);
12515             TOPINT(nss,ix) = i;
12516             break;
12517         case SAVEt_DESTRUCTOR:
12518             ptr = POPPTR(ss,ix);
12519             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12520             dptr = POPDPTR(ss,ix);
12521             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12522                                         any_dup(FPTR2DPTR(void *, dptr),
12523                                                 proto_perl));
12524             break;
12525         case SAVEt_DESTRUCTOR_X:
12526             ptr = POPPTR(ss,ix);
12527             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12528             dxptr = POPDXPTR(ss,ix);
12529             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12530                                          any_dup(FPTR2DPTR(void *, dxptr),
12531                                                  proto_perl));
12532             break;
12533         case SAVEt_REGCONTEXT:
12534         case SAVEt_ALLOC:
12535             ix -= uv >> SAVE_TIGHT_SHIFT;
12536             break;
12537         case SAVEt_AELEM:               /* array element */
12538             sv = (const SV *)POPPTR(ss,ix);
12539             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12540             i = POPINT(ss,ix);
12541             TOPINT(nss,ix) = i;
12542             av = (const AV *)POPPTR(ss,ix);
12543             TOPPTR(nss,ix) = av_dup_inc(av, param);
12544             break;
12545         case SAVEt_OP:
12546             ptr = POPPTR(ss,ix);
12547             TOPPTR(nss,ix) = ptr;
12548             break;
12549         case SAVEt_HINTS:
12550             ptr = POPPTR(ss,ix);
12551             ptr = cophh_copy((COPHH*)ptr);
12552             TOPPTR(nss,ix) = ptr;
12553             i = POPINT(ss,ix);
12554             TOPINT(nss,ix) = i;
12555             if (i & HINT_LOCALIZE_HH) {
12556                 hv = (const HV *)POPPTR(ss,ix);
12557                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12558             }
12559             break;
12560         case SAVEt_PADSV_AND_MORTALIZE:
12561             longval = (long)POPLONG(ss,ix);
12562             TOPLONG(nss,ix) = longval;
12563             ptr = POPPTR(ss,ix);
12564             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12565             sv = (const SV *)POPPTR(ss,ix);
12566             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12567             break;
12568         case SAVEt_SET_SVFLAGS:
12569             i = POPINT(ss,ix);
12570             TOPINT(nss,ix) = i;
12571             i = POPINT(ss,ix);
12572             TOPINT(nss,ix) = i;
12573             sv = (const SV *)POPPTR(ss,ix);
12574             TOPPTR(nss,ix) = sv_dup(sv, param);
12575             break;
12576         case SAVEt_RE_STATE:
12577             {
12578                 const struct re_save_state *const old_state
12579                     = (struct re_save_state *)
12580                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12581                 struct re_save_state *const new_state
12582                     = (struct re_save_state *)
12583                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12584
12585                 Copy(old_state, new_state, 1, struct re_save_state);
12586                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12587
12588                 new_state->re_state_bostr
12589                     = pv_dup(old_state->re_state_bostr);
12590                 new_state->re_state_reginput
12591                     = pv_dup(old_state->re_state_reginput);
12592                 new_state->re_state_regeol
12593                     = pv_dup(old_state->re_state_regeol);
12594                 new_state->re_state_regoffs
12595                     = (regexp_paren_pair*)
12596                         any_dup(old_state->re_state_regoffs, proto_perl);
12597                 new_state->re_state_reglastparen
12598                     = (U32*) any_dup(old_state->re_state_reglastparen, 
12599                               proto_perl);
12600                 new_state->re_state_reglastcloseparen
12601                     = (U32*)any_dup(old_state->re_state_reglastcloseparen,
12602                               proto_perl);
12603                 /* XXX This just has to be broken. The old save_re_context
12604                    code did SAVEGENERICPV(PL_reg_start_tmp);
12605                    PL_reg_start_tmp is char **.
12606                    Look above to what the dup code does for
12607                    SAVEt_GENERIC_PVREF
12608                    It can never have worked.
12609                    So this is merely a faithful copy of the exiting bug:  */
12610                 new_state->re_state_reg_start_tmp
12611                     = (char **) pv_dup((char *)
12612                                       old_state->re_state_reg_start_tmp);
12613                 /* I assume that it only ever "worked" because no-one called
12614                    (pseudo)fork while the regexp engine had re-entered itself.
12615                 */
12616 #ifdef PERL_OLD_COPY_ON_WRITE
12617                 new_state->re_state_nrs
12618                     = sv_dup(old_state->re_state_nrs, param);
12619 #endif
12620                 new_state->re_state_reg_magic
12621                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12622                                proto_perl);
12623                 new_state->re_state_reg_oldcurpm
12624                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12625                               proto_perl);
12626                 new_state->re_state_reg_curpm
12627                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12628                                proto_perl);
12629                 new_state->re_state_reg_oldsaved
12630                     = pv_dup(old_state->re_state_reg_oldsaved);
12631                 new_state->re_state_reg_poscache
12632                     = pv_dup(old_state->re_state_reg_poscache);
12633                 new_state->re_state_reg_starttry
12634                     = pv_dup(old_state->re_state_reg_starttry);
12635                 break;
12636             }
12637         case SAVEt_COMPILE_WARNINGS:
12638             ptr = POPPTR(ss,ix);
12639             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12640             break;
12641         case SAVEt_PARSER:
12642             ptr = POPPTR(ss,ix);
12643             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12644             break;
12645         default:
12646             Perl_croak(aTHX_
12647                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12648         }
12649     }
12650
12651     return nss;
12652 }
12653
12654
12655 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12656  * flag to the result. This is done for each stash before cloning starts,
12657  * so we know which stashes want their objects cloned */
12658
12659 static void
12660 do_mark_cloneable_stash(pTHX_ SV *const sv)
12661 {
12662     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12663     if (hvname) {
12664         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12665         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12666         if (cloner && GvCV(cloner)) {
12667             dSP;
12668             UV status;
12669
12670             ENTER;
12671             SAVETMPS;
12672             PUSHMARK(SP);
12673             mXPUSHs(newSVhek(hvname));
12674             PUTBACK;
12675             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12676             SPAGAIN;
12677             status = POPu;
12678             PUTBACK;
12679             FREETMPS;
12680             LEAVE;
12681             if (status)
12682                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12683         }
12684     }
12685 }
12686
12687
12688
12689 /*
12690 =for apidoc perl_clone
12691
12692 Create and return a new interpreter by cloning the current one.
12693
12694 perl_clone takes these flags as parameters:
12695
12696 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12697 without it we only clone the data and zero the stacks,
12698 with it we copy the stacks and the new perl interpreter is
12699 ready to run at the exact same point as the previous one.
12700 The pseudo-fork code uses COPY_STACKS while the
12701 threads->create doesn't.
12702
12703 CLONEf_KEEP_PTR_TABLE -
12704 perl_clone keeps a ptr_table with the pointer of the old
12705 variable as a key and the new variable as a value,
12706 this allows it to check if something has been cloned and not
12707 clone it again but rather just use the value and increase the
12708 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
12709 the ptr_table using the function
12710 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12711 reason to keep it around is if you want to dup some of your own
12712 variable who are outside the graph perl scans, example of this
12713 code is in threads.xs create.
12714
12715 CLONEf_CLONE_HOST -
12716 This is a win32 thing, it is ignored on unix, it tells perls
12717 win32host code (which is c++) to clone itself, this is needed on
12718 win32 if you want to run two threads at the same time,
12719 if you just want to do some stuff in a separate perl interpreter
12720 and then throw it away and return to the original one,
12721 you don't need to do anything.
12722
12723 =cut
12724 */
12725
12726 /* XXX the above needs expanding by someone who actually understands it ! */
12727 EXTERN_C PerlInterpreter *
12728 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12729
12730 PerlInterpreter *
12731 perl_clone(PerlInterpreter *proto_perl, UV flags)
12732 {
12733    dVAR;
12734 #ifdef PERL_IMPLICIT_SYS
12735
12736     PERL_ARGS_ASSERT_PERL_CLONE;
12737
12738    /* perlhost.h so we need to call into it
12739    to clone the host, CPerlHost should have a c interface, sky */
12740
12741    if (flags & CLONEf_CLONE_HOST) {
12742        return perl_clone_host(proto_perl,flags);
12743    }
12744    return perl_clone_using(proto_perl, flags,
12745                             proto_perl->IMem,
12746                             proto_perl->IMemShared,
12747                             proto_perl->IMemParse,
12748                             proto_perl->IEnv,
12749                             proto_perl->IStdIO,
12750                             proto_perl->ILIO,
12751                             proto_perl->IDir,
12752                             proto_perl->ISock,
12753                             proto_perl->IProc);
12754 }
12755
12756 PerlInterpreter *
12757 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12758                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12759                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12760                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12761                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12762                  struct IPerlProc* ipP)
12763 {
12764     /* XXX many of the string copies here can be optimized if they're
12765      * constants; they need to be allocated as common memory and just
12766      * their pointers copied. */
12767
12768     IV i;
12769     CLONE_PARAMS clone_params;
12770     CLONE_PARAMS* const param = &clone_params;
12771
12772     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12773
12774     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12775 #else           /* !PERL_IMPLICIT_SYS */
12776     IV i;
12777     CLONE_PARAMS clone_params;
12778     CLONE_PARAMS* param = &clone_params;
12779     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12780
12781     PERL_ARGS_ASSERT_PERL_CLONE;
12782 #endif          /* PERL_IMPLICIT_SYS */
12783
12784     /* for each stash, determine whether its objects should be cloned */
12785     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12786     PERL_SET_THX(my_perl);
12787
12788 #ifdef DEBUGGING
12789     PoisonNew(my_perl, 1, PerlInterpreter);
12790     PL_op = NULL;
12791     PL_curcop = NULL;
12792     PL_defstash = NULL; /* may be used by perl malloc() */
12793     PL_markstack = 0;
12794     PL_scopestack = 0;
12795     PL_scopestack_name = 0;
12796     PL_savestack = 0;
12797     PL_savestack_ix = 0;
12798     PL_savestack_max = -1;
12799     PL_sig_pending = 0;
12800     PL_parser = NULL;
12801     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12802 #  ifdef DEBUG_LEAKING_SCALARS
12803     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12804 #  endif
12805 #else   /* !DEBUGGING */
12806     Zero(my_perl, 1, PerlInterpreter);
12807 #endif  /* DEBUGGING */
12808
12809 #ifdef PERL_IMPLICIT_SYS
12810     /* host pointers */
12811     PL_Mem              = ipM;
12812     PL_MemShared        = ipMS;
12813     PL_MemParse         = ipMP;
12814     PL_Env              = ipE;
12815     PL_StdIO            = ipStd;
12816     PL_LIO              = ipLIO;
12817     PL_Dir              = ipD;
12818     PL_Sock             = ipS;
12819     PL_Proc             = ipP;
12820 #endif          /* PERL_IMPLICIT_SYS */
12821
12822     param->flags = flags;
12823     /* Nothing in the core code uses this, but we make it available to
12824        extensions (using mg_dup).  */
12825     param->proto_perl = proto_perl;
12826     /* Likely nothing will use this, but it is initialised to be consistent
12827        with Perl_clone_params_new().  */
12828     param->new_perl = my_perl;
12829     param->unreferenced = NULL;
12830
12831     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12832
12833     PL_body_arenas = NULL;
12834     Zero(&PL_body_roots, 1, PL_body_roots);
12835     
12836     PL_sv_count         = 0;
12837     PL_sv_objcount      = 0;
12838     PL_sv_root          = NULL;
12839     PL_sv_arenaroot     = NULL;
12840
12841     PL_debug            = proto_perl->Idebug;
12842
12843     PL_hash_seed        = proto_perl->Ihash_seed;
12844     PL_rehash_seed      = proto_perl->Irehash_seed;
12845
12846     SvANY(&PL_sv_undef)         = NULL;
12847     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
12848     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
12849     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
12850     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12851                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12852
12853     SvANY(&PL_sv_yes)           = new_XPVNV();
12854     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
12855     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12856                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12857
12858     /* dbargs array probably holds garbage */
12859     PL_dbargs           = NULL;
12860
12861     PL_compiling = proto_perl->Icompiling;
12862
12863 #ifdef PERL_DEBUG_READONLY_OPS
12864     PL_slabs = NULL;
12865     PL_slab_count = 0;
12866 #endif
12867
12868     /* pseudo environmental stuff */
12869     PL_origargc         = proto_perl->Iorigargc;
12870     PL_origargv         = proto_perl->Iorigargv;
12871
12872     /* Set tainting stuff before PerlIO_debug can possibly get called */
12873     PL_tainting         = proto_perl->Itainting;
12874     PL_taint_warn       = proto_perl->Itaint_warn;
12875
12876     PL_minus_c          = proto_perl->Iminus_c;
12877
12878     PL_localpatches     = proto_perl->Ilocalpatches;
12879     PL_splitstr         = proto_perl->Isplitstr;
12880     PL_minus_n          = proto_perl->Iminus_n;
12881     PL_minus_p          = proto_perl->Iminus_p;
12882     PL_minus_l          = proto_perl->Iminus_l;
12883     PL_minus_a          = proto_perl->Iminus_a;
12884     PL_minus_E          = proto_perl->Iminus_E;
12885     PL_minus_F          = proto_perl->Iminus_F;
12886     PL_doswitches       = proto_perl->Idoswitches;
12887     PL_dowarn           = proto_perl->Idowarn;
12888     PL_sawampersand     = proto_perl->Isawampersand;
12889     PL_unsafe           = proto_perl->Iunsafe;
12890     PL_perldb           = proto_perl->Iperldb;
12891     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12892     PL_exit_flags       = proto_perl->Iexit_flags;
12893
12894     /* XXX time(&PL_basetime) when asked for? */
12895     PL_basetime         = proto_perl->Ibasetime;
12896
12897     PL_maxsysfd         = proto_perl->Imaxsysfd;
12898     PL_statusvalue      = proto_perl->Istatusvalue;
12899 #ifdef VMS
12900     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
12901 #else
12902     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12903 #endif
12904
12905     /* RE engine related */
12906     Zero(&PL_reg_state, 1, struct re_save_state);
12907     PL_reginterp_cnt    = 0;
12908     PL_regmatch_slab    = NULL;
12909
12910     PL_sub_generation   = proto_perl->Isub_generation;
12911
12912     /* funky return mechanisms */
12913     PL_forkprocess      = proto_perl->Iforkprocess;
12914
12915     /* internal state */
12916     PL_maxo             = proto_perl->Imaxo;
12917
12918     PL_main_start       = proto_perl->Imain_start;
12919     PL_eval_root        = proto_perl->Ieval_root;
12920     PL_eval_start       = proto_perl->Ieval_start;
12921
12922     PL_filemode         = proto_perl->Ifilemode;
12923     PL_lastfd           = proto_perl->Ilastfd;
12924     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
12925     PL_Argv             = NULL;
12926     PL_Cmd              = NULL;
12927     PL_gensym           = proto_perl->Igensym;
12928
12929     PL_laststatval      = proto_perl->Ilaststatval;
12930     PL_laststype        = proto_perl->Ilaststype;
12931     PL_mess_sv          = NULL;
12932
12933     PL_profiledata      = NULL;
12934
12935     PL_generation       = proto_perl->Igeneration;
12936
12937     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
12938     PL_in_clean_all     = proto_perl->Iin_clean_all;
12939
12940     PL_uid              = proto_perl->Iuid;
12941     PL_euid             = proto_perl->Ieuid;
12942     PL_gid              = proto_perl->Igid;
12943     PL_egid             = proto_perl->Iegid;
12944     PL_nomemok          = proto_perl->Inomemok;
12945     PL_an               = proto_perl->Ian;
12946     PL_evalseq          = proto_perl->Ievalseq;
12947     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
12948     PL_origalen         = proto_perl->Iorigalen;
12949
12950     PL_sighandlerp      = proto_perl->Isighandlerp;
12951
12952     PL_runops           = proto_perl->Irunops;
12953
12954     PL_subline          = proto_perl->Isubline;
12955
12956 #ifdef FCRYPT
12957     PL_cryptseen        = proto_perl->Icryptseen;
12958 #endif
12959
12960     PL_hints            = proto_perl->Ihints;
12961
12962     PL_amagic_generation        = proto_perl->Iamagic_generation;
12963
12964 #ifdef USE_LOCALE_COLLATE
12965     PL_collation_ix     = proto_perl->Icollation_ix;
12966     PL_collation_standard       = proto_perl->Icollation_standard;
12967     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
12968     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
12969 #endif /* USE_LOCALE_COLLATE */
12970
12971 #ifdef USE_LOCALE_NUMERIC
12972     PL_numeric_standard = proto_perl->Inumeric_standard;
12973     PL_numeric_local    = proto_perl->Inumeric_local;
12974 #endif /* !USE_LOCALE_NUMERIC */
12975
12976     /* Did the locale setup indicate UTF-8? */
12977     PL_utf8locale       = proto_perl->Iutf8locale;
12978     /* Unicode features (see perlrun/-C) */
12979     PL_unicode          = proto_perl->Iunicode;
12980
12981     /* Pre-5.8 signals control */
12982     PL_signals          = proto_perl->Isignals;
12983
12984     /* times() ticks per second */
12985     PL_clocktick        = proto_perl->Iclocktick;
12986
12987     /* Recursion stopper for PerlIO_find_layer */
12988     PL_in_load_module   = proto_perl->Iin_load_module;
12989
12990     /* sort() routine */
12991     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
12992
12993     /* Not really needed/useful since the reenrant_retint is "volatile",
12994      * but do it for consistency's sake. */
12995     PL_reentrant_retint = proto_perl->Ireentrant_retint;
12996
12997     /* Hooks to shared SVs and locks. */
12998     PL_sharehook        = proto_perl->Isharehook;
12999     PL_lockhook         = proto_perl->Ilockhook;
13000     PL_unlockhook       = proto_perl->Iunlockhook;
13001     PL_threadhook       = proto_perl->Ithreadhook;
13002     PL_destroyhook      = proto_perl->Idestroyhook;
13003     PL_signalhook       = proto_perl->Isignalhook;
13004
13005     PL_globhook         = proto_perl->Iglobhook;
13006
13007 #ifdef THREADS_HAVE_PIDS
13008     PL_ppid             = proto_perl->Ippid;
13009 #endif
13010
13011     /* swatch cache */
13012     PL_last_swash_hv    = NULL; /* reinits on demand */
13013     PL_last_swash_klen  = 0;
13014     PL_last_swash_key[0]= '\0';
13015     PL_last_swash_tmps  = (U8*)NULL;
13016     PL_last_swash_slen  = 0;
13017
13018     PL_glob_index       = proto_perl->Iglob_index;
13019     PL_srand_called     = proto_perl->Isrand_called;
13020
13021     if (flags & CLONEf_COPY_STACKS) {
13022         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13023         PL_tmps_ix              = proto_perl->Itmps_ix;
13024         PL_tmps_max             = proto_perl->Itmps_max;
13025         PL_tmps_floor           = proto_perl->Itmps_floor;
13026
13027         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13028          * NOTE: unlike the others! */
13029         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13030         PL_scopestack_max       = proto_perl->Iscopestack_max;
13031
13032         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13033          * NOTE: unlike the others! */
13034         PL_savestack_ix         = proto_perl->Isavestack_ix;
13035         PL_savestack_max        = proto_perl->Isavestack_max;
13036     }
13037
13038     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13039     PL_top_env          = &PL_start_env;
13040
13041     PL_op               = proto_perl->Iop;
13042
13043     PL_Sv               = NULL;
13044     PL_Xpv              = (XPV*)NULL;
13045     my_perl->Ina        = proto_perl->Ina;
13046
13047     PL_statbuf          = proto_perl->Istatbuf;
13048     PL_statcache        = proto_perl->Istatcache;
13049
13050 #ifdef HAS_TIMES
13051     PL_timesbuf         = proto_perl->Itimesbuf;
13052 #endif
13053
13054     PL_tainted          = proto_perl->Itainted;
13055     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13056
13057     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13058
13059     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13060     PL_restartop        = proto_perl->Irestartop;
13061     PL_in_eval          = proto_perl->Iin_eval;
13062     PL_delaymagic       = proto_perl->Idelaymagic;
13063     PL_phase            = proto_perl->Iphase;
13064     PL_localizing       = proto_perl->Ilocalizing;
13065
13066     PL_hv_fetch_ent_mh  = NULL;
13067     PL_modcount         = proto_perl->Imodcount;
13068     PL_lastgotoprobe    = NULL;
13069     PL_dumpindent       = proto_perl->Idumpindent;
13070
13071     PL_efloatbuf        = NULL;         /* reinits on demand */
13072     PL_efloatsize       = 0;                    /* reinits on demand */
13073
13074     /* regex stuff */
13075
13076     PL_regdummy         = proto_perl->Iregdummy;
13077     PL_colorset         = 0;            /* reinits PL_colors[] */
13078     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13079
13080     /* Pluggable optimizer */
13081     PL_peepp            = proto_perl->Ipeepp;
13082     PL_rpeepp           = proto_perl->Irpeepp;
13083     /* op_free() hook */
13084     PL_opfreehook       = proto_perl->Iopfreehook;
13085
13086 #ifdef USE_REENTRANT_API
13087     /* XXX: things like -Dm will segfault here in perlio, but doing
13088      *  PERL_SET_CONTEXT(proto_perl);
13089      * breaks too many other things
13090      */
13091     Perl_reentrant_init(aTHX);
13092 #endif
13093
13094     /* create SV map for pointer relocation */
13095     PL_ptr_table = ptr_table_new();
13096
13097     /* initialize these special pointers as early as possible */
13098     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13099
13100     SvANY(&PL_sv_no)            = new_XPVNV();
13101     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
13102     SvCUR_set(&PL_sv_no, 0);
13103     SvLEN_set(&PL_sv_no, 1);
13104     SvIV_set(&PL_sv_no, 0);
13105     SvNV_set(&PL_sv_no, 0);
13106     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13107
13108     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
13109     SvCUR_set(&PL_sv_yes, 1);
13110     SvLEN_set(&PL_sv_yes, 2);
13111     SvIV_set(&PL_sv_yes, 1);
13112     SvNV_set(&PL_sv_yes, 1);
13113     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13114
13115     /* create (a non-shared!) shared string table */
13116     PL_strtab           = newHV();
13117     HvSHAREKEYS_off(PL_strtab);
13118     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13119     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13120
13121     /* These two PVs will be free'd special way so must set them same way op.c does */
13122     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
13123     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
13124
13125     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13126     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13127
13128     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13129     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13130     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13131     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13132
13133     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13134     /* This makes no difference to the implementation, as it always pushes
13135        and shifts pointers to other SVs without changing their reference
13136        count, with the array becoming empty before it is freed. However, it
13137        makes it conceptually clear what is going on, and will avoid some
13138        work inside av.c, filling slots between AvFILL() and AvMAX() with
13139        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13140     AvREAL_off(param->stashes);
13141
13142     if (!(flags & CLONEf_COPY_STACKS)) {
13143         param->unreferenced = newAV();
13144     }
13145
13146 #ifdef PERLIO_LAYERS
13147     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13148     PerlIO_clone(aTHX_ proto_perl, param);
13149 #endif
13150
13151     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13152     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13153     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13154     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13155     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13156     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13157
13158     /* switches */
13159     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13160     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13161     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13162     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13163
13164     /* magical thingies */
13165     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
13166
13167     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13168
13169     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13170     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13171     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13172
13173    
13174     /* Clone the regex array */
13175     /* ORANGE FIXME for plugins, probably in the SV dup code.
13176        newSViv(PTR2IV(CALLREGDUPE(
13177        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13178     */
13179     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13180     PL_regex_pad = AvARRAY(PL_regex_padav);
13181
13182     /* shortcuts to various I/O objects */
13183     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13184     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13185     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13186     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13187     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13188     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13189     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13190
13191     /* shortcuts to regexp stuff */
13192     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13193
13194     /* shortcuts to misc objects */
13195     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13196
13197     /* shortcuts to debugging objects */
13198     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13199     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13200     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13201     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13202     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13203     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13204
13205     /* symbol tables */
13206     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13207     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13208     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13209     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13210     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13211
13212     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13213     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13214     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13215     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13216     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13217     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13218     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13219     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13220
13221     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13222
13223     /* subprocess state */
13224     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13225
13226     if (proto_perl->Iop_mask)
13227         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13228     else
13229         PL_op_mask      = NULL;
13230     /* PL_asserting        = proto_perl->Iasserting; */
13231
13232     /* current interpreter roots */
13233     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13234     OP_REFCNT_LOCK;
13235     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13236     OP_REFCNT_UNLOCK;
13237
13238     /* runtime control stuff */
13239     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13240
13241     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13242
13243     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13244
13245     /* interpreter atexit processing */
13246     PL_exitlistlen      = proto_perl->Iexitlistlen;
13247     if (PL_exitlistlen) {
13248         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13249         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13250     }
13251     else
13252         PL_exitlist     = (PerlExitListEntry*)NULL;
13253
13254     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13255     if (PL_my_cxt_size) {
13256         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13257         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13258 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13259         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13260         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13261 #endif
13262     }
13263     else {
13264         PL_my_cxt_list  = (void**)NULL;
13265 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13266         PL_my_cxt_keys  = (const char**)NULL;
13267 #endif
13268     }
13269     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13270     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13271     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13272     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13273
13274     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13275
13276     PAD_CLONE_VARS(proto_perl, param);
13277
13278 #ifdef HAVE_INTERP_INTERN
13279     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13280 #endif
13281
13282     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13283
13284 #ifdef PERL_USES_PL_PIDSTATUS
13285     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13286 #endif
13287     PL_osname           = SAVEPV(proto_perl->Iosname);
13288     PL_parser           = parser_dup(proto_perl->Iparser, param);
13289
13290     /* XXX this only works if the saved cop has already been cloned */
13291     if (proto_perl->Iparser) {
13292         PL_parser->saved_curcop = (COP*)any_dup(
13293                                     proto_perl->Iparser->saved_curcop,
13294                                     proto_perl);
13295     }
13296
13297     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13298
13299 #ifdef USE_LOCALE_COLLATE
13300     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13301 #endif /* USE_LOCALE_COLLATE */
13302
13303 #ifdef USE_LOCALE_NUMERIC
13304     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13305     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13306 #endif /* !USE_LOCALE_NUMERIC */
13307
13308     /* utf8 character classes */
13309     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
13310     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13311     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
13312     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
13313     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
13314     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
13315     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
13316     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
13317     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
13318     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13319     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13320     PL_utf8_X_begin     = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
13321     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13322     PL_utf8_X_prepend   = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
13323     PL_utf8_X_non_hangul        = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
13324     PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
13325     PL_utf8_X_LV        = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
13326     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13327     PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
13328     PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
13329     PL_utf8_X_LV_LVT_V  = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
13330     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13331     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13332     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13333     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13334     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13335     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13336     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13337     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13338     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13339     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13340
13341
13342     if (proto_perl->Ipsig_pend) {
13343         Newxz(PL_psig_pend, SIG_SIZE, int);
13344     }
13345     else {
13346         PL_psig_pend    = (int*)NULL;
13347     }
13348
13349     if (proto_perl->Ipsig_name) {
13350         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13351         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13352                             param);
13353         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13354     }
13355     else {
13356         PL_psig_ptr     = (SV**)NULL;
13357         PL_psig_name    = (SV**)NULL;
13358     }
13359
13360     if (flags & CLONEf_COPY_STACKS) {
13361         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13362         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13363                             PL_tmps_ix+1, param);
13364
13365         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13366         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13367         Newxz(PL_markstack, i, I32);
13368         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13369                                                   - proto_perl->Imarkstack);
13370         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13371                                                   - proto_perl->Imarkstack);
13372         Copy(proto_perl->Imarkstack, PL_markstack,
13373              PL_markstack_ptr - PL_markstack + 1, I32);
13374
13375         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13376          * NOTE: unlike the others! */
13377         Newxz(PL_scopestack, PL_scopestack_max, I32);
13378         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13379
13380 #ifdef DEBUGGING
13381         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13382         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13383 #endif
13384         /* NOTE: si_dup() looks at PL_markstack */
13385         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13386
13387         /* PL_curstack          = PL_curstackinfo->si_stack; */
13388         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13389         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13390
13391         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13392         PL_stack_base           = AvARRAY(PL_curstack);
13393         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13394                                                    - proto_perl->Istack_base);
13395         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13396
13397         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13398         PL_savestack            = ss_dup(proto_perl, param);
13399     }
13400     else {
13401         init_stacks();
13402         ENTER;                  /* perl_destruct() wants to LEAVE; */
13403     }
13404
13405     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13406     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13407
13408     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13409     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13410     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13411     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13412     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13413     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13414
13415     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13416
13417     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13418     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13419     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13420     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13421
13422     PL_stashcache       = newHV();
13423
13424     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13425                                             proto_perl->Iwatchaddr);
13426     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13427     if (PL_debug && PL_watchaddr) {
13428         PerlIO_printf(Perl_debug_log,
13429           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13430           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13431           PTR2UV(PL_watchok));
13432     }
13433
13434     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13435     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13436     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13437
13438     /* Call the ->CLONE method, if it exists, for each of the stashes
13439        identified by sv_dup() above.
13440     */
13441     while(av_len(param->stashes) != -1) {
13442         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13443         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13444         if (cloner && GvCV(cloner)) {
13445             dSP;
13446             ENTER;
13447             SAVETMPS;
13448             PUSHMARK(SP);
13449             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13450             PUTBACK;
13451             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13452             FREETMPS;
13453             LEAVE;
13454         }
13455     }
13456
13457     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13458         ptr_table_free(PL_ptr_table);
13459         PL_ptr_table = NULL;
13460     }
13461
13462     if (!(flags & CLONEf_COPY_STACKS)) {
13463         unreferenced_to_tmp_stack(param->unreferenced);
13464     }
13465
13466     SvREFCNT_dec(param->stashes);
13467
13468     /* orphaned? eg threads->new inside BEGIN or use */
13469     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13470         SvREFCNT_inc_simple_void(PL_compcv);
13471         SAVEFREESV(PL_compcv);
13472     }
13473
13474     return my_perl;
13475 }
13476
13477 static void
13478 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13479 {
13480     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13481     
13482     if (AvFILLp(unreferenced) > -1) {
13483         SV **svp = AvARRAY(unreferenced);
13484         SV **const last = svp + AvFILLp(unreferenced);
13485         SSize_t count = 0;
13486
13487         do {
13488             if (SvREFCNT(*svp) == 1)
13489                 ++count;
13490         } while (++svp <= last);
13491
13492         EXTEND_MORTAL(count);
13493         svp = AvARRAY(unreferenced);
13494
13495         do {
13496             if (SvREFCNT(*svp) == 1) {
13497                 /* Our reference is the only one to this SV. This means that
13498                    in this thread, the scalar effectively has a 0 reference.
13499                    That doesn't work (cleanup never happens), so donate our
13500                    reference to it onto the save stack. */
13501                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13502             } else {
13503                 /* As an optimisation, because we are already walking the
13504                    entire array, instead of above doing either
13505                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13506                    release our reference to the scalar, so that at the end of
13507                    the array owns zero references to the scalars it happens to
13508                    point to. We are effectively converting the array from
13509                    AvREAL() on to AvREAL() off. This saves the av_clear()
13510                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13511                    walking the array a second time.  */
13512                 SvREFCNT_dec(*svp);
13513             }
13514
13515         } while (++svp <= last);
13516         AvREAL_off(unreferenced);
13517     }
13518     SvREFCNT_dec(unreferenced);
13519 }
13520
13521 void
13522 Perl_clone_params_del(CLONE_PARAMS *param)
13523 {
13524     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13525        happy: */
13526     PerlInterpreter *const to = param->new_perl;
13527     dTHXa(to);
13528     PerlInterpreter *const was = PERL_GET_THX;
13529
13530     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13531
13532     if (was != to) {
13533         PERL_SET_THX(to);
13534     }
13535
13536     SvREFCNT_dec(param->stashes);
13537     if (param->unreferenced)
13538         unreferenced_to_tmp_stack(param->unreferenced);
13539
13540     Safefree(param);
13541
13542     if (was != to) {
13543         PERL_SET_THX(was);
13544     }
13545 }
13546
13547 CLONE_PARAMS *
13548 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13549 {
13550     dVAR;
13551     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13552        does a dTHX; to get the context from thread local storage.
13553        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13554        a version that passes in my_perl.  */
13555     PerlInterpreter *const was = PERL_GET_THX;
13556     CLONE_PARAMS *param;
13557
13558     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13559
13560     if (was != to) {
13561         PERL_SET_THX(to);
13562     }
13563
13564     /* Given that we've set the context, we can do this unshared.  */
13565     Newx(param, 1, CLONE_PARAMS);
13566
13567     param->flags = 0;
13568     param->proto_perl = from;
13569     param->new_perl = to;
13570     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13571     AvREAL_off(param->stashes);
13572     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13573
13574     if (was != to) {
13575         PERL_SET_THX(was);
13576     }
13577     return param;
13578 }
13579
13580 #endif /* USE_ITHREADS */
13581
13582 /*
13583 =head1 Unicode Support
13584
13585 =for apidoc sv_recode_to_utf8
13586
13587 The encoding is assumed to be an Encode object, on entry the PV
13588 of the sv is assumed to be octets in that encoding, and the sv
13589 will be converted into Unicode (and UTF-8).
13590
13591 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13592 is not a reference, nothing is done to the sv.  If the encoding is not
13593 an C<Encode::XS> Encoding object, bad things will happen.
13594 (See F<lib/encoding.pm> and L<Encode>.)
13595
13596 The PV of the sv is returned.
13597
13598 =cut */
13599
13600 char *
13601 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13602 {
13603     dVAR;
13604
13605     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13606
13607     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13608         SV *uni;
13609         STRLEN len;
13610         const char *s;
13611         dSP;
13612         ENTER;
13613         SAVETMPS;
13614         save_re_context();
13615         PUSHMARK(sp);
13616         EXTEND(SP, 3);
13617         XPUSHs(encoding);
13618         XPUSHs(sv);
13619 /*
13620   NI-S 2002/07/09
13621   Passing sv_yes is wrong - it needs to be or'ed set of constants
13622   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13623   remove converted chars from source.
13624
13625   Both will default the value - let them.
13626
13627         XPUSHs(&PL_sv_yes);
13628 */
13629         PUTBACK;
13630         call_method("decode", G_SCALAR);
13631         SPAGAIN;
13632         uni = POPs;
13633         PUTBACK;
13634         s = SvPV_const(uni, len);
13635         if (s != SvPVX_const(sv)) {
13636             SvGROW(sv, len + 1);
13637             Move(s, SvPVX(sv), len + 1, char);
13638             SvCUR_set(sv, len);
13639         }
13640         FREETMPS;
13641         LEAVE;
13642         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13643             /* clear pos and any utf8 cache */
13644             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13645             if (mg)
13646                 mg->mg_len = -1;
13647             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13648                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13649         }
13650         SvUTF8_on(sv);
13651         return SvPVX(sv);
13652     }
13653     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13654 }
13655
13656 /*
13657 =for apidoc sv_cat_decode
13658
13659 The encoding is assumed to be an Encode object, the PV of the ssv is
13660 assumed to be octets in that encoding and decoding the input starts
13661 from the position which (PV + *offset) pointed to.  The dsv will be
13662 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13663 when the string tstr appears in decoding output or the input ends on
13664 the PV of the ssv. The value which the offset points will be modified
13665 to the last input position on the ssv.
13666
13667 Returns TRUE if the terminator was found, else returns FALSE.
13668
13669 =cut */
13670
13671 bool
13672 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13673                    SV *ssv, int *offset, char *tstr, int tlen)
13674 {
13675     dVAR;
13676     bool ret = FALSE;
13677
13678     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13679
13680     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13681         SV *offsv;
13682         dSP;
13683         ENTER;
13684         SAVETMPS;
13685         save_re_context();
13686         PUSHMARK(sp);
13687         EXTEND(SP, 6);
13688         XPUSHs(encoding);
13689         XPUSHs(dsv);
13690         XPUSHs(ssv);
13691         offsv = newSViv(*offset);
13692         mXPUSHs(offsv);
13693         mXPUSHp(tstr, tlen);
13694         PUTBACK;
13695         call_method("cat_decode", G_SCALAR);
13696         SPAGAIN;
13697         ret = SvTRUE(TOPs);
13698         *offset = SvIV(offsv);
13699         PUTBACK;
13700         FREETMPS;
13701         LEAVE;
13702     }
13703     else
13704         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13705     return ret;
13706
13707 }
13708
13709 /* ---------------------------------------------------------------------
13710  *
13711  * support functions for report_uninit()
13712  */
13713
13714 /* the maxiumum size of array or hash where we will scan looking
13715  * for the undefined element that triggered the warning */
13716
13717 #define FUV_MAX_SEARCH_SIZE 1000
13718
13719 /* Look for an entry in the hash whose value has the same SV as val;
13720  * If so, return a mortal copy of the key. */
13721
13722 STATIC SV*
13723 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13724 {
13725     dVAR;
13726     register HE **array;
13727     I32 i;
13728
13729     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13730
13731     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13732                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13733         return NULL;
13734
13735     array = HvARRAY(hv);
13736
13737     for (i=HvMAX(hv); i>0; i--) {
13738         register HE *entry;
13739         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13740             if (HeVAL(entry) != val)
13741                 continue;
13742             if (    HeVAL(entry) == &PL_sv_undef ||
13743                     HeVAL(entry) == &PL_sv_placeholder)
13744                 continue;
13745             if (!HeKEY(entry))
13746                 return NULL;
13747             if (HeKLEN(entry) == HEf_SVKEY)
13748                 return sv_mortalcopy(HeKEY_sv(entry));
13749             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13750         }
13751     }
13752     return NULL;
13753 }
13754
13755 /* Look for an entry in the array whose value has the same SV as val;
13756  * If so, return the index, otherwise return -1. */
13757
13758 STATIC I32
13759 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13760 {
13761     dVAR;
13762
13763     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13764
13765     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13766                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13767         return -1;
13768
13769     if (val != &PL_sv_undef) {
13770         SV ** const svp = AvARRAY(av);
13771         I32 i;
13772
13773         for (i=AvFILLp(av); i>=0; i--)
13774             if (svp[i] == val)
13775                 return i;
13776     }
13777     return -1;
13778 }
13779
13780 /* S_varname(): return the name of a variable, optionally with a subscript.
13781  * If gv is non-zero, use the name of that global, along with gvtype (one
13782  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13783  * targ.  Depending on the value of the subscript_type flag, return:
13784  */
13785
13786 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13787 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13788 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13789 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13790
13791 SV*
13792 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13793         const SV *const keyname, I32 aindex, int subscript_type)
13794 {
13795
13796     SV * const name = sv_newmortal();
13797     if (gv) {
13798         char buffer[2];
13799         buffer[0] = gvtype;
13800         buffer[1] = 0;
13801
13802         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13803
13804         gv_fullname4(name, gv, buffer, 0);
13805
13806         if ((unsigned int)SvPVX(name)[1] <= 26) {
13807             buffer[0] = '^';
13808             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13809
13810             /* Swap the 1 unprintable control character for the 2 byte pretty
13811                version - ie substr($name, 1, 1) = $buffer; */
13812             sv_insert(name, 1, 1, buffer, 2);
13813         }
13814     }
13815     else {
13816         CV * const cv = find_runcv(NULL);
13817         SV *sv;
13818         AV *av;
13819
13820         if (!cv || !CvPADLIST(cv))
13821             return NULL;
13822         av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
13823         sv = *av_fetch(av, targ, FALSE);
13824         sv_setsv(name, sv);
13825     }
13826
13827     if (subscript_type == FUV_SUBSCRIPT_HASH) {
13828         SV * const sv = newSV(0);
13829         *SvPVX(name) = '$';
13830         Perl_sv_catpvf(aTHX_ name, "{%s}",
13831             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13832         SvREFCNT_dec(sv);
13833     }
13834     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13835         *SvPVX(name) = '$';
13836         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13837     }
13838     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13839         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13840         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
13841     }
13842
13843     return name;
13844 }
13845
13846
13847 /*
13848 =for apidoc find_uninit_var
13849
13850 Find the name of the undefined variable (if any) that caused the operator
13851 to issue a "Use of uninitialized value" warning.
13852 If match is true, only return a name if its value matches uninit_sv.
13853 So roughly speaking, if a unary operator (such as OP_COS) generates a
13854 warning, then following the direct child of the op may yield an
13855 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
13856 other hand, with OP_ADD there are two branches to follow, so we only print
13857 the variable name if we get an exact match.
13858
13859 The name is returned as a mortal SV.
13860
13861 Assumes that PL_op is the op that originally triggered the error, and that
13862 PL_comppad/PL_curpad points to the currently executing pad.
13863
13864 =cut
13865 */
13866
13867 STATIC SV *
13868 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13869                   bool match)
13870 {
13871     dVAR;
13872     SV *sv;
13873     const GV *gv;
13874     const OP *o, *o2, *kid;
13875
13876     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13877                             uninit_sv == &PL_sv_placeholder)))
13878         return NULL;
13879
13880     switch (obase->op_type) {
13881
13882     case OP_RV2AV:
13883     case OP_RV2HV:
13884     case OP_PADAV:
13885     case OP_PADHV:
13886       {
13887         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13888         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13889         I32 index = 0;
13890         SV *keysv = NULL;
13891         int subscript_type = FUV_SUBSCRIPT_WITHIN;
13892
13893         if (pad) { /* @lex, %lex */
13894             sv = PAD_SVl(obase->op_targ);
13895             gv = NULL;
13896         }
13897         else {
13898             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13899             /* @global, %global */
13900                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13901                 if (!gv)
13902                     break;
13903                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
13904             }
13905             else if (obase == PL_op) /* @{expr}, %{expr} */
13906                 return find_uninit_var(cUNOPx(obase)->op_first,
13907                                                     uninit_sv, match);
13908             else /* @{expr}, %{expr} as a sub-expression */
13909                 return NULL;
13910         }
13911
13912         /* attempt to find a match within the aggregate */
13913         if (hash) {
13914             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13915             if (keysv)
13916                 subscript_type = FUV_SUBSCRIPT_HASH;
13917         }
13918         else {
13919             index = find_array_subscript((const AV *)sv, uninit_sv);
13920             if (index >= 0)
13921                 subscript_type = FUV_SUBSCRIPT_ARRAY;
13922         }
13923
13924         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13925             break;
13926
13927         return varname(gv, hash ? '%' : '@', obase->op_targ,
13928                                     keysv, index, subscript_type);
13929       }
13930
13931     case OP_RV2SV:
13932         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13933             /* $global */
13934             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13935             if (!gv || !GvSTASH(gv))
13936                 break;
13937             if (match && (GvSV(gv) != uninit_sv))
13938                 break;
13939             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13940         }
13941         /* ${expr} */
13942         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
13943
13944     case OP_PADSV:
13945         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13946             break;
13947         return varname(NULL, '$', obase->op_targ,
13948                                     NULL, 0, FUV_SUBSCRIPT_NONE);
13949
13950     case OP_GVSV:
13951         gv = cGVOPx_gv(obase);
13952         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
13953             break;
13954         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13955
13956     case OP_AELEMFAST_LEX:
13957         if (match) {
13958             SV **svp;
13959             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
13960             if (!av || SvRMAGICAL(av))
13961                 break;
13962             svp = av_fetch(av, (I32)obase->op_private, FALSE);
13963             if (!svp || *svp != uninit_sv)
13964                 break;
13965         }
13966         return varname(NULL, '$', obase->op_targ,
13967                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13968     case OP_AELEMFAST:
13969         {
13970             gv = cGVOPx_gv(obase);
13971             if (!gv)
13972                 break;
13973             if (match) {
13974                 SV **svp;
13975                 AV *const av = GvAV(gv);
13976                 if (!av || SvRMAGICAL(av))
13977                     break;
13978                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13979                 if (!svp || *svp != uninit_sv)
13980                     break;
13981             }
13982             return varname(gv, '$', 0,
13983                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13984         }
13985         break;
13986
13987     case OP_EXISTS:
13988         o = cUNOPx(obase)->op_first;
13989         if (!o || o->op_type != OP_NULL ||
13990                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
13991             break;
13992         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
13993
13994     case OP_AELEM:
13995     case OP_HELEM:
13996     {
13997         bool negate = FALSE;
13998
13999         if (PL_op == obase)
14000             /* $a[uninit_expr] or $h{uninit_expr} */
14001             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14002
14003         gv = NULL;
14004         o = cBINOPx(obase)->op_first;
14005         kid = cBINOPx(obase)->op_last;
14006
14007         /* get the av or hv, and optionally the gv */
14008         sv = NULL;
14009         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14010             sv = PAD_SV(o->op_targ);
14011         }
14012         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14013                 && cUNOPo->op_first->op_type == OP_GV)
14014         {
14015             gv = cGVOPx_gv(cUNOPo->op_first);
14016             if (!gv)
14017                 break;
14018             sv = o->op_type
14019                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14020         }
14021         if (!sv)
14022             break;
14023
14024         if (kid && kid->op_type == OP_NEGATE) {
14025             negate = TRUE;
14026             kid = cUNOPx(kid)->op_first;
14027         }
14028
14029         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14030             /* index is constant */
14031             SV* kidsv;
14032             if (negate) {
14033                 kidsv = sv_2mortal(newSVpvs("-"));
14034                 sv_catsv(kidsv, cSVOPx_sv(kid));
14035             }
14036             else
14037                 kidsv = cSVOPx_sv(kid);
14038             if (match) {
14039                 if (SvMAGICAL(sv))
14040                     break;
14041                 if (obase->op_type == OP_HELEM) {
14042                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14043                     if (!he || HeVAL(he) != uninit_sv)
14044                         break;
14045                 }
14046                 else {
14047                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14048                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14049                         FALSE);
14050                     if (!svp || *svp != uninit_sv)
14051                         break;
14052                 }
14053             }
14054             if (obase->op_type == OP_HELEM)
14055                 return varname(gv, '%', o->op_targ,
14056                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14057             else
14058                 return varname(gv, '@', o->op_targ, NULL,
14059                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14060                     FUV_SUBSCRIPT_ARRAY);
14061         }
14062         else  {
14063             /* index is an expression;
14064              * attempt to find a match within the aggregate */
14065             if (obase->op_type == OP_HELEM) {
14066                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14067                 if (keysv)
14068                     return varname(gv, '%', o->op_targ,
14069                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14070             }
14071             else {
14072                 const I32 index
14073                     = find_array_subscript((const AV *)sv, uninit_sv);
14074                 if (index >= 0)
14075                     return varname(gv, '@', o->op_targ,
14076                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14077             }
14078             if (match)
14079                 break;
14080             return varname(gv,
14081                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14082                 ? '@' : '%',
14083                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14084         }
14085         break;
14086     }
14087
14088     case OP_AASSIGN:
14089         /* only examine RHS */
14090         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14091
14092     case OP_OPEN:
14093         o = cUNOPx(obase)->op_first;
14094         if (o->op_type == OP_PUSHMARK)
14095             o = o->op_sibling;
14096
14097         if (!o->op_sibling) {
14098             /* one-arg version of open is highly magical */
14099
14100             if (o->op_type == OP_GV) { /* open FOO; */
14101                 gv = cGVOPx_gv(o);
14102                 if (match && GvSV(gv) != uninit_sv)
14103                     break;
14104                 return varname(gv, '$', 0,
14105                             NULL, 0, FUV_SUBSCRIPT_NONE);
14106             }
14107             /* other possibilities not handled are:
14108              * open $x; or open my $x;  should return '${*$x}'
14109              * open expr;               should return '$'.expr ideally
14110              */
14111              break;
14112         }
14113         goto do_op;
14114
14115     /* ops where $_ may be an implicit arg */
14116     case OP_TRANS:
14117     case OP_TRANSR:
14118     case OP_SUBST:
14119     case OP_MATCH:
14120         if ( !(obase->op_flags & OPf_STACKED)) {
14121             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14122                                  ? PAD_SVl(obase->op_targ)
14123                                  : DEFSV))
14124             {
14125                 sv = sv_newmortal();
14126                 sv_setpvs(sv, "$_");
14127                 return sv;
14128             }
14129         }
14130         goto do_op;
14131
14132     case OP_PRTF:
14133     case OP_PRINT:
14134     case OP_SAY:
14135         match = 1; /* print etc can return undef on defined args */
14136         /* skip filehandle as it can't produce 'undef' warning  */
14137         o = cUNOPx(obase)->op_first;
14138         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
14139             o = o->op_sibling->op_sibling;
14140         goto do_op2;
14141
14142
14143     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14144     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14145
14146         /* the following ops are capable of returning PL_sv_undef even for
14147          * defined arg(s) */
14148
14149     case OP_BACKTICK:
14150     case OP_PIPE_OP:
14151     case OP_FILENO:
14152     case OP_BINMODE:
14153     case OP_TIED:
14154     case OP_GETC:
14155     case OP_SYSREAD:
14156     case OP_SEND:
14157     case OP_IOCTL:
14158     case OP_SOCKET:
14159     case OP_SOCKPAIR:
14160     case OP_BIND:
14161     case OP_CONNECT:
14162     case OP_LISTEN:
14163     case OP_ACCEPT:
14164     case OP_SHUTDOWN:
14165     case OP_SSOCKOPT:
14166     case OP_GETPEERNAME:
14167     case OP_FTRREAD:
14168     case OP_FTRWRITE:
14169     case OP_FTREXEC:
14170     case OP_FTROWNED:
14171     case OP_FTEREAD:
14172     case OP_FTEWRITE:
14173     case OP_FTEEXEC:
14174     case OP_FTEOWNED:
14175     case OP_FTIS:
14176     case OP_FTZERO:
14177     case OP_FTSIZE:
14178     case OP_FTFILE:
14179     case OP_FTDIR:
14180     case OP_FTLINK:
14181     case OP_FTPIPE:
14182     case OP_FTSOCK:
14183     case OP_FTBLK:
14184     case OP_FTCHR:
14185     case OP_FTTTY:
14186     case OP_FTSUID:
14187     case OP_FTSGID:
14188     case OP_FTSVTX:
14189     case OP_FTTEXT:
14190     case OP_FTBINARY:
14191     case OP_FTMTIME:
14192     case OP_FTATIME:
14193     case OP_FTCTIME:
14194     case OP_READLINK:
14195     case OP_OPEN_DIR:
14196     case OP_READDIR:
14197     case OP_TELLDIR:
14198     case OP_SEEKDIR:
14199     case OP_REWINDDIR:
14200     case OP_CLOSEDIR:
14201     case OP_GMTIME:
14202     case OP_ALARM:
14203     case OP_SEMGET:
14204     case OP_GETLOGIN:
14205     case OP_UNDEF:
14206     case OP_SUBSTR:
14207     case OP_AEACH:
14208     case OP_EACH:
14209     case OP_SORT:
14210     case OP_CALLER:
14211     case OP_DOFILE:
14212     case OP_PROTOTYPE:
14213     case OP_NCMP:
14214     case OP_SMARTMATCH:
14215     case OP_UNPACK:
14216     case OP_SYSOPEN:
14217     case OP_SYSSEEK:
14218         match = 1;
14219         goto do_op;
14220
14221     case OP_ENTERSUB:
14222     case OP_GOTO:
14223         /* XXX tmp hack: these two may call an XS sub, and currently
14224           XS subs don't have a SUB entry on the context stack, so CV and
14225           pad determination goes wrong, and BAD things happen. So, just
14226           don't try to determine the value under those circumstances.
14227           Need a better fix at dome point. DAPM 11/2007 */
14228         break;
14229
14230     case OP_FLIP:
14231     case OP_FLOP:
14232     {
14233         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14234         if (gv && GvSV(gv) == uninit_sv)
14235             return newSVpvs_flags("$.", SVs_TEMP);
14236         goto do_op;
14237     }
14238
14239     case OP_POS:
14240         /* def-ness of rval pos() is independent of the def-ness of its arg */
14241         if ( !(obase->op_flags & OPf_MOD))
14242             break;
14243
14244     case OP_SCHOMP:
14245     case OP_CHOMP:
14246         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14247             return newSVpvs_flags("${$/}", SVs_TEMP);
14248         /*FALLTHROUGH*/
14249
14250     default:
14251     do_op:
14252         if (!(obase->op_flags & OPf_KIDS))
14253             break;
14254         o = cUNOPx(obase)->op_first;
14255         
14256     do_op2:
14257         if (!o)
14258             break;
14259
14260         /* if all except one arg are constant, or have no side-effects,
14261          * or are optimized away, then it's unambiguous */
14262         o2 = NULL;
14263         for (kid=o; kid; kid = kid->op_sibling) {
14264             if (kid) {
14265                 const OPCODE type = kid->op_type;
14266                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14267                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14268                   || (type == OP_PUSHMARK)
14269                 )
14270                 continue;
14271             }
14272             if (o2) { /* more than one found */
14273                 o2 = NULL;
14274                 break;
14275             }
14276             o2 = kid;
14277         }
14278         if (o2)
14279             return find_uninit_var(o2, uninit_sv, match);
14280
14281         /* scan all args */
14282         while (o) {
14283             sv = find_uninit_var(o, uninit_sv, 1);
14284             if (sv)
14285                 return sv;
14286             o = o->op_sibling;
14287         }
14288         break;
14289     }
14290     return NULL;
14291 }
14292
14293
14294 /*
14295 =for apidoc report_uninit
14296
14297 Print appropriate "Use of uninitialized variable" warning.
14298
14299 =cut
14300 */
14301
14302 void
14303 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14304 {
14305     dVAR;
14306     if (PL_op) {
14307         SV* varname = NULL;
14308         if (uninit_sv && PL_curpad) {
14309             varname = find_uninit_var(PL_op, uninit_sv,0);
14310             if (varname)
14311                 sv_insert(varname, 0, 0, " ", 1);
14312         }
14313         /* diag_listed_as: Use of uninitialized value%s */
14314         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14315                 SVfARG(varname ? varname : &PL_sv_no),
14316                 " in ", OP_DESC(PL_op));
14317     }
14318     else
14319         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14320                     "", "", "");
14321 }
14322
14323 /*
14324  * Local variables:
14325  * c-indentation-style: bsd
14326  * c-basic-offset: 4
14327  * indent-tabs-mode: t
14328  * End:
14329  *
14330  * ex: set ts=8 sts=4 sw=4 noet:
14331  */