This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Updated CPAN-Meta-YAML to CPAN version 0.008
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34
35 #ifndef HAS_C99
36 # if __STDC_VERSION__ >= 199901L && !defined(VMS)
37 #  define HAS_C99 1
38 # endif
39 #endif
40 #if HAS_C99
41 # include <stdint.h>
42 #endif
43
44 #define FCALL *f
45
46 #ifdef __Lynx__
47 /* Missing proto on LynxOS */
48   char *gconvert(double, int, int,  char *);
49 #endif
50
51 #ifdef PERL_UTF8_CACHE_ASSERT
52 /* if adding more checks watch out for the following tests:
53  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54  *   lib/utf8.t lib/Unicode/Collate/t/index.t
55  * --jhi
56  */
57 #   define ASSERT_UTF8_CACHE(cache) \
58     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59                               assert((cache)[2] <= (cache)[3]); \
60                               assert((cache)[3] <= (cache)[1]);} \
61                               } STMT_END
62 #else
63 #   define ASSERT_UTF8_CACHE(cache) NOOP
64 #endif
65
66 #ifdef PERL_OLD_COPY_ON_WRITE
67 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
68 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
69 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
70    on-write.  */
71 #endif
72
73 /* ============================================================================
74
75 =head1 Allocation and deallocation of SVs.
76
77 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
78 sv, av, hv...) contains type and reference count information, and for
79 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
80 contains fields specific to each type.  Some types store all they need
81 in the head, so don't have a body.
82
83 In all but the most memory-paranoid configurations (ex: PURIFY), heads
84 and bodies are allocated out of arenas, which by default are
85 approximately 4K chunks of memory parcelled up into N heads or bodies.
86 Sv-bodies are allocated by their sv-type, guaranteeing size
87 consistency needed to allocate safely from arrays.
88
89 For SV-heads, the first slot in each arena is reserved, and holds a
90 link to the next arena, some flags, and a note of the number of slots.
91 Snaked through each arena chain is a linked list of free items; when
92 this becomes empty, an extra arena is allocated and divided up into N
93 items which are threaded into the free list.
94
95 SV-bodies are similar, but they use arena-sets by default, which
96 separate the link and info from the arena itself, and reclaim the 1st
97 slot in the arena.  SV-bodies are further described later.
98
99 The following global variables are associated with arenas:
100
101     PL_sv_arenaroot     pointer to list of SV arenas
102     PL_sv_root          pointer to list of free SV structures
103
104     PL_body_arenas      head of linked-list of body arenas
105     PL_body_roots[]     array of pointers to list of free bodies of svtype
106                         arrays are indexed by the svtype needed
107
108 A few special SV heads are not allocated from an arena, but are
109 instead directly created in the interpreter structure, eg PL_sv_undef.
110 The size of arenas can be changed from the default by setting
111 PERL_ARENA_SIZE appropriately at compile time.
112
113 The SV arena serves the secondary purpose of allowing still-live SVs
114 to be located and destroyed during final cleanup.
115
116 At the lowest level, the macros new_SV() and del_SV() grab and free
117 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
118 to return the SV to the free list with error checking.) new_SV() calls
119 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
120 SVs in the free list have their SvTYPE field set to all ones.
121
122 At the time of very final cleanup, sv_free_arenas() is called from
123 perl_destruct() to physically free all the arenas allocated since the
124 start of the interpreter.
125
126 The function visit() scans the SV arenas list, and calls a specified
127 function for each SV it finds which is still live - ie which has an SvTYPE
128 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
129 following functions (specified as [function that calls visit()] / [function
130 called by visit() for each SV]):
131
132     sv_report_used() / do_report_used()
133                         dump all remaining SVs (debugging aid)
134
135     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
136                       do_clean_named_io_objs()
137                         Attempt to free all objects pointed to by RVs,
138                         and try to do the same for all objects indirectly
139                         referenced by typeglobs too.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
186 #  define DEBUG_SV_SERIAL(sv)                                               \
187     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
188             PTR2UV(sv), (long)(sv)->sv_debug_serial))
189 #else
190 #  define FREE_SV_DEBUG_FILE(sv)
191 #  define DEBUG_SV_SERIAL(sv)   NOOP
192 #endif
193
194 #ifdef PERL_POISON
195 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
196 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
197 /* Whilst I'd love to do this, it seems that things like to check on
198    unreferenced scalars
199 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
200 */
201 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
202                                 PoisonNew(&SvREFCNT(sv), 1, U32)
203 #else
204 #  define SvARENA_CHAIN(sv)     SvANY(sv)
205 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
206 #  define POSION_SV_HEAD(sv)
207 #endif
208
209 /* Mark an SV head as unused, and add to free list.
210  *
211  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
212  * its refcount artificially decremented during global destruction, so
213  * there may be dangling pointers to it. The last thing we want in that
214  * case is for it to be reused. */
215
216 #define plant_SV(p) \
217     STMT_START {                                        \
218         const U32 old_flags = SvFLAGS(p);                       \
219         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
220         DEBUG_SV_SERIAL(p);                             \
221         FREE_SV_DEBUG_FILE(p);                          \
222         POSION_SV_HEAD(p);                              \
223         SvFLAGS(p) = SVTYPEMASK;                        \
224         if (!(old_flags & SVf_BREAK)) {         \
225             SvARENA_CHAIN_SET(p, PL_sv_root);   \
226             PL_sv_root = (p);                           \
227         }                                               \
228         --PL_sv_count;                                  \
229     } STMT_END
230
231 #define uproot_SV(p) \
232     STMT_START {                                        \
233         (p) = PL_sv_root;                               \
234         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
235         ++PL_sv_count;                                  \
236     } STMT_END
237
238
239 /* make some more SVs by adding another arena */
240
241 STATIC SV*
242 S_more_sv(pTHX)
243 {
244     dVAR;
245     SV* sv;
246     char *chunk;                /* must use New here to match call to */
247     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
248     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
249     uproot_SV(sv);
250     return sv;
251 }
252
253 /* new_SV(): return a new, empty SV head */
254
255 #ifdef DEBUG_LEAKING_SCALARS
256 /* provide a real function for a debugger to play with */
257 STATIC SV*
258 S_new_SV(pTHX_ const char *file, int line, const char *func)
259 {
260     SV* sv;
261
262     if (PL_sv_root)
263         uproot_SV(sv);
264     else
265         sv = S_more_sv(aTHX);
266     SvANY(sv) = 0;
267     SvREFCNT(sv) = 1;
268     SvFLAGS(sv) = 0;
269     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
270     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
271                 ? PL_parser->copline
272                 :  PL_curcop
273                     ? CopLINE(PL_curcop)
274                     : 0
275             );
276     sv->sv_debug_inpad = 0;
277     sv->sv_debug_parent = NULL;
278     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
279
280     sv->sv_debug_serial = PL_sv_serial++;
281
282     MEM_LOG_NEW_SV(sv, file, line, func);
283     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
284             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
285
286     return sv;
287 }
288 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
289
290 #else
291 #  define new_SV(p) \
292     STMT_START {                                        \
293         if (PL_sv_root)                                 \
294             uproot_SV(p);                               \
295         else                                            \
296             (p) = S_more_sv(aTHX);                      \
297         SvANY(p) = 0;                                   \
298         SvREFCNT(p) = 1;                                \
299         SvFLAGS(p) = 0;                                 \
300         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
301     } STMT_END
302 #endif
303
304
305 /* del_SV(): return an empty SV head to the free list */
306
307 #ifdef DEBUGGING
308
309 #define del_SV(p) \
310     STMT_START {                                        \
311         if (DEBUG_D_TEST)                               \
312             del_sv(p);                                  \
313         else                                            \
314             plant_SV(p);                                \
315     } STMT_END
316
317 STATIC void
318 S_del_sv(pTHX_ SV *p)
319 {
320     dVAR;
321
322     PERL_ARGS_ASSERT_DEL_SV;
323
324     if (DEBUG_D_TEST) {
325         SV* sva;
326         bool ok = 0;
327         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
328             const SV * const sv = sva + 1;
329             const SV * const svend = &sva[SvREFCNT(sva)];
330             if (p >= sv && p < svend) {
331                 ok = 1;
332                 break;
333             }
334         }
335         if (!ok) {
336             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
337                              "Attempt to free non-arena SV: 0x%"UVxf
338                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
339             return;
340         }
341     }
342     plant_SV(p);
343 }
344
345 #else /* ! DEBUGGING */
346
347 #define del_SV(p)   plant_SV(p)
348
349 #endif /* DEBUGGING */
350
351
352 /*
353 =head1 SV Manipulation Functions
354
355 =for apidoc sv_add_arena
356
357 Given a chunk of memory, link it to the head of the list of arenas,
358 and split it into a list of free SVs.
359
360 =cut
361 */
362
363 static void
364 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
365 {
366     dVAR;
367     SV *const sva = MUTABLE_SV(ptr);
368     register SV* sv;
369     register SV* svend;
370
371     PERL_ARGS_ASSERT_SV_ADD_ARENA;
372
373     /* The first SV in an arena isn't an SV. */
374     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
375     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
376     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
377
378     PL_sv_arenaroot = sva;
379     PL_sv_root = sva + 1;
380
381     svend = &sva[SvREFCNT(sva) - 1];
382     sv = sva + 1;
383     while (sv < svend) {
384         SvARENA_CHAIN_SET(sv, (sv + 1));
385 #ifdef DEBUGGING
386         SvREFCNT(sv) = 0;
387 #endif
388         /* Must always set typemask because it's always checked in on cleanup
389            when the arenas are walked looking for objects.  */
390         SvFLAGS(sv) = SVTYPEMASK;
391         sv++;
392     }
393     SvARENA_CHAIN_SET(sv, 0);
394 #ifdef DEBUGGING
395     SvREFCNT(sv) = 0;
396 #endif
397     SvFLAGS(sv) = SVTYPEMASK;
398 }
399
400 /* visit(): call the named function for each non-free SV in the arenas
401  * whose flags field matches the flags/mask args. */
402
403 STATIC I32
404 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
405 {
406     dVAR;
407     SV* sva;
408     I32 visited = 0;
409
410     PERL_ARGS_ASSERT_VISIT;
411
412     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
413         register const SV * const svend = &sva[SvREFCNT(sva)];
414         register SV* sv;
415         for (sv = sva + 1; sv < svend; ++sv) {
416             if (SvTYPE(sv) != (svtype)SVTYPEMASK
417                     && (sv->sv_flags & mask) == flags
418                     && SvREFCNT(sv))
419             {
420                 (FCALL)(aTHX_ sv);
421                 ++visited;
422             }
423         }
424     }
425     return visited;
426 }
427
428 #ifdef DEBUGGING
429
430 /* called by sv_report_used() for each live SV */
431
432 static void
433 do_report_used(pTHX_ SV *const sv)
434 {
435     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
436         PerlIO_printf(Perl_debug_log, "****\n");
437         sv_dump(sv);
438     }
439 }
440 #endif
441
442 /*
443 =for apidoc sv_report_used
444
445 Dump the contents of all SVs not yet freed (debugging aid).
446
447 =cut
448 */
449
450 void
451 Perl_sv_report_used(pTHX)
452 {
453 #ifdef DEBUGGING
454     visit(do_report_used, 0, 0);
455 #else
456     PERL_UNUSED_CONTEXT;
457 #endif
458 }
459
460 /* called by sv_clean_objs() for each live SV */
461
462 static void
463 do_clean_objs(pTHX_ SV *const ref)
464 {
465     dVAR;
466     assert (SvROK(ref));
467     {
468         SV * const target = SvRV(ref);
469         if (SvOBJECT(target)) {
470             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
471             if (SvWEAKREF(ref)) {
472                 sv_del_backref(target, ref);
473                 SvWEAKREF_off(ref);
474                 SvRV_set(ref, NULL);
475             } else {
476                 SvROK_off(ref);
477                 SvRV_set(ref, NULL);
478                 SvREFCNT_dec(target);
479             }
480         }
481     }
482
483     /* XXX Might want to check arrays, etc. */
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV_set(sv, NULL);
526         SvREFCNT_dec(obj);
527     }
528     SvREFCNT_dec(sv); /* undo the inc above */
529 }
530
531 /* clear any IO slots in a GV which hold objects (except stderr, defout);
532  * called by sv_clean_objs() for each live GV */
533
534 static void
535 do_clean_named_io_objs(pTHX_ SV *const sv)
536 {
537     dVAR;
538     SV *obj;
539     assert(SvTYPE(sv) == SVt_PVGV);
540     assert(isGV_with_GP(sv));
541     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
542         return;
543
544     SvREFCNT_inc(sv);
545     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546         DEBUG_D((PerlIO_printf(Perl_debug_log,
547                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548         GvIOp(sv) = NULL;
549         SvREFCNT_dec(obj);
550     }
551     SvREFCNT_dec(sv); /* undo the inc above */
552 }
553
554 /* Void wrapper to pass to visit() */
555 static void
556 do_curse(pTHX_ SV * const sv) {
557     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
559         return;
560     (void)curse(sv, 0);
561 }
562
563 /*
564 =for apidoc sv_clean_objs
565
566 Attempt to destroy all objects not yet freed.
567
568 =cut
569 */
570
571 void
572 Perl_sv_clean_objs(pTHX)
573 {
574     dVAR;
575     GV *olddef, *olderr;
576     PL_in_clean_objs = TRUE;
577     visit(do_clean_objs, SVf_ROK, SVf_ROK);
578     /* Some barnacles may yet remain, clinging to typeglobs.
579      * Run the non-IO destructors first: they may want to output
580      * error messages, close files etc */
581     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
582     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
583     /* And if there are some very tenacious barnacles clinging to arrays,
584        closures, or what have you.... */
585     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
586     olddef = PL_defoutgv;
587     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588     if (olddef && isGV_with_GP(olddef))
589         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590     olderr = PL_stderrgv;
591     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592     if (olderr && isGV_with_GP(olderr))
593         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594     SvREFCNT_dec(olddef);
595     PL_in_clean_objs = FALSE;
596 }
597
598 /* called by sv_clean_all() for each live SV */
599
600 static void
601 do_clean_all(pTHX_ SV *const sv)
602 {
603     dVAR;
604     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
605         /* don't clean pid table and strtab */
606         return;
607     }
608     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609     SvFLAGS(sv) |= SVf_BREAK;
610     SvREFCNT_dec(sv);
611 }
612
613 /*
614 =for apidoc sv_clean_all
615
616 Decrement the refcnt of each remaining SV, possibly triggering a
617 cleanup.  This function may have to be called multiple times to free
618 SVs which are in complex self-referential hierarchies.
619
620 =cut
621 */
622
623 I32
624 Perl_sv_clean_all(pTHX)
625 {
626     dVAR;
627     I32 cleaned;
628     PL_in_clean_all = TRUE;
629     cleaned = visit(do_clean_all, 0,0);
630     return cleaned;
631 }
632
633 /*
634   ARENASETS: a meta-arena implementation which separates arena-info
635   into struct arena_set, which contains an array of struct
636   arena_descs, each holding info for a single arena.  By separating
637   the meta-info from the arena, we recover the 1st slot, formerly
638   borrowed for list management.  The arena_set is about the size of an
639   arena, avoiding the needless malloc overhead of a naive linked-list.
640
641   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642   memory in the last arena-set (1/2 on average).  In trade, we get
643   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
644   smaller types).  The recovery of the wasted space allows use of
645   small arenas for large, rare body types, by changing array* fields
646   in body_details_by_type[] below.
647 */
648 struct arena_desc {
649     char       *arena;          /* the raw storage, allocated aligned */
650     size_t      size;           /* its size ~4k typ */
651     svtype      utype;          /* bodytype stored in arena */
652 };
653
654 struct arena_set;
655
656 /* Get the maximum number of elements in set[] such that struct arena_set
657    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
658    therefore likely to be 1 aligned memory page.  */
659
660 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
662
663 struct arena_set {
664     struct arena_set* next;
665     unsigned int   set_size;    /* ie ARENAS_PER_SET */
666     unsigned int   curr;        /* index of next available arena-desc */
667     struct arena_desc set[ARENAS_PER_SET];
668 };
669
670 /*
671 =for apidoc sv_free_arenas
672
673 Deallocate the memory used by all arenas.  Note that all the individual SV
674 heads and bodies within the arenas must already have been freed.
675
676 =cut
677 */
678 void
679 Perl_sv_free_arenas(pTHX)
680 {
681     dVAR;
682     SV* sva;
683     SV* svanext;
684     unsigned int i;
685
686     /* Free arenas here, but be careful about fake ones.  (We assume
687        contiguity of the fake ones with the corresponding real ones.) */
688
689     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
690         svanext = MUTABLE_SV(SvANY(sva));
691         while (svanext && SvFAKE(svanext))
692             svanext = MUTABLE_SV(SvANY(svanext));
693
694         if (!SvFAKE(sva))
695             Safefree(sva);
696     }
697
698     {
699         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701         while (aroot) {
702             struct arena_set *current = aroot;
703             i = aroot->curr;
704             while (i--) {
705                 assert(aroot->set[i].arena);
706                 Safefree(aroot->set[i].arena);
707             }
708             aroot = aroot->next;
709             Safefree(current);
710         }
711     }
712     PL_body_arenas = 0;
713
714     i = PERL_ARENA_ROOTS_SIZE;
715     while (i--)
716         PL_body_roots[i] = 0;
717
718     PL_sv_arenaroot = 0;
719     PL_sv_root = 0;
720 }
721
722 /*
723   Here are mid-level routines that manage the allocation of bodies out
724   of the various arenas.  There are 5 kinds of arenas:
725
726   1. SV-head arenas, which are discussed and handled above
727   2. regular body arenas
728   3. arenas for reduced-size bodies
729   4. Hash-Entry arenas
730
731   Arena types 2 & 3 are chained by body-type off an array of
732   arena-root pointers, which is indexed by svtype.  Some of the
733   larger/less used body types are malloced singly, since a large
734   unused block of them is wasteful.  Also, several svtypes dont have
735   bodies; the data fits into the sv-head itself.  The arena-root
736   pointer thus has a few unused root-pointers (which may be hijacked
737   later for arena types 4,5)
738
739   3 differs from 2 as an optimization; some body types have several
740   unused fields in the front of the structure (which are kept in-place
741   for consistency).  These bodies can be allocated in smaller chunks,
742   because the leading fields arent accessed.  Pointers to such bodies
743   are decremented to point at the unused 'ghost' memory, knowing that
744   the pointers are used with offsets to the real memory.
745
746
747 =head1 SV-Body Allocation
748
749 Allocation of SV-bodies is similar to SV-heads, differing as follows;
750 the allocation mechanism is used for many body types, so is somewhat
751 more complicated, it uses arena-sets, and has no need for still-live
752 SV detection.
753
754 At the outermost level, (new|del)_X*V macros return bodies of the
755 appropriate type.  These macros call either (new|del)_body_type or
756 (new|del)_body_allocated macro pairs, depending on specifics of the
757 type.  Most body types use the former pair, the latter pair is used to
758 allocate body types with "ghost fields".
759
760 "ghost fields" are fields that are unused in certain types, and
761 consequently don't need to actually exist.  They are declared because
762 they're part of a "base type", which allows use of functions as
763 methods.  The simplest examples are AVs and HVs, 2 aggregate types
764 which don't use the fields which support SCALAR semantics.
765
766 For these types, the arenas are carved up into appropriately sized
767 chunks, we thus avoid wasted memory for those unaccessed members.
768 When bodies are allocated, we adjust the pointer back in memory by the
769 size of the part not allocated, so it's as if we allocated the full
770 structure.  (But things will all go boom if you write to the part that
771 is "not there", because you'll be overwriting the last members of the
772 preceding structure in memory.)
773
774 We calculate the correction using the STRUCT_OFFSET macro on the first
775 member present. If the allocated structure is smaller (no initial NV
776 actually allocated) then the net effect is to subtract the size of the NV
777 from the pointer, to return a new pointer as if an initial NV were actually
778 allocated. (We were using structures named *_allocated for this, but
779 this turned out to be a subtle bug, because a structure without an NV
780 could have a lower alignment constraint, but the compiler is allowed to
781 optimised accesses based on the alignment constraint of the actual pointer
782 to the full structure, for example, using a single 64 bit load instruction
783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
784
785 This is the same trick as was used for NV and IV bodies. Ironically it
786 doesn't need to be used for NV bodies any more, because NV is now at
787 the start of the structure. IV bodies don't need it either, because
788 they are no longer allocated.
789
790 In turn, the new_body_* allocators call S_new_body(), which invokes
791 new_body_inline macro, which takes a lock, and takes a body off the
792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
793 necessary to refresh an empty list.  Then the lock is released, and
794 the body is returned.
795
796 Perl_more_bodies allocates a new arena, and carves it up into an array of N
797 bodies, which it strings into a linked list.  It looks up arena-size
798 and body-size from the body_details table described below, thus
799 supporting the multiple body-types.
800
801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802 the (new|del)_X*V macros are mapped directly to malloc/free.
803
804 For each sv-type, struct body_details bodies_by_type[] carries
805 parameters which control these aspects of SV handling:
806
807 Arena_size determines whether arenas are used for this body type, and if
808 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
809 zero, forcing individual mallocs and frees.
810
811 Body_size determines how big a body is, and therefore how many fit into
812 each arena.  Offset carries the body-pointer adjustment needed for
813 "ghost fields", and is used in *_allocated macros.
814
815 But its main purpose is to parameterize info needed in
816 Perl_sv_upgrade().  The info here dramatically simplifies the function
817 vs the implementation in 5.8.8, making it table-driven.  All fields
818 are used for this, except for arena_size.
819
820 For the sv-types that have no bodies, arenas are not used, so those
821 PL_body_roots[sv_type] are unused, and can be overloaded.  In
822 something of a special case, SVt_NULL is borrowed for HE arenas;
823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
824 bodies_by_type[SVt_NULL] slot is not used, as the table is not
825 available in hv.c.
826
827 */
828
829 struct body_details {
830     U8 body_size;       /* Size to allocate  */
831     U8 copy;            /* Size of structure to copy (may be shorter)  */
832     U8 offset;
833     unsigned int type : 4;          /* We have space for a sanity check.  */
834     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
835     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
836     unsigned int arena : 1;         /* Allocated from an arena */
837     size_t arena_size;              /* Size of arena to allocate */
838 };
839
840 #define HADNV FALSE
841 #define NONV TRUE
842
843
844 #ifdef PURIFY
845 /* With -DPURFIY we allocate everything directly, and don't use arenas.
846    This seems a rather elegant way to simplify some of the code below.  */
847 #define HASARENA FALSE
848 #else
849 #define HASARENA TRUE
850 #endif
851 #define NOARENA FALSE
852
853 /* Size the arenas to exactly fit a given number of bodies.  A count
854    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855    simplifying the default.  If count > 0, the arena is sized to fit
856    only that many bodies, allowing arenas to be used for large, rare
857    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
858    limited by PERL_ARENA_SIZE, so we can safely oversize the
859    declarations.
860  */
861 #define FIT_ARENA0(body_size)                           \
862     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863 #define FIT_ARENAn(count,body_size)                     \
864     ( count * body_size <= PERL_ARENA_SIZE)             \
865     ? count * body_size                                 \
866     : FIT_ARENA0 (body_size)
867 #define FIT_ARENA(count,body_size)                      \
868     count                                               \
869     ? FIT_ARENAn (count, body_size)                     \
870     : FIT_ARENA0 (body_size)
871
872 /* Calculate the length to copy. Specifically work out the length less any
873    final padding the compiler needed to add.  See the comment in sv_upgrade
874    for why copying the padding proved to be a bug.  */
875
876 #define copy_length(type, last_member) \
877         STRUCT_OFFSET(type, last_member) \
878         + sizeof (((type*)SvANY((const SV *)0))->last_member)
879
880 static const struct body_details bodies_by_type[] = {
881     /* HEs use this offset for their arena.  */
882     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
883
884     /* The bind placeholder pretends to be an RV for now.
885        Also it's marked as "can't upgrade" to stop anyone using it before it's
886        implemented.  */
887     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
888
889     /* IVs are in the head, so the allocation size is 0.  */
890     { 0,
891       sizeof(IV), /* This is used to copy out the IV body.  */
892       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
893       NOARENA /* IVS don't need an arena  */, 0
894     },
895
896     { sizeof(NV), sizeof(NV),
897       STRUCT_OFFSET(XPVNV, xnv_u),
898       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
899
900     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
901       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
902       + STRUCT_OFFSET(XPV, xpv_cur),
903       SVt_PV, FALSE, NONV, HASARENA,
904       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
905
906     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
907       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
908       + STRUCT_OFFSET(XPV, xpv_cur),
909       SVt_PVIV, FALSE, NONV, HASARENA,
910       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
911
912     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
913       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
914       + STRUCT_OFFSET(XPV, xpv_cur),
915       SVt_PVNV, FALSE, HADNV, HASARENA,
916       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
917
918     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
919       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
920
921     { sizeof(regexp),
922       sizeof(regexp),
923       0,
924       SVt_REGEXP, FALSE, NONV, HASARENA,
925       FIT_ARENA(0, sizeof(regexp))
926     },
927
928     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
929       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
930     
931     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
932       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
933
934     { sizeof(XPVAV),
935       copy_length(XPVAV, xav_alloc),
936       0,
937       SVt_PVAV, TRUE, NONV, HASARENA,
938       FIT_ARENA(0, sizeof(XPVAV)) },
939
940     { sizeof(XPVHV),
941       copy_length(XPVHV, xhv_max),
942       0,
943       SVt_PVHV, TRUE, NONV, HASARENA,
944       FIT_ARENA(0, sizeof(XPVHV)) },
945
946     { sizeof(XPVCV),
947       sizeof(XPVCV),
948       0,
949       SVt_PVCV, TRUE, NONV, HASARENA,
950       FIT_ARENA(0, sizeof(XPVCV)) },
951
952     { sizeof(XPVFM),
953       sizeof(XPVFM),
954       0,
955       SVt_PVFM, TRUE, NONV, NOARENA,
956       FIT_ARENA(20, sizeof(XPVFM)) },
957
958     { sizeof(XPVIO),
959       sizeof(XPVIO),
960       0,
961       SVt_PVIO, TRUE, NONV, HASARENA,
962       FIT_ARENA(24, sizeof(XPVIO)) },
963 };
964
965 #define new_body_allocated(sv_type)             \
966     (void *)((char *)S_new_body(aTHX_ sv_type)  \
967              - bodies_by_type[sv_type].offset)
968
969 /* return a thing to the free list */
970
971 #define del_body(thing, root)                           \
972     STMT_START {                                        \
973         void ** const thing_copy = (void **)thing;      \
974         *thing_copy = *root;                            \
975         *root = (void*)thing_copy;                      \
976     } STMT_END
977
978 #ifdef PURIFY
979
980 #define new_XNV()       safemalloc(sizeof(XPVNV))
981 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
982 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
983
984 #define del_XPVGV(p)    safefree(p)
985
986 #else /* !PURIFY */
987
988 #define new_XNV()       new_body_allocated(SVt_NV)
989 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
990 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
991
992 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
993                                  &PL_body_roots[SVt_PVGV])
994
995 #endif /* PURIFY */
996
997 /* no arena for you! */
998
999 #define new_NOARENA(details) \
1000         safemalloc((details)->body_size + (details)->offset)
1001 #define new_NOARENAZ(details) \
1002         safecalloc((details)->body_size + (details)->offset, 1)
1003
1004 void *
1005 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1006                   const size_t arena_size)
1007 {
1008     dVAR;
1009     void ** const root = &PL_body_roots[sv_type];
1010     struct arena_desc *adesc;
1011     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1012     unsigned int curr;
1013     char *start;
1014     const char *end;
1015     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1016 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1017     static bool done_sanity_check;
1018
1019     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1020      * variables like done_sanity_check. */
1021     if (!done_sanity_check) {
1022         unsigned int i = SVt_LAST;
1023
1024         done_sanity_check = TRUE;
1025
1026         while (i--)
1027             assert (bodies_by_type[i].type == i);
1028     }
1029 #endif
1030
1031     assert(arena_size);
1032
1033     /* may need new arena-set to hold new arena */
1034     if (!aroot || aroot->curr >= aroot->set_size) {
1035         struct arena_set *newroot;
1036         Newxz(newroot, 1, struct arena_set);
1037         newroot->set_size = ARENAS_PER_SET;
1038         newroot->next = aroot;
1039         aroot = newroot;
1040         PL_body_arenas = (void *) newroot;
1041         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1042     }
1043
1044     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1045     curr = aroot->curr++;
1046     adesc = &(aroot->set[curr]);
1047     assert(!adesc->arena);
1048     
1049     Newx(adesc->arena, good_arena_size, char);
1050     adesc->size = good_arena_size;
1051     adesc->utype = sv_type;
1052     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1053                           curr, (void*)adesc->arena, (UV)good_arena_size));
1054
1055     start = (char *) adesc->arena;
1056
1057     /* Get the address of the byte after the end of the last body we can fit.
1058        Remember, this is integer division:  */
1059     end = start + good_arena_size / body_size * body_size;
1060
1061     /* computed count doesn't reflect the 1st slot reservation */
1062 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1063     DEBUG_m(PerlIO_printf(Perl_debug_log,
1064                           "arena %p end %p arena-size %d (from %d) type %d "
1065                           "size %d ct %d\n",
1066                           (void*)start, (void*)end, (int)good_arena_size,
1067                           (int)arena_size, sv_type, (int)body_size,
1068                           (int)good_arena_size / (int)body_size));
1069 #else
1070     DEBUG_m(PerlIO_printf(Perl_debug_log,
1071                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1072                           (void*)start, (void*)end,
1073                           (int)arena_size, sv_type, (int)body_size,
1074                           (int)good_arena_size / (int)body_size));
1075 #endif
1076     *root = (void *)start;
1077
1078     while (1) {
1079         /* Where the next body would start:  */
1080         char * const next = start + body_size;
1081
1082         if (next >= end) {
1083             /* This is the last body:  */
1084             assert(next == end);
1085
1086             *(void **)start = 0;
1087             return *root;
1088         }
1089
1090         *(void**) start = (void *)next;
1091         start = next;
1092     }
1093 }
1094
1095 /* grab a new thing from the free list, allocating more if necessary.
1096    The inline version is used for speed in hot routines, and the
1097    function using it serves the rest (unless PURIFY).
1098 */
1099 #define new_body_inline(xpv, sv_type) \
1100     STMT_START { \
1101         void ** const r3wt = &PL_body_roots[sv_type]; \
1102         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1103           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1104                                              bodies_by_type[sv_type].body_size,\
1105                                              bodies_by_type[sv_type].arena_size)); \
1106         *(r3wt) = *(void**)(xpv); \
1107     } STMT_END
1108
1109 #ifndef PURIFY
1110
1111 STATIC void *
1112 S_new_body(pTHX_ const svtype sv_type)
1113 {
1114     dVAR;
1115     void *xpv;
1116     new_body_inline(xpv, sv_type);
1117     return xpv;
1118 }
1119
1120 #endif
1121
1122 static const struct body_details fake_rv =
1123     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1124
1125 /*
1126 =for apidoc sv_upgrade
1127
1128 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1129 SV, then copies across as much information as possible from the old body.
1130 It croaks if the SV is already in a more complex form than requested.  You
1131 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1132 before calling C<sv_upgrade>, and hence does not croak.  See also
1133 C<svtype>.
1134
1135 =cut
1136 */
1137
1138 void
1139 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1140 {
1141     dVAR;
1142     void*       old_body;
1143     void*       new_body;
1144     const svtype old_type = SvTYPE(sv);
1145     const struct body_details *new_type_details;
1146     const struct body_details *old_type_details
1147         = bodies_by_type + old_type;
1148     SV *referant = NULL;
1149
1150     PERL_ARGS_ASSERT_SV_UPGRADE;
1151
1152     if (old_type == new_type)
1153         return;
1154
1155     /* This clause was purposefully added ahead of the early return above to
1156        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1157        inference by Nick I-S that it would fix other troublesome cases. See
1158        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1159
1160        Given that shared hash key scalars are no longer PVIV, but PV, there is
1161        no longer need to unshare so as to free up the IVX slot for its proper
1162        purpose. So it's safe to move the early return earlier.  */
1163
1164     if (new_type != SVt_PV && SvIsCOW(sv)) {
1165         sv_force_normal_flags(sv, 0);
1166     }
1167
1168     old_body = SvANY(sv);
1169
1170     /* Copying structures onto other structures that have been neatly zeroed
1171        has a subtle gotcha. Consider XPVMG
1172
1173        +------+------+------+------+------+-------+-------+
1174        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1175        +------+------+------+------+------+-------+-------+
1176        0      4      8     12     16     20      24      28
1177
1178        where NVs are aligned to 8 bytes, so that sizeof that structure is
1179        actually 32 bytes long, with 4 bytes of padding at the end:
1180
1181        +------+------+------+------+------+-------+-------+------+
1182        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1183        +------+------+------+------+------+-------+-------+------+
1184        0      4      8     12     16     20      24      28     32
1185
1186        so what happens if you allocate memory for this structure:
1187
1188        +------+------+------+------+------+-------+-------+------+------+...
1189        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1190        +------+------+------+------+------+-------+-------+------+------+...
1191        0      4      8     12     16     20      24      28     32     36
1192
1193        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1194        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1195        started out as zero once, but it's quite possible that it isn't. So now,
1196        rather than a nicely zeroed GP, you have it pointing somewhere random.
1197        Bugs ensue.
1198
1199        (In fact, GP ends up pointing at a previous GP structure, because the
1200        principle cause of the padding in XPVMG getting garbage is a copy of
1201        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1202        this happens to be moot because XPVGV has been re-ordered, with GP
1203        no longer after STASH)
1204
1205        So we are careful and work out the size of used parts of all the
1206        structures.  */
1207
1208     switch (old_type) {
1209     case SVt_NULL:
1210         break;
1211     case SVt_IV:
1212         if (SvROK(sv)) {
1213             referant = SvRV(sv);
1214             old_type_details = &fake_rv;
1215             if (new_type == SVt_NV)
1216                 new_type = SVt_PVNV;
1217         } else {
1218             if (new_type < SVt_PVIV) {
1219                 new_type = (new_type == SVt_NV)
1220                     ? SVt_PVNV : SVt_PVIV;
1221             }
1222         }
1223         break;
1224     case SVt_NV:
1225         if (new_type < SVt_PVNV) {
1226             new_type = SVt_PVNV;
1227         }
1228         break;
1229     case SVt_PV:
1230         assert(new_type > SVt_PV);
1231         assert(SVt_IV < SVt_PV);
1232         assert(SVt_NV < SVt_PV);
1233         break;
1234     case SVt_PVIV:
1235         break;
1236     case SVt_PVNV:
1237         break;
1238     case SVt_PVMG:
1239         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1240            there's no way that it can be safely upgraded, because perl.c
1241            expects to Safefree(SvANY(PL_mess_sv))  */
1242         assert(sv != PL_mess_sv);
1243         /* This flag bit is used to mean other things in other scalar types.
1244            Given that it only has meaning inside the pad, it shouldn't be set
1245            on anything that can get upgraded.  */
1246         assert(!SvPAD_TYPED(sv));
1247         break;
1248     default:
1249         if (old_type_details->cant_upgrade)
1250             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1251                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1252     }
1253
1254     if (old_type > new_type)
1255         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1256                 (int)old_type, (int)new_type);
1257
1258     new_type_details = bodies_by_type + new_type;
1259
1260     SvFLAGS(sv) &= ~SVTYPEMASK;
1261     SvFLAGS(sv) |= new_type;
1262
1263     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1264        the return statements above will have triggered.  */
1265     assert (new_type != SVt_NULL);
1266     switch (new_type) {
1267     case SVt_IV:
1268         assert(old_type == SVt_NULL);
1269         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1270         SvIV_set(sv, 0);
1271         return;
1272     case SVt_NV:
1273         assert(old_type == SVt_NULL);
1274         SvANY(sv) = new_XNV();
1275         SvNV_set(sv, 0);
1276         return;
1277     case SVt_PVHV:
1278     case SVt_PVAV:
1279         assert(new_type_details->body_size);
1280
1281 #ifndef PURIFY  
1282         assert(new_type_details->arena);
1283         assert(new_type_details->arena_size);
1284         /* This points to the start of the allocated area.  */
1285         new_body_inline(new_body, new_type);
1286         Zero(new_body, new_type_details->body_size, char);
1287         new_body = ((char *)new_body) - new_type_details->offset;
1288 #else
1289         /* We always allocated the full length item with PURIFY. To do this
1290            we fake things so that arena is false for all 16 types..  */
1291         new_body = new_NOARENAZ(new_type_details);
1292 #endif
1293         SvANY(sv) = new_body;
1294         if (new_type == SVt_PVAV) {
1295             AvMAX(sv)   = -1;
1296             AvFILLp(sv) = -1;
1297             AvREAL_only(sv);
1298             if (old_type_details->body_size) {
1299                 AvALLOC(sv) = 0;
1300             } else {
1301                 /* It will have been zeroed when the new body was allocated.
1302                    Lets not write to it, in case it confuses a write-back
1303                    cache.  */
1304             }
1305         } else {
1306             assert(!SvOK(sv));
1307             SvOK_off(sv);
1308 #ifndef NODEFAULT_SHAREKEYS
1309             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1310 #endif
1311             HvMAX(sv) = 7; /* (start with 8 buckets) */
1312         }
1313
1314         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1315            The target created by newSVrv also is, and it can have magic.
1316            However, it never has SvPVX set.
1317         */
1318         if (old_type == SVt_IV) {
1319             assert(!SvROK(sv));
1320         } else if (old_type >= SVt_PV) {
1321             assert(SvPVX_const(sv) == 0);
1322         }
1323
1324         if (old_type >= SVt_PVMG) {
1325             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1326             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1327         } else {
1328             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1329         }
1330         break;
1331
1332
1333     case SVt_REGEXP:
1334         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1335            sv_force_normal_flags(sv) is called.  */
1336         SvFAKE_on(sv);
1337     case SVt_PVIV:
1338         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1339            no route from NV to PVIV, NOK can never be true  */
1340         assert(!SvNOKp(sv));
1341         assert(!SvNOK(sv));
1342     case SVt_PVIO:
1343     case SVt_PVFM:
1344     case SVt_PVGV:
1345     case SVt_PVCV:
1346     case SVt_PVLV:
1347     case SVt_PVMG:
1348     case SVt_PVNV:
1349     case SVt_PV:
1350
1351         assert(new_type_details->body_size);
1352         /* We always allocated the full length item with PURIFY. To do this
1353            we fake things so that arena is false for all 16 types..  */
1354         if(new_type_details->arena) {
1355             /* This points to the start of the allocated area.  */
1356             new_body_inline(new_body, new_type);
1357             Zero(new_body, new_type_details->body_size, char);
1358             new_body = ((char *)new_body) - new_type_details->offset;
1359         } else {
1360             new_body = new_NOARENAZ(new_type_details);
1361         }
1362         SvANY(sv) = new_body;
1363
1364         if (old_type_details->copy) {
1365             /* There is now the potential for an upgrade from something without
1366                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1367             int offset = old_type_details->offset;
1368             int length = old_type_details->copy;
1369
1370             if (new_type_details->offset > old_type_details->offset) {
1371                 const int difference
1372                     = new_type_details->offset - old_type_details->offset;
1373                 offset += difference;
1374                 length -= difference;
1375             }
1376             assert (length >= 0);
1377                 
1378             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1379                  char);
1380         }
1381
1382 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1383         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1384          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1385          * NV slot, but the new one does, then we need to initialise the
1386          * freshly created NV slot with whatever the correct bit pattern is
1387          * for 0.0  */
1388         if (old_type_details->zero_nv && !new_type_details->zero_nv
1389             && !isGV_with_GP(sv))
1390             SvNV_set(sv, 0);
1391 #endif
1392
1393         if (new_type == SVt_PVIO) {
1394             IO * const io = MUTABLE_IO(sv);
1395             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1396
1397             SvOBJECT_on(io);
1398             /* Clear the stashcache because a new IO could overrule a package
1399                name */
1400             hv_clear(PL_stashcache);
1401
1402             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1403             IoPAGE_LEN(sv) = 60;
1404         }
1405         if (old_type < SVt_PV) {
1406             /* referant will be NULL unless the old type was SVt_IV emulating
1407                SVt_RV */
1408             sv->sv_u.svu_rv = referant;
1409         }
1410         break;
1411     default:
1412         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1413                    (unsigned long)new_type);
1414     }
1415
1416     if (old_type > SVt_IV) {
1417 #ifdef PURIFY
1418         safefree(old_body);
1419 #else
1420         /* Note that there is an assumption that all bodies of types that
1421            can be upgraded came from arenas. Only the more complex non-
1422            upgradable types are allowed to be directly malloc()ed.  */
1423         assert(old_type_details->arena);
1424         del_body((void*)((char*)old_body + old_type_details->offset),
1425                  &PL_body_roots[old_type]);
1426 #endif
1427     }
1428 }
1429
1430 /*
1431 =for apidoc sv_backoff
1432
1433 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1434 wrapper instead.
1435
1436 =cut
1437 */
1438
1439 int
1440 Perl_sv_backoff(pTHX_ register SV *const sv)
1441 {
1442     STRLEN delta;
1443     const char * const s = SvPVX_const(sv);
1444
1445     PERL_ARGS_ASSERT_SV_BACKOFF;
1446     PERL_UNUSED_CONTEXT;
1447
1448     assert(SvOOK(sv));
1449     assert(SvTYPE(sv) != SVt_PVHV);
1450     assert(SvTYPE(sv) != SVt_PVAV);
1451
1452     SvOOK_offset(sv, delta);
1453     
1454     SvLEN_set(sv, SvLEN(sv) + delta);
1455     SvPV_set(sv, SvPVX(sv) - delta);
1456     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1457     SvFLAGS(sv) &= ~SVf_OOK;
1458     return 0;
1459 }
1460
1461 /*
1462 =for apidoc sv_grow
1463
1464 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1465 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1466 Use the C<SvGROW> wrapper instead.
1467
1468 =cut
1469 */
1470
1471 char *
1472 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1473 {
1474     register char *s;
1475
1476     PERL_ARGS_ASSERT_SV_GROW;
1477
1478     if (PL_madskills && newlen >= 0x100000) {
1479         PerlIO_printf(Perl_debug_log,
1480                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1481     }
1482 #ifdef HAS_64K_LIMIT
1483     if (newlen >= 0x10000) {
1484         PerlIO_printf(Perl_debug_log,
1485                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1486         my_exit(1);
1487     }
1488 #endif /* HAS_64K_LIMIT */
1489     if (SvROK(sv))
1490         sv_unref(sv);
1491     if (SvTYPE(sv) < SVt_PV) {
1492         sv_upgrade(sv, SVt_PV);
1493         s = SvPVX_mutable(sv);
1494     }
1495     else if (SvOOK(sv)) {       /* pv is offset? */
1496         sv_backoff(sv);
1497         s = SvPVX_mutable(sv);
1498         if (newlen > SvLEN(sv))
1499             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1500 #ifdef HAS_64K_LIMIT
1501         if (newlen >= 0x10000)
1502             newlen = 0xFFFF;
1503 #endif
1504     }
1505     else
1506         s = SvPVX_mutable(sv);
1507
1508     if (newlen > SvLEN(sv)) {           /* need more room? */
1509         STRLEN minlen = SvCUR(sv);
1510         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1511         if (newlen < minlen)
1512             newlen = minlen;
1513 #ifndef Perl_safesysmalloc_size
1514         newlen = PERL_STRLEN_ROUNDUP(newlen);
1515 #endif
1516         if (SvLEN(sv) && s) {
1517             s = (char*)saferealloc(s, newlen);
1518         }
1519         else {
1520             s = (char*)safemalloc(newlen);
1521             if (SvPVX_const(sv) && SvCUR(sv)) {
1522                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1523             }
1524         }
1525         SvPV_set(sv, s);
1526 #ifdef Perl_safesysmalloc_size
1527         /* Do this here, do it once, do it right, and then we will never get
1528            called back into sv_grow() unless there really is some growing
1529            needed.  */
1530         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1531 #else
1532         SvLEN_set(sv, newlen);
1533 #endif
1534     }
1535     return s;
1536 }
1537
1538 /*
1539 =for apidoc sv_setiv
1540
1541 Copies an integer into the given SV, upgrading first if necessary.
1542 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1543
1544 =cut
1545 */
1546
1547 void
1548 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1549 {
1550     dVAR;
1551
1552     PERL_ARGS_ASSERT_SV_SETIV;
1553
1554     SV_CHECK_THINKFIRST_COW_DROP(sv);
1555     switch (SvTYPE(sv)) {
1556     case SVt_NULL:
1557     case SVt_NV:
1558         sv_upgrade(sv, SVt_IV);
1559         break;
1560     case SVt_PV:
1561         sv_upgrade(sv, SVt_PVIV);
1562         break;
1563
1564     case SVt_PVGV:
1565         if (!isGV_with_GP(sv))
1566             break;
1567     case SVt_PVAV:
1568     case SVt_PVHV:
1569     case SVt_PVCV:
1570     case SVt_PVFM:
1571     case SVt_PVIO:
1572         /* diag_listed_as: Can't coerce %s to %s in %s */
1573         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1574                    OP_DESC(PL_op));
1575     default: NOOP;
1576     }
1577     (void)SvIOK_only(sv);                       /* validate number */
1578     SvIV_set(sv, i);
1579     SvTAINT(sv);
1580 }
1581
1582 /*
1583 =for apidoc sv_setiv_mg
1584
1585 Like C<sv_setiv>, but also handles 'set' magic.
1586
1587 =cut
1588 */
1589
1590 void
1591 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1592 {
1593     PERL_ARGS_ASSERT_SV_SETIV_MG;
1594
1595     sv_setiv(sv,i);
1596     SvSETMAGIC(sv);
1597 }
1598
1599 /*
1600 =for apidoc sv_setuv
1601
1602 Copies an unsigned integer into the given SV, upgrading first if necessary.
1603 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1604
1605 =cut
1606 */
1607
1608 void
1609 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1610 {
1611     PERL_ARGS_ASSERT_SV_SETUV;
1612
1613     /* With the if statement to ensure that integers are stored as IVs whenever
1614        possible:
1615        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1616
1617        without
1618        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1619
1620        If you wish to remove the following if statement, so that this routine
1621        (and its callers) always return UVs, please benchmark to see what the
1622        effect is. Modern CPUs may be different. Or may not :-)
1623     */
1624     if (u <= (UV)IV_MAX) {
1625        sv_setiv(sv, (IV)u);
1626        return;
1627     }
1628     sv_setiv(sv, 0);
1629     SvIsUV_on(sv);
1630     SvUV_set(sv, u);
1631 }
1632
1633 /*
1634 =for apidoc sv_setuv_mg
1635
1636 Like C<sv_setuv>, but also handles 'set' magic.
1637
1638 =cut
1639 */
1640
1641 void
1642 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1643 {
1644     PERL_ARGS_ASSERT_SV_SETUV_MG;
1645
1646     sv_setuv(sv,u);
1647     SvSETMAGIC(sv);
1648 }
1649
1650 /*
1651 =for apidoc sv_setnv
1652
1653 Copies a double into the given SV, upgrading first if necessary.
1654 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1655
1656 =cut
1657 */
1658
1659 void
1660 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1661 {
1662     dVAR;
1663
1664     PERL_ARGS_ASSERT_SV_SETNV;
1665
1666     SV_CHECK_THINKFIRST_COW_DROP(sv);
1667     switch (SvTYPE(sv)) {
1668     case SVt_NULL:
1669     case SVt_IV:
1670         sv_upgrade(sv, SVt_NV);
1671         break;
1672     case SVt_PV:
1673     case SVt_PVIV:
1674         sv_upgrade(sv, SVt_PVNV);
1675         break;
1676
1677     case SVt_PVGV:
1678         if (!isGV_with_GP(sv))
1679             break;
1680     case SVt_PVAV:
1681     case SVt_PVHV:
1682     case SVt_PVCV:
1683     case SVt_PVFM:
1684     case SVt_PVIO:
1685         /* diag_listed_as: Can't coerce %s to %s in %s */
1686         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1687                    OP_DESC(PL_op));
1688     default: NOOP;
1689     }
1690     SvNV_set(sv, num);
1691     (void)SvNOK_only(sv);                       /* validate number */
1692     SvTAINT(sv);
1693 }
1694
1695 /*
1696 =for apidoc sv_setnv_mg
1697
1698 Like C<sv_setnv>, but also handles 'set' magic.
1699
1700 =cut
1701 */
1702
1703 void
1704 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1705 {
1706     PERL_ARGS_ASSERT_SV_SETNV_MG;
1707
1708     sv_setnv(sv,num);
1709     SvSETMAGIC(sv);
1710 }
1711
1712 /* Print an "isn't numeric" warning, using a cleaned-up,
1713  * printable version of the offending string
1714  */
1715
1716 STATIC void
1717 S_not_a_number(pTHX_ SV *const sv)
1718 {
1719      dVAR;
1720      SV *dsv;
1721      char tmpbuf[64];
1722      const char *pv;
1723
1724      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1725
1726      if (DO_UTF8(sv)) {
1727           dsv = newSVpvs_flags("", SVs_TEMP);
1728           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1729      } else {
1730           char *d = tmpbuf;
1731           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1732           /* each *s can expand to 4 chars + "...\0",
1733              i.e. need room for 8 chars */
1734         
1735           const char *s = SvPVX_const(sv);
1736           const char * const end = s + SvCUR(sv);
1737           for ( ; s < end && d < limit; s++ ) {
1738                int ch = *s & 0xFF;
1739                if (ch & 128 && !isPRINT_LC(ch)) {
1740                     *d++ = 'M';
1741                     *d++ = '-';
1742                     ch &= 127;
1743                }
1744                if (ch == '\n') {
1745                     *d++ = '\\';
1746                     *d++ = 'n';
1747                }
1748                else if (ch == '\r') {
1749                     *d++ = '\\';
1750                     *d++ = 'r';
1751                }
1752                else if (ch == '\f') {
1753                     *d++ = '\\';
1754                     *d++ = 'f';
1755                }
1756                else if (ch == '\\') {
1757                     *d++ = '\\';
1758                     *d++ = '\\';
1759                }
1760                else if (ch == '\0') {
1761                     *d++ = '\\';
1762                     *d++ = '0';
1763                }
1764                else if (isPRINT_LC(ch))
1765                     *d++ = ch;
1766                else {
1767                     *d++ = '^';
1768                     *d++ = toCTRL(ch);
1769                }
1770           }
1771           if (s < end) {
1772                *d++ = '.';
1773                *d++ = '.';
1774                *d++ = '.';
1775           }
1776           *d = '\0';
1777           pv = tmpbuf;
1778     }
1779
1780     if (PL_op)
1781         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1782                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1783                     "Argument \"%s\" isn't numeric in %s", pv,
1784                     OP_DESC(PL_op));
1785     else
1786         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1787                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1788                     "Argument \"%s\" isn't numeric", pv);
1789 }
1790
1791 /*
1792 =for apidoc looks_like_number
1793
1794 Test if the content of an SV looks like a number (or is a number).
1795 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1796 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1797 ignored.
1798
1799 =cut
1800 */
1801
1802 I32
1803 Perl_looks_like_number(pTHX_ SV *const sv)
1804 {
1805     register const char *sbegin;
1806     STRLEN len;
1807
1808     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1809
1810     if (SvPOK(sv) || SvPOKp(sv)) {
1811         sbegin = SvPV_nomg_const(sv, len);
1812     }
1813     else
1814         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1815     return grok_number(sbegin, len, NULL);
1816 }
1817
1818 STATIC bool
1819 S_glob_2number(pTHX_ GV * const gv)
1820 {
1821     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1822
1823     /* We know that all GVs stringify to something that is not-a-number,
1824         so no need to test that.  */
1825     if (ckWARN(WARN_NUMERIC))
1826     {
1827         SV *const buffer = sv_newmortal();
1828         gv_efullname3(buffer, gv, "*");
1829         not_a_number(buffer);
1830     }
1831     /* We just want something true to return, so that S_sv_2iuv_common
1832         can tail call us and return true.  */
1833     return TRUE;
1834 }
1835
1836 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1837    until proven guilty, assume that things are not that bad... */
1838
1839 /*
1840    NV_PRESERVES_UV:
1841
1842    As 64 bit platforms often have an NV that doesn't preserve all bits of
1843    an IV (an assumption perl has been based on to date) it becomes necessary
1844    to remove the assumption that the NV always carries enough precision to
1845    recreate the IV whenever needed, and that the NV is the canonical form.
1846    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1847    precision as a side effect of conversion (which would lead to insanity
1848    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1849    1) to distinguish between IV/UV/NV slots that have cached a valid
1850       conversion where precision was lost and IV/UV/NV slots that have a
1851       valid conversion which has lost no precision
1852    2) to ensure that if a numeric conversion to one form is requested that
1853       would lose precision, the precise conversion (or differently
1854       imprecise conversion) is also performed and cached, to prevent
1855       requests for different numeric formats on the same SV causing
1856       lossy conversion chains. (lossless conversion chains are perfectly
1857       acceptable (still))
1858
1859
1860    flags are used:
1861    SvIOKp is true if the IV slot contains a valid value
1862    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1863    SvNOKp is true if the NV slot contains a valid value
1864    SvNOK  is true only if the NV value is accurate
1865
1866    so
1867    while converting from PV to NV, check to see if converting that NV to an
1868    IV(or UV) would lose accuracy over a direct conversion from PV to
1869    IV(or UV). If it would, cache both conversions, return NV, but mark
1870    SV as IOK NOKp (ie not NOK).
1871
1872    While converting from PV to IV, check to see if converting that IV to an
1873    NV would lose accuracy over a direct conversion from PV to NV. If it
1874    would, cache both conversions, flag similarly.
1875
1876    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1877    correctly because if IV & NV were set NV *always* overruled.
1878    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1879    changes - now IV and NV together means that the two are interchangeable:
1880    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1881
1882    The benefit of this is that operations such as pp_add know that if
1883    SvIOK is true for both left and right operands, then integer addition
1884    can be used instead of floating point (for cases where the result won't
1885    overflow). Before, floating point was always used, which could lead to
1886    loss of precision compared with integer addition.
1887
1888    * making IV and NV equal status should make maths accurate on 64 bit
1889      platforms
1890    * may speed up maths somewhat if pp_add and friends start to use
1891      integers when possible instead of fp. (Hopefully the overhead in
1892      looking for SvIOK and checking for overflow will not outweigh the
1893      fp to integer speedup)
1894    * will slow down integer operations (callers of SvIV) on "inaccurate"
1895      values, as the change from SvIOK to SvIOKp will cause a call into
1896      sv_2iv each time rather than a macro access direct to the IV slot
1897    * should speed up number->string conversion on integers as IV is
1898      favoured when IV and NV are equally accurate
1899
1900    ####################################################################
1901    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1902    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1903    On the other hand, SvUOK is true iff UV.
1904    ####################################################################
1905
1906    Your mileage will vary depending your CPU's relative fp to integer
1907    performance ratio.
1908 */
1909
1910 #ifndef NV_PRESERVES_UV
1911 #  define IS_NUMBER_UNDERFLOW_IV 1
1912 #  define IS_NUMBER_UNDERFLOW_UV 2
1913 #  define IS_NUMBER_IV_AND_UV    2
1914 #  define IS_NUMBER_OVERFLOW_IV  4
1915 #  define IS_NUMBER_OVERFLOW_UV  5
1916
1917 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1918
1919 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1920 STATIC int
1921 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1922 #  ifdef DEBUGGING
1923                        , I32 numtype
1924 #  endif
1925                        )
1926 {
1927     dVAR;
1928
1929     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1930
1931     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));
1932     if (SvNVX(sv) < (NV)IV_MIN) {
1933         (void)SvIOKp_on(sv);
1934         (void)SvNOK_on(sv);
1935         SvIV_set(sv, IV_MIN);
1936         return IS_NUMBER_UNDERFLOW_IV;
1937     }
1938     if (SvNVX(sv) > (NV)UV_MAX) {
1939         (void)SvIOKp_on(sv);
1940         (void)SvNOK_on(sv);
1941         SvIsUV_on(sv);
1942         SvUV_set(sv, UV_MAX);
1943         return IS_NUMBER_OVERFLOW_UV;
1944     }
1945     (void)SvIOKp_on(sv);
1946     (void)SvNOK_on(sv);
1947     /* Can't use strtol etc to convert this string.  (See truth table in
1948        sv_2iv  */
1949     if (SvNVX(sv) <= (UV)IV_MAX) {
1950         SvIV_set(sv, I_V(SvNVX(sv)));
1951         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1952             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1953         } else {
1954             /* Integer is imprecise. NOK, IOKp */
1955         }
1956         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1957     }
1958     SvIsUV_on(sv);
1959     SvUV_set(sv, U_V(SvNVX(sv)));
1960     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1961         if (SvUVX(sv) == UV_MAX) {
1962             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1963                possibly be preserved by NV. Hence, it must be overflow.
1964                NOK, IOKp */
1965             return IS_NUMBER_OVERFLOW_UV;
1966         }
1967         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1968     } else {
1969         /* Integer is imprecise. NOK, IOKp */
1970     }
1971     return IS_NUMBER_OVERFLOW_IV;
1972 }
1973 #endif /* !NV_PRESERVES_UV*/
1974
1975 STATIC bool
1976 S_sv_2iuv_common(pTHX_ SV *const sv)
1977 {
1978     dVAR;
1979
1980     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1981
1982     if (SvNOKp(sv)) {
1983         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1984          * without also getting a cached IV/UV from it at the same time
1985          * (ie PV->NV conversion should detect loss of accuracy and cache
1986          * IV or UV at same time to avoid this. */
1987         /* IV-over-UV optimisation - choose to cache IV if possible */
1988
1989         if (SvTYPE(sv) == SVt_NV)
1990             sv_upgrade(sv, SVt_PVNV);
1991
1992         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1993         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1994            certainly cast into the IV range at IV_MAX, whereas the correct
1995            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1996            cases go to UV */
1997 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1998         if (Perl_isnan(SvNVX(sv))) {
1999             SvUV_set(sv, 0);
2000             SvIsUV_on(sv);
2001             return FALSE;
2002         }
2003 #endif
2004         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2005             SvIV_set(sv, I_V(SvNVX(sv)));
2006             if (SvNVX(sv) == (NV) SvIVX(sv)
2007 #ifndef NV_PRESERVES_UV
2008                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2009                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2010                 /* Don't flag it as "accurately an integer" if the number
2011                    came from a (by definition imprecise) NV operation, and
2012                    we're outside the range of NV integer precision */
2013 #endif
2014                 ) {
2015                 if (SvNOK(sv))
2016                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2017                 else {
2018                     /* scalar has trailing garbage, eg "42a" */
2019                 }
2020                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2021                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2022                                       PTR2UV(sv),
2023                                       SvNVX(sv),
2024                                       SvIVX(sv)));
2025
2026             } else {
2027                 /* IV not precise.  No need to convert from PV, as NV
2028                    conversion would already have cached IV if it detected
2029                    that PV->IV would be better than PV->NV->IV
2030                    flags already correct - don't set public IOK.  */
2031                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2032                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2033                                       PTR2UV(sv),
2034                                       SvNVX(sv),
2035                                       SvIVX(sv)));
2036             }
2037             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2038                but the cast (NV)IV_MIN rounds to a the value less (more
2039                negative) than IV_MIN which happens to be equal to SvNVX ??
2040                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2041                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2042                (NV)UVX == NVX are both true, but the values differ. :-(
2043                Hopefully for 2s complement IV_MIN is something like
2044                0x8000000000000000 which will be exact. NWC */
2045         }
2046         else {
2047             SvUV_set(sv, U_V(SvNVX(sv)));
2048             if (
2049                 (SvNVX(sv) == (NV) SvUVX(sv))
2050 #ifndef  NV_PRESERVES_UV
2051                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2052                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2053                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2054                 /* Don't flag it as "accurately an integer" if the number
2055                    came from a (by definition imprecise) NV operation, and
2056                    we're outside the range of NV integer precision */
2057 #endif
2058                 && SvNOK(sv)
2059                 )
2060                 SvIOK_on(sv);
2061             SvIsUV_on(sv);
2062             DEBUG_c(PerlIO_printf(Perl_debug_log,
2063                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2064                                   PTR2UV(sv),
2065                                   SvUVX(sv),
2066                                   SvUVX(sv)));
2067         }
2068     }
2069     else if (SvPOKp(sv) && SvLEN(sv)) {
2070         UV value;
2071         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2072         /* We want to avoid a possible problem when we cache an IV/ a UV which
2073            may be later translated to an NV, and the resulting NV is not
2074            the same as the direct translation of the initial string
2075            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2076            be careful to ensure that the value with the .456 is around if the
2077            NV value is requested in the future).
2078         
2079            This means that if we cache such an IV/a UV, we need to cache the
2080            NV as well.  Moreover, we trade speed for space, and do not
2081            cache the NV if we are sure it's not needed.
2082          */
2083
2084         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2085         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2086              == IS_NUMBER_IN_UV) {
2087             /* It's definitely an integer, only upgrade to PVIV */
2088             if (SvTYPE(sv) < SVt_PVIV)
2089                 sv_upgrade(sv, SVt_PVIV);
2090             (void)SvIOK_on(sv);
2091         } else if (SvTYPE(sv) < SVt_PVNV)
2092             sv_upgrade(sv, SVt_PVNV);
2093
2094         /* If NVs preserve UVs then we only use the UV value if we know that
2095            we aren't going to call atof() below. If NVs don't preserve UVs
2096            then the value returned may have more precision than atof() will
2097            return, even though value isn't perfectly accurate.  */
2098         if ((numtype & (IS_NUMBER_IN_UV
2099 #ifdef NV_PRESERVES_UV
2100                         | IS_NUMBER_NOT_INT
2101 #endif
2102             )) == IS_NUMBER_IN_UV) {
2103             /* This won't turn off the public IOK flag if it was set above  */
2104             (void)SvIOKp_on(sv);
2105
2106             if (!(numtype & IS_NUMBER_NEG)) {
2107                 /* positive */;
2108                 if (value <= (UV)IV_MAX) {
2109                     SvIV_set(sv, (IV)value);
2110                 } else {
2111                     /* it didn't overflow, and it was positive. */
2112                     SvUV_set(sv, value);
2113                     SvIsUV_on(sv);
2114                 }
2115             } else {
2116                 /* 2s complement assumption  */
2117                 if (value <= (UV)IV_MIN) {
2118                     SvIV_set(sv, -(IV)value);
2119                 } else {
2120                     /* Too negative for an IV.  This is a double upgrade, but
2121                        I'm assuming it will be rare.  */
2122                     if (SvTYPE(sv) < SVt_PVNV)
2123                         sv_upgrade(sv, SVt_PVNV);
2124                     SvNOK_on(sv);
2125                     SvIOK_off(sv);
2126                     SvIOKp_on(sv);
2127                     SvNV_set(sv, -(NV)value);
2128                     SvIV_set(sv, IV_MIN);
2129                 }
2130             }
2131         }
2132         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2133            will be in the previous block to set the IV slot, and the next
2134            block to set the NV slot.  So no else here.  */
2135         
2136         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2137             != IS_NUMBER_IN_UV) {
2138             /* It wasn't an (integer that doesn't overflow the UV). */
2139             SvNV_set(sv, Atof(SvPVX_const(sv)));
2140
2141             if (! numtype && ckWARN(WARN_NUMERIC))
2142                 not_a_number(sv);
2143
2144 #if defined(USE_LONG_DOUBLE)
2145             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2146                                   PTR2UV(sv), SvNVX(sv)));
2147 #else
2148             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2149                                   PTR2UV(sv), SvNVX(sv)));
2150 #endif
2151
2152 #ifdef NV_PRESERVES_UV
2153             (void)SvIOKp_on(sv);
2154             (void)SvNOK_on(sv);
2155             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2156                 SvIV_set(sv, I_V(SvNVX(sv)));
2157                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2158                     SvIOK_on(sv);
2159                 } else {
2160                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2161                 }
2162                 /* UV will not work better than IV */
2163             } else {
2164                 if (SvNVX(sv) > (NV)UV_MAX) {
2165                     SvIsUV_on(sv);
2166                     /* Integer is inaccurate. NOK, IOKp, is UV */
2167                     SvUV_set(sv, UV_MAX);
2168                 } else {
2169                     SvUV_set(sv, U_V(SvNVX(sv)));
2170                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2171                        NV preservse UV so can do correct comparison.  */
2172                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2173                         SvIOK_on(sv);
2174                     } else {
2175                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2176                     }
2177                 }
2178                 SvIsUV_on(sv);
2179             }
2180 #else /* NV_PRESERVES_UV */
2181             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2182                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2183                 /* The IV/UV slot will have been set from value returned by
2184                    grok_number above.  The NV slot has just been set using
2185                    Atof.  */
2186                 SvNOK_on(sv);
2187                 assert (SvIOKp(sv));
2188             } else {
2189                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2190                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2191                     /* Small enough to preserve all bits. */
2192                     (void)SvIOKp_on(sv);
2193                     SvNOK_on(sv);
2194                     SvIV_set(sv, I_V(SvNVX(sv)));
2195                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2196                         SvIOK_on(sv);
2197                     /* Assumption: first non-preserved integer is < IV_MAX,
2198                        this NV is in the preserved range, therefore: */
2199                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2200                           < (UV)IV_MAX)) {
2201                         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);
2202                     }
2203                 } else {
2204                     /* IN_UV NOT_INT
2205                          0      0       already failed to read UV.
2206                          0      1       already failed to read UV.
2207                          1      0       you won't get here in this case. IV/UV
2208                                         slot set, public IOK, Atof() unneeded.
2209                          1      1       already read UV.
2210                        so there's no point in sv_2iuv_non_preserve() attempting
2211                        to use atol, strtol, strtoul etc.  */
2212 #  ifdef DEBUGGING
2213                     sv_2iuv_non_preserve (sv, numtype);
2214 #  else
2215                     sv_2iuv_non_preserve (sv);
2216 #  endif
2217                 }
2218             }
2219 #endif /* NV_PRESERVES_UV */
2220         /* It might be more code efficient to go through the entire logic above
2221            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2222            gets complex and potentially buggy, so more programmer efficient
2223            to do it this way, by turning off the public flags:  */
2224         if (!numtype)
2225             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2226         }
2227     }
2228     else  {
2229         if (isGV_with_GP(sv))
2230             return glob_2number(MUTABLE_GV(sv));
2231
2232         if (!SvPADTMP(sv)) {
2233             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2234                 report_uninit(sv);
2235         }
2236         if (SvTYPE(sv) < SVt_IV)
2237             /* Typically the caller expects that sv_any is not NULL now.  */
2238             sv_upgrade(sv, SVt_IV);
2239         /* Return 0 from the caller.  */
2240         return TRUE;
2241     }
2242     return FALSE;
2243 }
2244
2245 /*
2246 =for apidoc sv_2iv_flags
2247
2248 Return the integer value of an SV, doing any necessary string
2249 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2250 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2251
2252 =cut
2253 */
2254
2255 IV
2256 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2257 {
2258     dVAR;
2259     if (!sv)
2260         return 0;
2261     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2262         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2263            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2264            In practice they are extremely unlikely to actually get anywhere
2265            accessible by user Perl code - the only way that I'm aware of is when
2266            a constant subroutine which is used as the second argument to index.
2267         */
2268         if (flags & SV_GMAGIC)
2269             mg_get(sv);
2270         if (SvIOKp(sv))
2271             return SvIVX(sv);
2272         if (SvNOKp(sv)) {
2273             return I_V(SvNVX(sv));
2274         }
2275         if (SvPOKp(sv) && SvLEN(sv)) {
2276             UV value;
2277             const int numtype
2278                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2279
2280             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2281                 == IS_NUMBER_IN_UV) {
2282                 /* It's definitely an integer */
2283                 if (numtype & IS_NUMBER_NEG) {
2284                     if (value < (UV)IV_MIN)
2285                         return -(IV)value;
2286                 } else {
2287                     if (value < (UV)IV_MAX)
2288                         return (IV)value;
2289                 }
2290             }
2291             if (!numtype) {
2292                 if (ckWARN(WARN_NUMERIC))
2293                     not_a_number(sv);
2294             }
2295             return I_V(Atof(SvPVX_const(sv)));
2296         }
2297         if (SvROK(sv)) {
2298             goto return_rok;
2299         }
2300         assert(SvTYPE(sv) >= SVt_PVMG);
2301         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2302     } else if (SvTHINKFIRST(sv)) {
2303         if (SvROK(sv)) {
2304         return_rok:
2305             if (SvAMAGIC(sv)) {
2306                 SV * tmpstr;
2307                 if (flags & SV_SKIP_OVERLOAD)
2308                     return 0;
2309                 tmpstr = AMG_CALLunary(sv, numer_amg);
2310                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2311                     return SvIV(tmpstr);
2312                 }
2313             }
2314             return PTR2IV(SvRV(sv));
2315         }
2316         if (SvIsCOW(sv)) {
2317             sv_force_normal_flags(sv, 0);
2318         }
2319         if (SvREADONLY(sv) && !SvOK(sv)) {
2320             if (ckWARN(WARN_UNINITIALIZED))
2321                 report_uninit(sv);
2322             return 0;
2323         }
2324     }
2325     if (!SvIOKp(sv)) {
2326         if (S_sv_2iuv_common(aTHX_ sv))
2327             return 0;
2328     }
2329     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2330         PTR2UV(sv),SvIVX(sv)));
2331     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2332 }
2333
2334 /*
2335 =for apidoc sv_gmagical_2iv_please
2336
2337 Used internally by C<SvIV_please_nomg>, this function sets the C<SvIVX>
2338 slot if C<sv_2iv> would have made the scalar C<SvIOK> had it not been
2339 magical.  In that case it returns true.
2340
2341 =cut
2342 */
2343
2344 bool
2345 Perl_sv_gmagical_2iv_please(pTHX_ register SV *sv)
2346 {
2347     bool has_int;
2348     PERL_ARGS_ASSERT_SV_GMAGICAL_2IV_PLEASE;
2349     assert(SvGMAGICAL(sv) && !SvIOKp(sv) && (SvNOKp(sv) || SvPOKp(sv)));
2350     if (S_sv_2iuv_common(aTHX_ sv)) { SvNIOK_off(sv); return 0; }
2351     has_int = !!SvIOK(sv);
2352     SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2353     return has_int;
2354 }
2355
2356 /*
2357 =for apidoc sv_2uv_flags
2358
2359 Return the unsigned integer value of an SV, doing any necessary string
2360 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2361 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2362
2363 =cut
2364 */
2365
2366 UV
2367 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2368 {
2369     dVAR;
2370     if (!sv)
2371         return 0;
2372     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2373         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2374            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  */
2375         if (flags & SV_GMAGIC)
2376             mg_get(sv);
2377         if (SvIOKp(sv))
2378             return SvUVX(sv);
2379         if (SvNOKp(sv))
2380             return U_V(SvNVX(sv));
2381         if (SvPOKp(sv) && SvLEN(sv)) {
2382             UV value;
2383             const int numtype
2384                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2385
2386             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2387                 == IS_NUMBER_IN_UV) {
2388                 /* It's definitely an integer */
2389                 if (!(numtype & IS_NUMBER_NEG))
2390                     return value;
2391             }
2392             if (!numtype) {
2393                 if (ckWARN(WARN_NUMERIC))
2394                     not_a_number(sv);
2395             }
2396             return U_V(Atof(SvPVX_const(sv)));
2397         }
2398         if (SvROK(sv)) {
2399             goto return_rok;
2400         }
2401         assert(SvTYPE(sv) >= SVt_PVMG);
2402         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2403     } else if (SvTHINKFIRST(sv)) {
2404         if (SvROK(sv)) {
2405         return_rok:
2406             if (SvAMAGIC(sv)) {
2407                 SV *tmpstr;
2408                 if (flags & SV_SKIP_OVERLOAD)
2409                     return 0;
2410                 tmpstr = AMG_CALLunary(sv, numer_amg);
2411                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2412                     return SvUV(tmpstr);
2413                 }
2414             }
2415             return PTR2UV(SvRV(sv));
2416         }
2417         if (SvIsCOW(sv)) {
2418             sv_force_normal_flags(sv, 0);
2419         }
2420         if (SvREADONLY(sv) && !SvOK(sv)) {
2421             if (ckWARN(WARN_UNINITIALIZED))
2422                 report_uninit(sv);
2423             return 0;
2424         }
2425     }
2426     if (!SvIOKp(sv)) {
2427         if (S_sv_2iuv_common(aTHX_ sv))
2428             return 0;
2429     }
2430
2431     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2432                           PTR2UV(sv),SvUVX(sv)));
2433     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2434 }
2435
2436 /*
2437 =for apidoc sv_2nv_flags
2438
2439 Return the num value of an SV, doing any necessary string or integer
2440 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2441 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2442
2443 =cut
2444 */
2445
2446 NV
2447 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2448 {
2449     dVAR;
2450     if (!sv)
2451         return 0.0;
2452     if (SvGMAGICAL(sv) || SvVALID(sv)) {
2453         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2454            the same flag bit as SVf_IVisUV, so must not let them cache NVs.  */
2455         if (flags & SV_GMAGIC)
2456             mg_get(sv);
2457         if (SvNOKp(sv))
2458             return SvNVX(sv);
2459         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2460             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2461                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2462                 not_a_number(sv);
2463             return Atof(SvPVX_const(sv));
2464         }
2465         if (SvIOKp(sv)) {
2466             if (SvIsUV(sv))
2467                 return (NV)SvUVX(sv);
2468             else
2469                 return (NV)SvIVX(sv);
2470         }
2471         if (SvROK(sv)) {
2472             goto return_rok;
2473         }
2474         assert(SvTYPE(sv) >= SVt_PVMG);
2475         /* This falls through to the report_uninit near the end of the
2476            function. */
2477     } else if (SvTHINKFIRST(sv)) {
2478         if (SvROK(sv)) {
2479         return_rok:
2480             if (SvAMAGIC(sv)) {
2481                 SV *tmpstr;
2482                 if (flags & SV_SKIP_OVERLOAD)
2483                     return 0;
2484                 tmpstr = AMG_CALLunary(sv, numer_amg);
2485                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2486                     return SvNV(tmpstr);
2487                 }
2488             }
2489             return PTR2NV(SvRV(sv));
2490         }
2491         if (SvIsCOW(sv)) {
2492             sv_force_normal_flags(sv, 0);
2493         }
2494         if (SvREADONLY(sv) && !SvOK(sv)) {
2495             if (ckWARN(WARN_UNINITIALIZED))
2496                 report_uninit(sv);
2497             return 0.0;
2498         }
2499     }
2500     if (SvTYPE(sv) < SVt_NV) {
2501         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2502         sv_upgrade(sv, SVt_NV);
2503 #ifdef USE_LONG_DOUBLE
2504         DEBUG_c({
2505             STORE_NUMERIC_LOCAL_SET_STANDARD();
2506             PerlIO_printf(Perl_debug_log,
2507                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2508                           PTR2UV(sv), SvNVX(sv));
2509             RESTORE_NUMERIC_LOCAL();
2510         });
2511 #else
2512         DEBUG_c({
2513             STORE_NUMERIC_LOCAL_SET_STANDARD();
2514             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2515                           PTR2UV(sv), SvNVX(sv));
2516             RESTORE_NUMERIC_LOCAL();
2517         });
2518 #endif
2519     }
2520     else if (SvTYPE(sv) < SVt_PVNV)
2521         sv_upgrade(sv, SVt_PVNV);
2522     if (SvNOKp(sv)) {
2523         return SvNVX(sv);
2524     }
2525     if (SvIOKp(sv)) {
2526         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2527 #ifdef NV_PRESERVES_UV
2528         if (SvIOK(sv))
2529             SvNOK_on(sv);
2530         else
2531             SvNOKp_on(sv);
2532 #else
2533         /* Only set the public NV OK flag if this NV preserves the IV  */
2534         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2535         if (SvIOK(sv) &&
2536             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2537                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2538             SvNOK_on(sv);
2539         else
2540             SvNOKp_on(sv);
2541 #endif
2542     }
2543     else if (SvPOKp(sv) && SvLEN(sv)) {
2544         UV value;
2545         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2546         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2547             not_a_number(sv);
2548 #ifdef NV_PRESERVES_UV
2549         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2550             == IS_NUMBER_IN_UV) {
2551             /* It's definitely an integer */
2552             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2553         } else
2554             SvNV_set(sv, Atof(SvPVX_const(sv)));
2555         if (numtype)
2556             SvNOK_on(sv);
2557         else
2558             SvNOKp_on(sv);
2559 #else
2560         SvNV_set(sv, Atof(SvPVX_const(sv)));
2561         /* Only set the public NV OK flag if this NV preserves the value in
2562            the PV at least as well as an IV/UV would.
2563            Not sure how to do this 100% reliably. */
2564         /* if that shift count is out of range then Configure's test is
2565            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2566            UV_BITS */
2567         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2568             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2569             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2570         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2571             /* Can't use strtol etc to convert this string, so don't try.
2572                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2573             SvNOK_on(sv);
2574         } else {
2575             /* value has been set.  It may not be precise.  */
2576             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2577                 /* 2s complement assumption for (UV)IV_MIN  */
2578                 SvNOK_on(sv); /* Integer is too negative.  */
2579             } else {
2580                 SvNOKp_on(sv);
2581                 SvIOKp_on(sv);
2582
2583                 if (numtype & IS_NUMBER_NEG) {
2584                     SvIV_set(sv, -(IV)value);
2585                 } else if (value <= (UV)IV_MAX) {
2586                     SvIV_set(sv, (IV)value);
2587                 } else {
2588                     SvUV_set(sv, value);
2589                     SvIsUV_on(sv);
2590                 }
2591
2592                 if (numtype & IS_NUMBER_NOT_INT) {
2593                     /* I believe that even if the original PV had decimals,
2594                        they are lost beyond the limit of the FP precision.
2595                        However, neither is canonical, so both only get p
2596                        flags.  NWC, 2000/11/25 */
2597                     /* Both already have p flags, so do nothing */
2598                 } else {
2599                     const NV nv = SvNVX(sv);
2600                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2601                         if (SvIVX(sv) == I_V(nv)) {
2602                             SvNOK_on(sv);
2603                         } else {
2604                             /* It had no "." so it must be integer.  */
2605                         }
2606                         SvIOK_on(sv);
2607                     } else {
2608                         /* between IV_MAX and NV(UV_MAX).
2609                            Could be slightly > UV_MAX */
2610
2611                         if (numtype & IS_NUMBER_NOT_INT) {
2612                             /* UV and NV both imprecise.  */
2613                         } else {
2614                             const UV nv_as_uv = U_V(nv);
2615
2616                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2617                                 SvNOK_on(sv);
2618                             }
2619                             SvIOK_on(sv);
2620                         }
2621                     }
2622                 }
2623             }
2624         }
2625         /* It might be more code efficient to go through the entire logic above
2626            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2627            gets complex and potentially buggy, so more programmer efficient
2628            to do it this way, by turning off the public flags:  */
2629         if (!numtype)
2630             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2631 #endif /* NV_PRESERVES_UV */
2632     }
2633     else  {
2634         if (isGV_with_GP(sv)) {
2635             glob_2number(MUTABLE_GV(sv));
2636             return 0.0;
2637         }
2638
2639         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2640             report_uninit(sv);
2641         assert (SvTYPE(sv) >= SVt_NV);
2642         /* Typically the caller expects that sv_any is not NULL now.  */
2643         /* XXX Ilya implies that this is a bug in callers that assume this
2644            and ideally should be fixed.  */
2645         return 0.0;
2646     }
2647 #if defined(USE_LONG_DOUBLE)
2648     DEBUG_c({
2649         STORE_NUMERIC_LOCAL_SET_STANDARD();
2650         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2651                       PTR2UV(sv), SvNVX(sv));
2652         RESTORE_NUMERIC_LOCAL();
2653     });
2654 #else
2655     DEBUG_c({
2656         STORE_NUMERIC_LOCAL_SET_STANDARD();
2657         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2658                       PTR2UV(sv), SvNVX(sv));
2659         RESTORE_NUMERIC_LOCAL();
2660     });
2661 #endif
2662     return SvNVX(sv);
2663 }
2664
2665 /*
2666 =for apidoc sv_2num
2667
2668 Return an SV with the numeric value of the source SV, doing any necessary
2669 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2670 access this function.
2671
2672 =cut
2673 */
2674
2675 SV *
2676 Perl_sv_2num(pTHX_ register SV *const sv)
2677 {
2678     PERL_ARGS_ASSERT_SV_2NUM;
2679
2680     if (!SvROK(sv))
2681         return sv;
2682     if (SvAMAGIC(sv)) {
2683         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2684         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2685         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2686             return sv_2num(tmpsv);
2687     }
2688     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2689 }
2690
2691 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2692  * UV as a string towards the end of buf, and return pointers to start and
2693  * end of it.
2694  *
2695  * We assume that buf is at least TYPE_CHARS(UV) long.
2696  */
2697
2698 static char *
2699 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2700 {
2701     char *ptr = buf + TYPE_CHARS(UV);
2702     char * const ebuf = ptr;
2703     int sign;
2704
2705     PERL_ARGS_ASSERT_UIV_2BUF;
2706
2707     if (is_uv)
2708         sign = 0;
2709     else if (iv >= 0) {
2710         uv = iv;
2711         sign = 0;
2712     } else {
2713         uv = -iv;
2714         sign = 1;
2715     }
2716     do {
2717         *--ptr = '0' + (char)(uv % 10);
2718     } while (uv /= 10);
2719     if (sign)
2720         *--ptr = '-';
2721     *peob = ebuf;
2722     return ptr;
2723 }
2724
2725 /*
2726 =for apidoc sv_2pv_flags
2727
2728 Returns a pointer to the string value of an SV, and sets *lp to its length.
2729 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2730 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2731 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2732
2733 =cut
2734 */
2735
2736 char *
2737 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2738 {
2739     dVAR;
2740     register char *s;
2741
2742     if (!sv) {
2743         if (lp)
2744             *lp = 0;
2745         return (char *)"";
2746     }
2747     if (SvGMAGICAL(sv)) {
2748         if (flags & SV_GMAGIC)
2749             mg_get(sv);
2750         if (SvPOKp(sv)) {
2751             if (lp)
2752                 *lp = SvCUR(sv);
2753             if (flags & SV_MUTABLE_RETURN)
2754                 return SvPVX_mutable(sv);
2755             if (flags & SV_CONST_RETURN)
2756                 return (char *)SvPVX_const(sv);
2757             return SvPVX(sv);
2758         }
2759         if (SvIOKp(sv) || SvNOKp(sv)) {
2760             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2761             STRLEN len;
2762
2763             if (SvIOKp(sv)) {
2764                 len = SvIsUV(sv)
2765                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2766                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2767             } else if(SvNVX(sv) == 0.0) {
2768                     tbuf[0] = '0';
2769                     tbuf[1] = 0;
2770                     len = 1;
2771             } else {
2772                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2773                 len = strlen(tbuf);
2774             }
2775             assert(!SvROK(sv));
2776             {
2777                 dVAR;
2778
2779                 SvUPGRADE(sv, SVt_PV);
2780                 if (lp)
2781                     *lp = len;
2782                 s = SvGROW_mutable(sv, len + 1);
2783                 SvCUR_set(sv, len);
2784                 SvPOKp_on(sv);
2785                 return (char*)memcpy(s, tbuf, len + 1);
2786             }
2787         }
2788         if (SvROK(sv)) {
2789             goto return_rok;
2790         }
2791         assert(SvTYPE(sv) >= SVt_PVMG);
2792         /* This falls through to the report_uninit near the end of the
2793            function. */
2794     } else if (SvTHINKFIRST(sv)) {
2795         if (SvROK(sv)) {
2796         return_rok:
2797             if (SvAMAGIC(sv)) {
2798                 SV *tmpstr;
2799                 if (flags & SV_SKIP_OVERLOAD)
2800                     return NULL;
2801                 tmpstr = AMG_CALLunary(sv, string_amg);
2802                 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2803                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2804                     /* Unwrap this:  */
2805                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2806                      */
2807
2808                     char *pv;
2809                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2810                         if (flags & SV_CONST_RETURN) {
2811                             pv = (char *) SvPVX_const(tmpstr);
2812                         } else {
2813                             pv = (flags & SV_MUTABLE_RETURN)
2814                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2815                         }
2816                         if (lp)
2817                             *lp = SvCUR(tmpstr);
2818                     } else {
2819                         pv = sv_2pv_flags(tmpstr, lp, flags);
2820                     }
2821                     if (SvUTF8(tmpstr))
2822                         SvUTF8_on(sv);
2823                     else
2824                         SvUTF8_off(sv);
2825                     return pv;
2826                 }
2827             }
2828             {
2829                 STRLEN len;
2830                 char *retval;
2831                 char *buffer;
2832                 SV *const referent = SvRV(sv);
2833
2834                 if (!referent) {
2835                     len = 7;
2836                     retval = buffer = savepvn("NULLREF", len);
2837                 } else if (SvTYPE(referent) == SVt_REGEXP && (
2838                               !(PL_curcop->cop_hints & HINT_NO_AMAGIC)
2839                            || amagic_is_enabled(string_amg)
2840                           )) {
2841                     REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2842
2843                     assert(re);
2844                         
2845                     /* If the regex is UTF-8 we want the containing scalar to
2846                        have an UTF-8 flag too */
2847                     if (RX_UTF8(re))
2848                         SvUTF8_on(sv);
2849                     else
2850                         SvUTF8_off(sv); 
2851
2852                     if (lp)
2853                         *lp = RX_WRAPLEN(re);
2854  
2855                     return RX_WRAPPED(re);
2856                 } else {
2857                     const char *const typestr = sv_reftype(referent, 0);
2858                     const STRLEN typelen = strlen(typestr);
2859                     UV addr = PTR2UV(referent);
2860                     const char *stashname = NULL;
2861                     STRLEN stashnamelen = 0; /* hush, gcc */
2862                     const char *buffer_end;
2863
2864                     if (SvOBJECT(referent)) {
2865                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2866
2867                         if (name) {
2868                             stashname = HEK_KEY(name);
2869                             stashnamelen = HEK_LEN(name);
2870
2871                             if (HEK_UTF8(name)) {
2872                                 SvUTF8_on(sv);
2873                             } else {
2874                                 SvUTF8_off(sv);
2875                             }
2876                         } else {
2877                             stashname = "__ANON__";
2878                             stashnamelen = 8;
2879                         }
2880                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2881                             + 2 * sizeof(UV) + 2 /* )\0 */;
2882                     } else {
2883                         len = typelen + 3 /* (0x */
2884                             + 2 * sizeof(UV) + 2 /* )\0 */;
2885                     }
2886
2887                     Newx(buffer, len, char);
2888                     buffer_end = retval = buffer + len;
2889
2890                     /* Working backwards  */
2891                     *--retval = '\0';
2892                     *--retval = ')';
2893                     do {
2894                         *--retval = PL_hexdigit[addr & 15];
2895                     } while (addr >>= 4);
2896                     *--retval = 'x';
2897                     *--retval = '0';
2898                     *--retval = '(';
2899
2900                     retval -= typelen;
2901                     memcpy(retval, typestr, typelen);
2902
2903                     if (stashname) {
2904                         *--retval = '=';
2905                         retval -= stashnamelen;
2906                         memcpy(retval, stashname, stashnamelen);
2907                     }
2908                     /* retval may not necessarily have reached the start of the
2909                        buffer here.  */
2910                     assert (retval >= buffer);
2911
2912                     len = buffer_end - retval - 1; /* -1 for that \0  */
2913                 }
2914                 if (lp)
2915                     *lp = len;
2916                 SAVEFREEPV(buffer);
2917                 return retval;
2918             }
2919         }
2920         if (SvREADONLY(sv) && !SvOK(sv)) {
2921             if (lp)
2922                 *lp = 0;
2923             if (flags & SV_UNDEF_RETURNS_NULL)
2924                 return NULL;
2925             if (ckWARN(WARN_UNINITIALIZED))
2926                 report_uninit(sv);
2927             return (char *)"";
2928         }
2929     }
2930     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2931         /* I'm assuming that if both IV and NV are equally valid then
2932            converting the IV is going to be more efficient */
2933         const U32 isUIOK = SvIsUV(sv);
2934         char buf[TYPE_CHARS(UV)];
2935         char *ebuf, *ptr;
2936         STRLEN len;
2937
2938         if (SvTYPE(sv) < SVt_PVIV)
2939             sv_upgrade(sv, SVt_PVIV);
2940         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2941         len = ebuf - ptr;
2942         /* inlined from sv_setpvn */
2943         s = SvGROW_mutable(sv, len + 1);
2944         Move(ptr, s, len, char);
2945         s += len;
2946         *s = '\0';
2947     }
2948     else if (SvNOKp(sv)) {
2949         if (SvTYPE(sv) < SVt_PVNV)
2950             sv_upgrade(sv, SVt_PVNV);
2951         if (SvNVX(sv) == 0.0) {
2952             s = SvGROW_mutable(sv, 2);
2953             *s++ = '0';
2954             *s = '\0';
2955         } else {
2956             dSAVE_ERRNO;
2957             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2958             s = SvGROW_mutable(sv, NV_DIG + 20);
2959             /* some Xenix systems wipe out errno here */
2960             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2961             RESTORE_ERRNO;
2962             while (*s) s++;
2963         }
2964 #ifdef hcx
2965         if (s[-1] == '.')
2966             *--s = '\0';
2967 #endif
2968     }
2969     else {
2970         if (isGV_with_GP(sv)) {
2971             GV *const gv = MUTABLE_GV(sv);
2972             SV *const buffer = sv_newmortal();
2973
2974             gv_efullname3(buffer, gv, "*");
2975
2976             assert(SvPOK(buffer));
2977             if (lp) {
2978                     *lp = SvCUR(buffer);
2979             }
2980             if ( SvUTF8(buffer) ) SvUTF8_on(sv);
2981             return SvPVX(buffer);
2982         }
2983
2984         if (lp)
2985             *lp = 0;
2986         if (flags & SV_UNDEF_RETURNS_NULL)
2987             return NULL;
2988         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2989             report_uninit(sv);
2990         if (SvTYPE(sv) < SVt_PV)
2991             /* Typically the caller expects that sv_any is not NULL now.  */
2992             sv_upgrade(sv, SVt_PV);
2993         return (char *)"";
2994     }
2995     {
2996         const STRLEN len = s - SvPVX_const(sv);
2997         if (lp) 
2998             *lp = len;
2999         SvCUR_set(sv, len);
3000     }
3001     SvPOK_on(sv);
3002     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3003                           PTR2UV(sv),SvPVX_const(sv)));
3004     if (flags & SV_CONST_RETURN)
3005         return (char *)SvPVX_const(sv);
3006     if (flags & SV_MUTABLE_RETURN)
3007         return SvPVX_mutable(sv);
3008     return SvPVX(sv);
3009 }
3010
3011 /*
3012 =for apidoc sv_copypv
3013
3014 Copies a stringified representation of the source SV into the
3015 destination SV.  Automatically performs any necessary mg_get and
3016 coercion of numeric values into strings.  Guaranteed to preserve
3017 UTF8 flag even from overloaded objects.  Similar in nature to
3018 sv_2pv[_flags] but operates directly on an SV instead of just the
3019 string.  Mostly uses sv_2pv_flags to do its work, except when that
3020 would lose the UTF-8'ness of the PV.
3021
3022 =cut
3023 */
3024
3025 void
3026 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3027 {
3028     STRLEN len;
3029     const char * const s = SvPV_const(ssv,len);
3030
3031     PERL_ARGS_ASSERT_SV_COPYPV;
3032
3033     sv_setpvn(dsv,s,len);
3034     if (SvUTF8(ssv))
3035         SvUTF8_on(dsv);
3036     else
3037         SvUTF8_off(dsv);
3038 }
3039
3040 /*
3041 =for apidoc sv_2pvbyte
3042
3043 Return a pointer to the byte-encoded representation of the SV, and set *lp
3044 to its length.  May cause the SV to be downgraded from UTF-8 as a
3045 side-effect.
3046
3047 Usually accessed via the C<SvPVbyte> macro.
3048
3049 =cut
3050 */
3051
3052 char *
3053 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *const lp)
3054 {
3055     PERL_ARGS_ASSERT_SV_2PVBYTE;
3056
3057     if ((SvTHINKFIRST(sv) && !SvIsCOW(sv)) || isGV_with_GP(sv)) {
3058         SV *sv2 = sv_newmortal();
3059         sv_copypv(sv2,sv);
3060         sv = sv2;
3061     }
3062     else SvGETMAGIC(sv);
3063     sv_utf8_downgrade(sv,0);
3064     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3065 }
3066
3067 /*
3068 =for apidoc sv_2pvutf8
3069
3070 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3071 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3072
3073 Usually accessed via the C<SvPVutf8> macro.
3074
3075 =cut
3076 */
3077
3078 char *
3079 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *const lp)
3080 {
3081     PERL_ARGS_ASSERT_SV_2PVUTF8;
3082
3083     if ((SvTHINKFIRST(sv) && !SvIsCOW(sv)) || isGV_with_GP(sv))
3084         sv = sv_mortalcopy(sv);
3085     sv_utf8_upgrade(sv);
3086     if (SvGMAGICAL(sv)) SvFLAGS(sv) &= ~SVf_POK;
3087     assert(SvPOKp(sv));
3088     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3089 }
3090
3091
3092 /*
3093 =for apidoc sv_2bool
3094
3095 This macro is only used by sv_true() or its macro equivalent, and only if
3096 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3097 It calls sv_2bool_flags with the SV_GMAGIC flag.
3098
3099 =for apidoc sv_2bool_flags
3100
3101 This function is only used by sv_true() and friends,  and only if
3102 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3103 contain SV_GMAGIC, then it does an mg_get() first.
3104
3105
3106 =cut
3107 */
3108
3109 bool
3110 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3111 {
3112     dVAR;
3113
3114     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3115
3116     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3117
3118     if (!SvOK(sv))
3119         return 0;
3120     if (SvROK(sv)) {
3121         if (SvAMAGIC(sv)) {
3122             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3123             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3124                 return cBOOL(SvTRUE(tmpsv));
3125         }
3126         return SvRV(sv) != 0;
3127     }
3128     if (SvPOKp(sv)) {
3129         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3130         if (Xpvtmp &&
3131                 (*sv->sv_u.svu_pv > '0' ||
3132                 Xpvtmp->xpv_cur > 1 ||
3133                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3134             return 1;
3135         else
3136             return 0;
3137     }
3138     else {
3139         if (SvIOKp(sv))
3140             return SvIVX(sv) != 0;
3141         else {
3142             if (SvNOKp(sv))
3143                 return SvNVX(sv) != 0.0;
3144             else {
3145                 if (isGV_with_GP(sv))
3146                     return TRUE;
3147                 else
3148                     return FALSE;
3149             }
3150         }
3151     }
3152 }
3153
3154 /*
3155 =for apidoc sv_utf8_upgrade
3156
3157 Converts the PV of an SV to its UTF-8-encoded form.
3158 Forces the SV to string form if it is not already.
3159 Will C<mg_get> on C<sv> if appropriate.
3160 Always sets the SvUTF8 flag to avoid future validity checks even
3161 if the whole string is the same in UTF-8 as not.
3162 Returns the number of bytes in the converted string
3163
3164 This is not as a general purpose byte encoding to Unicode interface:
3165 use the Encode extension for that.
3166
3167 =for apidoc sv_utf8_upgrade_nomg
3168
3169 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3170
3171 =for apidoc sv_utf8_upgrade_flags
3172
3173 Converts the PV of an SV to its UTF-8-encoded form.
3174 Forces the SV to string form if it is not already.
3175 Always sets the SvUTF8 flag to avoid future validity checks even
3176 if all the bytes are invariant in UTF-8.
3177 If C<flags> has C<SV_GMAGIC> bit set,
3178 will C<mg_get> on C<sv> if appropriate, else not.
3179 Returns the number of bytes in the converted string
3180 C<sv_utf8_upgrade> and
3181 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3182
3183 This is not as a general purpose byte encoding to Unicode interface:
3184 use the Encode extension for that.
3185
3186 =cut
3187
3188 The grow version is currently not externally documented.  It adds a parameter,
3189 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3190 have free after it upon return.  This allows the caller to reserve extra space
3191 that it intends to fill, to avoid extra grows.
3192
3193 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3194 which can be used to tell this function to not first check to see if there are
3195 any characters that are different in UTF-8 (variant characters) which would
3196 force it to allocate a new string to sv, but to assume there are.  Typically
3197 this flag is used by a routine that has already parsed the string to find that
3198 there are such characters, and passes this information on so that the work
3199 doesn't have to be repeated.
3200
3201 (One might think that the calling routine could pass in the position of the
3202 first such variant, so it wouldn't have to be found again.  But that is not the
3203 case, because typically when the caller is likely to use this flag, it won't be
3204 calling this routine unless it finds something that won't fit into a byte.
3205 Otherwise it tries to not upgrade and just use bytes.  But some things that
3206 do fit into a byte are variants in utf8, and the caller may not have been
3207 keeping track of these.)
3208
3209 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3210 isn't guaranteed due to having other routines do the work in some input cases,
3211 or if the input is already flagged as being in utf8.
3212
3213 The speed of this could perhaps be improved for many cases if someone wanted to
3214 write a fast function that counts the number of variant characters in a string,
3215 especially if it could return the position of the first one.
3216
3217 */
3218
3219 STRLEN
3220 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3221 {
3222     dVAR;
3223
3224     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3225
3226     if (sv == &PL_sv_undef)
3227         return 0;
3228     if (!SvPOK(sv)) {
3229         STRLEN len = 0;
3230         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3231             (void) sv_2pv_flags(sv,&len, flags);
3232             if (SvUTF8(sv)) {
3233                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3234                 return len;
3235             }
3236         } else {
3237             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3238         }
3239     }
3240
3241     if (SvUTF8(sv)) {
3242         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3243         return SvCUR(sv);
3244     }
3245
3246     if (SvIsCOW(sv)) {
3247         sv_force_normal_flags(sv, 0);
3248     }
3249
3250     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3251         sv_recode_to_utf8(sv, PL_encoding);
3252         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3253         return SvCUR(sv);
3254     }
3255
3256     if (SvCUR(sv) == 0) {
3257         if (extra) SvGROW(sv, extra);
3258     } else { /* Assume Latin-1/EBCDIC */
3259         /* This function could be much more efficient if we
3260          * had a FLAG in SVs to signal if there are any variant
3261          * chars in the PV.  Given that there isn't such a flag
3262          * make the loop as fast as possible (although there are certainly ways
3263          * to speed this up, eg. through vectorization) */
3264         U8 * s = (U8 *) SvPVX_const(sv);
3265         U8 * e = (U8 *) SvEND(sv);
3266         U8 *t = s;
3267         STRLEN two_byte_count = 0;
3268         
3269         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3270
3271         /* See if really will need to convert to utf8.  We mustn't rely on our
3272          * incoming SV being well formed and having a trailing '\0', as certain
3273          * code in pp_formline can send us partially built SVs. */
3274
3275         while (t < e) {
3276             const U8 ch = *t++;
3277             if (NATIVE_IS_INVARIANT(ch)) continue;
3278
3279             t--;    /* t already incremented; re-point to first variant */
3280             two_byte_count = 1;
3281             goto must_be_utf8;
3282         }
3283
3284         /* utf8 conversion not needed because all are invariants.  Mark as
3285          * UTF-8 even if no variant - saves scanning loop */
3286         SvUTF8_on(sv);
3287         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3288         return SvCUR(sv);
3289
3290 must_be_utf8:
3291
3292         /* Here, the string should be converted to utf8, either because of an
3293          * input flag (two_byte_count = 0), or because a character that
3294          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3295          * the beginning of the string (if we didn't examine anything), or to
3296          * the first variant.  In either case, everything from s to t - 1 will
3297          * occupy only 1 byte each on output.
3298          *
3299          * There are two main ways to convert.  One is to create a new string
3300          * and go through the input starting from the beginning, appending each
3301          * converted value onto the new string as we go along.  It's probably
3302          * best to allocate enough space in the string for the worst possible
3303          * case rather than possibly running out of space and having to
3304          * reallocate and then copy what we've done so far.  Since everything
3305          * from s to t - 1 is invariant, the destination can be initialized
3306          * with these using a fast memory copy
3307          *
3308          * The other way is to figure out exactly how big the string should be
3309          * by parsing the entire input.  Then you don't have to make it big
3310          * enough to handle the worst possible case, and more importantly, if
3311          * the string you already have is large enough, you don't have to
3312          * allocate a new string, you can copy the last character in the input
3313          * string to the final position(s) that will be occupied by the
3314          * converted string and go backwards, stopping at t, since everything
3315          * before that is invariant.
3316          *
3317          * There are advantages and disadvantages to each method.
3318          *
3319          * In the first method, we can allocate a new string, do the memory
3320          * copy from the s to t - 1, and then proceed through the rest of the
3321          * string byte-by-byte.
3322          *
3323          * In the second method, we proceed through the rest of the input
3324          * string just calculating how big the converted string will be.  Then
3325          * there are two cases:
3326          *  1)  if the string has enough extra space to handle the converted
3327          *      value.  We go backwards through the string, converting until we
3328          *      get to the position we are at now, and then stop.  If this
3329          *      position is far enough along in the string, this method is
3330          *      faster than the other method.  If the memory copy were the same
3331          *      speed as the byte-by-byte loop, that position would be about
3332          *      half-way, as at the half-way mark, parsing to the end and back
3333          *      is one complete string's parse, the same amount as starting
3334          *      over and going all the way through.  Actually, it would be
3335          *      somewhat less than half-way, as it's faster to just count bytes
3336          *      than to also copy, and we don't have the overhead of allocating
3337          *      a new string, changing the scalar to use it, and freeing the
3338          *      existing one.  But if the memory copy is fast, the break-even
3339          *      point is somewhere after half way.  The counting loop could be
3340          *      sped up by vectorization, etc, to move the break-even point
3341          *      further towards the beginning.
3342          *  2)  if the string doesn't have enough space to handle the converted
3343          *      value.  A new string will have to be allocated, and one might
3344          *      as well, given that, start from the beginning doing the first
3345          *      method.  We've spent extra time parsing the string and in
3346          *      exchange all we've gotten is that we know precisely how big to
3347          *      make the new one.  Perl is more optimized for time than space,
3348          *      so this case is a loser.
3349          * So what I've decided to do is not use the 2nd method unless it is
3350          * guaranteed that a new string won't have to be allocated, assuming
3351          * the worst case.  I also decided not to put any more conditions on it
3352          * than this, for now.  It seems likely that, since the worst case is
3353          * twice as big as the unknown portion of the string (plus 1), we won't
3354          * be guaranteed enough space, causing us to go to the first method,
3355          * unless the string is short, or the first variant character is near
3356          * the end of it.  In either of these cases, it seems best to use the
3357          * 2nd method.  The only circumstance I can think of where this would
3358          * be really slower is if the string had once had much more data in it
3359          * than it does now, but there is still a substantial amount in it  */
3360
3361         {
3362             STRLEN invariant_head = t - s;
3363             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3364             if (SvLEN(sv) < size) {
3365
3366                 /* Here, have decided to allocate a new string */
3367
3368                 U8 *dst;
3369                 U8 *d;
3370
3371                 Newx(dst, size, U8);
3372
3373                 /* If no known invariants at the beginning of the input string,
3374                  * set so starts from there.  Otherwise, can use memory copy to
3375                  * get up to where we are now, and then start from here */
3376
3377                 if (invariant_head <= 0) {
3378                     d = dst;
3379                 } else {
3380                     Copy(s, dst, invariant_head, char);
3381                     d = dst + invariant_head;
3382                 }
3383
3384                 while (t < e) {
3385                     const UV uv = NATIVE8_TO_UNI(*t++);
3386                     if (UNI_IS_INVARIANT(uv))
3387                         *d++ = (U8)UNI_TO_NATIVE(uv);
3388                     else {
3389                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3390                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3391                     }
3392                 }
3393                 *d = '\0';
3394                 SvPV_free(sv); /* No longer using pre-existing string */
3395                 SvPV_set(sv, (char*)dst);
3396                 SvCUR_set(sv, d - dst);
3397                 SvLEN_set(sv, size);
3398             } else {
3399
3400                 /* Here, have decided to get the exact size of the string.
3401                  * Currently this happens only when we know that there is
3402                  * guaranteed enough space to fit the converted string, so
3403                  * don't have to worry about growing.  If two_byte_count is 0,
3404                  * then t points to the first byte of the string which hasn't
3405                  * been examined yet.  Otherwise two_byte_count is 1, and t
3406                  * points to the first byte in the string that will expand to
3407                  * two.  Depending on this, start examining at t or 1 after t.
3408                  * */
3409
3410                 U8 *d = t + two_byte_count;
3411
3412
3413                 /* Count up the remaining bytes that expand to two */
3414
3415                 while (d < e) {
3416                     const U8 chr = *d++;
3417                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3418                 }
3419
3420                 /* The string will expand by just the number of bytes that
3421                  * occupy two positions.  But we are one afterwards because of
3422                  * the increment just above.  This is the place to put the
3423                  * trailing NUL, and to set the length before we decrement */
3424
3425                 d += two_byte_count;
3426                 SvCUR_set(sv, d - s);
3427                 *d-- = '\0';
3428
3429
3430                 /* Having decremented d, it points to the position to put the
3431                  * very last byte of the expanded string.  Go backwards through
3432                  * the string, copying and expanding as we go, stopping when we
3433                  * get to the part that is invariant the rest of the way down */
3434
3435                 e--;
3436                 while (e >= t) {
3437                     const U8 ch = NATIVE8_TO_UNI(*e--);
3438                     if (UNI_IS_INVARIANT(ch)) {
3439                         *d-- = UNI_TO_NATIVE(ch);
3440                     } else {
3441                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3442                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3443                     }
3444                 }
3445             }
3446
3447             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3448                 /* Update pos. We do it at the end rather than during
3449                  * the upgrade, to avoid slowing down the common case
3450                  * (upgrade without pos) */
3451                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3452                 if (mg) {
3453                     I32 pos = mg->mg_len;
3454                     if (pos > 0 && (U32)pos > invariant_head) {
3455                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3456                         STRLEN n = (U32)pos - invariant_head;
3457                         while (n > 0) {
3458                             if (UTF8_IS_START(*d))
3459                                 d++;
3460                             d++;
3461                             n--;
3462                         }
3463                         mg->mg_len  = d - (U8*)SvPVX(sv);
3464                     }
3465                 }
3466                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3467                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3468             }
3469         }
3470     }
3471
3472     /* Mark as UTF-8 even if no variant - saves scanning loop */
3473     SvUTF8_on(sv);
3474     return SvCUR(sv);
3475 }
3476
3477 /*
3478 =for apidoc sv_utf8_downgrade
3479
3480 Attempts to convert the PV of an SV from characters to bytes.
3481 If the PV contains a character that cannot fit
3482 in a byte, this conversion will fail;
3483 in this case, either returns false or, if C<fail_ok> is not
3484 true, croaks.
3485
3486 This is not as a general purpose Unicode to byte encoding interface:
3487 use the Encode extension for that.
3488
3489 =cut
3490 */
3491
3492 bool
3493 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3494 {
3495     dVAR;
3496
3497     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3498
3499     if (SvPOKp(sv) && SvUTF8(sv)) {
3500         if (SvCUR(sv)) {
3501             U8 *s;
3502             STRLEN len;
3503             int mg_flags = SV_GMAGIC;
3504
3505             if (SvIsCOW(sv)) {
3506                 sv_force_normal_flags(sv, 0);
3507             }
3508             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3509                 /* update pos */
3510                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3511                 if (mg) {
3512                     I32 pos = mg->mg_len;
3513                     if (pos > 0) {
3514                         sv_pos_b2u(sv, &pos);
3515                         mg_flags = 0; /* sv_pos_b2u does get magic */
3516                         mg->mg_len  = pos;
3517                     }
3518                 }
3519                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3520                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3521
3522             }
3523             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3524
3525             if (!utf8_to_bytes(s, &len)) {
3526                 if (fail_ok)
3527                     return FALSE;
3528                 else {
3529                     if (PL_op)
3530                         Perl_croak(aTHX_ "Wide character in %s",
3531                                    OP_DESC(PL_op));
3532                     else
3533                         Perl_croak(aTHX_ "Wide character");
3534                 }
3535             }
3536             SvCUR_set(sv, len);
3537         }
3538     }
3539     SvUTF8_off(sv);
3540     return TRUE;
3541 }
3542
3543 /*
3544 =for apidoc sv_utf8_encode
3545
3546 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3547 flag off so that it looks like octets again.
3548
3549 =cut
3550 */
3551
3552 void
3553 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3554 {
3555     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3556
3557     if (SvREADONLY(sv)) {
3558         sv_force_normal_flags(sv, 0);
3559     }
3560     (void) sv_utf8_upgrade(sv);
3561     SvUTF8_off(sv);
3562 }
3563
3564 /*
3565 =for apidoc sv_utf8_decode
3566
3567 If the PV of the SV is an octet sequence in UTF-8
3568 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3569 so that it looks like a character.  If the PV contains only single-byte
3570 characters, the C<SvUTF8> flag stays off.
3571 Scans PV for validity and returns false if the PV is invalid UTF-8.
3572
3573 =cut
3574 */
3575
3576 bool
3577 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3578 {
3579     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3580
3581     if (SvPOKp(sv)) {
3582         const U8 *start, *c;
3583         const U8 *e;
3584
3585         /* The octets may have got themselves encoded - get them back as
3586          * bytes
3587          */
3588         if (!sv_utf8_downgrade(sv, TRUE))
3589             return FALSE;
3590
3591         /* it is actually just a matter of turning the utf8 flag on, but
3592          * we want to make sure everything inside is valid utf8 first.
3593          */
3594         c = start = (const U8 *) SvPVX_const(sv);
3595         if (!is_utf8_string(c, SvCUR(sv)))
3596             return FALSE;
3597         e = (const U8 *) SvEND(sv);
3598         while (c < e) {
3599             const U8 ch = *c++;
3600             if (!UTF8_IS_INVARIANT(ch)) {
3601                 SvUTF8_on(sv);
3602                 break;
3603             }
3604         }
3605         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3606             /* adjust pos to the start of a UTF8 char sequence */
3607             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3608             if (mg) {
3609                 I32 pos = mg->mg_len;
3610                 if (pos > 0) {
3611                     for (c = start + pos; c > start; c--) {
3612                         if (UTF8_IS_START(*c))
3613                             break;
3614                     }
3615                     mg->mg_len  = c - start;
3616                 }
3617             }
3618             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3619                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3620         }
3621     }
3622     return TRUE;
3623 }
3624
3625 /*
3626 =for apidoc sv_setsv
3627
3628 Copies the contents of the source SV C<ssv> into the destination SV
3629 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3630 function if the source SV needs to be reused.  Does not handle 'set' magic.
3631 Loosely speaking, it performs a copy-by-value, obliterating any previous
3632 content of the destination.
3633
3634 You probably want to use one of the assortment of wrappers, such as
3635 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3636 C<SvSetMagicSV_nosteal>.
3637
3638 =for apidoc sv_setsv_flags
3639
3640 Copies the contents of the source SV C<ssv> into the destination SV
3641 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3642 function if the source SV needs to be reused.  Does not handle 'set' magic.
3643 Loosely speaking, it performs a copy-by-value, obliterating any previous
3644 content of the destination.
3645 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3646 C<ssv> if appropriate, else not.  If the C<flags>
3647 parameter has the C<NOSTEAL> bit set then the
3648 buffers of temps will not be stolen.  <sv_setsv>
3649 and C<sv_setsv_nomg> are implemented in terms of this function.
3650
3651 You probably want to use one of the assortment of wrappers, such as
3652 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3653 C<SvSetMagicSV_nosteal>.
3654
3655 This is the primary function for copying scalars, and most other
3656 copy-ish functions and macros use this underneath.
3657
3658 =cut
3659 */
3660
3661 static void
3662 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3663 {
3664     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3665     HV *old_stash = NULL;
3666
3667     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3668
3669     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3670         const char * const name = GvNAME(sstr);
3671         const STRLEN len = GvNAMELEN(sstr);
3672         {
3673             if (dtype >= SVt_PV) {
3674                 SvPV_free(dstr);
3675                 SvPV_set(dstr, 0);
3676                 SvLEN_set(dstr, 0);
3677                 SvCUR_set(dstr, 0);
3678             }
3679             SvUPGRADE(dstr, SVt_PVGV);
3680             (void)SvOK_off(dstr);
3681             /* We have to turn this on here, even though we turn it off
3682                below, as GvSTASH will fail an assertion otherwise. */
3683             isGV_with_GP_on(dstr);
3684         }
3685         GvSTASH(dstr) = GvSTASH(sstr);
3686         if (GvSTASH(dstr))
3687             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3688         gv_name_set(MUTABLE_GV(dstr), name, len,
3689                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3690         SvFAKE_on(dstr);        /* can coerce to non-glob */
3691     }
3692
3693     if(GvGP(MUTABLE_GV(sstr))) {
3694         /* If source has method cache entry, clear it */
3695         if(GvCVGEN(sstr)) {
3696             SvREFCNT_dec(GvCV(sstr));
3697             GvCV_set(sstr, NULL);
3698             GvCVGEN(sstr) = 0;
3699         }
3700         /* If source has a real method, then a method is
3701            going to change */
3702         else if(
3703          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3704         ) {
3705             mro_changes = 1;
3706         }
3707     }
3708
3709     /* If dest already had a real method, that's a change as well */
3710     if(
3711         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3712      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3713     ) {
3714         mro_changes = 1;
3715     }
3716
3717     /* We don't need to check the name of the destination if it was not a
3718        glob to begin with. */
3719     if(dtype == SVt_PVGV) {
3720         const char * const name = GvNAME((const GV *)dstr);
3721         if(
3722             strEQ(name,"ISA")
3723          /* The stash may have been detached from the symbol table, so
3724             check its name. */
3725          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3726          && GvAV((const GV *)sstr)
3727         )
3728             mro_changes = 2;
3729         else {
3730             const STRLEN len = GvNAMELEN(dstr);
3731             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3732              || (len == 1 && name[0] == ':')) {
3733                 mro_changes = 3;
3734
3735                 /* Set aside the old stash, so we can reset isa caches on
3736                    its subclasses. */
3737                 if((old_stash = GvHV(dstr)))
3738                     /* Make sure we do not lose it early. */
3739                     SvREFCNT_inc_simple_void_NN(
3740                      sv_2mortal((SV *)old_stash)
3741                     );
3742             }
3743         }
3744     }
3745
3746     gp_free(MUTABLE_GV(dstr));
3747     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3748     (void)SvOK_off(dstr);
3749     isGV_with_GP_on(dstr);
3750     GvINTRO_off(dstr);          /* one-shot flag */
3751     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3752     if (SvTAINTED(sstr))
3753         SvTAINT(dstr);
3754     if (GvIMPORTED(dstr) != GVf_IMPORTED
3755         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3756         {
3757             GvIMPORTED_on(dstr);
3758         }
3759     GvMULTI_on(dstr);
3760     if(mro_changes == 2) {
3761         MAGIC *mg;
3762         SV * const sref = (SV *)GvAV((const GV *)dstr);
3763         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3764             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3765                 AV * const ary = newAV();
3766                 av_push(ary, mg->mg_obj); /* takes the refcount */
3767                 mg->mg_obj = (SV *)ary;
3768             }
3769             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3770         }
3771         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3772         mro_isa_changed_in(GvSTASH(dstr));
3773     }
3774     else if(mro_changes == 3) {
3775         HV * const stash = GvHV(dstr);
3776         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3777             mro_package_moved(
3778                 stash, old_stash,
3779                 (GV *)dstr, 0
3780             );
3781     }
3782     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3783     return;
3784 }
3785
3786 static void
3787 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3788 {
3789     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3790     SV *dref = NULL;
3791     const int intro = GvINTRO(dstr);
3792     SV **location;
3793     U8 import_flag = 0;
3794     const U32 stype = SvTYPE(sref);
3795
3796     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3797
3798     if (intro) {
3799         GvINTRO_off(dstr);      /* one-shot flag */
3800         GvLINE(dstr) = CopLINE(PL_curcop);
3801         GvEGV(dstr) = MUTABLE_GV(dstr);
3802     }
3803     GvMULTI_on(dstr);
3804     switch (stype) {
3805     case SVt_PVCV:
3806         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3807         import_flag = GVf_IMPORTED_CV;
3808         goto common;
3809     case SVt_PVHV:
3810         location = (SV **) &GvHV(dstr);
3811         import_flag = GVf_IMPORTED_HV;
3812         goto common;
3813     case SVt_PVAV:
3814         location = (SV **) &GvAV(dstr);
3815         import_flag = GVf_IMPORTED_AV;
3816         goto common;
3817     case SVt_PVIO:
3818         location = (SV **) &GvIOp(dstr);
3819         goto common;
3820     case SVt_PVFM:
3821         location = (SV **) &GvFORM(dstr);
3822         goto common;
3823     default:
3824         location = &GvSV(dstr);
3825         import_flag = GVf_IMPORTED_SV;
3826     common:
3827         if (intro) {
3828             if (stype == SVt_PVCV) {
3829                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3830                 if (GvCVGEN(dstr)) {
3831                     SvREFCNT_dec(GvCV(dstr));
3832                     GvCV_set(dstr, NULL);
3833                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3834                 }
3835             }
3836             SAVEGENERICSV(*location);
3837         }
3838         else
3839             dref = *location;
3840         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3841             CV* const cv = MUTABLE_CV(*location);
3842             if (cv) {
3843                 if (!GvCVGEN((const GV *)dstr) &&
3844                     (CvROOT(cv) || CvXSUB(cv)) &&
3845                     /* redundant check that avoids creating the extra SV
3846                        most of the time: */
3847                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3848                     {
3849                         SV * const new_const_sv =
3850                             CvCONST((const CV *)sref)
3851                                  ? cv_const_sv((const CV *)sref)
3852                                  : NULL;
3853                         report_redefined_cv(
3854                            sv_2mortal(Perl_newSVpvf(aTHX_
3855                                 "%"HEKf"::%"HEKf,
3856                                 HEKfARG(
3857                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3858                                 ),
3859                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3860                            )),
3861                            cv,
3862                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3863                         );
3864                     }
3865                 if (!intro)
3866                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3867                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3868                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3869                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3870             }
3871             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3872             GvASSUMECV_on(dstr);
3873             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3874         }
3875         *location = sref;
3876         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3877             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3878             GvFLAGS(dstr) |= import_flag;
3879         }
3880         if (stype == SVt_PVHV) {
3881             const char * const name = GvNAME((GV*)dstr);
3882             const STRLEN len = GvNAMELEN(dstr);
3883             if (
3884                 (
3885                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3886                 || (len == 1 && name[0] == ':')
3887                 )
3888              && (!dref || HvENAME_get(dref))
3889             ) {
3890                 mro_package_moved(
3891                     (HV *)sref, (HV *)dref,
3892                     (GV *)dstr, 0
3893                 );
3894             }
3895         }
3896         else if (
3897             stype == SVt_PVAV && sref != dref
3898          && strEQ(GvNAME((GV*)dstr), "ISA")
3899          /* The stash may have been detached from the symbol table, so
3900             check its name before doing anything. */
3901          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3902         ) {
3903             MAGIC *mg;
3904             MAGIC * const omg = dref && SvSMAGICAL(dref)
3905                                  ? mg_find(dref, PERL_MAGIC_isa)
3906                                  : NULL;
3907             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3908                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3909                     AV * const ary = newAV();
3910                     av_push(ary, mg->mg_obj); /* takes the refcount */
3911                     mg->mg_obj = (SV *)ary;
3912                 }
3913                 if (omg) {
3914                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3915                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3916                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3917                         while (items--)
3918                             av_push(
3919                              (AV *)mg->mg_obj,
3920                              SvREFCNT_inc_simple_NN(*svp++)
3921                             );
3922                     }
3923                     else
3924                         av_push(
3925                          (AV *)mg->mg_obj,
3926                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3927                         );
3928                 }
3929                 else
3930                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3931             }
3932             else
3933             {
3934                 sv_magic(
3935                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3936                 );
3937                 mg = mg_find(sref, PERL_MAGIC_isa);
3938             }
3939             /* Since the *ISA assignment could have affected more than
3940                one stash, don't call mro_isa_changed_in directly, but let
3941                magic_clearisa do it for us, as it already has the logic for
3942                dealing with globs vs arrays of globs. */
3943             assert(mg);
3944             Perl_magic_clearisa(aTHX_ NULL, mg);
3945         }
3946         break;
3947     }
3948     SvREFCNT_dec(dref);
3949     if (SvTAINTED(sstr))
3950         SvTAINT(dstr);
3951     return;
3952 }
3953
3954 void
3955 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3956 {
3957     dVAR;
3958     register U32 sflags;
3959     register int dtype;
3960     register svtype stype;
3961
3962     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3963
3964     if (sstr == dstr)
3965         return;
3966
3967     if (SvIS_FREED(dstr)) {
3968         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3969                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3970     }
3971     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3972     if (!sstr)
3973         sstr = &PL_sv_undef;
3974     if (SvIS_FREED(sstr)) {
3975         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3976                    (void*)sstr, (void*)dstr);
3977     }
3978     stype = SvTYPE(sstr);
3979     dtype = SvTYPE(dstr);
3980
3981     if ( SvVOK(dstr) )
3982     {
3983         /* need to nuke the magic */
3984         sv_unmagic(dstr, PERL_MAGIC_vstring);
3985     }
3986
3987     /* There's a lot of redundancy below but we're going for speed here */
3988
3989     switch (stype) {
3990     case SVt_NULL:
3991       undef_sstr:
3992         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3993             (void)SvOK_off(dstr);
3994             return;
3995         }
3996         break;
3997     case SVt_IV:
3998         if (SvIOK(sstr)) {
3999             switch (dtype) {
4000             case SVt_NULL:
4001                 sv_upgrade(dstr, SVt_IV);
4002                 break;
4003             case SVt_NV:
4004             case SVt_PV:
4005                 sv_upgrade(dstr, SVt_PVIV);
4006                 break;
4007             case SVt_PVGV:
4008             case SVt_PVLV:
4009                 goto end_of_first_switch;
4010             }
4011             (void)SvIOK_only(dstr);
4012             SvIV_set(dstr,  SvIVX(sstr));
4013             if (SvIsUV(sstr))
4014                 SvIsUV_on(dstr);
4015             /* SvTAINTED can only be true if the SV has taint magic, which in
4016                turn means that the SV type is PVMG (or greater). This is the
4017                case statement for SVt_IV, so this cannot be true (whatever gcov
4018                may say).  */
4019             assert(!SvTAINTED(sstr));
4020             return;
4021         }
4022         if (!SvROK(sstr))
4023             goto undef_sstr;
4024         if (dtype < SVt_PV && dtype != SVt_IV)
4025             sv_upgrade(dstr, SVt_IV);
4026         break;
4027
4028     case SVt_NV:
4029         if (SvNOK(sstr)) {
4030             switch (dtype) {
4031             case SVt_NULL:
4032             case SVt_IV:
4033                 sv_upgrade(dstr, SVt_NV);
4034                 break;
4035             case SVt_PV:
4036             case SVt_PVIV:
4037                 sv_upgrade(dstr, SVt_PVNV);
4038                 break;
4039             case SVt_PVGV:
4040             case SVt_PVLV:
4041                 goto end_of_first_switch;
4042             }
4043             SvNV_set(dstr, SvNVX(sstr));
4044             (void)SvNOK_only(dstr);
4045             /* SvTAINTED can only be true if the SV has taint magic, which in
4046                turn means that the SV type is PVMG (or greater). This is the
4047                case statement for SVt_NV, so this cannot be true (whatever gcov
4048                may say).  */
4049             assert(!SvTAINTED(sstr));
4050             return;
4051         }
4052         goto undef_sstr;
4053
4054     case SVt_PVFM:
4055 #ifdef PERL_OLD_COPY_ON_WRITE
4056         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4057             if (dtype < SVt_PVIV)
4058                 sv_upgrade(dstr, SVt_PVIV);
4059             break;
4060         }
4061         /* Fall through */
4062 #endif
4063     case SVt_PV:
4064         if (dtype < SVt_PV)
4065             sv_upgrade(dstr, SVt_PV);
4066         break;
4067     case SVt_PVIV:
4068         if (dtype < SVt_PVIV)
4069             sv_upgrade(dstr, SVt_PVIV);
4070         break;
4071     case SVt_PVNV:
4072         if (dtype < SVt_PVNV)
4073             sv_upgrade(dstr, SVt_PVNV);
4074         break;
4075     default:
4076         {
4077         const char * const type = sv_reftype(sstr,0);
4078         if (PL_op)
4079             /* diag_listed_as: Bizarre copy of %s */
4080             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4081         else
4082             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4083         }
4084         break;
4085
4086     case SVt_REGEXP:
4087         if (dtype < SVt_REGEXP)
4088             sv_upgrade(dstr, SVt_REGEXP);
4089         break;
4090
4091         /* case SVt_BIND: */
4092     case SVt_PVLV:
4093     case SVt_PVGV:
4094     case SVt_PVMG:
4095         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4096             mg_get(sstr);
4097             if (SvTYPE(sstr) != stype)
4098                 stype = SvTYPE(sstr);
4099         }
4100         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4101                     glob_assign_glob(dstr, sstr, dtype);
4102                     return;
4103         }
4104         if (stype == SVt_PVLV)
4105             SvUPGRADE(dstr, SVt_PVNV);
4106         else
4107             SvUPGRADE(dstr, (svtype)stype);
4108     }
4109  end_of_first_switch:
4110
4111     /* dstr may have been upgraded.  */
4112     dtype = SvTYPE(dstr);
4113     sflags = SvFLAGS(sstr);
4114
4115     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
4116         /* Assigning to a subroutine sets the prototype.  */
4117         if (SvOK(sstr)) {
4118             STRLEN len;
4119             const char *const ptr = SvPV_const(sstr, len);
4120
4121             SvGROW(dstr, len + 1);
4122             Copy(ptr, SvPVX(dstr), len + 1, char);
4123             SvCUR_set(dstr, len);
4124             SvPOK_only(dstr);
4125             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4126             CvAUTOLOAD_off(dstr);
4127         } else {
4128             SvOK_off(dstr);
4129         }
4130     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4131         const char * const type = sv_reftype(dstr,0);
4132         if (PL_op)
4133             /* diag_listed_as: Cannot copy to %s */
4134             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4135         else
4136             Perl_croak(aTHX_ "Cannot copy to %s", type);
4137     } else if (sflags & SVf_ROK) {
4138         if (isGV_with_GP(dstr)
4139             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4140             sstr = SvRV(sstr);
4141             if (sstr == dstr) {
4142                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4143                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4144                 {
4145                     GvIMPORTED_on(dstr);
4146                 }
4147                 GvMULTI_on(dstr);
4148                 return;
4149             }
4150             glob_assign_glob(dstr, sstr, dtype);
4151             return;
4152         }
4153
4154         if (dtype >= SVt_PV) {
4155             if (isGV_with_GP(dstr)) {
4156                 glob_assign_ref(dstr, sstr);
4157                 return;
4158             }
4159             if (SvPVX_const(dstr)) {
4160                 SvPV_free(dstr);
4161                 SvLEN_set(dstr, 0);
4162                 SvCUR_set(dstr, 0);
4163             }
4164         }
4165         (void)SvOK_off(dstr);
4166         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4167         SvFLAGS(dstr) |= sflags & SVf_ROK;
4168         assert(!(sflags & SVp_NOK));
4169         assert(!(sflags & SVp_IOK));
4170         assert(!(sflags & SVf_NOK));
4171         assert(!(sflags & SVf_IOK));
4172     }
4173     else if (isGV_with_GP(dstr)) {
4174         if (!(sflags & SVf_OK)) {
4175             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4176                            "Undefined value assigned to typeglob");
4177         }
4178         else {
4179             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4180             if (dstr != (const SV *)gv) {
4181                 const char * const name = GvNAME((const GV *)dstr);
4182                 const STRLEN len = GvNAMELEN(dstr);
4183                 HV *old_stash = NULL;
4184                 bool reset_isa = FALSE;
4185                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4186                  || (len == 1 && name[0] == ':')) {
4187                     /* Set aside the old stash, so we can reset isa caches
4188                        on its subclasses. */
4189                     if((old_stash = GvHV(dstr))) {
4190                         /* Make sure we do not lose it early. */
4191                         SvREFCNT_inc_simple_void_NN(
4192                          sv_2mortal((SV *)old_stash)
4193                         );
4194                     }
4195                     reset_isa = TRUE;
4196                 }
4197
4198                 if (GvGP(dstr))
4199                     gp_free(MUTABLE_GV(dstr));
4200                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4201
4202                 if (reset_isa) {
4203                     HV * const stash = GvHV(dstr);
4204                     if(
4205                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4206                     )
4207                         mro_package_moved(
4208                          stash, old_stash,
4209                          (GV *)dstr, 0
4210                         );
4211                 }
4212             }
4213         }
4214     }
4215     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4216         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4217     }
4218     else if (sflags & SVp_POK) {
4219         bool isSwipe = 0;
4220
4221         /*
4222          * Check to see if we can just swipe the string.  If so, it's a
4223          * possible small lose on short strings, but a big win on long ones.
4224          * It might even be a win on short strings if SvPVX_const(dstr)
4225          * has to be allocated and SvPVX_const(sstr) has to be freed.
4226          * Likewise if we can set up COW rather than doing an actual copy, we
4227          * drop to the else clause, as the swipe code and the COW setup code
4228          * have much in common.
4229          */
4230
4231         /* Whichever path we take through the next code, we want this true,
4232            and doing it now facilitates the COW check.  */
4233         (void)SvPOK_only(dstr);
4234
4235         if (
4236             /* If we're already COW then this clause is not true, and if COW
4237                is allowed then we drop down to the else and make dest COW 
4238                with us.  If caller hasn't said that we're allowed to COW
4239                shared hash keys then we don't do the COW setup, even if the
4240                source scalar is a shared hash key scalar.  */
4241             (((flags & SV_COW_SHARED_HASH_KEYS)
4242                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4243                : 1 /* If making a COW copy is forbidden then the behaviour we
4244                        desire is as if the source SV isn't actually already
4245                        COW, even if it is.  So we act as if the source flags
4246                        are not COW, rather than actually testing them.  */
4247               )
4248 #ifndef PERL_OLD_COPY_ON_WRITE
4249              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4250                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4251                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4252                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4253                 but in turn, it's somewhat dead code, never expected to go
4254                 live, but more kept as a placeholder on how to do it better
4255                 in a newer implementation.  */
4256              /* If we are COW and dstr is a suitable target then we drop down
4257                 into the else and make dest a COW of us.  */
4258              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4259 #endif
4260              )
4261             &&
4262             !(isSwipe =
4263                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4264                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4265                  (!(flags & SV_NOSTEAL)) &&
4266                                         /* and we're allowed to steal temps */
4267                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4268                  SvLEN(sstr))             /* and really is a string */
4269 #ifdef PERL_OLD_COPY_ON_WRITE
4270             && ((flags & SV_COW_SHARED_HASH_KEYS)
4271                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4272                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4273                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4274                 : 1)
4275 #endif
4276             ) {
4277             /* Failed the swipe test, and it's not a shared hash key either.
4278                Have to copy the string.  */
4279             STRLEN len = SvCUR(sstr);
4280             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4281             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4282             SvCUR_set(dstr, len);
4283             *SvEND(dstr) = '\0';
4284         } else {
4285             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4286                be true in here.  */
4287             /* Either it's a shared hash key, or it's suitable for
4288                copy-on-write or we can swipe the string.  */
4289             if (DEBUG_C_TEST) {
4290                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4291                 sv_dump(sstr);
4292                 sv_dump(dstr);
4293             }
4294 #ifdef PERL_OLD_COPY_ON_WRITE
4295             if (!isSwipe) {
4296                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4297                     != (SVf_FAKE | SVf_READONLY)) {
4298                     SvREADONLY_on(sstr);
4299                     SvFAKE_on(sstr);
4300                     /* Make the source SV into a loop of 1.
4301                        (about to become 2) */
4302                     SV_COW_NEXT_SV_SET(sstr, sstr);
4303                 }
4304             }
4305 #endif
4306             /* Initial code is common.  */
4307             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4308                 SvPV_free(dstr);
4309             }
4310
4311             if (!isSwipe) {
4312                 /* making another shared SV.  */
4313                 STRLEN cur = SvCUR(sstr);
4314                 STRLEN len = SvLEN(sstr);
4315 #ifdef PERL_OLD_COPY_ON_WRITE
4316                 if (len) {
4317                     assert (SvTYPE(dstr) >= SVt_PVIV);
4318                     /* SvIsCOW_normal */
4319                     /* splice us in between source and next-after-source.  */
4320                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4321                     SV_COW_NEXT_SV_SET(sstr, dstr);
4322                     SvPV_set(dstr, SvPVX_mutable(sstr));
4323                 } else
4324 #endif
4325                 {
4326                     /* SvIsCOW_shared_hash */
4327                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4328                                           "Copy on write: Sharing hash\n"));
4329
4330                     assert (SvTYPE(dstr) >= SVt_PV);
4331                     SvPV_set(dstr,
4332                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4333                 }
4334                 SvLEN_set(dstr, len);
4335                 SvCUR_set(dstr, cur);
4336                 SvREADONLY_on(dstr);
4337                 SvFAKE_on(dstr);
4338             }
4339             else
4340                 {       /* Passes the swipe test.  */
4341                 SvPV_set(dstr, SvPVX_mutable(sstr));
4342                 SvLEN_set(dstr, SvLEN(sstr));
4343                 SvCUR_set(dstr, SvCUR(sstr));
4344
4345                 SvTEMP_off(dstr);
4346                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4347                 SvPV_set(sstr, NULL);
4348                 SvLEN_set(sstr, 0);
4349                 SvCUR_set(sstr, 0);
4350                 SvTEMP_off(sstr);
4351             }
4352         }
4353         if (sflags & SVp_NOK) {
4354             SvNV_set(dstr, SvNVX(sstr));
4355         }
4356         if (sflags & SVp_IOK) {
4357             SvIV_set(dstr, SvIVX(sstr));
4358             /* Must do this otherwise some other overloaded use of 0x80000000
4359                gets confused. I guess SVpbm_VALID */
4360             if (sflags & SVf_IVisUV)
4361                 SvIsUV_on(dstr);
4362         }
4363         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4364         {
4365             const MAGIC * const smg = SvVSTRING_mg(sstr);
4366             if (smg) {
4367                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4368                          smg->mg_ptr, smg->mg_len);
4369                 SvRMAGICAL_on(dstr);
4370             }
4371         }
4372     }
4373     else if (sflags & (SVp_IOK|SVp_NOK)) {
4374         (void)SvOK_off(dstr);
4375         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4376         if (sflags & SVp_IOK) {
4377             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4378             SvIV_set(dstr, SvIVX(sstr));
4379         }
4380         if (sflags & SVp_NOK) {
4381             SvNV_set(dstr, SvNVX(sstr));
4382         }
4383     }
4384     else {
4385         if (isGV_with_GP(sstr)) {
4386             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4387         }
4388         else
4389             (void)SvOK_off(dstr);
4390     }
4391     if (SvTAINTED(sstr))
4392         SvTAINT(dstr);
4393 }
4394
4395 /*
4396 =for apidoc sv_setsv_mg
4397
4398 Like C<sv_setsv>, but also handles 'set' magic.
4399
4400 =cut
4401 */
4402
4403 void
4404 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4405 {
4406     PERL_ARGS_ASSERT_SV_SETSV_MG;
4407
4408     sv_setsv(dstr,sstr);
4409     SvSETMAGIC(dstr);
4410 }
4411
4412 #ifdef PERL_OLD_COPY_ON_WRITE
4413 SV *
4414 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4415 {
4416     STRLEN cur = SvCUR(sstr);
4417     STRLEN len = SvLEN(sstr);
4418     register char *new_pv;
4419
4420     PERL_ARGS_ASSERT_SV_SETSV_COW;
4421
4422     if (DEBUG_C_TEST) {
4423         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4424                       (void*)sstr, (void*)dstr);
4425         sv_dump(sstr);
4426         if (dstr)
4427                     sv_dump(dstr);
4428     }
4429
4430     if (dstr) {
4431         if (SvTHINKFIRST(dstr))
4432             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4433         else if (SvPVX_const(dstr))
4434             Safefree(SvPVX_const(dstr));
4435     }
4436     else
4437         new_SV(dstr);
4438     SvUPGRADE(dstr, SVt_PVIV);
4439
4440     assert (SvPOK(sstr));
4441     assert (SvPOKp(sstr));
4442     assert (!SvIOK(sstr));
4443     assert (!SvIOKp(sstr));
4444     assert (!SvNOK(sstr));
4445     assert (!SvNOKp(sstr));
4446
4447     if (SvIsCOW(sstr)) {
4448
4449         if (SvLEN(sstr) == 0) {
4450             /* source is a COW shared hash key.  */
4451             DEBUG_C(PerlIO_printf(Perl_debug_log,
4452                                   "Fast copy on write: Sharing hash\n"));
4453             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4454             goto common_exit;
4455         }
4456         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4457     } else {
4458         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4459         SvUPGRADE(sstr, SVt_PVIV);
4460         SvREADONLY_on(sstr);
4461         SvFAKE_on(sstr);
4462         DEBUG_C(PerlIO_printf(Perl_debug_log,
4463                               "Fast copy on write: Converting sstr to COW\n"));
4464         SV_COW_NEXT_SV_SET(dstr, sstr);
4465     }
4466     SV_COW_NEXT_SV_SET(sstr, dstr);
4467     new_pv = SvPVX_mutable(sstr);
4468
4469   common_exit:
4470     SvPV_set(dstr, new_pv);
4471     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4472     if (SvUTF8(sstr))
4473         SvUTF8_on(dstr);
4474     SvLEN_set(dstr, len);
4475     SvCUR_set(dstr, cur);
4476     if (DEBUG_C_TEST) {
4477         sv_dump(dstr);
4478     }
4479     return dstr;
4480 }
4481 #endif
4482
4483 /*
4484 =for apidoc sv_setpvn
4485
4486 Copies a string into an SV.  The C<len> parameter indicates the number of
4487 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4488 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4489
4490 =cut
4491 */
4492
4493 void
4494 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4495 {
4496     dVAR;
4497     register char *dptr;
4498
4499     PERL_ARGS_ASSERT_SV_SETPVN;
4500
4501     SV_CHECK_THINKFIRST_COW_DROP(sv);
4502     if (!ptr) {
4503         (void)SvOK_off(sv);
4504         return;
4505     }
4506     else {
4507         /* len is STRLEN which is unsigned, need to copy to signed */
4508         const IV iv = len;
4509         if (iv < 0)
4510             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4511                        IVdf, iv);
4512     }
4513     SvUPGRADE(sv, SVt_PV);
4514
4515     dptr = SvGROW(sv, len + 1);
4516     Move(ptr,dptr,len,char);
4517     dptr[len] = '\0';
4518     SvCUR_set(sv, len);
4519     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4520     SvTAINT(sv);
4521     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4522 }
4523
4524 /*
4525 =for apidoc sv_setpvn_mg
4526
4527 Like C<sv_setpvn>, but also handles 'set' magic.
4528
4529 =cut
4530 */
4531
4532 void
4533 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4534 {
4535     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4536
4537     sv_setpvn(sv,ptr,len);
4538     SvSETMAGIC(sv);
4539 }
4540
4541 /*
4542 =for apidoc sv_setpv
4543
4544 Copies a string into an SV.  The string must be null-terminated.  Does not
4545 handle 'set' magic.  See C<sv_setpv_mg>.
4546
4547 =cut
4548 */
4549
4550 void
4551 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4552 {
4553     dVAR;
4554     register STRLEN len;
4555
4556     PERL_ARGS_ASSERT_SV_SETPV;
4557
4558     SV_CHECK_THINKFIRST_COW_DROP(sv);
4559     if (!ptr) {
4560         (void)SvOK_off(sv);
4561         return;
4562     }
4563     len = strlen(ptr);
4564     SvUPGRADE(sv, SVt_PV);
4565
4566     SvGROW(sv, len + 1);
4567     Move(ptr,SvPVX(sv),len+1,char);
4568     SvCUR_set(sv, len);
4569     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4570     SvTAINT(sv);
4571     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4572 }
4573
4574 /*
4575 =for apidoc sv_setpv_mg
4576
4577 Like C<sv_setpv>, but also handles 'set' magic.
4578
4579 =cut
4580 */
4581
4582 void
4583 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4584 {
4585     PERL_ARGS_ASSERT_SV_SETPV_MG;
4586
4587     sv_setpv(sv,ptr);
4588     SvSETMAGIC(sv);
4589 }
4590
4591 void
4592 Perl_sv_sethek(pTHX_ register SV *const sv, const HEK *const hek)
4593 {
4594     dVAR;
4595
4596     PERL_ARGS_ASSERT_SV_SETHEK;
4597
4598     if (!hek) {
4599         return;
4600     }
4601
4602     if (HEK_LEN(hek) == HEf_SVKEY) {
4603         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4604         return;
4605     } else {
4606         const int flags = HEK_FLAGS(hek);
4607         if (flags & HVhek_WASUTF8) {
4608             STRLEN utf8_len = HEK_LEN(hek);
4609             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4610             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4611             SvUTF8_on(sv);
4612             return;
4613         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
4614             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4615             if (HEK_UTF8(hek))
4616                 SvUTF8_on(sv);
4617             else SvUTF8_off(sv);
4618             return;
4619         }
4620         {
4621             SV_CHECK_THINKFIRST_COW_DROP(sv);
4622             SvUPGRADE(sv, SVt_PV);
4623             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4624             SvCUR_set(sv, HEK_LEN(hek));
4625             SvLEN_set(sv, 0);
4626             SvREADONLY_on(sv);
4627             SvFAKE_on(sv);
4628             SvPOK_on(sv);
4629             if (HEK_UTF8(hek))
4630                 SvUTF8_on(sv);
4631             else SvUTF8_off(sv);
4632             return;
4633         }
4634     }
4635 }
4636
4637
4638 /*
4639 =for apidoc sv_usepvn_flags
4640
4641 Tells an SV to use C<ptr> to find its string value.  Normally the
4642 string is stored inside the SV but sv_usepvn allows the SV to use an
4643 outside string.  The C<ptr> should point to memory that was allocated
4644 by C<malloc>.  It must be the start of a mallocked block
4645 of memory, and not a pointer to the middle of it.  The
4646 string length, C<len>, must be supplied.  By default
4647 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4648 so that pointer should not be freed or used by the programmer after
4649 giving it to sv_usepvn, and neither should any pointers from "behind"
4650 that pointer (e.g. ptr + 1) be used.
4651
4652 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4653 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4654 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4655 C<len>, and already meets the requirements for storing in C<SvPVX>).
4656
4657 =cut
4658 */
4659
4660 void
4661 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4662 {
4663     dVAR;
4664     STRLEN allocate;
4665
4666     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4667
4668     SV_CHECK_THINKFIRST_COW_DROP(sv);
4669     SvUPGRADE(sv, SVt_PV);
4670     if (!ptr) {
4671         (void)SvOK_off(sv);
4672         if (flags & SV_SMAGIC)
4673             SvSETMAGIC(sv);
4674         return;
4675     }
4676     if (SvPVX_const(sv))
4677         SvPV_free(sv);
4678
4679 #ifdef DEBUGGING
4680     if (flags & SV_HAS_TRAILING_NUL)
4681         assert(ptr[len] == '\0');
4682 #endif
4683
4684     allocate = (flags & SV_HAS_TRAILING_NUL)
4685         ? len + 1 :
4686 #ifdef Perl_safesysmalloc_size
4687         len + 1;
4688 #else 
4689         PERL_STRLEN_ROUNDUP(len + 1);
4690 #endif
4691     if (flags & SV_HAS_TRAILING_NUL) {
4692         /* It's long enough - do nothing.
4693            Specifically Perl_newCONSTSUB is relying on this.  */
4694     } else {
4695 #ifdef DEBUGGING
4696         /* Force a move to shake out bugs in callers.  */
4697         char *new_ptr = (char*)safemalloc(allocate);
4698         Copy(ptr, new_ptr, len, char);
4699         PoisonFree(ptr,len,char);
4700         Safefree(ptr);
4701         ptr = new_ptr;
4702 #else
4703         ptr = (char*) saferealloc (ptr, allocate);
4704 #endif
4705     }
4706 #ifdef Perl_safesysmalloc_size
4707     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4708 #else
4709     SvLEN_set(sv, allocate);
4710 #endif
4711     SvCUR_set(sv, len);
4712     SvPV_set(sv, ptr);
4713     if (!(flags & SV_HAS_TRAILING_NUL)) {
4714         ptr[len] = '\0';
4715     }
4716     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4717     SvTAINT(sv);
4718     if (flags & SV_SMAGIC)
4719         SvSETMAGIC(sv);
4720 }
4721
4722 #ifdef PERL_OLD_COPY_ON_WRITE
4723 /* Need to do this *after* making the SV normal, as we need the buffer
4724    pointer to remain valid until after we've copied it.  If we let go too early,
4725    another thread could invalidate it by unsharing last of the same hash key
4726    (which it can do by means other than releasing copy-on-write Svs)
4727    or by changing the other copy-on-write SVs in the loop.  */
4728 STATIC void
4729 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4730 {
4731     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4732
4733     { /* this SV was SvIsCOW_normal(sv) */
4734          /* we need to find the SV pointing to us.  */
4735         SV *current = SV_COW_NEXT_SV(after);
4736
4737         if (current == sv) {
4738             /* The SV we point to points back to us (there were only two of us
4739                in the loop.)
4740                Hence other SV is no longer copy on write either.  */
4741             SvFAKE_off(after);
4742             SvREADONLY_off(after);
4743         } else {
4744             /* We need to follow the pointers around the loop.  */
4745             SV *next;
4746             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4747                 assert (next);
4748                 current = next;
4749                  /* don't loop forever if the structure is bust, and we have
4750                     a pointer into a closed loop.  */
4751                 assert (current != after);
4752                 assert (SvPVX_const(current) == pvx);
4753             }
4754             /* Make the SV before us point to the SV after us.  */
4755             SV_COW_NEXT_SV_SET(current, after);
4756         }
4757     }
4758 }
4759 #endif
4760 /*
4761 =for apidoc sv_force_normal_flags
4762
4763 Undo various types of fakery on an SV: if the PV is a shared string, make
4764 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4765 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4766 we do the copy, and is also used locally.  If C<SV_COW_DROP_PV> is set
4767 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4768 SvPOK_off rather than making a copy.  (Used where this
4769 scalar is about to be set to some other value.)  In addition,
4770 the C<flags> parameter gets passed to C<sv_unref_flags()>
4771 when unreffing.  C<sv_force_normal> calls this function
4772 with flags set to 0.
4773
4774 =cut
4775 */
4776
4777 void
4778 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4779 {
4780     dVAR;
4781
4782     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4783
4784 #ifdef PERL_OLD_COPY_ON_WRITE
4785     if (SvREADONLY(sv)) {
4786         if (SvFAKE(sv)) {
4787             const char * const pvx = SvPVX_const(sv);
4788             const STRLEN len = SvLEN(sv);
4789             const STRLEN cur = SvCUR(sv);
4790             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4791                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4792                we'll fail an assertion.  */
4793             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4794
4795             if (DEBUG_C_TEST) {
4796                 PerlIO_printf(Perl_debug_log,
4797                               "Copy on write: Force normal %ld\n",
4798                               (long) flags);
4799                 sv_dump(sv);
4800             }
4801             SvFAKE_off(sv);
4802             SvREADONLY_off(sv);
4803             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4804             SvPV_set(sv, NULL);
4805             SvLEN_set(sv, 0);
4806             if (flags & SV_COW_DROP_PV) {
4807                 /* OK, so we don't need to copy our buffer.  */
4808                 SvPOK_off(sv);
4809             } else {
4810                 SvGROW(sv, cur + 1);
4811                 Move(pvx,SvPVX(sv),cur,char);
4812                 SvCUR_set(sv, cur);
4813                 *SvEND(sv) = '\0';
4814             }
4815             if (len) {
4816                 sv_release_COW(sv, pvx, next);
4817             } else {
4818                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4819             }
4820             if (DEBUG_C_TEST) {
4821                 sv_dump(sv);
4822             }
4823         }
4824         else if (IN_PERL_RUNTIME)
4825             Perl_croak_no_modify(aTHX);
4826     }
4827 #else
4828     if (SvREADONLY(sv)) {
4829         if (SvIsCOW(sv)) {
4830             const char * const pvx = SvPVX_const(sv);
4831             const STRLEN len = SvCUR(sv);
4832             SvFAKE_off(sv);
4833             SvREADONLY_off(sv);
4834             SvPV_set(sv, NULL);
4835             SvLEN_set(sv, 0);
4836             if (flags & SV_COW_DROP_PV) {
4837                 /* OK, so we don't need to copy our buffer.  */
4838                 SvPOK_off(sv);
4839             } else {
4840                 SvGROW(sv, len + 1);
4841                 Move(pvx,SvPVX(sv),len,char);
4842                 *SvEND(sv) = '\0';
4843             }
4844             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4845         }
4846         else if (IN_PERL_RUNTIME)
4847             Perl_croak_no_modify(aTHX);
4848     }
4849 #endif
4850     if (SvROK(sv))
4851         sv_unref_flags(sv, flags);
4852     else if (SvFAKE(sv) && isGV_with_GP(sv))
4853         sv_unglob(sv, flags);
4854     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4855         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4856            to sv_unglob. We only need it here, so inline it.  */
4857         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4858         SV *const temp = newSV_type(new_type);
4859         void *const temp_p = SvANY(sv);
4860
4861         if (new_type == SVt_PVMG) {
4862             SvMAGIC_set(temp, SvMAGIC(sv));
4863             SvMAGIC_set(sv, NULL);
4864             SvSTASH_set(temp, SvSTASH(sv));
4865             SvSTASH_set(sv, NULL);
4866         }
4867         SvCUR_set(temp, SvCUR(sv));
4868         /* Remember that SvPVX is in the head, not the body. */
4869         if (SvLEN(temp)) {
4870             SvLEN_set(temp, SvLEN(sv));
4871             /* This signals "buffer is owned by someone else" in sv_clear,
4872                which is the least effort way to stop it freeing the buffer.
4873             */
4874             SvLEN_set(sv, SvLEN(sv)+1);
4875         } else {
4876             /* Their buffer is already owned by someone else. */
4877             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4878             SvLEN_set(temp, SvCUR(sv)+1);
4879         }
4880
4881         /* Now swap the rest of the bodies. */
4882
4883         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4884         SvFLAGS(sv) |= new_type;
4885         SvANY(sv) = SvANY(temp);
4886
4887         SvFLAGS(temp) &= ~(SVTYPEMASK);
4888         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4889         SvANY(temp) = temp_p;
4890
4891         SvREFCNT_dec(temp);
4892     }
4893 }
4894
4895 /*
4896 =for apidoc sv_chop
4897
4898 Efficient removal of characters from the beginning of the string buffer.
4899 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4900 the string buffer.  The C<ptr> becomes the first character of the adjusted
4901 string.  Uses the "OOK hack".
4902
4903 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4904 refer to the same chunk of data.
4905
4906 The unfortunate similarity of this function's name to that of Perl's C<chop>
4907 operator is strictly coincidental.  This function works from the left;
4908 C<chop> works from the right.
4909
4910 =cut
4911 */
4912
4913 void
4914 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4915 {
4916     STRLEN delta;
4917     STRLEN old_delta;
4918     U8 *p;
4919 #ifdef DEBUGGING
4920     const U8 *evacp;
4921     STRLEN evacn;
4922 #endif
4923     STRLEN max_delta;
4924
4925     PERL_ARGS_ASSERT_SV_CHOP;
4926
4927     if (!ptr || !SvPOKp(sv))
4928         return;
4929     delta = ptr - SvPVX_const(sv);
4930     if (!delta) {
4931         /* Nothing to do.  */
4932         return;
4933     }
4934     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4935     if (delta > max_delta)
4936         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4937                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4938     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
4939     SV_CHECK_THINKFIRST(sv);
4940
4941     if (!SvOOK(sv)) {
4942         if (!SvLEN(sv)) { /* make copy of shared string */
4943             const char *pvx = SvPVX_const(sv);
4944             const STRLEN len = SvCUR(sv);
4945             SvGROW(sv, len + 1);
4946             Move(pvx,SvPVX(sv),len,char);
4947             *SvEND(sv) = '\0';
4948         }
4949         SvOOK_on(sv);
4950         old_delta = 0;
4951     } else {
4952         SvOOK_offset(sv, old_delta);
4953     }
4954     SvLEN_set(sv, SvLEN(sv) - delta);
4955     SvCUR_set(sv, SvCUR(sv) - delta);
4956     SvPV_set(sv, SvPVX(sv) + delta);
4957
4958     p = (U8 *)SvPVX_const(sv);
4959
4960 #ifdef DEBUGGING
4961     /* how many bytes were evacuated?  we will fill them with sentinel
4962        bytes, except for the part holding the new offset of course. */
4963     evacn = delta;
4964     if (old_delta)
4965         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
4966     assert(evacn);
4967     assert(evacn <= delta + old_delta);
4968     evacp = p - evacn;
4969 #endif
4970
4971     delta += old_delta;
4972     assert(delta);
4973     if (delta < 0x100) {
4974         *--p = (U8) delta;
4975     } else {
4976         *--p = 0;
4977         p -= sizeof(STRLEN);
4978         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4979     }
4980
4981 #ifdef DEBUGGING
4982     /* Fill the preceding buffer with sentinals to verify that no-one is
4983        using it.  */
4984     while (p > evacp) {
4985         --p;
4986         *p = (U8)PTR2UV(p);
4987     }
4988 #endif
4989 }
4990
4991 /*
4992 =for apidoc sv_catpvn
4993
4994 Concatenates the string onto the end of the string which is in the SV.  The
4995 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4996 status set, then the bytes appended should be valid UTF-8.
4997 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4998
4999 =for apidoc sv_catpvn_flags
5000
5001 Concatenates the string onto the end of the string which is in the SV.  The
5002 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5003 status set, then the bytes appended should be valid UTF-8.
5004 If C<flags> has the C<SV_SMAGIC> bit set, will
5005 C<mg_set> on C<dsv> afterwards if appropriate.
5006 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5007 in terms of this function.
5008
5009 =cut
5010 */
5011
5012 void
5013 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
5014 {
5015     dVAR;
5016     STRLEN dlen;
5017     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5018
5019     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5020     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5021
5022     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5023       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5024          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5025          dlen = SvCUR(dsv);
5026       }
5027       else SvGROW(dsv, dlen + slen + 1);
5028       if (sstr == dstr)
5029         sstr = SvPVX_const(dsv);
5030       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5031       SvCUR_set(dsv, SvCUR(dsv) + slen);
5032     }
5033     else {
5034         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5035         const char * const send = sstr + slen;
5036         U8 *d;
5037
5038         /* Something this code does not account for, which I think is
5039            impossible; it would require the same pv to be treated as
5040            bytes *and* utf8, which would indicate a bug elsewhere. */
5041         assert(sstr != dstr);
5042
5043         SvGROW(dsv, dlen + slen * 2 + 1);
5044         d = (U8 *)SvPVX(dsv) + dlen;
5045
5046         while (sstr < send) {
5047             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5048             if (UNI_IS_INVARIANT(uv))
5049                 *d++ = (U8)UTF_TO_NATIVE(uv);
5050             else {
5051                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5052                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5053             }
5054         }
5055         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5056     }
5057     *SvEND(dsv) = '\0';
5058     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5059     SvTAINT(dsv);
5060     if (flags & SV_SMAGIC)
5061         SvSETMAGIC(dsv);
5062 }
5063
5064 /*
5065 =for apidoc sv_catsv
5066
5067 Concatenates the string from SV C<ssv> onto the end of the string in
5068 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
5069 not 'set' magic.  See C<sv_catsv_mg>.
5070
5071 =for apidoc sv_catsv_flags
5072
5073 Concatenates the string from SV C<ssv> onto the end of the string in
5074 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
5075 bit set, will C<mg_get> on the C<ssv>, if appropriate, before
5076 reading it.  If the C<flags> contain C<SV_SMAGIC>, C<mg_set> will be
5077 called on the modified SV afterward, if appropriate.  C<sv_catsv>
5078 and C<sv_catsv_nomg> are implemented in terms of this function.
5079
5080 =cut */
5081
5082 void
5083 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
5084 {
5085     dVAR;
5086  
5087     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5088
5089    if (ssv) {
5090         STRLEN slen;
5091         const char *spv = SvPV_flags_const(ssv, slen, flags);
5092         if (spv) {
5093             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
5094                 mg_get(dsv);
5095             sv_catpvn_flags(dsv, spv, slen,
5096                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5097         }
5098     }
5099     if (flags & SV_SMAGIC)
5100         SvSETMAGIC(dsv);
5101 }
5102
5103 /*
5104 =for apidoc sv_catpv
5105
5106 Concatenates the string onto the end of the string which is in the SV.
5107 If the SV has the UTF-8 status set, then the bytes appended should be
5108 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5109
5110 =cut */
5111
5112 void
5113 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
5114 {
5115     dVAR;
5116     register STRLEN len;
5117     STRLEN tlen;
5118     char *junk;
5119
5120     PERL_ARGS_ASSERT_SV_CATPV;
5121
5122     if (!ptr)
5123         return;
5124     junk = SvPV_force(sv, tlen);
5125     len = strlen(ptr);
5126     SvGROW(sv, tlen + len + 1);
5127     if (ptr == junk)
5128         ptr = SvPVX_const(sv);
5129     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5130     SvCUR_set(sv, SvCUR(sv) + len);
5131     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5132     SvTAINT(sv);
5133 }
5134
5135 /*
5136 =for apidoc sv_catpv_flags
5137
5138 Concatenates the string onto the end of the string which is in the SV.
5139 If the SV has the UTF-8 status set, then the bytes appended should
5140 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5141 on the modified SV if appropriate.
5142
5143 =cut
5144 */
5145
5146 void
5147 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5148 {
5149     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5150     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5151 }
5152
5153 /*
5154 =for apidoc sv_catpv_mg
5155
5156 Like C<sv_catpv>, but also handles 'set' magic.
5157
5158 =cut
5159 */
5160
5161 void
5162 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
5163 {
5164     PERL_ARGS_ASSERT_SV_CATPV_MG;
5165
5166     sv_catpv(sv,ptr);
5167     SvSETMAGIC(sv);
5168 }
5169
5170 /*
5171 =for apidoc newSV
5172
5173 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5174 bytes of preallocated string space the SV should have.  An extra byte for a
5175 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5176 space is allocated.)  The reference count for the new SV is set to 1.
5177
5178 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5179 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5180 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5181 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5182 modules supporting older perls.
5183
5184 =cut
5185 */
5186
5187 SV *
5188 Perl_newSV(pTHX_ const STRLEN len)
5189 {
5190     dVAR;
5191     register SV *sv;
5192
5193     new_SV(sv);
5194     if (len) {
5195         sv_upgrade(sv, SVt_PV);
5196         SvGROW(sv, len + 1);
5197     }
5198     return sv;
5199 }
5200 /*
5201 =for apidoc sv_magicext
5202
5203 Adds magic to an SV, upgrading it if necessary.  Applies the
5204 supplied vtable and returns a pointer to the magic added.
5205
5206 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5207 In particular, you can add magic to SvREADONLY SVs, and add more than
5208 one instance of the same 'how'.
5209
5210 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5211 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5212 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5213 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5214
5215 (This is now used as a subroutine by C<sv_magic>.)
5216
5217 =cut
5218 */
5219 MAGIC * 
5220 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5221                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5222 {
5223     dVAR;
5224     MAGIC* mg;
5225
5226     PERL_ARGS_ASSERT_SV_MAGICEXT;
5227
5228     SvUPGRADE(sv, SVt_PVMG);
5229     Newxz(mg, 1, MAGIC);
5230     mg->mg_moremagic = SvMAGIC(sv);
5231     SvMAGIC_set(sv, mg);
5232
5233     /* Sometimes a magic contains a reference loop, where the sv and
5234        object refer to each other.  To prevent a reference loop that
5235        would prevent such objects being freed, we look for such loops
5236        and if we find one we avoid incrementing the object refcount.
5237
5238        Note we cannot do this to avoid self-tie loops as intervening RV must
5239        have its REFCNT incremented to keep it in existence.
5240
5241     */
5242     if (!obj || obj == sv ||
5243         how == PERL_MAGIC_arylen ||
5244         how == PERL_MAGIC_symtab ||
5245         (SvTYPE(obj) == SVt_PVGV &&
5246             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5247              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5248              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5249     {
5250         mg->mg_obj = obj;
5251     }
5252     else {
5253         mg->mg_obj = SvREFCNT_inc_simple(obj);
5254         mg->mg_flags |= MGf_REFCOUNTED;
5255     }
5256
5257     /* Normal self-ties simply pass a null object, and instead of
5258        using mg_obj directly, use the SvTIED_obj macro to produce a
5259        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5260        with an RV obj pointing to the glob containing the PVIO.  In
5261        this case, to avoid a reference loop, we need to weaken the
5262        reference.
5263     */
5264
5265     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5266         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5267     {
5268       sv_rvweaken(obj);
5269     }
5270
5271     mg->mg_type = how;
5272     mg->mg_len = namlen;
5273     if (name) {
5274         if (namlen > 0)
5275             mg->mg_ptr = savepvn(name, namlen);
5276         else if (namlen == HEf_SVKEY) {
5277             /* Yes, this is casting away const. This is only for the case of
5278                HEf_SVKEY. I think we need to document this aberation of the
5279                constness of the API, rather than making name non-const, as
5280                that change propagating outwards a long way.  */
5281             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5282         } else
5283             mg->mg_ptr = (char *) name;
5284     }
5285     mg->mg_virtual = (MGVTBL *) vtable;
5286
5287     mg_magical(sv);
5288     if (SvGMAGICAL(sv))
5289         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5290     return mg;
5291 }
5292
5293 /*
5294 =for apidoc sv_magic
5295
5296 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5297 necessary, then adds a new magic item of type C<how> to the head of the
5298 magic list.
5299
5300 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5301 handling of the C<name> and C<namlen> arguments.
5302
5303 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5304 to add more than one instance of the same 'how'.
5305
5306 =cut
5307 */
5308
5309 void
5310 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5311              const char *const name, const I32 namlen)
5312 {
5313     dVAR;
5314     const MGVTBL *vtable;
5315     MAGIC* mg;
5316     unsigned int flags;
5317     unsigned int vtable_index;
5318
5319     PERL_ARGS_ASSERT_SV_MAGIC;
5320
5321     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5322         || ((flags = PL_magic_data[how]),
5323             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5324             > magic_vtable_max))
5325         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5326
5327     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5328        Useful for attaching extension internal data to perl vars.
5329        Note that multiple extensions may clash if magical scalars
5330        etc holding private data from one are passed to another. */
5331
5332     vtable = (vtable_index == magic_vtable_max)
5333         ? NULL : PL_magic_vtables + vtable_index;
5334
5335 #ifdef PERL_OLD_COPY_ON_WRITE
5336     if (SvIsCOW(sv))
5337         sv_force_normal_flags(sv, 0);
5338 #endif
5339     if (SvREADONLY(sv)) {
5340         if (
5341             /* its okay to attach magic to shared strings */
5342             !SvIsCOW(sv)
5343
5344             && IN_PERL_RUNTIME
5345             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5346            )
5347         {
5348             Perl_croak_no_modify(aTHX);
5349         }
5350     }
5351     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5352         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5353             /* sv_magic() refuses to add a magic of the same 'how' as an
5354                existing one
5355              */
5356             if (how == PERL_MAGIC_taint) {
5357                 mg->mg_len |= 1;
5358                 /* Any scalar which already had taint magic on which someone
5359                    (erroneously?) did SvIOK_on() or similar will now be
5360                    incorrectly sporting public "OK" flags.  */
5361                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5362             }
5363             return;
5364         }
5365     }
5366
5367     /* Rest of work is done else where */
5368     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5369
5370     switch (how) {
5371     case PERL_MAGIC_taint:
5372         mg->mg_len = 1;
5373         break;
5374     case PERL_MAGIC_ext:
5375     case PERL_MAGIC_dbfile:
5376         SvRMAGICAL_on(sv);
5377         break;
5378     }
5379 }
5380
5381 static int
5382 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5383 {
5384     MAGIC* mg;
5385     MAGIC** mgp;
5386
5387     assert(flags <= 1);
5388
5389     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5390         return 0;
5391     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5392     for (mg = *mgp; mg; mg = *mgp) {
5393         const MGVTBL* const virt = mg->mg_virtual;
5394         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5395             *mgp = mg->mg_moremagic;
5396             if (virt && virt->svt_free)
5397                 virt->svt_free(aTHX_ sv, mg);
5398             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5399                 if (mg->mg_len > 0)
5400                     Safefree(mg->mg_ptr);
5401                 else if (mg->mg_len == HEf_SVKEY)
5402                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5403                 else if (mg->mg_type == PERL_MAGIC_utf8)
5404                     Safefree(mg->mg_ptr);
5405             }
5406             if (mg->mg_flags & MGf_REFCOUNTED)
5407                 SvREFCNT_dec(mg->mg_obj);
5408             Safefree(mg);
5409         }
5410         else
5411             mgp = &mg->mg_moremagic;
5412     }
5413     if (SvMAGIC(sv)) {
5414         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5415             mg_magical(sv);     /*    else fix the flags now */
5416     }
5417     else {
5418         SvMAGICAL_off(sv);
5419         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5420     }
5421     return 0;
5422 }
5423
5424 /*
5425 =for apidoc sv_unmagic
5426
5427 Removes all magic of type C<type> from an SV.
5428
5429 =cut
5430 */
5431
5432 int
5433 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5434 {
5435     PERL_ARGS_ASSERT_SV_UNMAGIC;
5436     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5437 }
5438
5439 /*
5440 =for apidoc sv_unmagicext
5441
5442 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5443
5444 =cut
5445 */
5446
5447 int
5448 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5449 {
5450     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5451     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5452 }
5453
5454 /*
5455 =for apidoc sv_rvweaken
5456
5457 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5458 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5459 push a back-reference to this RV onto the array of backreferences
5460 associated with that magic.  If the RV is magical, set magic will be
5461 called after the RV is cleared.
5462
5463 =cut
5464 */
5465
5466 SV *
5467 Perl_sv_rvweaken(pTHX_ SV *const sv)
5468 {
5469     SV *tsv;
5470
5471     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5472
5473     if (!SvOK(sv))  /* let undefs pass */
5474         return sv;
5475     if (!SvROK(sv))
5476         Perl_croak(aTHX_ "Can't weaken a nonreference");
5477     else if (SvWEAKREF(sv)) {
5478         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5479         return sv;
5480     }
5481     else if (SvREADONLY(sv)) croak_no_modify();
5482     tsv = SvRV(sv);
5483     Perl_sv_add_backref(aTHX_ tsv, sv);
5484     SvWEAKREF_on(sv);
5485     SvREFCNT_dec(tsv);
5486     return sv;
5487 }
5488
5489 /* Give tsv backref magic if it hasn't already got it, then push a
5490  * back-reference to sv onto the array associated with the backref magic.
5491  *
5492  * As an optimisation, if there's only one backref and it's not an AV,
5493  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5494  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5495  * active.)
5496  */
5497
5498 /* A discussion about the backreferences array and its refcount:
5499  *
5500  * The AV holding the backreferences is pointed to either as the mg_obj of
5501  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5502  * xhv_backreferences field. The array is created with a refcount
5503  * of 2. This means that if during global destruction the array gets
5504  * picked on before its parent to have its refcount decremented by the
5505  * random zapper, it won't actually be freed, meaning it's still there for
5506  * when its parent gets freed.
5507  *
5508  * When the parent SV is freed, the extra ref is killed by
5509  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5510  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5511  *
5512  * When a single backref SV is stored directly, it is not reference
5513  * counted.
5514  */
5515
5516 void
5517 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5518 {
5519     dVAR;
5520     SV **svp;
5521     AV *av = NULL;
5522     MAGIC *mg = NULL;
5523
5524     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5525
5526     /* find slot to store array or singleton backref */
5527
5528     if (SvTYPE(tsv) == SVt_PVHV) {
5529         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5530     } else {
5531         if (! ((mg =
5532             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5533         {
5534             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5535             mg = mg_find(tsv, PERL_MAGIC_backref);
5536         }
5537         svp = &(mg->mg_obj);
5538     }
5539
5540     /* create or retrieve the array */
5541
5542     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5543         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5544     ) {
5545         /* create array */
5546         av = newAV();
5547         AvREAL_off(av);
5548         SvREFCNT_inc_simple_void(av);
5549         /* av now has a refcnt of 2; see discussion above */
5550         if (*svp) {
5551             /* move single existing backref to the array */
5552             av_extend(av, 1);
5553             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5554         }
5555         *svp = (SV*)av;
5556         if (mg)
5557             mg->mg_flags |= MGf_REFCOUNTED;
5558     }
5559     else
5560         av = MUTABLE_AV(*svp);
5561
5562     if (!av) {
5563         /* optimisation: store single backref directly in HvAUX or mg_obj */
5564         *svp = sv;
5565         return;
5566     }
5567     /* push new backref */
5568     assert(SvTYPE(av) == SVt_PVAV);
5569     if (AvFILLp(av) >= AvMAX(av)) {
5570         av_extend(av, AvFILLp(av)+1);
5571     }
5572     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5573 }
5574
5575 /* delete a back-reference to ourselves from the backref magic associated
5576  * with the SV we point to.
5577  */
5578
5579 void
5580 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5581 {
5582     dVAR;
5583     SV **svp = NULL;
5584
5585     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5586
5587     if (SvTYPE(tsv) == SVt_PVHV) {
5588         if (SvOOK(tsv))
5589             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5590     }
5591     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5592         /* It's possible for the the last (strong) reference to tsv to have
5593            become freed *before* the last thing holding a weak reference.
5594            If both survive longer than the backreferences array, then when
5595            the referent's reference count drops to 0 and it is freed, it's
5596            not able to chase the backreferences, so they aren't NULLed.
5597
5598            For example, a CV holds a weak reference to its stash. If both the
5599            CV and the stash survive longer than the backreferences array,
5600            and the CV gets picked for the SvBREAK() treatment first,
5601            *and* it turns out that the stash is only being kept alive because
5602            of an our variable in the pad of the CV, then midway during CV
5603            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5604            It ends up pointing to the freed HV. Hence it's chased in here, and
5605            if this block wasn't here, it would hit the !svp panic just below.
5606
5607            I don't believe that "better" destruction ordering is going to help
5608            here - during global destruction there's always going to be the
5609            chance that something goes out of order. We've tried to make it
5610            foolproof before, and it only resulted in evolutionary pressure on
5611            fools. Which made us look foolish for our hubris. :-(
5612         */
5613         return;
5614     }
5615     else {
5616         MAGIC *const mg
5617             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5618         svp =  mg ? &(mg->mg_obj) : NULL;
5619     }
5620
5621     if (!svp)
5622         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5623     if (!*svp) {
5624         /* It's possible that sv is being freed recursively part way through the
5625            freeing of tsv. If this happens, the backreferences array of tsv has
5626            already been freed, and so svp will be NULL. If this is the case,
5627            we should not panic. Instead, nothing needs doing, so return.  */
5628         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5629             return;
5630         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5631                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5632     }
5633
5634     if (SvTYPE(*svp) == SVt_PVAV) {
5635 #ifdef DEBUGGING
5636         int count = 1;
5637 #endif
5638         AV * const av = (AV*)*svp;
5639         SSize_t fill;
5640         assert(!SvIS_FREED(av));
5641         fill = AvFILLp(av);
5642         assert(fill > -1);
5643         svp = AvARRAY(av);
5644         /* for an SV with N weak references to it, if all those
5645          * weak refs are deleted, then sv_del_backref will be called
5646          * N times and O(N^2) compares will be done within the backref
5647          * array. To ameliorate this potential slowness, we:
5648          * 1) make sure this code is as tight as possible;
5649          * 2) when looking for SV, look for it at both the head and tail of the
5650          *    array first before searching the rest, since some create/destroy
5651          *    patterns will cause the backrefs to be freed in order.
5652          */
5653         if (*svp == sv) {
5654             AvARRAY(av)++;
5655             AvMAX(av)--;
5656         }
5657         else {
5658             SV **p = &svp[fill];
5659             SV *const topsv = *p;
5660             if (topsv != sv) {
5661 #ifdef DEBUGGING
5662                 count = 0;
5663 #endif
5664                 while (--p > svp) {
5665                     if (*p == sv) {
5666                         /* We weren't the last entry.
5667                            An unordered list has this property that you
5668                            can take the last element off the end to fill
5669                            the hole, and it's still an unordered list :-)
5670                         */
5671                         *p = topsv;
5672 #ifdef DEBUGGING
5673                         count++;
5674 #else
5675                         break; /* should only be one */
5676 #endif
5677                     }
5678                 }
5679             }
5680         }
5681         assert(count ==1);
5682         AvFILLp(av) = fill-1;
5683     }
5684     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5685         /* freed AV; skip */
5686     }
5687     else {
5688         /* optimisation: only a single backref, stored directly */
5689         if (*svp != sv)
5690             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5691         *svp = NULL;
5692     }
5693
5694 }
5695
5696 void
5697 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5698 {
5699     SV **svp;
5700     SV **last;
5701     bool is_array;
5702
5703     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5704
5705     if (!av)
5706         return;
5707
5708     /* after multiple passes through Perl_sv_clean_all() for a thinngy
5709      * that has badly leaked, the backref array may have gotten freed,
5710      * since we only protect it against 1 round of cleanup */
5711     if (SvIS_FREED(av)) {
5712         if (PL_in_clean_all) /* All is fair */
5713             return;
5714         Perl_croak(aTHX_
5715                    "panic: magic_killbackrefs (freed backref AV/SV)");
5716     }
5717
5718
5719     is_array = (SvTYPE(av) == SVt_PVAV);
5720     if (is_array) {
5721         assert(!SvIS_FREED(av));
5722         svp = AvARRAY(av);
5723         if (svp)
5724             last = svp + AvFILLp(av);
5725     }
5726     else {
5727         /* optimisation: only a single backref, stored directly */
5728         svp = (SV**)&av;
5729         last = svp;
5730     }
5731
5732     if (svp) {
5733         while (svp <= last) {
5734             if (*svp) {
5735                 SV *const referrer = *svp;
5736                 if (SvWEAKREF(referrer)) {
5737                     /* XXX Should we check that it hasn't changed? */
5738                     assert(SvROK(referrer));
5739                     SvRV_set(referrer, 0);
5740                     SvOK_off(referrer);
5741                     SvWEAKREF_off(referrer);
5742                     SvSETMAGIC(referrer);
5743                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5744                            SvTYPE(referrer) == SVt_PVLV) {
5745                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5746                     /* You lookin' at me?  */
5747                     assert(GvSTASH(referrer));
5748                     assert(GvSTASH(referrer) == (const HV *)sv);
5749                     GvSTASH(referrer) = 0;
5750                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5751                            SvTYPE(referrer) == SVt_PVFM) {
5752                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5753                         /* You lookin' at me?  */
5754                         assert(CvSTASH(referrer));
5755                         assert(CvSTASH(referrer) == (const HV *)sv);
5756                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5757                     }
5758                     else {
5759                         assert(SvTYPE(sv) == SVt_PVGV);
5760                         /* You lookin' at me?  */
5761                         assert(CvGV(referrer));
5762                         assert(CvGV(referrer) == (const GV *)sv);
5763                         anonymise_cv_maybe(MUTABLE_GV(sv),
5764                                                 MUTABLE_CV(referrer));
5765                     }
5766
5767                 } else {
5768                     Perl_croak(aTHX_
5769                                "panic: magic_killbackrefs (flags=%"UVxf")",
5770                                (UV)SvFLAGS(referrer));
5771                 }
5772
5773                 if (is_array)
5774                     *svp = NULL;
5775             }
5776             svp++;
5777         }
5778     }
5779     if (is_array) {
5780         AvFILLp(av) = -1;
5781         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5782     }
5783     return;
5784 }
5785
5786 /*
5787 =for apidoc sv_insert
5788
5789 Inserts a string at the specified offset/length within the SV.  Similar to
5790 the Perl substr() function.  Handles get magic.
5791
5792 =for apidoc sv_insert_flags
5793
5794 Same as C<sv_insert>, but the extra C<flags> are passed to the
5795 C<SvPV_force_flags> that applies to C<bigstr>.
5796
5797 =cut
5798 */
5799
5800 void
5801 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5802 {
5803     dVAR;
5804     register char *big;
5805     register char *mid;
5806     register char *midend;
5807     register char *bigend;
5808     register SSize_t i;         /* better be sizeof(STRLEN) or bad things happen */
5809     STRLEN curlen;
5810
5811     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5812
5813     if (!bigstr)
5814         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5815     SvPV_force_flags(bigstr, curlen, flags);
5816     (void)SvPOK_only_UTF8(bigstr);
5817     if (offset + len > curlen) {
5818         SvGROW(bigstr, offset+len+1);
5819         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5820         SvCUR_set(bigstr, offset+len);
5821     }
5822
5823     SvTAINT(bigstr);
5824     i = littlelen - len;
5825     if (i > 0) {                        /* string might grow */
5826         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5827         mid = big + offset + len;
5828         midend = bigend = big + SvCUR(bigstr);
5829         bigend += i;
5830         *bigend = '\0';
5831         while (midend > mid)            /* shove everything down */
5832             *--bigend = *--midend;
5833         Move(little,big+offset,littlelen,char);
5834         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5835         SvSETMAGIC(bigstr);
5836         return;
5837     }
5838     else if (i == 0) {
5839         Move(little,SvPVX(bigstr)+offset,len,char);
5840         SvSETMAGIC(bigstr);
5841         return;
5842     }
5843
5844     big = SvPVX(bigstr);
5845     mid = big + offset;
5846     midend = mid + len;
5847     bigend = big + SvCUR(bigstr);
5848
5849     if (midend > bigend)
5850         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
5851                    midend, bigend);
5852
5853     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5854         if (littlelen) {
5855             Move(little, mid, littlelen,char);
5856             mid += littlelen;
5857         }
5858         i = bigend - midend;
5859         if (i > 0) {
5860             Move(midend, mid, i,char);
5861             mid += i;
5862         }
5863         *mid = '\0';
5864         SvCUR_set(bigstr, mid - big);
5865     }
5866     else if ((i = mid - big)) { /* faster from front */
5867         midend -= littlelen;
5868         mid = midend;
5869         Move(big, midend - i, i, char);
5870         sv_chop(bigstr,midend-i);
5871         if (littlelen)
5872             Move(little, mid, littlelen,char);
5873     }
5874     else if (littlelen) {
5875         midend -= littlelen;
5876         sv_chop(bigstr,midend);
5877         Move(little,midend,littlelen,char);
5878     }
5879     else {
5880         sv_chop(bigstr,midend);
5881     }
5882     SvSETMAGIC(bigstr);
5883 }
5884
5885 /*
5886 =for apidoc sv_replace
5887
5888 Make the first argument a copy of the second, then delete the original.
5889 The target SV physically takes over ownership of the body of the source SV
5890 and inherits its flags; however, the target keeps any magic it owns,
5891 and any magic in the source is discarded.
5892 Note that this is a rather specialist SV copying operation; most of the
5893 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5894
5895 =cut
5896 */
5897
5898 void
5899 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5900 {
5901     dVAR;
5902     const U32 refcnt = SvREFCNT(sv);
5903
5904     PERL_ARGS_ASSERT_SV_REPLACE;
5905
5906     SV_CHECK_THINKFIRST_COW_DROP(sv);
5907     if (SvREFCNT(nsv) != 1) {
5908         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5909                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5910     }
5911     if (SvMAGICAL(sv)) {
5912         if (SvMAGICAL(nsv))
5913             mg_free(nsv);
5914         else
5915             sv_upgrade(nsv, SVt_PVMG);
5916         SvMAGIC_set(nsv, SvMAGIC(sv));
5917         SvFLAGS(nsv) |= SvMAGICAL(sv);
5918         SvMAGICAL_off(sv);
5919         SvMAGIC_set(sv, NULL);
5920     }
5921     SvREFCNT(sv) = 0;
5922     sv_clear(sv);
5923     assert(!SvREFCNT(sv));
5924 #ifdef DEBUG_LEAKING_SCALARS
5925     sv->sv_flags  = nsv->sv_flags;
5926     sv->sv_any    = nsv->sv_any;
5927     sv->sv_refcnt = nsv->sv_refcnt;
5928     sv->sv_u      = nsv->sv_u;
5929 #else
5930     StructCopy(nsv,sv,SV);
5931 #endif
5932     if(SvTYPE(sv) == SVt_IV) {
5933         SvANY(sv)
5934             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5935     }
5936         
5937
5938 #ifdef PERL_OLD_COPY_ON_WRITE
5939     if (SvIsCOW_normal(nsv)) {
5940         /* We need to follow the pointers around the loop to make the
5941            previous SV point to sv, rather than nsv.  */
5942         SV *next;
5943         SV *current = nsv;
5944         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5945             assert(next);
5946             current = next;
5947             assert(SvPVX_const(current) == SvPVX_const(nsv));
5948         }
5949         /* Make the SV before us point to the SV after us.  */
5950         if (DEBUG_C_TEST) {
5951             PerlIO_printf(Perl_debug_log, "previous is\n");
5952             sv_dump(current);
5953             PerlIO_printf(Perl_debug_log,
5954                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5955                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5956         }
5957         SV_COW_NEXT_SV_SET(current, sv);
5958     }
5959 #endif
5960     SvREFCNT(sv) = refcnt;
5961     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5962     SvREFCNT(nsv) = 0;
5963     del_SV(nsv);
5964 }
5965
5966 /* We're about to free a GV which has a CV that refers back to us.
5967  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5968  * field) */
5969
5970 STATIC void
5971 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5972 {
5973     SV *gvname;
5974     GV *anongv;
5975
5976     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5977
5978     /* be assertive! */
5979     assert(SvREFCNT(gv) == 0);
5980     assert(isGV(gv) && isGV_with_GP(gv));
5981     assert(GvGP(gv));
5982     assert(!CvANON(cv));
5983     assert(CvGV(cv) == gv);
5984
5985     /* will the CV shortly be freed by gp_free() ? */
5986     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
5987         SvANY(cv)->xcv_gv = NULL;
5988         return;
5989     }
5990
5991     /* if not, anonymise: */
5992     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
5993                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
5994                     : newSVpvn_flags( "__ANON__", 8, 0 );
5995     sv_catpvs(gvname, "::__ANON__");
5996     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5997     SvREFCNT_dec(gvname);
5998
5999     CvANON_on(cv);
6000     CvCVGV_RC_on(cv);
6001     SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6002 }
6003
6004
6005 /*
6006 =for apidoc sv_clear
6007
6008 Clear an SV: call any destructors, free up any memory used by the body,
6009 and free the body itself.  The SV's head is I<not> freed, although
6010 its type is set to all 1's so that it won't inadvertently be assumed
6011 to be live during global destruction etc.
6012 This function should only be called when REFCNT is zero.  Most of the time
6013 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6014 instead.
6015
6016 =cut
6017 */
6018
6019 void
6020 Perl_sv_clear(pTHX_ SV *const orig_sv)
6021 {
6022     dVAR;
6023     HV *stash;
6024     U32 type;
6025     const struct body_details *sv_type_details;
6026     SV* iter_sv = NULL;
6027     SV* next_sv = NULL;
6028     register SV *sv = orig_sv;
6029     STRLEN hash_index;
6030
6031     PERL_ARGS_ASSERT_SV_CLEAR;
6032
6033     /* within this loop, sv is the SV currently being freed, and
6034      * iter_sv is the most recent AV or whatever that's being iterated
6035      * over to provide more SVs */
6036
6037     while (sv) {
6038
6039         type = SvTYPE(sv);
6040
6041         assert(SvREFCNT(sv) == 0);
6042         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6043
6044         if (type <= SVt_IV) {
6045             /* See the comment in sv.h about the collusion between this
6046              * early return and the overloading of the NULL slots in the
6047              * size table.  */
6048             if (SvROK(sv))
6049                 goto free_rv;
6050             SvFLAGS(sv) &= SVf_BREAK;
6051             SvFLAGS(sv) |= SVTYPEMASK;
6052             goto free_head;
6053         }
6054
6055         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6056
6057         if (type >= SVt_PVMG) {
6058             if (SvOBJECT(sv)) {
6059                 if (!curse(sv, 1)) goto get_next_sv;
6060                 type = SvTYPE(sv); /* destructor may have changed it */
6061             }
6062             /* Free back-references before magic, in case the magic calls
6063              * Perl code that has weak references to sv. */
6064             if (type == SVt_PVHV) {
6065                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6066                 if (SvMAGIC(sv))
6067                     mg_free(sv);
6068             }
6069             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6070                 SvREFCNT_dec(SvOURSTASH(sv));
6071             } else if (SvMAGIC(sv)) {
6072                 /* Free back-references before other types of magic. */
6073                 sv_unmagic(sv, PERL_MAGIC_backref);
6074                 mg_free(sv);
6075             }
6076             SvMAGICAL_off(sv);
6077             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6078                 SvREFCNT_dec(SvSTASH(sv));
6079         }
6080         switch (type) {
6081             /* case SVt_BIND: */
6082         case SVt_PVIO:
6083             if (IoIFP(sv) &&
6084                 IoIFP(sv) != PerlIO_stdin() &&
6085                 IoIFP(sv) != PerlIO_stdout() &&
6086                 IoIFP(sv) != PerlIO_stderr() &&
6087                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6088             {
6089                 io_close(MUTABLE_IO(sv), FALSE);
6090             }
6091             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6092                 PerlDir_close(IoDIRP(sv));
6093             IoDIRP(sv) = (DIR*)NULL;
6094             Safefree(IoTOP_NAME(sv));
6095             Safefree(IoFMT_NAME(sv));
6096             Safefree(IoBOTTOM_NAME(sv));
6097             if ((const GV *)sv == PL_statgv)
6098                 PL_statgv = NULL;
6099             goto freescalar;
6100         case SVt_REGEXP:
6101             /* FIXME for plugins */
6102             pregfree2((REGEXP*) sv);
6103             goto freescalar;
6104         case SVt_PVCV:
6105         case SVt_PVFM:
6106             cv_undef(MUTABLE_CV(sv));
6107             /* If we're in a stash, we don't own a reference to it.
6108              * However it does have a back reference to us, which needs to
6109              * be cleared.  */
6110             if ((stash = CvSTASH(sv)))
6111                 sv_del_backref(MUTABLE_SV(stash), sv);
6112             goto freescalar;
6113         case SVt_PVHV:
6114             if (PL_last_swash_hv == (const HV *)sv) {
6115                 PL_last_swash_hv = NULL;
6116             }
6117             if (HvTOTALKEYS((HV*)sv) > 0) {
6118                 const char *name;
6119                 /* this statement should match the one at the beginning of
6120                  * hv_undef_flags() */
6121                 if (   PL_phase != PERL_PHASE_DESTRUCT
6122                     && (name = HvNAME((HV*)sv)))
6123                 {
6124                     if (PL_stashcache)
6125                         (void)hv_delete(PL_stashcache, name,
6126                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6127                     hv_name_set((HV*)sv, NULL, 0, 0);
6128                 }
6129
6130                 /* save old iter_sv in unused SvSTASH field */
6131                 assert(!SvOBJECT(sv));
6132                 SvSTASH(sv) = (HV*)iter_sv;
6133                 iter_sv = sv;
6134
6135                 /* save old hash_index in unused SvMAGIC field */
6136                 assert(!SvMAGICAL(sv));
6137                 assert(!SvMAGIC(sv));
6138                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6139                 hash_index = 0;
6140
6141                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6142                 goto get_next_sv; /* process this new sv */
6143             }
6144             /* free empty hash */
6145             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6146             assert(!HvARRAY((HV*)sv));
6147             break;
6148         case SVt_PVAV:
6149             {
6150                 AV* av = MUTABLE_AV(sv);
6151                 if (PL_comppad == av) {
6152                     PL_comppad = NULL;
6153                     PL_curpad = NULL;
6154                 }
6155                 if (AvREAL(av) && AvFILLp(av) > -1) {
6156                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6157                     /* save old iter_sv in top-most slot of AV,
6158                      * and pray that it doesn't get wiped in the meantime */
6159                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6160                     iter_sv = sv;
6161                     goto get_next_sv; /* process this new sv */
6162                 }
6163                 Safefree(AvALLOC(av));
6164             }
6165
6166             break;
6167         case SVt_PVLV:
6168             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6169                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6170                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6171                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6172             }
6173             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6174                 SvREFCNT_dec(LvTARG(sv));
6175         case SVt_PVGV:
6176             if (isGV_with_GP(sv)) {
6177                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6178                    && HvENAME_get(stash))
6179                     mro_method_changed_in(stash);
6180                 gp_free(MUTABLE_GV(sv));
6181                 if (GvNAME_HEK(sv))
6182                     unshare_hek(GvNAME_HEK(sv));
6183                 /* If we're in a stash, we don't own a reference to it.
6184                  * However it does have a back reference to us, which
6185                  * needs to be cleared.  */
6186                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6187                         sv_del_backref(MUTABLE_SV(stash), sv);
6188             }
6189             /* FIXME. There are probably more unreferenced pointers to SVs
6190              * in the interpreter struct that we should check and tidy in
6191              * a similar fashion to this:  */
6192             /* See also S_sv_unglob, which does the same thing. */
6193             if ((const GV *)sv == PL_last_in_gv)
6194                 PL_last_in_gv = NULL;
6195             else if ((const GV *)sv == PL_statgv)
6196                 PL_statgv = NULL;
6197         case SVt_PVMG:
6198         case SVt_PVNV:
6199         case SVt_PVIV:
6200         case SVt_PV:
6201           freescalar:
6202             /* Don't bother with SvOOK_off(sv); as we're only going to
6203              * free it.  */
6204             if (SvOOK(sv)) {
6205                 STRLEN offset;
6206                 SvOOK_offset(sv, offset);
6207                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6208                 /* Don't even bother with turning off the OOK flag.  */
6209             }
6210             if (SvROK(sv)) {
6211             free_rv:
6212                 {
6213                     SV * const target = SvRV(sv);
6214                     if (SvWEAKREF(sv))
6215                         sv_del_backref(target, sv);
6216                     else
6217                         next_sv = target;
6218                 }
6219             }
6220 #ifdef PERL_OLD_COPY_ON_WRITE
6221             else if (SvPVX_const(sv)
6222                      && !(SvTYPE(sv) == SVt_PVIO
6223                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6224             {
6225                 if (SvIsCOW(sv)) {
6226                     if (DEBUG_C_TEST) {
6227                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6228                         sv_dump(sv);
6229                     }
6230                     if (SvLEN(sv)) {
6231                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6232                     } else {
6233                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6234                     }
6235
6236                     SvFAKE_off(sv);
6237                 } else if (SvLEN(sv)) {
6238                     Safefree(SvPVX_const(sv));
6239                 }
6240             }
6241 #else
6242             else if (SvPVX_const(sv) && SvLEN(sv)
6243                      && !(SvTYPE(sv) == SVt_PVIO
6244                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6245                 Safefree(SvPVX_mutable(sv));
6246             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6247                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6248                 SvFAKE_off(sv);
6249             }
6250 #endif
6251             break;
6252         case SVt_NV:
6253             break;
6254         }
6255
6256       free_body:
6257
6258         SvFLAGS(sv) &= SVf_BREAK;
6259         SvFLAGS(sv) |= SVTYPEMASK;
6260
6261         sv_type_details = bodies_by_type + type;
6262         if (sv_type_details->arena) {
6263             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6264                      &PL_body_roots[type]);
6265         }
6266         else if (sv_type_details->body_size) {
6267             safefree(SvANY(sv));
6268         }
6269
6270       free_head:
6271         /* caller is responsible for freeing the head of the original sv */
6272         if (sv != orig_sv && !SvREFCNT(sv))
6273             del_SV(sv);
6274
6275         /* grab and free next sv, if any */
6276       get_next_sv:
6277         while (1) {
6278             sv = NULL;
6279             if (next_sv) {
6280                 sv = next_sv;
6281                 next_sv = NULL;
6282             }
6283             else if (!iter_sv) {
6284                 break;
6285             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6286                 AV *const av = (AV*)iter_sv;
6287                 if (AvFILLp(av) > -1) {
6288                     sv = AvARRAY(av)[AvFILLp(av)--];
6289                 }
6290                 else { /* no more elements of current AV to free */
6291                     sv = iter_sv;
6292                     type = SvTYPE(sv);
6293                     /* restore previous value, squirrelled away */
6294                     iter_sv = AvARRAY(av)[AvMAX(av)];
6295                     Safefree(AvALLOC(av));
6296                     goto free_body;
6297                 }
6298             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6299                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6300                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6301                     /* no more elements of current HV to free */
6302                     sv = iter_sv;
6303                     type = SvTYPE(sv);
6304                     /* Restore previous values of iter_sv and hash_index,
6305                      * squirrelled away */
6306                     assert(!SvOBJECT(sv));
6307                     iter_sv = (SV*)SvSTASH(sv);
6308                     assert(!SvMAGICAL(sv));
6309                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6310
6311                     /* free any remaining detritus from the hash struct */
6312                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6313                     assert(!HvARRAY((HV*)sv));
6314                     goto free_body;
6315                 }
6316             }
6317
6318             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6319
6320             if (!sv)
6321                 continue;
6322             if (!SvREFCNT(sv)) {
6323                 sv_free(sv);
6324                 continue;
6325             }
6326             if (--(SvREFCNT(sv)))
6327                 continue;
6328 #ifdef DEBUGGING
6329             if (SvTEMP(sv)) {
6330                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6331                          "Attempt to free temp prematurely: SV 0x%"UVxf
6332                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6333                 continue;
6334             }
6335 #endif
6336             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6337                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6338                 SvREFCNT(sv) = (~(U32)0)/2;
6339                 continue;
6340             }
6341             break;
6342         } /* while 1 */
6343
6344     } /* while sv */
6345 }
6346
6347 /* This routine curses the sv itself, not the object referenced by sv. So
6348    sv does not have to be ROK. */
6349
6350 static bool
6351 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6352     dVAR;
6353
6354     PERL_ARGS_ASSERT_CURSE;
6355     assert(SvOBJECT(sv));
6356
6357     if (PL_defstash &&  /* Still have a symbol table? */
6358         SvDESTROYABLE(sv))
6359     {
6360         dSP;
6361         HV* stash;
6362         do {
6363             CV* destructor;
6364             stash = SvSTASH(sv);
6365             destructor = StashHANDLER(stash,DESTROY);
6366             if (destructor
6367                 /* A constant subroutine can have no side effects, so
6368                    don't bother calling it.  */
6369                 && !CvCONST(destructor)
6370                 /* Don't bother calling an empty destructor or one that
6371                    returns immediately. */
6372                 && (CvISXSUB(destructor)
6373                 || (CvSTART(destructor)
6374                     && (CvSTART(destructor)->op_next->op_type
6375                                         != OP_LEAVESUB)
6376                     && (CvSTART(destructor)->op_next->op_type
6377                                         != OP_PUSHMARK
6378                         || CvSTART(destructor)->op_next->op_next->op_type
6379                                         != OP_RETURN
6380                        )
6381                    ))
6382                )
6383             {
6384                 SV* const tmpref = newRV(sv);
6385                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6386                 ENTER;
6387                 PUSHSTACKi(PERLSI_DESTROY);
6388                 EXTEND(SP, 2);
6389                 PUSHMARK(SP);
6390                 PUSHs(tmpref);
6391                 PUTBACK;
6392                 call_sv(MUTABLE_SV(destructor),
6393                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6394                 POPSTACK;
6395                 SPAGAIN;
6396                 LEAVE;
6397                 if(SvREFCNT(tmpref) < 2) {
6398                     /* tmpref is not kept alive! */
6399                     SvREFCNT(sv)--;
6400                     SvRV_set(tmpref, NULL);
6401                     SvROK_off(tmpref);
6402                 }
6403                 SvREFCNT_dec(tmpref);
6404             }
6405         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6406
6407
6408         if (check_refcnt && SvREFCNT(sv)) {
6409             if (PL_in_clean_objs)
6410                 Perl_croak(aTHX_
6411                   "DESTROY created new reference to dead object '%"HEKf"'",
6412                    HEKfARG(HvNAME_HEK(stash)));
6413             /* DESTROY gave object new lease on life */
6414             return FALSE;
6415         }
6416     }
6417
6418     if (SvOBJECT(sv)) {
6419         SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6420         SvOBJECT_off(sv);       /* Curse the object. */
6421         if (SvTYPE(sv) != SVt_PVIO)
6422             --PL_sv_objcount;/* XXX Might want something more general */
6423     }
6424     return TRUE;
6425 }
6426
6427 /*
6428 =for apidoc sv_newref
6429
6430 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6431 instead.
6432
6433 =cut
6434 */
6435
6436 SV *
6437 Perl_sv_newref(pTHX_ SV *const sv)
6438 {
6439     PERL_UNUSED_CONTEXT;
6440     if (sv)
6441         (SvREFCNT(sv))++;
6442     return sv;
6443 }
6444
6445 /*
6446 =for apidoc sv_free
6447
6448 Decrement an SV's reference count, and if it drops to zero, call
6449 C<sv_clear> to invoke destructors and free up any memory used by
6450 the body; finally, deallocate the SV's head itself.
6451 Normally called via a wrapper macro C<SvREFCNT_dec>.
6452
6453 =cut
6454 */
6455
6456 void
6457 Perl_sv_free(pTHX_ SV *const sv)
6458 {
6459     dVAR;
6460     if (!sv)
6461         return;
6462     if (SvREFCNT(sv) == 0) {
6463         if (SvFLAGS(sv) & SVf_BREAK)
6464             /* this SV's refcnt has been artificially decremented to
6465              * trigger cleanup */
6466             return;
6467         if (PL_in_clean_all) /* All is fair */
6468             return;
6469         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6470             /* make sure SvREFCNT(sv)==0 happens very seldom */
6471             SvREFCNT(sv) = (~(U32)0)/2;
6472             return;
6473         }
6474         if (ckWARN_d(WARN_INTERNAL)) {
6475 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6476             Perl_dump_sv_child(aTHX_ sv);
6477 #else
6478   #ifdef DEBUG_LEAKING_SCALARS
6479             sv_dump(sv);
6480   #endif
6481 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6482             if (PL_warnhook == PERL_WARNHOOK_FATAL
6483                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6484                 /* Don't let Perl_warner cause us to escape our fate:  */
6485                 abort();
6486             }
6487 #endif
6488             /* This may not return:  */
6489             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6490                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6491                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6492 #endif
6493         }
6494 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6495         abort();
6496 #endif
6497         return;
6498     }
6499     if (--(SvREFCNT(sv)) > 0)
6500         return;
6501     Perl_sv_free2(aTHX_ sv);
6502 }
6503
6504 void
6505 Perl_sv_free2(pTHX_ SV *const sv)
6506 {
6507     dVAR;
6508
6509     PERL_ARGS_ASSERT_SV_FREE2;
6510
6511 #ifdef DEBUGGING
6512     if (SvTEMP(sv)) {
6513         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6514                          "Attempt to free temp prematurely: SV 0x%"UVxf
6515                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6516         return;
6517     }
6518 #endif
6519     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6520         /* make sure SvREFCNT(sv)==0 happens very seldom */
6521         SvREFCNT(sv) = (~(U32)0)/2;
6522         return;
6523     }
6524     sv_clear(sv);
6525     if (! SvREFCNT(sv))
6526         del_SV(sv);
6527 }
6528
6529 /*
6530 =for apidoc sv_len
6531
6532 Returns the length of the string in the SV.  Handles magic and type
6533 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6534
6535 =cut
6536 */
6537
6538 STRLEN
6539 Perl_sv_len(pTHX_ register SV *const sv)
6540 {
6541     STRLEN len;
6542
6543     if (!sv)
6544         return 0;
6545
6546     if (SvGMAGICAL(sv))
6547         len = mg_length(sv);
6548     else
6549         (void)SvPV_const(sv, len);
6550     return len;
6551 }
6552
6553 /*
6554 =for apidoc sv_len_utf8
6555
6556 Returns the number of characters in the string in an SV, counting wide
6557 UTF-8 bytes as a single character.  Handles magic and type coercion.
6558
6559 =cut
6560 */
6561
6562 /*
6563  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6564  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6565  * (Note that the mg_len is not the length of the mg_ptr field.
6566  * This allows the cache to store the character length of the string without
6567  * needing to malloc() extra storage to attach to the mg_ptr.)
6568  *
6569  */
6570
6571 STRLEN
6572 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6573 {
6574     if (!sv)
6575         return 0;
6576
6577     if (SvGMAGICAL(sv))
6578         return mg_length(sv);
6579     else
6580     {
6581         STRLEN len;
6582         const U8 *s = (U8*)SvPV_const(sv, len);
6583
6584         if (PL_utf8cache) {
6585             STRLEN ulen;
6586             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6587
6588             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6589                 if (mg->mg_len != -1)
6590                     ulen = mg->mg_len;
6591                 else {
6592                     /* We can use the offset cache for a headstart.
6593                        The longer value is stored in the first pair.  */
6594                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6595
6596                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6597                                                        s + len);
6598                 }
6599                 
6600                 if (PL_utf8cache < 0) {
6601                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6602                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6603                 }
6604             }
6605             else {
6606                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6607                 utf8_mg_len_cache_update(sv, &mg, ulen);
6608             }
6609             return ulen;
6610         }
6611         return Perl_utf8_length(aTHX_ s, s + len);
6612     }
6613 }
6614
6615 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6616    offset.  */
6617 static STRLEN
6618 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6619                       STRLEN *const uoffset_p, bool *const at_end)
6620 {
6621     const U8 *s = start;
6622     STRLEN uoffset = *uoffset_p;
6623
6624     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6625
6626     while (s < send && uoffset) {
6627         --uoffset;
6628         s += UTF8SKIP(s);
6629     }
6630     if (s == send) {
6631         *at_end = TRUE;
6632     }
6633     else if (s > send) {
6634         *at_end = TRUE;
6635         /* This is the existing behaviour. Possibly it should be a croak, as
6636            it's actually a bounds error  */
6637         s = send;
6638     }
6639     *uoffset_p -= uoffset;
6640     return s - start;
6641 }
6642
6643 /* Given the length of the string in both bytes and UTF-8 characters, decide
6644    whether to walk forwards or backwards to find the byte corresponding to
6645    the passed in UTF-8 offset.  */
6646 static STRLEN
6647 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6648                     STRLEN uoffset, const STRLEN uend)
6649 {
6650     STRLEN backw = uend - uoffset;
6651
6652     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6653
6654     if (uoffset < 2 * backw) {
6655         /* The assumption is that going forwards is twice the speed of going
6656            forward (that's where the 2 * backw comes from).
6657            (The real figure of course depends on the UTF-8 data.)  */
6658         const U8 *s = start;
6659
6660         while (s < send && uoffset--)
6661             s += UTF8SKIP(s);
6662         assert (s <= send);
6663         if (s > send)
6664             s = send;
6665         return s - start;
6666     }
6667
6668     while (backw--) {
6669         send--;
6670         while (UTF8_IS_CONTINUATION(*send))
6671             send--;
6672     }
6673     return send - start;
6674 }
6675
6676 /* For the string representation of the given scalar, find the byte
6677    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6678    give another position in the string, *before* the sought offset, which
6679    (which is always true, as 0, 0 is a valid pair of positions), which should
6680    help reduce the amount of linear searching.
6681    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6682    will be used to reduce the amount of linear searching. The cache will be
6683    created if necessary, and the found value offered to it for update.  */
6684 static STRLEN
6685 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6686                     const U8 *const send, STRLEN uoffset,
6687                     STRLEN uoffset0, STRLEN boffset0)
6688 {
6689     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6690     bool found = FALSE;
6691     bool at_end = FALSE;
6692
6693     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6694
6695     assert (uoffset >= uoffset0);
6696
6697     if (!uoffset)
6698         return 0;
6699
6700     if (!SvREADONLY(sv)
6701         && PL_utf8cache
6702         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6703                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6704         if ((*mgp)->mg_ptr) {
6705             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6706             if (cache[0] == uoffset) {
6707                 /* An exact match. */
6708                 return cache[1];
6709             }
6710             if (cache[2] == uoffset) {
6711                 /* An exact match. */
6712                 return cache[3];
6713             }
6714
6715             if (cache[0] < uoffset) {
6716                 /* The cache already knows part of the way.   */
6717                 if (cache[0] > uoffset0) {
6718                     /* The cache knows more than the passed in pair  */
6719                     uoffset0 = cache[0];
6720                     boffset0 = cache[1];
6721                 }
6722                 if ((*mgp)->mg_len != -1) {
6723                     /* And we know the end too.  */
6724                     boffset = boffset0
6725                         + sv_pos_u2b_midway(start + boffset0, send,
6726                                               uoffset - uoffset0,
6727                                               (*mgp)->mg_len - uoffset0);
6728                 } else {
6729                     uoffset -= uoffset0;
6730                     boffset = boffset0
6731                         + sv_pos_u2b_forwards(start + boffset0,
6732                                               send, &uoffset, &at_end);
6733                     uoffset += uoffset0;
6734                 }
6735             }
6736             else if (cache[2] < uoffset) {
6737                 /* We're between the two cache entries.  */
6738                 if (cache[2] > uoffset0) {
6739                     /* and the cache knows more than the passed in pair  */
6740                     uoffset0 = cache[2];
6741                     boffset0 = cache[3];
6742                 }
6743
6744                 boffset = boffset0
6745                     + sv_pos_u2b_midway(start + boffset0,
6746                                           start + cache[1],
6747                                           uoffset - uoffset0,
6748                                           cache[0] - uoffset0);
6749             } else {
6750                 boffset = boffset0
6751                     + sv_pos_u2b_midway(start + boffset0,
6752                                           start + cache[3],
6753                                           uoffset - uoffset0,
6754                                           cache[2] - uoffset0);
6755             }
6756             found = TRUE;
6757         }
6758         else if ((*mgp)->mg_len != -1) {
6759             /* If we can take advantage of a passed in offset, do so.  */
6760             /* In fact, offset0 is either 0, or less than offset, so don't
6761                need to worry about the other possibility.  */
6762             boffset = boffset0
6763                 + sv_pos_u2b_midway(start + boffset0, send,
6764                                       uoffset - uoffset0,
6765                                       (*mgp)->mg_len - uoffset0);
6766             found = TRUE;
6767         }
6768     }
6769
6770     if (!found || PL_utf8cache < 0) {
6771         STRLEN real_boffset;
6772         uoffset -= uoffset0;
6773         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6774                                                       send, &uoffset, &at_end);
6775         uoffset += uoffset0;
6776
6777         if (found && PL_utf8cache < 0)
6778             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6779                                        real_boffset, sv);
6780         boffset = real_boffset;
6781     }
6782
6783     if (PL_utf8cache) {
6784         if (at_end)
6785             utf8_mg_len_cache_update(sv, mgp, uoffset);
6786         else
6787             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6788     }
6789     return boffset;
6790 }
6791
6792
6793 /*
6794 =for apidoc sv_pos_u2b_flags
6795
6796 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6797 the start of the string, to a count of the equivalent number of bytes; if
6798 lenp is non-zero, it does the same to lenp, but this time starting from
6799 the offset, rather than from the start
6800 of the string.  Handles type coercion.
6801 I<flags> is passed to C<SvPV_flags>, and usually should be
6802 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6803
6804 =cut
6805 */
6806
6807 /*
6808  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6809  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6810  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6811  *
6812  */
6813
6814 STRLEN
6815 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6816                       U32 flags)
6817 {
6818     const U8 *start;
6819     STRLEN len;
6820     STRLEN boffset;
6821
6822     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6823
6824     start = (U8*)SvPV_flags(sv, len, flags);
6825     if (len) {
6826         const U8 * const send = start + len;
6827         MAGIC *mg = NULL;
6828         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6829
6830         if (lenp
6831             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6832                         is 0, and *lenp is already set to that.  */) {
6833             /* Convert the relative offset to absolute.  */
6834             const STRLEN uoffset2 = uoffset + *lenp;
6835             const STRLEN boffset2
6836                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6837                                       uoffset, boffset) - boffset;
6838
6839             *lenp = boffset2;
6840         }
6841     } else {
6842         if (lenp)
6843             *lenp = 0;
6844         boffset = 0;
6845     }
6846
6847     return boffset;
6848 }
6849
6850 /*
6851 =for apidoc sv_pos_u2b
6852
6853 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6854 the start of the string, to a count of the equivalent number of bytes; if
6855 lenp is non-zero, it does the same to lenp, but this time starting from
6856 the offset, rather than from the start of the string.  Handles magic and
6857 type coercion.
6858
6859 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6860 than 2Gb.
6861
6862 =cut
6863 */
6864
6865 /*
6866  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6867  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6868  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6869  *
6870  */
6871
6872 /* This function is subject to size and sign problems */
6873
6874 void
6875 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6876 {
6877     PERL_ARGS_ASSERT_SV_POS_U2B;
6878
6879     if (lenp) {
6880         STRLEN ulen = (STRLEN)*lenp;
6881         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6882                                          SV_GMAGIC|SV_CONST_RETURN);
6883         *lenp = (I32)ulen;
6884     } else {
6885         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6886                                          SV_GMAGIC|SV_CONST_RETURN);
6887     }
6888 }
6889
6890 static void
6891 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6892                            const STRLEN ulen)
6893 {
6894     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6895     if (SvREADONLY(sv))
6896         return;
6897
6898     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6899                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6900         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6901     }
6902     assert(*mgp);
6903
6904     (*mgp)->mg_len = ulen;
6905     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
6906     if (ulen != (STRLEN) (*mgp)->mg_len)
6907         (*mgp)->mg_len = -1;
6908 }
6909
6910 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6911    byte length pairing. The (byte) length of the total SV is passed in too,
6912    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6913    may not have updated SvCUR, so we can't rely on reading it directly.
6914
6915    The proffered utf8/byte length pairing isn't used if the cache already has
6916    two pairs, and swapping either for the proffered pair would increase the
6917    RMS of the intervals between known byte offsets.
6918
6919    The cache itself consists of 4 STRLEN values
6920    0: larger UTF-8 offset
6921    1: corresponding byte offset
6922    2: smaller UTF-8 offset
6923    3: corresponding byte offset
6924
6925    Unused cache pairs have the value 0, 0.
6926    Keeping the cache "backwards" means that the invariant of
6927    cache[0] >= cache[2] is maintained even with empty slots, which means that
6928    the code that uses it doesn't need to worry if only 1 entry has actually
6929    been set to non-zero.  It also makes the "position beyond the end of the
6930    cache" logic much simpler, as the first slot is always the one to start
6931    from.   
6932 */
6933 static void
6934 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6935                            const STRLEN utf8, const STRLEN blen)
6936 {
6937     STRLEN *cache;
6938
6939     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6940
6941     if (SvREADONLY(sv))
6942         return;
6943
6944     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6945                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6946         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6947                            0);
6948         (*mgp)->mg_len = -1;
6949     }
6950     assert(*mgp);
6951
6952     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6953         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6954         (*mgp)->mg_ptr = (char *) cache;
6955     }
6956     assert(cache);
6957
6958     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6959         /* SvPOKp() because it's possible that sv has string overloading, and
6960            therefore is a reference, hence SvPVX() is actually a pointer.
6961            This cures the (very real) symptoms of RT 69422, but I'm not actually
6962            sure whether we should even be caching the results of UTF-8
6963            operations on overloading, given that nothing stops overloading
6964            returning a different value every time it's called.  */
6965         const U8 *start = (const U8 *) SvPVX_const(sv);
6966         const STRLEN realutf8 = utf8_length(start, start + byte);
6967
6968         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6969                                    sv);
6970     }
6971
6972     /* Cache is held with the later position first, to simplify the code
6973        that deals with unbounded ends.  */
6974        
6975     ASSERT_UTF8_CACHE(cache);
6976     if (cache[1] == 0) {
6977         /* Cache is totally empty  */
6978         cache[0] = utf8;
6979         cache[1] = byte;
6980     } else if (cache[3] == 0) {
6981         if (byte > cache[1]) {
6982             /* New one is larger, so goes first.  */
6983             cache[2] = cache[0];
6984             cache[3] = cache[1];
6985             cache[0] = utf8;
6986             cache[1] = byte;
6987         } else {
6988             cache[2] = utf8;
6989             cache[3] = byte;
6990         }
6991     } else {
6992 #define THREEWAY_SQUARE(a,b,c,d) \
6993             ((float)((d) - (c))) * ((float)((d) - (c))) \
6994             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6995                + ((float)((b) - (a))) * ((float)((b) - (a)))
6996
6997         /* Cache has 2 slots in use, and we know three potential pairs.
6998            Keep the two that give the lowest RMS distance. Do the
6999            calculation in bytes simply because we always know the byte
7000            length.  squareroot has the same ordering as the positive value,
7001            so don't bother with the actual square root.  */
7002         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
7003         if (byte > cache[1]) {
7004             /* New position is after the existing pair of pairs.  */
7005             const float keep_earlier
7006                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7007             const float keep_later
7008                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7009
7010             if (keep_later < keep_earlier) {
7011                 if (keep_later < existing) {
7012                     cache[2] = cache[0];
7013                     cache[3] = cache[1];
7014                     cache[0] = utf8;
7015                     cache[1] = byte;
7016                 }
7017             }
7018             else {
7019                 if (keep_earlier < existing) {
7020                     cache[0] = utf8;
7021                     cache[1] = byte;
7022                 }
7023             }
7024         }
7025         else if (byte > cache[3]) {
7026             /* New position is between the existing pair of pairs.  */
7027             const float keep_earlier
7028                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7029             const float keep_later
7030                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7031
7032             if (keep_later < keep_earlier) {
7033                 if (keep_later < existing) {
7034                     cache[2] = utf8;
7035                     cache[3] = byte;
7036                 }
7037             }
7038             else {
7039                 if (keep_earlier < existing) {
7040                     cache[0] = utf8;
7041                     cache[1] = byte;
7042                 }
7043             }
7044         }
7045         else {
7046             /* New position is before the existing pair of pairs.  */
7047             const float keep_earlier
7048                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7049             const float keep_later
7050                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7051
7052             if (keep_later < keep_earlier) {
7053                 if (keep_later < existing) {
7054                     cache[2] = utf8;
7055                     cache[3] = byte;
7056                 }
7057             }
7058             else {
7059                 if (keep_earlier < existing) {
7060                     cache[0] = cache[2];
7061                     cache[1] = cache[3];
7062                     cache[2] = utf8;
7063                     cache[3] = byte;
7064                 }
7065             }
7066         }
7067     }
7068     ASSERT_UTF8_CACHE(cache);
7069 }
7070
7071 /* We already know all of the way, now we may be able to walk back.  The same
7072    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7073    backward is half the speed of walking forward. */
7074 static STRLEN
7075 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7076                     const U8 *end, STRLEN endu)
7077 {
7078     const STRLEN forw = target - s;
7079     STRLEN backw = end - target;
7080
7081     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7082
7083     if (forw < 2 * backw) {
7084         return utf8_length(s, target);
7085     }
7086
7087     while (end > target) {
7088         end--;
7089         while (UTF8_IS_CONTINUATION(*end)) {
7090             end--;
7091         }
7092         endu--;
7093     }
7094     return endu;
7095 }
7096
7097 /*
7098 =for apidoc sv_pos_b2u
7099
7100 Converts the value pointed to by offsetp from a count of bytes from the
7101 start of the string, to a count of the equivalent number of UTF-8 chars.
7102 Handles magic and type coercion.
7103
7104 =cut
7105 */
7106
7107 /*
7108  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7109  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7110  * byte offsets.
7111  *
7112  */
7113 void
7114 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
7115 {
7116     const U8* s;
7117     const STRLEN byte = *offsetp;
7118     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7119     STRLEN blen;
7120     MAGIC* mg = NULL;
7121     const U8* send;
7122     bool found = FALSE;
7123
7124     PERL_ARGS_ASSERT_SV_POS_B2U;
7125
7126     if (!sv)
7127         return;
7128
7129     s = (const U8*)SvPV_const(sv, blen);
7130
7131     if (blen < byte)
7132         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7133                    ", byte=%"UVuf, (UV)blen, (UV)byte);
7134
7135     send = s + byte;
7136
7137     if (!SvREADONLY(sv)
7138         && PL_utf8cache
7139         && SvTYPE(sv) >= SVt_PVMG
7140         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7141     {
7142         if (mg->mg_ptr) {
7143             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7144             if (cache[1] == byte) {
7145                 /* An exact match. */
7146                 *offsetp = cache[0];
7147                 return;
7148             }
7149             if (cache[3] == byte) {
7150                 /* An exact match. */
7151                 *offsetp = cache[2];
7152                 return;
7153             }
7154
7155             if (cache[1] < byte) {
7156                 /* We already know part of the way. */
7157                 if (mg->mg_len != -1) {
7158                     /* Actually, we know the end too.  */
7159                     len = cache[0]
7160                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7161                                               s + blen, mg->mg_len - cache[0]);
7162                 } else {
7163                     len = cache[0] + utf8_length(s + cache[1], send);
7164                 }
7165             }
7166             else if (cache[3] < byte) {
7167                 /* We're between the two cached pairs, so we do the calculation
7168                    offset by the byte/utf-8 positions for the earlier pair,
7169                    then add the utf-8 characters from the string start to
7170                    there.  */
7171                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7172                                           s + cache[1], cache[0] - cache[2])
7173                     + cache[2];
7174
7175             }
7176             else { /* cache[3] > byte */
7177                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7178                                           cache[2]);
7179
7180             }
7181             ASSERT_UTF8_CACHE(cache);
7182             found = TRUE;
7183         } else if (mg->mg_len != -1) {
7184             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7185             found = TRUE;
7186         }
7187     }
7188     if (!found || PL_utf8cache < 0) {
7189         const STRLEN real_len = utf8_length(s, send);
7190
7191         if (found && PL_utf8cache < 0)
7192             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7193         len = real_len;
7194     }
7195     *offsetp = len;
7196
7197     if (PL_utf8cache) {
7198         if (blen == byte)
7199             utf8_mg_len_cache_update(sv, &mg, len);
7200         else
7201             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7202     }
7203 }
7204
7205 static void
7206 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7207                              STRLEN real, SV *const sv)
7208 {
7209     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7210
7211     /* As this is debugging only code, save space by keeping this test here,
7212        rather than inlining it in all the callers.  */
7213     if (from_cache == real)
7214         return;
7215
7216     /* Need to turn the assertions off otherwise we may recurse infinitely
7217        while printing error messages.  */
7218     SAVEI8(PL_utf8cache);
7219     PL_utf8cache = 0;
7220     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7221                func, (UV) from_cache, (UV) real, SVfARG(sv));
7222 }
7223
7224 /*
7225 =for apidoc sv_eq
7226
7227 Returns a boolean indicating whether the strings in the two SVs are
7228 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7229 coerce its args to strings if necessary.
7230
7231 =for apidoc sv_eq_flags
7232
7233 Returns a boolean indicating whether the strings in the two SVs are
7234 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7235 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7236
7237 =cut
7238 */
7239
7240 I32
7241 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
7242 {
7243     dVAR;
7244     const char *pv1;
7245     STRLEN cur1;
7246     const char *pv2;
7247     STRLEN cur2;
7248     I32  eq     = 0;
7249     SV* svrecode = NULL;
7250
7251     if (!sv1) {
7252         pv1 = "";
7253         cur1 = 0;
7254     }
7255     else {
7256         /* if pv1 and pv2 are the same, second SvPV_const call may
7257          * invalidate pv1 (if we are handling magic), so we may need to
7258          * make a copy */
7259         if (sv1 == sv2 && flags & SV_GMAGIC
7260          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7261             pv1 = SvPV_const(sv1, cur1);
7262             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7263         }
7264         pv1 = SvPV_flags_const(sv1, cur1, flags);
7265     }
7266
7267     if (!sv2){
7268         pv2 = "";
7269         cur2 = 0;
7270     }
7271     else
7272         pv2 = SvPV_flags_const(sv2, cur2, flags);
7273
7274     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7275         /* Differing utf8ness.
7276          * Do not UTF8size the comparands as a side-effect. */
7277          if (PL_encoding) {
7278               if (SvUTF8(sv1)) {
7279                    svrecode = newSVpvn(pv2, cur2);
7280                    sv_recode_to_utf8(svrecode, PL_encoding);
7281                    pv2 = SvPV_const(svrecode, cur2);
7282               }
7283               else {
7284                    svrecode = newSVpvn(pv1, cur1);
7285                    sv_recode_to_utf8(svrecode, PL_encoding);
7286                    pv1 = SvPV_const(svrecode, cur1);
7287               }
7288               /* Now both are in UTF-8. */
7289               if (cur1 != cur2) {
7290                    SvREFCNT_dec(svrecode);
7291                    return FALSE;
7292               }
7293          }
7294          else {
7295               if (SvUTF8(sv1)) {
7296                   /* sv1 is the UTF-8 one  */
7297                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7298                                         (const U8*)pv1, cur1) == 0;
7299               }
7300               else {
7301                   /* sv2 is the UTF-8 one  */
7302                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7303                                         (const U8*)pv2, cur2) == 0;
7304               }
7305          }
7306     }
7307
7308     if (cur1 == cur2)
7309         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7310         
7311     SvREFCNT_dec(svrecode);
7312
7313     return eq;
7314 }
7315
7316 /*
7317 =for apidoc sv_cmp
7318
7319 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7320 string in C<sv1> is less than, equal to, or greater than the string in
7321 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7322 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7323
7324 =for apidoc sv_cmp_flags
7325
7326 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7327 string in C<sv1> is less than, equal to, or greater than the string in
7328 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7329 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7330 also C<sv_cmp_locale_flags>.
7331
7332 =cut
7333 */
7334
7335 I32
7336 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7337 {
7338     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7339 }
7340
7341 I32
7342 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7343                   const U32 flags)
7344 {
7345     dVAR;
7346     STRLEN cur1, cur2;
7347     const char *pv1, *pv2;
7348     char *tpv = NULL;
7349     I32  cmp;
7350     SV *svrecode = NULL;
7351
7352     if (!sv1) {
7353         pv1 = "";
7354         cur1 = 0;
7355     }
7356     else
7357         pv1 = SvPV_flags_const(sv1, cur1, flags);
7358
7359     if (!sv2) {
7360         pv2 = "";
7361         cur2 = 0;
7362     }
7363     else
7364         pv2 = SvPV_flags_const(sv2, cur2, flags);
7365
7366     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7367         /* Differing utf8ness.
7368          * Do not UTF8size the comparands as a side-effect. */
7369         if (SvUTF8(sv1)) {
7370             if (PL_encoding) {
7371                  svrecode = newSVpvn(pv2, cur2);
7372                  sv_recode_to_utf8(svrecode, PL_encoding);
7373                  pv2 = SvPV_const(svrecode, cur2);
7374             }
7375             else {
7376                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7377                                                    (const U8*)pv1, cur1);
7378                 return retval ? retval < 0 ? -1 : +1 : 0;
7379             }
7380         }
7381         else {
7382             if (PL_encoding) {
7383                  svrecode = newSVpvn(pv1, cur1);
7384                  sv_recode_to_utf8(svrecode, PL_encoding);
7385                  pv1 = SvPV_const(svrecode, cur1);
7386             }
7387             else {
7388                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7389                                                   (const U8*)pv2, cur2);
7390                 return retval ? retval < 0 ? -1 : +1 : 0;
7391             }
7392         }
7393     }
7394
7395     if (!cur1) {
7396         cmp = cur2 ? -1 : 0;
7397     } else if (!cur2) {
7398         cmp = 1;
7399     } else {
7400         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7401
7402         if (retval) {
7403             cmp = retval < 0 ? -1 : 1;
7404         } else if (cur1 == cur2) {
7405             cmp = 0;
7406         } else {
7407             cmp = cur1 < cur2 ? -1 : 1;
7408         }
7409     }
7410
7411     SvREFCNT_dec(svrecode);
7412     if (tpv)
7413         Safefree(tpv);
7414
7415     return cmp;
7416 }
7417
7418 /*
7419 =for apidoc sv_cmp_locale
7420
7421 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7422 'use bytes' aware, handles get magic, and will coerce its args to strings
7423 if necessary.  See also C<sv_cmp>.
7424
7425 =for apidoc sv_cmp_locale_flags
7426
7427 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7428 'use bytes' aware and will coerce its args to strings if necessary.  If the
7429 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7430
7431 =cut
7432 */
7433
7434 I32
7435 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7436 {
7437     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7438 }
7439
7440 I32
7441 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7442                          const U32 flags)
7443 {
7444     dVAR;
7445 #ifdef USE_LOCALE_COLLATE
7446
7447     char *pv1, *pv2;
7448     STRLEN len1, len2;
7449     I32 retval;
7450
7451     if (PL_collation_standard)
7452         goto raw_compare;
7453
7454     len1 = 0;
7455     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7456     len2 = 0;
7457     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7458
7459     if (!pv1 || !len1) {
7460         if (pv2 && len2)
7461             return -1;
7462         else
7463             goto raw_compare;
7464     }
7465     else {
7466         if (!pv2 || !len2)
7467             return 1;
7468     }
7469
7470     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7471
7472     if (retval)
7473         return retval < 0 ? -1 : 1;
7474
7475     /*
7476      * When the result of collation is equality, that doesn't mean
7477      * that there are no differences -- some locales exclude some
7478      * characters from consideration.  So to avoid false equalities,
7479      * we use the raw string as a tiebreaker.
7480      */
7481
7482   raw_compare:
7483     /*FALLTHROUGH*/
7484
7485 #endif /* USE_LOCALE_COLLATE */
7486
7487     return sv_cmp(sv1, sv2);
7488 }
7489
7490
7491 #ifdef USE_LOCALE_COLLATE
7492
7493 /*
7494 =for apidoc sv_collxfrm
7495
7496 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7497 C<sv_collxfrm_flags>.
7498
7499 =for apidoc sv_collxfrm_flags
7500
7501 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7502 flags contain SV_GMAGIC, it handles get-magic.
7503
7504 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7505 scalar data of the variable, but transformed to such a format that a normal
7506 memory comparison can be used to compare the data according to the locale
7507 settings.
7508
7509 =cut
7510 */
7511
7512 char *
7513 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7514 {
7515     dVAR;
7516     MAGIC *mg;
7517
7518     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7519
7520     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7521     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7522         const char *s;
7523         char *xf;
7524         STRLEN len, xlen;
7525
7526         if (mg)
7527             Safefree(mg->mg_ptr);
7528         s = SvPV_flags_const(sv, len, flags);
7529         if ((xf = mem_collxfrm(s, len, &xlen))) {
7530             if (! mg) {
7531 #ifdef PERL_OLD_COPY_ON_WRITE
7532                 if (SvIsCOW(sv))
7533                     sv_force_normal_flags(sv, 0);
7534 #endif
7535                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7536                                  0, 0);
7537                 assert(mg);
7538             }
7539             mg->mg_ptr = xf;
7540             mg->mg_len = xlen;
7541         }
7542         else {
7543             if (mg) {
7544                 mg->mg_ptr = NULL;
7545                 mg->mg_len = -1;
7546             }
7547         }
7548     }
7549     if (mg && mg->mg_ptr) {
7550         *nxp = mg->mg_len;
7551         return mg->mg_ptr + sizeof(PL_collation_ix);
7552     }
7553     else {
7554         *nxp = 0;
7555         return NULL;
7556     }
7557 }
7558
7559 #endif /* USE_LOCALE_COLLATE */
7560
7561 static char *
7562 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7563 {
7564     SV * const tsv = newSV(0);
7565     ENTER;
7566     SAVEFREESV(tsv);
7567     sv_gets(tsv, fp, 0);
7568     sv_utf8_upgrade_nomg(tsv);
7569     SvCUR_set(sv,append);
7570     sv_catsv(sv,tsv);
7571     LEAVE;
7572     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7573 }
7574
7575 static char *
7576 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7577 {
7578     I32 bytesread;
7579     const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7580       /* Grab the size of the record we're getting */
7581     char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7582 #ifdef VMS
7583     int fd;
7584 #endif
7585
7586     /* Go yank in */
7587 #ifdef VMS
7588     /* VMS wants read instead of fread, because fread doesn't respect */
7589     /* RMS record boundaries. This is not necessarily a good thing to be */
7590     /* doing, but we've got no other real choice - except avoid stdio
7591        as implementation - perhaps write a :vms layer ?
7592     */
7593     fd = PerlIO_fileno(fp);
7594     if (fd != -1) {
7595         bytesread = PerlLIO_read(fd, buffer, recsize);
7596     }
7597     else /* in-memory file from PerlIO::Scalar */
7598 #endif
7599     {
7600         bytesread = PerlIO_read(fp, buffer, recsize);
7601     }
7602
7603     if (bytesread < 0)
7604         bytesread = 0;
7605     SvCUR_set(sv, bytesread + append);
7606     buffer[bytesread] = '\0';
7607     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7608 }
7609
7610 /*
7611 =for apidoc sv_gets
7612
7613 Get a line from the filehandle and store it into the SV, optionally
7614 appending to the currently-stored string.
7615
7616 =cut
7617 */
7618
7619 char *
7620 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7621 {
7622     dVAR;
7623     const char *rsptr;
7624     STRLEN rslen;
7625     register STDCHAR rslast;
7626     register STDCHAR *bp;
7627     register I32 cnt;
7628     I32 i = 0;
7629     I32 rspara = 0;
7630
7631     PERL_ARGS_ASSERT_SV_GETS;
7632
7633     if (SvTHINKFIRST(sv))
7634         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7635     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7636        from <>.
7637        However, perlbench says it's slower, because the existing swipe code
7638        is faster than copy on write.
7639        Swings and roundabouts.  */
7640     SvUPGRADE(sv, SVt_PV);
7641
7642     if (append) {
7643         if (PerlIO_isutf8(fp)) {
7644             if (!SvUTF8(sv)) {
7645                 sv_utf8_upgrade_nomg(sv);
7646                 sv_pos_u2b(sv,&append,0);
7647             }
7648         } else if (SvUTF8(sv)) {
7649             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7650         }
7651     }
7652
7653     SvPOK_only(sv);
7654     if (!append) {
7655         SvCUR_set(sv,0);
7656     }
7657     if (PerlIO_isutf8(fp))
7658         SvUTF8_on(sv);
7659
7660     if (IN_PERL_COMPILETIME) {
7661         /* we always read code in line mode */
7662         rsptr = "\n";
7663         rslen = 1;
7664     }
7665     else if (RsSNARF(PL_rs)) {
7666         /* If it is a regular disk file use size from stat() as estimate
7667            of amount we are going to read -- may result in mallocing
7668            more memory than we really need if the layers below reduce
7669            the size we read (e.g. CRLF or a gzip layer).
7670          */
7671         Stat_t st;
7672         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7673             const Off_t offset = PerlIO_tell(fp);
7674             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7675                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7676             }
7677         }
7678         rsptr = NULL;
7679         rslen = 0;
7680     }
7681     else if (RsRECORD(PL_rs)) {
7682         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7683     }
7684     else if (RsPARA(PL_rs)) {
7685         rsptr = "\n\n";
7686         rslen = 2;
7687         rspara = 1;
7688     }
7689     else {
7690         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7691         if (PerlIO_isutf8(fp)) {
7692             rsptr = SvPVutf8(PL_rs, rslen);
7693         }
7694         else {
7695             if (SvUTF8(PL_rs)) {
7696                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7697                     Perl_croak(aTHX_ "Wide character in $/");
7698                 }
7699             }
7700             rsptr = SvPV_const(PL_rs, rslen);
7701         }
7702     }
7703
7704     rslast = rslen ? rsptr[rslen - 1] : '\0';
7705
7706     if (rspara) {               /* have to do this both before and after */
7707         do {                    /* to make sure file boundaries work right */
7708             if (PerlIO_eof(fp))
7709                 return 0;
7710             i = PerlIO_getc(fp);
7711             if (i != '\n') {
7712                 if (i == -1)
7713                     return 0;
7714                 PerlIO_ungetc(fp,i);
7715                 break;
7716             }
7717         } while (i != EOF);
7718     }
7719
7720     /* See if we know enough about I/O mechanism to cheat it ! */
7721
7722     /* This used to be #ifdef test - it is made run-time test for ease
7723        of abstracting out stdio interface. One call should be cheap
7724        enough here - and may even be a macro allowing compile
7725        time optimization.
7726      */
7727
7728     if (PerlIO_fast_gets(fp)) {
7729
7730     /*
7731      * We're going to steal some values from the stdio struct
7732      * and put EVERYTHING in the innermost loop into registers.
7733      */
7734     register STDCHAR *ptr;
7735     STRLEN bpx;
7736     I32 shortbuffered;
7737
7738 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7739     /* An ungetc()d char is handled separately from the regular
7740      * buffer, so we getc() it back out and stuff it in the buffer.
7741      */
7742     i = PerlIO_getc(fp);
7743     if (i == EOF) return 0;
7744     *(--((*fp)->_ptr)) = (unsigned char) i;
7745     (*fp)->_cnt++;
7746 #endif
7747
7748     /* Here is some breathtakingly efficient cheating */
7749
7750     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7751     /* make sure we have the room */
7752     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7753         /* Not room for all of it
7754            if we are looking for a separator and room for some
7755          */
7756         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7757             /* just process what we have room for */
7758             shortbuffered = cnt - SvLEN(sv) + append + 1;
7759             cnt -= shortbuffered;
7760         }
7761         else {
7762             shortbuffered = 0;
7763             /* remember that cnt can be negative */
7764             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7765         }
7766     }
7767     else
7768         shortbuffered = 0;
7769     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7770     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7771     DEBUG_P(PerlIO_printf(Perl_debug_log,
7772         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7773     DEBUG_P(PerlIO_printf(Perl_debug_log,
7774         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7775                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7776                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7777     for (;;) {
7778       screamer:
7779         if (cnt > 0) {
7780             if (rslen) {
7781                 while (cnt > 0) {                    /* this     |  eat */
7782                     cnt--;
7783                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7784                         goto thats_all_folks;        /* screams  |  sed :-) */
7785                 }
7786             }
7787             else {
7788                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7789                 bp += cnt;                           /* screams  |  dust */
7790                 ptr += cnt;                          /* louder   |  sed :-) */
7791                 cnt = 0;
7792                 assert (!shortbuffered);
7793                 goto cannot_be_shortbuffered;
7794             }
7795         }
7796         
7797         if (shortbuffered) {            /* oh well, must extend */
7798             cnt = shortbuffered;
7799             shortbuffered = 0;
7800             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7801             SvCUR_set(sv, bpx);
7802             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7803             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7804             continue;
7805         }
7806
7807     cannot_be_shortbuffered:
7808         DEBUG_P(PerlIO_printf(Perl_debug_log,
7809                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7810                               PTR2UV(ptr),(long)cnt));
7811         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7812
7813         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7814             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7815             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7816             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7817
7818         /* This used to call 'filbuf' in stdio form, but as that behaves like
7819            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7820            another abstraction.  */
7821         i   = PerlIO_getc(fp);          /* get more characters */
7822
7823         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7824             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7825             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7826             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7827
7828         cnt = PerlIO_get_cnt(fp);
7829         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7830         DEBUG_P(PerlIO_printf(Perl_debug_log,
7831             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7832
7833         if (i == EOF)                   /* all done for ever? */
7834             goto thats_really_all_folks;
7835
7836         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7837         SvCUR_set(sv, bpx);
7838         SvGROW(sv, bpx + cnt + 2);
7839         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7840
7841         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7842
7843         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7844             goto thats_all_folks;
7845     }
7846
7847 thats_all_folks:
7848     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7849           memNE((char*)bp - rslen, rsptr, rslen))
7850         goto screamer;                          /* go back to the fray */
7851 thats_really_all_folks:
7852     if (shortbuffered)
7853         cnt += shortbuffered;
7854         DEBUG_P(PerlIO_printf(Perl_debug_log,
7855             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7856     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7857     DEBUG_P(PerlIO_printf(Perl_debug_log,
7858         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7859         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7860         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7861     *bp = '\0';
7862     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7863     DEBUG_P(PerlIO_printf(Perl_debug_log,
7864         "Screamer: done, len=%ld, string=|%.*s|\n",
7865         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7866     }
7867    else
7868     {
7869        /*The big, slow, and stupid way. */
7870 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7871         STDCHAR *buf = NULL;
7872         Newx(buf, 8192, STDCHAR);
7873         assert(buf);
7874 #else
7875         STDCHAR buf[8192];
7876 #endif
7877
7878 screamer2:
7879         if (rslen) {
7880             register const STDCHAR * const bpe = buf + sizeof(buf);
7881             bp = buf;
7882             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7883                 ; /* keep reading */
7884             cnt = bp - buf;
7885         }
7886         else {
7887             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7888             /* Accommodate broken VAXC compiler, which applies U8 cast to
7889              * both args of ?: operator, causing EOF to change into 255
7890              */
7891             if (cnt > 0)
7892                  i = (U8)buf[cnt - 1];
7893             else
7894                  i = EOF;
7895         }
7896
7897         if (cnt < 0)
7898             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7899         if (append)
7900              sv_catpvn(sv, (char *) buf, cnt);
7901         else
7902              sv_setpvn(sv, (char *) buf, cnt);
7903
7904         if (i != EOF &&                 /* joy */
7905             (!rslen ||
7906              SvCUR(sv) < rslen ||
7907              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7908         {
7909             append = -1;
7910             /*
7911              * If we're reading from a TTY and we get a short read,
7912              * indicating that the user hit his EOF character, we need
7913              * to notice it now, because if we try to read from the TTY
7914              * again, the EOF condition will disappear.
7915              *
7916              * The comparison of cnt to sizeof(buf) is an optimization
7917              * that prevents unnecessary calls to feof().
7918              *
7919              * - jik 9/25/96
7920              */
7921             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7922                 goto screamer2;
7923         }
7924
7925 #ifdef USE_HEAP_INSTEAD_OF_STACK
7926         Safefree(buf);
7927 #endif
7928     }
7929
7930     if (rspara) {               /* have to do this both before and after */
7931         while (i != EOF) {      /* to make sure file boundaries work right */
7932             i = PerlIO_getc(fp);
7933             if (i != '\n') {
7934                 PerlIO_ungetc(fp,i);
7935                 break;
7936             }
7937         }
7938     }
7939
7940     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7941 }
7942
7943 /*
7944 =for apidoc sv_inc
7945
7946 Auto-increment of the value in the SV, doing string to numeric conversion
7947 if necessary.  Handles 'get' magic and operator overloading.
7948
7949 =cut
7950 */
7951
7952 void
7953 Perl_sv_inc(pTHX_ register SV *const sv)
7954 {
7955     if (!sv)
7956         return;
7957     SvGETMAGIC(sv);
7958     sv_inc_nomg(sv);
7959 }
7960
7961 /*
7962 =for apidoc sv_inc_nomg
7963
7964 Auto-increment of the value in the SV, doing string to numeric conversion
7965 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
7966
7967 =cut
7968 */
7969
7970 void
7971 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7972 {
7973     dVAR;
7974     register char *d;
7975     int flags;
7976
7977     if (!sv)
7978         return;
7979     if (SvTHINKFIRST(sv)) {
7980         if (SvIsCOW(sv) || isGV_with_GP(sv))
7981             sv_force_normal_flags(sv, 0);
7982         if (SvREADONLY(sv)) {
7983             if (IN_PERL_RUNTIME)
7984                 Perl_croak_no_modify(aTHX);
7985         }
7986         if (SvROK(sv)) {
7987             IV i;
7988             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
7989                 return;
7990             i = PTR2IV(SvRV(sv));
7991             sv_unref(sv);
7992             sv_setiv(sv, i);
7993         }
7994     }
7995     flags = SvFLAGS(sv);
7996     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7997         /* It's (privately or publicly) a float, but not tested as an
7998            integer, so test it to see. */
7999         (void) SvIV(sv);
8000         flags = SvFLAGS(sv);
8001     }
8002     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8003         /* It's publicly an integer, or privately an integer-not-float */
8004 #ifdef PERL_PRESERVE_IVUV
8005       oops_its_int:
8006 #endif
8007         if (SvIsUV(sv)) {
8008             if (SvUVX(sv) == UV_MAX)
8009                 sv_setnv(sv, UV_MAX_P1);
8010             else
8011                 (void)SvIOK_only_UV(sv);
8012                 SvUV_set(sv, SvUVX(sv) + 1);
8013         } else {
8014             if (SvIVX(sv) == IV_MAX)
8015                 sv_setuv(sv, (UV)IV_MAX + 1);
8016             else {
8017                 (void)SvIOK_only(sv);
8018                 SvIV_set(sv, SvIVX(sv) + 1);
8019             }   
8020         }
8021         return;
8022     }
8023     if (flags & SVp_NOK) {
8024         const NV was = SvNVX(sv);
8025         if (NV_OVERFLOWS_INTEGERS_AT &&
8026             was >= NV_OVERFLOWS_INTEGERS_AT) {
8027             /* diag_listed_as: Lost precision when %s %f by 1 */
8028             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8029                            "Lost precision when incrementing %" NVff " by 1",
8030                            was);
8031         }
8032         (void)SvNOK_only(sv);
8033         SvNV_set(sv, was + 1.0);
8034         return;
8035     }
8036
8037     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8038         if ((flags & SVTYPEMASK) < SVt_PVIV)
8039             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8040         (void)SvIOK_only(sv);
8041         SvIV_set(sv, 1);
8042         return;
8043     }
8044     d = SvPVX(sv);
8045     while (isALPHA(*d)) d++;
8046     while (isDIGIT(*d)) d++;
8047     if (d < SvEND(sv)) {
8048 #ifdef PERL_PRESERVE_IVUV
8049         /* Got to punt this as an integer if needs be, but we don't issue
8050            warnings. Probably ought to make the sv_iv_please() that does
8051            the conversion if possible, and silently.  */
8052         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8053         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8054             /* Need to try really hard to see if it's an integer.
8055                9.22337203685478e+18 is an integer.
8056                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8057                so $a="9.22337203685478e+18"; $a+0; $a++
8058                needs to be the same as $a="9.22337203685478e+18"; $a++
8059                or we go insane. */
8060         
8061             (void) sv_2iv(sv);
8062             if (SvIOK(sv))
8063                 goto oops_its_int;
8064
8065             /* sv_2iv *should* have made this an NV */
8066             if (flags & SVp_NOK) {
8067                 (void)SvNOK_only(sv);
8068                 SvNV_set(sv, SvNVX(sv) + 1.0);
8069                 return;
8070             }
8071             /* I don't think we can get here. Maybe I should assert this
8072                And if we do get here I suspect that sv_setnv will croak. NWC
8073                Fall through. */
8074 #if defined(USE_LONG_DOUBLE)
8075             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",
8076                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8077 #else
8078             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8079                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8080 #endif
8081         }
8082 #endif /* PERL_PRESERVE_IVUV */
8083         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8084         return;
8085     }
8086     d--;
8087     while (d >= SvPVX_const(sv)) {
8088         if (isDIGIT(*d)) {
8089             if (++*d <= '9')
8090                 return;
8091             *(d--) = '0';
8092         }
8093         else {
8094 #ifdef EBCDIC
8095             /* MKS: The original code here died if letters weren't consecutive.
8096              * at least it didn't have to worry about non-C locales.  The
8097              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8098              * arranged in order (although not consecutively) and that only
8099              * [A-Za-z] are accepted by isALPHA in the C locale.
8100              */
8101             if (*d != 'z' && *d != 'Z') {
8102                 do { ++*d; } while (!isALPHA(*d));
8103                 return;
8104             }
8105             *(d--) -= 'z' - 'a';
8106 #else
8107             ++*d;
8108             if (isALPHA(*d))
8109                 return;
8110             *(d--) -= 'z' - 'a' + 1;
8111 #endif
8112         }
8113     }
8114     /* oh,oh, the number grew */
8115     SvGROW(sv, SvCUR(sv) + 2);
8116     SvCUR_set(sv, SvCUR(sv) + 1);
8117     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8118         *d = d[-1];
8119     if (isDIGIT(d[1]))
8120         *d = '1';
8121     else
8122         *d = d[1];
8123 }
8124
8125 /*
8126 =for apidoc sv_dec
8127
8128 Auto-decrement of the value in the SV, doing string to numeric conversion
8129 if necessary.  Handles 'get' magic and operator overloading.
8130
8131 =cut
8132 */
8133
8134 void
8135 Perl_sv_dec(pTHX_ register SV *const sv)
8136 {
8137     dVAR;
8138     if (!sv)
8139         return;
8140     SvGETMAGIC(sv);
8141     sv_dec_nomg(sv);
8142 }
8143
8144 /*
8145 =for apidoc sv_dec_nomg
8146
8147 Auto-decrement of the value in the SV, doing string to numeric conversion
8148 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8149
8150 =cut
8151 */
8152
8153 void
8154 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8155 {
8156     dVAR;
8157     int flags;
8158
8159     if (!sv)
8160         return;
8161     if (SvTHINKFIRST(sv)) {
8162         if (SvIsCOW(sv) || isGV_with_GP(sv))
8163             sv_force_normal_flags(sv, 0);
8164         if (SvREADONLY(sv)) {
8165             if (IN_PERL_RUNTIME)
8166                 Perl_croak_no_modify(aTHX);
8167         }
8168         if (SvROK(sv)) {
8169             IV i;
8170             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8171                 return;
8172             i = PTR2IV(SvRV(sv));
8173             sv_unref(sv);
8174             sv_setiv(sv, i);
8175         }
8176     }
8177     /* Unlike sv_inc we don't have to worry about string-never-numbers
8178        and keeping them magic. But we mustn't warn on punting */
8179     flags = SvFLAGS(sv);
8180     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8181         /* It's publicly an integer, or privately an integer-not-float */
8182 #ifdef PERL_PRESERVE_IVUV
8183       oops_its_int:
8184 #endif
8185         if (SvIsUV(sv)) {
8186             if (SvUVX(sv) == 0) {
8187                 (void)SvIOK_only(sv);
8188                 SvIV_set(sv, -1);
8189             }
8190             else {
8191                 (void)SvIOK_only_UV(sv);
8192                 SvUV_set(sv, SvUVX(sv) - 1);
8193             }   
8194         } else {
8195             if (SvIVX(sv) == IV_MIN) {
8196                 sv_setnv(sv, (NV)IV_MIN);
8197                 goto oops_its_num;
8198             }
8199             else {
8200                 (void)SvIOK_only(sv);
8201                 SvIV_set(sv, SvIVX(sv) - 1);
8202             }   
8203         }
8204         return;
8205     }
8206     if (flags & SVp_NOK) {
8207     oops_its_num:
8208         {
8209             const NV was = SvNVX(sv);
8210             if (NV_OVERFLOWS_INTEGERS_AT &&
8211                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8212                 /* diag_listed_as: Lost precision when %s %f by 1 */
8213                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8214                                "Lost precision when decrementing %" NVff " by 1",
8215                                was);
8216             }
8217             (void)SvNOK_only(sv);
8218             SvNV_set(sv, was - 1.0);
8219             return;
8220         }
8221     }
8222     if (!(flags & SVp_POK)) {
8223         if ((flags & SVTYPEMASK) < SVt_PVIV)
8224             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8225         SvIV_set(sv, -1);
8226         (void)SvIOK_only(sv);
8227         return;
8228     }
8229 #ifdef PERL_PRESERVE_IVUV
8230     {
8231         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8232         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8233             /* Need to try really hard to see if it's an integer.
8234                9.22337203685478e+18 is an integer.
8235                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8236                so $a="9.22337203685478e+18"; $a+0; $a--
8237                needs to be the same as $a="9.22337203685478e+18"; $a--
8238                or we go insane. */
8239         
8240             (void) sv_2iv(sv);
8241             if (SvIOK(sv))
8242                 goto oops_its_int;
8243
8244             /* sv_2iv *should* have made this an NV */
8245             if (flags & SVp_NOK) {
8246                 (void)SvNOK_only(sv);
8247                 SvNV_set(sv, SvNVX(sv) - 1.0);
8248                 return;
8249             }
8250             /* I don't think we can get here. Maybe I should assert this
8251                And if we do get here I suspect that sv_setnv will croak. NWC
8252                Fall through. */
8253 #if defined(USE_LONG_DOUBLE)
8254             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",
8255                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8256 #else
8257             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8258                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8259 #endif
8260         }
8261     }
8262 #endif /* PERL_PRESERVE_IVUV */
8263     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8264 }
8265
8266 /* this define is used to eliminate a chunk of duplicated but shared logic
8267  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8268  * used anywhere but here - yves
8269  */
8270 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8271     STMT_START {      \
8272         EXTEND_MORTAL(1); \
8273         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8274     } STMT_END
8275
8276 /*
8277 =for apidoc sv_mortalcopy
8278
8279 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8280 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8281 explicit call to FREETMPS, or by an implicit call at places such as
8282 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8283
8284 =cut
8285 */
8286
8287 /* Make a string that will exist for the duration of the expression
8288  * evaluation.  Actually, it may have to last longer than that, but
8289  * hopefully we won't free it until it has been assigned to a
8290  * permanent location. */
8291
8292 SV *
8293 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
8294 {
8295     dVAR;
8296     register SV *sv;
8297
8298     new_SV(sv);
8299     sv_setsv(sv,oldstr);
8300     PUSH_EXTEND_MORTAL__SV_C(sv);
8301     SvTEMP_on(sv);
8302     return sv;
8303 }
8304
8305 /*
8306 =for apidoc sv_newmortal
8307
8308 Creates a new null SV which is mortal.  The reference count of the SV is
8309 set to 1.  It will be destroyed "soon", either by an explicit call to
8310 FREETMPS, or by an implicit call at places such as statement boundaries.
8311 See also C<sv_mortalcopy> and C<sv_2mortal>.
8312
8313 =cut
8314 */
8315
8316 SV *
8317 Perl_sv_newmortal(pTHX)
8318 {
8319     dVAR;
8320     register SV *sv;
8321
8322     new_SV(sv);
8323     SvFLAGS(sv) = SVs_TEMP;
8324     PUSH_EXTEND_MORTAL__SV_C(sv);
8325     return sv;
8326 }
8327
8328
8329 /*
8330 =for apidoc newSVpvn_flags
8331
8332 Creates a new SV and copies a string into it.  The reference count for the
8333 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8334 string.  You are responsible for ensuring that the source string is at least
8335 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8336 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8337 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8338 returning.  If C<SVf_UTF8> is set, C<s>
8339 is considered to be in UTF-8 and the
8340 C<SVf_UTF8> flag will be set on the new SV.
8341 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8342
8343     #define newSVpvn_utf8(s, len, u)                    \
8344         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8345
8346 =cut
8347 */
8348
8349 SV *
8350 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8351 {
8352     dVAR;
8353     register SV *sv;
8354
8355     /* All the flags we don't support must be zero.
8356        And we're new code so I'm going to assert this from the start.  */
8357     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8358     new_SV(sv);
8359     sv_setpvn(sv,s,len);
8360
8361     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8362      * and do what it does ourselves here.
8363      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8364      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8365      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8366      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8367      */
8368
8369     SvFLAGS(sv) |= flags;
8370
8371     if(flags & SVs_TEMP){
8372         PUSH_EXTEND_MORTAL__SV_C(sv);
8373     }
8374
8375     return sv;
8376 }
8377
8378 /*
8379 =for apidoc sv_2mortal
8380
8381 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8382 by an explicit call to FREETMPS, or by an implicit call at places such as
8383 statement boundaries.  SvTEMP() is turned on which means that the SV's
8384 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8385 and C<sv_mortalcopy>.
8386
8387 =cut
8388 */
8389
8390 SV *
8391 Perl_sv_2mortal(pTHX_ register SV *const sv)
8392 {
8393     dVAR;
8394     if (!sv)
8395         return NULL;
8396     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8397         return sv;
8398     PUSH_EXTEND_MORTAL__SV_C(sv);
8399     SvTEMP_on(sv);
8400     return sv;
8401 }
8402
8403 /*
8404 =for apidoc newSVpv
8405
8406 Creates a new SV and copies a string into it.  The reference count for the
8407 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8408 strlen().  For efficiency, consider using C<newSVpvn> instead.
8409
8410 =cut
8411 */
8412
8413 SV *
8414 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8415 {
8416     dVAR;
8417     register SV *sv;
8418
8419     new_SV(sv);
8420     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8421     return sv;
8422 }
8423
8424 /*
8425 =for apidoc newSVpvn
8426
8427 Creates a new SV and copies a buffer into it, which may contain NUL characters
8428 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8429 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8430 are responsible for ensuring that the source buffer is at least
8431 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8432 undefined.
8433
8434 =cut
8435 */
8436
8437 SV *
8438 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8439 {
8440     dVAR;
8441     register SV *sv;
8442
8443     new_SV(sv);
8444     sv_setpvn(sv,buffer,len);
8445     return sv;
8446 }
8447
8448 /*
8449 =for apidoc newSVhek
8450
8451 Creates a new SV from the hash key structure.  It will generate scalars that
8452 point to the shared string table where possible.  Returns a new (undefined)
8453 SV if the hek is NULL.
8454
8455 =cut
8456 */
8457
8458 SV *
8459 Perl_newSVhek(pTHX_ const HEK *const hek)
8460 {
8461     dVAR;
8462     if (!hek) {
8463         SV *sv;
8464
8465         new_SV(sv);
8466         return sv;
8467     }
8468
8469     if (HEK_LEN(hek) == HEf_SVKEY) {
8470         return newSVsv(*(SV**)HEK_KEY(hek));
8471     } else {
8472         const int flags = HEK_FLAGS(hek);
8473         if (flags & HVhek_WASUTF8) {
8474             /* Trouble :-)
8475                Andreas would like keys he put in as utf8 to come back as utf8
8476             */
8477             STRLEN utf8_len = HEK_LEN(hek);
8478             SV * const sv = newSV_type(SVt_PV);
8479             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8480             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8481             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8482             SvUTF8_on (sv);
8483             return sv;
8484         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8485             /* We don't have a pointer to the hv, so we have to replicate the
8486                flag into every HEK. This hv is using custom a hasing
8487                algorithm. Hence we can't return a shared string scalar, as
8488                that would contain the (wrong) hash value, and might get passed
8489                into an hv routine with a regular hash.
8490                Similarly, a hash that isn't using shared hash keys has to have
8491                the flag in every key so that we know not to try to call
8492                share_hek_hek on it.  */
8493
8494             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8495             if (HEK_UTF8(hek))
8496                 SvUTF8_on (sv);
8497             return sv;
8498         }
8499         /* This will be overwhelminly the most common case.  */
8500         {
8501             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8502                more efficient than sharepvn().  */
8503             SV *sv;
8504
8505             new_SV(sv);
8506             sv_upgrade(sv, SVt_PV);
8507             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8508             SvCUR_set(sv, HEK_LEN(hek));
8509             SvLEN_set(sv, 0);
8510             SvREADONLY_on(sv);
8511             SvFAKE_on(sv);
8512             SvPOK_on(sv);
8513             if (HEK_UTF8(hek))
8514                 SvUTF8_on(sv);
8515             return sv;
8516         }
8517     }
8518 }
8519
8520 /*
8521 =for apidoc newSVpvn_share
8522
8523 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8524 table.  If the string does not already exist in the table, it is
8525 created first.  Turns on READONLY and FAKE.  If the C<hash> parameter
8526 is non-zero, that value is used; otherwise the hash is computed.
8527 The string's hash can later be retrieved from the SV
8528 with the C<SvSHARED_HASH()> macro.  The idea here is
8529 that as the string table is used for shared hash keys these strings will have
8530 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8531
8532 =cut
8533 */
8534
8535 SV *
8536 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8537 {
8538     dVAR;
8539     register SV *sv;
8540     bool is_utf8 = FALSE;
8541     const char *const orig_src = src;
8542
8543     if (len < 0) {
8544         STRLEN tmplen = -len;
8545         is_utf8 = TRUE;
8546         /* See the note in hv.c:hv_fetch() --jhi */
8547         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8548         len = tmplen;
8549     }
8550     if (!hash)
8551         PERL_HASH(hash, src, len);
8552     new_SV(sv);
8553     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8554        changes here, update it there too.  */
8555     sv_upgrade(sv, SVt_PV);
8556     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8557     SvCUR_set(sv, len);
8558     SvLEN_set(sv, 0);
8559     SvREADONLY_on(sv);
8560     SvFAKE_on(sv);
8561     SvPOK_on(sv);
8562     if (is_utf8)
8563         SvUTF8_on(sv);
8564     if (src != orig_src)
8565         Safefree(src);
8566     return sv;
8567 }
8568
8569 /*
8570 =for apidoc newSVpv_share
8571
8572 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8573 string/length pair.
8574
8575 =cut
8576 */
8577
8578 SV *
8579 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8580 {
8581     return newSVpvn_share(src, strlen(src), hash);
8582 }
8583
8584 #if defined(PERL_IMPLICIT_CONTEXT)
8585
8586 /* pTHX_ magic can't cope with varargs, so this is a no-context
8587  * version of the main function, (which may itself be aliased to us).
8588  * Don't access this version directly.
8589  */
8590
8591 SV *
8592 Perl_newSVpvf_nocontext(const char *const pat, ...)
8593 {
8594     dTHX;
8595     register SV *sv;
8596     va_list args;
8597
8598     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8599
8600     va_start(args, pat);
8601     sv = vnewSVpvf(pat, &args);
8602     va_end(args);
8603     return sv;
8604 }
8605 #endif
8606
8607 /*
8608 =for apidoc newSVpvf
8609
8610 Creates a new SV and initializes it with the string formatted like
8611 C<sprintf>.
8612
8613 =cut
8614 */
8615
8616 SV *
8617 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8618 {
8619     register SV *sv;
8620     va_list args;
8621
8622     PERL_ARGS_ASSERT_NEWSVPVF;
8623
8624     va_start(args, pat);
8625     sv = vnewSVpvf(pat, &args);
8626     va_end(args);
8627     return sv;
8628 }
8629
8630 /* backend for newSVpvf() and newSVpvf_nocontext() */
8631
8632 SV *
8633 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8634 {
8635     dVAR;
8636     register SV *sv;
8637
8638     PERL_ARGS_ASSERT_VNEWSVPVF;
8639
8640     new_SV(sv);
8641     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8642     return sv;
8643 }
8644
8645 /*
8646 =for apidoc newSVnv
8647
8648 Creates a new SV and copies a floating point value into it.
8649 The reference count for the SV is set to 1.
8650
8651 =cut
8652 */
8653
8654 SV *
8655 Perl_newSVnv(pTHX_ const NV n)
8656 {
8657     dVAR;
8658     register SV *sv;
8659
8660     new_SV(sv);
8661     sv_setnv(sv,n);
8662     return sv;
8663 }
8664
8665 /*
8666 =for apidoc newSViv
8667
8668 Creates a new SV and copies an integer into it.  The reference count for the
8669 SV is set to 1.
8670
8671 =cut
8672 */
8673
8674 SV *
8675 Perl_newSViv(pTHX_ const IV i)
8676 {
8677     dVAR;
8678     register SV *sv;
8679
8680     new_SV(sv);
8681     sv_setiv(sv,i);
8682     return sv;
8683 }
8684
8685 /*
8686 =for apidoc newSVuv
8687
8688 Creates a new SV and copies an unsigned integer into it.
8689 The reference count for the SV is set to 1.
8690
8691 =cut
8692 */
8693
8694 SV *
8695 Perl_newSVuv(pTHX_ const UV u)
8696 {
8697     dVAR;
8698     register SV *sv;
8699
8700     new_SV(sv);
8701     sv_setuv(sv,u);
8702     return sv;
8703 }
8704
8705 /*
8706 =for apidoc newSV_type
8707
8708 Creates a new SV, of the type specified.  The reference count for the new SV
8709 is set to 1.
8710
8711 =cut
8712 */
8713
8714 SV *
8715 Perl_newSV_type(pTHX_ const svtype type)
8716 {
8717     register SV *sv;
8718
8719     new_SV(sv);
8720     sv_upgrade(sv, type);
8721     return sv;
8722 }
8723
8724 /*
8725 =for apidoc newRV_noinc
8726
8727 Creates an RV wrapper for an SV.  The reference count for the original
8728 SV is B<not> incremented.
8729
8730 =cut
8731 */
8732
8733 SV *
8734 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8735 {
8736     dVAR;
8737     register SV *sv = newSV_type(SVt_IV);
8738
8739     PERL_ARGS_ASSERT_NEWRV_NOINC;
8740
8741     SvTEMP_off(tmpRef);
8742     SvRV_set(sv, tmpRef);
8743     SvROK_on(sv);
8744     return sv;
8745 }
8746
8747 /* newRV_inc is the official function name to use now.
8748  * newRV_inc is in fact #defined to newRV in sv.h
8749  */
8750
8751 SV *
8752 Perl_newRV(pTHX_ SV *const sv)
8753 {
8754     dVAR;
8755
8756     PERL_ARGS_ASSERT_NEWRV;
8757
8758     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8759 }
8760
8761 /*
8762 =for apidoc newSVsv
8763
8764 Creates a new SV which is an exact duplicate of the original SV.
8765 (Uses C<sv_setsv>.)
8766
8767 =cut
8768 */
8769
8770 SV *
8771 Perl_newSVsv(pTHX_ register SV *const old)
8772 {
8773     dVAR;
8774     register SV *sv;
8775
8776     if (!old)
8777         return NULL;
8778     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8779         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8780         return NULL;
8781     }
8782     new_SV(sv);
8783     /* SV_GMAGIC is the default for sv_setv()
8784        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8785        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8786     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8787     return sv;
8788 }
8789
8790 /*
8791 =for apidoc sv_reset
8792
8793 Underlying implementation for the C<reset> Perl function.
8794 Note that the perl-level function is vaguely deprecated.
8795
8796 =cut
8797 */
8798
8799 void
8800 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8801 {
8802     dVAR;
8803     char todo[PERL_UCHAR_MAX+1];
8804
8805     PERL_ARGS_ASSERT_SV_RESET;
8806
8807     if (!stash)
8808         return;
8809
8810     if (!*s) {          /* reset ?? searches */
8811         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8812         if (mg) {
8813             const U32 count = mg->mg_len / sizeof(PMOP**);
8814             PMOP **pmp = (PMOP**) mg->mg_ptr;
8815             PMOP *const *const end = pmp + count;
8816
8817             while (pmp < end) {
8818 #ifdef USE_ITHREADS
8819                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8820 #else
8821                 (*pmp)->op_pmflags &= ~PMf_USED;
8822 #endif
8823                 ++pmp;
8824             }
8825         }
8826         return;
8827     }
8828
8829     /* reset variables */
8830
8831     if (!HvARRAY(stash))
8832         return;
8833
8834     Zero(todo, 256, char);
8835     while (*s) {
8836         I32 max;
8837         I32 i = (unsigned char)*s;
8838         if (s[1] == '-') {
8839             s += 2;
8840         }
8841         max = (unsigned char)*s++;
8842         for ( ; i <= max; i++) {
8843             todo[i] = 1;
8844         }
8845         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8846             HE *entry;
8847             for (entry = HvARRAY(stash)[i];
8848                  entry;
8849                  entry = HeNEXT(entry))
8850             {
8851                 register GV *gv;
8852                 register SV *sv;
8853
8854                 if (!todo[(U8)*HeKEY(entry)])
8855                     continue;
8856                 gv = MUTABLE_GV(HeVAL(entry));
8857                 sv = GvSV(gv);
8858                 if (sv) {
8859                     if (SvTHINKFIRST(sv)) {
8860                         if (!SvREADONLY(sv) && SvROK(sv))
8861                             sv_unref(sv);
8862                         /* XXX Is this continue a bug? Why should THINKFIRST
8863                            exempt us from resetting arrays and hashes?  */
8864                         continue;
8865                     }
8866                     SvOK_off(sv);
8867                     if (SvTYPE(sv) >= SVt_PV) {
8868                         SvCUR_set(sv, 0);
8869                         if (SvPVX_const(sv) != NULL)
8870                             *SvPVX(sv) = '\0';
8871                         SvTAINT(sv);
8872                     }
8873                 }
8874                 if (GvAV(gv)) {
8875                     av_clear(GvAV(gv));
8876                 }
8877                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8878 #if defined(VMS)
8879                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8880 #else /* ! VMS */
8881                     hv_clear(GvHV(gv));
8882 #  if defined(USE_ENVIRON_ARRAY)
8883                     if (gv == PL_envgv)
8884                         my_clearenv();
8885 #  endif /* USE_ENVIRON_ARRAY */
8886 #endif /* VMS */
8887                 }
8888             }
8889         }
8890     }
8891 }
8892
8893 /*
8894 =for apidoc sv_2io
8895
8896 Using various gambits, try to get an IO from an SV: the IO slot if its a
8897 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8898 named after the PV if we're a string.
8899
8900 'Get' magic is ignored on the sv passed in, but will be called on
8901 C<SvRV(sv)> if sv is an RV.
8902
8903 =cut
8904 */
8905
8906 IO*
8907 Perl_sv_2io(pTHX_ SV *const sv)
8908 {
8909     IO* io;
8910     GV* gv;
8911
8912     PERL_ARGS_ASSERT_SV_2IO;
8913
8914     switch (SvTYPE(sv)) {
8915     case SVt_PVIO:
8916         io = MUTABLE_IO(sv);
8917         break;
8918     case SVt_PVGV:
8919     case SVt_PVLV:
8920         if (isGV_with_GP(sv)) {
8921             gv = MUTABLE_GV(sv);
8922             io = GvIO(gv);
8923             if (!io)
8924                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
8925                                     HEKfARG(GvNAME_HEK(gv)));
8926             break;
8927         }
8928         /* FALL THROUGH */
8929     default:
8930         if (!SvOK(sv))
8931             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8932         if (SvROK(sv)) {
8933             SvGETMAGIC(SvRV(sv));
8934             return sv_2io(SvRV(sv));
8935         }
8936         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
8937         if (gv)
8938             io = GvIO(gv);
8939         else
8940             io = 0;
8941         if (!io) {
8942             SV *newsv = sv;
8943             if (SvGMAGICAL(sv)) {
8944                 newsv = sv_newmortal();
8945                 sv_setsv_nomg(newsv, sv);
8946             }
8947             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
8948         }
8949         break;
8950     }
8951     return io;
8952 }
8953
8954 /*
8955 =for apidoc sv_2cv
8956
8957 Using various gambits, try to get a CV from an SV; in addition, try if
8958 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8959 The flags in C<lref> are passed to gv_fetchsv.
8960
8961 =cut
8962 */
8963
8964 CV *
8965 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8966 {
8967     dVAR;
8968     GV *gv = NULL;
8969     CV *cv = NULL;
8970
8971     PERL_ARGS_ASSERT_SV_2CV;
8972
8973     if (!sv) {
8974         *st = NULL;
8975         *gvp = NULL;
8976         return NULL;
8977     }
8978     switch (SvTYPE(sv)) {
8979     case SVt_PVCV:
8980         *st = CvSTASH(sv);
8981         *gvp = NULL;
8982         return MUTABLE_CV(sv);
8983     case SVt_PVHV:
8984     case SVt_PVAV:
8985         *st = NULL;
8986         *gvp = NULL;
8987         return NULL;
8988     default:
8989         SvGETMAGIC(sv);
8990         if (SvROK(sv)) {
8991             if (SvAMAGIC(sv))
8992                 sv = amagic_deref_call(sv, to_cv_amg);
8993
8994             sv = SvRV(sv);
8995             if (SvTYPE(sv) == SVt_PVCV) {
8996                 cv = MUTABLE_CV(sv);
8997                 *gvp = NULL;
8998                 *st = CvSTASH(cv);
8999                 return cv;
9000             }
9001             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9002                 gv = MUTABLE_GV(sv);
9003             else
9004                 Perl_croak(aTHX_ "Not a subroutine reference");
9005         }
9006         else if (isGV_with_GP(sv)) {
9007             gv = MUTABLE_GV(sv);
9008         }
9009         else {
9010             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9011         }
9012         *gvp = gv;
9013         if (!gv) {
9014             *st = NULL;
9015             return NULL;
9016         }
9017         /* Some flags to gv_fetchsv mean don't really create the GV  */
9018         if (!isGV_with_GP(gv)) {
9019             *st = NULL;
9020             return NULL;
9021         }
9022         *st = GvESTASH(gv);
9023         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9024             SV *tmpsv;
9025             ENTER;
9026             tmpsv = newSV(0);
9027             gv_efullname3(tmpsv, gv, NULL);
9028             /* XXX this is probably not what they think they're getting.
9029              * It has the same effect as "sub name;", i.e. just a forward
9030              * declaration! */
9031             newSUB(start_subparse(FALSE, 0),
9032                    newSVOP(OP_CONST, 0, tmpsv),
9033                    NULL, NULL);
9034             LEAVE;
9035             if (!GvCVu(gv))
9036                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
9037                            SVfARG(SvOK(sv) ? sv : &PL_sv_no));
9038         }
9039         return GvCVu(gv);
9040     }
9041 }
9042
9043 /*
9044 =for apidoc sv_true
9045
9046 Returns true if the SV has a true value by Perl's rules.
9047 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9048 instead use an in-line version.
9049
9050 =cut
9051 */
9052
9053 I32
9054 Perl_sv_true(pTHX_ register SV *const sv)
9055 {
9056     if (!sv)
9057         return 0;
9058     if (SvPOK(sv)) {
9059         register const XPV* const tXpv = (XPV*)SvANY(sv);
9060         if (tXpv &&
9061                 (tXpv->xpv_cur > 1 ||
9062                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9063             return 1;
9064         else
9065             return 0;
9066     }
9067     else {
9068         if (SvIOK(sv))
9069             return SvIVX(sv) != 0;
9070         else {
9071             if (SvNOK(sv))
9072                 return SvNVX(sv) != 0.0;
9073             else
9074                 return sv_2bool(sv);
9075         }
9076     }
9077 }
9078
9079 /*
9080 =for apidoc sv_pvn_force
9081
9082 Get a sensible string out of the SV somehow.
9083 A private implementation of the C<SvPV_force> macro for compilers which
9084 can't cope with complex macro expressions.  Always use the macro instead.
9085
9086 =for apidoc sv_pvn_force_flags
9087
9088 Get a sensible string out of the SV somehow.
9089 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9090 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9091 implemented in terms of this function.
9092 You normally want to use the various wrapper macros instead: see
9093 C<SvPV_force> and C<SvPV_force_nomg>
9094
9095 =cut
9096 */
9097
9098 char *
9099 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9100 {
9101     dVAR;
9102
9103     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9104
9105     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9106     if (SvTHINKFIRST(sv) && !SvROK(sv))
9107         sv_force_normal_flags(sv, 0);
9108
9109     if (SvPOK(sv)) {
9110         if (lp)
9111             *lp = SvCUR(sv);
9112     }
9113     else {
9114         char *s;
9115         STRLEN len;
9116  
9117         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9118             const char * const ref = sv_reftype(sv,0);
9119             if (PL_op)
9120                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9121                            ref, OP_DESC(PL_op));
9122             else
9123                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9124         }
9125         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
9126             || isGV_with_GP(sv))
9127             /* diag_listed_as: Can't coerce %s to %s in %s */
9128             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9129                 OP_DESC(PL_op));
9130         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9131         if (!s) {
9132           s = (char *)"";
9133         }
9134         if (lp)
9135             *lp = len;
9136
9137         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9138             if (SvROK(sv))
9139                 sv_unref(sv);
9140             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9141             SvGROW(sv, len + 1);
9142             Move(s,SvPVX(sv),len,char);
9143             SvCUR_set(sv, len);
9144             SvPVX(sv)[len] = '\0';
9145         }
9146         if (!SvPOK(sv)) {
9147             SvPOK_on(sv);               /* validate pointer */
9148             SvTAINT(sv);
9149             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9150                                   PTR2UV(sv),SvPVX_const(sv)));
9151         }
9152     }
9153     return SvPVX_mutable(sv);
9154 }
9155
9156 /*
9157 =for apidoc sv_pvbyten_force
9158
9159 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9160 instead.
9161
9162 =cut
9163 */
9164
9165 char *
9166 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9167 {
9168     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9169
9170     sv_pvn_force(sv,lp);
9171     sv_utf8_downgrade(sv,0);
9172     *lp = SvCUR(sv);
9173     return SvPVX(sv);
9174 }
9175
9176 /*
9177 =for apidoc sv_pvutf8n_force
9178
9179 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9180 instead.
9181
9182 =cut
9183 */
9184
9185 char *
9186 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9187 {
9188     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9189
9190     sv_pvn_force(sv,lp);
9191     sv_utf8_upgrade(sv);
9192     *lp = SvCUR(sv);
9193     return SvPVX(sv);
9194 }
9195
9196 /*
9197 =for apidoc sv_reftype
9198
9199 Returns a string describing what the SV is a reference to.
9200
9201 =cut
9202 */
9203
9204 const char *
9205 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9206 {
9207     PERL_ARGS_ASSERT_SV_REFTYPE;
9208     if (ob && SvOBJECT(sv)) {
9209         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9210     }
9211     else {
9212         switch (SvTYPE(sv)) {
9213         case SVt_NULL:
9214         case SVt_IV:
9215         case SVt_NV:
9216         case SVt_PV:
9217         case SVt_PVIV:
9218         case SVt_PVNV:
9219         case SVt_PVMG:
9220                                 if (SvVOK(sv))
9221                                     return "VSTRING";
9222                                 if (SvROK(sv))
9223                                     return "REF";
9224                                 else
9225                                     return "SCALAR";
9226
9227         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9228                                 /* tied lvalues should appear to be
9229                                  * scalars for backwards compatibility */
9230                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9231                                     ? "SCALAR" : "LVALUE");
9232         case SVt_PVAV:          return "ARRAY";
9233         case SVt_PVHV:          return "HASH";
9234         case SVt_PVCV:          return "CODE";
9235         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9236                                     ? "GLOB" : "SCALAR");
9237         case SVt_PVFM:          return "FORMAT";
9238         case SVt_PVIO:          return "IO";
9239         case SVt_BIND:          return "BIND";
9240         case SVt_REGEXP:        return "REGEXP";
9241         default:                return "UNKNOWN";
9242         }
9243     }
9244 }
9245
9246 /*
9247 =for apidoc sv_ref
9248
9249 Returns a SV describing what the SV passed in is a reference to.
9250
9251 =cut
9252 */
9253
9254 SV *
9255 Perl_sv_ref(pTHX_ register SV *dst, const SV *const sv, const int ob)
9256 {
9257     PERL_ARGS_ASSERT_SV_REF;
9258
9259     if (!dst)
9260         dst = sv_newmortal();
9261
9262     if (ob && SvOBJECT(sv)) {
9263         HvNAME_get(SvSTASH(sv))
9264                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9265                     : sv_setpvn(dst, "__ANON__", 8);
9266     }
9267     else {
9268         const char * reftype = sv_reftype(sv, 0);
9269         sv_setpv(dst, reftype);
9270     }
9271     return dst;
9272 }
9273
9274 /*
9275 =for apidoc sv_isobject
9276
9277 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9278 object.  If the SV is not an RV, or if the object is not blessed, then this
9279 will return false.
9280
9281 =cut
9282 */
9283
9284 int
9285 Perl_sv_isobject(pTHX_ SV *sv)
9286 {
9287     if (!sv)
9288         return 0;
9289     SvGETMAGIC(sv);
9290     if (!SvROK(sv))
9291         return 0;
9292     sv = SvRV(sv);
9293     if (!SvOBJECT(sv))
9294         return 0;
9295     return 1;
9296 }
9297
9298 /*
9299 =for apidoc sv_isa
9300
9301 Returns a boolean indicating whether the SV is blessed into the specified
9302 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9303 an inheritance relationship.
9304
9305 =cut
9306 */
9307
9308 int
9309 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9310 {
9311     const char *hvname;
9312
9313     PERL_ARGS_ASSERT_SV_ISA;
9314
9315     if (!sv)
9316         return 0;
9317     SvGETMAGIC(sv);
9318     if (!SvROK(sv))
9319         return 0;
9320     sv = SvRV(sv);
9321     if (!SvOBJECT(sv))
9322         return 0;
9323     hvname = HvNAME_get(SvSTASH(sv));
9324     if (!hvname)
9325         return 0;
9326
9327     return strEQ(hvname, name);
9328 }
9329
9330 /*
9331 =for apidoc newSVrv
9332
9333 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9334 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9335 be blessed in the specified package.  The new SV is returned and its
9336 reference count is 1.
9337
9338 =cut
9339 */
9340
9341 SV*
9342 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9343 {
9344     dVAR;
9345     SV *sv;
9346
9347     PERL_ARGS_ASSERT_NEWSVRV;
9348
9349     new_SV(sv);
9350
9351     SV_CHECK_THINKFIRST_COW_DROP(rv);
9352
9353     if (SvTYPE(rv) >= SVt_PVMG) {
9354         const U32 refcnt = SvREFCNT(rv);
9355         SvREFCNT(rv) = 0;
9356         sv_clear(rv);
9357         SvFLAGS(rv) = 0;
9358         SvREFCNT(rv) = refcnt;
9359
9360         sv_upgrade(rv, SVt_IV);
9361     } else if (SvROK(rv)) {
9362         SvREFCNT_dec(SvRV(rv));
9363     } else {
9364         prepare_SV_for_RV(rv);
9365     }
9366
9367     SvOK_off(rv);
9368     SvRV_set(rv, sv);
9369     SvROK_on(rv);
9370
9371     if (classname) {
9372         HV* const stash = gv_stashpv(classname, GV_ADD);
9373         (void)sv_bless(rv, stash);
9374     }
9375     return sv;
9376 }
9377
9378 /*
9379 =for apidoc sv_setref_pv
9380
9381 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9382 argument will be upgraded to an RV.  That RV will be modified to point to
9383 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9384 into the SV.  The C<classname> argument indicates the package for the
9385 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9386 will have a reference count of 1, and the RV will be returned.
9387
9388 Do not use with other Perl types such as HV, AV, SV, CV, because those
9389 objects will become corrupted by the pointer copy process.
9390
9391 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9392
9393 =cut
9394 */
9395
9396 SV*
9397 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9398 {
9399     dVAR;
9400
9401     PERL_ARGS_ASSERT_SV_SETREF_PV;
9402
9403     if (!pv) {
9404         sv_setsv(rv, &PL_sv_undef);
9405         SvSETMAGIC(rv);
9406     }
9407     else
9408         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9409     return rv;
9410 }
9411
9412 /*
9413 =for apidoc sv_setref_iv
9414
9415 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9416 argument will be upgraded to an RV.  That RV will be modified to point to
9417 the new SV.  The C<classname> argument indicates the package for the
9418 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9419 will have a reference count of 1, and the RV will be returned.
9420
9421 =cut
9422 */
9423
9424 SV*
9425 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9426 {
9427     PERL_ARGS_ASSERT_SV_SETREF_IV;
9428
9429     sv_setiv(newSVrv(rv,classname), iv);
9430     return rv;
9431 }
9432
9433 /*
9434 =for apidoc sv_setref_uv
9435
9436 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9437 argument will be upgraded to an RV.  That RV will be modified to point to
9438 the new SV.  The C<classname> argument indicates the package for the
9439 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9440 will have a reference count of 1, and the RV will be returned.
9441
9442 =cut
9443 */
9444
9445 SV*
9446 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9447 {
9448     PERL_ARGS_ASSERT_SV_SETREF_UV;
9449
9450     sv_setuv(newSVrv(rv,classname), uv);
9451     return rv;
9452 }
9453
9454 /*
9455 =for apidoc sv_setref_nv
9456
9457 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9458 argument will be upgraded to an RV.  That RV will be modified to point to
9459 the new SV.  The C<classname> argument indicates the package for the
9460 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9461 will have a reference count of 1, and the RV will be returned.
9462
9463 =cut
9464 */
9465
9466 SV*
9467 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9468 {
9469     PERL_ARGS_ASSERT_SV_SETREF_NV;
9470
9471     sv_setnv(newSVrv(rv,classname), nv);
9472     return rv;
9473 }
9474
9475 /*
9476 =for apidoc sv_setref_pvn
9477
9478 Copies a string into a new SV, optionally blessing the SV.  The length of the
9479 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9480 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9481 argument indicates the package for the blessing.  Set C<classname> to
9482 C<NULL> to avoid the blessing.  The new SV will have a reference count
9483 of 1, and the RV will be returned.
9484
9485 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9486
9487 =cut
9488 */
9489
9490 SV*
9491 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9492                    const char *const pv, const STRLEN n)
9493 {
9494     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9495
9496     sv_setpvn(newSVrv(rv,classname), pv, n);
9497     return rv;
9498 }
9499
9500 /*
9501 =for apidoc sv_bless
9502
9503 Blesses an SV into a specified package.  The SV must be an RV.  The package
9504 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9505 of the SV is unaffected.
9506
9507 =cut
9508 */
9509
9510 SV*
9511 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9512 {
9513     dVAR;
9514     SV *tmpRef;
9515
9516     PERL_ARGS_ASSERT_SV_BLESS;
9517
9518     if (!SvROK(sv))
9519         Perl_croak(aTHX_ "Can't bless non-reference value");
9520     tmpRef = SvRV(sv);
9521     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9522         if (SvIsCOW(tmpRef))
9523             sv_force_normal_flags(tmpRef, 0);
9524         if (SvREADONLY(tmpRef))
9525             Perl_croak_no_modify(aTHX);
9526         if (SvOBJECT(tmpRef)) {
9527             if (SvTYPE(tmpRef) != SVt_PVIO)
9528                 --PL_sv_objcount;
9529             SvREFCNT_dec(SvSTASH(tmpRef));
9530         }
9531     }
9532     SvOBJECT_on(tmpRef);
9533     if (SvTYPE(tmpRef) != SVt_PVIO)
9534         ++PL_sv_objcount;
9535     SvUPGRADE(tmpRef, SVt_PVMG);
9536     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9537
9538     if(SvSMAGICAL(tmpRef))
9539         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9540             mg_set(tmpRef);
9541
9542
9543
9544     return sv;
9545 }
9546
9547 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9548  * as it is after unglobbing it.
9549  */
9550
9551 PERL_STATIC_INLINE void
9552 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9553 {
9554     dVAR;
9555     void *xpvmg;
9556     HV *stash;
9557     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9558
9559     PERL_ARGS_ASSERT_SV_UNGLOB;
9560
9561     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9562     SvFAKE_off(sv);
9563     if (!(flags & SV_COW_DROP_PV))
9564         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9565
9566     if (GvGP(sv)) {
9567         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9568            && HvNAME_get(stash))
9569             mro_method_changed_in(stash);
9570         gp_free(MUTABLE_GV(sv));
9571     }
9572     if (GvSTASH(sv)) {
9573         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9574         GvSTASH(sv) = NULL;
9575     }
9576     GvMULTI_off(sv);
9577     if (GvNAME_HEK(sv)) {
9578         unshare_hek(GvNAME_HEK(sv));
9579     }
9580     isGV_with_GP_off(sv);
9581
9582     if(SvTYPE(sv) == SVt_PVGV) {
9583         /* need to keep SvANY(sv) in the right arena */
9584         xpvmg = new_XPVMG();
9585         StructCopy(SvANY(sv), xpvmg, XPVMG);
9586         del_XPVGV(SvANY(sv));
9587         SvANY(sv) = xpvmg;
9588
9589         SvFLAGS(sv) &= ~SVTYPEMASK;
9590         SvFLAGS(sv) |= SVt_PVMG;
9591     }
9592
9593     /* Intentionally not calling any local SET magic, as this isn't so much a
9594        set operation as merely an internal storage change.  */
9595     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9596     else sv_setsv_flags(sv, temp, 0);
9597
9598     if ((const GV *)sv == PL_last_in_gv)
9599         PL_last_in_gv = NULL;
9600     else if ((const GV *)sv == PL_statgv)
9601         PL_statgv = NULL;
9602 }
9603
9604 /*
9605 =for apidoc sv_unref_flags
9606
9607 Unsets the RV status of the SV, and decrements the reference count of
9608 whatever was being referenced by the RV.  This can almost be thought of
9609 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9610 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9611 (otherwise the decrementing is conditional on the reference count being
9612 different from one or the reference being a readonly SV).
9613 See C<SvROK_off>.
9614
9615 =cut
9616 */
9617
9618 void
9619 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9620 {
9621     SV* const target = SvRV(ref);
9622
9623     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9624
9625     if (SvWEAKREF(ref)) {
9626         sv_del_backref(target, ref);
9627         SvWEAKREF_off(ref);
9628         SvRV_set(ref, NULL);
9629         return;
9630     }
9631     SvRV_set(ref, NULL);
9632     SvROK_off(ref);
9633     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9634        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9635     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9636         SvREFCNT_dec(target);
9637     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9638         sv_2mortal(target);     /* Schedule for freeing later */
9639 }
9640
9641 /*
9642 =for apidoc sv_untaint
9643
9644 Untaint an SV.  Use C<SvTAINTED_off> instead.
9645
9646 =cut
9647 */
9648
9649 void
9650 Perl_sv_untaint(pTHX_ SV *const sv)
9651 {
9652     PERL_ARGS_ASSERT_SV_UNTAINT;
9653
9654     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9655         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9656         if (mg)
9657             mg->mg_len &= ~1;
9658     }
9659 }
9660
9661 /*
9662 =for apidoc sv_tainted
9663
9664 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9665
9666 =cut
9667 */
9668
9669 bool
9670 Perl_sv_tainted(pTHX_ SV *const sv)
9671 {
9672     PERL_ARGS_ASSERT_SV_TAINTED;
9673
9674     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9675         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9676         if (mg && (mg->mg_len & 1) )
9677             return TRUE;
9678     }
9679     return FALSE;
9680 }
9681
9682 /*
9683 =for apidoc sv_setpviv
9684
9685 Copies an integer into the given SV, also updating its string value.
9686 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9687
9688 =cut
9689 */
9690
9691 void
9692 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9693 {
9694     char buf[TYPE_CHARS(UV)];
9695     char *ebuf;
9696     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9697
9698     PERL_ARGS_ASSERT_SV_SETPVIV;
9699
9700     sv_setpvn(sv, ptr, ebuf - ptr);
9701 }
9702
9703 /*
9704 =for apidoc sv_setpviv_mg
9705
9706 Like C<sv_setpviv>, but also handles 'set' magic.
9707
9708 =cut
9709 */
9710
9711 void
9712 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9713 {
9714     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9715
9716     sv_setpviv(sv, iv);
9717     SvSETMAGIC(sv);
9718 }
9719
9720 #if defined(PERL_IMPLICIT_CONTEXT)
9721
9722 /* pTHX_ magic can't cope with varargs, so this is a no-context
9723  * version of the main function, (which may itself be aliased to us).
9724  * Don't access this version directly.
9725  */
9726
9727 void
9728 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9729 {
9730     dTHX;
9731     va_list args;
9732
9733     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9734
9735     va_start(args, pat);
9736     sv_vsetpvf(sv, pat, &args);
9737     va_end(args);
9738 }
9739
9740 /* pTHX_ magic can't cope with varargs, so this is a no-context
9741  * version of the main function, (which may itself be aliased to us).
9742  * Don't access this version directly.
9743  */
9744
9745 void
9746 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9747 {
9748     dTHX;
9749     va_list args;
9750
9751     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9752
9753     va_start(args, pat);
9754     sv_vsetpvf_mg(sv, pat, &args);
9755     va_end(args);
9756 }
9757 #endif
9758
9759 /*
9760 =for apidoc sv_setpvf
9761
9762 Works like C<sv_catpvf> but copies the text into the SV instead of
9763 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9764
9765 =cut
9766 */
9767
9768 void
9769 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9770 {
9771     va_list args;
9772
9773     PERL_ARGS_ASSERT_SV_SETPVF;
9774
9775     va_start(args, pat);
9776     sv_vsetpvf(sv, pat, &args);
9777     va_end(args);
9778 }
9779
9780 /*
9781 =for apidoc sv_vsetpvf
9782
9783 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9784 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9785
9786 Usually used via its frontend C<sv_setpvf>.
9787
9788 =cut
9789 */
9790
9791 void
9792 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9793 {
9794     PERL_ARGS_ASSERT_SV_VSETPVF;
9795
9796     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9797 }
9798
9799 /*
9800 =for apidoc sv_setpvf_mg
9801
9802 Like C<sv_setpvf>, but also handles 'set' magic.
9803
9804 =cut
9805 */
9806
9807 void
9808 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9809 {
9810     va_list args;
9811
9812     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9813
9814     va_start(args, pat);
9815     sv_vsetpvf_mg(sv, pat, &args);
9816     va_end(args);
9817 }
9818
9819 /*
9820 =for apidoc sv_vsetpvf_mg
9821
9822 Like C<sv_vsetpvf>, but also handles 'set' magic.
9823
9824 Usually used via its frontend C<sv_setpvf_mg>.
9825
9826 =cut
9827 */
9828
9829 void
9830 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9831 {
9832     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9833
9834     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9835     SvSETMAGIC(sv);
9836 }
9837
9838 #if defined(PERL_IMPLICIT_CONTEXT)
9839
9840 /* pTHX_ magic can't cope with varargs, so this is a no-context
9841  * version of the main function, (which may itself be aliased to us).
9842  * Don't access this version directly.
9843  */
9844
9845 void
9846 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9847 {
9848     dTHX;
9849     va_list args;
9850
9851     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9852
9853     va_start(args, pat);
9854     sv_vcatpvf(sv, pat, &args);
9855     va_end(args);
9856 }
9857
9858 /* pTHX_ magic can't cope with varargs, so this is a no-context
9859  * version of the main function, (which may itself be aliased to us).
9860  * Don't access this version directly.
9861  */
9862
9863 void
9864 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9865 {
9866     dTHX;
9867     va_list args;
9868
9869     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9870
9871     va_start(args, pat);
9872     sv_vcatpvf_mg(sv, pat, &args);
9873     va_end(args);
9874 }
9875 #endif
9876
9877 /*
9878 =for apidoc sv_catpvf
9879
9880 Processes its arguments like C<sprintf> and appends the formatted
9881 output to an SV.  If the appended data contains "wide" characters
9882 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9883 and characters >255 formatted with %c), the original SV might get
9884 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9885 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
9886 valid UTF-8; if the original SV was bytes, the pattern should be too.
9887
9888 =cut */
9889
9890 void
9891 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9892 {
9893     va_list args;
9894
9895     PERL_ARGS_ASSERT_SV_CATPVF;
9896
9897     va_start(args, pat);
9898     sv_vcatpvf(sv, pat, &args);
9899     va_end(args);
9900 }
9901
9902 /*
9903 =for apidoc sv_vcatpvf
9904
9905 Processes its arguments like C<vsprintf> and appends the formatted output
9906 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9907
9908 Usually used via its frontend C<sv_catpvf>.
9909
9910 =cut
9911 */
9912
9913 void
9914 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9915 {
9916     PERL_ARGS_ASSERT_SV_VCATPVF;
9917
9918     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9919 }
9920
9921 /*
9922 =for apidoc sv_catpvf_mg
9923
9924 Like C<sv_catpvf>, but also handles 'set' magic.
9925
9926 =cut
9927 */
9928
9929 void
9930 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9931 {
9932     va_list args;
9933
9934     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9935
9936     va_start(args, pat);
9937     sv_vcatpvf_mg(sv, pat, &args);
9938     va_end(args);
9939 }
9940
9941 /*
9942 =for apidoc sv_vcatpvf_mg
9943
9944 Like C<sv_vcatpvf>, but also handles 'set' magic.
9945
9946 Usually used via its frontend C<sv_catpvf_mg>.
9947
9948 =cut
9949 */
9950
9951 void
9952 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9953 {
9954     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9955
9956     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9957     SvSETMAGIC(sv);
9958 }
9959
9960 /*
9961 =for apidoc sv_vsetpvfn
9962
9963 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9964 appending it.
9965
9966 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9967
9968 =cut
9969 */
9970
9971 void
9972 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9973                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9974 {
9975     PERL_ARGS_ASSERT_SV_VSETPVFN;
9976
9977     sv_setpvs(sv, "");
9978     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9979 }
9980
9981
9982 /*
9983  * Warn of missing argument to sprintf, and then return a defined value
9984  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9985  */
9986 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9987 STATIC SV*
9988 S_vcatpvfn_missing_argument(pTHX) {
9989     if (ckWARN(WARN_MISSING)) {
9990         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9991                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9992     }
9993     return &PL_sv_no;
9994 }
9995
9996
9997 STATIC I32
9998 S_expect_number(pTHX_ char **const pattern)
9999 {
10000     dVAR;
10001     I32 var = 0;
10002
10003     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10004
10005     switch (**pattern) {
10006     case '1': case '2': case '3':
10007     case '4': case '5': case '6':
10008     case '7': case '8': case '9':
10009         var = *(*pattern)++ - '0';
10010         while (isDIGIT(**pattern)) {
10011             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10012             if (tmp < var)
10013                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10014             var = tmp;
10015         }
10016     }
10017     return var;
10018 }
10019
10020 STATIC char *
10021 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10022 {
10023     const int neg = nv < 0;
10024     UV uv;
10025
10026     PERL_ARGS_ASSERT_F0CONVERT;
10027
10028     if (neg)
10029         nv = -nv;
10030     if (nv < UV_MAX) {
10031         char *p = endbuf;
10032         nv += 0.5;
10033         uv = (UV)nv;
10034         if (uv & 1 && uv == nv)
10035             uv--;                       /* Round to even */
10036         do {
10037             const unsigned dig = uv % 10;
10038             *--p = '0' + dig;
10039         } while (uv /= 10);
10040         if (neg)
10041             *--p = '-';
10042         *len = endbuf - p;
10043         return p;
10044     }
10045     return NULL;
10046 }
10047
10048
10049 /*
10050 =for apidoc sv_vcatpvfn
10051
10052 Processes its arguments like C<vsprintf> and appends the formatted output
10053 to an SV.  Uses an array of SVs if the C style variable argument list is
10054 missing (NULL).  When running with taint checks enabled, indicates via
10055 C<maybe_tainted> if results are untrustworthy (often due to the use of
10056 locales).
10057
10058 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10059
10060 =cut
10061 */
10062
10063
10064 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10065                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10066                         vec_utf8 = DO_UTF8(vecsv);
10067
10068 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10069
10070 void
10071 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10072                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10073 {
10074     dVAR;
10075     char *p;
10076     char *q;
10077     const char *patend;
10078     STRLEN origlen;
10079     I32 svix = 0;
10080     static const char nullstr[] = "(null)";
10081     SV *argsv = NULL;
10082     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10083     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10084     SV *nsv = NULL;
10085     /* Times 4: a decimal digit takes more than 3 binary digits.
10086      * NV_DIG: mantissa takes than many decimal digits.
10087      * Plus 32: Playing safe. */
10088     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10089     /* large enough for "%#.#f" --chip */
10090     /* what about long double NVs? --jhi */
10091
10092     PERL_ARGS_ASSERT_SV_VCATPVFN;
10093     PERL_UNUSED_ARG(maybe_tainted);
10094
10095     /* no matter what, this is a string now */
10096     (void)SvPV_force(sv, origlen);
10097
10098     /* special-case "", "%s", and "%-p" (SVf - see below) */
10099     if (patlen == 0)
10100         return;
10101     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10102         if (args) {
10103             const char * const s = va_arg(*args, char*);
10104             sv_catpv(sv, s ? s : nullstr);
10105         }
10106         else if (svix < svmax) {
10107             sv_catsv(sv, *svargs);
10108         }
10109         else
10110             S_vcatpvfn_missing_argument(aTHX);
10111         return;
10112     }
10113     if (args && patlen == 3 && pat[0] == '%' &&
10114                 pat[1] == '-' && pat[2] == 'p') {
10115         argsv = MUTABLE_SV(va_arg(*args, void*));
10116         sv_catsv(sv, argsv);
10117         return;
10118     }
10119
10120 #ifndef USE_LONG_DOUBLE
10121     /* special-case "%.<number>[gf]" */
10122     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10123          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10124         unsigned digits = 0;
10125         const char *pp;
10126
10127         pp = pat + 2;
10128         while (*pp >= '0' && *pp <= '9')
10129             digits = 10 * digits + (*pp++ - '0');
10130         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10131             const NV nv = SvNV(*svargs);
10132             if (*pp == 'g') {
10133                 /* Add check for digits != 0 because it seems that some
10134                    gconverts are buggy in this case, and we don't yet have
10135                    a Configure test for this.  */
10136                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10137                      /* 0, point, slack */
10138                     Gconvert(nv, (int)digits, 0, ebuf);
10139                     sv_catpv(sv, ebuf);
10140                     if (*ebuf)  /* May return an empty string for digits==0 */
10141                         return;
10142                 }
10143             } else if (!digits) {
10144                 STRLEN l;
10145
10146                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10147                     sv_catpvn(sv, p, l);
10148                     return;
10149                 }
10150             }
10151         }
10152     }
10153 #endif /* !USE_LONG_DOUBLE */
10154
10155     if (!args && svix < svmax && DO_UTF8(*svargs))
10156         has_utf8 = TRUE;
10157
10158     patend = (char*)pat + patlen;
10159     for (p = (char*)pat; p < patend; p = q) {
10160         bool alt = FALSE;
10161         bool left = FALSE;
10162         bool vectorize = FALSE;
10163         bool vectorarg = FALSE;
10164         bool vec_utf8 = FALSE;
10165         char fill = ' ';
10166         char plus = 0;
10167         char intsize = 0;
10168         STRLEN width = 0;
10169         STRLEN zeros = 0;
10170         bool has_precis = FALSE;
10171         STRLEN precis = 0;
10172         const I32 osvix = svix;
10173         bool is_utf8 = FALSE;  /* is this item utf8?   */
10174 #ifdef HAS_LDBL_SPRINTF_BUG
10175         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10176            with sfio - Allen <allens@cpan.org> */
10177         bool fix_ldbl_sprintf_bug = FALSE;
10178 #endif
10179
10180         char esignbuf[4];
10181         U8 utf8buf[UTF8_MAXBYTES+1];
10182         STRLEN esignlen = 0;
10183
10184         const char *eptr = NULL;
10185         const char *fmtstart;
10186         STRLEN elen = 0;
10187         SV *vecsv = NULL;
10188         const U8 *vecstr = NULL;
10189         STRLEN veclen = 0;
10190         char c = 0;
10191         int i;
10192         unsigned base = 0;
10193         IV iv = 0;
10194         UV uv = 0;
10195         /* we need a long double target in case HAS_LONG_DOUBLE but
10196            not USE_LONG_DOUBLE
10197         */
10198 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10199         long double nv;
10200 #else
10201         NV nv;
10202 #endif
10203         STRLEN have;
10204         STRLEN need;
10205         STRLEN gap;
10206         const char *dotstr = ".";
10207         STRLEN dotstrlen = 1;
10208         I32 efix = 0; /* explicit format parameter index */
10209         I32 ewix = 0; /* explicit width index */
10210         I32 epix = 0; /* explicit precision index */
10211         I32 evix = 0; /* explicit vector index */
10212         bool asterisk = FALSE;
10213
10214         /* echo everything up to the next format specification */
10215         for (q = p; q < patend && *q != '%'; ++q) ;
10216         if (q > p) {
10217             if (has_utf8 && !pat_utf8)
10218                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
10219             else
10220                 sv_catpvn(sv, p, q - p);
10221             p = q;
10222         }
10223         if (q++ >= patend)
10224             break;
10225
10226         fmtstart = q;
10227
10228 /*
10229     We allow format specification elements in this order:
10230         \d+\$              explicit format parameter index
10231         [-+ 0#]+           flags
10232         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10233         0                  flag (as above): repeated to allow "v02"     
10234         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10235         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10236         [hlqLV]            size
10237     [%bcdefginopsuxDFOUX] format (mandatory)
10238 */
10239
10240         if (args) {
10241 /*  
10242         As of perl5.9.3, printf format checking is on by default.
10243         Internally, perl uses %p formats to provide an escape to
10244         some extended formatting.  This block deals with those
10245         extensions: if it does not match, (char*)q is reset and
10246         the normal format processing code is used.
10247
10248         Currently defined extensions are:
10249                 %p              include pointer address (standard)      
10250                 %-p     (SVf)   include an SV (previously %_)
10251                 %-<num>p        include an SV with precision <num>      
10252                 %2p             include a HEK
10253                 %3p             include a HEK with precision of 256
10254                 %<num>p         (where num != 2 or 3) reserved for future
10255                                 extensions
10256
10257         Robin Barker 2005-07-14 (but modified since)
10258
10259                 %1p     (VDf)   removed.  RMB 2007-10-19
10260 */
10261             char* r = q; 
10262             bool sv = FALSE;    
10263             STRLEN n = 0;
10264             if (*q == '-')
10265                 sv = *q++;
10266             n = expect_number(&q);
10267             if (*q++ == 'p') {
10268                 if (sv) {                       /* SVf */
10269                     if (n) {
10270                         precis = n;
10271                         has_precis = TRUE;
10272                     }
10273                     argsv = MUTABLE_SV(va_arg(*args, void*));
10274                     eptr = SvPV_const(argsv, elen);
10275                     if (DO_UTF8(argsv))
10276                         is_utf8 = TRUE;
10277                     goto string;
10278                 }
10279                 else if (n==2 || n==3) {        /* HEKf */
10280                     HEK * const hek = va_arg(*args, HEK *);
10281                     eptr = HEK_KEY(hek);
10282                     elen = HEK_LEN(hek);
10283                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10284                     if (n==3) precis = 256, has_precis = TRUE;
10285                     goto string;
10286                 }
10287                 else if (n) {
10288                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10289                                      "internal %%<num>p might conflict with future printf extensions");
10290                 }
10291             }
10292             q = r; 
10293         }
10294
10295         if ( (width = expect_number(&q)) ) {
10296             if (*q == '$') {
10297                 ++q;
10298                 efix = width;
10299             } else {
10300                 goto gotwidth;
10301             }
10302         }
10303
10304         /* FLAGS */
10305
10306         while (*q) {
10307             switch (*q) {
10308             case ' ':
10309             case '+':
10310                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10311                     q++;
10312                 else
10313                     plus = *q++;
10314                 continue;
10315
10316             case '-':
10317                 left = TRUE;
10318                 q++;
10319                 continue;
10320
10321             case '0':
10322                 fill = *q++;
10323                 continue;
10324
10325             case '#':
10326                 alt = TRUE;
10327                 q++;
10328                 continue;
10329
10330             default:
10331                 break;
10332             }
10333             break;
10334         }
10335
10336       tryasterisk:
10337         if (*q == '*') {
10338             q++;
10339             if ( (ewix = expect_number(&q)) )
10340                 if (*q++ != '$')
10341                     goto unknown;
10342             asterisk = TRUE;
10343         }
10344         if (*q == 'v') {
10345             q++;
10346             if (vectorize)
10347                 goto unknown;
10348             if ((vectorarg = asterisk)) {
10349                 evix = ewix;
10350                 ewix = 0;
10351                 asterisk = FALSE;
10352             }
10353             vectorize = TRUE;
10354             goto tryasterisk;
10355         }
10356
10357         if (!asterisk)
10358         {
10359             if( *q == '0' )
10360                 fill = *q++;
10361             width = expect_number(&q);
10362         }
10363
10364         if (vectorize && vectorarg) {
10365             /* vectorizing, but not with the default "." */
10366             if (args)
10367                 vecsv = va_arg(*args, SV*);
10368             else if (evix) {
10369                 vecsv = (evix > 0 && evix <= svmax)
10370                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10371             } else {
10372                 vecsv = svix < svmax
10373                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10374             }
10375             dotstr = SvPV_const(vecsv, dotstrlen);
10376             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10377                bad with tied or overloaded values that return UTF8.  */
10378             if (DO_UTF8(vecsv))
10379                 is_utf8 = TRUE;
10380             else if (has_utf8) {
10381                 vecsv = sv_mortalcopy(vecsv);
10382                 sv_utf8_upgrade(vecsv);
10383                 dotstr = SvPV_const(vecsv, dotstrlen);
10384                 is_utf8 = TRUE;
10385             }               
10386         }
10387
10388         if (asterisk) {
10389             if (args)
10390                 i = va_arg(*args, int);
10391             else
10392                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10393                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10394             left |= (i < 0);
10395             width = (i < 0) ? -i : i;
10396         }
10397       gotwidth:
10398
10399         /* PRECISION */
10400
10401         if (*q == '.') {
10402             q++;
10403             if (*q == '*') {
10404                 q++;
10405                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10406                     goto unknown;
10407                 /* XXX: todo, support specified precision parameter */
10408                 if (epix)
10409                     goto unknown;
10410                 if (args)
10411                     i = va_arg(*args, int);
10412                 else
10413                     i = (ewix ? ewix <= svmax : svix < svmax)
10414                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10415                 precis = i;
10416                 has_precis = !(i < 0);
10417             }
10418             else {
10419                 precis = 0;
10420                 while (isDIGIT(*q))
10421                     precis = precis * 10 + (*q++ - '0');
10422                 has_precis = TRUE;
10423             }
10424         }
10425
10426         if (vectorize) {
10427             if (args) {
10428                 VECTORIZE_ARGS
10429             }
10430             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10431                 vecsv = svargs[efix ? efix-1 : svix++];
10432                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10433                 vec_utf8 = DO_UTF8(vecsv);
10434
10435                 /* if this is a version object, we need to convert
10436                  * back into v-string notation and then let the
10437                  * vectorize happen normally
10438                  */
10439                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10440                     char *version = savesvpv(vecsv);
10441                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10442                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10443                         "vector argument not supported with alpha versions");
10444                         goto unknown;
10445                     }
10446                     vecsv = sv_newmortal();
10447                     scan_vstring(version, version + veclen, vecsv);
10448                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10449                     vec_utf8 = DO_UTF8(vecsv);
10450                     Safefree(version);
10451                 }
10452             }
10453             else {
10454                 vecstr = (U8*)"";
10455                 veclen = 0;
10456             }
10457         }
10458
10459         /* SIZE */
10460
10461         switch (*q) {
10462 #ifdef WIN32
10463         case 'I':                       /* Ix, I32x, and I64x */
10464 #  ifdef WIN64
10465             if (q[1] == '6' && q[2] == '4') {
10466                 q += 3;
10467                 intsize = 'q';
10468                 break;
10469             }
10470 #  endif
10471             if (q[1] == '3' && q[2] == '2') {
10472                 q += 3;
10473                 break;
10474             }
10475 #  ifdef WIN64
10476             intsize = 'q';
10477 #  endif
10478             q++;
10479             break;
10480 #endif
10481 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10482         case 'L':                       /* Ld */
10483             /*FALLTHROUGH*/
10484 #ifdef HAS_QUAD
10485         case 'q':                       /* qd */
10486 #endif
10487             intsize = 'q';
10488             q++;
10489             break;
10490 #endif
10491         case 'l':
10492             ++q;
10493 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10494             if (*q == 'l') {    /* lld, llf */
10495                 intsize = 'q';
10496                 ++q;
10497             }
10498             else
10499 #endif
10500                 intsize = 'l';
10501             break;
10502         case 'h':
10503             if (*++q == 'h') {  /* hhd, hhu */
10504                 intsize = 'c';
10505                 ++q;
10506             }
10507             else
10508                 intsize = 'h';
10509             break;
10510         case 'V':
10511         case 'z':
10512         case 't':
10513 #if HAS_C99
10514         case 'j':
10515 #endif
10516             intsize = *q++;
10517             break;
10518         }
10519
10520         /* CONVERSION */
10521
10522         if (*q == '%') {
10523             eptr = q++;
10524             elen = 1;
10525             if (vectorize) {
10526                 c = '%';
10527                 goto unknown;
10528             }
10529             goto string;
10530         }
10531
10532         if (!vectorize && !args) {
10533             if (efix) {
10534                 const I32 i = efix-1;
10535                 argsv = (i >= 0 && i < svmax)
10536                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10537             } else {
10538                 argsv = (svix >= 0 && svix < svmax)
10539                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10540             }
10541         }
10542
10543         switch (c = *q++) {
10544
10545             /* STRINGS */
10546
10547         case 'c':
10548             if (vectorize)
10549                 goto unknown;
10550             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10551             if ((uv > 255 ||
10552                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10553                 && !IN_BYTES) {
10554                 eptr = (char*)utf8buf;
10555                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10556                 is_utf8 = TRUE;
10557             }
10558             else {
10559                 c = (char)uv;
10560                 eptr = &c;
10561                 elen = 1;
10562             }
10563             goto string;
10564
10565         case 's':
10566             if (vectorize)
10567                 goto unknown;
10568             if (args) {
10569                 eptr = va_arg(*args, char*);
10570                 if (eptr)
10571                     elen = strlen(eptr);
10572                 else {
10573                     eptr = (char *)nullstr;
10574                     elen = sizeof nullstr - 1;
10575                 }
10576             }
10577             else {
10578                 eptr = SvPV_const(argsv, elen);
10579                 if (DO_UTF8(argsv)) {
10580                     STRLEN old_precis = precis;
10581                     if (has_precis && precis < elen) {
10582                         STRLEN ulen = sv_len_utf8(argsv);
10583                         I32 p = precis > ulen ? ulen : precis;
10584                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
10585                         precis = p;
10586                     }
10587                     if (width) { /* fudge width (can't fudge elen) */
10588                         if (has_precis && precis < elen)
10589                             width += precis - old_precis;
10590                         else
10591                             width += elen - sv_len_utf8(argsv);
10592                     }
10593                     is_utf8 = TRUE;
10594                 }
10595             }
10596
10597         string:
10598             if (has_precis && precis < elen)
10599                 elen = precis;
10600             break;
10601
10602             /* INTEGERS */
10603
10604         case 'p':
10605             if (alt || vectorize)
10606                 goto unknown;
10607             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10608             base = 16;
10609             goto integer;
10610
10611         case 'D':
10612 #ifdef IV_IS_QUAD
10613             intsize = 'q';
10614 #else
10615             intsize = 'l';
10616 #endif
10617             /*FALLTHROUGH*/
10618         case 'd':
10619         case 'i':
10620 #if vdNUMBER
10621         format_vd:
10622 #endif
10623             if (vectorize) {
10624                 STRLEN ulen;
10625                 if (!veclen)
10626                     continue;
10627                 if (vec_utf8)
10628                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10629                                         UTF8_ALLOW_ANYUV);
10630                 else {
10631                     uv = *vecstr;
10632                     ulen = 1;
10633                 }
10634                 vecstr += ulen;
10635                 veclen -= ulen;
10636                 if (plus)
10637                      esignbuf[esignlen++] = plus;
10638             }
10639             else if (args) {
10640                 switch (intsize) {
10641                 case 'c':       iv = (char)va_arg(*args, int); break;
10642                 case 'h':       iv = (short)va_arg(*args, int); break;
10643                 case 'l':       iv = va_arg(*args, long); break;
10644                 case 'V':       iv = va_arg(*args, IV); break;
10645                 case 'z':       iv = va_arg(*args, SSize_t); break;
10646                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10647                 default:        iv = va_arg(*args, int); break;
10648 #if HAS_C99
10649                 case 'j':       iv = va_arg(*args, intmax_t); break;
10650 #endif
10651                 case 'q':
10652 #ifdef HAS_QUAD
10653                                 iv = va_arg(*args, Quad_t); break;
10654 #else
10655                                 goto unknown;
10656 #endif
10657                 }
10658             }
10659             else {
10660                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10661                 switch (intsize) {
10662                 case 'c':       iv = (char)tiv; break;
10663                 case 'h':       iv = (short)tiv; break;
10664                 case 'l':       iv = (long)tiv; break;
10665                 case 'V':
10666                 default:        iv = tiv; break;
10667                 case 'q':
10668 #ifdef HAS_QUAD
10669                                 iv = (Quad_t)tiv; break;
10670 #else
10671                                 goto unknown;
10672 #endif
10673                 }
10674             }
10675             if ( !vectorize )   /* we already set uv above */
10676             {
10677                 if (iv >= 0) {
10678                     uv = iv;
10679                     if (plus)
10680                         esignbuf[esignlen++] = plus;
10681                 }
10682                 else {
10683                     uv = -iv;
10684                     esignbuf[esignlen++] = '-';
10685                 }
10686             }
10687             base = 10;
10688             goto integer;
10689
10690         case 'U':
10691 #ifdef IV_IS_QUAD
10692             intsize = 'q';
10693 #else
10694             intsize = 'l';
10695 #endif
10696             /*FALLTHROUGH*/
10697         case 'u':
10698             base = 10;
10699             goto uns_integer;
10700
10701         case 'B':
10702         case 'b':
10703             base = 2;
10704             goto uns_integer;
10705
10706         case 'O':
10707 #ifdef IV_IS_QUAD
10708             intsize = 'q';
10709 #else
10710             intsize = 'l';
10711 #endif
10712             /*FALLTHROUGH*/
10713         case 'o':
10714             base = 8;
10715             goto uns_integer;
10716
10717         case 'X':
10718         case 'x':
10719             base = 16;
10720
10721         uns_integer:
10722             if (vectorize) {
10723                 STRLEN ulen;
10724         vector:
10725                 if (!veclen)
10726                     continue;
10727                 if (vec_utf8)
10728                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10729                                         UTF8_ALLOW_ANYUV);
10730                 else {
10731                     uv = *vecstr;
10732                     ulen = 1;
10733                 }
10734                 vecstr += ulen;
10735                 veclen -= ulen;
10736             }
10737             else if (args) {
10738                 switch (intsize) {
10739                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10740                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10741                 case 'l':  uv = va_arg(*args, unsigned long); break;
10742                 case 'V':  uv = va_arg(*args, UV); break;
10743                 case 'z':  uv = va_arg(*args, Size_t); break;
10744                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10745 #if HAS_C99
10746                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10747 #endif
10748                 default:   uv = va_arg(*args, unsigned); break;
10749                 case 'q':
10750 #ifdef HAS_QUAD
10751                            uv = va_arg(*args, Uquad_t); break;
10752 #else
10753                            goto unknown;
10754 #endif
10755                 }
10756             }
10757             else {
10758                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10759                 switch (intsize) {
10760                 case 'c':       uv = (unsigned char)tuv; break;
10761                 case 'h':       uv = (unsigned short)tuv; break;
10762                 case 'l':       uv = (unsigned long)tuv; break;
10763                 case 'V':
10764                 default:        uv = tuv; break;
10765                 case 'q':
10766 #ifdef HAS_QUAD
10767                                 uv = (Uquad_t)tuv; break;
10768 #else
10769                                 goto unknown;
10770 #endif
10771                 }
10772             }
10773
10774         integer:
10775             {
10776                 char *ptr = ebuf + sizeof ebuf;
10777                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10778                 zeros = 0;
10779
10780                 switch (base) {
10781                     unsigned dig;
10782                 case 16:
10783                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10784                     do {
10785                         dig = uv & 15;
10786                         *--ptr = p[dig];
10787                     } while (uv >>= 4);
10788                     if (tempalt) {
10789                         esignbuf[esignlen++] = '0';
10790                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10791                     }
10792                     break;
10793                 case 8:
10794                     do {
10795                         dig = uv & 7;
10796                         *--ptr = '0' + dig;
10797                     } while (uv >>= 3);
10798                     if (alt && *ptr != '0')
10799                         *--ptr = '0';
10800                     break;
10801                 case 2:
10802                     do {
10803                         dig = uv & 1;
10804                         *--ptr = '0' + dig;
10805                     } while (uv >>= 1);
10806                     if (tempalt) {
10807                         esignbuf[esignlen++] = '0';
10808                         esignbuf[esignlen++] = c;
10809                     }
10810                     break;
10811                 default:                /* it had better be ten or less */
10812                     do {
10813                         dig = uv % base;
10814                         *--ptr = '0' + dig;
10815                     } while (uv /= base);
10816                     break;
10817                 }
10818                 elen = (ebuf + sizeof ebuf) - ptr;
10819                 eptr = ptr;
10820                 if (has_precis) {
10821                     if (precis > elen)
10822                         zeros = precis - elen;
10823                     else if (precis == 0 && elen == 1 && *eptr == '0'
10824                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10825                         elen = 0;
10826
10827                 /* a precision nullifies the 0 flag. */
10828                     if (fill == '0')
10829                         fill = ' ';
10830                 }
10831             }
10832             break;
10833
10834             /* FLOATING POINT */
10835
10836         case 'F':
10837             c = 'f';            /* maybe %F isn't supported here */
10838             /*FALLTHROUGH*/
10839         case 'e': case 'E':
10840         case 'f':
10841         case 'g': case 'G':
10842             if (vectorize)
10843                 goto unknown;
10844
10845             /* This is evil, but floating point is even more evil */
10846
10847             /* for SV-style calling, we can only get NV
10848                for C-style calling, we assume %f is double;
10849                for simplicity we allow any of %Lf, %llf, %qf for long double
10850             */
10851             switch (intsize) {
10852             case 'V':
10853 #if defined(USE_LONG_DOUBLE)
10854                 intsize = 'q';
10855 #endif
10856                 break;
10857 /* [perl #20339] - we should accept and ignore %lf rather than die */
10858             case 'l':
10859                 /*FALLTHROUGH*/
10860             default:
10861 #if defined(USE_LONG_DOUBLE)
10862                 intsize = args ? 0 : 'q';
10863 #endif
10864                 break;
10865             case 'q':
10866 #if defined(HAS_LONG_DOUBLE)
10867                 break;
10868 #else
10869                 /*FALLTHROUGH*/
10870 #endif
10871             case 'c':
10872             case 'h':
10873             case 'z':
10874             case 't':
10875             case 'j':
10876                 goto unknown;
10877             }
10878
10879             /* now we need (long double) if intsize == 'q', else (double) */
10880             nv = (args) ?
10881 #if LONG_DOUBLESIZE > DOUBLESIZE
10882                 intsize == 'q' ?
10883                     va_arg(*args, long double) :
10884                     va_arg(*args, double)
10885 #else
10886                     va_arg(*args, double)
10887 #endif
10888                 : SvNV(argsv);
10889
10890             need = 0;
10891             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10892                else. frexp() has some unspecified behaviour for those three */
10893             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10894                 i = PERL_INT_MIN;
10895                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10896                    will cast our (long double) to (double) */
10897                 (void)Perl_frexp(nv, &i);
10898                 if (i == PERL_INT_MIN)
10899                     Perl_die(aTHX_ "panic: frexp");
10900                 if (i > 0)
10901                     need = BIT_DIGITS(i);
10902             }
10903             need += has_precis ? precis : 6; /* known default */
10904
10905             if (need < width)
10906                 need = width;
10907
10908 #ifdef HAS_LDBL_SPRINTF_BUG
10909             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10910                with sfio - Allen <allens@cpan.org> */
10911
10912 #  ifdef DBL_MAX
10913 #    define MY_DBL_MAX DBL_MAX
10914 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10915 #    if DOUBLESIZE >= 8
10916 #      define MY_DBL_MAX 1.7976931348623157E+308L
10917 #    else
10918 #      define MY_DBL_MAX 3.40282347E+38L
10919 #    endif
10920 #  endif
10921
10922 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10923 #    define MY_DBL_MAX_BUG 1L
10924 #  else
10925 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10926 #  endif
10927
10928 #  ifdef DBL_MIN
10929 #    define MY_DBL_MIN DBL_MIN
10930 #  else  /* XXX guessing! -Allen */
10931 #    if DOUBLESIZE >= 8
10932 #      define MY_DBL_MIN 2.2250738585072014E-308L
10933 #    else
10934 #      define MY_DBL_MIN 1.17549435E-38L
10935 #    endif
10936 #  endif
10937
10938             if ((intsize == 'q') && (c == 'f') &&
10939                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10940                 (need < DBL_DIG)) {
10941                 /* it's going to be short enough that
10942                  * long double precision is not needed */
10943
10944                 if ((nv <= 0L) && (nv >= -0L))
10945                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10946                 else {
10947                     /* would use Perl_fp_class as a double-check but not
10948                      * functional on IRIX - see perl.h comments */
10949
10950                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10951                         /* It's within the range that a double can represent */
10952 #if defined(DBL_MAX) && !defined(DBL_MIN)
10953                         if ((nv >= ((long double)1/DBL_MAX)) ||
10954                             (nv <= (-(long double)1/DBL_MAX)))
10955 #endif
10956                         fix_ldbl_sprintf_bug = TRUE;
10957                     }
10958                 }
10959                 if (fix_ldbl_sprintf_bug == TRUE) {
10960                     double temp;
10961
10962                     intsize = 0;
10963                     temp = (double)nv;
10964                     nv = (NV)temp;
10965                 }
10966             }
10967
10968 #  undef MY_DBL_MAX
10969 #  undef MY_DBL_MAX_BUG
10970 #  undef MY_DBL_MIN
10971
10972 #endif /* HAS_LDBL_SPRINTF_BUG */
10973
10974             need += 20; /* fudge factor */
10975             if (PL_efloatsize < need) {
10976                 Safefree(PL_efloatbuf);
10977                 PL_efloatsize = need + 20; /* more fudge */
10978                 Newx(PL_efloatbuf, PL_efloatsize, char);
10979                 PL_efloatbuf[0] = '\0';
10980             }
10981
10982             if ( !(width || left || plus || alt) && fill != '0'
10983                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10984                 /* See earlier comment about buggy Gconvert when digits,
10985                    aka precis is 0  */
10986                 if ( c == 'g' && precis) {
10987                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10988                     /* May return an empty string for digits==0 */
10989                     if (*PL_efloatbuf) {
10990                         elen = strlen(PL_efloatbuf);
10991                         goto float_converted;
10992                     }
10993                 } else if ( c == 'f' && !precis) {
10994                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10995                         break;
10996                 }
10997             }
10998             {
10999                 char *ptr = ebuf + sizeof ebuf;
11000                 *--ptr = '\0';
11001                 *--ptr = c;
11002                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11003 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11004                 if (intsize == 'q') {
11005                     /* Copy the one or more characters in a long double
11006                      * format before the 'base' ([efgEFG]) character to
11007                      * the format string. */
11008                     static char const prifldbl[] = PERL_PRIfldbl;
11009                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11010                     while (p >= prifldbl) { *--ptr = *p--; }
11011                 }
11012 #endif
11013                 if (has_precis) {
11014                     base = precis;
11015                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11016                     *--ptr = '.';
11017                 }
11018                 if (width) {
11019                     base = width;
11020                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11021                 }
11022                 if (fill == '0')
11023                     *--ptr = fill;
11024                 if (left)
11025                     *--ptr = '-';
11026                 if (plus)
11027                     *--ptr = plus;
11028                 if (alt)
11029                     *--ptr = '#';
11030                 *--ptr = '%';
11031
11032                 /* No taint.  Otherwise we are in the strange situation
11033                  * where printf() taints but print($float) doesn't.
11034                  * --jhi */
11035 #if defined(HAS_LONG_DOUBLE)
11036                 elen = ((intsize == 'q')
11037                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11038                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11039 #else
11040                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11041 #endif
11042             }
11043         float_converted:
11044             eptr = PL_efloatbuf;
11045             break;
11046
11047             /* SPECIAL */
11048
11049         case 'n':
11050             if (vectorize)
11051                 goto unknown;
11052             i = SvCUR(sv) - origlen;
11053             if (args) {
11054                 switch (intsize) {
11055                 case 'c':       *(va_arg(*args, char*)) = i; break;
11056                 case 'h':       *(va_arg(*args, short*)) = i; break;
11057                 default:        *(va_arg(*args, int*)) = i; break;
11058                 case 'l':       *(va_arg(*args, long*)) = i; break;
11059                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11060                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11061                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11062 #if HAS_C99
11063                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11064 #endif
11065                 case 'q':
11066 #ifdef HAS_QUAD
11067                                 *(va_arg(*args, Quad_t*)) = i; break;
11068 #else
11069                                 goto unknown;
11070 #endif
11071                 }
11072             }
11073             else
11074                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11075             continue;   /* not "break" */
11076
11077             /* UNKNOWN */
11078
11079         default:
11080       unknown:
11081             if (!args
11082                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11083                 && ckWARN(WARN_PRINTF))
11084             {
11085                 SV * const msg = sv_newmortal();
11086                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11087                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11088                 if (fmtstart < patend) {
11089                     const char * const fmtend = q < patend ? q : patend;
11090                     const char * f;
11091                     sv_catpvs(msg, "\"%");
11092                     for (f = fmtstart; f < fmtend; f++) {
11093                         if (isPRINT(*f)) {
11094                             sv_catpvn(msg, f, 1);
11095                         } else {
11096                             Perl_sv_catpvf(aTHX_ msg,
11097                                            "\\%03"UVof, (UV)*f & 0xFF);
11098                         }
11099                     }
11100                     sv_catpvs(msg, "\"");
11101                 } else {
11102                     sv_catpvs(msg, "end of string");
11103                 }
11104                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11105             }
11106
11107             /* output mangled stuff ... */
11108             if (c == '\0')
11109                 --q;
11110             eptr = p;
11111             elen = q - p;
11112
11113             /* ... right here, because formatting flags should not apply */
11114             SvGROW(sv, SvCUR(sv) + elen + 1);
11115             p = SvEND(sv);
11116             Copy(eptr, p, elen, char);
11117             p += elen;
11118             *p = '\0';
11119             SvCUR_set(sv, p - SvPVX_const(sv));
11120             svix = osvix;
11121             continue;   /* not "break" */
11122         }
11123
11124         if (is_utf8 != has_utf8) {
11125             if (is_utf8) {
11126                 if (SvCUR(sv))
11127                     sv_utf8_upgrade(sv);
11128             }
11129             else {
11130                 const STRLEN old_elen = elen;
11131                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11132                 sv_utf8_upgrade(nsv);
11133                 eptr = SvPVX_const(nsv);
11134                 elen = SvCUR(nsv);
11135
11136                 if (width) { /* fudge width (can't fudge elen) */
11137                     width += elen - old_elen;
11138                 }
11139                 is_utf8 = TRUE;
11140             }
11141         }
11142
11143         have = esignlen + zeros + elen;
11144         if (have < zeros)
11145             Perl_croak_nocontext("%s", PL_memory_wrap);
11146
11147         need = (have > width ? have : width);
11148         gap = need - have;
11149
11150         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11151             Perl_croak_nocontext("%s", PL_memory_wrap);
11152         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11153         p = SvEND(sv);
11154         if (esignlen && fill == '0') {
11155             int i;
11156             for (i = 0; i < (int)esignlen; i++)
11157                 *p++ = esignbuf[i];
11158         }
11159         if (gap && !left) {
11160             memset(p, fill, gap);
11161             p += gap;
11162         }
11163         if (esignlen && fill != '0') {
11164             int i;
11165             for (i = 0; i < (int)esignlen; i++)
11166                 *p++ = esignbuf[i];
11167         }
11168         if (zeros) {
11169             int i;
11170             for (i = zeros; i; i--)
11171                 *p++ = '0';
11172         }
11173         if (elen) {
11174             Copy(eptr, p, elen, char);
11175             p += elen;
11176         }
11177         if (gap && left) {
11178             memset(p, ' ', gap);
11179             p += gap;
11180         }
11181         if (vectorize) {
11182             if (veclen) {
11183                 Copy(dotstr, p, dotstrlen, char);
11184                 p += dotstrlen;
11185             }
11186             else
11187                 vectorize = FALSE;              /* done iterating over vecstr */
11188         }
11189         if (is_utf8)
11190             has_utf8 = TRUE;
11191         if (has_utf8)
11192             SvUTF8_on(sv);
11193         *p = '\0';
11194         SvCUR_set(sv, p - SvPVX_const(sv));
11195         if (vectorize) {
11196             esignlen = 0;
11197             goto vector;
11198         }
11199     }
11200     SvTAINT(sv);
11201 }
11202
11203 /* =========================================================================
11204
11205 =head1 Cloning an interpreter
11206
11207 All the macros and functions in this section are for the private use of
11208 the main function, perl_clone().
11209
11210 The foo_dup() functions make an exact copy of an existing foo thingy.
11211 During the course of a cloning, a hash table is used to map old addresses
11212 to new addresses.  The table is created and manipulated with the
11213 ptr_table_* functions.
11214
11215 =cut
11216
11217  * =========================================================================*/
11218
11219
11220 #if defined(USE_ITHREADS)
11221
11222 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11223 #ifndef GpREFCNT_inc
11224 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11225 #endif
11226
11227
11228 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11229    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11230    If this changes, please unmerge ss_dup.
11231    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11232 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11233 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11234 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11235 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11236 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11237 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11238 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11239 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11240 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11241 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11242 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11243 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11244 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11245
11246 /* clone a parser */
11247
11248 yy_parser *
11249 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11250 {
11251     yy_parser *parser;
11252
11253     PERL_ARGS_ASSERT_PARSER_DUP;
11254
11255     if (!proto)
11256         return NULL;
11257
11258     /* look for it in the table first */
11259     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11260     if (parser)
11261         return parser;
11262
11263     /* create anew and remember what it is */
11264     Newxz(parser, 1, yy_parser);
11265     ptr_table_store(PL_ptr_table, proto, parser);
11266
11267     /* XXX these not yet duped */
11268     parser->old_parser = NULL;
11269     parser->stack = NULL;
11270     parser->ps = NULL;
11271     parser->stack_size = 0;
11272     /* XXX parser->stack->state = 0; */
11273
11274     /* XXX eventually, just Copy() most of the parser struct ? */
11275
11276     parser->lex_brackets = proto->lex_brackets;
11277     parser->lex_casemods = proto->lex_casemods;
11278     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11279                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11280     parser->lex_casestack = savepvn(proto->lex_casestack,
11281                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11282     parser->lex_defer   = proto->lex_defer;
11283     parser->lex_dojoin  = proto->lex_dojoin;
11284     parser->lex_expect  = proto->lex_expect;
11285     parser->lex_formbrack = proto->lex_formbrack;
11286     parser->lex_inpat   = proto->lex_inpat;
11287     parser->lex_inwhat  = proto->lex_inwhat;
11288     parser->lex_op      = proto->lex_op;
11289     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11290     parser->lex_starts  = proto->lex_starts;
11291     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11292     parser->multi_close = proto->multi_close;
11293     parser->multi_open  = proto->multi_open;
11294     parser->multi_start = proto->multi_start;
11295     parser->multi_end   = proto->multi_end;
11296     parser->pending_ident = proto->pending_ident;
11297     parser->preambled   = proto->preambled;
11298     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11299     parser->linestr     = sv_dup_inc(proto->linestr, param);
11300     parser->expect      = proto->expect;
11301     parser->copline     = proto->copline;
11302     parser->last_lop_op = proto->last_lop_op;
11303     parser->lex_state   = proto->lex_state;
11304     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11305     /* rsfp_filters entries have fake IoDIRP() */
11306     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11307     parser->in_my       = proto->in_my;
11308     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11309     parser->error_count = proto->error_count;
11310
11311
11312     parser->linestr     = sv_dup_inc(proto->linestr, param);
11313
11314     {
11315         char * const ols = SvPVX(proto->linestr);
11316         char * const ls  = SvPVX(parser->linestr);
11317
11318         parser->bufptr      = ls + (proto->bufptr >= ols ?
11319                                     proto->bufptr -  ols : 0);
11320         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11321                                     proto->oldbufptr -  ols : 0);
11322         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11323                                     proto->oldoldbufptr -  ols : 0);
11324         parser->linestart   = ls + (proto->linestart >= ols ?
11325                                     proto->linestart -  ols : 0);
11326         parser->last_uni    = ls + (proto->last_uni >= ols ?
11327                                     proto->last_uni -  ols : 0);
11328         parser->last_lop    = ls + (proto->last_lop >= ols ?
11329                                     proto->last_lop -  ols : 0);
11330
11331         parser->bufend      = ls + SvCUR(parser->linestr);
11332     }
11333
11334     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11335
11336
11337 #ifdef PERL_MAD
11338     parser->endwhite    = proto->endwhite;
11339     parser->faketokens  = proto->faketokens;
11340     parser->lasttoke    = proto->lasttoke;
11341     parser->nextwhite   = proto->nextwhite;
11342     parser->realtokenstart = proto->realtokenstart;
11343     parser->skipwhite   = proto->skipwhite;
11344     parser->thisclose   = proto->thisclose;
11345     parser->thismad     = proto->thismad;
11346     parser->thisopen    = proto->thisopen;
11347     parser->thisstuff   = proto->thisstuff;
11348     parser->thistoken   = proto->thistoken;
11349     parser->thiswhite   = proto->thiswhite;
11350
11351     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11352     parser->curforce    = proto->curforce;
11353 #else
11354     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11355     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11356     parser->nexttoke    = proto->nexttoke;
11357 #endif
11358
11359     /* XXX should clone saved_curcop here, but we aren't passed
11360      * proto_perl; so do it in perl_clone_using instead */
11361
11362     return parser;
11363 }
11364
11365
11366 /* duplicate a file handle */
11367
11368 PerlIO *
11369 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11370 {
11371     PerlIO *ret;
11372
11373     PERL_ARGS_ASSERT_FP_DUP;
11374     PERL_UNUSED_ARG(type);
11375
11376     if (!fp)
11377         return (PerlIO*)NULL;
11378
11379     /* look for it in the table first */
11380     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11381     if (ret)
11382         return ret;
11383
11384     /* create anew and remember what it is */
11385     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11386     ptr_table_store(PL_ptr_table, fp, ret);
11387     return ret;
11388 }
11389
11390 /* duplicate a directory handle */
11391
11392 DIR *
11393 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11394 {
11395     DIR *ret;
11396
11397 #ifdef HAS_FCHDIR
11398     DIR *pwd;
11399     register const Direntry_t *dirent;
11400     char smallbuf[256];
11401     char *name = NULL;
11402     STRLEN len = 0;
11403     long pos;
11404 #endif
11405
11406     PERL_UNUSED_CONTEXT;
11407     PERL_ARGS_ASSERT_DIRP_DUP;
11408
11409     if (!dp)
11410         return (DIR*)NULL;
11411
11412     /* look for it in the table first */
11413     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11414     if (ret)
11415         return ret;
11416
11417 #ifdef HAS_FCHDIR
11418
11419     PERL_UNUSED_ARG(param);
11420
11421     /* create anew */
11422
11423     /* open the current directory (so we can switch back) */
11424     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11425
11426     /* chdir to our dir handle and open the present working directory */
11427     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11428         PerlDir_close(pwd);
11429         return (DIR *)NULL;
11430     }
11431     /* Now we should have two dir handles pointing to the same dir. */
11432
11433     /* Be nice to the calling code and chdir back to where we were. */
11434     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11435
11436     /* We have no need of the pwd handle any more. */
11437     PerlDir_close(pwd);
11438
11439 #ifdef DIRNAMLEN
11440 # define d_namlen(d) (d)->d_namlen
11441 #else
11442 # define d_namlen(d) strlen((d)->d_name)
11443 #endif
11444     /* Iterate once through dp, to get the file name at the current posi-
11445        tion. Then step back. */
11446     pos = PerlDir_tell(dp);
11447     if ((dirent = PerlDir_read(dp))) {
11448         len = d_namlen(dirent);
11449         if (len <= sizeof smallbuf) name = smallbuf;
11450         else Newx(name, len, char);
11451         Move(dirent->d_name, name, len, char);
11452     }
11453     PerlDir_seek(dp, pos);
11454
11455     /* Iterate through the new dir handle, till we find a file with the
11456        right name. */
11457     if (!dirent) /* just before the end */
11458         for(;;) {
11459             pos = PerlDir_tell(ret);
11460             if (PerlDir_read(ret)) continue; /* not there yet */
11461             PerlDir_seek(ret, pos); /* step back */
11462             break;
11463         }
11464     else {
11465         const long pos0 = PerlDir_tell(ret);
11466         for(;;) {
11467             pos = PerlDir_tell(ret);
11468             if ((dirent = PerlDir_read(ret))) {
11469                 if (len == d_namlen(dirent)
11470                  && memEQ(name, dirent->d_name, len)) {
11471                     /* found it */
11472                     PerlDir_seek(ret, pos); /* step back */
11473                     break;
11474                 }
11475                 /* else we are not there yet; keep iterating */
11476             }
11477             else { /* This is not meant to happen. The best we can do is
11478                       reset the iterator to the beginning. */
11479                 PerlDir_seek(ret, pos0);
11480                 break;
11481             }
11482         }
11483     }
11484 #undef d_namlen
11485
11486     if (name && name != smallbuf)
11487         Safefree(name);
11488 #endif
11489
11490 #ifdef WIN32
11491     ret = win32_dirp_dup(dp, param);
11492 #endif
11493
11494     /* pop it in the pointer table */
11495     if (ret)
11496         ptr_table_store(PL_ptr_table, dp, ret);
11497
11498     return ret;
11499 }
11500
11501 /* duplicate a typeglob */
11502
11503 GP *
11504 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11505 {
11506     GP *ret;
11507
11508     PERL_ARGS_ASSERT_GP_DUP;
11509
11510     if (!gp)
11511         return (GP*)NULL;
11512     /* look for it in the table first */
11513     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11514     if (ret)
11515         return ret;
11516
11517     /* create anew and remember what it is */
11518     Newxz(ret, 1, GP);
11519     ptr_table_store(PL_ptr_table, gp, ret);
11520
11521     /* clone */
11522     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11523        on Newxz() to do this for us.  */
11524     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11525     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11526     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11527     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11528     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11529     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11530     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11531     ret->gp_cvgen       = gp->gp_cvgen;
11532     ret->gp_line        = gp->gp_line;
11533     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11534     return ret;
11535 }
11536
11537 /* duplicate a chain of magic */
11538
11539 MAGIC *
11540 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11541 {
11542     MAGIC *mgret = NULL;
11543     MAGIC **mgprev_p = &mgret;
11544
11545     PERL_ARGS_ASSERT_MG_DUP;
11546
11547     for (; mg; mg = mg->mg_moremagic) {
11548         MAGIC *nmg;
11549
11550         if ((param->flags & CLONEf_JOIN_IN)
11551                 && mg->mg_type == PERL_MAGIC_backref)
11552             /* when joining, we let the individual SVs add themselves to
11553              * backref as needed. */
11554             continue;
11555
11556         Newx(nmg, 1, MAGIC);
11557         *mgprev_p = nmg;
11558         mgprev_p = &(nmg->mg_moremagic);
11559
11560         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11561            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11562            from the original commit adding Perl_mg_dup() - revision 4538.
11563            Similarly there is the annotation "XXX random ptr?" next to the
11564            assignment to nmg->mg_ptr.  */
11565         *nmg = *mg;
11566
11567         /* FIXME for plugins
11568         if (nmg->mg_type == PERL_MAGIC_qr) {
11569             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11570         }
11571         else
11572         */
11573         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11574                           ? nmg->mg_type == PERL_MAGIC_backref
11575                                 /* The backref AV has its reference
11576                                  * count deliberately bumped by 1 */
11577                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11578                                                     nmg->mg_obj, param))
11579                                 : sv_dup_inc(nmg->mg_obj, param)
11580                           : sv_dup(nmg->mg_obj, param);
11581
11582         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11583             if (nmg->mg_len > 0) {
11584                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11585                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11586                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11587                 {
11588                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11589                     sv_dup_inc_multiple((SV**)(namtp->table),
11590                                         (SV**)(namtp->table), NofAMmeth, param);
11591                 }
11592             }
11593             else if (nmg->mg_len == HEf_SVKEY)
11594                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11595         }
11596         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11597             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11598         }
11599     }
11600     return mgret;
11601 }
11602
11603 #endif /* USE_ITHREADS */
11604
11605 struct ptr_tbl_arena {
11606     struct ptr_tbl_arena *next;
11607     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11608 };
11609
11610 /* create a new pointer-mapping table */
11611
11612 PTR_TBL_t *
11613 Perl_ptr_table_new(pTHX)
11614 {
11615     PTR_TBL_t *tbl;
11616     PERL_UNUSED_CONTEXT;
11617
11618     Newx(tbl, 1, PTR_TBL_t);
11619     tbl->tbl_max        = 511;
11620     tbl->tbl_items      = 0;
11621     tbl->tbl_arena      = NULL;
11622     tbl->tbl_arena_next = NULL;
11623     tbl->tbl_arena_end  = NULL;
11624     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11625     return tbl;
11626 }
11627
11628 #define PTR_TABLE_HASH(ptr) \
11629   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11630
11631 /* map an existing pointer using a table */
11632
11633 STATIC PTR_TBL_ENT_t *
11634 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11635 {
11636     PTR_TBL_ENT_t *tblent;
11637     const UV hash = PTR_TABLE_HASH(sv);
11638
11639     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11640
11641     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11642     for (; tblent; tblent = tblent->next) {
11643         if (tblent->oldval == sv)
11644             return tblent;
11645     }
11646     return NULL;
11647 }
11648
11649 void *
11650 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11651 {
11652     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11653
11654     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11655     PERL_UNUSED_CONTEXT;
11656
11657     return tblent ? tblent->newval : NULL;
11658 }
11659
11660 /* add a new entry to a pointer-mapping table */
11661
11662 void
11663 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11664 {
11665     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11666
11667     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11668     PERL_UNUSED_CONTEXT;
11669
11670     if (tblent) {
11671         tblent->newval = newsv;
11672     } else {
11673         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11674
11675         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11676             struct ptr_tbl_arena *new_arena;
11677
11678             Newx(new_arena, 1, struct ptr_tbl_arena);
11679             new_arena->next = tbl->tbl_arena;
11680             tbl->tbl_arena = new_arena;
11681             tbl->tbl_arena_next = new_arena->array;
11682             tbl->tbl_arena_end = new_arena->array
11683                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11684         }
11685
11686         tblent = tbl->tbl_arena_next++;
11687
11688         tblent->oldval = oldsv;
11689         tblent->newval = newsv;
11690         tblent->next = tbl->tbl_ary[entry];
11691         tbl->tbl_ary[entry] = tblent;
11692         tbl->tbl_items++;
11693         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11694             ptr_table_split(tbl);
11695     }
11696 }
11697
11698 /* double the hash bucket size of an existing ptr table */
11699
11700 void
11701 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11702 {
11703     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11704     const UV oldsize = tbl->tbl_max + 1;
11705     UV newsize = oldsize * 2;
11706     UV i;
11707
11708     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11709     PERL_UNUSED_CONTEXT;
11710
11711     Renew(ary, newsize, PTR_TBL_ENT_t*);
11712     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11713     tbl->tbl_max = --newsize;
11714     tbl->tbl_ary = ary;
11715     for (i=0; i < oldsize; i++, ary++) {
11716         PTR_TBL_ENT_t **entp = ary;
11717         PTR_TBL_ENT_t *ent = *ary;
11718         PTR_TBL_ENT_t **curentp;
11719         if (!ent)
11720             continue;
11721         curentp = ary + oldsize;
11722         do {
11723             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11724                 *entp = ent->next;
11725                 ent->next = *curentp;
11726                 *curentp = ent;
11727             }
11728             else
11729                 entp = &ent->next;
11730             ent = *entp;
11731         } while (ent);
11732     }
11733 }
11734
11735 /* remove all the entries from a ptr table */
11736 /* Deprecated - will be removed post 5.14 */
11737
11738 void
11739 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11740 {
11741     if (tbl && tbl->tbl_items) {
11742         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11743
11744         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11745
11746         while (arena) {
11747             struct ptr_tbl_arena *next = arena->next;
11748
11749             Safefree(arena);
11750             arena = next;
11751         };
11752
11753         tbl->tbl_items = 0;
11754         tbl->tbl_arena = NULL;
11755         tbl->tbl_arena_next = NULL;
11756         tbl->tbl_arena_end = NULL;
11757     }
11758 }
11759
11760 /* clear and free a ptr table */
11761
11762 void
11763 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11764 {
11765     struct ptr_tbl_arena *arena;
11766
11767     if (!tbl) {
11768         return;
11769     }
11770
11771     arena = tbl->tbl_arena;
11772
11773     while (arena) {
11774         struct ptr_tbl_arena *next = arena->next;
11775
11776         Safefree(arena);
11777         arena = next;
11778     }
11779
11780     Safefree(tbl->tbl_ary);
11781     Safefree(tbl);
11782 }
11783
11784 #if defined(USE_ITHREADS)
11785
11786 void
11787 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11788 {
11789     PERL_ARGS_ASSERT_RVPV_DUP;
11790
11791     if (SvROK(sstr)) {
11792         if (SvWEAKREF(sstr)) {
11793             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11794             if (param->flags & CLONEf_JOIN_IN) {
11795                 /* if joining, we add any back references individually rather
11796                  * than copying the whole backref array */
11797                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11798             }
11799         }
11800         else
11801             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11802     }
11803     else if (SvPVX_const(sstr)) {
11804         /* Has something there */
11805         if (SvLEN(sstr)) {
11806             /* Normal PV - clone whole allocated space */
11807             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11808             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11809                 /* Not that normal - actually sstr is copy on write.
11810                    But we are a true, independent SV, so:  */
11811                 SvREADONLY_off(dstr);
11812                 SvFAKE_off(dstr);
11813             }
11814         }
11815         else {
11816             /* Special case - not normally malloced for some reason */
11817             if (isGV_with_GP(sstr)) {
11818                 /* Don't need to do anything here.  */
11819             }
11820             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
11821                 /* A "shared" PV - clone it as "shared" PV */
11822                 SvPV_set(dstr,
11823                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11824                                          param)));
11825             }
11826             else {
11827                 /* Some other special case - random pointer */
11828                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11829             }
11830         }
11831     }
11832     else {
11833         /* Copy the NULL */
11834         SvPV_set(dstr, NULL);
11835     }
11836 }
11837
11838 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11839 static SV **
11840 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11841                       SSize_t items, CLONE_PARAMS *const param)
11842 {
11843     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11844
11845     while (items-- > 0) {
11846         *dest++ = sv_dup_inc(*source++, param);
11847     }
11848
11849     return dest;
11850 }
11851
11852 /* duplicate an SV of any type (including AV, HV etc) */
11853
11854 static SV *
11855 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11856 {
11857     dVAR;
11858     SV *dstr;
11859
11860     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11861
11862     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
11863 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11864         abort();
11865 #endif
11866         return NULL;
11867     }
11868     /* look for it in the table first */
11869     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11870     if (dstr)
11871         return dstr;
11872
11873     if(param->flags & CLONEf_JOIN_IN) {
11874         /** We are joining here so we don't want do clone
11875             something that is bad **/
11876         if (SvTYPE(sstr) == SVt_PVHV) {
11877             const HEK * const hvname = HvNAME_HEK(sstr);
11878             if (hvname) {
11879                 /** don't clone stashes if they already exist **/
11880                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11881                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
11882                 ptr_table_store(PL_ptr_table, sstr, dstr);
11883                 return dstr;
11884             }
11885         }
11886         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
11887             HV *stash = GvSTASH(sstr);
11888             const HEK * hvname;
11889             if (stash && (hvname = HvNAME_HEK(stash))) {
11890                 /** don't clone GVs if they already exist **/
11891                 SV **svp;
11892                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11893                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
11894                 svp = hv_fetch(
11895                         stash, GvNAME(sstr),
11896                         GvNAMEUTF8(sstr)
11897                             ? -GvNAMELEN(sstr)
11898                             :  GvNAMELEN(sstr),
11899                         0
11900                       );
11901                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
11902                     ptr_table_store(PL_ptr_table, sstr, *svp);
11903                     return *svp;
11904                 }
11905             }
11906         }
11907     }
11908
11909     /* create anew and remember what it is */
11910     new_SV(dstr);
11911
11912 #ifdef DEBUG_LEAKING_SCALARS
11913     dstr->sv_debug_optype = sstr->sv_debug_optype;
11914     dstr->sv_debug_line = sstr->sv_debug_line;
11915     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11916     dstr->sv_debug_parent = (SV*)sstr;
11917     FREE_SV_DEBUG_FILE(dstr);
11918     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11919 #endif
11920
11921     ptr_table_store(PL_ptr_table, sstr, dstr);
11922
11923     /* clone */
11924     SvFLAGS(dstr)       = SvFLAGS(sstr);
11925     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11926     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11927
11928 #ifdef DEBUGGING
11929     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11930         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11931                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11932 #endif
11933
11934     /* don't clone objects whose class has asked us not to */
11935     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11936         SvFLAGS(dstr) = 0;
11937         return dstr;
11938     }
11939
11940     switch (SvTYPE(sstr)) {
11941     case SVt_NULL:
11942         SvANY(dstr)     = NULL;
11943         break;
11944     case SVt_IV:
11945         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11946         if(SvROK(sstr)) {
11947             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11948         } else {
11949             SvIV_set(dstr, SvIVX(sstr));
11950         }
11951         break;
11952     case SVt_NV:
11953         SvANY(dstr)     = new_XNV();
11954         SvNV_set(dstr, SvNVX(sstr));
11955         break;
11956         /* case SVt_BIND: */
11957     default:
11958         {
11959             /* These are all the types that need complex bodies allocating.  */
11960             void *new_body;
11961             const svtype sv_type = SvTYPE(sstr);
11962             const struct body_details *const sv_type_details
11963                 = bodies_by_type + sv_type;
11964
11965             switch (sv_type) {
11966             default:
11967                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11968                 break;
11969
11970             case SVt_PVGV:
11971             case SVt_PVIO:
11972             case SVt_PVFM:
11973             case SVt_PVHV:
11974             case SVt_PVAV:
11975             case SVt_PVCV:
11976             case SVt_PVLV:
11977             case SVt_REGEXP:
11978             case SVt_PVMG:
11979             case SVt_PVNV:
11980             case SVt_PVIV:
11981             case SVt_PV:
11982                 assert(sv_type_details->body_size);
11983                 if (sv_type_details->arena) {
11984                     new_body_inline(new_body, sv_type);
11985                     new_body
11986                         = (void*)((char*)new_body - sv_type_details->offset);
11987                 } else {
11988                     new_body = new_NOARENA(sv_type_details);
11989                 }
11990             }
11991             assert(new_body);
11992             SvANY(dstr) = new_body;
11993
11994 #ifndef PURIFY
11995             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11996                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11997                  sv_type_details->copy, char);
11998 #else
11999             Copy(((char*)SvANY(sstr)),
12000                  ((char*)SvANY(dstr)),
12001                  sv_type_details->body_size + sv_type_details->offset, char);
12002 #endif
12003
12004             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12005                 && !isGV_with_GP(dstr)
12006                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12007                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12008
12009             /* The Copy above means that all the source (unduplicated) pointers
12010                are now in the destination.  We can check the flags and the
12011                pointers in either, but it's possible that there's less cache
12012                missing by always going for the destination.
12013                FIXME - instrument and check that assumption  */
12014             if (sv_type >= SVt_PVMG) {
12015                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12016                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12017                 } else if (SvMAGIC(dstr))
12018                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12019                 if (SvSTASH(dstr))
12020                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12021             }
12022
12023             /* The cast silences a GCC warning about unhandled types.  */
12024             switch ((int)sv_type) {
12025             case SVt_PV:
12026                 break;
12027             case SVt_PVIV:
12028                 break;
12029             case SVt_PVNV:
12030                 break;
12031             case SVt_PVMG:
12032                 break;
12033             case SVt_REGEXP:
12034                 /* FIXME for plugins */
12035                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12036                 break;
12037             case SVt_PVLV:
12038                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12039                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12040                     LvTARG(dstr) = dstr;
12041                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12042                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12043                 else
12044                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12045             case SVt_PVGV:
12046                 /* non-GP case already handled above */
12047                 if(isGV_with_GP(sstr)) {
12048                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12049                     /* Don't call sv_add_backref here as it's going to be
12050                        created as part of the magic cloning of the symbol
12051                        table--unless this is during a join and the stash
12052                        is not actually being cloned.  */
12053                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12054                        at the point of this comment.  */
12055                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12056                     if (param->flags & CLONEf_JOIN_IN)
12057                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12058                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12059                     (void)GpREFCNT_inc(GvGP(dstr));
12060                 }
12061                 break;
12062             case SVt_PVIO:
12063                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12064                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12065                     /* I have no idea why fake dirp (rsfps)
12066                        should be treated differently but otherwise
12067                        we end up with leaks -- sky*/
12068                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12069                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12070                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12071                 } else {
12072                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12073                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12074                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12075                     if (IoDIRP(dstr)) {
12076                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12077                     } else {
12078                         NOOP;
12079                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12080                     }
12081                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12082                 }
12083                 if (IoOFP(dstr) == IoIFP(sstr))
12084                     IoOFP(dstr) = IoIFP(dstr);
12085                 else
12086                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12087                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12088                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12089                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12090                 break;
12091             case SVt_PVAV:
12092                 /* avoid cloning an empty array */
12093                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12094                     SV **dst_ary, **src_ary;
12095                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12096
12097                     src_ary = AvARRAY((const AV *)sstr);
12098                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12099                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12100                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12101                     AvALLOC((const AV *)dstr) = dst_ary;
12102                     if (AvREAL((const AV *)sstr)) {
12103                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12104                                                       param);
12105                     }
12106                     else {
12107                         while (items-- > 0)
12108                             *dst_ary++ = sv_dup(*src_ary++, param);
12109                     }
12110                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12111                     while (items-- > 0) {
12112                         *dst_ary++ = &PL_sv_undef;
12113                     }
12114                 }
12115                 else {
12116                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12117                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12118                     AvMAX(  (const AV *)dstr)   = -1;
12119                     AvFILLp((const AV *)dstr)   = -1;
12120                 }
12121                 break;
12122             case SVt_PVHV:
12123                 if (HvARRAY((const HV *)sstr)) {
12124                     STRLEN i = 0;
12125                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12126                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12127                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12128                     char *darray;
12129                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12130                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12131                         char);
12132                     HvARRAY(dstr) = (HE**)darray;
12133                     while (i <= sxhv->xhv_max) {
12134                         const HE * const source = HvARRAY(sstr)[i];
12135                         HvARRAY(dstr)[i] = source
12136                             ? he_dup(source, sharekeys, param) : 0;
12137                         ++i;
12138                     }
12139                     if (SvOOK(sstr)) {
12140                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12141                         struct xpvhv_aux * const daux = HvAUX(dstr);
12142                         /* This flag isn't copied.  */
12143                         SvOOK_on(dstr);
12144
12145                         if (saux->xhv_name_count) {
12146                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12147                             const I32 count
12148                              = saux->xhv_name_count < 0
12149                                 ? -saux->xhv_name_count
12150                                 :  saux->xhv_name_count;
12151                             HEK **shekp = sname + count;
12152                             HEK **dhekp;
12153                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12154                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12155                             while (shekp-- > sname) {
12156                                 dhekp--;
12157                                 *dhekp = hek_dup(*shekp, param);
12158                             }
12159                         }
12160                         else {
12161                             daux->xhv_name_u.xhvnameu_name
12162                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12163                                           param);
12164                         }
12165                         daux->xhv_name_count = saux->xhv_name_count;
12166
12167                         daux->xhv_riter = saux->xhv_riter;
12168                         daux->xhv_eiter = saux->xhv_eiter
12169                             ? he_dup(saux->xhv_eiter,
12170                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12171                         /* backref array needs refcnt=2; see sv_add_backref */
12172                         daux->xhv_backreferences =
12173                             (param->flags & CLONEf_JOIN_IN)
12174                                 /* when joining, we let the individual GVs and
12175                                  * CVs add themselves to backref as
12176                                  * needed. This avoids pulling in stuff
12177                                  * that isn't required, and simplifies the
12178                                  * case where stashes aren't cloned back
12179                                  * if they already exist in the parent
12180                                  * thread */
12181                             ? NULL
12182                             : saux->xhv_backreferences
12183                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12184                                     ? MUTABLE_AV(SvREFCNT_inc(
12185                                           sv_dup_inc((const SV *)
12186                                             saux->xhv_backreferences, param)))
12187                                     : MUTABLE_AV(sv_dup((const SV *)
12188                                             saux->xhv_backreferences, param))
12189                                 : 0;
12190
12191                         daux->xhv_mro_meta = saux->xhv_mro_meta
12192                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12193                             : 0;
12194
12195                         /* Record stashes for possible cloning in Perl_clone(). */
12196                         if (HvNAME(sstr))
12197                             av_push(param->stashes, dstr);
12198                     }
12199                 }
12200                 else
12201                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12202                 break;
12203             case SVt_PVCV:
12204                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12205                     CvDEPTH(dstr) = 0;
12206                 }
12207                 /*FALLTHROUGH*/
12208             case SVt_PVFM:
12209                 /* NOTE: not refcounted */
12210                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12211                     hv_dup(CvSTASH(dstr), param);
12212                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12213                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12214                 if (!CvISXSUB(dstr)) {
12215                     OP_REFCNT_LOCK;
12216                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12217                     OP_REFCNT_UNLOCK;
12218                 } else if (CvCONST(dstr)) {
12219                     CvXSUBANY(dstr).any_ptr =
12220                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12221                 }
12222                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12223                 /* don't dup if copying back - CvGV isn't refcounted, so the
12224                  * duped GV may never be freed. A bit of a hack! DAPM */
12225                 SvANY(MUTABLE_CV(dstr))->xcv_gv =
12226                     CvCVGV_RC(dstr)
12227                     ? gv_dup_inc(CvGV(sstr), param)
12228                     : (param->flags & CLONEf_JOIN_IN)
12229                         ? NULL
12230                         : gv_dup(CvGV(sstr), param);
12231
12232                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12233                 CvOUTSIDE(dstr) =
12234                     CvWEAKOUTSIDE(sstr)
12235                     ? cv_dup(    CvOUTSIDE(dstr), param)
12236                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12237                 break;
12238             }
12239         }
12240     }
12241
12242     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12243         ++PL_sv_objcount;
12244
12245     return dstr;
12246  }
12247
12248 SV *
12249 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12250 {
12251     PERL_ARGS_ASSERT_SV_DUP_INC;
12252     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12253 }
12254
12255 SV *
12256 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12257 {
12258     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12259     PERL_ARGS_ASSERT_SV_DUP;
12260
12261     /* Track every SV that (at least initially) had a reference count of 0.
12262        We need to do this by holding an actual reference to it in this array.
12263        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12264        (akin to the stashes hash, and the perl stack), we come unstuck if
12265        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12266        thread) is manipulated in a CLONE method, because CLONE runs before the
12267        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12268        (and fix things up by giving each a reference via the temps stack).
12269        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12270        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12271        before the walk of unreferenced happens and a reference to that is SV
12272        added to the temps stack. At which point we have the same SV considered
12273        to be in use, and free to be re-used. Not good.
12274     */
12275     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12276         assert(param->unreferenced);
12277         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12278     }
12279
12280     return dstr;
12281 }
12282
12283 /* duplicate a context */
12284
12285 PERL_CONTEXT *
12286 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12287 {
12288     PERL_CONTEXT *ncxs;
12289
12290     PERL_ARGS_ASSERT_CX_DUP;
12291
12292     if (!cxs)
12293         return (PERL_CONTEXT*)NULL;
12294
12295     /* look for it in the table first */
12296     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12297     if (ncxs)
12298         return ncxs;
12299
12300     /* create anew and remember what it is */
12301     Newx(ncxs, max + 1, PERL_CONTEXT);
12302     ptr_table_store(PL_ptr_table, cxs, ncxs);
12303     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12304
12305     while (ix >= 0) {
12306         PERL_CONTEXT * const ncx = &ncxs[ix];
12307         if (CxTYPE(ncx) == CXt_SUBST) {
12308             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12309         }
12310         else {
12311             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12312             switch (CxTYPE(ncx)) {
12313             case CXt_SUB:
12314                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12315                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12316                                            : cv_dup(ncx->blk_sub.cv,param));
12317                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12318                                            ? av_dup_inc(ncx->blk_sub.argarray,
12319                                                         param)
12320                                            : NULL);
12321                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12322                                                      param);
12323                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12324                                            ncx->blk_sub.oldcomppad);
12325                 break;
12326             case CXt_EVAL:
12327                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12328                                                       param);
12329                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12330                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12331                 break;
12332             case CXt_LOOP_LAZYSV:
12333                 ncx->blk_loop.state_u.lazysv.end
12334                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12335                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12336                    actually being the same function, and order equivalence of
12337                    the two unions.
12338                    We can assert the later [but only at run time :-(]  */
12339                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12340                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12341             case CXt_LOOP_FOR:
12342                 ncx->blk_loop.state_u.ary.ary
12343                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12344             case CXt_LOOP_LAZYIV:
12345             case CXt_LOOP_PLAIN:
12346                 if (CxPADLOOP(ncx)) {
12347                     ncx->blk_loop.itervar_u.oldcomppad
12348                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12349                                         ncx->blk_loop.itervar_u.oldcomppad);
12350                 } else {
12351                     ncx->blk_loop.itervar_u.gv
12352                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12353                                     param);
12354                 }
12355                 break;
12356             case CXt_FORMAT:
12357                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12358                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12359                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12360                                                      param);
12361                 break;
12362             case CXt_BLOCK:
12363             case CXt_NULL:
12364             case CXt_WHEN:
12365             case CXt_GIVEN:
12366                 break;
12367             }
12368         }
12369         --ix;
12370     }
12371     return ncxs;
12372 }
12373
12374 /* duplicate a stack info structure */
12375
12376 PERL_SI *
12377 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12378 {
12379     PERL_SI *nsi;
12380
12381     PERL_ARGS_ASSERT_SI_DUP;
12382
12383     if (!si)
12384         return (PERL_SI*)NULL;
12385
12386     /* look for it in the table first */
12387     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12388     if (nsi)
12389         return nsi;
12390
12391     /* create anew and remember what it is */
12392     Newxz(nsi, 1, PERL_SI);
12393     ptr_table_store(PL_ptr_table, si, nsi);
12394
12395     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12396     nsi->si_cxix        = si->si_cxix;
12397     nsi->si_cxmax       = si->si_cxmax;
12398     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12399     nsi->si_type        = si->si_type;
12400     nsi->si_prev        = si_dup(si->si_prev, param);
12401     nsi->si_next        = si_dup(si->si_next, param);
12402     nsi->si_markoff     = si->si_markoff;
12403
12404     return nsi;
12405 }
12406
12407 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12408 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12409 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12410 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12411 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12412 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12413 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12414 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12415 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12416 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12417 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12418 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12419 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12420 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12421 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12422 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12423
12424 /* XXXXX todo */
12425 #define pv_dup_inc(p)   SAVEPV(p)
12426 #define pv_dup(p)       SAVEPV(p)
12427 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12428
12429 /* map any object to the new equivent - either something in the
12430  * ptr table, or something in the interpreter structure
12431  */
12432
12433 void *
12434 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12435 {
12436     void *ret;
12437
12438     PERL_ARGS_ASSERT_ANY_DUP;
12439
12440     if (!v)
12441         return (void*)NULL;
12442
12443     /* look for it in the table first */
12444     ret = ptr_table_fetch(PL_ptr_table, v);
12445     if (ret)
12446         return ret;
12447
12448     /* see if it is part of the interpreter structure */
12449     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12450         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12451     else {
12452         ret = v;
12453     }
12454
12455     return ret;
12456 }
12457
12458 /* duplicate the save stack */
12459
12460 ANY *
12461 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12462 {
12463     dVAR;
12464     ANY * const ss      = proto_perl->Isavestack;
12465     const I32 max       = proto_perl->Isavestack_max;
12466     I32 ix              = proto_perl->Isavestack_ix;
12467     ANY *nss;
12468     const SV *sv;
12469     const GV *gv;
12470     const AV *av;
12471     const HV *hv;
12472     void* ptr;
12473     int intval;
12474     long longval;
12475     GP *gp;
12476     IV iv;
12477     I32 i;
12478     char *c = NULL;
12479     void (*dptr) (void*);
12480     void (*dxptr) (pTHX_ void*);
12481
12482     PERL_ARGS_ASSERT_SS_DUP;
12483
12484     Newxz(nss, max, ANY);
12485
12486     while (ix > 0) {
12487         const UV uv = POPUV(ss,ix);
12488         const U8 type = (U8)uv & SAVE_MASK;
12489
12490         TOPUV(nss,ix) = uv;
12491         switch (type) {
12492         case SAVEt_CLEARSV:
12493             break;
12494         case SAVEt_HELEM:               /* hash element */
12495             sv = (const SV *)POPPTR(ss,ix);
12496             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12497             /* fall through */
12498         case SAVEt_ITEM:                        /* normal string */
12499         case SAVEt_GVSV:                        /* scalar slot in GV */
12500         case SAVEt_SV:                          /* scalar reference */
12501             sv = (const SV *)POPPTR(ss,ix);
12502             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12503             /* fall through */
12504         case SAVEt_FREESV:
12505         case SAVEt_MORTALIZESV:
12506             sv = (const SV *)POPPTR(ss,ix);
12507             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12508             break;
12509         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12510             c = (char*)POPPTR(ss,ix);
12511             TOPPTR(nss,ix) = savesharedpv(c);
12512             ptr = POPPTR(ss,ix);
12513             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12514             break;
12515         case SAVEt_GENERIC_SVREF:               /* generic sv */
12516         case SAVEt_SVREF:                       /* scalar reference */
12517             sv = (const SV *)POPPTR(ss,ix);
12518             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12519             ptr = POPPTR(ss,ix);
12520             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12521             break;
12522         case SAVEt_HV:                          /* hash reference */
12523         case SAVEt_AV:                          /* array reference */
12524             sv = (const SV *) POPPTR(ss,ix);
12525             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12526             /* fall through */
12527         case SAVEt_COMPPAD:
12528         case SAVEt_NSTAB:
12529             sv = (const SV *) POPPTR(ss,ix);
12530             TOPPTR(nss,ix) = sv_dup(sv, param);
12531             break;
12532         case SAVEt_INT:                         /* int reference */
12533             ptr = POPPTR(ss,ix);
12534             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12535             intval = (int)POPINT(ss,ix);
12536             TOPINT(nss,ix) = intval;
12537             break;
12538         case SAVEt_LONG:                        /* long reference */
12539             ptr = POPPTR(ss,ix);
12540             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12541             longval = (long)POPLONG(ss,ix);
12542             TOPLONG(nss,ix) = longval;
12543             break;
12544         case SAVEt_I32:                         /* I32 reference */
12545             ptr = POPPTR(ss,ix);
12546             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12547             i = POPINT(ss,ix);
12548             TOPINT(nss,ix) = i;
12549             break;
12550         case SAVEt_IV:                          /* IV reference */
12551             ptr = POPPTR(ss,ix);
12552             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12553             iv = POPIV(ss,ix);
12554             TOPIV(nss,ix) = iv;
12555             break;
12556         case SAVEt_HPTR:                        /* HV* reference */
12557         case SAVEt_APTR:                        /* AV* reference */
12558         case SAVEt_SPTR:                        /* SV* reference */
12559             ptr = POPPTR(ss,ix);
12560             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12561             sv = (const SV *)POPPTR(ss,ix);
12562             TOPPTR(nss,ix) = sv_dup(sv, param);
12563             break;
12564         case SAVEt_VPTR:                        /* random* reference */
12565             ptr = POPPTR(ss,ix);
12566             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12567             /* Fall through */
12568         case SAVEt_INT_SMALL:
12569         case SAVEt_I32_SMALL:
12570         case SAVEt_I16:                         /* I16 reference */
12571         case SAVEt_I8:                          /* I8 reference */
12572         case SAVEt_BOOL:
12573             ptr = POPPTR(ss,ix);
12574             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12575             break;
12576         case SAVEt_GENERIC_PVREF:               /* generic char* */
12577         case SAVEt_PPTR:                        /* char* reference */
12578             ptr = POPPTR(ss,ix);
12579             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12580             c = (char*)POPPTR(ss,ix);
12581             TOPPTR(nss,ix) = pv_dup(c);
12582             break;
12583         case SAVEt_GP:                          /* scalar reference */
12584             gp = (GP*)POPPTR(ss,ix);
12585             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12586             (void)GpREFCNT_inc(gp);
12587             gv = (const GV *)POPPTR(ss,ix);
12588             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12589             break;
12590         case SAVEt_FREEOP:
12591             ptr = POPPTR(ss,ix);
12592             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12593                 /* these are assumed to be refcounted properly */
12594                 OP *o;
12595                 switch (((OP*)ptr)->op_type) {
12596                 case OP_LEAVESUB:
12597                 case OP_LEAVESUBLV:
12598                 case OP_LEAVEEVAL:
12599                 case OP_LEAVE:
12600                 case OP_SCOPE:
12601                 case OP_LEAVEWRITE:
12602                     TOPPTR(nss,ix) = ptr;
12603                     o = (OP*)ptr;
12604                     OP_REFCNT_LOCK;
12605                     (void) OpREFCNT_inc(o);
12606                     OP_REFCNT_UNLOCK;
12607                     break;
12608                 default:
12609                     TOPPTR(nss,ix) = NULL;
12610                     break;
12611                 }
12612             }
12613             else
12614                 TOPPTR(nss,ix) = NULL;
12615             break;
12616         case SAVEt_FREECOPHH:
12617             ptr = POPPTR(ss,ix);
12618             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12619             break;
12620         case SAVEt_DELETE:
12621             hv = (const HV *)POPPTR(ss,ix);
12622             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12623             i = POPINT(ss,ix);
12624             TOPINT(nss,ix) = i;
12625             /* Fall through */
12626         case SAVEt_FREEPV:
12627             c = (char*)POPPTR(ss,ix);
12628             TOPPTR(nss,ix) = pv_dup_inc(c);
12629             break;
12630         case SAVEt_STACK_POS:           /* Position on Perl stack */
12631             i = POPINT(ss,ix);
12632             TOPINT(nss,ix) = i;
12633             break;
12634         case SAVEt_DESTRUCTOR:
12635             ptr = POPPTR(ss,ix);
12636             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12637             dptr = POPDPTR(ss,ix);
12638             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12639                                         any_dup(FPTR2DPTR(void *, dptr),
12640                                                 proto_perl));
12641             break;
12642         case SAVEt_DESTRUCTOR_X:
12643             ptr = POPPTR(ss,ix);
12644             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12645             dxptr = POPDXPTR(ss,ix);
12646             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12647                                          any_dup(FPTR2DPTR(void *, dxptr),
12648                                                  proto_perl));
12649             break;
12650         case SAVEt_REGCONTEXT:
12651         case SAVEt_ALLOC:
12652             ix -= uv >> SAVE_TIGHT_SHIFT;
12653             break;
12654         case SAVEt_AELEM:               /* array element */
12655             sv = (const SV *)POPPTR(ss,ix);
12656             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12657             i = POPINT(ss,ix);
12658             TOPINT(nss,ix) = i;
12659             av = (const AV *)POPPTR(ss,ix);
12660             TOPPTR(nss,ix) = av_dup_inc(av, param);
12661             break;
12662         case SAVEt_OP:
12663             ptr = POPPTR(ss,ix);
12664             TOPPTR(nss,ix) = ptr;
12665             break;
12666         case SAVEt_HINTS:
12667             ptr = POPPTR(ss,ix);
12668             ptr = cophh_copy((COPHH*)ptr);
12669             TOPPTR(nss,ix) = ptr;
12670             i = POPINT(ss,ix);
12671             TOPINT(nss,ix) = i;
12672             if (i & HINT_LOCALIZE_HH) {
12673                 hv = (const HV *)POPPTR(ss,ix);
12674                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12675             }
12676             break;
12677         case SAVEt_PADSV_AND_MORTALIZE:
12678             longval = (long)POPLONG(ss,ix);
12679             TOPLONG(nss,ix) = longval;
12680             ptr = POPPTR(ss,ix);
12681             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12682             sv = (const SV *)POPPTR(ss,ix);
12683             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12684             break;
12685         case SAVEt_SET_SVFLAGS:
12686             i = POPINT(ss,ix);
12687             TOPINT(nss,ix) = i;
12688             i = POPINT(ss,ix);
12689             TOPINT(nss,ix) = i;
12690             sv = (const SV *)POPPTR(ss,ix);
12691             TOPPTR(nss,ix) = sv_dup(sv, param);
12692             break;
12693         case SAVEt_RE_STATE:
12694             {
12695                 const struct re_save_state *const old_state
12696                     = (struct re_save_state *)
12697                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12698                 struct re_save_state *const new_state
12699                     = (struct re_save_state *)
12700                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12701
12702                 Copy(old_state, new_state, 1, struct re_save_state);
12703                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12704
12705                 new_state->re_state_bostr
12706                     = pv_dup(old_state->re_state_bostr);
12707                 new_state->re_state_reginput
12708                     = pv_dup(old_state->re_state_reginput);
12709                 new_state->re_state_regeol
12710                     = pv_dup(old_state->re_state_regeol);
12711 #ifdef PERL_OLD_COPY_ON_WRITE
12712                 new_state->re_state_nrs
12713                     = sv_dup(old_state->re_state_nrs, param);
12714 #endif
12715                 new_state->re_state_reg_magic
12716                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12717                                proto_perl);
12718                 new_state->re_state_reg_oldcurpm
12719                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12720                               proto_perl);
12721                 new_state->re_state_reg_curpm
12722                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12723                                proto_perl);
12724                 new_state->re_state_reg_oldsaved
12725                     = pv_dup(old_state->re_state_reg_oldsaved);
12726                 new_state->re_state_reg_poscache
12727                     = pv_dup(old_state->re_state_reg_poscache);
12728                 new_state->re_state_reg_starttry
12729                     = pv_dup(old_state->re_state_reg_starttry);
12730                 break;
12731             }
12732         case SAVEt_COMPILE_WARNINGS:
12733             ptr = POPPTR(ss,ix);
12734             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12735             break;
12736         case SAVEt_PARSER:
12737             ptr = POPPTR(ss,ix);
12738             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12739             break;
12740         default:
12741             Perl_croak(aTHX_
12742                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12743         }
12744     }
12745
12746     return nss;
12747 }
12748
12749
12750 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12751  * flag to the result. This is done for each stash before cloning starts,
12752  * so we know which stashes want their objects cloned */
12753
12754 static void
12755 do_mark_cloneable_stash(pTHX_ SV *const sv)
12756 {
12757     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12758     if (hvname) {
12759         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12760         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12761         if (cloner && GvCV(cloner)) {
12762             dSP;
12763             UV status;
12764
12765             ENTER;
12766             SAVETMPS;
12767             PUSHMARK(SP);
12768             mXPUSHs(newSVhek(hvname));
12769             PUTBACK;
12770             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12771             SPAGAIN;
12772             status = POPu;
12773             PUTBACK;
12774             FREETMPS;
12775             LEAVE;
12776             if (status)
12777                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12778         }
12779     }
12780 }
12781
12782
12783
12784 /*
12785 =for apidoc perl_clone
12786
12787 Create and return a new interpreter by cloning the current one.
12788
12789 perl_clone takes these flags as parameters:
12790
12791 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12792 without it we only clone the data and zero the stacks,
12793 with it we copy the stacks and the new perl interpreter is
12794 ready to run at the exact same point as the previous one.
12795 The pseudo-fork code uses COPY_STACKS while the
12796 threads->create doesn't.
12797
12798 CLONEf_KEEP_PTR_TABLE -
12799 perl_clone keeps a ptr_table with the pointer of the old
12800 variable as a key and the new variable as a value,
12801 this allows it to check if something has been cloned and not
12802 clone it again but rather just use the value and increase the
12803 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
12804 the ptr_table using the function
12805 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12806 reason to keep it around is if you want to dup some of your own
12807 variable who are outside the graph perl scans, example of this
12808 code is in threads.xs create.
12809
12810 CLONEf_CLONE_HOST -
12811 This is a win32 thing, it is ignored on unix, it tells perls
12812 win32host code (which is c++) to clone itself, this is needed on
12813 win32 if you want to run two threads at the same time,
12814 if you just want to do some stuff in a separate perl interpreter
12815 and then throw it away and return to the original one,
12816 you don't need to do anything.
12817
12818 =cut
12819 */
12820
12821 /* XXX the above needs expanding by someone who actually understands it ! */
12822 EXTERN_C PerlInterpreter *
12823 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12824
12825 PerlInterpreter *
12826 perl_clone(PerlInterpreter *proto_perl, UV flags)
12827 {
12828    dVAR;
12829 #ifdef PERL_IMPLICIT_SYS
12830
12831     PERL_ARGS_ASSERT_PERL_CLONE;
12832
12833    /* perlhost.h so we need to call into it
12834    to clone the host, CPerlHost should have a c interface, sky */
12835
12836    if (flags & CLONEf_CLONE_HOST) {
12837        return perl_clone_host(proto_perl,flags);
12838    }
12839    return perl_clone_using(proto_perl, flags,
12840                             proto_perl->IMem,
12841                             proto_perl->IMemShared,
12842                             proto_perl->IMemParse,
12843                             proto_perl->IEnv,
12844                             proto_perl->IStdIO,
12845                             proto_perl->ILIO,
12846                             proto_perl->IDir,
12847                             proto_perl->ISock,
12848                             proto_perl->IProc);
12849 }
12850
12851 PerlInterpreter *
12852 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12853                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12854                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12855                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12856                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12857                  struct IPerlProc* ipP)
12858 {
12859     /* XXX many of the string copies here can be optimized if they're
12860      * constants; they need to be allocated as common memory and just
12861      * their pointers copied. */
12862
12863     IV i;
12864     CLONE_PARAMS clone_params;
12865     CLONE_PARAMS* const param = &clone_params;
12866
12867     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12868
12869     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12870 #else           /* !PERL_IMPLICIT_SYS */
12871     IV i;
12872     CLONE_PARAMS clone_params;
12873     CLONE_PARAMS* param = &clone_params;
12874     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12875
12876     PERL_ARGS_ASSERT_PERL_CLONE;
12877 #endif          /* PERL_IMPLICIT_SYS */
12878
12879     /* for each stash, determine whether its objects should be cloned */
12880     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12881     PERL_SET_THX(my_perl);
12882
12883 #ifdef DEBUGGING
12884     PoisonNew(my_perl, 1, PerlInterpreter);
12885     PL_op = NULL;
12886     PL_curcop = NULL;
12887     PL_defstash = NULL; /* may be used by perl malloc() */
12888     PL_markstack = 0;
12889     PL_scopestack = 0;
12890     PL_scopestack_name = 0;
12891     PL_savestack = 0;
12892     PL_savestack_ix = 0;
12893     PL_savestack_max = -1;
12894     PL_sig_pending = 0;
12895     PL_parser = NULL;
12896     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12897 #  ifdef DEBUG_LEAKING_SCALARS
12898     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12899 #  endif
12900 #else   /* !DEBUGGING */
12901     Zero(my_perl, 1, PerlInterpreter);
12902 #endif  /* DEBUGGING */
12903
12904 #ifdef PERL_IMPLICIT_SYS
12905     /* host pointers */
12906     PL_Mem              = ipM;
12907     PL_MemShared        = ipMS;
12908     PL_MemParse         = ipMP;
12909     PL_Env              = ipE;
12910     PL_StdIO            = ipStd;
12911     PL_LIO              = ipLIO;
12912     PL_Dir              = ipD;
12913     PL_Sock             = ipS;
12914     PL_Proc             = ipP;
12915 #endif          /* PERL_IMPLICIT_SYS */
12916
12917     param->flags = flags;
12918     /* Nothing in the core code uses this, but we make it available to
12919        extensions (using mg_dup).  */
12920     param->proto_perl = proto_perl;
12921     /* Likely nothing will use this, but it is initialised to be consistent
12922        with Perl_clone_params_new().  */
12923     param->new_perl = my_perl;
12924     param->unreferenced = NULL;
12925
12926     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12927
12928     PL_body_arenas = NULL;
12929     Zero(&PL_body_roots, 1, PL_body_roots);
12930     
12931     PL_sv_count         = 0;
12932     PL_sv_objcount      = 0;
12933     PL_sv_root          = NULL;
12934     PL_sv_arenaroot     = NULL;
12935
12936     PL_debug            = proto_perl->Idebug;
12937
12938     PL_hash_seed        = proto_perl->Ihash_seed;
12939     PL_rehash_seed      = proto_perl->Irehash_seed;
12940
12941     SvANY(&PL_sv_undef)         = NULL;
12942     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
12943     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
12944     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
12945     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12946                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12947
12948     SvANY(&PL_sv_yes)           = new_XPVNV();
12949     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
12950     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12951                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12952
12953     /* dbargs array probably holds garbage */
12954     PL_dbargs           = NULL;
12955
12956     PL_compiling = proto_perl->Icompiling;
12957
12958 #ifdef PERL_DEBUG_READONLY_OPS
12959     PL_slabs = NULL;
12960     PL_slab_count = 0;
12961 #endif
12962
12963     /* pseudo environmental stuff */
12964     PL_origargc         = proto_perl->Iorigargc;
12965     PL_origargv         = proto_perl->Iorigargv;
12966
12967     /* Set tainting stuff before PerlIO_debug can possibly get called */
12968     PL_tainting         = proto_perl->Itainting;
12969     PL_taint_warn       = proto_perl->Itaint_warn;
12970
12971     PL_minus_c          = proto_perl->Iminus_c;
12972
12973     PL_localpatches     = proto_perl->Ilocalpatches;
12974     PL_splitstr         = proto_perl->Isplitstr;
12975     PL_minus_n          = proto_perl->Iminus_n;
12976     PL_minus_p          = proto_perl->Iminus_p;
12977     PL_minus_l          = proto_perl->Iminus_l;
12978     PL_minus_a          = proto_perl->Iminus_a;
12979     PL_minus_E          = proto_perl->Iminus_E;
12980     PL_minus_F          = proto_perl->Iminus_F;
12981     PL_doswitches       = proto_perl->Idoswitches;
12982     PL_dowarn           = proto_perl->Idowarn;
12983     PL_sawampersand     = proto_perl->Isawampersand;
12984     PL_unsafe           = proto_perl->Iunsafe;
12985     PL_perldb           = proto_perl->Iperldb;
12986     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12987     PL_exit_flags       = proto_perl->Iexit_flags;
12988
12989     /* XXX time(&PL_basetime) when asked for? */
12990     PL_basetime         = proto_perl->Ibasetime;
12991
12992     PL_maxsysfd         = proto_perl->Imaxsysfd;
12993     PL_statusvalue      = proto_perl->Istatusvalue;
12994 #ifdef VMS
12995     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
12996 #else
12997     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12998 #endif
12999
13000     /* RE engine related */
13001     Zero(&PL_reg_state, 1, struct re_save_state);
13002     PL_regmatch_slab    = NULL;
13003
13004     PL_sub_generation   = proto_perl->Isub_generation;
13005
13006     /* funky return mechanisms */
13007     PL_forkprocess      = proto_perl->Iforkprocess;
13008
13009     /* internal state */
13010     PL_maxo             = proto_perl->Imaxo;
13011
13012     PL_main_start       = proto_perl->Imain_start;
13013     PL_eval_root        = proto_perl->Ieval_root;
13014     PL_eval_start       = proto_perl->Ieval_start;
13015
13016     PL_filemode         = proto_perl->Ifilemode;
13017     PL_lastfd           = proto_perl->Ilastfd;
13018     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13019     PL_Argv             = NULL;
13020     PL_Cmd              = NULL;
13021     PL_gensym           = proto_perl->Igensym;
13022
13023     PL_laststatval      = proto_perl->Ilaststatval;
13024     PL_laststype        = proto_perl->Ilaststype;
13025     PL_mess_sv          = NULL;
13026
13027     PL_profiledata      = NULL;
13028
13029     PL_generation       = proto_perl->Igeneration;
13030
13031     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13032     PL_in_clean_all     = proto_perl->Iin_clean_all;
13033
13034     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13035     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13036     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13037     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13038     PL_nomemok          = proto_perl->Inomemok;
13039     PL_an               = proto_perl->Ian;
13040     PL_evalseq          = proto_perl->Ievalseq;
13041     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13042     PL_origalen         = proto_perl->Iorigalen;
13043
13044     PL_sighandlerp      = proto_perl->Isighandlerp;
13045
13046     PL_runops           = proto_perl->Irunops;
13047
13048     PL_subline          = proto_perl->Isubline;
13049
13050 #ifdef FCRYPT
13051     PL_cryptseen        = proto_perl->Icryptseen;
13052 #endif
13053
13054     PL_hints            = proto_perl->Ihints;
13055
13056 #ifdef USE_LOCALE_COLLATE
13057     PL_collation_ix     = proto_perl->Icollation_ix;
13058     PL_collation_standard       = proto_perl->Icollation_standard;
13059     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13060     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13061 #endif /* USE_LOCALE_COLLATE */
13062
13063 #ifdef USE_LOCALE_NUMERIC
13064     PL_numeric_standard = proto_perl->Inumeric_standard;
13065     PL_numeric_local    = proto_perl->Inumeric_local;
13066 #endif /* !USE_LOCALE_NUMERIC */
13067
13068     /* Did the locale setup indicate UTF-8? */
13069     PL_utf8locale       = proto_perl->Iutf8locale;
13070     /* Unicode features (see perlrun/-C) */
13071     PL_unicode          = proto_perl->Iunicode;
13072
13073     /* Pre-5.8 signals control */
13074     PL_signals          = proto_perl->Isignals;
13075
13076     /* times() ticks per second */
13077     PL_clocktick        = proto_perl->Iclocktick;
13078
13079     /* Recursion stopper for PerlIO_find_layer */
13080     PL_in_load_module   = proto_perl->Iin_load_module;
13081
13082     /* sort() routine */
13083     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13084
13085     /* Not really needed/useful since the reenrant_retint is "volatile",
13086      * but do it for consistency's sake. */
13087     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13088
13089     /* Hooks to shared SVs and locks. */
13090     PL_sharehook        = proto_perl->Isharehook;
13091     PL_lockhook         = proto_perl->Ilockhook;
13092     PL_unlockhook       = proto_perl->Iunlockhook;
13093     PL_threadhook       = proto_perl->Ithreadhook;
13094     PL_destroyhook      = proto_perl->Idestroyhook;
13095     PL_signalhook       = proto_perl->Isignalhook;
13096
13097     PL_globhook         = proto_perl->Iglobhook;
13098
13099     /* swatch cache */
13100     PL_last_swash_hv    = NULL; /* reinits on demand */
13101     PL_last_swash_klen  = 0;
13102     PL_last_swash_key[0]= '\0';
13103     PL_last_swash_tmps  = (U8*)NULL;
13104     PL_last_swash_slen  = 0;
13105
13106     PL_glob_index       = proto_perl->Iglob_index;
13107     PL_srand_called     = proto_perl->Isrand_called;
13108
13109     if (flags & CLONEf_COPY_STACKS) {
13110         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13111         PL_tmps_ix              = proto_perl->Itmps_ix;
13112         PL_tmps_max             = proto_perl->Itmps_max;
13113         PL_tmps_floor           = proto_perl->Itmps_floor;
13114
13115         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13116          * NOTE: unlike the others! */
13117         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13118         PL_scopestack_max       = proto_perl->Iscopestack_max;
13119
13120         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13121          * NOTE: unlike the others! */
13122         PL_savestack_ix         = proto_perl->Isavestack_ix;
13123         PL_savestack_max        = proto_perl->Isavestack_max;
13124     }
13125
13126     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13127     PL_top_env          = &PL_start_env;
13128
13129     PL_op               = proto_perl->Iop;
13130
13131     PL_Sv               = NULL;
13132     PL_Xpv              = (XPV*)NULL;
13133     my_perl->Ina        = proto_perl->Ina;
13134
13135     PL_statbuf          = proto_perl->Istatbuf;
13136     PL_statcache        = proto_perl->Istatcache;
13137
13138 #ifdef HAS_TIMES
13139     PL_timesbuf         = proto_perl->Itimesbuf;
13140 #endif
13141
13142     PL_tainted          = proto_perl->Itainted;
13143     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13144
13145     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13146
13147     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13148     PL_restartop        = proto_perl->Irestartop;
13149     PL_in_eval          = proto_perl->Iin_eval;
13150     PL_delaymagic       = proto_perl->Idelaymagic;
13151     PL_phase            = proto_perl->Iphase;
13152     PL_localizing       = proto_perl->Ilocalizing;
13153
13154     PL_hv_fetch_ent_mh  = NULL;
13155     PL_modcount         = proto_perl->Imodcount;
13156     PL_lastgotoprobe    = NULL;
13157     PL_dumpindent       = proto_perl->Idumpindent;
13158
13159     PL_efloatbuf        = NULL;         /* reinits on demand */
13160     PL_efloatsize       = 0;                    /* reinits on demand */
13161
13162     /* regex stuff */
13163
13164     PL_regdummy         = proto_perl->Iregdummy;
13165     PL_colorset         = 0;            /* reinits PL_colors[] */
13166     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13167
13168     /* Pluggable optimizer */
13169     PL_peepp            = proto_perl->Ipeepp;
13170     PL_rpeepp           = proto_perl->Irpeepp;
13171     /* op_free() hook */
13172     PL_opfreehook       = proto_perl->Iopfreehook;
13173
13174 #ifdef USE_REENTRANT_API
13175     /* XXX: things like -Dm will segfault here in perlio, but doing
13176      *  PERL_SET_CONTEXT(proto_perl);
13177      * breaks too many other things
13178      */
13179     Perl_reentrant_init(aTHX);
13180 #endif
13181
13182     /* create SV map for pointer relocation */
13183     PL_ptr_table = ptr_table_new();
13184
13185     /* initialize these special pointers as early as possible */
13186     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13187
13188     SvANY(&PL_sv_no)            = new_XPVNV();
13189     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
13190     SvCUR_set(&PL_sv_no, 0);
13191     SvLEN_set(&PL_sv_no, 1);
13192     SvIV_set(&PL_sv_no, 0);
13193     SvNV_set(&PL_sv_no, 0);
13194     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13195
13196     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
13197     SvCUR_set(&PL_sv_yes, 1);
13198     SvLEN_set(&PL_sv_yes, 2);
13199     SvIV_set(&PL_sv_yes, 1);
13200     SvNV_set(&PL_sv_yes, 1);
13201     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13202
13203     /* create (a non-shared!) shared string table */
13204     PL_strtab           = newHV();
13205     HvSHAREKEYS_off(PL_strtab);
13206     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13207     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13208
13209     /* This PV will be free'd special way so must set it same way op.c does */
13210     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13211     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13212
13213     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13214     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13215     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13216     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13217
13218     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13219     /* This makes no difference to the implementation, as it always pushes
13220        and shifts pointers to other SVs without changing their reference
13221        count, with the array becoming empty before it is freed. However, it
13222        makes it conceptually clear what is going on, and will avoid some
13223        work inside av.c, filling slots between AvFILL() and AvMAX() with
13224        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13225     AvREAL_off(param->stashes);
13226
13227     if (!(flags & CLONEf_COPY_STACKS)) {
13228         param->unreferenced = newAV();
13229     }
13230
13231 #ifdef PERLIO_LAYERS
13232     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13233     PerlIO_clone(aTHX_ proto_perl, param);
13234 #endif
13235
13236     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13237     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13238     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13239     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13240     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13241     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13242
13243     /* switches */
13244     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13245     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13246     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13247     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13248
13249     /* magical thingies */
13250     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
13251
13252     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13253
13254     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13255     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13256     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13257
13258    
13259     /* Clone the regex array */
13260     /* ORANGE FIXME for plugins, probably in the SV dup code.
13261        newSViv(PTR2IV(CALLREGDUPE(
13262        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13263     */
13264     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13265     PL_regex_pad = AvARRAY(PL_regex_padav);
13266
13267     PL_stashpadmax      = proto_perl->Istashpadmax;
13268     PL_stashpadix       = proto_perl->Istashpadix ;
13269     Newx(PL_stashpad, PL_stashpadmax, HV *);
13270     {
13271         PADOFFSET o = 0;
13272         for (; o < PL_stashpadmax; ++o)
13273             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13274     }
13275
13276     /* shortcuts to various I/O objects */
13277     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13278     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13279     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13280     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13281     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13282     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13283     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13284
13285     /* shortcuts to regexp stuff */
13286     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13287
13288     /* shortcuts to misc objects */
13289     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13290
13291     /* shortcuts to debugging objects */
13292     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13293     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13294     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13295     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13296     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13297     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13298
13299     /* symbol tables */
13300     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13301     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13302     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13303     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13304     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13305
13306     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13307     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13308     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13309     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13310     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13311     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13312     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13313     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13314
13315     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13316
13317     /* subprocess state */
13318     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13319
13320     if (proto_perl->Iop_mask)
13321         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13322     else
13323         PL_op_mask      = NULL;
13324     /* PL_asserting        = proto_perl->Iasserting; */
13325
13326     /* current interpreter roots */
13327     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13328     OP_REFCNT_LOCK;
13329     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13330     OP_REFCNT_UNLOCK;
13331
13332     /* runtime control stuff */
13333     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13334
13335     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13336
13337     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13338
13339     /* interpreter atexit processing */
13340     PL_exitlistlen      = proto_perl->Iexitlistlen;
13341     if (PL_exitlistlen) {
13342         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13343         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13344     }
13345     else
13346         PL_exitlist     = (PerlExitListEntry*)NULL;
13347
13348     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13349     if (PL_my_cxt_size) {
13350         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13351         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13352 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13353         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13354         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13355 #endif
13356     }
13357     else {
13358         PL_my_cxt_list  = (void**)NULL;
13359 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13360         PL_my_cxt_keys  = (const char**)NULL;
13361 #endif
13362     }
13363     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13364     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13365     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13366     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13367
13368     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13369
13370     PAD_CLONE_VARS(proto_perl, param);
13371
13372 #ifdef HAVE_INTERP_INTERN
13373     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13374 #endif
13375
13376     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13377
13378 #ifdef PERL_USES_PL_PIDSTATUS
13379     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13380 #endif
13381     PL_osname           = SAVEPV(proto_perl->Iosname);
13382     PL_parser           = parser_dup(proto_perl->Iparser, param);
13383
13384     /* XXX this only works if the saved cop has already been cloned */
13385     if (proto_perl->Iparser) {
13386         PL_parser->saved_curcop = (COP*)any_dup(
13387                                     proto_perl->Iparser->saved_curcop,
13388                                     proto_perl);
13389     }
13390
13391     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13392
13393 #ifdef USE_LOCALE_COLLATE
13394     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13395 #endif /* USE_LOCALE_COLLATE */
13396
13397 #ifdef USE_LOCALE_NUMERIC
13398     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13399     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13400 #endif /* !USE_LOCALE_NUMERIC */
13401
13402     /* Unicode inversion lists */
13403     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13404     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13405
13406     PL_PerlSpace        = sv_dup_inc(proto_perl->IPerlSpace, param);
13407     PL_XPerlSpace       = sv_dup_inc(proto_perl->IXPerlSpace, param);
13408
13409     PL_L1PosixAlnum     = sv_dup_inc(proto_perl->IL1PosixAlnum, param);
13410     PL_PosixAlnum       = sv_dup_inc(proto_perl->IPosixAlnum, param);
13411
13412     PL_L1PosixAlpha     = sv_dup_inc(proto_perl->IL1PosixAlpha, param);
13413     PL_PosixAlpha       = sv_dup_inc(proto_perl->IPosixAlpha, param);
13414
13415     PL_PosixBlank       = sv_dup_inc(proto_perl->IPosixBlank, param);
13416     PL_XPosixBlank      = sv_dup_inc(proto_perl->IXPosixBlank, param);
13417
13418     PL_L1Cased          = sv_dup_inc(proto_perl->IL1Cased, param);
13419
13420     PL_PosixCntrl       = sv_dup_inc(proto_perl->IPosixCntrl, param);
13421     PL_XPosixCntrl      = sv_dup_inc(proto_perl->IXPosixCntrl, param);
13422
13423     PL_PosixDigit       = sv_dup_inc(proto_perl->IPosixDigit, param);
13424
13425     PL_L1PosixGraph     = sv_dup_inc(proto_perl->IL1PosixGraph, param);
13426     PL_PosixGraph       = sv_dup_inc(proto_perl->IPosixGraph, param);
13427
13428     PL_L1PosixLower     = sv_dup_inc(proto_perl->IL1PosixLower, param);
13429     PL_PosixLower       = sv_dup_inc(proto_perl->IPosixLower, param);
13430
13431     PL_L1PosixPrint     = sv_dup_inc(proto_perl->IL1PosixPrint, param);
13432     PL_PosixPrint       = sv_dup_inc(proto_perl->IPosixPrint, param);
13433
13434     PL_L1PosixPunct     = sv_dup_inc(proto_perl->IL1PosixPunct, param);
13435     PL_PosixPunct       = sv_dup_inc(proto_perl->IPosixPunct, param);
13436
13437     PL_PosixSpace       = sv_dup_inc(proto_perl->IPosixSpace, param);
13438     PL_XPosixSpace      = sv_dup_inc(proto_perl->IXPosixSpace, param);
13439
13440     PL_L1PosixUpper     = sv_dup_inc(proto_perl->IL1PosixUpper, param);
13441     PL_PosixUpper       = sv_dup_inc(proto_perl->IPosixUpper, param);
13442
13443     PL_L1PosixWord      = sv_dup_inc(proto_perl->IL1PosixWord, param);
13444     PL_PosixWord        = sv_dup_inc(proto_perl->IPosixWord, param);
13445
13446     PL_PosixXDigit      = sv_dup_inc(proto_perl->IPosixXDigit, param);
13447     PL_XPosixXDigit     = sv_dup_inc(proto_perl->IXPosixXDigit, param);
13448
13449     PL_VertSpace        = sv_dup_inc(proto_perl->IVertSpace, param);
13450
13451     /* utf8 character class swashes */
13452     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
13453     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13454     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
13455     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
13456     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
13457     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
13458     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
13459     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
13460     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
13461     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13462     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13463     PL_utf8_X_begin     = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
13464     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13465     PL_utf8_X_prepend   = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
13466     PL_utf8_X_non_hangul        = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
13467     PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
13468     PL_utf8_X_LV        = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
13469     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13470     PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
13471     PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
13472     PL_utf8_X_LV_LVT_V  = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
13473     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13474     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13475     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13476     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13477     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13478     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13479     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13480     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13481     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13482     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13483     PL_utf8_quotemeta   = sv_dup_inc(proto_perl->Iutf8_quotemeta, param);
13484     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13485     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13486     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13487
13488
13489     if (proto_perl->Ipsig_pend) {
13490         Newxz(PL_psig_pend, SIG_SIZE, int);
13491     }
13492     else {
13493         PL_psig_pend    = (int*)NULL;
13494     }
13495
13496     if (proto_perl->Ipsig_name) {
13497         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13498         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13499                             param);
13500         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13501     }
13502     else {
13503         PL_psig_ptr     = (SV**)NULL;
13504         PL_psig_name    = (SV**)NULL;
13505     }
13506
13507     if (flags & CLONEf_COPY_STACKS) {
13508         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13509         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13510                             PL_tmps_ix+1, param);
13511
13512         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13513         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13514         Newxz(PL_markstack, i, I32);
13515         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13516                                                   - proto_perl->Imarkstack);
13517         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13518                                                   - proto_perl->Imarkstack);
13519         Copy(proto_perl->Imarkstack, PL_markstack,
13520              PL_markstack_ptr - PL_markstack + 1, I32);
13521
13522         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13523          * NOTE: unlike the others! */
13524         Newxz(PL_scopestack, PL_scopestack_max, I32);
13525         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13526
13527 #ifdef DEBUGGING
13528         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13529         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13530 #endif
13531         /* NOTE: si_dup() looks at PL_markstack */
13532         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13533
13534         /* PL_curstack          = PL_curstackinfo->si_stack; */
13535         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13536         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13537
13538         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13539         PL_stack_base           = AvARRAY(PL_curstack);
13540         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13541                                                    - proto_perl->Istack_base);
13542         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13543
13544         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13545         PL_savestack            = ss_dup(proto_perl, param);
13546     }
13547     else {
13548         init_stacks();
13549         ENTER;                  /* perl_destruct() wants to LEAVE; */
13550     }
13551
13552     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13553     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13554
13555     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13556     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13557     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13558     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13559     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13560     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13561
13562     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13563
13564     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13565     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13566     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13567     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13568
13569     PL_stashcache       = newHV();
13570
13571     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13572                                             proto_perl->Iwatchaddr);
13573     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13574     if (PL_debug && PL_watchaddr) {
13575         PerlIO_printf(Perl_debug_log,
13576           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13577           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13578           PTR2UV(PL_watchok));
13579     }
13580
13581     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13582     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13583     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13584
13585     /* Call the ->CLONE method, if it exists, for each of the stashes
13586        identified by sv_dup() above.
13587     */
13588     while(av_len(param->stashes) != -1) {
13589         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13590         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13591         if (cloner && GvCV(cloner)) {
13592             dSP;
13593             ENTER;
13594             SAVETMPS;
13595             PUSHMARK(SP);
13596             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13597             PUTBACK;
13598             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13599             FREETMPS;
13600             LEAVE;
13601         }
13602     }
13603
13604     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13605         ptr_table_free(PL_ptr_table);
13606         PL_ptr_table = NULL;
13607     }
13608
13609     if (!(flags & CLONEf_COPY_STACKS)) {
13610         unreferenced_to_tmp_stack(param->unreferenced);
13611     }
13612
13613     SvREFCNT_dec(param->stashes);
13614
13615     /* orphaned? eg threads->new inside BEGIN or use */
13616     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13617         SvREFCNT_inc_simple_void(PL_compcv);
13618         SAVEFREESV(PL_compcv);
13619     }
13620
13621     return my_perl;
13622 }
13623
13624 static void
13625 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13626 {
13627     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13628     
13629     if (AvFILLp(unreferenced) > -1) {
13630         SV **svp = AvARRAY(unreferenced);
13631         SV **const last = svp + AvFILLp(unreferenced);
13632         SSize_t count = 0;
13633
13634         do {
13635             if (SvREFCNT(*svp) == 1)
13636                 ++count;
13637         } while (++svp <= last);
13638
13639         EXTEND_MORTAL(count);
13640         svp = AvARRAY(unreferenced);
13641
13642         do {
13643             if (SvREFCNT(*svp) == 1) {
13644                 /* Our reference is the only one to this SV. This means that
13645                    in this thread, the scalar effectively has a 0 reference.
13646                    That doesn't work (cleanup never happens), so donate our
13647                    reference to it onto the save stack. */
13648                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13649             } else {
13650                 /* As an optimisation, because we are already walking the
13651                    entire array, instead of above doing either
13652                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13653                    release our reference to the scalar, so that at the end of
13654                    the array owns zero references to the scalars it happens to
13655                    point to. We are effectively converting the array from
13656                    AvREAL() on to AvREAL() off. This saves the av_clear()
13657                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13658                    walking the array a second time.  */
13659                 SvREFCNT_dec(*svp);
13660             }
13661
13662         } while (++svp <= last);
13663         AvREAL_off(unreferenced);
13664     }
13665     SvREFCNT_dec(unreferenced);
13666 }
13667
13668 void
13669 Perl_clone_params_del(CLONE_PARAMS *param)
13670 {
13671     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13672        happy: */
13673     PerlInterpreter *const to = param->new_perl;
13674     dTHXa(to);
13675     PerlInterpreter *const was = PERL_GET_THX;
13676
13677     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13678
13679     if (was != to) {
13680         PERL_SET_THX(to);
13681     }
13682
13683     SvREFCNT_dec(param->stashes);
13684     if (param->unreferenced)
13685         unreferenced_to_tmp_stack(param->unreferenced);
13686
13687     Safefree(param);
13688
13689     if (was != to) {
13690         PERL_SET_THX(was);
13691     }
13692 }
13693
13694 CLONE_PARAMS *
13695 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13696 {
13697     dVAR;
13698     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13699        does a dTHX; to get the context from thread local storage.
13700        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13701        a version that passes in my_perl.  */
13702     PerlInterpreter *const was = PERL_GET_THX;
13703     CLONE_PARAMS *param;
13704
13705     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13706
13707     if (was != to) {
13708         PERL_SET_THX(to);
13709     }
13710
13711     /* Given that we've set the context, we can do this unshared.  */
13712     Newx(param, 1, CLONE_PARAMS);
13713
13714     param->flags = 0;
13715     param->proto_perl = from;
13716     param->new_perl = to;
13717     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13718     AvREAL_off(param->stashes);
13719     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13720
13721     if (was != to) {
13722         PERL_SET_THX(was);
13723     }
13724     return param;
13725 }
13726
13727 #endif /* USE_ITHREADS */
13728
13729 /*
13730 =head1 Unicode Support
13731
13732 =for apidoc sv_recode_to_utf8
13733
13734 The encoding is assumed to be an Encode object, on entry the PV
13735 of the sv is assumed to be octets in that encoding, and the sv
13736 will be converted into Unicode (and UTF-8).
13737
13738 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13739 is not a reference, nothing is done to the sv.  If the encoding is not
13740 an C<Encode::XS> Encoding object, bad things will happen.
13741 (See F<lib/encoding.pm> and L<Encode>.)
13742
13743 The PV of the sv is returned.
13744
13745 =cut */
13746
13747 char *
13748 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13749 {
13750     dVAR;
13751
13752     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13753
13754     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13755         SV *uni;
13756         STRLEN len;
13757         const char *s;
13758         dSP;
13759         ENTER;
13760         SAVETMPS;
13761         save_re_context();
13762         PUSHMARK(sp);
13763         EXTEND(SP, 3);
13764         XPUSHs(encoding);
13765         XPUSHs(sv);
13766 /*
13767   NI-S 2002/07/09
13768   Passing sv_yes is wrong - it needs to be or'ed set of constants
13769   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13770   remove converted chars from source.
13771
13772   Both will default the value - let them.
13773
13774         XPUSHs(&PL_sv_yes);
13775 */
13776         PUTBACK;
13777         call_method("decode", G_SCALAR);
13778         SPAGAIN;
13779         uni = POPs;
13780         PUTBACK;
13781         s = SvPV_const(uni, len);
13782         if (s != SvPVX_const(sv)) {
13783             SvGROW(sv, len + 1);
13784             Move(s, SvPVX(sv), len + 1, char);
13785             SvCUR_set(sv, len);
13786         }
13787         FREETMPS;
13788         LEAVE;
13789         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13790             /* clear pos and any utf8 cache */
13791             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13792             if (mg)
13793                 mg->mg_len = -1;
13794             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13795                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13796         }
13797         SvUTF8_on(sv);
13798         return SvPVX(sv);
13799     }
13800     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13801 }
13802
13803 /*
13804 =for apidoc sv_cat_decode
13805
13806 The encoding is assumed to be an Encode object, the PV of the ssv is
13807 assumed to be octets in that encoding and decoding the input starts
13808 from the position which (PV + *offset) pointed to.  The dsv will be
13809 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13810 when the string tstr appears in decoding output or the input ends on
13811 the PV of the ssv.  The value which the offset points will be modified
13812 to the last input position on the ssv.
13813
13814 Returns TRUE if the terminator was found, else returns FALSE.
13815
13816 =cut */
13817
13818 bool
13819 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13820                    SV *ssv, int *offset, char *tstr, int tlen)
13821 {
13822     dVAR;
13823     bool ret = FALSE;
13824
13825     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13826
13827     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13828         SV *offsv;
13829         dSP;
13830         ENTER;
13831         SAVETMPS;
13832         save_re_context();
13833         PUSHMARK(sp);
13834         EXTEND(SP, 6);
13835         XPUSHs(encoding);
13836         XPUSHs(dsv);
13837         XPUSHs(ssv);
13838         offsv = newSViv(*offset);
13839         mXPUSHs(offsv);
13840         mXPUSHp(tstr, tlen);
13841         PUTBACK;
13842         call_method("cat_decode", G_SCALAR);
13843         SPAGAIN;
13844         ret = SvTRUE(TOPs);
13845         *offset = SvIV(offsv);
13846         PUTBACK;
13847         FREETMPS;
13848         LEAVE;
13849     }
13850     else
13851         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13852     return ret;
13853
13854 }
13855
13856 /* ---------------------------------------------------------------------
13857  *
13858  * support functions for report_uninit()
13859  */
13860
13861 /* the maxiumum size of array or hash where we will scan looking
13862  * for the undefined element that triggered the warning */
13863
13864 #define FUV_MAX_SEARCH_SIZE 1000
13865
13866 /* Look for an entry in the hash whose value has the same SV as val;
13867  * If so, return a mortal copy of the key. */
13868
13869 STATIC SV*
13870 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13871 {
13872     dVAR;
13873     register HE **array;
13874     I32 i;
13875
13876     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13877
13878     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13879                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13880         return NULL;
13881
13882     array = HvARRAY(hv);
13883
13884     for (i=HvMAX(hv); i>0; i--) {
13885         register HE *entry;
13886         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13887             if (HeVAL(entry) != val)
13888                 continue;
13889             if (    HeVAL(entry) == &PL_sv_undef ||
13890                     HeVAL(entry) == &PL_sv_placeholder)
13891                 continue;
13892             if (!HeKEY(entry))
13893                 return NULL;
13894             if (HeKLEN(entry) == HEf_SVKEY)
13895                 return sv_mortalcopy(HeKEY_sv(entry));
13896             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13897         }
13898     }
13899     return NULL;
13900 }
13901
13902 /* Look for an entry in the array whose value has the same SV as val;
13903  * If so, return the index, otherwise return -1. */
13904
13905 STATIC I32
13906 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13907 {
13908     dVAR;
13909
13910     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13911
13912     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13913                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13914         return -1;
13915
13916     if (val != &PL_sv_undef) {
13917         SV ** const svp = AvARRAY(av);
13918         I32 i;
13919
13920         for (i=AvFILLp(av); i>=0; i--)
13921             if (svp[i] == val)
13922                 return i;
13923     }
13924     return -1;
13925 }
13926
13927 /* S_varname(): return the name of a variable, optionally with a subscript.
13928  * If gv is non-zero, use the name of that global, along with gvtype (one
13929  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13930  * targ.  Depending on the value of the subscript_type flag, return:
13931  */
13932
13933 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13934 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13935 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13936 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13937
13938 SV*
13939 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13940         const SV *const keyname, I32 aindex, int subscript_type)
13941 {
13942
13943     SV * const name = sv_newmortal();
13944     if (gv && isGV(gv)) {
13945         char buffer[2];
13946         buffer[0] = gvtype;
13947         buffer[1] = 0;
13948
13949         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13950
13951         gv_fullname4(name, gv, buffer, 0);
13952
13953         if ((unsigned int)SvPVX(name)[1] <= 26) {
13954             buffer[0] = '^';
13955             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13956
13957             /* Swap the 1 unprintable control character for the 2 byte pretty
13958                version - ie substr($name, 1, 1) = $buffer; */
13959             sv_insert(name, 1, 1, buffer, 2);
13960         }
13961     }
13962     else {
13963         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
13964         SV *sv;
13965         AV *av;
13966
13967         assert(!cv || SvTYPE(cv) == SVt_PVCV);
13968
13969         if (!cv || !CvPADLIST(cv))
13970             return NULL;
13971         av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
13972         sv = *av_fetch(av, targ, FALSE);
13973         sv_setsv(name, sv);
13974     }
13975
13976     if (subscript_type == FUV_SUBSCRIPT_HASH) {
13977         SV * const sv = newSV(0);
13978         *SvPVX(name) = '$';
13979         Perl_sv_catpvf(aTHX_ name, "{%s}",
13980             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
13981                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
13982         SvREFCNT_dec(sv);
13983     }
13984     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13985         *SvPVX(name) = '$';
13986         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13987     }
13988     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13989         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13990         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
13991     }
13992
13993     return name;
13994 }
13995
13996
13997 /*
13998 =for apidoc find_uninit_var
13999
14000 Find the name of the undefined variable (if any) that caused the operator
14001 to issue a "Use of uninitialized value" warning.
14002 If match is true, only return a name if its value matches uninit_sv.
14003 So roughly speaking, if a unary operator (such as OP_COS) generates a
14004 warning, then following the direct child of the op may yield an
14005 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14006 other hand, with OP_ADD there are two branches to follow, so we only print
14007 the variable name if we get an exact match.
14008
14009 The name is returned as a mortal SV.
14010
14011 Assumes that PL_op is the op that originally triggered the error, and that
14012 PL_comppad/PL_curpad points to the currently executing pad.
14013
14014 =cut
14015 */
14016
14017 STATIC SV *
14018 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14019                   bool match)
14020 {
14021     dVAR;
14022     SV *sv;
14023     const GV *gv;
14024     const OP *o, *o2, *kid;
14025
14026     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14027                             uninit_sv == &PL_sv_placeholder)))
14028         return NULL;
14029
14030     switch (obase->op_type) {
14031
14032     case OP_RV2AV:
14033     case OP_RV2HV:
14034     case OP_PADAV:
14035     case OP_PADHV:
14036       {
14037         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
14038         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
14039         I32 index = 0;
14040         SV *keysv = NULL;
14041         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14042
14043         if (pad) { /* @lex, %lex */
14044             sv = PAD_SVl(obase->op_targ);
14045             gv = NULL;
14046         }
14047         else {
14048             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14049             /* @global, %global */
14050                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14051                 if (!gv)
14052                     break;
14053                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14054             }
14055             else if (obase == PL_op) /* @{expr}, %{expr} */
14056                 return find_uninit_var(cUNOPx(obase)->op_first,
14057                                                     uninit_sv, match);
14058             else /* @{expr}, %{expr} as a sub-expression */
14059                 return NULL;
14060         }
14061
14062         /* attempt to find a match within the aggregate */
14063         if (hash) {
14064             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14065             if (keysv)
14066                 subscript_type = FUV_SUBSCRIPT_HASH;
14067         }
14068         else {
14069             index = find_array_subscript((const AV *)sv, uninit_sv);
14070             if (index >= 0)
14071                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14072         }
14073
14074         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14075             break;
14076
14077         return varname(gv, hash ? '%' : '@', obase->op_targ,
14078                                     keysv, index, subscript_type);
14079       }
14080
14081     case OP_RV2SV:
14082         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14083             /* $global */
14084             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14085             if (!gv || !GvSTASH(gv))
14086                 break;
14087             if (match && (GvSV(gv) != uninit_sv))
14088                 break;
14089             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14090         }
14091         /* ${expr} */
14092         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14093
14094     case OP_PADSV:
14095         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14096             break;
14097         return varname(NULL, '$', obase->op_targ,
14098                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14099
14100     case OP_GVSV:
14101         gv = cGVOPx_gv(obase);
14102         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14103             break;
14104         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14105
14106     case OP_AELEMFAST_LEX:
14107         if (match) {
14108             SV **svp;
14109             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14110             if (!av || SvRMAGICAL(av))
14111                 break;
14112             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14113             if (!svp || *svp != uninit_sv)
14114                 break;
14115         }
14116         return varname(NULL, '$', obase->op_targ,
14117                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14118     case OP_AELEMFAST:
14119         {
14120             gv = cGVOPx_gv(obase);
14121             if (!gv)
14122                 break;
14123             if (match) {
14124                 SV **svp;
14125                 AV *const av = GvAV(gv);
14126                 if (!av || SvRMAGICAL(av))
14127                     break;
14128                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14129                 if (!svp || *svp != uninit_sv)
14130                     break;
14131             }
14132             return varname(gv, '$', 0,
14133                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14134         }
14135         break;
14136
14137     case OP_EXISTS:
14138         o = cUNOPx(obase)->op_first;
14139         if (!o || o->op_type != OP_NULL ||
14140                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14141             break;
14142         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14143
14144     case OP_AELEM:
14145     case OP_HELEM:
14146     {
14147         bool negate = FALSE;
14148
14149         if (PL_op == obase)
14150             /* $a[uninit_expr] or $h{uninit_expr} */
14151             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14152
14153         gv = NULL;
14154         o = cBINOPx(obase)->op_first;
14155         kid = cBINOPx(obase)->op_last;
14156
14157         /* get the av or hv, and optionally the gv */
14158         sv = NULL;
14159         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14160             sv = PAD_SV(o->op_targ);
14161         }
14162         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14163                 && cUNOPo->op_first->op_type == OP_GV)
14164         {
14165             gv = cGVOPx_gv(cUNOPo->op_first);
14166             if (!gv)
14167                 break;
14168             sv = o->op_type
14169                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14170         }
14171         if (!sv)
14172             break;
14173
14174         if (kid && kid->op_type == OP_NEGATE) {
14175             negate = TRUE;
14176             kid = cUNOPx(kid)->op_first;
14177         }
14178
14179         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14180             /* index is constant */
14181             SV* kidsv;
14182             if (negate) {
14183                 kidsv = sv_2mortal(newSVpvs("-"));
14184                 sv_catsv(kidsv, cSVOPx_sv(kid));
14185             }
14186             else
14187                 kidsv = cSVOPx_sv(kid);
14188             if (match) {
14189                 if (SvMAGICAL(sv))
14190                     break;
14191                 if (obase->op_type == OP_HELEM) {
14192                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14193                     if (!he || HeVAL(he) != uninit_sv)
14194                         break;
14195                 }
14196                 else {
14197                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14198                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14199                         FALSE);
14200                     if (!svp || *svp != uninit_sv)
14201                         break;
14202                 }
14203             }
14204             if (obase->op_type == OP_HELEM)
14205                 return varname(gv, '%', o->op_targ,
14206                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14207             else
14208                 return varname(gv, '@', o->op_targ, NULL,
14209                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14210                     FUV_SUBSCRIPT_ARRAY);
14211         }
14212         else  {
14213             /* index is an expression;
14214              * attempt to find a match within the aggregate */
14215             if (obase->op_type == OP_HELEM) {
14216                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14217                 if (keysv)
14218                     return varname(gv, '%', o->op_targ,
14219                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14220             }
14221             else {
14222                 const I32 index
14223                     = find_array_subscript((const AV *)sv, uninit_sv);
14224                 if (index >= 0)
14225                     return varname(gv, '@', o->op_targ,
14226                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14227             }
14228             if (match)
14229                 break;
14230             return varname(gv,
14231                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14232                 ? '@' : '%',
14233                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14234         }
14235         break;
14236     }
14237
14238     case OP_AASSIGN:
14239         /* only examine RHS */
14240         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14241
14242     case OP_OPEN:
14243         o = cUNOPx(obase)->op_first;
14244         if (o->op_type == OP_PUSHMARK)
14245             o = o->op_sibling;
14246
14247         if (!o->op_sibling) {
14248             /* one-arg version of open is highly magical */
14249
14250             if (o->op_type == OP_GV) { /* open FOO; */
14251                 gv = cGVOPx_gv(o);
14252                 if (match && GvSV(gv) != uninit_sv)
14253                     break;
14254                 return varname(gv, '$', 0,
14255                             NULL, 0, FUV_SUBSCRIPT_NONE);
14256             }
14257             /* other possibilities not handled are:
14258              * open $x; or open my $x;  should return '${*$x}'
14259              * open expr;               should return '$'.expr ideally
14260              */
14261              break;
14262         }
14263         goto do_op;
14264
14265     /* ops where $_ may be an implicit arg */
14266     case OP_TRANS:
14267     case OP_TRANSR:
14268     case OP_SUBST:
14269     case OP_MATCH:
14270         if ( !(obase->op_flags & OPf_STACKED)) {
14271             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14272                                  ? PAD_SVl(obase->op_targ)
14273                                  : DEFSV))
14274             {
14275                 sv = sv_newmortal();
14276                 sv_setpvs(sv, "$_");
14277                 return sv;
14278             }
14279         }
14280         goto do_op;
14281
14282     case OP_PRTF:
14283     case OP_PRINT:
14284     case OP_SAY:
14285         match = 1; /* print etc can return undef on defined args */
14286         /* skip filehandle as it can't produce 'undef' warning  */
14287         o = cUNOPx(obase)->op_first;
14288         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
14289             o = o->op_sibling->op_sibling;
14290         goto do_op2;
14291
14292
14293     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14294     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14295
14296         /* the following ops are capable of returning PL_sv_undef even for
14297          * defined arg(s) */
14298
14299     case OP_BACKTICK:
14300     case OP_PIPE_OP:
14301     case OP_FILENO:
14302     case OP_BINMODE:
14303     case OP_TIED:
14304     case OP_GETC:
14305     case OP_SYSREAD:
14306     case OP_SEND:
14307     case OP_IOCTL:
14308     case OP_SOCKET:
14309     case OP_SOCKPAIR:
14310     case OP_BIND:
14311     case OP_CONNECT:
14312     case OP_LISTEN:
14313     case OP_ACCEPT:
14314     case OP_SHUTDOWN:
14315     case OP_SSOCKOPT:
14316     case OP_GETPEERNAME:
14317     case OP_FTRREAD:
14318     case OP_FTRWRITE:
14319     case OP_FTREXEC:
14320     case OP_FTROWNED:
14321     case OP_FTEREAD:
14322     case OP_FTEWRITE:
14323     case OP_FTEEXEC:
14324     case OP_FTEOWNED:
14325     case OP_FTIS:
14326     case OP_FTZERO:
14327     case OP_FTSIZE:
14328     case OP_FTFILE:
14329     case OP_FTDIR:
14330     case OP_FTLINK:
14331     case OP_FTPIPE:
14332     case OP_FTSOCK:
14333     case OP_FTBLK:
14334     case OP_FTCHR:
14335     case OP_FTTTY:
14336     case OP_FTSUID:
14337     case OP_FTSGID:
14338     case OP_FTSVTX:
14339     case OP_FTTEXT:
14340     case OP_FTBINARY:
14341     case OP_FTMTIME:
14342     case OP_FTATIME:
14343     case OP_FTCTIME:
14344     case OP_READLINK:
14345     case OP_OPEN_DIR:
14346     case OP_READDIR:
14347     case OP_TELLDIR:
14348     case OP_SEEKDIR:
14349     case OP_REWINDDIR:
14350     case OP_CLOSEDIR:
14351     case OP_GMTIME:
14352     case OP_ALARM:
14353     case OP_SEMGET:
14354     case OP_GETLOGIN:
14355     case OP_UNDEF:
14356     case OP_SUBSTR:
14357     case OP_AEACH:
14358     case OP_EACH:
14359     case OP_SORT:
14360     case OP_CALLER:
14361     case OP_DOFILE:
14362     case OP_PROTOTYPE:
14363     case OP_NCMP:
14364     case OP_SMARTMATCH:
14365     case OP_UNPACK:
14366     case OP_SYSOPEN:
14367     case OP_SYSSEEK:
14368         match = 1;
14369         goto do_op;
14370
14371     case OP_ENTERSUB:
14372     case OP_GOTO:
14373         /* XXX tmp hack: these two may call an XS sub, and currently
14374           XS subs don't have a SUB entry on the context stack, so CV and
14375           pad determination goes wrong, and BAD things happen. So, just
14376           don't try to determine the value under those circumstances.
14377           Need a better fix at dome point. DAPM 11/2007 */
14378         break;
14379
14380     case OP_FLIP:
14381     case OP_FLOP:
14382     {
14383         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14384         if (gv && GvSV(gv) == uninit_sv)
14385             return newSVpvs_flags("$.", SVs_TEMP);
14386         goto do_op;
14387     }
14388
14389     case OP_POS:
14390         /* def-ness of rval pos() is independent of the def-ness of its arg */
14391         if ( !(obase->op_flags & OPf_MOD))
14392             break;
14393
14394     case OP_SCHOMP:
14395     case OP_CHOMP:
14396         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14397             return newSVpvs_flags("${$/}", SVs_TEMP);
14398         /*FALLTHROUGH*/
14399
14400     default:
14401     do_op:
14402         if (!(obase->op_flags & OPf_KIDS))
14403             break;
14404         o = cUNOPx(obase)->op_first;
14405         
14406     do_op2:
14407         if (!o)
14408             break;
14409
14410         /* This loop checks all the kid ops, skipping any that cannot pos-
14411          * sibly be responsible for the uninitialized value; i.e., defined
14412          * constants and ops that return nothing.  If there is only one op
14413          * left that is not skipped, then we *know* it is responsible for
14414          * the uninitialized value.  If there is more than one op left, we
14415          * have to look for an exact match in the while() loop below.
14416          */
14417         o2 = NULL;
14418         for (kid=o; kid; kid = kid->op_sibling) {
14419             if (kid) {
14420                 const OPCODE type = kid->op_type;
14421                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14422                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14423                   || (type == OP_PUSHMARK)
14424                 )
14425                 continue;
14426             }
14427             if (o2) { /* more than one found */
14428                 o2 = NULL;
14429                 break;
14430             }
14431             o2 = kid;
14432         }
14433         if (o2)
14434             return find_uninit_var(o2, uninit_sv, match);
14435
14436         /* scan all args */
14437         while (o) {
14438             sv = find_uninit_var(o, uninit_sv, 1);
14439             if (sv)
14440                 return sv;
14441             o = o->op_sibling;
14442         }
14443         break;
14444     }
14445     return NULL;
14446 }
14447
14448
14449 /*
14450 =for apidoc report_uninit
14451
14452 Print appropriate "Use of uninitialized variable" warning.
14453
14454 =cut
14455 */
14456
14457 void
14458 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14459 {
14460     dVAR;
14461     if (PL_op) {
14462         SV* varname = NULL;
14463         if (uninit_sv && PL_curpad) {
14464             varname = find_uninit_var(PL_op, uninit_sv,0);
14465             if (varname)
14466                 sv_insert(varname, 0, 0, " ", 1);
14467         }
14468         /* diag_listed_as: Use of uninitialized value%s */
14469         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14470                 SVfARG(varname ? varname : &PL_sv_no),
14471                 " in ", OP_DESC(PL_op));
14472     }
14473     else
14474         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14475                     "", "", "");
14476 }
14477
14478 /*
14479  * Local variables:
14480  * c-indentation-style: bsd
14481  * c-basic-offset: 4
14482  * indent-tabs-mode: nil
14483  * End:
14484  *
14485  * ex: set ts=8 sts=4 sw=4 et:
14486  */