This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
revert a trailing whitespace removal
[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                     I32 seen_evals = 0;
2843
2844                     assert(re);
2845                         
2846                     /* If the regex is UTF-8 we want the containing scalar to
2847                        have an UTF-8 flag too */
2848                     if (RX_UTF8(re))
2849                         SvUTF8_on(sv);
2850                     else
2851                         SvUTF8_off(sv); 
2852
2853                     if ((seen_evals = RX_SEEN_EVALS(re)))
2854                         PL_reginterp_cnt += seen_evals;
2855
2856                     if (lp)
2857                         *lp = RX_WRAPLEN(re);
2858  
2859                     return RX_WRAPPED(re);
2860                 } else {
2861                     const char *const typestr = sv_reftype(referent, 0);
2862                     const STRLEN typelen = strlen(typestr);
2863                     UV addr = PTR2UV(referent);
2864                     const char *stashname = NULL;
2865                     STRLEN stashnamelen = 0; /* hush, gcc */
2866                     const char *buffer_end;
2867
2868                     if (SvOBJECT(referent)) {
2869                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2870
2871                         if (name) {
2872                             stashname = HEK_KEY(name);
2873                             stashnamelen = HEK_LEN(name);
2874
2875                             if (HEK_UTF8(name)) {
2876                                 SvUTF8_on(sv);
2877                             } else {
2878                                 SvUTF8_off(sv);
2879                             }
2880                         } else {
2881                             stashname = "__ANON__";
2882                             stashnamelen = 8;
2883                         }
2884                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2885                             + 2 * sizeof(UV) + 2 /* )\0 */;
2886                     } else {
2887                         len = typelen + 3 /* (0x */
2888                             + 2 * sizeof(UV) + 2 /* )\0 */;
2889                     }
2890
2891                     Newx(buffer, len, char);
2892                     buffer_end = retval = buffer + len;
2893
2894                     /* Working backwards  */
2895                     *--retval = '\0';
2896                     *--retval = ')';
2897                     do {
2898                         *--retval = PL_hexdigit[addr & 15];
2899                     } while (addr >>= 4);
2900                     *--retval = 'x';
2901                     *--retval = '0';
2902                     *--retval = '(';
2903
2904                     retval -= typelen;
2905                     memcpy(retval, typestr, typelen);
2906
2907                     if (stashname) {
2908                         *--retval = '=';
2909                         retval -= stashnamelen;
2910                         memcpy(retval, stashname, stashnamelen);
2911                     }
2912                     /* retval may not necessarily have reached the start of the
2913                        buffer here.  */
2914                     assert (retval >= buffer);
2915
2916                     len = buffer_end - retval - 1; /* -1 for that \0  */
2917                 }
2918                 if (lp)
2919                     *lp = len;
2920                 SAVEFREEPV(buffer);
2921                 return retval;
2922             }
2923         }
2924         if (SvREADONLY(sv) && !SvOK(sv)) {
2925             if (lp)
2926                 *lp = 0;
2927             if (flags & SV_UNDEF_RETURNS_NULL)
2928                 return NULL;
2929             if (ckWARN(WARN_UNINITIALIZED))
2930                 report_uninit(sv);
2931             return (char *)"";
2932         }
2933     }
2934     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2935         /* I'm assuming that if both IV and NV are equally valid then
2936            converting the IV is going to be more efficient */
2937         const U32 isUIOK = SvIsUV(sv);
2938         char buf[TYPE_CHARS(UV)];
2939         char *ebuf, *ptr;
2940         STRLEN len;
2941
2942         if (SvTYPE(sv) < SVt_PVIV)
2943             sv_upgrade(sv, SVt_PVIV);
2944         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2945         len = ebuf - ptr;
2946         /* inlined from sv_setpvn */
2947         s = SvGROW_mutable(sv, len + 1);
2948         Move(ptr, s, len, char);
2949         s += len;
2950         *s = '\0';
2951     }
2952     else if (SvNOKp(sv)) {
2953         if (SvTYPE(sv) < SVt_PVNV)
2954             sv_upgrade(sv, SVt_PVNV);
2955         if (SvNVX(sv) == 0.0) {
2956             s = SvGROW_mutable(sv, 2);
2957             *s++ = '0';
2958             *s = '\0';
2959         } else {
2960             dSAVE_ERRNO;
2961             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2962             s = SvGROW_mutable(sv, NV_DIG + 20);
2963             /* some Xenix systems wipe out errno here */
2964             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2965             RESTORE_ERRNO;
2966             while (*s) s++;
2967         }
2968 #ifdef hcx
2969         if (s[-1] == '.')
2970             *--s = '\0';
2971 #endif
2972     }
2973     else {
2974         if (isGV_with_GP(sv)) {
2975             GV *const gv = MUTABLE_GV(sv);
2976             SV *const buffer = sv_newmortal();
2977
2978             gv_efullname3(buffer, gv, "*");
2979
2980             assert(SvPOK(buffer));
2981             if (lp) {
2982                     *lp = SvCUR(buffer);
2983             }
2984             if ( SvUTF8(buffer) ) SvUTF8_on(sv);
2985             return SvPVX(buffer);
2986         }
2987
2988         if (lp)
2989             *lp = 0;
2990         if (flags & SV_UNDEF_RETURNS_NULL)
2991             return NULL;
2992         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2993             report_uninit(sv);
2994         if (SvTYPE(sv) < SVt_PV)
2995             /* Typically the caller expects that sv_any is not NULL now.  */
2996             sv_upgrade(sv, SVt_PV);
2997         return (char *)"";
2998     }
2999     {
3000         const STRLEN len = s - SvPVX_const(sv);
3001         if (lp) 
3002             *lp = len;
3003         SvCUR_set(sv, len);
3004     }
3005     SvPOK_on(sv);
3006     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3007                           PTR2UV(sv),SvPVX_const(sv)));
3008     if (flags & SV_CONST_RETURN)
3009         return (char *)SvPVX_const(sv);
3010     if (flags & SV_MUTABLE_RETURN)
3011         return SvPVX_mutable(sv);
3012     return SvPVX(sv);
3013 }
3014
3015 /*
3016 =for apidoc sv_copypv
3017
3018 Copies a stringified representation of the source SV into the
3019 destination SV.  Automatically performs any necessary mg_get and
3020 coercion of numeric values into strings.  Guaranteed to preserve
3021 UTF8 flag even from overloaded objects.  Similar in nature to
3022 sv_2pv[_flags] but operates directly on an SV instead of just the
3023 string.  Mostly uses sv_2pv_flags to do its work, except when that
3024 would lose the UTF-8'ness of the PV.
3025
3026 =cut
3027 */
3028
3029 void
3030 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3031 {
3032     STRLEN len;
3033     const char * const s = SvPV_const(ssv,len);
3034
3035     PERL_ARGS_ASSERT_SV_COPYPV;
3036
3037     sv_setpvn(dsv,s,len);
3038     if (SvUTF8(ssv))
3039         SvUTF8_on(dsv);
3040     else
3041         SvUTF8_off(dsv);
3042 }
3043
3044 /*
3045 =for apidoc sv_2pvbyte
3046
3047 Return a pointer to the byte-encoded representation of the SV, and set *lp
3048 to its length.  May cause the SV to be downgraded from UTF-8 as a
3049 side-effect.
3050
3051 Usually accessed via the C<SvPVbyte> macro.
3052
3053 =cut
3054 */
3055
3056 char *
3057 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *const lp)
3058 {
3059     PERL_ARGS_ASSERT_SV_2PVBYTE;
3060
3061     if ((SvTHINKFIRST(sv) && !SvIsCOW(sv)) || isGV_with_GP(sv)) {
3062         SV *sv2 = sv_newmortal();
3063         sv_copypv(sv2,sv);
3064         sv = sv2;
3065     }
3066     else SvGETMAGIC(sv);
3067     sv_utf8_downgrade(sv,0);
3068     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3069 }
3070
3071 /*
3072 =for apidoc sv_2pvutf8
3073
3074 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3075 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3076
3077 Usually accessed via the C<SvPVutf8> macro.
3078
3079 =cut
3080 */
3081
3082 char *
3083 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *const lp)
3084 {
3085     PERL_ARGS_ASSERT_SV_2PVUTF8;
3086
3087     if ((SvTHINKFIRST(sv) && !SvIsCOW(sv)) || isGV_with_GP(sv))
3088         sv = sv_mortalcopy(sv);
3089     sv_utf8_upgrade(sv);
3090     if (SvGMAGICAL(sv)) SvFLAGS(sv) &= ~SVf_POK;
3091     assert(SvPOKp(sv));
3092     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3093 }
3094
3095
3096 /*
3097 =for apidoc sv_2bool
3098
3099 This macro is only used by sv_true() or its macro equivalent, and only if
3100 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3101 It calls sv_2bool_flags with the SV_GMAGIC flag.
3102
3103 =for apidoc sv_2bool_flags
3104
3105 This function is only used by sv_true() and friends,  and only if
3106 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3107 contain SV_GMAGIC, then it does an mg_get() first.
3108
3109
3110 =cut
3111 */
3112
3113 bool
3114 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3115 {
3116     dVAR;
3117
3118     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3119
3120     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3121
3122     if (!SvOK(sv))
3123         return 0;
3124     if (SvROK(sv)) {
3125         if (SvAMAGIC(sv)) {
3126             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3127             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3128                 return cBOOL(SvTRUE(tmpsv));
3129         }
3130         return SvRV(sv) != 0;
3131     }
3132     if (SvPOKp(sv)) {
3133         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3134         if (Xpvtmp &&
3135                 (*sv->sv_u.svu_pv > '0' ||
3136                 Xpvtmp->xpv_cur > 1 ||
3137                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3138             return 1;
3139         else
3140             return 0;
3141     }
3142     else {
3143         if (SvIOKp(sv))
3144             return SvIVX(sv) != 0;
3145         else {
3146             if (SvNOKp(sv))
3147                 return SvNVX(sv) != 0.0;
3148             else {
3149                 if (isGV_with_GP(sv))
3150                     return TRUE;
3151                 else
3152                     return FALSE;
3153             }
3154         }
3155     }
3156 }
3157
3158 /*
3159 =for apidoc sv_utf8_upgrade
3160
3161 Converts the PV of an SV to its UTF-8-encoded form.
3162 Forces the SV to string form if it is not already.
3163 Will C<mg_get> on C<sv> if appropriate.
3164 Always sets the SvUTF8 flag to avoid future validity checks even
3165 if the whole string is the same in UTF-8 as not.
3166 Returns the number of bytes in the converted string
3167
3168 This is not as a general purpose byte encoding to Unicode interface:
3169 use the Encode extension for that.
3170
3171 =for apidoc sv_utf8_upgrade_nomg
3172
3173 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3174
3175 =for apidoc sv_utf8_upgrade_flags
3176
3177 Converts the PV of an SV to its UTF-8-encoded form.
3178 Forces the SV to string form if it is not already.
3179 Always sets the SvUTF8 flag to avoid future validity checks even
3180 if all the bytes are invariant in UTF-8.
3181 If C<flags> has C<SV_GMAGIC> bit set,
3182 will C<mg_get> on C<sv> if appropriate, else not.
3183 Returns the number of bytes in the converted string
3184 C<sv_utf8_upgrade> and
3185 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3186
3187 This is not as a general purpose byte encoding to Unicode interface:
3188 use the Encode extension for that.
3189
3190 =cut
3191
3192 The grow version is currently not externally documented.  It adds a parameter,
3193 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3194 have free after it upon return.  This allows the caller to reserve extra space
3195 that it intends to fill, to avoid extra grows.
3196
3197 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3198 which can be used to tell this function to not first check to see if there are
3199 any characters that are different in UTF-8 (variant characters) which would
3200 force it to allocate a new string to sv, but to assume there are.  Typically
3201 this flag is used by a routine that has already parsed the string to find that
3202 there are such characters, and passes this information on so that the work
3203 doesn't have to be repeated.
3204
3205 (One might think that the calling routine could pass in the position of the
3206 first such variant, so it wouldn't have to be found again.  But that is not the
3207 case, because typically when the caller is likely to use this flag, it won't be
3208 calling this routine unless it finds something that won't fit into a byte.
3209 Otherwise it tries to not upgrade and just use bytes.  But some things that
3210 do fit into a byte are variants in utf8, and the caller may not have been
3211 keeping track of these.)
3212
3213 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3214 isn't guaranteed due to having other routines do the work in some input cases,
3215 or if the input is already flagged as being in utf8.
3216
3217 The speed of this could perhaps be improved for many cases if someone wanted to
3218 write a fast function that counts the number of variant characters in a string,
3219 especially if it could return the position of the first one.
3220
3221 */
3222
3223 STRLEN
3224 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3225 {
3226     dVAR;
3227
3228     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3229
3230     if (sv == &PL_sv_undef)
3231         return 0;
3232     if (!SvPOK(sv)) {
3233         STRLEN len = 0;
3234         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3235             (void) sv_2pv_flags(sv,&len, flags);
3236             if (SvUTF8(sv)) {
3237                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3238                 return len;
3239             }
3240         } else {
3241             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3242         }
3243     }
3244
3245     if (SvUTF8(sv)) {
3246         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3247         return SvCUR(sv);
3248     }
3249
3250     if (SvIsCOW(sv)) {
3251         sv_force_normal_flags(sv, 0);
3252     }
3253
3254     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3255         sv_recode_to_utf8(sv, PL_encoding);
3256         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3257         return SvCUR(sv);
3258     }
3259
3260     if (SvCUR(sv) == 0) {
3261         if (extra) SvGROW(sv, extra);
3262     } else { /* Assume Latin-1/EBCDIC */
3263         /* This function could be much more efficient if we
3264          * had a FLAG in SVs to signal if there are any variant
3265          * chars in the PV.  Given that there isn't such a flag
3266          * make the loop as fast as possible (although there are certainly ways
3267          * to speed this up, eg. through vectorization) */
3268         U8 * s = (U8 *) SvPVX_const(sv);
3269         U8 * e = (U8 *) SvEND(sv);
3270         U8 *t = s;
3271         STRLEN two_byte_count = 0;
3272         
3273         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3274
3275         /* See if really will need to convert to utf8.  We mustn't rely on our
3276          * incoming SV being well formed and having a trailing '\0', as certain
3277          * code in pp_formline can send us partially built SVs. */
3278
3279         while (t < e) {
3280             const U8 ch = *t++;
3281             if (NATIVE_IS_INVARIANT(ch)) continue;
3282
3283             t--;    /* t already incremented; re-point to first variant */
3284             two_byte_count = 1;
3285             goto must_be_utf8;
3286         }
3287
3288         /* utf8 conversion not needed because all are invariants.  Mark as
3289          * UTF-8 even if no variant - saves scanning loop */
3290         SvUTF8_on(sv);
3291         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3292         return SvCUR(sv);
3293
3294 must_be_utf8:
3295
3296         /* Here, the string should be converted to utf8, either because of an
3297          * input flag (two_byte_count = 0), or because a character that
3298          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3299          * the beginning of the string (if we didn't examine anything), or to
3300          * the first variant.  In either case, everything from s to t - 1 will
3301          * occupy only 1 byte each on output.
3302          *
3303          * There are two main ways to convert.  One is to create a new string
3304          * and go through the input starting from the beginning, appending each
3305          * converted value onto the new string as we go along.  It's probably
3306          * best to allocate enough space in the string for the worst possible
3307          * case rather than possibly running out of space and having to
3308          * reallocate and then copy what we've done so far.  Since everything
3309          * from s to t - 1 is invariant, the destination can be initialized
3310          * with these using a fast memory copy
3311          *
3312          * The other way is to figure out exactly how big the string should be
3313          * by parsing the entire input.  Then you don't have to make it big
3314          * enough to handle the worst possible case, and more importantly, if
3315          * the string you already have is large enough, you don't have to
3316          * allocate a new string, you can copy the last character in the input
3317          * string to the final position(s) that will be occupied by the
3318          * converted string and go backwards, stopping at t, since everything
3319          * before that is invariant.
3320          *
3321          * There are advantages and disadvantages to each method.
3322          *
3323          * In the first method, we can allocate a new string, do the memory
3324          * copy from the s to t - 1, and then proceed through the rest of the
3325          * string byte-by-byte.
3326          *
3327          * In the second method, we proceed through the rest of the input
3328          * string just calculating how big the converted string will be.  Then
3329          * there are two cases:
3330          *  1)  if the string has enough extra space to handle the converted
3331          *      value.  We go backwards through the string, converting until we
3332          *      get to the position we are at now, and then stop.  If this
3333          *      position is far enough along in the string, this method is
3334          *      faster than the other method.  If the memory copy were the same
3335          *      speed as the byte-by-byte loop, that position would be about
3336          *      half-way, as at the half-way mark, parsing to the end and back
3337          *      is one complete string's parse, the same amount as starting
3338          *      over and going all the way through.  Actually, it would be
3339          *      somewhat less than half-way, as it's faster to just count bytes
3340          *      than to also copy, and we don't have the overhead of allocating
3341          *      a new string, changing the scalar to use it, and freeing the
3342          *      existing one.  But if the memory copy is fast, the break-even
3343          *      point is somewhere after half way.  The counting loop could be
3344          *      sped up by vectorization, etc, to move the break-even point
3345          *      further towards the beginning.
3346          *  2)  if the string doesn't have enough space to handle the converted
3347          *      value.  A new string will have to be allocated, and one might
3348          *      as well, given that, start from the beginning doing the first
3349          *      method.  We've spent extra time parsing the string and in
3350          *      exchange all we've gotten is that we know precisely how big to
3351          *      make the new one.  Perl is more optimized for time than space,
3352          *      so this case is a loser.
3353          * So what I've decided to do is not use the 2nd method unless it is
3354          * guaranteed that a new string won't have to be allocated, assuming
3355          * the worst case.  I also decided not to put any more conditions on it
3356          * than this, for now.  It seems likely that, since the worst case is
3357          * twice as big as the unknown portion of the string (plus 1), we won't
3358          * be guaranteed enough space, causing us to go to the first method,
3359          * unless the string is short, or the first variant character is near
3360          * the end of it.  In either of these cases, it seems best to use the
3361          * 2nd method.  The only circumstance I can think of where this would
3362          * be really slower is if the string had once had much more data in it
3363          * than it does now, but there is still a substantial amount in it  */
3364
3365         {
3366             STRLEN invariant_head = t - s;
3367             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3368             if (SvLEN(sv) < size) {
3369
3370                 /* Here, have decided to allocate a new string */
3371
3372                 U8 *dst;
3373                 U8 *d;
3374
3375                 Newx(dst, size, U8);
3376
3377                 /* If no known invariants at the beginning of the input string,
3378                  * set so starts from there.  Otherwise, can use memory copy to
3379                  * get up to where we are now, and then start from here */
3380
3381                 if (invariant_head <= 0) {
3382                     d = dst;
3383                 } else {
3384                     Copy(s, dst, invariant_head, char);
3385                     d = dst + invariant_head;
3386                 }
3387
3388                 while (t < e) {
3389                     const UV uv = NATIVE8_TO_UNI(*t++);
3390                     if (UNI_IS_INVARIANT(uv))
3391                         *d++ = (U8)UNI_TO_NATIVE(uv);
3392                     else {
3393                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3394                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3395                     }
3396                 }
3397                 *d = '\0';
3398                 SvPV_free(sv); /* No longer using pre-existing string */
3399                 SvPV_set(sv, (char*)dst);
3400                 SvCUR_set(sv, d - dst);
3401                 SvLEN_set(sv, size);
3402             } else {
3403
3404                 /* Here, have decided to get the exact size of the string.
3405                  * Currently this happens only when we know that there is
3406                  * guaranteed enough space to fit the converted string, so
3407                  * don't have to worry about growing.  If two_byte_count is 0,
3408                  * then t points to the first byte of the string which hasn't
3409                  * been examined yet.  Otherwise two_byte_count is 1, and t
3410                  * points to the first byte in the string that will expand to
3411                  * two.  Depending on this, start examining at t or 1 after t.
3412                  * */
3413
3414                 U8 *d = t + two_byte_count;
3415
3416
3417                 /* Count up the remaining bytes that expand to two */
3418
3419                 while (d < e) {
3420                     const U8 chr = *d++;
3421                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3422                 }
3423
3424                 /* The string will expand by just the number of bytes that
3425                  * occupy two positions.  But we are one afterwards because of
3426                  * the increment just above.  This is the place to put the
3427                  * trailing NUL, and to set the length before we decrement */
3428
3429                 d += two_byte_count;
3430                 SvCUR_set(sv, d - s);
3431                 *d-- = '\0';
3432
3433
3434                 /* Having decremented d, it points to the position to put the
3435                  * very last byte of the expanded string.  Go backwards through
3436                  * the string, copying and expanding as we go, stopping when we
3437                  * get to the part that is invariant the rest of the way down */
3438
3439                 e--;
3440                 while (e >= t) {
3441                     const U8 ch = NATIVE8_TO_UNI(*e--);
3442                     if (UNI_IS_INVARIANT(ch)) {
3443                         *d-- = UNI_TO_NATIVE(ch);
3444                     } else {
3445                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3446                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3447                     }
3448                 }
3449             }
3450
3451             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3452                 /* Update pos. We do it at the end rather than during
3453                  * the upgrade, to avoid slowing down the common case
3454                  * (upgrade without pos) */
3455                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3456                 if (mg) {
3457                     I32 pos = mg->mg_len;
3458                     if (pos > 0 && (U32)pos > invariant_head) {
3459                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3460                         STRLEN n = (U32)pos - invariant_head;
3461                         while (n > 0) {
3462                             if (UTF8_IS_START(*d))
3463                                 d++;
3464                             d++;
3465                             n--;
3466                         }
3467                         mg->mg_len  = d - (U8*)SvPVX(sv);
3468                     }
3469                 }
3470                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3471                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3472             }
3473         }
3474     }
3475
3476     /* Mark as UTF-8 even if no variant - saves scanning loop */
3477     SvUTF8_on(sv);
3478     return SvCUR(sv);
3479 }
3480
3481 /*
3482 =for apidoc sv_utf8_downgrade
3483
3484 Attempts to convert the PV of an SV from characters to bytes.
3485 If the PV contains a character that cannot fit
3486 in a byte, this conversion will fail;
3487 in this case, either returns false or, if C<fail_ok> is not
3488 true, croaks.
3489
3490 This is not as a general purpose Unicode to byte encoding interface:
3491 use the Encode extension for that.
3492
3493 =cut
3494 */
3495
3496 bool
3497 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3498 {
3499     dVAR;
3500
3501     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3502
3503     if (SvPOKp(sv) && SvUTF8(sv)) {
3504         if (SvCUR(sv)) {
3505             U8 *s;
3506             STRLEN len;
3507             int mg_flags = SV_GMAGIC;
3508
3509             if (SvIsCOW(sv)) {
3510                 sv_force_normal_flags(sv, 0);
3511             }
3512             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3513                 /* update pos */
3514                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3515                 if (mg) {
3516                     I32 pos = mg->mg_len;
3517                     if (pos > 0) {
3518                         sv_pos_b2u(sv, &pos);
3519                         mg_flags = 0; /* sv_pos_b2u does get magic */
3520                         mg->mg_len  = pos;
3521                     }
3522                 }
3523                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3524                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3525
3526             }
3527             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3528
3529             if (!utf8_to_bytes(s, &len)) {
3530                 if (fail_ok)
3531                     return FALSE;
3532                 else {
3533                     if (PL_op)
3534                         Perl_croak(aTHX_ "Wide character in %s",
3535                                    OP_DESC(PL_op));
3536                     else
3537                         Perl_croak(aTHX_ "Wide character");
3538                 }
3539             }
3540             SvCUR_set(sv, len);
3541         }
3542     }
3543     SvUTF8_off(sv);
3544     return TRUE;
3545 }
3546
3547 /*
3548 =for apidoc sv_utf8_encode
3549
3550 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3551 flag off so that it looks like octets again.
3552
3553 =cut
3554 */
3555
3556 void
3557 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3558 {
3559     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3560
3561     if (SvREADONLY(sv)) {
3562         sv_force_normal_flags(sv, 0);
3563     }
3564     (void) sv_utf8_upgrade(sv);
3565     SvUTF8_off(sv);
3566 }
3567
3568 /*
3569 =for apidoc sv_utf8_decode
3570
3571 If the PV of the SV is an octet sequence in UTF-8
3572 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3573 so that it looks like a character.  If the PV contains only single-byte
3574 characters, the C<SvUTF8> flag stays off.
3575 Scans PV for validity and returns false if the PV is invalid UTF-8.
3576
3577 =cut
3578 */
3579
3580 bool
3581 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3582 {
3583     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3584
3585     if (SvPOKp(sv)) {
3586         const U8 *start, *c;
3587         const U8 *e;
3588
3589         /* The octets may have got themselves encoded - get them back as
3590          * bytes
3591          */
3592         if (!sv_utf8_downgrade(sv, TRUE))
3593             return FALSE;
3594
3595         /* it is actually just a matter of turning the utf8 flag on, but
3596          * we want to make sure everything inside is valid utf8 first.
3597          */
3598         c = start = (const U8 *) SvPVX_const(sv);
3599         if (!is_utf8_string(c, SvCUR(sv)))
3600             return FALSE;
3601         e = (const U8 *) SvEND(sv);
3602         while (c < e) {
3603             const U8 ch = *c++;
3604             if (!UTF8_IS_INVARIANT(ch)) {
3605                 SvUTF8_on(sv);
3606                 break;
3607             }
3608         }
3609         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3610             /* adjust pos to the start of a UTF8 char sequence */
3611             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3612             if (mg) {
3613                 I32 pos = mg->mg_len;
3614                 if (pos > 0) {
3615                     for (c = start + pos; c > start; c--) {
3616                         if (UTF8_IS_START(*c))
3617                             break;
3618                     }
3619                     mg->mg_len  = c - start;
3620                 }
3621             }
3622             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3623                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3624         }
3625     }
3626     return TRUE;
3627 }
3628
3629 /*
3630 =for apidoc sv_setsv
3631
3632 Copies the contents of the source SV C<ssv> into the destination SV
3633 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3634 function if the source SV needs to be reused.  Does not handle 'set' magic.
3635 Loosely speaking, it performs a copy-by-value, obliterating any previous
3636 content of the destination.
3637
3638 You probably want to use one of the assortment of wrappers, such as
3639 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3640 C<SvSetMagicSV_nosteal>.
3641
3642 =for apidoc sv_setsv_flags
3643
3644 Copies the contents of the source SV C<ssv> into the destination SV
3645 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3646 function if the source SV needs to be reused.  Does not handle 'set' magic.
3647 Loosely speaking, it performs a copy-by-value, obliterating any previous
3648 content of the destination.
3649 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3650 C<ssv> if appropriate, else not.  If the C<flags>
3651 parameter has the C<NOSTEAL> bit set then the
3652 buffers of temps will not be stolen.  <sv_setsv>
3653 and C<sv_setsv_nomg> are implemented in terms of this function.
3654
3655 You probably want to use one of the assortment of wrappers, such as
3656 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3657 C<SvSetMagicSV_nosteal>.
3658
3659 This is the primary function for copying scalars, and most other
3660 copy-ish functions and macros use this underneath.
3661
3662 =cut
3663 */
3664
3665 static void
3666 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3667 {
3668     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3669     HV *old_stash = NULL;
3670
3671     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3672
3673     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3674         const char * const name = GvNAME(sstr);
3675         const STRLEN len = GvNAMELEN(sstr);
3676         {
3677             if (dtype >= SVt_PV) {
3678                 SvPV_free(dstr);
3679                 SvPV_set(dstr, 0);
3680                 SvLEN_set(dstr, 0);
3681                 SvCUR_set(dstr, 0);
3682             }
3683             SvUPGRADE(dstr, SVt_PVGV);
3684             (void)SvOK_off(dstr);
3685             /* We have to turn this on here, even though we turn it off
3686                below, as GvSTASH will fail an assertion otherwise. */
3687             isGV_with_GP_on(dstr);
3688         }
3689         GvSTASH(dstr) = GvSTASH(sstr);
3690         if (GvSTASH(dstr))
3691             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3692         gv_name_set(MUTABLE_GV(dstr), name, len,
3693                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3694         SvFAKE_on(dstr);        /* can coerce to non-glob */
3695     }
3696
3697     if(GvGP(MUTABLE_GV(sstr))) {
3698         /* If source has method cache entry, clear it */
3699         if(GvCVGEN(sstr)) {
3700             SvREFCNT_dec(GvCV(sstr));
3701             GvCV_set(sstr, NULL);
3702             GvCVGEN(sstr) = 0;
3703         }
3704         /* If source has a real method, then a method is
3705            going to change */
3706         else if(
3707          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3708         ) {
3709             mro_changes = 1;
3710         }
3711     }
3712
3713     /* If dest already had a real method, that's a change as well */
3714     if(
3715         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3716      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3717     ) {
3718         mro_changes = 1;
3719     }
3720
3721     /* We don't need to check the name of the destination if it was not a
3722        glob to begin with. */
3723     if(dtype == SVt_PVGV) {
3724         const char * const name = GvNAME((const GV *)dstr);
3725         if(
3726             strEQ(name,"ISA")
3727          /* The stash may have been detached from the symbol table, so
3728             check its name. */
3729          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3730          && GvAV((const GV *)sstr)
3731         )
3732             mro_changes = 2;
3733         else {
3734             const STRLEN len = GvNAMELEN(dstr);
3735             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3736              || (len == 1 && name[0] == ':')) {
3737                 mro_changes = 3;
3738
3739                 /* Set aside the old stash, so we can reset isa caches on
3740                    its subclasses. */
3741                 if((old_stash = GvHV(dstr)))
3742                     /* Make sure we do not lose it early. */
3743                     SvREFCNT_inc_simple_void_NN(
3744                      sv_2mortal((SV *)old_stash)
3745                     );
3746             }
3747         }
3748     }
3749
3750     gp_free(MUTABLE_GV(dstr));
3751     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3752     (void)SvOK_off(dstr);
3753     isGV_with_GP_on(dstr);
3754     GvINTRO_off(dstr);          /* one-shot flag */
3755     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3756     if (SvTAINTED(sstr))
3757         SvTAINT(dstr);
3758     if (GvIMPORTED(dstr) != GVf_IMPORTED
3759         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3760         {
3761             GvIMPORTED_on(dstr);
3762         }
3763     GvMULTI_on(dstr);
3764     if(mro_changes == 2) {
3765         MAGIC *mg;
3766         SV * const sref = (SV *)GvAV((const GV *)dstr);
3767         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3768             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3769                 AV * const ary = newAV();
3770                 av_push(ary, mg->mg_obj); /* takes the refcount */
3771                 mg->mg_obj = (SV *)ary;
3772             }
3773             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3774         }
3775         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3776         mro_isa_changed_in(GvSTASH(dstr));
3777     }
3778     else if(mro_changes == 3) {
3779         HV * const stash = GvHV(dstr);
3780         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3781             mro_package_moved(
3782                 stash, old_stash,
3783                 (GV *)dstr, 0
3784             );
3785     }
3786     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3787     return;
3788 }
3789
3790 static void
3791 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3792 {
3793     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3794     SV *dref = NULL;
3795     const int intro = GvINTRO(dstr);
3796     SV **location;
3797     U8 import_flag = 0;
3798     const U32 stype = SvTYPE(sref);
3799
3800     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3801
3802     if (intro) {
3803         GvINTRO_off(dstr);      /* one-shot flag */
3804         GvLINE(dstr) = CopLINE(PL_curcop);
3805         GvEGV(dstr) = MUTABLE_GV(dstr);
3806     }
3807     GvMULTI_on(dstr);
3808     switch (stype) {
3809     case SVt_PVCV:
3810         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3811         import_flag = GVf_IMPORTED_CV;
3812         goto common;
3813     case SVt_PVHV:
3814         location = (SV **) &GvHV(dstr);
3815         import_flag = GVf_IMPORTED_HV;
3816         goto common;
3817     case SVt_PVAV:
3818         location = (SV **) &GvAV(dstr);
3819         import_flag = GVf_IMPORTED_AV;
3820         goto common;
3821     case SVt_PVIO:
3822         location = (SV **) &GvIOp(dstr);
3823         goto common;
3824     case SVt_PVFM:
3825         location = (SV **) &GvFORM(dstr);
3826         goto common;
3827     default:
3828         location = &GvSV(dstr);
3829         import_flag = GVf_IMPORTED_SV;
3830     common:
3831         if (intro) {
3832             if (stype == SVt_PVCV) {
3833                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3834                 if (GvCVGEN(dstr)) {
3835                     SvREFCNT_dec(GvCV(dstr));
3836                     GvCV_set(dstr, NULL);
3837                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3838                 }
3839             }
3840             SAVEGENERICSV(*location);
3841         }
3842         else
3843             dref = *location;
3844         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3845             CV* const cv = MUTABLE_CV(*location);
3846             if (cv) {
3847                 if (!GvCVGEN((const GV *)dstr) &&
3848                     (CvROOT(cv) || CvXSUB(cv)) &&
3849                     /* redundant check that avoids creating the extra SV
3850                        most of the time: */
3851                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3852                     {
3853                         SV * const new_const_sv =
3854                             CvCONST((const CV *)sref)
3855                                  ? cv_const_sv((const CV *)sref)
3856                                  : NULL;
3857                         report_redefined_cv(
3858                            sv_2mortal(Perl_newSVpvf(aTHX_
3859                                 "%"HEKf"::%"HEKf,
3860                                 HEKfARG(
3861                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3862                                 ),
3863                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3864                            )),
3865                            cv,
3866                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3867                         );
3868                     }
3869                 if (!intro)
3870                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3871                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3872                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3873                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3874             }
3875             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3876             GvASSUMECV_on(dstr);
3877             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3878         }
3879         *location = sref;
3880         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3881             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3882             GvFLAGS(dstr) |= import_flag;
3883         }
3884         if (stype == SVt_PVHV) {
3885             const char * const name = GvNAME((GV*)dstr);
3886             const STRLEN len = GvNAMELEN(dstr);
3887             if (
3888                 (
3889                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3890                 || (len == 1 && name[0] == ':')
3891                 )
3892              && (!dref || HvENAME_get(dref))
3893             ) {
3894                 mro_package_moved(
3895                     (HV *)sref, (HV *)dref,
3896                     (GV *)dstr, 0
3897                 );
3898             }
3899         }
3900         else if (
3901             stype == SVt_PVAV && sref != dref
3902          && strEQ(GvNAME((GV*)dstr), "ISA")
3903          /* The stash may have been detached from the symbol table, so
3904             check its name before doing anything. */
3905          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3906         ) {
3907             MAGIC *mg;
3908             MAGIC * const omg = dref && SvSMAGICAL(dref)
3909                                  ? mg_find(dref, PERL_MAGIC_isa)
3910                                  : NULL;
3911             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3912                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3913                     AV * const ary = newAV();
3914                     av_push(ary, mg->mg_obj); /* takes the refcount */
3915                     mg->mg_obj = (SV *)ary;
3916                 }
3917                 if (omg) {
3918                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3919                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3920                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3921                         while (items--)
3922                             av_push(
3923                              (AV *)mg->mg_obj,
3924                              SvREFCNT_inc_simple_NN(*svp++)
3925                             );
3926                     }
3927                     else
3928                         av_push(
3929                          (AV *)mg->mg_obj,
3930                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3931                         );
3932                 }
3933                 else
3934                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3935             }
3936             else
3937             {
3938                 sv_magic(
3939                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3940                 );
3941                 mg = mg_find(sref, PERL_MAGIC_isa);
3942             }
3943             /* Since the *ISA assignment could have affected more than
3944                one stash, don't call mro_isa_changed_in directly, but let
3945                magic_clearisa do it for us, as it already has the logic for
3946                dealing with globs vs arrays of globs. */
3947             assert(mg);
3948             Perl_magic_clearisa(aTHX_ NULL, mg);
3949         }
3950         break;
3951     }
3952     SvREFCNT_dec(dref);
3953     if (SvTAINTED(sstr))
3954         SvTAINT(dstr);
3955     return;
3956 }
3957
3958 void
3959 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3960 {
3961     dVAR;
3962     register U32 sflags;
3963     register int dtype;
3964     register svtype stype;
3965
3966     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3967
3968     if (sstr == dstr)
3969         return;
3970
3971     if (SvIS_FREED(dstr)) {
3972         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3973                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3974     }
3975     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3976     if (!sstr)
3977         sstr = &PL_sv_undef;
3978     if (SvIS_FREED(sstr)) {
3979         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3980                    (void*)sstr, (void*)dstr);
3981     }
3982     stype = SvTYPE(sstr);
3983     dtype = SvTYPE(dstr);
3984
3985     if ( SvVOK(dstr) )
3986     {
3987         /* need to nuke the magic */
3988         sv_unmagic(dstr, PERL_MAGIC_vstring);
3989     }
3990
3991     /* There's a lot of redundancy below but we're going for speed here */
3992
3993     switch (stype) {
3994     case SVt_NULL:
3995       undef_sstr:
3996         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3997             (void)SvOK_off(dstr);
3998             return;
3999         }
4000         break;
4001     case SVt_IV:
4002         if (SvIOK(sstr)) {
4003             switch (dtype) {
4004             case SVt_NULL:
4005                 sv_upgrade(dstr, SVt_IV);
4006                 break;
4007             case SVt_NV:
4008             case SVt_PV:
4009                 sv_upgrade(dstr, SVt_PVIV);
4010                 break;
4011             case SVt_PVGV:
4012             case SVt_PVLV:
4013                 goto end_of_first_switch;
4014             }
4015             (void)SvIOK_only(dstr);
4016             SvIV_set(dstr,  SvIVX(sstr));
4017             if (SvIsUV(sstr))
4018                 SvIsUV_on(dstr);
4019             /* SvTAINTED can only be true if the SV has taint magic, which in
4020                turn means that the SV type is PVMG (or greater). This is the
4021                case statement for SVt_IV, so this cannot be true (whatever gcov
4022                may say).  */
4023             assert(!SvTAINTED(sstr));
4024             return;
4025         }
4026         if (!SvROK(sstr))
4027             goto undef_sstr;
4028         if (dtype < SVt_PV && dtype != SVt_IV)
4029             sv_upgrade(dstr, SVt_IV);
4030         break;
4031
4032     case SVt_NV:
4033         if (SvNOK(sstr)) {
4034             switch (dtype) {
4035             case SVt_NULL:
4036             case SVt_IV:
4037                 sv_upgrade(dstr, SVt_NV);
4038                 break;
4039             case SVt_PV:
4040             case SVt_PVIV:
4041                 sv_upgrade(dstr, SVt_PVNV);
4042                 break;
4043             case SVt_PVGV:
4044             case SVt_PVLV:
4045                 goto end_of_first_switch;
4046             }
4047             SvNV_set(dstr, SvNVX(sstr));
4048             (void)SvNOK_only(dstr);
4049             /* SvTAINTED can only be true if the SV has taint magic, which in
4050                turn means that the SV type is PVMG (or greater). This is the
4051                case statement for SVt_NV, so this cannot be true (whatever gcov
4052                may say).  */
4053             assert(!SvTAINTED(sstr));
4054             return;
4055         }
4056         goto undef_sstr;
4057
4058     case SVt_PVFM:
4059 #ifdef PERL_OLD_COPY_ON_WRITE
4060         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4061             if (dtype < SVt_PVIV)
4062                 sv_upgrade(dstr, SVt_PVIV);
4063             break;
4064         }
4065         /* Fall through */
4066 #endif
4067     case SVt_PV:
4068         if (dtype < SVt_PV)
4069             sv_upgrade(dstr, SVt_PV);
4070         break;
4071     case SVt_PVIV:
4072         if (dtype < SVt_PVIV)
4073             sv_upgrade(dstr, SVt_PVIV);
4074         break;
4075     case SVt_PVNV:
4076         if (dtype < SVt_PVNV)
4077             sv_upgrade(dstr, SVt_PVNV);
4078         break;
4079     default:
4080         {
4081         const char * const type = sv_reftype(sstr,0);
4082         if (PL_op)
4083             /* diag_listed_as: Bizarre copy of %s */
4084             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4085         else
4086             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4087         }
4088         break;
4089
4090     case SVt_REGEXP:
4091         if (dtype < SVt_REGEXP)
4092             sv_upgrade(dstr, SVt_REGEXP);
4093         break;
4094
4095         /* case SVt_BIND: */
4096     case SVt_PVLV:
4097     case SVt_PVGV:
4098     case SVt_PVMG:
4099         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4100             mg_get(sstr);
4101             if (SvTYPE(sstr) != stype)
4102                 stype = SvTYPE(sstr);
4103         }
4104         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4105                     glob_assign_glob(dstr, sstr, dtype);
4106                     return;
4107         }
4108         if (stype == SVt_PVLV)
4109             SvUPGRADE(dstr, SVt_PVNV);
4110         else
4111             SvUPGRADE(dstr, (svtype)stype);
4112     }
4113  end_of_first_switch:
4114
4115     /* dstr may have been upgraded.  */
4116     dtype = SvTYPE(dstr);
4117     sflags = SvFLAGS(sstr);
4118
4119     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
4120         /* Assigning to a subroutine sets the prototype.  */
4121         if (SvOK(sstr)) {
4122             STRLEN len;
4123             const char *const ptr = SvPV_const(sstr, len);
4124
4125             SvGROW(dstr, len + 1);
4126             Copy(ptr, SvPVX(dstr), len + 1, char);
4127             SvCUR_set(dstr, len);
4128             SvPOK_only(dstr);
4129             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4130             CvAUTOLOAD_off(dstr);
4131         } else {
4132             SvOK_off(dstr);
4133         }
4134     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4135         const char * const type = sv_reftype(dstr,0);
4136         if (PL_op)
4137             /* diag_listed_as: Cannot copy to %s */
4138             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4139         else
4140             Perl_croak(aTHX_ "Cannot copy to %s", type);
4141     } else if (sflags & SVf_ROK) {
4142         if (isGV_with_GP(dstr)
4143             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4144             sstr = SvRV(sstr);
4145             if (sstr == dstr) {
4146                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4147                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4148                 {
4149                     GvIMPORTED_on(dstr);
4150                 }
4151                 GvMULTI_on(dstr);
4152                 return;
4153             }
4154             glob_assign_glob(dstr, sstr, dtype);
4155             return;
4156         }
4157
4158         if (dtype >= SVt_PV) {
4159             if (isGV_with_GP(dstr)) {
4160                 glob_assign_ref(dstr, sstr);
4161                 return;
4162             }
4163             if (SvPVX_const(dstr)) {
4164                 SvPV_free(dstr);
4165                 SvLEN_set(dstr, 0);
4166                 SvCUR_set(dstr, 0);
4167             }
4168         }
4169         (void)SvOK_off(dstr);
4170         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4171         SvFLAGS(dstr) |= sflags & SVf_ROK;
4172         assert(!(sflags & SVp_NOK));
4173         assert(!(sflags & SVp_IOK));
4174         assert(!(sflags & SVf_NOK));
4175         assert(!(sflags & SVf_IOK));
4176     }
4177     else if (isGV_with_GP(dstr)) {
4178         if (!(sflags & SVf_OK)) {
4179             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4180                            "Undefined value assigned to typeglob");
4181         }
4182         else {
4183             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4184             if (dstr != (const SV *)gv) {
4185                 const char * const name = GvNAME((const GV *)dstr);
4186                 const STRLEN len = GvNAMELEN(dstr);
4187                 HV *old_stash = NULL;
4188                 bool reset_isa = FALSE;
4189                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4190                  || (len == 1 && name[0] == ':')) {
4191                     /* Set aside the old stash, so we can reset isa caches
4192                        on its subclasses. */
4193                     if((old_stash = GvHV(dstr))) {
4194                         /* Make sure we do not lose it early. */
4195                         SvREFCNT_inc_simple_void_NN(
4196                          sv_2mortal((SV *)old_stash)
4197                         );
4198                     }
4199                     reset_isa = TRUE;
4200                 }
4201
4202                 if (GvGP(dstr))
4203                     gp_free(MUTABLE_GV(dstr));
4204                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4205
4206                 if (reset_isa) {
4207                     HV * const stash = GvHV(dstr);
4208                     if(
4209                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4210                     )
4211                         mro_package_moved(
4212                          stash, old_stash,
4213                          (GV *)dstr, 0
4214                         );
4215                 }
4216             }
4217         }
4218     }
4219     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4220         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4221     }
4222     else if (sflags & SVp_POK) {
4223         bool isSwipe = 0;
4224
4225         /*
4226          * Check to see if we can just swipe the string.  If so, it's a
4227          * possible small lose on short strings, but a big win on long ones.
4228          * It might even be a win on short strings if SvPVX_const(dstr)
4229          * has to be allocated and SvPVX_const(sstr) has to be freed.
4230          * Likewise if we can set up COW rather than doing an actual copy, we
4231          * drop to the else clause, as the swipe code and the COW setup code
4232          * have much in common.
4233          */
4234
4235         /* Whichever path we take through the next code, we want this true,
4236            and doing it now facilitates the COW check.  */
4237         (void)SvPOK_only(dstr);
4238
4239         if (
4240             /* If we're already COW then this clause is not true, and if COW
4241                is allowed then we drop down to the else and make dest COW 
4242                with us.  If caller hasn't said that we're allowed to COW
4243                shared hash keys then we don't do the COW setup, even if the
4244                source scalar is a shared hash key scalar.  */
4245             (((flags & SV_COW_SHARED_HASH_KEYS)
4246                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4247                : 1 /* If making a COW copy is forbidden then the behaviour we
4248                        desire is as if the source SV isn't actually already
4249                        COW, even if it is.  So we act as if the source flags
4250                        are not COW, rather than actually testing them.  */
4251               )
4252 #ifndef PERL_OLD_COPY_ON_WRITE
4253              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4254                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4255                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4256                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4257                 but in turn, it's somewhat dead code, never expected to go
4258                 live, but more kept as a placeholder on how to do it better
4259                 in a newer implementation.  */
4260              /* If we are COW and dstr is a suitable target then we drop down
4261                 into the else and make dest a COW of us.  */
4262              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4263 #endif
4264              )
4265             &&
4266             !(isSwipe =
4267                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4268                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4269                  (!(flags & SV_NOSTEAL)) &&
4270                                         /* and we're allowed to steal temps */
4271                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4272                  SvLEN(sstr))             /* and really is a string */
4273 #ifdef PERL_OLD_COPY_ON_WRITE
4274             && ((flags & SV_COW_SHARED_HASH_KEYS)
4275                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4276                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4277                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4278                 : 1)
4279 #endif
4280             ) {
4281             /* Failed the swipe test, and it's not a shared hash key either.
4282                Have to copy the string.  */
4283             STRLEN len = SvCUR(sstr);
4284             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4285             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4286             SvCUR_set(dstr, len);
4287             *SvEND(dstr) = '\0';
4288         } else {
4289             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4290                be true in here.  */
4291             /* Either it's a shared hash key, or it's suitable for
4292                copy-on-write or we can swipe the string.  */
4293             if (DEBUG_C_TEST) {
4294                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4295                 sv_dump(sstr);
4296                 sv_dump(dstr);
4297             }
4298 #ifdef PERL_OLD_COPY_ON_WRITE
4299             if (!isSwipe) {
4300                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4301                     != (SVf_FAKE | SVf_READONLY)) {
4302                     SvREADONLY_on(sstr);
4303                     SvFAKE_on(sstr);
4304                     /* Make the source SV into a loop of 1.
4305                        (about to become 2) */
4306                     SV_COW_NEXT_SV_SET(sstr, sstr);
4307                 }
4308             }
4309 #endif
4310             /* Initial code is common.  */
4311             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4312                 SvPV_free(dstr);
4313             }
4314
4315             if (!isSwipe) {
4316                 /* making another shared SV.  */
4317                 STRLEN cur = SvCUR(sstr);
4318                 STRLEN len = SvLEN(sstr);
4319 #ifdef PERL_OLD_COPY_ON_WRITE
4320                 if (len) {
4321                     assert (SvTYPE(dstr) >= SVt_PVIV);
4322                     /* SvIsCOW_normal */
4323                     /* splice us in between source and next-after-source.  */
4324                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4325                     SV_COW_NEXT_SV_SET(sstr, dstr);
4326                     SvPV_set(dstr, SvPVX_mutable(sstr));
4327                 } else
4328 #endif
4329                 {
4330                     /* SvIsCOW_shared_hash */
4331                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4332                                           "Copy on write: Sharing hash\n"));
4333
4334                     assert (SvTYPE(dstr) >= SVt_PV);
4335                     SvPV_set(dstr,
4336                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4337                 }
4338                 SvLEN_set(dstr, len);
4339                 SvCUR_set(dstr, cur);
4340                 SvREADONLY_on(dstr);
4341                 SvFAKE_on(dstr);
4342             }
4343             else
4344                 {       /* Passes the swipe test.  */
4345                 SvPV_set(dstr, SvPVX_mutable(sstr));
4346                 SvLEN_set(dstr, SvLEN(sstr));
4347                 SvCUR_set(dstr, SvCUR(sstr));
4348
4349                 SvTEMP_off(dstr);
4350                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4351                 SvPV_set(sstr, NULL);
4352                 SvLEN_set(sstr, 0);
4353                 SvCUR_set(sstr, 0);
4354                 SvTEMP_off(sstr);
4355             }
4356         }
4357         if (sflags & SVp_NOK) {
4358             SvNV_set(dstr, SvNVX(sstr));
4359         }
4360         if (sflags & SVp_IOK) {
4361             SvIV_set(dstr, SvIVX(sstr));
4362             /* Must do this otherwise some other overloaded use of 0x80000000
4363                gets confused. I guess SVpbm_VALID */
4364             if (sflags & SVf_IVisUV)
4365                 SvIsUV_on(dstr);
4366         }
4367         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4368         {
4369             const MAGIC * const smg = SvVSTRING_mg(sstr);
4370             if (smg) {
4371                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4372                          smg->mg_ptr, smg->mg_len);
4373                 SvRMAGICAL_on(dstr);
4374             }
4375         }
4376     }
4377     else if (sflags & (SVp_IOK|SVp_NOK)) {
4378         (void)SvOK_off(dstr);
4379         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4380         if (sflags & SVp_IOK) {
4381             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4382             SvIV_set(dstr, SvIVX(sstr));
4383         }
4384         if (sflags & SVp_NOK) {
4385             SvNV_set(dstr, SvNVX(sstr));
4386         }
4387     }
4388     else {
4389         if (isGV_with_GP(sstr)) {
4390             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4391         }
4392         else
4393             (void)SvOK_off(dstr);
4394     }
4395     if (SvTAINTED(sstr))
4396         SvTAINT(dstr);
4397 }
4398
4399 /*
4400 =for apidoc sv_setsv_mg
4401
4402 Like C<sv_setsv>, but also handles 'set' magic.
4403
4404 =cut
4405 */
4406
4407 void
4408 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4409 {
4410     PERL_ARGS_ASSERT_SV_SETSV_MG;
4411
4412     sv_setsv(dstr,sstr);
4413     SvSETMAGIC(dstr);
4414 }
4415
4416 #ifdef PERL_OLD_COPY_ON_WRITE
4417 SV *
4418 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4419 {
4420     STRLEN cur = SvCUR(sstr);
4421     STRLEN len = SvLEN(sstr);
4422     register char *new_pv;
4423
4424     PERL_ARGS_ASSERT_SV_SETSV_COW;
4425
4426     if (DEBUG_C_TEST) {
4427         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4428                       (void*)sstr, (void*)dstr);
4429         sv_dump(sstr);
4430         if (dstr)
4431                     sv_dump(dstr);
4432     }
4433
4434     if (dstr) {
4435         if (SvTHINKFIRST(dstr))
4436             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4437         else if (SvPVX_const(dstr))
4438             Safefree(SvPVX_const(dstr));
4439     }
4440     else
4441         new_SV(dstr);
4442     SvUPGRADE(dstr, SVt_PVIV);
4443
4444     assert (SvPOK(sstr));
4445     assert (SvPOKp(sstr));
4446     assert (!SvIOK(sstr));
4447     assert (!SvIOKp(sstr));
4448     assert (!SvNOK(sstr));
4449     assert (!SvNOKp(sstr));
4450
4451     if (SvIsCOW(sstr)) {
4452
4453         if (SvLEN(sstr) == 0) {
4454             /* source is a COW shared hash key.  */
4455             DEBUG_C(PerlIO_printf(Perl_debug_log,
4456                                   "Fast copy on write: Sharing hash\n"));
4457             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4458             goto common_exit;
4459         }
4460         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4461     } else {
4462         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4463         SvUPGRADE(sstr, SVt_PVIV);
4464         SvREADONLY_on(sstr);
4465         SvFAKE_on(sstr);
4466         DEBUG_C(PerlIO_printf(Perl_debug_log,
4467                               "Fast copy on write: Converting sstr to COW\n"));
4468         SV_COW_NEXT_SV_SET(dstr, sstr);
4469     }
4470     SV_COW_NEXT_SV_SET(sstr, dstr);
4471     new_pv = SvPVX_mutable(sstr);
4472
4473   common_exit:
4474     SvPV_set(dstr, new_pv);
4475     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4476     if (SvUTF8(sstr))
4477         SvUTF8_on(dstr);
4478     SvLEN_set(dstr, len);
4479     SvCUR_set(dstr, cur);
4480     if (DEBUG_C_TEST) {
4481         sv_dump(dstr);
4482     }
4483     return dstr;
4484 }
4485 #endif
4486
4487 /*
4488 =for apidoc sv_setpvn
4489
4490 Copies a string into an SV.  The C<len> parameter indicates the number of
4491 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4492 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4493
4494 =cut
4495 */
4496
4497 void
4498 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4499 {
4500     dVAR;
4501     register char *dptr;
4502
4503     PERL_ARGS_ASSERT_SV_SETPVN;
4504
4505     SV_CHECK_THINKFIRST_COW_DROP(sv);
4506     if (!ptr) {
4507         (void)SvOK_off(sv);
4508         return;
4509     }
4510     else {
4511         /* len is STRLEN which is unsigned, need to copy to signed */
4512         const IV iv = len;
4513         if (iv < 0)
4514             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4515                        IVdf, iv);
4516     }
4517     SvUPGRADE(sv, SVt_PV);
4518
4519     dptr = SvGROW(sv, len + 1);
4520     Move(ptr,dptr,len,char);
4521     dptr[len] = '\0';
4522     SvCUR_set(sv, len);
4523     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4524     SvTAINT(sv);
4525     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4526 }
4527
4528 /*
4529 =for apidoc sv_setpvn_mg
4530
4531 Like C<sv_setpvn>, but also handles 'set' magic.
4532
4533 =cut
4534 */
4535
4536 void
4537 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4538 {
4539     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4540
4541     sv_setpvn(sv,ptr,len);
4542     SvSETMAGIC(sv);
4543 }
4544
4545 /*
4546 =for apidoc sv_setpv
4547
4548 Copies a string into an SV.  The string must be null-terminated.  Does not
4549 handle 'set' magic.  See C<sv_setpv_mg>.
4550
4551 =cut
4552 */
4553
4554 void
4555 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4556 {
4557     dVAR;
4558     register STRLEN len;
4559
4560     PERL_ARGS_ASSERT_SV_SETPV;
4561
4562     SV_CHECK_THINKFIRST_COW_DROP(sv);
4563     if (!ptr) {
4564         (void)SvOK_off(sv);
4565         return;
4566     }
4567     len = strlen(ptr);
4568     SvUPGRADE(sv, SVt_PV);
4569
4570     SvGROW(sv, len + 1);
4571     Move(ptr,SvPVX(sv),len+1,char);
4572     SvCUR_set(sv, len);
4573     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4574     SvTAINT(sv);
4575     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4576 }
4577
4578 /*
4579 =for apidoc sv_setpv_mg
4580
4581 Like C<sv_setpv>, but also handles 'set' magic.
4582
4583 =cut
4584 */
4585
4586 void
4587 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4588 {
4589     PERL_ARGS_ASSERT_SV_SETPV_MG;
4590
4591     sv_setpv(sv,ptr);
4592     SvSETMAGIC(sv);
4593 }
4594
4595 void
4596 Perl_sv_sethek(pTHX_ register SV *const sv, const HEK *const hek)
4597 {
4598     dVAR;
4599
4600     PERL_ARGS_ASSERT_SV_SETHEK;
4601
4602     if (!hek) {
4603         return;
4604     }
4605
4606     if (HEK_LEN(hek) == HEf_SVKEY) {
4607         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4608         return;
4609     } else {
4610         const int flags = HEK_FLAGS(hek);
4611         if (flags & HVhek_WASUTF8) {
4612             STRLEN utf8_len = HEK_LEN(hek);
4613             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4614             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4615             SvUTF8_on(sv);
4616             return;
4617         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
4618             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4619             if (HEK_UTF8(hek))
4620                 SvUTF8_on(sv);
4621             else SvUTF8_off(sv);
4622             return;
4623         }
4624         {
4625             SV_CHECK_THINKFIRST_COW_DROP(sv);
4626             SvUPGRADE(sv, SVt_PV);
4627             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4628             SvCUR_set(sv, HEK_LEN(hek));
4629             SvLEN_set(sv, 0);
4630             SvREADONLY_on(sv);
4631             SvFAKE_on(sv);
4632             SvPOK_on(sv);
4633             if (HEK_UTF8(hek))
4634                 SvUTF8_on(sv);
4635             else SvUTF8_off(sv);
4636             return;
4637         }
4638     }
4639 }
4640
4641
4642 /*
4643 =for apidoc sv_usepvn_flags
4644
4645 Tells an SV to use C<ptr> to find its string value.  Normally the
4646 string is stored inside the SV but sv_usepvn allows the SV to use an
4647 outside string.  The C<ptr> should point to memory that was allocated
4648 by C<malloc>.  It must be the start of a mallocked block
4649 of memory, and not a pointer to the middle of it.  The
4650 string length, C<len>, must be supplied.  By default
4651 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4652 so that pointer should not be freed or used by the programmer after
4653 giving it to sv_usepvn, and neither should any pointers from "behind"
4654 that pointer (e.g. ptr + 1) be used.
4655
4656 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4657 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4658 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4659 C<len>, and already meets the requirements for storing in C<SvPVX>).
4660
4661 =cut
4662 */
4663
4664 void
4665 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4666 {
4667     dVAR;
4668     STRLEN allocate;
4669
4670     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4671
4672     SV_CHECK_THINKFIRST_COW_DROP(sv);
4673     SvUPGRADE(sv, SVt_PV);
4674     if (!ptr) {
4675         (void)SvOK_off(sv);
4676         if (flags & SV_SMAGIC)
4677             SvSETMAGIC(sv);
4678         return;
4679     }
4680     if (SvPVX_const(sv))
4681         SvPV_free(sv);
4682
4683 #ifdef DEBUGGING
4684     if (flags & SV_HAS_TRAILING_NUL)
4685         assert(ptr[len] == '\0');
4686 #endif
4687
4688     allocate = (flags & SV_HAS_TRAILING_NUL)
4689         ? len + 1 :
4690 #ifdef Perl_safesysmalloc_size
4691         len + 1;
4692 #else 
4693         PERL_STRLEN_ROUNDUP(len + 1);
4694 #endif
4695     if (flags & SV_HAS_TRAILING_NUL) {
4696         /* It's long enough - do nothing.
4697            Specifically Perl_newCONSTSUB is relying on this.  */
4698     } else {
4699 #ifdef DEBUGGING
4700         /* Force a move to shake out bugs in callers.  */
4701         char *new_ptr = (char*)safemalloc(allocate);
4702         Copy(ptr, new_ptr, len, char);
4703         PoisonFree(ptr,len,char);
4704         Safefree(ptr);
4705         ptr = new_ptr;
4706 #else
4707         ptr = (char*) saferealloc (ptr, allocate);
4708 #endif
4709     }
4710 #ifdef Perl_safesysmalloc_size
4711     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4712 #else
4713     SvLEN_set(sv, allocate);
4714 #endif
4715     SvCUR_set(sv, len);
4716     SvPV_set(sv, ptr);
4717     if (!(flags & SV_HAS_TRAILING_NUL)) {
4718         ptr[len] = '\0';
4719     }
4720     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4721     SvTAINT(sv);
4722     if (flags & SV_SMAGIC)
4723         SvSETMAGIC(sv);
4724 }
4725
4726 #ifdef PERL_OLD_COPY_ON_WRITE
4727 /* Need to do this *after* making the SV normal, as we need the buffer
4728    pointer to remain valid until after we've copied it.  If we let go too early,
4729    another thread could invalidate it by unsharing last of the same hash key
4730    (which it can do by means other than releasing copy-on-write Svs)
4731    or by changing the other copy-on-write SVs in the loop.  */
4732 STATIC void
4733 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4734 {
4735     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4736
4737     { /* this SV was SvIsCOW_normal(sv) */
4738          /* we need to find the SV pointing to us.  */
4739         SV *current = SV_COW_NEXT_SV(after);
4740
4741         if (current == sv) {
4742             /* The SV we point to points back to us (there were only two of us
4743                in the loop.)
4744                Hence other SV is no longer copy on write either.  */
4745             SvFAKE_off(after);
4746             SvREADONLY_off(after);
4747         } else {
4748             /* We need to follow the pointers around the loop.  */
4749             SV *next;
4750             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4751                 assert (next);
4752                 current = next;
4753                  /* don't loop forever if the structure is bust, and we have
4754                     a pointer into a closed loop.  */
4755                 assert (current != after);
4756                 assert (SvPVX_const(current) == pvx);
4757             }
4758             /* Make the SV before us point to the SV after us.  */
4759             SV_COW_NEXT_SV_SET(current, after);
4760         }
4761     }
4762 }
4763 #endif
4764 /*
4765 =for apidoc sv_force_normal_flags
4766
4767 Undo various types of fakery on an SV: if the PV is a shared string, make
4768 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4769 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4770 we do the copy, and is also used locally.  If C<SV_COW_DROP_PV> is set
4771 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4772 SvPOK_off rather than making a copy.  (Used where this
4773 scalar is about to be set to some other value.)  In addition,
4774 the C<flags> parameter gets passed to C<sv_unref_flags()>
4775 when unreffing.  C<sv_force_normal> calls this function
4776 with flags set to 0.
4777
4778 =cut
4779 */
4780
4781 void
4782 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4783 {
4784     dVAR;
4785
4786     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4787
4788 #ifdef PERL_OLD_COPY_ON_WRITE
4789     if (SvREADONLY(sv)) {
4790         if (SvFAKE(sv)) {
4791             const char * const pvx = SvPVX_const(sv);
4792             const STRLEN len = SvLEN(sv);
4793             const STRLEN cur = SvCUR(sv);
4794             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4795                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4796                we'll fail an assertion.  */
4797             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4798
4799             if (DEBUG_C_TEST) {
4800                 PerlIO_printf(Perl_debug_log,
4801                               "Copy on write: Force normal %ld\n",
4802                               (long) flags);
4803                 sv_dump(sv);
4804             }
4805             SvFAKE_off(sv);
4806             SvREADONLY_off(sv);
4807             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4808             SvPV_set(sv, NULL);
4809             SvLEN_set(sv, 0);
4810             if (flags & SV_COW_DROP_PV) {
4811                 /* OK, so we don't need to copy our buffer.  */
4812                 SvPOK_off(sv);
4813             } else {
4814                 SvGROW(sv, cur + 1);
4815                 Move(pvx,SvPVX(sv),cur,char);
4816                 SvCUR_set(sv, cur);
4817                 *SvEND(sv) = '\0';
4818             }
4819             if (len) {
4820                 sv_release_COW(sv, pvx, next);
4821             } else {
4822                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4823             }
4824             if (DEBUG_C_TEST) {
4825                 sv_dump(sv);
4826             }
4827         }
4828         else if (IN_PERL_RUNTIME)
4829             Perl_croak_no_modify(aTHX);
4830     }
4831 #else
4832     if (SvREADONLY(sv)) {
4833         if (SvIsCOW(sv)) {
4834             const char * const pvx = SvPVX_const(sv);
4835             const STRLEN len = SvCUR(sv);
4836             SvFAKE_off(sv);
4837             SvREADONLY_off(sv);
4838             SvPV_set(sv, NULL);
4839             SvLEN_set(sv, 0);
4840             if (flags & SV_COW_DROP_PV) {
4841                 /* OK, so we don't need to copy our buffer.  */
4842                 SvPOK_off(sv);
4843             } else {
4844                 SvGROW(sv, len + 1);
4845                 Move(pvx,SvPVX(sv),len,char);
4846                 *SvEND(sv) = '\0';
4847             }
4848             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4849         }
4850         else if (IN_PERL_RUNTIME)
4851             Perl_croak_no_modify(aTHX);
4852     }
4853 #endif
4854     if (SvROK(sv))
4855         sv_unref_flags(sv, flags);
4856     else if (SvFAKE(sv) && isGV_with_GP(sv))
4857         sv_unglob(sv, flags);
4858     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4859         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4860            to sv_unglob. We only need it here, so inline it.  */
4861         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4862         SV *const temp = newSV_type(new_type);
4863         void *const temp_p = SvANY(sv);
4864
4865         if (new_type == SVt_PVMG) {
4866             SvMAGIC_set(temp, SvMAGIC(sv));
4867             SvMAGIC_set(sv, NULL);
4868             SvSTASH_set(temp, SvSTASH(sv));
4869             SvSTASH_set(sv, NULL);
4870         }
4871         SvCUR_set(temp, SvCUR(sv));
4872         /* Remember that SvPVX is in the head, not the body. */
4873         if (SvLEN(temp)) {
4874             SvLEN_set(temp, SvLEN(sv));
4875             /* This signals "buffer is owned by someone else" in sv_clear,
4876                which is the least effort way to stop it freeing the buffer.
4877             */
4878             SvLEN_set(sv, SvLEN(sv)+1);
4879         } else {
4880             /* Their buffer is already owned by someone else. */
4881             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4882             SvLEN_set(temp, SvCUR(sv)+1);
4883         }
4884
4885         /* Now swap the rest of the bodies. */
4886
4887         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4888         SvFLAGS(sv) |= new_type;
4889         SvANY(sv) = SvANY(temp);
4890
4891         SvFLAGS(temp) &= ~(SVTYPEMASK);
4892         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4893         SvANY(temp) = temp_p;
4894
4895         SvREFCNT_dec(temp);
4896     }
4897 }
4898
4899 /*
4900 =for apidoc sv_chop
4901
4902 Efficient removal of characters from the beginning of the string buffer.
4903 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4904 the string buffer.  The C<ptr> becomes the first character of the adjusted
4905 string.  Uses the "OOK hack".
4906
4907 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4908 refer to the same chunk of data.
4909
4910 The unfortunate similarity of this function's name to that of Perl's C<chop>
4911 operator is strictly coincidental.  This function works from the left;
4912 C<chop> works from the right.
4913
4914 =cut
4915 */
4916
4917 void
4918 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4919 {
4920     STRLEN delta;
4921     STRLEN old_delta;
4922     U8 *p;
4923 #ifdef DEBUGGING
4924     const U8 *evacp;
4925     STRLEN evacn;
4926 #endif
4927     STRLEN max_delta;
4928
4929     PERL_ARGS_ASSERT_SV_CHOP;
4930
4931     if (!ptr || !SvPOKp(sv))
4932         return;
4933     delta = ptr - SvPVX_const(sv);
4934     if (!delta) {
4935         /* Nothing to do.  */
4936         return;
4937     }
4938     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4939     if (delta > max_delta)
4940         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4941                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4942     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
4943     SV_CHECK_THINKFIRST(sv);
4944
4945     if (!SvOOK(sv)) {
4946         if (!SvLEN(sv)) { /* make copy of shared string */
4947             const char *pvx = SvPVX_const(sv);
4948             const STRLEN len = SvCUR(sv);
4949             SvGROW(sv, len + 1);
4950             Move(pvx,SvPVX(sv),len,char);
4951             *SvEND(sv) = '\0';
4952         }
4953         SvOOK_on(sv);
4954         old_delta = 0;
4955     } else {
4956         SvOOK_offset(sv, old_delta);
4957     }
4958     SvLEN_set(sv, SvLEN(sv) - delta);
4959     SvCUR_set(sv, SvCUR(sv) - delta);
4960     SvPV_set(sv, SvPVX(sv) + delta);
4961
4962     p = (U8 *)SvPVX_const(sv);
4963
4964 #ifdef DEBUGGING
4965     /* how many bytes were evacuated?  we will fill them with sentinel
4966        bytes, except for the part holding the new offset of course. */
4967     evacn = delta;
4968     if (old_delta)
4969         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
4970     assert(evacn);
4971     assert(evacn <= delta + old_delta);
4972     evacp = p - evacn;
4973 #endif
4974
4975     delta += old_delta;
4976     assert(delta);
4977     if (delta < 0x100) {
4978         *--p = (U8) delta;
4979     } else {
4980         *--p = 0;
4981         p -= sizeof(STRLEN);
4982         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4983     }
4984
4985 #ifdef DEBUGGING
4986     /* Fill the preceding buffer with sentinals to verify that no-one is
4987        using it.  */
4988     while (p > evacp) {
4989         --p;
4990         *p = (U8)PTR2UV(p);
4991     }
4992 #endif
4993 }
4994
4995 /*
4996 =for apidoc sv_catpvn
4997
4998 Concatenates the string onto the end of the string which is in the SV.  The
4999 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5000 status set, then the bytes appended should be valid UTF-8.
5001 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5002
5003 =for apidoc sv_catpvn_flags
5004
5005 Concatenates the string onto the end of the string which is in the SV.  The
5006 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5007 status set, then the bytes appended should be valid UTF-8.
5008 If C<flags> has the C<SV_SMAGIC> bit set, will
5009 C<mg_set> on C<dsv> afterwards if appropriate.
5010 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5011 in terms of this function.
5012
5013 =cut
5014 */
5015
5016 void
5017 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
5018 {
5019     dVAR;
5020     STRLEN dlen;
5021     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5022
5023     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5024     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5025
5026     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5027       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5028          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5029          dlen = SvCUR(dsv);
5030       }
5031       else SvGROW(dsv, dlen + slen + 1);
5032       if (sstr == dstr)
5033         sstr = SvPVX_const(dsv);
5034       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5035       SvCUR_set(dsv, SvCUR(dsv) + slen);
5036     }
5037     else {
5038         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5039         const char * const send = sstr + slen;
5040         U8 *d;
5041
5042         /* Something this code does not account for, which I think is
5043            impossible; it would require the same pv to be treated as
5044            bytes *and* utf8, which would indicate a bug elsewhere. */
5045         assert(sstr != dstr);
5046
5047         SvGROW(dsv, dlen + slen * 2 + 1);
5048         d = (U8 *)SvPVX(dsv) + dlen;
5049
5050         while (sstr < send) {
5051             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5052             if (UNI_IS_INVARIANT(uv))
5053                 *d++ = (U8)UTF_TO_NATIVE(uv);
5054             else {
5055                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5056                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5057             }
5058         }
5059         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5060     }
5061     *SvEND(dsv) = '\0';
5062     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5063     SvTAINT(dsv);
5064     if (flags & SV_SMAGIC)
5065         SvSETMAGIC(dsv);
5066 }
5067
5068 /*
5069 =for apidoc sv_catsv
5070
5071 Concatenates the string from SV C<ssv> onto the end of the string in
5072 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
5073 not 'set' magic.  See C<sv_catsv_mg>.
5074
5075 =for apidoc sv_catsv_flags
5076
5077 Concatenates the string from SV C<ssv> onto the end of the string in
5078 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
5079 bit set, will C<mg_get> on the C<ssv>, if appropriate, before
5080 reading it.  If the C<flags> contain C<SV_SMAGIC>, C<mg_set> will be
5081 called on the modified SV afterward, if appropriate.  C<sv_catsv>
5082 and C<sv_catsv_nomg> are implemented in terms of this function.
5083
5084 =cut */
5085
5086 void
5087 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
5088 {
5089     dVAR;
5090  
5091     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5092
5093    if (ssv) {
5094         STRLEN slen;
5095         const char *spv = SvPV_flags_const(ssv, slen, flags);
5096         if (spv) {
5097             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
5098                 mg_get(dsv);
5099             sv_catpvn_flags(dsv, spv, slen,
5100                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5101         }
5102     }
5103     if (flags & SV_SMAGIC)
5104         SvSETMAGIC(dsv);
5105 }
5106
5107 /*
5108 =for apidoc sv_catpv
5109
5110 Concatenates the string onto the end of the string which is in the SV.
5111 If the SV has the UTF-8 status set, then the bytes appended should be
5112 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5113
5114 =cut */
5115
5116 void
5117 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
5118 {
5119     dVAR;
5120     register STRLEN len;
5121     STRLEN tlen;
5122     char *junk;
5123
5124     PERL_ARGS_ASSERT_SV_CATPV;
5125
5126     if (!ptr)
5127         return;
5128     junk = SvPV_force(sv, tlen);
5129     len = strlen(ptr);
5130     SvGROW(sv, tlen + len + 1);
5131     if (ptr == junk)
5132         ptr = SvPVX_const(sv);
5133     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5134     SvCUR_set(sv, SvCUR(sv) + len);
5135     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5136     SvTAINT(sv);
5137 }
5138
5139 /*
5140 =for apidoc sv_catpv_flags
5141
5142 Concatenates the string onto the end of the string which is in the SV.
5143 If the SV has the UTF-8 status set, then the bytes appended should
5144 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5145 on the modified SV if appropriate.
5146
5147 =cut
5148 */
5149
5150 void
5151 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5152 {
5153     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5154     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5155 }
5156
5157 /*
5158 =for apidoc sv_catpv_mg
5159
5160 Like C<sv_catpv>, but also handles 'set' magic.
5161
5162 =cut
5163 */
5164
5165 void
5166 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
5167 {
5168     PERL_ARGS_ASSERT_SV_CATPV_MG;
5169
5170     sv_catpv(sv,ptr);
5171     SvSETMAGIC(sv);
5172 }
5173
5174 /*
5175 =for apidoc newSV
5176
5177 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5178 bytes of preallocated string space the SV should have.  An extra byte for a
5179 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5180 space is allocated.)  The reference count for the new SV is set to 1.
5181
5182 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5183 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5184 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5185 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5186 modules supporting older perls.
5187
5188 =cut
5189 */
5190
5191 SV *
5192 Perl_newSV(pTHX_ const STRLEN len)
5193 {
5194     dVAR;
5195     register SV *sv;
5196
5197     new_SV(sv);
5198     if (len) {
5199         sv_upgrade(sv, SVt_PV);
5200         SvGROW(sv, len + 1);
5201     }
5202     return sv;
5203 }
5204 /*
5205 =for apidoc sv_magicext
5206
5207 Adds magic to an SV, upgrading it if necessary.  Applies the
5208 supplied vtable and returns a pointer to the magic added.
5209
5210 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5211 In particular, you can add magic to SvREADONLY SVs, and add more than
5212 one instance of the same 'how'.
5213
5214 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5215 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5216 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5217 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5218
5219 (This is now used as a subroutine by C<sv_magic>.)
5220
5221 =cut
5222 */
5223 MAGIC * 
5224 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5225                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5226 {
5227     dVAR;
5228     MAGIC* mg;
5229
5230     PERL_ARGS_ASSERT_SV_MAGICEXT;
5231
5232     SvUPGRADE(sv, SVt_PVMG);
5233     Newxz(mg, 1, MAGIC);
5234     mg->mg_moremagic = SvMAGIC(sv);
5235     SvMAGIC_set(sv, mg);
5236
5237     /* Sometimes a magic contains a reference loop, where the sv and
5238        object refer to each other.  To prevent a reference loop that
5239        would prevent such objects being freed, we look for such loops
5240        and if we find one we avoid incrementing the object refcount.
5241
5242        Note we cannot do this to avoid self-tie loops as intervening RV must
5243        have its REFCNT incremented to keep it in existence.
5244
5245     */
5246     if (!obj || obj == sv ||
5247         how == PERL_MAGIC_arylen ||
5248         how == PERL_MAGIC_symtab ||
5249         (SvTYPE(obj) == SVt_PVGV &&
5250             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5251              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5252              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5253     {
5254         mg->mg_obj = obj;
5255     }
5256     else {
5257         mg->mg_obj = SvREFCNT_inc_simple(obj);
5258         mg->mg_flags |= MGf_REFCOUNTED;
5259     }
5260
5261     /* Normal self-ties simply pass a null object, and instead of
5262        using mg_obj directly, use the SvTIED_obj macro to produce a
5263        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5264        with an RV obj pointing to the glob containing the PVIO.  In
5265        this case, to avoid a reference loop, we need to weaken the
5266        reference.
5267     */
5268
5269     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5270         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5271     {
5272       sv_rvweaken(obj);
5273     }
5274
5275     mg->mg_type = how;
5276     mg->mg_len = namlen;
5277     if (name) {
5278         if (namlen > 0)
5279             mg->mg_ptr = savepvn(name, namlen);
5280         else if (namlen == HEf_SVKEY) {
5281             /* Yes, this is casting away const. This is only for the case of
5282                HEf_SVKEY. I think we need to document this aberation of the
5283                constness of the API, rather than making name non-const, as
5284                that change propagating outwards a long way.  */
5285             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5286         } else
5287             mg->mg_ptr = (char *) name;
5288     }
5289     mg->mg_virtual = (MGVTBL *) vtable;
5290
5291     mg_magical(sv);
5292     if (SvGMAGICAL(sv))
5293         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5294     return mg;
5295 }
5296
5297 /*
5298 =for apidoc sv_magic
5299
5300 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5301 necessary, then adds a new magic item of type C<how> to the head of the
5302 magic list.
5303
5304 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5305 handling of the C<name> and C<namlen> arguments.
5306
5307 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5308 to add more than one instance of the same 'how'.
5309
5310 =cut
5311 */
5312
5313 void
5314 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5315              const char *const name, const I32 namlen)
5316 {
5317     dVAR;
5318     const MGVTBL *vtable;
5319     MAGIC* mg;
5320     unsigned int flags;
5321     unsigned int vtable_index;
5322
5323     PERL_ARGS_ASSERT_SV_MAGIC;
5324
5325     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5326         || ((flags = PL_magic_data[how]),
5327             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5328             > magic_vtable_max))
5329         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5330
5331     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5332        Useful for attaching extension internal data to perl vars.
5333        Note that multiple extensions may clash if magical scalars
5334        etc holding private data from one are passed to another. */
5335
5336     vtable = (vtable_index == magic_vtable_max)
5337         ? NULL : PL_magic_vtables + vtable_index;
5338
5339 #ifdef PERL_OLD_COPY_ON_WRITE
5340     if (SvIsCOW(sv))
5341         sv_force_normal_flags(sv, 0);
5342 #endif
5343     if (SvREADONLY(sv)) {
5344         if (
5345             /* its okay to attach magic to shared strings */
5346             !SvIsCOW(sv)
5347
5348             && IN_PERL_RUNTIME
5349             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5350            )
5351         {
5352             Perl_croak_no_modify(aTHX);
5353         }
5354     }
5355     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5356         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5357             /* sv_magic() refuses to add a magic of the same 'how' as an
5358                existing one
5359              */
5360             if (how == PERL_MAGIC_taint) {
5361                 mg->mg_len |= 1;
5362                 /* Any scalar which already had taint magic on which someone
5363                    (erroneously?) did SvIOK_on() or similar will now be
5364                    incorrectly sporting public "OK" flags.  */
5365                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5366             }
5367             return;
5368         }
5369     }
5370
5371     /* Rest of work is done else where */
5372     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5373
5374     switch (how) {
5375     case PERL_MAGIC_taint:
5376         mg->mg_len = 1;
5377         break;
5378     case PERL_MAGIC_ext:
5379     case PERL_MAGIC_dbfile:
5380         SvRMAGICAL_on(sv);
5381         break;
5382     }
5383 }
5384
5385 static int
5386 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5387 {
5388     MAGIC* mg;
5389     MAGIC** mgp;
5390
5391     assert(flags <= 1);
5392
5393     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5394         return 0;
5395     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5396     for (mg = *mgp; mg; mg = *mgp) {
5397         const MGVTBL* const virt = mg->mg_virtual;
5398         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5399             *mgp = mg->mg_moremagic;
5400             if (virt && virt->svt_free)
5401                 virt->svt_free(aTHX_ sv, mg);
5402             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5403                 if (mg->mg_len > 0)
5404                     Safefree(mg->mg_ptr);
5405                 else if (mg->mg_len == HEf_SVKEY)
5406                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5407                 else if (mg->mg_type == PERL_MAGIC_utf8)
5408                     Safefree(mg->mg_ptr);
5409             }
5410             if (mg->mg_flags & MGf_REFCOUNTED)
5411                 SvREFCNT_dec(mg->mg_obj);
5412             Safefree(mg);
5413         }
5414         else
5415             mgp = &mg->mg_moremagic;
5416     }
5417     if (SvMAGIC(sv)) {
5418         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5419             mg_magical(sv);     /*    else fix the flags now */
5420     }
5421     else {
5422         SvMAGICAL_off(sv);
5423         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5424     }
5425     return 0;
5426 }
5427
5428 /*
5429 =for apidoc sv_unmagic
5430
5431 Removes all magic of type C<type> from an SV.
5432
5433 =cut
5434 */
5435
5436 int
5437 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5438 {
5439     PERL_ARGS_ASSERT_SV_UNMAGIC;
5440     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5441 }
5442
5443 /*
5444 =for apidoc sv_unmagicext
5445
5446 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5447
5448 =cut
5449 */
5450
5451 int
5452 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5453 {
5454     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5455     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5456 }
5457
5458 /*
5459 =for apidoc sv_rvweaken
5460
5461 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5462 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5463 push a back-reference to this RV onto the array of backreferences
5464 associated with that magic.  If the RV is magical, set magic will be
5465 called after the RV is cleared.
5466
5467 =cut
5468 */
5469
5470 SV *
5471 Perl_sv_rvweaken(pTHX_ SV *const sv)
5472 {
5473     SV *tsv;
5474
5475     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5476
5477     if (!SvOK(sv))  /* let undefs pass */
5478         return sv;
5479     if (!SvROK(sv))
5480         Perl_croak(aTHX_ "Can't weaken a nonreference");
5481     else if (SvWEAKREF(sv)) {
5482         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5483         return sv;
5484     }
5485     else if (SvREADONLY(sv)) croak_no_modify();
5486     tsv = SvRV(sv);
5487     Perl_sv_add_backref(aTHX_ tsv, sv);
5488     SvWEAKREF_on(sv);
5489     SvREFCNT_dec(tsv);
5490     return sv;
5491 }
5492
5493 /* Give tsv backref magic if it hasn't already got it, then push a
5494  * back-reference to sv onto the array associated with the backref magic.
5495  *
5496  * As an optimisation, if there's only one backref and it's not an AV,
5497  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5498  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5499  * active.)
5500  */
5501
5502 /* A discussion about the backreferences array and its refcount:
5503  *
5504  * The AV holding the backreferences is pointed to either as the mg_obj of
5505  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5506  * xhv_backreferences field. The array is created with a refcount
5507  * of 2. This means that if during global destruction the array gets
5508  * picked on before its parent to have its refcount decremented by the
5509  * random zapper, it won't actually be freed, meaning it's still there for
5510  * when its parent gets freed.
5511  *
5512  * When the parent SV is freed, the extra ref is killed by
5513  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5514  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5515  *
5516  * When a single backref SV is stored directly, it is not reference
5517  * counted.
5518  */
5519
5520 void
5521 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5522 {
5523     dVAR;
5524     SV **svp;
5525     AV *av = NULL;
5526     MAGIC *mg = NULL;
5527
5528     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5529
5530     /* find slot to store array or singleton backref */
5531
5532     if (SvTYPE(tsv) == SVt_PVHV) {
5533         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5534     } else {
5535         if (! ((mg =
5536             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5537         {
5538             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5539             mg = mg_find(tsv, PERL_MAGIC_backref);
5540         }
5541         svp = &(mg->mg_obj);
5542     }
5543
5544     /* create or retrieve the array */
5545
5546     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5547         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5548     ) {
5549         /* create array */
5550         av = newAV();
5551         AvREAL_off(av);
5552         SvREFCNT_inc_simple_void(av);
5553         /* av now has a refcnt of 2; see discussion above */
5554         if (*svp) {
5555             /* move single existing backref to the array */
5556             av_extend(av, 1);
5557             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5558         }
5559         *svp = (SV*)av;
5560         if (mg)
5561             mg->mg_flags |= MGf_REFCOUNTED;
5562     }
5563     else
5564         av = MUTABLE_AV(*svp);
5565
5566     if (!av) {
5567         /* optimisation: store single backref directly in HvAUX or mg_obj */
5568         *svp = sv;
5569         return;
5570     }
5571     /* push new backref */
5572     assert(SvTYPE(av) == SVt_PVAV);
5573     if (AvFILLp(av) >= AvMAX(av)) {
5574         av_extend(av, AvFILLp(av)+1);
5575     }
5576     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5577 }
5578
5579 /* delete a back-reference to ourselves from the backref magic associated
5580  * with the SV we point to.
5581  */
5582
5583 void
5584 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5585 {
5586     dVAR;
5587     SV **svp = NULL;
5588
5589     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5590
5591     if (SvTYPE(tsv) == SVt_PVHV) {
5592         if (SvOOK(tsv))
5593             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5594     }
5595     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5596         /* It's possible for the the last (strong) reference to tsv to have
5597            become freed *before* the last thing holding a weak reference.
5598            If both survive longer than the backreferences array, then when
5599            the referent's reference count drops to 0 and it is freed, it's
5600            not able to chase the backreferences, so they aren't NULLed.
5601
5602            For example, a CV holds a weak reference to its stash. If both the
5603            CV and the stash survive longer than the backreferences array,
5604            and the CV gets picked for the SvBREAK() treatment first,
5605            *and* it turns out that the stash is only being kept alive because
5606            of an our variable in the pad of the CV, then midway during CV
5607            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5608            It ends up pointing to the freed HV. Hence it's chased in here, and
5609            if this block wasn't here, it would hit the !svp panic just below.
5610
5611            I don't believe that "better" destruction ordering is going to help
5612            here - during global destruction there's always going to be the
5613            chance that something goes out of order. We've tried to make it
5614            foolproof before, and it only resulted in evolutionary pressure on
5615            fools. Which made us look foolish for our hubris. :-(
5616         */
5617         return;
5618     }
5619     else {
5620         MAGIC *const mg
5621             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5622         svp =  mg ? &(mg->mg_obj) : NULL;
5623     }
5624
5625     if (!svp)
5626         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5627     if (!*svp) {
5628         /* It's possible that sv is being freed recursively part way through the
5629            freeing of tsv. If this happens, the backreferences array of tsv has
5630            already been freed, and so svp will be NULL. If this is the case,
5631            we should not panic. Instead, nothing needs doing, so return.  */
5632         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5633             return;
5634         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5635                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5636     }
5637
5638     if (SvTYPE(*svp) == SVt_PVAV) {
5639 #ifdef DEBUGGING
5640         int count = 1;
5641 #endif
5642         AV * const av = (AV*)*svp;
5643         SSize_t fill;
5644         assert(!SvIS_FREED(av));
5645         fill = AvFILLp(av);
5646         assert(fill > -1);
5647         svp = AvARRAY(av);
5648         /* for an SV with N weak references to it, if all those
5649          * weak refs are deleted, then sv_del_backref will be called
5650          * N times and O(N^2) compares will be done within the backref
5651          * array. To ameliorate this potential slowness, we:
5652          * 1) make sure this code is as tight as possible;
5653          * 2) when looking for SV, look for it at both the head and tail of the
5654          *    array first before searching the rest, since some create/destroy
5655          *    patterns will cause the backrefs to be freed in order.
5656          */
5657         if (*svp == sv) {
5658             AvARRAY(av)++;
5659             AvMAX(av)--;
5660         }
5661         else {
5662             SV **p = &svp[fill];
5663             SV *const topsv = *p;
5664             if (topsv != sv) {
5665 #ifdef DEBUGGING
5666                 count = 0;
5667 #endif
5668                 while (--p > svp) {
5669                     if (*p == sv) {
5670                         /* We weren't the last entry.
5671                            An unordered list has this property that you
5672                            can take the last element off the end to fill
5673                            the hole, and it's still an unordered list :-)
5674                         */
5675                         *p = topsv;
5676 #ifdef DEBUGGING
5677                         count++;
5678 #else
5679                         break; /* should only be one */
5680 #endif
5681                     }
5682                 }
5683             }
5684         }
5685         assert(count ==1);
5686         AvFILLp(av) = fill-1;
5687     }
5688     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5689         /* freed AV; skip */
5690     }
5691     else {
5692         /* optimisation: only a single backref, stored directly */
5693         if (*svp != sv)
5694             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5695         *svp = NULL;
5696     }
5697
5698 }
5699
5700 void
5701 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5702 {
5703     SV **svp;
5704     SV **last;
5705     bool is_array;
5706
5707     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5708
5709     if (!av)
5710         return;
5711
5712     /* after multiple passes through Perl_sv_clean_all() for a thinngy
5713      * that has badly leaked, the backref array may have gotten freed,
5714      * since we only protect it against 1 round of cleanup */
5715     if (SvIS_FREED(av)) {
5716         if (PL_in_clean_all) /* All is fair */
5717             return;
5718         Perl_croak(aTHX_
5719                    "panic: magic_killbackrefs (freed backref AV/SV)");
5720     }
5721
5722
5723     is_array = (SvTYPE(av) == SVt_PVAV);
5724     if (is_array) {
5725         assert(!SvIS_FREED(av));
5726         svp = AvARRAY(av);
5727         if (svp)
5728             last = svp + AvFILLp(av);
5729     }
5730     else {
5731         /* optimisation: only a single backref, stored directly */
5732         svp = (SV**)&av;
5733         last = svp;
5734     }
5735
5736     if (svp) {
5737         while (svp <= last) {
5738             if (*svp) {
5739                 SV *const referrer = *svp;
5740                 if (SvWEAKREF(referrer)) {
5741                     /* XXX Should we check that it hasn't changed? */
5742                     assert(SvROK(referrer));
5743                     SvRV_set(referrer, 0);
5744                     SvOK_off(referrer);
5745                     SvWEAKREF_off(referrer);
5746                     SvSETMAGIC(referrer);
5747                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5748                            SvTYPE(referrer) == SVt_PVLV) {
5749                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5750                     /* You lookin' at me?  */
5751                     assert(GvSTASH(referrer));
5752                     assert(GvSTASH(referrer) == (const HV *)sv);
5753                     GvSTASH(referrer) = 0;
5754                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5755                            SvTYPE(referrer) == SVt_PVFM) {
5756                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5757                         /* You lookin' at me?  */
5758                         assert(CvSTASH(referrer));
5759                         assert(CvSTASH(referrer) == (const HV *)sv);
5760                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5761                     }
5762                     else {
5763                         assert(SvTYPE(sv) == SVt_PVGV);
5764                         /* You lookin' at me?  */
5765                         assert(CvGV(referrer));
5766                         assert(CvGV(referrer) == (const GV *)sv);
5767                         anonymise_cv_maybe(MUTABLE_GV(sv),
5768                                                 MUTABLE_CV(referrer));
5769                     }
5770
5771                 } else {
5772                     Perl_croak(aTHX_
5773                                "panic: magic_killbackrefs (flags=%"UVxf")",
5774                                (UV)SvFLAGS(referrer));
5775                 }
5776
5777                 if (is_array)
5778                     *svp = NULL;
5779             }
5780             svp++;
5781         }
5782     }
5783     if (is_array) {
5784         AvFILLp(av) = -1;
5785         SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5786     }
5787     return;
5788 }
5789
5790 /*
5791 =for apidoc sv_insert
5792
5793 Inserts a string at the specified offset/length within the SV.  Similar to
5794 the Perl substr() function.  Handles get magic.
5795
5796 =for apidoc sv_insert_flags
5797
5798 Same as C<sv_insert>, but the extra C<flags> are passed to the
5799 C<SvPV_force_flags> that applies to C<bigstr>.
5800
5801 =cut
5802 */
5803
5804 void
5805 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5806 {
5807     dVAR;
5808     register char *big;
5809     register char *mid;
5810     register char *midend;
5811     register char *bigend;
5812     register SSize_t i;         /* better be sizeof(STRLEN) or bad things happen */
5813     STRLEN curlen;
5814
5815     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5816
5817     if (!bigstr)
5818         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5819     SvPV_force_flags(bigstr, curlen, flags);
5820     (void)SvPOK_only_UTF8(bigstr);
5821     if (offset + len > curlen) {
5822         SvGROW(bigstr, offset+len+1);
5823         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5824         SvCUR_set(bigstr, offset+len);
5825     }
5826
5827     SvTAINT(bigstr);
5828     i = littlelen - len;
5829     if (i > 0) {                        /* string might grow */
5830         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5831         mid = big + offset + len;
5832         midend = bigend = big + SvCUR(bigstr);
5833         bigend += i;
5834         *bigend = '\0';
5835         while (midend > mid)            /* shove everything down */
5836             *--bigend = *--midend;
5837         Move(little,big+offset,littlelen,char);
5838         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5839         SvSETMAGIC(bigstr);
5840         return;
5841     }
5842     else if (i == 0) {
5843         Move(little,SvPVX(bigstr)+offset,len,char);
5844         SvSETMAGIC(bigstr);
5845         return;
5846     }
5847
5848     big = SvPVX(bigstr);
5849     mid = big + offset;
5850     midend = mid + len;
5851     bigend = big + SvCUR(bigstr);
5852
5853     if (midend > bigend)
5854         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
5855                    midend, bigend);
5856
5857     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5858         if (littlelen) {
5859             Move(little, mid, littlelen,char);
5860             mid += littlelen;
5861         }
5862         i = bigend - midend;
5863         if (i > 0) {
5864             Move(midend, mid, i,char);
5865             mid += i;
5866         }
5867         *mid = '\0';
5868         SvCUR_set(bigstr, mid - big);
5869     }
5870     else if ((i = mid - big)) { /* faster from front */
5871         midend -= littlelen;
5872         mid = midend;
5873         Move(big, midend - i, i, char);
5874         sv_chop(bigstr,midend-i);
5875         if (littlelen)
5876             Move(little, mid, littlelen,char);
5877     }
5878     else if (littlelen) {
5879         midend -= littlelen;
5880         sv_chop(bigstr,midend);
5881         Move(little,midend,littlelen,char);
5882     }
5883     else {
5884         sv_chop(bigstr,midend);
5885     }
5886     SvSETMAGIC(bigstr);
5887 }
5888
5889 /*
5890 =for apidoc sv_replace
5891
5892 Make the first argument a copy of the second, then delete the original.
5893 The target SV physically takes over ownership of the body of the source SV
5894 and inherits its flags; however, the target keeps any magic it owns,
5895 and any magic in the source is discarded.
5896 Note that this is a rather specialist SV copying operation; most of the
5897 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5898
5899 =cut
5900 */
5901
5902 void
5903 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5904 {
5905     dVAR;
5906     const U32 refcnt = SvREFCNT(sv);
5907
5908     PERL_ARGS_ASSERT_SV_REPLACE;
5909
5910     SV_CHECK_THINKFIRST_COW_DROP(sv);
5911     if (SvREFCNT(nsv) != 1) {
5912         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5913                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5914     }
5915     if (SvMAGICAL(sv)) {
5916         if (SvMAGICAL(nsv))
5917             mg_free(nsv);
5918         else
5919             sv_upgrade(nsv, SVt_PVMG);
5920         SvMAGIC_set(nsv, SvMAGIC(sv));
5921         SvFLAGS(nsv) |= SvMAGICAL(sv);
5922         SvMAGICAL_off(sv);
5923         SvMAGIC_set(sv, NULL);
5924     }
5925     SvREFCNT(sv) = 0;
5926     sv_clear(sv);
5927     assert(!SvREFCNT(sv));
5928 #ifdef DEBUG_LEAKING_SCALARS
5929     sv->sv_flags  = nsv->sv_flags;
5930     sv->sv_any    = nsv->sv_any;
5931     sv->sv_refcnt = nsv->sv_refcnt;
5932     sv->sv_u      = nsv->sv_u;
5933 #else
5934     StructCopy(nsv,sv,SV);
5935 #endif
5936     if(SvTYPE(sv) == SVt_IV) {
5937         SvANY(sv)
5938             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5939     }
5940         
5941
5942 #ifdef PERL_OLD_COPY_ON_WRITE
5943     if (SvIsCOW_normal(nsv)) {
5944         /* We need to follow the pointers around the loop to make the
5945            previous SV point to sv, rather than nsv.  */
5946         SV *next;
5947         SV *current = nsv;
5948         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5949             assert(next);
5950             current = next;
5951             assert(SvPVX_const(current) == SvPVX_const(nsv));
5952         }
5953         /* Make the SV before us point to the SV after us.  */
5954         if (DEBUG_C_TEST) {
5955             PerlIO_printf(Perl_debug_log, "previous is\n");
5956             sv_dump(current);
5957             PerlIO_printf(Perl_debug_log,
5958                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5959                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5960         }
5961         SV_COW_NEXT_SV_SET(current, sv);
5962     }
5963 #endif
5964     SvREFCNT(sv) = refcnt;
5965     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5966     SvREFCNT(nsv) = 0;
5967     del_SV(nsv);
5968 }
5969
5970 /* We're about to free a GV which has a CV that refers back to us.
5971  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5972  * field) */
5973
5974 STATIC void
5975 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5976 {
5977     SV *gvname;
5978     GV *anongv;
5979
5980     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5981
5982     /* be assertive! */
5983     assert(SvREFCNT(gv) == 0);
5984     assert(isGV(gv) && isGV_with_GP(gv));
5985     assert(GvGP(gv));
5986     assert(!CvANON(cv));
5987     assert(CvGV(cv) == gv);
5988
5989     /* will the CV shortly be freed by gp_free() ? */
5990     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
5991         SvANY(cv)->xcv_gv = NULL;
5992         return;
5993     }
5994
5995     /* if not, anonymise: */
5996     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
5997                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
5998                     : newSVpvn_flags( "__ANON__", 8, 0 );
5999     sv_catpvs(gvname, "::__ANON__");
6000     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6001     SvREFCNT_dec(gvname);
6002
6003     CvANON_on(cv);
6004     CvCVGV_RC_on(cv);
6005     SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6006 }
6007
6008
6009 /*
6010 =for apidoc sv_clear
6011
6012 Clear an SV: call any destructors, free up any memory used by the body,
6013 and free the body itself.  The SV's head is I<not> freed, although
6014 its type is set to all 1's so that it won't inadvertently be assumed
6015 to be live during global destruction etc.
6016 This function should only be called when REFCNT is zero.  Most of the time
6017 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6018 instead.
6019
6020 =cut
6021 */
6022
6023 void
6024 Perl_sv_clear(pTHX_ SV *const orig_sv)
6025 {
6026     dVAR;
6027     HV *stash;
6028     U32 type;
6029     const struct body_details *sv_type_details;
6030     SV* iter_sv = NULL;
6031     SV* next_sv = NULL;
6032     register SV *sv = orig_sv;
6033     STRLEN hash_index;
6034
6035     PERL_ARGS_ASSERT_SV_CLEAR;
6036
6037     /* within this loop, sv is the SV currently being freed, and
6038      * iter_sv is the most recent AV or whatever that's being iterated
6039      * over to provide more SVs */
6040
6041     while (sv) {
6042
6043         type = SvTYPE(sv);
6044
6045         assert(SvREFCNT(sv) == 0);
6046         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6047
6048         if (type <= SVt_IV) {
6049             /* See the comment in sv.h about the collusion between this
6050              * early return and the overloading of the NULL slots in the
6051              * size table.  */
6052             if (SvROK(sv))
6053                 goto free_rv;
6054             SvFLAGS(sv) &= SVf_BREAK;
6055             SvFLAGS(sv) |= SVTYPEMASK;
6056             goto free_head;
6057         }
6058
6059         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6060
6061         if (type >= SVt_PVMG) {
6062             if (SvOBJECT(sv)) {
6063                 if (!curse(sv, 1)) goto get_next_sv;
6064                 type = SvTYPE(sv); /* destructor may have changed it */
6065             }
6066             /* Free back-references before magic, in case the magic calls
6067              * Perl code that has weak references to sv. */
6068             if (type == SVt_PVHV) {
6069                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6070                 if (SvMAGIC(sv))
6071                     mg_free(sv);
6072             }
6073             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6074                 SvREFCNT_dec(SvOURSTASH(sv));
6075             } else if (SvMAGIC(sv)) {
6076                 /* Free back-references before other types of magic. */
6077                 sv_unmagic(sv, PERL_MAGIC_backref);
6078                 mg_free(sv);
6079             }
6080             SvMAGICAL_off(sv);
6081             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6082                 SvREFCNT_dec(SvSTASH(sv));
6083         }
6084         switch (type) {
6085             /* case SVt_BIND: */
6086         case SVt_PVIO:
6087             if (IoIFP(sv) &&
6088                 IoIFP(sv) != PerlIO_stdin() &&
6089                 IoIFP(sv) != PerlIO_stdout() &&
6090                 IoIFP(sv) != PerlIO_stderr() &&
6091                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6092             {
6093                 io_close(MUTABLE_IO(sv), FALSE);
6094             }
6095             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6096                 PerlDir_close(IoDIRP(sv));
6097             IoDIRP(sv) = (DIR*)NULL;
6098             Safefree(IoTOP_NAME(sv));
6099             Safefree(IoFMT_NAME(sv));
6100             Safefree(IoBOTTOM_NAME(sv));
6101             if ((const GV *)sv == PL_statgv)
6102                 PL_statgv = NULL;
6103             goto freescalar;
6104         case SVt_REGEXP:
6105             /* FIXME for plugins */
6106             pregfree2((REGEXP*) sv);
6107             goto freescalar;
6108         case SVt_PVCV:
6109         case SVt_PVFM:
6110             cv_undef(MUTABLE_CV(sv));
6111             /* If we're in a stash, we don't own a reference to it.
6112              * However it does have a back reference to us, which needs to
6113              * be cleared.  */
6114             if ((stash = CvSTASH(sv)))
6115                 sv_del_backref(MUTABLE_SV(stash), sv);
6116             goto freescalar;
6117         case SVt_PVHV:
6118             if (PL_last_swash_hv == (const HV *)sv) {
6119                 PL_last_swash_hv = NULL;
6120             }
6121             if (HvTOTALKEYS((HV*)sv) > 0) {
6122                 const char *name;
6123                 /* this statement should match the one at the beginning of
6124                  * hv_undef_flags() */
6125                 if (   PL_phase != PERL_PHASE_DESTRUCT
6126                     && (name = HvNAME((HV*)sv)))
6127                 {
6128                     if (PL_stashcache)
6129                         (void)hv_delete(PL_stashcache, name,
6130                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6131                     hv_name_set((HV*)sv, NULL, 0, 0);
6132                 }
6133
6134                 /* save old iter_sv in unused SvSTASH field */
6135                 assert(!SvOBJECT(sv));
6136                 SvSTASH(sv) = (HV*)iter_sv;
6137                 iter_sv = sv;
6138
6139                 /* save old hash_index in unused SvMAGIC field */
6140                 assert(!SvMAGICAL(sv));
6141                 assert(!SvMAGIC(sv));
6142                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6143                 hash_index = 0;
6144
6145                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6146                 goto get_next_sv; /* process this new sv */
6147             }
6148             /* free empty hash */
6149             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6150             assert(!HvARRAY((HV*)sv));
6151             break;
6152         case SVt_PVAV:
6153             {
6154                 AV* av = MUTABLE_AV(sv);
6155                 if (PL_comppad == av) {
6156                     PL_comppad = NULL;
6157                     PL_curpad = NULL;
6158                 }
6159                 if (AvREAL(av) && AvFILLp(av) > -1) {
6160                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6161                     /* save old iter_sv in top-most slot of AV,
6162                      * and pray that it doesn't get wiped in the meantime */
6163                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6164                     iter_sv = sv;
6165                     goto get_next_sv; /* process this new sv */
6166                 }
6167                 Safefree(AvALLOC(av));
6168             }
6169
6170             break;
6171         case SVt_PVLV:
6172             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6173                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6174                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6175                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6176             }
6177             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6178                 SvREFCNT_dec(LvTARG(sv));
6179         case SVt_PVGV:
6180             if (isGV_with_GP(sv)) {
6181                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6182                    && HvENAME_get(stash))
6183                     mro_method_changed_in(stash);
6184                 gp_free(MUTABLE_GV(sv));
6185                 if (GvNAME_HEK(sv))
6186                     unshare_hek(GvNAME_HEK(sv));
6187                 /* If we're in a stash, we don't own a reference to it.
6188                  * However it does have a back reference to us, which
6189                  * needs to be cleared.  */
6190                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6191                         sv_del_backref(MUTABLE_SV(stash), sv);
6192             }
6193             /* FIXME. There are probably more unreferenced pointers to SVs
6194              * in the interpreter struct that we should check and tidy in
6195              * a similar fashion to this:  */
6196             /* See also S_sv_unglob, which does the same thing. */
6197             if ((const GV *)sv == PL_last_in_gv)
6198                 PL_last_in_gv = NULL;
6199             else if ((const GV *)sv == PL_statgv)
6200                 PL_statgv = NULL;
6201         case SVt_PVMG:
6202         case SVt_PVNV:
6203         case SVt_PVIV:
6204         case SVt_PV:
6205           freescalar:
6206             /* Don't bother with SvOOK_off(sv); as we're only going to
6207              * free it.  */
6208             if (SvOOK(sv)) {
6209                 STRLEN offset;
6210                 SvOOK_offset(sv, offset);
6211                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6212                 /* Don't even bother with turning off the OOK flag.  */
6213             }
6214             if (SvROK(sv)) {
6215             free_rv:
6216                 {
6217                     SV * const target = SvRV(sv);
6218                     if (SvWEAKREF(sv))
6219                         sv_del_backref(target, sv);
6220                     else
6221                         next_sv = target;
6222                 }
6223             }
6224 #ifdef PERL_OLD_COPY_ON_WRITE
6225             else if (SvPVX_const(sv)
6226                      && !(SvTYPE(sv) == SVt_PVIO
6227                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6228             {
6229                 if (SvIsCOW(sv)) {
6230                     if (DEBUG_C_TEST) {
6231                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6232                         sv_dump(sv);
6233                     }
6234                     if (SvLEN(sv)) {
6235                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6236                     } else {
6237                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6238                     }
6239
6240                     SvFAKE_off(sv);
6241                 } else if (SvLEN(sv)) {
6242                     Safefree(SvPVX_const(sv));
6243                 }
6244             }
6245 #else
6246             else if (SvPVX_const(sv) && SvLEN(sv)
6247                      && !(SvTYPE(sv) == SVt_PVIO
6248                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6249                 Safefree(SvPVX_mutable(sv));
6250             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6251                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6252                 SvFAKE_off(sv);
6253             }
6254 #endif
6255             break;
6256         case SVt_NV:
6257             break;
6258         }
6259
6260       free_body:
6261
6262         SvFLAGS(sv) &= SVf_BREAK;
6263         SvFLAGS(sv) |= SVTYPEMASK;
6264
6265         sv_type_details = bodies_by_type + type;
6266         if (sv_type_details->arena) {
6267             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6268                      &PL_body_roots[type]);
6269         }
6270         else if (sv_type_details->body_size) {
6271             safefree(SvANY(sv));
6272         }
6273
6274       free_head:
6275         /* caller is responsible for freeing the head of the original sv */
6276         if (sv != orig_sv && !SvREFCNT(sv))
6277             del_SV(sv);
6278
6279         /* grab and free next sv, if any */
6280       get_next_sv:
6281         while (1) {
6282             sv = NULL;
6283             if (next_sv) {
6284                 sv = next_sv;
6285                 next_sv = NULL;
6286             }
6287             else if (!iter_sv) {
6288                 break;
6289             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6290                 AV *const av = (AV*)iter_sv;
6291                 if (AvFILLp(av) > -1) {
6292                     sv = AvARRAY(av)[AvFILLp(av)--];
6293                 }
6294                 else { /* no more elements of current AV to free */
6295                     sv = iter_sv;
6296                     type = SvTYPE(sv);
6297                     /* restore previous value, squirrelled away */
6298                     iter_sv = AvARRAY(av)[AvMAX(av)];
6299                     Safefree(AvALLOC(av));
6300                     goto free_body;
6301                 }
6302             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6303                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6304                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6305                     /* no more elements of current HV to free */
6306                     sv = iter_sv;
6307                     type = SvTYPE(sv);
6308                     /* Restore previous values of iter_sv and hash_index,
6309                      * squirrelled away */
6310                     assert(!SvOBJECT(sv));
6311                     iter_sv = (SV*)SvSTASH(sv);
6312                     assert(!SvMAGICAL(sv));
6313                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6314
6315                     /* free any remaining detritus from the hash struct */
6316                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6317                     assert(!HvARRAY((HV*)sv));
6318                     goto free_body;
6319                 }
6320             }
6321
6322             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6323
6324             if (!sv)
6325                 continue;
6326             if (!SvREFCNT(sv)) {
6327                 sv_free(sv);
6328                 continue;
6329             }
6330             if (--(SvREFCNT(sv)))
6331                 continue;
6332 #ifdef DEBUGGING
6333             if (SvTEMP(sv)) {
6334                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6335                          "Attempt to free temp prematurely: SV 0x%"UVxf
6336                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6337                 continue;
6338             }
6339 #endif
6340             if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6341                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6342                 SvREFCNT(sv) = (~(U32)0)/2;
6343                 continue;
6344             }
6345             break;
6346         } /* while 1 */
6347
6348     } /* while sv */
6349 }
6350
6351 /* This routine curses the sv itself, not the object referenced by sv. So
6352    sv does not have to be ROK. */
6353
6354 static bool
6355 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6356     dVAR;
6357
6358     PERL_ARGS_ASSERT_CURSE;
6359     assert(SvOBJECT(sv));
6360
6361     if (PL_defstash &&  /* Still have a symbol table? */
6362         SvDESTROYABLE(sv))
6363     {
6364         dSP;
6365         HV* stash;
6366         do {
6367             CV* destructor;
6368             stash = SvSTASH(sv);
6369             destructor = StashHANDLER(stash,DESTROY);
6370             if (destructor
6371                 /* A constant subroutine can have no side effects, so
6372                    don't bother calling it.  */
6373                 && !CvCONST(destructor)
6374                 /* Don't bother calling an empty destructor or one that
6375                    returns immediately. */
6376                 && (CvISXSUB(destructor)
6377                 || (CvSTART(destructor)
6378                     && (CvSTART(destructor)->op_next->op_type
6379                                         != OP_LEAVESUB)
6380                     && (CvSTART(destructor)->op_next->op_type
6381                                         != OP_PUSHMARK
6382                         || CvSTART(destructor)->op_next->op_next->op_type
6383                                         != OP_RETURN
6384                        )
6385                    ))
6386                )
6387             {
6388                 SV* const tmpref = newRV(sv);
6389                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6390                 ENTER;
6391                 PUSHSTACKi(PERLSI_DESTROY);
6392                 EXTEND(SP, 2);
6393                 PUSHMARK(SP);
6394                 PUSHs(tmpref);
6395                 PUTBACK;
6396                 call_sv(MUTABLE_SV(destructor),
6397                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6398                 POPSTACK;
6399                 SPAGAIN;
6400                 LEAVE;
6401                 if(SvREFCNT(tmpref) < 2) {
6402                     /* tmpref is not kept alive! */
6403                     SvREFCNT(sv)--;
6404                     SvRV_set(tmpref, NULL);
6405                     SvROK_off(tmpref);
6406                 }
6407                 SvREFCNT_dec(tmpref);
6408             }
6409         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6410
6411
6412         if (check_refcnt && SvREFCNT(sv)) {
6413             if (PL_in_clean_objs)
6414                 Perl_croak(aTHX_
6415                   "DESTROY created new reference to dead object '%"HEKf"'",
6416                    HEKfARG(HvNAME_HEK(stash)));
6417             /* DESTROY gave object new lease on life */
6418             return FALSE;
6419         }
6420     }
6421
6422     if (SvOBJECT(sv)) {
6423         SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6424         SvOBJECT_off(sv);       /* Curse the object. */
6425         if (SvTYPE(sv) != SVt_PVIO)
6426             --PL_sv_objcount;/* XXX Might want something more general */
6427     }
6428     return TRUE;
6429 }
6430
6431 /*
6432 =for apidoc sv_newref
6433
6434 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6435 instead.
6436
6437 =cut
6438 */
6439
6440 SV *
6441 Perl_sv_newref(pTHX_ SV *const sv)
6442 {
6443     PERL_UNUSED_CONTEXT;
6444     if (sv)
6445         (SvREFCNT(sv))++;
6446     return sv;
6447 }
6448
6449 /*
6450 =for apidoc sv_free
6451
6452 Decrement an SV's reference count, and if it drops to zero, call
6453 C<sv_clear> to invoke destructors and free up any memory used by
6454 the body; finally, deallocate the SV's head itself.
6455 Normally called via a wrapper macro C<SvREFCNT_dec>.
6456
6457 =cut
6458 */
6459
6460 void
6461 Perl_sv_free(pTHX_ SV *const sv)
6462 {
6463     dVAR;
6464     if (!sv)
6465         return;
6466     if (SvREFCNT(sv) == 0) {
6467         if (SvFLAGS(sv) & SVf_BREAK)
6468             /* this SV's refcnt has been artificially decremented to
6469              * trigger cleanup */
6470             return;
6471         if (PL_in_clean_all) /* All is fair */
6472             return;
6473         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6474             /* make sure SvREFCNT(sv)==0 happens very seldom */
6475             SvREFCNT(sv) = (~(U32)0)/2;
6476             return;
6477         }
6478         if (ckWARN_d(WARN_INTERNAL)) {
6479 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6480             Perl_dump_sv_child(aTHX_ sv);
6481 #else
6482   #ifdef DEBUG_LEAKING_SCALARS
6483             sv_dump(sv);
6484   #endif
6485 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6486             if (PL_warnhook == PERL_WARNHOOK_FATAL
6487                 || ckDEAD(packWARN(WARN_INTERNAL))) {
6488                 /* Don't let Perl_warner cause us to escape our fate:  */
6489                 abort();
6490             }
6491 #endif
6492             /* This may not return:  */
6493             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6494                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
6495                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6496 #endif
6497         }
6498 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6499         abort();
6500 #endif
6501         return;
6502     }
6503     if (--(SvREFCNT(sv)) > 0)
6504         return;
6505     Perl_sv_free2(aTHX_ sv);
6506 }
6507
6508 void
6509 Perl_sv_free2(pTHX_ SV *const sv)
6510 {
6511     dVAR;
6512
6513     PERL_ARGS_ASSERT_SV_FREE2;
6514
6515 #ifdef DEBUGGING
6516     if (SvTEMP(sv)) {
6517         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6518                          "Attempt to free temp prematurely: SV 0x%"UVxf
6519                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6520         return;
6521     }
6522 #endif
6523     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6524         /* make sure SvREFCNT(sv)==0 happens very seldom */
6525         SvREFCNT(sv) = (~(U32)0)/2;
6526         return;
6527     }
6528     sv_clear(sv);
6529     if (! SvREFCNT(sv))
6530         del_SV(sv);
6531 }
6532
6533 /*
6534 =for apidoc sv_len
6535
6536 Returns the length of the string in the SV.  Handles magic and type
6537 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6538
6539 =cut
6540 */
6541
6542 STRLEN
6543 Perl_sv_len(pTHX_ register SV *const sv)
6544 {
6545     STRLEN len;
6546
6547     if (!sv)
6548         return 0;
6549
6550     if (SvGMAGICAL(sv))
6551         len = mg_length(sv);
6552     else
6553         (void)SvPV_const(sv, len);
6554     return len;
6555 }
6556
6557 /*
6558 =for apidoc sv_len_utf8
6559
6560 Returns the number of characters in the string in an SV, counting wide
6561 UTF-8 bytes as a single character.  Handles magic and type coercion.
6562
6563 =cut
6564 */
6565
6566 /*
6567  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6568  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6569  * (Note that the mg_len is not the length of the mg_ptr field.
6570  * This allows the cache to store the character length of the string without
6571  * needing to malloc() extra storage to attach to the mg_ptr.)
6572  *
6573  */
6574
6575 STRLEN
6576 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6577 {
6578     if (!sv)
6579         return 0;
6580
6581     if (SvGMAGICAL(sv))
6582         return mg_length(sv);
6583     else
6584     {
6585         STRLEN len;
6586         const U8 *s = (U8*)SvPV_const(sv, len);
6587
6588         if (PL_utf8cache) {
6589             STRLEN ulen;
6590             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6591
6592             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6593                 if (mg->mg_len != -1)
6594                     ulen = mg->mg_len;
6595                 else {
6596                     /* We can use the offset cache for a headstart.
6597                        The longer value is stored in the first pair.  */
6598                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6599
6600                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6601                                                        s + len);
6602                 }
6603                 
6604                 if (PL_utf8cache < 0) {
6605                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6606                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6607                 }
6608             }
6609             else {
6610                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6611                 utf8_mg_len_cache_update(sv, &mg, ulen);
6612             }
6613             return ulen;
6614         }
6615         return Perl_utf8_length(aTHX_ s, s + len);
6616     }
6617 }
6618
6619 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6620    offset.  */
6621 static STRLEN
6622 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6623                       STRLEN *const uoffset_p, bool *const at_end)
6624 {
6625     const U8 *s = start;
6626     STRLEN uoffset = *uoffset_p;
6627
6628     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6629
6630     while (s < send && uoffset) {
6631         --uoffset;
6632         s += UTF8SKIP(s);
6633     }
6634     if (s == send) {
6635         *at_end = TRUE;
6636     }
6637     else if (s > send) {
6638         *at_end = TRUE;
6639         /* This is the existing behaviour. Possibly it should be a croak, as
6640            it's actually a bounds error  */
6641         s = send;
6642     }
6643     *uoffset_p -= uoffset;
6644     return s - start;
6645 }
6646
6647 /* Given the length of the string in both bytes and UTF-8 characters, decide
6648    whether to walk forwards or backwards to find the byte corresponding to
6649    the passed in UTF-8 offset.  */
6650 static STRLEN
6651 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6652                     STRLEN uoffset, const STRLEN uend)
6653 {
6654     STRLEN backw = uend - uoffset;
6655
6656     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6657
6658     if (uoffset < 2 * backw) {
6659         /* The assumption is that going forwards is twice the speed of going
6660            forward (that's where the 2 * backw comes from).
6661            (The real figure of course depends on the UTF-8 data.)  */
6662         const U8 *s = start;
6663
6664         while (s < send && uoffset--)
6665             s += UTF8SKIP(s);
6666         assert (s <= send);
6667         if (s > send)
6668             s = send;
6669         return s - start;
6670     }
6671
6672     while (backw--) {
6673         send--;
6674         while (UTF8_IS_CONTINUATION(*send))
6675             send--;
6676     }
6677     return send - start;
6678 }
6679
6680 /* For the string representation of the given scalar, find the byte
6681    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6682    give another position in the string, *before* the sought offset, which
6683    (which is always true, as 0, 0 is a valid pair of positions), which should
6684    help reduce the amount of linear searching.
6685    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6686    will be used to reduce the amount of linear searching. The cache will be
6687    created if necessary, and the found value offered to it for update.  */
6688 static STRLEN
6689 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6690                     const U8 *const send, STRLEN uoffset,
6691                     STRLEN uoffset0, STRLEN boffset0)
6692 {
6693     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6694     bool found = FALSE;
6695     bool at_end = FALSE;
6696
6697     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6698
6699     assert (uoffset >= uoffset0);
6700
6701     if (!uoffset)
6702         return 0;
6703
6704     if (!SvREADONLY(sv)
6705         && PL_utf8cache
6706         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6707                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6708         if ((*mgp)->mg_ptr) {
6709             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6710             if (cache[0] == uoffset) {
6711                 /* An exact match. */
6712                 return cache[1];
6713             }
6714             if (cache[2] == uoffset) {
6715                 /* An exact match. */
6716                 return cache[3];
6717             }
6718
6719             if (cache[0] < uoffset) {
6720                 /* The cache already knows part of the way.   */
6721                 if (cache[0] > uoffset0) {
6722                     /* The cache knows more than the passed in pair  */
6723                     uoffset0 = cache[0];
6724                     boffset0 = cache[1];
6725                 }
6726                 if ((*mgp)->mg_len != -1) {
6727                     /* And we know the end too.  */
6728                     boffset = boffset0
6729                         + sv_pos_u2b_midway(start + boffset0, send,
6730                                               uoffset - uoffset0,
6731                                               (*mgp)->mg_len - uoffset0);
6732                 } else {
6733                     uoffset -= uoffset0;
6734                     boffset = boffset0
6735                         + sv_pos_u2b_forwards(start + boffset0,
6736                                               send, &uoffset, &at_end);
6737                     uoffset += uoffset0;
6738                 }
6739             }
6740             else if (cache[2] < uoffset) {
6741                 /* We're between the two cache entries.  */
6742                 if (cache[2] > uoffset0) {
6743                     /* and the cache knows more than the passed in pair  */
6744                     uoffset0 = cache[2];
6745                     boffset0 = cache[3];
6746                 }
6747
6748                 boffset = boffset0
6749                     + sv_pos_u2b_midway(start + boffset0,
6750                                           start + cache[1],
6751                                           uoffset - uoffset0,
6752                                           cache[0] - uoffset0);
6753             } else {
6754                 boffset = boffset0
6755                     + sv_pos_u2b_midway(start + boffset0,
6756                                           start + cache[3],
6757                                           uoffset - uoffset0,
6758                                           cache[2] - uoffset0);
6759             }
6760             found = TRUE;
6761         }
6762         else if ((*mgp)->mg_len != -1) {
6763             /* If we can take advantage of a passed in offset, do so.  */
6764             /* In fact, offset0 is either 0, or less than offset, so don't
6765                need to worry about the other possibility.  */
6766             boffset = boffset0
6767                 + sv_pos_u2b_midway(start + boffset0, send,
6768                                       uoffset - uoffset0,
6769                                       (*mgp)->mg_len - uoffset0);
6770             found = TRUE;
6771         }
6772     }
6773
6774     if (!found || PL_utf8cache < 0) {
6775         STRLEN real_boffset;
6776         uoffset -= uoffset0;
6777         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6778                                                       send, &uoffset, &at_end);
6779         uoffset += uoffset0;
6780
6781         if (found && PL_utf8cache < 0)
6782             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6783                                        real_boffset, sv);
6784         boffset = real_boffset;
6785     }
6786
6787     if (PL_utf8cache) {
6788         if (at_end)
6789             utf8_mg_len_cache_update(sv, mgp, uoffset);
6790         else
6791             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6792     }
6793     return boffset;
6794 }
6795
6796
6797 /*
6798 =for apidoc sv_pos_u2b_flags
6799
6800 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6801 the start of the string, to a count of the equivalent number of bytes; if
6802 lenp is non-zero, it does the same to lenp, but this time starting from
6803 the offset, rather than from the start
6804 of the string.  Handles type coercion.
6805 I<flags> is passed to C<SvPV_flags>, and usually should be
6806 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6807
6808 =cut
6809 */
6810
6811 /*
6812  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6813  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6814  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6815  *
6816  */
6817
6818 STRLEN
6819 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6820                       U32 flags)
6821 {
6822     const U8 *start;
6823     STRLEN len;
6824     STRLEN boffset;
6825
6826     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6827
6828     start = (U8*)SvPV_flags(sv, len, flags);
6829     if (len) {
6830         const U8 * const send = start + len;
6831         MAGIC *mg = NULL;
6832         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6833
6834         if (lenp
6835             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6836                         is 0, and *lenp is already set to that.  */) {
6837             /* Convert the relative offset to absolute.  */
6838             const STRLEN uoffset2 = uoffset + *lenp;
6839             const STRLEN boffset2
6840                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6841                                       uoffset, boffset) - boffset;
6842
6843             *lenp = boffset2;
6844         }
6845     } else {
6846         if (lenp)
6847             *lenp = 0;
6848         boffset = 0;
6849     }
6850
6851     return boffset;
6852 }
6853
6854 /*
6855 =for apidoc sv_pos_u2b
6856
6857 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6858 the start of the string, to a count of the equivalent number of bytes; if
6859 lenp is non-zero, it does the same to lenp, but this time starting from
6860 the offset, rather than from the start of the string.  Handles magic and
6861 type coercion.
6862
6863 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6864 than 2Gb.
6865
6866 =cut
6867 */
6868
6869 /*
6870  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6871  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6872  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6873  *
6874  */
6875
6876 /* This function is subject to size and sign problems */
6877
6878 void
6879 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6880 {
6881     PERL_ARGS_ASSERT_SV_POS_U2B;
6882
6883     if (lenp) {
6884         STRLEN ulen = (STRLEN)*lenp;
6885         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6886                                          SV_GMAGIC|SV_CONST_RETURN);
6887         *lenp = (I32)ulen;
6888     } else {
6889         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6890                                          SV_GMAGIC|SV_CONST_RETURN);
6891     }
6892 }
6893
6894 static void
6895 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6896                            const STRLEN ulen)
6897 {
6898     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6899     if (SvREADONLY(sv))
6900         return;
6901
6902     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6903                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6904         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6905     }
6906     assert(*mgp);
6907
6908     (*mgp)->mg_len = ulen;
6909     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
6910     if (ulen != (STRLEN) (*mgp)->mg_len)
6911         (*mgp)->mg_len = -1;
6912 }
6913
6914 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6915    byte length pairing. The (byte) length of the total SV is passed in too,
6916    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6917    may not have updated SvCUR, so we can't rely on reading it directly.
6918
6919    The proffered utf8/byte length pairing isn't used if the cache already has
6920    two pairs, and swapping either for the proffered pair would increase the
6921    RMS of the intervals between known byte offsets.
6922
6923    The cache itself consists of 4 STRLEN values
6924    0: larger UTF-8 offset
6925    1: corresponding byte offset
6926    2: smaller UTF-8 offset
6927    3: corresponding byte offset
6928
6929    Unused cache pairs have the value 0, 0.
6930    Keeping the cache "backwards" means that the invariant of
6931    cache[0] >= cache[2] is maintained even with empty slots, which means that
6932    the code that uses it doesn't need to worry if only 1 entry has actually
6933    been set to non-zero.  It also makes the "position beyond the end of the
6934    cache" logic much simpler, as the first slot is always the one to start
6935    from.   
6936 */
6937 static void
6938 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6939                            const STRLEN utf8, const STRLEN blen)
6940 {
6941     STRLEN *cache;
6942
6943     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6944
6945     if (SvREADONLY(sv))
6946         return;
6947
6948     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6949                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6950         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6951                            0);
6952         (*mgp)->mg_len = -1;
6953     }
6954     assert(*mgp);
6955
6956     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6957         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6958         (*mgp)->mg_ptr = (char *) cache;
6959     }
6960     assert(cache);
6961
6962     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6963         /* SvPOKp() because it's possible that sv has string overloading, and
6964            therefore is a reference, hence SvPVX() is actually a pointer.
6965            This cures the (very real) symptoms of RT 69422, but I'm not actually
6966            sure whether we should even be caching the results of UTF-8
6967            operations on overloading, given that nothing stops overloading
6968            returning a different value every time it's called.  */
6969         const U8 *start = (const U8 *) SvPVX_const(sv);
6970         const STRLEN realutf8 = utf8_length(start, start + byte);
6971
6972         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6973                                    sv);
6974     }
6975
6976     /* Cache is held with the later position first, to simplify the code
6977        that deals with unbounded ends.  */
6978        
6979     ASSERT_UTF8_CACHE(cache);
6980     if (cache[1] == 0) {
6981         /* Cache is totally empty  */
6982         cache[0] = utf8;
6983         cache[1] = byte;
6984     } else if (cache[3] == 0) {
6985         if (byte > cache[1]) {
6986             /* New one is larger, so goes first.  */
6987             cache[2] = cache[0];
6988             cache[3] = cache[1];
6989             cache[0] = utf8;
6990             cache[1] = byte;
6991         } else {
6992             cache[2] = utf8;
6993             cache[3] = byte;
6994         }
6995     } else {
6996 #define THREEWAY_SQUARE(a,b,c,d) \
6997             ((float)((d) - (c))) * ((float)((d) - (c))) \
6998             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6999                + ((float)((b) - (a))) * ((float)((b) - (a)))
7000
7001         /* Cache has 2 slots in use, and we know three potential pairs.
7002            Keep the two that give the lowest RMS distance. Do the
7003            calculation in bytes simply because we always know the byte
7004            length.  squareroot has the same ordering as the positive value,
7005            so don't bother with the actual square root.  */
7006         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
7007         if (byte > cache[1]) {
7008             /* New position is after the existing pair of pairs.  */
7009             const float keep_earlier
7010                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7011             const float keep_later
7012                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7013
7014             if (keep_later < keep_earlier) {
7015                 if (keep_later < existing) {
7016                     cache[2] = cache[0];
7017                     cache[3] = cache[1];
7018                     cache[0] = utf8;
7019                     cache[1] = byte;
7020                 }
7021             }
7022             else {
7023                 if (keep_earlier < existing) {
7024                     cache[0] = utf8;
7025                     cache[1] = byte;
7026                 }
7027             }
7028         }
7029         else if (byte > cache[3]) {
7030             /* New position is between the existing pair of pairs.  */
7031             const float keep_earlier
7032                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7033             const float keep_later
7034                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7035
7036             if (keep_later < keep_earlier) {
7037                 if (keep_later < existing) {
7038                     cache[2] = utf8;
7039                     cache[3] = byte;
7040                 }
7041             }
7042             else {
7043                 if (keep_earlier < existing) {
7044                     cache[0] = utf8;
7045                     cache[1] = byte;
7046                 }
7047             }
7048         }
7049         else {
7050             /* New position is before the existing pair of pairs.  */
7051             const float keep_earlier
7052                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7053             const float keep_later
7054                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7055
7056             if (keep_later < keep_earlier) {
7057                 if (keep_later < existing) {
7058                     cache[2] = utf8;
7059                     cache[3] = byte;
7060                 }
7061             }
7062             else {
7063                 if (keep_earlier < existing) {
7064                     cache[0] = cache[2];
7065                     cache[1] = cache[3];
7066                     cache[2] = utf8;
7067                     cache[3] = byte;
7068                 }
7069             }
7070         }
7071     }
7072     ASSERT_UTF8_CACHE(cache);
7073 }
7074
7075 /* We already know all of the way, now we may be able to walk back.  The same
7076    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7077    backward is half the speed of walking forward. */
7078 static STRLEN
7079 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7080                     const U8 *end, STRLEN endu)
7081 {
7082     const STRLEN forw = target - s;
7083     STRLEN backw = end - target;
7084
7085     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7086
7087     if (forw < 2 * backw) {
7088         return utf8_length(s, target);
7089     }
7090
7091     while (end > target) {
7092         end--;
7093         while (UTF8_IS_CONTINUATION(*end)) {
7094             end--;
7095         }
7096         endu--;
7097     }
7098     return endu;
7099 }
7100
7101 /*
7102 =for apidoc sv_pos_b2u
7103
7104 Converts the value pointed to by offsetp from a count of bytes from the
7105 start of the string, to a count of the equivalent number of UTF-8 chars.
7106 Handles magic and type coercion.
7107
7108 =cut
7109 */
7110
7111 /*
7112  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7113  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7114  * byte offsets.
7115  *
7116  */
7117 void
7118 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
7119 {
7120     const U8* s;
7121     const STRLEN byte = *offsetp;
7122     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7123     STRLEN blen;
7124     MAGIC* mg = NULL;
7125     const U8* send;
7126     bool found = FALSE;
7127
7128     PERL_ARGS_ASSERT_SV_POS_B2U;
7129
7130     if (!sv)
7131         return;
7132
7133     s = (const U8*)SvPV_const(sv, blen);
7134
7135     if (blen < byte)
7136         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7137                    ", byte=%"UVuf, (UV)blen, (UV)byte);
7138
7139     send = s + byte;
7140
7141     if (!SvREADONLY(sv)
7142         && PL_utf8cache
7143         && SvTYPE(sv) >= SVt_PVMG
7144         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7145     {
7146         if (mg->mg_ptr) {
7147             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7148             if (cache[1] == byte) {
7149                 /* An exact match. */
7150                 *offsetp = cache[0];
7151                 return;
7152             }
7153             if (cache[3] == byte) {
7154                 /* An exact match. */
7155                 *offsetp = cache[2];
7156                 return;
7157             }
7158
7159             if (cache[1] < byte) {
7160                 /* We already know part of the way. */
7161                 if (mg->mg_len != -1) {
7162                     /* Actually, we know the end too.  */
7163                     len = cache[0]
7164                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7165                                               s + blen, mg->mg_len - cache[0]);
7166                 } else {
7167                     len = cache[0] + utf8_length(s + cache[1], send);
7168                 }
7169             }
7170             else if (cache[3] < byte) {
7171                 /* We're between the two cached pairs, so we do the calculation
7172                    offset by the byte/utf-8 positions for the earlier pair,
7173                    then add the utf-8 characters from the string start to
7174                    there.  */
7175                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7176                                           s + cache[1], cache[0] - cache[2])
7177                     + cache[2];
7178
7179             }
7180             else { /* cache[3] > byte */
7181                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7182                                           cache[2]);
7183
7184             }
7185             ASSERT_UTF8_CACHE(cache);
7186             found = TRUE;
7187         } else if (mg->mg_len != -1) {
7188             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7189             found = TRUE;
7190         }
7191     }
7192     if (!found || PL_utf8cache < 0) {
7193         const STRLEN real_len = utf8_length(s, send);
7194
7195         if (found && PL_utf8cache < 0)
7196             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7197         len = real_len;
7198     }
7199     *offsetp = len;
7200
7201     if (PL_utf8cache) {
7202         if (blen == byte)
7203             utf8_mg_len_cache_update(sv, &mg, len);
7204         else
7205             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7206     }
7207 }
7208
7209 static void
7210 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7211                              STRLEN real, SV *const sv)
7212 {
7213     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7214
7215     /* As this is debugging only code, save space by keeping this test here,
7216        rather than inlining it in all the callers.  */
7217     if (from_cache == real)
7218         return;
7219
7220     /* Need to turn the assertions off otherwise we may recurse infinitely
7221        while printing error messages.  */
7222     SAVEI8(PL_utf8cache);
7223     PL_utf8cache = 0;
7224     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7225                func, (UV) from_cache, (UV) real, SVfARG(sv));
7226 }
7227
7228 /*
7229 =for apidoc sv_eq
7230
7231 Returns a boolean indicating whether the strings in the two SVs are
7232 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7233 coerce its args to strings if necessary.
7234
7235 =for apidoc sv_eq_flags
7236
7237 Returns a boolean indicating whether the strings in the two SVs are
7238 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7239 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7240
7241 =cut
7242 */
7243
7244 I32
7245 Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
7246 {
7247     dVAR;
7248     const char *pv1;
7249     STRLEN cur1;
7250     const char *pv2;
7251     STRLEN cur2;
7252     I32  eq     = 0;
7253     SV* svrecode = NULL;
7254
7255     if (!sv1) {
7256         pv1 = "";
7257         cur1 = 0;
7258     }
7259     else {
7260         /* if pv1 and pv2 are the same, second SvPV_const call may
7261          * invalidate pv1 (if we are handling magic), so we may need to
7262          * make a copy */
7263         if (sv1 == sv2 && flags & SV_GMAGIC
7264          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7265             pv1 = SvPV_const(sv1, cur1);
7266             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7267         }
7268         pv1 = SvPV_flags_const(sv1, cur1, flags);
7269     }
7270
7271     if (!sv2){
7272         pv2 = "";
7273         cur2 = 0;
7274     }
7275     else
7276         pv2 = SvPV_flags_const(sv2, cur2, flags);
7277
7278     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7279         /* Differing utf8ness.
7280          * Do not UTF8size the comparands as a side-effect. */
7281          if (PL_encoding) {
7282               if (SvUTF8(sv1)) {
7283                    svrecode = newSVpvn(pv2, cur2);
7284                    sv_recode_to_utf8(svrecode, PL_encoding);
7285                    pv2 = SvPV_const(svrecode, cur2);
7286               }
7287               else {
7288                    svrecode = newSVpvn(pv1, cur1);
7289                    sv_recode_to_utf8(svrecode, PL_encoding);
7290                    pv1 = SvPV_const(svrecode, cur1);
7291               }
7292               /* Now both are in UTF-8. */
7293               if (cur1 != cur2) {
7294                    SvREFCNT_dec(svrecode);
7295                    return FALSE;
7296               }
7297          }
7298          else {
7299               if (SvUTF8(sv1)) {
7300                   /* sv1 is the UTF-8 one  */
7301                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7302                                         (const U8*)pv1, cur1) == 0;
7303               }
7304               else {
7305                   /* sv2 is the UTF-8 one  */
7306                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7307                                         (const U8*)pv2, cur2) == 0;
7308               }
7309          }
7310     }
7311
7312     if (cur1 == cur2)
7313         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7314         
7315     SvREFCNT_dec(svrecode);
7316
7317     return eq;
7318 }
7319
7320 /*
7321 =for apidoc sv_cmp
7322
7323 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7324 string in C<sv1> is less than, equal to, or greater than the string in
7325 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7326 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7327
7328 =for apidoc sv_cmp_flags
7329
7330 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7331 string in C<sv1> is less than, equal to, or greater than the string in
7332 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7333 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7334 also C<sv_cmp_locale_flags>.
7335
7336 =cut
7337 */
7338
7339 I32
7340 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
7341 {
7342     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7343 }
7344
7345 I32
7346 Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7347                   const U32 flags)
7348 {
7349     dVAR;
7350     STRLEN cur1, cur2;
7351     const char *pv1, *pv2;
7352     char *tpv = NULL;
7353     I32  cmp;
7354     SV *svrecode = NULL;
7355
7356     if (!sv1) {
7357         pv1 = "";
7358         cur1 = 0;
7359     }
7360     else
7361         pv1 = SvPV_flags_const(sv1, cur1, flags);
7362
7363     if (!sv2) {
7364         pv2 = "";
7365         cur2 = 0;
7366     }
7367     else
7368         pv2 = SvPV_flags_const(sv2, cur2, flags);
7369
7370     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7371         /* Differing utf8ness.
7372          * Do not UTF8size the comparands as a side-effect. */
7373         if (SvUTF8(sv1)) {
7374             if (PL_encoding) {
7375                  svrecode = newSVpvn(pv2, cur2);
7376                  sv_recode_to_utf8(svrecode, PL_encoding);
7377                  pv2 = SvPV_const(svrecode, cur2);
7378             }
7379             else {
7380                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7381                                                    (const U8*)pv1, cur1);
7382                 return retval ? retval < 0 ? -1 : +1 : 0;
7383             }
7384         }
7385         else {
7386             if (PL_encoding) {
7387                  svrecode = newSVpvn(pv1, cur1);
7388                  sv_recode_to_utf8(svrecode, PL_encoding);
7389                  pv1 = SvPV_const(svrecode, cur1);
7390             }
7391             else {
7392                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7393                                                   (const U8*)pv2, cur2);
7394                 return retval ? retval < 0 ? -1 : +1 : 0;
7395             }
7396         }
7397     }
7398
7399     if (!cur1) {
7400         cmp = cur2 ? -1 : 0;
7401     } else if (!cur2) {
7402         cmp = 1;
7403     } else {
7404         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7405
7406         if (retval) {
7407             cmp = retval < 0 ? -1 : 1;
7408         } else if (cur1 == cur2) {
7409             cmp = 0;
7410         } else {
7411             cmp = cur1 < cur2 ? -1 : 1;
7412         }
7413     }
7414
7415     SvREFCNT_dec(svrecode);
7416     if (tpv)
7417         Safefree(tpv);
7418
7419     return cmp;
7420 }
7421
7422 /*
7423 =for apidoc sv_cmp_locale
7424
7425 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7426 'use bytes' aware, handles get magic, and will coerce its args to strings
7427 if necessary.  See also C<sv_cmp>.
7428
7429 =for apidoc sv_cmp_locale_flags
7430
7431 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7432 'use bytes' aware and will coerce its args to strings if necessary.  If the
7433 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7434
7435 =cut
7436 */
7437
7438 I32
7439 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
7440 {
7441     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7442 }
7443
7444 I32
7445 Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7446                          const U32 flags)
7447 {
7448     dVAR;
7449 #ifdef USE_LOCALE_COLLATE
7450
7451     char *pv1, *pv2;
7452     STRLEN len1, len2;
7453     I32 retval;
7454
7455     if (PL_collation_standard)
7456         goto raw_compare;
7457
7458     len1 = 0;
7459     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7460     len2 = 0;
7461     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7462
7463     if (!pv1 || !len1) {
7464         if (pv2 && len2)
7465             return -1;
7466         else
7467             goto raw_compare;
7468     }
7469     else {
7470         if (!pv2 || !len2)
7471             return 1;
7472     }
7473
7474     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7475
7476     if (retval)
7477         return retval < 0 ? -1 : 1;
7478
7479     /*
7480      * When the result of collation is equality, that doesn't mean
7481      * that there are no differences -- some locales exclude some
7482      * characters from consideration.  So to avoid false equalities,
7483      * we use the raw string as a tiebreaker.
7484      */
7485
7486   raw_compare:
7487     /*FALLTHROUGH*/
7488
7489 #endif /* USE_LOCALE_COLLATE */
7490
7491     return sv_cmp(sv1, sv2);
7492 }
7493
7494
7495 #ifdef USE_LOCALE_COLLATE
7496
7497 /*
7498 =for apidoc sv_collxfrm
7499
7500 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7501 C<sv_collxfrm_flags>.
7502
7503 =for apidoc sv_collxfrm_flags
7504
7505 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7506 flags contain SV_GMAGIC, it handles get-magic.
7507
7508 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7509 scalar data of the variable, but transformed to such a format that a normal
7510 memory comparison can be used to compare the data according to the locale
7511 settings.
7512
7513 =cut
7514 */
7515
7516 char *
7517 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7518 {
7519     dVAR;
7520     MAGIC *mg;
7521
7522     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7523
7524     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7525     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7526         const char *s;
7527         char *xf;
7528         STRLEN len, xlen;
7529
7530         if (mg)
7531             Safefree(mg->mg_ptr);
7532         s = SvPV_flags_const(sv, len, flags);
7533         if ((xf = mem_collxfrm(s, len, &xlen))) {
7534             if (! mg) {
7535 #ifdef PERL_OLD_COPY_ON_WRITE
7536                 if (SvIsCOW(sv))
7537                     sv_force_normal_flags(sv, 0);
7538 #endif
7539                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7540                                  0, 0);
7541                 assert(mg);
7542             }
7543             mg->mg_ptr = xf;
7544             mg->mg_len = xlen;
7545         }
7546         else {
7547             if (mg) {
7548                 mg->mg_ptr = NULL;
7549                 mg->mg_len = -1;
7550             }
7551         }
7552     }
7553     if (mg && mg->mg_ptr) {
7554         *nxp = mg->mg_len;
7555         return mg->mg_ptr + sizeof(PL_collation_ix);
7556     }
7557     else {
7558         *nxp = 0;
7559         return NULL;
7560     }
7561 }
7562
7563 #endif /* USE_LOCALE_COLLATE */
7564
7565 static char *
7566 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7567 {
7568     SV * const tsv = newSV(0);
7569     ENTER;
7570     SAVEFREESV(tsv);
7571     sv_gets(tsv, fp, 0);
7572     sv_utf8_upgrade_nomg(tsv);
7573     SvCUR_set(sv,append);
7574     sv_catsv(sv,tsv);
7575     LEAVE;
7576     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7577 }
7578
7579 static char *
7580 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7581 {
7582     I32 bytesread;
7583     const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7584       /* Grab the size of the record we're getting */
7585     char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7586 #ifdef VMS
7587     int fd;
7588 #endif
7589
7590     /* Go yank in */
7591 #ifdef VMS
7592     /* VMS wants read instead of fread, because fread doesn't respect */
7593     /* RMS record boundaries. This is not necessarily a good thing to be */
7594     /* doing, but we've got no other real choice - except avoid stdio
7595        as implementation - perhaps write a :vms layer ?
7596     */
7597     fd = PerlIO_fileno(fp);
7598     if (fd != -1) {
7599         bytesread = PerlLIO_read(fd, buffer, recsize);
7600     }
7601     else /* in-memory file from PerlIO::Scalar */
7602 #endif
7603     {
7604         bytesread = PerlIO_read(fp, buffer, recsize);
7605     }
7606
7607     if (bytesread < 0)
7608         bytesread = 0;
7609     SvCUR_set(sv, bytesread + append);
7610     buffer[bytesread] = '\0';
7611     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7612 }
7613
7614 /*
7615 =for apidoc sv_gets
7616
7617 Get a line from the filehandle and store it into the SV, optionally
7618 appending to the currently-stored string.
7619
7620 =cut
7621 */
7622
7623 char *
7624 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
7625 {
7626     dVAR;
7627     const char *rsptr;
7628     STRLEN rslen;
7629     register STDCHAR rslast;
7630     register STDCHAR *bp;
7631     register I32 cnt;
7632     I32 i = 0;
7633     I32 rspara = 0;
7634
7635     PERL_ARGS_ASSERT_SV_GETS;
7636
7637     if (SvTHINKFIRST(sv))
7638         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7639     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7640        from <>.
7641        However, perlbench says it's slower, because the existing swipe code
7642        is faster than copy on write.
7643        Swings and roundabouts.  */
7644     SvUPGRADE(sv, SVt_PV);
7645
7646     if (append) {
7647         if (PerlIO_isutf8(fp)) {
7648             if (!SvUTF8(sv)) {
7649                 sv_utf8_upgrade_nomg(sv);
7650                 sv_pos_u2b(sv,&append,0);
7651             }
7652         } else if (SvUTF8(sv)) {
7653             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7654         }
7655     }
7656
7657     SvPOK_only(sv);
7658     if (!append) {
7659         SvCUR_set(sv,0);
7660     }
7661     if (PerlIO_isutf8(fp))
7662         SvUTF8_on(sv);
7663
7664     if (IN_PERL_COMPILETIME) {
7665         /* we always read code in line mode */
7666         rsptr = "\n";
7667         rslen = 1;
7668     }
7669     else if (RsSNARF(PL_rs)) {
7670         /* If it is a regular disk file use size from stat() as estimate
7671            of amount we are going to read -- may result in mallocing
7672            more memory than we really need if the layers below reduce
7673            the size we read (e.g. CRLF or a gzip layer).
7674          */
7675         Stat_t st;
7676         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7677             const Off_t offset = PerlIO_tell(fp);
7678             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7679                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7680             }
7681         }
7682         rsptr = NULL;
7683         rslen = 0;
7684     }
7685     else if (RsRECORD(PL_rs)) {
7686         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7687     }
7688     else if (RsPARA(PL_rs)) {
7689         rsptr = "\n\n";
7690         rslen = 2;
7691         rspara = 1;
7692     }
7693     else {
7694         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7695         if (PerlIO_isutf8(fp)) {
7696             rsptr = SvPVutf8(PL_rs, rslen);
7697         }
7698         else {
7699             if (SvUTF8(PL_rs)) {
7700                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7701                     Perl_croak(aTHX_ "Wide character in $/");
7702                 }
7703             }
7704             rsptr = SvPV_const(PL_rs, rslen);
7705         }
7706     }
7707
7708     rslast = rslen ? rsptr[rslen - 1] : '\0';
7709
7710     if (rspara) {               /* have to do this both before and after */
7711         do {                    /* to make sure file boundaries work right */
7712             if (PerlIO_eof(fp))
7713                 return 0;
7714             i = PerlIO_getc(fp);
7715             if (i != '\n') {
7716                 if (i == -1)
7717                     return 0;
7718                 PerlIO_ungetc(fp,i);
7719                 break;
7720             }
7721         } while (i != EOF);
7722     }
7723
7724     /* See if we know enough about I/O mechanism to cheat it ! */
7725
7726     /* This used to be #ifdef test - it is made run-time test for ease
7727        of abstracting out stdio interface. One call should be cheap
7728        enough here - and may even be a macro allowing compile
7729        time optimization.
7730      */
7731
7732     if (PerlIO_fast_gets(fp)) {
7733
7734     /*
7735      * We're going to steal some values from the stdio struct
7736      * and put EVERYTHING in the innermost loop into registers.
7737      */
7738     register STDCHAR *ptr;
7739     STRLEN bpx;
7740     I32 shortbuffered;
7741
7742 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7743     /* An ungetc()d char is handled separately from the regular
7744      * buffer, so we getc() it back out and stuff it in the buffer.
7745      */
7746     i = PerlIO_getc(fp);
7747     if (i == EOF) return 0;
7748     *(--((*fp)->_ptr)) = (unsigned char) i;
7749     (*fp)->_cnt++;
7750 #endif
7751
7752     /* Here is some breathtakingly efficient cheating */
7753
7754     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7755     /* make sure we have the room */
7756     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7757         /* Not room for all of it
7758            if we are looking for a separator and room for some
7759          */
7760         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7761             /* just process what we have room for */
7762             shortbuffered = cnt - SvLEN(sv) + append + 1;
7763             cnt -= shortbuffered;
7764         }
7765         else {
7766             shortbuffered = 0;
7767             /* remember that cnt can be negative */
7768             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7769         }
7770     }
7771     else
7772         shortbuffered = 0;
7773     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7774     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7775     DEBUG_P(PerlIO_printf(Perl_debug_log,
7776         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7777     DEBUG_P(PerlIO_printf(Perl_debug_log,
7778         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7779                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7780                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7781     for (;;) {
7782       screamer:
7783         if (cnt > 0) {
7784             if (rslen) {
7785                 while (cnt > 0) {                    /* this     |  eat */
7786                     cnt--;
7787                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7788                         goto thats_all_folks;        /* screams  |  sed :-) */
7789                 }
7790             }
7791             else {
7792                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7793                 bp += cnt;                           /* screams  |  dust */
7794                 ptr += cnt;                          /* louder   |  sed :-) */
7795                 cnt = 0;
7796                 assert (!shortbuffered);
7797                 goto cannot_be_shortbuffered;
7798             }
7799         }
7800         
7801         if (shortbuffered) {            /* oh well, must extend */
7802             cnt = shortbuffered;
7803             shortbuffered = 0;
7804             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7805             SvCUR_set(sv, bpx);
7806             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7807             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7808             continue;
7809         }
7810
7811     cannot_be_shortbuffered:
7812         DEBUG_P(PerlIO_printf(Perl_debug_log,
7813                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7814                               PTR2UV(ptr),(long)cnt));
7815         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7816
7817         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7818             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7819             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7820             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7821
7822         /* This used to call 'filbuf' in stdio form, but as that behaves like
7823            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7824            another abstraction.  */
7825         i   = PerlIO_getc(fp);          /* get more characters */
7826
7827         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7828             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7829             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7830             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7831
7832         cnt = PerlIO_get_cnt(fp);
7833         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7834         DEBUG_P(PerlIO_printf(Perl_debug_log,
7835             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7836
7837         if (i == EOF)                   /* all done for ever? */
7838             goto thats_really_all_folks;
7839
7840         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7841         SvCUR_set(sv, bpx);
7842         SvGROW(sv, bpx + cnt + 2);
7843         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7844
7845         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7846
7847         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7848             goto thats_all_folks;
7849     }
7850
7851 thats_all_folks:
7852     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7853           memNE((char*)bp - rslen, rsptr, rslen))
7854         goto screamer;                          /* go back to the fray */
7855 thats_really_all_folks:
7856     if (shortbuffered)
7857         cnt += shortbuffered;
7858         DEBUG_P(PerlIO_printf(Perl_debug_log,
7859             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7860     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7861     DEBUG_P(PerlIO_printf(Perl_debug_log,
7862         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7863         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7864         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7865     *bp = '\0';
7866     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7867     DEBUG_P(PerlIO_printf(Perl_debug_log,
7868         "Screamer: done, len=%ld, string=|%.*s|\n",
7869         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7870     }
7871    else
7872     {
7873        /*The big, slow, and stupid way. */
7874 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7875         STDCHAR *buf = NULL;
7876         Newx(buf, 8192, STDCHAR);
7877         assert(buf);
7878 #else
7879         STDCHAR buf[8192];
7880 #endif
7881
7882 screamer2:
7883         if (rslen) {
7884             register const STDCHAR * const bpe = buf + sizeof(buf);
7885             bp = buf;
7886             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7887                 ; /* keep reading */
7888             cnt = bp - buf;
7889         }
7890         else {
7891             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7892             /* Accommodate broken VAXC compiler, which applies U8 cast to
7893              * both args of ?: operator, causing EOF to change into 255
7894              */
7895             if (cnt > 0)
7896                  i = (U8)buf[cnt - 1];
7897             else
7898                  i = EOF;
7899         }
7900
7901         if (cnt < 0)
7902             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7903         if (append)
7904              sv_catpvn(sv, (char *) buf, cnt);
7905         else
7906              sv_setpvn(sv, (char *) buf, cnt);
7907
7908         if (i != EOF &&                 /* joy */
7909             (!rslen ||
7910              SvCUR(sv) < rslen ||
7911              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7912         {
7913             append = -1;
7914             /*
7915              * If we're reading from a TTY and we get a short read,
7916              * indicating that the user hit his EOF character, we need
7917              * to notice it now, because if we try to read from the TTY
7918              * again, the EOF condition will disappear.
7919              *
7920              * The comparison of cnt to sizeof(buf) is an optimization
7921              * that prevents unnecessary calls to feof().
7922              *
7923              * - jik 9/25/96
7924              */
7925             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7926                 goto screamer2;
7927         }
7928
7929 #ifdef USE_HEAP_INSTEAD_OF_STACK
7930         Safefree(buf);
7931 #endif
7932     }
7933
7934     if (rspara) {               /* have to do this both before and after */
7935         while (i != EOF) {      /* to make sure file boundaries work right */
7936             i = PerlIO_getc(fp);
7937             if (i != '\n') {
7938                 PerlIO_ungetc(fp,i);
7939                 break;
7940             }
7941         }
7942     }
7943
7944     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7945 }
7946
7947 /*
7948 =for apidoc sv_inc
7949
7950 Auto-increment of the value in the SV, doing string to numeric conversion
7951 if necessary.  Handles 'get' magic and operator overloading.
7952
7953 =cut
7954 */
7955
7956 void
7957 Perl_sv_inc(pTHX_ register SV *const sv)
7958 {
7959     if (!sv)
7960         return;
7961     SvGETMAGIC(sv);
7962     sv_inc_nomg(sv);
7963 }
7964
7965 /*
7966 =for apidoc sv_inc_nomg
7967
7968 Auto-increment of the value in the SV, doing string to numeric conversion
7969 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
7970
7971 =cut
7972 */
7973
7974 void
7975 Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7976 {
7977     dVAR;
7978     register char *d;
7979     int flags;
7980
7981     if (!sv)
7982         return;
7983     if (SvTHINKFIRST(sv)) {
7984         if (SvIsCOW(sv) || isGV_with_GP(sv))
7985             sv_force_normal_flags(sv, 0);
7986         if (SvREADONLY(sv)) {
7987             if (IN_PERL_RUNTIME)
7988                 Perl_croak_no_modify(aTHX);
7989         }
7990         if (SvROK(sv)) {
7991             IV i;
7992             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
7993                 return;
7994             i = PTR2IV(SvRV(sv));
7995             sv_unref(sv);
7996             sv_setiv(sv, i);
7997         }
7998     }
7999     flags = SvFLAGS(sv);
8000     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8001         /* It's (privately or publicly) a float, but not tested as an
8002            integer, so test it to see. */
8003         (void) SvIV(sv);
8004         flags = SvFLAGS(sv);
8005     }
8006     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8007         /* It's publicly an integer, or privately an integer-not-float */
8008 #ifdef PERL_PRESERVE_IVUV
8009       oops_its_int:
8010 #endif
8011         if (SvIsUV(sv)) {
8012             if (SvUVX(sv) == UV_MAX)
8013                 sv_setnv(sv, UV_MAX_P1);
8014             else
8015                 (void)SvIOK_only_UV(sv);
8016                 SvUV_set(sv, SvUVX(sv) + 1);
8017         } else {
8018             if (SvIVX(sv) == IV_MAX)
8019                 sv_setuv(sv, (UV)IV_MAX + 1);
8020             else {
8021                 (void)SvIOK_only(sv);
8022                 SvIV_set(sv, SvIVX(sv) + 1);
8023             }   
8024         }
8025         return;
8026     }
8027     if (flags & SVp_NOK) {
8028         const NV was = SvNVX(sv);
8029         if (NV_OVERFLOWS_INTEGERS_AT &&
8030             was >= NV_OVERFLOWS_INTEGERS_AT) {
8031             /* diag_listed_as: Lost precision when %s %f by 1 */
8032             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8033                            "Lost precision when incrementing %" NVff " by 1",
8034                            was);
8035         }
8036         (void)SvNOK_only(sv);
8037         SvNV_set(sv, was + 1.0);
8038         return;
8039     }
8040
8041     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8042         if ((flags & SVTYPEMASK) < SVt_PVIV)
8043             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8044         (void)SvIOK_only(sv);
8045         SvIV_set(sv, 1);
8046         return;
8047     }
8048     d = SvPVX(sv);
8049     while (isALPHA(*d)) d++;
8050     while (isDIGIT(*d)) d++;
8051     if (d < SvEND(sv)) {
8052 #ifdef PERL_PRESERVE_IVUV
8053         /* Got to punt this as an integer if needs be, but we don't issue
8054            warnings. Probably ought to make the sv_iv_please() that does
8055            the conversion if possible, and silently.  */
8056         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8057         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8058             /* Need to try really hard to see if it's an integer.
8059                9.22337203685478e+18 is an integer.
8060                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8061                so $a="9.22337203685478e+18"; $a+0; $a++
8062                needs to be the same as $a="9.22337203685478e+18"; $a++
8063                or we go insane. */
8064         
8065             (void) sv_2iv(sv);
8066             if (SvIOK(sv))
8067                 goto oops_its_int;
8068
8069             /* sv_2iv *should* have made this an NV */
8070             if (flags & SVp_NOK) {
8071                 (void)SvNOK_only(sv);
8072                 SvNV_set(sv, SvNVX(sv) + 1.0);
8073                 return;
8074             }
8075             /* I don't think we can get here. Maybe I should assert this
8076                And if we do get here I suspect that sv_setnv will croak. NWC
8077                Fall through. */
8078 #if defined(USE_LONG_DOUBLE)
8079             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",
8080                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8081 #else
8082             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8083                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8084 #endif
8085         }
8086 #endif /* PERL_PRESERVE_IVUV */
8087         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8088         return;
8089     }
8090     d--;
8091     while (d >= SvPVX_const(sv)) {
8092         if (isDIGIT(*d)) {
8093             if (++*d <= '9')
8094                 return;
8095             *(d--) = '0';
8096         }
8097         else {
8098 #ifdef EBCDIC
8099             /* MKS: The original code here died if letters weren't consecutive.
8100              * at least it didn't have to worry about non-C locales.  The
8101              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8102              * arranged in order (although not consecutively) and that only
8103              * [A-Za-z] are accepted by isALPHA in the C locale.
8104              */
8105             if (*d != 'z' && *d != 'Z') {
8106                 do { ++*d; } while (!isALPHA(*d));
8107                 return;
8108             }
8109             *(d--) -= 'z' - 'a';
8110 #else
8111             ++*d;
8112             if (isALPHA(*d))
8113                 return;
8114             *(d--) -= 'z' - 'a' + 1;
8115 #endif
8116         }
8117     }
8118     /* oh,oh, the number grew */
8119     SvGROW(sv, SvCUR(sv) + 2);
8120     SvCUR_set(sv, SvCUR(sv) + 1);
8121     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8122         *d = d[-1];
8123     if (isDIGIT(d[1]))
8124         *d = '1';
8125     else
8126         *d = d[1];
8127 }
8128
8129 /*
8130 =for apidoc sv_dec
8131
8132 Auto-decrement of the value in the SV, doing string to numeric conversion
8133 if necessary.  Handles 'get' magic and operator overloading.
8134
8135 =cut
8136 */
8137
8138 void
8139 Perl_sv_dec(pTHX_ register SV *const sv)
8140 {
8141     dVAR;
8142     if (!sv)
8143         return;
8144     SvGETMAGIC(sv);
8145     sv_dec_nomg(sv);
8146 }
8147
8148 /*
8149 =for apidoc sv_dec_nomg
8150
8151 Auto-decrement of the value in the SV, doing string to numeric conversion
8152 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8153
8154 =cut
8155 */
8156
8157 void
8158 Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8159 {
8160     dVAR;
8161     int flags;
8162
8163     if (!sv)
8164         return;
8165     if (SvTHINKFIRST(sv)) {
8166         if (SvIsCOW(sv) || isGV_with_GP(sv))
8167             sv_force_normal_flags(sv, 0);
8168         if (SvREADONLY(sv)) {
8169             if (IN_PERL_RUNTIME)
8170                 Perl_croak_no_modify(aTHX);
8171         }
8172         if (SvROK(sv)) {
8173             IV i;
8174             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8175                 return;
8176             i = PTR2IV(SvRV(sv));
8177             sv_unref(sv);
8178             sv_setiv(sv, i);
8179         }
8180     }
8181     /* Unlike sv_inc we don't have to worry about string-never-numbers
8182        and keeping them magic. But we mustn't warn on punting */
8183     flags = SvFLAGS(sv);
8184     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8185         /* It's publicly an integer, or privately an integer-not-float */
8186 #ifdef PERL_PRESERVE_IVUV
8187       oops_its_int:
8188 #endif
8189         if (SvIsUV(sv)) {
8190             if (SvUVX(sv) == 0) {
8191                 (void)SvIOK_only(sv);
8192                 SvIV_set(sv, -1);
8193             }
8194             else {
8195                 (void)SvIOK_only_UV(sv);
8196                 SvUV_set(sv, SvUVX(sv) - 1);
8197             }   
8198         } else {
8199             if (SvIVX(sv) == IV_MIN) {
8200                 sv_setnv(sv, (NV)IV_MIN);
8201                 goto oops_its_num;
8202             }
8203             else {
8204                 (void)SvIOK_only(sv);
8205                 SvIV_set(sv, SvIVX(sv) - 1);
8206             }   
8207         }
8208         return;
8209     }
8210     if (flags & SVp_NOK) {
8211     oops_its_num:
8212         {
8213             const NV was = SvNVX(sv);
8214             if (NV_OVERFLOWS_INTEGERS_AT &&
8215                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8216                 /* diag_listed_as: Lost precision when %s %f by 1 */
8217                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8218                                "Lost precision when decrementing %" NVff " by 1",
8219                                was);
8220             }
8221             (void)SvNOK_only(sv);
8222             SvNV_set(sv, was - 1.0);
8223             return;
8224         }
8225     }
8226     if (!(flags & SVp_POK)) {
8227         if ((flags & SVTYPEMASK) < SVt_PVIV)
8228             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8229         SvIV_set(sv, -1);
8230         (void)SvIOK_only(sv);
8231         return;
8232     }
8233 #ifdef PERL_PRESERVE_IVUV
8234     {
8235         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8236         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8237             /* Need to try really hard to see if it's an integer.
8238                9.22337203685478e+18 is an integer.
8239                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8240                so $a="9.22337203685478e+18"; $a+0; $a--
8241                needs to be the same as $a="9.22337203685478e+18"; $a--
8242                or we go insane. */
8243         
8244             (void) sv_2iv(sv);
8245             if (SvIOK(sv))
8246                 goto oops_its_int;
8247
8248             /* sv_2iv *should* have made this an NV */
8249             if (flags & SVp_NOK) {
8250                 (void)SvNOK_only(sv);
8251                 SvNV_set(sv, SvNVX(sv) - 1.0);
8252                 return;
8253             }
8254             /* I don't think we can get here. Maybe I should assert this
8255                And if we do get here I suspect that sv_setnv will croak. NWC
8256                Fall through. */
8257 #if defined(USE_LONG_DOUBLE)
8258             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",
8259                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8260 #else
8261             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8262                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8263 #endif
8264         }
8265     }
8266 #endif /* PERL_PRESERVE_IVUV */
8267     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8268 }
8269
8270 /* this define is used to eliminate a chunk of duplicated but shared logic
8271  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8272  * used anywhere but here - yves
8273  */
8274 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8275     STMT_START {      \
8276         EXTEND_MORTAL(1); \
8277         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8278     } STMT_END
8279
8280 /*
8281 =for apidoc sv_mortalcopy
8282
8283 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8284 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8285 explicit call to FREETMPS, or by an implicit call at places such as
8286 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8287
8288 =cut
8289 */
8290
8291 /* Make a string that will exist for the duration of the expression
8292  * evaluation.  Actually, it may have to last longer than that, but
8293  * hopefully we won't free it until it has been assigned to a
8294  * permanent location. */
8295
8296 SV *
8297 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
8298 {
8299     dVAR;
8300     register SV *sv;
8301
8302     new_SV(sv);
8303     sv_setsv(sv,oldstr);
8304     PUSH_EXTEND_MORTAL__SV_C(sv);
8305     SvTEMP_on(sv);
8306     return sv;
8307 }
8308
8309 /*
8310 =for apidoc sv_newmortal
8311
8312 Creates a new null SV which is mortal.  The reference count of the SV is
8313 set to 1.  It will be destroyed "soon", either by an explicit call to
8314 FREETMPS, or by an implicit call at places such as statement boundaries.
8315 See also C<sv_mortalcopy> and C<sv_2mortal>.
8316
8317 =cut
8318 */
8319
8320 SV *
8321 Perl_sv_newmortal(pTHX)
8322 {
8323     dVAR;
8324     register SV *sv;
8325
8326     new_SV(sv);
8327     SvFLAGS(sv) = SVs_TEMP;
8328     PUSH_EXTEND_MORTAL__SV_C(sv);
8329     return sv;
8330 }
8331
8332
8333 /*
8334 =for apidoc newSVpvn_flags
8335
8336 Creates a new SV and copies a string into it.  The reference count for the
8337 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8338 string.  You are responsible for ensuring that the source string is at least
8339 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8340 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8341 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8342 returning.  If C<SVf_UTF8> is set, C<s>
8343 is considered to be in UTF-8 and the
8344 C<SVf_UTF8> flag will be set on the new SV.
8345 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8346
8347     #define newSVpvn_utf8(s, len, u)                    \
8348         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8349
8350 =cut
8351 */
8352
8353 SV *
8354 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8355 {
8356     dVAR;
8357     register SV *sv;
8358
8359     /* All the flags we don't support must be zero.
8360        And we're new code so I'm going to assert this from the start.  */
8361     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8362     new_SV(sv);
8363     sv_setpvn(sv,s,len);
8364
8365     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8366      * and do what it does ourselves here.
8367      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8368      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8369      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8370      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8371      */
8372
8373     SvFLAGS(sv) |= flags;
8374
8375     if(flags & SVs_TEMP){
8376         PUSH_EXTEND_MORTAL__SV_C(sv);
8377     }
8378
8379     return sv;
8380 }
8381
8382 /*
8383 =for apidoc sv_2mortal
8384
8385 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8386 by an explicit call to FREETMPS, or by an implicit call at places such as
8387 statement boundaries.  SvTEMP() is turned on which means that the SV's
8388 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8389 and C<sv_mortalcopy>.
8390
8391 =cut
8392 */
8393
8394 SV *
8395 Perl_sv_2mortal(pTHX_ register SV *const sv)
8396 {
8397     dVAR;
8398     if (!sv)
8399         return NULL;
8400     if (SvREADONLY(sv) && SvIMMORTAL(sv))
8401         return sv;
8402     PUSH_EXTEND_MORTAL__SV_C(sv);
8403     SvTEMP_on(sv);
8404     return sv;
8405 }
8406
8407 /*
8408 =for apidoc newSVpv
8409
8410 Creates a new SV and copies a string into it.  The reference count for the
8411 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8412 strlen().  For efficiency, consider using C<newSVpvn> instead.
8413
8414 =cut
8415 */
8416
8417 SV *
8418 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8419 {
8420     dVAR;
8421     register SV *sv;
8422
8423     new_SV(sv);
8424     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8425     return sv;
8426 }
8427
8428 /*
8429 =for apidoc newSVpvn
8430
8431 Creates a new SV and copies a buffer into it, which may contain NUL characters
8432 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8433 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8434 are responsible for ensuring that the source buffer is at least
8435 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8436 undefined.
8437
8438 =cut
8439 */
8440
8441 SV *
8442 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8443 {
8444     dVAR;
8445     register SV *sv;
8446
8447     new_SV(sv);
8448     sv_setpvn(sv,buffer,len);
8449     return sv;
8450 }
8451
8452 /*
8453 =for apidoc newSVhek
8454
8455 Creates a new SV from the hash key structure.  It will generate scalars that
8456 point to the shared string table where possible.  Returns a new (undefined)
8457 SV if the hek is NULL.
8458
8459 =cut
8460 */
8461
8462 SV *
8463 Perl_newSVhek(pTHX_ const HEK *const hek)
8464 {
8465     dVAR;
8466     if (!hek) {
8467         SV *sv;
8468
8469         new_SV(sv);
8470         return sv;
8471     }
8472
8473     if (HEK_LEN(hek) == HEf_SVKEY) {
8474         return newSVsv(*(SV**)HEK_KEY(hek));
8475     } else {
8476         const int flags = HEK_FLAGS(hek);
8477         if (flags & HVhek_WASUTF8) {
8478             /* Trouble :-)
8479                Andreas would like keys he put in as utf8 to come back as utf8
8480             */
8481             STRLEN utf8_len = HEK_LEN(hek);
8482             SV * const sv = newSV_type(SVt_PV);
8483             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8484             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8485             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8486             SvUTF8_on (sv);
8487             return sv;
8488         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
8489             /* We don't have a pointer to the hv, so we have to replicate the
8490                flag into every HEK. This hv is using custom a hasing
8491                algorithm. Hence we can't return a shared string scalar, as
8492                that would contain the (wrong) hash value, and might get passed
8493                into an hv routine with a regular hash.
8494                Similarly, a hash that isn't using shared hash keys has to have
8495                the flag in every key so that we know not to try to call
8496                share_hek_hek on it.  */
8497
8498             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8499             if (HEK_UTF8(hek))
8500                 SvUTF8_on (sv);
8501             return sv;
8502         }
8503         /* This will be overwhelminly the most common case.  */
8504         {
8505             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8506                more efficient than sharepvn().  */
8507             SV *sv;
8508
8509             new_SV(sv);
8510             sv_upgrade(sv, SVt_PV);
8511             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8512             SvCUR_set(sv, HEK_LEN(hek));
8513             SvLEN_set(sv, 0);
8514             SvREADONLY_on(sv);
8515             SvFAKE_on(sv);
8516             SvPOK_on(sv);
8517             if (HEK_UTF8(hek))
8518                 SvUTF8_on(sv);
8519             return sv;
8520         }
8521     }
8522 }
8523
8524 /*
8525 =for apidoc newSVpvn_share
8526
8527 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8528 table.  If the string does not already exist in the table, it is
8529 created first.  Turns on READONLY and FAKE.  If the C<hash> parameter
8530 is non-zero, that value is used; otherwise the hash is computed.
8531 The string's hash can later be retrieved from the SV
8532 with the C<SvSHARED_HASH()> macro.  The idea here is
8533 that as the string table is used for shared hash keys these strings will have
8534 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8535
8536 =cut
8537 */
8538
8539 SV *
8540 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8541 {
8542     dVAR;
8543     register SV *sv;
8544     bool is_utf8 = FALSE;
8545     const char *const orig_src = src;
8546
8547     if (len < 0) {
8548         STRLEN tmplen = -len;
8549         is_utf8 = TRUE;
8550         /* See the note in hv.c:hv_fetch() --jhi */
8551         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8552         len = tmplen;
8553     }
8554     if (!hash)
8555         PERL_HASH(hash, src, len);
8556     new_SV(sv);
8557     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8558        changes here, update it there too.  */
8559     sv_upgrade(sv, SVt_PV);
8560     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8561     SvCUR_set(sv, len);
8562     SvLEN_set(sv, 0);
8563     SvREADONLY_on(sv);
8564     SvFAKE_on(sv);
8565     SvPOK_on(sv);
8566     if (is_utf8)
8567         SvUTF8_on(sv);
8568     if (src != orig_src)
8569         Safefree(src);
8570     return sv;
8571 }
8572
8573 /*
8574 =for apidoc newSVpv_share
8575
8576 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8577 string/length pair.
8578
8579 =cut
8580 */
8581
8582 SV *
8583 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8584 {
8585     return newSVpvn_share(src, strlen(src), hash);
8586 }
8587
8588 #if defined(PERL_IMPLICIT_CONTEXT)
8589
8590 /* pTHX_ magic can't cope with varargs, so this is a no-context
8591  * version of the main function, (which may itself be aliased to us).
8592  * Don't access this version directly.
8593  */
8594
8595 SV *
8596 Perl_newSVpvf_nocontext(const char *const pat, ...)
8597 {
8598     dTHX;
8599     register SV *sv;
8600     va_list args;
8601
8602     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8603
8604     va_start(args, pat);
8605     sv = vnewSVpvf(pat, &args);
8606     va_end(args);
8607     return sv;
8608 }
8609 #endif
8610
8611 /*
8612 =for apidoc newSVpvf
8613
8614 Creates a new SV and initializes it with the string formatted like
8615 C<sprintf>.
8616
8617 =cut
8618 */
8619
8620 SV *
8621 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8622 {
8623     register SV *sv;
8624     va_list args;
8625
8626     PERL_ARGS_ASSERT_NEWSVPVF;
8627
8628     va_start(args, pat);
8629     sv = vnewSVpvf(pat, &args);
8630     va_end(args);
8631     return sv;
8632 }
8633
8634 /* backend for newSVpvf() and newSVpvf_nocontext() */
8635
8636 SV *
8637 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8638 {
8639     dVAR;
8640     register SV *sv;
8641
8642     PERL_ARGS_ASSERT_VNEWSVPVF;
8643
8644     new_SV(sv);
8645     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8646     return sv;
8647 }
8648
8649 /*
8650 =for apidoc newSVnv
8651
8652 Creates a new SV and copies a floating point value into it.
8653 The reference count for the SV is set to 1.
8654
8655 =cut
8656 */
8657
8658 SV *
8659 Perl_newSVnv(pTHX_ const NV n)
8660 {
8661     dVAR;
8662     register SV *sv;
8663
8664     new_SV(sv);
8665     sv_setnv(sv,n);
8666     return sv;
8667 }
8668
8669 /*
8670 =for apidoc newSViv
8671
8672 Creates a new SV and copies an integer into it.  The reference count for the
8673 SV is set to 1.
8674
8675 =cut
8676 */
8677
8678 SV *
8679 Perl_newSViv(pTHX_ const IV i)
8680 {
8681     dVAR;
8682     register SV *sv;
8683
8684     new_SV(sv);
8685     sv_setiv(sv,i);
8686     return sv;
8687 }
8688
8689 /*
8690 =for apidoc newSVuv
8691
8692 Creates a new SV and copies an unsigned integer into it.
8693 The reference count for the SV is set to 1.
8694
8695 =cut
8696 */
8697
8698 SV *
8699 Perl_newSVuv(pTHX_ const UV u)
8700 {
8701     dVAR;
8702     register SV *sv;
8703
8704     new_SV(sv);
8705     sv_setuv(sv,u);
8706     return sv;
8707 }
8708
8709 /*
8710 =for apidoc newSV_type
8711
8712 Creates a new SV, of the type specified.  The reference count for the new SV
8713 is set to 1.
8714
8715 =cut
8716 */
8717
8718 SV *
8719 Perl_newSV_type(pTHX_ const svtype type)
8720 {
8721     register SV *sv;
8722
8723     new_SV(sv);
8724     sv_upgrade(sv, type);
8725     return sv;
8726 }
8727
8728 /*
8729 =for apidoc newRV_noinc
8730
8731 Creates an RV wrapper for an SV.  The reference count for the original
8732 SV is B<not> incremented.
8733
8734 =cut
8735 */
8736
8737 SV *
8738 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8739 {
8740     dVAR;
8741     register SV *sv = newSV_type(SVt_IV);
8742
8743     PERL_ARGS_ASSERT_NEWRV_NOINC;
8744
8745     SvTEMP_off(tmpRef);
8746     SvRV_set(sv, tmpRef);
8747     SvROK_on(sv);
8748     return sv;
8749 }
8750
8751 /* newRV_inc is the official function name to use now.
8752  * newRV_inc is in fact #defined to newRV in sv.h
8753  */
8754
8755 SV *
8756 Perl_newRV(pTHX_ SV *const sv)
8757 {
8758     dVAR;
8759
8760     PERL_ARGS_ASSERT_NEWRV;
8761
8762     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8763 }
8764
8765 /*
8766 =for apidoc newSVsv
8767
8768 Creates a new SV which is an exact duplicate of the original SV.
8769 (Uses C<sv_setsv>.)
8770
8771 =cut
8772 */
8773
8774 SV *
8775 Perl_newSVsv(pTHX_ register SV *const old)
8776 {
8777     dVAR;
8778     register SV *sv;
8779
8780     if (!old)
8781         return NULL;
8782     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8783         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8784         return NULL;
8785     }
8786     new_SV(sv);
8787     /* SV_GMAGIC is the default for sv_setv()
8788        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8789        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8790     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8791     return sv;
8792 }
8793
8794 /*
8795 =for apidoc sv_reset
8796
8797 Underlying implementation for the C<reset> Perl function.
8798 Note that the perl-level function is vaguely deprecated.
8799
8800 =cut
8801 */
8802
8803 void
8804 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8805 {
8806     dVAR;
8807     char todo[PERL_UCHAR_MAX+1];
8808
8809     PERL_ARGS_ASSERT_SV_RESET;
8810
8811     if (!stash)
8812         return;
8813
8814     if (!*s) {          /* reset ?? searches */
8815         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8816         if (mg) {
8817             const U32 count = mg->mg_len / sizeof(PMOP**);
8818             PMOP **pmp = (PMOP**) mg->mg_ptr;
8819             PMOP *const *const end = pmp + count;
8820
8821             while (pmp < end) {
8822 #ifdef USE_ITHREADS
8823                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8824 #else
8825                 (*pmp)->op_pmflags &= ~PMf_USED;
8826 #endif
8827                 ++pmp;
8828             }
8829         }
8830         return;
8831     }
8832
8833     /* reset variables */
8834
8835     if (!HvARRAY(stash))
8836         return;
8837
8838     Zero(todo, 256, char);
8839     while (*s) {
8840         I32 max;
8841         I32 i = (unsigned char)*s;
8842         if (s[1] == '-') {
8843             s += 2;
8844         }
8845         max = (unsigned char)*s++;
8846         for ( ; i <= max; i++) {
8847             todo[i] = 1;
8848         }
8849         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8850             HE *entry;
8851             for (entry = HvARRAY(stash)[i];
8852                  entry;
8853                  entry = HeNEXT(entry))
8854             {
8855                 register GV *gv;
8856                 register SV *sv;
8857
8858                 if (!todo[(U8)*HeKEY(entry)])
8859                     continue;
8860                 gv = MUTABLE_GV(HeVAL(entry));
8861                 sv = GvSV(gv);
8862                 if (sv) {
8863                     if (SvTHINKFIRST(sv)) {
8864                         if (!SvREADONLY(sv) && SvROK(sv))
8865                             sv_unref(sv);
8866                         /* XXX Is this continue a bug? Why should THINKFIRST
8867                            exempt us from resetting arrays and hashes?  */
8868                         continue;
8869                     }
8870                     SvOK_off(sv);
8871                     if (SvTYPE(sv) >= SVt_PV) {
8872                         SvCUR_set(sv, 0);
8873                         if (SvPVX_const(sv) != NULL)
8874                             *SvPVX(sv) = '\0';
8875                         SvTAINT(sv);
8876                     }
8877                 }
8878                 if (GvAV(gv)) {
8879                     av_clear(GvAV(gv));
8880                 }
8881                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8882 #if defined(VMS)
8883                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8884 #else /* ! VMS */
8885                     hv_clear(GvHV(gv));
8886 #  if defined(USE_ENVIRON_ARRAY)
8887                     if (gv == PL_envgv)
8888                         my_clearenv();
8889 #  endif /* USE_ENVIRON_ARRAY */
8890 #endif /* VMS */
8891                 }
8892             }
8893         }
8894     }
8895 }
8896
8897 /*
8898 =for apidoc sv_2io
8899
8900 Using various gambits, try to get an IO from an SV: the IO slot if its a
8901 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8902 named after the PV if we're a string.
8903
8904 'Get' magic is ignored on the sv passed in, but will be called on
8905 C<SvRV(sv)> if sv is an RV.
8906
8907 =cut
8908 */
8909
8910 IO*
8911 Perl_sv_2io(pTHX_ SV *const sv)
8912 {
8913     IO* io;
8914     GV* gv;
8915
8916     PERL_ARGS_ASSERT_SV_2IO;
8917
8918     switch (SvTYPE(sv)) {
8919     case SVt_PVIO:
8920         io = MUTABLE_IO(sv);
8921         break;
8922     case SVt_PVGV:
8923     case SVt_PVLV:
8924         if (isGV_with_GP(sv)) {
8925             gv = MUTABLE_GV(sv);
8926             io = GvIO(gv);
8927             if (!io)
8928                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
8929                                     HEKfARG(GvNAME_HEK(gv)));
8930             break;
8931         }
8932         /* FALL THROUGH */
8933     default:
8934         if (!SvOK(sv))
8935             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8936         if (SvROK(sv)) {
8937             SvGETMAGIC(SvRV(sv));
8938             return sv_2io(SvRV(sv));
8939         }
8940         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
8941         if (gv)
8942             io = GvIO(gv);
8943         else
8944             io = 0;
8945         if (!io) {
8946             SV *newsv = sv;
8947             if (SvGMAGICAL(sv)) {
8948                 newsv = sv_newmortal();
8949                 sv_setsv_nomg(newsv, sv);
8950             }
8951             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
8952         }
8953         break;
8954     }
8955     return io;
8956 }
8957
8958 /*
8959 =for apidoc sv_2cv
8960
8961 Using various gambits, try to get a CV from an SV; in addition, try if
8962 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8963 The flags in C<lref> are passed to gv_fetchsv.
8964
8965 =cut
8966 */
8967
8968 CV *
8969 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8970 {
8971     dVAR;
8972     GV *gv = NULL;
8973     CV *cv = NULL;
8974
8975     PERL_ARGS_ASSERT_SV_2CV;
8976
8977     if (!sv) {
8978         *st = NULL;
8979         *gvp = NULL;
8980         return NULL;
8981     }
8982     switch (SvTYPE(sv)) {
8983     case SVt_PVCV:
8984         *st = CvSTASH(sv);
8985         *gvp = NULL;
8986         return MUTABLE_CV(sv);
8987     case SVt_PVHV:
8988     case SVt_PVAV:
8989         *st = NULL;
8990         *gvp = NULL;
8991         return NULL;
8992     default:
8993         SvGETMAGIC(sv);
8994         if (SvROK(sv)) {
8995             if (SvAMAGIC(sv))
8996                 sv = amagic_deref_call(sv, to_cv_amg);
8997
8998             sv = SvRV(sv);
8999             if (SvTYPE(sv) == SVt_PVCV) {
9000                 cv = MUTABLE_CV(sv);
9001                 *gvp = NULL;
9002                 *st = CvSTASH(cv);
9003                 return cv;
9004             }
9005             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9006                 gv = MUTABLE_GV(sv);
9007             else
9008                 Perl_croak(aTHX_ "Not a subroutine reference");
9009         }
9010         else if (isGV_with_GP(sv)) {
9011             gv = MUTABLE_GV(sv);
9012         }
9013         else {
9014             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9015         }
9016         *gvp = gv;
9017         if (!gv) {
9018             *st = NULL;
9019             return NULL;
9020         }
9021         /* Some flags to gv_fetchsv mean don't really create the GV  */
9022         if (!isGV_with_GP(gv)) {
9023             *st = NULL;
9024             return NULL;
9025         }
9026         *st = GvESTASH(gv);
9027         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9028             SV *tmpsv;
9029             ENTER;
9030             tmpsv = newSV(0);
9031             gv_efullname3(tmpsv, gv, NULL);
9032             /* XXX this is probably not what they think they're getting.
9033              * It has the same effect as "sub name;", i.e. just a forward
9034              * declaration! */
9035             newSUB(start_subparse(FALSE, 0),
9036                    newSVOP(OP_CONST, 0, tmpsv),
9037                    NULL, NULL);
9038             LEAVE;
9039             if (!GvCVu(gv))
9040                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
9041                            SVfARG(SvOK(sv) ? sv : &PL_sv_no));
9042         }
9043         return GvCVu(gv);
9044     }
9045 }
9046
9047 /*
9048 =for apidoc sv_true
9049
9050 Returns true if the SV has a true value by Perl's rules.
9051 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9052 instead use an in-line version.
9053
9054 =cut
9055 */
9056
9057 I32
9058 Perl_sv_true(pTHX_ register SV *const sv)
9059 {
9060     if (!sv)
9061         return 0;
9062     if (SvPOK(sv)) {
9063         register const XPV* const tXpv = (XPV*)SvANY(sv);
9064         if (tXpv &&
9065                 (tXpv->xpv_cur > 1 ||
9066                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9067             return 1;
9068         else
9069             return 0;
9070     }
9071     else {
9072         if (SvIOK(sv))
9073             return SvIVX(sv) != 0;
9074         else {
9075             if (SvNOK(sv))
9076                 return SvNVX(sv) != 0.0;
9077             else
9078                 return sv_2bool(sv);
9079         }
9080     }
9081 }
9082
9083 /*
9084 =for apidoc sv_pvn_force
9085
9086 Get a sensible string out of the SV somehow.
9087 A private implementation of the C<SvPV_force> macro for compilers which
9088 can't cope with complex macro expressions.  Always use the macro instead.
9089
9090 =for apidoc sv_pvn_force_flags
9091
9092 Get a sensible string out of the SV somehow.
9093 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9094 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9095 implemented in terms of this function.
9096 You normally want to use the various wrapper macros instead: see
9097 C<SvPV_force> and C<SvPV_force_nomg>
9098
9099 =cut
9100 */
9101
9102 char *
9103 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9104 {
9105     dVAR;
9106
9107     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9108
9109     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9110     if (SvTHINKFIRST(sv) && !SvROK(sv))
9111         sv_force_normal_flags(sv, 0);
9112
9113     if (SvPOK(sv)) {
9114         if (lp)
9115             *lp = SvCUR(sv);
9116     }
9117     else {
9118         char *s;
9119         STRLEN len;
9120  
9121         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9122             const char * const ref = sv_reftype(sv,0);
9123             if (PL_op)
9124                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9125                            ref, OP_DESC(PL_op));
9126             else
9127                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9128         }
9129         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
9130             || isGV_with_GP(sv))
9131             /* diag_listed_as: Can't coerce %s to %s in %s */
9132             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9133                 OP_DESC(PL_op));
9134         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9135         if (!s) {
9136           s = (char *)"";
9137         }
9138         if (lp)
9139             *lp = len;
9140
9141         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9142             if (SvROK(sv))
9143                 sv_unref(sv);
9144             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9145             SvGROW(sv, len + 1);
9146             Move(s,SvPVX(sv),len,char);
9147             SvCUR_set(sv, len);
9148             SvPVX(sv)[len] = '\0';
9149         }
9150         if (!SvPOK(sv)) {
9151             SvPOK_on(sv);               /* validate pointer */
9152             SvTAINT(sv);
9153             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9154                                   PTR2UV(sv),SvPVX_const(sv)));
9155         }
9156     }
9157     return SvPVX_mutable(sv);
9158 }
9159
9160 /*
9161 =for apidoc sv_pvbyten_force
9162
9163 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9164 instead.
9165
9166 =cut
9167 */
9168
9169 char *
9170 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9171 {
9172     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9173
9174     sv_pvn_force(sv,lp);
9175     sv_utf8_downgrade(sv,0);
9176     *lp = SvCUR(sv);
9177     return SvPVX(sv);
9178 }
9179
9180 /*
9181 =for apidoc sv_pvutf8n_force
9182
9183 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9184 instead.
9185
9186 =cut
9187 */
9188
9189 char *
9190 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9191 {
9192     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9193
9194     sv_pvn_force(sv,lp);
9195     sv_utf8_upgrade(sv);
9196     *lp = SvCUR(sv);
9197     return SvPVX(sv);
9198 }
9199
9200 /*
9201 =for apidoc sv_reftype
9202
9203 Returns a string describing what the SV is a reference to.
9204
9205 =cut
9206 */
9207
9208 const char *
9209 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9210 {
9211     PERL_ARGS_ASSERT_SV_REFTYPE;
9212     if (ob && SvOBJECT(sv)) {
9213         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9214     }
9215     else {
9216         switch (SvTYPE(sv)) {
9217         case SVt_NULL:
9218         case SVt_IV:
9219         case SVt_NV:
9220         case SVt_PV:
9221         case SVt_PVIV:
9222         case SVt_PVNV:
9223         case SVt_PVMG:
9224                                 if (SvVOK(sv))
9225                                     return "VSTRING";
9226                                 if (SvROK(sv))
9227                                     return "REF";
9228                                 else
9229                                     return "SCALAR";
9230
9231         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9232                                 /* tied lvalues should appear to be
9233                                  * scalars for backwards compatibility */
9234                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9235                                     ? "SCALAR" : "LVALUE");
9236         case SVt_PVAV:          return "ARRAY";
9237         case SVt_PVHV:          return "HASH";
9238         case SVt_PVCV:          return "CODE";
9239         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9240                                     ? "GLOB" : "SCALAR");
9241         case SVt_PVFM:          return "FORMAT";
9242         case SVt_PVIO:          return "IO";
9243         case SVt_BIND:          return "BIND";
9244         case SVt_REGEXP:        return "REGEXP";
9245         default:                return "UNKNOWN";
9246         }
9247     }
9248 }
9249
9250 /*
9251 =for apidoc sv_ref
9252
9253 Returns a SV describing what the SV passed in is a reference to.
9254
9255 =cut
9256 */
9257
9258 SV *
9259 Perl_sv_ref(pTHX_ register SV *dst, const SV *const sv, const int ob)
9260 {
9261     PERL_ARGS_ASSERT_SV_REF;
9262
9263     if (!dst)
9264         dst = sv_newmortal();
9265
9266     if (ob && SvOBJECT(sv)) {
9267         HvNAME_get(SvSTASH(sv))
9268                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9269                     : sv_setpvn(dst, "__ANON__", 8);
9270     }
9271     else {
9272         const char * reftype = sv_reftype(sv, 0);
9273         sv_setpv(dst, reftype);
9274     }
9275     return dst;
9276 }
9277
9278 /*
9279 =for apidoc sv_isobject
9280
9281 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9282 object.  If the SV is not an RV, or if the object is not blessed, then this
9283 will return false.
9284
9285 =cut
9286 */
9287
9288 int
9289 Perl_sv_isobject(pTHX_ SV *sv)
9290 {
9291     if (!sv)
9292         return 0;
9293     SvGETMAGIC(sv);
9294     if (!SvROK(sv))
9295         return 0;
9296     sv = SvRV(sv);
9297     if (!SvOBJECT(sv))
9298         return 0;
9299     return 1;
9300 }
9301
9302 /*
9303 =for apidoc sv_isa
9304
9305 Returns a boolean indicating whether the SV is blessed into the specified
9306 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9307 an inheritance relationship.
9308
9309 =cut
9310 */
9311
9312 int
9313 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9314 {
9315     const char *hvname;
9316
9317     PERL_ARGS_ASSERT_SV_ISA;
9318
9319     if (!sv)
9320         return 0;
9321     SvGETMAGIC(sv);
9322     if (!SvROK(sv))
9323         return 0;
9324     sv = SvRV(sv);
9325     if (!SvOBJECT(sv))
9326         return 0;
9327     hvname = HvNAME_get(SvSTASH(sv));
9328     if (!hvname)
9329         return 0;
9330
9331     return strEQ(hvname, name);
9332 }
9333
9334 /*
9335 =for apidoc newSVrv
9336
9337 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
9338 it will be upgraded to one.  If C<classname> is non-null then the new SV will
9339 be blessed in the specified package.  The new SV is returned and its
9340 reference count is 1.
9341
9342 =cut
9343 */
9344
9345 SV*
9346 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9347 {
9348     dVAR;
9349     SV *sv;
9350
9351     PERL_ARGS_ASSERT_NEWSVRV;
9352
9353     new_SV(sv);
9354
9355     SV_CHECK_THINKFIRST_COW_DROP(rv);
9356
9357     if (SvTYPE(rv) >= SVt_PVMG) {
9358         const U32 refcnt = SvREFCNT(rv);
9359         SvREFCNT(rv) = 0;
9360         sv_clear(rv);
9361         SvFLAGS(rv) = 0;
9362         SvREFCNT(rv) = refcnt;
9363
9364         sv_upgrade(rv, SVt_IV);
9365     } else if (SvROK(rv)) {
9366         SvREFCNT_dec(SvRV(rv));
9367     } else {
9368         prepare_SV_for_RV(rv);
9369     }
9370
9371     SvOK_off(rv);
9372     SvRV_set(rv, sv);
9373     SvROK_on(rv);
9374
9375     if (classname) {
9376         HV* const stash = gv_stashpv(classname, GV_ADD);
9377         (void)sv_bless(rv, stash);
9378     }
9379     return sv;
9380 }
9381
9382 /*
9383 =for apidoc sv_setref_pv
9384
9385 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9386 argument will be upgraded to an RV.  That RV will be modified to point to
9387 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9388 into the SV.  The C<classname> argument indicates the package for the
9389 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9390 will have a reference count of 1, and the RV will be returned.
9391
9392 Do not use with other Perl types such as HV, AV, SV, CV, because those
9393 objects will become corrupted by the pointer copy process.
9394
9395 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9396
9397 =cut
9398 */
9399
9400 SV*
9401 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9402 {
9403     dVAR;
9404
9405     PERL_ARGS_ASSERT_SV_SETREF_PV;
9406
9407     if (!pv) {
9408         sv_setsv(rv, &PL_sv_undef);
9409         SvSETMAGIC(rv);
9410     }
9411     else
9412         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9413     return rv;
9414 }
9415
9416 /*
9417 =for apidoc sv_setref_iv
9418
9419 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9420 argument will be upgraded to an RV.  That RV will be modified to point to
9421 the new SV.  The C<classname> argument indicates the package for the
9422 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9423 will have a reference count of 1, and the RV will be returned.
9424
9425 =cut
9426 */
9427
9428 SV*
9429 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9430 {
9431     PERL_ARGS_ASSERT_SV_SETREF_IV;
9432
9433     sv_setiv(newSVrv(rv,classname), iv);
9434     return rv;
9435 }
9436
9437 /*
9438 =for apidoc sv_setref_uv
9439
9440 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9441 argument will be upgraded to an RV.  That RV will be modified to point to
9442 the new SV.  The C<classname> argument indicates the package for the
9443 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9444 will have a reference count of 1, and the RV will be returned.
9445
9446 =cut
9447 */
9448
9449 SV*
9450 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9451 {
9452     PERL_ARGS_ASSERT_SV_SETREF_UV;
9453
9454     sv_setuv(newSVrv(rv,classname), uv);
9455     return rv;
9456 }
9457
9458 /*
9459 =for apidoc sv_setref_nv
9460
9461 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9462 argument will be upgraded to an RV.  That RV will be modified to point to
9463 the new SV.  The C<classname> argument indicates the package for the
9464 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9465 will have a reference count of 1, and the RV will be returned.
9466
9467 =cut
9468 */
9469
9470 SV*
9471 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9472 {
9473     PERL_ARGS_ASSERT_SV_SETREF_NV;
9474
9475     sv_setnv(newSVrv(rv,classname), nv);
9476     return rv;
9477 }
9478
9479 /*
9480 =for apidoc sv_setref_pvn
9481
9482 Copies a string into a new SV, optionally blessing the SV.  The length of the
9483 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9484 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9485 argument indicates the package for the blessing.  Set C<classname> to
9486 C<NULL> to avoid the blessing.  The new SV will have a reference count
9487 of 1, and the RV will be returned.
9488
9489 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9490
9491 =cut
9492 */
9493
9494 SV*
9495 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9496                    const char *const pv, const STRLEN n)
9497 {
9498     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9499
9500     sv_setpvn(newSVrv(rv,classname), pv, n);
9501     return rv;
9502 }
9503
9504 /*
9505 =for apidoc sv_bless
9506
9507 Blesses an SV into a specified package.  The SV must be an RV.  The package
9508 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9509 of the SV is unaffected.
9510
9511 =cut
9512 */
9513
9514 SV*
9515 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9516 {
9517     dVAR;
9518     SV *tmpRef;
9519
9520     PERL_ARGS_ASSERT_SV_BLESS;
9521
9522     if (!SvROK(sv))
9523         Perl_croak(aTHX_ "Can't bless non-reference value");
9524     tmpRef = SvRV(sv);
9525     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9526         if (SvIsCOW(tmpRef))
9527             sv_force_normal_flags(tmpRef, 0);
9528         if (SvREADONLY(tmpRef))
9529             Perl_croak_no_modify(aTHX);
9530         if (SvOBJECT(tmpRef)) {
9531             if (SvTYPE(tmpRef) != SVt_PVIO)
9532                 --PL_sv_objcount;
9533             SvREFCNT_dec(SvSTASH(tmpRef));
9534         }
9535     }
9536     SvOBJECT_on(tmpRef);
9537     if (SvTYPE(tmpRef) != SVt_PVIO)
9538         ++PL_sv_objcount;
9539     SvUPGRADE(tmpRef, SVt_PVMG);
9540     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9541
9542     if(SvSMAGICAL(tmpRef))
9543         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9544             mg_set(tmpRef);
9545
9546
9547
9548     return sv;
9549 }
9550
9551 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9552  * as it is after unglobbing it.
9553  */
9554
9555 PERL_STATIC_INLINE void
9556 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9557 {
9558     dVAR;
9559     void *xpvmg;
9560     HV *stash;
9561     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9562
9563     PERL_ARGS_ASSERT_SV_UNGLOB;
9564
9565     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9566     SvFAKE_off(sv);
9567     if (!(flags & SV_COW_DROP_PV))
9568         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9569
9570     if (GvGP(sv)) {
9571         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9572            && HvNAME_get(stash))
9573             mro_method_changed_in(stash);
9574         gp_free(MUTABLE_GV(sv));
9575     }
9576     if (GvSTASH(sv)) {
9577         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9578         GvSTASH(sv) = NULL;
9579     }
9580     GvMULTI_off(sv);
9581     if (GvNAME_HEK(sv)) {
9582         unshare_hek(GvNAME_HEK(sv));
9583     }
9584     isGV_with_GP_off(sv);
9585
9586     if(SvTYPE(sv) == SVt_PVGV) {
9587         /* need to keep SvANY(sv) in the right arena */
9588         xpvmg = new_XPVMG();
9589         StructCopy(SvANY(sv), xpvmg, XPVMG);
9590         del_XPVGV(SvANY(sv));
9591         SvANY(sv) = xpvmg;
9592
9593         SvFLAGS(sv) &= ~SVTYPEMASK;
9594         SvFLAGS(sv) |= SVt_PVMG;
9595     }
9596
9597     /* Intentionally not calling any local SET magic, as this isn't so much a
9598        set operation as merely an internal storage change.  */
9599     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9600     else sv_setsv_flags(sv, temp, 0);
9601
9602     if ((const GV *)sv == PL_last_in_gv)
9603         PL_last_in_gv = NULL;
9604     else if ((const GV *)sv == PL_statgv)
9605         PL_statgv = NULL;
9606 }
9607
9608 /*
9609 =for apidoc sv_unref_flags
9610
9611 Unsets the RV status of the SV, and decrements the reference count of
9612 whatever was being referenced by the RV.  This can almost be thought of
9613 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9614 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9615 (otherwise the decrementing is conditional on the reference count being
9616 different from one or the reference being a readonly SV).
9617 See C<SvROK_off>.
9618
9619 =cut
9620 */
9621
9622 void
9623 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9624 {
9625     SV* const target = SvRV(ref);
9626
9627     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9628
9629     if (SvWEAKREF(ref)) {
9630         sv_del_backref(target, ref);
9631         SvWEAKREF_off(ref);
9632         SvRV_set(ref, NULL);
9633         return;
9634     }
9635     SvRV_set(ref, NULL);
9636     SvROK_off(ref);
9637     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9638        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9639     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9640         SvREFCNT_dec(target);
9641     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9642         sv_2mortal(target);     /* Schedule for freeing later */
9643 }
9644
9645 /*
9646 =for apidoc sv_untaint
9647
9648 Untaint an SV.  Use C<SvTAINTED_off> instead.
9649
9650 =cut
9651 */
9652
9653 void
9654 Perl_sv_untaint(pTHX_ SV *const sv)
9655 {
9656     PERL_ARGS_ASSERT_SV_UNTAINT;
9657
9658     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9659         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9660         if (mg)
9661             mg->mg_len &= ~1;
9662     }
9663 }
9664
9665 /*
9666 =for apidoc sv_tainted
9667
9668 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9669
9670 =cut
9671 */
9672
9673 bool
9674 Perl_sv_tainted(pTHX_ SV *const sv)
9675 {
9676     PERL_ARGS_ASSERT_SV_TAINTED;
9677
9678     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9679         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9680         if (mg && (mg->mg_len & 1) )
9681             return TRUE;
9682     }
9683     return FALSE;
9684 }
9685
9686 /*
9687 =for apidoc sv_setpviv
9688
9689 Copies an integer into the given SV, also updating its string value.
9690 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9691
9692 =cut
9693 */
9694
9695 void
9696 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9697 {
9698     char buf[TYPE_CHARS(UV)];
9699     char *ebuf;
9700     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9701
9702     PERL_ARGS_ASSERT_SV_SETPVIV;
9703
9704     sv_setpvn(sv, ptr, ebuf - ptr);
9705 }
9706
9707 /*
9708 =for apidoc sv_setpviv_mg
9709
9710 Like C<sv_setpviv>, but also handles 'set' magic.
9711
9712 =cut
9713 */
9714
9715 void
9716 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9717 {
9718     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9719
9720     sv_setpviv(sv, iv);
9721     SvSETMAGIC(sv);
9722 }
9723
9724 #if defined(PERL_IMPLICIT_CONTEXT)
9725
9726 /* pTHX_ magic can't cope with varargs, so this is a no-context
9727  * version of the main function, (which may itself be aliased to us).
9728  * Don't access this version directly.
9729  */
9730
9731 void
9732 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9733 {
9734     dTHX;
9735     va_list args;
9736
9737     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9738
9739     va_start(args, pat);
9740     sv_vsetpvf(sv, pat, &args);
9741     va_end(args);
9742 }
9743
9744 /* pTHX_ magic can't cope with varargs, so this is a no-context
9745  * version of the main function, (which may itself be aliased to us).
9746  * Don't access this version directly.
9747  */
9748
9749 void
9750 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9751 {
9752     dTHX;
9753     va_list args;
9754
9755     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9756
9757     va_start(args, pat);
9758     sv_vsetpvf_mg(sv, pat, &args);
9759     va_end(args);
9760 }
9761 #endif
9762
9763 /*
9764 =for apidoc sv_setpvf
9765
9766 Works like C<sv_catpvf> but copies the text into the SV instead of
9767 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9768
9769 =cut
9770 */
9771
9772 void
9773 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9774 {
9775     va_list args;
9776
9777     PERL_ARGS_ASSERT_SV_SETPVF;
9778
9779     va_start(args, pat);
9780     sv_vsetpvf(sv, pat, &args);
9781     va_end(args);
9782 }
9783
9784 /*
9785 =for apidoc sv_vsetpvf
9786
9787 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9788 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9789
9790 Usually used via its frontend C<sv_setpvf>.
9791
9792 =cut
9793 */
9794
9795 void
9796 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9797 {
9798     PERL_ARGS_ASSERT_SV_VSETPVF;
9799
9800     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9801 }
9802
9803 /*
9804 =for apidoc sv_setpvf_mg
9805
9806 Like C<sv_setpvf>, but also handles 'set' magic.
9807
9808 =cut
9809 */
9810
9811 void
9812 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9813 {
9814     va_list args;
9815
9816     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9817
9818     va_start(args, pat);
9819     sv_vsetpvf_mg(sv, pat, &args);
9820     va_end(args);
9821 }
9822
9823 /*
9824 =for apidoc sv_vsetpvf_mg
9825
9826 Like C<sv_vsetpvf>, but also handles 'set' magic.
9827
9828 Usually used via its frontend C<sv_setpvf_mg>.
9829
9830 =cut
9831 */
9832
9833 void
9834 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9835 {
9836     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9837
9838     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9839     SvSETMAGIC(sv);
9840 }
9841
9842 #if defined(PERL_IMPLICIT_CONTEXT)
9843
9844 /* pTHX_ magic can't cope with varargs, so this is a no-context
9845  * version of the main function, (which may itself be aliased to us).
9846  * Don't access this version directly.
9847  */
9848
9849 void
9850 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9851 {
9852     dTHX;
9853     va_list args;
9854
9855     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9856
9857     va_start(args, pat);
9858     sv_vcatpvf(sv, pat, &args);
9859     va_end(args);
9860 }
9861
9862 /* pTHX_ magic can't cope with varargs, so this is a no-context
9863  * version of the main function, (which may itself be aliased to us).
9864  * Don't access this version directly.
9865  */
9866
9867 void
9868 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9869 {
9870     dTHX;
9871     va_list args;
9872
9873     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9874
9875     va_start(args, pat);
9876     sv_vcatpvf_mg(sv, pat, &args);
9877     va_end(args);
9878 }
9879 #endif
9880
9881 /*
9882 =for apidoc sv_catpvf
9883
9884 Processes its arguments like C<sprintf> and appends the formatted
9885 output to an SV.  If the appended data contains "wide" characters
9886 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9887 and characters >255 formatted with %c), the original SV might get
9888 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9889 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
9890 valid UTF-8; if the original SV was bytes, the pattern should be too.
9891
9892 =cut */
9893
9894 void
9895 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9896 {
9897     va_list args;
9898
9899     PERL_ARGS_ASSERT_SV_CATPVF;
9900
9901     va_start(args, pat);
9902     sv_vcatpvf(sv, pat, &args);
9903     va_end(args);
9904 }
9905
9906 /*
9907 =for apidoc sv_vcatpvf
9908
9909 Processes its arguments like C<vsprintf> and appends the formatted output
9910 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9911
9912 Usually used via its frontend C<sv_catpvf>.
9913
9914 =cut
9915 */
9916
9917 void
9918 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9919 {
9920     PERL_ARGS_ASSERT_SV_VCATPVF;
9921
9922     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9923 }
9924
9925 /*
9926 =for apidoc sv_catpvf_mg
9927
9928 Like C<sv_catpvf>, but also handles 'set' magic.
9929
9930 =cut
9931 */
9932
9933 void
9934 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9935 {
9936     va_list args;
9937
9938     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9939
9940     va_start(args, pat);
9941     sv_vcatpvf_mg(sv, pat, &args);
9942     va_end(args);
9943 }
9944
9945 /*
9946 =for apidoc sv_vcatpvf_mg
9947
9948 Like C<sv_vcatpvf>, but also handles 'set' magic.
9949
9950 Usually used via its frontend C<sv_catpvf_mg>.
9951
9952 =cut
9953 */
9954
9955 void
9956 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9957 {
9958     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9959
9960     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9961     SvSETMAGIC(sv);
9962 }
9963
9964 /*
9965 =for apidoc sv_vsetpvfn
9966
9967 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9968 appending it.
9969
9970 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9971
9972 =cut
9973 */
9974
9975 void
9976 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9977                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9978 {
9979     PERL_ARGS_ASSERT_SV_VSETPVFN;
9980
9981     sv_setpvs(sv, "");
9982     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9983 }
9984
9985
9986 /*
9987  * Warn of missing argument to sprintf, and then return a defined value
9988  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9989  */
9990 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9991 STATIC SV*
9992 S_vcatpvfn_missing_argument(pTHX) {
9993     if (ckWARN(WARN_MISSING)) {
9994         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9995                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9996     }
9997     return &PL_sv_no;
9998 }
9999
10000
10001 STATIC I32
10002 S_expect_number(pTHX_ char **const pattern)
10003 {
10004     dVAR;
10005     I32 var = 0;
10006
10007     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10008
10009     switch (**pattern) {
10010     case '1': case '2': case '3':
10011     case '4': case '5': case '6':
10012     case '7': case '8': case '9':
10013         var = *(*pattern)++ - '0';
10014         while (isDIGIT(**pattern)) {
10015             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10016             if (tmp < var)
10017                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10018             var = tmp;
10019         }
10020     }
10021     return var;
10022 }
10023
10024 STATIC char *
10025 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10026 {
10027     const int neg = nv < 0;
10028     UV uv;
10029
10030     PERL_ARGS_ASSERT_F0CONVERT;
10031
10032     if (neg)
10033         nv = -nv;
10034     if (nv < UV_MAX) {
10035         char *p = endbuf;
10036         nv += 0.5;
10037         uv = (UV)nv;
10038         if (uv & 1 && uv == nv)
10039             uv--;                       /* Round to even */
10040         do {
10041             const unsigned dig = uv % 10;
10042             *--p = '0' + dig;
10043         } while (uv /= 10);
10044         if (neg)
10045             *--p = '-';
10046         *len = endbuf - p;
10047         return p;
10048     }
10049     return NULL;
10050 }
10051
10052
10053 /*
10054 =for apidoc sv_vcatpvfn
10055
10056 Processes its arguments like C<vsprintf> and appends the formatted output
10057 to an SV.  Uses an array of SVs if the C style variable argument list is
10058 missing (NULL).  When running with taint checks enabled, indicates via
10059 C<maybe_tainted> if results are untrustworthy (often due to the use of
10060 locales).
10061
10062 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10063
10064 =cut
10065 */
10066
10067
10068 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10069                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10070                         vec_utf8 = DO_UTF8(vecsv);
10071
10072 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10073
10074 void
10075 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10076                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10077 {
10078     dVAR;
10079     char *p;
10080     char *q;
10081     const char *patend;
10082     STRLEN origlen;
10083     I32 svix = 0;
10084     static const char nullstr[] = "(null)";
10085     SV *argsv = NULL;
10086     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10087     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10088     SV *nsv = NULL;
10089     /* Times 4: a decimal digit takes more than 3 binary digits.
10090      * NV_DIG: mantissa takes than many decimal digits.
10091      * Plus 32: Playing safe. */
10092     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10093     /* large enough for "%#.#f" --chip */
10094     /* what about long double NVs? --jhi */
10095
10096     PERL_ARGS_ASSERT_SV_VCATPVFN;
10097     PERL_UNUSED_ARG(maybe_tainted);
10098
10099     /* no matter what, this is a string now */
10100     (void)SvPV_force(sv, origlen);
10101
10102     /* special-case "", "%s", and "%-p" (SVf - see below) */
10103     if (patlen == 0)
10104         return;
10105     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10106         if (args) {
10107             const char * const s = va_arg(*args, char*);
10108             sv_catpv(sv, s ? s : nullstr);
10109         }
10110         else if (svix < svmax) {
10111             sv_catsv(sv, *svargs);
10112         }
10113         else
10114             S_vcatpvfn_missing_argument(aTHX);
10115         return;
10116     }
10117     if (args && patlen == 3 && pat[0] == '%' &&
10118                 pat[1] == '-' && pat[2] == 'p') {
10119         argsv = MUTABLE_SV(va_arg(*args, void*));
10120         sv_catsv(sv, argsv);
10121         return;
10122     }
10123
10124 #ifndef USE_LONG_DOUBLE
10125     /* special-case "%.<number>[gf]" */
10126     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10127          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10128         unsigned digits = 0;
10129         const char *pp;
10130
10131         pp = pat + 2;
10132         while (*pp >= '0' && *pp <= '9')
10133             digits = 10 * digits + (*pp++ - '0');
10134         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10135             const NV nv = SvNV(*svargs);
10136             if (*pp == 'g') {
10137                 /* Add check for digits != 0 because it seems that some
10138                    gconverts are buggy in this case, and we don't yet have
10139                    a Configure test for this.  */
10140                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10141                      /* 0, point, slack */
10142                     Gconvert(nv, (int)digits, 0, ebuf);
10143                     sv_catpv(sv, ebuf);
10144                     if (*ebuf)  /* May return an empty string for digits==0 */
10145                         return;
10146                 }
10147             } else if (!digits) {
10148                 STRLEN l;
10149
10150                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10151                     sv_catpvn(sv, p, l);
10152                     return;
10153                 }
10154             }
10155         }
10156     }
10157 #endif /* !USE_LONG_DOUBLE */
10158
10159     if (!args && svix < svmax && DO_UTF8(*svargs))
10160         has_utf8 = TRUE;
10161
10162     patend = (char*)pat + patlen;
10163     for (p = (char*)pat; p < patend; p = q) {
10164         bool alt = FALSE;
10165         bool left = FALSE;
10166         bool vectorize = FALSE;
10167         bool vectorarg = FALSE;
10168         bool vec_utf8 = FALSE;
10169         char fill = ' ';
10170         char plus = 0;
10171         char intsize = 0;
10172         STRLEN width = 0;
10173         STRLEN zeros = 0;
10174         bool has_precis = FALSE;
10175         STRLEN precis = 0;
10176         const I32 osvix = svix;
10177         bool is_utf8 = FALSE;  /* is this item utf8?   */
10178 #ifdef HAS_LDBL_SPRINTF_BUG
10179         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10180            with sfio - Allen <allens@cpan.org> */
10181         bool fix_ldbl_sprintf_bug = FALSE;
10182 #endif
10183
10184         char esignbuf[4];
10185         U8 utf8buf[UTF8_MAXBYTES+1];
10186         STRLEN esignlen = 0;
10187
10188         const char *eptr = NULL;
10189         const char *fmtstart;
10190         STRLEN elen = 0;
10191         SV *vecsv = NULL;
10192         const U8 *vecstr = NULL;
10193         STRLEN veclen = 0;
10194         char c = 0;
10195         int i;
10196         unsigned base = 0;
10197         IV iv = 0;
10198         UV uv = 0;
10199         /* we need a long double target in case HAS_LONG_DOUBLE but
10200            not USE_LONG_DOUBLE
10201         */
10202 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10203         long double nv;
10204 #else
10205         NV nv;
10206 #endif
10207         STRLEN have;
10208         STRLEN need;
10209         STRLEN gap;
10210         const char *dotstr = ".";
10211         STRLEN dotstrlen = 1;
10212         I32 efix = 0; /* explicit format parameter index */
10213         I32 ewix = 0; /* explicit width index */
10214         I32 epix = 0; /* explicit precision index */
10215         I32 evix = 0; /* explicit vector index */
10216         bool asterisk = FALSE;
10217
10218         /* echo everything up to the next format specification */
10219         for (q = p; q < patend && *q != '%'; ++q) ;
10220         if (q > p) {
10221             if (has_utf8 && !pat_utf8)
10222                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
10223             else
10224                 sv_catpvn(sv, p, q - p);
10225             p = q;
10226         }
10227         if (q++ >= patend)
10228             break;
10229
10230         fmtstart = q;
10231
10232 /*
10233     We allow format specification elements in this order:
10234         \d+\$              explicit format parameter index
10235         [-+ 0#]+           flags
10236         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10237         0                  flag (as above): repeated to allow "v02"     
10238         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10239         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10240         [hlqLV]            size
10241     [%bcdefginopsuxDFOUX] format (mandatory)
10242 */
10243
10244         if (args) {
10245 /*  
10246         As of perl5.9.3, printf format checking is on by default.
10247         Internally, perl uses %p formats to provide an escape to
10248         some extended formatting.  This block deals with those
10249         extensions: if it does not match, (char*)q is reset and
10250         the normal format processing code is used.
10251
10252         Currently defined extensions are:
10253                 %p              include pointer address (standard)      
10254                 %-p     (SVf)   include an SV (previously %_)
10255                 %-<num>p        include an SV with precision <num>      
10256                 %2p             include a HEK
10257                 %3p             include a HEK with precision of 256
10258                 %<num>p         (where num != 2 or 3) reserved for future
10259                                 extensions
10260
10261         Robin Barker 2005-07-14 (but modified since)
10262
10263                 %1p     (VDf)   removed.  RMB 2007-10-19
10264 */
10265             char* r = q; 
10266             bool sv = FALSE;    
10267             STRLEN n = 0;
10268             if (*q == '-')
10269                 sv = *q++;
10270             n = expect_number(&q);
10271             if (*q++ == 'p') {
10272                 if (sv) {                       /* SVf */
10273                     if (n) {
10274                         precis = n;
10275                         has_precis = TRUE;
10276                     }
10277                     argsv = MUTABLE_SV(va_arg(*args, void*));
10278                     eptr = SvPV_const(argsv, elen);
10279                     if (DO_UTF8(argsv))
10280                         is_utf8 = TRUE;
10281                     goto string;
10282                 }
10283                 else if (n==2 || n==3) {        /* HEKf */
10284                     HEK * const hek = va_arg(*args, HEK *);
10285                     eptr = HEK_KEY(hek);
10286                     elen = HEK_LEN(hek);
10287                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10288                     if (n==3) precis = 256, has_precis = TRUE;
10289                     goto string;
10290                 }
10291                 else if (n) {
10292                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10293                                      "internal %%<num>p might conflict with future printf extensions");
10294                 }
10295             }
10296             q = r; 
10297         }
10298
10299         if ( (width = expect_number(&q)) ) {
10300             if (*q == '$') {
10301                 ++q;
10302                 efix = width;
10303             } else {
10304                 goto gotwidth;
10305             }
10306         }
10307
10308         /* FLAGS */
10309
10310         while (*q) {
10311             switch (*q) {
10312             case ' ':
10313             case '+':
10314                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10315                     q++;
10316                 else
10317                     plus = *q++;
10318                 continue;
10319
10320             case '-':
10321                 left = TRUE;
10322                 q++;
10323                 continue;
10324
10325             case '0':
10326                 fill = *q++;
10327                 continue;
10328
10329             case '#':
10330                 alt = TRUE;
10331                 q++;
10332                 continue;
10333
10334             default:
10335                 break;
10336             }
10337             break;
10338         }
10339
10340       tryasterisk:
10341         if (*q == '*') {
10342             q++;
10343             if ( (ewix = expect_number(&q)) )
10344                 if (*q++ != '$')
10345                     goto unknown;
10346             asterisk = TRUE;
10347         }
10348         if (*q == 'v') {
10349             q++;
10350             if (vectorize)
10351                 goto unknown;
10352             if ((vectorarg = asterisk)) {
10353                 evix = ewix;
10354                 ewix = 0;
10355                 asterisk = FALSE;
10356             }
10357             vectorize = TRUE;
10358             goto tryasterisk;
10359         }
10360
10361         if (!asterisk)
10362         {
10363             if( *q == '0' )
10364                 fill = *q++;
10365             width = expect_number(&q);
10366         }
10367
10368         if (vectorize && vectorarg) {
10369             /* vectorizing, but not with the default "." */
10370             if (args)
10371                 vecsv = va_arg(*args, SV*);
10372             else if (evix) {
10373                 vecsv = (evix > 0 && evix <= svmax)
10374                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10375             } else {
10376                 vecsv = svix < svmax
10377                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10378             }
10379             dotstr = SvPV_const(vecsv, dotstrlen);
10380             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10381                bad with tied or overloaded values that return UTF8.  */
10382             if (DO_UTF8(vecsv))
10383                 is_utf8 = TRUE;
10384             else if (has_utf8) {
10385                 vecsv = sv_mortalcopy(vecsv);
10386                 sv_utf8_upgrade(vecsv);
10387                 dotstr = SvPV_const(vecsv, dotstrlen);
10388                 is_utf8 = TRUE;
10389             }               
10390         }
10391
10392         if (asterisk) {
10393             if (args)
10394                 i = va_arg(*args, int);
10395             else
10396                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10397                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10398             left |= (i < 0);
10399             width = (i < 0) ? -i : i;
10400         }
10401       gotwidth:
10402
10403         /* PRECISION */
10404
10405         if (*q == '.') {
10406             q++;
10407             if (*q == '*') {
10408                 q++;
10409                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10410                     goto unknown;
10411                 /* XXX: todo, support specified precision parameter */
10412                 if (epix)
10413                     goto unknown;
10414                 if (args)
10415                     i = va_arg(*args, int);
10416                 else
10417                     i = (ewix ? ewix <= svmax : svix < svmax)
10418                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10419                 precis = i;
10420                 has_precis = !(i < 0);
10421             }
10422             else {
10423                 precis = 0;
10424                 while (isDIGIT(*q))
10425                     precis = precis * 10 + (*q++ - '0');
10426                 has_precis = TRUE;
10427             }
10428         }
10429
10430         if (vectorize) {
10431             if (args) {
10432                 VECTORIZE_ARGS
10433             }
10434             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10435                 vecsv = svargs[efix ? efix-1 : svix++];
10436                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10437                 vec_utf8 = DO_UTF8(vecsv);
10438
10439                 /* if this is a version object, we need to convert
10440                  * back into v-string notation and then let the
10441                  * vectorize happen normally
10442                  */
10443                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10444                     char *version = savesvpv(vecsv);
10445                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10446                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10447                         "vector argument not supported with alpha versions");
10448                         goto unknown;
10449                     }
10450                     vecsv = sv_newmortal();
10451                     scan_vstring(version, version + veclen, vecsv);
10452                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10453                     vec_utf8 = DO_UTF8(vecsv);
10454                     Safefree(version);
10455                 }
10456             }
10457             else {
10458                 vecstr = (U8*)"";
10459                 veclen = 0;
10460             }
10461         }
10462
10463         /* SIZE */
10464
10465         switch (*q) {
10466 #ifdef WIN32
10467         case 'I':                       /* Ix, I32x, and I64x */
10468 #  ifdef WIN64
10469             if (q[1] == '6' && q[2] == '4') {
10470                 q += 3;
10471                 intsize = 'q';
10472                 break;
10473             }
10474 #  endif
10475             if (q[1] == '3' && q[2] == '2') {
10476                 q += 3;
10477                 break;
10478             }
10479 #  ifdef WIN64
10480             intsize = 'q';
10481 #  endif
10482             q++;
10483             break;
10484 #endif
10485 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10486         case 'L':                       /* Ld */
10487             /*FALLTHROUGH*/
10488 #ifdef HAS_QUAD
10489         case 'q':                       /* qd */
10490 #endif
10491             intsize = 'q';
10492             q++;
10493             break;
10494 #endif
10495         case 'l':
10496             ++q;
10497 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10498             if (*q == 'l') {    /* lld, llf */
10499                 intsize = 'q';
10500                 ++q;
10501             }
10502             else
10503 #endif
10504                 intsize = 'l';
10505             break;
10506         case 'h':
10507             if (*++q == 'h') {  /* hhd, hhu */
10508                 intsize = 'c';
10509                 ++q;
10510             }
10511             else
10512                 intsize = 'h';
10513             break;
10514         case 'V':
10515         case 'z':
10516         case 't':
10517 #if HAS_C99
10518         case 'j':
10519 #endif
10520             intsize = *q++;
10521             break;
10522         }
10523
10524         /* CONVERSION */
10525
10526         if (*q == '%') {
10527             eptr = q++;
10528             elen = 1;
10529             if (vectorize) {
10530                 c = '%';
10531                 goto unknown;
10532             }
10533             goto string;
10534         }
10535
10536         if (!vectorize && !args) {
10537             if (efix) {
10538                 const I32 i = efix-1;
10539                 argsv = (i >= 0 && i < svmax)
10540                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10541             } else {
10542                 argsv = (svix >= 0 && svix < svmax)
10543                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10544             }
10545         }
10546
10547         switch (c = *q++) {
10548
10549             /* STRINGS */
10550
10551         case 'c':
10552             if (vectorize)
10553                 goto unknown;
10554             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10555             if ((uv > 255 ||
10556                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10557                 && !IN_BYTES) {
10558                 eptr = (char*)utf8buf;
10559                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10560                 is_utf8 = TRUE;
10561             }
10562             else {
10563                 c = (char)uv;
10564                 eptr = &c;
10565                 elen = 1;
10566             }
10567             goto string;
10568
10569         case 's':
10570             if (vectorize)
10571                 goto unknown;
10572             if (args) {
10573                 eptr = va_arg(*args, char*);
10574                 if (eptr)
10575                     elen = strlen(eptr);
10576                 else {
10577                     eptr = (char *)nullstr;
10578                     elen = sizeof nullstr - 1;
10579                 }
10580             }
10581             else {
10582                 eptr = SvPV_const(argsv, elen);
10583                 if (DO_UTF8(argsv)) {
10584                     STRLEN old_precis = precis;
10585                     if (has_precis && precis < elen) {
10586                         STRLEN ulen = sv_len_utf8(argsv);
10587                         I32 p = precis > ulen ? ulen : precis;
10588                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
10589                         precis = p;
10590                     }
10591                     if (width) { /* fudge width (can't fudge elen) */
10592                         if (has_precis && precis < elen)
10593                             width += precis - old_precis;
10594                         else
10595                             width += elen - sv_len_utf8(argsv);
10596                     }
10597                     is_utf8 = TRUE;
10598                 }
10599             }
10600
10601         string:
10602             if (has_precis && precis < elen)
10603                 elen = precis;
10604             break;
10605
10606             /* INTEGERS */
10607
10608         case 'p':
10609             if (alt || vectorize)
10610                 goto unknown;
10611             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10612             base = 16;
10613             goto integer;
10614
10615         case 'D':
10616 #ifdef IV_IS_QUAD
10617             intsize = 'q';
10618 #else
10619             intsize = 'l';
10620 #endif
10621             /*FALLTHROUGH*/
10622         case 'd':
10623         case 'i':
10624 #if vdNUMBER
10625         format_vd:
10626 #endif
10627             if (vectorize) {
10628                 STRLEN ulen;
10629                 if (!veclen)
10630                     continue;
10631                 if (vec_utf8)
10632                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10633                                         UTF8_ALLOW_ANYUV);
10634                 else {
10635                     uv = *vecstr;
10636                     ulen = 1;
10637                 }
10638                 vecstr += ulen;
10639                 veclen -= ulen;
10640                 if (plus)
10641                      esignbuf[esignlen++] = plus;
10642             }
10643             else if (args) {
10644                 switch (intsize) {
10645                 case 'c':       iv = (char)va_arg(*args, int); break;
10646                 case 'h':       iv = (short)va_arg(*args, int); break;
10647                 case 'l':       iv = va_arg(*args, long); break;
10648                 case 'V':       iv = va_arg(*args, IV); break;
10649                 case 'z':       iv = va_arg(*args, SSize_t); break;
10650                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10651                 default:        iv = va_arg(*args, int); break;
10652 #if HAS_C99
10653                 case 'j':       iv = va_arg(*args, intmax_t); break;
10654 #endif
10655                 case 'q':
10656 #ifdef HAS_QUAD
10657                                 iv = va_arg(*args, Quad_t); break;
10658 #else
10659                                 goto unknown;
10660 #endif
10661                 }
10662             }
10663             else {
10664                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10665                 switch (intsize) {
10666                 case 'c':       iv = (char)tiv; break;
10667                 case 'h':       iv = (short)tiv; break;
10668                 case 'l':       iv = (long)tiv; break;
10669                 case 'V':
10670                 default:        iv = tiv; break;
10671                 case 'q':
10672 #ifdef HAS_QUAD
10673                                 iv = (Quad_t)tiv; break;
10674 #else
10675                                 goto unknown;
10676 #endif
10677                 }
10678             }
10679             if ( !vectorize )   /* we already set uv above */
10680             {
10681                 if (iv >= 0) {
10682                     uv = iv;
10683                     if (plus)
10684                         esignbuf[esignlen++] = plus;
10685                 }
10686                 else {
10687                     uv = -iv;
10688                     esignbuf[esignlen++] = '-';
10689                 }
10690             }
10691             base = 10;
10692             goto integer;
10693
10694         case 'U':
10695 #ifdef IV_IS_QUAD
10696             intsize = 'q';
10697 #else
10698             intsize = 'l';
10699 #endif
10700             /*FALLTHROUGH*/
10701         case 'u':
10702             base = 10;
10703             goto uns_integer;
10704
10705         case 'B':
10706         case 'b':
10707             base = 2;
10708             goto uns_integer;
10709
10710         case 'O':
10711 #ifdef IV_IS_QUAD
10712             intsize = 'q';
10713 #else
10714             intsize = 'l';
10715 #endif
10716             /*FALLTHROUGH*/
10717         case 'o':
10718             base = 8;
10719             goto uns_integer;
10720
10721         case 'X':
10722         case 'x':
10723             base = 16;
10724
10725         uns_integer:
10726             if (vectorize) {
10727                 STRLEN ulen;
10728         vector:
10729                 if (!veclen)
10730                     continue;
10731                 if (vec_utf8)
10732                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10733                                         UTF8_ALLOW_ANYUV);
10734                 else {
10735                     uv = *vecstr;
10736                     ulen = 1;
10737                 }
10738                 vecstr += ulen;
10739                 veclen -= ulen;
10740             }
10741             else if (args) {
10742                 switch (intsize) {
10743                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10744                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10745                 case 'l':  uv = va_arg(*args, unsigned long); break;
10746                 case 'V':  uv = va_arg(*args, UV); break;
10747                 case 'z':  uv = va_arg(*args, Size_t); break;
10748                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10749 #if HAS_C99
10750                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10751 #endif
10752                 default:   uv = va_arg(*args, unsigned); break;
10753                 case 'q':
10754 #ifdef HAS_QUAD
10755                            uv = va_arg(*args, Uquad_t); break;
10756 #else
10757                            goto unknown;
10758 #endif
10759                 }
10760             }
10761             else {
10762                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10763                 switch (intsize) {
10764                 case 'c':       uv = (unsigned char)tuv; break;
10765                 case 'h':       uv = (unsigned short)tuv; break;
10766                 case 'l':       uv = (unsigned long)tuv; break;
10767                 case 'V':
10768                 default:        uv = tuv; break;
10769                 case 'q':
10770 #ifdef HAS_QUAD
10771                                 uv = (Uquad_t)tuv; break;
10772 #else
10773                                 goto unknown;
10774 #endif
10775                 }
10776             }
10777
10778         integer:
10779             {
10780                 char *ptr = ebuf + sizeof ebuf;
10781                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10782                 zeros = 0;
10783
10784                 switch (base) {
10785                     unsigned dig;
10786                 case 16:
10787                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10788                     do {
10789                         dig = uv & 15;
10790                         *--ptr = p[dig];
10791                     } while (uv >>= 4);
10792                     if (tempalt) {
10793                         esignbuf[esignlen++] = '0';
10794                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10795                     }
10796                     break;
10797                 case 8:
10798                     do {
10799                         dig = uv & 7;
10800                         *--ptr = '0' + dig;
10801                     } while (uv >>= 3);
10802                     if (alt && *ptr != '0')
10803                         *--ptr = '0';
10804                     break;
10805                 case 2:
10806                     do {
10807                         dig = uv & 1;
10808                         *--ptr = '0' + dig;
10809                     } while (uv >>= 1);
10810                     if (tempalt) {
10811                         esignbuf[esignlen++] = '0';
10812                         esignbuf[esignlen++] = c;
10813                     }
10814                     break;
10815                 default:                /* it had better be ten or less */
10816                     do {
10817                         dig = uv % base;
10818                         *--ptr = '0' + dig;
10819                     } while (uv /= base);
10820                     break;
10821                 }
10822                 elen = (ebuf + sizeof ebuf) - ptr;
10823                 eptr = ptr;
10824                 if (has_precis) {
10825                     if (precis > elen)
10826                         zeros = precis - elen;
10827                     else if (precis == 0 && elen == 1 && *eptr == '0'
10828                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10829                         elen = 0;
10830
10831                 /* a precision nullifies the 0 flag. */
10832                     if (fill == '0')
10833                         fill = ' ';
10834                 }
10835             }
10836             break;
10837
10838             /* FLOATING POINT */
10839
10840         case 'F':
10841             c = 'f';            /* maybe %F isn't supported here */
10842             /*FALLTHROUGH*/
10843         case 'e': case 'E':
10844         case 'f':
10845         case 'g': case 'G':
10846             if (vectorize)
10847                 goto unknown;
10848
10849             /* This is evil, but floating point is even more evil */
10850
10851             /* for SV-style calling, we can only get NV
10852                for C-style calling, we assume %f is double;
10853                for simplicity we allow any of %Lf, %llf, %qf for long double
10854             */
10855             switch (intsize) {
10856             case 'V':
10857 #if defined(USE_LONG_DOUBLE)
10858                 intsize = 'q';
10859 #endif
10860                 break;
10861 /* [perl #20339] - we should accept and ignore %lf rather than die */
10862             case 'l':
10863                 /*FALLTHROUGH*/
10864             default:
10865 #if defined(USE_LONG_DOUBLE)
10866                 intsize = args ? 0 : 'q';
10867 #endif
10868                 break;
10869             case 'q':
10870 #if defined(HAS_LONG_DOUBLE)
10871                 break;
10872 #else
10873                 /*FALLTHROUGH*/
10874 #endif
10875             case 'c':
10876             case 'h':
10877             case 'z':
10878             case 't':
10879             case 'j':
10880                 goto unknown;
10881             }
10882
10883             /* now we need (long double) if intsize == 'q', else (double) */
10884             nv = (args) ?
10885 #if LONG_DOUBLESIZE > DOUBLESIZE
10886                 intsize == 'q' ?
10887                     va_arg(*args, long double) :
10888                     va_arg(*args, double)
10889 #else
10890                     va_arg(*args, double)
10891 #endif
10892                 : SvNV(argsv);
10893
10894             need = 0;
10895             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10896                else. frexp() has some unspecified behaviour for those three */
10897             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10898                 i = PERL_INT_MIN;
10899                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10900                    will cast our (long double) to (double) */
10901                 (void)Perl_frexp(nv, &i);
10902                 if (i == PERL_INT_MIN)
10903                     Perl_die(aTHX_ "panic: frexp");
10904                 if (i > 0)
10905                     need = BIT_DIGITS(i);
10906             }
10907             need += has_precis ? precis : 6; /* known default */
10908
10909             if (need < width)
10910                 need = width;
10911
10912 #ifdef HAS_LDBL_SPRINTF_BUG
10913             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10914                with sfio - Allen <allens@cpan.org> */
10915
10916 #  ifdef DBL_MAX
10917 #    define MY_DBL_MAX DBL_MAX
10918 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10919 #    if DOUBLESIZE >= 8
10920 #      define MY_DBL_MAX 1.7976931348623157E+308L
10921 #    else
10922 #      define MY_DBL_MAX 3.40282347E+38L
10923 #    endif
10924 #  endif
10925
10926 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10927 #    define MY_DBL_MAX_BUG 1L
10928 #  else
10929 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10930 #  endif
10931
10932 #  ifdef DBL_MIN
10933 #    define MY_DBL_MIN DBL_MIN
10934 #  else  /* XXX guessing! -Allen */
10935 #    if DOUBLESIZE >= 8
10936 #      define MY_DBL_MIN 2.2250738585072014E-308L
10937 #    else
10938 #      define MY_DBL_MIN 1.17549435E-38L
10939 #    endif
10940 #  endif
10941
10942             if ((intsize == 'q') && (c == 'f') &&
10943                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10944                 (need < DBL_DIG)) {
10945                 /* it's going to be short enough that
10946                  * long double precision is not needed */
10947
10948                 if ((nv <= 0L) && (nv >= -0L))
10949                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10950                 else {
10951                     /* would use Perl_fp_class as a double-check but not
10952                      * functional on IRIX - see perl.h comments */
10953
10954                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10955                         /* It's within the range that a double can represent */
10956 #if defined(DBL_MAX) && !defined(DBL_MIN)
10957                         if ((nv >= ((long double)1/DBL_MAX)) ||
10958                             (nv <= (-(long double)1/DBL_MAX)))
10959 #endif
10960                         fix_ldbl_sprintf_bug = TRUE;
10961                     }
10962                 }
10963                 if (fix_ldbl_sprintf_bug == TRUE) {
10964                     double temp;
10965
10966                     intsize = 0;
10967                     temp = (double)nv;
10968                     nv = (NV)temp;
10969                 }
10970             }
10971
10972 #  undef MY_DBL_MAX
10973 #  undef MY_DBL_MAX_BUG
10974 #  undef MY_DBL_MIN
10975
10976 #endif /* HAS_LDBL_SPRINTF_BUG */
10977
10978             need += 20; /* fudge factor */
10979             if (PL_efloatsize < need) {
10980                 Safefree(PL_efloatbuf);
10981                 PL_efloatsize = need + 20; /* more fudge */
10982                 Newx(PL_efloatbuf, PL_efloatsize, char);
10983                 PL_efloatbuf[0] = '\0';
10984             }
10985
10986             if ( !(width || left || plus || alt) && fill != '0'
10987                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10988                 /* See earlier comment about buggy Gconvert when digits,
10989                    aka precis is 0  */
10990                 if ( c == 'g' && precis) {
10991                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10992                     /* May return an empty string for digits==0 */
10993                     if (*PL_efloatbuf) {
10994                         elen = strlen(PL_efloatbuf);
10995                         goto float_converted;
10996                     }
10997                 } else if ( c == 'f' && !precis) {
10998                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10999                         break;
11000                 }
11001             }
11002             {
11003                 char *ptr = ebuf + sizeof ebuf;
11004                 *--ptr = '\0';
11005                 *--ptr = c;
11006                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11007 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11008                 if (intsize == 'q') {
11009                     /* Copy the one or more characters in a long double
11010                      * format before the 'base' ([efgEFG]) character to
11011                      * the format string. */
11012                     static char const prifldbl[] = PERL_PRIfldbl;
11013                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11014                     while (p >= prifldbl) { *--ptr = *p--; }
11015                 }
11016 #endif
11017                 if (has_precis) {
11018                     base = precis;
11019                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11020                     *--ptr = '.';
11021                 }
11022                 if (width) {
11023                     base = width;
11024                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11025                 }
11026                 if (fill == '0')
11027                     *--ptr = fill;
11028                 if (left)
11029                     *--ptr = '-';
11030                 if (plus)
11031                     *--ptr = plus;
11032                 if (alt)
11033                     *--ptr = '#';
11034                 *--ptr = '%';
11035
11036                 /* No taint.  Otherwise we are in the strange situation
11037                  * where printf() taints but print($float) doesn't.
11038                  * --jhi */
11039 #if defined(HAS_LONG_DOUBLE)
11040                 elen = ((intsize == 'q')
11041                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11042                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11043 #else
11044                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11045 #endif
11046             }
11047         float_converted:
11048             eptr = PL_efloatbuf;
11049             break;
11050
11051             /* SPECIAL */
11052
11053         case 'n':
11054             if (vectorize)
11055                 goto unknown;
11056             i = SvCUR(sv) - origlen;
11057             if (args) {
11058                 switch (intsize) {
11059                 case 'c':       *(va_arg(*args, char*)) = i; break;
11060                 case 'h':       *(va_arg(*args, short*)) = i; break;
11061                 default:        *(va_arg(*args, int*)) = i; break;
11062                 case 'l':       *(va_arg(*args, long*)) = i; break;
11063                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11064                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11065                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11066 #if HAS_C99
11067                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11068 #endif
11069                 case 'q':
11070 #ifdef HAS_QUAD
11071                                 *(va_arg(*args, Quad_t*)) = i; break;
11072 #else
11073                                 goto unknown;
11074 #endif
11075                 }
11076             }
11077             else
11078                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11079             continue;   /* not "break" */
11080
11081             /* UNKNOWN */
11082
11083         default:
11084       unknown:
11085             if (!args
11086                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11087                 && ckWARN(WARN_PRINTF))
11088             {
11089                 SV * const msg = sv_newmortal();
11090                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11091                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11092                 if (fmtstart < patend) {
11093                     const char * const fmtend = q < patend ? q : patend;
11094                     const char * f;
11095                     sv_catpvs(msg, "\"%");
11096                     for (f = fmtstart; f < fmtend; f++) {
11097                         if (isPRINT(*f)) {
11098                             sv_catpvn(msg, f, 1);
11099                         } else {
11100                             Perl_sv_catpvf(aTHX_ msg,
11101                                            "\\%03"UVof, (UV)*f & 0xFF);
11102                         }
11103                     }
11104                     sv_catpvs(msg, "\"");
11105                 } else {
11106                     sv_catpvs(msg, "end of string");
11107                 }
11108                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11109             }
11110
11111             /* output mangled stuff ... */
11112             if (c == '\0')
11113                 --q;
11114             eptr = p;
11115             elen = q - p;
11116
11117             /* ... right here, because formatting flags should not apply */
11118             SvGROW(sv, SvCUR(sv) + elen + 1);
11119             p = SvEND(sv);
11120             Copy(eptr, p, elen, char);
11121             p += elen;
11122             *p = '\0';
11123             SvCUR_set(sv, p - SvPVX_const(sv));
11124             svix = osvix;
11125             continue;   /* not "break" */
11126         }
11127
11128         if (is_utf8 != has_utf8) {
11129             if (is_utf8) {
11130                 if (SvCUR(sv))
11131                     sv_utf8_upgrade(sv);
11132             }
11133             else {
11134                 const STRLEN old_elen = elen;
11135                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11136                 sv_utf8_upgrade(nsv);
11137                 eptr = SvPVX_const(nsv);
11138                 elen = SvCUR(nsv);
11139
11140                 if (width) { /* fudge width (can't fudge elen) */
11141                     width += elen - old_elen;
11142                 }
11143                 is_utf8 = TRUE;
11144             }
11145         }
11146
11147         have = esignlen + zeros + elen;
11148         if (have < zeros)
11149             Perl_croak_nocontext("%s", PL_memory_wrap);
11150
11151         need = (have > width ? have : width);
11152         gap = need - have;
11153
11154         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11155             Perl_croak_nocontext("%s", PL_memory_wrap);
11156         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11157         p = SvEND(sv);
11158         if (esignlen && fill == '0') {
11159             int i;
11160             for (i = 0; i < (int)esignlen; i++)
11161                 *p++ = esignbuf[i];
11162         }
11163         if (gap && !left) {
11164             memset(p, fill, gap);
11165             p += gap;
11166         }
11167         if (esignlen && fill != '0') {
11168             int i;
11169             for (i = 0; i < (int)esignlen; i++)
11170                 *p++ = esignbuf[i];
11171         }
11172         if (zeros) {
11173             int i;
11174             for (i = zeros; i; i--)
11175                 *p++ = '0';
11176         }
11177         if (elen) {
11178             Copy(eptr, p, elen, char);
11179             p += elen;
11180         }
11181         if (gap && left) {
11182             memset(p, ' ', gap);
11183             p += gap;
11184         }
11185         if (vectorize) {
11186             if (veclen) {
11187                 Copy(dotstr, p, dotstrlen, char);
11188                 p += dotstrlen;
11189             }
11190             else
11191                 vectorize = FALSE;              /* done iterating over vecstr */
11192         }
11193         if (is_utf8)
11194             has_utf8 = TRUE;
11195         if (has_utf8)
11196             SvUTF8_on(sv);
11197         *p = '\0';
11198         SvCUR_set(sv, p - SvPVX_const(sv));
11199         if (vectorize) {
11200             esignlen = 0;
11201             goto vector;
11202         }
11203     }
11204     SvTAINT(sv);
11205 }
11206
11207 /* =========================================================================
11208
11209 =head1 Cloning an interpreter
11210
11211 All the macros and functions in this section are for the private use of
11212 the main function, perl_clone().
11213
11214 The foo_dup() functions make an exact copy of an existing foo thingy.
11215 During the course of a cloning, a hash table is used to map old addresses
11216 to new addresses.  The table is created and manipulated with the
11217 ptr_table_* functions.
11218
11219 =cut
11220
11221  * =========================================================================*/
11222
11223
11224 #if defined(USE_ITHREADS)
11225
11226 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11227 #ifndef GpREFCNT_inc
11228 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11229 #endif
11230
11231
11232 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11233    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11234    If this changes, please unmerge ss_dup.
11235    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11236 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11237 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11238 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11239 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11240 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11241 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11242 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11243 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11244 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11245 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11246 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11247 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11248 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11249
11250 /* clone a parser */
11251
11252 yy_parser *
11253 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11254 {
11255     yy_parser *parser;
11256
11257     PERL_ARGS_ASSERT_PARSER_DUP;
11258
11259     if (!proto)
11260         return NULL;
11261
11262     /* look for it in the table first */
11263     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11264     if (parser)
11265         return parser;
11266
11267     /* create anew and remember what it is */
11268     Newxz(parser, 1, yy_parser);
11269     ptr_table_store(PL_ptr_table, proto, parser);
11270
11271     /* XXX these not yet duped */
11272     parser->old_parser = NULL;
11273     parser->stack = NULL;
11274     parser->ps = NULL;
11275     parser->stack_size = 0;
11276     /* XXX parser->stack->state = 0; */
11277
11278     /* XXX eventually, just Copy() most of the parser struct ? */
11279
11280     parser->lex_brackets = proto->lex_brackets;
11281     parser->lex_casemods = proto->lex_casemods;
11282     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11283                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11284     parser->lex_casestack = savepvn(proto->lex_casestack,
11285                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11286     parser->lex_defer   = proto->lex_defer;
11287     parser->lex_dojoin  = proto->lex_dojoin;
11288     parser->lex_expect  = proto->lex_expect;
11289     parser->lex_formbrack = proto->lex_formbrack;
11290     parser->lex_inpat   = proto->lex_inpat;
11291     parser->lex_inwhat  = proto->lex_inwhat;
11292     parser->lex_op      = proto->lex_op;
11293     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11294     parser->lex_starts  = proto->lex_starts;
11295     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11296     parser->multi_close = proto->multi_close;
11297     parser->multi_open  = proto->multi_open;
11298     parser->multi_start = proto->multi_start;
11299     parser->multi_end   = proto->multi_end;
11300     parser->pending_ident = proto->pending_ident;
11301     parser->preambled   = proto->preambled;
11302     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11303     parser->linestr     = sv_dup_inc(proto->linestr, param);
11304     parser->expect      = proto->expect;
11305     parser->copline     = proto->copline;
11306     parser->last_lop_op = proto->last_lop_op;
11307     parser->lex_state   = proto->lex_state;
11308     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11309     /* rsfp_filters entries have fake IoDIRP() */
11310     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11311     parser->in_my       = proto->in_my;
11312     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11313     parser->error_count = proto->error_count;
11314
11315
11316     parser->linestr     = sv_dup_inc(proto->linestr, param);
11317
11318     {
11319         char * const ols = SvPVX(proto->linestr);
11320         char * const ls  = SvPVX(parser->linestr);
11321
11322         parser->bufptr      = ls + (proto->bufptr >= ols ?
11323                                     proto->bufptr -  ols : 0);
11324         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11325                                     proto->oldbufptr -  ols : 0);
11326         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11327                                     proto->oldoldbufptr -  ols : 0);
11328         parser->linestart   = ls + (proto->linestart >= ols ?
11329                                     proto->linestart -  ols : 0);
11330         parser->last_uni    = ls + (proto->last_uni >= ols ?
11331                                     proto->last_uni -  ols : 0);
11332         parser->last_lop    = ls + (proto->last_lop >= ols ?
11333                                     proto->last_lop -  ols : 0);
11334
11335         parser->bufend      = ls + SvCUR(parser->linestr);
11336     }
11337
11338     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11339
11340
11341 #ifdef PERL_MAD
11342     parser->endwhite    = proto->endwhite;
11343     parser->faketokens  = proto->faketokens;
11344     parser->lasttoke    = proto->lasttoke;
11345     parser->nextwhite   = proto->nextwhite;
11346     parser->realtokenstart = proto->realtokenstart;
11347     parser->skipwhite   = proto->skipwhite;
11348     parser->thisclose   = proto->thisclose;
11349     parser->thismad     = proto->thismad;
11350     parser->thisopen    = proto->thisopen;
11351     parser->thisstuff   = proto->thisstuff;
11352     parser->thistoken   = proto->thistoken;
11353     parser->thiswhite   = proto->thiswhite;
11354
11355     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11356     parser->curforce    = proto->curforce;
11357 #else
11358     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11359     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11360     parser->nexttoke    = proto->nexttoke;
11361 #endif
11362
11363     /* XXX should clone saved_curcop here, but we aren't passed
11364      * proto_perl; so do it in perl_clone_using instead */
11365
11366     return parser;
11367 }
11368
11369
11370 /* duplicate a file handle */
11371
11372 PerlIO *
11373 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11374 {
11375     PerlIO *ret;
11376
11377     PERL_ARGS_ASSERT_FP_DUP;
11378     PERL_UNUSED_ARG(type);
11379
11380     if (!fp)
11381         return (PerlIO*)NULL;
11382
11383     /* look for it in the table first */
11384     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11385     if (ret)
11386         return ret;
11387
11388     /* create anew and remember what it is */
11389     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11390     ptr_table_store(PL_ptr_table, fp, ret);
11391     return ret;
11392 }
11393
11394 /* duplicate a directory handle */
11395
11396 DIR *
11397 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11398 {
11399     DIR *ret;
11400
11401 #ifdef HAS_FCHDIR
11402     DIR *pwd;
11403     register const Direntry_t *dirent;
11404     char smallbuf[256];
11405     char *name = NULL;
11406     STRLEN len = 0;
11407     long pos;
11408 #endif
11409
11410     PERL_UNUSED_CONTEXT;
11411     PERL_ARGS_ASSERT_DIRP_DUP;
11412
11413     if (!dp)
11414         return (DIR*)NULL;
11415
11416     /* look for it in the table first */
11417     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11418     if (ret)
11419         return ret;
11420
11421 #ifdef HAS_FCHDIR
11422
11423     PERL_UNUSED_ARG(param);
11424
11425     /* create anew */
11426
11427     /* open the current directory (so we can switch back) */
11428     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11429
11430     /* chdir to our dir handle and open the present working directory */
11431     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11432         PerlDir_close(pwd);
11433         return (DIR *)NULL;
11434     }
11435     /* Now we should have two dir handles pointing to the same dir. */
11436
11437     /* Be nice to the calling code and chdir back to where we were. */
11438     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11439
11440     /* We have no need of the pwd handle any more. */
11441     PerlDir_close(pwd);
11442
11443 #ifdef DIRNAMLEN
11444 # define d_namlen(d) (d)->d_namlen
11445 #else
11446 # define d_namlen(d) strlen((d)->d_name)
11447 #endif
11448     /* Iterate once through dp, to get the file name at the current posi-
11449        tion. Then step back. */
11450     pos = PerlDir_tell(dp);
11451     if ((dirent = PerlDir_read(dp))) {
11452         len = d_namlen(dirent);
11453         if (len <= sizeof smallbuf) name = smallbuf;
11454         else Newx(name, len, char);
11455         Move(dirent->d_name, name, len, char);
11456     }
11457     PerlDir_seek(dp, pos);
11458
11459     /* Iterate through the new dir handle, till we find a file with the
11460        right name. */
11461     if (!dirent) /* just before the end */
11462         for(;;) {
11463             pos = PerlDir_tell(ret);
11464             if (PerlDir_read(ret)) continue; /* not there yet */
11465             PerlDir_seek(ret, pos); /* step back */
11466             break;
11467         }
11468     else {
11469         const long pos0 = PerlDir_tell(ret);
11470         for(;;) {
11471             pos = PerlDir_tell(ret);
11472             if ((dirent = PerlDir_read(ret))) {
11473                 if (len == d_namlen(dirent)
11474                  && memEQ(name, dirent->d_name, len)) {
11475                     /* found it */
11476                     PerlDir_seek(ret, pos); /* step back */
11477                     break;
11478                 }
11479                 /* else we are not there yet; keep iterating */
11480             }
11481             else { /* This is not meant to happen. The best we can do is
11482                       reset the iterator to the beginning. */
11483                 PerlDir_seek(ret, pos0);
11484                 break;
11485             }
11486         }
11487     }
11488 #undef d_namlen
11489
11490     if (name && name != smallbuf)
11491         Safefree(name);
11492 #endif
11493
11494 #ifdef WIN32
11495     ret = win32_dirp_dup(dp, param);
11496 #endif
11497
11498     /* pop it in the pointer table */
11499     if (ret)
11500         ptr_table_store(PL_ptr_table, dp, ret);
11501
11502     return ret;
11503 }
11504
11505 /* duplicate a typeglob */
11506
11507 GP *
11508 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11509 {
11510     GP *ret;
11511
11512     PERL_ARGS_ASSERT_GP_DUP;
11513
11514     if (!gp)
11515         return (GP*)NULL;
11516     /* look for it in the table first */
11517     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11518     if (ret)
11519         return ret;
11520
11521     /* create anew and remember what it is */
11522     Newxz(ret, 1, GP);
11523     ptr_table_store(PL_ptr_table, gp, ret);
11524
11525     /* clone */
11526     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11527        on Newxz() to do this for us.  */
11528     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11529     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11530     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11531     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11532     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11533     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11534     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11535     ret->gp_cvgen       = gp->gp_cvgen;
11536     ret->gp_line        = gp->gp_line;
11537     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11538     return ret;
11539 }
11540
11541 /* duplicate a chain of magic */
11542
11543 MAGIC *
11544 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11545 {
11546     MAGIC *mgret = NULL;
11547     MAGIC **mgprev_p = &mgret;
11548
11549     PERL_ARGS_ASSERT_MG_DUP;
11550
11551     for (; mg; mg = mg->mg_moremagic) {
11552         MAGIC *nmg;
11553
11554         if ((param->flags & CLONEf_JOIN_IN)
11555                 && mg->mg_type == PERL_MAGIC_backref)
11556             /* when joining, we let the individual SVs add themselves to
11557              * backref as needed. */
11558             continue;
11559
11560         Newx(nmg, 1, MAGIC);
11561         *mgprev_p = nmg;
11562         mgprev_p = &(nmg->mg_moremagic);
11563
11564         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11565            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11566            from the original commit adding Perl_mg_dup() - revision 4538.
11567            Similarly there is the annotation "XXX random ptr?" next to the
11568            assignment to nmg->mg_ptr.  */
11569         *nmg = *mg;
11570
11571         /* FIXME for plugins
11572         if (nmg->mg_type == PERL_MAGIC_qr) {
11573             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11574         }
11575         else
11576         */
11577         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11578                           ? nmg->mg_type == PERL_MAGIC_backref
11579                                 /* The backref AV has its reference
11580                                  * count deliberately bumped by 1 */
11581                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11582                                                     nmg->mg_obj, param))
11583                                 : sv_dup_inc(nmg->mg_obj, param)
11584                           : sv_dup(nmg->mg_obj, param);
11585
11586         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11587             if (nmg->mg_len > 0) {
11588                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11589                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11590                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11591                 {
11592                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11593                     sv_dup_inc_multiple((SV**)(namtp->table),
11594                                         (SV**)(namtp->table), NofAMmeth, param);
11595                 }
11596             }
11597             else if (nmg->mg_len == HEf_SVKEY)
11598                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11599         }
11600         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11601             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11602         }
11603     }
11604     return mgret;
11605 }
11606
11607 #endif /* USE_ITHREADS */
11608
11609 struct ptr_tbl_arena {
11610     struct ptr_tbl_arena *next;
11611     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11612 };
11613
11614 /* create a new pointer-mapping table */
11615
11616 PTR_TBL_t *
11617 Perl_ptr_table_new(pTHX)
11618 {
11619     PTR_TBL_t *tbl;
11620     PERL_UNUSED_CONTEXT;
11621
11622     Newx(tbl, 1, PTR_TBL_t);
11623     tbl->tbl_max        = 511;
11624     tbl->tbl_items      = 0;
11625     tbl->tbl_arena      = NULL;
11626     tbl->tbl_arena_next = NULL;
11627     tbl->tbl_arena_end  = NULL;
11628     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11629     return tbl;
11630 }
11631
11632 #define PTR_TABLE_HASH(ptr) \
11633   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11634
11635 /* map an existing pointer using a table */
11636
11637 STATIC PTR_TBL_ENT_t *
11638 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11639 {
11640     PTR_TBL_ENT_t *tblent;
11641     const UV hash = PTR_TABLE_HASH(sv);
11642
11643     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11644
11645     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11646     for (; tblent; tblent = tblent->next) {
11647         if (tblent->oldval == sv)
11648             return tblent;
11649     }
11650     return NULL;
11651 }
11652
11653 void *
11654 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11655 {
11656     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11657
11658     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11659     PERL_UNUSED_CONTEXT;
11660
11661     return tblent ? tblent->newval : NULL;
11662 }
11663
11664 /* add a new entry to a pointer-mapping table */
11665
11666 void
11667 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11668 {
11669     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11670
11671     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11672     PERL_UNUSED_CONTEXT;
11673
11674     if (tblent) {
11675         tblent->newval = newsv;
11676     } else {
11677         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11678
11679         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11680             struct ptr_tbl_arena *new_arena;
11681
11682             Newx(new_arena, 1, struct ptr_tbl_arena);
11683             new_arena->next = tbl->tbl_arena;
11684             tbl->tbl_arena = new_arena;
11685             tbl->tbl_arena_next = new_arena->array;
11686             tbl->tbl_arena_end = new_arena->array
11687                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11688         }
11689
11690         tblent = tbl->tbl_arena_next++;
11691
11692         tblent->oldval = oldsv;
11693         tblent->newval = newsv;
11694         tblent->next = tbl->tbl_ary[entry];
11695         tbl->tbl_ary[entry] = tblent;
11696         tbl->tbl_items++;
11697         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11698             ptr_table_split(tbl);
11699     }
11700 }
11701
11702 /* double the hash bucket size of an existing ptr table */
11703
11704 void
11705 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11706 {
11707     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11708     const UV oldsize = tbl->tbl_max + 1;
11709     UV newsize = oldsize * 2;
11710     UV i;
11711
11712     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11713     PERL_UNUSED_CONTEXT;
11714
11715     Renew(ary, newsize, PTR_TBL_ENT_t*);
11716     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11717     tbl->tbl_max = --newsize;
11718     tbl->tbl_ary = ary;
11719     for (i=0; i < oldsize; i++, ary++) {
11720         PTR_TBL_ENT_t **entp = ary;
11721         PTR_TBL_ENT_t *ent = *ary;
11722         PTR_TBL_ENT_t **curentp;
11723         if (!ent)
11724             continue;
11725         curentp = ary + oldsize;
11726         do {
11727             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11728                 *entp = ent->next;
11729                 ent->next = *curentp;
11730                 *curentp = ent;
11731             }
11732             else
11733                 entp = &ent->next;
11734             ent = *entp;
11735         } while (ent);
11736     }
11737 }
11738
11739 /* remove all the entries from a ptr table */
11740 /* Deprecated - will be removed post 5.14 */
11741
11742 void
11743 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11744 {
11745     if (tbl && tbl->tbl_items) {
11746         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11747
11748         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11749
11750         while (arena) {
11751             struct ptr_tbl_arena *next = arena->next;
11752
11753             Safefree(arena);
11754             arena = next;
11755         };
11756
11757         tbl->tbl_items = 0;
11758         tbl->tbl_arena = NULL;
11759         tbl->tbl_arena_next = NULL;
11760         tbl->tbl_arena_end = NULL;
11761     }
11762 }
11763
11764 /* clear and free a ptr table */
11765
11766 void
11767 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11768 {
11769     struct ptr_tbl_arena *arena;
11770
11771     if (!tbl) {
11772         return;
11773     }
11774
11775     arena = tbl->tbl_arena;
11776
11777     while (arena) {
11778         struct ptr_tbl_arena *next = arena->next;
11779
11780         Safefree(arena);
11781         arena = next;
11782     }
11783
11784     Safefree(tbl->tbl_ary);
11785     Safefree(tbl);
11786 }
11787
11788 #if defined(USE_ITHREADS)
11789
11790 void
11791 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11792 {
11793     PERL_ARGS_ASSERT_RVPV_DUP;
11794
11795     if (SvROK(sstr)) {
11796         if (SvWEAKREF(sstr)) {
11797             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11798             if (param->flags & CLONEf_JOIN_IN) {
11799                 /* if joining, we add any back references individually rather
11800                  * than copying the whole backref array */
11801                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11802             }
11803         }
11804         else
11805             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11806     }
11807     else if (SvPVX_const(sstr)) {
11808         /* Has something there */
11809         if (SvLEN(sstr)) {
11810             /* Normal PV - clone whole allocated space */
11811             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11812             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11813                 /* Not that normal - actually sstr is copy on write.
11814                    But we are a true, independent SV, so:  */
11815                 SvREADONLY_off(dstr);
11816                 SvFAKE_off(dstr);
11817             }
11818         }
11819         else {
11820             /* Special case - not normally malloced for some reason */
11821             if (isGV_with_GP(sstr)) {
11822                 /* Don't need to do anything here.  */
11823             }
11824             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
11825                 /* A "shared" PV - clone it as "shared" PV */
11826                 SvPV_set(dstr,
11827                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11828                                          param)));
11829             }
11830             else {
11831                 /* Some other special case - random pointer */
11832                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
11833             }
11834         }
11835     }
11836     else {
11837         /* Copy the NULL */
11838         SvPV_set(dstr, NULL);
11839     }
11840 }
11841
11842 /* duplicate a list of SVs. source and dest may point to the same memory.  */
11843 static SV **
11844 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11845                       SSize_t items, CLONE_PARAMS *const param)
11846 {
11847     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11848
11849     while (items-- > 0) {
11850         *dest++ = sv_dup_inc(*source++, param);
11851     }
11852
11853     return dest;
11854 }
11855
11856 /* duplicate an SV of any type (including AV, HV etc) */
11857
11858 static SV *
11859 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11860 {
11861     dVAR;
11862     SV *dstr;
11863
11864     PERL_ARGS_ASSERT_SV_DUP_COMMON;
11865
11866     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
11867 #ifdef DEBUG_LEAKING_SCALARS_ABORT
11868         abort();
11869 #endif
11870         return NULL;
11871     }
11872     /* look for it in the table first */
11873     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11874     if (dstr)
11875         return dstr;
11876
11877     if(param->flags & CLONEf_JOIN_IN) {
11878         /** We are joining here so we don't want do clone
11879             something that is bad **/
11880         if (SvTYPE(sstr) == SVt_PVHV) {
11881             const HEK * const hvname = HvNAME_HEK(sstr);
11882             if (hvname) {
11883                 /** don't clone stashes if they already exist **/
11884                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11885                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
11886                 ptr_table_store(PL_ptr_table, sstr, dstr);
11887                 return dstr;
11888             }
11889         }
11890         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
11891             HV *stash = GvSTASH(sstr);
11892             const HEK * hvname;
11893             if (stash && (hvname = HvNAME_HEK(stash))) {
11894                 /** don't clone GVs if they already exist **/
11895                 SV **svp;
11896                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11897                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
11898                 svp = hv_fetch(
11899                         stash, GvNAME(sstr),
11900                         GvNAMEUTF8(sstr)
11901                             ? -GvNAMELEN(sstr)
11902                             :  GvNAMELEN(sstr),
11903                         0
11904                       );
11905                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
11906                     ptr_table_store(PL_ptr_table, sstr, *svp);
11907                     return *svp;
11908                 }
11909             }
11910         }
11911     }
11912
11913     /* create anew and remember what it is */
11914     new_SV(dstr);
11915
11916 #ifdef DEBUG_LEAKING_SCALARS
11917     dstr->sv_debug_optype = sstr->sv_debug_optype;
11918     dstr->sv_debug_line = sstr->sv_debug_line;
11919     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11920     dstr->sv_debug_parent = (SV*)sstr;
11921     FREE_SV_DEBUG_FILE(dstr);
11922     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11923 #endif
11924
11925     ptr_table_store(PL_ptr_table, sstr, dstr);
11926
11927     /* clone */
11928     SvFLAGS(dstr)       = SvFLAGS(sstr);
11929     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11930     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11931
11932 #ifdef DEBUGGING
11933     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11934         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11935                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11936 #endif
11937
11938     /* don't clone objects whose class has asked us not to */
11939     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11940         SvFLAGS(dstr) = 0;
11941         return dstr;
11942     }
11943
11944     switch (SvTYPE(sstr)) {
11945     case SVt_NULL:
11946         SvANY(dstr)     = NULL;
11947         break;
11948     case SVt_IV:
11949         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11950         if(SvROK(sstr)) {
11951             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11952         } else {
11953             SvIV_set(dstr, SvIVX(sstr));
11954         }
11955         break;
11956     case SVt_NV:
11957         SvANY(dstr)     = new_XNV();
11958         SvNV_set(dstr, SvNVX(sstr));
11959         break;
11960         /* case SVt_BIND: */
11961     default:
11962         {
11963             /* These are all the types that need complex bodies allocating.  */
11964             void *new_body;
11965             const svtype sv_type = SvTYPE(sstr);
11966             const struct body_details *const sv_type_details
11967                 = bodies_by_type + sv_type;
11968
11969             switch (sv_type) {
11970             default:
11971                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11972                 break;
11973
11974             case SVt_PVGV:
11975             case SVt_PVIO:
11976             case SVt_PVFM:
11977             case SVt_PVHV:
11978             case SVt_PVAV:
11979             case SVt_PVCV:
11980             case SVt_PVLV:
11981             case SVt_REGEXP:
11982             case SVt_PVMG:
11983             case SVt_PVNV:
11984             case SVt_PVIV:
11985             case SVt_PV:
11986                 assert(sv_type_details->body_size);
11987                 if (sv_type_details->arena) {
11988                     new_body_inline(new_body, sv_type);
11989                     new_body
11990                         = (void*)((char*)new_body - sv_type_details->offset);
11991                 } else {
11992                     new_body = new_NOARENA(sv_type_details);
11993                 }
11994             }
11995             assert(new_body);
11996             SvANY(dstr) = new_body;
11997
11998 #ifndef PURIFY
11999             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12000                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12001                  sv_type_details->copy, char);
12002 #else
12003             Copy(((char*)SvANY(sstr)),
12004                  ((char*)SvANY(dstr)),
12005                  sv_type_details->body_size + sv_type_details->offset, char);
12006 #endif
12007
12008             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12009                 && !isGV_with_GP(dstr)
12010                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12011                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12012
12013             /* The Copy above means that all the source (unduplicated) pointers
12014                are now in the destination.  We can check the flags and the
12015                pointers in either, but it's possible that there's less cache
12016                missing by always going for the destination.
12017                FIXME - instrument and check that assumption  */
12018             if (sv_type >= SVt_PVMG) {
12019                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12020                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12021                 } else if (SvMAGIC(dstr))
12022                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12023                 if (SvSTASH(dstr))
12024                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12025             }
12026
12027             /* The cast silences a GCC warning about unhandled types.  */
12028             switch ((int)sv_type) {
12029             case SVt_PV:
12030                 break;
12031             case SVt_PVIV:
12032                 break;
12033             case SVt_PVNV:
12034                 break;
12035             case SVt_PVMG:
12036                 break;
12037             case SVt_REGEXP:
12038                 /* FIXME for plugins */
12039                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12040                 break;
12041             case SVt_PVLV:
12042                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12043                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12044                     LvTARG(dstr) = dstr;
12045                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12046                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12047                 else
12048                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12049             case SVt_PVGV:
12050                 /* non-GP case already handled above */
12051                 if(isGV_with_GP(sstr)) {
12052                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12053                     /* Don't call sv_add_backref here as it's going to be
12054                        created as part of the magic cloning of the symbol
12055                        table--unless this is during a join and the stash
12056                        is not actually being cloned.  */
12057                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12058                        at the point of this comment.  */
12059                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12060                     if (param->flags & CLONEf_JOIN_IN)
12061                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12062                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12063                     (void)GpREFCNT_inc(GvGP(dstr));
12064                 }
12065                 break;
12066             case SVt_PVIO:
12067                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12068                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12069                     /* I have no idea why fake dirp (rsfps)
12070                        should be treated differently but otherwise
12071                        we end up with leaks -- sky*/
12072                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12073                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12074                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12075                 } else {
12076                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12077                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12078                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12079                     if (IoDIRP(dstr)) {
12080                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12081                     } else {
12082                         NOOP;
12083                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12084                     }
12085                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12086                 }
12087                 if (IoOFP(dstr) == IoIFP(sstr))
12088                     IoOFP(dstr) = IoIFP(dstr);
12089                 else
12090                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12091                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12092                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12093                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12094                 break;
12095             case SVt_PVAV:
12096                 /* avoid cloning an empty array */
12097                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12098                     SV **dst_ary, **src_ary;
12099                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12100
12101                     src_ary = AvARRAY((const AV *)sstr);
12102                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12103                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12104                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12105                     AvALLOC((const AV *)dstr) = dst_ary;
12106                     if (AvREAL((const AV *)sstr)) {
12107                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12108                                                       param);
12109                     }
12110                     else {
12111                         while (items-- > 0)
12112                             *dst_ary++ = sv_dup(*src_ary++, param);
12113                     }
12114                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12115                     while (items-- > 0) {
12116                         *dst_ary++ = &PL_sv_undef;
12117                     }
12118                 }
12119                 else {
12120                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12121                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12122                     AvMAX(  (const AV *)dstr)   = -1;
12123                     AvFILLp((const AV *)dstr)   = -1;
12124                 }
12125                 break;
12126             case SVt_PVHV:
12127                 if (HvARRAY((const HV *)sstr)) {
12128                     STRLEN i = 0;
12129                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12130                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12131                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12132                     char *darray;
12133                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12134                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12135                         char);
12136                     HvARRAY(dstr) = (HE**)darray;
12137                     while (i <= sxhv->xhv_max) {
12138                         const HE * const source = HvARRAY(sstr)[i];
12139                         HvARRAY(dstr)[i] = source
12140                             ? he_dup(source, sharekeys, param) : 0;
12141                         ++i;
12142                     }
12143                     if (SvOOK(sstr)) {
12144                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12145                         struct xpvhv_aux * const daux = HvAUX(dstr);
12146                         /* This flag isn't copied.  */
12147                         SvOOK_on(dstr);
12148
12149                         if (saux->xhv_name_count) {
12150                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12151                             const I32 count
12152                              = saux->xhv_name_count < 0
12153                                 ? -saux->xhv_name_count
12154                                 :  saux->xhv_name_count;
12155                             HEK **shekp = sname + count;
12156                             HEK **dhekp;
12157                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12158                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12159                             while (shekp-- > sname) {
12160                                 dhekp--;
12161                                 *dhekp = hek_dup(*shekp, param);
12162                             }
12163                         }
12164                         else {
12165                             daux->xhv_name_u.xhvnameu_name
12166                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12167                                           param);
12168                         }
12169                         daux->xhv_name_count = saux->xhv_name_count;
12170
12171                         daux->xhv_riter = saux->xhv_riter;
12172                         daux->xhv_eiter = saux->xhv_eiter
12173                             ? he_dup(saux->xhv_eiter,
12174                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12175                         /* backref array needs refcnt=2; see sv_add_backref */
12176                         daux->xhv_backreferences =
12177                             (param->flags & CLONEf_JOIN_IN)
12178                                 /* when joining, we let the individual GVs and
12179                                  * CVs add themselves to backref as
12180                                  * needed. This avoids pulling in stuff
12181                                  * that isn't required, and simplifies the
12182                                  * case where stashes aren't cloned back
12183                                  * if they already exist in the parent
12184                                  * thread */
12185                             ? NULL
12186                             : saux->xhv_backreferences
12187                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12188                                     ? MUTABLE_AV(SvREFCNT_inc(
12189                                           sv_dup_inc((const SV *)
12190                                             saux->xhv_backreferences, param)))
12191                                     : MUTABLE_AV(sv_dup((const SV *)
12192                                             saux->xhv_backreferences, param))
12193                                 : 0;
12194
12195                         daux->xhv_mro_meta = saux->xhv_mro_meta
12196                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12197                             : 0;
12198
12199                         /* Record stashes for possible cloning in Perl_clone(). */
12200                         if (HvNAME(sstr))
12201                             av_push(param->stashes, dstr);
12202                     }
12203                 }
12204                 else
12205                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12206                 break;
12207             case SVt_PVCV:
12208                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12209                     CvDEPTH(dstr) = 0;
12210                 }
12211                 /*FALLTHROUGH*/
12212             case SVt_PVFM:
12213                 /* NOTE: not refcounted */
12214                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12215                     hv_dup(CvSTASH(dstr), param);
12216                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12217                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12218                 if (!CvISXSUB(dstr)) {
12219                     OP_REFCNT_LOCK;
12220                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12221                     OP_REFCNT_UNLOCK;
12222                 } else if (CvCONST(dstr)) {
12223                     CvXSUBANY(dstr).any_ptr =
12224                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12225                 }
12226                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12227                 /* don't dup if copying back - CvGV isn't refcounted, so the
12228                  * duped GV may never be freed. A bit of a hack! DAPM */
12229                 SvANY(MUTABLE_CV(dstr))->xcv_gv =
12230                     CvCVGV_RC(dstr)
12231                     ? gv_dup_inc(CvGV(sstr), param)
12232                     : (param->flags & CLONEf_JOIN_IN)
12233                         ? NULL
12234                         : gv_dup(CvGV(sstr), param);
12235
12236                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12237                 CvOUTSIDE(dstr) =
12238                     CvWEAKOUTSIDE(sstr)
12239                     ? cv_dup(    CvOUTSIDE(dstr), param)
12240                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12241                 break;
12242             }
12243         }
12244     }
12245
12246     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12247         ++PL_sv_objcount;
12248
12249     return dstr;
12250  }
12251
12252 SV *
12253 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12254 {
12255     PERL_ARGS_ASSERT_SV_DUP_INC;
12256     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12257 }
12258
12259 SV *
12260 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12261 {
12262     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12263     PERL_ARGS_ASSERT_SV_DUP;
12264
12265     /* Track every SV that (at least initially) had a reference count of 0.
12266        We need to do this by holding an actual reference to it in this array.
12267        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12268        (akin to the stashes hash, and the perl stack), we come unstuck if
12269        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12270        thread) is manipulated in a CLONE method, because CLONE runs before the
12271        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12272        (and fix things up by giving each a reference via the temps stack).
12273        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12274        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12275        before the walk of unreferenced happens and a reference to that is SV
12276        added to the temps stack. At which point we have the same SV considered
12277        to be in use, and free to be re-used. Not good.
12278     */
12279     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12280         assert(param->unreferenced);
12281         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12282     }
12283
12284     return dstr;
12285 }
12286
12287 /* duplicate a context */
12288
12289 PERL_CONTEXT *
12290 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12291 {
12292     PERL_CONTEXT *ncxs;
12293
12294     PERL_ARGS_ASSERT_CX_DUP;
12295
12296     if (!cxs)
12297         return (PERL_CONTEXT*)NULL;
12298
12299     /* look for it in the table first */
12300     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12301     if (ncxs)
12302         return ncxs;
12303
12304     /* create anew and remember what it is */
12305     Newx(ncxs, max + 1, PERL_CONTEXT);
12306     ptr_table_store(PL_ptr_table, cxs, ncxs);
12307     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12308
12309     while (ix >= 0) {
12310         PERL_CONTEXT * const ncx = &ncxs[ix];
12311         if (CxTYPE(ncx) == CXt_SUBST) {
12312             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12313         }
12314         else {
12315             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12316             switch (CxTYPE(ncx)) {
12317             case CXt_SUB:
12318                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12319                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12320                                            : cv_dup(ncx->blk_sub.cv,param));
12321                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12322                                            ? av_dup_inc(ncx->blk_sub.argarray,
12323                                                         param)
12324                                            : NULL);
12325                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12326                                                      param);
12327                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12328                                            ncx->blk_sub.oldcomppad);
12329                 break;
12330             case CXt_EVAL:
12331                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12332                                                       param);
12333                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12334                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12335                 break;
12336             case CXt_LOOP_LAZYSV:
12337                 ncx->blk_loop.state_u.lazysv.end
12338                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12339                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12340                    actually being the same function, and order equivalence of
12341                    the two unions.
12342                    We can assert the later [but only at run time :-(]  */
12343                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12344                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12345             case CXt_LOOP_FOR:
12346                 ncx->blk_loop.state_u.ary.ary
12347                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12348             case CXt_LOOP_LAZYIV:
12349             case CXt_LOOP_PLAIN:
12350                 if (CxPADLOOP(ncx)) {
12351                     ncx->blk_loop.itervar_u.oldcomppad
12352                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12353                                         ncx->blk_loop.itervar_u.oldcomppad);
12354                 } else {
12355                     ncx->blk_loop.itervar_u.gv
12356                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12357                                     param);
12358                 }
12359                 break;
12360             case CXt_FORMAT:
12361                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12362                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12363                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12364                                                      param);
12365                 break;
12366             case CXt_BLOCK:
12367             case CXt_NULL:
12368             case CXt_WHEN:
12369             case CXt_GIVEN:
12370                 break;
12371             }
12372         }
12373         --ix;
12374     }
12375     return ncxs;
12376 }
12377
12378 /* duplicate a stack info structure */
12379
12380 PERL_SI *
12381 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12382 {
12383     PERL_SI *nsi;
12384
12385     PERL_ARGS_ASSERT_SI_DUP;
12386
12387     if (!si)
12388         return (PERL_SI*)NULL;
12389
12390     /* look for it in the table first */
12391     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12392     if (nsi)
12393         return nsi;
12394
12395     /* create anew and remember what it is */
12396     Newxz(nsi, 1, PERL_SI);
12397     ptr_table_store(PL_ptr_table, si, nsi);
12398
12399     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12400     nsi->si_cxix        = si->si_cxix;
12401     nsi->si_cxmax       = si->si_cxmax;
12402     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12403     nsi->si_type        = si->si_type;
12404     nsi->si_prev        = si_dup(si->si_prev, param);
12405     nsi->si_next        = si_dup(si->si_next, param);
12406     nsi->si_markoff     = si->si_markoff;
12407
12408     return nsi;
12409 }
12410
12411 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12412 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12413 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12414 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12415 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12416 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12417 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12418 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12419 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12420 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12421 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12422 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12423 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12424 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12425 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12426 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12427
12428 /* XXXXX todo */
12429 #define pv_dup_inc(p)   SAVEPV(p)
12430 #define pv_dup(p)       SAVEPV(p)
12431 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12432
12433 /* map any object to the new equivent - either something in the
12434  * ptr table, or something in the interpreter structure
12435  */
12436
12437 void *
12438 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12439 {
12440     void *ret;
12441
12442     PERL_ARGS_ASSERT_ANY_DUP;
12443
12444     if (!v)
12445         return (void*)NULL;
12446
12447     /* look for it in the table first */
12448     ret = ptr_table_fetch(PL_ptr_table, v);
12449     if (ret)
12450         return ret;
12451
12452     /* see if it is part of the interpreter structure */
12453     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12454         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12455     else {
12456         ret = v;
12457     }
12458
12459     return ret;
12460 }
12461
12462 /* duplicate the save stack */
12463
12464 ANY *
12465 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12466 {
12467     dVAR;
12468     ANY * const ss      = proto_perl->Isavestack;
12469     const I32 max       = proto_perl->Isavestack_max;
12470     I32 ix              = proto_perl->Isavestack_ix;
12471     ANY *nss;
12472     const SV *sv;
12473     const GV *gv;
12474     const AV *av;
12475     const HV *hv;
12476     void* ptr;
12477     int intval;
12478     long longval;
12479     GP *gp;
12480     IV iv;
12481     I32 i;
12482     char *c = NULL;
12483     void (*dptr) (void*);
12484     void (*dxptr) (pTHX_ void*);
12485
12486     PERL_ARGS_ASSERT_SS_DUP;
12487
12488     Newxz(nss, max, ANY);
12489
12490     while (ix > 0) {
12491         const UV uv = POPUV(ss,ix);
12492         const U8 type = (U8)uv & SAVE_MASK;
12493
12494         TOPUV(nss,ix) = uv;
12495         switch (type) {
12496         case SAVEt_CLEARSV:
12497             break;
12498         case SAVEt_HELEM:               /* hash element */
12499             sv = (const SV *)POPPTR(ss,ix);
12500             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12501             /* fall through */
12502         case SAVEt_ITEM:                        /* normal string */
12503         case SAVEt_GVSV:                        /* scalar slot in GV */
12504         case SAVEt_SV:                          /* scalar reference */
12505             sv = (const SV *)POPPTR(ss,ix);
12506             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12507             /* fall through */
12508         case SAVEt_FREESV:
12509         case SAVEt_MORTALIZESV:
12510             sv = (const SV *)POPPTR(ss,ix);
12511             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12512             break;
12513         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12514             c = (char*)POPPTR(ss,ix);
12515             TOPPTR(nss,ix) = savesharedpv(c);
12516             ptr = POPPTR(ss,ix);
12517             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12518             break;
12519         case SAVEt_GENERIC_SVREF:               /* generic sv */
12520         case SAVEt_SVREF:                       /* scalar reference */
12521             sv = (const SV *)POPPTR(ss,ix);
12522             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12523             ptr = POPPTR(ss,ix);
12524             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12525             break;
12526         case SAVEt_HV:                          /* hash reference */
12527         case SAVEt_AV:                          /* array reference */
12528             sv = (const SV *) POPPTR(ss,ix);
12529             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12530             /* fall through */
12531         case SAVEt_COMPPAD:
12532         case SAVEt_NSTAB:
12533             sv = (const SV *) POPPTR(ss,ix);
12534             TOPPTR(nss,ix) = sv_dup(sv, param);
12535             break;
12536         case SAVEt_INT:                         /* int reference */
12537             ptr = POPPTR(ss,ix);
12538             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12539             intval = (int)POPINT(ss,ix);
12540             TOPINT(nss,ix) = intval;
12541             break;
12542         case SAVEt_LONG:                        /* long reference */
12543             ptr = POPPTR(ss,ix);
12544             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12545             longval = (long)POPLONG(ss,ix);
12546             TOPLONG(nss,ix) = longval;
12547             break;
12548         case SAVEt_I32:                         /* I32 reference */
12549             ptr = POPPTR(ss,ix);
12550             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12551             i = POPINT(ss,ix);
12552             TOPINT(nss,ix) = i;
12553             break;
12554         case SAVEt_IV:                          /* IV reference */
12555             ptr = POPPTR(ss,ix);
12556             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12557             iv = POPIV(ss,ix);
12558             TOPIV(nss,ix) = iv;
12559             break;
12560         case SAVEt_HPTR:                        /* HV* reference */
12561         case SAVEt_APTR:                        /* AV* reference */
12562         case SAVEt_SPTR:                        /* SV* reference */
12563             ptr = POPPTR(ss,ix);
12564             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12565             sv = (const SV *)POPPTR(ss,ix);
12566             TOPPTR(nss,ix) = sv_dup(sv, param);
12567             break;
12568         case SAVEt_VPTR:                        /* random* reference */
12569             ptr = POPPTR(ss,ix);
12570             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12571             /* Fall through */
12572         case SAVEt_INT_SMALL:
12573         case SAVEt_I32_SMALL:
12574         case SAVEt_I16:                         /* I16 reference */
12575         case SAVEt_I8:                          /* I8 reference */
12576         case SAVEt_BOOL:
12577             ptr = POPPTR(ss,ix);
12578             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12579             break;
12580         case SAVEt_GENERIC_PVREF:               /* generic char* */
12581         case SAVEt_PPTR:                        /* char* reference */
12582             ptr = POPPTR(ss,ix);
12583             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12584             c = (char*)POPPTR(ss,ix);
12585             TOPPTR(nss,ix) = pv_dup(c);
12586             break;
12587         case SAVEt_GP:                          /* scalar reference */
12588             gp = (GP*)POPPTR(ss,ix);
12589             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12590             (void)GpREFCNT_inc(gp);
12591             gv = (const GV *)POPPTR(ss,ix);
12592             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12593             break;
12594         case SAVEt_FREEOP:
12595             ptr = POPPTR(ss,ix);
12596             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12597                 /* these are assumed to be refcounted properly */
12598                 OP *o;
12599                 switch (((OP*)ptr)->op_type) {
12600                 case OP_LEAVESUB:
12601                 case OP_LEAVESUBLV:
12602                 case OP_LEAVEEVAL:
12603                 case OP_LEAVE:
12604                 case OP_SCOPE:
12605                 case OP_LEAVEWRITE:
12606                     TOPPTR(nss,ix) = ptr;
12607                     o = (OP*)ptr;
12608                     OP_REFCNT_LOCK;
12609                     (void) OpREFCNT_inc(o);
12610                     OP_REFCNT_UNLOCK;
12611                     break;
12612                 default:
12613                     TOPPTR(nss,ix) = NULL;
12614                     break;
12615                 }
12616             }
12617             else
12618                 TOPPTR(nss,ix) = NULL;
12619             break;
12620         case SAVEt_FREECOPHH:
12621             ptr = POPPTR(ss,ix);
12622             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12623             break;
12624         case SAVEt_DELETE:
12625             hv = (const HV *)POPPTR(ss,ix);
12626             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12627             i = POPINT(ss,ix);
12628             TOPINT(nss,ix) = i;
12629             /* Fall through */
12630         case SAVEt_FREEPV:
12631             c = (char*)POPPTR(ss,ix);
12632             TOPPTR(nss,ix) = pv_dup_inc(c);
12633             break;
12634         case SAVEt_STACK_POS:           /* Position on Perl stack */
12635             i = POPINT(ss,ix);
12636             TOPINT(nss,ix) = i;
12637             break;
12638         case SAVEt_DESTRUCTOR:
12639             ptr = POPPTR(ss,ix);
12640             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12641             dptr = POPDPTR(ss,ix);
12642             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12643                                         any_dup(FPTR2DPTR(void *, dptr),
12644                                                 proto_perl));
12645             break;
12646         case SAVEt_DESTRUCTOR_X:
12647             ptr = POPPTR(ss,ix);
12648             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12649             dxptr = POPDXPTR(ss,ix);
12650             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12651                                          any_dup(FPTR2DPTR(void *, dxptr),
12652                                                  proto_perl));
12653             break;
12654         case SAVEt_REGCONTEXT:
12655         case SAVEt_ALLOC:
12656             ix -= uv >> SAVE_TIGHT_SHIFT;
12657             break;
12658         case SAVEt_AELEM:               /* array element */
12659             sv = (const SV *)POPPTR(ss,ix);
12660             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12661             i = POPINT(ss,ix);
12662             TOPINT(nss,ix) = i;
12663             av = (const AV *)POPPTR(ss,ix);
12664             TOPPTR(nss,ix) = av_dup_inc(av, param);
12665             break;
12666         case SAVEt_OP:
12667             ptr = POPPTR(ss,ix);
12668             TOPPTR(nss,ix) = ptr;
12669             break;
12670         case SAVEt_HINTS:
12671             ptr = POPPTR(ss,ix);
12672             ptr = cophh_copy((COPHH*)ptr);
12673             TOPPTR(nss,ix) = ptr;
12674             i = POPINT(ss,ix);
12675             TOPINT(nss,ix) = i;
12676             if (i & HINT_LOCALIZE_HH) {
12677                 hv = (const HV *)POPPTR(ss,ix);
12678                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12679             }
12680             break;
12681         case SAVEt_PADSV_AND_MORTALIZE:
12682             longval = (long)POPLONG(ss,ix);
12683             TOPLONG(nss,ix) = longval;
12684             ptr = POPPTR(ss,ix);
12685             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12686             sv = (const SV *)POPPTR(ss,ix);
12687             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12688             break;
12689         case SAVEt_SET_SVFLAGS:
12690             i = POPINT(ss,ix);
12691             TOPINT(nss,ix) = i;
12692             i = POPINT(ss,ix);
12693             TOPINT(nss,ix) = i;
12694             sv = (const SV *)POPPTR(ss,ix);
12695             TOPPTR(nss,ix) = sv_dup(sv, param);
12696             break;
12697         case SAVEt_RE_STATE:
12698             {
12699                 const struct re_save_state *const old_state
12700                     = (struct re_save_state *)
12701                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12702                 struct re_save_state *const new_state
12703                     = (struct re_save_state *)
12704                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12705
12706                 Copy(old_state, new_state, 1, struct re_save_state);
12707                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12708
12709                 new_state->re_state_bostr
12710                     = pv_dup(old_state->re_state_bostr);
12711                 new_state->re_state_reginput
12712                     = pv_dup(old_state->re_state_reginput);
12713                 new_state->re_state_regeol
12714                     = pv_dup(old_state->re_state_regeol);
12715                 new_state->re_state_regoffs
12716                     = (regexp_paren_pair*)
12717                         any_dup(old_state->re_state_regoffs, proto_perl);
12718                 new_state->re_state_reglastparen
12719                     = (U32*) any_dup(old_state->re_state_reglastparen, 
12720                               proto_perl);
12721                 new_state->re_state_reglastcloseparen
12722                     = (U32*)any_dup(old_state->re_state_reglastcloseparen,
12723                               proto_perl);
12724                 /* XXX This just has to be broken. The old save_re_context
12725                    code did SAVEGENERICPV(PL_reg_start_tmp);
12726                    PL_reg_start_tmp is char **.
12727                    Look above to what the dup code does for
12728                    SAVEt_GENERIC_PVREF
12729                    It can never have worked.
12730                    So this is merely a faithful copy of the exiting bug:  */
12731                 new_state->re_state_reg_start_tmp
12732                     = (char **) pv_dup((char *)
12733                                       old_state->re_state_reg_start_tmp);
12734                 /* I assume that it only ever "worked" because no-one called
12735                    (pseudo)fork while the regexp engine had re-entered itself.
12736                 */
12737 #ifdef PERL_OLD_COPY_ON_WRITE
12738                 new_state->re_state_nrs
12739                     = sv_dup(old_state->re_state_nrs, param);
12740 #endif
12741                 new_state->re_state_reg_magic
12742                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12743                                proto_perl);
12744                 new_state->re_state_reg_oldcurpm
12745                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12746                               proto_perl);
12747                 new_state->re_state_reg_curpm
12748                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12749                                proto_perl);
12750                 new_state->re_state_reg_oldsaved
12751                     = pv_dup(old_state->re_state_reg_oldsaved);
12752                 new_state->re_state_reg_poscache
12753                     = pv_dup(old_state->re_state_reg_poscache);
12754                 new_state->re_state_reg_starttry
12755                     = pv_dup(old_state->re_state_reg_starttry);
12756                 break;
12757             }
12758         case SAVEt_COMPILE_WARNINGS:
12759             ptr = POPPTR(ss,ix);
12760             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12761             break;
12762         case SAVEt_PARSER:
12763             ptr = POPPTR(ss,ix);
12764             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12765             break;
12766         default:
12767             Perl_croak(aTHX_
12768                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12769         }
12770     }
12771
12772     return nss;
12773 }
12774
12775
12776 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12777  * flag to the result. This is done for each stash before cloning starts,
12778  * so we know which stashes want their objects cloned */
12779
12780 static void
12781 do_mark_cloneable_stash(pTHX_ SV *const sv)
12782 {
12783     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12784     if (hvname) {
12785         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12786         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12787         if (cloner && GvCV(cloner)) {
12788             dSP;
12789             UV status;
12790
12791             ENTER;
12792             SAVETMPS;
12793             PUSHMARK(SP);
12794             mXPUSHs(newSVhek(hvname));
12795             PUTBACK;
12796             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12797             SPAGAIN;
12798             status = POPu;
12799             PUTBACK;
12800             FREETMPS;
12801             LEAVE;
12802             if (status)
12803                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12804         }
12805     }
12806 }
12807
12808
12809
12810 /*
12811 =for apidoc perl_clone
12812
12813 Create and return a new interpreter by cloning the current one.
12814
12815 perl_clone takes these flags as parameters:
12816
12817 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12818 without it we only clone the data and zero the stacks,
12819 with it we copy the stacks and the new perl interpreter is
12820 ready to run at the exact same point as the previous one.
12821 The pseudo-fork code uses COPY_STACKS while the
12822 threads->create doesn't.
12823
12824 CLONEf_KEEP_PTR_TABLE -
12825 perl_clone keeps a ptr_table with the pointer of the old
12826 variable as a key and the new variable as a value,
12827 this allows it to check if something has been cloned and not
12828 clone it again but rather just use the value and increase the
12829 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
12830 the ptr_table using the function
12831 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12832 reason to keep it around is if you want to dup some of your own
12833 variable who are outside the graph perl scans, example of this
12834 code is in threads.xs create.
12835
12836 CLONEf_CLONE_HOST -
12837 This is a win32 thing, it is ignored on unix, it tells perls
12838 win32host code (which is c++) to clone itself, this is needed on
12839 win32 if you want to run two threads at the same time,
12840 if you just want to do some stuff in a separate perl interpreter
12841 and then throw it away and return to the original one,
12842 you don't need to do anything.
12843
12844 =cut
12845 */
12846
12847 /* XXX the above needs expanding by someone who actually understands it ! */
12848 EXTERN_C PerlInterpreter *
12849 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12850
12851 PerlInterpreter *
12852 perl_clone(PerlInterpreter *proto_perl, UV flags)
12853 {
12854    dVAR;
12855 #ifdef PERL_IMPLICIT_SYS
12856
12857     PERL_ARGS_ASSERT_PERL_CLONE;
12858
12859    /* perlhost.h so we need to call into it
12860    to clone the host, CPerlHost should have a c interface, sky */
12861
12862    if (flags & CLONEf_CLONE_HOST) {
12863        return perl_clone_host(proto_perl,flags);
12864    }
12865    return perl_clone_using(proto_perl, flags,
12866                             proto_perl->IMem,
12867                             proto_perl->IMemShared,
12868                             proto_perl->IMemParse,
12869                             proto_perl->IEnv,
12870                             proto_perl->IStdIO,
12871                             proto_perl->ILIO,
12872                             proto_perl->IDir,
12873                             proto_perl->ISock,
12874                             proto_perl->IProc);
12875 }
12876
12877 PerlInterpreter *
12878 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12879                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
12880                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12881                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12882                  struct IPerlDir* ipD, struct IPerlSock* ipS,
12883                  struct IPerlProc* ipP)
12884 {
12885     /* XXX many of the string copies here can be optimized if they're
12886      * constants; they need to be allocated as common memory and just
12887      * their pointers copied. */
12888
12889     IV i;
12890     CLONE_PARAMS clone_params;
12891     CLONE_PARAMS* const param = &clone_params;
12892
12893     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
12894
12895     PERL_ARGS_ASSERT_PERL_CLONE_USING;
12896 #else           /* !PERL_IMPLICIT_SYS */
12897     IV i;
12898     CLONE_PARAMS clone_params;
12899     CLONE_PARAMS* param = &clone_params;
12900     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
12901
12902     PERL_ARGS_ASSERT_PERL_CLONE;
12903 #endif          /* PERL_IMPLICIT_SYS */
12904
12905     /* for each stash, determine whether its objects should be cloned */
12906     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12907     PERL_SET_THX(my_perl);
12908
12909 #ifdef DEBUGGING
12910     PoisonNew(my_perl, 1, PerlInterpreter);
12911     PL_op = NULL;
12912     PL_curcop = NULL;
12913     PL_defstash = NULL; /* may be used by perl malloc() */
12914     PL_markstack = 0;
12915     PL_scopestack = 0;
12916     PL_scopestack_name = 0;
12917     PL_savestack = 0;
12918     PL_savestack_ix = 0;
12919     PL_savestack_max = -1;
12920     PL_sig_pending = 0;
12921     PL_parser = NULL;
12922     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
12923 #  ifdef DEBUG_LEAKING_SCALARS
12924     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
12925 #  endif
12926 #else   /* !DEBUGGING */
12927     Zero(my_perl, 1, PerlInterpreter);
12928 #endif  /* DEBUGGING */
12929
12930 #ifdef PERL_IMPLICIT_SYS
12931     /* host pointers */
12932     PL_Mem              = ipM;
12933     PL_MemShared        = ipMS;
12934     PL_MemParse         = ipMP;
12935     PL_Env              = ipE;
12936     PL_StdIO            = ipStd;
12937     PL_LIO              = ipLIO;
12938     PL_Dir              = ipD;
12939     PL_Sock             = ipS;
12940     PL_Proc             = ipP;
12941 #endif          /* PERL_IMPLICIT_SYS */
12942
12943     param->flags = flags;
12944     /* Nothing in the core code uses this, but we make it available to
12945        extensions (using mg_dup).  */
12946     param->proto_perl = proto_perl;
12947     /* Likely nothing will use this, but it is initialised to be consistent
12948        with Perl_clone_params_new().  */
12949     param->new_perl = my_perl;
12950     param->unreferenced = NULL;
12951
12952     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12953
12954     PL_body_arenas = NULL;
12955     Zero(&PL_body_roots, 1, PL_body_roots);
12956     
12957     PL_sv_count         = 0;
12958     PL_sv_objcount      = 0;
12959     PL_sv_root          = NULL;
12960     PL_sv_arenaroot     = NULL;
12961
12962     PL_debug            = proto_perl->Idebug;
12963
12964     PL_hash_seed        = proto_perl->Ihash_seed;
12965     PL_rehash_seed      = proto_perl->Irehash_seed;
12966
12967     SvANY(&PL_sv_undef)         = NULL;
12968     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
12969     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
12970     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
12971     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12972                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12973
12974     SvANY(&PL_sv_yes)           = new_XPVNV();
12975     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
12976     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12977                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12978
12979     /* dbargs array probably holds garbage */
12980     PL_dbargs           = NULL;
12981
12982     PL_compiling = proto_perl->Icompiling;
12983
12984 #ifdef PERL_DEBUG_READONLY_OPS
12985     PL_slabs = NULL;
12986     PL_slab_count = 0;
12987 #endif
12988
12989     /* pseudo environmental stuff */
12990     PL_origargc         = proto_perl->Iorigargc;
12991     PL_origargv         = proto_perl->Iorigargv;
12992
12993     /* Set tainting stuff before PerlIO_debug can possibly get called */
12994     PL_tainting         = proto_perl->Itainting;
12995     PL_taint_warn       = proto_perl->Itaint_warn;
12996
12997     PL_minus_c          = proto_perl->Iminus_c;
12998
12999     PL_localpatches     = proto_perl->Ilocalpatches;
13000     PL_splitstr         = proto_perl->Isplitstr;
13001     PL_minus_n          = proto_perl->Iminus_n;
13002     PL_minus_p          = proto_perl->Iminus_p;
13003     PL_minus_l          = proto_perl->Iminus_l;
13004     PL_minus_a          = proto_perl->Iminus_a;
13005     PL_minus_E          = proto_perl->Iminus_E;
13006     PL_minus_F          = proto_perl->Iminus_F;
13007     PL_doswitches       = proto_perl->Idoswitches;
13008     PL_dowarn           = proto_perl->Idowarn;
13009     PL_sawampersand     = proto_perl->Isawampersand;
13010     PL_unsafe           = proto_perl->Iunsafe;
13011     PL_perldb           = proto_perl->Iperldb;
13012     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13013     PL_exit_flags       = proto_perl->Iexit_flags;
13014
13015     /* XXX time(&PL_basetime) when asked for? */
13016     PL_basetime         = proto_perl->Ibasetime;
13017
13018     PL_maxsysfd         = proto_perl->Imaxsysfd;
13019     PL_statusvalue      = proto_perl->Istatusvalue;
13020 #ifdef VMS
13021     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13022 #else
13023     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13024 #endif
13025
13026     /* RE engine related */
13027     Zero(&PL_reg_state, 1, struct re_save_state);
13028     PL_reginterp_cnt    = 0;
13029     PL_regmatch_slab    = NULL;
13030
13031     PL_sub_generation   = proto_perl->Isub_generation;
13032
13033     /* funky return mechanisms */
13034     PL_forkprocess      = proto_perl->Iforkprocess;
13035
13036     /* internal state */
13037     PL_maxo             = proto_perl->Imaxo;
13038
13039     PL_main_start       = proto_perl->Imain_start;
13040     PL_eval_root        = proto_perl->Ieval_root;
13041     PL_eval_start       = proto_perl->Ieval_start;
13042
13043     PL_filemode         = proto_perl->Ifilemode;
13044     PL_lastfd           = proto_perl->Ilastfd;
13045     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13046     PL_Argv             = NULL;
13047     PL_Cmd              = NULL;
13048     PL_gensym           = proto_perl->Igensym;
13049
13050     PL_laststatval      = proto_perl->Ilaststatval;
13051     PL_laststype        = proto_perl->Ilaststype;
13052     PL_mess_sv          = NULL;
13053
13054     PL_profiledata      = NULL;
13055
13056     PL_generation       = proto_perl->Igeneration;
13057
13058     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13059     PL_in_clean_all     = proto_perl->Iin_clean_all;
13060
13061     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13062     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13063     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13064     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13065     PL_nomemok          = proto_perl->Inomemok;
13066     PL_an               = proto_perl->Ian;
13067     PL_evalseq          = proto_perl->Ievalseq;
13068     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13069     PL_origalen         = proto_perl->Iorigalen;
13070
13071     PL_sighandlerp      = proto_perl->Isighandlerp;
13072
13073     PL_runops           = proto_perl->Irunops;
13074
13075     PL_subline          = proto_perl->Isubline;
13076
13077 #ifdef FCRYPT
13078     PL_cryptseen        = proto_perl->Icryptseen;
13079 #endif
13080
13081     PL_hints            = proto_perl->Ihints;
13082
13083 #ifdef USE_LOCALE_COLLATE
13084     PL_collation_ix     = proto_perl->Icollation_ix;
13085     PL_collation_standard       = proto_perl->Icollation_standard;
13086     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13087     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13088 #endif /* USE_LOCALE_COLLATE */
13089
13090 #ifdef USE_LOCALE_NUMERIC
13091     PL_numeric_standard = proto_perl->Inumeric_standard;
13092     PL_numeric_local    = proto_perl->Inumeric_local;
13093 #endif /* !USE_LOCALE_NUMERIC */
13094
13095     /* Did the locale setup indicate UTF-8? */
13096     PL_utf8locale       = proto_perl->Iutf8locale;
13097     /* Unicode features (see perlrun/-C) */
13098     PL_unicode          = proto_perl->Iunicode;
13099
13100     /* Pre-5.8 signals control */
13101     PL_signals          = proto_perl->Isignals;
13102
13103     /* times() ticks per second */
13104     PL_clocktick        = proto_perl->Iclocktick;
13105
13106     /* Recursion stopper for PerlIO_find_layer */
13107     PL_in_load_module   = proto_perl->Iin_load_module;
13108
13109     /* sort() routine */
13110     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13111
13112     /* Not really needed/useful since the reenrant_retint is "volatile",
13113      * but do it for consistency's sake. */
13114     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13115
13116     /* Hooks to shared SVs and locks. */
13117     PL_sharehook        = proto_perl->Isharehook;
13118     PL_lockhook         = proto_perl->Ilockhook;
13119     PL_unlockhook       = proto_perl->Iunlockhook;
13120     PL_threadhook       = proto_perl->Ithreadhook;
13121     PL_destroyhook      = proto_perl->Idestroyhook;
13122     PL_signalhook       = proto_perl->Isignalhook;
13123
13124     PL_globhook         = proto_perl->Iglobhook;
13125
13126     /* swatch cache */
13127     PL_last_swash_hv    = NULL; /* reinits on demand */
13128     PL_last_swash_klen  = 0;
13129     PL_last_swash_key[0]= '\0';
13130     PL_last_swash_tmps  = (U8*)NULL;
13131     PL_last_swash_slen  = 0;
13132
13133     PL_glob_index       = proto_perl->Iglob_index;
13134     PL_srand_called     = proto_perl->Isrand_called;
13135
13136     if (flags & CLONEf_COPY_STACKS) {
13137         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13138         PL_tmps_ix              = proto_perl->Itmps_ix;
13139         PL_tmps_max             = proto_perl->Itmps_max;
13140         PL_tmps_floor           = proto_perl->Itmps_floor;
13141
13142         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13143          * NOTE: unlike the others! */
13144         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13145         PL_scopestack_max       = proto_perl->Iscopestack_max;
13146
13147         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13148          * NOTE: unlike the others! */
13149         PL_savestack_ix         = proto_perl->Isavestack_ix;
13150         PL_savestack_max        = proto_perl->Isavestack_max;
13151     }
13152
13153     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13154     PL_top_env          = &PL_start_env;
13155
13156     PL_op               = proto_perl->Iop;
13157
13158     PL_Sv               = NULL;
13159     PL_Xpv              = (XPV*)NULL;
13160     my_perl->Ina        = proto_perl->Ina;
13161
13162     PL_statbuf          = proto_perl->Istatbuf;
13163     PL_statcache        = proto_perl->Istatcache;
13164
13165 #ifdef HAS_TIMES
13166     PL_timesbuf         = proto_perl->Itimesbuf;
13167 #endif
13168
13169     PL_tainted          = proto_perl->Itainted;
13170     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13171
13172     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13173
13174     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13175     PL_restartop        = proto_perl->Irestartop;
13176     PL_in_eval          = proto_perl->Iin_eval;
13177     PL_delaymagic       = proto_perl->Idelaymagic;
13178     PL_phase            = proto_perl->Iphase;
13179     PL_localizing       = proto_perl->Ilocalizing;
13180
13181     PL_hv_fetch_ent_mh  = NULL;
13182     PL_modcount         = proto_perl->Imodcount;
13183     PL_lastgotoprobe    = NULL;
13184     PL_dumpindent       = proto_perl->Idumpindent;
13185
13186     PL_efloatbuf        = NULL;         /* reinits on demand */
13187     PL_efloatsize       = 0;                    /* reinits on demand */
13188
13189     /* regex stuff */
13190
13191     PL_regdummy         = proto_perl->Iregdummy;
13192     PL_colorset         = 0;            /* reinits PL_colors[] */
13193     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13194
13195     /* Pluggable optimizer */
13196     PL_peepp            = proto_perl->Ipeepp;
13197     PL_rpeepp           = proto_perl->Irpeepp;
13198     /* op_free() hook */
13199     PL_opfreehook       = proto_perl->Iopfreehook;
13200
13201 #ifdef USE_REENTRANT_API
13202     /* XXX: things like -Dm will segfault here in perlio, but doing
13203      *  PERL_SET_CONTEXT(proto_perl);
13204      * breaks too many other things
13205      */
13206     Perl_reentrant_init(aTHX);
13207 #endif
13208
13209     /* create SV map for pointer relocation */
13210     PL_ptr_table = ptr_table_new();
13211
13212     /* initialize these special pointers as early as possible */
13213     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13214
13215     SvANY(&PL_sv_no)            = new_XPVNV();
13216     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
13217     SvCUR_set(&PL_sv_no, 0);
13218     SvLEN_set(&PL_sv_no, 1);
13219     SvIV_set(&PL_sv_no, 0);
13220     SvNV_set(&PL_sv_no, 0);
13221     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13222
13223     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
13224     SvCUR_set(&PL_sv_yes, 1);
13225     SvLEN_set(&PL_sv_yes, 2);
13226     SvIV_set(&PL_sv_yes, 1);
13227     SvNV_set(&PL_sv_yes, 1);
13228     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13229
13230     /* create (a non-shared!) shared string table */
13231     PL_strtab           = newHV();
13232     HvSHAREKEYS_off(PL_strtab);
13233     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13234     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13235
13236     /* This PV will be free'd special way so must set it same way op.c does */
13237     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13238     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13239
13240     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13241     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13242     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13243     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13244
13245     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13246     /* This makes no difference to the implementation, as it always pushes
13247        and shifts pointers to other SVs without changing their reference
13248        count, with the array becoming empty before it is freed. However, it
13249        makes it conceptually clear what is going on, and will avoid some
13250        work inside av.c, filling slots between AvFILL() and AvMAX() with
13251        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13252     AvREAL_off(param->stashes);
13253
13254     if (!(flags & CLONEf_COPY_STACKS)) {
13255         param->unreferenced = newAV();
13256     }
13257
13258 #ifdef PERLIO_LAYERS
13259     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13260     PerlIO_clone(aTHX_ proto_perl, param);
13261 #endif
13262
13263     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13264     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13265     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13266     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13267     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13268     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13269
13270     /* switches */
13271     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13272     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13273     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13274     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13275
13276     /* magical thingies */
13277     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
13278
13279     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13280
13281     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13282     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13283     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13284
13285    
13286     /* Clone the regex array */
13287     /* ORANGE FIXME for plugins, probably in the SV dup code.
13288        newSViv(PTR2IV(CALLREGDUPE(
13289        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13290     */
13291     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13292     PL_regex_pad = AvARRAY(PL_regex_padav);
13293
13294     PL_stashpadmax      = proto_perl->Istashpadmax;
13295     PL_stashpadix       = proto_perl->Istashpadix ;
13296     Newx(PL_stashpad, PL_stashpadmax, HV *);
13297     {
13298         PADOFFSET o = 0;
13299         for (; o < PL_stashpadmax; ++o)
13300             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13301     }
13302
13303     /* shortcuts to various I/O objects */
13304     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13305     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13306     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13307     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13308     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13309     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13310     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13311
13312     /* shortcuts to regexp stuff */
13313     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13314
13315     /* shortcuts to misc objects */
13316     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13317
13318     /* shortcuts to debugging objects */
13319     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13320     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13321     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13322     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13323     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13324     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13325
13326     /* symbol tables */
13327     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13328     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13329     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13330     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13331     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13332
13333     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13334     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13335     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13336     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13337     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13338     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13339     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13340     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13341
13342     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13343
13344     /* subprocess state */
13345     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13346
13347     if (proto_perl->Iop_mask)
13348         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13349     else
13350         PL_op_mask      = NULL;
13351     /* PL_asserting        = proto_perl->Iasserting; */
13352
13353     /* current interpreter roots */
13354     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13355     OP_REFCNT_LOCK;
13356     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13357     OP_REFCNT_UNLOCK;
13358
13359     /* runtime control stuff */
13360     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13361
13362     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13363
13364     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13365
13366     /* interpreter atexit processing */
13367     PL_exitlistlen      = proto_perl->Iexitlistlen;
13368     if (PL_exitlistlen) {
13369         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13370         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13371     }
13372     else
13373         PL_exitlist     = (PerlExitListEntry*)NULL;
13374
13375     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13376     if (PL_my_cxt_size) {
13377         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13378         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13379 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13380         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13381         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13382 #endif
13383     }
13384     else {
13385         PL_my_cxt_list  = (void**)NULL;
13386 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13387         PL_my_cxt_keys  = (const char**)NULL;
13388 #endif
13389     }
13390     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13391     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13392     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13393     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13394
13395     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13396
13397     PAD_CLONE_VARS(proto_perl, param);
13398
13399 #ifdef HAVE_INTERP_INTERN
13400     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13401 #endif
13402
13403     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13404
13405 #ifdef PERL_USES_PL_PIDSTATUS
13406     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13407 #endif
13408     PL_osname           = SAVEPV(proto_perl->Iosname);
13409     PL_parser           = parser_dup(proto_perl->Iparser, param);
13410
13411     /* XXX this only works if the saved cop has already been cloned */
13412     if (proto_perl->Iparser) {
13413         PL_parser->saved_curcop = (COP*)any_dup(
13414                                     proto_perl->Iparser->saved_curcop,
13415                                     proto_perl);
13416     }
13417
13418     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13419
13420 #ifdef USE_LOCALE_COLLATE
13421     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13422 #endif /* USE_LOCALE_COLLATE */
13423
13424 #ifdef USE_LOCALE_NUMERIC
13425     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13426     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13427 #endif /* !USE_LOCALE_NUMERIC */
13428
13429     /* Unicode inversion lists */
13430     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13431     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13432
13433     PL_PerlSpace        = sv_dup_inc(proto_perl->IPerlSpace, param);
13434     PL_XPerlSpace       = sv_dup_inc(proto_perl->IXPerlSpace, param);
13435
13436     PL_L1PosixAlnum     = sv_dup_inc(proto_perl->IL1PosixAlnum, param);
13437     PL_PosixAlnum       = sv_dup_inc(proto_perl->IPosixAlnum, param);
13438
13439     PL_L1PosixAlpha     = sv_dup_inc(proto_perl->IL1PosixAlpha, param);
13440     PL_PosixAlpha       = sv_dup_inc(proto_perl->IPosixAlpha, param);
13441
13442     PL_PosixBlank       = sv_dup_inc(proto_perl->IPosixBlank, param);
13443     PL_XPosixBlank      = sv_dup_inc(proto_perl->IXPosixBlank, param);
13444
13445     PL_L1Cased          = sv_dup_inc(proto_perl->IL1Cased, param);
13446
13447     PL_PosixCntrl       = sv_dup_inc(proto_perl->IPosixCntrl, param);
13448     PL_XPosixCntrl      = sv_dup_inc(proto_perl->IXPosixCntrl, param);
13449
13450     PL_PosixDigit       = sv_dup_inc(proto_perl->IPosixDigit, param);
13451
13452     PL_L1PosixGraph     = sv_dup_inc(proto_perl->IL1PosixGraph, param);
13453     PL_PosixGraph       = sv_dup_inc(proto_perl->IPosixGraph, param);
13454
13455     PL_L1PosixLower     = sv_dup_inc(proto_perl->IL1PosixLower, param);
13456     PL_PosixLower       = sv_dup_inc(proto_perl->IPosixLower, param);
13457
13458     PL_L1PosixPrint     = sv_dup_inc(proto_perl->IL1PosixPrint, param);
13459     PL_PosixPrint       = sv_dup_inc(proto_perl->IPosixPrint, param);
13460
13461     PL_L1PosixPunct     = sv_dup_inc(proto_perl->IL1PosixPunct, param);
13462     PL_PosixPunct       = sv_dup_inc(proto_perl->IPosixPunct, param);
13463
13464     PL_PosixSpace       = sv_dup_inc(proto_perl->IPosixSpace, param);
13465     PL_XPosixSpace      = sv_dup_inc(proto_perl->IXPosixSpace, param);
13466
13467     PL_L1PosixUpper     = sv_dup_inc(proto_perl->IL1PosixUpper, param);
13468     PL_PosixUpper       = sv_dup_inc(proto_perl->IPosixUpper, param);
13469
13470     PL_L1PosixWord      = sv_dup_inc(proto_perl->IL1PosixWord, param);
13471     PL_PosixWord        = sv_dup_inc(proto_perl->IPosixWord, param);
13472
13473     PL_PosixXDigit      = sv_dup_inc(proto_perl->IPosixXDigit, param);
13474     PL_XPosixXDigit     = sv_dup_inc(proto_perl->IXPosixXDigit, param);
13475
13476     PL_VertSpace        = sv_dup_inc(proto_perl->IVertSpace, param);
13477
13478     /* utf8 character class swashes */
13479     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
13480     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13481     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
13482     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
13483     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
13484     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
13485     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
13486     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
13487     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
13488     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13489     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13490     PL_utf8_X_begin     = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
13491     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13492     PL_utf8_X_prepend   = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
13493     PL_utf8_X_non_hangul        = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
13494     PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
13495     PL_utf8_X_LV        = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
13496     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13497     PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
13498     PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
13499     PL_utf8_X_LV_LVT_V  = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
13500     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13501     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13502     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13503     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13504     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13505     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13506     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13507     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13508     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13509     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13510     PL_utf8_quotemeta   = sv_dup_inc(proto_perl->Iutf8_quotemeta, param);
13511     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13512     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13513     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13514
13515
13516     if (proto_perl->Ipsig_pend) {
13517         Newxz(PL_psig_pend, SIG_SIZE, int);
13518     }
13519     else {
13520         PL_psig_pend    = (int*)NULL;
13521     }
13522
13523     if (proto_perl->Ipsig_name) {
13524         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13525         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13526                             param);
13527         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13528     }
13529     else {
13530         PL_psig_ptr     = (SV**)NULL;
13531         PL_psig_name    = (SV**)NULL;
13532     }
13533
13534     if (flags & CLONEf_COPY_STACKS) {
13535         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13536         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13537                             PL_tmps_ix+1, param);
13538
13539         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13540         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13541         Newxz(PL_markstack, i, I32);
13542         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13543                                                   - proto_perl->Imarkstack);
13544         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13545                                                   - proto_perl->Imarkstack);
13546         Copy(proto_perl->Imarkstack, PL_markstack,
13547              PL_markstack_ptr - PL_markstack + 1, I32);
13548
13549         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13550          * NOTE: unlike the others! */
13551         Newxz(PL_scopestack, PL_scopestack_max, I32);
13552         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13553
13554 #ifdef DEBUGGING
13555         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13556         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13557 #endif
13558         /* NOTE: si_dup() looks at PL_markstack */
13559         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13560
13561         /* PL_curstack          = PL_curstackinfo->si_stack; */
13562         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13563         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13564
13565         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13566         PL_stack_base           = AvARRAY(PL_curstack);
13567         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13568                                                    - proto_perl->Istack_base);
13569         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13570
13571         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13572         PL_savestack            = ss_dup(proto_perl, param);
13573     }
13574     else {
13575         init_stacks();
13576         ENTER;                  /* perl_destruct() wants to LEAVE; */
13577     }
13578
13579     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13580     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13581
13582     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13583     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13584     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13585     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13586     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13587     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13588
13589     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13590
13591     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13592     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13593     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13594     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13595
13596     PL_stashcache       = newHV();
13597
13598     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13599                                             proto_perl->Iwatchaddr);
13600     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13601     if (PL_debug && PL_watchaddr) {
13602         PerlIO_printf(Perl_debug_log,
13603           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13604           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13605           PTR2UV(PL_watchok));
13606     }
13607
13608     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13609     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13610     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13611
13612     /* Call the ->CLONE method, if it exists, for each of the stashes
13613        identified by sv_dup() above.
13614     */
13615     while(av_len(param->stashes) != -1) {
13616         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13617         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13618         if (cloner && GvCV(cloner)) {
13619             dSP;
13620             ENTER;
13621             SAVETMPS;
13622             PUSHMARK(SP);
13623             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13624             PUTBACK;
13625             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13626             FREETMPS;
13627             LEAVE;
13628         }
13629     }
13630
13631     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13632         ptr_table_free(PL_ptr_table);
13633         PL_ptr_table = NULL;
13634     }
13635
13636     if (!(flags & CLONEf_COPY_STACKS)) {
13637         unreferenced_to_tmp_stack(param->unreferenced);
13638     }
13639
13640     SvREFCNT_dec(param->stashes);
13641
13642     /* orphaned? eg threads->new inside BEGIN or use */
13643     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13644         SvREFCNT_inc_simple_void(PL_compcv);
13645         SAVEFREESV(PL_compcv);
13646     }
13647
13648     return my_perl;
13649 }
13650
13651 static void
13652 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13653 {
13654     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13655     
13656     if (AvFILLp(unreferenced) > -1) {
13657         SV **svp = AvARRAY(unreferenced);
13658         SV **const last = svp + AvFILLp(unreferenced);
13659         SSize_t count = 0;
13660
13661         do {
13662             if (SvREFCNT(*svp) == 1)
13663                 ++count;
13664         } while (++svp <= last);
13665
13666         EXTEND_MORTAL(count);
13667         svp = AvARRAY(unreferenced);
13668
13669         do {
13670             if (SvREFCNT(*svp) == 1) {
13671                 /* Our reference is the only one to this SV. This means that
13672                    in this thread, the scalar effectively has a 0 reference.
13673                    That doesn't work (cleanup never happens), so donate our
13674                    reference to it onto the save stack. */
13675                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13676             } else {
13677                 /* As an optimisation, because we are already walking the
13678                    entire array, instead of above doing either
13679                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13680                    release our reference to the scalar, so that at the end of
13681                    the array owns zero references to the scalars it happens to
13682                    point to. We are effectively converting the array from
13683                    AvREAL() on to AvREAL() off. This saves the av_clear()
13684                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13685                    walking the array a second time.  */
13686                 SvREFCNT_dec(*svp);
13687             }
13688
13689         } while (++svp <= last);
13690         AvREAL_off(unreferenced);
13691     }
13692     SvREFCNT_dec(unreferenced);
13693 }
13694
13695 void
13696 Perl_clone_params_del(CLONE_PARAMS *param)
13697 {
13698     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13699        happy: */
13700     PerlInterpreter *const to = param->new_perl;
13701     dTHXa(to);
13702     PerlInterpreter *const was = PERL_GET_THX;
13703
13704     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13705
13706     if (was != to) {
13707         PERL_SET_THX(to);
13708     }
13709
13710     SvREFCNT_dec(param->stashes);
13711     if (param->unreferenced)
13712         unreferenced_to_tmp_stack(param->unreferenced);
13713
13714     Safefree(param);
13715
13716     if (was != to) {
13717         PERL_SET_THX(was);
13718     }
13719 }
13720
13721 CLONE_PARAMS *
13722 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13723 {
13724     dVAR;
13725     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13726        does a dTHX; to get the context from thread local storage.
13727        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13728        a version that passes in my_perl.  */
13729     PerlInterpreter *const was = PERL_GET_THX;
13730     CLONE_PARAMS *param;
13731
13732     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13733
13734     if (was != to) {
13735         PERL_SET_THX(to);
13736     }
13737
13738     /* Given that we've set the context, we can do this unshared.  */
13739     Newx(param, 1, CLONE_PARAMS);
13740
13741     param->flags = 0;
13742     param->proto_perl = from;
13743     param->new_perl = to;
13744     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13745     AvREAL_off(param->stashes);
13746     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13747
13748     if (was != to) {
13749         PERL_SET_THX(was);
13750     }
13751     return param;
13752 }
13753
13754 #endif /* USE_ITHREADS */
13755
13756 /*
13757 =head1 Unicode Support
13758
13759 =for apidoc sv_recode_to_utf8
13760
13761 The encoding is assumed to be an Encode object, on entry the PV
13762 of the sv is assumed to be octets in that encoding, and the sv
13763 will be converted into Unicode (and UTF-8).
13764
13765 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13766 is not a reference, nothing is done to the sv.  If the encoding is not
13767 an C<Encode::XS> Encoding object, bad things will happen.
13768 (See F<lib/encoding.pm> and L<Encode>.)
13769
13770 The PV of the sv is returned.
13771
13772 =cut */
13773
13774 char *
13775 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13776 {
13777     dVAR;
13778
13779     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13780
13781     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13782         SV *uni;
13783         STRLEN len;
13784         const char *s;
13785         dSP;
13786         ENTER;
13787         SAVETMPS;
13788         save_re_context();
13789         PUSHMARK(sp);
13790         EXTEND(SP, 3);
13791         XPUSHs(encoding);
13792         XPUSHs(sv);
13793 /*
13794   NI-S 2002/07/09
13795   Passing sv_yes is wrong - it needs to be or'ed set of constants
13796   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13797   remove converted chars from source.
13798
13799   Both will default the value - let them.
13800
13801         XPUSHs(&PL_sv_yes);
13802 */
13803         PUTBACK;
13804         call_method("decode", G_SCALAR);
13805         SPAGAIN;
13806         uni = POPs;
13807         PUTBACK;
13808         s = SvPV_const(uni, len);
13809         if (s != SvPVX_const(sv)) {
13810             SvGROW(sv, len + 1);
13811             Move(s, SvPVX(sv), len + 1, char);
13812             SvCUR_set(sv, len);
13813         }
13814         FREETMPS;
13815         LEAVE;
13816         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13817             /* clear pos and any utf8 cache */
13818             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13819             if (mg)
13820                 mg->mg_len = -1;
13821             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13822                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13823         }
13824         SvUTF8_on(sv);
13825         return SvPVX(sv);
13826     }
13827     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13828 }
13829
13830 /*
13831 =for apidoc sv_cat_decode
13832
13833 The encoding is assumed to be an Encode object, the PV of the ssv is
13834 assumed to be octets in that encoding and decoding the input starts
13835 from the position which (PV + *offset) pointed to.  The dsv will be
13836 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13837 when the string tstr appears in decoding output or the input ends on
13838 the PV of the ssv.  The value which the offset points will be modified
13839 to the last input position on the ssv.
13840
13841 Returns TRUE if the terminator was found, else returns FALSE.
13842
13843 =cut */
13844
13845 bool
13846 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13847                    SV *ssv, int *offset, char *tstr, int tlen)
13848 {
13849     dVAR;
13850     bool ret = FALSE;
13851
13852     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13853
13854     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13855         SV *offsv;
13856         dSP;
13857         ENTER;
13858         SAVETMPS;
13859         save_re_context();
13860         PUSHMARK(sp);
13861         EXTEND(SP, 6);
13862         XPUSHs(encoding);
13863         XPUSHs(dsv);
13864         XPUSHs(ssv);
13865         offsv = newSViv(*offset);
13866         mXPUSHs(offsv);
13867         mXPUSHp(tstr, tlen);
13868         PUTBACK;
13869         call_method("cat_decode", G_SCALAR);
13870         SPAGAIN;
13871         ret = SvTRUE(TOPs);
13872         *offset = SvIV(offsv);
13873         PUTBACK;
13874         FREETMPS;
13875         LEAVE;
13876     }
13877     else
13878         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13879     return ret;
13880
13881 }
13882
13883 /* ---------------------------------------------------------------------
13884  *
13885  * support functions for report_uninit()
13886  */
13887
13888 /* the maxiumum size of array or hash where we will scan looking
13889  * for the undefined element that triggered the warning */
13890
13891 #define FUV_MAX_SEARCH_SIZE 1000
13892
13893 /* Look for an entry in the hash whose value has the same SV as val;
13894  * If so, return a mortal copy of the key. */
13895
13896 STATIC SV*
13897 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
13898 {
13899     dVAR;
13900     register HE **array;
13901     I32 i;
13902
13903     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13904
13905     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13906                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
13907         return NULL;
13908
13909     array = HvARRAY(hv);
13910
13911     for (i=HvMAX(hv); i>0; i--) {
13912         register HE *entry;
13913         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13914             if (HeVAL(entry) != val)
13915                 continue;
13916             if (    HeVAL(entry) == &PL_sv_undef ||
13917                     HeVAL(entry) == &PL_sv_placeholder)
13918                 continue;
13919             if (!HeKEY(entry))
13920                 return NULL;
13921             if (HeKLEN(entry) == HEf_SVKEY)
13922                 return sv_mortalcopy(HeKEY_sv(entry));
13923             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
13924         }
13925     }
13926     return NULL;
13927 }
13928
13929 /* Look for an entry in the array whose value has the same SV as val;
13930  * If so, return the index, otherwise return -1. */
13931
13932 STATIC I32
13933 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
13934 {
13935     dVAR;
13936
13937     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13938
13939     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13940                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13941         return -1;
13942
13943     if (val != &PL_sv_undef) {
13944         SV ** const svp = AvARRAY(av);
13945         I32 i;
13946
13947         for (i=AvFILLp(av); i>=0; i--)
13948             if (svp[i] == val)
13949                 return i;
13950     }
13951     return -1;
13952 }
13953
13954 /* S_varname(): return the name of a variable, optionally with a subscript.
13955  * If gv is non-zero, use the name of that global, along with gvtype (one
13956  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13957  * targ.  Depending on the value of the subscript_type flag, return:
13958  */
13959
13960 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
13961 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
13962 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
13963 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
13964
13965 SV*
13966 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13967         const SV *const keyname, I32 aindex, int subscript_type)
13968 {
13969
13970     SV * const name = sv_newmortal();
13971     if (gv && isGV(gv)) {
13972         char buffer[2];
13973         buffer[0] = gvtype;
13974         buffer[1] = 0;
13975
13976         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
13977
13978         gv_fullname4(name, gv, buffer, 0);
13979
13980         if ((unsigned int)SvPVX(name)[1] <= 26) {
13981             buffer[0] = '^';
13982             buffer[1] = SvPVX(name)[1] + 'A' - 1;
13983
13984             /* Swap the 1 unprintable control character for the 2 byte pretty
13985                version - ie substr($name, 1, 1) = $buffer; */
13986             sv_insert(name, 1, 1, buffer, 2);
13987         }
13988     }
13989     else {
13990         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
13991         SV *sv;
13992         AV *av;
13993
13994         assert(!cv || SvTYPE(cv) == SVt_PVCV);
13995
13996         if (!cv || !CvPADLIST(cv))
13997             return NULL;
13998         av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
13999         sv = *av_fetch(av, targ, FALSE);
14000         sv_setsv(name, sv);
14001     }
14002
14003     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14004         SV * const sv = newSV(0);
14005         *SvPVX(name) = '$';
14006         Perl_sv_catpvf(aTHX_ name, "{%s}",
14007             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14008                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14009         SvREFCNT_dec(sv);
14010     }
14011     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14012         *SvPVX(name) = '$';
14013         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14014     }
14015     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14016         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14017         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14018     }
14019
14020     return name;
14021 }
14022
14023
14024 /*
14025 =for apidoc find_uninit_var
14026
14027 Find the name of the undefined variable (if any) that caused the operator
14028 to issue a "Use of uninitialized value" warning.
14029 If match is true, only return a name if its value matches uninit_sv.
14030 So roughly speaking, if a unary operator (such as OP_COS) generates a
14031 warning, then following the direct child of the op may yield an
14032 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14033 other hand, with OP_ADD there are two branches to follow, so we only print
14034 the variable name if we get an exact match.
14035
14036 The name is returned as a mortal SV.
14037
14038 Assumes that PL_op is the op that originally triggered the error, and that
14039 PL_comppad/PL_curpad points to the currently executing pad.
14040
14041 =cut
14042 */
14043
14044 STATIC SV *
14045 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14046                   bool match)
14047 {
14048     dVAR;
14049     SV *sv;
14050     const GV *gv;
14051     const OP *o, *o2, *kid;
14052
14053     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14054                             uninit_sv == &PL_sv_placeholder)))
14055         return NULL;
14056
14057     switch (obase->op_type) {
14058
14059     case OP_RV2AV:
14060     case OP_RV2HV:
14061     case OP_PADAV:
14062     case OP_PADHV:
14063       {
14064         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
14065         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
14066         I32 index = 0;
14067         SV *keysv = NULL;
14068         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14069
14070         if (pad) { /* @lex, %lex */
14071             sv = PAD_SVl(obase->op_targ);
14072             gv = NULL;
14073         }
14074         else {
14075             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14076             /* @global, %global */
14077                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14078                 if (!gv)
14079                     break;
14080                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14081             }
14082             else if (obase == PL_op) /* @{expr}, %{expr} */
14083                 return find_uninit_var(cUNOPx(obase)->op_first,
14084                                                     uninit_sv, match);
14085             else /* @{expr}, %{expr} as a sub-expression */
14086                 return NULL;
14087         }
14088
14089         /* attempt to find a match within the aggregate */
14090         if (hash) {
14091             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14092             if (keysv)
14093                 subscript_type = FUV_SUBSCRIPT_HASH;
14094         }
14095         else {
14096             index = find_array_subscript((const AV *)sv, uninit_sv);
14097             if (index >= 0)
14098                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14099         }
14100
14101         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14102             break;
14103
14104         return varname(gv, hash ? '%' : '@', obase->op_targ,
14105                                     keysv, index, subscript_type);
14106       }
14107
14108     case OP_RV2SV:
14109         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14110             /* $global */
14111             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14112             if (!gv || !GvSTASH(gv))
14113                 break;
14114             if (match && (GvSV(gv) != uninit_sv))
14115                 break;
14116             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14117         }
14118         /* ${expr} */
14119         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14120
14121     case OP_PADSV:
14122         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14123             break;
14124         return varname(NULL, '$', obase->op_targ,
14125                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14126
14127     case OP_GVSV:
14128         gv = cGVOPx_gv(obase);
14129         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14130             break;
14131         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14132
14133     case OP_AELEMFAST_LEX:
14134         if (match) {
14135             SV **svp;
14136             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14137             if (!av || SvRMAGICAL(av))
14138                 break;
14139             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14140             if (!svp || *svp != uninit_sv)
14141                 break;
14142         }
14143         return varname(NULL, '$', obase->op_targ,
14144                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14145     case OP_AELEMFAST:
14146         {
14147             gv = cGVOPx_gv(obase);
14148             if (!gv)
14149                 break;
14150             if (match) {
14151                 SV **svp;
14152                 AV *const av = GvAV(gv);
14153                 if (!av || SvRMAGICAL(av))
14154                     break;
14155                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14156                 if (!svp || *svp != uninit_sv)
14157                     break;
14158             }
14159             return varname(gv, '$', 0,
14160                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14161         }
14162         break;
14163
14164     case OP_EXISTS:
14165         o = cUNOPx(obase)->op_first;
14166         if (!o || o->op_type != OP_NULL ||
14167                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14168             break;
14169         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14170
14171     case OP_AELEM:
14172     case OP_HELEM:
14173     {
14174         bool negate = FALSE;
14175
14176         if (PL_op == obase)
14177             /* $a[uninit_expr] or $h{uninit_expr} */
14178             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14179
14180         gv = NULL;
14181         o = cBINOPx(obase)->op_first;
14182         kid = cBINOPx(obase)->op_last;
14183
14184         /* get the av or hv, and optionally the gv */
14185         sv = NULL;
14186         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14187             sv = PAD_SV(o->op_targ);
14188         }
14189         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14190                 && cUNOPo->op_first->op_type == OP_GV)
14191         {
14192             gv = cGVOPx_gv(cUNOPo->op_first);
14193             if (!gv)
14194                 break;
14195             sv = o->op_type
14196                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14197         }
14198         if (!sv)
14199             break;
14200
14201         if (kid && kid->op_type == OP_NEGATE) {
14202             negate = TRUE;
14203             kid = cUNOPx(kid)->op_first;
14204         }
14205
14206         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14207             /* index is constant */
14208             SV* kidsv;
14209             if (negate) {
14210                 kidsv = sv_2mortal(newSVpvs("-"));
14211                 sv_catsv(kidsv, cSVOPx_sv(kid));
14212             }
14213             else
14214                 kidsv = cSVOPx_sv(kid);
14215             if (match) {
14216                 if (SvMAGICAL(sv))
14217                     break;
14218                 if (obase->op_type == OP_HELEM) {
14219                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14220                     if (!he || HeVAL(he) != uninit_sv)
14221                         break;
14222                 }
14223                 else {
14224                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14225                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14226                         FALSE);
14227                     if (!svp || *svp != uninit_sv)
14228                         break;
14229                 }
14230             }
14231             if (obase->op_type == OP_HELEM)
14232                 return varname(gv, '%', o->op_targ,
14233                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14234             else
14235                 return varname(gv, '@', o->op_targ, NULL,
14236                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14237                     FUV_SUBSCRIPT_ARRAY);
14238         }
14239         else  {
14240             /* index is an expression;
14241              * attempt to find a match within the aggregate */
14242             if (obase->op_type == OP_HELEM) {
14243                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14244                 if (keysv)
14245                     return varname(gv, '%', o->op_targ,
14246                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14247             }
14248             else {
14249                 const I32 index
14250                     = find_array_subscript((const AV *)sv, uninit_sv);
14251                 if (index >= 0)
14252                     return varname(gv, '@', o->op_targ,
14253                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14254             }
14255             if (match)
14256                 break;
14257             return varname(gv,
14258                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14259                 ? '@' : '%',
14260                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14261         }
14262         break;
14263     }
14264
14265     case OP_AASSIGN:
14266         /* only examine RHS */
14267         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14268
14269     case OP_OPEN:
14270         o = cUNOPx(obase)->op_first;
14271         if (o->op_type == OP_PUSHMARK)
14272             o = o->op_sibling;
14273
14274         if (!o->op_sibling) {
14275             /* one-arg version of open is highly magical */
14276
14277             if (o->op_type == OP_GV) { /* open FOO; */
14278                 gv = cGVOPx_gv(o);
14279                 if (match && GvSV(gv) != uninit_sv)
14280                     break;
14281                 return varname(gv, '$', 0,
14282                             NULL, 0, FUV_SUBSCRIPT_NONE);
14283             }
14284             /* other possibilities not handled are:
14285              * open $x; or open my $x;  should return '${*$x}'
14286              * open expr;               should return '$'.expr ideally
14287              */
14288              break;
14289         }
14290         goto do_op;
14291
14292     /* ops where $_ may be an implicit arg */
14293     case OP_TRANS:
14294     case OP_TRANSR:
14295     case OP_SUBST:
14296     case OP_MATCH:
14297         if ( !(obase->op_flags & OPf_STACKED)) {
14298             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14299                                  ? PAD_SVl(obase->op_targ)
14300                                  : DEFSV))
14301             {
14302                 sv = sv_newmortal();
14303                 sv_setpvs(sv, "$_");
14304                 return sv;
14305             }
14306         }
14307         goto do_op;
14308
14309     case OP_PRTF:
14310     case OP_PRINT:
14311     case OP_SAY:
14312         match = 1; /* print etc can return undef on defined args */
14313         /* skip filehandle as it can't produce 'undef' warning  */
14314         o = cUNOPx(obase)->op_first;
14315         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
14316             o = o->op_sibling->op_sibling;
14317         goto do_op2;
14318
14319
14320     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14321     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14322
14323         /* the following ops are capable of returning PL_sv_undef even for
14324          * defined arg(s) */
14325
14326     case OP_BACKTICK:
14327     case OP_PIPE_OP:
14328     case OP_FILENO:
14329     case OP_BINMODE:
14330     case OP_TIED:
14331     case OP_GETC:
14332     case OP_SYSREAD:
14333     case OP_SEND:
14334     case OP_IOCTL:
14335     case OP_SOCKET:
14336     case OP_SOCKPAIR:
14337     case OP_BIND:
14338     case OP_CONNECT:
14339     case OP_LISTEN:
14340     case OP_ACCEPT:
14341     case OP_SHUTDOWN:
14342     case OP_SSOCKOPT:
14343     case OP_GETPEERNAME:
14344     case OP_FTRREAD:
14345     case OP_FTRWRITE:
14346     case OP_FTREXEC:
14347     case OP_FTROWNED:
14348     case OP_FTEREAD:
14349     case OP_FTEWRITE:
14350     case OP_FTEEXEC:
14351     case OP_FTEOWNED:
14352     case OP_FTIS:
14353     case OP_FTZERO:
14354     case OP_FTSIZE:
14355     case OP_FTFILE:
14356     case OP_FTDIR:
14357     case OP_FTLINK:
14358     case OP_FTPIPE:
14359     case OP_FTSOCK:
14360     case OP_FTBLK:
14361     case OP_FTCHR:
14362     case OP_FTTTY:
14363     case OP_FTSUID:
14364     case OP_FTSGID:
14365     case OP_FTSVTX:
14366     case OP_FTTEXT:
14367     case OP_FTBINARY:
14368     case OP_FTMTIME:
14369     case OP_FTATIME:
14370     case OP_FTCTIME:
14371     case OP_READLINK:
14372     case OP_OPEN_DIR:
14373     case OP_READDIR:
14374     case OP_TELLDIR:
14375     case OP_SEEKDIR:
14376     case OP_REWINDDIR:
14377     case OP_CLOSEDIR:
14378     case OP_GMTIME:
14379     case OP_ALARM:
14380     case OP_SEMGET:
14381     case OP_GETLOGIN:
14382     case OP_UNDEF:
14383     case OP_SUBSTR:
14384     case OP_AEACH:
14385     case OP_EACH:
14386     case OP_SORT:
14387     case OP_CALLER:
14388     case OP_DOFILE:
14389     case OP_PROTOTYPE:
14390     case OP_NCMP:
14391     case OP_SMARTMATCH:
14392     case OP_UNPACK:
14393     case OP_SYSOPEN:
14394     case OP_SYSSEEK:
14395         match = 1;
14396         goto do_op;
14397
14398     case OP_ENTERSUB:
14399     case OP_GOTO:
14400         /* XXX tmp hack: these two may call an XS sub, and currently
14401           XS subs don't have a SUB entry on the context stack, so CV and
14402           pad determination goes wrong, and BAD things happen. So, just
14403           don't try to determine the value under those circumstances.
14404           Need a better fix at dome point. DAPM 11/2007 */
14405         break;
14406
14407     case OP_FLIP:
14408     case OP_FLOP:
14409     {
14410         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14411         if (gv && GvSV(gv) == uninit_sv)
14412             return newSVpvs_flags("$.", SVs_TEMP);
14413         goto do_op;
14414     }
14415
14416     case OP_POS:
14417         /* def-ness of rval pos() is independent of the def-ness of its arg */
14418         if ( !(obase->op_flags & OPf_MOD))
14419             break;
14420
14421     case OP_SCHOMP:
14422     case OP_CHOMP:
14423         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14424             return newSVpvs_flags("${$/}", SVs_TEMP);
14425         /*FALLTHROUGH*/
14426
14427     default:
14428     do_op:
14429         if (!(obase->op_flags & OPf_KIDS))
14430             break;
14431         o = cUNOPx(obase)->op_first;
14432         
14433     do_op2:
14434         if (!o)
14435             break;
14436
14437         /* This loop checks all the kid ops, skipping any that cannot pos-
14438          * sibly be responsible for the uninitialized value; i.e., defined
14439          * constants and ops that return nothing.  If there is only one op
14440          * left that is not skipped, then we *know* it is responsible for
14441          * the uninitialized value.  If there is more than one op left, we
14442          * have to look for an exact match in the while() loop below.
14443          */
14444         o2 = NULL;
14445         for (kid=o; kid; kid = kid->op_sibling) {
14446             if (kid) {
14447                 const OPCODE type = kid->op_type;
14448                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14449                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14450                   || (type == OP_PUSHMARK)
14451                 )
14452                 continue;
14453             }
14454             if (o2) { /* more than one found */
14455                 o2 = NULL;
14456                 break;
14457             }
14458             o2 = kid;
14459         }
14460         if (o2)
14461             return find_uninit_var(o2, uninit_sv, match);
14462
14463         /* scan all args */
14464         while (o) {
14465             sv = find_uninit_var(o, uninit_sv, 1);
14466             if (sv)
14467                 return sv;
14468             o = o->op_sibling;
14469         }
14470         break;
14471     }
14472     return NULL;
14473 }
14474
14475
14476 /*
14477 =for apidoc report_uninit
14478
14479 Print appropriate "Use of uninitialized variable" warning.
14480
14481 =cut
14482 */
14483
14484 void
14485 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14486 {
14487     dVAR;
14488     if (PL_op) {
14489         SV* varname = NULL;
14490         if (uninit_sv && PL_curpad) {
14491             varname = find_uninit_var(PL_op, uninit_sv,0);
14492             if (varname)
14493                 sv_insert(varname, 0, 0, " ", 1);
14494         }
14495         /* diag_listed_as: Use of uninitialized value%s */
14496         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14497                 SVfARG(varname ? varname : &PL_sv_no),
14498                 " in ", OP_DESC(PL_op));
14499     }
14500     else
14501         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14502                     "", "", "");
14503 }
14504
14505 /*
14506  * Local variables:
14507  * c-indentation-style: bsd
14508  * c-basic-offset: 4
14509  * indent-tabs-mode: nil
14510  * End:
14511  *
14512  * ex: set ts=8 sts=4 sw=4 et:
14513  */