This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
pp_iter: refactor CXt_LOOP_LAZYIV branch
[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) STMT_START { \
186         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
187     } STMT_END
188 #  define DEBUG_SV_SERIAL(sv)                                               \
189     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
190             PTR2UV(sv), (long)(sv)->sv_debug_serial))
191 #else
192 #  define FREE_SV_DEBUG_FILE(sv)
193 #  define DEBUG_SV_SERIAL(sv)   NOOP
194 #endif
195
196 #ifdef PERL_POISON
197 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
198 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
199 /* Whilst I'd love to do this, it seems that things like to check on
200    unreferenced scalars
201 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
202 */
203 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
204                                 PoisonNew(&SvREFCNT(sv), 1, U32)
205 #else
206 #  define SvARENA_CHAIN(sv)     SvANY(sv)
207 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
208 #  define POSION_SV_HEAD(sv)
209 #endif
210
211 /* Mark an SV head as unused, and add to free list.
212  *
213  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
214  * its refcount artificially decremented during global destruction, so
215  * there may be dangling pointers to it. The last thing we want in that
216  * case is for it to be reused. */
217
218 #define plant_SV(p) \
219     STMT_START {                                        \
220         const U32 old_flags = SvFLAGS(p);                       \
221         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
222         DEBUG_SV_SERIAL(p);                             \
223         FREE_SV_DEBUG_FILE(p);                          \
224         POSION_SV_HEAD(p);                              \
225         SvFLAGS(p) = SVTYPEMASK;                        \
226         if (!(old_flags & SVf_BREAK)) {         \
227             SvARENA_CHAIN_SET(p, PL_sv_root);   \
228             PL_sv_root = (p);                           \
229         }                                               \
230         --PL_sv_count;                                  \
231     } STMT_END
232
233 #define uproot_SV(p) \
234     STMT_START {                                        \
235         (p) = PL_sv_root;                               \
236         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
237         ++PL_sv_count;                                  \
238     } STMT_END
239
240
241 /* make some more SVs by adding another arena */
242
243 STATIC SV*
244 S_more_sv(pTHX)
245 {
246     dVAR;
247     SV* sv;
248     char *chunk;                /* must use New here to match call to */
249     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
250     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
251     uproot_SV(sv);
252     return sv;
253 }
254
255 /* new_SV(): return a new, empty SV head */
256
257 #ifdef DEBUG_LEAKING_SCALARS
258 /* provide a real function for a debugger to play with */
259 STATIC SV*
260 S_new_SV(pTHX_ const char *file, int line, const char *func)
261 {
262     SV* sv;
263
264     if (PL_sv_root)
265         uproot_SV(sv);
266     else
267         sv = S_more_sv(aTHX);
268     SvANY(sv) = 0;
269     SvREFCNT(sv) = 1;
270     SvFLAGS(sv) = 0;
271     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
272     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
273                 ? PL_parser->copline
274                 :  PL_curcop
275                     ? CopLINE(PL_curcop)
276                     : 0
277             );
278     sv->sv_debug_inpad = 0;
279     sv->sv_debug_parent = NULL;
280     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
281
282     sv->sv_debug_serial = PL_sv_serial++;
283
284     MEM_LOG_NEW_SV(sv, file, line, func);
285     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
286             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
287
288     return sv;
289 }
290 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
291
292 #else
293 #  define new_SV(p) \
294     STMT_START {                                        \
295         if (PL_sv_root)                                 \
296             uproot_SV(p);                               \
297         else                                            \
298             (p) = S_more_sv(aTHX);                      \
299         SvANY(p) = 0;                                   \
300         SvREFCNT(p) = 1;                                \
301         SvFLAGS(p) = 0;                                 \
302         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
303     } STMT_END
304 #endif
305
306
307 /* del_SV(): return an empty SV head to the free list */
308
309 #ifdef DEBUGGING
310
311 #define del_SV(p) \
312     STMT_START {                                        \
313         if (DEBUG_D_TEST)                               \
314             del_sv(p);                                  \
315         else                                            \
316             plant_SV(p);                                \
317     } STMT_END
318
319 STATIC void
320 S_del_sv(pTHX_ SV *p)
321 {
322     dVAR;
323
324     PERL_ARGS_ASSERT_DEL_SV;
325
326     if (DEBUG_D_TEST) {
327         SV* sva;
328         bool ok = 0;
329         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
330             const SV * const sv = sva + 1;
331             const SV * const svend = &sva[SvREFCNT(sva)];
332             if (p >= sv && p < svend) {
333                 ok = 1;
334                 break;
335             }
336         }
337         if (!ok) {
338             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
339                              "Attempt to free non-arena SV: 0x%"UVxf
340                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
341             return;
342         }
343     }
344     plant_SV(p);
345 }
346
347 #else /* ! DEBUGGING */
348
349 #define del_SV(p)   plant_SV(p)
350
351 #endif /* DEBUGGING */
352
353
354 /*
355 =head1 SV Manipulation Functions
356
357 =for apidoc sv_add_arena
358
359 Given a chunk of memory, link it to the head of the list of arenas,
360 and split it into a list of free SVs.
361
362 =cut
363 */
364
365 static void
366 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
367 {
368     dVAR;
369     SV *const sva = MUTABLE_SV(ptr);
370     SV* sv;
371     SV* svend;
372
373     PERL_ARGS_ASSERT_SV_ADD_ARENA;
374
375     /* The first SV in an arena isn't an SV. */
376     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
377     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
378     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
379
380     PL_sv_arenaroot = sva;
381     PL_sv_root = sva + 1;
382
383     svend = &sva[SvREFCNT(sva) - 1];
384     sv = sva + 1;
385     while (sv < svend) {
386         SvARENA_CHAIN_SET(sv, (sv + 1));
387 #ifdef DEBUGGING
388         SvREFCNT(sv) = 0;
389 #endif
390         /* Must always set typemask because it's always checked in on cleanup
391            when the arenas are walked looking for objects.  */
392         SvFLAGS(sv) = SVTYPEMASK;
393         sv++;
394     }
395     SvARENA_CHAIN_SET(sv, 0);
396 #ifdef DEBUGGING
397     SvREFCNT(sv) = 0;
398 #endif
399     SvFLAGS(sv) = SVTYPEMASK;
400 }
401
402 /* visit(): call the named function for each non-free SV in the arenas
403  * whose flags field matches the flags/mask args. */
404
405 STATIC I32
406 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
407 {
408     dVAR;
409     SV* sva;
410     I32 visited = 0;
411
412     PERL_ARGS_ASSERT_VISIT;
413
414     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
415         const SV * const svend = &sva[SvREFCNT(sva)];
416         SV* sv;
417         for (sv = sva + 1; sv < svend; ++sv) {
418             if (SvTYPE(sv) != (svtype)SVTYPEMASK
419                     && (sv->sv_flags & mask) == flags
420                     && SvREFCNT(sv))
421             {
422                 (FCALL)(aTHX_ sv);
423                 ++visited;
424             }
425         }
426     }
427     return visited;
428 }
429
430 #ifdef DEBUGGING
431
432 /* called by sv_report_used() for each live SV */
433
434 static void
435 do_report_used(pTHX_ SV *const sv)
436 {
437     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
438         PerlIO_printf(Perl_debug_log, "****\n");
439         sv_dump(sv);
440     }
441 }
442 #endif
443
444 /*
445 =for apidoc sv_report_used
446
447 Dump the contents of all SVs not yet freed (debugging aid).
448
449 =cut
450 */
451
452 void
453 Perl_sv_report_used(pTHX)
454 {
455 #ifdef DEBUGGING
456     visit(do_report_used, 0, 0);
457 #else
458     PERL_UNUSED_CONTEXT;
459 #endif
460 }
461
462 /* called by sv_clean_objs() for each live SV */
463
464 static void
465 do_clean_objs(pTHX_ SV *const ref)
466 {
467     dVAR;
468     assert (SvROK(ref));
469     {
470         SV * const target = SvRV(ref);
471         if (SvOBJECT(target)) {
472             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
473             if (SvWEAKREF(ref)) {
474                 sv_del_backref(target, ref);
475                 SvWEAKREF_off(ref);
476                 SvRV_set(ref, NULL);
477             } else {
478                 SvROK_off(ref);
479                 SvRV_set(ref, NULL);
480                 SvREFCNT_dec(target);
481             }
482         }
483     }
484
485     /* XXX Might want to check arrays, etc. */
486 }
487
488
489 /* clear any slots in a GV which hold objects - except IO;
490  * called by sv_clean_objs() for each live GV */
491
492 static void
493 do_clean_named_objs(pTHX_ SV *const sv)
494 {
495     dVAR;
496     SV *obj;
497     assert(SvTYPE(sv) == SVt_PVGV);
498     assert(isGV_with_GP(sv));
499     if (!GvGP(sv))
500         return;
501
502     /* freeing GP entries may indirectly free the current GV;
503      * hold onto it while we mess with the GP slots */
504     SvREFCNT_inc(sv);
505
506     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
507         DEBUG_D((PerlIO_printf(Perl_debug_log,
508                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
509         GvSV(sv) = NULL;
510         SvREFCNT_dec(obj);
511     }
512     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
513         DEBUG_D((PerlIO_printf(Perl_debug_log,
514                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
515         GvAV(sv) = NULL;
516         SvREFCNT_dec(obj);
517     }
518     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
519         DEBUG_D((PerlIO_printf(Perl_debug_log,
520                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
521         GvHV(sv) = NULL;
522         SvREFCNT_dec(obj);
523     }
524     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
525         DEBUG_D((PerlIO_printf(Perl_debug_log,
526                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
527         GvCV_set(sv, NULL);
528         SvREFCNT_dec(obj);
529     }
530     SvREFCNT_dec(sv); /* undo the inc above */
531 }
532
533 /* clear any IO slots in a GV which hold objects (except stderr, defout);
534  * called by sv_clean_objs() for each live GV */
535
536 static void
537 do_clean_named_io_objs(pTHX_ SV *const sv)
538 {
539     dVAR;
540     SV *obj;
541     assert(SvTYPE(sv) == SVt_PVGV);
542     assert(isGV_with_GP(sv));
543     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
544         return;
545
546     SvREFCNT_inc(sv);
547     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
548         DEBUG_D((PerlIO_printf(Perl_debug_log,
549                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
550         GvIOp(sv) = NULL;
551         SvREFCNT_dec(obj);
552     }
553     SvREFCNT_dec(sv); /* undo the inc above */
554 }
555
556 /* Void wrapper to pass to visit() */
557 static void
558 do_curse(pTHX_ SV * const sv) {
559     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
560      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
561         return;
562     (void)curse(sv, 0);
563 }
564
565 /*
566 =for apidoc sv_clean_objs
567
568 Attempt to destroy all objects not yet freed.
569
570 =cut
571 */
572
573 void
574 Perl_sv_clean_objs(pTHX)
575 {
576     dVAR;
577     GV *olddef, *olderr;
578     PL_in_clean_objs = TRUE;
579     visit(do_clean_objs, SVf_ROK, SVf_ROK);
580     /* Some barnacles may yet remain, clinging to typeglobs.
581      * Run the non-IO destructors first: they may want to output
582      * error messages, close files etc */
583     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
584     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
585     /* And if there are some very tenacious barnacles clinging to arrays,
586        closures, or what have you.... */
587     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
588     olddef = PL_defoutgv;
589     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
590     if (olddef && isGV_with_GP(olddef))
591         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
592     olderr = PL_stderrgv;
593     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
594     if (olderr && isGV_with_GP(olderr))
595         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
596     SvREFCNT_dec(olddef);
597     PL_in_clean_objs = FALSE;
598 }
599
600 /* called by sv_clean_all() for each live SV */
601
602 static void
603 do_clean_all(pTHX_ SV *const sv)
604 {
605     dVAR;
606     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
607         /* don't clean pid table and strtab */
608         return;
609     }
610     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
611     SvFLAGS(sv) |= SVf_BREAK;
612     SvREFCNT_dec(sv);
613 }
614
615 /*
616 =for apidoc sv_clean_all
617
618 Decrement the refcnt of each remaining SV, possibly triggering a
619 cleanup.  This function may have to be called multiple times to free
620 SVs which are in complex self-referential hierarchies.
621
622 =cut
623 */
624
625 I32
626 Perl_sv_clean_all(pTHX)
627 {
628     dVAR;
629     I32 cleaned;
630     PL_in_clean_all = TRUE;
631     cleaned = visit(do_clean_all, 0,0);
632     return cleaned;
633 }
634
635 /*
636   ARENASETS: a meta-arena implementation which separates arena-info
637   into struct arena_set, which contains an array of struct
638   arena_descs, each holding info for a single arena.  By separating
639   the meta-info from the arena, we recover the 1st slot, formerly
640   borrowed for list management.  The arena_set is about the size of an
641   arena, avoiding the needless malloc overhead of a naive linked-list.
642
643   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
644   memory in the last arena-set (1/2 on average).  In trade, we get
645   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
646   smaller types).  The recovery of the wasted space allows use of
647   small arenas for large, rare body types, by changing array* fields
648   in body_details_by_type[] below.
649 */
650 struct arena_desc {
651     char       *arena;          /* the raw storage, allocated aligned */
652     size_t      size;           /* its size ~4k typ */
653     svtype      utype;          /* bodytype stored in arena */
654 };
655
656 struct arena_set;
657
658 /* Get the maximum number of elements in set[] such that struct arena_set
659    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
660    therefore likely to be 1 aligned memory page.  */
661
662 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
663                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
664
665 struct arena_set {
666     struct arena_set* next;
667     unsigned int   set_size;    /* ie ARENAS_PER_SET */
668     unsigned int   curr;        /* index of next available arena-desc */
669     struct arena_desc set[ARENAS_PER_SET];
670 };
671
672 /*
673 =for apidoc sv_free_arenas
674
675 Deallocate the memory used by all arenas.  Note that all the individual SV
676 heads and bodies within the arenas must already have been freed.
677
678 =cut
679 */
680 void
681 Perl_sv_free_arenas(pTHX)
682 {
683     dVAR;
684     SV* sva;
685     SV* svanext;
686     unsigned int i;
687
688     /* Free arenas here, but be careful about fake ones.  (We assume
689        contiguity of the fake ones with the corresponding real ones.) */
690
691     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
692         svanext = MUTABLE_SV(SvANY(sva));
693         while (svanext && SvFAKE(svanext))
694             svanext = MUTABLE_SV(SvANY(svanext));
695
696         if (!SvFAKE(sva))
697             Safefree(sva);
698     }
699
700     {
701         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
702
703         while (aroot) {
704             struct arena_set *current = aroot;
705             i = aroot->curr;
706             while (i--) {
707                 assert(aroot->set[i].arena);
708                 Safefree(aroot->set[i].arena);
709             }
710             aroot = aroot->next;
711             Safefree(current);
712         }
713     }
714     PL_body_arenas = 0;
715
716     i = PERL_ARENA_ROOTS_SIZE;
717     while (i--)
718         PL_body_roots[i] = 0;
719
720     PL_sv_arenaroot = 0;
721     PL_sv_root = 0;
722 }
723
724 /*
725   Here are mid-level routines that manage the allocation of bodies out
726   of the various arenas.  There are 5 kinds of arenas:
727
728   1. SV-head arenas, which are discussed and handled above
729   2. regular body arenas
730   3. arenas for reduced-size bodies
731   4. Hash-Entry arenas
732
733   Arena types 2 & 3 are chained by body-type off an array of
734   arena-root pointers, which is indexed by svtype.  Some of the
735   larger/less used body types are malloced singly, since a large
736   unused block of them is wasteful.  Also, several svtypes dont have
737   bodies; the data fits into the sv-head itself.  The arena-root
738   pointer thus has a few unused root-pointers (which may be hijacked
739   later for arena types 4,5)
740
741   3 differs from 2 as an optimization; some body types have several
742   unused fields in the front of the structure (which are kept in-place
743   for consistency).  These bodies can be allocated in smaller chunks,
744   because the leading fields arent accessed.  Pointers to such bodies
745   are decremented to point at the unused 'ghost' memory, knowing that
746   the pointers are used with offsets to the real memory.
747
748
749 =head1 SV-Body Allocation
750
751 Allocation of SV-bodies is similar to SV-heads, differing as follows;
752 the allocation mechanism is used for many body types, so is somewhat
753 more complicated, it uses arena-sets, and has no need for still-live
754 SV detection.
755
756 At the outermost level, (new|del)_X*V macros return bodies of the
757 appropriate type.  These macros call either (new|del)_body_type or
758 (new|del)_body_allocated macro pairs, depending on specifics of the
759 type.  Most body types use the former pair, the latter pair is used to
760 allocate body types with "ghost fields".
761
762 "ghost fields" are fields that are unused in certain types, and
763 consequently don't need to actually exist.  They are declared because
764 they're part of a "base type", which allows use of functions as
765 methods.  The simplest examples are AVs and HVs, 2 aggregate types
766 which don't use the fields which support SCALAR semantics.
767
768 For these types, the arenas are carved up into appropriately sized
769 chunks, we thus avoid wasted memory for those unaccessed members.
770 When bodies are allocated, we adjust the pointer back in memory by the
771 size of the part not allocated, so it's as if we allocated the full
772 structure.  (But things will all go boom if you write to the part that
773 is "not there", because you'll be overwriting the last members of the
774 preceding structure in memory.)
775
776 We calculate the correction using the STRUCT_OFFSET macro on the first
777 member present. If the allocated structure is smaller (no initial NV
778 actually allocated) then the net effect is to subtract the size of the NV
779 from the pointer, to return a new pointer as if an initial NV were actually
780 allocated. (We were using structures named *_allocated for this, but
781 this turned out to be a subtle bug, because a structure without an NV
782 could have a lower alignment constraint, but the compiler is allowed to
783 optimised accesses based on the alignment constraint of the actual pointer
784 to the full structure, for example, using a single 64 bit load instruction
785 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
786
787 This is the same trick as was used for NV and IV bodies. Ironically it
788 doesn't need to be used for NV bodies any more, because NV is now at
789 the start of the structure. IV bodies don't need it either, because
790 they are no longer allocated.
791
792 In turn, the new_body_* allocators call S_new_body(), which invokes
793 new_body_inline macro, which takes a lock, and takes a body off the
794 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
795 necessary to refresh an empty list.  Then the lock is released, and
796 the body is returned.
797
798 Perl_more_bodies allocates a new arena, and carves it up into an array of N
799 bodies, which it strings into a linked list.  It looks up arena-size
800 and body-size from the body_details table described below, thus
801 supporting the multiple body-types.
802
803 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
804 the (new|del)_X*V macros are mapped directly to malloc/free.
805
806 For each sv-type, struct body_details bodies_by_type[] carries
807 parameters which control these aspects of SV handling:
808
809 Arena_size determines whether arenas are used for this body type, and if
810 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
811 zero, forcing individual mallocs and frees.
812
813 Body_size determines how big a body is, and therefore how many fit into
814 each arena.  Offset carries the body-pointer adjustment needed for
815 "ghost fields", and is used in *_allocated macros.
816
817 But its main purpose is to parameterize info needed in
818 Perl_sv_upgrade().  The info here dramatically simplifies the function
819 vs the implementation in 5.8.8, making it table-driven.  All fields
820 are used for this, except for arena_size.
821
822 For the sv-types that have no bodies, arenas are not used, so those
823 PL_body_roots[sv_type] are unused, and can be overloaded.  In
824 something of a special case, SVt_NULL is borrowed for HE arenas;
825 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
826 bodies_by_type[SVt_NULL] slot is not used, as the table is not
827 available in hv.c.
828
829 */
830
831 struct body_details {
832     U8 body_size;       /* Size to allocate  */
833     U8 copy;            /* Size of structure to copy (may be shorter)  */
834     U8 offset;
835     unsigned int type : 4;          /* We have space for a sanity check.  */
836     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
837     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
838     unsigned int arena : 1;         /* Allocated from an arena */
839     size_t arena_size;              /* Size of arena to allocate */
840 };
841
842 #define HADNV FALSE
843 #define NONV TRUE
844
845
846 #ifdef PURIFY
847 /* With -DPURFIY we allocate everything directly, and don't use arenas.
848    This seems a rather elegant way to simplify some of the code below.  */
849 #define HASARENA FALSE
850 #else
851 #define HASARENA TRUE
852 #endif
853 #define NOARENA FALSE
854
855 /* Size the arenas to exactly fit a given number of bodies.  A count
856    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
857    simplifying the default.  If count > 0, the arena is sized to fit
858    only that many bodies, allowing arenas to be used for large, rare
859    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
860    limited by PERL_ARENA_SIZE, so we can safely oversize the
861    declarations.
862  */
863 #define FIT_ARENA0(body_size)                           \
864     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
865 #define FIT_ARENAn(count,body_size)                     \
866     ( count * body_size <= PERL_ARENA_SIZE)             \
867     ? count * body_size                                 \
868     : FIT_ARENA0 (body_size)
869 #define FIT_ARENA(count,body_size)                      \
870     count                                               \
871     ? FIT_ARENAn (count, body_size)                     \
872     : FIT_ARENA0 (body_size)
873
874 /* Calculate the length to copy. Specifically work out the length less any
875    final padding the compiler needed to add.  See the comment in sv_upgrade
876    for why copying the padding proved to be a bug.  */
877
878 #define copy_length(type, last_member) \
879         STRUCT_OFFSET(type, last_member) \
880         + sizeof (((type*)SvANY((const SV *)0))->last_member)
881
882 static const struct body_details bodies_by_type[] = {
883     /* HEs use this offset for their arena.  */
884     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
885
886     /* The bind placeholder pretends to be an RV for now.
887        Also it's marked as "can't upgrade" to stop anyone using it before it's
888        implemented.  */
889     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
890
891     /* IVs are in the head, so the allocation size is 0.  */
892     { 0,
893       sizeof(IV), /* This is used to copy out the IV body.  */
894       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
895       NOARENA /* IVS don't need an arena  */, 0
896     },
897
898     { sizeof(NV), sizeof(NV),
899       STRUCT_OFFSET(XPVNV, xnv_u),
900       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
901
902     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
903       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
904       + STRUCT_OFFSET(XPV, xpv_cur),
905       SVt_PV, FALSE, NONV, HASARENA,
906       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
907
908     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
909       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
910       + STRUCT_OFFSET(XPV, xpv_cur),
911       SVt_PVIV, FALSE, NONV, HASARENA,
912       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
913
914     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
915       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
916       + STRUCT_OFFSET(XPV, xpv_cur),
917       SVt_PVNV, FALSE, HADNV, HASARENA,
918       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
919
920     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
921       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
922
923     { sizeof(regexp),
924       sizeof(regexp),
925       0,
926       SVt_REGEXP, FALSE, NONV, HASARENA,
927       FIT_ARENA(0, sizeof(regexp))
928     },
929
930     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
931       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
932     
933     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
934       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
935
936     { sizeof(XPVAV),
937       copy_length(XPVAV, xav_alloc),
938       0,
939       SVt_PVAV, TRUE, NONV, HASARENA,
940       FIT_ARENA(0, sizeof(XPVAV)) },
941
942     { sizeof(XPVHV),
943       copy_length(XPVHV, xhv_max),
944       0,
945       SVt_PVHV, TRUE, NONV, HASARENA,
946       FIT_ARENA(0, sizeof(XPVHV)) },
947
948     { sizeof(XPVCV),
949       sizeof(XPVCV),
950       0,
951       SVt_PVCV, TRUE, NONV, HASARENA,
952       FIT_ARENA(0, sizeof(XPVCV)) },
953
954     { sizeof(XPVFM),
955       sizeof(XPVFM),
956       0,
957       SVt_PVFM, TRUE, NONV, NOARENA,
958       FIT_ARENA(20, sizeof(XPVFM)) },
959
960     { sizeof(XPVIO),
961       sizeof(XPVIO),
962       0,
963       SVt_PVIO, TRUE, NONV, HASARENA,
964       FIT_ARENA(24, sizeof(XPVIO)) },
965 };
966
967 #define new_body_allocated(sv_type)             \
968     (void *)((char *)S_new_body(aTHX_ sv_type)  \
969              - bodies_by_type[sv_type].offset)
970
971 /* return a thing to the free list */
972
973 #define del_body(thing, root)                           \
974     STMT_START {                                        \
975         void ** const thing_copy = (void **)thing;      \
976         *thing_copy = *root;                            \
977         *root = (void*)thing_copy;                      \
978     } STMT_END
979
980 #ifdef PURIFY
981
982 #define new_XNV()       safemalloc(sizeof(XPVNV))
983 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
984 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
985
986 #define del_XPVGV(p)    safefree(p)
987
988 #else /* !PURIFY */
989
990 #define new_XNV()       new_body_allocated(SVt_NV)
991 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
992 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
993
994 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
995                                  &PL_body_roots[SVt_PVGV])
996
997 #endif /* PURIFY */
998
999 /* no arena for you! */
1000
1001 #define new_NOARENA(details) \
1002         safemalloc((details)->body_size + (details)->offset)
1003 #define new_NOARENAZ(details) \
1004         safecalloc((details)->body_size + (details)->offset, 1)
1005
1006 void *
1007 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1008                   const size_t arena_size)
1009 {
1010     dVAR;
1011     void ** const root = &PL_body_roots[sv_type];
1012     struct arena_desc *adesc;
1013     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1014     unsigned int curr;
1015     char *start;
1016     const char *end;
1017     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1018 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1019     static bool done_sanity_check;
1020
1021     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1022      * variables like done_sanity_check. */
1023     if (!done_sanity_check) {
1024         unsigned int i = SVt_LAST;
1025
1026         done_sanity_check = TRUE;
1027
1028         while (i--)
1029             assert (bodies_by_type[i].type == i);
1030     }
1031 #endif
1032
1033     assert(arena_size);
1034
1035     /* may need new arena-set to hold new arena */
1036     if (!aroot || aroot->curr >= aroot->set_size) {
1037         struct arena_set *newroot;
1038         Newxz(newroot, 1, struct arena_set);
1039         newroot->set_size = ARENAS_PER_SET;
1040         newroot->next = aroot;
1041         aroot = newroot;
1042         PL_body_arenas = (void *) newroot;
1043         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1044     }
1045
1046     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1047     curr = aroot->curr++;
1048     adesc = &(aroot->set[curr]);
1049     assert(!adesc->arena);
1050     
1051     Newx(adesc->arena, good_arena_size, char);
1052     adesc->size = good_arena_size;
1053     adesc->utype = sv_type;
1054     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1055                           curr, (void*)adesc->arena, (UV)good_arena_size));
1056
1057     start = (char *) adesc->arena;
1058
1059     /* Get the address of the byte after the end of the last body we can fit.
1060        Remember, this is integer division:  */
1061     end = start + good_arena_size / body_size * body_size;
1062
1063     /* computed count doesn't reflect the 1st slot reservation */
1064 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1065     DEBUG_m(PerlIO_printf(Perl_debug_log,
1066                           "arena %p end %p arena-size %d (from %d) type %d "
1067                           "size %d ct %d\n",
1068                           (void*)start, (void*)end, (int)good_arena_size,
1069                           (int)arena_size, sv_type, (int)body_size,
1070                           (int)good_arena_size / (int)body_size));
1071 #else
1072     DEBUG_m(PerlIO_printf(Perl_debug_log,
1073                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1074                           (void*)start, (void*)end,
1075                           (int)arena_size, sv_type, (int)body_size,
1076                           (int)good_arena_size / (int)body_size));
1077 #endif
1078     *root = (void *)start;
1079
1080     while (1) {
1081         /* Where the next body would start:  */
1082         char * const next = start + body_size;
1083
1084         if (next >= end) {
1085             /* This is the last body:  */
1086             assert(next == end);
1087
1088             *(void **)start = 0;
1089             return *root;
1090         }
1091
1092         *(void**) start = (void *)next;
1093         start = next;
1094     }
1095 }
1096
1097 /* grab a new thing from the free list, allocating more if necessary.
1098    The inline version is used for speed in hot routines, and the
1099    function using it serves the rest (unless PURIFY).
1100 */
1101 #define new_body_inline(xpv, sv_type) \
1102     STMT_START { \
1103         void ** const r3wt = &PL_body_roots[sv_type]; \
1104         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1105           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1106                                              bodies_by_type[sv_type].body_size,\
1107                                              bodies_by_type[sv_type].arena_size)); \
1108         *(r3wt) = *(void**)(xpv); \
1109     } STMT_END
1110
1111 #ifndef PURIFY
1112
1113 STATIC void *
1114 S_new_body(pTHX_ const svtype sv_type)
1115 {
1116     dVAR;
1117     void *xpv;
1118     new_body_inline(xpv, sv_type);
1119     return xpv;
1120 }
1121
1122 #endif
1123
1124 static const struct body_details fake_rv =
1125     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1126
1127 /*
1128 =for apidoc sv_upgrade
1129
1130 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1131 SV, then copies across as much information as possible from the old body.
1132 It croaks if the SV is already in a more complex form than requested.  You
1133 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1134 before calling C<sv_upgrade>, and hence does not croak.  See also
1135 C<svtype>.
1136
1137 =cut
1138 */
1139
1140 void
1141 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1142 {
1143     dVAR;
1144     void*       old_body;
1145     void*       new_body;
1146     const svtype old_type = SvTYPE(sv);
1147     const struct body_details *new_type_details;
1148     const struct body_details *old_type_details
1149         = bodies_by_type + old_type;
1150     SV *referant = NULL;
1151
1152     PERL_ARGS_ASSERT_SV_UPGRADE;
1153
1154     if (old_type == new_type)
1155         return;
1156
1157     /* This clause was purposefully added ahead of the early return above to
1158        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1159        inference by Nick I-S that it would fix other troublesome cases. See
1160        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1161
1162        Given that shared hash key scalars are no longer PVIV, but PV, there is
1163        no longer need to unshare so as to free up the IVX slot for its proper
1164        purpose. So it's safe to move the early return earlier.  */
1165
1166     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1167         sv_force_normal_flags(sv, 0);
1168     }
1169
1170     old_body = SvANY(sv);
1171
1172     /* Copying structures onto other structures that have been neatly zeroed
1173        has a subtle gotcha. Consider XPVMG
1174
1175        +------+------+------+------+------+-------+-------+
1176        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1177        +------+------+------+------+------+-------+-------+
1178        0      4      8     12     16     20      24      28
1179
1180        where NVs are aligned to 8 bytes, so that sizeof that structure is
1181        actually 32 bytes long, with 4 bytes of padding at the end:
1182
1183        +------+------+------+------+------+-------+-------+------+
1184        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1185        +------+------+------+------+------+-------+-------+------+
1186        0      4      8     12     16     20      24      28     32
1187
1188        so what happens if you allocate memory for this structure:
1189
1190        +------+------+------+------+------+-------+-------+------+------+...
1191        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1192        +------+------+------+------+------+-------+-------+------+------+...
1193        0      4      8     12     16     20      24      28     32     36
1194
1195        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1196        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1197        started out as zero once, but it's quite possible that it isn't. So now,
1198        rather than a nicely zeroed GP, you have it pointing somewhere random.
1199        Bugs ensue.
1200
1201        (In fact, GP ends up pointing at a previous GP structure, because the
1202        principle cause of the padding in XPVMG getting garbage is a copy of
1203        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1204        this happens to be moot because XPVGV has been re-ordered, with GP
1205        no longer after STASH)
1206
1207        So we are careful and work out the size of used parts of all the
1208        structures.  */
1209
1210     switch (old_type) {
1211     case SVt_NULL:
1212         break;
1213     case SVt_IV:
1214         if (SvROK(sv)) {
1215             referant = SvRV(sv);
1216             old_type_details = &fake_rv;
1217             if (new_type == SVt_NV)
1218                 new_type = SVt_PVNV;
1219         } else {
1220             if (new_type < SVt_PVIV) {
1221                 new_type = (new_type == SVt_NV)
1222                     ? SVt_PVNV : SVt_PVIV;
1223             }
1224         }
1225         break;
1226     case SVt_NV:
1227         if (new_type < SVt_PVNV) {
1228             new_type = SVt_PVNV;
1229         }
1230         break;
1231     case SVt_PV:
1232         assert(new_type > SVt_PV);
1233         assert(SVt_IV < SVt_PV);
1234         assert(SVt_NV < SVt_PV);
1235         break;
1236     case SVt_PVIV:
1237         break;
1238     case SVt_PVNV:
1239         break;
1240     case SVt_PVMG:
1241         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1242            there's no way that it can be safely upgraded, because perl.c
1243            expects to Safefree(SvANY(PL_mess_sv))  */
1244         assert(sv != PL_mess_sv);
1245         /* This flag bit is used to mean other things in other scalar types.
1246            Given that it only has meaning inside the pad, it shouldn't be set
1247            on anything that can get upgraded.  */
1248         assert(!SvPAD_TYPED(sv));
1249         break;
1250     default:
1251         if (old_type_details->cant_upgrade)
1252             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1253                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1254     }
1255
1256     if (old_type > new_type)
1257         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1258                 (int)old_type, (int)new_type);
1259
1260     new_type_details = bodies_by_type + new_type;
1261
1262     SvFLAGS(sv) &= ~SVTYPEMASK;
1263     SvFLAGS(sv) |= new_type;
1264
1265     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1266        the return statements above will have triggered.  */
1267     assert (new_type != SVt_NULL);
1268     switch (new_type) {
1269     case SVt_IV:
1270         assert(old_type == SVt_NULL);
1271         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1272         SvIV_set(sv, 0);
1273         return;
1274     case SVt_NV:
1275         assert(old_type == SVt_NULL);
1276         SvANY(sv) = new_XNV();
1277         SvNV_set(sv, 0);
1278         return;
1279     case SVt_PVHV:
1280     case SVt_PVAV:
1281         assert(new_type_details->body_size);
1282
1283 #ifndef PURIFY  
1284         assert(new_type_details->arena);
1285         assert(new_type_details->arena_size);
1286         /* This points to the start of the allocated area.  */
1287         new_body_inline(new_body, new_type);
1288         Zero(new_body, new_type_details->body_size, char);
1289         new_body = ((char *)new_body) - new_type_details->offset;
1290 #else
1291         /* We always allocated the full length item with PURIFY. To do this
1292            we fake things so that arena is false for all 16 types..  */
1293         new_body = new_NOARENAZ(new_type_details);
1294 #endif
1295         SvANY(sv) = new_body;
1296         if (new_type == SVt_PVAV) {
1297             AvMAX(sv)   = -1;
1298             AvFILLp(sv) = -1;
1299             AvREAL_only(sv);
1300             if (old_type_details->body_size) {
1301                 AvALLOC(sv) = 0;
1302             } else {
1303                 /* It will have been zeroed when the new body was allocated.
1304                    Lets not write to it, in case it confuses a write-back
1305                    cache.  */
1306             }
1307         } else {
1308             assert(!SvOK(sv));
1309             SvOK_off(sv);
1310 #ifndef NODEFAULT_SHAREKEYS
1311             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1312 #endif
1313             HvMAX(sv) = 7; /* (start with 8 buckets) */
1314         }
1315
1316         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1317            The target created by newSVrv also is, and it can have magic.
1318            However, it never has SvPVX set.
1319         */
1320         if (old_type == SVt_IV) {
1321             assert(!SvROK(sv));
1322         } else if (old_type >= SVt_PV) {
1323             assert(SvPVX_const(sv) == 0);
1324         }
1325
1326         if (old_type >= SVt_PVMG) {
1327             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1328             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1329         } else {
1330             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1331         }
1332         break;
1333
1334     case SVt_PVIV:
1335         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1336            no route from NV to PVIV, NOK can never be true  */
1337         assert(!SvNOKp(sv));
1338         assert(!SvNOK(sv));
1339     case SVt_PVIO:
1340     case SVt_PVFM:
1341     case SVt_PVGV:
1342     case SVt_PVCV:
1343     case SVt_PVLV:
1344     case SVt_REGEXP:
1345     case SVt_PVMG:
1346     case SVt_PVNV:
1347     case SVt_PV:
1348
1349         assert(new_type_details->body_size);
1350         /* We always allocated the full length item with PURIFY. To do this
1351            we fake things so that arena is false for all 16 types..  */
1352         if(new_type_details->arena) {
1353             /* This points to the start of the allocated area.  */
1354             new_body_inline(new_body, new_type);
1355             Zero(new_body, new_type_details->body_size, char);
1356             new_body = ((char *)new_body) - new_type_details->offset;
1357         } else {
1358             new_body = new_NOARENAZ(new_type_details);
1359         }
1360         SvANY(sv) = new_body;
1361
1362         if (old_type_details->copy) {
1363             /* There is now the potential for an upgrade from something without
1364                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1365             int offset = old_type_details->offset;
1366             int length = old_type_details->copy;
1367
1368             if (new_type_details->offset > old_type_details->offset) {
1369                 const int difference
1370                     = new_type_details->offset - old_type_details->offset;
1371                 offset += difference;
1372                 length -= difference;
1373             }
1374             assert (length >= 0);
1375                 
1376             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1377                  char);
1378         }
1379
1380 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1381         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1382          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1383          * NV slot, but the new one does, then we need to initialise the
1384          * freshly created NV slot with whatever the correct bit pattern is
1385          * for 0.0  */
1386         if (old_type_details->zero_nv && !new_type_details->zero_nv
1387             && !isGV_with_GP(sv))
1388             SvNV_set(sv, 0);
1389 #endif
1390
1391         if (new_type == SVt_PVIO) {
1392             IO * const io = MUTABLE_IO(sv);
1393             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1394
1395             SvOBJECT_on(io);
1396             /* Clear the stashcache because a new IO could overrule a package
1397                name */
1398             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1399             hv_clear(PL_stashcache);
1400
1401             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1402             IoPAGE_LEN(sv) = 60;
1403         }
1404         if (new_type == SVt_REGEXP)
1405             sv->sv_u.svu_rx = (regexp *)new_body;
1406         else if (old_type < SVt_PV) {
1407             /* referant will be NULL unless the old type was SVt_IV emulating
1408                SVt_RV */
1409             sv->sv_u.svu_rv = referant;
1410         }
1411         break;
1412     default:
1413         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1414                    (unsigned long)new_type);
1415     }
1416
1417     if (old_type > SVt_IV) {
1418 #ifdef PURIFY
1419         safefree(old_body);
1420 #else
1421         /* Note that there is an assumption that all bodies of types that
1422            can be upgraded came from arenas. Only the more complex non-
1423            upgradable types are allowed to be directly malloc()ed.  */
1424         assert(old_type_details->arena);
1425         del_body((void*)((char*)old_body + old_type_details->offset),
1426                  &PL_body_roots[old_type]);
1427 #endif
1428     }
1429 }
1430
1431 /*
1432 =for apidoc sv_backoff
1433
1434 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1435 wrapper instead.
1436
1437 =cut
1438 */
1439
1440 int
1441 Perl_sv_backoff(pTHX_ register SV *const sv)
1442 {
1443     STRLEN delta;
1444     const char * const s = SvPVX_const(sv);
1445
1446     PERL_ARGS_ASSERT_SV_BACKOFF;
1447     PERL_UNUSED_CONTEXT;
1448
1449     assert(SvOOK(sv));
1450     assert(SvTYPE(sv) != SVt_PVHV);
1451     assert(SvTYPE(sv) != SVt_PVAV);
1452
1453     SvOOK_offset(sv, delta);
1454     
1455     SvLEN_set(sv, SvLEN(sv) + delta);
1456     SvPV_set(sv, SvPVX(sv) - delta);
1457     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1458     SvFLAGS(sv) &= ~SVf_OOK;
1459     return 0;
1460 }
1461
1462 /*
1463 =for apidoc sv_grow
1464
1465 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1466 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1467 Use the C<SvGROW> wrapper instead.
1468
1469 =cut
1470 */
1471
1472 char *
1473 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1474 {
1475     char *s;
1476
1477     PERL_ARGS_ASSERT_SV_GROW;
1478
1479     if (PL_madskills && newlen >= 0x100000) {
1480         PerlIO_printf(Perl_debug_log,
1481                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1482     }
1483 #ifdef HAS_64K_LIMIT
1484     if (newlen >= 0x10000) {
1485         PerlIO_printf(Perl_debug_log,
1486                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1487         my_exit(1);
1488     }
1489 #endif /* HAS_64K_LIMIT */
1490     if (SvROK(sv))
1491         sv_unref(sv);
1492     if (SvTYPE(sv) < SVt_PV) {
1493         sv_upgrade(sv, SVt_PV);
1494         s = SvPVX_mutable(sv);
1495     }
1496     else if (SvOOK(sv)) {       /* pv is offset? */
1497         sv_backoff(sv);
1498         s = SvPVX_mutable(sv);
1499         if (newlen > SvLEN(sv))
1500             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1501 #ifdef HAS_64K_LIMIT
1502         if (newlen >= 0x10000)
1503             newlen = 0xFFFF;
1504 #endif
1505     }
1506     else
1507         s = SvPVX_mutable(sv);
1508
1509     if (newlen > SvLEN(sv)) {           /* need more room? */
1510         STRLEN minlen = SvCUR(sv);
1511         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1512         if (newlen < minlen)
1513             newlen = minlen;
1514 #ifndef Perl_safesysmalloc_size
1515         newlen = PERL_STRLEN_ROUNDUP(newlen);
1516 #endif
1517         if (SvLEN(sv) && s) {
1518             s = (char*)saferealloc(s, newlen);
1519         }
1520         else {
1521             s = (char*)safemalloc(newlen);
1522             if (SvPVX_const(sv) && SvCUR(sv)) {
1523                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1524             }
1525         }
1526         SvPV_set(sv, s);
1527 #ifdef Perl_safesysmalloc_size
1528         /* Do this here, do it once, do it right, and then we will never get
1529            called back into sv_grow() unless there really is some growing
1530            needed.  */
1531         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1532 #else
1533         SvLEN_set(sv, newlen);
1534 #endif
1535     }
1536     return s;
1537 }
1538
1539 /*
1540 =for apidoc sv_setiv
1541
1542 Copies an integer into the given SV, upgrading first if necessary.
1543 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1544
1545 =cut
1546 */
1547
1548 void
1549 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1550 {
1551     dVAR;
1552
1553     PERL_ARGS_ASSERT_SV_SETIV;
1554
1555     SV_CHECK_THINKFIRST_COW_DROP(sv);
1556     switch (SvTYPE(sv)) {
1557     case SVt_NULL:
1558     case SVt_NV:
1559         sv_upgrade(sv, SVt_IV);
1560         break;
1561     case SVt_PV:
1562         sv_upgrade(sv, SVt_PVIV);
1563         break;
1564
1565     case SVt_PVGV:
1566         if (!isGV_with_GP(sv))
1567             break;
1568     case SVt_PVAV:
1569     case SVt_PVHV:
1570     case SVt_PVCV:
1571     case SVt_PVFM:
1572     case SVt_PVIO:
1573         /* diag_listed_as: Can't coerce %s to %s in %s */
1574         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1575                    OP_DESC(PL_op));
1576     default: NOOP;
1577     }
1578     (void)SvIOK_only(sv);                       /* validate number */
1579     SvIV_set(sv, i);
1580     SvTAINT(sv);
1581 }
1582
1583 /*
1584 =for apidoc sv_setiv_mg
1585
1586 Like C<sv_setiv>, but also handles 'set' magic.
1587
1588 =cut
1589 */
1590
1591 void
1592 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1593 {
1594     PERL_ARGS_ASSERT_SV_SETIV_MG;
1595
1596     sv_setiv(sv,i);
1597     SvSETMAGIC(sv);
1598 }
1599
1600 /*
1601 =for apidoc sv_setuv
1602
1603 Copies an unsigned integer into the given SV, upgrading first if necessary.
1604 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1605
1606 =cut
1607 */
1608
1609 void
1610 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1611 {
1612     PERL_ARGS_ASSERT_SV_SETUV;
1613
1614     /* With the if statement to ensure that integers are stored as IVs whenever
1615        possible:
1616        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1617
1618        without
1619        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1620
1621        If you wish to remove the following if statement, so that this routine
1622        (and its callers) always return UVs, please benchmark to see what the
1623        effect is. Modern CPUs may be different. Or may not :-)
1624     */
1625     if (u <= (UV)IV_MAX) {
1626        sv_setiv(sv, (IV)u);
1627        return;
1628     }
1629     sv_setiv(sv, 0);
1630     SvIsUV_on(sv);
1631     SvUV_set(sv, u);
1632 }
1633
1634 /*
1635 =for apidoc sv_setuv_mg
1636
1637 Like C<sv_setuv>, but also handles 'set' magic.
1638
1639 =cut
1640 */
1641
1642 void
1643 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1644 {
1645     PERL_ARGS_ASSERT_SV_SETUV_MG;
1646
1647     sv_setuv(sv,u);
1648     SvSETMAGIC(sv);
1649 }
1650
1651 /*
1652 =for apidoc sv_setnv
1653
1654 Copies a double into the given SV, upgrading first if necessary.
1655 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1656
1657 =cut
1658 */
1659
1660 void
1661 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1662 {
1663     dVAR;
1664
1665     PERL_ARGS_ASSERT_SV_SETNV;
1666
1667     SV_CHECK_THINKFIRST_COW_DROP(sv);
1668     switch (SvTYPE(sv)) {
1669     case SVt_NULL:
1670     case SVt_IV:
1671         sv_upgrade(sv, SVt_NV);
1672         break;
1673     case SVt_PV:
1674     case SVt_PVIV:
1675         sv_upgrade(sv, SVt_PVNV);
1676         break;
1677
1678     case SVt_PVGV:
1679         if (!isGV_with_GP(sv))
1680             break;
1681     case SVt_PVAV:
1682     case SVt_PVHV:
1683     case SVt_PVCV:
1684     case SVt_PVFM:
1685     case SVt_PVIO:
1686         /* diag_listed_as: Can't coerce %s to %s in %s */
1687         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1688                    OP_DESC(PL_op));
1689     default: NOOP;
1690     }
1691     SvNV_set(sv, num);
1692     (void)SvNOK_only(sv);                       /* validate number */
1693     SvTAINT(sv);
1694 }
1695
1696 /*
1697 =for apidoc sv_setnv_mg
1698
1699 Like C<sv_setnv>, but also handles 'set' magic.
1700
1701 =cut
1702 */
1703
1704 void
1705 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1706 {
1707     PERL_ARGS_ASSERT_SV_SETNV_MG;
1708
1709     sv_setnv(sv,num);
1710     SvSETMAGIC(sv);
1711 }
1712
1713 /* Print an "isn't numeric" warning, using a cleaned-up,
1714  * printable version of the offending string
1715  */
1716
1717 STATIC void
1718 S_not_a_number(pTHX_ SV *const sv)
1719 {
1720      dVAR;
1721      SV *dsv;
1722      char tmpbuf[64];
1723      const char *pv;
1724
1725      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1726
1727      if (DO_UTF8(sv)) {
1728           dsv = newSVpvs_flags("", SVs_TEMP);
1729           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1730      } else {
1731           char *d = tmpbuf;
1732           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1733           /* each *s can expand to 4 chars + "...\0",
1734              i.e. need room for 8 chars */
1735         
1736           const char *s = SvPVX_const(sv);
1737           const char * const end = s + SvCUR(sv);
1738           for ( ; s < end && d < limit; s++ ) {
1739                int ch = *s & 0xFF;
1740                if (ch & 128 && !isPRINT_LC(ch)) {
1741                     *d++ = 'M';
1742                     *d++ = '-';
1743                     ch &= 127;
1744                }
1745                if (ch == '\n') {
1746                     *d++ = '\\';
1747                     *d++ = 'n';
1748                }
1749                else if (ch == '\r') {
1750                     *d++ = '\\';
1751                     *d++ = 'r';
1752                }
1753                else if (ch == '\f') {
1754                     *d++ = '\\';
1755                     *d++ = 'f';
1756                }
1757                else if (ch == '\\') {
1758                     *d++ = '\\';
1759                     *d++ = '\\';
1760                }
1761                else if (ch == '\0') {
1762                     *d++ = '\\';
1763                     *d++ = '0';
1764                }
1765                else if (isPRINT_LC(ch))
1766                     *d++ = ch;
1767                else {
1768                     *d++ = '^';
1769                     *d++ = toCTRL(ch);
1770                }
1771           }
1772           if (s < end) {
1773                *d++ = '.';
1774                *d++ = '.';
1775                *d++ = '.';
1776           }
1777           *d = '\0';
1778           pv = tmpbuf;
1779     }
1780
1781     if (PL_op)
1782         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1783                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1784                     "Argument \"%s\" isn't numeric in %s", pv,
1785                     OP_DESC(PL_op));
1786     else
1787         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1788                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1789                     "Argument \"%s\" isn't numeric", pv);
1790 }
1791
1792 /*
1793 =for apidoc looks_like_number
1794
1795 Test if the content of an SV looks like a number (or is a number).
1796 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1797 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1798 ignored.
1799
1800 =cut
1801 */
1802
1803 I32
1804 Perl_looks_like_number(pTHX_ SV *const sv)
1805 {
1806     const char *sbegin;
1807     STRLEN len;
1808
1809     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1810
1811     if (SvPOK(sv) || SvPOKp(sv)) {
1812         sbegin = SvPV_nomg_const(sv, len);
1813     }
1814     else
1815         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1816     return grok_number(sbegin, len, NULL);
1817 }
1818
1819 STATIC bool
1820 S_glob_2number(pTHX_ GV * const gv)
1821 {
1822     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1823
1824     /* We know that all GVs stringify to something that is not-a-number,
1825         so no need to test that.  */
1826     if (ckWARN(WARN_NUMERIC))
1827     {
1828         SV *const buffer = sv_newmortal();
1829         gv_efullname3(buffer, gv, "*");
1830         not_a_number(buffer);
1831     }
1832     /* We just want something true to return, so that S_sv_2iuv_common
1833         can tail call us and return true.  */
1834     return TRUE;
1835 }
1836
1837 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1838    until proven guilty, assume that things are not that bad... */
1839
1840 /*
1841    NV_PRESERVES_UV:
1842
1843    As 64 bit platforms often have an NV that doesn't preserve all bits of
1844    an IV (an assumption perl has been based on to date) it becomes necessary
1845    to remove the assumption that the NV always carries enough precision to
1846    recreate the IV whenever needed, and that the NV is the canonical form.
1847    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1848    precision as a side effect of conversion (which would lead to insanity
1849    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1850    1) to distinguish between IV/UV/NV slots that have cached a valid
1851       conversion where precision was lost and IV/UV/NV slots that have a
1852       valid conversion which has lost no precision
1853    2) to ensure that if a numeric conversion to one form is requested that
1854       would lose precision, the precise conversion (or differently
1855       imprecise conversion) is also performed and cached, to prevent
1856       requests for different numeric formats on the same SV causing
1857       lossy conversion chains. (lossless conversion chains are perfectly
1858       acceptable (still))
1859
1860
1861    flags are used:
1862    SvIOKp is true if the IV slot contains a valid value
1863    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1864    SvNOKp is true if the NV slot contains a valid value
1865    SvNOK  is true only if the NV value is accurate
1866
1867    so
1868    while converting from PV to NV, check to see if converting that NV to an
1869    IV(or UV) would lose accuracy over a direct conversion from PV to
1870    IV(or UV). If it would, cache both conversions, return NV, but mark
1871    SV as IOK NOKp (ie not NOK).
1872
1873    While converting from PV to IV, check to see if converting that IV to an
1874    NV would lose accuracy over a direct conversion from PV to NV. If it
1875    would, cache both conversions, flag similarly.
1876
1877    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1878    correctly because if IV & NV were set NV *always* overruled.
1879    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1880    changes - now IV and NV together means that the two are interchangeable:
1881    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1882
1883    The benefit of this is that operations such as pp_add know that if
1884    SvIOK is true for both left and right operands, then integer addition
1885    can be used instead of floating point (for cases where the result won't
1886    overflow). Before, floating point was always used, which could lead to
1887    loss of precision compared with integer addition.
1888
1889    * making IV and NV equal status should make maths accurate on 64 bit
1890      platforms
1891    * may speed up maths somewhat if pp_add and friends start to use
1892      integers when possible instead of fp. (Hopefully the overhead in
1893      looking for SvIOK and checking for overflow will not outweigh the
1894      fp to integer speedup)
1895    * will slow down integer operations (callers of SvIV) on "inaccurate"
1896      values, as the change from SvIOK to SvIOKp will cause a call into
1897      sv_2iv each time rather than a macro access direct to the IV slot
1898    * should speed up number->string conversion on integers as IV is
1899      favoured when IV and NV are equally accurate
1900
1901    ####################################################################
1902    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1903    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1904    On the other hand, SvUOK is true iff UV.
1905    ####################################################################
1906
1907    Your mileage will vary depending your CPU's relative fp to integer
1908    performance ratio.
1909 */
1910
1911 #ifndef NV_PRESERVES_UV
1912 #  define IS_NUMBER_UNDERFLOW_IV 1
1913 #  define IS_NUMBER_UNDERFLOW_UV 2
1914 #  define IS_NUMBER_IV_AND_UV    2
1915 #  define IS_NUMBER_OVERFLOW_IV  4
1916 #  define IS_NUMBER_OVERFLOW_UV  5
1917
1918 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1919
1920 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1921 STATIC int
1922 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1923 #  ifdef DEBUGGING
1924                        , I32 numtype
1925 #  endif
1926                        )
1927 {
1928     dVAR;
1929
1930     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1931
1932     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));
1933     if (SvNVX(sv) < (NV)IV_MIN) {
1934         (void)SvIOKp_on(sv);
1935         (void)SvNOK_on(sv);
1936         SvIV_set(sv, IV_MIN);
1937         return IS_NUMBER_UNDERFLOW_IV;
1938     }
1939     if (SvNVX(sv) > (NV)UV_MAX) {
1940         (void)SvIOKp_on(sv);
1941         (void)SvNOK_on(sv);
1942         SvIsUV_on(sv);
1943         SvUV_set(sv, UV_MAX);
1944         return IS_NUMBER_OVERFLOW_UV;
1945     }
1946     (void)SvIOKp_on(sv);
1947     (void)SvNOK_on(sv);
1948     /* Can't use strtol etc to convert this string.  (See truth table in
1949        sv_2iv  */
1950     if (SvNVX(sv) <= (UV)IV_MAX) {
1951         SvIV_set(sv, I_V(SvNVX(sv)));
1952         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1953             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1954         } else {
1955             /* Integer is imprecise. NOK, IOKp */
1956         }
1957         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1958     }
1959     SvIsUV_on(sv);
1960     SvUV_set(sv, U_V(SvNVX(sv)));
1961     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1962         if (SvUVX(sv) == UV_MAX) {
1963             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1964                possibly be preserved by NV. Hence, it must be overflow.
1965                NOK, IOKp */
1966             return IS_NUMBER_OVERFLOW_UV;
1967         }
1968         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1969     } else {
1970         /* Integer is imprecise. NOK, IOKp */
1971     }
1972     return IS_NUMBER_OVERFLOW_IV;
1973 }
1974 #endif /* !NV_PRESERVES_UV*/
1975
1976 STATIC bool
1977 S_sv_2iuv_common(pTHX_ SV *const sv)
1978 {
1979     dVAR;
1980
1981     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1982
1983     if (SvNOKp(sv)) {
1984         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1985          * without also getting a cached IV/UV from it at the same time
1986          * (ie PV->NV conversion should detect loss of accuracy and cache
1987          * IV or UV at same time to avoid this. */
1988         /* IV-over-UV optimisation - choose to cache IV if possible */
1989
1990         if (SvTYPE(sv) == SVt_NV)
1991             sv_upgrade(sv, SVt_PVNV);
1992
1993         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1994         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1995            certainly cast into the IV range at IV_MAX, whereas the correct
1996            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1997            cases go to UV */
1998 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1999         if (Perl_isnan(SvNVX(sv))) {
2000             SvUV_set(sv, 0);
2001             SvIsUV_on(sv);
2002             return FALSE;
2003         }
2004 #endif
2005         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2006             SvIV_set(sv, I_V(SvNVX(sv)));
2007             if (SvNVX(sv) == (NV) SvIVX(sv)
2008 #ifndef NV_PRESERVES_UV
2009                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2010                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2011                 /* Don't flag it as "accurately an integer" if the number
2012                    came from a (by definition imprecise) NV operation, and
2013                    we're outside the range of NV integer precision */
2014 #endif
2015                 ) {
2016                 if (SvNOK(sv))
2017                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2018                 else {
2019                     /* scalar has trailing garbage, eg "42a" */
2020                 }
2021                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2022                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2023                                       PTR2UV(sv),
2024                                       SvNVX(sv),
2025                                       SvIVX(sv)));
2026
2027             } else {
2028                 /* IV not precise.  No need to convert from PV, as NV
2029                    conversion would already have cached IV if it detected
2030                    that PV->IV would be better than PV->NV->IV
2031                    flags already correct - don't set public IOK.  */
2032                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2033                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2034                                       PTR2UV(sv),
2035                                       SvNVX(sv),
2036                                       SvIVX(sv)));
2037             }
2038             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2039                but the cast (NV)IV_MIN rounds to a the value less (more
2040                negative) than IV_MIN which happens to be equal to SvNVX ??
2041                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2042                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2043                (NV)UVX == NVX are both true, but the values differ. :-(
2044                Hopefully for 2s complement IV_MIN is something like
2045                0x8000000000000000 which will be exact. NWC */
2046         }
2047         else {
2048             SvUV_set(sv, U_V(SvNVX(sv)));
2049             if (
2050                 (SvNVX(sv) == (NV) SvUVX(sv))
2051 #ifndef  NV_PRESERVES_UV
2052                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2053                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2054                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2055                 /* Don't flag it as "accurately an integer" if the number
2056                    came from a (by definition imprecise) NV operation, and
2057                    we're outside the range of NV integer precision */
2058 #endif
2059                 && SvNOK(sv)
2060                 )
2061                 SvIOK_on(sv);
2062             SvIsUV_on(sv);
2063             DEBUG_c(PerlIO_printf(Perl_debug_log,
2064                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2065                                   PTR2UV(sv),
2066                                   SvUVX(sv),
2067                                   SvUVX(sv)));
2068         }
2069     }
2070     else if (SvPOKp(sv)) {
2071         UV value;
2072         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2073         /* We want to avoid a possible problem when we cache an IV/ a UV which
2074            may be later translated to an NV, and the resulting NV is not
2075            the same as the direct translation of the initial string
2076            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2077            be careful to ensure that the value with the .456 is around if the
2078            NV value is requested in the future).
2079         
2080            This means that if we cache such an IV/a UV, we need to cache the
2081            NV as well.  Moreover, we trade speed for space, and do not
2082            cache the NV if we are sure it's not needed.
2083          */
2084
2085         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2086         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2087              == IS_NUMBER_IN_UV) {
2088             /* It's definitely an integer, only upgrade to PVIV */
2089             if (SvTYPE(sv) < SVt_PVIV)
2090                 sv_upgrade(sv, SVt_PVIV);
2091             (void)SvIOK_on(sv);
2092         } else if (SvTYPE(sv) < SVt_PVNV)
2093             sv_upgrade(sv, SVt_PVNV);
2094
2095         /* If NVs preserve UVs then we only use the UV value if we know that
2096            we aren't going to call atof() below. If NVs don't preserve UVs
2097            then the value returned may have more precision than atof() will
2098            return, even though value isn't perfectly accurate.  */
2099         if ((numtype & (IS_NUMBER_IN_UV
2100 #ifdef NV_PRESERVES_UV
2101                         | IS_NUMBER_NOT_INT
2102 #endif
2103             )) == IS_NUMBER_IN_UV) {
2104             /* This won't turn off the public IOK flag if it was set above  */
2105             (void)SvIOKp_on(sv);
2106
2107             if (!(numtype & IS_NUMBER_NEG)) {
2108                 /* positive */;
2109                 if (value <= (UV)IV_MAX) {
2110                     SvIV_set(sv, (IV)value);
2111                 } else {
2112                     /* it didn't overflow, and it was positive. */
2113                     SvUV_set(sv, value);
2114                     SvIsUV_on(sv);
2115                 }
2116             } else {
2117                 /* 2s complement assumption  */
2118                 if (value <= (UV)IV_MIN) {
2119                     SvIV_set(sv, -(IV)value);
2120                 } else {
2121                     /* Too negative for an IV.  This is a double upgrade, but
2122                        I'm assuming it will be rare.  */
2123                     if (SvTYPE(sv) < SVt_PVNV)
2124                         sv_upgrade(sv, SVt_PVNV);
2125                     SvNOK_on(sv);
2126                     SvIOK_off(sv);
2127                     SvIOKp_on(sv);
2128                     SvNV_set(sv, -(NV)value);
2129                     SvIV_set(sv, IV_MIN);
2130                 }
2131             }
2132         }
2133         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2134            will be in the previous block to set the IV slot, and the next
2135            block to set the NV slot.  So no else here.  */
2136         
2137         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2138             != IS_NUMBER_IN_UV) {
2139             /* It wasn't an (integer that doesn't overflow the UV). */
2140             SvNV_set(sv, Atof(SvPVX_const(sv)));
2141
2142             if (! numtype && ckWARN(WARN_NUMERIC))
2143                 not_a_number(sv);
2144
2145 #if defined(USE_LONG_DOUBLE)
2146             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2147                                   PTR2UV(sv), SvNVX(sv)));
2148 #else
2149             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2150                                   PTR2UV(sv), SvNVX(sv)));
2151 #endif
2152
2153 #ifdef NV_PRESERVES_UV
2154             (void)SvIOKp_on(sv);
2155             (void)SvNOK_on(sv);
2156             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2157                 SvIV_set(sv, I_V(SvNVX(sv)));
2158                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2159                     SvIOK_on(sv);
2160                 } else {
2161                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2162                 }
2163                 /* UV will not work better than IV */
2164             } else {
2165                 if (SvNVX(sv) > (NV)UV_MAX) {
2166                     SvIsUV_on(sv);
2167                     /* Integer is inaccurate. NOK, IOKp, is UV */
2168                     SvUV_set(sv, UV_MAX);
2169                 } else {
2170                     SvUV_set(sv, U_V(SvNVX(sv)));
2171                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2172                        NV preservse UV so can do correct comparison.  */
2173                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2174                         SvIOK_on(sv);
2175                     } else {
2176                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2177                     }
2178                 }
2179                 SvIsUV_on(sv);
2180             }
2181 #else /* NV_PRESERVES_UV */
2182             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2183                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2184                 /* The IV/UV slot will have been set from value returned by
2185                    grok_number above.  The NV slot has just been set using
2186                    Atof.  */
2187                 SvNOK_on(sv);
2188                 assert (SvIOKp(sv));
2189             } else {
2190                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2191                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2192                     /* Small enough to preserve all bits. */
2193                     (void)SvIOKp_on(sv);
2194                     SvNOK_on(sv);
2195                     SvIV_set(sv, I_V(SvNVX(sv)));
2196                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2197                         SvIOK_on(sv);
2198                     /* Assumption: first non-preserved integer is < IV_MAX,
2199                        this NV is in the preserved range, therefore: */
2200                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2201                           < (UV)IV_MAX)) {
2202                         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);
2203                     }
2204                 } else {
2205                     /* IN_UV NOT_INT
2206                          0      0       already failed to read UV.
2207                          0      1       already failed to read UV.
2208                          1      0       you won't get here in this case. IV/UV
2209                                         slot set, public IOK, Atof() unneeded.
2210                          1      1       already read UV.
2211                        so there's no point in sv_2iuv_non_preserve() attempting
2212                        to use atol, strtol, strtoul etc.  */
2213 #  ifdef DEBUGGING
2214                     sv_2iuv_non_preserve (sv, numtype);
2215 #  else
2216                     sv_2iuv_non_preserve (sv);
2217 #  endif
2218                 }
2219             }
2220 #endif /* NV_PRESERVES_UV */
2221         /* It might be more code efficient to go through the entire logic above
2222            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2223            gets complex and potentially buggy, so more programmer efficient
2224            to do it this way, by turning off the public flags:  */
2225         if (!numtype)
2226             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2227         }
2228     }
2229     else  {
2230         if (isGV_with_GP(sv))
2231             return glob_2number(MUTABLE_GV(sv));
2232
2233         if (!SvPADTMP(sv)) {
2234             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2235                 report_uninit(sv);
2236         }
2237         if (SvTYPE(sv) < SVt_IV)
2238             /* Typically the caller expects that sv_any is not NULL now.  */
2239             sv_upgrade(sv, SVt_IV);
2240         /* Return 0 from the caller.  */
2241         return TRUE;
2242     }
2243     return FALSE;
2244 }
2245
2246 /*
2247 =for apidoc sv_2iv_flags
2248
2249 Return the integer value of an SV, doing any necessary string
2250 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2251 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2252
2253 =cut
2254 */
2255
2256 IV
2257 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2258 {
2259     dVAR;
2260
2261     if (!sv)
2262         return 0;
2263
2264     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2265         mg_get(sv);
2266
2267     if (SvROK(sv)) {
2268         if (SvAMAGIC(sv)) {
2269             SV * tmpstr;
2270             if (flags & SV_SKIP_OVERLOAD)
2271                 return 0;
2272             tmpstr = AMG_CALLunary(sv, numer_amg);
2273             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2274                 return SvIV(tmpstr);
2275             }
2276         }
2277         return PTR2IV(SvRV(sv));
2278     }
2279
2280     if (SvVALID(sv) || isREGEXP(sv)) {
2281         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2282            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2283            In practice they are extremely unlikely to actually get anywhere
2284            accessible by user Perl code - the only way that I'm aware of is when
2285            a constant subroutine which is used as the second argument to index.
2286
2287            Regexps have no SvIVX and SvNVX fields.
2288         */
2289         assert(isREGEXP(sv) || SvPOKp(sv));
2290         {
2291             UV value;
2292             const char * const ptr =
2293                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2294             const int numtype
2295                 = grok_number(ptr, SvCUR(sv), &value);
2296
2297             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2298                 == IS_NUMBER_IN_UV) {
2299                 /* It's definitely an integer */
2300                 if (numtype & IS_NUMBER_NEG) {
2301                     if (value < (UV)IV_MIN)
2302                         return -(IV)value;
2303                 } else {
2304                     if (value < (UV)IV_MAX)
2305                         return (IV)value;
2306                 }
2307             }
2308             if (!numtype) {
2309                 if (ckWARN(WARN_NUMERIC))
2310                     not_a_number(sv);
2311             }
2312             return I_V(Atof(ptr));
2313         }
2314     }
2315
2316     if (SvTHINKFIRST(sv)) {
2317 #ifdef PERL_OLD_COPY_ON_WRITE
2318         if (SvIsCOW(sv)) {
2319             sv_force_normal_flags(sv, 0);
2320         }
2321 #endif
2322         if (SvREADONLY(sv) && !SvOK(sv)) {
2323             if (ckWARN(WARN_UNINITIALIZED))
2324                 report_uninit(sv);
2325             return 0;
2326         }
2327     }
2328
2329     if (!SvIOKp(sv)) {
2330         if (S_sv_2iuv_common(aTHX_ sv))
2331             return 0;
2332     }
2333
2334     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2335         PTR2UV(sv),SvIVX(sv)));
2336     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2337 }
2338
2339 /*
2340 =for apidoc sv_2uv_flags
2341
2342 Return the unsigned integer value of an SV, doing any necessary string
2343 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2344 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2345
2346 =cut
2347 */
2348
2349 UV
2350 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2351 {
2352     dVAR;
2353
2354     if (!sv)
2355         return 0;
2356
2357     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2358         mg_get(sv);
2359
2360     if (SvROK(sv)) {
2361         if (SvAMAGIC(sv)) {
2362             SV *tmpstr;
2363             if (flags & SV_SKIP_OVERLOAD)
2364                 return 0;
2365             tmpstr = AMG_CALLunary(sv, numer_amg);
2366             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2367                 return SvUV(tmpstr);
2368             }
2369         }
2370         return PTR2UV(SvRV(sv));
2371     }
2372
2373     if (SvVALID(sv) || isREGEXP(sv)) {
2374         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2375            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2376            Regexps have no SvIVX and SvNVX fields. */
2377         assert(isREGEXP(sv) || SvPOKp(sv));
2378         {
2379             UV value;
2380             const char * const ptr =
2381                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2382             const int numtype
2383                 = grok_number(ptr, SvCUR(sv), &value);
2384
2385             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2386                 == IS_NUMBER_IN_UV) {
2387                 /* It's definitely an integer */
2388                 if (!(numtype & IS_NUMBER_NEG))
2389                     return value;
2390             }
2391             if (!numtype) {
2392                 if (ckWARN(WARN_NUMERIC))
2393                     not_a_number(sv);
2394             }
2395             return U_V(Atof(ptr));
2396         }
2397     }
2398
2399     if (SvTHINKFIRST(sv)) {
2400 #ifdef PERL_OLD_COPY_ON_WRITE
2401         if (SvIsCOW(sv)) {
2402             sv_force_normal_flags(sv, 0);
2403         }
2404 #endif
2405         if (SvREADONLY(sv) && !SvOK(sv)) {
2406             if (ckWARN(WARN_UNINITIALIZED))
2407                 report_uninit(sv);
2408             return 0;
2409         }
2410     }
2411
2412     if (!SvIOKp(sv)) {
2413         if (S_sv_2iuv_common(aTHX_ sv))
2414             return 0;
2415     }
2416
2417     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2418                           PTR2UV(sv),SvUVX(sv)));
2419     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2420 }
2421
2422 /*
2423 =for apidoc sv_2nv_flags
2424
2425 Return the num value of an SV, doing any necessary string or integer
2426 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2427 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2428
2429 =cut
2430 */
2431
2432 NV
2433 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2434 {
2435     dVAR;
2436     if (!sv)
2437         return 0.0;
2438     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2439         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2440            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2441            Regexps have no SvIVX and SvNVX fields.  */
2442         const char *ptr;
2443         if (flags & SV_GMAGIC)
2444             mg_get(sv);
2445         if (SvNOKp(sv))
2446             return SvNVX(sv);
2447         if (SvPOKp(sv) && !SvIOKp(sv)) {
2448             ptr = SvPVX_const(sv);
2449           grokpv:
2450             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2451                 !grok_number(ptr, SvCUR(sv), NULL))
2452                 not_a_number(sv);
2453             return Atof(ptr);
2454         }
2455         if (SvIOKp(sv)) {
2456             if (SvIsUV(sv))
2457                 return (NV)SvUVX(sv);
2458             else
2459                 return (NV)SvIVX(sv);
2460         }
2461         if (SvROK(sv)) {
2462             goto return_rok;
2463         }
2464         if (isREGEXP(sv)) {
2465             ptr = RX_WRAPPED((REGEXP *)sv);
2466             goto grokpv;
2467         }
2468         assert(SvTYPE(sv) >= SVt_PVMG);
2469         /* This falls through to the report_uninit near the end of the
2470            function. */
2471     } else if (SvTHINKFIRST(sv)) {
2472         if (SvROK(sv)) {
2473         return_rok:
2474             if (SvAMAGIC(sv)) {
2475                 SV *tmpstr;
2476                 if (flags & SV_SKIP_OVERLOAD)
2477                     return 0;
2478                 tmpstr = AMG_CALLunary(sv, numer_amg);
2479                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2480                     return SvNV(tmpstr);
2481                 }
2482             }
2483             return PTR2NV(SvRV(sv));
2484         }
2485 #ifdef PERL_OLD_COPY_ON_WRITE
2486         if (SvIsCOW(sv)) {
2487             sv_force_normal_flags(sv, 0);
2488         }
2489 #endif
2490         if (SvREADONLY(sv) && !SvOK(sv)) {
2491             if (ckWARN(WARN_UNINITIALIZED))
2492                 report_uninit(sv);
2493             return 0.0;
2494         }
2495     }
2496     if (SvTYPE(sv) < SVt_NV) {
2497         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2498         sv_upgrade(sv, SVt_NV);
2499 #ifdef USE_LONG_DOUBLE
2500         DEBUG_c({
2501             STORE_NUMERIC_LOCAL_SET_STANDARD();
2502             PerlIO_printf(Perl_debug_log,
2503                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2504                           PTR2UV(sv), SvNVX(sv));
2505             RESTORE_NUMERIC_LOCAL();
2506         });
2507 #else
2508         DEBUG_c({
2509             STORE_NUMERIC_LOCAL_SET_STANDARD();
2510             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2511                           PTR2UV(sv), SvNVX(sv));
2512             RESTORE_NUMERIC_LOCAL();
2513         });
2514 #endif
2515     }
2516     else if (SvTYPE(sv) < SVt_PVNV)
2517         sv_upgrade(sv, SVt_PVNV);
2518     if (SvNOKp(sv)) {
2519         return SvNVX(sv);
2520     }
2521     if (SvIOKp(sv)) {
2522         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2523 #ifdef NV_PRESERVES_UV
2524         if (SvIOK(sv))
2525             SvNOK_on(sv);
2526         else
2527             SvNOKp_on(sv);
2528 #else
2529         /* Only set the public NV OK flag if this NV preserves the IV  */
2530         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2531         if (SvIOK(sv) &&
2532             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2533                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2534             SvNOK_on(sv);
2535         else
2536             SvNOKp_on(sv);
2537 #endif
2538     }
2539     else if (SvPOKp(sv)) {
2540         UV value;
2541         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2542         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2543             not_a_number(sv);
2544 #ifdef NV_PRESERVES_UV
2545         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2546             == IS_NUMBER_IN_UV) {
2547             /* It's definitely an integer */
2548             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2549         } else
2550             SvNV_set(sv, Atof(SvPVX_const(sv)));
2551         if (numtype)
2552             SvNOK_on(sv);
2553         else
2554             SvNOKp_on(sv);
2555 #else
2556         SvNV_set(sv, Atof(SvPVX_const(sv)));
2557         /* Only set the public NV OK flag if this NV preserves the value in
2558            the PV at least as well as an IV/UV would.
2559            Not sure how to do this 100% reliably. */
2560         /* if that shift count is out of range then Configure's test is
2561            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2562            UV_BITS */
2563         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2564             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2565             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2566         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2567             /* Can't use strtol etc to convert this string, so don't try.
2568                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2569             SvNOK_on(sv);
2570         } else {
2571             /* value has been set.  It may not be precise.  */
2572             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2573                 /* 2s complement assumption for (UV)IV_MIN  */
2574                 SvNOK_on(sv); /* Integer is too negative.  */
2575             } else {
2576                 SvNOKp_on(sv);
2577                 SvIOKp_on(sv);
2578
2579                 if (numtype & IS_NUMBER_NEG) {
2580                     SvIV_set(sv, -(IV)value);
2581                 } else if (value <= (UV)IV_MAX) {
2582                     SvIV_set(sv, (IV)value);
2583                 } else {
2584                     SvUV_set(sv, value);
2585                     SvIsUV_on(sv);
2586                 }
2587
2588                 if (numtype & IS_NUMBER_NOT_INT) {
2589                     /* I believe that even if the original PV had decimals,
2590                        they are lost beyond the limit of the FP precision.
2591                        However, neither is canonical, so both only get p
2592                        flags.  NWC, 2000/11/25 */
2593                     /* Both already have p flags, so do nothing */
2594                 } else {
2595                     const NV nv = SvNVX(sv);
2596                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2597                         if (SvIVX(sv) == I_V(nv)) {
2598                             SvNOK_on(sv);
2599                         } else {
2600                             /* It had no "." so it must be integer.  */
2601                         }
2602                         SvIOK_on(sv);
2603                     } else {
2604                         /* between IV_MAX and NV(UV_MAX).
2605                            Could be slightly > UV_MAX */
2606
2607                         if (numtype & IS_NUMBER_NOT_INT) {
2608                             /* UV and NV both imprecise.  */
2609                         } else {
2610                             const UV nv_as_uv = U_V(nv);
2611
2612                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2613                                 SvNOK_on(sv);
2614                             }
2615                             SvIOK_on(sv);
2616                         }
2617                     }
2618                 }
2619             }
2620         }
2621         /* It might be more code efficient to go through the entire logic above
2622            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2623            gets complex and potentially buggy, so more programmer efficient
2624            to do it this way, by turning off the public flags:  */
2625         if (!numtype)
2626             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2627 #endif /* NV_PRESERVES_UV */
2628     }
2629     else  {
2630         if (isGV_with_GP(sv)) {
2631             glob_2number(MUTABLE_GV(sv));
2632             return 0.0;
2633         }
2634
2635         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2636             report_uninit(sv);
2637         assert (SvTYPE(sv) >= SVt_NV);
2638         /* Typically the caller expects that sv_any is not NULL now.  */
2639         /* XXX Ilya implies that this is a bug in callers that assume this
2640            and ideally should be fixed.  */
2641         return 0.0;
2642     }
2643 #if defined(USE_LONG_DOUBLE)
2644     DEBUG_c({
2645         STORE_NUMERIC_LOCAL_SET_STANDARD();
2646         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2647                       PTR2UV(sv), SvNVX(sv));
2648         RESTORE_NUMERIC_LOCAL();
2649     });
2650 #else
2651     DEBUG_c({
2652         STORE_NUMERIC_LOCAL_SET_STANDARD();
2653         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2654                       PTR2UV(sv), SvNVX(sv));
2655         RESTORE_NUMERIC_LOCAL();
2656     });
2657 #endif
2658     return SvNVX(sv);
2659 }
2660
2661 /*
2662 =for apidoc sv_2num
2663
2664 Return an SV with the numeric value of the source SV, doing any necessary
2665 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2666 access this function.
2667
2668 =cut
2669 */
2670
2671 SV *
2672 Perl_sv_2num(pTHX_ register SV *const sv)
2673 {
2674     PERL_ARGS_ASSERT_SV_2NUM;
2675
2676     if (!SvROK(sv))
2677         return sv;
2678     if (SvAMAGIC(sv)) {
2679         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2680         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2681         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2682             return sv_2num(tmpsv);
2683     }
2684     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2685 }
2686
2687 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2688  * UV as a string towards the end of buf, and return pointers to start and
2689  * end of it.
2690  *
2691  * We assume that buf is at least TYPE_CHARS(UV) long.
2692  */
2693
2694 static char *
2695 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2696 {
2697     char *ptr = buf + TYPE_CHARS(UV);
2698     char * const ebuf = ptr;
2699     int sign;
2700
2701     PERL_ARGS_ASSERT_UIV_2BUF;
2702
2703     if (is_uv)
2704         sign = 0;
2705     else if (iv >= 0) {
2706         uv = iv;
2707         sign = 0;
2708     } else {
2709         uv = -iv;
2710         sign = 1;
2711     }
2712     do {
2713         *--ptr = '0' + (char)(uv % 10);
2714     } while (uv /= 10);
2715     if (sign)
2716         *--ptr = '-';
2717     *peob = ebuf;
2718     return ptr;
2719 }
2720
2721 /*
2722 =for apidoc sv_2pv_flags
2723
2724 Returns a pointer to the string value of an SV, and sets *lp to its length.
2725 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2726 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2727 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2728
2729 =cut
2730 */
2731
2732 char *
2733 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2734 {
2735     dVAR;
2736     char *s;
2737
2738     if (!sv) {
2739         if (lp)
2740             *lp = 0;
2741         return (char *)"";
2742     }
2743     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2744         mg_get(sv);
2745     if (SvROK(sv)) {
2746         if (SvAMAGIC(sv)) {
2747             SV *tmpstr;
2748             if (flags & SV_SKIP_OVERLOAD)
2749                 return NULL;
2750             tmpstr = AMG_CALLunary(sv, string_amg);
2751             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2752             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2753                 /* Unwrap this:  */
2754                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2755                  */
2756
2757                 char *pv;
2758                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2759                     if (flags & SV_CONST_RETURN) {
2760                         pv = (char *) SvPVX_const(tmpstr);
2761                     } else {
2762                         pv = (flags & SV_MUTABLE_RETURN)
2763                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2764                     }
2765                     if (lp)
2766                         *lp = SvCUR(tmpstr);
2767                 } else {
2768                     pv = sv_2pv_flags(tmpstr, lp, flags);
2769                 }
2770                 if (SvUTF8(tmpstr))
2771                     SvUTF8_on(sv);
2772                 else
2773                     SvUTF8_off(sv);
2774                 return pv;
2775             }
2776         }
2777         {
2778             STRLEN len;
2779             char *retval;
2780             char *buffer;
2781             SV *const referent = SvRV(sv);
2782
2783             if (!referent) {
2784                 len = 7;
2785                 retval = buffer = savepvn("NULLREF", len);
2786             } else if (SvTYPE(referent) == SVt_REGEXP &&
2787                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2788                         amagic_is_enabled(string_amg))) {
2789                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2790
2791                 assert(re);
2792                         
2793                 /* If the regex is UTF-8 we want the containing scalar to
2794                    have an UTF-8 flag too */
2795                 if (RX_UTF8(re))
2796                     SvUTF8_on(sv);
2797                 else
2798                     SvUTF8_off(sv);     
2799
2800                 if (lp)
2801                     *lp = RX_WRAPLEN(re);
2802  
2803                 return RX_WRAPPED(re);
2804             } else {
2805                 const char *const typestr = sv_reftype(referent, 0);
2806                 const STRLEN typelen = strlen(typestr);
2807                 UV addr = PTR2UV(referent);
2808                 const char *stashname = NULL;
2809                 STRLEN stashnamelen = 0; /* hush, gcc */
2810                 const char *buffer_end;
2811
2812                 if (SvOBJECT(referent)) {
2813                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2814
2815                     if (name) {
2816                         stashname = HEK_KEY(name);
2817                         stashnamelen = HEK_LEN(name);
2818
2819                         if (HEK_UTF8(name)) {
2820                             SvUTF8_on(sv);
2821                         } else {
2822                             SvUTF8_off(sv);
2823                         }
2824                     } else {
2825                         stashname = "__ANON__";
2826                         stashnamelen = 8;
2827                     }
2828                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2829                         + 2 * sizeof(UV) + 2 /* )\0 */;
2830                 } else {
2831                     len = typelen + 3 /* (0x */
2832                         + 2 * sizeof(UV) + 2 /* )\0 */;
2833                 }
2834
2835                 Newx(buffer, len, char);
2836                 buffer_end = retval = buffer + len;
2837
2838                 /* Working backwards  */
2839                 *--retval = '\0';
2840                 *--retval = ')';
2841                 do {
2842                     *--retval = PL_hexdigit[addr & 15];
2843                 } while (addr >>= 4);
2844                 *--retval = 'x';
2845                 *--retval = '0';
2846                 *--retval = '(';
2847
2848                 retval -= typelen;
2849                 memcpy(retval, typestr, typelen);
2850
2851                 if (stashname) {
2852                     *--retval = '=';
2853                     retval -= stashnamelen;
2854                     memcpy(retval, stashname, stashnamelen);
2855                 }
2856                 /* retval may not necessarily have reached the start of the
2857                    buffer here.  */
2858                 assert (retval >= buffer);
2859
2860                 len = buffer_end - retval - 1; /* -1 for that \0  */
2861             }
2862             if (lp)
2863                 *lp = len;
2864             SAVEFREEPV(buffer);
2865             return retval;
2866         }
2867     }
2868
2869     if (SvPOKp(sv)) {
2870         if (lp)
2871             *lp = SvCUR(sv);
2872         if (flags & SV_MUTABLE_RETURN)
2873             return SvPVX_mutable(sv);
2874         if (flags & SV_CONST_RETURN)
2875             return (char *)SvPVX_const(sv);
2876         return SvPVX(sv);
2877     }
2878
2879     if (SvIOK(sv)) {
2880         /* I'm assuming that if both IV and NV are equally valid then
2881            converting the IV is going to be more efficient */
2882         const U32 isUIOK = SvIsUV(sv);
2883         char buf[TYPE_CHARS(UV)];
2884         char *ebuf, *ptr;
2885         STRLEN len;
2886
2887         if (SvTYPE(sv) < SVt_PVIV)
2888             sv_upgrade(sv, SVt_PVIV);
2889         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2890         len = ebuf - ptr;
2891         /* inlined from sv_setpvn */
2892         s = SvGROW_mutable(sv, len + 1);
2893         Move(ptr, s, len, char);
2894         s += len;
2895         *s = '\0';
2896     }
2897     else if (SvNOK(sv)) {
2898         if (SvTYPE(sv) < SVt_PVNV)
2899             sv_upgrade(sv, SVt_PVNV);
2900         if (SvNVX(sv) == 0.0) {
2901             s = SvGROW_mutable(sv, 2);
2902             *s++ = '0';
2903             *s = '\0';
2904         } else {
2905             dSAVE_ERRNO;
2906             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2907             s = SvGROW_mutable(sv, NV_DIG + 20);
2908             /* some Xenix systems wipe out errno here */
2909             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2910             RESTORE_ERRNO;
2911             while (*s) s++;
2912         }
2913 #ifdef hcx
2914         if (s[-1] == '.')
2915             *--s = '\0';
2916 #endif
2917     }
2918     else if (isGV_with_GP(sv)) {
2919         GV *const gv = MUTABLE_GV(sv);
2920         SV *const buffer = sv_newmortal();
2921
2922         gv_efullname3(buffer, gv, "*");
2923
2924         assert(SvPOK(buffer));
2925         if (SvUTF8(buffer))
2926             SvUTF8_on(sv);
2927         if (lp)
2928             *lp = SvCUR(buffer);
2929         return SvPVX(buffer);
2930     }
2931     else if (isREGEXP(sv)) {
2932         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
2933         return RX_WRAPPED((REGEXP *)sv);
2934     }
2935     else {
2936         if (lp)
2937             *lp = 0;
2938         if (flags & SV_UNDEF_RETURNS_NULL)
2939             return NULL;
2940         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2941             report_uninit(sv);
2942         /* Typically the caller expects that sv_any is not NULL now.  */
2943         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
2944             sv_upgrade(sv, SVt_PV);
2945         return (char *)"";
2946     }
2947
2948     {
2949         const STRLEN len = s - SvPVX_const(sv);
2950         if (lp) 
2951             *lp = len;
2952         SvCUR_set(sv, len);
2953     }
2954     SvPOK_on(sv);
2955     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2956                           PTR2UV(sv),SvPVX_const(sv)));
2957     if (flags & SV_CONST_RETURN)
2958         return (char *)SvPVX_const(sv);
2959     if (flags & SV_MUTABLE_RETURN)
2960         return SvPVX_mutable(sv);
2961     return SvPVX(sv);
2962 }
2963
2964 /*
2965 =for apidoc sv_copypv
2966
2967 Copies a stringified representation of the source SV into the
2968 destination SV.  Automatically performs any necessary mg_get and
2969 coercion of numeric values into strings.  Guaranteed to preserve
2970 UTF8 flag even from overloaded objects.  Similar in nature to
2971 sv_2pv[_flags] but operates directly on an SV instead of just the
2972 string.  Mostly uses sv_2pv_flags to do its work, except when that
2973 would lose the UTF-8'ness of the PV.
2974
2975 =for apidoc sv_copypv_nomg
2976
2977 Like sv_copypv, but doesn't invoke get magic first.
2978
2979 =for apidoc sv_copypv_flags
2980
2981 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
2982 include SV_GMAGIC.
2983
2984 =cut
2985 */
2986
2987 void
2988 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
2989 {
2990     PERL_ARGS_ASSERT_SV_COPYPV;
2991
2992     sv_copypv_flags(dsv, ssv, 0);
2993 }
2994
2995 void
2996 Perl_sv_copypv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
2997 {
2998     STRLEN len;
2999     const char *s;
3000
3001     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3002
3003     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3004         mg_get(ssv);
3005     s = SvPV_nomg_const(ssv,len);
3006     sv_setpvn(dsv,s,len);
3007     if (SvUTF8(ssv))
3008         SvUTF8_on(dsv);
3009     else
3010         SvUTF8_off(dsv);
3011 }
3012
3013 /*
3014 =for apidoc sv_2pvbyte
3015
3016 Return a pointer to the byte-encoded representation of the SV, and set *lp
3017 to its length.  May cause the SV to be downgraded from UTF-8 as a
3018 side-effect.
3019
3020 Usually accessed via the C<SvPVbyte> macro.
3021
3022 =cut
3023 */
3024
3025 char *
3026 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *const lp)
3027 {
3028     PERL_ARGS_ASSERT_SV_2PVBYTE;
3029
3030     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3031      || isGV_with_GP(sv) || SvROK(sv)) {
3032         SV *sv2 = sv_newmortal();
3033         sv_copypv(sv2,sv);
3034         sv = sv2;
3035     }
3036     else SvGETMAGIC(sv);
3037     sv_utf8_downgrade(sv,0);
3038     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3039 }
3040
3041 /*
3042 =for apidoc sv_2pvutf8
3043
3044 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3045 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3046
3047 Usually accessed via the C<SvPVutf8> macro.
3048
3049 =cut
3050 */
3051
3052 char *
3053 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *const lp)
3054 {
3055     PERL_ARGS_ASSERT_SV_2PVUTF8;
3056
3057     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3058      || isGV_with_GP(sv) || SvROK(sv))
3059         sv = sv_mortalcopy(sv);
3060     else
3061         SvGETMAGIC(sv);
3062     sv_utf8_upgrade_nomg(sv);
3063     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3064 }
3065
3066
3067 /*
3068 =for apidoc sv_2bool
3069
3070 This macro is only used by sv_true() or its macro equivalent, and only if
3071 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3072 It calls sv_2bool_flags with the SV_GMAGIC flag.
3073
3074 =for apidoc sv_2bool_flags
3075
3076 This function is only used by sv_true() and friends,  and only if
3077 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3078 contain SV_GMAGIC, then it does an mg_get() first.
3079
3080
3081 =cut
3082 */
3083
3084 bool
3085 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3086 {
3087     dVAR;
3088
3089     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3090
3091     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3092
3093     if (!SvOK(sv))
3094         return 0;
3095     if (SvROK(sv)) {
3096         if (SvAMAGIC(sv)) {
3097             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3098             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3099                 return cBOOL(SvTRUE(tmpsv));
3100         }
3101         return SvRV(sv) != 0;
3102     }
3103     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3104 }
3105
3106 /*
3107 =for apidoc sv_utf8_upgrade
3108
3109 Converts the PV of an SV to its UTF-8-encoded form.
3110 Forces the SV to string form if it is not already.
3111 Will C<mg_get> on C<sv> if appropriate.
3112 Always sets the SvUTF8 flag to avoid future validity checks even
3113 if the whole string is the same in UTF-8 as not.
3114 Returns the number of bytes in the converted string
3115
3116 This is not a general purpose byte encoding to Unicode interface:
3117 use the Encode extension for that.
3118
3119 =for apidoc sv_utf8_upgrade_nomg
3120
3121 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3122
3123 =for apidoc sv_utf8_upgrade_flags
3124
3125 Converts the PV of an SV to its UTF-8-encoded form.
3126 Forces the SV to string form if it is not already.
3127 Always sets the SvUTF8 flag to avoid future validity checks even
3128 if all the bytes are invariant in UTF-8.
3129 If C<flags> has C<SV_GMAGIC> bit set,
3130 will C<mg_get> on C<sv> if appropriate, else not.
3131 Returns the number of bytes in the converted string
3132 C<sv_utf8_upgrade> and
3133 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3134
3135 This is not a general purpose byte encoding to Unicode interface:
3136 use the Encode extension for that.
3137
3138 =cut
3139
3140 The grow version is currently not externally documented.  It adds a parameter,
3141 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3142 have free after it upon return.  This allows the caller to reserve extra space
3143 that it intends to fill, to avoid extra grows.
3144
3145 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3146 which can be used to tell this function to not first check to see if there are
3147 any characters that are different in UTF-8 (variant characters) which would
3148 force it to allocate a new string to sv, but to assume there are.  Typically
3149 this flag is used by a routine that has already parsed the string to find that
3150 there are such characters, and passes this information on so that the work
3151 doesn't have to be repeated.
3152
3153 (One might think that the calling routine could pass in the position of the
3154 first such variant, so it wouldn't have to be found again.  But that is not the
3155 case, because typically when the caller is likely to use this flag, it won't be
3156 calling this routine unless it finds something that won't fit into a byte.
3157 Otherwise it tries to not upgrade and just use bytes.  But some things that
3158 do fit into a byte are variants in utf8, and the caller may not have been
3159 keeping track of these.)
3160
3161 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3162 isn't guaranteed due to having other routines do the work in some input cases,
3163 or if the input is already flagged as being in utf8.
3164
3165 The speed of this could perhaps be improved for many cases if someone wanted to
3166 write a fast function that counts the number of variant characters in a string,
3167 especially if it could return the position of the first one.
3168
3169 */
3170
3171 STRLEN
3172 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3173 {
3174     dVAR;
3175
3176     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3177
3178     if (sv == &PL_sv_undef)
3179         return 0;
3180     if (!SvPOK_nog(sv)) {
3181         STRLEN len = 0;
3182         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3183             (void) sv_2pv_flags(sv,&len, flags);
3184             if (SvUTF8(sv)) {
3185                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3186                 return len;
3187             }
3188         } else {
3189             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3190         }
3191     }
3192
3193     if (SvUTF8(sv)) {
3194         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3195         return SvCUR(sv);
3196     }
3197
3198     if (SvIsCOW(sv)) {
3199         sv_force_normal_flags(sv, 0);
3200     }
3201
3202     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3203         sv_recode_to_utf8(sv, PL_encoding);
3204         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3205         return SvCUR(sv);
3206     }
3207
3208     if (SvCUR(sv) == 0) {
3209         if (extra) SvGROW(sv, extra);
3210     } else { /* Assume Latin-1/EBCDIC */
3211         /* This function could be much more efficient if we
3212          * had a FLAG in SVs to signal if there are any variant
3213          * chars in the PV.  Given that there isn't such a flag
3214          * make the loop as fast as possible (although there are certainly ways
3215          * to speed this up, eg. through vectorization) */
3216         U8 * s = (U8 *) SvPVX_const(sv);
3217         U8 * e = (U8 *) SvEND(sv);
3218         U8 *t = s;
3219         STRLEN two_byte_count = 0;
3220         
3221         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3222
3223         /* See if really will need to convert to utf8.  We mustn't rely on our
3224          * incoming SV being well formed and having a trailing '\0', as certain
3225          * code in pp_formline can send us partially built SVs. */
3226
3227         while (t < e) {
3228             const U8 ch = *t++;
3229             if (NATIVE_IS_INVARIANT(ch)) continue;
3230
3231             t--;    /* t already incremented; re-point to first variant */
3232             two_byte_count = 1;
3233             goto must_be_utf8;
3234         }
3235
3236         /* utf8 conversion not needed because all are invariants.  Mark as
3237          * UTF-8 even if no variant - saves scanning loop */
3238         SvUTF8_on(sv);
3239         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3240         return SvCUR(sv);
3241
3242 must_be_utf8:
3243
3244         /* Here, the string should be converted to utf8, either because of an
3245          * input flag (two_byte_count = 0), or because a character that
3246          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3247          * the beginning of the string (if we didn't examine anything), or to
3248          * the first variant.  In either case, everything from s to t - 1 will
3249          * occupy only 1 byte each on output.
3250          *
3251          * There are two main ways to convert.  One is to create a new string
3252          * and go through the input starting from the beginning, appending each
3253          * converted value onto the new string as we go along.  It's probably
3254          * best to allocate enough space in the string for the worst possible
3255          * case rather than possibly running out of space and having to
3256          * reallocate and then copy what we've done so far.  Since everything
3257          * from s to t - 1 is invariant, the destination can be initialized
3258          * with these using a fast memory copy
3259          *
3260          * The other way is to figure out exactly how big the string should be
3261          * by parsing the entire input.  Then you don't have to make it big
3262          * enough to handle the worst possible case, and more importantly, if
3263          * the string you already have is large enough, you don't have to
3264          * allocate a new string, you can copy the last character in the input
3265          * string to the final position(s) that will be occupied by the
3266          * converted string and go backwards, stopping at t, since everything
3267          * before that is invariant.
3268          *
3269          * There are advantages and disadvantages to each method.
3270          *
3271          * In the first method, we can allocate a new string, do the memory
3272          * copy from the s to t - 1, and then proceed through the rest of the
3273          * string byte-by-byte.
3274          *
3275          * In the second method, we proceed through the rest of the input
3276          * string just calculating how big the converted string will be.  Then
3277          * there are two cases:
3278          *  1)  if the string has enough extra space to handle the converted
3279          *      value.  We go backwards through the string, converting until we
3280          *      get to the position we are at now, and then stop.  If this
3281          *      position is far enough along in the string, this method is
3282          *      faster than the other method.  If the memory copy were the same
3283          *      speed as the byte-by-byte loop, that position would be about
3284          *      half-way, as at the half-way mark, parsing to the end and back
3285          *      is one complete string's parse, the same amount as starting
3286          *      over and going all the way through.  Actually, it would be
3287          *      somewhat less than half-way, as it's faster to just count bytes
3288          *      than to also copy, and we don't have the overhead of allocating
3289          *      a new string, changing the scalar to use it, and freeing the
3290          *      existing one.  But if the memory copy is fast, the break-even
3291          *      point is somewhere after half way.  The counting loop could be
3292          *      sped up by vectorization, etc, to move the break-even point
3293          *      further towards the beginning.
3294          *  2)  if the string doesn't have enough space to handle the converted
3295          *      value.  A new string will have to be allocated, and one might
3296          *      as well, given that, start from the beginning doing the first
3297          *      method.  We've spent extra time parsing the string and in
3298          *      exchange all we've gotten is that we know precisely how big to
3299          *      make the new one.  Perl is more optimized for time than space,
3300          *      so this case is a loser.
3301          * So what I've decided to do is not use the 2nd method unless it is
3302          * guaranteed that a new string won't have to be allocated, assuming
3303          * the worst case.  I also decided not to put any more conditions on it
3304          * than this, for now.  It seems likely that, since the worst case is
3305          * twice as big as the unknown portion of the string (plus 1), we won't
3306          * be guaranteed enough space, causing us to go to the first method,
3307          * unless the string is short, or the first variant character is near
3308          * the end of it.  In either of these cases, it seems best to use the
3309          * 2nd method.  The only circumstance I can think of where this would
3310          * be really slower is if the string had once had much more data in it
3311          * than it does now, but there is still a substantial amount in it  */
3312
3313         {
3314             STRLEN invariant_head = t - s;
3315             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3316             if (SvLEN(sv) < size) {
3317
3318                 /* Here, have decided to allocate a new string */
3319
3320                 U8 *dst;
3321                 U8 *d;
3322
3323                 Newx(dst, size, U8);
3324
3325                 /* If no known invariants at the beginning of the input string,
3326                  * set so starts from there.  Otherwise, can use memory copy to
3327                  * get up to where we are now, and then start from here */
3328
3329                 if (invariant_head <= 0) {
3330                     d = dst;
3331                 } else {
3332                     Copy(s, dst, invariant_head, char);
3333                     d = dst + invariant_head;
3334                 }
3335
3336                 while (t < e) {
3337                     const UV uv = NATIVE8_TO_UNI(*t++);
3338                     if (UNI_IS_INVARIANT(uv))
3339                         *d++ = (U8)UNI_TO_NATIVE(uv);
3340                     else {
3341                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3342                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3343                     }
3344                 }
3345                 *d = '\0';
3346                 SvPV_free(sv); /* No longer using pre-existing string */
3347                 SvPV_set(sv, (char*)dst);
3348                 SvCUR_set(sv, d - dst);
3349                 SvLEN_set(sv, size);
3350             } else {
3351
3352                 /* Here, have decided to get the exact size of the string.
3353                  * Currently this happens only when we know that there is
3354                  * guaranteed enough space to fit the converted string, so
3355                  * don't have to worry about growing.  If two_byte_count is 0,
3356                  * then t points to the first byte of the string which hasn't
3357                  * been examined yet.  Otherwise two_byte_count is 1, and t
3358                  * points to the first byte in the string that will expand to
3359                  * two.  Depending on this, start examining at t or 1 after t.
3360                  * */
3361
3362                 U8 *d = t + two_byte_count;
3363
3364
3365                 /* Count up the remaining bytes that expand to two */
3366
3367                 while (d < e) {
3368                     const U8 chr = *d++;
3369                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3370                 }
3371
3372                 /* The string will expand by just the number of bytes that
3373                  * occupy two positions.  But we are one afterwards because of
3374                  * the increment just above.  This is the place to put the
3375                  * trailing NUL, and to set the length before we decrement */
3376
3377                 d += two_byte_count;
3378                 SvCUR_set(sv, d - s);
3379                 *d-- = '\0';
3380
3381
3382                 /* Having decremented d, it points to the position to put the
3383                  * very last byte of the expanded string.  Go backwards through
3384                  * the string, copying and expanding as we go, stopping when we
3385                  * get to the part that is invariant the rest of the way down */
3386
3387                 e--;
3388                 while (e >= t) {
3389                     const U8 ch = NATIVE8_TO_UNI(*e--);
3390                     if (UNI_IS_INVARIANT(ch)) {
3391                         *d-- = UNI_TO_NATIVE(ch);
3392                     } else {
3393                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3394                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3395                     }
3396                 }
3397             }
3398
3399             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3400                 /* Update pos. We do it at the end rather than during
3401                  * the upgrade, to avoid slowing down the common case
3402                  * (upgrade without pos) */
3403                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3404                 if (mg) {
3405                     I32 pos = mg->mg_len;
3406                     if (pos > 0 && (U32)pos > invariant_head) {
3407                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3408                         STRLEN n = (U32)pos - invariant_head;
3409                         while (n > 0) {
3410                             if (UTF8_IS_START(*d))
3411                                 d++;
3412                             d++;
3413                             n--;
3414                         }
3415                         mg->mg_len  = d - (U8*)SvPVX(sv);
3416                     }
3417                 }
3418                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3419                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3420             }
3421         }
3422     }
3423
3424     /* Mark as UTF-8 even if no variant - saves scanning loop */
3425     SvUTF8_on(sv);
3426     return SvCUR(sv);
3427 }
3428
3429 /*
3430 =for apidoc sv_utf8_downgrade
3431
3432 Attempts to convert the PV of an SV from characters to bytes.
3433 If the PV contains a character that cannot fit
3434 in a byte, this conversion will fail;
3435 in this case, either returns false or, if C<fail_ok> is not
3436 true, croaks.
3437
3438 This is not a general purpose Unicode to byte encoding interface:
3439 use the Encode extension for that.
3440
3441 =cut
3442 */
3443
3444 bool
3445 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3446 {
3447     dVAR;
3448
3449     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3450
3451     if (SvPOKp(sv) && SvUTF8(sv)) {
3452         if (SvCUR(sv)) {
3453             U8 *s;
3454             STRLEN len;
3455             int mg_flags = SV_GMAGIC;
3456
3457             if (SvIsCOW(sv)) {
3458                 sv_force_normal_flags(sv, 0);
3459             }
3460             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3461                 /* update pos */
3462                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3463                 if (mg) {
3464                     I32 pos = mg->mg_len;
3465                     if (pos > 0) {
3466                         sv_pos_b2u(sv, &pos);
3467                         mg_flags = 0; /* sv_pos_b2u does get magic */
3468                         mg->mg_len  = pos;
3469                     }
3470                 }
3471                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3472                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3473
3474             }
3475             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3476
3477             if (!utf8_to_bytes(s, &len)) {
3478                 if (fail_ok)
3479                     return FALSE;
3480                 else {
3481                     if (PL_op)
3482                         Perl_croak(aTHX_ "Wide character in %s",
3483                                    OP_DESC(PL_op));
3484                     else
3485                         Perl_croak(aTHX_ "Wide character");
3486                 }
3487             }
3488             SvCUR_set(sv, len);
3489         }
3490     }
3491     SvUTF8_off(sv);
3492     return TRUE;
3493 }
3494
3495 /*
3496 =for apidoc sv_utf8_encode
3497
3498 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3499 flag off so that it looks like octets again.
3500
3501 =cut
3502 */
3503
3504 void
3505 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3506 {
3507     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3508
3509     if (SvREADONLY(sv)) {
3510         sv_force_normal_flags(sv, 0);
3511     }
3512     (void) sv_utf8_upgrade(sv);
3513     SvUTF8_off(sv);
3514 }
3515
3516 /*
3517 =for apidoc sv_utf8_decode
3518
3519 If the PV of the SV is an octet sequence in UTF-8
3520 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3521 so that it looks like a character.  If the PV contains only single-byte
3522 characters, the C<SvUTF8> flag stays off.
3523 Scans PV for validity and returns false if the PV is invalid UTF-8.
3524
3525 =cut
3526 */
3527
3528 bool
3529 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3530 {
3531     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3532
3533     if (SvPOKp(sv)) {
3534         const U8 *start, *c;
3535         const U8 *e;
3536
3537         /* The octets may have got themselves encoded - get them back as
3538          * bytes
3539          */
3540         if (!sv_utf8_downgrade(sv, TRUE))
3541             return FALSE;
3542
3543         /* it is actually just a matter of turning the utf8 flag on, but
3544          * we want to make sure everything inside is valid utf8 first.
3545          */
3546         c = start = (const U8 *) SvPVX_const(sv);
3547         if (!is_utf8_string(c, SvCUR(sv)))
3548             return FALSE;
3549         e = (const U8 *) SvEND(sv);
3550         while (c < e) {
3551             const U8 ch = *c++;
3552             if (!UTF8_IS_INVARIANT(ch)) {
3553                 SvUTF8_on(sv);
3554                 break;
3555             }
3556         }
3557         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3558             /* adjust pos to the start of a UTF8 char sequence */
3559             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3560             if (mg) {
3561                 I32 pos = mg->mg_len;
3562                 if (pos > 0) {
3563                     for (c = start + pos; c > start; c--) {
3564                         if (UTF8_IS_START(*c))
3565                             break;
3566                     }
3567                     mg->mg_len  = c - start;
3568                 }
3569             }
3570             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3571                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3572         }
3573     }
3574     return TRUE;
3575 }
3576
3577 /*
3578 =for apidoc sv_setsv
3579
3580 Copies the contents of the source SV C<ssv> into the destination SV
3581 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3582 function if the source SV needs to be reused.  Does not handle 'set' magic.
3583 Loosely speaking, it performs a copy-by-value, obliterating any previous
3584 content of the destination.
3585
3586 You probably want to use one of the assortment of wrappers, such as
3587 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3588 C<SvSetMagicSV_nosteal>.
3589
3590 =for apidoc sv_setsv_flags
3591
3592 Copies the contents of the source SV C<ssv> into the destination SV
3593 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3594 function if the source SV needs to be reused.  Does not handle 'set' magic.
3595 Loosely speaking, it performs a copy-by-value, obliterating any previous
3596 content of the destination.
3597 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3598 C<ssv> if appropriate, else not.  If the C<flags>
3599 parameter has the C<NOSTEAL> bit set then the
3600 buffers of temps will not be stolen.  <sv_setsv>
3601 and C<sv_setsv_nomg> are implemented in terms of this function.
3602
3603 You probably want to use one of the assortment of wrappers, such as
3604 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3605 C<SvSetMagicSV_nosteal>.
3606
3607 This is the primary function for copying scalars, and most other
3608 copy-ish functions and macros use this underneath.
3609
3610 =cut
3611 */
3612
3613 static void
3614 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3615 {
3616     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3617     HV *old_stash = NULL;
3618
3619     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3620
3621     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3622         const char * const name = GvNAME(sstr);
3623         const STRLEN len = GvNAMELEN(sstr);
3624         {
3625             if (dtype >= SVt_PV) {
3626                 SvPV_free(dstr);
3627                 SvPV_set(dstr, 0);
3628                 SvLEN_set(dstr, 0);
3629                 SvCUR_set(dstr, 0);
3630             }
3631             SvUPGRADE(dstr, SVt_PVGV);
3632             (void)SvOK_off(dstr);
3633             /* We have to turn this on here, even though we turn it off
3634                below, as GvSTASH will fail an assertion otherwise. */
3635             isGV_with_GP_on(dstr);
3636         }
3637         GvSTASH(dstr) = GvSTASH(sstr);
3638         if (GvSTASH(dstr))
3639             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3640         gv_name_set(MUTABLE_GV(dstr), name, len,
3641                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3642         SvFAKE_on(dstr);        /* can coerce to non-glob */
3643     }
3644
3645     if(GvGP(MUTABLE_GV(sstr))) {
3646         /* If source has method cache entry, clear it */
3647         if(GvCVGEN(sstr)) {
3648             SvREFCNT_dec(GvCV(sstr));
3649             GvCV_set(sstr, NULL);
3650             GvCVGEN(sstr) = 0;
3651         }
3652         /* If source has a real method, then a method is
3653            going to change */
3654         else if(
3655          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3656         ) {
3657             mro_changes = 1;
3658         }
3659     }
3660
3661     /* If dest already had a real method, that's a change as well */
3662     if(
3663         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3664      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3665     ) {
3666         mro_changes = 1;
3667     }
3668
3669     /* We don't need to check the name of the destination if it was not a
3670        glob to begin with. */
3671     if(dtype == SVt_PVGV) {
3672         const char * const name = GvNAME((const GV *)dstr);
3673         if(
3674             strEQ(name,"ISA")
3675          /* The stash may have been detached from the symbol table, so
3676             check its name. */
3677          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3678         )
3679             mro_changes = 2;
3680         else {
3681             const STRLEN len = GvNAMELEN(dstr);
3682             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3683              || (len == 1 && name[0] == ':')) {
3684                 mro_changes = 3;
3685
3686                 /* Set aside the old stash, so we can reset isa caches on
3687                    its subclasses. */
3688                 if((old_stash = GvHV(dstr)))
3689                     /* Make sure we do not lose it early. */
3690                     SvREFCNT_inc_simple_void_NN(
3691                      sv_2mortal((SV *)old_stash)
3692                     );
3693             }
3694         }
3695     }
3696
3697     gp_free(MUTABLE_GV(dstr));
3698     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3699     (void)SvOK_off(dstr);
3700     isGV_with_GP_on(dstr);
3701     GvINTRO_off(dstr);          /* one-shot flag */
3702     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3703     if (SvTAINTED(sstr))
3704         SvTAINT(dstr);
3705     if (GvIMPORTED(dstr) != GVf_IMPORTED
3706         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3707         {
3708             GvIMPORTED_on(dstr);
3709         }
3710     GvMULTI_on(dstr);
3711     if(mro_changes == 2) {
3712       if (GvAV((const GV *)sstr)) {
3713         MAGIC *mg;
3714         SV * const sref = (SV *)GvAV((const GV *)dstr);
3715         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3716             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3717                 AV * const ary = newAV();
3718                 av_push(ary, mg->mg_obj); /* takes the refcount */
3719                 mg->mg_obj = (SV *)ary;
3720             }
3721             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3722         }
3723         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3724       }
3725       mro_isa_changed_in(GvSTASH(dstr));
3726     }
3727     else if(mro_changes == 3) {
3728         HV * const stash = GvHV(dstr);
3729         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3730             mro_package_moved(
3731                 stash, old_stash,
3732                 (GV *)dstr, 0
3733             );
3734     }
3735     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3736     return;
3737 }
3738
3739 static void
3740 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3741 {
3742     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3743     SV *dref = NULL;
3744     const int intro = GvINTRO(dstr);
3745     SV **location;
3746     U8 import_flag = 0;
3747     const U32 stype = SvTYPE(sref);
3748
3749     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3750
3751     if (intro) {
3752         GvINTRO_off(dstr);      /* one-shot flag */
3753         GvLINE(dstr) = CopLINE(PL_curcop);
3754         GvEGV(dstr) = MUTABLE_GV(dstr);
3755     }
3756     GvMULTI_on(dstr);
3757     switch (stype) {
3758     case SVt_PVCV:
3759         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3760         import_flag = GVf_IMPORTED_CV;
3761         goto common;
3762     case SVt_PVHV:
3763         location = (SV **) &GvHV(dstr);
3764         import_flag = GVf_IMPORTED_HV;
3765         goto common;
3766     case SVt_PVAV:
3767         location = (SV **) &GvAV(dstr);
3768         import_flag = GVf_IMPORTED_AV;
3769         goto common;
3770     case SVt_PVIO:
3771         location = (SV **) &GvIOp(dstr);
3772         goto common;
3773     case SVt_PVFM:
3774         location = (SV **) &GvFORM(dstr);
3775         goto common;
3776     default:
3777         location = &GvSV(dstr);
3778         import_flag = GVf_IMPORTED_SV;
3779     common:
3780         if (intro) {
3781             if (stype == SVt_PVCV) {
3782                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3783                 if (GvCVGEN(dstr)) {
3784                     SvREFCNT_dec(GvCV(dstr));
3785                     GvCV_set(dstr, NULL);
3786                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3787                 }
3788             }
3789             SAVEGENERICSV(*location);
3790         }
3791         else
3792             dref = *location;
3793         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3794             CV* const cv = MUTABLE_CV(*location);
3795             if (cv) {
3796                 if (!GvCVGEN((const GV *)dstr) &&
3797                     (CvROOT(cv) || CvXSUB(cv)) &&
3798                     /* redundant check that avoids creating the extra SV
3799                        most of the time: */
3800                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3801                     {
3802                         SV * const new_const_sv =
3803                             CvCONST((const CV *)sref)
3804                                  ? cv_const_sv((const CV *)sref)
3805                                  : NULL;
3806                         report_redefined_cv(
3807                            sv_2mortal(Perl_newSVpvf(aTHX_
3808                                 "%"HEKf"::%"HEKf,
3809                                 HEKfARG(
3810                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3811                                 ),
3812                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3813                            )),
3814                            cv,
3815                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3816                         );
3817                     }
3818                 if (!intro)
3819                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3820                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3821                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3822                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3823             }
3824             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3825             GvASSUMECV_on(dstr);
3826             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3827         }
3828         *location = sref;
3829         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3830             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3831             GvFLAGS(dstr) |= import_flag;
3832         }
3833         if (stype == SVt_PVHV) {
3834             const char * const name = GvNAME((GV*)dstr);
3835             const STRLEN len = GvNAMELEN(dstr);
3836             if (
3837                 (
3838                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3839                 || (len == 1 && name[0] == ':')
3840                 )
3841              && (!dref || HvENAME_get(dref))
3842             ) {
3843                 mro_package_moved(
3844                     (HV *)sref, (HV *)dref,
3845                     (GV *)dstr, 0
3846                 );
3847             }
3848         }
3849         else if (
3850             stype == SVt_PVAV && sref != dref
3851          && strEQ(GvNAME((GV*)dstr), "ISA")
3852          /* The stash may have been detached from the symbol table, so
3853             check its name before doing anything. */
3854          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3855         ) {
3856             MAGIC *mg;
3857             MAGIC * const omg = dref && SvSMAGICAL(dref)
3858                                  ? mg_find(dref, PERL_MAGIC_isa)
3859                                  : NULL;
3860             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3861                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3862                     AV * const ary = newAV();
3863                     av_push(ary, mg->mg_obj); /* takes the refcount */
3864                     mg->mg_obj = (SV *)ary;
3865                 }
3866                 if (omg) {
3867                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3868                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3869                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3870                         while (items--)
3871                             av_push(
3872                              (AV *)mg->mg_obj,
3873                              SvREFCNT_inc_simple_NN(*svp++)
3874                             );
3875                     }
3876                     else
3877                         av_push(
3878                          (AV *)mg->mg_obj,
3879                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3880                         );
3881                 }
3882                 else
3883                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3884             }
3885             else
3886             {
3887                 sv_magic(
3888                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3889                 );
3890                 mg = mg_find(sref, PERL_MAGIC_isa);
3891             }
3892             /* Since the *ISA assignment could have affected more than
3893                one stash, don't call mro_isa_changed_in directly, but let
3894                magic_clearisa do it for us, as it already has the logic for
3895                dealing with globs vs arrays of globs. */
3896             assert(mg);
3897             Perl_magic_clearisa(aTHX_ NULL, mg);
3898         }
3899         else if (stype == SVt_PVIO) {
3900             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
3901             /* It's a cache. It will rebuild itself quite happily.
3902                It's a lot of effort to work out exactly which key (or keys)
3903                might be invalidated by the creation of the this file handle.
3904             */
3905             hv_clear(PL_stashcache);
3906         }
3907         break;
3908     }
3909     SvREFCNT_dec(dref);
3910     if (SvTAINTED(sstr))
3911         SvTAINT(dstr);
3912     return;
3913 }
3914
3915 void
3916 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3917 {
3918     dVAR;
3919     U32 sflags;
3920     int dtype;
3921     svtype stype;
3922
3923     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3924
3925     if (sstr == dstr)
3926         return;
3927
3928     if (SvIS_FREED(dstr)) {
3929         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3930                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3931     }
3932     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3933     if (!sstr)
3934         sstr = &PL_sv_undef;
3935     if (SvIS_FREED(sstr)) {
3936         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3937                    (void*)sstr, (void*)dstr);
3938     }
3939     stype = SvTYPE(sstr);
3940     dtype = SvTYPE(dstr);
3941
3942     /* There's a lot of redundancy below but we're going for speed here */
3943
3944     switch (stype) {
3945     case SVt_NULL:
3946       undef_sstr:
3947         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3948             (void)SvOK_off(dstr);
3949             return;
3950         }
3951         break;
3952     case SVt_IV:
3953         if (SvIOK(sstr)) {
3954             switch (dtype) {
3955             case SVt_NULL:
3956                 sv_upgrade(dstr, SVt_IV);
3957                 break;
3958             case SVt_NV:
3959             case SVt_PV:
3960                 sv_upgrade(dstr, SVt_PVIV);
3961                 break;
3962             case SVt_PVGV:
3963             case SVt_PVLV:
3964                 goto end_of_first_switch;
3965             }
3966             (void)SvIOK_only(dstr);
3967             SvIV_set(dstr,  SvIVX(sstr));
3968             if (SvIsUV(sstr))
3969                 SvIsUV_on(dstr);
3970             /* SvTAINTED can only be true if the SV has taint magic, which in
3971                turn means that the SV type is PVMG (or greater). This is the
3972                case statement for SVt_IV, so this cannot be true (whatever gcov
3973                may say).  */
3974             assert(!SvTAINTED(sstr));
3975             return;
3976         }
3977         if (!SvROK(sstr))
3978             goto undef_sstr;
3979         if (dtype < SVt_PV && dtype != SVt_IV)
3980             sv_upgrade(dstr, SVt_IV);
3981         break;
3982
3983     case SVt_NV:
3984         if (SvNOK(sstr)) {
3985             switch (dtype) {
3986             case SVt_NULL:
3987             case SVt_IV:
3988                 sv_upgrade(dstr, SVt_NV);
3989                 break;
3990             case SVt_PV:
3991             case SVt_PVIV:
3992                 sv_upgrade(dstr, SVt_PVNV);
3993                 break;
3994             case SVt_PVGV:
3995             case SVt_PVLV:
3996                 goto end_of_first_switch;
3997             }
3998             SvNV_set(dstr, SvNVX(sstr));
3999             (void)SvNOK_only(dstr);
4000             /* SvTAINTED can only be true if the SV has taint magic, which in
4001                turn means that the SV type is PVMG (or greater). This is the
4002                case statement for SVt_NV, so this cannot be true (whatever gcov
4003                may say).  */
4004             assert(!SvTAINTED(sstr));
4005             return;
4006         }
4007         goto undef_sstr;
4008
4009     case SVt_PV:
4010         if (dtype < SVt_PV)
4011             sv_upgrade(dstr, SVt_PV);
4012         break;
4013     case SVt_PVIV:
4014         if (dtype < SVt_PVIV)
4015             sv_upgrade(dstr, SVt_PVIV);
4016         break;
4017     case SVt_PVNV:
4018         if (dtype < SVt_PVNV)
4019             sv_upgrade(dstr, SVt_PVNV);
4020         break;
4021     default:
4022         {
4023         const char * const type = sv_reftype(sstr,0);
4024         if (PL_op)
4025             /* diag_listed_as: Bizarre copy of %s */
4026             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4027         else
4028             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4029         }
4030         break;
4031
4032     case SVt_REGEXP:
4033       upgregexp:
4034         if (dtype < SVt_REGEXP)
4035         {
4036             if (dtype >= SVt_PV) {
4037                 SvPV_free(dstr);
4038                 SvPV_set(dstr, 0);
4039                 SvLEN_set(dstr, 0);
4040                 SvCUR_set(dstr, 0);
4041             }
4042             sv_upgrade(dstr, SVt_REGEXP);
4043         }
4044         break;
4045
4046         /* case SVt_BIND: */
4047     case SVt_PVLV:
4048     case SVt_PVGV:
4049     case SVt_PVMG:
4050         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4051             mg_get(sstr);
4052             if (SvTYPE(sstr) != stype)
4053                 stype = SvTYPE(sstr);
4054         }
4055         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4056                     glob_assign_glob(dstr, sstr, dtype);
4057                     return;
4058         }
4059         if (stype == SVt_PVLV)
4060         {
4061             if (isREGEXP(sstr)) goto upgregexp;
4062             SvUPGRADE(dstr, SVt_PVNV);
4063         }
4064         else
4065             SvUPGRADE(dstr, (svtype)stype);
4066     }
4067  end_of_first_switch:
4068
4069     /* dstr may have been upgraded.  */
4070     dtype = SvTYPE(dstr);
4071     sflags = SvFLAGS(sstr);
4072
4073     if (dtype == SVt_PVCV) {
4074         /* Assigning to a subroutine sets the prototype.  */
4075         if (SvOK(sstr)) {
4076             STRLEN len;
4077             const char *const ptr = SvPV_const(sstr, len);
4078
4079             SvGROW(dstr, len + 1);
4080             Copy(ptr, SvPVX(dstr), len + 1, char);
4081             SvCUR_set(dstr, len);
4082             SvPOK_only(dstr);
4083             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4084             CvAUTOLOAD_off(dstr);
4085         } else {
4086             SvOK_off(dstr);
4087         }
4088     }
4089     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4090         const char * const type = sv_reftype(dstr,0);
4091         if (PL_op)
4092             /* diag_listed_as: Cannot copy to %s */
4093             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4094         else
4095             Perl_croak(aTHX_ "Cannot copy to %s", type);
4096     } else if (sflags & SVf_ROK) {
4097         if (isGV_with_GP(dstr)
4098             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4099             sstr = SvRV(sstr);
4100             if (sstr == dstr) {
4101                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4102                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4103                 {
4104                     GvIMPORTED_on(dstr);
4105                 }
4106                 GvMULTI_on(dstr);
4107                 return;
4108             }
4109             glob_assign_glob(dstr, sstr, dtype);
4110             return;
4111         }
4112
4113         if (dtype >= SVt_PV) {
4114             if (isGV_with_GP(dstr)) {
4115                 glob_assign_ref(dstr, sstr);
4116                 return;
4117             }
4118             if (SvPVX_const(dstr)) {
4119                 SvPV_free(dstr);
4120                 SvLEN_set(dstr, 0);
4121                 SvCUR_set(dstr, 0);
4122             }
4123         }
4124         (void)SvOK_off(dstr);
4125         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4126         SvFLAGS(dstr) |= sflags & SVf_ROK;
4127         assert(!(sflags & SVp_NOK));
4128         assert(!(sflags & SVp_IOK));
4129         assert(!(sflags & SVf_NOK));
4130         assert(!(sflags & SVf_IOK));
4131     }
4132     else if (isGV_with_GP(dstr)) {
4133         if (!(sflags & SVf_OK)) {
4134             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4135                            "Undefined value assigned to typeglob");
4136         }
4137         else {
4138             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4139             if (dstr != (const SV *)gv) {
4140                 const char * const name = GvNAME((const GV *)dstr);
4141                 const STRLEN len = GvNAMELEN(dstr);
4142                 HV *old_stash = NULL;
4143                 bool reset_isa = FALSE;
4144                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4145                  || (len == 1 && name[0] == ':')) {
4146                     /* Set aside the old stash, so we can reset isa caches
4147                        on its subclasses. */
4148                     if((old_stash = GvHV(dstr))) {
4149                         /* Make sure we do not lose it early. */
4150                         SvREFCNT_inc_simple_void_NN(
4151                          sv_2mortal((SV *)old_stash)
4152                         );
4153                     }
4154                     reset_isa = TRUE;
4155                 }
4156
4157                 if (GvGP(dstr))
4158                     gp_free(MUTABLE_GV(dstr));
4159                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4160
4161                 if (reset_isa) {
4162                     HV * const stash = GvHV(dstr);
4163                     if(
4164                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4165                     )
4166                         mro_package_moved(
4167                          stash, old_stash,
4168                          (GV *)dstr, 0
4169                         );
4170                 }
4171             }
4172         }
4173     }
4174     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4175           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4176         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4177     }
4178     else if (sflags & SVp_POK) {
4179         bool isSwipe = 0;
4180
4181         /*
4182          * Check to see if we can just swipe the string.  If so, it's a
4183          * possible small lose on short strings, but a big win on long ones.
4184          * It might even be a win on short strings if SvPVX_const(dstr)
4185          * has to be allocated and SvPVX_const(sstr) has to be freed.
4186          * Likewise if we can set up COW rather than doing an actual copy, we
4187          * drop to the else clause, as the swipe code and the COW setup code
4188          * have much in common.
4189          */
4190
4191         /* Whichever path we take through the next code, we want this true,
4192            and doing it now facilitates the COW check.  */
4193         (void)SvPOK_only(dstr);
4194
4195         if (
4196             /* If we're already COW then this clause is not true, and if COW
4197                is allowed then we drop down to the else and make dest COW 
4198                with us.  If caller hasn't said that we're allowed to COW
4199                shared hash keys then we don't do the COW setup, even if the
4200                source scalar is a shared hash key scalar.  */
4201             (((flags & SV_COW_SHARED_HASH_KEYS)
4202                ? !(sflags & SVf_IsCOW)
4203                : 1 /* If making a COW copy is forbidden then the behaviour we
4204                        desire is as if the source SV isn't actually already
4205                        COW, even if it is.  So we act as if the source flags
4206                        are not COW, rather than actually testing them.  */
4207               )
4208 #ifndef PERL_OLD_COPY_ON_WRITE
4209              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4210                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4211                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4212                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4213                 but in turn, it's somewhat dead code, never expected to go
4214                 live, but more kept as a placeholder on how to do it better
4215                 in a newer implementation.  */
4216              /* If we are COW and dstr is a suitable target then we drop down
4217                 into the else and make dest a COW of us.  */
4218              || (SvFLAGS(dstr) & SVf_BREAK)
4219 #endif
4220              )
4221             &&
4222             !(isSwipe =
4223                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4224                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4225                  (!(flags & SV_NOSTEAL)) &&
4226                                         /* and we're allowed to steal temps */
4227                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4228                  SvLEN(sstr))             /* and really is a string */
4229 #ifdef PERL_OLD_COPY_ON_WRITE
4230             && ((flags & SV_COW_SHARED_HASH_KEYS)
4231                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4232                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4233                      && SvTYPE(sstr) >= SVt_PVIV))
4234                 : 1)
4235 #endif
4236             ) {
4237             /* Failed the swipe test, and it's not a shared hash key either.
4238                Have to copy the string.  */
4239             STRLEN len = SvCUR(sstr);
4240             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4241             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4242             SvCUR_set(dstr, len);
4243             *SvEND(dstr) = '\0';
4244         } else {
4245             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4246                be true in here.  */
4247             /* Either it's a shared hash key, or it's suitable for
4248                copy-on-write or we can swipe the string.  */
4249             if (DEBUG_C_TEST) {
4250                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4251                 sv_dump(sstr);
4252                 sv_dump(dstr);
4253             }
4254 #ifdef PERL_OLD_COPY_ON_WRITE
4255             if (!isSwipe) {
4256                 if (!(sflags & SVf_IsCOW)) {
4257                     SvIsCOW_on(sstr);
4258                     /* Make the source SV into a loop of 1.
4259                        (about to become 2) */
4260                     SV_COW_NEXT_SV_SET(sstr, sstr);
4261                 }
4262             }
4263 #endif
4264             /* Initial code is common.  */
4265             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4266                 SvPV_free(dstr);
4267             }
4268
4269             if (!isSwipe) {
4270                 /* making another shared SV.  */
4271                 STRLEN cur = SvCUR(sstr);
4272                 STRLEN len = SvLEN(sstr);
4273 #ifdef PERL_OLD_COPY_ON_WRITE
4274                 if (len) {
4275                     assert (SvTYPE(dstr) >= SVt_PVIV);
4276                     /* SvIsCOW_normal */
4277                     /* splice us in between source and next-after-source.  */
4278                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4279                     SV_COW_NEXT_SV_SET(sstr, dstr);
4280                     SvPV_set(dstr, SvPVX_mutable(sstr));
4281                 } else
4282 #endif
4283                 {
4284                     /* SvIsCOW_shared_hash */
4285                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4286                                           "Copy on write: Sharing hash\n"));
4287
4288                     assert (SvTYPE(dstr) >= SVt_PV);
4289                     SvPV_set(dstr,
4290                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4291                 }
4292                 SvLEN_set(dstr, len);
4293                 SvCUR_set(dstr, cur);
4294                 SvIsCOW_on(dstr);
4295             }
4296             else
4297                 {       /* Passes the swipe test.  */
4298                 SvPV_set(dstr, SvPVX_mutable(sstr));
4299                 SvLEN_set(dstr, SvLEN(sstr));
4300                 SvCUR_set(dstr, SvCUR(sstr));
4301
4302                 SvTEMP_off(dstr);
4303                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4304                 SvPV_set(sstr, NULL);
4305                 SvLEN_set(sstr, 0);
4306                 SvCUR_set(sstr, 0);
4307                 SvTEMP_off(sstr);
4308             }
4309         }
4310         if (sflags & SVp_NOK) {
4311             SvNV_set(dstr, SvNVX(sstr));
4312         }
4313         if (sflags & SVp_IOK) {
4314             SvIV_set(dstr, SvIVX(sstr));
4315             /* Must do this otherwise some other overloaded use of 0x80000000
4316                gets confused. I guess SVpbm_VALID */
4317             if (sflags & SVf_IVisUV)
4318                 SvIsUV_on(dstr);
4319         }
4320         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4321         {
4322             const MAGIC * const smg = SvVSTRING_mg(sstr);
4323             if (smg) {
4324                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4325                          smg->mg_ptr, smg->mg_len);
4326                 SvRMAGICAL_on(dstr);
4327             }
4328         }
4329     }
4330     else if (sflags & (SVp_IOK|SVp_NOK)) {
4331         (void)SvOK_off(dstr);
4332         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4333         if (sflags & SVp_IOK) {
4334             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4335             SvIV_set(dstr, SvIVX(sstr));
4336         }
4337         if (sflags & SVp_NOK) {
4338             SvNV_set(dstr, SvNVX(sstr));
4339         }
4340     }
4341     else {
4342         if (isGV_with_GP(sstr)) {
4343             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4344         }
4345         else
4346             (void)SvOK_off(dstr);
4347     }
4348     if (SvTAINTED(sstr))
4349         SvTAINT(dstr);
4350 }
4351
4352 /*
4353 =for apidoc sv_setsv_mg
4354
4355 Like C<sv_setsv>, but also handles 'set' magic.
4356
4357 =cut
4358 */
4359
4360 void
4361 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4362 {
4363     PERL_ARGS_ASSERT_SV_SETSV_MG;
4364
4365     sv_setsv(dstr,sstr);
4366     SvSETMAGIC(dstr);
4367 }
4368
4369 #ifdef PERL_OLD_COPY_ON_WRITE
4370 SV *
4371 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4372 {
4373     STRLEN cur = SvCUR(sstr);
4374     STRLEN len = SvLEN(sstr);
4375     char *new_pv;
4376
4377     PERL_ARGS_ASSERT_SV_SETSV_COW;
4378
4379     if (DEBUG_C_TEST) {
4380         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4381                       (void*)sstr, (void*)dstr);
4382         sv_dump(sstr);
4383         if (dstr)
4384                     sv_dump(dstr);
4385     }
4386
4387     if (dstr) {
4388         if (SvTHINKFIRST(dstr))
4389             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4390         else if (SvPVX_const(dstr))
4391             Safefree(SvPVX_mutable(dstr));
4392     }
4393     else
4394         new_SV(dstr);
4395     SvUPGRADE(dstr, SVt_PVIV);
4396
4397     assert (SvPOK(sstr));
4398     assert (SvPOKp(sstr));
4399     assert (!SvIOK(sstr));
4400     assert (!SvIOKp(sstr));
4401     assert (!SvNOK(sstr));
4402     assert (!SvNOKp(sstr));
4403
4404     if (SvIsCOW(sstr)) {
4405
4406         if (SvLEN(sstr) == 0) {
4407             /* source is a COW shared hash key.  */
4408             DEBUG_C(PerlIO_printf(Perl_debug_log,
4409                                   "Fast copy on write: Sharing hash\n"));
4410             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4411             goto common_exit;
4412         }
4413         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4414     } else {
4415         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4416         SvUPGRADE(sstr, SVt_PVIV);
4417         SvIsCOW_on(sstr);
4418         DEBUG_C(PerlIO_printf(Perl_debug_log,
4419                               "Fast copy on write: Converting sstr to COW\n"));
4420         SV_COW_NEXT_SV_SET(dstr, sstr);
4421     }
4422     SV_COW_NEXT_SV_SET(sstr, dstr);
4423     new_pv = SvPVX_mutable(sstr);
4424
4425   common_exit:
4426     SvPV_set(dstr, new_pv);
4427     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_IsCOW);
4428     if (SvUTF8(sstr))
4429         SvUTF8_on(dstr);
4430     SvLEN_set(dstr, len);
4431     SvCUR_set(dstr, cur);
4432     if (DEBUG_C_TEST) {
4433         sv_dump(dstr);
4434     }
4435     return dstr;
4436 }
4437 #endif
4438
4439 /*
4440 =for apidoc sv_setpvn
4441
4442 Copies a string into an SV.  The C<len> parameter indicates the number of
4443 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4444 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4445
4446 =cut
4447 */
4448
4449 void
4450 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4451 {
4452     dVAR;
4453     char *dptr;
4454
4455     PERL_ARGS_ASSERT_SV_SETPVN;
4456
4457     SV_CHECK_THINKFIRST_COW_DROP(sv);
4458     if (!ptr) {
4459         (void)SvOK_off(sv);
4460         return;
4461     }
4462     else {
4463         /* len is STRLEN which is unsigned, need to copy to signed */
4464         const IV iv = len;
4465         if (iv < 0)
4466             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4467                        IVdf, iv);
4468     }
4469     SvUPGRADE(sv, SVt_PV);
4470
4471     dptr = SvGROW(sv, len + 1);
4472     Move(ptr,dptr,len,char);
4473     dptr[len] = '\0';
4474     SvCUR_set(sv, len);
4475     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4476     SvTAINT(sv);
4477     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4478 }
4479
4480 /*
4481 =for apidoc sv_setpvn_mg
4482
4483 Like C<sv_setpvn>, but also handles 'set' magic.
4484
4485 =cut
4486 */
4487
4488 void
4489 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4490 {
4491     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4492
4493     sv_setpvn(sv,ptr,len);
4494     SvSETMAGIC(sv);
4495 }
4496
4497 /*
4498 =for apidoc sv_setpv
4499
4500 Copies a string into an SV.  The string must be null-terminated.  Does not
4501 handle 'set' magic.  See C<sv_setpv_mg>.
4502
4503 =cut
4504 */
4505
4506 void
4507 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4508 {
4509     dVAR;
4510     STRLEN len;
4511
4512     PERL_ARGS_ASSERT_SV_SETPV;
4513
4514     SV_CHECK_THINKFIRST_COW_DROP(sv);
4515     if (!ptr) {
4516         (void)SvOK_off(sv);
4517         return;
4518     }
4519     len = strlen(ptr);
4520     SvUPGRADE(sv, SVt_PV);
4521
4522     SvGROW(sv, len + 1);
4523     Move(ptr,SvPVX(sv),len+1,char);
4524     SvCUR_set(sv, len);
4525     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4526     SvTAINT(sv);
4527     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4528 }
4529
4530 /*
4531 =for apidoc sv_setpv_mg
4532
4533 Like C<sv_setpv>, but also handles 'set' magic.
4534
4535 =cut
4536 */
4537
4538 void
4539 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4540 {
4541     PERL_ARGS_ASSERT_SV_SETPV_MG;
4542
4543     sv_setpv(sv,ptr);
4544     SvSETMAGIC(sv);
4545 }
4546
4547 void
4548 Perl_sv_sethek(pTHX_ register SV *const sv, const HEK *const hek)
4549 {
4550     dVAR;
4551
4552     PERL_ARGS_ASSERT_SV_SETHEK;
4553
4554     if (!hek) {
4555         return;
4556     }
4557
4558     if (HEK_LEN(hek) == HEf_SVKEY) {
4559         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4560         return;
4561     } else {
4562         const int flags = HEK_FLAGS(hek);
4563         if (flags & HVhek_WASUTF8) {
4564             STRLEN utf8_len = HEK_LEN(hek);
4565             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4566             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4567             SvUTF8_on(sv);
4568             return;
4569         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
4570             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4571             if (HEK_UTF8(hek))
4572                 SvUTF8_on(sv);
4573             else SvUTF8_off(sv);
4574             return;
4575         }
4576         {
4577             SV_CHECK_THINKFIRST_COW_DROP(sv);
4578             SvUPGRADE(sv, SVt_PV);
4579             Safefree(SvPVX(sv));
4580             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4581             SvCUR_set(sv, HEK_LEN(hek));
4582             SvLEN_set(sv, 0);
4583             SvIsCOW_on(sv);
4584             SvPOK_on(sv);
4585             if (HEK_UTF8(hek))
4586                 SvUTF8_on(sv);
4587             else SvUTF8_off(sv);
4588             return;
4589         }
4590     }
4591 }
4592
4593
4594 /*
4595 =for apidoc sv_usepvn_flags
4596
4597 Tells an SV to use C<ptr> to find its string value.  Normally the
4598 string is stored inside the SV but sv_usepvn allows the SV to use an
4599 outside string.  The C<ptr> should point to memory that was allocated
4600 by C<malloc>.  It must be the start of a mallocked block
4601 of memory, and not a pointer to the middle of it.  The
4602 string length, C<len>, must be supplied.  By default
4603 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4604 so that pointer should not be freed or used by the programmer after
4605 giving it to sv_usepvn, and neither should any pointers from "behind"
4606 that pointer (e.g. ptr + 1) be used.
4607
4608 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4609 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4610 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4611 C<len>, and already meets the requirements for storing in C<SvPVX>).
4612
4613 =cut
4614 */
4615
4616 void
4617 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4618 {
4619     dVAR;
4620     STRLEN allocate;
4621
4622     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4623
4624     SV_CHECK_THINKFIRST_COW_DROP(sv);
4625     SvUPGRADE(sv, SVt_PV);
4626     if (!ptr) {
4627         (void)SvOK_off(sv);
4628         if (flags & SV_SMAGIC)
4629             SvSETMAGIC(sv);
4630         return;
4631     }
4632     if (SvPVX_const(sv))
4633         SvPV_free(sv);
4634
4635 #ifdef DEBUGGING
4636     if (flags & SV_HAS_TRAILING_NUL)
4637         assert(ptr[len] == '\0');
4638 #endif
4639
4640     allocate = (flags & SV_HAS_TRAILING_NUL)
4641         ? len + 1 :
4642 #ifdef Perl_safesysmalloc_size
4643         len + 1;
4644 #else 
4645         PERL_STRLEN_ROUNDUP(len + 1);
4646 #endif
4647     if (flags & SV_HAS_TRAILING_NUL) {
4648         /* It's long enough - do nothing.
4649            Specifically Perl_newCONSTSUB is relying on this.  */
4650     } else {
4651 #ifdef DEBUGGING
4652         /* Force a move to shake out bugs in callers.  */
4653         char *new_ptr = (char*)safemalloc(allocate);
4654         Copy(ptr, new_ptr, len, char);
4655         PoisonFree(ptr,len,char);
4656         Safefree(ptr);
4657         ptr = new_ptr;
4658 #else
4659         ptr = (char*) saferealloc (ptr, allocate);
4660 #endif
4661     }
4662 #ifdef Perl_safesysmalloc_size
4663     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4664 #else
4665     SvLEN_set(sv, allocate);
4666 #endif
4667     SvCUR_set(sv, len);
4668     SvPV_set(sv, ptr);
4669     if (!(flags & SV_HAS_TRAILING_NUL)) {
4670         ptr[len] = '\0';
4671     }
4672     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4673     SvTAINT(sv);
4674     if (flags & SV_SMAGIC)
4675         SvSETMAGIC(sv);
4676 }
4677
4678 #ifdef PERL_OLD_COPY_ON_WRITE
4679 /* Need to do this *after* making the SV normal, as we need the buffer
4680    pointer to remain valid until after we've copied it.  If we let go too early,
4681    another thread could invalidate it by unsharing last of the same hash key
4682    (which it can do by means other than releasing copy-on-write Svs)
4683    or by changing the other copy-on-write SVs in the loop.  */
4684 STATIC void
4685 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4686 {
4687     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4688
4689     { /* this SV was SvIsCOW_normal(sv) */
4690          /* we need to find the SV pointing to us.  */
4691         SV *current = SV_COW_NEXT_SV(after);
4692
4693         if (current == sv) {
4694             /* The SV we point to points back to us (there were only two of us
4695                in the loop.)
4696                Hence other SV is no longer copy on write either.  */
4697             SvIsCOW_off(after);
4698         } else {
4699             /* We need to follow the pointers around the loop.  */
4700             SV *next;
4701             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4702                 assert (next);
4703                 current = next;
4704                  /* don't loop forever if the structure is bust, and we have
4705                     a pointer into a closed loop.  */
4706                 assert (current != after);
4707                 assert (SvPVX_const(current) == pvx);
4708             }
4709             /* Make the SV before us point to the SV after us.  */
4710             SV_COW_NEXT_SV_SET(current, after);
4711         }
4712     }
4713 }
4714 #endif
4715 /*
4716 =for apidoc sv_force_normal_flags
4717
4718 Undo various types of fakery on an SV, where fakery means
4719 "more than" a string: if the PV is a shared string, make
4720 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4721 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4722 we do the copy, and is also used locally; if this is a
4723 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4724 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4725 SvPOK_off rather than making a copy.  (Used where this
4726 scalar is about to be set to some other value.)  In addition,
4727 the C<flags> parameter gets passed to C<sv_unref_flags()>
4728 when unreffing.  C<sv_force_normal> calls this function
4729 with flags set to 0.
4730
4731 =cut
4732 */
4733
4734 void
4735 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4736 {
4737     dVAR;
4738
4739     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4740
4741 #ifdef PERL_OLD_COPY_ON_WRITE
4742     if (SvREADONLY(sv)) {
4743         if (IN_PERL_RUNTIME)
4744             Perl_croak_no_modify(aTHX);
4745     }
4746     else
4747         if (SvIsCOW(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             SvIsCOW_off(sv);
4763             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4764             SvPV_set(sv, NULL);
4765             SvLEN_set(sv, 0);
4766             if (flags & SV_COW_DROP_PV) {
4767                 /* OK, so we don't need to copy our buffer.  */
4768                 SvPOK_off(sv);
4769             } else {
4770                 SvGROW(sv, cur + 1);
4771                 Move(pvx,SvPVX(sv),cur,char);
4772                 SvCUR_set(sv, cur);
4773                 *SvEND(sv) = '\0';
4774             }
4775             if (len) {
4776                 sv_release_COW(sv, pvx, next);
4777             } else {
4778                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4779             }
4780             if (DEBUG_C_TEST) {
4781                 sv_dump(sv);
4782             }
4783         }
4784 #else
4785     if (SvREADONLY(sv)) {
4786         if (IN_PERL_RUNTIME)
4787             Perl_croak_no_modify();
4788     }
4789     else
4790         if (SvIsCOW(sv)) {
4791             const char * const pvx = SvPVX_const(sv);
4792             const STRLEN len = SvCUR(sv);
4793             SvIsCOW_off(sv);
4794             SvPV_set(sv, NULL);
4795             SvLEN_set(sv, 0);
4796             if (flags & SV_COW_DROP_PV) {
4797                 /* OK, so we don't need to copy our buffer.  */
4798                 SvPOK_off(sv);
4799             } else {
4800                 SvGROW(sv, len + 1);
4801                 Move(pvx,SvPVX(sv),len,char);
4802                 *SvEND(sv) = '\0';
4803             }
4804             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4805         }
4806 #endif
4807     if (SvROK(sv))
4808         sv_unref_flags(sv, flags);
4809     else if (SvFAKE(sv) && isGV_with_GP(sv))
4810         sv_unglob(sv, flags);
4811     else if (SvFAKE(sv) && isREGEXP(sv)) {
4812         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4813            to sv_unglob. We only need it here, so inline it.  */
4814         const bool islv = SvTYPE(sv) == SVt_PVLV;
4815         const svtype new_type =
4816           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4817         SV *const temp = newSV_type(new_type);
4818         regexp *const temp_p = ReANY((REGEXP *)sv);
4819
4820         if (new_type == SVt_PVMG) {
4821             SvMAGIC_set(temp, SvMAGIC(sv));
4822             SvMAGIC_set(sv, NULL);
4823             SvSTASH_set(temp, SvSTASH(sv));
4824             SvSTASH_set(sv, NULL);
4825         }
4826         if (!islv) SvCUR_set(temp, SvCUR(sv));
4827         /* Remember that SvPVX is in the head, not the body.  But
4828            RX_WRAPPED is in the body. */
4829         assert(ReANY((REGEXP *)sv)->mother_re);
4830         /* Their buffer is already owned by someone else. */
4831         if (flags & SV_COW_DROP_PV) {
4832             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
4833                zeroed body.  For SVt_PVLV, it should have been set to 0
4834                before turning into a regexp. */
4835             assert(!SvLEN(islv ? sv : temp));
4836             sv->sv_u.svu_pv = 0;
4837         }
4838         else {
4839             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
4840             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
4841             SvPOK_on(sv);
4842         }
4843
4844         /* Now swap the rest of the bodies. */
4845
4846         SvFAKE_off(sv);
4847         if (!islv) {
4848             SvFLAGS(sv) &= ~SVTYPEMASK;
4849             SvFLAGS(sv) |= new_type;
4850             SvANY(sv) = SvANY(temp);
4851         }
4852
4853         SvFLAGS(temp) &= ~(SVTYPEMASK);
4854         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4855         SvANY(temp) = temp_p;
4856         temp->sv_u.svu_rx = (regexp *)temp_p;
4857
4858         SvREFCNT_dec(temp);
4859     }
4860     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
4861 }
4862
4863 /*
4864 =for apidoc sv_chop
4865
4866 Efficient removal of characters from the beginning of the string buffer.
4867 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
4868 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
4869 character of the adjusted string.  Uses the "OOK hack".  On return, only
4870 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
4871
4872 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4873 refer to the same chunk of data.
4874
4875 The unfortunate similarity of this function's name to that of Perl's C<chop>
4876 operator is strictly coincidental.  This function works from the left;
4877 C<chop> works from the right.
4878
4879 =cut
4880 */
4881
4882 void
4883 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4884 {
4885     STRLEN delta;
4886     STRLEN old_delta;
4887     U8 *p;
4888 #ifdef DEBUGGING
4889     const U8 *evacp;
4890     STRLEN evacn;
4891 #endif
4892     STRLEN max_delta;
4893
4894     PERL_ARGS_ASSERT_SV_CHOP;
4895
4896     if (!ptr || !SvPOKp(sv))
4897         return;
4898     delta = ptr - SvPVX_const(sv);
4899     if (!delta) {
4900         /* Nothing to do.  */
4901         return;
4902     }
4903     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4904     if (delta > max_delta)
4905         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4906                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4907     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
4908     SV_CHECK_THINKFIRST(sv);
4909     SvPOK_only_UTF8(sv);
4910
4911     if (!SvOOK(sv)) {
4912         if (!SvLEN(sv)) { /* make copy of shared string */
4913             const char *pvx = SvPVX_const(sv);
4914             const STRLEN len = SvCUR(sv);
4915             SvGROW(sv, len + 1);
4916             Move(pvx,SvPVX(sv),len,char);
4917             *SvEND(sv) = '\0';
4918         }
4919         SvOOK_on(sv);
4920         old_delta = 0;
4921     } else {
4922         SvOOK_offset(sv, old_delta);
4923     }
4924     SvLEN_set(sv, SvLEN(sv) - delta);
4925     SvCUR_set(sv, SvCUR(sv) - delta);
4926     SvPV_set(sv, SvPVX(sv) + delta);
4927
4928     p = (U8 *)SvPVX_const(sv);
4929
4930 #ifdef DEBUGGING
4931     /* how many bytes were evacuated?  we will fill them with sentinel
4932        bytes, except for the part holding the new offset of course. */
4933     evacn = delta;
4934     if (old_delta)
4935         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
4936     assert(evacn);
4937     assert(evacn <= delta + old_delta);
4938     evacp = p - evacn;
4939 #endif
4940
4941     delta += old_delta;
4942     assert(delta);
4943     if (delta < 0x100) {
4944         *--p = (U8) delta;
4945     } else {
4946         *--p = 0;
4947         p -= sizeof(STRLEN);
4948         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4949     }
4950
4951 #ifdef DEBUGGING
4952     /* Fill the preceding buffer with sentinals to verify that no-one is
4953        using it.  */
4954     while (p > evacp) {
4955         --p;
4956         *p = (U8)PTR2UV(p);
4957     }
4958 #endif
4959 }
4960
4961 /*
4962 =for apidoc sv_catpvn
4963
4964 Concatenates the string onto the end of the string which is in the SV.  The
4965 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4966 status set, then the bytes appended should be valid UTF-8.
4967 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4968
4969 =for apidoc sv_catpvn_flags
4970
4971 Concatenates the string onto the end of the string which is in the SV.  The
4972 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4973 status set, then the bytes appended should be valid UTF-8.
4974 If C<flags> has the C<SV_SMAGIC> bit set, will
4975 C<mg_set> on C<dsv> afterwards if appropriate.
4976 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4977 in terms of this function.
4978
4979 =cut
4980 */
4981
4982 void
4983 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4984 {
4985     dVAR;
4986     STRLEN dlen;
4987     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4988
4989     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4990     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
4991
4992     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
4993       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
4994          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
4995          dlen = SvCUR(dsv);
4996       }
4997       else SvGROW(dsv, dlen + slen + 1);
4998       if (sstr == dstr)
4999         sstr = SvPVX_const(dsv);
5000       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5001       SvCUR_set(dsv, SvCUR(dsv) + slen);
5002     }
5003     else {
5004         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5005         const char * const send = sstr + slen;
5006         U8 *d;
5007
5008         /* Something this code does not account for, which I think is
5009            impossible; it would require the same pv to be treated as
5010            bytes *and* utf8, which would indicate a bug elsewhere. */
5011         assert(sstr != dstr);
5012
5013         SvGROW(dsv, dlen + slen * 2 + 1);
5014         d = (U8 *)SvPVX(dsv) + dlen;
5015
5016         while (sstr < send) {
5017             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5018             if (UNI_IS_INVARIANT(uv))
5019                 *d++ = (U8)UTF_TO_NATIVE(uv);
5020             else {
5021                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5022                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5023             }
5024         }
5025         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5026     }
5027     *SvEND(dsv) = '\0';
5028     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5029     SvTAINT(dsv);
5030     if (flags & SV_SMAGIC)
5031         SvSETMAGIC(dsv);
5032 }
5033
5034 /*
5035 =for apidoc sv_catsv
5036
5037 Concatenates the string from SV C<ssv> onto the end of the string in SV
5038 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5039 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5040 C<sv_catsv_nomg>.
5041
5042 =for apidoc sv_catsv_flags
5043
5044 Concatenates the string from SV C<ssv> onto the end of the string in SV
5045 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5046 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5047 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5048 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5049 and C<sv_catsv_mg> are implemented in terms of this function.
5050
5051 =cut */
5052
5053 void
5054 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
5055 {
5056     dVAR;
5057  
5058     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5059
5060     if (ssv) {
5061         STRLEN slen;
5062         const char *spv = SvPV_flags_const(ssv, slen, flags);
5063         if (spv) {
5064             if (flags & SV_GMAGIC)
5065                 SvGETMAGIC(dsv);
5066             sv_catpvn_flags(dsv, spv, slen,
5067                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5068             if (flags & SV_SMAGIC)
5069                 SvSETMAGIC(dsv);
5070         }
5071     }
5072 }
5073
5074 /*
5075 =for apidoc sv_catpv
5076
5077 Concatenates the string onto the end of the string which is in the SV.
5078 If the SV has the UTF-8 status set, then the bytes appended should be
5079 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5080
5081 =cut */
5082
5083 void
5084 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
5085 {
5086     dVAR;
5087     STRLEN len;
5088     STRLEN tlen;
5089     char *junk;
5090
5091     PERL_ARGS_ASSERT_SV_CATPV;
5092
5093     if (!ptr)
5094         return;
5095     junk = SvPV_force(sv, tlen);
5096     len = strlen(ptr);
5097     SvGROW(sv, tlen + len + 1);
5098     if (ptr == junk)
5099         ptr = SvPVX_const(sv);
5100     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5101     SvCUR_set(sv, SvCUR(sv) + len);
5102     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5103     SvTAINT(sv);
5104 }
5105
5106 /*
5107 =for apidoc sv_catpv_flags
5108
5109 Concatenates the string onto the end of the string which is in the SV.
5110 If the SV has the UTF-8 status set, then the bytes appended should
5111 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5112 on the modified SV if appropriate.
5113
5114 =cut
5115 */
5116
5117 void
5118 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5119 {
5120     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5121     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5122 }
5123
5124 /*
5125 =for apidoc sv_catpv_mg
5126
5127 Like C<sv_catpv>, but also handles 'set' magic.
5128
5129 =cut
5130 */
5131
5132 void
5133 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
5134 {
5135     PERL_ARGS_ASSERT_SV_CATPV_MG;
5136
5137     sv_catpv(sv,ptr);
5138     SvSETMAGIC(sv);
5139 }
5140
5141 /*
5142 =for apidoc newSV
5143
5144 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5145 bytes of preallocated string space the SV should have.  An extra byte for a
5146 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5147 space is allocated.)  The reference count for the new SV is set to 1.
5148
5149 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5150 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5151 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5152 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5153 modules supporting older perls.
5154
5155 =cut
5156 */
5157
5158 SV *
5159 Perl_newSV(pTHX_ const STRLEN len)
5160 {
5161     dVAR;
5162     SV *sv;
5163
5164     new_SV(sv);
5165     if (len) {
5166         sv_upgrade(sv, SVt_PV);
5167         SvGROW(sv, len + 1);
5168     }
5169     return sv;
5170 }
5171 /*
5172 =for apidoc sv_magicext
5173
5174 Adds magic to an SV, upgrading it if necessary.  Applies the
5175 supplied vtable and returns a pointer to the magic added.
5176
5177 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5178 In particular, you can add magic to SvREADONLY SVs, and add more than
5179 one instance of the same 'how'.
5180
5181 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5182 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5183 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5184 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5185
5186 (This is now used as a subroutine by C<sv_magic>.)
5187
5188 =cut
5189 */
5190 MAGIC * 
5191 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5192                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5193 {
5194     dVAR;
5195     MAGIC* mg;
5196
5197     PERL_ARGS_ASSERT_SV_MAGICEXT;
5198
5199     SvUPGRADE(sv, SVt_PVMG);
5200     Newxz(mg, 1, MAGIC);
5201     mg->mg_moremagic = SvMAGIC(sv);
5202     SvMAGIC_set(sv, mg);
5203
5204     /* Sometimes a magic contains a reference loop, where the sv and
5205        object refer to each other.  To prevent a reference loop that
5206        would prevent such objects being freed, we look for such loops
5207        and if we find one we avoid incrementing the object refcount.
5208
5209        Note we cannot do this to avoid self-tie loops as intervening RV must
5210        have its REFCNT incremented to keep it in existence.
5211
5212     */
5213     if (!obj || obj == sv ||
5214         how == PERL_MAGIC_arylen ||
5215         how == PERL_MAGIC_symtab ||
5216         (SvTYPE(obj) == SVt_PVGV &&
5217             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5218              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5219              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5220     {
5221         mg->mg_obj = obj;
5222     }
5223     else {
5224         mg->mg_obj = SvREFCNT_inc_simple(obj);
5225         mg->mg_flags |= MGf_REFCOUNTED;
5226     }
5227
5228     /* Normal self-ties simply pass a null object, and instead of
5229        using mg_obj directly, use the SvTIED_obj macro to produce a
5230        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5231        with an RV obj pointing to the glob containing the PVIO.  In
5232        this case, to avoid a reference loop, we need to weaken the
5233        reference.
5234     */
5235
5236     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5237         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5238     {
5239       sv_rvweaken(obj);
5240     }
5241
5242     mg->mg_type = how;
5243     mg->mg_len = namlen;
5244     if (name) {
5245         if (namlen > 0)
5246             mg->mg_ptr = savepvn(name, namlen);
5247         else if (namlen == HEf_SVKEY) {
5248             /* Yes, this is casting away const. This is only for the case of
5249                HEf_SVKEY. I think we need to document this aberation of the
5250                constness of the API, rather than making name non-const, as
5251                that change propagating outwards a long way.  */
5252             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5253         } else
5254             mg->mg_ptr = (char *) name;
5255     }
5256     mg->mg_virtual = (MGVTBL *) vtable;
5257
5258     mg_magical(sv);
5259     return mg;
5260 }
5261
5262 /*
5263 =for apidoc sv_magic
5264
5265 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5266 necessary, then adds a new magic item of type C<how> to the head of the
5267 magic list.
5268
5269 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5270 handling of the C<name> and C<namlen> arguments.
5271
5272 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5273 to add more than one instance of the same 'how'.
5274
5275 =cut
5276 */
5277
5278 void
5279 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5280              const char *const name, const I32 namlen)
5281 {
5282     dVAR;
5283     const MGVTBL *vtable;
5284     MAGIC* mg;
5285     unsigned int flags;
5286     unsigned int vtable_index;
5287
5288     PERL_ARGS_ASSERT_SV_MAGIC;
5289
5290     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5291         || ((flags = PL_magic_data[how]),
5292             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5293             > magic_vtable_max))
5294         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5295
5296     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5297        Useful for attaching extension internal data to perl vars.
5298        Note that multiple extensions may clash if magical scalars
5299        etc holding private data from one are passed to another. */
5300
5301     vtable = (vtable_index == magic_vtable_max)
5302         ? NULL : PL_magic_vtables + vtable_index;
5303
5304 #ifdef PERL_OLD_COPY_ON_WRITE
5305     if (SvIsCOW(sv))
5306         sv_force_normal_flags(sv, 0);
5307 #endif
5308     if (SvREADONLY(sv)) {
5309         if (
5310             /* its okay to attach magic to shared strings */
5311             !SvIsCOW(sv)
5312
5313             && IN_PERL_RUNTIME
5314             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5315            )
5316         {
5317             Perl_croak_no_modify();
5318         }
5319     }
5320     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5321         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5322             /* sv_magic() refuses to add a magic of the same 'how' as an
5323                existing one
5324              */
5325             if (how == PERL_MAGIC_taint)
5326                 mg->mg_len |= 1;
5327             return;
5328         }
5329     }
5330
5331     /* Rest of work is done else where */
5332     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5333
5334     switch (how) {
5335     case PERL_MAGIC_taint:
5336         mg->mg_len = 1;
5337         break;
5338     case PERL_MAGIC_ext:
5339     case PERL_MAGIC_dbfile:
5340         SvRMAGICAL_on(sv);
5341         break;
5342     }
5343 }
5344
5345 static int
5346 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5347 {
5348     MAGIC* mg;
5349     MAGIC** mgp;
5350
5351     assert(flags <= 1);
5352
5353     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5354         return 0;
5355     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5356     for (mg = *mgp; mg; mg = *mgp) {
5357         const MGVTBL* const virt = mg->mg_virtual;
5358         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5359             *mgp = mg->mg_moremagic;
5360             if (virt && virt->svt_free)
5361                 virt->svt_free(aTHX_ sv, mg);
5362             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5363                 if (mg->mg_len > 0)
5364                     Safefree(mg->mg_ptr);
5365                 else if (mg->mg_len == HEf_SVKEY)
5366                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5367                 else if (mg->mg_type == PERL_MAGIC_utf8)
5368                     Safefree(mg->mg_ptr);
5369             }
5370             if (mg->mg_flags & MGf_REFCOUNTED)
5371                 SvREFCNT_dec(mg->mg_obj);
5372             Safefree(mg);
5373         }
5374         else
5375             mgp = &mg->mg_moremagic;
5376     }
5377     if (SvMAGIC(sv)) {
5378         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5379             mg_magical(sv);     /*    else fix the flags now */
5380     }
5381     else {
5382         SvMAGICAL_off(sv);
5383         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5384     }
5385     return 0;
5386 }
5387
5388 /*
5389 =for apidoc sv_unmagic
5390
5391 Removes all magic of type C<type> from an SV.
5392
5393 =cut
5394 */
5395
5396 int
5397 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5398 {
5399     PERL_ARGS_ASSERT_SV_UNMAGIC;
5400     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5401 }
5402
5403 /*
5404 =for apidoc sv_unmagicext
5405
5406 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5407
5408 =cut
5409 */
5410
5411 int
5412 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5413 {
5414     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5415     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5416 }
5417
5418 /*
5419 =for apidoc sv_rvweaken
5420
5421 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5422 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5423 push a back-reference to this RV onto the array of backreferences
5424 associated with that magic.  If the RV is magical, set magic will be
5425 called after the RV is cleared.
5426
5427 =cut
5428 */
5429
5430 SV *
5431 Perl_sv_rvweaken(pTHX_ SV *const sv)
5432 {
5433     SV *tsv;
5434
5435     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5436
5437     if (!SvOK(sv))  /* let undefs pass */
5438         return sv;
5439     if (!SvROK(sv))
5440         Perl_croak(aTHX_ "Can't weaken a nonreference");
5441     else if (SvWEAKREF(sv)) {
5442         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5443         return sv;
5444     }
5445     else if (SvREADONLY(sv)) croak_no_modify();
5446     tsv = SvRV(sv);
5447     Perl_sv_add_backref(aTHX_ tsv, sv);
5448     SvWEAKREF_on(sv);
5449     SvREFCNT_dec(tsv);
5450     return sv;
5451 }
5452
5453 /* Give tsv backref magic if it hasn't already got it, then push a
5454  * back-reference to sv onto the array associated with the backref magic.
5455  *
5456  * As an optimisation, if there's only one backref and it's not an AV,
5457  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5458  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5459  * active.)
5460  */
5461
5462 /* A discussion about the backreferences array and its refcount:
5463  *
5464  * The AV holding the backreferences is pointed to either as the mg_obj of
5465  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5466  * xhv_backreferences field. The array is created with a refcount
5467  * of 2. This means that if during global destruction the array gets
5468  * picked on before its parent to have its refcount decremented by the
5469  * random zapper, it won't actually be freed, meaning it's still there for
5470  * when its parent gets freed.
5471  *
5472  * When the parent SV is freed, the extra ref is killed by
5473  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5474  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5475  *
5476  * When a single backref SV is stored directly, it is not reference
5477  * counted.
5478  */
5479
5480 void
5481 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5482 {
5483     dVAR;
5484     SV **svp;
5485     AV *av = NULL;
5486     MAGIC *mg = NULL;
5487
5488     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5489
5490     /* find slot to store array or singleton backref */
5491
5492     if (SvTYPE(tsv) == SVt_PVHV) {
5493         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5494     } else {
5495         if (! ((mg =
5496             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5497         {
5498             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5499             mg = mg_find(tsv, PERL_MAGIC_backref);
5500         }
5501         svp = &(mg->mg_obj);
5502     }
5503
5504     /* create or retrieve the array */
5505
5506     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5507         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5508     ) {
5509         /* create array */
5510         av = newAV();
5511         AvREAL_off(av);
5512         SvREFCNT_inc_simple_void(av);
5513         /* av now has a refcnt of 2; see discussion above */
5514         if (*svp) {
5515             /* move single existing backref to the array */
5516             av_extend(av, 1);
5517             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5518         }
5519         *svp = (SV*)av;
5520         if (mg)
5521             mg->mg_flags |= MGf_REFCOUNTED;
5522     }
5523     else
5524         av = MUTABLE_AV(*svp);
5525
5526     if (!av) {
5527         /* optimisation: store single backref directly in HvAUX or mg_obj */
5528         *svp = sv;
5529         return;
5530     }
5531     /* push new backref */
5532     assert(SvTYPE(av) == SVt_PVAV);
5533     if (AvFILLp(av) >= AvMAX(av)) {
5534         av_extend(av, AvFILLp(av)+1);
5535     }
5536     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5537 }
5538
5539 /* delete a back-reference to ourselves from the backref magic associated
5540  * with the SV we point to.
5541  */
5542
5543 void
5544 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5545 {
5546     dVAR;
5547     SV **svp = NULL;
5548
5549     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5550
5551     if (SvTYPE(tsv) == SVt_PVHV) {
5552         if (SvOOK(tsv))
5553             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5554     }
5555     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5556         /* It's possible for the the last (strong) reference to tsv to have
5557            become freed *before* the last thing holding a weak reference.
5558            If both survive longer than the backreferences array, then when
5559            the referent's reference count drops to 0 and it is freed, it's
5560            not able to chase the backreferences, so they aren't NULLed.
5561
5562            For example, a CV holds a weak reference to its stash. If both the
5563            CV and the stash survive longer than the backreferences array,
5564            and the CV gets picked for the SvBREAK() treatment first,
5565            *and* it turns out that the stash is only being kept alive because
5566            of an our variable in the pad of the CV, then midway during CV
5567            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5568            It ends up pointing to the freed HV. Hence it's chased in here, and
5569            if this block wasn't here, it would hit the !svp panic just below.
5570
5571            I don't believe that "better" destruction ordering is going to help
5572            here - during global destruction there's always going to be the
5573            chance that something goes out of order. We've tried to make it
5574            foolproof before, and it only resulted in evolutionary pressure on
5575            fools. Which made us look foolish for our hubris. :-(
5576         */
5577         return;
5578     }
5579     else {
5580         MAGIC *const mg
5581             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5582         svp =  mg ? &(mg->mg_obj) : NULL;
5583     }
5584
5585     if (!svp)
5586         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5587     if (!*svp) {
5588         /* It's possible that sv is being freed recursively part way through the
5589            freeing of tsv. If this happens, the backreferences array of tsv has
5590            already been freed, and so svp will be NULL. If this is the case,
5591            we should not panic. Instead, nothing needs doing, so return.  */
5592         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5593             return;
5594         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5595                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5596     }
5597
5598     if (SvTYPE(*svp) == SVt_PVAV) {
5599 #ifdef DEBUGGING
5600         int count = 1;
5601 #endif
5602         AV * const av = (AV*)*svp;
5603         SSize_t fill;
5604         assert(!SvIS_FREED(av));
5605         fill = AvFILLp(av);
5606         assert(fill > -1);
5607         svp = AvARRAY(av);
5608         /* for an SV with N weak references to it, if all those
5609          * weak refs are deleted, then sv_del_backref will be called
5610          * N times and O(N^2) compares will be done within the backref
5611          * array. To ameliorate this potential slowness, we:
5612          * 1) make sure this code is as tight as possible;
5613          * 2) when looking for SV, look for it at both the head and tail of the
5614          *    array first before searching the rest, since some create/destroy
5615          *    patterns will cause the backrefs to be freed in order.
5616          */
5617         if (*svp == sv) {
5618             AvARRAY(av)++;
5619             AvMAX(av)--;
5620         }
5621         else {
5622             SV **p = &svp[fill];
5623             SV *const topsv = *p;
5624             if (topsv != sv) {
5625 #ifdef DEBUGGING
5626                 count = 0;
5627 #endif
5628                 while (--p > svp) {
5629                     if (*p == sv) {
5630                         /* We weren't the last entry.
5631                            An unordered list has this property that you
5632                            can take the last element off the end to fill
5633                            the hole, and it's still an unordered list :-)
5634                         */
5635                         *p = topsv;
5636 #ifdef DEBUGGING
5637                         count++;
5638 #else
5639                         break; /* should only be one */
5640 #endif
5641                     }
5642                 }
5643             }
5644         }
5645         assert(count ==1);
5646         AvFILLp(av) = fill-1;
5647     }
5648     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5649         /* freed AV; skip */
5650     }
5651     else {
5652         /* optimisation: only a single backref, stored directly */
5653         if (*svp != sv)
5654             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5655         *svp = NULL;
5656     }
5657
5658 }
5659
5660 void
5661 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5662 {
5663     SV **svp;
5664     SV **last;
5665     bool is_array;
5666
5667     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5668
5669     if (!av)
5670         return;
5671
5672     /* after multiple passes through Perl_sv_clean_all() for a thingy
5673      * that has badly leaked, the backref array may have gotten freed,
5674      * since we only protect it against 1 round of cleanup */
5675     if (SvIS_FREED(av)) {
5676         if (PL_in_clean_all) /* All is fair */
5677             return;
5678         Perl_croak(aTHX_
5679                    "panic: magic_killbackrefs (freed backref AV/SV)");
5680     }
5681
5682
5683     is_array = (SvTYPE(av) == SVt_PVAV);
5684     if (is_array) {
5685         assert(!SvIS_FREED(av));
5686         svp = AvARRAY(av);
5687         if (svp)
5688             last = svp + AvFILLp(av);
5689     }
5690     else {
5691         /* optimisation: only a single backref, stored directly */
5692         svp = (SV**)&av;
5693         last = svp;
5694     }
5695
5696     if (svp) {
5697         while (svp <= last) {
5698             if (*svp) {
5699                 SV *const referrer = *svp;
5700                 if (SvWEAKREF(referrer)) {
5701                     /* XXX Should we check that it hasn't changed? */
5702                     assert(SvROK(referrer));
5703                     SvRV_set(referrer, 0);
5704                     SvOK_off(referrer);
5705                     SvWEAKREF_off(referrer);
5706                     SvSETMAGIC(referrer);
5707                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5708                            SvTYPE(referrer) == SVt_PVLV) {
5709                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5710                     /* You lookin' at me?  */
5711                     assert(GvSTASH(referrer));
5712                     assert(GvSTASH(referrer) == (const HV *)sv);
5713                     GvSTASH(referrer) = 0;
5714                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5715                            SvTYPE(referrer) == SVt_PVFM) {
5716                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5717                         /* You lookin' at me?  */
5718                         assert(CvSTASH(referrer));
5719                         assert(CvSTASH(referrer) == (const HV *)sv);
5720                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5721                     }
5722                     else {
5723                         assert(SvTYPE(sv) == SVt_PVGV);
5724                         /* You lookin' at me?  */
5725                         assert(CvGV(referrer));
5726                         assert(CvGV(referrer) == (const GV *)sv);
5727                         anonymise_cv_maybe(MUTABLE_GV(sv),
5728                                                 MUTABLE_CV(referrer));
5729                     }
5730
5731                 } else {
5732                     Perl_croak(aTHX_
5733                                "panic: magic_killbackrefs (flags=%"UVxf")",
5734                                (UV)SvFLAGS(referrer));
5735                 }
5736
5737                 if (is_array)
5738                     *svp = NULL;
5739             }
5740             svp++;
5741         }
5742     }
5743     if (is_array) {
5744         AvFILLp(av) = -1;
5745         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5746     }
5747     return;
5748 }
5749
5750 /*
5751 =for apidoc sv_insert
5752
5753 Inserts a string at the specified offset/length within the SV.  Similar to
5754 the Perl substr() function.  Handles get magic.
5755
5756 =for apidoc sv_insert_flags
5757
5758 Same as C<sv_insert>, but the extra C<flags> are passed to the
5759 C<SvPV_force_flags> that applies to C<bigstr>.
5760
5761 =cut
5762 */
5763
5764 void
5765 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5766 {
5767     dVAR;
5768     char *big;
5769     char *mid;
5770     char *midend;
5771     char *bigend;
5772     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
5773     STRLEN curlen;
5774
5775     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5776
5777     if (!bigstr)
5778         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5779     SvPV_force_flags(bigstr, curlen, flags);
5780     (void)SvPOK_only_UTF8(bigstr);
5781     if (offset + len > curlen) {
5782         SvGROW(bigstr, offset+len+1);
5783         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5784         SvCUR_set(bigstr, offset+len);
5785     }
5786
5787     SvTAINT(bigstr);
5788     i = littlelen - len;
5789     if (i > 0) {                        /* string might grow */
5790         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5791         mid = big + offset + len;
5792         midend = bigend = big + SvCUR(bigstr);
5793         bigend += i;
5794         *bigend = '\0';
5795         while (midend > mid)            /* shove everything down */
5796             *--bigend = *--midend;
5797         Move(little,big+offset,littlelen,char);
5798         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5799         SvSETMAGIC(bigstr);
5800         return;
5801     }
5802     else if (i == 0) {
5803         Move(little,SvPVX(bigstr)+offset,len,char);
5804         SvSETMAGIC(bigstr);
5805         return;
5806     }
5807
5808     big = SvPVX(bigstr);
5809     mid = big + offset;
5810     midend = mid + len;
5811     bigend = big + SvCUR(bigstr);
5812
5813     if (midend > bigend)
5814         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
5815                    midend, bigend);
5816
5817     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5818         if (littlelen) {
5819             Move(little, mid, littlelen,char);
5820             mid += littlelen;
5821         }
5822         i = bigend - midend;
5823         if (i > 0) {
5824             Move(midend, mid, i,char);
5825             mid += i;
5826         }
5827         *mid = '\0';
5828         SvCUR_set(bigstr, mid - big);
5829     }
5830     else if ((i = mid - big)) { /* faster from front */
5831         midend -= littlelen;
5832         mid = midend;
5833         Move(big, midend - i, i, char);
5834         sv_chop(bigstr,midend-i);
5835         if (littlelen)
5836             Move(little, mid, littlelen,char);
5837     }
5838     else if (littlelen) {
5839         midend -= littlelen;
5840         sv_chop(bigstr,midend);
5841         Move(little,midend,littlelen,char);
5842     }
5843     else {
5844         sv_chop(bigstr,midend);
5845     }
5846     SvSETMAGIC(bigstr);
5847 }
5848
5849 /*
5850 =for apidoc sv_replace
5851
5852 Make the first argument a copy of the second, then delete the original.
5853 The target SV physically takes over ownership of the body of the source SV
5854 and inherits its flags; however, the target keeps any magic it owns,
5855 and any magic in the source is discarded.
5856 Note that this is a rather specialist SV copying operation; most of the
5857 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5858
5859 =cut
5860 */
5861
5862 void
5863 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5864 {
5865     dVAR;
5866     const U32 refcnt = SvREFCNT(sv);
5867
5868     PERL_ARGS_ASSERT_SV_REPLACE;
5869
5870     SV_CHECK_THINKFIRST_COW_DROP(sv);
5871     if (SvREFCNT(nsv) != 1) {
5872         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5873                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5874     }
5875     if (SvMAGICAL(sv)) {
5876         if (SvMAGICAL(nsv))
5877             mg_free(nsv);
5878         else
5879             sv_upgrade(nsv, SVt_PVMG);
5880         SvMAGIC_set(nsv, SvMAGIC(sv));
5881         SvFLAGS(nsv) |= SvMAGICAL(sv);
5882         SvMAGICAL_off(sv);
5883         SvMAGIC_set(sv, NULL);
5884     }
5885     SvREFCNT(sv) = 0;
5886     sv_clear(sv);
5887     assert(!SvREFCNT(sv));
5888 #ifdef DEBUG_LEAKING_SCALARS
5889     sv->sv_flags  = nsv->sv_flags;
5890     sv->sv_any    = nsv->sv_any;
5891     sv->sv_refcnt = nsv->sv_refcnt;
5892     sv->sv_u      = nsv->sv_u;
5893 #else
5894     StructCopy(nsv,sv,SV);
5895 #endif
5896     if(SvTYPE(sv) == SVt_IV) {
5897         SvANY(sv)
5898             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5899     }
5900         
5901
5902 #ifdef PERL_OLD_COPY_ON_WRITE
5903     if (SvIsCOW_normal(nsv)) {
5904         /* We need to follow the pointers around the loop to make the
5905            previous SV point to sv, rather than nsv.  */
5906         SV *next;
5907         SV *current = nsv;
5908         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5909             assert(next);
5910             current = next;
5911             assert(SvPVX_const(current) == SvPVX_const(nsv));
5912         }
5913         /* Make the SV before us point to the SV after us.  */
5914         if (DEBUG_C_TEST) {
5915             PerlIO_printf(Perl_debug_log, "previous is\n");
5916             sv_dump(current);
5917             PerlIO_printf(Perl_debug_log,
5918                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5919                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5920         }
5921         SV_COW_NEXT_SV_SET(current, sv);
5922     }
5923 #endif
5924     SvREFCNT(sv) = refcnt;
5925     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5926     SvREFCNT(nsv) = 0;
5927     del_SV(nsv);
5928 }
5929
5930 /* We're about to free a GV which has a CV that refers back to us.
5931  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5932  * field) */
5933
5934 STATIC void
5935 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5936 {
5937     SV *gvname;
5938     GV *anongv;
5939
5940     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5941
5942     /* be assertive! */
5943     assert(SvREFCNT(gv) == 0);
5944     assert(isGV(gv) && isGV_with_GP(gv));
5945     assert(GvGP(gv));
5946     assert(!CvANON(cv));
5947     assert(CvGV(cv) == gv);
5948     assert(!CvNAMED(cv));
5949
5950     /* will the CV shortly be freed by gp_free() ? */
5951     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
5952         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
5953         return;
5954     }
5955
5956     /* if not, anonymise: */
5957     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
5958                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
5959                     : newSVpvn_flags( "__ANON__", 8, 0 );
5960     sv_catpvs(gvname, "::__ANON__");
5961     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5962     SvREFCNT_dec(gvname);
5963
5964     CvANON_on(cv);
5965     CvCVGV_RC_on(cv);
5966     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
5967 }
5968
5969
5970 /*
5971 =for apidoc sv_clear
5972
5973 Clear an SV: call any destructors, free up any memory used by the body,
5974 and free the body itself.  The SV's head is I<not> freed, although
5975 its type is set to all 1's so that it won't inadvertently be assumed
5976 to be live during global destruction etc.
5977 This function should only be called when REFCNT is zero.  Most of the time
5978 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5979 instead.
5980
5981 =cut
5982 */
5983
5984 void
5985 Perl_sv_clear(pTHX_ SV *const orig_sv)
5986 {
5987     dVAR;
5988     HV *stash;
5989     U32 type;
5990     const struct body_details *sv_type_details;
5991     SV* iter_sv = NULL;
5992     SV* next_sv = NULL;
5993     SV *sv = orig_sv;
5994     STRLEN hash_index;
5995
5996     PERL_ARGS_ASSERT_SV_CLEAR;
5997
5998     /* within this loop, sv is the SV currently being freed, and
5999      * iter_sv is the most recent AV or whatever that's being iterated
6000      * over to provide more SVs */
6001
6002     while (sv) {
6003
6004         type = SvTYPE(sv);
6005
6006         assert(SvREFCNT(sv) == 0);
6007         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6008
6009         if (type <= SVt_IV) {
6010             /* See the comment in sv.h about the collusion between this
6011              * early return and the overloading of the NULL slots in the
6012              * size table.  */
6013             if (SvROK(sv))
6014                 goto free_rv;
6015             SvFLAGS(sv) &= SVf_BREAK;
6016             SvFLAGS(sv) |= SVTYPEMASK;
6017             goto free_head;
6018         }
6019
6020         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6021
6022         if (type >= SVt_PVMG) {
6023             if (SvOBJECT(sv)) {
6024                 if (!curse(sv, 1)) goto get_next_sv;
6025                 type = SvTYPE(sv); /* destructor may have changed it */
6026             }
6027             /* Free back-references before magic, in case the magic calls
6028              * Perl code that has weak references to sv. */
6029             if (type == SVt_PVHV) {
6030                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6031                 if (SvMAGIC(sv))
6032                     mg_free(sv);
6033             }
6034             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6035                 SvREFCNT_dec(SvOURSTASH(sv));
6036             } else if (SvMAGIC(sv)) {
6037                 /* Free back-references before other types of magic. */
6038                 sv_unmagic(sv, PERL_MAGIC_backref);
6039                 mg_free(sv);
6040             }
6041             SvMAGICAL_off(sv);
6042             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6043                 SvREFCNT_dec(SvSTASH(sv));
6044         }
6045         switch (type) {
6046             /* case SVt_BIND: */
6047         case SVt_PVIO:
6048             if (IoIFP(sv) &&
6049                 IoIFP(sv) != PerlIO_stdin() &&
6050                 IoIFP(sv) != PerlIO_stdout() &&
6051                 IoIFP(sv) != PerlIO_stderr() &&
6052                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6053             {
6054                 io_close(MUTABLE_IO(sv), FALSE);
6055             }
6056             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6057                 PerlDir_close(IoDIRP(sv));
6058             IoDIRP(sv) = (DIR*)NULL;
6059             Safefree(IoTOP_NAME(sv));
6060             Safefree(IoFMT_NAME(sv));
6061             Safefree(IoBOTTOM_NAME(sv));
6062             if ((const GV *)sv == PL_statgv)
6063                 PL_statgv = NULL;
6064             goto freescalar;
6065         case SVt_REGEXP:
6066             /* FIXME for plugins */
6067           freeregexp:
6068             pregfree2((REGEXP*) sv);
6069             goto freescalar;
6070         case SVt_PVCV:
6071         case SVt_PVFM:
6072             cv_undef(MUTABLE_CV(sv));
6073             /* If we're in a stash, we don't own a reference to it.
6074              * However it does have a back reference to us, which needs to
6075              * be cleared.  */
6076             if ((stash = CvSTASH(sv)))
6077                 sv_del_backref(MUTABLE_SV(stash), sv);
6078             goto freescalar;
6079         case SVt_PVHV:
6080             if (PL_last_swash_hv == (const HV *)sv) {
6081                 PL_last_swash_hv = NULL;
6082             }
6083             if (HvTOTALKEYS((HV*)sv) > 0) {
6084                 const char *name;
6085                 /* this statement should match the one at the beginning of
6086                  * hv_undef_flags() */
6087                 if (   PL_phase != PERL_PHASE_DESTRUCT
6088                     && (name = HvNAME((HV*)sv)))
6089                 {
6090                     if (PL_stashcache) {
6091                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6092                                      sv));
6093                         (void)hv_delete(PL_stashcache, name,
6094                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6095                     }
6096                     hv_name_set((HV*)sv, NULL, 0, 0);
6097                 }
6098
6099                 /* save old iter_sv in unused SvSTASH field */
6100                 assert(!SvOBJECT(sv));
6101                 SvSTASH(sv) = (HV*)iter_sv;
6102                 iter_sv = sv;
6103
6104                 /* save old hash_index in unused SvMAGIC field */
6105                 assert(!SvMAGICAL(sv));
6106                 assert(!SvMAGIC(sv));
6107                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6108                 hash_index = 0;
6109
6110                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6111                 goto get_next_sv; /* process this new sv */
6112             }
6113             /* free empty hash */
6114             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6115             assert(!HvARRAY((HV*)sv));
6116             break;
6117         case SVt_PVAV:
6118             {
6119                 AV* av = MUTABLE_AV(sv);
6120                 if (PL_comppad == av) {
6121                     PL_comppad = NULL;
6122                     PL_curpad = NULL;
6123                 }
6124                 if (AvREAL(av) && AvFILLp(av) > -1) {
6125                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6126                     /* save old iter_sv in top-most slot of AV,
6127                      * and pray that it doesn't get wiped in the meantime */
6128                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6129                     iter_sv = sv;
6130                     goto get_next_sv; /* process this new sv */
6131                 }
6132                 Safefree(AvALLOC(av));
6133             }
6134
6135             break;
6136         case SVt_PVLV:
6137             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6138                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6139                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6140                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6141             }
6142             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6143                 SvREFCNT_dec(LvTARG(sv));
6144             if (isREGEXP(sv)) goto freeregexp;
6145         case SVt_PVGV:
6146             if (isGV_with_GP(sv)) {
6147                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6148                    && HvENAME_get(stash))
6149                     mro_method_changed_in(stash);
6150                 gp_free(MUTABLE_GV(sv));
6151                 if (GvNAME_HEK(sv))
6152                     unshare_hek(GvNAME_HEK(sv));
6153                 /* If we're in a stash, we don't own a reference to it.
6154                  * However it does have a back reference to us, which
6155                  * needs to be cleared.  */
6156                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6157                         sv_del_backref(MUTABLE_SV(stash), sv);
6158             }
6159             /* FIXME. There are probably more unreferenced pointers to SVs
6160              * in the interpreter struct that we should check and tidy in
6161              * a similar fashion to this:  */
6162             /* See also S_sv_unglob, which does the same thing. */
6163             if ((const GV *)sv == PL_last_in_gv)
6164                 PL_last_in_gv = NULL;
6165             else if ((const GV *)sv == PL_statgv)
6166                 PL_statgv = NULL;
6167         case SVt_PVMG:
6168         case SVt_PVNV:
6169         case SVt_PVIV:
6170         case SVt_PV:
6171           freescalar:
6172             /* Don't bother with SvOOK_off(sv); as we're only going to
6173              * free it.  */
6174             if (SvOOK(sv)) {
6175                 STRLEN offset;
6176                 SvOOK_offset(sv, offset);
6177                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6178                 /* Don't even bother with turning off the OOK flag.  */
6179             }
6180             if (SvROK(sv)) {
6181             free_rv:
6182                 {
6183                     SV * const target = SvRV(sv);
6184                     if (SvWEAKREF(sv))
6185                         sv_del_backref(target, sv);
6186                     else
6187                         next_sv = target;
6188                 }
6189             }
6190 #ifdef PERL_OLD_COPY_ON_WRITE
6191             else if (SvPVX_const(sv)
6192                      && !(SvTYPE(sv) == SVt_PVIO
6193                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6194             {
6195                 if (SvIsCOW(sv)) {
6196                     if (DEBUG_C_TEST) {
6197                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6198                         sv_dump(sv);
6199                     }
6200                     if (SvLEN(sv)) {
6201                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6202                     } else {
6203                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6204                     }
6205
6206                 } else if (SvLEN(sv)) {
6207                     Safefree(SvPVX_mutable(sv));
6208                 }
6209             }
6210 #else
6211             else if (SvPVX_const(sv) && SvLEN(sv)
6212                      && !(SvTYPE(sv) == SVt_PVIO
6213                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6214                 Safefree(SvPVX_mutable(sv));
6215             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6216                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6217             }
6218 #endif
6219             break;
6220         case SVt_NV:
6221             break;
6222         }
6223
6224       free_body:
6225
6226         SvFLAGS(sv) &= SVf_BREAK;
6227         SvFLAGS(sv) |= SVTYPEMASK;
6228
6229         sv_type_details = bodies_by_type + type;
6230         if (sv_type_details->arena) {
6231             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6232                      &PL_body_roots[type]);
6233         }
6234         else if (sv_type_details->body_size) {
6235             safefree(SvANY(sv));
6236         }
6237
6238       free_head:
6239         /* caller is responsible for freeing the head of the original sv */
6240         if (sv != orig_sv && !SvREFCNT(sv))
6241             del_SV(sv);
6242
6243         /* grab and free next sv, if any */
6244       get_next_sv:
6245         while (1) {
6246             sv = NULL;
6247             if (next_sv) {
6248                 sv = next_sv;
6249                 next_sv = NULL;
6250             }
6251             else if (!iter_sv) {
6252                 break;
6253             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6254                 AV *const av = (AV*)iter_sv;
6255                 if (AvFILLp(av) > -1) {
6256                     sv = AvARRAY(av)[AvFILLp(av)--];
6257                 }
6258                 else { /* no more elements of current AV to free */
6259                     sv = iter_sv;
6260                     type = SvTYPE(sv);
6261                     /* restore previous value, squirrelled away */
6262                     iter_sv = AvARRAY(av)[AvMAX(av)];
6263                     Safefree(AvALLOC(av));
6264                     goto free_body;
6265                 }
6266             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6267                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6268                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6269                     /* no more elements of current HV to free */
6270                     sv = iter_sv;
6271                     type = SvTYPE(sv);
6272                     /* Restore previous values of iter_sv and hash_index,
6273                      * squirrelled away */
6274                     assert(!SvOBJECT(sv));
6275                     iter_sv = (SV*)SvSTASH(sv);
6276                     assert(!SvMAGICAL(sv));
6277                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6278 #ifdef DEBUGGING
6279                     /* perl -DA does not like rubbish in SvMAGIC. */
6280                     SvMAGIC_set(sv, 0);
6281 #endif
6282
6283                     /* free any remaining detritus from the hash struct */
6284                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6285                     assert(!HvARRAY((HV*)sv));
6286                     goto free_body;
6287                 }
6288             }
6289
6290             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6291
6292             if (!sv)
6293                 continue;
6294             if (!SvREFCNT(sv)) {
6295                 sv_free(sv);
6296                 continue;
6297             }
6298             if (--(SvREFCNT(sv)))
6299                 continue;
6300 #ifdef DEBUGGING
6301             if (SvTEMP(sv)) {
6302                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6303                          "Attempt to free temp prematurely: SV 0x%"UVxf
6304                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6305                 continue;
6306             }
6307 #endif
6308             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6309                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6310                 SvREFCNT(sv) = (~(U32)0)/2;
6311                 continue;
6312             }
6313             break;
6314         } /* while 1 */
6315
6316     } /* while sv */
6317 }
6318
6319 /* This routine curses the sv itself, not the object referenced by sv. So
6320    sv does not have to be ROK. */
6321
6322 static bool
6323 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6324     dVAR;
6325
6326     PERL_ARGS_ASSERT_CURSE;
6327     assert(SvOBJECT(sv));
6328
6329     if (PL_defstash &&  /* Still have a symbol table? */
6330         SvDESTROYABLE(sv))
6331     {
6332         dSP;
6333         HV* stash;
6334         do {
6335             CV* destructor;
6336             stash = SvSTASH(sv);
6337             destructor = StashHANDLER(stash,DESTROY);
6338             if (destructor
6339                 /* A constant subroutine can have no side effects, so
6340                    don't bother calling it.  */
6341                 && !CvCONST(destructor)
6342                 /* Don't bother calling an empty destructor or one that
6343                    returns immediately. */
6344                 && (CvISXSUB(destructor)
6345                 || (CvSTART(destructor)
6346                     && (CvSTART(destructor)->op_next->op_type
6347                                         != OP_LEAVESUB)
6348                     && (CvSTART(destructor)->op_next->op_type
6349                                         != OP_PUSHMARK
6350                         || CvSTART(destructor)->op_next->op_next->op_type
6351                                         != OP_RETURN
6352                        )
6353                    ))
6354                )
6355             {
6356                 SV* const tmpref = newRV(sv);
6357                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6358                 ENTER;
6359                 PUSHSTACKi(PERLSI_DESTROY);
6360                 EXTEND(SP, 2);
6361                 PUSHMARK(SP);
6362                 PUSHs(tmpref);
6363                 PUTBACK;
6364                 call_sv(MUTABLE_SV(destructor),
6365                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6366                 POPSTACK;
6367                 SPAGAIN;
6368                 LEAVE;
6369                 if(SvREFCNT(tmpref) < 2) {
6370                     /* tmpref is not kept alive! */
6371                     SvREFCNT(sv)--;
6372                     SvRV_set(tmpref, NULL);
6373                     SvROK_off(tmpref);
6374                 }
6375                 SvREFCNT_dec(tmpref);
6376             }
6377         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6378
6379
6380         if (check_refcnt && SvREFCNT(sv)) {
6381             if (PL_in_clean_objs)
6382                 Perl_croak(aTHX_
6383                   "DESTROY created new reference to dead object '%"HEKf"'",
6384                    HEKfARG(HvNAME_HEK(stash)));
6385             /* DESTROY gave object new lease on life */
6386             return FALSE;
6387         }
6388     }
6389
6390     if (SvOBJECT(sv)) {
6391         SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6392         SvOBJECT_off(sv);       /* Curse the object. */
6393         if (SvTYPE(sv) != SVt_PVIO)
6394             --PL_sv_objcount;/* XXX Might want something more general */
6395     }
6396     return TRUE;
6397 }
6398
6399 /*
6400 =for apidoc sv_newref
6401
6402 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6403 instead.
6404
6405 =cut
6406 */
6407
6408 SV *
6409 Perl_sv_newref(pTHX_ SV *const sv)
6410 {
6411     PERL_UNUSED_CONTEXT;
6412     if (sv)
6413         (SvREFCNT(sv))++;
6414     return sv;
6415 }
6416
6417 /*
6418 =for apidoc sv_free
6419
6420 Decrement an SV's reference count, and if it drops to zero, call
6421 C<sv_clear> to invoke destructors and free up any memory used by
6422 the body; finally, deallocate the SV's head itself.
6423 Normally called via a wrapper macro C<SvREFCNT_dec>.
6424
6425 =cut
6426 */
6427
6428 void
6429 Perl_sv_free(pTHX_ SV *const sv)
6430 {
6431     dVAR;
6432     if (!sv)
6433         return;
6434     if (SvREFCNT(sv) == 0) {
6435         if (SvFLAGS(sv) & SVf_BREAK)
6436             /* this SV's refcnt has been artificially decremented to
6437              * trigger cleanup */
6438             return;
6439         if (PL_in_clean_all) /* All is fair */
6440             return;
6441         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6442             /* make sure SvREFCNT(sv)==0 happens very seldom */
6443             SvREFCNT(sv) = (~(U32)0)/2;
6444             return;
6445         }
6446         if (ckWARN_d(WARN_INTERNAL)) {
6447 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6448             Perl_dump_sv_child(aTHX_ sv);
6449 #else
6450   #ifdef DEBUG_LEAKING_SCALARS
6451             sv_dump(sv);
6452   #endif
6453 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6454             if (PL_warnhook == PERL_WARNHOOK_FATAL
6455                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6456                 /* Don't let Perl_warner cause us to escape our fate:  */
6457                 abort();
6458             }
6459 #endif
6460             /* This may not return:  */
6461             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6462                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6463                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6464 #endif
6465         }
6466 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6467         abort();
6468 #endif
6469         return;
6470     }
6471     if (--(SvREFCNT(sv)) > 0)
6472         return;
6473     Perl_sv_free2(aTHX_ sv);
6474 }
6475
6476 void
6477 Perl_sv_free2(pTHX_ SV *const sv)
6478 {
6479     dVAR;
6480
6481     PERL_ARGS_ASSERT_SV_FREE2;
6482
6483 #ifdef DEBUGGING
6484     if (SvTEMP(sv)) {
6485         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6486                          "Attempt to free temp prematurely: SV 0x%"UVxf
6487                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6488         return;
6489     }
6490 #endif
6491     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6492         /* make sure SvREFCNT(sv)==0 happens very seldom */
6493         SvREFCNT(sv) = (~(U32)0)/2;
6494         return;
6495     }
6496     sv_clear(sv);
6497     if (! SvREFCNT(sv))
6498         del_SV(sv);
6499 }
6500
6501 /*
6502 =for apidoc sv_len
6503
6504 Returns the length of the string in the SV.  Handles magic and type
6505 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6506 gives raw access to the xpv_cur slot.
6507
6508 =cut
6509 */
6510
6511 STRLEN
6512 Perl_sv_len(pTHX_ register SV *const sv)
6513 {
6514     STRLEN len;
6515
6516     if (!sv)
6517         return 0;
6518
6519     (void)SvPV_const(sv, len);
6520     return len;
6521 }
6522
6523 /*
6524 =for apidoc sv_len_utf8
6525
6526 Returns the number of characters in the string in an SV, counting wide
6527 UTF-8 bytes as a single character.  Handles magic and type coercion.
6528
6529 =cut
6530 */
6531
6532 /*
6533  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6534  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6535  * (Note that the mg_len is not the length of the mg_ptr field.
6536  * This allows the cache to store the character length of the string without
6537  * needing to malloc() extra storage to attach to the mg_ptr.)
6538  *
6539  */
6540
6541 STRLEN
6542 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6543 {
6544     if (!sv)
6545         return 0;
6546
6547     SvGETMAGIC(sv);
6548     return sv_len_utf8_nomg(sv);
6549 }
6550
6551 STRLEN
6552 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6553 {
6554     dVAR;
6555     STRLEN len;
6556     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6557
6558     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6559
6560     if (PL_utf8cache && SvUTF8(sv)) {
6561             STRLEN ulen;
6562             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6563
6564             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6565                 if (mg->mg_len != -1)
6566                     ulen = mg->mg_len;
6567                 else {
6568                     /* We can use the offset cache for a headstart.
6569                        The longer value is stored in the first pair.  */
6570                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6571
6572                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6573                                                        s + len);
6574                 }
6575                 
6576                 if (PL_utf8cache < 0) {
6577                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6578                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6579                 }
6580             }
6581             else {
6582                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6583                 utf8_mg_len_cache_update(sv, &mg, ulen);
6584             }
6585             return ulen;
6586     }
6587     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6588 }
6589
6590 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6591    offset.  */
6592 static STRLEN
6593 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6594                       STRLEN *const uoffset_p, bool *const at_end)
6595 {
6596     const U8 *s = start;
6597     STRLEN uoffset = *uoffset_p;
6598
6599     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6600
6601     while (s < send && uoffset) {
6602         --uoffset;
6603         s += UTF8SKIP(s);
6604     }
6605     if (s == send) {
6606         *at_end = TRUE;
6607     }
6608     else if (s > send) {
6609         *at_end = TRUE;
6610         /* This is the existing behaviour. Possibly it should be a croak, as
6611            it's actually a bounds error  */
6612         s = send;
6613     }
6614     *uoffset_p -= uoffset;
6615     return s - start;
6616 }
6617
6618 /* Given the length of the string in both bytes and UTF-8 characters, decide
6619    whether to walk forwards or backwards to find the byte corresponding to
6620    the passed in UTF-8 offset.  */
6621 static STRLEN
6622 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6623                     STRLEN uoffset, const STRLEN uend)
6624 {
6625     STRLEN backw = uend - uoffset;
6626
6627     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6628
6629     if (uoffset < 2 * backw) {
6630         /* The assumption is that going forwards is twice the speed of going
6631            forward (that's where the 2 * backw comes from).
6632            (The real figure of course depends on the UTF-8 data.)  */
6633         const U8 *s = start;
6634
6635         while (s < send && uoffset--)
6636             s += UTF8SKIP(s);
6637         assert (s <= send);
6638         if (s > send)
6639             s = send;
6640         return s - start;
6641     }
6642
6643     while (backw--) {
6644         send--;
6645         while (UTF8_IS_CONTINUATION(*send))
6646             send--;
6647     }
6648     return send - start;
6649 }
6650
6651 /* For the string representation of the given scalar, find the byte
6652    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6653    give another position in the string, *before* the sought offset, which
6654    (which is always true, as 0, 0 is a valid pair of positions), which should
6655    help reduce the amount of linear searching.
6656    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6657    will be used to reduce the amount of linear searching. The cache will be
6658    created if necessary, and the found value offered to it for update.  */
6659 static STRLEN
6660 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6661                     const U8 *const send, STRLEN uoffset,
6662                     STRLEN uoffset0, STRLEN boffset0)
6663 {
6664     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6665     bool found = FALSE;
6666     bool at_end = FALSE;
6667
6668     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6669
6670     assert (uoffset >= uoffset0);
6671
6672     if (!uoffset)
6673         return 0;
6674
6675     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
6676         && PL_utf8cache
6677         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6678                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6679         if ((*mgp)->mg_ptr) {
6680             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6681             if (cache[0] == uoffset) {
6682                 /* An exact match. */
6683                 return cache[1];
6684             }
6685             if (cache[2] == uoffset) {
6686                 /* An exact match. */
6687                 return cache[3];
6688             }
6689
6690             if (cache[0] < uoffset) {
6691                 /* The cache already knows part of the way.   */
6692                 if (cache[0] > uoffset0) {
6693                     /* The cache knows more than the passed in pair  */
6694                     uoffset0 = cache[0];
6695                     boffset0 = cache[1];
6696                 }
6697                 if ((*mgp)->mg_len != -1) {
6698                     /* And we know the end too.  */
6699                     boffset = boffset0
6700                         + sv_pos_u2b_midway(start + boffset0, send,
6701                                               uoffset - uoffset0,
6702                                               (*mgp)->mg_len - uoffset0);
6703                 } else {
6704                     uoffset -= uoffset0;
6705                     boffset = boffset0
6706                         + sv_pos_u2b_forwards(start + boffset0,
6707                                               send, &uoffset, &at_end);
6708                     uoffset += uoffset0;
6709                 }
6710             }
6711             else if (cache[2] < uoffset) {
6712                 /* We're between the two cache entries.  */
6713                 if (cache[2] > uoffset0) {
6714                     /* and the cache knows more than the passed in pair  */
6715                     uoffset0 = cache[2];
6716                     boffset0 = cache[3];
6717                 }
6718
6719                 boffset = boffset0
6720                     + sv_pos_u2b_midway(start + boffset0,
6721                                           start + cache[1],
6722                                           uoffset - uoffset0,
6723                                           cache[0] - uoffset0);
6724             } else {
6725                 boffset = boffset0
6726                     + sv_pos_u2b_midway(start + boffset0,
6727                                           start + cache[3],
6728                                           uoffset - uoffset0,
6729                                           cache[2] - uoffset0);
6730             }
6731             found = TRUE;
6732         }
6733         else if ((*mgp)->mg_len != -1) {
6734             /* If we can take advantage of a passed in offset, do so.  */
6735             /* In fact, offset0 is either 0, or less than offset, so don't
6736                need to worry about the other possibility.  */
6737             boffset = boffset0
6738                 + sv_pos_u2b_midway(start + boffset0, send,
6739                                       uoffset - uoffset0,
6740                                       (*mgp)->mg_len - uoffset0);
6741             found = TRUE;
6742         }
6743     }
6744
6745     if (!found || PL_utf8cache < 0) {
6746         STRLEN real_boffset;
6747         uoffset -= uoffset0;
6748         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6749                                                       send, &uoffset, &at_end);
6750         uoffset += uoffset0;
6751
6752         if (found && PL_utf8cache < 0)
6753             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6754                                        real_boffset, sv);
6755         boffset = real_boffset;
6756     }
6757
6758     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
6759         if (at_end)
6760             utf8_mg_len_cache_update(sv, mgp, uoffset);
6761         else
6762             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6763     }
6764     return boffset;
6765 }
6766
6767
6768 /*
6769 =for apidoc sv_pos_u2b_flags
6770
6771 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6772 the start of the string, to a count of the equivalent number of bytes; if
6773 lenp is non-zero, it does the same to lenp, but this time starting from
6774 the offset, rather than from the start
6775 of the string.  Handles type coercion.
6776 I<flags> is passed to C<SvPV_flags>, and usually should be
6777 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6778
6779 =cut
6780 */
6781
6782 /*
6783  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6784  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6785  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6786  *
6787  */
6788
6789 STRLEN
6790 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6791                       U32 flags)
6792 {
6793     const U8 *start;
6794     STRLEN len;
6795     STRLEN boffset;
6796
6797     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6798
6799     start = (U8*)SvPV_flags(sv, len, flags);
6800     if (len) {
6801         const U8 * const send = start + len;
6802         MAGIC *mg = NULL;
6803         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6804
6805         if (lenp
6806             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6807                         is 0, and *lenp is already set to that.  */) {
6808             /* Convert the relative offset to absolute.  */
6809             const STRLEN uoffset2 = uoffset + *lenp;
6810             const STRLEN boffset2
6811                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6812                                       uoffset, boffset) - boffset;
6813
6814             *lenp = boffset2;
6815         }
6816     } else {
6817         if (lenp)
6818             *lenp = 0;
6819         boffset = 0;
6820     }
6821
6822     return boffset;
6823 }
6824
6825 /*
6826 =for apidoc sv_pos_u2b
6827
6828 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6829 the start of the string, to a count of the equivalent number of bytes; if
6830 lenp is non-zero, it does the same to lenp, but this time starting from
6831 the offset, rather than from the start of the string.  Handles magic and
6832 type coercion.
6833
6834 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6835 than 2Gb.
6836
6837 =cut
6838 */
6839
6840 /*
6841  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6842  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6843  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6844  *
6845  */
6846
6847 /* This function is subject to size and sign problems */
6848
6849 void
6850 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6851 {
6852     PERL_ARGS_ASSERT_SV_POS_U2B;
6853
6854     if (lenp) {
6855         STRLEN ulen = (STRLEN)*lenp;
6856         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6857                                          SV_GMAGIC|SV_CONST_RETURN);
6858         *lenp = (I32)ulen;
6859     } else {
6860         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6861                                          SV_GMAGIC|SV_CONST_RETURN);
6862     }
6863 }
6864
6865 static void
6866 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6867                            const STRLEN ulen)
6868 {
6869     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6870     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
6871         return;
6872
6873     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6874                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6875         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6876     }
6877     assert(*mgp);
6878
6879     (*mgp)->mg_len = ulen;
6880     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
6881     if (ulen != (STRLEN) (*mgp)->mg_len)
6882         (*mgp)->mg_len = -1;
6883 }
6884
6885 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6886    byte length pairing. The (byte) length of the total SV is passed in too,
6887    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6888    may not have updated SvCUR, so we can't rely on reading it directly.
6889
6890    The proffered utf8/byte length pairing isn't used if the cache already has
6891    two pairs, and swapping either for the proffered pair would increase the
6892    RMS of the intervals between known byte offsets.
6893
6894    The cache itself consists of 4 STRLEN values
6895    0: larger UTF-8 offset
6896    1: corresponding byte offset
6897    2: smaller UTF-8 offset
6898    3: corresponding byte offset
6899
6900    Unused cache pairs have the value 0, 0.
6901    Keeping the cache "backwards" means that the invariant of
6902    cache[0] >= cache[2] is maintained even with empty slots, which means that
6903    the code that uses it doesn't need to worry if only 1 entry has actually
6904    been set to non-zero.  It also makes the "position beyond the end of the
6905    cache" logic much simpler, as the first slot is always the one to start
6906    from.   
6907 */
6908 static void
6909 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6910                            const STRLEN utf8, const STRLEN blen)
6911 {
6912     STRLEN *cache;
6913
6914     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6915
6916     if (SvREADONLY(sv))
6917         return;
6918
6919     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6920                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6921         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6922                            0);
6923         (*mgp)->mg_len = -1;
6924     }
6925     assert(*mgp);
6926
6927     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6928         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6929         (*mgp)->mg_ptr = (char *) cache;
6930     }
6931     assert(cache);
6932
6933     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6934         /* SvPOKp() because it's possible that sv has string overloading, and
6935            therefore is a reference, hence SvPVX() is actually a pointer.
6936            This cures the (very real) symptoms of RT 69422, but I'm not actually
6937            sure whether we should even be caching the results of UTF-8
6938            operations on overloading, given that nothing stops overloading
6939            returning a different value every time it's called.  */
6940         const U8 *start = (const U8 *) SvPVX_const(sv);
6941         const STRLEN realutf8 = utf8_length(start, start + byte);
6942
6943         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6944                                    sv);
6945     }
6946
6947     /* Cache is held with the later position first, to simplify the code
6948        that deals with unbounded ends.  */
6949        
6950     ASSERT_UTF8_CACHE(cache);
6951     if (cache[1] == 0) {
6952         /* Cache is totally empty  */
6953         cache[0] = utf8;
6954         cache[1] = byte;
6955     } else if (cache[3] == 0) {
6956         if (byte > cache[1]) {
6957             /* New one is larger, so goes first.  */
6958             cache[2] = cache[0];
6959             cache[3] = cache[1];
6960             cache[0] = utf8;
6961             cache[1] = byte;
6962         } else {
6963             cache[2] = utf8;
6964             cache[3] = byte;
6965         }
6966     } else {
6967 #define THREEWAY_SQUARE(a,b,c,d) \
6968             ((float)((d) - (c))) * ((float)((d) - (c))) \
6969             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6970                + ((float)((b) - (a))) * ((float)((b) - (a)))
6971
6972         /* Cache has 2 slots in use, and we know three potential pairs.
6973            Keep the two that give the lowest RMS distance. Do the
6974            calculation in bytes simply because we always know the byte
6975            length.  squareroot has the same ordering as the positive value,
6976            so don't bother with the actual square root.  */
6977         if (byte > cache[1]) {
6978             /* New position is after the existing pair of pairs.  */
6979             const float keep_earlier
6980                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6981             const float keep_later
6982                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6983
6984             if (keep_later < keep_earlier) {
6985                 cache[2] = cache[0];
6986                 cache[3] = cache[1];
6987                 cache[0] = utf8;
6988                 cache[1] = byte;
6989             }
6990             else {
6991                 cache[0] = utf8;
6992                 cache[1] = byte;
6993             }
6994         }
6995         else if (byte > cache[3]) {
6996             /* New position is between the existing pair of pairs.  */
6997             const float keep_earlier
6998                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6999             const float keep_later
7000                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7001
7002             if (keep_later < keep_earlier) {
7003                 cache[2] = utf8;
7004                 cache[3] = byte;
7005             }
7006             else {
7007                 cache[0] = utf8;
7008                 cache[1] = byte;
7009             }
7010         }
7011         else {
7012             /* New position is before the existing pair of pairs.  */
7013             const float keep_earlier
7014                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7015             const float keep_later
7016                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7017
7018             if (keep_later < keep_earlier) {
7019                 cache[2] = utf8;
7020                 cache[3] = byte;
7021             }
7022             else {
7023                 cache[0] = cache[2];
7024                 cache[1] = cache[3];
7025                 cache[2] = utf8;
7026                 cache[3] = byte;
7027             }
7028         }
7029     }
7030     ASSERT_UTF8_CACHE(cache);
7031 }
7032
7033 /* We already know all of the way, now we may be able to walk back.  The same
7034    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7035    backward is half the speed of walking forward. */
7036 static STRLEN
7037 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7038                     const U8 *end, STRLEN endu)
7039 {
7040     const STRLEN forw = target - s;
7041     STRLEN backw = end - target;
7042
7043     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7044
7045     if (forw < 2 * backw) {
7046         return utf8_length(s, target);
7047     }
7048
7049     while (end > target) {
7050         end--;
7051         while (UTF8_IS_CONTINUATION(*end)) {
7052             end--;
7053         }
7054         endu--;
7055     }
7056     return endu;
7057 }
7058
7059 /*
7060 =for apidoc sv_pos_b2u
7061
7062 Converts the value pointed to by offsetp from a count of bytes from the
7063 start of the string, to a count of the equivalent number of UTF-8 chars.
7064 Handles magic and type coercion.
7065
7066 =cut
7067 */
7068
7069 /*
7070  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7071  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7072  * byte offsets.
7073  *
7074  */
7075 void
7076 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
7077 {
7078     const U8* s;
7079     const STRLEN byte = *offsetp;
7080     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7081     STRLEN blen;
7082     MAGIC* mg = NULL;
7083     const U8* send;
7084     bool found = FALSE;
7085
7086     PERL_ARGS_ASSERT_SV_POS_B2U;
7087
7088     if (!sv)
7089         return;
7090
7091     s = (const U8*)SvPV_const(sv, blen);
7092
7093     if (blen < byte)
7094         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7095                    ", byte=%"UVuf, (UV)blen, (UV)byte);
7096
7097     send = s + byte;
7098
7099     if (!SvREADONLY(sv)
7100         && PL_utf8cache
7101         && SvTYPE(sv) >= SVt_PVMG
7102         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7103     {
7104         if (mg->mg_ptr) {
7105             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7106             if (cache[1] == byte) {
7107                 /* An exact match. */
7108                 *offsetp = cache[0];
7109                 return;
7110             }
7111             if (cache[3] == byte) {
7112                 /* An exact match. */
7113                 *offsetp = cache[2];
7114                 return;
7115             }
7116
7117             if (cache[1] < byte) {
7118                 /* We already know part of the way. */
7119                 if (mg->mg_len != -1) {
7120                     /* Actually, we know the end too.  */
7121                     len = cache[0]
7122                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7123                                               s + blen, mg->mg_len - cache[0]);
7124                 } else {
7125                     len = cache[0] + utf8_length(s + cache[1], send);
7126                 }
7127             }
7128             else if (cache[3] < byte) {
7129                 /* We're between the two cached pairs, so we do the calculation
7130                    offset by the byte/utf-8 positions for the earlier pair,
7131                    then add the utf-8 characters from the string start to
7132                    there.  */
7133                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7134                                           s + cache[1], cache[0] - cache[2])
7135                     + cache[2];
7136
7137             }
7138             else { /* cache[3] > byte */
7139                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7140                                           cache[2]);
7141
7142             }
7143             ASSERT_UTF8_CACHE(cache);
7144             found = TRUE;
7145         } else if (mg->mg_len != -1) {
7146             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7147             found = TRUE;
7148         }
7149     }
7150     if (!found || PL_utf8cache < 0) {
7151         const STRLEN real_len = utf8_length(s, send);
7152
7153         if (found && PL_utf8cache < 0)
7154             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7155         len = real_len;
7156     }
7157     *offsetp = len;
7158
7159     if (PL_utf8cache) {
7160         if (blen == byte)
7161             utf8_mg_len_cache_update(sv, &mg, len);
7162         else
7163             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7164     }
7165 }
7166
7167 static void
7168 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7169                              STRLEN real, SV *const sv)
7170 {
7171     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7172
7173     /* As this is debugging only code, save space by keeping this test here,
7174        rather than inlining it in all the callers.  */
7175     if (from_cache == real)
7176         return;
7177
7178     /* Need to turn the assertions off otherwise we may recurse infinitely
7179        while printing error messages.  */
7180     SAVEI8(PL_utf8cache);
7181     PL_utf8cache = 0;
7182     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7183                func, (UV) from_cache, (UV) real, SVfARG(sv));
7184 }
7185
7186 /*
7187 =for apidoc sv_eq
7188
7189 Returns a boolean indicating whether the strings in the two SVs are
7190 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7191 coerce its args to strings if necessary.
7192
7193 =for apidoc sv_eq_flags
7194
7195 Returns a boolean indicating whether the strings in the two SVs are
7196 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7197 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7198
7199 =cut
7200 */
7201
7202 I32
7203 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
7204 {
7205     dVAR;
7206     const char *pv1;
7207     STRLEN cur1;
7208     const char *pv2;
7209     STRLEN cur2;
7210     I32  eq     = 0;
7211     SV* svrecode = NULL;
7212
7213     if (!sv1) {
7214         pv1 = "";
7215         cur1 = 0;
7216     }
7217     else {
7218         /* if pv1 and pv2 are the same, second SvPV_const call may
7219          * invalidate pv1 (if we are handling magic), so we may need to
7220          * make a copy */
7221         if (sv1 == sv2 && flags & SV_GMAGIC
7222          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7223             pv1 = SvPV_const(sv1, cur1);
7224             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7225         }
7226         pv1 = SvPV_flags_const(sv1, cur1, flags);
7227     }
7228
7229     if (!sv2){
7230         pv2 = "";
7231         cur2 = 0;
7232     }
7233     else
7234         pv2 = SvPV_flags_const(sv2, cur2, flags);
7235
7236     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7237         /* Differing utf8ness.
7238          * Do not UTF8size the comparands as a side-effect. */
7239          if (PL_encoding) {
7240               if (SvUTF8(sv1)) {
7241                    svrecode = newSVpvn(pv2, cur2);
7242                    sv_recode_to_utf8(svrecode, PL_encoding);
7243                    pv2 = SvPV_const(svrecode, cur2);
7244               }
7245               else {
7246                    svrecode = newSVpvn(pv1, cur1);
7247                    sv_recode_to_utf8(svrecode, PL_encoding);
7248                    pv1 = SvPV_const(svrecode, cur1);
7249               }
7250               /* Now both are in UTF-8. */
7251               if (cur1 != cur2) {
7252                    SvREFCNT_dec(svrecode);
7253                    return FALSE;
7254               }
7255          }
7256          else {
7257               if (SvUTF8(sv1)) {
7258                   /* sv1 is the UTF-8 one  */
7259                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7260                                         (const U8*)pv1, cur1) == 0;
7261               }
7262               else {
7263                   /* sv2 is the UTF-8 one  */
7264                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7265                                         (const U8*)pv2, cur2) == 0;
7266               }
7267          }
7268     }
7269
7270     if (cur1 == cur2)
7271         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7272         
7273     SvREFCNT_dec(svrecode);
7274
7275     return eq;
7276 }
7277
7278 /*
7279 =for apidoc sv_cmp
7280
7281 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7282 string in C<sv1> is less than, equal to, or greater than the string in
7283 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7284 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7285
7286 =for apidoc sv_cmp_flags
7287
7288 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7289 string in C<sv1> is less than, equal to, or greater than the string in
7290 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7291 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7292 also C<sv_cmp_locale_flags>.
7293
7294 =cut
7295 */
7296
7297 I32
7298 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7299 {
7300     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7301 }
7302
7303 I32
7304 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7305                   const U32 flags)
7306 {
7307     dVAR;
7308     STRLEN cur1, cur2;
7309     const char *pv1, *pv2;
7310     char *tpv = NULL;
7311     I32  cmp;
7312     SV *svrecode = NULL;
7313
7314     if (!sv1) {
7315         pv1 = "";
7316         cur1 = 0;
7317     }
7318     else
7319         pv1 = SvPV_flags_const(sv1, cur1, flags);
7320
7321     if (!sv2) {
7322         pv2 = "";
7323         cur2 = 0;
7324     }
7325     else
7326         pv2 = SvPV_flags_const(sv2, cur2, flags);
7327
7328     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7329         /* Differing utf8ness.
7330          * Do not UTF8size the comparands as a side-effect. */
7331         if (SvUTF8(sv1)) {
7332             if (PL_encoding) {
7333                  svrecode = newSVpvn(pv2, cur2);
7334                  sv_recode_to_utf8(svrecode, PL_encoding);
7335                  pv2 = SvPV_const(svrecode, cur2);
7336             }
7337             else {
7338                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7339                                                    (const U8*)pv1, cur1);
7340                 return retval ? retval < 0 ? -1 : +1 : 0;
7341             }
7342         }
7343         else {
7344             if (PL_encoding) {
7345                  svrecode = newSVpvn(pv1, cur1);
7346                  sv_recode_to_utf8(svrecode, PL_encoding);
7347                  pv1 = SvPV_const(svrecode, cur1);
7348             }
7349             else {
7350                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7351                                                   (const U8*)pv2, cur2);
7352                 return retval ? retval < 0 ? -1 : +1 : 0;
7353             }
7354         }
7355     }
7356
7357     if (!cur1) {
7358         cmp = cur2 ? -1 : 0;
7359     } else if (!cur2) {
7360         cmp = 1;
7361     } else {
7362         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7363
7364         if (retval) {
7365             cmp = retval < 0 ? -1 : 1;
7366         } else if (cur1 == cur2) {
7367             cmp = 0;
7368         } else {
7369             cmp = cur1 < cur2 ? -1 : 1;
7370         }
7371     }
7372
7373     SvREFCNT_dec(svrecode);
7374     if (tpv)
7375         Safefree(tpv);
7376
7377     return cmp;
7378 }
7379
7380 /*
7381 =for apidoc sv_cmp_locale
7382
7383 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7384 'use bytes' aware, handles get magic, and will coerce its args to strings
7385 if necessary.  See also C<sv_cmp>.
7386
7387 =for apidoc sv_cmp_locale_flags
7388
7389 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7390 'use bytes' aware and will coerce its args to strings if necessary.  If the
7391 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7392
7393 =cut
7394 */
7395
7396 I32
7397 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7398 {
7399     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7400 }
7401
7402 I32
7403 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7404                          const U32 flags)
7405 {
7406     dVAR;
7407 #ifdef USE_LOCALE_COLLATE
7408
7409     char *pv1, *pv2;
7410     STRLEN len1, len2;
7411     I32 retval;
7412
7413     if (PL_collation_standard)
7414         goto raw_compare;
7415
7416     len1 = 0;
7417     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7418     len2 = 0;
7419     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7420
7421     if (!pv1 || !len1) {
7422         if (pv2 && len2)
7423             return -1;
7424         else
7425             goto raw_compare;
7426     }
7427     else {
7428         if (!pv2 || !len2)
7429             return 1;
7430     }
7431
7432     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7433
7434     if (retval)
7435         return retval < 0 ? -1 : 1;
7436
7437     /*
7438      * When the result of collation is equality, that doesn't mean
7439      * that there are no differences -- some locales exclude some
7440      * characters from consideration.  So to avoid false equalities,
7441      * we use the raw string as a tiebreaker.
7442      */
7443
7444   raw_compare:
7445     /*FALLTHROUGH*/
7446
7447 #endif /* USE_LOCALE_COLLATE */
7448
7449     return sv_cmp(sv1, sv2);
7450 }
7451
7452
7453 #ifdef USE_LOCALE_COLLATE
7454
7455 /*
7456 =for apidoc sv_collxfrm
7457
7458 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7459 C<sv_collxfrm_flags>.
7460
7461 =for apidoc sv_collxfrm_flags
7462
7463 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7464 flags contain SV_GMAGIC, it handles get-magic.
7465
7466 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7467 scalar data of the variable, but transformed to such a format that a normal
7468 memory comparison can be used to compare the data according to the locale
7469 settings.
7470
7471 =cut
7472 */
7473
7474 char *
7475 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7476 {
7477     dVAR;
7478     MAGIC *mg;
7479
7480     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7481
7482     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7483     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7484         const char *s;
7485         char *xf;
7486         STRLEN len, xlen;
7487
7488         if (mg)
7489             Safefree(mg->mg_ptr);
7490         s = SvPV_flags_const(sv, len, flags);
7491         if ((xf = mem_collxfrm(s, len, &xlen))) {
7492             if (! mg) {
7493 #ifdef PERL_OLD_COPY_ON_WRITE
7494                 if (SvIsCOW(sv))
7495                     sv_force_normal_flags(sv, 0);
7496 #endif
7497                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7498                                  0, 0);
7499                 assert(mg);
7500             }
7501             mg->mg_ptr = xf;
7502             mg->mg_len = xlen;
7503         }
7504         else {
7505             if (mg) {
7506                 mg->mg_ptr = NULL;
7507                 mg->mg_len = -1;
7508             }
7509         }
7510     }
7511     if (mg && mg->mg_ptr) {
7512         *nxp = mg->mg_len;
7513         return mg->mg_ptr + sizeof(PL_collation_ix);
7514     }
7515     else {
7516         *nxp = 0;
7517         return NULL;
7518     }
7519 }
7520
7521 #endif /* USE_LOCALE_COLLATE */
7522
7523 static char *
7524 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7525 {
7526     SV * const tsv = newSV(0);
7527     ENTER;
7528     SAVEFREESV(tsv);
7529     sv_gets(tsv, fp, 0);
7530     sv_utf8_upgrade_nomg(tsv);
7531     SvCUR_set(sv,append);
7532     sv_catsv(sv,tsv);
7533     LEAVE;
7534     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7535 }
7536
7537 static char *
7538 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7539 {
7540     I32 bytesread;
7541     const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7542       /* Grab the size of the record we're getting */
7543     char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7544 #ifdef VMS
7545     int fd;
7546 #endif
7547
7548     /* Go yank in */
7549 #ifdef VMS
7550     /* VMS wants read instead of fread, because fread doesn't respect */
7551     /* RMS record boundaries. This is not necessarily a good thing to be */
7552     /* doing, but we've got no other real choice - except avoid stdio
7553        as implementation - perhaps write a :vms layer ?
7554     */
7555     fd = PerlIO_fileno(fp);
7556     if (fd != -1) {
7557         bytesread = PerlLIO_read(fd, buffer, recsize);
7558     }
7559     else /* in-memory file from PerlIO::Scalar */
7560 #endif
7561     {
7562         bytesread = PerlIO_read(fp, buffer, recsize);
7563     }
7564
7565     if (bytesread < 0)
7566         bytesread = 0;
7567     SvCUR_set(sv, bytesread + append);
7568     buffer[bytesread] = '\0';
7569     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7570 }
7571
7572 /*
7573 =for apidoc sv_gets
7574
7575 Get a line from the filehandle and store it into the SV, optionally
7576 appending to the currently-stored string. If C<append> is not 0, the
7577 line is appended to the SV instead of overwriting it. C<append> should
7578 be set to the byte offset that the appended string should start at
7579 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7580
7581 =cut
7582 */
7583
7584 char *
7585 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7586 {
7587     dVAR;
7588     const char *rsptr;
7589     STRLEN rslen;
7590     STDCHAR rslast;
7591     STDCHAR *bp;
7592     I32 cnt;
7593     I32 i = 0;
7594     I32 rspara = 0;
7595
7596     PERL_ARGS_ASSERT_SV_GETS;
7597
7598     if (SvTHINKFIRST(sv))
7599         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7600     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7601        from <>.
7602        However, perlbench says it's slower, because the existing swipe code
7603        is faster than copy on write.
7604        Swings and roundabouts.  */
7605     SvUPGRADE(sv, SVt_PV);
7606
7607     if (append) {
7608         if (PerlIO_isutf8(fp)) {
7609             if (!SvUTF8(sv)) {
7610                 sv_utf8_upgrade_nomg(sv);
7611                 sv_pos_u2b(sv,&append,0);
7612             }
7613         } else if (SvUTF8(sv)) {
7614             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7615         }
7616     }
7617
7618     SvPOK_only(sv);
7619     if (!append) {
7620         SvCUR_set(sv,0);
7621     }
7622     if (PerlIO_isutf8(fp))
7623         SvUTF8_on(sv);
7624
7625     if (IN_PERL_COMPILETIME) {
7626         /* we always read code in line mode */
7627         rsptr = "\n";
7628         rslen = 1;
7629     }
7630     else if (RsSNARF(PL_rs)) {
7631         /* If it is a regular disk file use size from stat() as estimate
7632            of amount we are going to read -- may result in mallocing
7633            more memory than we really need if the layers below reduce
7634            the size we read (e.g. CRLF or a gzip layer).
7635          */
7636         Stat_t st;
7637         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7638             const Off_t offset = PerlIO_tell(fp);
7639             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7640                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7641             }
7642         }
7643         rsptr = NULL;
7644         rslen = 0;
7645     }
7646     else if (RsRECORD(PL_rs)) {
7647         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7648     }
7649     else if (RsPARA(PL_rs)) {
7650         rsptr = "\n\n";
7651         rslen = 2;
7652         rspara = 1;
7653     }
7654     else {
7655         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7656         if (PerlIO_isutf8(fp)) {
7657             rsptr = SvPVutf8(PL_rs, rslen);
7658         }
7659         else {
7660             if (SvUTF8(PL_rs)) {
7661                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7662                     Perl_croak(aTHX_ "Wide character in $/");
7663                 }
7664             }
7665             rsptr = SvPV_const(PL_rs, rslen);
7666         }
7667     }
7668
7669     rslast = rslen ? rsptr[rslen - 1] : '\0';
7670
7671     if (rspara) {               /* have to do this both before and after */
7672         do {                    /* to make sure file boundaries work right */
7673             if (PerlIO_eof(fp))
7674                 return 0;
7675             i = PerlIO_getc(fp);
7676             if (i != '\n') {
7677                 if (i == -1)
7678                     return 0;
7679                 PerlIO_ungetc(fp,i);
7680                 break;
7681             }
7682         } while (i != EOF);
7683     }
7684
7685     /* See if we know enough about I/O mechanism to cheat it ! */
7686
7687     /* This used to be #ifdef test - it is made run-time test for ease
7688        of abstracting out stdio interface. One call should be cheap
7689        enough here - and may even be a macro allowing compile
7690        time optimization.
7691      */
7692
7693     if (PerlIO_fast_gets(fp)) {
7694
7695     /*
7696      * We're going to steal some values from the stdio struct
7697      * and put EVERYTHING in the innermost loop into registers.
7698      */
7699     STDCHAR *ptr;
7700     STRLEN bpx;
7701     I32 shortbuffered;
7702
7703 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7704     /* An ungetc()d char is handled separately from the regular
7705      * buffer, so we getc() it back out and stuff it in the buffer.
7706      */
7707     i = PerlIO_getc(fp);
7708     if (i == EOF) return 0;
7709     *(--((*fp)->_ptr)) = (unsigned char) i;
7710     (*fp)->_cnt++;
7711 #endif
7712
7713     /* Here is some breathtakingly efficient cheating */
7714
7715     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7716     /* make sure we have the room */
7717     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7718         /* Not room for all of it
7719            if we are looking for a separator and room for some
7720          */
7721         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7722             /* just process what we have room for */
7723             shortbuffered = cnt - SvLEN(sv) + append + 1;
7724             cnt -= shortbuffered;
7725         }
7726         else {
7727             shortbuffered = 0;
7728             /* remember that cnt can be negative */
7729             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7730         }
7731     }
7732     else
7733         shortbuffered = 0;
7734     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7735     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7736     DEBUG_P(PerlIO_printf(Perl_debug_log,
7737         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7738     DEBUG_P(PerlIO_printf(Perl_debug_log,
7739         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7740                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7741                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7742     for (;;) {
7743       screamer:
7744         if (cnt > 0) {
7745             if (rslen) {
7746                 while (cnt > 0) {                    /* this     |  eat */
7747                     cnt--;
7748                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7749                         goto thats_all_folks;        /* screams  |  sed :-) */
7750                 }
7751             }
7752             else {
7753                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7754                 bp += cnt;                           /* screams  |  dust */
7755                 ptr += cnt;                          /* louder   |  sed :-) */
7756                 cnt = 0;
7757                 assert (!shortbuffered);
7758                 goto cannot_be_shortbuffered;
7759             }
7760         }
7761         
7762         if (shortbuffered) {            /* oh well, must extend */
7763             cnt = shortbuffered;
7764             shortbuffered = 0;
7765             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7766             SvCUR_set(sv, bpx);
7767             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7768             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7769             continue;
7770         }
7771
7772     cannot_be_shortbuffered:
7773         DEBUG_P(PerlIO_printf(Perl_debug_log,
7774                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7775                               PTR2UV(ptr),(long)cnt));
7776         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7777
7778         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7779             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7780             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7781             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7782
7783         /* This used to call 'filbuf' in stdio form, but as that behaves like
7784            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7785            another abstraction.  */
7786         i   = PerlIO_getc(fp);          /* get more characters */
7787
7788         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7789             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7790             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7791             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7792
7793         cnt = PerlIO_get_cnt(fp);
7794         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7795         DEBUG_P(PerlIO_printf(Perl_debug_log,
7796             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7797
7798         if (i == EOF)                   /* all done for ever? */
7799             goto thats_really_all_folks;
7800
7801         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7802         SvCUR_set(sv, bpx);
7803         SvGROW(sv, bpx + cnt + 2);
7804         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7805
7806         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7807
7808         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7809             goto thats_all_folks;
7810     }
7811
7812 thats_all_folks:
7813     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7814           memNE((char*)bp - rslen, rsptr, rslen))
7815         goto screamer;                          /* go back to the fray */
7816 thats_really_all_folks:
7817     if (shortbuffered)
7818         cnt += shortbuffered;
7819         DEBUG_P(PerlIO_printf(Perl_debug_log,
7820             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7821     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7822     DEBUG_P(PerlIO_printf(Perl_debug_log,
7823         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7824         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7825         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7826     *bp = '\0';
7827     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7828     DEBUG_P(PerlIO_printf(Perl_debug_log,
7829         "Screamer: done, len=%ld, string=|%.*s|\n",
7830         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7831     }
7832    else
7833     {
7834        /*The big, slow, and stupid way. */
7835 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7836         STDCHAR *buf = NULL;
7837         Newx(buf, 8192, STDCHAR);
7838         assert(buf);
7839 #else
7840         STDCHAR buf[8192];
7841 #endif
7842
7843 screamer2:
7844         if (rslen) {
7845             const STDCHAR * const bpe = buf + sizeof(buf);
7846             bp = buf;
7847             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7848                 ; /* keep reading */
7849             cnt = bp - buf;
7850         }
7851         else {
7852             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7853             /* Accommodate broken VAXC compiler, which applies U8 cast to
7854              * both args of ?: operator, causing EOF to change into 255
7855              */
7856             if (cnt > 0)
7857                  i = (U8)buf[cnt - 1];
7858             else
7859                  i = EOF;
7860         }
7861
7862         if (cnt < 0)
7863             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7864         if (append)
7865             sv_catpvn_nomg(sv, (char *) buf, cnt);
7866         else
7867             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
7868
7869         if (i != EOF &&                 /* joy */
7870             (!rslen ||
7871              SvCUR(sv) < rslen ||
7872              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7873         {
7874             append = -1;
7875             /*
7876              * If we're reading from a TTY and we get a short read,
7877              * indicating that the user hit his EOF character, we need
7878              * to notice it now, because if we try to read from the TTY
7879              * again, the EOF condition will disappear.
7880              *
7881              * The comparison of cnt to sizeof(buf) is an optimization
7882              * that prevents unnecessary calls to feof().
7883              *
7884              * - jik 9/25/96
7885              */
7886             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7887                 goto screamer2;
7888         }
7889
7890 #ifdef USE_HEAP_INSTEAD_OF_STACK
7891         Safefree(buf);
7892 #endif
7893     }
7894
7895     if (rspara) {               /* have to do this both before and after */
7896         while (i != EOF) {      /* to make sure file boundaries work right */
7897             i = PerlIO_getc(fp);
7898             if (i != '\n') {
7899                 PerlIO_ungetc(fp,i);
7900                 break;
7901             }
7902         }
7903     }
7904
7905     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7906 }
7907
7908 /*
7909 =for apidoc sv_inc
7910
7911 Auto-increment of the value in the SV, doing string to numeric conversion
7912 if necessary.  Handles 'get' magic and operator overloading.
7913
7914 =cut
7915 */
7916
7917 void
7918 Perl_sv_inc(pTHX_ register SV *const sv)
7919 {
7920     if (!sv)
7921         return;
7922     SvGETMAGIC(sv);
7923     sv_inc_nomg(sv);
7924 }
7925
7926 /*
7927 =for apidoc sv_inc_nomg
7928
7929 Auto-increment of the value in the SV, doing string to numeric conversion
7930 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
7931
7932 =cut
7933 */
7934
7935 void
7936 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7937 {
7938     dVAR;
7939     char *d;
7940     int flags;
7941
7942     if (!sv)
7943         return;
7944     if (SvTHINKFIRST(sv)) {
7945         if (SvIsCOW(sv) || isGV_with_GP(sv))
7946             sv_force_normal_flags(sv, 0);
7947         if (SvREADONLY(sv)) {
7948             if (IN_PERL_RUNTIME)
7949                 Perl_croak_no_modify();
7950         }
7951         if (SvROK(sv)) {
7952             IV i;
7953             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
7954                 return;
7955             i = PTR2IV(SvRV(sv));
7956             sv_unref(sv);
7957             sv_setiv(sv, i);
7958         }
7959     }
7960     flags = SvFLAGS(sv);
7961     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7962         /* It's (privately or publicly) a float, but not tested as an
7963            integer, so test it to see. */
7964         (void) SvIV(sv);
7965         flags = SvFLAGS(sv);
7966     }
7967     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7968         /* It's publicly an integer, or privately an integer-not-float */
7969 #ifdef PERL_PRESERVE_IVUV
7970       oops_its_int:
7971 #endif
7972         if (SvIsUV(sv)) {
7973             if (SvUVX(sv) == UV_MAX)
7974                 sv_setnv(sv, UV_MAX_P1);
7975             else
7976                 (void)SvIOK_only_UV(sv);
7977                 SvUV_set(sv, SvUVX(sv) + 1);
7978         } else {
7979             if (SvIVX(sv) == IV_MAX)
7980                 sv_setuv(sv, (UV)IV_MAX + 1);
7981             else {
7982                 (void)SvIOK_only(sv);
7983                 SvIV_set(sv, SvIVX(sv) + 1);
7984             }   
7985         }
7986         return;
7987     }
7988     if (flags & SVp_NOK) {
7989         const NV was = SvNVX(sv);
7990         if (NV_OVERFLOWS_INTEGERS_AT &&
7991             was >= NV_OVERFLOWS_INTEGERS_AT) {
7992             /* diag_listed_as: Lost precision when %s %f by 1 */
7993             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7994                            "Lost precision when incrementing %" NVff " by 1",
7995                            was);
7996         }
7997         (void)SvNOK_only(sv);
7998         SvNV_set(sv, was + 1.0);
7999         return;
8000     }
8001
8002     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8003         if ((flags & SVTYPEMASK) < SVt_PVIV)
8004             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8005         (void)SvIOK_only(sv);
8006         SvIV_set(sv, 1);
8007         return;
8008     }
8009     d = SvPVX(sv);
8010     while (isALPHA(*d)) d++;
8011     while (isDIGIT(*d)) d++;
8012     if (d < SvEND(sv)) {
8013 #ifdef PERL_PRESERVE_IVUV
8014         /* Got to punt this as an integer if needs be, but we don't issue
8015            warnings. Probably ought to make the sv_iv_please() that does
8016            the conversion if possible, and silently.  */
8017         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8018         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8019             /* Need to try really hard to see if it's an integer.
8020                9.22337203685478e+18 is an integer.
8021                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8022                so $a="9.22337203685478e+18"; $a+0; $a++
8023                needs to be the same as $a="9.22337203685478e+18"; $a++
8024                or we go insane. */
8025         
8026             (void) sv_2iv(sv);
8027             if (SvIOK(sv))
8028                 goto oops_its_int;
8029
8030             /* sv_2iv *should* have made this an NV */
8031             if (flags & SVp_NOK) {
8032                 (void)SvNOK_only(sv);
8033                 SvNV_set(sv, SvNVX(sv) + 1.0);
8034                 return;
8035             }
8036             /* I don't think we can get here. Maybe I should assert this
8037                And if we do get here I suspect that sv_setnv will croak. NWC
8038                Fall through. */
8039 #if defined(USE_LONG_DOUBLE)
8040             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",
8041                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8042 #else
8043             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8044                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8045 #endif
8046         }
8047 #endif /* PERL_PRESERVE_IVUV */
8048         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8049         return;
8050     }
8051     d--;
8052     while (d >= SvPVX_const(sv)) {
8053         if (isDIGIT(*d)) {
8054             if (++*d <= '9')
8055                 return;
8056             *(d--) = '0';
8057         }
8058         else {
8059 #ifdef EBCDIC
8060             /* MKS: The original code here died if letters weren't consecutive.
8061              * at least it didn't have to worry about non-C locales.  The
8062              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8063              * arranged in order (although not consecutively) and that only
8064              * [A-Za-z] are accepted by isALPHA in the C locale.
8065              */
8066             if (*d != 'z' && *d != 'Z') {
8067                 do { ++*d; } while (!isALPHA(*d));
8068                 return;
8069             }
8070             *(d--) -= 'z' - 'a';
8071 #else
8072             ++*d;
8073             if (isALPHA(*d))
8074                 return;
8075             *(d--) -= 'z' - 'a' + 1;
8076 #endif
8077         }
8078     }
8079     /* oh,oh, the number grew */
8080     SvGROW(sv, SvCUR(sv) + 2);
8081     SvCUR_set(sv, SvCUR(sv) + 1);
8082     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8083         *d = d[-1];
8084     if (isDIGIT(d[1]))
8085         *d = '1';
8086     else
8087         *d = d[1];
8088 }
8089
8090 /*
8091 =for apidoc sv_dec
8092
8093 Auto-decrement of the value in the SV, doing string to numeric conversion
8094 if necessary.  Handles 'get' magic and operator overloading.
8095
8096 =cut
8097 */
8098
8099 void
8100 Perl_sv_dec(pTHX_ register SV *const sv)
8101 {
8102     dVAR;
8103     if (!sv)
8104         return;
8105     SvGETMAGIC(sv);
8106     sv_dec_nomg(sv);
8107 }
8108
8109 /*
8110 =for apidoc sv_dec_nomg
8111
8112 Auto-decrement of the value in the SV, doing string to numeric conversion
8113 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8114
8115 =cut
8116 */
8117
8118 void
8119 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8120 {
8121     dVAR;
8122     int flags;
8123
8124     if (!sv)
8125         return;
8126     if (SvTHINKFIRST(sv)) {
8127         if (SvIsCOW(sv) || isGV_with_GP(sv))
8128             sv_force_normal_flags(sv, 0);
8129         if (SvREADONLY(sv)) {
8130             if (IN_PERL_RUNTIME)
8131                 Perl_croak_no_modify();
8132         }
8133         if (SvROK(sv)) {
8134             IV i;
8135             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8136                 return;
8137             i = PTR2IV(SvRV(sv));
8138             sv_unref(sv);
8139             sv_setiv(sv, i);
8140         }
8141     }
8142     /* Unlike sv_inc we don't have to worry about string-never-numbers
8143        and keeping them magic. But we mustn't warn on punting */
8144     flags = SvFLAGS(sv);
8145     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8146         /* It's publicly an integer, or privately an integer-not-float */
8147 #ifdef PERL_PRESERVE_IVUV
8148       oops_its_int:
8149 #endif
8150         if (SvIsUV(sv)) {
8151             if (SvUVX(sv) == 0) {
8152                 (void)SvIOK_only(sv);
8153                 SvIV_set(sv, -1);
8154             }
8155             else {
8156                 (void)SvIOK_only_UV(sv);
8157                 SvUV_set(sv, SvUVX(sv) - 1);
8158             }   
8159         } else {
8160             if (SvIVX(sv) == IV_MIN) {
8161                 sv_setnv(sv, (NV)IV_MIN);
8162                 goto oops_its_num;
8163             }
8164             else {
8165                 (void)SvIOK_only(sv);
8166                 SvIV_set(sv, SvIVX(sv) - 1);
8167             }   
8168         }
8169         return;
8170     }
8171     if (flags & SVp_NOK) {
8172     oops_its_num:
8173         {
8174             const NV was = SvNVX(sv);
8175             if (NV_OVERFLOWS_INTEGERS_AT &&
8176                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8177                 /* diag_listed_as: Lost precision when %s %f by 1 */
8178                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8179                                "Lost precision when decrementing %" NVff " by 1",
8180                                was);
8181             }
8182             (void)SvNOK_only(sv);
8183             SvNV_set(sv, was - 1.0);
8184             return;
8185         }
8186     }
8187     if (!(flags & SVp_POK)) {
8188         if ((flags & SVTYPEMASK) < SVt_PVIV)
8189             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8190         SvIV_set(sv, -1);
8191         (void)SvIOK_only(sv);
8192         return;
8193     }
8194 #ifdef PERL_PRESERVE_IVUV
8195     {
8196         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8197         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8198             /* Need to try really hard to see if it's an integer.
8199                9.22337203685478e+18 is an integer.
8200                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8201                so $a="9.22337203685478e+18"; $a+0; $a--
8202                needs to be the same as $a="9.22337203685478e+18"; $a--
8203                or we go insane. */
8204         
8205             (void) sv_2iv(sv);
8206             if (SvIOK(sv))
8207                 goto oops_its_int;
8208
8209             /* sv_2iv *should* have made this an NV */
8210             if (flags & SVp_NOK) {
8211                 (void)SvNOK_only(sv);
8212                 SvNV_set(sv, SvNVX(sv) - 1.0);
8213                 return;
8214             }
8215             /* I don't think we can get here. Maybe I should assert this
8216                And if we do get here I suspect that sv_setnv will croak. NWC
8217                Fall through. */
8218 #if defined(USE_LONG_DOUBLE)
8219             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",
8220                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8221 #else
8222             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8223                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8224 #endif
8225         }
8226     }
8227 #endif /* PERL_PRESERVE_IVUV */
8228     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8229 }
8230
8231 /* this define is used to eliminate a chunk of duplicated but shared logic
8232  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8233  * used anywhere but here - yves
8234  */
8235 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8236     STMT_START {      \
8237         EXTEND_MORTAL(1); \
8238         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8239     } STMT_END
8240
8241 /*
8242 =for apidoc sv_mortalcopy
8243
8244 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8245 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8246 explicit call to FREETMPS, or by an implicit call at places such as
8247 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8248
8249 =cut
8250 */
8251
8252 /* Make a string that will exist for the duration of the expression
8253  * evaluation.  Actually, it may have to last longer than that, but
8254  * hopefully we won't free it until it has been assigned to a
8255  * permanent location. */
8256
8257 SV *
8258 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8259 {
8260     dVAR;
8261     SV *sv;
8262
8263     if (flags & SV_GMAGIC)
8264         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8265     new_SV(sv);
8266     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8267     PUSH_EXTEND_MORTAL__SV_C(sv);
8268     SvTEMP_on(sv);
8269     return sv;
8270 }
8271
8272 /*
8273 =for apidoc sv_newmortal
8274
8275 Creates a new null SV which is mortal.  The reference count of the SV is
8276 set to 1.  It will be destroyed "soon", either by an explicit call to
8277 FREETMPS, or by an implicit call at places such as statement boundaries.
8278 See also C<sv_mortalcopy> and C<sv_2mortal>.
8279
8280 =cut
8281 */
8282
8283 SV *
8284 Perl_sv_newmortal(pTHX)
8285 {
8286     dVAR;
8287     SV *sv;
8288
8289     new_SV(sv);
8290     SvFLAGS(sv) = SVs_TEMP;
8291     PUSH_EXTEND_MORTAL__SV_C(sv);
8292     return sv;
8293 }
8294
8295
8296 /*
8297 =for apidoc newSVpvn_flags
8298
8299 Creates a new SV and copies a string into it.  The reference count for the
8300 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8301 string.  You are responsible for ensuring that the source string is at least
8302 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8303 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8304 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8305 returning.  If C<SVf_UTF8> is set, C<s>
8306 is considered to be in UTF-8 and the
8307 C<SVf_UTF8> flag will be set on the new SV.
8308 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8309
8310     #define newSVpvn_utf8(s, len, u)                    \
8311         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8312
8313 =cut
8314 */
8315
8316 SV *
8317 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8318 {
8319     dVAR;
8320     SV *sv;
8321
8322     /* All the flags we don't support must be zero.
8323        And we're new code so I'm going to assert this from the start.  */
8324     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8325     new_SV(sv);
8326     sv_setpvn(sv,s,len);
8327
8328     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8329      * and do what it does ourselves here.
8330      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8331      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8332      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8333      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8334      */
8335
8336     SvFLAGS(sv) |= flags;
8337
8338     if(flags & SVs_TEMP){
8339         PUSH_EXTEND_MORTAL__SV_C(sv);
8340     }
8341
8342     return sv;
8343 }
8344
8345 /*
8346 =for apidoc sv_2mortal
8347
8348 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8349 by an explicit call to FREETMPS, or by an implicit call at places such as
8350 statement boundaries.  SvTEMP() is turned on which means that the SV's
8351 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8352 and C<sv_mortalcopy>.
8353
8354 =cut
8355 */
8356
8357 SV *
8358 Perl_sv_2mortal(pTHX_ register SV *const sv)
8359 {
8360     dVAR;
8361     if (!sv)
8362         return NULL;
8363     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8364         return sv;
8365     PUSH_EXTEND_MORTAL__SV_C(sv);
8366     SvTEMP_on(sv);
8367     return sv;
8368 }
8369
8370 /*
8371 =for apidoc newSVpv
8372
8373 Creates a new SV and copies a string into it.  The reference count for the
8374 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8375 strlen().  For efficiency, consider using C<newSVpvn> instead.
8376
8377 =cut
8378 */
8379
8380 SV *
8381 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8382 {
8383     dVAR;
8384     SV *sv;
8385
8386     new_SV(sv);
8387     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8388     return sv;
8389 }
8390
8391 /*
8392 =for apidoc newSVpvn
8393
8394 Creates a new SV and copies a buffer into it, which may contain NUL characters
8395 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8396 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8397 are responsible for ensuring that the source buffer is at least
8398 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8399 undefined.
8400
8401 =cut
8402 */
8403
8404 SV *
8405 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8406 {
8407     dVAR;
8408     SV *sv;
8409
8410     new_SV(sv);
8411     sv_setpvn(sv,buffer,len);
8412     return sv;
8413 }
8414
8415 /*
8416 =for apidoc newSVhek
8417
8418 Creates a new SV from the hash key structure.  It will generate scalars that
8419 point to the shared string table where possible.  Returns a new (undefined)
8420 SV if the hek is NULL.
8421
8422 =cut
8423 */
8424
8425 SV *
8426 Perl_newSVhek(pTHX_ const HEK *const hek)
8427 {
8428     dVAR;
8429     if (!hek) {
8430         SV *sv;
8431
8432         new_SV(sv);
8433         return sv;
8434     }
8435
8436     if (HEK_LEN(hek) == HEf_SVKEY) {
8437         return newSVsv(*(SV**)HEK_KEY(hek));
8438     } else {
8439         const int flags = HEK_FLAGS(hek);
8440         if (flags & HVhek_WASUTF8) {
8441             /* Trouble :-)
8442                Andreas would like keys he put in as utf8 to come back as utf8
8443             */
8444             STRLEN utf8_len = HEK_LEN(hek);
8445             SV * const sv = newSV_type(SVt_PV);
8446             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8447             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8448             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8449             SvUTF8_on (sv);
8450             return sv;
8451         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8452             /* We don't have a pointer to the hv, so we have to replicate the
8453                flag into every HEK. This hv is using custom a hasing
8454                algorithm. Hence we can't return a shared string scalar, as
8455                that would contain the (wrong) hash value, and might get passed
8456                into an hv routine with a regular hash.
8457                Similarly, a hash that isn't using shared hash keys has to have
8458                the flag in every key so that we know not to try to call
8459                share_hek_hek on it.  */
8460
8461             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8462             if (HEK_UTF8(hek))
8463                 SvUTF8_on (sv);
8464             return sv;
8465         }
8466         /* This will be overwhelminly the most common case.  */
8467         {
8468             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8469                more efficient than sharepvn().  */
8470             SV *sv;
8471
8472             new_SV(sv);
8473             sv_upgrade(sv, SVt_PV);
8474             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8475             SvCUR_set(sv, HEK_LEN(hek));
8476             SvLEN_set(sv, 0);
8477             SvIsCOW_on(sv);
8478             SvPOK_on(sv);
8479             if (HEK_UTF8(hek))
8480                 SvUTF8_on(sv);
8481             return sv;
8482         }
8483     }
8484 }
8485
8486 /*
8487 =for apidoc newSVpvn_share
8488
8489 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8490 table.  If the string does not already exist in the table, it is
8491 created first.  Turns on READONLY and FAKE.  If the C<hash> parameter
8492 is non-zero, that value is used; otherwise the hash is computed.
8493 The string's hash can later be retrieved from the SV
8494 with the C<SvSHARED_HASH()> macro.  The idea here is
8495 that as the string table is used for shared hash keys these strings will have
8496 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8497
8498 =cut
8499 */
8500
8501 SV *
8502 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8503 {
8504     dVAR;
8505     SV *sv;
8506     bool is_utf8 = FALSE;
8507     const char *const orig_src = src;
8508
8509     if (len < 0) {
8510         STRLEN tmplen = -len;
8511         is_utf8 = TRUE;
8512         /* See the note in hv.c:hv_fetch() --jhi */
8513         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8514         len = tmplen;
8515     }
8516     if (!hash)
8517         PERL_HASH(hash, src, len);
8518     new_SV(sv);
8519     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8520        changes here, update it there too.  */
8521     sv_upgrade(sv, SVt_PV);
8522     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8523     SvCUR_set(sv, len);
8524     SvLEN_set(sv, 0);
8525     SvIsCOW_on(sv);
8526     SvPOK_on(sv);
8527     if (is_utf8)
8528         SvUTF8_on(sv);
8529     if (src != orig_src)
8530         Safefree(src);
8531     return sv;
8532 }
8533
8534 /*
8535 =for apidoc newSVpv_share
8536
8537 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8538 string/length pair.
8539
8540 =cut
8541 */
8542
8543 SV *
8544 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8545 {
8546     return newSVpvn_share(src, strlen(src), hash);
8547 }
8548
8549 #if defined(PERL_IMPLICIT_CONTEXT)
8550
8551 /* pTHX_ magic can't cope with varargs, so this is a no-context
8552  * version of the main function, (which may itself be aliased to us).
8553  * Don't access this version directly.
8554  */
8555
8556 SV *
8557 Perl_newSVpvf_nocontext(const char *const pat, ...)
8558 {
8559     dTHX;
8560     SV *sv;
8561     va_list args;
8562
8563     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8564
8565     va_start(args, pat);
8566     sv = vnewSVpvf(pat, &args);
8567     va_end(args);
8568     return sv;
8569 }
8570 #endif
8571
8572 /*
8573 =for apidoc newSVpvf
8574
8575 Creates a new SV and initializes it with the string formatted like
8576 C<sprintf>.
8577
8578 =cut
8579 */
8580
8581 SV *
8582 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8583 {
8584     SV *sv;
8585     va_list args;
8586
8587     PERL_ARGS_ASSERT_NEWSVPVF;
8588
8589     va_start(args, pat);
8590     sv = vnewSVpvf(pat, &args);
8591     va_end(args);
8592     return sv;
8593 }
8594
8595 /* backend for newSVpvf() and newSVpvf_nocontext() */
8596
8597 SV *
8598 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8599 {
8600     dVAR;
8601     SV *sv;
8602
8603     PERL_ARGS_ASSERT_VNEWSVPVF;
8604
8605     new_SV(sv);
8606     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8607     return sv;
8608 }
8609
8610 /*
8611 =for apidoc newSVnv
8612
8613 Creates a new SV and copies a floating point value into it.
8614 The reference count for the SV is set to 1.
8615
8616 =cut
8617 */
8618
8619 SV *
8620 Perl_newSVnv(pTHX_ const NV n)
8621 {
8622     dVAR;
8623     SV *sv;
8624
8625     new_SV(sv);
8626     sv_setnv(sv,n);
8627     return sv;
8628 }
8629
8630 /*
8631 =for apidoc newSViv
8632
8633 Creates a new SV and copies an integer into it.  The reference count for the
8634 SV is set to 1.
8635
8636 =cut
8637 */
8638
8639 SV *
8640 Perl_newSViv(pTHX_ const IV i)
8641 {
8642     dVAR;
8643     SV *sv;
8644
8645     new_SV(sv);
8646     sv_setiv(sv,i);
8647     return sv;
8648 }
8649
8650 /*
8651 =for apidoc newSVuv
8652
8653 Creates a new SV and copies an unsigned integer into it.
8654 The reference count for the SV is set to 1.
8655
8656 =cut
8657 */
8658
8659 SV *
8660 Perl_newSVuv(pTHX_ const UV u)
8661 {
8662     dVAR;
8663     SV *sv;
8664
8665     new_SV(sv);
8666     sv_setuv(sv,u);
8667     return sv;
8668 }
8669
8670 /*
8671 =for apidoc newSV_type
8672
8673 Creates a new SV, of the type specified.  The reference count for the new SV
8674 is set to 1.
8675
8676 =cut
8677 */
8678
8679 SV *
8680 Perl_newSV_type(pTHX_ const svtype type)
8681 {
8682     SV *sv;
8683
8684     new_SV(sv);
8685     sv_upgrade(sv, type);
8686     return sv;
8687 }
8688
8689 /*
8690 =for apidoc newRV_noinc
8691
8692 Creates an RV wrapper for an SV.  The reference count for the original
8693 SV is B<not> incremented.
8694
8695 =cut
8696 */
8697
8698 SV *
8699 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8700 {
8701     dVAR;
8702     SV *sv = newSV_type(SVt_IV);
8703
8704     PERL_ARGS_ASSERT_NEWRV_NOINC;
8705
8706     SvTEMP_off(tmpRef);
8707     SvRV_set(sv, tmpRef);
8708     SvROK_on(sv);
8709     return sv;
8710 }
8711
8712 /* newRV_inc is the official function name to use now.
8713  * newRV_inc is in fact #defined to newRV in sv.h
8714  */
8715
8716 SV *
8717 Perl_newRV(pTHX_ SV *const sv)
8718 {
8719     dVAR;
8720
8721     PERL_ARGS_ASSERT_NEWRV;
8722
8723     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8724 }
8725
8726 /*
8727 =for apidoc newSVsv
8728
8729 Creates a new SV which is an exact duplicate of the original SV.
8730 (Uses C<sv_setsv>.)
8731
8732 =cut
8733 */
8734
8735 SV *
8736 Perl_newSVsv(pTHX_ register SV *const old)
8737 {
8738     dVAR;
8739     SV *sv;
8740
8741     if (!old)
8742         return NULL;
8743     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8744         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8745         return NULL;
8746     }
8747     /* Do this here, otherwise we leak the new SV if this croaks. */
8748     SvGETMAGIC(old);
8749     new_SV(sv);
8750     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8751        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8752     sv_setsv_flags(sv, old, SV_NOSTEAL);
8753     return sv;
8754 }
8755
8756 /*
8757 =for apidoc sv_reset
8758
8759 Underlying implementation for the C<reset> Perl function.
8760 Note that the perl-level function is vaguely deprecated.
8761
8762 =cut
8763 */
8764
8765 void
8766 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8767 {
8768     PERL_ARGS_ASSERT_SV_RESET;
8769
8770     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
8771 }
8772
8773 void
8774 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
8775 {
8776     dVAR;
8777     char todo[PERL_UCHAR_MAX+1];
8778     const char *send;
8779
8780     if (!stash)
8781         return;
8782
8783     if (!s) {           /* reset ?? searches */
8784         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8785         if (mg) {
8786             const U32 count = mg->mg_len / sizeof(PMOP**);
8787             PMOP **pmp = (PMOP**) mg->mg_ptr;
8788             PMOP *const *const end = pmp + count;
8789
8790             while (pmp < end) {
8791 #ifdef USE_ITHREADS
8792                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8793 #else
8794                 (*pmp)->op_pmflags &= ~PMf_USED;
8795 #endif
8796                 ++pmp;
8797             }
8798         }
8799         return;
8800     }
8801
8802     /* reset variables */
8803
8804     if (!HvARRAY(stash))
8805         return;
8806
8807     Zero(todo, 256, char);
8808     send = s + len;
8809     while (s < send) {
8810         I32 max;
8811         I32 i = (unsigned char)*s;
8812         if (s[1] == '-') {
8813             s += 2;
8814         }
8815         max = (unsigned char)*s++;
8816         for ( ; i <= max; i++) {
8817             todo[i] = 1;
8818         }
8819         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8820             HE *entry;
8821             for (entry = HvARRAY(stash)[i];
8822                  entry;
8823                  entry = HeNEXT(entry))
8824             {
8825                 GV *gv;
8826                 SV *sv;
8827
8828                 if (!todo[(U8)*HeKEY(entry)])
8829                     continue;
8830                 gv = MUTABLE_GV(HeVAL(entry));
8831                 sv = GvSV(gv);
8832                 if (sv) {
8833                     if (SvTHINKFIRST(sv)) {
8834                         if (!SvREADONLY(sv) && SvROK(sv))
8835                             sv_unref(sv);
8836                         /* XXX Is this continue a bug? Why should THINKFIRST
8837                            exempt us from resetting arrays and hashes?  */
8838                         continue;
8839                     }
8840                     SvOK_off(sv);
8841                     if (SvTYPE(sv) >= SVt_PV) {
8842                         SvCUR_set(sv, 0);
8843                         if (SvPVX_const(sv) != NULL)
8844                             *SvPVX(sv) = '\0';
8845                         SvTAINT(sv);
8846                     }
8847                 }
8848                 if (GvAV(gv)) {
8849                     av_clear(GvAV(gv));
8850                 }
8851                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8852 #if defined(VMS)
8853                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8854 #else /* ! VMS */
8855                     hv_clear(GvHV(gv));
8856 #  if defined(USE_ENVIRON_ARRAY)
8857                     if (gv == PL_envgv)
8858                         my_clearenv();
8859 #  endif /* USE_ENVIRON_ARRAY */
8860 #endif /* VMS */
8861                 }
8862             }
8863         }
8864     }
8865 }
8866
8867 /*
8868 =for apidoc sv_2io
8869
8870 Using various gambits, try to get an IO from an SV: the IO slot if its a
8871 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8872 named after the PV if we're a string.
8873
8874 'Get' magic is ignored on the sv passed in, but will be called on
8875 C<SvRV(sv)> if sv is an RV.
8876
8877 =cut
8878 */
8879
8880 IO*
8881 Perl_sv_2io(pTHX_ SV *const sv)
8882 {
8883     IO* io;
8884     GV* gv;
8885
8886     PERL_ARGS_ASSERT_SV_2IO;
8887
8888     switch (SvTYPE(sv)) {
8889     case SVt_PVIO:
8890         io = MUTABLE_IO(sv);
8891         break;
8892     case SVt_PVGV:
8893     case SVt_PVLV:
8894         if (isGV_with_GP(sv)) {
8895             gv = MUTABLE_GV(sv);
8896             io = GvIO(gv);
8897             if (!io)
8898                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
8899                                     HEKfARG(GvNAME_HEK(gv)));
8900             break;
8901         }
8902         /* FALL THROUGH */
8903     default:
8904         if (!SvOK(sv))
8905             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8906         if (SvROK(sv)) {
8907             SvGETMAGIC(SvRV(sv));
8908             return sv_2io(SvRV(sv));
8909         }
8910         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
8911         if (gv)
8912             io = GvIO(gv);
8913         else
8914             io = 0;
8915         if (!io) {
8916             SV *newsv = sv;
8917             if (SvGMAGICAL(sv)) {
8918                 newsv = sv_newmortal();
8919                 sv_setsv_nomg(newsv, sv);
8920             }
8921             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
8922         }
8923         break;
8924     }
8925     return io;
8926 }
8927
8928 /*
8929 =for apidoc sv_2cv
8930
8931 Using various gambits, try to get a CV from an SV; in addition, try if
8932 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8933 The flags in C<lref> are passed to gv_fetchsv.
8934
8935 =cut
8936 */
8937
8938 CV *
8939 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8940 {
8941     dVAR;
8942     GV *gv = NULL;
8943     CV *cv = NULL;
8944
8945     PERL_ARGS_ASSERT_SV_2CV;
8946
8947     if (!sv) {
8948         *st = NULL;
8949         *gvp = NULL;
8950         return NULL;
8951     }
8952     switch (SvTYPE(sv)) {
8953     case SVt_PVCV:
8954         *st = CvSTASH(sv);
8955         *gvp = NULL;
8956         return MUTABLE_CV(sv);
8957     case SVt_PVHV:
8958     case SVt_PVAV:
8959         *st = NULL;
8960         *gvp = NULL;
8961         return NULL;
8962     default:
8963         SvGETMAGIC(sv);
8964         if (SvROK(sv)) {
8965             if (SvAMAGIC(sv))
8966                 sv = amagic_deref_call(sv, to_cv_amg);
8967
8968             sv = SvRV(sv);
8969             if (SvTYPE(sv) == SVt_PVCV) {
8970                 cv = MUTABLE_CV(sv);
8971                 *gvp = NULL;
8972                 *st = CvSTASH(cv);
8973                 return cv;
8974             }
8975             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
8976                 gv = MUTABLE_GV(sv);
8977             else
8978                 Perl_croak(aTHX_ "Not a subroutine reference");
8979         }
8980         else if (isGV_with_GP(sv)) {
8981             gv = MUTABLE_GV(sv);
8982         }
8983         else {
8984             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
8985         }
8986         *gvp = gv;
8987         if (!gv) {
8988             *st = NULL;
8989             return NULL;
8990         }
8991         /* Some flags to gv_fetchsv mean don't really create the GV  */
8992         if (!isGV_with_GP(gv)) {
8993             *st = NULL;
8994             return NULL;
8995         }
8996         *st = GvESTASH(gv);
8997         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
8998             /* XXX this is probably not what they think they're getting.
8999              * It has the same effect as "sub name;", i.e. just a forward
9000              * declaration! */
9001             newSTUB(gv,0);
9002         }
9003         return GvCVu(gv);
9004     }
9005 }
9006
9007 /*
9008 =for apidoc sv_true
9009
9010 Returns true if the SV has a true value by Perl's rules.
9011 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9012 instead use an in-line version.
9013
9014 =cut
9015 */
9016
9017 I32
9018 Perl_sv_true(pTHX_ register SV *const sv)
9019 {
9020     if (!sv)
9021         return 0;
9022     if (SvPOK(sv)) {
9023         const XPV* const tXpv = (XPV*)SvANY(sv);
9024         if (tXpv &&
9025                 (tXpv->xpv_cur > 1 ||
9026                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9027             return 1;
9028         else
9029             return 0;
9030     }
9031     else {
9032         if (SvIOK(sv))
9033             return SvIVX(sv) != 0;
9034         else {
9035             if (SvNOK(sv))
9036                 return SvNVX(sv) != 0.0;
9037             else
9038                 return sv_2bool(sv);
9039         }
9040     }
9041 }
9042
9043 /*
9044 =for apidoc sv_pvn_force
9045
9046 Get a sensible string out of the SV somehow.
9047 A private implementation of the C<SvPV_force> macro for compilers which
9048 can't cope with complex macro expressions.  Always use the macro instead.
9049
9050 =for apidoc sv_pvn_force_flags
9051
9052 Get a sensible string out of the SV somehow.
9053 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9054 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9055 implemented in terms of this function.
9056 You normally want to use the various wrapper macros instead: see
9057 C<SvPV_force> and C<SvPV_force_nomg>
9058
9059 =cut
9060 */
9061
9062 char *
9063 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9064 {
9065     dVAR;
9066
9067     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9068
9069     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9070     if (SvTHINKFIRST(sv) && !SvROK(sv))
9071         sv_force_normal_flags(sv, 0);
9072
9073     if (SvPOK(sv)) {
9074         if (lp)
9075             *lp = SvCUR(sv);
9076     }
9077     else {
9078         char *s;
9079         STRLEN len;
9080  
9081         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9082             const char * const ref = sv_reftype(sv,0);
9083             if (PL_op)
9084                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9085                            ref, OP_DESC(PL_op));
9086             else
9087                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9088         }
9089         if (SvTYPE(sv) > SVt_PVLV
9090             || isGV_with_GP(sv))
9091             /* diag_listed_as: Can't coerce %s to %s in %s */
9092             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9093                 OP_DESC(PL_op));
9094         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9095         if (!s) {
9096           s = (char *)"";
9097         }
9098         if (lp)
9099             *lp = len;
9100
9101         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9102             if (SvROK(sv))
9103                 sv_unref(sv);
9104             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9105             SvGROW(sv, len + 1);
9106             Move(s,SvPVX(sv),len,char);
9107             SvCUR_set(sv, len);
9108             SvPVX(sv)[len] = '\0';
9109         }
9110         if (!SvPOK(sv)) {
9111             SvPOK_on(sv);               /* validate pointer */
9112             SvTAINT(sv);
9113             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9114                                   PTR2UV(sv),SvPVX_const(sv)));
9115         }
9116     }
9117     (void)SvPOK_only_UTF8(sv);
9118     return SvPVX_mutable(sv);
9119 }
9120
9121 /*
9122 =for apidoc sv_pvbyten_force
9123
9124 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9125 instead.
9126
9127 =cut
9128 */
9129
9130 char *
9131 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9132 {
9133     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9134
9135     sv_pvn_force(sv,lp);
9136     sv_utf8_downgrade(sv,0);
9137     *lp = SvCUR(sv);
9138     return SvPVX(sv);
9139 }
9140
9141 /*
9142 =for apidoc sv_pvutf8n_force
9143
9144 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9145 instead.
9146
9147 =cut
9148 */
9149
9150 char *
9151 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9152 {
9153     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9154
9155     sv_pvn_force(sv,0);
9156     sv_utf8_upgrade_nomg(sv);
9157     *lp = SvCUR(sv);
9158     return SvPVX(sv);
9159 }
9160
9161 /*
9162 =for apidoc sv_reftype
9163
9164 Returns a string describing what the SV is a reference to.
9165
9166 =cut
9167 */
9168
9169 const char *
9170 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9171 {
9172     PERL_ARGS_ASSERT_SV_REFTYPE;
9173     if (ob && SvOBJECT(sv)) {
9174         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9175     }
9176     else {
9177         switch (SvTYPE(sv)) {
9178         case SVt_NULL:
9179         case SVt_IV:
9180         case SVt_NV:
9181         case SVt_PV:
9182         case SVt_PVIV:
9183         case SVt_PVNV:
9184         case SVt_PVMG:
9185                                 if (SvVOK(sv))
9186                                     return "VSTRING";
9187                                 if (SvROK(sv))
9188                                     return "REF";
9189                                 else
9190                                     return "SCALAR";
9191
9192         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9193                                 /* tied lvalues should appear to be
9194                                  * scalars for backwards compatibility */
9195                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9196                                     ? "SCALAR" : "LVALUE");
9197         case SVt_PVAV:          return "ARRAY";
9198         case SVt_PVHV:          return "HASH";
9199         case SVt_PVCV:          return "CODE";
9200         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9201                                     ? "GLOB" : "SCALAR");
9202         case SVt_PVFM:          return "FORMAT";
9203         case SVt_PVIO:          return "IO";
9204         case SVt_BIND:          return "BIND";
9205         case SVt_REGEXP:        return "REGEXP";
9206         default:                return "UNKNOWN";
9207         }
9208     }
9209 }
9210
9211 /*
9212 =for apidoc sv_ref
9213
9214 Returns a SV describing what the SV passed in is a reference to.
9215
9216 =cut
9217 */
9218
9219 SV *
9220 Perl_sv_ref(pTHX_ register SV *dst, const SV *const sv, const int ob)
9221 {
9222     PERL_ARGS_ASSERT_SV_REF;
9223
9224     if (!dst)
9225         dst = sv_newmortal();
9226
9227     if (ob && SvOBJECT(sv)) {
9228         HvNAME_get(SvSTASH(sv))
9229                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9230                     : sv_setpvn(dst, "__ANON__", 8);
9231     }
9232     else {
9233         const char * reftype = sv_reftype(sv, 0);
9234         sv_setpv(dst, reftype);
9235     }
9236     return dst;
9237 }
9238
9239 /*
9240 =for apidoc sv_isobject
9241
9242 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9243 object.  If the SV is not an RV, or if the object is not blessed, then this
9244 will return false.
9245
9246 =cut
9247 */
9248
9249 int
9250 Perl_sv_isobject(pTHX_ SV *sv)
9251 {
9252     if (!sv)
9253         return 0;
9254     SvGETMAGIC(sv);
9255     if (!SvROK(sv))
9256         return 0;
9257     sv = SvRV(sv);
9258     if (!SvOBJECT(sv))
9259         return 0;
9260     return 1;
9261 }
9262
9263 /*
9264 =for apidoc sv_isa
9265
9266 Returns a boolean indicating whether the SV is blessed into the specified
9267 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9268 an inheritance relationship.
9269
9270 =cut
9271 */
9272
9273 int
9274 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9275 {
9276     const char *hvname;
9277
9278     PERL_ARGS_ASSERT_SV_ISA;
9279
9280     if (!sv)
9281         return 0;
9282     SvGETMAGIC(sv);
9283     if (!SvROK(sv))
9284         return 0;
9285     sv = SvRV(sv);
9286     if (!SvOBJECT(sv))
9287         return 0;
9288     hvname = HvNAME_get(SvSTASH(sv));
9289     if (!hvname)
9290         return 0;
9291
9292     return strEQ(hvname, name);
9293 }
9294
9295 /*
9296 =for apidoc newSVrv
9297
9298 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9299 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9300 be blessed in the specified package.  The new SV is returned and its
9301 reference count is 1.
9302
9303 =cut
9304 */
9305
9306 SV*
9307 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9308 {
9309     dVAR;
9310     SV *sv;
9311
9312     PERL_ARGS_ASSERT_NEWSVRV;
9313
9314     new_SV(sv);
9315
9316     SV_CHECK_THINKFIRST_COW_DROP(rv);
9317
9318     if (SvTYPE(rv) >= SVt_PVMG) {
9319         const U32 refcnt = SvREFCNT(rv);
9320         SvREFCNT(rv) = 0;
9321         sv_clear(rv);
9322         SvFLAGS(rv) = 0;
9323         SvREFCNT(rv) = refcnt;
9324
9325         sv_upgrade(rv, SVt_IV);
9326     } else if (SvROK(rv)) {
9327         SvREFCNT_dec(SvRV(rv));
9328     } else {
9329         prepare_SV_for_RV(rv);
9330     }
9331
9332     SvOK_off(rv);
9333     SvRV_set(rv, sv);
9334     SvROK_on(rv);
9335
9336     if (classname) {
9337         HV* const stash = gv_stashpv(classname, GV_ADD);
9338         (void)sv_bless(rv, stash);
9339     }
9340     return sv;
9341 }
9342
9343 /*
9344 =for apidoc sv_setref_pv
9345
9346 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9347 argument will be upgraded to an RV.  That RV will be modified to point to
9348 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9349 into the SV.  The C<classname> argument indicates the package for the
9350 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9351 will have a reference count of 1, and the RV will be returned.
9352
9353 Do not use with other Perl types such as HV, AV, SV, CV, because those
9354 objects will become corrupted by the pointer copy process.
9355
9356 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9357
9358 =cut
9359 */
9360
9361 SV*
9362 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9363 {
9364     dVAR;
9365
9366     PERL_ARGS_ASSERT_SV_SETREF_PV;
9367
9368     if (!pv) {
9369         sv_setsv(rv, &PL_sv_undef);
9370         SvSETMAGIC(rv);
9371     }
9372     else
9373         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9374     return rv;
9375 }
9376
9377 /*
9378 =for apidoc sv_setref_iv
9379
9380 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9381 argument will be upgraded to an RV.  That RV will be modified to point to
9382 the new SV.  The C<classname> argument indicates the package for the
9383 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9384 will have a reference count of 1, and the RV will be returned.
9385
9386 =cut
9387 */
9388
9389 SV*
9390 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9391 {
9392     PERL_ARGS_ASSERT_SV_SETREF_IV;
9393
9394     sv_setiv(newSVrv(rv,classname), iv);
9395     return rv;
9396 }
9397
9398 /*
9399 =for apidoc sv_setref_uv
9400
9401 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9402 argument will be upgraded to an RV.  That RV will be modified to point to
9403 the new SV.  The C<classname> argument indicates the package for the
9404 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9405 will have a reference count of 1, and the RV will be returned.
9406
9407 =cut
9408 */
9409
9410 SV*
9411 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9412 {
9413     PERL_ARGS_ASSERT_SV_SETREF_UV;
9414
9415     sv_setuv(newSVrv(rv,classname), uv);
9416     return rv;
9417 }
9418
9419 /*
9420 =for apidoc sv_setref_nv
9421
9422 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9423 argument will be upgraded to an RV.  That RV will be modified to point to
9424 the new SV.  The C<classname> argument indicates the package for the
9425 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9426 will have a reference count of 1, and the RV will be returned.
9427
9428 =cut
9429 */
9430
9431 SV*
9432 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9433 {
9434     PERL_ARGS_ASSERT_SV_SETREF_NV;
9435
9436     sv_setnv(newSVrv(rv,classname), nv);
9437     return rv;
9438 }
9439
9440 /*
9441 =for apidoc sv_setref_pvn
9442
9443 Copies a string into a new SV, optionally blessing the SV.  The length of the
9444 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9445 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9446 argument indicates the package for the blessing.  Set C<classname> to
9447 C<NULL> to avoid the blessing.  The new SV will have a reference count
9448 of 1, and the RV will be returned.
9449
9450 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9451
9452 =cut
9453 */
9454
9455 SV*
9456 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9457                    const char *const pv, const STRLEN n)
9458 {
9459     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9460
9461     sv_setpvn(newSVrv(rv,classname), pv, n);
9462     return rv;
9463 }
9464
9465 /*
9466 =for apidoc sv_bless
9467
9468 Blesses an SV into a specified package.  The SV must be an RV.  The package
9469 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9470 of the SV is unaffected.
9471
9472 =cut
9473 */
9474
9475 SV*
9476 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9477 {
9478     dVAR;
9479     SV *tmpRef;
9480
9481     PERL_ARGS_ASSERT_SV_BLESS;
9482
9483     if (!SvROK(sv))
9484         Perl_croak(aTHX_ "Can't bless non-reference value");
9485     tmpRef = SvRV(sv);
9486     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9487         if (SvREADONLY(tmpRef) && !SvIsCOW(tmpRef))
9488             Perl_croak_no_modify();
9489         if (SvOBJECT(tmpRef)) {
9490             if (SvTYPE(tmpRef) != SVt_PVIO)
9491                 --PL_sv_objcount;
9492             SvREFCNT_dec(SvSTASH(tmpRef));
9493         }
9494     }
9495     SvOBJECT_on(tmpRef);
9496     if (SvTYPE(tmpRef) != SVt_PVIO)
9497         ++PL_sv_objcount;
9498     SvUPGRADE(tmpRef, SVt_PVMG);
9499     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9500
9501     if(SvSMAGICAL(tmpRef))
9502         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9503             mg_set(tmpRef);
9504
9505
9506
9507     return sv;
9508 }
9509
9510 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9511  * as it is after unglobbing it.
9512  */
9513
9514 PERL_STATIC_INLINE void
9515 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9516 {
9517     dVAR;
9518     void *xpvmg;
9519     HV *stash;
9520     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9521
9522     PERL_ARGS_ASSERT_SV_UNGLOB;
9523
9524     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9525     SvFAKE_off(sv);
9526     if (!(flags & SV_COW_DROP_PV))
9527         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9528
9529     if (GvGP(sv)) {
9530         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9531            && HvNAME_get(stash))
9532             mro_method_changed_in(stash);
9533         gp_free(MUTABLE_GV(sv));
9534     }
9535     if (GvSTASH(sv)) {
9536         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9537         GvSTASH(sv) = NULL;
9538     }
9539     GvMULTI_off(sv);
9540     if (GvNAME_HEK(sv)) {
9541         unshare_hek(GvNAME_HEK(sv));
9542     }
9543     isGV_with_GP_off(sv);
9544
9545     if(SvTYPE(sv) == SVt_PVGV) {
9546         /* need to keep SvANY(sv) in the right arena */
9547         xpvmg = new_XPVMG();
9548         StructCopy(SvANY(sv), xpvmg, XPVMG);
9549         del_XPVGV(SvANY(sv));
9550         SvANY(sv) = xpvmg;
9551
9552         SvFLAGS(sv) &= ~SVTYPEMASK;
9553         SvFLAGS(sv) |= SVt_PVMG;
9554     }
9555
9556     /* Intentionally not calling any local SET magic, as this isn't so much a
9557        set operation as merely an internal storage change.  */
9558     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9559     else sv_setsv_flags(sv, temp, 0);
9560
9561     if ((const GV *)sv == PL_last_in_gv)
9562         PL_last_in_gv = NULL;
9563     else if ((const GV *)sv == PL_statgv)
9564         PL_statgv = NULL;
9565 }
9566
9567 /*
9568 =for apidoc sv_unref_flags
9569
9570 Unsets the RV status of the SV, and decrements the reference count of
9571 whatever was being referenced by the RV.  This can almost be thought of
9572 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9573 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9574 (otherwise the decrementing is conditional on the reference count being
9575 different from one or the reference being a readonly SV).
9576 See C<SvROK_off>.
9577
9578 =cut
9579 */
9580
9581 void
9582 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9583 {
9584     SV* const target = SvRV(ref);
9585
9586     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9587
9588     if (SvWEAKREF(ref)) {
9589         sv_del_backref(target, ref);
9590         SvWEAKREF_off(ref);
9591         SvRV_set(ref, NULL);
9592         return;
9593     }
9594     SvRV_set(ref, NULL);
9595     SvROK_off(ref);
9596     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9597        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9598     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9599         SvREFCNT_dec(target);
9600     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9601         sv_2mortal(target);     /* Schedule for freeing later */
9602 }
9603
9604 /*
9605 =for apidoc sv_untaint
9606
9607 Untaint an SV.  Use C<SvTAINTED_off> instead.
9608
9609 =cut
9610 */
9611
9612 void
9613 Perl_sv_untaint(pTHX_ SV *const sv)
9614 {
9615     PERL_ARGS_ASSERT_SV_UNTAINT;
9616
9617     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9618         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9619         if (mg)
9620             mg->mg_len &= ~1;
9621     }
9622 }
9623
9624 /*
9625 =for apidoc sv_tainted
9626
9627 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9628
9629 =cut
9630 */
9631
9632 bool
9633 Perl_sv_tainted(pTHX_ SV *const sv)
9634 {
9635     PERL_ARGS_ASSERT_SV_TAINTED;
9636
9637     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9638         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9639         if (mg && (mg->mg_len & 1) )
9640             return TRUE;
9641     }
9642     return FALSE;
9643 }
9644
9645 /*
9646 =for apidoc sv_setpviv
9647
9648 Copies an integer into the given SV, also updating its string value.
9649 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9650
9651 =cut
9652 */
9653
9654 void
9655 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9656 {
9657     char buf[TYPE_CHARS(UV)];
9658     char *ebuf;
9659     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9660
9661     PERL_ARGS_ASSERT_SV_SETPVIV;
9662
9663     sv_setpvn(sv, ptr, ebuf - ptr);
9664 }
9665
9666 /*
9667 =for apidoc sv_setpviv_mg
9668
9669 Like C<sv_setpviv>, but also handles 'set' magic.
9670
9671 =cut
9672 */
9673
9674 void
9675 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9676 {
9677     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9678
9679     sv_setpviv(sv, iv);
9680     SvSETMAGIC(sv);
9681 }
9682
9683 #if defined(PERL_IMPLICIT_CONTEXT)
9684
9685 /* pTHX_ magic can't cope with varargs, so this is a no-context
9686  * version of the main function, (which may itself be aliased to us).
9687  * Don't access this version directly.
9688  */
9689
9690 void
9691 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9692 {
9693     dTHX;
9694     va_list args;
9695
9696     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9697
9698     va_start(args, pat);
9699     sv_vsetpvf(sv, pat, &args);
9700     va_end(args);
9701 }
9702
9703 /* pTHX_ magic can't cope with varargs, so this is a no-context
9704  * version of the main function, (which may itself be aliased to us).
9705  * Don't access this version directly.
9706  */
9707
9708 void
9709 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9710 {
9711     dTHX;
9712     va_list args;
9713
9714     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9715
9716     va_start(args, pat);
9717     sv_vsetpvf_mg(sv, pat, &args);
9718     va_end(args);
9719 }
9720 #endif
9721
9722 /*
9723 =for apidoc sv_setpvf
9724
9725 Works like C<sv_catpvf> but copies the text into the SV instead of
9726 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9727
9728 =cut
9729 */
9730
9731 void
9732 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9733 {
9734     va_list args;
9735
9736     PERL_ARGS_ASSERT_SV_SETPVF;
9737
9738     va_start(args, pat);
9739     sv_vsetpvf(sv, pat, &args);
9740     va_end(args);
9741 }
9742
9743 /*
9744 =for apidoc sv_vsetpvf
9745
9746 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9747 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9748
9749 Usually used via its frontend C<sv_setpvf>.
9750
9751 =cut
9752 */
9753
9754 void
9755 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9756 {
9757     PERL_ARGS_ASSERT_SV_VSETPVF;
9758
9759     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9760 }
9761
9762 /*
9763 =for apidoc sv_setpvf_mg
9764
9765 Like C<sv_setpvf>, but also handles 'set' magic.
9766
9767 =cut
9768 */
9769
9770 void
9771 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9772 {
9773     va_list args;
9774
9775     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9776
9777     va_start(args, pat);
9778     sv_vsetpvf_mg(sv, pat, &args);
9779     va_end(args);
9780 }
9781
9782 /*
9783 =for apidoc sv_vsetpvf_mg
9784
9785 Like C<sv_vsetpvf>, but also handles 'set' magic.
9786
9787 Usually used via its frontend C<sv_setpvf_mg>.
9788
9789 =cut
9790 */
9791
9792 void
9793 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9794 {
9795     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9796
9797     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9798     SvSETMAGIC(sv);
9799 }
9800
9801 #if defined(PERL_IMPLICIT_CONTEXT)
9802
9803 /* pTHX_ magic can't cope with varargs, so this is a no-context
9804  * version of the main function, (which may itself be aliased to us).
9805  * Don't access this version directly.
9806  */
9807
9808 void
9809 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9810 {
9811     dTHX;
9812     va_list args;
9813
9814     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9815
9816     va_start(args, pat);
9817     sv_vcatpvf(sv, pat, &args);
9818     va_end(args);
9819 }
9820
9821 /* pTHX_ magic can't cope with varargs, so this is a no-context
9822  * version of the main function, (which may itself be aliased to us).
9823  * Don't access this version directly.
9824  */
9825
9826 void
9827 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9828 {
9829     dTHX;
9830     va_list args;
9831
9832     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9833
9834     va_start(args, pat);
9835     sv_vcatpvf_mg(sv, pat, &args);
9836     va_end(args);
9837 }
9838 #endif
9839
9840 /*
9841 =for apidoc sv_catpvf
9842
9843 Processes its arguments like C<sprintf> and appends the formatted
9844 output to an SV.  If the appended data contains "wide" characters
9845 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9846 and characters >255 formatted with %c), the original SV might get
9847 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9848 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
9849 valid UTF-8; if the original SV was bytes, the pattern should be too.
9850
9851 =cut */
9852
9853 void
9854 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9855 {
9856     va_list args;
9857
9858     PERL_ARGS_ASSERT_SV_CATPVF;
9859
9860     va_start(args, pat);
9861     sv_vcatpvf(sv, pat, &args);
9862     va_end(args);
9863 }
9864
9865 /*
9866 =for apidoc sv_vcatpvf
9867
9868 Processes its arguments like C<vsprintf> and appends the formatted output
9869 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9870
9871 Usually used via its frontend C<sv_catpvf>.
9872
9873 =cut
9874 */
9875
9876 void
9877 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9878 {
9879     PERL_ARGS_ASSERT_SV_VCATPVF;
9880
9881     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9882 }
9883
9884 /*
9885 =for apidoc sv_catpvf_mg
9886
9887 Like C<sv_catpvf>, but also handles 'set' magic.
9888
9889 =cut
9890 */
9891
9892 void
9893 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9894 {
9895     va_list args;
9896
9897     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9898
9899     va_start(args, pat);
9900     sv_vcatpvf_mg(sv, pat, &args);
9901     va_end(args);
9902 }
9903
9904 /*
9905 =for apidoc sv_vcatpvf_mg
9906
9907 Like C<sv_vcatpvf>, but also handles 'set' magic.
9908
9909 Usually used via its frontend C<sv_catpvf_mg>.
9910
9911 =cut
9912 */
9913
9914 void
9915 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9916 {
9917     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9918
9919     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9920     SvSETMAGIC(sv);
9921 }
9922
9923 /*
9924 =for apidoc sv_vsetpvfn
9925
9926 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9927 appending it.
9928
9929 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9930
9931 =cut
9932 */
9933
9934 void
9935 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9936                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9937 {
9938     PERL_ARGS_ASSERT_SV_VSETPVFN;
9939
9940     sv_setpvs(sv, "");
9941     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
9942 }
9943
9944
9945 /*
9946  * Warn of missing argument to sprintf, and then return a defined value
9947  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9948  */
9949 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9950 STATIC SV*
9951 S_vcatpvfn_missing_argument(pTHX) {
9952     if (ckWARN(WARN_MISSING)) {
9953         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9954                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9955     }
9956     return &PL_sv_no;
9957 }
9958
9959
9960 STATIC I32
9961 S_expect_number(pTHX_ char **const pattern)
9962 {
9963     dVAR;
9964     I32 var = 0;
9965
9966     PERL_ARGS_ASSERT_EXPECT_NUMBER;
9967
9968     switch (**pattern) {
9969     case '1': case '2': case '3':
9970     case '4': case '5': case '6':
9971     case '7': case '8': case '9':
9972         var = *(*pattern)++ - '0';
9973         while (isDIGIT(**pattern)) {
9974             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9975             if (tmp < var)
9976                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9977             var = tmp;
9978         }
9979     }
9980     return var;
9981 }
9982
9983 STATIC char *
9984 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9985 {
9986     const int neg = nv < 0;
9987     UV uv;
9988
9989     PERL_ARGS_ASSERT_F0CONVERT;
9990
9991     if (neg)
9992         nv = -nv;
9993     if (nv < UV_MAX) {
9994         char *p = endbuf;
9995         nv += 0.5;
9996         uv = (UV)nv;
9997         if (uv & 1 && uv == nv)
9998             uv--;                       /* Round to even */
9999         do {
10000             const unsigned dig = uv % 10;
10001             *--p = '0' + dig;
10002         } while (uv /= 10);
10003         if (neg)
10004             *--p = '-';
10005         *len = endbuf - p;
10006         return p;
10007     }
10008     return NULL;
10009 }
10010
10011
10012 /*
10013 =for apidoc sv_vcatpvfn
10014
10015 =for apidoc sv_vcatpvfn_flags
10016
10017 Processes its arguments like C<vsprintf> and appends the formatted output
10018 to an SV.  Uses an array of SVs if the C style variable argument list is
10019 missing (NULL).  When running with taint checks enabled, indicates via
10020 C<maybe_tainted> if results are untrustworthy (often due to the use of
10021 locales).
10022
10023 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10024
10025 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10026
10027 =cut
10028 */
10029
10030 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10031                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10032                         vec_utf8 = DO_UTF8(vecsv);
10033
10034 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10035
10036 void
10037 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10038                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10039 {
10040     PERL_ARGS_ASSERT_SV_VCATPVFN;
10041
10042     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10043 }
10044
10045 void
10046 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10047                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10048                        const U32 flags)
10049 {
10050     dVAR;
10051     char *p;
10052     char *q;
10053     const char *patend;
10054     STRLEN origlen;
10055     I32 svix = 0;
10056     static const char nullstr[] = "(null)";
10057     SV *argsv = NULL;
10058     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10059     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10060     SV *nsv = NULL;
10061     /* Times 4: a decimal digit takes more than 3 binary digits.
10062      * NV_DIG: mantissa takes than many decimal digits.
10063      * Plus 32: Playing safe. */
10064     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10065     /* large enough for "%#.#f" --chip */
10066     /* what about long double NVs? --jhi */
10067
10068     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10069     PERL_UNUSED_ARG(maybe_tainted);
10070
10071     if (flags & SV_GMAGIC)
10072         SvGETMAGIC(sv);
10073
10074     /* no matter what, this is a string now */
10075     (void)SvPV_force_nomg(sv, origlen);
10076
10077     /* special-case "", "%s", and "%-p" (SVf - see below) */
10078     if (patlen == 0)
10079         return;
10080     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10081         if (args) {
10082             const char * const s = va_arg(*args, char*);
10083             sv_catpv_nomg(sv, s ? s : nullstr);
10084         }
10085         else if (svix < svmax) {
10086             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10087             SvGETMAGIC(*svargs);
10088             sv_catsv_nomg(sv, *svargs);
10089         }
10090         else
10091             S_vcatpvfn_missing_argument(aTHX);
10092         return;
10093     }
10094     if (args && patlen == 3 && pat[0] == '%' &&
10095                 pat[1] == '-' && pat[2] == 'p') {
10096         argsv = MUTABLE_SV(va_arg(*args, void*));
10097         sv_catsv_nomg(sv, argsv);
10098         return;
10099     }
10100
10101 #ifndef USE_LONG_DOUBLE
10102     /* special-case "%.<number>[gf]" */
10103     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10104          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10105         unsigned digits = 0;
10106         const char *pp;
10107
10108         pp = pat + 2;
10109         while (*pp >= '0' && *pp <= '9')
10110             digits = 10 * digits + (*pp++ - '0');
10111         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10112             const NV nv = SvNV(*svargs);
10113             if (*pp == 'g') {
10114                 /* Add check for digits != 0 because it seems that some
10115                    gconverts are buggy in this case, and we don't yet have
10116                    a Configure test for this.  */
10117                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10118                      /* 0, point, slack */
10119                     Gconvert(nv, (int)digits, 0, ebuf);
10120                     sv_catpv_nomg(sv, ebuf);
10121                     if (*ebuf)  /* May return an empty string for digits==0 */
10122                         return;
10123                 }
10124             } else if (!digits) {
10125                 STRLEN l;
10126
10127                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10128                     sv_catpvn_nomg(sv, p, l);
10129                     return;
10130                 }
10131             }
10132         }
10133     }
10134 #endif /* !USE_LONG_DOUBLE */
10135
10136     if (!args && svix < svmax && DO_UTF8(*svargs))
10137         has_utf8 = TRUE;
10138
10139     patend = (char*)pat + patlen;
10140     for (p = (char*)pat; p < patend; p = q) {
10141         bool alt = FALSE;
10142         bool left = FALSE;
10143         bool vectorize = FALSE;
10144         bool vectorarg = FALSE;
10145         bool vec_utf8 = FALSE;
10146         char fill = ' ';
10147         char plus = 0;
10148         char intsize = 0;
10149         STRLEN width = 0;
10150         STRLEN zeros = 0;
10151         bool has_precis = FALSE;
10152         STRLEN precis = 0;
10153         const I32 osvix = svix;
10154         bool is_utf8 = FALSE;  /* is this item utf8?   */
10155 #ifdef HAS_LDBL_SPRINTF_BUG
10156         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10157            with sfio - Allen <allens@cpan.org> */
10158         bool fix_ldbl_sprintf_bug = FALSE;
10159 #endif
10160
10161         char esignbuf[4];
10162         U8 utf8buf[UTF8_MAXBYTES+1];
10163         STRLEN esignlen = 0;
10164
10165         const char *eptr = NULL;
10166         const char *fmtstart;
10167         STRLEN elen = 0;
10168         SV *vecsv = NULL;
10169         const U8 *vecstr = NULL;
10170         STRLEN veclen = 0;
10171         char c = 0;
10172         int i;
10173         unsigned base = 0;
10174         IV iv = 0;
10175         UV uv = 0;
10176         /* we need a long double target in case HAS_LONG_DOUBLE but
10177            not USE_LONG_DOUBLE
10178         */
10179 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10180         long double nv;
10181 #else
10182         NV nv;
10183 #endif
10184         STRLEN have;
10185         STRLEN need;
10186         STRLEN gap;
10187         const char *dotstr = ".";
10188         STRLEN dotstrlen = 1;
10189         I32 efix = 0; /* explicit format parameter index */
10190         I32 ewix = 0; /* explicit width index */
10191         I32 epix = 0; /* explicit precision index */
10192         I32 evix = 0; /* explicit vector index */
10193         bool asterisk = FALSE;
10194
10195         /* echo everything up to the next format specification */
10196         for (q = p; q < patend && *q != '%'; ++q) ;
10197         if (q > p) {
10198             if (has_utf8 && !pat_utf8)
10199                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10200             else
10201                 sv_catpvn_nomg(sv, p, q - p);
10202             p = q;
10203         }
10204         if (q++ >= patend)
10205             break;
10206
10207         fmtstart = q;
10208
10209 /*
10210     We allow format specification elements in this order:
10211         \d+\$              explicit format parameter index
10212         [-+ 0#]+           flags
10213         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10214         0                  flag (as above): repeated to allow "v02"     
10215         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10216         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10217         [hlqLV]            size
10218     [%bcdefginopsuxDFOUX] format (mandatory)
10219 */
10220
10221         if (args) {
10222 /*  
10223         As of perl5.9.3, printf format checking is on by default.
10224         Internally, perl uses %p formats to provide an escape to
10225         some extended formatting.  This block deals with those
10226         extensions: if it does not match, (char*)q is reset and
10227         the normal format processing code is used.
10228
10229         Currently defined extensions are:
10230                 %p              include pointer address (standard)      
10231                 %-p     (SVf)   include an SV (previously %_)
10232                 %-<num>p        include an SV with precision <num>      
10233                 %2p             include a HEK
10234                 %3p             include a HEK with precision of 256
10235                 %<num>p         (where num != 2 or 3) reserved for future
10236                                 extensions
10237
10238         Robin Barker 2005-07-14 (but modified since)
10239
10240                 %1p     (VDf)   removed.  RMB 2007-10-19
10241 */
10242             char* r = q; 
10243             bool sv = FALSE;    
10244             STRLEN n = 0;
10245             if (*q == '-')
10246                 sv = *q++;
10247             n = expect_number(&q);
10248             if (*q++ == 'p') {
10249                 if (sv) {                       /* SVf */
10250                     if (n) {
10251                         precis = n;
10252                         has_precis = TRUE;
10253                     }
10254                     argsv = MUTABLE_SV(va_arg(*args, void*));
10255                     eptr = SvPV_const(argsv, elen);
10256                     if (DO_UTF8(argsv))
10257                         is_utf8 = TRUE;
10258                     goto string;
10259                 }
10260                 else if (n==2 || n==3) {        /* HEKf */
10261                     HEK * const hek = va_arg(*args, HEK *);
10262                     eptr = HEK_KEY(hek);
10263                     elen = HEK_LEN(hek);
10264                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10265                     if (n==3) precis = 256, has_precis = TRUE;
10266                     goto string;
10267                 }
10268                 else if (n) {
10269                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10270                                      "internal %%<num>p might conflict with future printf extensions");
10271                 }
10272             }
10273             q = r; 
10274         }
10275
10276         if ( (width = expect_number(&q)) ) {
10277             if (*q == '$') {
10278                 ++q;
10279                 efix = width;
10280             } else {
10281                 goto gotwidth;
10282             }
10283         }
10284
10285         /* FLAGS */
10286
10287         while (*q) {
10288             switch (*q) {
10289             case ' ':
10290             case '+':
10291                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10292                     q++;
10293                 else
10294                     plus = *q++;
10295                 continue;
10296
10297             case '-':
10298                 left = TRUE;
10299                 q++;
10300                 continue;
10301
10302             case '0':
10303                 fill = *q++;
10304                 continue;
10305
10306             case '#':
10307                 alt = TRUE;
10308                 q++;
10309                 continue;
10310
10311             default:
10312                 break;
10313             }
10314             break;
10315         }
10316
10317       tryasterisk:
10318         if (*q == '*') {
10319             q++;
10320             if ( (ewix = expect_number(&q)) )
10321                 if (*q++ != '$')
10322                     goto unknown;
10323             asterisk = TRUE;
10324         }
10325         if (*q == 'v') {
10326             q++;
10327             if (vectorize)
10328                 goto unknown;
10329             if ((vectorarg = asterisk)) {
10330                 evix = ewix;
10331                 ewix = 0;
10332                 asterisk = FALSE;
10333             }
10334             vectorize = TRUE;
10335             goto tryasterisk;
10336         }
10337
10338         if (!asterisk)
10339         {
10340             if( *q == '0' )
10341                 fill = *q++;
10342             width = expect_number(&q);
10343         }
10344
10345         if (vectorize && vectorarg) {
10346             /* vectorizing, but not with the default "." */
10347             if (args)
10348                 vecsv = va_arg(*args, SV*);
10349             else if (evix) {
10350                 vecsv = (evix > 0 && evix <= svmax)
10351                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10352             } else {
10353                 vecsv = svix < svmax
10354                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10355             }
10356             dotstr = SvPV_const(vecsv, dotstrlen);
10357             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10358                bad with tied or overloaded values that return UTF8.  */
10359             if (DO_UTF8(vecsv))
10360                 is_utf8 = TRUE;
10361             else if (has_utf8) {
10362                 vecsv = sv_mortalcopy(vecsv);
10363                 sv_utf8_upgrade(vecsv);
10364                 dotstr = SvPV_const(vecsv, dotstrlen);
10365                 is_utf8 = TRUE;
10366             }               
10367         }
10368
10369         if (asterisk) {
10370             if (args)
10371                 i = va_arg(*args, int);
10372             else
10373                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10374                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10375             left |= (i < 0);
10376             width = (i < 0) ? -i : i;
10377         }
10378       gotwidth:
10379
10380         /* PRECISION */
10381
10382         if (*q == '.') {
10383             q++;
10384             if (*q == '*') {
10385                 q++;
10386                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10387                     goto unknown;
10388                 /* XXX: todo, support specified precision parameter */
10389                 if (epix)
10390                     goto unknown;
10391                 if (args)
10392                     i = va_arg(*args, int);
10393                 else
10394                     i = (ewix ? ewix <= svmax : svix < svmax)
10395                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10396                 precis = i;
10397                 has_precis = !(i < 0);
10398             }
10399             else {
10400                 precis = 0;
10401                 while (isDIGIT(*q))
10402                     precis = precis * 10 + (*q++ - '0');
10403                 has_precis = TRUE;
10404             }
10405         }
10406
10407         if (vectorize) {
10408             if (args) {
10409                 VECTORIZE_ARGS
10410             }
10411             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10412                 vecsv = svargs[efix ? efix-1 : svix++];
10413                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10414                 vec_utf8 = DO_UTF8(vecsv);
10415
10416                 /* if this is a version object, we need to convert
10417                  * back into v-string notation and then let the
10418                  * vectorize happen normally
10419                  */
10420                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10421                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10422                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10423                         "vector argument not supported with alpha versions");
10424                         goto vdblank;
10425                     }
10426                     vecsv = sv_newmortal();
10427                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10428                                  vecsv);
10429                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10430                     vec_utf8 = DO_UTF8(vecsv);
10431                 }
10432             }
10433             else {
10434               vdblank:
10435                 vecstr = (U8*)"";
10436                 veclen = 0;
10437             }
10438         }
10439
10440         /* SIZE */
10441
10442         switch (*q) {
10443 #ifdef WIN32
10444         case 'I':                       /* Ix, I32x, and I64x */
10445 #  ifdef USE_64_BIT_INT
10446             if (q[1] == '6' && q[2] == '4') {
10447                 q += 3;
10448                 intsize = 'q';
10449                 break;
10450             }
10451 #  endif
10452             if (q[1] == '3' && q[2] == '2') {
10453                 q += 3;
10454                 break;
10455             }
10456 #  ifdef USE_64_BIT_INT
10457             intsize = 'q';
10458 #  endif
10459             q++;
10460             break;
10461 #endif
10462 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10463         case 'L':                       /* Ld */
10464             /*FALLTHROUGH*/
10465 #ifdef HAS_QUAD
10466         case 'q':                       /* qd */
10467 #endif
10468             intsize = 'q';
10469             q++;
10470             break;
10471 #endif
10472         case 'l':
10473             ++q;
10474 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10475             if (*q == 'l') {    /* lld, llf */
10476                 intsize = 'q';
10477                 ++q;
10478             }
10479             else
10480 #endif
10481                 intsize = 'l';
10482             break;
10483         case 'h':
10484             if (*++q == 'h') {  /* hhd, hhu */
10485                 intsize = 'c';
10486                 ++q;
10487             }
10488             else
10489                 intsize = 'h';
10490             break;
10491         case 'V':
10492         case 'z':
10493         case 't':
10494 #if HAS_C99
10495         case 'j':
10496 #endif
10497             intsize = *q++;
10498             break;
10499         }
10500
10501         /* CONVERSION */
10502
10503         if (*q == '%') {
10504             eptr = q++;
10505             elen = 1;
10506             if (vectorize) {
10507                 c = '%';
10508                 goto unknown;
10509             }
10510             goto string;
10511         }
10512
10513         if (!vectorize && !args) {
10514             if (efix) {
10515                 const I32 i = efix-1;
10516                 argsv = (i >= 0 && i < svmax)
10517                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10518             } else {
10519                 argsv = (svix >= 0 && svix < svmax)
10520                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10521             }
10522         }
10523
10524         switch (c = *q++) {
10525
10526             /* STRINGS */
10527
10528         case 'c':
10529             if (vectorize)
10530                 goto unknown;
10531             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10532             if ((uv > 255 ||
10533                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10534                 && !IN_BYTES) {
10535                 eptr = (char*)utf8buf;
10536                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10537                 is_utf8 = TRUE;
10538             }
10539             else {
10540                 c = (char)uv;
10541                 eptr = &c;
10542                 elen = 1;
10543             }
10544             goto string;
10545
10546         case 's':
10547             if (vectorize)
10548                 goto unknown;
10549             if (args) {
10550                 eptr = va_arg(*args, char*);
10551                 if (eptr)
10552                     elen = strlen(eptr);
10553                 else {
10554                     eptr = (char *)nullstr;
10555                     elen = sizeof nullstr - 1;
10556                 }
10557             }
10558             else {
10559                 eptr = SvPV_const(argsv, elen);
10560                 if (DO_UTF8(argsv)) {
10561                     STRLEN old_precis = precis;
10562                     if (has_precis && precis < elen) {
10563                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10564                         STRLEN p = precis > ulen ? ulen : precis;
10565                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10566                                                         /* sticks at end */
10567                     }
10568                     if (width) { /* fudge width (can't fudge elen) */
10569                         if (has_precis && precis < elen)
10570                             width += precis - old_precis;
10571                         else
10572                             width +=
10573                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10574                     }
10575                     is_utf8 = TRUE;
10576                 }
10577             }
10578
10579         string:
10580             if (has_precis && precis < elen)
10581                 elen = precis;
10582             break;
10583
10584             /* INTEGERS */
10585
10586         case 'p':
10587             if (alt || vectorize)
10588                 goto unknown;
10589             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10590             base = 16;
10591             goto integer;
10592
10593         case 'D':
10594 #ifdef IV_IS_QUAD
10595             intsize = 'q';
10596 #else
10597             intsize = 'l';
10598 #endif
10599             /*FALLTHROUGH*/
10600         case 'd':
10601         case 'i':
10602 #if vdNUMBER
10603         format_vd:
10604 #endif
10605             if (vectorize) {
10606                 STRLEN ulen;
10607                 if (!veclen)
10608                     continue;
10609                 if (vec_utf8)
10610                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10611                                         UTF8_ALLOW_ANYUV);
10612                 else {
10613                     uv = *vecstr;
10614                     ulen = 1;
10615                 }
10616                 vecstr += ulen;
10617                 veclen -= ulen;
10618                 if (plus)
10619                      esignbuf[esignlen++] = plus;
10620             }
10621             else if (args) {
10622                 switch (intsize) {
10623                 case 'c':       iv = (char)va_arg(*args, int); break;
10624                 case 'h':       iv = (short)va_arg(*args, int); break;
10625                 case 'l':       iv = va_arg(*args, long); break;
10626                 case 'V':       iv = va_arg(*args, IV); break;
10627                 case 'z':       iv = va_arg(*args, SSize_t); break;
10628                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10629                 default:        iv = va_arg(*args, int); break;
10630 #if HAS_C99
10631                 case 'j':       iv = va_arg(*args, intmax_t); break;
10632 #endif
10633                 case 'q':
10634 #ifdef HAS_QUAD
10635                                 iv = va_arg(*args, Quad_t); break;
10636 #else
10637                                 goto unknown;
10638 #endif
10639                 }
10640             }
10641             else {
10642                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10643                 switch (intsize) {
10644                 case 'c':       iv = (char)tiv; break;
10645                 case 'h':       iv = (short)tiv; break;
10646                 case 'l':       iv = (long)tiv; break;
10647                 case 'V':
10648                 default:        iv = tiv; break;
10649                 case 'q':
10650 #ifdef HAS_QUAD
10651                                 iv = (Quad_t)tiv; break;
10652 #else
10653                                 goto unknown;
10654 #endif
10655                 }
10656             }
10657             if ( !vectorize )   /* we already set uv above */
10658             {
10659                 if (iv >= 0) {
10660                     uv = iv;
10661                     if (plus)
10662                         esignbuf[esignlen++] = plus;
10663                 }
10664                 else {
10665                     uv = -iv;
10666                     esignbuf[esignlen++] = '-';
10667                 }
10668             }
10669             base = 10;
10670             goto integer;
10671
10672         case 'U':
10673 #ifdef IV_IS_QUAD
10674             intsize = 'q';
10675 #else
10676             intsize = 'l';
10677 #endif
10678             /*FALLTHROUGH*/
10679         case 'u':
10680             base = 10;
10681             goto uns_integer;
10682
10683         case 'B':
10684         case 'b':
10685             base = 2;
10686             goto uns_integer;
10687
10688         case 'O':
10689 #ifdef IV_IS_QUAD
10690             intsize = 'q';
10691 #else
10692             intsize = 'l';
10693 #endif
10694             /*FALLTHROUGH*/
10695         case 'o':
10696             base = 8;
10697             goto uns_integer;
10698
10699         case 'X':
10700         case 'x':
10701             base = 16;
10702
10703         uns_integer:
10704             if (vectorize) {
10705                 STRLEN ulen;
10706         vector:
10707                 if (!veclen)
10708                     continue;
10709                 if (vec_utf8)
10710                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10711                                         UTF8_ALLOW_ANYUV);
10712                 else {
10713                     uv = *vecstr;
10714                     ulen = 1;
10715                 }
10716                 vecstr += ulen;
10717                 veclen -= ulen;
10718             }
10719             else if (args) {
10720                 switch (intsize) {
10721                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10722                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10723                 case 'l':  uv = va_arg(*args, unsigned long); break;
10724                 case 'V':  uv = va_arg(*args, UV); break;
10725                 case 'z':  uv = va_arg(*args, Size_t); break;
10726                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10727 #if HAS_C99
10728                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10729 #endif
10730                 default:   uv = va_arg(*args, unsigned); break;
10731                 case 'q':
10732 #ifdef HAS_QUAD
10733                            uv = va_arg(*args, Uquad_t); break;
10734 #else
10735                            goto unknown;
10736 #endif
10737                 }
10738             }
10739             else {
10740                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10741                 switch (intsize) {
10742                 case 'c':       uv = (unsigned char)tuv; break;
10743                 case 'h':       uv = (unsigned short)tuv; break;
10744                 case 'l':       uv = (unsigned long)tuv; break;
10745                 case 'V':
10746                 default:        uv = tuv; break;
10747                 case 'q':
10748 #ifdef HAS_QUAD
10749                                 uv = (Uquad_t)tuv; break;
10750 #else
10751                                 goto unknown;
10752 #endif
10753                 }
10754             }
10755
10756         integer:
10757             {
10758                 char *ptr = ebuf + sizeof ebuf;
10759                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10760                 zeros = 0;
10761
10762                 switch (base) {
10763                     unsigned dig;
10764                 case 16:
10765                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10766                     do {
10767                         dig = uv & 15;
10768                         *--ptr = p[dig];
10769                     } while (uv >>= 4);
10770                     if (tempalt) {
10771                         esignbuf[esignlen++] = '0';
10772                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10773                     }
10774                     break;
10775                 case 8:
10776                     do {
10777                         dig = uv & 7;
10778                         *--ptr = '0' + dig;
10779                     } while (uv >>= 3);
10780                     if (alt && *ptr != '0')
10781                         *--ptr = '0';
10782                     break;
10783                 case 2:
10784                     do {
10785                         dig = uv & 1;
10786                         *--ptr = '0' + dig;
10787                     } while (uv >>= 1);
10788                     if (tempalt) {
10789                         esignbuf[esignlen++] = '0';
10790                         esignbuf[esignlen++] = c;
10791                     }
10792                     break;
10793                 default:                /* it had better be ten or less */
10794                     do {
10795                         dig = uv % base;
10796                         *--ptr = '0' + dig;
10797                     } while (uv /= base);
10798                     break;
10799                 }
10800                 elen = (ebuf + sizeof ebuf) - ptr;
10801                 eptr = ptr;
10802                 if (has_precis) {
10803                     if (precis > elen)
10804                         zeros = precis - elen;
10805                     else if (precis == 0 && elen == 1 && *eptr == '0'
10806                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10807                         elen = 0;
10808
10809                 /* a precision nullifies the 0 flag. */
10810                     if (fill == '0')
10811                         fill = ' ';
10812                 }
10813             }
10814             break;
10815
10816             /* FLOATING POINT */
10817
10818         case 'F':
10819             c = 'f';            /* maybe %F isn't supported here */
10820             /*FALLTHROUGH*/
10821         case 'e': case 'E':
10822         case 'f':
10823         case 'g': case 'G':
10824             if (vectorize)
10825                 goto unknown;
10826
10827             /* This is evil, but floating point is even more evil */
10828
10829             /* for SV-style calling, we can only get NV
10830                for C-style calling, we assume %f is double;
10831                for simplicity we allow any of %Lf, %llf, %qf for long double
10832             */
10833             switch (intsize) {
10834             case 'V':
10835 #if defined(USE_LONG_DOUBLE)
10836                 intsize = 'q';
10837 #endif
10838                 break;
10839 /* [perl #20339] - we should accept and ignore %lf rather than die */
10840             case 'l':
10841                 /*FALLTHROUGH*/
10842             default:
10843 #if defined(USE_LONG_DOUBLE)
10844                 intsize = args ? 0 : 'q';
10845 #endif
10846                 break;
10847             case 'q':
10848 #if defined(HAS_LONG_DOUBLE)
10849                 break;
10850 #else
10851                 /*FALLTHROUGH*/
10852 #endif
10853             case 'c':
10854             case 'h':
10855             case 'z':
10856             case 't':
10857             case 'j':
10858                 goto unknown;
10859             }
10860
10861             /* now we need (long double) if intsize == 'q', else (double) */
10862             nv = (args) ?
10863 #if LONG_DOUBLESIZE > DOUBLESIZE
10864                 intsize == 'q' ?
10865                     va_arg(*args, long double) :
10866                     va_arg(*args, double)
10867 #else
10868                     va_arg(*args, double)
10869 #endif
10870                 : SvNV(argsv);
10871
10872             need = 0;
10873             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10874                else. frexp() has some unspecified behaviour for those three */
10875             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10876                 i = PERL_INT_MIN;
10877                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10878                    will cast our (long double) to (double) */
10879                 (void)Perl_frexp(nv, &i);
10880                 if (i == PERL_INT_MIN)
10881                     Perl_die(aTHX_ "panic: frexp");
10882                 if (i > 0)
10883                     need = BIT_DIGITS(i);
10884             }
10885             need += has_precis ? precis : 6; /* known default */
10886
10887             if (need < width)
10888                 need = width;
10889
10890 #ifdef HAS_LDBL_SPRINTF_BUG
10891             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10892                with sfio - Allen <allens@cpan.org> */
10893
10894 #  ifdef DBL_MAX
10895 #    define MY_DBL_MAX DBL_MAX
10896 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10897 #    if DOUBLESIZE >= 8
10898 #      define MY_DBL_MAX 1.7976931348623157E+308L
10899 #    else
10900 #      define MY_DBL_MAX 3.40282347E+38L
10901 #    endif
10902 #  endif
10903
10904 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10905 #    define MY_DBL_MAX_BUG 1L
10906 #  else
10907 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10908 #  endif
10909
10910 #  ifdef DBL_MIN
10911 #    define MY_DBL_MIN DBL_MIN
10912 #  else  /* XXX guessing! -Allen */
10913 #    if DOUBLESIZE >= 8
10914 #      define MY_DBL_MIN 2.2250738585072014E-308L
10915 #    else
10916 #      define MY_DBL_MIN 1.17549435E-38L
10917 #    endif
10918 #  endif
10919
10920             if ((intsize == 'q') && (c == 'f') &&
10921                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10922                 (need < DBL_DIG)) {
10923                 /* it's going to be short enough that
10924                  * long double precision is not needed */
10925
10926                 if ((nv <= 0L) && (nv >= -0L))
10927                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10928                 else {
10929                     /* would use Perl_fp_class as a double-check but not
10930                      * functional on IRIX - see perl.h comments */
10931
10932                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10933                         /* It's within the range that a double can represent */
10934 #if defined(DBL_MAX) && !defined(DBL_MIN)
10935                         if ((nv >= ((long double)1/DBL_MAX)) ||
10936                             (nv <= (-(long double)1/DBL_MAX)))
10937 #endif
10938                         fix_ldbl_sprintf_bug = TRUE;
10939                     }
10940                 }
10941                 if (fix_ldbl_sprintf_bug == TRUE) {
10942                     double temp;
10943
10944                     intsize = 0;
10945                     temp = (double)nv;
10946                     nv = (NV)temp;
10947                 }
10948             }
10949
10950 #  undef MY_DBL_MAX
10951 #  undef MY_DBL_MAX_BUG
10952 #  undef MY_DBL_MIN
10953
10954 #endif /* HAS_LDBL_SPRINTF_BUG */
10955
10956             need += 20; /* fudge factor */
10957             if (PL_efloatsize < need) {
10958                 Safefree(PL_efloatbuf);
10959                 PL_efloatsize = need + 20; /* more fudge */
10960                 Newx(PL_efloatbuf, PL_efloatsize, char);
10961                 PL_efloatbuf[0] = '\0';
10962             }
10963
10964             if ( !(width || left || plus || alt) && fill != '0'
10965                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10966                 /* See earlier comment about buggy Gconvert when digits,
10967                    aka precis is 0  */
10968                 if ( c == 'g' && precis) {
10969                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10970                     /* May return an empty string for digits==0 */
10971                     if (*PL_efloatbuf) {
10972                         elen = strlen(PL_efloatbuf);
10973                         goto float_converted;
10974                     }
10975                 } else if ( c == 'f' && !precis) {
10976                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10977                         break;
10978                 }
10979             }
10980             {
10981                 char *ptr = ebuf + sizeof ebuf;
10982                 *--ptr = '\0';
10983                 *--ptr = c;
10984                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10985 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10986                 if (intsize == 'q') {
10987                     /* Copy the one or more characters in a long double
10988                      * format before the 'base' ([efgEFG]) character to
10989                      * the format string. */
10990                     static char const prifldbl[] = PERL_PRIfldbl;
10991                     char const *p = prifldbl + sizeof(prifldbl) - 3;
10992                     while (p >= prifldbl) { *--ptr = *p--; }
10993                 }
10994 #endif
10995                 if (has_precis) {
10996                     base = precis;
10997                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10998                     *--ptr = '.';
10999                 }
11000                 if (width) {
11001                     base = width;
11002                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11003                 }
11004                 if (fill == '0')
11005                     *--ptr = fill;
11006                 if (left)
11007                     *--ptr = '-';
11008                 if (plus)
11009                     *--ptr = plus;
11010                 if (alt)
11011                     *--ptr = '#';
11012                 *--ptr = '%';
11013
11014                 /* No taint.  Otherwise we are in the strange situation
11015                  * where printf() taints but print($float) doesn't.
11016                  * --jhi */
11017 #if defined(HAS_LONG_DOUBLE)
11018                 elen = ((intsize == 'q')
11019                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11020                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11021 #else
11022                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11023 #endif
11024             }
11025         float_converted:
11026             eptr = PL_efloatbuf;
11027             break;
11028
11029             /* SPECIAL */
11030
11031         case 'n':
11032             if (vectorize)
11033                 goto unknown;
11034             i = SvCUR(sv) - origlen;
11035             if (args) {
11036                 switch (intsize) {
11037                 case 'c':       *(va_arg(*args, char*)) = i; break;
11038                 case 'h':       *(va_arg(*args, short*)) = i; break;
11039                 default:        *(va_arg(*args, int*)) = i; break;
11040                 case 'l':       *(va_arg(*args, long*)) = i; break;
11041                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11042                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11043                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11044 #if HAS_C99
11045                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11046 #endif
11047                 case 'q':
11048 #ifdef HAS_QUAD
11049                                 *(va_arg(*args, Quad_t*)) = i; break;
11050 #else
11051                                 goto unknown;
11052 #endif
11053                 }
11054             }
11055             else
11056                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11057             continue;   /* not "break" */
11058
11059             /* UNKNOWN */
11060
11061         default:
11062       unknown:
11063             if (!args
11064                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11065                 && ckWARN(WARN_PRINTF))
11066             {
11067                 SV * const msg = sv_newmortal();
11068                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11069                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11070                 if (fmtstart < patend) {
11071                     const char * const fmtend = q < patend ? q : patend;
11072                     const char * f;
11073                     sv_catpvs(msg, "\"%");
11074                     for (f = fmtstart; f < fmtend; f++) {
11075                         if (isPRINT(*f)) {
11076                             sv_catpvn_nomg(msg, f, 1);
11077                         } else {
11078                             Perl_sv_catpvf(aTHX_ msg,
11079                                            "\\%03"UVof, (UV)*f & 0xFF);
11080                         }
11081                     }
11082                     sv_catpvs(msg, "\"");
11083                 } else {
11084                     sv_catpvs(msg, "end of string");
11085                 }
11086                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11087             }
11088
11089             /* output mangled stuff ... */
11090             if (c == '\0')
11091                 --q;
11092             eptr = p;
11093             elen = q - p;
11094
11095             /* ... right here, because formatting flags should not apply */
11096             SvGROW(sv, SvCUR(sv) + elen + 1);
11097             p = SvEND(sv);
11098             Copy(eptr, p, elen, char);
11099             p += elen;
11100             *p = '\0';
11101             SvCUR_set(sv, p - SvPVX_const(sv));
11102             svix = osvix;
11103             continue;   /* not "break" */
11104         }
11105
11106         if (is_utf8 != has_utf8) {
11107             if (is_utf8) {
11108                 if (SvCUR(sv))
11109                     sv_utf8_upgrade(sv);
11110             }
11111             else {
11112                 const STRLEN old_elen = elen;
11113                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11114                 sv_utf8_upgrade(nsv);
11115                 eptr = SvPVX_const(nsv);
11116                 elen = SvCUR(nsv);
11117
11118                 if (width) { /* fudge width (can't fudge elen) */
11119                     width += elen - old_elen;
11120                 }
11121                 is_utf8 = TRUE;
11122             }
11123         }
11124
11125         have = esignlen + zeros + elen;
11126         if (have < zeros)
11127             croak_memory_wrap();
11128
11129         need = (have > width ? have : width);
11130         gap = need - have;
11131
11132         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11133             croak_memory_wrap();
11134         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11135         p = SvEND(sv);
11136         if (esignlen && fill == '0') {
11137             int i;
11138             for (i = 0; i < (int)esignlen; i++)
11139                 *p++ = esignbuf[i];
11140         }
11141         if (gap && !left) {
11142             memset(p, fill, gap);
11143             p += gap;
11144         }
11145         if (esignlen && fill != '0') {
11146             int i;
11147             for (i = 0; i < (int)esignlen; i++)
11148                 *p++ = esignbuf[i];
11149         }
11150         if (zeros) {
11151             int i;
11152             for (i = zeros; i; i--)
11153                 *p++ = '0';
11154         }
11155         if (elen) {
11156             Copy(eptr, p, elen, char);
11157             p += elen;
11158         }
11159         if (gap && left) {
11160             memset(p, ' ', gap);
11161             p += gap;
11162         }
11163         if (vectorize) {
11164             if (veclen) {
11165                 Copy(dotstr, p, dotstrlen, char);
11166                 p += dotstrlen;
11167             }
11168             else
11169                 vectorize = FALSE;              /* done iterating over vecstr */
11170         }
11171         if (is_utf8)
11172             has_utf8 = TRUE;
11173         if (has_utf8)
11174             SvUTF8_on(sv);
11175         *p = '\0';
11176         SvCUR_set(sv, p - SvPVX_const(sv));
11177         if (vectorize) {
11178             esignlen = 0;
11179             goto vector;
11180         }
11181     }
11182     SvTAINT(sv);
11183 }
11184
11185 /* =========================================================================
11186
11187 =head1 Cloning an interpreter
11188
11189 All the macros and functions in this section are for the private use of
11190 the main function, perl_clone().
11191
11192 The foo_dup() functions make an exact copy of an existing foo thingy.
11193 During the course of a cloning, a hash table is used to map old addresses
11194 to new addresses.  The table is created and manipulated with the
11195 ptr_table_* functions.
11196
11197 =cut
11198
11199  * =========================================================================*/
11200
11201
11202 #if defined(USE_ITHREADS)
11203
11204 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11205 #ifndef GpREFCNT_inc
11206 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11207 #endif
11208
11209
11210 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11211    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11212    If this changes, please unmerge ss_dup.
11213    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11214 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11215 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11216 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11217 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11218 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11219 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11220 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11221 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11222 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11223 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11224 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11225 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11226 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11227
11228 /* clone a parser */
11229
11230 yy_parser *
11231 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11232 {
11233     yy_parser *parser;
11234
11235     PERL_ARGS_ASSERT_PARSER_DUP;
11236
11237     if (!proto)
11238         return NULL;
11239
11240     /* look for it in the table first */
11241     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11242     if (parser)
11243         return parser;
11244
11245     /* create anew and remember what it is */
11246     Newxz(parser, 1, yy_parser);
11247     ptr_table_store(PL_ptr_table, proto, parser);
11248
11249     /* XXX these not yet duped */
11250     parser->old_parser = NULL;
11251     parser->stack = NULL;
11252     parser->ps = NULL;
11253     parser->stack_size = 0;
11254     /* XXX parser->stack->state = 0; */
11255
11256     /* XXX eventually, just Copy() most of the parser struct ? */
11257
11258     parser->lex_brackets = proto->lex_brackets;
11259     parser->lex_casemods = proto->lex_casemods;
11260     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11261                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11262     parser->lex_casestack = savepvn(proto->lex_casestack,
11263                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11264     parser->lex_defer   = proto->lex_defer;
11265     parser->lex_dojoin  = proto->lex_dojoin;
11266     parser->lex_expect  = proto->lex_expect;
11267     parser->lex_formbrack = proto->lex_formbrack;
11268     parser->lex_inpat   = proto->lex_inpat;
11269     parser->lex_inwhat  = proto->lex_inwhat;
11270     parser->lex_op      = proto->lex_op;
11271     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11272     parser->lex_starts  = proto->lex_starts;
11273     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11274     parser->multi_close = proto->multi_close;
11275     parser->multi_open  = proto->multi_open;
11276     parser->multi_start = proto->multi_start;
11277     parser->multi_end   = proto->multi_end;
11278     parser->preambled   = proto->preambled;
11279     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11280     parser->linestr     = sv_dup_inc(proto->linestr, param);
11281     parser->expect      = proto->expect;
11282     parser->copline     = proto->copline;
11283     parser->last_lop_op = proto->last_lop_op;
11284     parser->lex_state   = proto->lex_state;
11285     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11286     /* rsfp_filters entries have fake IoDIRP() */
11287     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11288     parser->in_my       = proto->in_my;
11289     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11290     parser->error_count = proto->error_count;
11291
11292
11293     parser->linestr     = sv_dup_inc(proto->linestr, param);
11294
11295     {
11296         char * const ols = SvPVX(proto->linestr);
11297         char * const ls  = SvPVX(parser->linestr);
11298
11299         parser->bufptr      = ls + (proto->bufptr >= ols ?
11300                                     proto->bufptr -  ols : 0);
11301         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11302                                     proto->oldbufptr -  ols : 0);
11303         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11304                                     proto->oldoldbufptr -  ols : 0);
11305         parser->linestart   = ls + (proto->linestart >= ols ?
11306                                     proto->linestart -  ols : 0);
11307         parser->last_uni    = ls + (proto->last_uni >= ols ?
11308                                     proto->last_uni -  ols : 0);
11309         parser->last_lop    = ls + (proto->last_lop >= ols ?
11310                                     proto->last_lop -  ols : 0);
11311
11312         parser->bufend      = ls + SvCUR(parser->linestr);
11313     }
11314
11315     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11316
11317
11318 #ifdef PERL_MAD
11319     parser->endwhite    = proto->endwhite;
11320     parser->faketokens  = proto->faketokens;
11321     parser->lasttoke    = proto->lasttoke;
11322     parser->nextwhite   = proto->nextwhite;
11323     parser->realtokenstart = proto->realtokenstart;
11324     parser->skipwhite   = proto->skipwhite;
11325     parser->thisclose   = proto->thisclose;
11326     parser->thismad     = proto->thismad;
11327     parser->thisopen    = proto->thisopen;
11328     parser->thisstuff   = proto->thisstuff;
11329     parser->thistoken   = proto->thistoken;
11330     parser->thiswhite   = proto->thiswhite;
11331
11332     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11333     parser->curforce    = proto->curforce;
11334 #else
11335     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11336     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11337     parser->nexttoke    = proto->nexttoke;
11338 #endif
11339
11340     /* XXX should clone saved_curcop here, but we aren't passed
11341      * proto_perl; so do it in perl_clone_using instead */
11342
11343     return parser;
11344 }
11345
11346
11347 /* duplicate a file handle */
11348
11349 PerlIO *
11350 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11351 {
11352     PerlIO *ret;
11353
11354     PERL_ARGS_ASSERT_FP_DUP;
11355     PERL_UNUSED_ARG(type);
11356
11357     if (!fp)
11358         return (PerlIO*)NULL;
11359
11360     /* look for it in the table first */
11361     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11362     if (ret)
11363         return ret;
11364
11365     /* create anew and remember what it is */
11366     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11367     ptr_table_store(PL_ptr_table, fp, ret);
11368     return ret;
11369 }
11370
11371 /* duplicate a directory handle */
11372
11373 DIR *
11374 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11375 {
11376     DIR *ret;
11377
11378 #ifdef HAS_FCHDIR
11379     DIR *pwd;
11380     const Direntry_t *dirent;
11381     char smallbuf[256];
11382     char *name = NULL;
11383     STRLEN len = 0;
11384     long pos;
11385 #endif
11386
11387     PERL_UNUSED_CONTEXT;
11388     PERL_ARGS_ASSERT_DIRP_DUP;
11389
11390     if (!dp)
11391         return (DIR*)NULL;
11392
11393     /* look for it in the table first */
11394     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11395     if (ret)
11396         return ret;
11397
11398 #ifdef HAS_FCHDIR
11399
11400     PERL_UNUSED_ARG(param);
11401
11402     /* create anew */
11403
11404     /* open the current directory (so we can switch back) */
11405     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11406
11407     /* chdir to our dir handle and open the present working directory */
11408     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11409         PerlDir_close(pwd);
11410         return (DIR *)NULL;
11411     }
11412     /* Now we should have two dir handles pointing to the same dir. */
11413
11414     /* Be nice to the calling code and chdir back to where we were. */
11415     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11416
11417     /* We have no need of the pwd handle any more. */
11418     PerlDir_close(pwd);
11419
11420 #ifdef DIRNAMLEN
11421 # define d_namlen(d) (d)->d_namlen
11422 #else
11423 # define d_namlen(d) strlen((d)->d_name)
11424 #endif
11425     /* Iterate once through dp, to get the file name at the current posi-
11426        tion. Then step back. */
11427     pos = PerlDir_tell(dp);
11428     if ((dirent = PerlDir_read(dp))) {
11429         len = d_namlen(dirent);
11430         if (len <= sizeof smallbuf) name = smallbuf;
11431         else Newx(name, len, char);
11432         Move(dirent->d_name, name, len, char);
11433     }
11434     PerlDir_seek(dp, pos);
11435
11436     /* Iterate through the new dir handle, till we find a file with the
11437        right name. */
11438     if (!dirent) /* just before the end */
11439         for(;;) {
11440             pos = PerlDir_tell(ret);
11441             if (PerlDir_read(ret)) continue; /* not there yet */
11442             PerlDir_seek(ret, pos); /* step back */
11443             break;
11444         }
11445     else {
11446         const long pos0 = PerlDir_tell(ret);
11447         for(;;) {
11448             pos = PerlDir_tell(ret);
11449             if ((dirent = PerlDir_read(ret))) {
11450                 if (len == d_namlen(dirent)
11451                  && memEQ(name, dirent->d_name, len)) {
11452                     /* found it */
11453                     PerlDir_seek(ret, pos); /* step back */
11454                     break;
11455                 }
11456                 /* else we are not there yet; keep iterating */
11457             }
11458             else { /* This is not meant to happen. The best we can do is
11459                       reset the iterator to the beginning. */
11460                 PerlDir_seek(ret, pos0);
11461                 break;
11462             }
11463         }
11464     }
11465 #undef d_namlen
11466
11467     if (name && name != smallbuf)
11468         Safefree(name);
11469 #endif
11470
11471 #ifdef WIN32
11472     ret = win32_dirp_dup(dp, param);
11473 #endif
11474
11475     /* pop it in the pointer table */
11476     if (ret)
11477         ptr_table_store(PL_ptr_table, dp, ret);
11478
11479     return ret;
11480 }
11481
11482 /* duplicate a typeglob */
11483
11484 GP *
11485 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11486 {
11487     GP *ret;
11488
11489     PERL_ARGS_ASSERT_GP_DUP;
11490
11491     if (!gp)
11492         return (GP*)NULL;
11493     /* look for it in the table first */
11494     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11495     if (ret)
11496         return ret;
11497
11498     /* create anew and remember what it is */
11499     Newxz(ret, 1, GP);
11500     ptr_table_store(PL_ptr_table, gp, ret);
11501
11502     /* clone */
11503     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11504        on Newxz() to do this for us.  */
11505     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11506     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11507     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11508     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11509     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11510     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11511     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11512     ret->gp_cvgen       = gp->gp_cvgen;
11513     ret->gp_line        = gp->gp_line;
11514     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11515     return ret;
11516 }
11517
11518 /* duplicate a chain of magic */
11519
11520 MAGIC *
11521 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11522 {
11523     MAGIC *mgret = NULL;
11524     MAGIC **mgprev_p = &mgret;
11525
11526     PERL_ARGS_ASSERT_MG_DUP;
11527
11528     for (; mg; mg = mg->mg_moremagic) {
11529         MAGIC *nmg;
11530
11531         if ((param->flags & CLONEf_JOIN_IN)
11532                 && mg->mg_type == PERL_MAGIC_backref)
11533             /* when joining, we let the individual SVs add themselves to
11534              * backref as needed. */
11535             continue;
11536
11537         Newx(nmg, 1, MAGIC);
11538         *mgprev_p = nmg;
11539         mgprev_p = &(nmg->mg_moremagic);
11540
11541         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11542            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11543            from the original commit adding Perl_mg_dup() - revision 4538.
11544            Similarly there is the annotation "XXX random ptr?" next to the
11545            assignment to nmg->mg_ptr.  */
11546         *nmg = *mg;
11547
11548         /* FIXME for plugins
11549         if (nmg->mg_type == PERL_MAGIC_qr) {
11550             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11551         }
11552         else
11553         */
11554         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11555                           ? nmg->mg_type == PERL_MAGIC_backref
11556                                 /* The backref AV has its reference
11557                                  * count deliberately bumped by 1 */
11558                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11559                                                     nmg->mg_obj, param))
11560                                 : sv_dup_inc(nmg->mg_obj, param)
11561                           : sv_dup(nmg->mg_obj, param);
11562
11563         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11564             if (nmg->mg_len > 0) {
11565                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11566                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11567                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11568                 {
11569                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11570                     sv_dup_inc_multiple((SV**)(namtp->table),
11571                                         (SV**)(namtp->table), NofAMmeth, param);
11572                 }
11573             }
11574             else if (nmg->mg_len == HEf_SVKEY)
11575                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11576         }
11577         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11578             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11579         }
11580     }
11581     return mgret;
11582 }
11583
11584 #endif /* USE_ITHREADS */
11585
11586 struct ptr_tbl_arena {
11587     struct ptr_tbl_arena *next;
11588     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11589 };
11590
11591 /* create a new pointer-mapping table */
11592
11593 PTR_TBL_t *
11594 Perl_ptr_table_new(pTHX)
11595 {
11596     PTR_TBL_t *tbl;
11597     PERL_UNUSED_CONTEXT;
11598
11599     Newx(tbl, 1, PTR_TBL_t);
11600     tbl->tbl_max        = 511;
11601     tbl->tbl_items      = 0;
11602     tbl->tbl_arena      = NULL;
11603     tbl->tbl_arena_next = NULL;
11604     tbl->tbl_arena_end  = NULL;
11605     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11606     return tbl;
11607 }
11608
11609 #define PTR_TABLE_HASH(ptr) \
11610   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11611
11612 /* map an existing pointer using a table */
11613
11614 STATIC PTR_TBL_ENT_t *
11615 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11616 {
11617     PTR_TBL_ENT_t *tblent;
11618     const UV hash = PTR_TABLE_HASH(sv);
11619
11620     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11621
11622     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11623     for (; tblent; tblent = tblent->next) {
11624         if (tblent->oldval == sv)
11625             return tblent;
11626     }
11627     return NULL;
11628 }
11629
11630 void *
11631 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11632 {
11633     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11634
11635     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11636     PERL_UNUSED_CONTEXT;
11637
11638     return tblent ? tblent->newval : NULL;
11639 }
11640
11641 /* add a new entry to a pointer-mapping table */
11642
11643 void
11644 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11645 {
11646     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11647
11648     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11649     PERL_UNUSED_CONTEXT;
11650
11651     if (tblent) {
11652         tblent->newval = newsv;
11653     } else {
11654         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11655
11656         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11657             struct ptr_tbl_arena *new_arena;
11658
11659             Newx(new_arena, 1, struct ptr_tbl_arena);
11660             new_arena->next = tbl->tbl_arena;
11661             tbl->tbl_arena = new_arena;
11662             tbl->tbl_arena_next = new_arena->array;
11663             tbl->tbl_arena_end = new_arena->array
11664                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11665         }
11666
11667         tblent = tbl->tbl_arena_next++;
11668
11669         tblent->oldval = oldsv;
11670         tblent->newval = newsv;
11671         tblent->next = tbl->tbl_ary[entry];
11672         tbl->tbl_ary[entry] = tblent;
11673         tbl->tbl_items++;
11674         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11675             ptr_table_split(tbl);
11676     }
11677 }
11678
11679 /* double the hash bucket size of an existing ptr table */
11680
11681 void
11682 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11683 {
11684     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11685     const UV oldsize = tbl->tbl_max + 1;
11686     UV newsize = oldsize * 2;
11687     UV i;
11688
11689     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11690     PERL_UNUSED_CONTEXT;
11691
11692     Renew(ary, newsize, PTR_TBL_ENT_t*);
11693     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11694     tbl->tbl_max = --newsize;
11695     tbl->tbl_ary = ary;
11696     for (i=0; i < oldsize; i++, ary++) {
11697         PTR_TBL_ENT_t **entp = ary;
11698         PTR_TBL_ENT_t *ent = *ary;
11699         PTR_TBL_ENT_t **curentp;
11700         if (!ent)
11701             continue;
11702         curentp = ary + oldsize;
11703         do {
11704             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11705                 *entp = ent->next;
11706                 ent->next = *curentp;
11707                 *curentp = ent;
11708             }
11709             else
11710                 entp = &ent->next;
11711             ent = *entp;
11712         } while (ent);
11713     }
11714 }
11715
11716 /* remove all the entries from a ptr table */
11717 /* Deprecated - will be removed post 5.14 */
11718
11719 void
11720 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11721 {
11722     if (tbl && tbl->tbl_items) {
11723         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11724
11725         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11726
11727         while (arena) {
11728             struct ptr_tbl_arena *next = arena->next;
11729
11730             Safefree(arena);
11731             arena = next;
11732         };
11733
11734         tbl->tbl_items = 0;
11735         tbl->tbl_arena = NULL;
11736         tbl->tbl_arena_next = NULL;
11737         tbl->tbl_arena_end = NULL;
11738     }
11739 }
11740
11741 /* clear and free a ptr table */
11742
11743 void
11744 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11745 {
11746     struct ptr_tbl_arena *arena;
11747
11748     if (!tbl) {
11749         return;
11750     }
11751
11752     arena = tbl->tbl_arena;
11753
11754     while (arena) {
11755         struct ptr_tbl_arena *next = arena->next;
11756
11757         Safefree(arena);
11758         arena = next;
11759     }
11760
11761     Safefree(tbl->tbl_ary);
11762     Safefree(tbl);
11763 }
11764
11765 #if defined(USE_ITHREADS)
11766
11767 void
11768 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11769 {
11770     PERL_ARGS_ASSERT_RVPV_DUP;
11771
11772     assert(!isREGEXP(sstr));
11773     if (SvROK(sstr)) {
11774         if (SvWEAKREF(sstr)) {
11775             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11776             if (param->flags & CLONEf_JOIN_IN) {
11777                 /* if joining, we add any back references individually rather
11778                  * than copying the whole backref array */
11779                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11780             }
11781         }
11782         else
11783             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11784     }
11785     else if (SvPVX_const(sstr)) {
11786         /* Has something there */
11787         if (SvLEN(sstr)) {
11788             /* Normal PV - clone whole allocated space */
11789             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11790             /* sstr may not be that normal, but actually copy on write.
11791                But we are a true, independent SV, so:  */
11792             SvIsCOW_off(dstr);
11793         }
11794         else {
11795             /* Special case - not normally malloced for some reason */
11796             if (isGV_with_GP(sstr)) {
11797                 /* Don't need to do anything here.  */
11798             }
11799             else if ((SvIsCOW(sstr))) {
11800                 /* A "shared" PV - clone it as "shared" PV */
11801                 SvPV_set(dstr,
11802                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11803                                          param)));
11804             }
11805             else {
11806                 /* Some other special case - random pointer */
11807                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11808             }
11809         }
11810     }
11811     else {
11812         /* Copy the NULL */
11813         SvPV_set(dstr, NULL);
11814     }
11815 }
11816
11817 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11818 static SV **
11819 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11820                       SSize_t items, CLONE_PARAMS *const param)
11821 {
11822     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11823
11824     while (items-- > 0) {
11825         *dest++ = sv_dup_inc(*source++, param);
11826     }
11827
11828     return dest;
11829 }
11830
11831 /* duplicate an SV of any type (including AV, HV etc) */
11832
11833 static SV *
11834 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11835 {
11836     dVAR;
11837     SV *dstr;
11838
11839     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11840
11841     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
11842 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11843         abort();
11844 #endif
11845         return NULL;
11846     }
11847     /* look for it in the table first */
11848     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11849     if (dstr)
11850         return dstr;
11851
11852     if(param->flags & CLONEf_JOIN_IN) {
11853         /** We are joining here so we don't want do clone
11854             something that is bad **/
11855         if (SvTYPE(sstr) == SVt_PVHV) {
11856             const HEK * const hvname = HvNAME_HEK(sstr);
11857             if (hvname) {
11858                 /** don't clone stashes if they already exist **/
11859                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11860                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
11861                 ptr_table_store(PL_ptr_table, sstr, dstr);
11862                 return dstr;
11863             }
11864         }
11865         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
11866             HV *stash = GvSTASH(sstr);
11867             const HEK * hvname;
11868             if (stash && (hvname = HvNAME_HEK(stash))) {
11869                 /** don't clone GVs if they already exist **/
11870                 SV **svp;
11871                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11872                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
11873                 svp = hv_fetch(
11874                         stash, GvNAME(sstr),
11875                         GvNAMEUTF8(sstr)
11876                             ? -GvNAMELEN(sstr)
11877                             :  GvNAMELEN(sstr),
11878                         0
11879                       );
11880                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
11881                     ptr_table_store(PL_ptr_table, sstr, *svp);
11882                     return *svp;
11883                 }
11884             }
11885         }
11886     }
11887
11888     /* create anew and remember what it is */
11889     new_SV(dstr);
11890
11891 #ifdef DEBUG_LEAKING_SCALARS
11892     dstr->sv_debug_optype = sstr->sv_debug_optype;
11893     dstr->sv_debug_line = sstr->sv_debug_line;
11894     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11895     dstr->sv_debug_parent = (SV*)sstr;
11896     FREE_SV_DEBUG_FILE(dstr);
11897     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
11898 #endif
11899
11900     ptr_table_store(PL_ptr_table, sstr, dstr);
11901
11902     /* clone */
11903     SvFLAGS(dstr)       = SvFLAGS(sstr);
11904     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11905     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11906
11907 #ifdef DEBUGGING
11908     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11909         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11910                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11911 #endif
11912
11913     /* don't clone objects whose class has asked us not to */
11914     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11915         SvFLAGS(dstr) = 0;
11916         return dstr;
11917     }
11918
11919     switch (SvTYPE(sstr)) {
11920     case SVt_NULL:
11921         SvANY(dstr)     = NULL;
11922         break;
11923     case SVt_IV:
11924         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11925         if(SvROK(sstr)) {
11926             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11927         } else {
11928             SvIV_set(dstr, SvIVX(sstr));
11929         }
11930         break;
11931     case SVt_NV:
11932         SvANY(dstr)     = new_XNV();
11933         SvNV_set(dstr, SvNVX(sstr));
11934         break;
11935         /* case SVt_BIND: */
11936     default:
11937         {
11938             /* These are all the types that need complex bodies allocating.  */
11939             void *new_body;
11940             const svtype sv_type = SvTYPE(sstr);
11941             const struct body_details *const sv_type_details
11942                 = bodies_by_type + sv_type;
11943
11944             switch (sv_type) {
11945             default:
11946                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11947                 break;
11948
11949             case SVt_PVGV:
11950             case SVt_PVIO:
11951             case SVt_PVFM:
11952             case SVt_PVHV:
11953             case SVt_PVAV:
11954             case SVt_PVCV:
11955             case SVt_PVLV:
11956             case SVt_REGEXP:
11957             case SVt_PVMG:
11958             case SVt_PVNV:
11959             case SVt_PVIV:
11960             case SVt_PV:
11961                 assert(sv_type_details->body_size);
11962                 if (sv_type_details->arena) {
11963                     new_body_inline(new_body, sv_type);
11964                     new_body
11965                         = (void*)((char*)new_body - sv_type_details->offset);
11966                 } else {
11967                     new_body = new_NOARENA(sv_type_details);
11968                 }
11969             }
11970             assert(new_body);
11971             SvANY(dstr) = new_body;
11972
11973 #ifndef PURIFY
11974             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11975                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11976                  sv_type_details->copy, char);
11977 #else
11978             Copy(((char*)SvANY(sstr)),
11979                  ((char*)SvANY(dstr)),
11980                  sv_type_details->body_size + sv_type_details->offset, char);
11981 #endif
11982
11983             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11984                 && !isGV_with_GP(dstr)
11985                 && !isREGEXP(dstr)
11986                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
11987                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11988
11989             /* The Copy above means that all the source (unduplicated) pointers
11990                are now in the destination.  We can check the flags and the
11991                pointers in either, but it's possible that there's less cache
11992                missing by always going for the destination.
11993                FIXME - instrument and check that assumption  */
11994             if (sv_type >= SVt_PVMG) {
11995                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11996                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11997                 } else if (SvMAGIC(dstr))
11998                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11999                 if (SvSTASH(dstr))
12000                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12001             }
12002
12003             /* The cast silences a GCC warning about unhandled types.  */
12004             switch ((int)sv_type) {
12005             case SVt_PV:
12006                 break;
12007             case SVt_PVIV:
12008                 break;
12009             case SVt_PVNV:
12010                 break;
12011             case SVt_PVMG:
12012                 break;
12013             case SVt_REGEXP:
12014               duprex:
12015                 /* FIXME for plugins */
12016                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12017                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12018                 break;
12019             case SVt_PVLV:
12020                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12021                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12022                     LvTARG(dstr) = dstr;
12023                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12024                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12025                 else
12026                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12027                 if (isREGEXP(sstr)) goto duprex;
12028             case SVt_PVGV:
12029                 /* non-GP case already handled above */
12030                 if(isGV_with_GP(sstr)) {
12031                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12032                     /* Don't call sv_add_backref here as it's going to be
12033                        created as part of the magic cloning of the symbol
12034                        table--unless this is during a join and the stash
12035                        is not actually being cloned.  */
12036                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12037                        at the point of this comment.  */
12038                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12039                     if (param->flags & CLONEf_JOIN_IN)
12040                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12041                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12042                     (void)GpREFCNT_inc(GvGP(dstr));
12043                 }
12044                 break;
12045             case SVt_PVIO:
12046                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12047                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12048                     /* I have no idea why fake dirp (rsfps)
12049                        should be treated differently but otherwise
12050                        we end up with leaks -- sky*/
12051                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12052                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12053                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12054                 } else {
12055                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12056                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12057                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12058                     if (IoDIRP(dstr)) {
12059                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12060                     } else {
12061                         NOOP;
12062                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12063                     }
12064                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12065                 }
12066                 if (IoOFP(dstr) == IoIFP(sstr))
12067                     IoOFP(dstr) = IoIFP(dstr);
12068                 else
12069                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12070                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12071                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12072                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12073                 break;
12074             case SVt_PVAV:
12075                 /* avoid cloning an empty array */
12076                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12077                     SV **dst_ary, **src_ary;
12078                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12079
12080                     src_ary = AvARRAY((const AV *)sstr);
12081                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12082                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12083                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12084                     AvALLOC((const AV *)dstr) = dst_ary;
12085                     if (AvREAL((const AV *)sstr)) {
12086                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12087                                                       param);
12088                     }
12089                     else {
12090                         while (items-- > 0)
12091                             *dst_ary++ = sv_dup(*src_ary++, param);
12092                     }
12093                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12094                     while (items-- > 0) {
12095                         *dst_ary++ = &PL_sv_undef;
12096                     }
12097                 }
12098                 else {
12099                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12100                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12101                     AvMAX(  (const AV *)dstr)   = -1;
12102                     AvFILLp((const AV *)dstr)   = -1;
12103                 }
12104                 break;
12105             case SVt_PVHV:
12106                 if (HvARRAY((const HV *)sstr)) {
12107                     STRLEN i = 0;
12108                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12109                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12110                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12111                     char *darray;
12112                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12113                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12114                         char);
12115                     HvARRAY(dstr) = (HE**)darray;
12116                     while (i <= sxhv->xhv_max) {
12117                         const HE * const source = HvARRAY(sstr)[i];
12118                         HvARRAY(dstr)[i] = source
12119                             ? he_dup(source, sharekeys, param) : 0;
12120                         ++i;
12121                     }
12122                     if (SvOOK(sstr)) {
12123                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12124                         struct xpvhv_aux * const daux = HvAUX(dstr);
12125                         /* This flag isn't copied.  */
12126                         SvOOK_on(dstr);
12127
12128                         if (saux->xhv_name_count) {
12129                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12130                             const I32 count
12131                              = saux->xhv_name_count < 0
12132                                 ? -saux->xhv_name_count
12133                                 :  saux->xhv_name_count;
12134                             HEK **shekp = sname + count;
12135                             HEK **dhekp;
12136                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12137                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12138                             while (shekp-- > sname) {
12139                                 dhekp--;
12140                                 *dhekp = hek_dup(*shekp, param);
12141                             }
12142                         }
12143                         else {
12144                             daux->xhv_name_u.xhvnameu_name
12145                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12146                                           param);
12147                         }
12148                         daux->xhv_name_count = saux->xhv_name_count;
12149
12150                         daux->xhv_riter = saux->xhv_riter;
12151                         daux->xhv_eiter = saux->xhv_eiter
12152                             ? he_dup(saux->xhv_eiter,
12153                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12154                         /* backref array needs refcnt=2; see sv_add_backref */
12155                         daux->xhv_backreferences =
12156                             (param->flags & CLONEf_JOIN_IN)
12157                                 /* when joining, we let the individual GVs and
12158                                  * CVs add themselves to backref as
12159                                  * needed. This avoids pulling in stuff
12160                                  * that isn't required, and simplifies the
12161                                  * case where stashes aren't cloned back
12162                                  * if they already exist in the parent
12163                                  * thread */
12164                             ? NULL
12165                             : saux->xhv_backreferences
12166                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12167                                     ? MUTABLE_AV(SvREFCNT_inc(
12168                                           sv_dup_inc((const SV *)
12169                                             saux->xhv_backreferences, param)))
12170                                     : MUTABLE_AV(sv_dup((const SV *)
12171                                             saux->xhv_backreferences, param))
12172                                 : 0;
12173
12174                         daux->xhv_mro_meta = saux->xhv_mro_meta
12175                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12176                             : 0;
12177                         daux->xhv_super = NULL;
12178
12179                         /* Record stashes for possible cloning in Perl_clone(). */
12180                         if (HvNAME(sstr))
12181                             av_push(param->stashes, dstr);
12182                     }
12183                 }
12184                 else
12185                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12186                 break;
12187             case SVt_PVCV:
12188                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12189                     CvDEPTH(dstr) = 0;
12190                 }
12191                 /*FALLTHROUGH*/
12192             case SVt_PVFM:
12193                 /* NOTE: not refcounted */
12194                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12195                     hv_dup(CvSTASH(dstr), param);
12196                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12197                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12198                 if (!CvISXSUB(dstr)) {
12199                     OP_REFCNT_LOCK;
12200                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12201                     OP_REFCNT_UNLOCK;
12202                     CvSLABBED_off(dstr);
12203                 } else if (CvCONST(dstr)) {
12204                     CvXSUBANY(dstr).any_ptr =
12205                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12206                 }
12207                 assert(!CvSLABBED(dstr));
12208                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12209                 if (CvNAMED(dstr))
12210                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12211                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12212                 /* don't dup if copying back - CvGV isn't refcounted, so the
12213                  * duped GV may never be freed. A bit of a hack! DAPM */
12214                 else
12215                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12216                     CvCVGV_RC(dstr)
12217                     ? gv_dup_inc(CvGV(sstr), param)
12218                     : (param->flags & CLONEf_JOIN_IN)
12219                         ? NULL
12220                         : gv_dup(CvGV(sstr), param);
12221
12222                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12223                 CvOUTSIDE(dstr) =
12224                     CvWEAKOUTSIDE(sstr)
12225                     ? cv_dup(    CvOUTSIDE(dstr), param)
12226                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12227                 break;
12228             }
12229         }
12230     }
12231
12232     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12233         ++PL_sv_objcount;
12234
12235     return dstr;
12236  }
12237
12238 SV *
12239 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12240 {
12241     PERL_ARGS_ASSERT_SV_DUP_INC;
12242     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12243 }
12244
12245 SV *
12246 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12247 {
12248     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12249     PERL_ARGS_ASSERT_SV_DUP;
12250
12251     /* Track every SV that (at least initially) had a reference count of 0.
12252        We need to do this by holding an actual reference to it in this array.
12253        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12254        (akin to the stashes hash, and the perl stack), we come unstuck if
12255        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12256        thread) is manipulated in a CLONE method, because CLONE runs before the
12257        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12258        (and fix things up by giving each a reference via the temps stack).
12259        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12260        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12261        before the walk of unreferenced happens and a reference to that is SV
12262        added to the temps stack. At which point we have the same SV considered
12263        to be in use, and free to be re-used. Not good.
12264     */
12265     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12266         assert(param->unreferenced);
12267         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12268     }
12269
12270     return dstr;
12271 }
12272
12273 /* duplicate a context */
12274
12275 PERL_CONTEXT *
12276 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12277 {
12278     PERL_CONTEXT *ncxs;
12279
12280     PERL_ARGS_ASSERT_CX_DUP;
12281
12282     if (!cxs)
12283         return (PERL_CONTEXT*)NULL;
12284
12285     /* look for it in the table first */
12286     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12287     if (ncxs)
12288         return ncxs;
12289
12290     /* create anew and remember what it is */
12291     Newx(ncxs, max + 1, PERL_CONTEXT);
12292     ptr_table_store(PL_ptr_table, cxs, ncxs);
12293     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12294
12295     while (ix >= 0) {
12296         PERL_CONTEXT * const ncx = &ncxs[ix];
12297         if (CxTYPE(ncx) == CXt_SUBST) {
12298             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12299         }
12300         else {
12301             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12302             switch (CxTYPE(ncx)) {
12303             case CXt_SUB:
12304                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12305                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12306                                            : cv_dup(ncx->blk_sub.cv,param));
12307                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12308                                            ? av_dup_inc(ncx->blk_sub.argarray,
12309                                                         param)
12310                                            : NULL);
12311                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12312                                                      param);
12313                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12314                                            ncx->blk_sub.oldcomppad);
12315                 break;
12316             case CXt_EVAL:
12317                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12318                                                       param);
12319                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12320                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12321                 break;
12322             case CXt_LOOP_LAZYSV:
12323                 ncx->blk_loop.state_u.lazysv.end
12324                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12325                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12326                    actually being the same function, and order equivalence of
12327                    the two unions.
12328                    We can assert the later [but only at run time :-(]  */
12329                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12330                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12331             case CXt_LOOP_FOR:
12332                 ncx->blk_loop.state_u.ary.ary
12333                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12334             case CXt_LOOP_LAZYIV:
12335             case CXt_LOOP_PLAIN:
12336                 if (CxPADLOOP(ncx)) {
12337                     ncx->blk_loop.itervar_u.oldcomppad
12338                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12339                                         ncx->blk_loop.itervar_u.oldcomppad);
12340                 } else {
12341                     ncx->blk_loop.itervar_u.gv
12342                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12343                                     param);
12344                 }
12345                 break;
12346             case CXt_FORMAT:
12347                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12348                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12349                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12350                                                      param);
12351                 break;
12352             case CXt_BLOCK:
12353             case CXt_NULL:
12354             case CXt_WHEN:
12355             case CXt_GIVEN:
12356                 break;
12357             }
12358         }
12359         --ix;
12360     }
12361     return ncxs;
12362 }
12363
12364 /* duplicate a stack info structure */
12365
12366 PERL_SI *
12367 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12368 {
12369     PERL_SI *nsi;
12370
12371     PERL_ARGS_ASSERT_SI_DUP;
12372
12373     if (!si)
12374         return (PERL_SI*)NULL;
12375
12376     /* look for it in the table first */
12377     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12378     if (nsi)
12379         return nsi;
12380
12381     /* create anew and remember what it is */
12382     Newxz(nsi, 1, PERL_SI);
12383     ptr_table_store(PL_ptr_table, si, nsi);
12384
12385     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12386     nsi->si_cxix        = si->si_cxix;
12387     nsi->si_cxmax       = si->si_cxmax;
12388     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12389     nsi->si_type        = si->si_type;
12390     nsi->si_prev        = si_dup(si->si_prev, param);
12391     nsi->si_next        = si_dup(si->si_next, param);
12392     nsi->si_markoff     = si->si_markoff;
12393
12394     return nsi;
12395 }
12396
12397 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12398 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12399 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12400 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12401 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12402 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12403 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12404 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12405 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12406 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12407 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12408 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12409 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12410 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12411 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12412 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12413
12414 /* XXXXX todo */
12415 #define pv_dup_inc(p)   SAVEPV(p)
12416 #define pv_dup(p)       SAVEPV(p)
12417 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12418
12419 /* map any object to the new equivent - either something in the
12420  * ptr table, or something in the interpreter structure
12421  */
12422
12423 void *
12424 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12425 {
12426     void *ret;
12427
12428     PERL_ARGS_ASSERT_ANY_DUP;
12429
12430     if (!v)
12431         return (void*)NULL;
12432
12433     /* look for it in the table first */
12434     ret = ptr_table_fetch(PL_ptr_table, v);
12435     if (ret)
12436         return ret;
12437
12438     /* see if it is part of the interpreter structure */
12439     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12440         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12441     else {
12442         ret = v;
12443     }
12444
12445     return ret;
12446 }
12447
12448 /* duplicate the save stack */
12449
12450 ANY *
12451 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12452 {
12453     dVAR;
12454     ANY * const ss      = proto_perl->Isavestack;
12455     const I32 max       = proto_perl->Isavestack_max;
12456     I32 ix              = proto_perl->Isavestack_ix;
12457     ANY *nss;
12458     const SV *sv;
12459     const GV *gv;
12460     const AV *av;
12461     const HV *hv;
12462     void* ptr;
12463     int intval;
12464     long longval;
12465     GP *gp;
12466     IV iv;
12467     I32 i;
12468     char *c = NULL;
12469     void (*dptr) (void*);
12470     void (*dxptr) (pTHX_ void*);
12471
12472     PERL_ARGS_ASSERT_SS_DUP;
12473
12474     Newxz(nss, max, ANY);
12475
12476     while (ix > 0) {
12477         const UV uv = POPUV(ss,ix);
12478         const U8 type = (U8)uv & SAVE_MASK;
12479
12480         TOPUV(nss,ix) = uv;
12481         switch (type) {
12482         case SAVEt_CLEARSV:
12483         case SAVEt_CLEARPADRANGE:
12484             break;
12485         case SAVEt_HELEM:               /* hash element */
12486             sv = (const SV *)POPPTR(ss,ix);
12487             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12488             /* fall through */
12489         case SAVEt_ITEM:                        /* normal string */
12490         case SAVEt_GVSV:                        /* scalar slot in GV */
12491         case SAVEt_SV:                          /* scalar reference */
12492             sv = (const SV *)POPPTR(ss,ix);
12493             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12494             /* fall through */
12495         case SAVEt_FREESV:
12496         case SAVEt_MORTALIZESV:
12497             sv = (const SV *)POPPTR(ss,ix);
12498             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12499             break;
12500         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12501             c = (char*)POPPTR(ss,ix);
12502             TOPPTR(nss,ix) = savesharedpv(c);
12503             ptr = POPPTR(ss,ix);
12504             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12505             break;
12506         case SAVEt_GENERIC_SVREF:               /* generic sv */
12507         case SAVEt_SVREF:                       /* scalar reference */
12508             sv = (const SV *)POPPTR(ss,ix);
12509             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12510             ptr = POPPTR(ss,ix);
12511             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12512             break;
12513         case SAVEt_HV:                          /* hash reference */
12514         case SAVEt_AV:                          /* array reference */
12515             sv = (const SV *) POPPTR(ss,ix);
12516             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12517             /* fall through */
12518         case SAVEt_COMPPAD:
12519         case SAVEt_NSTAB:
12520             sv = (const SV *) POPPTR(ss,ix);
12521             TOPPTR(nss,ix) = sv_dup(sv, param);
12522             break;
12523         case SAVEt_INT:                         /* int reference */
12524             ptr = POPPTR(ss,ix);
12525             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12526             intval = (int)POPINT(ss,ix);
12527             TOPINT(nss,ix) = intval;
12528             break;
12529         case SAVEt_LONG:                        /* long reference */
12530             ptr = POPPTR(ss,ix);
12531             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12532             longval = (long)POPLONG(ss,ix);
12533             TOPLONG(nss,ix) = longval;
12534             break;
12535         case SAVEt_I32:                         /* I32 reference */
12536             ptr = POPPTR(ss,ix);
12537             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12538             i = POPINT(ss,ix);
12539             TOPINT(nss,ix) = i;
12540             break;
12541         case SAVEt_IV:                          /* IV reference */
12542             ptr = POPPTR(ss,ix);
12543             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12544             iv = POPIV(ss,ix);
12545             TOPIV(nss,ix) = iv;
12546             break;
12547         case SAVEt_HPTR:                        /* HV* reference */
12548         case SAVEt_APTR:                        /* AV* reference */
12549         case SAVEt_SPTR:                        /* SV* reference */
12550             ptr = POPPTR(ss,ix);
12551             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12552             sv = (const SV *)POPPTR(ss,ix);
12553             TOPPTR(nss,ix) = sv_dup(sv, param);
12554             break;
12555         case SAVEt_VPTR:                        /* random* reference */
12556             ptr = POPPTR(ss,ix);
12557             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12558             /* Fall through */
12559         case SAVEt_INT_SMALL:
12560         case SAVEt_I32_SMALL:
12561         case SAVEt_I16:                         /* I16 reference */
12562         case SAVEt_I8:                          /* I8 reference */
12563         case SAVEt_BOOL:
12564             ptr = POPPTR(ss,ix);
12565             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12566             break;
12567         case SAVEt_GENERIC_PVREF:               /* generic char* */
12568         case SAVEt_PPTR:                        /* char* reference */
12569             ptr = POPPTR(ss,ix);
12570             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12571             c = (char*)POPPTR(ss,ix);
12572             TOPPTR(nss,ix) = pv_dup(c);
12573             break;
12574         case SAVEt_GP:                          /* scalar reference */
12575             gp = (GP*)POPPTR(ss,ix);
12576             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12577             (void)GpREFCNT_inc(gp);
12578             gv = (const GV *)POPPTR(ss,ix);
12579             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12580             break;
12581         case SAVEt_FREEOP:
12582             ptr = POPPTR(ss,ix);
12583             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12584                 /* these are assumed to be refcounted properly */
12585                 OP *o;
12586                 switch (((OP*)ptr)->op_type) {
12587                 case OP_LEAVESUB:
12588                 case OP_LEAVESUBLV:
12589                 case OP_LEAVEEVAL:
12590                 case OP_LEAVE:
12591                 case OP_SCOPE:
12592                 case OP_LEAVEWRITE:
12593                     TOPPTR(nss,ix) = ptr;
12594                     o = (OP*)ptr;
12595                     OP_REFCNT_LOCK;
12596                     (void) OpREFCNT_inc(o);
12597                     OP_REFCNT_UNLOCK;
12598                     break;
12599                 default:
12600                     TOPPTR(nss,ix) = NULL;
12601                     break;
12602                 }
12603             }
12604             else
12605                 TOPPTR(nss,ix) = NULL;
12606             break;
12607         case SAVEt_FREECOPHH:
12608             ptr = POPPTR(ss,ix);
12609             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12610             break;
12611         case SAVEt_DELETE:
12612             hv = (const HV *)POPPTR(ss,ix);
12613             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12614             i = POPINT(ss,ix);
12615             TOPINT(nss,ix) = i;
12616             /* Fall through */
12617         case SAVEt_FREEPV:
12618             c = (char*)POPPTR(ss,ix);
12619             TOPPTR(nss,ix) = pv_dup_inc(c);
12620             break;
12621         case SAVEt_STACK_POS:           /* Position on Perl stack */
12622             i = POPINT(ss,ix);
12623             TOPINT(nss,ix) = i;
12624             break;
12625         case SAVEt_DESTRUCTOR:
12626             ptr = POPPTR(ss,ix);
12627             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12628             dptr = POPDPTR(ss,ix);
12629             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12630                                         any_dup(FPTR2DPTR(void *, dptr),
12631                                                 proto_perl));
12632             break;
12633         case SAVEt_DESTRUCTOR_X:
12634             ptr = POPPTR(ss,ix);
12635             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12636             dxptr = POPDXPTR(ss,ix);
12637             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12638                                          any_dup(FPTR2DPTR(void *, dxptr),
12639                                                  proto_perl));
12640             break;
12641         case SAVEt_REGCONTEXT:
12642         case SAVEt_ALLOC:
12643             ix -= uv >> SAVE_TIGHT_SHIFT;
12644             break;
12645         case SAVEt_AELEM:               /* array element */
12646             sv = (const SV *)POPPTR(ss,ix);
12647             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12648             i = POPINT(ss,ix);
12649             TOPINT(nss,ix) = i;
12650             av = (const AV *)POPPTR(ss,ix);
12651             TOPPTR(nss,ix) = av_dup_inc(av, param);
12652             break;
12653         case SAVEt_OP:
12654             ptr = POPPTR(ss,ix);
12655             TOPPTR(nss,ix) = ptr;
12656             break;
12657         case SAVEt_HINTS:
12658             ptr = POPPTR(ss,ix);
12659             ptr = cophh_copy((COPHH*)ptr);
12660             TOPPTR(nss,ix) = ptr;
12661             i = POPINT(ss,ix);
12662             TOPINT(nss,ix) = i;
12663             if (i & HINT_LOCALIZE_HH) {
12664                 hv = (const HV *)POPPTR(ss,ix);
12665                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12666             }
12667             break;
12668         case SAVEt_PADSV_AND_MORTALIZE:
12669             longval = (long)POPLONG(ss,ix);
12670             TOPLONG(nss,ix) = longval;
12671             ptr = POPPTR(ss,ix);
12672             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12673             sv = (const SV *)POPPTR(ss,ix);
12674             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12675             break;
12676         case SAVEt_SET_SVFLAGS:
12677             i = POPINT(ss,ix);
12678             TOPINT(nss,ix) = i;
12679             i = POPINT(ss,ix);
12680             TOPINT(nss,ix) = i;
12681             sv = (const SV *)POPPTR(ss,ix);
12682             TOPPTR(nss,ix) = sv_dup(sv, param);
12683             break;
12684         case SAVEt_RE_STATE:
12685             {
12686                 const struct re_save_state *const old_state
12687                     = (struct re_save_state *)
12688                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12689                 struct re_save_state *const new_state
12690                     = (struct re_save_state *)
12691                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12692
12693                 Copy(old_state, new_state, 1, struct re_save_state);
12694                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12695
12696                 new_state->re_state_bostr
12697                     = pv_dup(old_state->re_state_bostr);
12698                 new_state->re_state_regeol
12699                     = pv_dup(old_state->re_state_regeol);
12700 #ifdef PERL_OLD_COPY_ON_WRITE
12701                 new_state->re_state_nrs
12702                     = sv_dup(old_state->re_state_nrs, param);
12703 #endif
12704                 new_state->re_state_reg_magic
12705                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12706                                proto_perl);
12707                 new_state->re_state_reg_oldcurpm
12708                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12709                               proto_perl);
12710                 new_state->re_state_reg_curpm
12711                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12712                                proto_perl);
12713                 new_state->re_state_reg_oldsaved
12714                     = pv_dup(old_state->re_state_reg_oldsaved);
12715                 new_state->re_state_reg_poscache
12716                     = pv_dup(old_state->re_state_reg_poscache);
12717                 new_state->re_state_reg_starttry
12718                     = pv_dup(old_state->re_state_reg_starttry);
12719                 break;
12720             }
12721         case SAVEt_COMPILE_WARNINGS:
12722             ptr = POPPTR(ss,ix);
12723             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12724             break;
12725         case SAVEt_PARSER:
12726             ptr = POPPTR(ss,ix);
12727             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12728             break;
12729         default:
12730             Perl_croak(aTHX_
12731                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12732         }
12733     }
12734
12735     return nss;
12736 }
12737
12738
12739 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12740  * flag to the result. This is done for each stash before cloning starts,
12741  * so we know which stashes want their objects cloned */
12742
12743 static void
12744 do_mark_cloneable_stash(pTHX_ SV *const sv)
12745 {
12746     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12747     if (hvname) {
12748         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12749         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12750         if (cloner && GvCV(cloner)) {
12751             dSP;
12752             UV status;
12753
12754             ENTER;
12755             SAVETMPS;
12756             PUSHMARK(SP);
12757             mXPUSHs(newSVhek(hvname));
12758             PUTBACK;
12759             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12760             SPAGAIN;
12761             status = POPu;
12762             PUTBACK;
12763             FREETMPS;
12764             LEAVE;
12765             if (status)
12766                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12767         }
12768     }
12769 }
12770
12771
12772
12773 /*
12774 =for apidoc perl_clone
12775
12776 Create and return a new interpreter by cloning the current one.
12777
12778 perl_clone takes these flags as parameters:
12779
12780 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12781 without it we only clone the data and zero the stacks,
12782 with it we copy the stacks and the new perl interpreter is
12783 ready to run at the exact same point as the previous one.
12784 The pseudo-fork code uses COPY_STACKS while the
12785 threads->create doesn't.
12786
12787 CLONEf_KEEP_PTR_TABLE -
12788 perl_clone keeps a ptr_table with the pointer of the old
12789 variable as a key and the new variable as a value,
12790 this allows it to check if something has been cloned and not
12791 clone it again but rather just use the value and increase the
12792 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
12793 the ptr_table using the function
12794 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12795 reason to keep it around is if you want to dup some of your own
12796 variable who are outside the graph perl scans, example of this
12797 code is in threads.xs create.
12798
12799 CLONEf_CLONE_HOST -
12800 This is a win32 thing, it is ignored on unix, it tells perls
12801 win32host code (which is c++) to clone itself, this is needed on
12802 win32 if you want to run two threads at the same time,
12803 if you just want to do some stuff in a separate perl interpreter
12804 and then throw it away and return to the original one,
12805 you don't need to do anything.
12806
12807 =cut
12808 */
12809
12810 /* XXX the above needs expanding by someone who actually understands it ! */
12811 EXTERN_C PerlInterpreter *
12812 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12813
12814 PerlInterpreter *
12815 perl_clone(PerlInterpreter *proto_perl, UV flags)
12816 {
12817    dVAR;
12818 #ifdef PERL_IMPLICIT_SYS
12819
12820     PERL_ARGS_ASSERT_PERL_CLONE;
12821
12822    /* perlhost.h so we need to call into it
12823    to clone the host, CPerlHost should have a c interface, sky */
12824
12825    if (flags & CLONEf_CLONE_HOST) {
12826        return perl_clone_host(proto_perl,flags);
12827    }
12828    return perl_clone_using(proto_perl, flags,
12829                             proto_perl->IMem,
12830                             proto_perl->IMemShared,
12831                             proto_perl->IMemParse,
12832                             proto_perl->IEnv,
12833                             proto_perl->IStdIO,
12834                             proto_perl->ILIO,
12835                             proto_perl->IDir,
12836                             proto_perl->ISock,
12837                             proto_perl->IProc);
12838 }
12839
12840 PerlInterpreter *
12841 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12842                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12843                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12844                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12845                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12846                  struct IPerlProc* ipP)
12847 {
12848     /* XXX many of the string copies here can be optimized if they're
12849      * constants; they need to be allocated as common memory and just
12850      * their pointers copied. */
12851
12852     IV i;
12853     CLONE_PARAMS clone_params;
12854     CLONE_PARAMS* const param = &clone_params;
12855
12856     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12857
12858     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12859 #else           /* !PERL_IMPLICIT_SYS */
12860     IV i;
12861     CLONE_PARAMS clone_params;
12862     CLONE_PARAMS* param = &clone_params;
12863     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12864
12865     PERL_ARGS_ASSERT_PERL_CLONE;
12866 #endif          /* PERL_IMPLICIT_SYS */
12867
12868     /* for each stash, determine whether its objects should be cloned */
12869     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12870     PERL_SET_THX(my_perl);
12871
12872 #ifdef DEBUGGING
12873     PoisonNew(my_perl, 1, PerlInterpreter);
12874     PL_op = NULL;
12875     PL_curcop = NULL;
12876     PL_defstash = NULL; /* may be used by perl malloc() */
12877     PL_markstack = 0;
12878     PL_scopestack = 0;
12879     PL_scopestack_name = 0;
12880     PL_savestack = 0;
12881     PL_savestack_ix = 0;
12882     PL_savestack_max = -1;
12883     PL_sig_pending = 0;
12884     PL_parser = NULL;
12885     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12886 #  ifdef DEBUG_LEAKING_SCALARS
12887     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12888 #  endif
12889 #else   /* !DEBUGGING */
12890     Zero(my_perl, 1, PerlInterpreter);
12891 #endif  /* DEBUGGING */
12892
12893 #ifdef PERL_IMPLICIT_SYS
12894     /* host pointers */
12895     PL_Mem              = ipM;
12896     PL_MemShared        = ipMS;
12897     PL_MemParse         = ipMP;
12898     PL_Env              = ipE;
12899     PL_StdIO            = ipStd;
12900     PL_LIO              = ipLIO;
12901     PL_Dir              = ipD;
12902     PL_Sock             = ipS;
12903     PL_Proc             = ipP;
12904 #endif          /* PERL_IMPLICIT_SYS */
12905
12906     param->flags = flags;
12907     /* Nothing in the core code uses this, but we make it available to
12908        extensions (using mg_dup).  */
12909     param->proto_perl = proto_perl;
12910     /* Likely nothing will use this, but it is initialised to be consistent
12911        with Perl_clone_params_new().  */
12912     param->new_perl = my_perl;
12913     param->unreferenced = NULL;
12914
12915     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12916
12917     PL_body_arenas = NULL;
12918     Zero(&PL_body_roots, 1, PL_body_roots);
12919     
12920     PL_sv_count         = 0;
12921     PL_sv_objcount      = 0;
12922     PL_sv_root          = NULL;
12923     PL_sv_arenaroot     = NULL;
12924
12925     PL_debug            = proto_perl->Idebug;
12926
12927     PL_hash_seed        = proto_perl->Ihash_seed;
12928     PL_rehash_seed      = proto_perl->Irehash_seed;
12929
12930     /* dbargs array probably holds garbage */
12931     PL_dbargs           = NULL;
12932
12933     PL_compiling = proto_perl->Icompiling;
12934
12935     /* pseudo environmental stuff */
12936     PL_origargc         = proto_perl->Iorigargc;
12937     PL_origargv         = proto_perl->Iorigargv;
12938
12939 #if !NO_TAINT_SUPPORT
12940     /* Set tainting stuff before PerlIO_debug can possibly get called */
12941     PL_tainting         = proto_perl->Itainting;
12942     PL_taint_warn       = proto_perl->Itaint_warn;
12943 #else
12944     PL_tainting         = FALSE;
12945     PL_taint_warn       = FALSE;
12946 #endif
12947
12948     PL_minus_c          = proto_perl->Iminus_c;
12949
12950     PL_localpatches     = proto_perl->Ilocalpatches;
12951     PL_splitstr         = proto_perl->Isplitstr;
12952     PL_minus_n          = proto_perl->Iminus_n;
12953     PL_minus_p          = proto_perl->Iminus_p;
12954     PL_minus_l          = proto_perl->Iminus_l;
12955     PL_minus_a          = proto_perl->Iminus_a;
12956     PL_minus_E          = proto_perl->Iminus_E;
12957     PL_minus_F          = proto_perl->Iminus_F;
12958     PL_doswitches       = proto_perl->Idoswitches;
12959     PL_dowarn           = proto_perl->Idowarn;
12960     PL_sawampersand     = proto_perl->Isawampersand;
12961     PL_unsafe           = proto_perl->Iunsafe;
12962     PL_perldb           = proto_perl->Iperldb;
12963     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12964     PL_exit_flags       = proto_perl->Iexit_flags;
12965
12966     /* XXX time(&PL_basetime) when asked for? */
12967     PL_basetime         = proto_perl->Ibasetime;
12968
12969     PL_maxsysfd         = proto_perl->Imaxsysfd;
12970     PL_statusvalue      = proto_perl->Istatusvalue;
12971 #ifdef VMS
12972     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
12973 #else
12974     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12975 #endif
12976
12977     /* RE engine related */
12978     Zero(&PL_reg_state, 1, struct re_save_state);
12979     PL_regmatch_slab    = NULL;
12980
12981     PL_sub_generation   = proto_perl->Isub_generation;
12982
12983     /* funky return mechanisms */
12984     PL_forkprocess      = proto_perl->Iforkprocess;
12985
12986     /* internal state */
12987     PL_maxo             = proto_perl->Imaxo;
12988
12989     PL_main_start       = proto_perl->Imain_start;
12990     PL_eval_root        = proto_perl->Ieval_root;
12991     PL_eval_start       = proto_perl->Ieval_start;
12992
12993     PL_filemode         = proto_perl->Ifilemode;
12994     PL_lastfd           = proto_perl->Ilastfd;
12995     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
12996     PL_Argv             = NULL;
12997     PL_Cmd              = NULL;
12998     PL_gensym           = proto_perl->Igensym;
12999
13000     PL_laststatval      = proto_perl->Ilaststatval;
13001     PL_laststype        = proto_perl->Ilaststype;
13002     PL_mess_sv          = NULL;
13003
13004     PL_profiledata      = NULL;
13005
13006     PL_generation       = proto_perl->Igeneration;
13007
13008     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13009     PL_in_clean_all     = proto_perl->Iin_clean_all;
13010
13011     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13012     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13013     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13014     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13015     PL_nomemok          = proto_perl->Inomemok;
13016     PL_an               = proto_perl->Ian;
13017     PL_evalseq          = proto_perl->Ievalseq;
13018     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13019     PL_origalen         = proto_perl->Iorigalen;
13020
13021     PL_sighandlerp      = proto_perl->Isighandlerp;
13022
13023     PL_runops           = proto_perl->Irunops;
13024
13025     PL_subline          = proto_perl->Isubline;
13026
13027 #ifdef FCRYPT
13028     PL_cryptseen        = proto_perl->Icryptseen;
13029 #endif
13030
13031     PL_hints            = proto_perl->Ihints;
13032
13033 #ifdef USE_LOCALE_COLLATE
13034     PL_collation_ix     = proto_perl->Icollation_ix;
13035     PL_collation_standard       = proto_perl->Icollation_standard;
13036     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13037     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13038 #endif /* USE_LOCALE_COLLATE */
13039
13040 #ifdef USE_LOCALE_NUMERIC
13041     PL_numeric_standard = proto_perl->Inumeric_standard;
13042     PL_numeric_local    = proto_perl->Inumeric_local;
13043 #endif /* !USE_LOCALE_NUMERIC */
13044
13045     /* Did the locale setup indicate UTF-8? */
13046     PL_utf8locale       = proto_perl->Iutf8locale;
13047     /* Unicode features (see perlrun/-C) */
13048     PL_unicode          = proto_perl->Iunicode;
13049
13050     /* Pre-5.8 signals control */
13051     PL_signals          = proto_perl->Isignals;
13052
13053     /* times() ticks per second */
13054     PL_clocktick        = proto_perl->Iclocktick;
13055
13056     /* Recursion stopper for PerlIO_find_layer */
13057     PL_in_load_module   = proto_perl->Iin_load_module;
13058
13059     /* sort() routine */
13060     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13061
13062     /* Not really needed/useful since the reenrant_retint is "volatile",
13063      * but do it for consistency's sake. */
13064     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13065
13066     /* Hooks to shared SVs and locks. */
13067     PL_sharehook        = proto_perl->Isharehook;
13068     PL_lockhook         = proto_perl->Ilockhook;
13069     PL_unlockhook       = proto_perl->Iunlockhook;
13070     PL_threadhook       = proto_perl->Ithreadhook;
13071     PL_destroyhook      = proto_perl->Idestroyhook;
13072     PL_signalhook       = proto_perl->Isignalhook;
13073
13074     PL_globhook         = proto_perl->Iglobhook;
13075
13076     /* swatch cache */
13077     PL_last_swash_hv    = NULL; /* reinits on demand */
13078     PL_last_swash_klen  = 0;
13079     PL_last_swash_key[0]= '\0';
13080     PL_last_swash_tmps  = (U8*)NULL;
13081     PL_last_swash_slen  = 0;
13082
13083     PL_glob_index       = proto_perl->Iglob_index;
13084     PL_srand_called     = proto_perl->Isrand_called;
13085
13086     if (flags & CLONEf_COPY_STACKS) {
13087         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13088         PL_tmps_ix              = proto_perl->Itmps_ix;
13089         PL_tmps_max             = proto_perl->Itmps_max;
13090         PL_tmps_floor           = proto_perl->Itmps_floor;
13091
13092         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13093          * NOTE: unlike the others! */
13094         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13095         PL_scopestack_max       = proto_perl->Iscopestack_max;
13096
13097         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13098          * NOTE: unlike the others! */
13099         PL_savestack_ix         = proto_perl->Isavestack_ix;
13100         PL_savestack_max        = proto_perl->Isavestack_max;
13101     }
13102
13103     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13104     PL_top_env          = &PL_start_env;
13105
13106     PL_op               = proto_perl->Iop;
13107
13108     PL_Sv               = NULL;
13109     PL_Xpv              = (XPV*)NULL;
13110     my_perl->Ina        = proto_perl->Ina;
13111
13112     PL_statbuf          = proto_perl->Istatbuf;
13113     PL_statcache        = proto_perl->Istatcache;
13114
13115 #ifdef HAS_TIMES
13116     PL_timesbuf         = proto_perl->Itimesbuf;
13117 #endif
13118
13119 #if !NO_TAINT_SUPPORT
13120     PL_tainted          = proto_perl->Itainted;
13121 #else
13122     PL_tainted          = FALSE;
13123 #endif
13124     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13125
13126     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13127
13128     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13129     PL_restartop        = proto_perl->Irestartop;
13130     PL_in_eval          = proto_perl->Iin_eval;
13131     PL_delaymagic       = proto_perl->Idelaymagic;
13132     PL_phase            = proto_perl->Iphase;
13133     PL_localizing       = proto_perl->Ilocalizing;
13134
13135     PL_hv_fetch_ent_mh  = NULL;
13136     PL_modcount         = proto_perl->Imodcount;
13137     PL_lastgotoprobe    = NULL;
13138     PL_dumpindent       = proto_perl->Idumpindent;
13139
13140     PL_efloatbuf        = NULL;         /* reinits on demand */
13141     PL_efloatsize       = 0;                    /* reinits on demand */
13142
13143     /* regex stuff */
13144
13145     PL_regdummy         = proto_perl->Iregdummy;
13146     PL_colorset         = 0;            /* reinits PL_colors[] */
13147     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13148
13149     /* Pluggable optimizer */
13150     PL_peepp            = proto_perl->Ipeepp;
13151     PL_rpeepp           = proto_perl->Irpeepp;
13152     /* op_free() hook */
13153     PL_opfreehook       = proto_perl->Iopfreehook;
13154
13155 #ifdef USE_REENTRANT_API
13156     /* XXX: things like -Dm will segfault here in perlio, but doing
13157      *  PERL_SET_CONTEXT(proto_perl);
13158      * breaks too many other things
13159      */
13160     Perl_reentrant_init(aTHX);
13161 #endif
13162
13163     /* create SV map for pointer relocation */
13164     PL_ptr_table = ptr_table_new();
13165
13166     /* initialize these special pointers as early as possible */
13167     init_constants();
13168     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13169     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13170     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13171
13172     /* create (a non-shared!) shared string table */
13173     PL_strtab           = newHV();
13174     HvSHAREKEYS_off(PL_strtab);
13175     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13176     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13177
13178     /* This PV will be free'd special way so must set it same way op.c does */
13179     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13180     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13181
13182     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13183     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13184     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13185     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13186
13187     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13188     /* This makes no difference to the implementation, as it always pushes
13189        and shifts pointers to other SVs without changing their reference
13190        count, with the array becoming empty before it is freed. However, it
13191        makes it conceptually clear what is going on, and will avoid some
13192        work inside av.c, filling slots between AvFILL() and AvMAX() with
13193        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13194     AvREAL_off(param->stashes);
13195
13196     if (!(flags & CLONEf_COPY_STACKS)) {
13197         param->unreferenced = newAV();
13198     }
13199
13200 #ifdef PERLIO_LAYERS
13201     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13202     PerlIO_clone(aTHX_ proto_perl, param);
13203 #endif
13204
13205     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13206     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13207     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13208     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13209     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13210     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13211
13212     /* switches */
13213     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13214     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13215     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13216     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13217
13218     /* magical thingies */
13219
13220     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13221
13222     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13223     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13224     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13225
13226    
13227     /* Clone the regex array */
13228     /* ORANGE FIXME for plugins, probably in the SV dup code.
13229        newSViv(PTR2IV(CALLREGDUPE(
13230        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13231     */
13232     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13233     PL_regex_pad = AvARRAY(PL_regex_padav);
13234
13235     PL_stashpadmax      = proto_perl->Istashpadmax;
13236     PL_stashpadix       = proto_perl->Istashpadix ;
13237     Newx(PL_stashpad, PL_stashpadmax, HV *);
13238     {
13239         PADOFFSET o = 0;
13240         for (; o < PL_stashpadmax; ++o)
13241             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13242     }
13243
13244     /* shortcuts to various I/O objects */
13245     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13246     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13247     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13248     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13249     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13250     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13251     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13252
13253     /* shortcuts to regexp stuff */
13254     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13255
13256     /* shortcuts to misc objects */
13257     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13258
13259     /* shortcuts to debugging objects */
13260     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13261     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13262     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13263     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13264     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13265     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13266
13267     /* symbol tables */
13268     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13269     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13270     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13271     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13272     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13273
13274     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13275     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13276     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13277     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13278     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13279     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13280     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13281     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13282
13283     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13284
13285     /* subprocess state */
13286     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13287
13288     if (proto_perl->Iop_mask)
13289         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13290     else
13291         PL_op_mask      = NULL;
13292     /* PL_asserting        = proto_perl->Iasserting; */
13293
13294     /* current interpreter roots */
13295     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13296     OP_REFCNT_LOCK;
13297     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13298     OP_REFCNT_UNLOCK;
13299
13300     /* runtime control stuff */
13301     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13302
13303     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13304
13305     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13306
13307     /* interpreter atexit processing */
13308     PL_exitlistlen      = proto_perl->Iexitlistlen;
13309     if (PL_exitlistlen) {
13310         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13311         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13312     }
13313     else
13314         PL_exitlist     = (PerlExitListEntry*)NULL;
13315
13316     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13317     if (PL_my_cxt_size) {
13318         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13319         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13320 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13321         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13322         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13323 #endif
13324     }
13325     else {
13326         PL_my_cxt_list  = (void**)NULL;
13327 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13328         PL_my_cxt_keys  = (const char**)NULL;
13329 #endif
13330     }
13331     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13332     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13333     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13334     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13335
13336     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13337
13338     PAD_CLONE_VARS(proto_perl, param);
13339
13340 #ifdef HAVE_INTERP_INTERN
13341     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13342 #endif
13343
13344     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13345
13346 #ifdef PERL_USES_PL_PIDSTATUS
13347     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13348 #endif
13349     PL_osname           = SAVEPV(proto_perl->Iosname);
13350     PL_parser           = parser_dup(proto_perl->Iparser, param);
13351
13352     /* XXX this only works if the saved cop has already been cloned */
13353     if (proto_perl->Iparser) {
13354         PL_parser->saved_curcop = (COP*)any_dup(
13355                                     proto_perl->Iparser->saved_curcop,
13356                                     proto_perl);
13357     }
13358
13359     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13360
13361 #ifdef USE_LOCALE_COLLATE
13362     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13363 #endif /* USE_LOCALE_COLLATE */
13364
13365 #ifdef USE_LOCALE_NUMERIC
13366     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13367     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13368 #endif /* !USE_LOCALE_NUMERIC */
13369
13370     /* Unicode inversion lists */
13371     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13372     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13373
13374     PL_PerlSpace        = sv_dup_inc(proto_perl->IPerlSpace, param);
13375     PL_XPerlSpace       = sv_dup_inc(proto_perl->IXPerlSpace, param);
13376
13377     PL_L1PosixAlnum     = sv_dup_inc(proto_perl->IL1PosixAlnum, param);
13378     PL_PosixAlnum       = sv_dup_inc(proto_perl->IPosixAlnum, param);
13379
13380     PL_L1PosixAlpha     = sv_dup_inc(proto_perl->IL1PosixAlpha, param);
13381     PL_PosixAlpha       = sv_dup_inc(proto_perl->IPosixAlpha, param);
13382
13383     PL_PosixBlank       = sv_dup_inc(proto_perl->IPosixBlank, param);
13384     PL_XPosixBlank      = sv_dup_inc(proto_perl->IXPosixBlank, param);
13385
13386     PL_L1Cased          = sv_dup_inc(proto_perl->IL1Cased, param);
13387
13388     PL_PosixCntrl       = sv_dup_inc(proto_perl->IPosixCntrl, param);
13389     PL_XPosixCntrl      = sv_dup_inc(proto_perl->IXPosixCntrl, param);
13390
13391     PL_PosixDigit       = sv_dup_inc(proto_perl->IPosixDigit, param);
13392
13393     PL_L1PosixGraph     = sv_dup_inc(proto_perl->IL1PosixGraph, param);
13394     PL_PosixGraph       = sv_dup_inc(proto_perl->IPosixGraph, param);
13395
13396     PL_L1PosixLower     = sv_dup_inc(proto_perl->IL1PosixLower, param);
13397     PL_PosixLower       = sv_dup_inc(proto_perl->IPosixLower, param);
13398
13399     PL_L1PosixPrint     = sv_dup_inc(proto_perl->IL1PosixPrint, param);
13400     PL_PosixPrint       = sv_dup_inc(proto_perl->IPosixPrint, param);
13401
13402     PL_L1PosixPunct     = sv_dup_inc(proto_perl->IL1PosixPunct, param);
13403     PL_PosixPunct       = sv_dup_inc(proto_perl->IPosixPunct, param);
13404
13405     PL_PosixSpace       = sv_dup_inc(proto_perl->IPosixSpace, param);
13406     PL_XPosixSpace      = sv_dup_inc(proto_perl->IXPosixSpace, param);
13407
13408     PL_L1PosixUpper     = sv_dup_inc(proto_perl->IL1PosixUpper, param);
13409     PL_PosixUpper       = sv_dup_inc(proto_perl->IPosixUpper, param);
13410
13411     PL_L1PosixWord      = sv_dup_inc(proto_perl->IL1PosixWord, param);
13412     PL_PosixWord        = sv_dup_inc(proto_perl->IPosixWord, param);
13413
13414     PL_PosixXDigit      = sv_dup_inc(proto_perl->IPosixXDigit, param);
13415     PL_XPosixXDigit     = sv_dup_inc(proto_perl->IXPosixXDigit, param);
13416
13417     PL_VertSpace        = sv_dup_inc(proto_perl->IVertSpace, param);
13418
13419     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13420     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13421
13422     /* utf8 character class swashes */
13423     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
13424     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13425     PL_utf8_blank       = sv_dup_inc(proto_perl->Iutf8_blank, param);
13426     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
13427     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
13428     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
13429     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
13430     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
13431     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
13432     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
13433     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13434     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13435     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13436     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13437     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13438     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13439     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13440     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13441     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13442     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13443     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13444     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13445     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13446     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13447     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13448     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13449     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13450     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13451     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13452     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13453
13454     if (proto_perl->Ipsig_pend) {
13455         Newxz(PL_psig_pend, SIG_SIZE, int);
13456     }
13457     else {
13458         PL_psig_pend    = (int*)NULL;
13459     }
13460
13461     if (proto_perl->Ipsig_name) {
13462         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13463         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13464                             param);
13465         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13466     }
13467     else {
13468         PL_psig_ptr     = (SV**)NULL;
13469         PL_psig_name    = (SV**)NULL;
13470     }
13471
13472     if (flags & CLONEf_COPY_STACKS) {
13473         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13474         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13475                             PL_tmps_ix+1, param);
13476
13477         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13478         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13479         Newxz(PL_markstack, i, I32);
13480         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13481                                                   - proto_perl->Imarkstack);
13482         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13483                                                   - proto_perl->Imarkstack);
13484         Copy(proto_perl->Imarkstack, PL_markstack,
13485              PL_markstack_ptr - PL_markstack + 1, I32);
13486
13487         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13488          * NOTE: unlike the others! */
13489         Newxz(PL_scopestack, PL_scopestack_max, I32);
13490         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13491
13492 #ifdef DEBUGGING
13493         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13494         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13495 #endif
13496         /* NOTE: si_dup() looks at PL_markstack */
13497         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13498
13499         /* PL_curstack          = PL_curstackinfo->si_stack; */
13500         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13501         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13502
13503         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13504         PL_stack_base           = AvARRAY(PL_curstack);
13505         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13506                                                    - proto_perl->Istack_base);
13507         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13508
13509         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13510         PL_savestack            = ss_dup(proto_perl, param);
13511     }
13512     else {
13513         init_stacks();
13514         ENTER;                  /* perl_destruct() wants to LEAVE; */
13515     }
13516
13517     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13518     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13519
13520     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13521     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13522     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13523     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13524     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13525     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13526
13527     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13528
13529     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13530     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13531     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13532     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13533
13534     PL_stashcache       = newHV();
13535
13536     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13537                                             proto_perl->Iwatchaddr);
13538     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13539     if (PL_debug && PL_watchaddr) {
13540         PerlIO_printf(Perl_debug_log,
13541           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13542           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13543           PTR2UV(PL_watchok));
13544     }
13545
13546     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13547     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13548     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13549
13550     /* Call the ->CLONE method, if it exists, for each of the stashes
13551        identified by sv_dup() above.
13552     */
13553     while(av_len(param->stashes) != -1) {
13554         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13555         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13556         if (cloner && GvCV(cloner)) {
13557             dSP;
13558             ENTER;
13559             SAVETMPS;
13560             PUSHMARK(SP);
13561             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13562             PUTBACK;
13563             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13564             FREETMPS;
13565             LEAVE;
13566         }
13567     }
13568
13569     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13570         ptr_table_free(PL_ptr_table);
13571         PL_ptr_table = NULL;
13572     }
13573
13574     if (!(flags & CLONEf_COPY_STACKS)) {
13575         unreferenced_to_tmp_stack(param->unreferenced);
13576     }
13577
13578     SvREFCNT_dec(param->stashes);
13579
13580     /* orphaned? eg threads->new inside BEGIN or use */
13581     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13582         SvREFCNT_inc_simple_void(PL_compcv);
13583         SAVEFREESV(PL_compcv);
13584     }
13585
13586     return my_perl;
13587 }
13588
13589 static void
13590 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13591 {
13592     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13593     
13594     if (AvFILLp(unreferenced) > -1) {
13595         SV **svp = AvARRAY(unreferenced);
13596         SV **const last = svp + AvFILLp(unreferenced);
13597         SSize_t count = 0;
13598
13599         do {
13600             if (SvREFCNT(*svp) == 1)
13601                 ++count;
13602         } while (++svp <= last);
13603
13604         EXTEND_MORTAL(count);
13605         svp = AvARRAY(unreferenced);
13606
13607         do {
13608             if (SvREFCNT(*svp) == 1) {
13609                 /* Our reference is the only one to this SV. This means that
13610                    in this thread, the scalar effectively has a 0 reference.
13611                    That doesn't work (cleanup never happens), so donate our
13612                    reference to it onto the save stack. */
13613                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13614             } else {
13615                 /* As an optimisation, because we are already walking the
13616                    entire array, instead of above doing either
13617                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13618                    release our reference to the scalar, so that at the end of
13619                    the array owns zero references to the scalars it happens to
13620                    point to. We are effectively converting the array from
13621                    AvREAL() on to AvREAL() off. This saves the av_clear()
13622                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13623                    walking the array a second time.  */
13624                 SvREFCNT_dec(*svp);
13625             }
13626
13627         } while (++svp <= last);
13628         AvREAL_off(unreferenced);
13629     }
13630     SvREFCNT_dec(unreferenced);
13631 }
13632
13633 void
13634 Perl_clone_params_del(CLONE_PARAMS *param)
13635 {
13636     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13637        happy: */
13638     PerlInterpreter *const to = param->new_perl;
13639     dTHXa(to);
13640     PerlInterpreter *const was = PERL_GET_THX;
13641
13642     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13643
13644     if (was != to) {
13645         PERL_SET_THX(to);
13646     }
13647
13648     SvREFCNT_dec(param->stashes);
13649     if (param->unreferenced)
13650         unreferenced_to_tmp_stack(param->unreferenced);
13651
13652     Safefree(param);
13653
13654     if (was != to) {
13655         PERL_SET_THX(was);
13656     }
13657 }
13658
13659 CLONE_PARAMS *
13660 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13661 {
13662     dVAR;
13663     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13664        does a dTHX; to get the context from thread local storage.
13665        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13666        a version that passes in my_perl.  */
13667     PerlInterpreter *const was = PERL_GET_THX;
13668     CLONE_PARAMS *param;
13669
13670     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13671
13672     if (was != to) {
13673         PERL_SET_THX(to);
13674     }
13675
13676     /* Given that we've set the context, we can do this unshared.  */
13677     Newx(param, 1, CLONE_PARAMS);
13678
13679     param->flags = 0;
13680     param->proto_perl = from;
13681     param->new_perl = to;
13682     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13683     AvREAL_off(param->stashes);
13684     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13685
13686     if (was != to) {
13687         PERL_SET_THX(was);
13688     }
13689     return param;
13690 }
13691
13692 #endif /* USE_ITHREADS */
13693
13694 void
13695 Perl_init_constants(pTHX)
13696 {
13697     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
13698     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13699     SvANY(&PL_sv_undef)         = NULL;
13700
13701     SvANY(&PL_sv_no)            = new_XPVNV();
13702     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
13703     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13704                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13705                                   |SVp_POK|SVf_POK;
13706
13707     SvANY(&PL_sv_yes)           = new_XPVNV();
13708     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
13709     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13710                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13711                                   |SVp_POK|SVf_POK;
13712
13713     SvPV_set(&PL_sv_no, (char*)PL_No);
13714     SvCUR_set(&PL_sv_no, 0);
13715     SvLEN_set(&PL_sv_no, 0);
13716     SvIV_set(&PL_sv_no, 0);
13717     SvNV_set(&PL_sv_no, 0);
13718
13719     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13720     SvCUR_set(&PL_sv_yes, 1);
13721     SvLEN_set(&PL_sv_yes, 0);
13722     SvIV_set(&PL_sv_yes, 1);
13723     SvNV_set(&PL_sv_yes, 1);
13724 }
13725
13726 /*
13727 =head1 Unicode Support
13728
13729 =for apidoc sv_recode_to_utf8
13730
13731 The encoding is assumed to be an Encode object, on entry the PV
13732 of the sv is assumed to be octets in that encoding, and the sv
13733 will be converted into Unicode (and UTF-8).
13734
13735 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13736 is not a reference, nothing is done to the sv.  If the encoding is not
13737 an C<Encode::XS> Encoding object, bad things will happen.
13738 (See F<lib/encoding.pm> and L<Encode>.)
13739
13740 The PV of the sv is returned.
13741
13742 =cut */
13743
13744 char *
13745 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13746 {
13747     dVAR;
13748
13749     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13750
13751     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13752         SV *uni;
13753         STRLEN len;
13754         const char *s;
13755         dSP;
13756         ENTER;
13757         SAVETMPS;
13758         save_re_context();
13759         PUSHMARK(sp);
13760         EXTEND(SP, 3);
13761         PUSHs(encoding);
13762         PUSHs(sv);
13763 /*
13764   NI-S 2002/07/09
13765   Passing sv_yes is wrong - it needs to be or'ed set of constants
13766   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13767   remove converted chars from source.
13768
13769   Both will default the value - let them.
13770
13771         XPUSHs(&PL_sv_yes);
13772 */
13773         PUTBACK;
13774         call_method("decode", G_SCALAR);
13775         SPAGAIN;
13776         uni = POPs;
13777         PUTBACK;
13778         s = SvPV_const(uni, len);
13779         if (s != SvPVX_const(sv)) {
13780             SvGROW(sv, len + 1);
13781             Move(s, SvPVX(sv), len + 1, char);
13782             SvCUR_set(sv, len);
13783         }
13784         FREETMPS;
13785         LEAVE;
13786         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13787             /* clear pos and any utf8 cache */
13788             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13789             if (mg)
13790                 mg->mg_len = -1;
13791             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13792                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13793         }
13794         SvUTF8_on(sv);
13795         return SvPVX(sv);
13796     }
13797     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13798 }
13799
13800 /*
13801 =for apidoc sv_cat_decode
13802
13803 The encoding is assumed to be an Encode object, the PV of the ssv is
13804 assumed to be octets in that encoding and decoding the input starts
13805 from the position which (PV + *offset) pointed to.  The dsv will be
13806 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13807 when the string tstr appears in decoding output or the input ends on
13808 the PV of the ssv.  The value which the offset points will be modified
13809 to the last input position on the ssv.
13810
13811 Returns TRUE if the terminator was found, else returns FALSE.
13812
13813 =cut */
13814
13815 bool
13816 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13817                    SV *ssv, int *offset, char *tstr, int tlen)
13818 {
13819     dVAR;
13820     bool ret = FALSE;
13821
13822     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13823
13824     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13825         SV *offsv;
13826         dSP;
13827         ENTER;
13828         SAVETMPS;
13829         save_re_context();
13830         PUSHMARK(sp);
13831         EXTEND(SP, 6);
13832         PUSHs(encoding);
13833         PUSHs(dsv);
13834         PUSHs(ssv);
13835         offsv = newSViv(*offset);
13836         mPUSHs(offsv);
13837         mPUSHp(tstr, tlen);
13838         PUTBACK;
13839         call_method("cat_decode", G_SCALAR);
13840         SPAGAIN;
13841         ret = SvTRUE(TOPs);
13842         *offset = SvIV(offsv);
13843         PUTBACK;
13844         FREETMPS;
13845         LEAVE;
13846     }
13847     else
13848         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13849     return ret;
13850
13851 }
13852
13853 /* ---------------------------------------------------------------------
13854  *
13855  * support functions for report_uninit()
13856  */
13857
13858 /* the maxiumum size of array or hash where we will scan looking
13859  * for the undefined element that triggered the warning */
13860
13861 #define FUV_MAX_SEARCH_SIZE 1000
13862
13863 /* Look for an entry in the hash whose value has the same SV as val;
13864  * If so, return a mortal copy of the key. */
13865
13866 STATIC SV*
13867 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13868 {
13869     dVAR;
13870     HE **array;
13871     I32 i;
13872
13873     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13874
13875     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13876                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13877         return NULL;
13878
13879     array = HvARRAY(hv);
13880
13881     for (i=HvMAX(hv); i>=0; i--) {
13882         HE *entry;
13883         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13884             if (HeVAL(entry) != val)
13885                 continue;
13886             if (    HeVAL(entry) == &PL_sv_undef ||
13887                     HeVAL(entry) == &PL_sv_placeholder)
13888                 continue;
13889             if (!HeKEY(entry))
13890                 return NULL;
13891             if (HeKLEN(entry) == HEf_SVKEY)
13892                 return sv_mortalcopy(HeKEY_sv(entry));
13893             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13894         }
13895     }
13896     return NULL;
13897 }
13898
13899 /* Look for an entry in the array whose value has the same SV as val;
13900  * If so, return the index, otherwise return -1. */
13901
13902 STATIC I32
13903 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13904 {
13905     dVAR;
13906
13907     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13908
13909     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13910                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13911         return -1;
13912
13913     if (val != &PL_sv_undef) {
13914         SV ** const svp = AvARRAY(av);
13915         I32 i;
13916
13917         for (i=AvFILLp(av); i>=0; i--)
13918             if (svp[i] == val)
13919                 return i;
13920     }
13921     return -1;
13922 }
13923
13924 /* varname(): return the name of a variable, optionally with a subscript.
13925  * If gv is non-zero, use the name of that global, along with gvtype (one
13926  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13927  * targ.  Depending on the value of the subscript_type flag, return:
13928  */
13929
13930 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13931 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13932 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13933 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13934
13935 SV*
13936 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13937         const SV *const keyname, I32 aindex, int subscript_type)
13938 {
13939
13940     SV * const name = sv_newmortal();
13941     if (gv && isGV(gv)) {
13942         char buffer[2];
13943         buffer[0] = gvtype;
13944         buffer[1] = 0;
13945
13946         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13947
13948         gv_fullname4(name, gv, buffer, 0);
13949
13950         if ((unsigned int)SvPVX(name)[1] <= 26) {
13951             buffer[0] = '^';
13952             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13953
13954             /* Swap the 1 unprintable control character for the 2 byte pretty
13955                version - ie substr($name, 1, 1) = $buffer; */
13956             sv_insert(name, 1, 1, buffer, 2);
13957         }
13958     }
13959     else {
13960         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
13961         SV *sv;
13962         AV *av;
13963
13964         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
13965
13966         if (!cv || !CvPADLIST(cv))
13967             return NULL;
13968         av = *PadlistARRAY(CvPADLIST(cv));
13969         sv = *av_fetch(av, targ, FALSE);
13970         sv_setsv_flags(name, sv, 0);
13971     }
13972
13973     if (subscript_type == FUV_SUBSCRIPT_HASH) {
13974         SV * const sv = newSV(0);
13975         *SvPVX(name) = '$';
13976         Perl_sv_catpvf(aTHX_ name, "{%s}",
13977             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
13978                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
13979         SvREFCNT_dec(sv);
13980     }
13981     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13982         *SvPVX(name) = '$';
13983         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13984     }
13985     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13986         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13987         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
13988     }
13989
13990     return name;
13991 }
13992
13993
13994 /*
13995 =for apidoc find_uninit_var
13996
13997 Find the name of the undefined variable (if any) that caused the operator
13998 to issue a "Use of uninitialized value" warning.
13999 If match is true, only return a name if its value matches uninit_sv.
14000 So roughly speaking, if a unary operator (such as OP_COS) generates a
14001 warning, then following the direct child of the op may yield an
14002 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14003 other hand, with OP_ADD there are two branches to follow, so we only print
14004 the variable name if we get an exact match.
14005
14006 The name is returned as a mortal SV.
14007
14008 Assumes that PL_op is the op that originally triggered the error, and that
14009 PL_comppad/PL_curpad points to the currently executing pad.
14010
14011 =cut
14012 */
14013
14014 STATIC SV *
14015 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14016                   bool match)
14017 {
14018     dVAR;
14019     SV *sv;
14020     const GV *gv;
14021     const OP *o, *o2, *kid;
14022
14023     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14024                             uninit_sv == &PL_sv_placeholder)))
14025         return NULL;
14026
14027     switch (obase->op_type) {
14028
14029     case OP_RV2AV:
14030     case OP_RV2HV:
14031     case OP_PADAV:
14032     case OP_PADHV:
14033       {
14034         const bool pad  = (    obase->op_type == OP_PADAV
14035                             || obase->op_type == OP_PADHV
14036                             || obase->op_type == OP_PADRANGE
14037                           );
14038
14039         const bool hash = (    obase->op_type == OP_PADHV
14040                             || obase->op_type == OP_RV2HV
14041                             || (obase->op_type == OP_PADRANGE
14042                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14043                           );
14044         I32 index = 0;
14045         SV *keysv = NULL;
14046         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14047
14048         if (pad) { /* @lex, %lex */
14049             sv = PAD_SVl(obase->op_targ);
14050             gv = NULL;
14051         }
14052         else {
14053             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14054             /* @global, %global */
14055                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14056                 if (!gv)
14057                     break;
14058                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14059             }
14060             else if (obase == PL_op) /* @{expr}, %{expr} */
14061                 return find_uninit_var(cUNOPx(obase)->op_first,
14062                                                     uninit_sv, match);
14063             else /* @{expr}, %{expr} as a sub-expression */
14064                 return NULL;
14065         }
14066
14067         /* attempt to find a match within the aggregate */
14068         if (hash) {
14069             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14070             if (keysv)
14071                 subscript_type = FUV_SUBSCRIPT_HASH;
14072         }
14073         else {
14074             index = find_array_subscript((const AV *)sv, uninit_sv);
14075             if (index >= 0)
14076                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14077         }
14078
14079         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14080             break;
14081
14082         return varname(gv, hash ? '%' : '@', obase->op_targ,
14083                                     keysv, index, subscript_type);
14084       }
14085
14086     case OP_RV2SV:
14087         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14088             /* $global */
14089             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14090             if (!gv || !GvSTASH(gv))
14091                 break;
14092             if (match && (GvSV(gv) != uninit_sv))
14093                 break;
14094             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14095         }
14096         /* ${expr} */
14097         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14098
14099     case OP_PADSV:
14100         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14101             break;
14102         return varname(NULL, '$', obase->op_targ,
14103                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14104
14105     case OP_GVSV:
14106         gv = cGVOPx_gv(obase);
14107         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14108             break;
14109         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14110
14111     case OP_AELEMFAST_LEX:
14112         if (match) {
14113             SV **svp;
14114             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14115             if (!av || SvRMAGICAL(av))
14116                 break;
14117             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14118             if (!svp || *svp != uninit_sv)
14119                 break;
14120         }
14121         return varname(NULL, '$', obase->op_targ,
14122                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14123     case OP_AELEMFAST:
14124         {
14125             gv = cGVOPx_gv(obase);
14126             if (!gv)
14127                 break;
14128             if (match) {
14129                 SV **svp;
14130                 AV *const av = GvAV(gv);
14131                 if (!av || SvRMAGICAL(av))
14132                     break;
14133                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14134                 if (!svp || *svp != uninit_sv)
14135                     break;
14136             }
14137             return varname(gv, '$', 0,
14138                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14139         }
14140         break;
14141
14142     case OP_EXISTS:
14143         o = cUNOPx(obase)->op_first;
14144         if (!o || o->op_type != OP_NULL ||
14145                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14146             break;
14147         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14148
14149     case OP_AELEM:
14150     case OP_HELEM:
14151     {
14152         bool negate = FALSE;
14153
14154         if (PL_op == obase)
14155             /* $a[uninit_expr] or $h{uninit_expr} */
14156             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14157
14158         gv = NULL;
14159         o = cBINOPx(obase)->op_first;
14160         kid = cBINOPx(obase)->op_last;
14161
14162         /* get the av or hv, and optionally the gv */
14163         sv = NULL;
14164         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14165             sv = PAD_SV(o->op_targ);
14166         }
14167         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14168                 && cUNOPo->op_first->op_type == OP_GV)
14169         {
14170             gv = cGVOPx_gv(cUNOPo->op_first);
14171             if (!gv)
14172                 break;
14173             sv = o->op_type
14174                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14175         }
14176         if (!sv)
14177             break;
14178
14179         if (kid && kid->op_type == OP_NEGATE) {
14180             negate = TRUE;
14181             kid = cUNOPx(kid)->op_first;
14182         }
14183
14184         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14185             /* index is constant */
14186             SV* kidsv;
14187             if (negate) {
14188                 kidsv = sv_2mortal(newSVpvs("-"));
14189                 sv_catsv(kidsv, cSVOPx_sv(kid));
14190             }
14191             else
14192                 kidsv = cSVOPx_sv(kid);
14193             if (match) {
14194                 if (SvMAGICAL(sv))
14195                     break;
14196                 if (obase->op_type == OP_HELEM) {
14197                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14198                     if (!he || HeVAL(he) != uninit_sv)
14199                         break;
14200                 }
14201                 else {
14202                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14203                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14204                         FALSE);
14205                     if (!svp || *svp != uninit_sv)
14206                         break;
14207                 }
14208             }
14209             if (obase->op_type == OP_HELEM)
14210                 return varname(gv, '%', o->op_targ,
14211                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14212             else
14213                 return varname(gv, '@', o->op_targ, NULL,
14214                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14215                     FUV_SUBSCRIPT_ARRAY);
14216         }
14217         else  {
14218             /* index is an expression;
14219              * attempt to find a match within the aggregate */
14220             if (obase->op_type == OP_HELEM) {
14221                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14222                 if (keysv)
14223                     return varname(gv, '%', o->op_targ,
14224                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14225             }
14226             else {
14227                 const I32 index
14228                     = find_array_subscript((const AV *)sv, uninit_sv);
14229                 if (index >= 0)
14230                     return varname(gv, '@', o->op_targ,
14231                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14232             }
14233             if (match)
14234                 break;
14235             return varname(gv,
14236                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14237                 ? '@' : '%',
14238                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14239         }
14240         break;
14241     }
14242
14243     case OP_AASSIGN:
14244         /* only examine RHS */
14245         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14246
14247     case OP_OPEN:
14248         o = cUNOPx(obase)->op_first;
14249         if (   o->op_type == OP_PUSHMARK
14250            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14251         )
14252             o = o->op_sibling;
14253
14254         if (!o->op_sibling) {
14255             /* one-arg version of open is highly magical */
14256
14257             if (o->op_type == OP_GV) { /* open FOO; */
14258                 gv = cGVOPx_gv(o);
14259                 if (match && GvSV(gv) != uninit_sv)
14260                     break;
14261                 return varname(gv, '$', 0,
14262                             NULL, 0, FUV_SUBSCRIPT_NONE);
14263             }
14264             /* other possibilities not handled are:
14265              * open $x; or open my $x;  should return '${*$x}'
14266              * open expr;               should return '$'.expr ideally
14267              */
14268              break;
14269         }
14270         goto do_op;
14271
14272     /* ops where $_ may be an implicit arg */
14273     case OP_TRANS:
14274     case OP_TRANSR:
14275     case OP_SUBST:
14276     case OP_MATCH:
14277         if ( !(obase->op_flags & OPf_STACKED)) {
14278             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14279                                  ? PAD_SVl(obase->op_targ)
14280                                  : DEFSV))
14281             {
14282                 sv = sv_newmortal();
14283                 sv_setpvs(sv, "$_");
14284                 return sv;
14285             }
14286         }
14287         goto do_op;
14288
14289     case OP_PRTF:
14290     case OP_PRINT:
14291     case OP_SAY:
14292         match = 1; /* print etc can return undef on defined args */
14293         /* skip filehandle as it can't produce 'undef' warning  */
14294         o = cUNOPx(obase)->op_first;
14295         if ((obase->op_flags & OPf_STACKED)
14296             &&
14297                (   o->op_type == OP_PUSHMARK
14298                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14299             o = o->op_sibling->op_sibling;
14300         goto do_op2;
14301
14302
14303     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14304     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14305
14306         /* the following ops are capable of returning PL_sv_undef even for
14307          * defined arg(s) */
14308
14309     case OP_BACKTICK:
14310     case OP_PIPE_OP:
14311     case OP_FILENO:
14312     case OP_BINMODE:
14313     case OP_TIED:
14314     case OP_GETC:
14315     case OP_SYSREAD:
14316     case OP_SEND:
14317     case OP_IOCTL:
14318     case OP_SOCKET:
14319     case OP_SOCKPAIR:
14320     case OP_BIND:
14321     case OP_CONNECT:
14322     case OP_LISTEN:
14323     case OP_ACCEPT:
14324     case OP_SHUTDOWN:
14325     case OP_SSOCKOPT:
14326     case OP_GETPEERNAME:
14327     case OP_FTRREAD:
14328     case OP_FTRWRITE:
14329     case OP_FTREXEC:
14330     case OP_FTROWNED:
14331     case OP_FTEREAD:
14332     case OP_FTEWRITE:
14333     case OP_FTEEXEC:
14334     case OP_FTEOWNED:
14335     case OP_FTIS:
14336     case OP_FTZERO:
14337     case OP_FTSIZE:
14338     case OP_FTFILE:
14339     case OP_FTDIR:
14340     case OP_FTLINK:
14341     case OP_FTPIPE:
14342     case OP_FTSOCK:
14343     case OP_FTBLK:
14344     case OP_FTCHR:
14345     case OP_FTTTY:
14346     case OP_FTSUID:
14347     case OP_FTSGID:
14348     case OP_FTSVTX:
14349     case OP_FTTEXT:
14350     case OP_FTBINARY:
14351     case OP_FTMTIME:
14352     case OP_FTATIME:
14353     case OP_FTCTIME:
14354     case OP_READLINK:
14355     case OP_OPEN_DIR:
14356     case OP_READDIR:
14357     case OP_TELLDIR:
14358     case OP_SEEKDIR:
14359     case OP_REWINDDIR:
14360     case OP_CLOSEDIR:
14361     case OP_GMTIME:
14362     case OP_ALARM:
14363     case OP_SEMGET:
14364     case OP_GETLOGIN:
14365     case OP_UNDEF:
14366     case OP_SUBSTR:
14367     case OP_AEACH:
14368     case OP_EACH:
14369     case OP_SORT:
14370     case OP_CALLER:
14371     case OP_DOFILE:
14372     case OP_PROTOTYPE:
14373     case OP_NCMP:
14374     case OP_SMARTMATCH:
14375     case OP_UNPACK:
14376     case OP_SYSOPEN:
14377     case OP_SYSSEEK:
14378         match = 1;
14379         goto do_op;
14380
14381     case OP_ENTERSUB:
14382     case OP_GOTO:
14383         /* XXX tmp hack: these two may call an XS sub, and currently
14384           XS subs don't have a SUB entry on the context stack, so CV and
14385           pad determination goes wrong, and BAD things happen. So, just
14386           don't try to determine the value under those circumstances.
14387           Need a better fix at dome point. DAPM 11/2007 */
14388         break;
14389
14390     case OP_FLIP:
14391     case OP_FLOP:
14392     {
14393         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14394         if (gv && GvSV(gv) == uninit_sv)
14395             return newSVpvs_flags("$.", SVs_TEMP);
14396         goto do_op;
14397     }
14398
14399     case OP_POS:
14400         /* def-ness of rval pos() is independent of the def-ness of its arg */
14401         if ( !(obase->op_flags & OPf_MOD))
14402             break;
14403
14404     case OP_SCHOMP:
14405     case OP_CHOMP:
14406         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14407             return newSVpvs_flags("${$/}", SVs_TEMP);
14408         /*FALLTHROUGH*/
14409
14410     default:
14411     do_op:
14412         if (!(obase->op_flags & OPf_KIDS))
14413             break;
14414         o = cUNOPx(obase)->op_first;
14415         
14416     do_op2:
14417         if (!o)
14418             break;
14419
14420         /* This loop checks all the kid ops, skipping any that cannot pos-
14421          * sibly be responsible for the uninitialized value; i.e., defined
14422          * constants and ops that return nothing.  If there is only one op
14423          * left that is not skipped, then we *know* it is responsible for
14424          * the uninitialized value.  If there is more than one op left, we
14425          * have to look for an exact match in the while() loop below.
14426          * Note that we skip padrange, because the individual pad ops that
14427          * it replaced are still in the tree, so we work on them instead.
14428          */
14429         o2 = NULL;
14430         for (kid=o; kid; kid = kid->op_sibling) {
14431             if (kid) {
14432                 const OPCODE type = kid->op_type;
14433                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14434                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14435                   || (type == OP_PUSHMARK)
14436                   || (type == OP_PADRANGE)
14437                 )
14438                 continue;
14439             }
14440             if (o2) { /* more than one found */
14441                 o2 = NULL;
14442                 break;
14443             }
14444             o2 = kid;
14445         }
14446         if (o2)
14447             return find_uninit_var(o2, uninit_sv, match);
14448
14449         /* scan all args */
14450         while (o) {
14451             sv = find_uninit_var(o, uninit_sv, 1);
14452             if (sv)
14453                 return sv;
14454             o = o->op_sibling;
14455         }
14456         break;
14457     }
14458     return NULL;
14459 }
14460
14461
14462 /*
14463 =for apidoc report_uninit
14464
14465 Print appropriate "Use of uninitialized variable" warning.
14466
14467 =cut
14468 */
14469
14470 void
14471 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14472 {
14473     dVAR;
14474     if (PL_op) {
14475         SV* varname = NULL;
14476         if (uninit_sv && PL_curpad) {
14477             varname = find_uninit_var(PL_op, uninit_sv,0);
14478             if (varname)
14479                 sv_insert(varname, 0, 0, " ", 1);
14480         }
14481         /* diag_listed_as: Use of uninitialized value%s */
14482         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14483                 SVfARG(varname ? varname : &PL_sv_no),
14484                 " in ", OP_DESC(PL_op));
14485     }
14486     else
14487         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14488                     "", "", "");
14489 }
14490
14491 /*
14492  * Local variables:
14493  * c-indentation-style: bsd
14494  * c-basic-offset: 4
14495  * indent-tabs-mode: nil
14496  * End:
14497  *
14498  * ex: set ts=8 sts=4 sw=4 et:
14499  */