This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
sv_setsv_flags was also using a potentially freed HV
[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 #define FCALL *f
36
37 #ifdef __Lynx__
38 /* Missing proto on LynxOS */
39   char *gconvert(double, int, int,  char *);
40 #endif
41
42 #ifdef PERL_UTF8_CACHE_ASSERT
43 /* if adding more checks watch out for the following tests:
44  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
45  *   lib/utf8.t lib/Unicode/Collate/t/index.t
46  * --jhi
47  */
48 #   define ASSERT_UTF8_CACHE(cache) \
49     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
50                               assert((cache)[2] <= (cache)[3]); \
51                               assert((cache)[3] <= (cache)[1]);} \
52                               } STMT_END
53 #else
54 #   define ASSERT_UTF8_CACHE(cache) NOOP
55 #endif
56
57 #ifdef PERL_OLD_COPY_ON_WRITE
58 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
59 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
60 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
61    on-write.  */
62 #endif
63
64 /* ============================================================================
65
66 =head1 Allocation and deallocation of SVs.
67
68 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
69 sv, av, hv...) contains type and reference count information, and for
70 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
71 contains fields specific to each type.  Some types store all they need
72 in the head, so don't have a body.
73
74 In all but the most memory-paranoid configuations (ex: PURIFY), heads
75 and bodies are allocated out of arenas, which by default are
76 approximately 4K chunks of memory parcelled up into N heads or bodies.
77 Sv-bodies are allocated by their sv-type, guaranteeing size
78 consistency needed to allocate safely from arrays.
79
80 For SV-heads, the first slot in each arena is reserved, and holds a
81 link to the next arena, some flags, and a note of the number of slots.
82 Snaked through each arena chain is a linked list of free items; when
83 this becomes empty, an extra arena is allocated and divided up into N
84 items which are threaded into the free list.
85
86 SV-bodies are similar, but they use arena-sets by default, which
87 separate the link and info from the arena itself, and reclaim the 1st
88 slot in the arena.  SV-bodies are further described later.
89
90 The following global variables are associated with arenas:
91
92     PL_sv_arenaroot     pointer to list of SV arenas
93     PL_sv_root          pointer to list of free SV structures
94
95     PL_body_arenas      head of linked-list of body arenas
96     PL_body_roots[]     array of pointers to list of free bodies of svtype
97                         arrays are indexed by the svtype needed
98
99 A few special SV heads are not allocated from an arena, but are
100 instead directly created in the interpreter structure, eg PL_sv_undef.
101 The size of arenas can be changed from the default by setting
102 PERL_ARENA_SIZE appropriately at compile time.
103
104 The SV arena serves the secondary purpose of allowing still-live SVs
105 to be located and destroyed during final cleanup.
106
107 At the lowest level, the macros new_SV() and del_SV() grab and free
108 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
109 to return the SV to the free list with error checking.) new_SV() calls
110 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
111 SVs in the free list have their SvTYPE field set to all ones.
112
113 At the time of very final cleanup, sv_free_arenas() is called from
114 perl_destruct() to physically free all the arenas allocated since the
115 start of the interpreter.
116
117 The function visit() scans the SV arenas list, and calls a specified
118 function for each SV it finds which is still live - ie which has an SvTYPE
119 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
120 following functions (specified as [function that calls visit()] / [function
121 called by visit() for each SV]):
122
123     sv_report_used() / do_report_used()
124                         dump all remaining SVs (debugging aid)
125
126     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
127                       do_clean_named_io_objs()
128                         Attempt to free all objects pointed to by RVs,
129                         and try to do the same for all objects indirectly
130                         referenced by typeglobs too.  Called once from
131                         perl_destruct(), prior to calling sv_clean_all()
132                         below.
133
134     sv_clean_all() / do_clean_all()
135                         SvREFCNT_dec(sv) each remaining SV, possibly
136                         triggering an sv_free(). It also sets the
137                         SVf_BREAK flag on the SV to indicate that the
138                         refcnt has been artificially lowered, and thus
139                         stopping sv_free() from giving spurious warnings
140                         about SVs which unexpectedly have a refcnt
141                         of zero.  called repeatedly from perl_destruct()
142                         until there are no SVs left.
143
144 =head2 Arena allocator API Summary
145
146 Private API to rest of sv.c
147
148     new_SV(),  del_SV(),
149
150     new_XPVNV(), del_XPVGV(),
151     etc
152
153 Public API:
154
155     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
156
157 =cut
158
159  * ========================================================================= */
160
161 /*
162  * "A time to plant, and a time to uproot what was planted..."
163  */
164
165 #ifdef PERL_MEM_LOG
166 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
167             Perl_mem_log_new_sv(sv, file, line, func)
168 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
169             Perl_mem_log_del_sv(sv, file, line, func)
170 #else
171 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
172 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
173 #endif
174
175 #ifdef DEBUG_LEAKING_SCALARS
176 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
177 #  define DEBUG_SV_SERIAL(sv)                                               \
178     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
179             PTR2UV(sv), (long)(sv)->sv_debug_serial))
180 #else
181 #  define FREE_SV_DEBUG_FILE(sv)
182 #  define DEBUG_SV_SERIAL(sv)   NOOP
183 #endif
184
185 #ifdef PERL_POISON
186 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
187 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
188 /* Whilst I'd love to do this, it seems that things like to check on
189    unreferenced scalars
190 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
191 */
192 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
193                                 PoisonNew(&SvREFCNT(sv), 1, U32)
194 #else
195 #  define SvARENA_CHAIN(sv)     SvANY(sv)
196 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
197 #  define POSION_SV_HEAD(sv)
198 #endif
199
200 /* Mark an SV head as unused, and add to free list.
201  *
202  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
203  * its refcount artificially decremented during global destruction, so
204  * there may be dangling pointers to it. The last thing we want in that
205  * case is for it to be reused. */
206
207 #define plant_SV(p) \
208     STMT_START {                                        \
209         const U32 old_flags = SvFLAGS(p);                       \
210         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
211         DEBUG_SV_SERIAL(p);                             \
212         FREE_SV_DEBUG_FILE(p);                          \
213         POSION_SV_HEAD(p);                              \
214         SvFLAGS(p) = SVTYPEMASK;                        \
215         if (!(old_flags & SVf_BREAK)) {         \
216             SvARENA_CHAIN_SET(p, PL_sv_root);   \
217             PL_sv_root = (p);                           \
218         }                                               \
219         --PL_sv_count;                                  \
220     } STMT_END
221
222 #define uproot_SV(p) \
223     STMT_START {                                        \
224         (p) = PL_sv_root;                               \
225         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
226         ++PL_sv_count;                                  \
227     } STMT_END
228
229
230 /* make some more SVs by adding another arena */
231
232 STATIC SV*
233 S_more_sv(pTHX)
234 {
235     dVAR;
236     SV* sv;
237     char *chunk;                /* must use New here to match call to */
238     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
239     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
240     uproot_SV(sv);
241     return sv;
242 }
243
244 /* new_SV(): return a new, empty SV head */
245
246 #ifdef DEBUG_LEAKING_SCALARS
247 /* provide a real function for a debugger to play with */
248 STATIC SV*
249 S_new_SV(pTHX_ const char *file, int line, const char *func)
250 {
251     SV* sv;
252
253     if (PL_sv_root)
254         uproot_SV(sv);
255     else
256         sv = S_more_sv(aTHX);
257     SvANY(sv) = 0;
258     SvREFCNT(sv) = 1;
259     SvFLAGS(sv) = 0;
260     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
261     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
262                 ? PL_parser->copline
263                 :  PL_curcop
264                     ? CopLINE(PL_curcop)
265                     : 0
266             );
267     sv->sv_debug_inpad = 0;
268     sv->sv_debug_parent = NULL;
269     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
270
271     sv->sv_debug_serial = PL_sv_serial++;
272
273     MEM_LOG_NEW_SV(sv, file, line, func);
274     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
275             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
276
277     return sv;
278 }
279 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
280
281 #else
282 #  define new_SV(p) \
283     STMT_START {                                        \
284         if (PL_sv_root)                                 \
285             uproot_SV(p);                               \
286         else                                            \
287             (p) = S_more_sv(aTHX);                      \
288         SvANY(p) = 0;                                   \
289         SvREFCNT(p) = 1;                                \
290         SvFLAGS(p) = 0;                                 \
291         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
292     } STMT_END
293 #endif
294
295
296 /* del_SV(): return an empty SV head to the free list */
297
298 #ifdef DEBUGGING
299
300 #define del_SV(p) \
301     STMT_START {                                        \
302         if (DEBUG_D_TEST)                               \
303             del_sv(p);                                  \
304         else                                            \
305             plant_SV(p);                                \
306     } STMT_END
307
308 STATIC void
309 S_del_sv(pTHX_ SV *p)
310 {
311     dVAR;
312
313     PERL_ARGS_ASSERT_DEL_SV;
314
315     if (DEBUG_D_TEST) {
316         SV* sva;
317         bool ok = 0;
318         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
319             const SV * const sv = sva + 1;
320             const SV * const svend = &sva[SvREFCNT(sva)];
321             if (p >= sv && p < svend) {
322                 ok = 1;
323                 break;
324             }
325         }
326         if (!ok) {
327             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
328                              "Attempt to free non-arena SV: 0x%"UVxf
329                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
330             return;
331         }
332     }
333     plant_SV(p);
334 }
335
336 #else /* ! DEBUGGING */
337
338 #define del_SV(p)   plant_SV(p)
339
340 #endif /* DEBUGGING */
341
342
343 /*
344 =head1 SV Manipulation Functions
345
346 =for apidoc sv_add_arena
347
348 Given a chunk of memory, link it to the head of the list of arenas,
349 and split it into a list of free SVs.
350
351 =cut
352 */
353
354 static void
355 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
356 {
357     dVAR;
358     SV *const sva = MUTABLE_SV(ptr);
359     register SV* sv;
360     register SV* svend;
361
362     PERL_ARGS_ASSERT_SV_ADD_ARENA;
363
364     /* The first SV in an arena isn't an SV. */
365     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
366     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
367     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
368
369     PL_sv_arenaroot = sva;
370     PL_sv_root = sva + 1;
371
372     svend = &sva[SvREFCNT(sva) - 1];
373     sv = sva + 1;
374     while (sv < svend) {
375         SvARENA_CHAIN_SET(sv, (sv + 1));
376 #ifdef DEBUGGING
377         SvREFCNT(sv) = 0;
378 #endif
379         /* Must always set typemask because it's always checked in on cleanup
380            when the arenas are walked looking for objects.  */
381         SvFLAGS(sv) = SVTYPEMASK;
382         sv++;
383     }
384     SvARENA_CHAIN_SET(sv, 0);
385 #ifdef DEBUGGING
386     SvREFCNT(sv) = 0;
387 #endif
388     SvFLAGS(sv) = SVTYPEMASK;
389 }
390
391 /* visit(): call the named function for each non-free SV in the arenas
392  * whose flags field matches the flags/mask args. */
393
394 STATIC I32
395 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
396 {
397     dVAR;
398     SV* sva;
399     I32 visited = 0;
400
401     PERL_ARGS_ASSERT_VISIT;
402
403     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
404         register const SV * const svend = &sva[SvREFCNT(sva)];
405         register SV* sv;
406         for (sv = sva + 1; sv < svend; ++sv) {
407             if (SvTYPE(sv) != SVTYPEMASK
408                     && (sv->sv_flags & mask) == flags
409                     && SvREFCNT(sv))
410             {
411                 (FCALL)(aTHX_ sv);
412                 ++visited;
413             }
414         }
415     }
416     return visited;
417 }
418
419 #ifdef DEBUGGING
420
421 /* called by sv_report_used() for each live SV */
422
423 static void
424 do_report_used(pTHX_ SV *const sv)
425 {
426     if (SvTYPE(sv) != SVTYPEMASK) {
427         PerlIO_printf(Perl_debug_log, "****\n");
428         sv_dump(sv);
429     }
430 }
431 #endif
432
433 /*
434 =for apidoc sv_report_used
435
436 Dump the contents of all SVs not yet freed. (Debugging aid).
437
438 =cut
439 */
440
441 void
442 Perl_sv_report_used(pTHX)
443 {
444 #ifdef DEBUGGING
445     visit(do_report_used, 0, 0);
446 #else
447     PERL_UNUSED_CONTEXT;
448 #endif
449 }
450
451 /* called by sv_clean_objs() for each live SV */
452
453 static void
454 do_clean_objs(pTHX_ SV *const ref)
455 {
456     dVAR;
457     assert (SvROK(ref));
458     {
459         SV * const target = SvRV(ref);
460         if (SvOBJECT(target)) {
461             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
462             if (SvWEAKREF(ref)) {
463                 sv_del_backref(target, ref);
464                 SvWEAKREF_off(ref);
465                 SvRV_set(ref, NULL);
466             } else {
467                 SvROK_off(ref);
468                 SvRV_set(ref, NULL);
469                 SvREFCNT_dec(target);
470             }
471         }
472     }
473
474     /* XXX Might want to check arrays, etc. */
475 }
476
477
478 /* clear any slots in a GV which hold objects - except IO;
479  * called by sv_clean_objs() for each live GV */
480
481 static void
482 do_clean_named_objs(pTHX_ SV *const sv)
483 {
484     dVAR;
485     SV *obj;
486     assert(SvTYPE(sv) == SVt_PVGV);
487     assert(isGV_with_GP(sv));
488     if (!GvGP(sv))
489         return;
490
491     /* freeing GP entries may indirectly free the current GV;
492      * hold onto it while we mess with the GP slots */
493     SvREFCNT_inc(sv);
494
495     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
496         DEBUG_D((PerlIO_printf(Perl_debug_log,
497                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
498         GvSV(sv) = NULL;
499         SvREFCNT_dec(obj);
500     }
501     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
502         DEBUG_D((PerlIO_printf(Perl_debug_log,
503                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
504         GvAV(sv) = NULL;
505         SvREFCNT_dec(obj);
506     }
507     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
508         DEBUG_D((PerlIO_printf(Perl_debug_log,
509                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
510         GvHV(sv) = NULL;
511         SvREFCNT_dec(obj);
512     }
513     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
514         DEBUG_D((PerlIO_printf(Perl_debug_log,
515                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
516         GvCV(sv) = NULL;
517         SvREFCNT_dec(obj);
518     }
519     SvREFCNT_dec(sv); /* undo the inc above */
520 }
521
522 /* clear any IO slots in a GV which hold objects (except stderr, defout);
523  * called by sv_clean_objs() for each live GV */
524
525 static void
526 do_clean_named_io_objs(pTHX_ SV *const sv)
527 {
528     dVAR;
529     SV *obj;
530     assert(SvTYPE(sv) == SVt_PVGV);
531     assert(isGV_with_GP(sv));
532     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
533         return;
534
535     SvREFCNT_inc(sv);
536     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
537         DEBUG_D((PerlIO_printf(Perl_debug_log,
538                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
539         GvIOp(sv) = NULL;
540         SvREFCNT_dec(obj);
541     }
542     SvREFCNT_dec(sv); /* undo the inc above */
543 }
544
545 /*
546 =for apidoc sv_clean_objs
547
548 Attempt to destroy all objects not yet freed
549
550 =cut
551 */
552
553 void
554 Perl_sv_clean_objs(pTHX)
555 {
556     dVAR;
557     GV *olddef, *olderr;
558     PL_in_clean_objs = TRUE;
559     visit(do_clean_objs, SVf_ROK, SVf_ROK);
560     /* Some barnacles may yet remain, clinging to typeglobs.
561      * Run the non-IO destructors first: they may want to output
562      * error messages, close files etc */
563     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
564     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
565     olddef = PL_defoutgv;
566     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
567     if (olddef && isGV_with_GP(olddef))
568         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
569     olderr = PL_stderrgv;
570     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
571     if (olderr && isGV_with_GP(olderr))
572         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
573     SvREFCNT_dec(olddef);
574     PL_in_clean_objs = FALSE;
575 }
576
577 /* called by sv_clean_all() for each live SV */
578
579 static void
580 do_clean_all(pTHX_ SV *const sv)
581 {
582     dVAR;
583     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
584         /* don't clean pid table and strtab */
585         return;
586     }
587     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
588     SvFLAGS(sv) |= SVf_BREAK;
589     SvREFCNT_dec(sv);
590 }
591
592 /*
593 =for apidoc sv_clean_all
594
595 Decrement the refcnt of each remaining SV, possibly triggering a
596 cleanup. This function may have to be called multiple times to free
597 SVs which are in complex self-referential hierarchies.
598
599 =cut
600 */
601
602 I32
603 Perl_sv_clean_all(pTHX)
604 {
605     dVAR;
606     I32 cleaned;
607     PL_in_clean_all = TRUE;
608     cleaned = visit(do_clean_all, 0,0);
609     return cleaned;
610 }
611
612 /*
613   ARENASETS: a meta-arena implementation which separates arena-info
614   into struct arena_set, which contains an array of struct
615   arena_descs, each holding info for a single arena.  By separating
616   the meta-info from the arena, we recover the 1st slot, formerly
617   borrowed for list management.  The arena_set is about the size of an
618   arena, avoiding the needless malloc overhead of a naive linked-list.
619
620   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
621   memory in the last arena-set (1/2 on average).  In trade, we get
622   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
623   smaller types).  The recovery of the wasted space allows use of
624   small arenas for large, rare body types, by changing array* fields
625   in body_details_by_type[] below.
626 */
627 struct arena_desc {
628     char       *arena;          /* the raw storage, allocated aligned */
629     size_t      size;           /* its size ~4k typ */
630     svtype      utype;          /* bodytype stored in arena */
631 };
632
633 struct arena_set;
634
635 /* Get the maximum number of elements in set[] such that struct arena_set
636    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
637    therefore likely to be 1 aligned memory page.  */
638
639 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
640                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
641
642 struct arena_set {
643     struct arena_set* next;
644     unsigned int   set_size;    /* ie ARENAS_PER_SET */
645     unsigned int   curr;        /* index of next available arena-desc */
646     struct arena_desc set[ARENAS_PER_SET];
647 };
648
649 /*
650 =for apidoc sv_free_arenas
651
652 Deallocate the memory used by all arenas. Note that all the individual SV
653 heads and bodies within the arenas must already have been freed.
654
655 =cut
656 */
657 void
658 Perl_sv_free_arenas(pTHX)
659 {
660     dVAR;
661     SV* sva;
662     SV* svanext;
663     unsigned int i;
664
665     /* Free arenas here, but be careful about fake ones.  (We assume
666        contiguity of the fake ones with the corresponding real ones.) */
667
668     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
669         svanext = MUTABLE_SV(SvANY(sva));
670         while (svanext && SvFAKE(svanext))
671             svanext = MUTABLE_SV(SvANY(svanext));
672
673         if (!SvFAKE(sva))
674             Safefree(sva);
675     }
676
677     {
678         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
679
680         while (aroot) {
681             struct arena_set *current = aroot;
682             i = aroot->curr;
683             while (i--) {
684                 assert(aroot->set[i].arena);
685                 Safefree(aroot->set[i].arena);
686             }
687             aroot = aroot->next;
688             Safefree(current);
689         }
690     }
691     PL_body_arenas = 0;
692
693     i = PERL_ARENA_ROOTS_SIZE;
694     while (i--)
695         PL_body_roots[i] = 0;
696
697     PL_sv_arenaroot = 0;
698     PL_sv_root = 0;
699 }
700
701 /*
702   Here are mid-level routines that manage the allocation of bodies out
703   of the various arenas.  There are 5 kinds of arenas:
704
705   1. SV-head arenas, which are discussed and handled above
706   2. regular body arenas
707   3. arenas for reduced-size bodies
708   4. Hash-Entry arenas
709
710   Arena types 2 & 3 are chained by body-type off an array of
711   arena-root pointers, which is indexed by svtype.  Some of the
712   larger/less used body types are malloced singly, since a large
713   unused block of them is wasteful.  Also, several svtypes dont have
714   bodies; the data fits into the sv-head itself.  The arena-root
715   pointer thus has a few unused root-pointers (which may be hijacked
716   later for arena types 4,5)
717
718   3 differs from 2 as an optimization; some body types have several
719   unused fields in the front of the structure (which are kept in-place
720   for consistency).  These bodies can be allocated in smaller chunks,
721   because the leading fields arent accessed.  Pointers to such bodies
722   are decremented to point at the unused 'ghost' memory, knowing that
723   the pointers are used with offsets to the real memory.
724
725
726 =head1 SV-Body Allocation
727
728 Allocation of SV-bodies is similar to SV-heads, differing as follows;
729 the allocation mechanism is used for many body types, so is somewhat
730 more complicated, it uses arena-sets, and has no need for still-live
731 SV detection.
732
733 At the outermost level, (new|del)_X*V macros return bodies of the
734 appropriate type.  These macros call either (new|del)_body_type or
735 (new|del)_body_allocated macro pairs, depending on specifics of the
736 type.  Most body types use the former pair, the latter pair is used to
737 allocate body types with "ghost fields".
738
739 "ghost fields" are fields that are unused in certain types, and
740 consequently don't need to actually exist.  They are declared because
741 they're part of a "base type", which allows use of functions as
742 methods.  The simplest examples are AVs and HVs, 2 aggregate types
743 which don't use the fields which support SCALAR semantics.
744
745 For these types, the arenas are carved up into appropriately sized
746 chunks, we thus avoid wasted memory for those unaccessed members.
747 When bodies are allocated, we adjust the pointer back in memory by the
748 size of the part not allocated, so it's as if we allocated the full
749 structure.  (But things will all go boom if you write to the part that
750 is "not there", because you'll be overwriting the last members of the
751 preceding structure in memory.)
752
753 We calculate the correction using the STRUCT_OFFSET macro on the first
754 member present. If the allocated structure is smaller (no initial NV
755 actually allocated) then the net effect is to subtract the size of the NV
756 from the pointer, to return a new pointer as if an initial NV were actually
757 allocated. (We were using structures named *_allocated for this, but
758 this turned out to be a subtle bug, because a structure without an NV
759 could have a lower alignment constraint, but the compiler is allowed to
760 optimised accesses based on the alignment constraint of the actual pointer
761 to the full structure, for example, using a single 64 bit load instruction
762 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
763
764 This is the same trick as was used for NV and IV bodies. Ironically it
765 doesn't need to be used for NV bodies any more, because NV is now at
766 the start of the structure. IV bodies don't need it either, because
767 they are no longer allocated.
768
769 In turn, the new_body_* allocators call S_new_body(), which invokes
770 new_body_inline macro, which takes a lock, and takes a body off the
771 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
772 necessary to refresh an empty list.  Then the lock is released, and
773 the body is returned.
774
775 Perl_more_bodies allocates a new arena, and carves it up into an array of N
776 bodies, which it strings into a linked list.  It looks up arena-size
777 and body-size from the body_details table described below, thus
778 supporting the multiple body-types.
779
780 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
781 the (new|del)_X*V macros are mapped directly to malloc/free.
782
783 For each sv-type, struct body_details bodies_by_type[] carries
784 parameters which control these aspects of SV handling:
785
786 Arena_size determines whether arenas are used for this body type, and if
787 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
788 zero, forcing individual mallocs and frees.
789
790 Body_size determines how big a body is, and therefore how many fit into
791 each arena.  Offset carries the body-pointer adjustment needed for
792 "ghost fields", and is used in *_allocated macros.
793
794 But its main purpose is to parameterize info needed in
795 Perl_sv_upgrade().  The info here dramatically simplifies the function
796 vs the implementation in 5.8.8, making it table-driven.  All fields
797 are used for this, except for arena_size.
798
799 For the sv-types that have no bodies, arenas are not used, so those
800 PL_body_roots[sv_type] are unused, and can be overloaded.  In
801 something of a special case, SVt_NULL is borrowed for HE arenas;
802 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
803 bodies_by_type[SVt_NULL] slot is not used, as the table is not
804 available in hv.c.
805
806 */
807
808 struct body_details {
809     U8 body_size;       /* Size to allocate  */
810     U8 copy;            /* Size of structure to copy (may be shorter)  */
811     U8 offset;
812     unsigned int type : 4;          /* We have space for a sanity check.  */
813     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
814     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
815     unsigned int arena : 1;         /* Allocated from an arena */
816     size_t arena_size;              /* Size of arena to allocate */
817 };
818
819 #define HADNV FALSE
820 #define NONV TRUE
821
822
823 #ifdef PURIFY
824 /* With -DPURFIY we allocate everything directly, and don't use arenas.
825    This seems a rather elegant way to simplify some of the code below.  */
826 #define HASARENA FALSE
827 #else
828 #define HASARENA TRUE
829 #endif
830 #define NOARENA FALSE
831
832 /* Size the arenas to exactly fit a given number of bodies.  A count
833    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
834    simplifying the default.  If count > 0, the arena is sized to fit
835    only that many bodies, allowing arenas to be used for large, rare
836    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
837    limited by PERL_ARENA_SIZE, so we can safely oversize the
838    declarations.
839  */
840 #define FIT_ARENA0(body_size)                           \
841     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
842 #define FIT_ARENAn(count,body_size)                     \
843     ( count * body_size <= PERL_ARENA_SIZE)             \
844     ? count * body_size                                 \
845     : FIT_ARENA0 (body_size)
846 #define FIT_ARENA(count,body_size)                      \
847     count                                               \
848     ? FIT_ARENAn (count, body_size)                     \
849     : FIT_ARENA0 (body_size)
850
851 /* Calculate the length to copy. Specifically work out the length less any
852    final padding the compiler needed to add.  See the comment in sv_upgrade
853    for why copying the padding proved to be a bug.  */
854
855 #define copy_length(type, last_member) \
856         STRUCT_OFFSET(type, last_member) \
857         + sizeof (((type*)SvANY((const SV *)0))->last_member)
858
859 static const struct body_details bodies_by_type[] = {
860     /* HEs use this offset for their arena.  */
861     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
862
863     /* The bind placeholder pretends to be an RV for now.
864        Also it's marked as "can't upgrade" to stop anyone using it before it's
865        implemented.  */
866     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
867
868     /* IVs are in the head, so the allocation size is 0.  */
869     { 0,
870       sizeof(IV), /* This is used to copy out the IV body.  */
871       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
872       NOARENA /* IVS don't need an arena  */, 0
873     },
874
875     /* 8 bytes on most ILP32 with IEEE doubles */
876     { sizeof(NV), sizeof(NV),
877       STRUCT_OFFSET(XPVNV, xnv_u),
878       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
879
880     /* 8 bytes on most ILP32 with IEEE doubles */
881     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
882       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
883       + STRUCT_OFFSET(XPV, xpv_cur),
884       SVt_PV, FALSE, NONV, HASARENA,
885       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
886
887     /* 12 */
888     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
889       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
890       + STRUCT_OFFSET(XPV, xpv_cur),
891       SVt_PVIV, FALSE, NONV, HASARENA,
892       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
893
894     /* 20 */
895     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
896       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
897       + STRUCT_OFFSET(XPV, xpv_cur),
898       SVt_PVNV, FALSE, HADNV, HASARENA,
899       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
900
901     /* 28 */
902     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
903       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
904
905     /* something big */
906     { sizeof(regexp),
907       sizeof(regexp),
908       0,
909       SVt_REGEXP, FALSE, NONV, HASARENA,
910       FIT_ARENA(0, sizeof(regexp))
911     },
912
913     /* 48 */
914     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
915       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
916     
917     /* 64 */
918     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
919       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
920
921     { sizeof(XPVAV),
922       copy_length(XPVAV, xav_alloc),
923       0,
924       SVt_PVAV, TRUE, NONV, HASARENA,
925       FIT_ARENA(0, sizeof(XPVAV)) },
926
927     { sizeof(XPVHV),
928       copy_length(XPVHV, xhv_max),
929       0,
930       SVt_PVHV, TRUE, NONV, HASARENA,
931       FIT_ARENA(0, sizeof(XPVHV)) },
932
933     /* 56 */
934     { sizeof(XPVCV),
935       sizeof(XPVCV),
936       0,
937       SVt_PVCV, TRUE, NONV, HASARENA,
938       FIT_ARENA(0, sizeof(XPVCV)) },
939
940     { sizeof(XPVFM),
941       sizeof(XPVFM),
942       0,
943       SVt_PVFM, TRUE, NONV, NOARENA,
944       FIT_ARENA(20, sizeof(XPVFM)) },
945
946     /* XPVIO is 84 bytes, fits 48x */
947     { sizeof(XPVIO),
948       sizeof(XPVIO),
949       0,
950       SVt_PVIO, TRUE, NONV, HASARENA,
951       FIT_ARENA(24, sizeof(XPVIO)) },
952 };
953
954 #define new_body_allocated(sv_type)             \
955     (void *)((char *)S_new_body(aTHX_ sv_type)  \
956              - bodies_by_type[sv_type].offset)
957
958 /* return a thing to the free list */
959
960 #define del_body(thing, root)                           \
961     STMT_START {                                        \
962         void ** const thing_copy = (void **)thing;      \
963         *thing_copy = *root;                            \
964         *root = (void*)thing_copy;                      \
965     } STMT_END
966
967 #ifdef PURIFY
968
969 #define new_XNV()       safemalloc(sizeof(XPVNV))
970 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
971 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
972
973 #define del_XPVGV(p)    safefree(p)
974
975 #else /* !PURIFY */
976
977 #define new_XNV()       new_body_allocated(SVt_NV)
978 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
979 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
980
981 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
982                                  &PL_body_roots[SVt_PVGV])
983
984 #endif /* PURIFY */
985
986 /* no arena for you! */
987
988 #define new_NOARENA(details) \
989         safemalloc((details)->body_size + (details)->offset)
990 #define new_NOARENAZ(details) \
991         safecalloc((details)->body_size + (details)->offset, 1)
992
993 void *
994 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
995                   const size_t arena_size)
996 {
997     dVAR;
998     void ** const root = &PL_body_roots[sv_type];
999     struct arena_desc *adesc;
1000     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1001     unsigned int curr;
1002     char *start;
1003     const char *end;
1004     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1005 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1006     static bool done_sanity_check;
1007
1008     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1009      * variables like done_sanity_check. */
1010     if (!done_sanity_check) {
1011         unsigned int i = SVt_LAST;
1012
1013         done_sanity_check = TRUE;
1014
1015         while (i--)
1016             assert (bodies_by_type[i].type == i);
1017     }
1018 #endif
1019
1020     assert(arena_size);
1021
1022     /* may need new arena-set to hold new arena */
1023     if (!aroot || aroot->curr >= aroot->set_size) {
1024         struct arena_set *newroot;
1025         Newxz(newroot, 1, struct arena_set);
1026         newroot->set_size = ARENAS_PER_SET;
1027         newroot->next = aroot;
1028         aroot = newroot;
1029         PL_body_arenas = (void *) newroot;
1030         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1031     }
1032
1033     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1034     curr = aroot->curr++;
1035     adesc = &(aroot->set[curr]);
1036     assert(!adesc->arena);
1037     
1038     Newx(adesc->arena, good_arena_size, char);
1039     adesc->size = good_arena_size;
1040     adesc->utype = sv_type;
1041     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1042                           curr, (void*)adesc->arena, (UV)good_arena_size));
1043
1044     start = (char *) adesc->arena;
1045
1046     /* Get the address of the byte after the end of the last body we can fit.
1047        Remember, this is integer division:  */
1048     end = start + good_arena_size / body_size * body_size;
1049
1050     /* computed count doesnt reflect the 1st slot reservation */
1051 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1052     DEBUG_m(PerlIO_printf(Perl_debug_log,
1053                           "arena %p end %p arena-size %d (from %d) type %d "
1054                           "size %d ct %d\n",
1055                           (void*)start, (void*)end, (int)good_arena_size,
1056                           (int)arena_size, sv_type, (int)body_size,
1057                           (int)good_arena_size / (int)body_size));
1058 #else
1059     DEBUG_m(PerlIO_printf(Perl_debug_log,
1060                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1061                           (void*)start, (void*)end,
1062                           (int)arena_size, sv_type, (int)body_size,
1063                           (int)good_arena_size / (int)body_size));
1064 #endif
1065     *root = (void *)start;
1066
1067     while (1) {
1068         /* Where the next body would start:  */
1069         char * const next = start + body_size;
1070
1071         if (next >= end) {
1072             /* This is the last body:  */
1073             assert(next == end);
1074
1075             *(void **)start = 0;
1076             return *root;
1077         }
1078
1079         *(void**) start = (void *)next;
1080         start = next;
1081     }
1082 }
1083
1084 /* grab a new thing from the free list, allocating more if necessary.
1085    The inline version is used for speed in hot routines, and the
1086    function using it serves the rest (unless PURIFY).
1087 */
1088 #define new_body_inline(xpv, sv_type) \
1089     STMT_START { \
1090         void ** const r3wt = &PL_body_roots[sv_type]; \
1091         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1092           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1093                                              bodies_by_type[sv_type].body_size,\
1094                                              bodies_by_type[sv_type].arena_size)); \
1095         *(r3wt) = *(void**)(xpv); \
1096     } STMT_END
1097
1098 #ifndef PURIFY
1099
1100 STATIC void *
1101 S_new_body(pTHX_ const svtype sv_type)
1102 {
1103     dVAR;
1104     void *xpv;
1105     new_body_inline(xpv, sv_type);
1106     return xpv;
1107 }
1108
1109 #endif
1110
1111 static const struct body_details fake_rv =
1112     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1113
1114 /*
1115 =for apidoc sv_upgrade
1116
1117 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1118 SV, then copies across as much information as possible from the old body.
1119 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1120
1121 =cut
1122 */
1123
1124 void
1125 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1126 {
1127     dVAR;
1128     void*       old_body;
1129     void*       new_body;
1130     const svtype old_type = SvTYPE(sv);
1131     const struct body_details *new_type_details;
1132     const struct body_details *old_type_details
1133         = bodies_by_type + old_type;
1134     SV *referant = NULL;
1135
1136     PERL_ARGS_ASSERT_SV_UPGRADE;
1137
1138     if (old_type == new_type)
1139         return;
1140
1141     /* This clause was purposefully added ahead of the early return above to
1142        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1143        inference by Nick I-S that it would fix other troublesome cases. See
1144        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1145
1146        Given that shared hash key scalars are no longer PVIV, but PV, there is
1147        no longer need to unshare so as to free up the IVX slot for its proper
1148        purpose. So it's safe to move the early return earlier.  */
1149
1150     if (new_type != SVt_PV && SvIsCOW(sv)) {
1151         sv_force_normal_flags(sv, 0);
1152     }
1153
1154     old_body = SvANY(sv);
1155
1156     /* Copying structures onto other structures that have been neatly zeroed
1157        has a subtle gotcha. Consider XPVMG
1158
1159        +------+------+------+------+------+-------+-------+
1160        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1161        +------+------+------+------+------+-------+-------+
1162        0      4      8     12     16     20      24      28
1163
1164        where NVs are aligned to 8 bytes, so that sizeof that structure is
1165        actually 32 bytes long, with 4 bytes of padding at the end:
1166
1167        +------+------+------+------+------+-------+-------+------+
1168        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1169        +------+------+------+------+------+-------+-------+------+
1170        0      4      8     12     16     20      24      28     32
1171
1172        so what happens if you allocate memory for this structure:
1173
1174        +------+------+------+------+------+-------+-------+------+------+...
1175        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1176        +------+------+------+------+------+-------+-------+------+------+...
1177        0      4      8     12     16     20      24      28     32     36
1178
1179        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1180        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1181        started out as zero once, but it's quite possible that it isn't. So now,
1182        rather than a nicely zeroed GP, you have it pointing somewhere random.
1183        Bugs ensue.
1184
1185        (In fact, GP ends up pointing at a previous GP structure, because the
1186        principle cause of the padding in XPVMG getting garbage is a copy of
1187        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1188        this happens to be moot because XPVGV has been re-ordered, with GP
1189        no longer after STASH)
1190
1191        So we are careful and work out the size of used parts of all the
1192        structures.  */
1193
1194     switch (old_type) {
1195     case SVt_NULL:
1196         break;
1197     case SVt_IV:
1198         if (SvROK(sv)) {
1199             referant = SvRV(sv);
1200             old_type_details = &fake_rv;
1201             if (new_type == SVt_NV)
1202                 new_type = SVt_PVNV;
1203         } else {
1204             if (new_type < SVt_PVIV) {
1205                 new_type = (new_type == SVt_NV)
1206                     ? SVt_PVNV : SVt_PVIV;
1207             }
1208         }
1209         break;
1210     case SVt_NV:
1211         if (new_type < SVt_PVNV) {
1212             new_type = SVt_PVNV;
1213         }
1214         break;
1215     case SVt_PV:
1216         assert(new_type > SVt_PV);
1217         assert(SVt_IV < SVt_PV);
1218         assert(SVt_NV < SVt_PV);
1219         break;
1220     case SVt_PVIV:
1221         break;
1222     case SVt_PVNV:
1223         break;
1224     case SVt_PVMG:
1225         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1226            there's no way that it can be safely upgraded, because perl.c
1227            expects to Safefree(SvANY(PL_mess_sv))  */
1228         assert(sv != PL_mess_sv);
1229         /* This flag bit is used to mean other things in other scalar types.
1230            Given that it only has meaning inside the pad, it shouldn't be set
1231            on anything that can get upgraded.  */
1232         assert(!SvPAD_TYPED(sv));
1233         break;
1234     default:
1235         if (old_type_details->cant_upgrade)
1236             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1237                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1238     }
1239
1240     if (old_type > new_type)
1241         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1242                 (int)old_type, (int)new_type);
1243
1244     new_type_details = bodies_by_type + new_type;
1245
1246     SvFLAGS(sv) &= ~SVTYPEMASK;
1247     SvFLAGS(sv) |= new_type;
1248
1249     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1250        the return statements above will have triggered.  */
1251     assert (new_type != SVt_NULL);
1252     switch (new_type) {
1253     case SVt_IV:
1254         assert(old_type == SVt_NULL);
1255         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1256         SvIV_set(sv, 0);
1257         return;
1258     case SVt_NV:
1259         assert(old_type == SVt_NULL);
1260         SvANY(sv) = new_XNV();
1261         SvNV_set(sv, 0);
1262         return;
1263     case SVt_PVHV:
1264     case SVt_PVAV:
1265         assert(new_type_details->body_size);
1266
1267 #ifndef PURIFY  
1268         assert(new_type_details->arena);
1269         assert(new_type_details->arena_size);
1270         /* This points to the start of the allocated area.  */
1271         new_body_inline(new_body, new_type);
1272         Zero(new_body, new_type_details->body_size, char);
1273         new_body = ((char *)new_body) - new_type_details->offset;
1274 #else
1275         /* We always allocated the full length item with PURIFY. To do this
1276            we fake things so that arena is false for all 16 types..  */
1277         new_body = new_NOARENAZ(new_type_details);
1278 #endif
1279         SvANY(sv) = new_body;
1280         if (new_type == SVt_PVAV) {
1281             AvMAX(sv)   = -1;
1282             AvFILLp(sv) = -1;
1283             AvREAL_only(sv);
1284             if (old_type_details->body_size) {
1285                 AvALLOC(sv) = 0;
1286             } else {
1287                 /* It will have been zeroed when the new body was allocated.
1288                    Lets not write to it, in case it confuses a write-back
1289                    cache.  */
1290             }
1291         } else {
1292             assert(!SvOK(sv));
1293             SvOK_off(sv);
1294 #ifndef NODEFAULT_SHAREKEYS
1295             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1296 #endif
1297             HvMAX(sv) = 7; /* (start with 8 buckets) */
1298         }
1299
1300         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1301            The target created by newSVrv also is, and it can have magic.
1302            However, it never has SvPVX set.
1303         */
1304         if (old_type == SVt_IV) {
1305             assert(!SvROK(sv));
1306         } else if (old_type >= SVt_PV) {
1307             assert(SvPVX_const(sv) == 0);
1308         }
1309
1310         if (old_type >= SVt_PVMG) {
1311             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1312             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1313         } else {
1314             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1315         }
1316         break;
1317
1318
1319     case SVt_REGEXP:
1320         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1321            sv_force_normal_flags(sv) is called.  */
1322         SvFAKE_on(sv);
1323     case SVt_PVIV:
1324         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1325            no route from NV to PVIV, NOK can never be true  */
1326         assert(!SvNOKp(sv));
1327         assert(!SvNOK(sv));
1328     case SVt_PVIO:
1329     case SVt_PVFM:
1330     case SVt_PVGV:
1331     case SVt_PVCV:
1332     case SVt_PVLV:
1333     case SVt_PVMG:
1334     case SVt_PVNV:
1335     case SVt_PV:
1336
1337         assert(new_type_details->body_size);
1338         /* We always allocated the full length item with PURIFY. To do this
1339            we fake things so that arena is false for all 16 types..  */
1340         if(new_type_details->arena) {
1341             /* This points to the start of the allocated area.  */
1342             new_body_inline(new_body, new_type);
1343             Zero(new_body, new_type_details->body_size, char);
1344             new_body = ((char *)new_body) - new_type_details->offset;
1345         } else {
1346             new_body = new_NOARENAZ(new_type_details);
1347         }
1348         SvANY(sv) = new_body;
1349
1350         if (old_type_details->copy) {
1351             /* There is now the potential for an upgrade from something without
1352                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1353             int offset = old_type_details->offset;
1354             int length = old_type_details->copy;
1355
1356             if (new_type_details->offset > old_type_details->offset) {
1357                 const int difference
1358                     = new_type_details->offset - old_type_details->offset;
1359                 offset += difference;
1360                 length -= difference;
1361             }
1362             assert (length >= 0);
1363                 
1364             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1365                  char);
1366         }
1367
1368 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1369         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1370          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1371          * NV slot, but the new one does, then we need to initialise the
1372          * freshly created NV slot with whatever the correct bit pattern is
1373          * for 0.0  */
1374         if (old_type_details->zero_nv && !new_type_details->zero_nv
1375             && !isGV_with_GP(sv))
1376             SvNV_set(sv, 0);
1377 #endif
1378
1379         if (new_type == SVt_PVIO) {
1380             IO * const io = MUTABLE_IO(sv);
1381             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1382
1383             SvOBJECT_on(io);
1384             /* Clear the stashcache because a new IO could overrule a package
1385                name */
1386             hv_clear(PL_stashcache);
1387
1388             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1389             IoPAGE_LEN(sv) = 60;
1390         }
1391         if (old_type < SVt_PV) {
1392             /* referant will be NULL unless the old type was SVt_IV emulating
1393                SVt_RV */
1394             sv->sv_u.svu_rv = referant;
1395         }
1396         break;
1397     default:
1398         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1399                    (unsigned long)new_type);
1400     }
1401
1402     if (old_type > SVt_IV) {
1403 #ifdef PURIFY
1404         safefree(old_body);
1405 #else
1406         /* Note that there is an assumption that all bodies of types that
1407            can be upgraded came from arenas. Only the more complex non-
1408            upgradable types are allowed to be directly malloc()ed.  */
1409         assert(old_type_details->arena);
1410         del_body((void*)((char*)old_body + old_type_details->offset),
1411                  &PL_body_roots[old_type]);
1412 #endif
1413     }
1414 }
1415
1416 /*
1417 =for apidoc sv_backoff
1418
1419 Remove any string offset. You should normally use the C<SvOOK_off> macro
1420 wrapper instead.
1421
1422 =cut
1423 */
1424
1425 int
1426 Perl_sv_backoff(pTHX_ register SV *const sv)
1427 {
1428     STRLEN delta;
1429     const char * const s = SvPVX_const(sv);
1430
1431     PERL_ARGS_ASSERT_SV_BACKOFF;
1432     PERL_UNUSED_CONTEXT;
1433
1434     assert(SvOOK(sv));
1435     assert(SvTYPE(sv) != SVt_PVHV);
1436     assert(SvTYPE(sv) != SVt_PVAV);
1437
1438     SvOOK_offset(sv, delta);
1439     
1440     SvLEN_set(sv, SvLEN(sv) + delta);
1441     SvPV_set(sv, SvPVX(sv) - delta);
1442     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1443     SvFLAGS(sv) &= ~SVf_OOK;
1444     return 0;
1445 }
1446
1447 /*
1448 =for apidoc sv_grow
1449
1450 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1451 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1452 Use the C<SvGROW> wrapper instead.
1453
1454 =cut
1455 */
1456
1457 char *
1458 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1459 {
1460     register char *s;
1461
1462     PERL_ARGS_ASSERT_SV_GROW;
1463
1464     if (PL_madskills && newlen >= 0x100000) {
1465         PerlIO_printf(Perl_debug_log,
1466                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1467     }
1468 #ifdef HAS_64K_LIMIT
1469     if (newlen >= 0x10000) {
1470         PerlIO_printf(Perl_debug_log,
1471                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1472         my_exit(1);
1473     }
1474 #endif /* HAS_64K_LIMIT */
1475     if (SvROK(sv))
1476         sv_unref(sv);
1477     if (SvTYPE(sv) < SVt_PV) {
1478         sv_upgrade(sv, SVt_PV);
1479         s = SvPVX_mutable(sv);
1480     }
1481     else if (SvOOK(sv)) {       /* pv is offset? */
1482         sv_backoff(sv);
1483         s = SvPVX_mutable(sv);
1484         if (newlen > SvLEN(sv))
1485             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1486 #ifdef HAS_64K_LIMIT
1487         if (newlen >= 0x10000)
1488             newlen = 0xFFFF;
1489 #endif
1490     }
1491     else
1492         s = SvPVX_mutable(sv);
1493
1494     if (newlen > SvLEN(sv)) {           /* need more room? */
1495         STRLEN minlen = SvCUR(sv);
1496         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1497         if (newlen < minlen)
1498             newlen = minlen;
1499 #ifndef Perl_safesysmalloc_size
1500         newlen = PERL_STRLEN_ROUNDUP(newlen);
1501 #endif
1502         if (SvLEN(sv) && s) {
1503             s = (char*)saferealloc(s, newlen);
1504         }
1505         else {
1506             s = (char*)safemalloc(newlen);
1507             if (SvPVX_const(sv) && SvCUR(sv)) {
1508                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1509             }
1510         }
1511         SvPV_set(sv, s);
1512 #ifdef Perl_safesysmalloc_size
1513         /* Do this here, do it once, do it right, and then we will never get
1514            called back into sv_grow() unless there really is some growing
1515            needed.  */
1516         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1517 #else
1518         SvLEN_set(sv, newlen);
1519 #endif
1520     }
1521     return s;
1522 }
1523
1524 /*
1525 =for apidoc sv_setiv
1526
1527 Copies an integer into the given SV, upgrading first if necessary.
1528 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1529
1530 =cut
1531 */
1532
1533 void
1534 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1535 {
1536     dVAR;
1537
1538     PERL_ARGS_ASSERT_SV_SETIV;
1539
1540     SV_CHECK_THINKFIRST_COW_DROP(sv);
1541     switch (SvTYPE(sv)) {
1542     case SVt_NULL:
1543     case SVt_NV:
1544         sv_upgrade(sv, SVt_IV);
1545         break;
1546     case SVt_PV:
1547         sv_upgrade(sv, SVt_PVIV);
1548         break;
1549
1550     case SVt_PVGV:
1551         if (!isGV_with_GP(sv))
1552             break;
1553     case SVt_PVAV:
1554     case SVt_PVHV:
1555     case SVt_PVCV:
1556     case SVt_PVFM:
1557     case SVt_PVIO:
1558         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1559                    OP_DESC(PL_op));
1560     default: NOOP;
1561     }
1562     (void)SvIOK_only(sv);                       /* validate number */
1563     SvIV_set(sv, i);
1564     SvTAINT(sv);
1565 }
1566
1567 /*
1568 =for apidoc sv_setiv_mg
1569
1570 Like C<sv_setiv>, but also handles 'set' magic.
1571
1572 =cut
1573 */
1574
1575 void
1576 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1577 {
1578     PERL_ARGS_ASSERT_SV_SETIV_MG;
1579
1580     sv_setiv(sv,i);
1581     SvSETMAGIC(sv);
1582 }
1583
1584 /*
1585 =for apidoc sv_setuv
1586
1587 Copies an unsigned integer into the given SV, upgrading first if necessary.
1588 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1589
1590 =cut
1591 */
1592
1593 void
1594 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1595 {
1596     PERL_ARGS_ASSERT_SV_SETUV;
1597
1598     /* With these two if statements:
1599        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1600
1601        without
1602        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1603
1604        If you wish to remove them, please benchmark to see what the effect is
1605     */
1606     if (u <= (UV)IV_MAX) {
1607        sv_setiv(sv, (IV)u);
1608        return;
1609     }
1610     sv_setiv(sv, 0);
1611     SvIsUV_on(sv);
1612     SvUV_set(sv, u);
1613 }
1614
1615 /*
1616 =for apidoc sv_setuv_mg
1617
1618 Like C<sv_setuv>, but also handles 'set' magic.
1619
1620 =cut
1621 */
1622
1623 void
1624 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1625 {
1626     PERL_ARGS_ASSERT_SV_SETUV_MG;
1627
1628     sv_setuv(sv,u);
1629     SvSETMAGIC(sv);
1630 }
1631
1632 /*
1633 =for apidoc sv_setnv
1634
1635 Copies a double into the given SV, upgrading first if necessary.
1636 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1637
1638 =cut
1639 */
1640
1641 void
1642 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1643 {
1644     dVAR;
1645
1646     PERL_ARGS_ASSERT_SV_SETNV;
1647
1648     SV_CHECK_THINKFIRST_COW_DROP(sv);
1649     switch (SvTYPE(sv)) {
1650     case SVt_NULL:
1651     case SVt_IV:
1652         sv_upgrade(sv, SVt_NV);
1653         break;
1654     case SVt_PV:
1655     case SVt_PVIV:
1656         sv_upgrade(sv, SVt_PVNV);
1657         break;
1658
1659     case SVt_PVGV:
1660         if (!isGV_with_GP(sv))
1661             break;
1662     case SVt_PVAV:
1663     case SVt_PVHV:
1664     case SVt_PVCV:
1665     case SVt_PVFM:
1666     case SVt_PVIO:
1667         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1668                    OP_DESC(PL_op));
1669     default: NOOP;
1670     }
1671     SvNV_set(sv, num);
1672     (void)SvNOK_only(sv);                       /* validate number */
1673     SvTAINT(sv);
1674 }
1675
1676 /*
1677 =for apidoc sv_setnv_mg
1678
1679 Like C<sv_setnv>, but also handles 'set' magic.
1680
1681 =cut
1682 */
1683
1684 void
1685 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1686 {
1687     PERL_ARGS_ASSERT_SV_SETNV_MG;
1688
1689     sv_setnv(sv,num);
1690     SvSETMAGIC(sv);
1691 }
1692
1693 /* Print an "isn't numeric" warning, using a cleaned-up,
1694  * printable version of the offending string
1695  */
1696
1697 STATIC void
1698 S_not_a_number(pTHX_ SV *const sv)
1699 {
1700      dVAR;
1701      SV *dsv;
1702      char tmpbuf[64];
1703      const char *pv;
1704
1705      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1706
1707      if (DO_UTF8(sv)) {
1708           dsv = newSVpvs_flags("", SVs_TEMP);
1709           pv = sv_uni_display(dsv, sv, 10, 0);
1710      } else {
1711           char *d = tmpbuf;
1712           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1713           /* each *s can expand to 4 chars + "...\0",
1714              i.e. need room for 8 chars */
1715         
1716           const char *s = SvPVX_const(sv);
1717           const char * const end = s + SvCUR(sv);
1718           for ( ; s < end && d < limit; s++ ) {
1719                int ch = *s & 0xFF;
1720                if (ch & 128 && !isPRINT_LC(ch)) {
1721                     *d++ = 'M';
1722                     *d++ = '-';
1723                     ch &= 127;
1724                }
1725                if (ch == '\n') {
1726                     *d++ = '\\';
1727                     *d++ = 'n';
1728                }
1729                else if (ch == '\r') {
1730                     *d++ = '\\';
1731                     *d++ = 'r';
1732                }
1733                else if (ch == '\f') {
1734                     *d++ = '\\';
1735                     *d++ = 'f';
1736                }
1737                else if (ch == '\\') {
1738                     *d++ = '\\';
1739                     *d++ = '\\';
1740                }
1741                else if (ch == '\0') {
1742                     *d++ = '\\';
1743                     *d++ = '0';
1744                }
1745                else if (isPRINT_LC(ch))
1746                     *d++ = ch;
1747                else {
1748                     *d++ = '^';
1749                     *d++ = toCTRL(ch);
1750                }
1751           }
1752           if (s < end) {
1753                *d++ = '.';
1754                *d++ = '.';
1755                *d++ = '.';
1756           }
1757           *d = '\0';
1758           pv = tmpbuf;
1759     }
1760
1761     if (PL_op)
1762         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1763                     "Argument \"%s\" isn't numeric in %s", pv,
1764                     OP_DESC(PL_op));
1765     else
1766         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1767                     "Argument \"%s\" isn't numeric", pv);
1768 }
1769
1770 /*
1771 =for apidoc looks_like_number
1772
1773 Test if the content of an SV looks like a number (or is a number).
1774 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1775 non-numeric warning), even if your atof() doesn't grok them.
1776
1777 =cut
1778 */
1779
1780 I32
1781 Perl_looks_like_number(pTHX_ SV *const sv)
1782 {
1783     register const char *sbegin;
1784     STRLEN len;
1785
1786     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1787
1788     if (SvPOK(sv)) {
1789         sbegin = SvPVX_const(sv);
1790         len = SvCUR(sv);
1791     }
1792     else if (SvPOKp(sv))
1793         sbegin = SvPV_const(sv, len);
1794     else
1795         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1796     return grok_number(sbegin, len, NULL);
1797 }
1798
1799 STATIC bool
1800 S_glob_2number(pTHX_ GV * const gv)
1801 {
1802     const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1803     SV *const buffer = sv_newmortal();
1804
1805     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1806
1807     /* FAKE globs can get coerced, so need to turn this off temporarily if it
1808        is on.  */
1809     SvFAKE_off(gv);
1810     gv_efullname3(buffer, gv, "*");
1811     SvFLAGS(gv) |= wasfake;
1812
1813     /* We know that all GVs stringify to something that is not-a-number,
1814         so no need to test that.  */
1815     if (ckWARN(WARN_NUMERIC))
1816         not_a_number(buffer);
1817     /* We just want something true to return, so that S_sv_2iuv_common
1818         can tail call us and return true.  */
1819     return TRUE;
1820 }
1821
1822 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1823    until proven guilty, assume that things are not that bad... */
1824
1825 /*
1826    NV_PRESERVES_UV:
1827
1828    As 64 bit platforms often have an NV that doesn't preserve all bits of
1829    an IV (an assumption perl has been based on to date) it becomes necessary
1830    to remove the assumption that the NV always carries enough precision to
1831    recreate the IV whenever needed, and that the NV is the canonical form.
1832    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1833    precision as a side effect of conversion (which would lead to insanity
1834    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1835    1) to distinguish between IV/UV/NV slots that have cached a valid
1836       conversion where precision was lost and IV/UV/NV slots that have a
1837       valid conversion which has lost no precision
1838    2) to ensure that if a numeric conversion to one form is requested that
1839       would lose precision, the precise conversion (or differently
1840       imprecise conversion) is also performed and cached, to prevent
1841       requests for different numeric formats on the same SV causing
1842       lossy conversion chains. (lossless conversion chains are perfectly
1843       acceptable (still))
1844
1845
1846    flags are used:
1847    SvIOKp is true if the IV slot contains a valid value
1848    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1849    SvNOKp is true if the NV slot contains a valid value
1850    SvNOK  is true only if the NV value is accurate
1851
1852    so
1853    while converting from PV to NV, check to see if converting that NV to an
1854    IV(or UV) would lose accuracy over a direct conversion from PV to
1855    IV(or UV). If it would, cache both conversions, return NV, but mark
1856    SV as IOK NOKp (ie not NOK).
1857
1858    While converting from PV to IV, check to see if converting that IV to an
1859    NV would lose accuracy over a direct conversion from PV to NV. If it
1860    would, cache both conversions, flag similarly.
1861
1862    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1863    correctly because if IV & NV were set NV *always* overruled.
1864    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1865    changes - now IV and NV together means that the two are interchangeable:
1866    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1867
1868    The benefit of this is that operations such as pp_add know that if
1869    SvIOK is true for both left and right operands, then integer addition
1870    can be used instead of floating point (for cases where the result won't
1871    overflow). Before, floating point was always used, which could lead to
1872    loss of precision compared with integer addition.
1873
1874    * making IV and NV equal status should make maths accurate on 64 bit
1875      platforms
1876    * may speed up maths somewhat if pp_add and friends start to use
1877      integers when possible instead of fp. (Hopefully the overhead in
1878      looking for SvIOK and checking for overflow will not outweigh the
1879      fp to integer speedup)
1880    * will slow down integer operations (callers of SvIV) on "inaccurate"
1881      values, as the change from SvIOK to SvIOKp will cause a call into
1882      sv_2iv each time rather than a macro access direct to the IV slot
1883    * should speed up number->string conversion on integers as IV is
1884      favoured when IV and NV are equally accurate
1885
1886    ####################################################################
1887    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1888    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1889    On the other hand, SvUOK is true iff UV.
1890    ####################################################################
1891
1892    Your mileage will vary depending your CPU's relative fp to integer
1893    performance ratio.
1894 */
1895
1896 #ifndef NV_PRESERVES_UV
1897 #  define IS_NUMBER_UNDERFLOW_IV 1
1898 #  define IS_NUMBER_UNDERFLOW_UV 2
1899 #  define IS_NUMBER_IV_AND_UV    2
1900 #  define IS_NUMBER_OVERFLOW_IV  4
1901 #  define IS_NUMBER_OVERFLOW_UV  5
1902
1903 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1904
1905 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1906 STATIC int
1907 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1908 #  ifdef DEBUGGING
1909                        , I32 numtype
1910 #  endif
1911                        )
1912 {
1913     dVAR;
1914
1915     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1916
1917     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));
1918     if (SvNVX(sv) < (NV)IV_MIN) {
1919         (void)SvIOKp_on(sv);
1920         (void)SvNOK_on(sv);
1921         SvIV_set(sv, IV_MIN);
1922         return IS_NUMBER_UNDERFLOW_IV;
1923     }
1924     if (SvNVX(sv) > (NV)UV_MAX) {
1925         (void)SvIOKp_on(sv);
1926         (void)SvNOK_on(sv);
1927         SvIsUV_on(sv);
1928         SvUV_set(sv, UV_MAX);
1929         return IS_NUMBER_OVERFLOW_UV;
1930     }
1931     (void)SvIOKp_on(sv);
1932     (void)SvNOK_on(sv);
1933     /* Can't use strtol etc to convert this string.  (See truth table in
1934        sv_2iv  */
1935     if (SvNVX(sv) <= (UV)IV_MAX) {
1936         SvIV_set(sv, I_V(SvNVX(sv)));
1937         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1938             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1939         } else {
1940             /* Integer is imprecise. NOK, IOKp */
1941         }
1942         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1943     }
1944     SvIsUV_on(sv);
1945     SvUV_set(sv, U_V(SvNVX(sv)));
1946     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1947         if (SvUVX(sv) == UV_MAX) {
1948             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1949                possibly be preserved by NV. Hence, it must be overflow.
1950                NOK, IOKp */
1951             return IS_NUMBER_OVERFLOW_UV;
1952         }
1953         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1954     } else {
1955         /* Integer is imprecise. NOK, IOKp */
1956     }
1957     return IS_NUMBER_OVERFLOW_IV;
1958 }
1959 #endif /* !NV_PRESERVES_UV*/
1960
1961 STATIC bool
1962 S_sv_2iuv_common(pTHX_ SV *const sv)
1963 {
1964     dVAR;
1965
1966     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1967
1968     if (SvNOKp(sv)) {
1969         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1970          * without also getting a cached IV/UV from it at the same time
1971          * (ie PV->NV conversion should detect loss of accuracy and cache
1972          * IV or UV at same time to avoid this. */
1973         /* IV-over-UV optimisation - choose to cache IV if possible */
1974
1975         if (SvTYPE(sv) == SVt_NV)
1976             sv_upgrade(sv, SVt_PVNV);
1977
1978         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1979         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1980            certainly cast into the IV range at IV_MAX, whereas the correct
1981            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1982            cases go to UV */
1983 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1984         if (Perl_isnan(SvNVX(sv))) {
1985             SvUV_set(sv, 0);
1986             SvIsUV_on(sv);
1987             return FALSE;
1988         }
1989 #endif
1990         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1991             SvIV_set(sv, I_V(SvNVX(sv)));
1992             if (SvNVX(sv) == (NV) SvIVX(sv)
1993 #ifndef NV_PRESERVES_UV
1994                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1995                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1996                 /* Don't flag it as "accurately an integer" if the number
1997                    came from a (by definition imprecise) NV operation, and
1998                    we're outside the range of NV integer precision */
1999 #endif
2000                 ) {
2001                 if (SvNOK(sv))
2002                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2003                 else {
2004                     /* scalar has trailing garbage, eg "42a" */
2005                 }
2006                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2007                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2008                                       PTR2UV(sv),
2009                                       SvNVX(sv),
2010                                       SvIVX(sv)));
2011
2012             } else {
2013                 /* IV not precise.  No need to convert from PV, as NV
2014                    conversion would already have cached IV if it detected
2015                    that PV->IV would be better than PV->NV->IV
2016                    flags already correct - don't set public IOK.  */
2017                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2018                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2019                                       PTR2UV(sv),
2020                                       SvNVX(sv),
2021                                       SvIVX(sv)));
2022             }
2023             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2024                but the cast (NV)IV_MIN rounds to a the value less (more
2025                negative) than IV_MIN which happens to be equal to SvNVX ??
2026                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2027                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2028                (NV)UVX == NVX are both true, but the values differ. :-(
2029                Hopefully for 2s complement IV_MIN is something like
2030                0x8000000000000000 which will be exact. NWC */
2031         }
2032         else {
2033             SvUV_set(sv, U_V(SvNVX(sv)));
2034             if (
2035                 (SvNVX(sv) == (NV) SvUVX(sv))
2036 #ifndef  NV_PRESERVES_UV
2037                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2038                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2039                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2040                 /* Don't flag it as "accurately an integer" if the number
2041                    came from a (by definition imprecise) NV operation, and
2042                    we're outside the range of NV integer precision */
2043 #endif
2044                 && SvNOK(sv)
2045                 )
2046                 SvIOK_on(sv);
2047             SvIsUV_on(sv);
2048             DEBUG_c(PerlIO_printf(Perl_debug_log,
2049                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2050                                   PTR2UV(sv),
2051                                   SvUVX(sv),
2052                                   SvUVX(sv)));
2053         }
2054     }
2055     else if (SvPOKp(sv) && SvLEN(sv)) {
2056         UV value;
2057         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2058         /* We want to avoid a possible problem when we cache an IV/ a UV which
2059            may be later translated to an NV, and the resulting NV is not
2060            the same as the direct translation of the initial string
2061            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2062            be careful to ensure that the value with the .456 is around if the
2063            NV value is requested in the future).
2064         
2065            This means that if we cache such an IV/a UV, we need to cache the
2066            NV as well.  Moreover, we trade speed for space, and do not
2067            cache the NV if we are sure it's not needed.
2068          */
2069
2070         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2071         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2072              == IS_NUMBER_IN_UV) {
2073             /* It's definitely an integer, only upgrade to PVIV */
2074             if (SvTYPE(sv) < SVt_PVIV)
2075                 sv_upgrade(sv, SVt_PVIV);
2076             (void)SvIOK_on(sv);
2077         } else if (SvTYPE(sv) < SVt_PVNV)
2078             sv_upgrade(sv, SVt_PVNV);
2079
2080         /* If NVs preserve UVs then we only use the UV value if we know that
2081            we aren't going to call atof() below. If NVs don't preserve UVs
2082            then the value returned may have more precision than atof() will
2083            return, even though value isn't perfectly accurate.  */
2084         if ((numtype & (IS_NUMBER_IN_UV
2085 #ifdef NV_PRESERVES_UV
2086                         | IS_NUMBER_NOT_INT
2087 #endif
2088             )) == IS_NUMBER_IN_UV) {
2089             /* This won't turn off the public IOK flag if it was set above  */
2090             (void)SvIOKp_on(sv);
2091
2092             if (!(numtype & IS_NUMBER_NEG)) {
2093                 /* positive */;
2094                 if (value <= (UV)IV_MAX) {
2095                     SvIV_set(sv, (IV)value);
2096                 } else {
2097                     /* it didn't overflow, and it was positive. */
2098                     SvUV_set(sv, value);
2099                     SvIsUV_on(sv);
2100                 }
2101             } else {
2102                 /* 2s complement assumption  */
2103                 if (value <= (UV)IV_MIN) {
2104                     SvIV_set(sv, -(IV)value);
2105                 } else {
2106                     /* Too negative for an IV.  This is a double upgrade, but
2107                        I'm assuming it will be rare.  */
2108                     if (SvTYPE(sv) < SVt_PVNV)
2109                         sv_upgrade(sv, SVt_PVNV);
2110                     SvNOK_on(sv);
2111                     SvIOK_off(sv);
2112                     SvIOKp_on(sv);
2113                     SvNV_set(sv, -(NV)value);
2114                     SvIV_set(sv, IV_MIN);
2115                 }
2116             }
2117         }
2118         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2119            will be in the previous block to set the IV slot, and the next
2120            block to set the NV slot.  So no else here.  */
2121         
2122         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2123             != IS_NUMBER_IN_UV) {
2124             /* It wasn't an (integer that doesn't overflow the UV). */
2125             SvNV_set(sv, Atof(SvPVX_const(sv)));
2126
2127             if (! numtype && ckWARN(WARN_NUMERIC))
2128                 not_a_number(sv);
2129
2130 #if defined(USE_LONG_DOUBLE)
2131             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2132                                   PTR2UV(sv), SvNVX(sv)));
2133 #else
2134             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2135                                   PTR2UV(sv), SvNVX(sv)));
2136 #endif
2137
2138 #ifdef NV_PRESERVES_UV
2139             (void)SvIOKp_on(sv);
2140             (void)SvNOK_on(sv);
2141             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2142                 SvIV_set(sv, I_V(SvNVX(sv)));
2143                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2144                     SvIOK_on(sv);
2145                 } else {
2146                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2147                 }
2148                 /* UV will not work better than IV */
2149             } else {
2150                 if (SvNVX(sv) > (NV)UV_MAX) {
2151                     SvIsUV_on(sv);
2152                     /* Integer is inaccurate. NOK, IOKp, is UV */
2153                     SvUV_set(sv, UV_MAX);
2154                 } else {
2155                     SvUV_set(sv, U_V(SvNVX(sv)));
2156                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2157                        NV preservse UV so can do correct comparison.  */
2158                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2159                         SvIOK_on(sv);
2160                     } else {
2161                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2162                     }
2163                 }
2164                 SvIsUV_on(sv);
2165             }
2166 #else /* NV_PRESERVES_UV */
2167             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2168                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2169                 /* The IV/UV slot will have been set from value returned by
2170                    grok_number above.  The NV slot has just been set using
2171                    Atof.  */
2172                 SvNOK_on(sv);
2173                 assert (SvIOKp(sv));
2174             } else {
2175                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2176                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2177                     /* Small enough to preserve all bits. */
2178                     (void)SvIOKp_on(sv);
2179                     SvNOK_on(sv);
2180                     SvIV_set(sv, I_V(SvNVX(sv)));
2181                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2182                         SvIOK_on(sv);
2183                     /* Assumption: first non-preserved integer is < IV_MAX,
2184                        this NV is in the preserved range, therefore: */
2185                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2186                           < (UV)IV_MAX)) {
2187                         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);
2188                     }
2189                 } else {
2190                     /* IN_UV NOT_INT
2191                          0      0       already failed to read UV.
2192                          0      1       already failed to read UV.
2193                          1      0       you won't get here in this case. IV/UV
2194                                         slot set, public IOK, Atof() unneeded.
2195                          1      1       already read UV.
2196                        so there's no point in sv_2iuv_non_preserve() attempting
2197                        to use atol, strtol, strtoul etc.  */
2198 #  ifdef DEBUGGING
2199                     sv_2iuv_non_preserve (sv, numtype);
2200 #  else
2201                     sv_2iuv_non_preserve (sv);
2202 #  endif
2203                 }
2204             }
2205 #endif /* NV_PRESERVES_UV */
2206         /* It might be more code efficient to go through the entire logic above
2207            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2208            gets complex and potentially buggy, so more programmer efficient
2209            to do it this way, by turning off the public flags:  */
2210         if (!numtype)
2211             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2212         }
2213     }
2214     else  {
2215         if (isGV_with_GP(sv))
2216             return glob_2number(MUTABLE_GV(sv));
2217
2218         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2219             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2220                 report_uninit(sv);
2221         }
2222         if (SvTYPE(sv) < SVt_IV)
2223             /* Typically the caller expects that sv_any is not NULL now.  */
2224             sv_upgrade(sv, SVt_IV);
2225         /* Return 0 from the caller.  */
2226         return TRUE;
2227     }
2228     return FALSE;
2229 }
2230
2231 /*
2232 =for apidoc sv_2iv_flags
2233
2234 Return the integer value of an SV, doing any necessary string
2235 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2236 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2237
2238 =cut
2239 */
2240
2241 IV
2242 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2243 {
2244     dVAR;
2245     if (!sv)
2246         return 0;
2247     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2248         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2249            cache IVs just in case. In practice it seems that they never
2250            actually anywhere accessible by user Perl code, let alone get used
2251            in anything other than a string context.  */
2252         if (flags & SV_GMAGIC)
2253             mg_get(sv);
2254         if (SvIOKp(sv))
2255             return SvIVX(sv);
2256         if (SvNOKp(sv)) {
2257             return I_V(SvNVX(sv));
2258         }
2259         if (SvPOKp(sv) && SvLEN(sv)) {
2260             UV value;
2261             const int numtype
2262                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2263
2264             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2265                 == IS_NUMBER_IN_UV) {
2266                 /* It's definitely an integer */
2267                 if (numtype & IS_NUMBER_NEG) {
2268                     if (value < (UV)IV_MIN)
2269                         return -(IV)value;
2270                 } else {
2271                     if (value < (UV)IV_MAX)
2272                         return (IV)value;
2273                 }
2274             }
2275             if (!numtype) {
2276                 if (ckWARN(WARN_NUMERIC))
2277                     not_a_number(sv);
2278             }
2279             return I_V(Atof(SvPVX_const(sv)));
2280         }
2281         if (SvROK(sv)) {
2282             goto return_rok;
2283         }
2284         assert(SvTYPE(sv) >= SVt_PVMG);
2285         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2286     } else if (SvTHINKFIRST(sv)) {
2287         if (SvROK(sv)) {
2288         return_rok:
2289             if (SvAMAGIC(sv)) {
2290                 SV * tmpstr;
2291                 if (flags & SV_SKIP_OVERLOAD)
2292                     return 0;
2293                 tmpstr=AMG_CALLun(sv,numer);
2294                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2295                     return SvIV(tmpstr);
2296                 }
2297             }
2298             return PTR2IV(SvRV(sv));
2299         }
2300         if (SvIsCOW(sv)) {
2301             sv_force_normal_flags(sv, 0);
2302         }
2303         if (SvREADONLY(sv) && !SvOK(sv)) {
2304             if (ckWARN(WARN_UNINITIALIZED))
2305                 report_uninit(sv);
2306             return 0;
2307         }
2308     }
2309     if (!SvIOKp(sv)) {
2310         if (S_sv_2iuv_common(aTHX_ sv))
2311             return 0;
2312     }
2313     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2314         PTR2UV(sv),SvIVX(sv)));
2315     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2316 }
2317
2318 /*
2319 =for apidoc sv_2uv_flags
2320
2321 Return the unsigned integer value of an SV, doing any necessary string
2322 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2323 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2324
2325 =cut
2326 */
2327
2328 UV
2329 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2330 {
2331     dVAR;
2332     if (!sv)
2333         return 0;
2334     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2335         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2336            cache IVs just in case.  */
2337         if (flags & SV_GMAGIC)
2338             mg_get(sv);
2339         if (SvIOKp(sv))
2340             return SvUVX(sv);
2341         if (SvNOKp(sv))
2342             return U_V(SvNVX(sv));
2343         if (SvPOKp(sv) && SvLEN(sv)) {
2344             UV value;
2345             const int numtype
2346                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2347
2348             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2349                 == IS_NUMBER_IN_UV) {
2350                 /* It's definitely an integer */
2351                 if (!(numtype & IS_NUMBER_NEG))
2352                     return value;
2353             }
2354             if (!numtype) {
2355                 if (ckWARN(WARN_NUMERIC))
2356                     not_a_number(sv);
2357             }
2358             return U_V(Atof(SvPVX_const(sv)));
2359         }
2360         if (SvROK(sv)) {
2361             goto return_rok;
2362         }
2363         assert(SvTYPE(sv) >= SVt_PVMG);
2364         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2365     } else if (SvTHINKFIRST(sv)) {
2366         if (SvROK(sv)) {
2367         return_rok:
2368             if (SvAMAGIC(sv)) {
2369                 SV *tmpstr;
2370                 if (flags & SV_SKIP_OVERLOAD)
2371                     return 0;
2372                 tmpstr = AMG_CALLun(sv,numer);
2373                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2374                     return SvUV(tmpstr);
2375                 }
2376             }
2377             return PTR2UV(SvRV(sv));
2378         }
2379         if (SvIsCOW(sv)) {
2380             sv_force_normal_flags(sv, 0);
2381         }
2382         if (SvREADONLY(sv) && !SvOK(sv)) {
2383             if (ckWARN(WARN_UNINITIALIZED))
2384                 report_uninit(sv);
2385             return 0;
2386         }
2387     }
2388     if (!SvIOKp(sv)) {
2389         if (S_sv_2iuv_common(aTHX_ sv))
2390             return 0;
2391     }
2392
2393     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2394                           PTR2UV(sv),SvUVX(sv)));
2395     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2396 }
2397
2398 /*
2399 =for apidoc sv_2nv_flags
2400
2401 Return the num value of an SV, doing any necessary string or integer
2402 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2403 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2404
2405 =cut
2406 */
2407
2408 NV
2409 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2410 {
2411     dVAR;
2412     if (!sv)
2413         return 0.0;
2414     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2415         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2416            cache IVs just in case.  */
2417         if (flags & SV_GMAGIC)
2418             mg_get(sv);
2419         if (SvNOKp(sv))
2420             return SvNVX(sv);
2421         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2422             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2423                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2424                 not_a_number(sv);
2425             return Atof(SvPVX_const(sv));
2426         }
2427         if (SvIOKp(sv)) {
2428             if (SvIsUV(sv))
2429                 return (NV)SvUVX(sv);
2430             else
2431                 return (NV)SvIVX(sv);
2432         }
2433         if (SvROK(sv)) {
2434             goto return_rok;
2435         }
2436         assert(SvTYPE(sv) >= SVt_PVMG);
2437         /* This falls through to the report_uninit near the end of the
2438            function. */
2439     } else if (SvTHINKFIRST(sv)) {
2440         if (SvROK(sv)) {
2441         return_rok:
2442             if (SvAMAGIC(sv)) {
2443                 SV *tmpstr;
2444                 if (flags & SV_SKIP_OVERLOAD)
2445                     return 0;
2446                 tmpstr = AMG_CALLun(sv,numer);
2447                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2448                     return SvNV(tmpstr);
2449                 }
2450             }
2451             return PTR2NV(SvRV(sv));
2452         }
2453         if (SvIsCOW(sv)) {
2454             sv_force_normal_flags(sv, 0);
2455         }
2456         if (SvREADONLY(sv) && !SvOK(sv)) {
2457             if (ckWARN(WARN_UNINITIALIZED))
2458                 report_uninit(sv);
2459             return 0.0;
2460         }
2461     }
2462     if (SvTYPE(sv) < SVt_NV) {
2463         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2464         sv_upgrade(sv, SVt_NV);
2465 #ifdef USE_LONG_DOUBLE
2466         DEBUG_c({
2467             STORE_NUMERIC_LOCAL_SET_STANDARD();
2468             PerlIO_printf(Perl_debug_log,
2469                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2470                           PTR2UV(sv), SvNVX(sv));
2471             RESTORE_NUMERIC_LOCAL();
2472         });
2473 #else
2474         DEBUG_c({
2475             STORE_NUMERIC_LOCAL_SET_STANDARD();
2476             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2477                           PTR2UV(sv), SvNVX(sv));
2478             RESTORE_NUMERIC_LOCAL();
2479         });
2480 #endif
2481     }
2482     else if (SvTYPE(sv) < SVt_PVNV)
2483         sv_upgrade(sv, SVt_PVNV);
2484     if (SvNOKp(sv)) {
2485         return SvNVX(sv);
2486     }
2487     if (SvIOKp(sv)) {
2488         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2489 #ifdef NV_PRESERVES_UV
2490         if (SvIOK(sv))
2491             SvNOK_on(sv);
2492         else
2493             SvNOKp_on(sv);
2494 #else
2495         /* Only set the public NV OK flag if this NV preserves the IV  */
2496         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2497         if (SvIOK(sv) &&
2498             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2499                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2500             SvNOK_on(sv);
2501         else
2502             SvNOKp_on(sv);
2503 #endif
2504     }
2505     else if (SvPOKp(sv) && SvLEN(sv)) {
2506         UV value;
2507         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2508         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2509             not_a_number(sv);
2510 #ifdef NV_PRESERVES_UV
2511         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2512             == IS_NUMBER_IN_UV) {
2513             /* It's definitely an integer */
2514             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2515         } else
2516             SvNV_set(sv, Atof(SvPVX_const(sv)));
2517         if (numtype)
2518             SvNOK_on(sv);
2519         else
2520             SvNOKp_on(sv);
2521 #else
2522         SvNV_set(sv, Atof(SvPVX_const(sv)));
2523         /* Only set the public NV OK flag if this NV preserves the value in
2524            the PV at least as well as an IV/UV would.
2525            Not sure how to do this 100% reliably. */
2526         /* if that shift count is out of range then Configure's test is
2527            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2528            UV_BITS */
2529         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2530             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2531             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2532         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2533             /* Can't use strtol etc to convert this string, so don't try.
2534                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2535             SvNOK_on(sv);
2536         } else {
2537             /* value has been set.  It may not be precise.  */
2538             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2539                 /* 2s complement assumption for (UV)IV_MIN  */
2540                 SvNOK_on(sv); /* Integer is too negative.  */
2541             } else {
2542                 SvNOKp_on(sv);
2543                 SvIOKp_on(sv);
2544
2545                 if (numtype & IS_NUMBER_NEG) {
2546                     SvIV_set(sv, -(IV)value);
2547                 } else if (value <= (UV)IV_MAX) {
2548                     SvIV_set(sv, (IV)value);
2549                 } else {
2550                     SvUV_set(sv, value);
2551                     SvIsUV_on(sv);
2552                 }
2553
2554                 if (numtype & IS_NUMBER_NOT_INT) {
2555                     /* I believe that even if the original PV had decimals,
2556                        they are lost beyond the limit of the FP precision.
2557                        However, neither is canonical, so both only get p
2558                        flags.  NWC, 2000/11/25 */
2559                     /* Both already have p flags, so do nothing */
2560                 } else {
2561                     const NV nv = SvNVX(sv);
2562                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2563                         if (SvIVX(sv) == I_V(nv)) {
2564                             SvNOK_on(sv);
2565                         } else {
2566                             /* It had no "." so it must be integer.  */
2567                         }
2568                         SvIOK_on(sv);
2569                     } else {
2570                         /* between IV_MAX and NV(UV_MAX).
2571                            Could be slightly > UV_MAX */
2572
2573                         if (numtype & IS_NUMBER_NOT_INT) {
2574                             /* UV and NV both imprecise.  */
2575                         } else {
2576                             const UV nv_as_uv = U_V(nv);
2577
2578                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2579                                 SvNOK_on(sv);
2580                             }
2581                             SvIOK_on(sv);
2582                         }
2583                     }
2584                 }
2585             }
2586         }
2587         /* It might be more code efficient to go through the entire logic above
2588            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2589            gets complex and potentially buggy, so more programmer efficient
2590            to do it this way, by turning off the public flags:  */
2591         if (!numtype)
2592             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2593 #endif /* NV_PRESERVES_UV */
2594     }
2595     else  {
2596         if (isGV_with_GP(sv)) {
2597             glob_2number(MUTABLE_GV(sv));
2598             return 0.0;
2599         }
2600
2601         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2602             report_uninit(sv);
2603         assert (SvTYPE(sv) >= SVt_NV);
2604         /* Typically the caller expects that sv_any is not NULL now.  */
2605         /* XXX Ilya implies that this is a bug in callers that assume this
2606            and ideally should be fixed.  */
2607         return 0.0;
2608     }
2609 #if defined(USE_LONG_DOUBLE)
2610     DEBUG_c({
2611         STORE_NUMERIC_LOCAL_SET_STANDARD();
2612         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2613                       PTR2UV(sv), SvNVX(sv));
2614         RESTORE_NUMERIC_LOCAL();
2615     });
2616 #else
2617     DEBUG_c({
2618         STORE_NUMERIC_LOCAL_SET_STANDARD();
2619         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2620                       PTR2UV(sv), SvNVX(sv));
2621         RESTORE_NUMERIC_LOCAL();
2622     });
2623 #endif
2624     return SvNVX(sv);
2625 }
2626
2627 /*
2628 =for apidoc sv_2num
2629
2630 Return an SV with the numeric value of the source SV, doing any necessary
2631 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2632 access this function.
2633
2634 =cut
2635 */
2636
2637 SV *
2638 Perl_sv_2num(pTHX_ register SV *const sv)
2639 {
2640     PERL_ARGS_ASSERT_SV_2NUM;
2641
2642     if (!SvROK(sv))
2643         return sv;
2644     if (SvAMAGIC(sv)) {
2645         SV * const tmpsv = AMG_CALLun(sv,numer);
2646         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2647         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2648             return sv_2num(tmpsv);
2649     }
2650     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2651 }
2652
2653 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2654  * UV as a string towards the end of buf, and return pointers to start and
2655  * end of it.
2656  *
2657  * We assume that buf is at least TYPE_CHARS(UV) long.
2658  */
2659
2660 static char *
2661 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2662 {
2663     char *ptr = buf + TYPE_CHARS(UV);
2664     char * const ebuf = ptr;
2665     int sign;
2666
2667     PERL_ARGS_ASSERT_UIV_2BUF;
2668
2669     if (is_uv)
2670         sign = 0;
2671     else if (iv >= 0) {
2672         uv = iv;
2673         sign = 0;
2674     } else {
2675         uv = -iv;
2676         sign = 1;
2677     }
2678     do {
2679         *--ptr = '0' + (char)(uv % 10);
2680     } while (uv /= 10);
2681     if (sign)
2682         *--ptr = '-';
2683     *peob = ebuf;
2684     return ptr;
2685 }
2686
2687 /*
2688 =for apidoc sv_2pv_flags
2689
2690 Returns a pointer to the string value of an SV, and sets *lp to its length.
2691 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2692 if necessary.
2693 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2694 usually end up here too.
2695
2696 =cut
2697 */
2698
2699 char *
2700 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2701 {
2702     dVAR;
2703     register char *s;
2704
2705     if (!sv) {
2706         if (lp)
2707             *lp = 0;
2708         return (char *)"";
2709     }
2710     if (SvGMAGICAL(sv)) {
2711         if (flags & SV_GMAGIC)
2712             mg_get(sv);
2713         if (SvPOKp(sv)) {
2714             if (lp)
2715                 *lp = SvCUR(sv);
2716             if (flags & SV_MUTABLE_RETURN)
2717                 return SvPVX_mutable(sv);
2718             if (flags & SV_CONST_RETURN)
2719                 return (char *)SvPVX_const(sv);
2720             return SvPVX(sv);
2721         }
2722         if (SvIOKp(sv) || SvNOKp(sv)) {
2723             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2724             STRLEN len;
2725
2726             if (SvIOKp(sv)) {
2727                 len = SvIsUV(sv)
2728                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2729                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2730             } else if(SvNVX(sv) == 0.0) {
2731                     tbuf[0] = '0';
2732                     tbuf[1] = 0;
2733                     len = 1;
2734             } else {
2735                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2736                 len = strlen(tbuf);
2737             }
2738             assert(!SvROK(sv));
2739             {
2740                 dVAR;
2741
2742                 SvUPGRADE(sv, SVt_PV);
2743                 if (lp)
2744                     *lp = len;
2745                 s = SvGROW_mutable(sv, len + 1);
2746                 SvCUR_set(sv, len);
2747                 SvPOKp_on(sv);
2748                 return (char*)memcpy(s, tbuf, len + 1);
2749             }
2750         }
2751         if (SvROK(sv)) {
2752             goto return_rok;
2753         }
2754         assert(SvTYPE(sv) >= SVt_PVMG);
2755         /* This falls through to the report_uninit near the end of the
2756            function. */
2757     } else if (SvTHINKFIRST(sv)) {
2758         if (SvROK(sv)) {
2759         return_rok:
2760             if (SvAMAGIC(sv)) {
2761                 SV *tmpstr;
2762                 if (flags & SV_SKIP_OVERLOAD)
2763                     return NULL;
2764                 tmpstr = AMG_CALLun(sv,string);
2765                 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2766                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2767                     /* Unwrap this:  */
2768                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2769                      */
2770
2771                     char *pv;
2772                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2773                         if (flags & SV_CONST_RETURN) {
2774                             pv = (char *) SvPVX_const(tmpstr);
2775                         } else {
2776                             pv = (flags & SV_MUTABLE_RETURN)
2777                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2778                         }
2779                         if (lp)
2780                             *lp = SvCUR(tmpstr);
2781                     } else {
2782                         pv = sv_2pv_flags(tmpstr, lp, flags);
2783                     }
2784                     if (SvUTF8(tmpstr))
2785                         SvUTF8_on(sv);
2786                     else
2787                         SvUTF8_off(sv);
2788                     return pv;
2789                 }
2790             }
2791             {
2792                 STRLEN len;
2793                 char *retval;
2794                 char *buffer;
2795                 SV *const referent = SvRV(sv);
2796
2797                 if (!referent) {
2798                     len = 7;
2799                     retval = buffer = savepvn("NULLREF", len);
2800                 } else if (SvTYPE(referent) == SVt_REGEXP) {
2801                     REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2802                     I32 seen_evals = 0;
2803
2804                     assert(re);
2805                         
2806                     /* If the regex is UTF-8 we want the containing scalar to
2807                        have an UTF-8 flag too */
2808                     if (RX_UTF8(re))
2809                         SvUTF8_on(sv);
2810                     else
2811                         SvUTF8_off(sv); 
2812
2813                     if ((seen_evals = RX_SEEN_EVALS(re)))
2814                         PL_reginterp_cnt += seen_evals;
2815
2816                     if (lp)
2817                         *lp = RX_WRAPLEN(re);
2818  
2819                     return RX_WRAPPED(re);
2820                 } else {
2821                     const char *const typestr = sv_reftype(referent, 0);
2822                     const STRLEN typelen = strlen(typestr);
2823                     UV addr = PTR2UV(referent);
2824                     const char *stashname = NULL;
2825                     STRLEN stashnamelen = 0; /* hush, gcc */
2826                     const char *buffer_end;
2827
2828                     if (SvOBJECT(referent)) {
2829                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2830
2831                         if (name) {
2832                             stashname = HEK_KEY(name);
2833                             stashnamelen = HEK_LEN(name);
2834
2835                             if (HEK_UTF8(name)) {
2836                                 SvUTF8_on(sv);
2837                             } else {
2838                                 SvUTF8_off(sv);
2839                             }
2840                         } else {
2841                             stashname = "__ANON__";
2842                             stashnamelen = 8;
2843                         }
2844                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2845                             + 2 * sizeof(UV) + 2 /* )\0 */;
2846                     } else {
2847                         len = typelen + 3 /* (0x */
2848                             + 2 * sizeof(UV) + 2 /* )\0 */;
2849                     }
2850
2851                     Newx(buffer, len, char);
2852                     buffer_end = retval = buffer + len;
2853
2854                     /* Working backwards  */
2855                     *--retval = '\0';
2856                     *--retval = ')';
2857                     do {
2858                         *--retval = PL_hexdigit[addr & 15];
2859                     } while (addr >>= 4);
2860                     *--retval = 'x';
2861                     *--retval = '0';
2862                     *--retval = '(';
2863
2864                     retval -= typelen;
2865                     memcpy(retval, typestr, typelen);
2866
2867                     if (stashname) {
2868                         *--retval = '=';
2869                         retval -= stashnamelen;
2870                         memcpy(retval, stashname, stashnamelen);
2871                     }
2872                     /* retval may not neccesarily have reached the start of the
2873                        buffer here.  */
2874                     assert (retval >= buffer);
2875
2876                     len = buffer_end - retval - 1; /* -1 for that \0  */
2877                 }
2878                 if (lp)
2879                     *lp = len;
2880                 SAVEFREEPV(buffer);
2881                 return retval;
2882             }
2883         }
2884         if (SvREADONLY(sv) && !SvOK(sv)) {
2885             if (lp)
2886                 *lp = 0;
2887             if (flags & SV_UNDEF_RETURNS_NULL)
2888                 return NULL;
2889             if (ckWARN(WARN_UNINITIALIZED))
2890                 report_uninit(sv);
2891             return (char *)"";
2892         }
2893     }
2894     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2895         /* I'm assuming that if both IV and NV are equally valid then
2896            converting the IV is going to be more efficient */
2897         const U32 isUIOK = SvIsUV(sv);
2898         char buf[TYPE_CHARS(UV)];
2899         char *ebuf, *ptr;
2900         STRLEN len;
2901
2902         if (SvTYPE(sv) < SVt_PVIV)
2903             sv_upgrade(sv, SVt_PVIV);
2904         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2905         len = ebuf - ptr;
2906         /* inlined from sv_setpvn */
2907         s = SvGROW_mutable(sv, len + 1);
2908         Move(ptr, s, len, char);
2909         s += len;
2910         *s = '\0';
2911     }
2912     else if (SvNOKp(sv)) {
2913         if (SvTYPE(sv) < SVt_PVNV)
2914             sv_upgrade(sv, SVt_PVNV);
2915         if (SvNVX(sv) == 0.0) {
2916             s = SvGROW_mutable(sv, 2);
2917             *s++ = '0';
2918             *s = '\0';
2919         } else {
2920             dSAVE_ERRNO;
2921             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2922             s = SvGROW_mutable(sv, NV_DIG + 20);
2923             /* some Xenix systems wipe out errno here */
2924             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2925             RESTORE_ERRNO;
2926             while (*s) s++;
2927         }
2928 #ifdef hcx
2929         if (s[-1] == '.')
2930             *--s = '\0';
2931 #endif
2932     }
2933     else {
2934         if (isGV_with_GP(sv)) {
2935             GV *const gv = MUTABLE_GV(sv);
2936             const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2937             SV *const buffer = sv_newmortal();
2938
2939             /* FAKE globs can get coerced, so need to turn this off temporarily
2940                if it is on.  */
2941             SvFAKE_off(gv);
2942             gv_efullname3(buffer, gv, "*");
2943             SvFLAGS(gv) |= wasfake;
2944
2945             if (SvPOK(buffer)) {
2946                 if (lp) {
2947                     *lp = SvCUR(buffer);
2948                 }
2949                 return SvPVX(buffer);
2950             }
2951             else {
2952                 if (lp)
2953                     *lp = 0;
2954                 return (char *)"";
2955             }
2956         }
2957
2958         if (lp)
2959             *lp = 0;
2960         if (flags & SV_UNDEF_RETURNS_NULL)
2961             return NULL;
2962         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2963             report_uninit(sv);
2964         if (SvTYPE(sv) < SVt_PV)
2965             /* Typically the caller expects that sv_any is not NULL now.  */
2966             sv_upgrade(sv, SVt_PV);
2967         return (char *)"";
2968     }
2969     {
2970         const STRLEN len = s - SvPVX_const(sv);
2971         if (lp) 
2972             *lp = len;
2973         SvCUR_set(sv, len);
2974     }
2975     SvPOK_on(sv);
2976     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2977                           PTR2UV(sv),SvPVX_const(sv)));
2978     if (flags & SV_CONST_RETURN)
2979         return (char *)SvPVX_const(sv);
2980     if (flags & SV_MUTABLE_RETURN)
2981         return SvPVX_mutable(sv);
2982     return SvPVX(sv);
2983 }
2984
2985 /*
2986 =for apidoc sv_copypv
2987
2988 Copies a stringified representation of the source SV into the
2989 destination SV.  Automatically performs any necessary mg_get and
2990 coercion of numeric values into strings.  Guaranteed to preserve
2991 UTF8 flag even from overloaded objects.  Similar in nature to
2992 sv_2pv[_flags] but operates directly on an SV instead of just the
2993 string.  Mostly uses sv_2pv_flags to do its work, except when that
2994 would lose the UTF-8'ness of the PV.
2995
2996 =cut
2997 */
2998
2999 void
3000 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3001 {
3002     STRLEN len;
3003     const char * const s = SvPV_const(ssv,len);
3004
3005     PERL_ARGS_ASSERT_SV_COPYPV;
3006
3007     sv_setpvn(dsv,s,len);
3008     if (SvUTF8(ssv))
3009         SvUTF8_on(dsv);
3010     else
3011         SvUTF8_off(dsv);
3012 }
3013
3014 /*
3015 =for apidoc sv_2pvbyte
3016
3017 Return a pointer to the byte-encoded representation of the SV, and set *lp
3018 to its length.  May cause the SV to be downgraded from UTF-8 as a
3019 side-effect.
3020
3021 Usually accessed via the C<SvPVbyte> macro.
3022
3023 =cut
3024 */
3025
3026 char *
3027 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3028 {
3029     PERL_ARGS_ASSERT_SV_2PVBYTE;
3030
3031     sv_utf8_downgrade(sv,0);
3032     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3033 }
3034
3035 /*
3036 =for apidoc sv_2pvutf8
3037
3038 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3039 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3040
3041 Usually accessed via the C<SvPVutf8> macro.
3042
3043 =cut
3044 */
3045
3046 char *
3047 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3048 {
3049     PERL_ARGS_ASSERT_SV_2PVUTF8;
3050
3051     sv_utf8_upgrade(sv);
3052     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3053 }
3054
3055
3056 /*
3057 =for apidoc sv_2bool
3058
3059 This macro is only used by sv_true() or its macro equivalent, and only if
3060 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3061 It calls sv_2bool_flags with the SV_GMAGIC flag.
3062
3063 =for apidoc sv_2bool_flags
3064
3065 This function is only used by sv_true() and friends,  and only if
3066 the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
3067 contain SV_GMAGIC, then it does an mg_get() first.
3068
3069
3070 =cut
3071 */
3072
3073 bool
3074 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3075 {
3076     dVAR;
3077
3078     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3079
3080     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3081
3082     if (!SvOK(sv))
3083         return 0;
3084     if (SvROK(sv)) {
3085         if (SvAMAGIC(sv)) {
3086             SV * const tmpsv = AMG_CALLun(sv,bool_);
3087             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3088                 return cBOOL(SvTRUE(tmpsv));
3089         }
3090         return SvRV(sv) != 0;
3091     }
3092     if (SvPOKp(sv)) {
3093         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3094         if (Xpvtmp &&
3095                 (*sv->sv_u.svu_pv > '0' ||
3096                 Xpvtmp->xpv_cur > 1 ||
3097                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3098             return 1;
3099         else
3100             return 0;
3101     }
3102     else {
3103         if (SvIOKp(sv))
3104             return SvIVX(sv) != 0;
3105         else {
3106             if (SvNOKp(sv))
3107                 return SvNVX(sv) != 0.0;
3108             else {
3109                 if (isGV_with_GP(sv))
3110                     return TRUE;
3111                 else
3112                     return FALSE;
3113             }
3114         }
3115     }
3116 }
3117
3118 /*
3119 =for apidoc sv_utf8_upgrade
3120
3121 Converts the PV of an SV to its UTF-8-encoded form.
3122 Forces the SV to string form if it is not already.
3123 Will C<mg_get> on C<sv> if appropriate.
3124 Always sets the SvUTF8 flag to avoid future validity checks even
3125 if the whole string is the same in UTF-8 as not.
3126 Returns the number of bytes in the converted string
3127
3128 This is not as a general purpose byte encoding to Unicode interface:
3129 use the Encode extension for that.
3130
3131 =for apidoc sv_utf8_upgrade_nomg
3132
3133 Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3134
3135 =for apidoc sv_utf8_upgrade_flags
3136
3137 Converts the PV of an SV to its UTF-8-encoded form.
3138 Forces the SV to string form if it is not already.
3139 Always sets the SvUTF8 flag to avoid future validity checks even
3140 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3141 will C<mg_get> on C<sv> if appropriate, else not.
3142 Returns the number of bytes in the converted string
3143 C<sv_utf8_upgrade> and
3144 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3145
3146 This is not as a general purpose byte encoding to Unicode interface:
3147 use the Encode extension for that.
3148
3149 =cut
3150
3151 The grow version is currently not externally documented.  It adds a parameter,
3152 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3153 have free after it upon return.  This allows the caller to reserve extra space
3154 that it intends to fill, to avoid extra grows.
3155
3156 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3157 which can be used to tell this function to not first check to see if there are
3158 any characters that are different in UTF-8 (variant characters) which would
3159 force it to allocate a new string to sv, but to assume there are.  Typically
3160 this flag is used by a routine that has already parsed the string to find that
3161 there are such characters, and passes this information on so that the work
3162 doesn't have to be repeated.
3163
3164 (One might think that the calling routine could pass in the position of the
3165 first such variant, so it wouldn't have to be found again.  But that is not the
3166 case, because typically when the caller is likely to use this flag, it won't be
3167 calling this routine unless it finds something that won't fit into a byte.
3168 Otherwise it tries to not upgrade and just use bytes.  But some things that
3169 do fit into a byte are variants in utf8, and the caller may not have been
3170 keeping track of these.)
3171
3172 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3173 isn't guaranteed due to having other routines do the work in some input cases,
3174 or if the input is already flagged as being in utf8.
3175
3176 The speed of this could perhaps be improved for many cases if someone wanted to
3177 write a fast function that counts the number of variant characters in a string,
3178 especially if it could return the position of the first one.
3179
3180 */
3181
3182 STRLEN
3183 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3184 {
3185     dVAR;
3186
3187     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3188
3189     if (sv == &PL_sv_undef)
3190         return 0;
3191     if (!SvPOK(sv)) {
3192         STRLEN len = 0;
3193         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3194             (void) sv_2pv_flags(sv,&len, flags);
3195             if (SvUTF8(sv)) {
3196                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3197                 return len;
3198             }
3199         } else {
3200             (void) SvPV_force(sv,len);
3201         }
3202     }
3203
3204     if (SvUTF8(sv)) {
3205         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3206         return SvCUR(sv);
3207     }
3208
3209     if (SvIsCOW(sv)) {
3210         sv_force_normal_flags(sv, 0);
3211     }
3212
3213     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3214         sv_recode_to_utf8(sv, PL_encoding);
3215         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3216         return SvCUR(sv);
3217     }
3218
3219     if (SvCUR(sv) == 0) {
3220         if (extra) SvGROW(sv, extra);
3221     } else { /* Assume Latin-1/EBCDIC */
3222         /* This function could be much more efficient if we
3223          * had a FLAG in SVs to signal if there are any variant
3224          * chars in the PV.  Given that there isn't such a flag
3225          * make the loop as fast as possible (although there are certainly ways
3226          * to speed this up, eg. through vectorization) */
3227         U8 * s = (U8 *) SvPVX_const(sv);
3228         U8 * e = (U8 *) SvEND(sv);
3229         U8 *t = s;
3230         STRLEN two_byte_count = 0;
3231         
3232         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3233
3234         /* See if really will need to convert to utf8.  We mustn't rely on our
3235          * incoming SV being well formed and having a trailing '\0', as certain
3236          * code in pp_formline can send us partially built SVs. */
3237
3238         while (t < e) {
3239             const U8 ch = *t++;
3240             if (NATIVE_IS_INVARIANT(ch)) continue;
3241
3242             t--;    /* t already incremented; re-point to first variant */
3243             two_byte_count = 1;
3244             goto must_be_utf8;
3245         }
3246
3247         /* utf8 conversion not needed because all are invariants.  Mark as
3248          * UTF-8 even if no variant - saves scanning loop */
3249         SvUTF8_on(sv);
3250         return SvCUR(sv);
3251
3252 must_be_utf8:
3253
3254         /* Here, the string should be converted to utf8, either because of an
3255          * input flag (two_byte_count = 0), or because a character that
3256          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3257          * the beginning of the string (if we didn't examine anything), or to
3258          * the first variant.  In either case, everything from s to t - 1 will
3259          * occupy only 1 byte each on output.
3260          *
3261          * There are two main ways to convert.  One is to create a new string
3262          * and go through the input starting from the beginning, appending each
3263          * converted value onto the new string as we go along.  It's probably
3264          * best to allocate enough space in the string for the worst possible
3265          * case rather than possibly running out of space and having to
3266          * reallocate and then copy what we've done so far.  Since everything
3267          * from s to t - 1 is invariant, the destination can be initialized
3268          * with these using a fast memory copy
3269          *
3270          * The other way is to figure out exactly how big the string should be
3271          * by parsing the entire input.  Then you don't have to make it big
3272          * enough to handle the worst possible case, and more importantly, if
3273          * the string you already have is large enough, you don't have to
3274          * allocate a new string, you can copy the last character in the input
3275          * string to the final position(s) that will be occupied by the
3276          * converted string and go backwards, stopping at t, since everything
3277          * before that is invariant.
3278          *
3279          * There are advantages and disadvantages to each method.
3280          *
3281          * In the first method, we can allocate a new string, do the memory
3282          * copy from the s to t - 1, and then proceed through the rest of the
3283          * string byte-by-byte.
3284          *
3285          * In the second method, we proceed through the rest of the input
3286          * string just calculating how big the converted string will be.  Then
3287          * there are two cases:
3288          *  1)  if the string has enough extra space to handle the converted
3289          *      value.  We go backwards through the string, converting until we
3290          *      get to the position we are at now, and then stop.  If this
3291          *      position is far enough along in the string, this method is
3292          *      faster than the other method.  If the memory copy were the same
3293          *      speed as the byte-by-byte loop, that position would be about
3294          *      half-way, as at the half-way mark, parsing to the end and back
3295          *      is one complete string's parse, the same amount as starting
3296          *      over and going all the way through.  Actually, it would be
3297          *      somewhat less than half-way, as it's faster to just count bytes
3298          *      than to also copy, and we don't have the overhead of allocating
3299          *      a new string, changing the scalar to use it, and freeing the
3300          *      existing one.  But if the memory copy is fast, the break-even
3301          *      point is somewhere after half way.  The counting loop could be
3302          *      sped up by vectorization, etc, to move the break-even point
3303          *      further towards the beginning.
3304          *  2)  if the string doesn't have enough space to handle the converted
3305          *      value.  A new string will have to be allocated, and one might
3306          *      as well, given that, start from the beginning doing the first
3307          *      method.  We've spent extra time parsing the string and in
3308          *      exchange all we've gotten is that we know precisely how big to
3309          *      make the new one.  Perl is more optimized for time than space,
3310          *      so this case is a loser.
3311          * So what I've decided to do is not use the 2nd method unless it is
3312          * guaranteed that a new string won't have to be allocated, assuming
3313          * the worst case.  I also decided not to put any more conditions on it
3314          * than this, for now.  It seems likely that, since the worst case is
3315          * twice as big as the unknown portion of the string (plus 1), we won't
3316          * be guaranteed enough space, causing us to go to the first method,
3317          * unless the string is short, or the first variant character is near
3318          * the end of it.  In either of these cases, it seems best to use the
3319          * 2nd method.  The only circumstance I can think of where this would
3320          * be really slower is if the string had once had much more data in it
3321          * than it does now, but there is still a substantial amount in it  */
3322
3323         {
3324             STRLEN invariant_head = t - s;
3325             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3326             if (SvLEN(sv) < size) {
3327
3328                 /* Here, have decided to allocate a new string */
3329
3330                 U8 *dst;
3331                 U8 *d;
3332
3333                 Newx(dst, size, U8);
3334
3335                 /* If no known invariants at the beginning of the input string,
3336                  * set so starts from there.  Otherwise, can use memory copy to
3337                  * get up to where we are now, and then start from here */
3338
3339                 if (invariant_head <= 0) {
3340                     d = dst;
3341                 } else {
3342                     Copy(s, dst, invariant_head, char);
3343                     d = dst + invariant_head;
3344                 }
3345
3346                 while (t < e) {
3347                     const UV uv = NATIVE8_TO_UNI(*t++);
3348                     if (UNI_IS_INVARIANT(uv))
3349                         *d++ = (U8)UNI_TO_NATIVE(uv);
3350                     else {
3351                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3352                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3353                     }
3354                 }
3355                 *d = '\0';
3356                 SvPV_free(sv); /* No longer using pre-existing string */
3357                 SvPV_set(sv, (char*)dst);
3358                 SvCUR_set(sv, d - dst);
3359                 SvLEN_set(sv, size);
3360             } else {
3361
3362                 /* Here, have decided to get the exact size of the string.
3363                  * Currently this happens only when we know that there is
3364                  * guaranteed enough space to fit the converted string, so
3365                  * don't have to worry about growing.  If two_byte_count is 0,
3366                  * then t points to the first byte of the string which hasn't
3367                  * been examined yet.  Otherwise two_byte_count is 1, and t
3368                  * points to the first byte in the string that will expand to
3369                  * two.  Depending on this, start examining at t or 1 after t.
3370                  * */
3371
3372                 U8 *d = t + two_byte_count;
3373
3374
3375                 /* Count up the remaining bytes that expand to two */
3376
3377                 while (d < e) {
3378                     const U8 chr = *d++;
3379                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3380                 }
3381
3382                 /* The string will expand by just the number of bytes that
3383                  * occupy two positions.  But we are one afterwards because of
3384                  * the increment just above.  This is the place to put the
3385                  * trailing NUL, and to set the length before we decrement */
3386
3387                 d += two_byte_count;
3388                 SvCUR_set(sv, d - s);
3389                 *d-- = '\0';
3390
3391
3392                 /* Having decremented d, it points to the position to put the
3393                  * very last byte of the expanded string.  Go backwards through
3394                  * the string, copying and expanding as we go, stopping when we
3395                  * get to the part that is invariant the rest of the way down */
3396
3397                 e--;
3398                 while (e >= t) {
3399                     const U8 ch = NATIVE8_TO_UNI(*e--);
3400                     if (UNI_IS_INVARIANT(ch)) {
3401                         *d-- = UNI_TO_NATIVE(ch);
3402                     } else {
3403                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3404                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3405                     }
3406                 }
3407             }
3408         }
3409     }
3410
3411     /* Mark as UTF-8 even if no variant - saves scanning loop */
3412     SvUTF8_on(sv);
3413     return SvCUR(sv);
3414 }
3415
3416 /*
3417 =for apidoc sv_utf8_downgrade
3418
3419 Attempts to convert the PV of an SV from characters to bytes.
3420 If the PV contains a character that cannot fit
3421 in a byte, this conversion will fail;
3422 in this case, either returns false or, if C<fail_ok> is not
3423 true, croaks.
3424
3425 This is not as a general purpose Unicode to byte encoding interface:
3426 use the Encode extension for that.
3427
3428 =cut
3429 */
3430
3431 bool
3432 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3433 {
3434     dVAR;
3435
3436     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3437
3438     if (SvPOKp(sv) && SvUTF8(sv)) {
3439         if (SvCUR(sv)) {
3440             U8 *s;
3441             STRLEN len;
3442
3443             if (SvIsCOW(sv)) {
3444                 sv_force_normal_flags(sv, 0);
3445             }
3446             s = (U8 *) SvPV(sv, len);
3447             if (!utf8_to_bytes(s, &len)) {
3448                 if (fail_ok)
3449                     return FALSE;
3450                 else {
3451                     if (PL_op)
3452                         Perl_croak(aTHX_ "Wide character in %s",
3453                                    OP_DESC(PL_op));
3454                     else
3455                         Perl_croak(aTHX_ "Wide character");
3456                 }
3457             }
3458             SvCUR_set(sv, len);
3459         }
3460     }
3461     SvUTF8_off(sv);
3462     return TRUE;
3463 }
3464
3465 /*
3466 =for apidoc sv_utf8_encode
3467
3468 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3469 flag off so that it looks like octets again.
3470
3471 =cut
3472 */
3473
3474 void
3475 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3476 {
3477     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3478
3479     if (SvIsCOW(sv)) {
3480         sv_force_normal_flags(sv, 0);
3481     }
3482     if (SvREADONLY(sv)) {
3483         Perl_croak_no_modify(aTHX);
3484     }
3485     (void) sv_utf8_upgrade(sv);
3486     SvUTF8_off(sv);
3487 }
3488
3489 /*
3490 =for apidoc sv_utf8_decode
3491
3492 If the PV of the SV is an octet sequence in UTF-8
3493 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3494 so that it looks like a character. If the PV contains only single-byte
3495 characters, the C<SvUTF8> flag stays being off.
3496 Scans PV for validity and returns false if the PV is invalid UTF-8.
3497
3498 =cut
3499 */
3500
3501 bool
3502 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3503 {
3504     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3505
3506     if (SvPOKp(sv)) {
3507         const U8 *c;
3508         const U8 *e;
3509
3510         /* The octets may have got themselves encoded - get them back as
3511          * bytes
3512          */
3513         if (!sv_utf8_downgrade(sv, TRUE))
3514             return FALSE;
3515
3516         /* it is actually just a matter of turning the utf8 flag on, but
3517          * we want to make sure everything inside is valid utf8 first.
3518          */
3519         c = (const U8 *) SvPVX_const(sv);
3520         if (!is_utf8_string(c, SvCUR(sv)+1))
3521             return FALSE;
3522         e = (const U8 *) SvEND(sv);
3523         while (c < e) {
3524             const U8 ch = *c++;
3525             if (!UTF8_IS_INVARIANT(ch)) {
3526                 SvUTF8_on(sv);
3527                 break;
3528             }
3529         }
3530     }
3531     return TRUE;
3532 }
3533
3534 /*
3535 =for apidoc sv_setsv
3536
3537 Copies the contents of the source SV C<ssv> into the destination SV
3538 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3539 function if the source SV needs to be reused. Does not handle 'set' magic.
3540 Loosely speaking, it performs a copy-by-value, obliterating any previous
3541 content of the destination.
3542
3543 You probably want to use one of the assortment of wrappers, such as
3544 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3545 C<SvSetMagicSV_nosteal>.
3546
3547 =for apidoc sv_setsv_flags
3548
3549 Copies the contents of the source SV C<ssv> into the destination SV
3550 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3551 function if the source SV needs to be reused. Does not handle 'set' magic.
3552 Loosely speaking, it performs a copy-by-value, obliterating any previous
3553 content of the destination.
3554 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3555 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3556 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3557 and C<sv_setsv_nomg> are implemented in terms of this function.
3558
3559 You probably want to use one of the assortment of wrappers, such as
3560 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3561 C<SvSetMagicSV_nosteal>.
3562
3563 This is the primary function for copying scalars, and most other
3564 copy-ish functions and macros use this underneath.
3565
3566 =cut
3567 */
3568
3569 static void
3570 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3571 {
3572     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3573     HV *old_stash = NULL;
3574
3575     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3576
3577     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3578         const char * const name = GvNAME(sstr);
3579         const STRLEN len = GvNAMELEN(sstr);
3580         {
3581             if (dtype >= SVt_PV) {
3582                 SvPV_free(dstr);
3583                 SvPV_set(dstr, 0);
3584                 SvLEN_set(dstr, 0);
3585                 SvCUR_set(dstr, 0);
3586             }
3587             SvUPGRADE(dstr, SVt_PVGV);
3588             (void)SvOK_off(dstr);
3589             /* FIXME - why are we doing this, then turning it off and on again
3590                below?  */
3591             isGV_with_GP_on(dstr);
3592         }
3593         GvSTASH(dstr) = GvSTASH(sstr);
3594         if (GvSTASH(dstr))
3595             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3596         gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
3597         SvFAKE_on(dstr);        /* can coerce to non-glob */
3598     }
3599
3600     if(GvGP(MUTABLE_GV(sstr))) {
3601         /* If source has method cache entry, clear it */
3602         if(GvCVGEN(sstr)) {
3603             SvREFCNT_dec(GvCV(sstr));
3604             GvCV(sstr) = NULL;
3605             GvCVGEN(sstr) = 0;
3606         }
3607         /* If source has a real method, then a method is
3608            going to change */
3609         else if(GvCV((const GV *)sstr)) {
3610             mro_changes = 1;
3611         }
3612     }
3613
3614     /* If dest already had a real method, that's a change as well */
3615     if(!mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)) {
3616         mro_changes = 1;
3617     }
3618
3619     /* We don’t need to check the name of the destination if it was not a
3620        glob to begin with. */
3621     if(dtype == SVt_PVGV) {
3622         const char * const name = GvNAME((const GV *)dstr);
3623         if(strEQ(name,"ISA"))
3624             mro_changes = 2;
3625         else {
3626             const STRLEN len = GvNAMELEN(dstr);
3627             if (len > 1 && name[len-2] == ':' && name[len-1] == ':') {
3628                 mro_changes = 3;
3629
3630                 /* Set aside the old stash, so we can reset isa caches on
3631                    its subclasses. */
3632                 if((old_stash = GvHV(dstr)))
3633                     /* Make sure we do not lose it early. */
3634                     SvREFCNT_inc_simple_void_NN(
3635                      sv_2mortal((SV *)old_stash)
3636                     );
3637             }
3638         }
3639     }
3640
3641     gp_free(MUTABLE_GV(dstr));
3642     isGV_with_GP_off(dstr);
3643     (void)SvOK_off(dstr);
3644     isGV_with_GP_on(dstr);
3645     GvINTRO_off(dstr);          /* one-shot flag */
3646     GvGP(dstr) = gp_ref(GvGP(sstr));
3647     if (SvTAINTED(sstr))
3648         SvTAINT(dstr);
3649     if (GvIMPORTED(dstr) != GVf_IMPORTED
3650         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3651         {
3652             GvIMPORTED_on(dstr);
3653         }
3654     GvMULTI_on(dstr);
3655     if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3656     else if(mro_changes == 3) {
3657         HV * const stash = GvHV(dstr);
3658         if((stash && HvNAME(stash)) || (old_stash && HvNAME(old_stash)))
3659             mro_package_moved(
3660                 stash && HvNAME(stash) ? stash : NULL,
3661                 old_stash && HvNAME(old_stash) ? old_stash : NULL,
3662                 (GV *)dstr, NULL, 0
3663             );
3664     }
3665     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3666     return;
3667 }
3668
3669 static void
3670 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3671 {
3672     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3673     SV *dref = NULL;
3674     const int intro = GvINTRO(dstr);
3675     SV **location;
3676     U8 import_flag = 0;
3677     const U32 stype = SvTYPE(sref);
3678
3679     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3680
3681     if (intro) {
3682         GvINTRO_off(dstr);      /* one-shot flag */
3683         GvLINE(dstr) = CopLINE(PL_curcop);
3684         GvEGV(dstr) = MUTABLE_GV(dstr);
3685     }
3686     GvMULTI_on(dstr);
3687     switch (stype) {
3688     case SVt_PVCV:
3689         location = (SV **) &GvCV(dstr);
3690         import_flag = GVf_IMPORTED_CV;
3691         goto common;
3692     case SVt_PVHV:
3693         location = (SV **) &GvHV(dstr);
3694         import_flag = GVf_IMPORTED_HV;
3695         goto common;
3696     case SVt_PVAV:
3697         location = (SV **) &GvAV(dstr);
3698         import_flag = GVf_IMPORTED_AV;
3699         goto common;
3700     case SVt_PVIO:
3701         location = (SV **) &GvIOp(dstr);
3702         goto common;
3703     case SVt_PVFM:
3704         location = (SV **) &GvFORM(dstr);
3705         goto common;
3706     default:
3707         location = &GvSV(dstr);
3708         import_flag = GVf_IMPORTED_SV;
3709     common:
3710         if (intro) {
3711             if (stype == SVt_PVCV) {
3712                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3713                 if (GvCVGEN(dstr)) {
3714                     SvREFCNT_dec(GvCV(dstr));
3715                     GvCV(dstr) = NULL;
3716                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3717                 }
3718             }
3719             SAVEGENERICSV(*location);
3720         }
3721         else
3722             dref = *location;
3723         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3724             CV* const cv = MUTABLE_CV(*location);
3725             if (cv) {
3726                 if (!GvCVGEN((const GV *)dstr) &&
3727                     (CvROOT(cv) || CvXSUB(cv)))
3728                     {
3729                         /* Redefining a sub - warning is mandatory if
3730                            it was a const and its value changed. */
3731                         if (CvCONST(cv) && CvCONST((const CV *)sref)
3732                             && cv_const_sv(cv)
3733                             == cv_const_sv((const CV *)sref)) {
3734                             NOOP;
3735                             /* They are 2 constant subroutines generated from
3736                                the same constant. This probably means that
3737                                they are really the "same" proxy subroutine
3738                                instantiated in 2 places. Most likely this is
3739                                when a constant is exported twice.  Don't warn.
3740                             */
3741                         }
3742                         else if (ckWARN(WARN_REDEFINE)
3743                                  || (CvCONST(cv)
3744                                      && (!CvCONST((const CV *)sref)
3745                                          || sv_cmp(cv_const_sv(cv),
3746                                                    cv_const_sv((const CV *)
3747                                                                sref))))) {
3748                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3749                                         (const char *)
3750                                         (CvCONST(cv)
3751                                          ? "Constant subroutine %s::%s redefined"
3752                                          : "Subroutine %s::%s redefined"),
3753                                         HvNAME_get(GvSTASH((const GV *)dstr)),
3754                                         GvENAME(MUTABLE_GV(dstr)));
3755                         }
3756                     }
3757                 if (!intro)
3758                     cv_ckproto_len(cv, (const GV *)dstr,
3759                                    SvPOK(sref) ? SvPVX_const(sref) : NULL,
3760                                    SvPOK(sref) ? SvCUR(sref) : 0);
3761             }
3762             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3763             GvASSUMECV_on(dstr);
3764             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3765         }
3766         *location = sref;
3767         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3768             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3769             GvFLAGS(dstr) |= import_flag;
3770         }
3771         if (stype == SVt_PVHV) {
3772             const char * const name = GvNAME((GV*)dstr);
3773             const STRLEN len = GvNAMELEN(dstr);
3774             if (
3775                 len > 1 && name[len-2] == ':' && name[len-1] == ':'
3776              && (HvNAME(dref) || HvNAME(sref))
3777             ) {
3778                 mro_package_moved(
3779                     HvNAME(sref) ? (HV *)sref : NULL,
3780                     HvNAME(dref) ? (HV *)dref : NULL,
3781                     (GV *)dstr, NULL, 0
3782                 );
3783             }
3784         }
3785         else if (stype == SVt_PVAV && strEQ(GvNAME((GV*)dstr), "ISA")) {
3786             sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3787             mro_isa_changed_in(GvSTASH(dstr));
3788         }
3789         break;
3790     }
3791     SvREFCNT_dec(dref);
3792     if (SvTAINTED(sstr))
3793         SvTAINT(dstr);
3794     return;
3795 }
3796
3797 void
3798 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3799 {
3800     dVAR;
3801     register U32 sflags;
3802     register int dtype;
3803     register svtype stype;
3804
3805     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3806
3807     if (sstr == dstr)
3808         return;
3809
3810     if (SvIS_FREED(dstr)) {
3811         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3812                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3813     }
3814     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3815     if (!sstr)
3816         sstr = &PL_sv_undef;
3817     if (SvIS_FREED(sstr)) {
3818         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3819                    (void*)sstr, (void*)dstr);
3820     }
3821     stype = SvTYPE(sstr);
3822     dtype = SvTYPE(dstr);
3823
3824     (void)SvAMAGIC_off(dstr);
3825     if ( SvVOK(dstr) )
3826     {
3827         /* need to nuke the magic */
3828         mg_free(dstr);
3829     }
3830
3831     /* There's a lot of redundancy below but we're going for speed here */
3832
3833     switch (stype) {
3834     case SVt_NULL:
3835       undef_sstr:
3836         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3837             (void)SvOK_off(dstr);
3838             return;
3839         }
3840         break;
3841     case SVt_IV:
3842         if (SvIOK(sstr)) {
3843             switch (dtype) {
3844             case SVt_NULL:
3845                 sv_upgrade(dstr, SVt_IV);
3846                 break;
3847             case SVt_NV:
3848             case SVt_PV:
3849                 sv_upgrade(dstr, SVt_PVIV);
3850                 break;
3851             case SVt_PVGV:
3852             case SVt_PVLV:
3853                 goto end_of_first_switch;
3854             }
3855             (void)SvIOK_only(dstr);
3856             SvIV_set(dstr,  SvIVX(sstr));
3857             if (SvIsUV(sstr))
3858                 SvIsUV_on(dstr);
3859             /* SvTAINTED can only be true if the SV has taint magic, which in
3860                turn means that the SV type is PVMG (or greater). This is the
3861                case statement for SVt_IV, so this cannot be true (whatever gcov
3862                may say).  */
3863             assert(!SvTAINTED(sstr));
3864             return;
3865         }
3866         if (!SvROK(sstr))
3867             goto undef_sstr;
3868         if (dtype < SVt_PV && dtype != SVt_IV)
3869             sv_upgrade(dstr, SVt_IV);
3870         break;
3871
3872     case SVt_NV:
3873         if (SvNOK(sstr)) {
3874             switch (dtype) {
3875             case SVt_NULL:
3876             case SVt_IV:
3877                 sv_upgrade(dstr, SVt_NV);
3878                 break;
3879             case SVt_PV:
3880             case SVt_PVIV:
3881                 sv_upgrade(dstr, SVt_PVNV);
3882                 break;
3883             case SVt_PVGV:
3884             case SVt_PVLV:
3885                 goto end_of_first_switch;
3886             }
3887             SvNV_set(dstr, SvNVX(sstr));
3888             (void)SvNOK_only(dstr);
3889             /* SvTAINTED can only be true if the SV has taint magic, which in
3890                turn means that the SV type is PVMG (or greater). This is the
3891                case statement for SVt_NV, so this cannot be true (whatever gcov
3892                may say).  */
3893             assert(!SvTAINTED(sstr));
3894             return;
3895         }
3896         goto undef_sstr;
3897
3898     case SVt_PVFM:
3899 #ifdef PERL_OLD_COPY_ON_WRITE
3900         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3901             if (dtype < SVt_PVIV)
3902                 sv_upgrade(dstr, SVt_PVIV);
3903             break;
3904         }
3905         /* Fall through */
3906 #endif
3907     case SVt_PV:
3908         if (dtype < SVt_PV)
3909             sv_upgrade(dstr, SVt_PV);
3910         break;
3911     case SVt_PVIV:
3912         if (dtype < SVt_PVIV)
3913             sv_upgrade(dstr, SVt_PVIV);
3914         break;
3915     case SVt_PVNV:
3916         if (dtype < SVt_PVNV)
3917             sv_upgrade(dstr, SVt_PVNV);
3918         break;
3919     default:
3920         {
3921         const char * const type = sv_reftype(sstr,0);
3922         if (PL_op)
3923             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
3924         else
3925             Perl_croak(aTHX_ "Bizarre copy of %s", type);
3926         }
3927         break;
3928
3929     case SVt_REGEXP:
3930         if (dtype < SVt_REGEXP)
3931             sv_upgrade(dstr, SVt_REGEXP);
3932         break;
3933
3934         /* case SVt_BIND: */
3935     case SVt_PVLV:
3936     case SVt_PVGV:
3937         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
3938             glob_assign_glob(dstr, sstr, dtype);
3939             return;
3940         }
3941         /* SvVALID means that this PVGV is playing at being an FBM.  */
3942         /*FALLTHROUGH*/
3943
3944     case SVt_PVMG:
3945         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3946             mg_get(sstr);
3947             if (SvTYPE(sstr) != stype)
3948                 stype = SvTYPE(sstr);
3949             if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
3950                     glob_assign_glob(dstr, sstr, dtype);
3951                     return;
3952             }
3953         }
3954         if (stype == SVt_PVLV)
3955             SvUPGRADE(dstr, SVt_PVNV);
3956         else
3957             SvUPGRADE(dstr, (svtype)stype);
3958     }
3959  end_of_first_switch:
3960
3961     /* dstr may have been upgraded.  */
3962     dtype = SvTYPE(dstr);
3963     sflags = SvFLAGS(sstr);
3964
3965     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
3966         /* Assigning to a subroutine sets the prototype.  */
3967         if (SvOK(sstr)) {
3968             STRLEN len;
3969             const char *const ptr = SvPV_const(sstr, len);
3970
3971             SvGROW(dstr, len + 1);
3972             Copy(ptr, SvPVX(dstr), len + 1, char);
3973             SvCUR_set(dstr, len);
3974             SvPOK_only(dstr);
3975             SvFLAGS(dstr) |= sflags & SVf_UTF8;
3976         } else {
3977             SvOK_off(dstr);
3978         }
3979     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3980         const char * const type = sv_reftype(dstr,0);
3981         if (PL_op)
3982             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
3983         else
3984             Perl_croak(aTHX_ "Cannot copy to %s", type);
3985     } else if (sflags & SVf_ROK) {
3986         if (isGV_with_GP(dstr)
3987             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
3988             sstr = SvRV(sstr);
3989             if (sstr == dstr) {
3990                 if (GvIMPORTED(dstr) != GVf_IMPORTED
3991                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3992                 {
3993                     GvIMPORTED_on(dstr);
3994                 }
3995                 GvMULTI_on(dstr);
3996                 return;
3997             }
3998             glob_assign_glob(dstr, sstr, dtype);
3999             return;
4000         }
4001
4002         if (dtype >= SVt_PV) {
4003             if (isGV_with_GP(dstr)) {
4004                 glob_assign_ref(dstr, sstr);
4005                 return;
4006             }
4007             if (SvPVX_const(dstr)) {
4008                 SvPV_free(dstr);
4009                 SvLEN_set(dstr, 0);
4010                 SvCUR_set(dstr, 0);
4011             }
4012         }
4013         (void)SvOK_off(dstr);
4014         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4015         SvFLAGS(dstr) |= sflags & SVf_ROK;
4016         assert(!(sflags & SVp_NOK));
4017         assert(!(sflags & SVp_IOK));
4018         assert(!(sflags & SVf_NOK));
4019         assert(!(sflags & SVf_IOK));
4020     }
4021     else if (isGV_with_GP(dstr)) {
4022         if (!(sflags & SVf_OK)) {
4023             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4024                            "Undefined value assigned to typeglob");
4025         }
4026         else {
4027             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
4028             if (dstr != (const SV *)gv) {
4029                 const char * const name = GvNAME((const GV *)dstr);
4030                 const STRLEN len = GvNAMELEN(dstr);
4031                 HV *old_stash = NULL;
4032                 bool reset_isa = FALSE;
4033                 if (len > 1 && name[len-2] == ':' && name[len-1] == ':') {
4034                     /* Set aside the old stash, so we can reset isa caches
4035                        on its subclasses. */
4036                     if((old_stash = GvHV(dstr)));
4037                         /* Make sure we do not lose it early. */
4038                         SvREFCNT_inc_simple_void_NN(
4039                          sv_2mortal((SV *)old_stash)
4040                         );
4041                     reset_isa = TRUE;
4042                 }
4043
4044                 if (GvGP(dstr))
4045                     gp_free(MUTABLE_GV(dstr));
4046                 GvGP(dstr) = gp_ref(GvGP(gv));
4047
4048                 if (reset_isa) {
4049                     HV * const stash = GvHV(dstr);
4050                     if(
4051                         (stash && HvNAME(stash))
4052                      || (old_stash && HvNAME(old_stash))
4053                     )
4054                         mro_package_moved(
4055                          stash && HvNAME(stash) ? stash : NULL,
4056                          old_stash && HvNAME(old_stash) ? old_stash : NULL,
4057                          (GV *)dstr, NULL, 0
4058                         );
4059                 }
4060             }
4061         }
4062     }
4063     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4064         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4065     }
4066     else if (sflags & SVp_POK) {
4067         bool isSwipe = 0;
4068
4069         /*
4070          * Check to see if we can just swipe the string.  If so, it's a
4071          * possible small lose on short strings, but a big win on long ones.
4072          * It might even be a win on short strings if SvPVX_const(dstr)
4073          * has to be allocated and SvPVX_const(sstr) has to be freed.
4074          * Likewise if we can set up COW rather than doing an actual copy, we
4075          * drop to the else clause, as the swipe code and the COW setup code
4076          * have much in common.
4077          */
4078
4079         /* Whichever path we take through the next code, we want this true,
4080            and doing it now facilitates the COW check.  */
4081         (void)SvPOK_only(dstr);
4082
4083         if (
4084             /* If we're already COW then this clause is not true, and if COW
4085                is allowed then we drop down to the else and make dest COW 
4086                with us.  If caller hasn't said that we're allowed to COW
4087                shared hash keys then we don't do the COW setup, even if the
4088                source scalar is a shared hash key scalar.  */
4089             (((flags & SV_COW_SHARED_HASH_KEYS)
4090                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4091                : 1 /* If making a COW copy is forbidden then the behaviour we
4092                        desire is as if the source SV isn't actually already
4093                        COW, even if it is.  So we act as if the source flags
4094                        are not COW, rather than actually testing them.  */
4095               )
4096 #ifndef PERL_OLD_COPY_ON_WRITE
4097              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4098                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4099                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4100                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4101                 but in turn, it's somewhat dead code, never expected to go
4102                 live, but more kept as a placeholder on how to do it better
4103                 in a newer implementation.  */
4104              /* If we are COW and dstr is a suitable target then we drop down
4105                 into the else and make dest a COW of us.  */
4106              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4107 #endif
4108              )
4109             &&
4110             !(isSwipe =
4111                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4112                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4113                  (!(flags & SV_NOSTEAL)) &&
4114                                         /* and we're allowed to steal temps */
4115                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4116                  SvLEN(sstr))             /* and really is a string */
4117 #ifdef PERL_OLD_COPY_ON_WRITE
4118             && ((flags & SV_COW_SHARED_HASH_KEYS)
4119                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4120                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4121                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4122                 : 1)
4123 #endif
4124             ) {
4125             /* Failed the swipe test, and it's not a shared hash key either.
4126                Have to copy the string.  */
4127             STRLEN len = SvCUR(sstr);
4128             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4129             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4130             SvCUR_set(dstr, len);
4131             *SvEND(dstr) = '\0';
4132         } else {
4133             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4134                be true in here.  */
4135             /* Either it's a shared hash key, or it's suitable for
4136                copy-on-write or we can swipe the string.  */
4137             if (DEBUG_C_TEST) {
4138                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4139                 sv_dump(sstr);
4140                 sv_dump(dstr);
4141             }
4142 #ifdef PERL_OLD_COPY_ON_WRITE
4143             if (!isSwipe) {
4144                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4145                     != (SVf_FAKE | SVf_READONLY)) {
4146                     SvREADONLY_on(sstr);
4147                     SvFAKE_on(sstr);
4148                     /* Make the source SV into a loop of 1.
4149                        (about to become 2) */
4150                     SV_COW_NEXT_SV_SET(sstr, sstr);
4151                 }
4152             }
4153 #endif
4154             /* Initial code is common.  */
4155             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4156                 SvPV_free(dstr);
4157             }
4158
4159             if (!isSwipe) {
4160                 /* making another shared SV.  */
4161                 STRLEN cur = SvCUR(sstr);
4162                 STRLEN len = SvLEN(sstr);
4163 #ifdef PERL_OLD_COPY_ON_WRITE
4164                 if (len) {
4165                     assert (SvTYPE(dstr) >= SVt_PVIV);
4166                     /* SvIsCOW_normal */
4167                     /* splice us in between source and next-after-source.  */
4168                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4169                     SV_COW_NEXT_SV_SET(sstr, dstr);
4170                     SvPV_set(dstr, SvPVX_mutable(sstr));
4171                 } else
4172 #endif
4173                 {
4174                     /* SvIsCOW_shared_hash */
4175                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4176                                           "Copy on write: Sharing hash\n"));
4177
4178                     assert (SvTYPE(dstr) >= SVt_PV);
4179                     SvPV_set(dstr,
4180                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4181                 }
4182                 SvLEN_set(dstr, len);
4183                 SvCUR_set(dstr, cur);
4184                 SvREADONLY_on(dstr);
4185                 SvFAKE_on(dstr);
4186             }
4187             else
4188                 {       /* Passes the swipe test.  */
4189                 SvPV_set(dstr, SvPVX_mutable(sstr));
4190                 SvLEN_set(dstr, SvLEN(sstr));
4191                 SvCUR_set(dstr, SvCUR(sstr));
4192
4193                 SvTEMP_off(dstr);
4194                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4195                 SvPV_set(sstr, NULL);
4196                 SvLEN_set(sstr, 0);
4197                 SvCUR_set(sstr, 0);
4198                 SvTEMP_off(sstr);
4199             }
4200         }
4201         if (sflags & SVp_NOK) {
4202             SvNV_set(dstr, SvNVX(sstr));
4203         }
4204         if (sflags & SVp_IOK) {
4205             SvIV_set(dstr, SvIVX(sstr));
4206             /* Must do this otherwise some other overloaded use of 0x80000000
4207                gets confused. I guess SVpbm_VALID */
4208             if (sflags & SVf_IVisUV)
4209                 SvIsUV_on(dstr);
4210         }
4211         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4212         {
4213             const MAGIC * const smg = SvVSTRING_mg(sstr);
4214             if (smg) {
4215                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4216                          smg->mg_ptr, smg->mg_len);
4217                 SvRMAGICAL_on(dstr);
4218             }
4219         }
4220     }
4221     else if (sflags & (SVp_IOK|SVp_NOK)) {
4222         (void)SvOK_off(dstr);
4223         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4224         if (sflags & SVp_IOK) {
4225             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4226             SvIV_set(dstr, SvIVX(sstr));
4227         }
4228         if (sflags & SVp_NOK) {
4229             SvNV_set(dstr, SvNVX(sstr));
4230         }
4231     }
4232     else {
4233         if (isGV_with_GP(sstr)) {
4234             /* This stringification rule for globs is spread in 3 places.
4235                This feels bad. FIXME.  */
4236             const U32 wasfake = sflags & SVf_FAKE;
4237
4238             /* FAKE globs can get coerced, so need to turn this off
4239                temporarily if it is on.  */
4240             SvFAKE_off(sstr);
4241             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4242             SvFLAGS(sstr) |= wasfake;
4243         }
4244         else
4245             (void)SvOK_off(dstr);
4246     }
4247     if (SvTAINTED(sstr))
4248         SvTAINT(dstr);
4249 }
4250
4251 /*
4252 =for apidoc sv_setsv_mg
4253
4254 Like C<sv_setsv>, but also handles 'set' magic.
4255
4256 =cut
4257 */
4258
4259 void
4260 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4261 {
4262     PERL_ARGS_ASSERT_SV_SETSV_MG;
4263
4264     sv_setsv(dstr,sstr);
4265     SvSETMAGIC(dstr);
4266 }
4267
4268 #ifdef PERL_OLD_COPY_ON_WRITE
4269 SV *
4270 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4271 {
4272     STRLEN cur = SvCUR(sstr);
4273     STRLEN len = SvLEN(sstr);
4274     register char *new_pv;
4275
4276     PERL_ARGS_ASSERT_SV_SETSV_COW;
4277
4278     if (DEBUG_C_TEST) {
4279         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4280                       (void*)sstr, (void*)dstr);
4281         sv_dump(sstr);
4282         if (dstr)
4283                     sv_dump(dstr);
4284     }
4285
4286     if (dstr) {
4287         if (SvTHINKFIRST(dstr))
4288             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4289         else if (SvPVX_const(dstr))
4290             Safefree(SvPVX_const(dstr));
4291     }
4292     else
4293         new_SV(dstr);
4294     SvUPGRADE(dstr, SVt_PVIV);
4295
4296     assert (SvPOK(sstr));
4297     assert (SvPOKp(sstr));
4298     assert (!SvIOK(sstr));
4299     assert (!SvIOKp(sstr));
4300     assert (!SvNOK(sstr));
4301     assert (!SvNOKp(sstr));
4302
4303     if (SvIsCOW(sstr)) {
4304
4305         if (SvLEN(sstr) == 0) {
4306             /* source is a COW shared hash key.  */
4307             DEBUG_C(PerlIO_printf(Perl_debug_log,
4308                                   "Fast copy on write: Sharing hash\n"));
4309             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4310             goto common_exit;
4311         }
4312         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4313     } else {
4314         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4315         SvUPGRADE(sstr, SVt_PVIV);
4316         SvREADONLY_on(sstr);
4317         SvFAKE_on(sstr);
4318         DEBUG_C(PerlIO_printf(Perl_debug_log,
4319                               "Fast copy on write: Converting sstr to COW\n"));
4320         SV_COW_NEXT_SV_SET(dstr, sstr);
4321     }
4322     SV_COW_NEXT_SV_SET(sstr, dstr);
4323     new_pv = SvPVX_mutable(sstr);
4324
4325   common_exit:
4326     SvPV_set(dstr, new_pv);
4327     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4328     if (SvUTF8(sstr))
4329         SvUTF8_on(dstr);
4330     SvLEN_set(dstr, len);
4331     SvCUR_set(dstr, cur);
4332     if (DEBUG_C_TEST) {
4333         sv_dump(dstr);
4334     }
4335     return dstr;
4336 }
4337 #endif
4338
4339 /*
4340 =for apidoc sv_setpvn
4341
4342 Copies a string into an SV.  The C<len> parameter indicates the number of
4343 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4344 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4345
4346 =cut
4347 */
4348
4349 void
4350 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4351 {
4352     dVAR;
4353     register char *dptr;
4354
4355     PERL_ARGS_ASSERT_SV_SETPVN;
4356
4357     SV_CHECK_THINKFIRST_COW_DROP(sv);
4358     if (!ptr) {
4359         (void)SvOK_off(sv);
4360         return;
4361     }
4362     else {
4363         /* len is STRLEN which is unsigned, need to copy to signed */
4364         const IV iv = len;
4365         if (iv < 0)
4366             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4367     }
4368     SvUPGRADE(sv, SVt_PV);
4369
4370     dptr = SvGROW(sv, len + 1);
4371     Move(ptr,dptr,len,char);
4372     dptr[len] = '\0';
4373     SvCUR_set(sv, len);
4374     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4375     SvTAINT(sv);
4376 }
4377
4378 /*
4379 =for apidoc sv_setpvn_mg
4380
4381 Like C<sv_setpvn>, but also handles 'set' magic.
4382
4383 =cut
4384 */
4385
4386 void
4387 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4388 {
4389     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4390
4391     sv_setpvn(sv,ptr,len);
4392     SvSETMAGIC(sv);
4393 }
4394
4395 /*
4396 =for apidoc sv_setpv
4397
4398 Copies a string into an SV.  The string must be null-terminated.  Does not
4399 handle 'set' magic.  See C<sv_setpv_mg>.
4400
4401 =cut
4402 */
4403
4404 void
4405 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4406 {
4407     dVAR;
4408     register STRLEN len;
4409
4410     PERL_ARGS_ASSERT_SV_SETPV;
4411
4412     SV_CHECK_THINKFIRST_COW_DROP(sv);
4413     if (!ptr) {
4414         (void)SvOK_off(sv);
4415         return;
4416     }
4417     len = strlen(ptr);
4418     SvUPGRADE(sv, SVt_PV);
4419
4420     SvGROW(sv, len + 1);
4421     Move(ptr,SvPVX(sv),len+1,char);
4422     SvCUR_set(sv, len);
4423     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4424     SvTAINT(sv);
4425 }
4426
4427 /*
4428 =for apidoc sv_setpv_mg
4429
4430 Like C<sv_setpv>, but also handles 'set' magic.
4431
4432 =cut
4433 */
4434
4435 void
4436 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4437 {
4438     PERL_ARGS_ASSERT_SV_SETPV_MG;
4439
4440     sv_setpv(sv,ptr);
4441     SvSETMAGIC(sv);
4442 }
4443
4444 /*
4445 =for apidoc sv_usepvn_flags
4446
4447 Tells an SV to use C<ptr> to find its string value.  Normally the
4448 string is stored inside the SV but sv_usepvn allows the SV to use an
4449 outside string.  The C<ptr> should point to memory that was allocated
4450 by C<malloc>.  The string length, C<len>, must be supplied.  By default
4451 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4452 so that pointer should not be freed or used by the programmer after
4453 giving it to sv_usepvn, and neither should any pointers from "behind"
4454 that pointer (e.g. ptr + 1) be used.
4455
4456 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4457 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4458 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4459 C<len>, and already meets the requirements for storing in C<SvPVX>)
4460
4461 =cut
4462 */
4463
4464 void
4465 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4466 {
4467     dVAR;
4468     STRLEN allocate;
4469
4470     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4471
4472     SV_CHECK_THINKFIRST_COW_DROP(sv);
4473     SvUPGRADE(sv, SVt_PV);
4474     if (!ptr) {
4475         (void)SvOK_off(sv);
4476         if (flags & SV_SMAGIC)
4477             SvSETMAGIC(sv);
4478         return;
4479     }
4480     if (SvPVX_const(sv))
4481         SvPV_free(sv);
4482
4483 #ifdef DEBUGGING
4484     if (flags & SV_HAS_TRAILING_NUL)
4485         assert(ptr[len] == '\0');
4486 #endif
4487
4488     allocate = (flags & SV_HAS_TRAILING_NUL)
4489         ? len + 1 :
4490 #ifdef Perl_safesysmalloc_size
4491         len + 1;
4492 #else 
4493         PERL_STRLEN_ROUNDUP(len + 1);
4494 #endif
4495     if (flags & SV_HAS_TRAILING_NUL) {
4496         /* It's long enough - do nothing.
4497            Specfically Perl_newCONSTSUB is relying on this.  */
4498     } else {
4499 #ifdef DEBUGGING
4500         /* Force a move to shake out bugs in callers.  */
4501         char *new_ptr = (char*)safemalloc(allocate);
4502         Copy(ptr, new_ptr, len, char);
4503         PoisonFree(ptr,len,char);
4504         Safefree(ptr);
4505         ptr = new_ptr;
4506 #else
4507         ptr = (char*) saferealloc (ptr, allocate);
4508 #endif
4509     }
4510 #ifdef Perl_safesysmalloc_size
4511     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4512 #else
4513     SvLEN_set(sv, allocate);
4514 #endif
4515     SvCUR_set(sv, len);
4516     SvPV_set(sv, ptr);
4517     if (!(flags & SV_HAS_TRAILING_NUL)) {
4518         ptr[len] = '\0';
4519     }
4520     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4521     SvTAINT(sv);
4522     if (flags & SV_SMAGIC)
4523         SvSETMAGIC(sv);
4524 }
4525
4526 #ifdef PERL_OLD_COPY_ON_WRITE
4527 /* Need to do this *after* making the SV normal, as we need the buffer
4528    pointer to remain valid until after we've copied it.  If we let go too early,
4529    another thread could invalidate it by unsharing last of the same hash key
4530    (which it can do by means other than releasing copy-on-write Svs)
4531    or by changing the other copy-on-write SVs in the loop.  */
4532 STATIC void
4533 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4534 {
4535     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4536
4537     { /* this SV was SvIsCOW_normal(sv) */
4538          /* we need to find the SV pointing to us.  */
4539         SV *current = SV_COW_NEXT_SV(after);
4540
4541         if (current == sv) {
4542             /* The SV we point to points back to us (there were only two of us
4543                in the loop.)
4544                Hence other SV is no longer copy on write either.  */
4545             SvFAKE_off(after);
4546             SvREADONLY_off(after);
4547         } else {
4548             /* We need to follow the pointers around the loop.  */
4549             SV *next;
4550             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4551                 assert (next);
4552                 current = next;
4553                  /* don't loop forever if the structure is bust, and we have
4554                     a pointer into a closed loop.  */
4555                 assert (current != after);
4556                 assert (SvPVX_const(current) == pvx);
4557             }
4558             /* Make the SV before us point to the SV after us.  */
4559             SV_COW_NEXT_SV_SET(current, after);
4560         }
4561     }
4562 }
4563 #endif
4564 /*
4565 =for apidoc sv_force_normal_flags
4566
4567 Undo various types of fakery on an SV: if the PV is a shared string, make
4568 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4569 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4570 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4571 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4572 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4573 set to some other value.) In addition, the C<flags> parameter gets passed to
4574 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4575 with flags set to 0.
4576
4577 =cut
4578 */
4579
4580 void
4581 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4582 {
4583     dVAR;
4584
4585     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4586
4587 #ifdef PERL_OLD_COPY_ON_WRITE
4588     if (SvREADONLY(sv)) {
4589         if (SvFAKE(sv)) {
4590             const char * const pvx = SvPVX_const(sv);
4591             const STRLEN len = SvLEN(sv);
4592             const STRLEN cur = SvCUR(sv);
4593             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4594                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4595                we'll fail an assertion.  */
4596             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4597
4598             if (DEBUG_C_TEST) {
4599                 PerlIO_printf(Perl_debug_log,
4600                               "Copy on write: Force normal %ld\n",
4601                               (long) flags);
4602                 sv_dump(sv);
4603             }
4604             SvFAKE_off(sv);
4605             SvREADONLY_off(sv);
4606             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4607             SvPV_set(sv, NULL);
4608             SvLEN_set(sv, 0);
4609             if (flags & SV_COW_DROP_PV) {
4610                 /* OK, so we don't need to copy our buffer.  */
4611                 SvPOK_off(sv);
4612             } else {
4613                 SvGROW(sv, cur + 1);
4614                 Move(pvx,SvPVX(sv),cur,char);
4615                 SvCUR_set(sv, cur);
4616                 *SvEND(sv) = '\0';
4617             }
4618             if (len) {
4619                 sv_release_COW(sv, pvx, next);
4620             } else {
4621                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4622             }
4623             if (DEBUG_C_TEST) {
4624                 sv_dump(sv);
4625             }
4626         }
4627         else if (IN_PERL_RUNTIME)
4628             Perl_croak_no_modify(aTHX);
4629     }
4630 #else
4631     if (SvREADONLY(sv)) {
4632         if (SvFAKE(sv)) {
4633             const char * const pvx = SvPVX_const(sv);
4634             const STRLEN len = SvCUR(sv);
4635             SvFAKE_off(sv);
4636             SvREADONLY_off(sv);
4637             SvPV_set(sv, NULL);
4638             SvLEN_set(sv, 0);
4639             SvGROW(sv, len + 1);
4640             Move(pvx,SvPVX(sv),len,char);
4641             *SvEND(sv) = '\0';
4642             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4643         }
4644         else if (IN_PERL_RUNTIME)
4645             Perl_croak_no_modify(aTHX);
4646     }
4647 #endif
4648     if (SvROK(sv))
4649         sv_unref_flags(sv, flags);