This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
S_glob_assign_ref: Move the sref != dref earlier
[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     SvGETMAGIC(sv);
3032     sv_utf8_downgrade(sv,0);
3033     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3034 }
3035
3036 /*
3037 =for apidoc sv_2pvutf8
3038
3039 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3040 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3041
3042 Usually accessed via the C<SvPVutf8> macro.
3043
3044 =cut
3045 */
3046
3047 char *
3048 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3049 {
3050     PERL_ARGS_ASSERT_SV_2PVUTF8;
3051
3052     sv_utf8_upgrade(sv);
3053     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3054 }
3055
3056
3057 /*
3058 =for apidoc sv_2bool
3059
3060 This macro is only used by sv_true() or its macro equivalent, and only if
3061 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3062 It calls sv_2bool_flags with the SV_GMAGIC flag.
3063
3064 =for apidoc sv_2bool_flags
3065
3066 This function is only used by sv_true() and friends,  and only if
3067 the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
3068 contain SV_GMAGIC, then it does an mg_get() first.
3069
3070
3071 =cut
3072 */
3073
3074 bool
3075 Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
3076 {
3077     dVAR;
3078
3079     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3080
3081     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3082
3083     if (!SvOK(sv))
3084         return 0;
3085     if (SvROK(sv)) {
3086         if (SvAMAGIC(sv)) {
3087             SV * const tmpsv = AMG_CALLun(sv,bool_);
3088             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3089                 return cBOOL(SvTRUE(tmpsv));
3090         }
3091         return SvRV(sv) != 0;
3092     }
3093     if (SvPOKp(sv)) {
3094         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3095         if (Xpvtmp &&
3096                 (*sv->sv_u.svu_pv > '0' ||
3097                 Xpvtmp->xpv_cur > 1 ||
3098                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3099             return 1;
3100         else
3101             return 0;
3102     }
3103     else {
3104         if (SvIOKp(sv))
3105             return SvIVX(sv) != 0;
3106         else {
3107             if (SvNOKp(sv))
3108                 return SvNVX(sv) != 0.0;
3109             else {
3110                 if (isGV_with_GP(sv))
3111                     return TRUE;
3112                 else
3113                     return FALSE;
3114             }
3115         }
3116     }
3117 }
3118
3119 /*
3120 =for apidoc sv_utf8_upgrade
3121
3122 Converts the PV of an SV to its UTF-8-encoded form.
3123 Forces the SV to string form if it is not already.
3124 Will C<mg_get> on C<sv> if appropriate.
3125 Always sets the SvUTF8 flag to avoid future validity checks even
3126 if the whole string is the same in UTF-8 as not.
3127 Returns the number of bytes in the converted string
3128
3129 This is not as a general purpose byte encoding to Unicode interface:
3130 use the Encode extension for that.
3131
3132 =for apidoc sv_utf8_upgrade_nomg
3133
3134 Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3135
3136 =for apidoc sv_utf8_upgrade_flags
3137
3138 Converts the PV of an SV to its UTF-8-encoded form.
3139 Forces the SV to string form if it is not already.
3140 Always sets the SvUTF8 flag to avoid future validity checks even
3141 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3142 will C<mg_get> on C<sv> if appropriate, else not.
3143 Returns the number of bytes in the converted string
3144 C<sv_utf8_upgrade> and
3145 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3146
3147 This is not as a general purpose byte encoding to Unicode interface:
3148 use the Encode extension for that.
3149
3150 =cut
3151
3152 The grow version is currently not externally documented.  It adds a parameter,
3153 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3154 have free after it upon return.  This allows the caller to reserve extra space
3155 that it intends to fill, to avoid extra grows.
3156
3157 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3158 which can be used to tell this function to not first check to see if there are
3159 any characters that are different in UTF-8 (variant characters) which would
3160 force it to allocate a new string to sv, but to assume there are.  Typically
3161 this flag is used by a routine that has already parsed the string to find that
3162 there are such characters, and passes this information on so that the work
3163 doesn't have to be repeated.
3164
3165 (One might think that the calling routine could pass in the position of the
3166 first such variant, so it wouldn't have to be found again.  But that is not the
3167 case, because typically when the caller is likely to use this flag, it won't be
3168 calling this routine unless it finds something that won't fit into a byte.
3169 Otherwise it tries to not upgrade and just use bytes.  But some things that
3170 do fit into a byte are variants in utf8, and the caller may not have been
3171 keeping track of these.)
3172
3173 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3174 isn't guaranteed due to having other routines do the work in some input cases,
3175 or if the input is already flagged as being in utf8.
3176
3177 The speed of this could perhaps be improved for many cases if someone wanted to
3178 write a fast function that counts the number of variant characters in a string,
3179 especially if it could return the position of the first one.
3180
3181 */
3182
3183 STRLEN
3184 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3185 {
3186     dVAR;
3187
3188     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3189
3190     if (sv == &PL_sv_undef)
3191         return 0;
3192     if (!SvPOK(sv)) {
3193         STRLEN len = 0;
3194         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3195             (void) sv_2pv_flags(sv,&len, flags);
3196             if (SvUTF8(sv)) {
3197                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3198                 return len;
3199             }
3200         } else {
3201             (void) SvPV_force(sv,len);
3202         }
3203     }
3204
3205     if (SvUTF8(sv)) {
3206         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3207         return SvCUR(sv);
3208     }
3209
3210     if (SvIsCOW(sv)) {
3211         sv_force_normal_flags(sv, 0);
3212     }
3213
3214     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3215         sv_recode_to_utf8(sv, PL_encoding);
3216         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3217         return SvCUR(sv);
3218     }
3219
3220     if (SvCUR(sv) == 0) {
3221         if (extra) SvGROW(sv, extra);
3222     } else { /* Assume Latin-1/EBCDIC */
3223         /* This function could be much more efficient if we
3224          * had a FLAG in SVs to signal if there are any variant
3225          * chars in the PV.  Given that there isn't such a flag
3226          * make the loop as fast as possible (although there are certainly ways
3227          * to speed this up, eg. through vectorization) */
3228         U8 * s = (U8 *) SvPVX_const(sv);
3229         U8 * e = (U8 *) SvEND(sv);
3230         U8 *t = s;
3231         STRLEN two_byte_count = 0;
3232         
3233         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3234
3235         /* See if really will need to convert to utf8.  We mustn't rely on our
3236          * incoming SV being well formed and having a trailing '\0', as certain
3237          * code in pp_formline can send us partially built SVs. */
3238
3239         while (t < e) {
3240             const U8 ch = *t++;
3241             if (NATIVE_IS_INVARIANT(ch)) continue;
3242
3243             t--;    /* t already incremented; re-point to first variant */
3244             two_byte_count = 1;
3245             goto must_be_utf8;
3246         }
3247
3248         /* utf8 conversion not needed because all are invariants.  Mark as
3249          * UTF-8 even if no variant - saves scanning loop */
3250         SvUTF8_on(sv);
3251         return SvCUR(sv);
3252
3253 must_be_utf8:
3254
3255         /* Here, the string should be converted to utf8, either because of an
3256          * input flag (two_byte_count = 0), or because a character that
3257          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3258          * the beginning of the string (if we didn't examine anything), or to
3259          * the first variant.  In either case, everything from s to t - 1 will
3260          * occupy only 1 byte each on output.
3261          *
3262          * There are two main ways to convert.  One is to create a new string
3263          * and go through the input starting from the beginning, appending each
3264          * converted value onto the new string as we go along.  It's probably
3265          * best to allocate enough space in the string for the worst possible
3266          * case rather than possibly running out of space and having to
3267          * reallocate and then copy what we've done so far.  Since everything
3268          * from s to t - 1 is invariant, the destination can be initialized
3269          * with these using a fast memory copy
3270          *
3271          * The other way is to figure out exactly how big the string should be
3272          * by parsing the entire input.  Then you don't have to make it big
3273          * enough to handle the worst possible case, and more importantly, if
3274          * the string you already have is large enough, you don't have to
3275          * allocate a new string, you can copy the last character in the input
3276          * string to the final position(s) that will be occupied by the
3277          * converted string and go backwards, stopping at t, since everything
3278          * before that is invariant.
3279          *
3280          * There are advantages and disadvantages to each method.
3281          *
3282          * In the first method, we can allocate a new string, do the memory
3283          * copy from the s to t - 1, and then proceed through the rest of the
3284          * string byte-by-byte.
3285          *
3286          * In the second method, we proceed through the rest of the input
3287          * string just calculating how big the converted string will be.  Then
3288          * there are two cases:
3289          *  1)  if the string has enough extra space to handle the converted
3290          *      value.  We go backwards through the string, converting until we
3291          *      get to the position we are at now, and then stop.  If this
3292          *      position is far enough along in the string, this method is
3293          *      faster than the other method.  If the memory copy were the same
3294          *      speed as the byte-by-byte loop, that position would be about
3295          *      half-way, as at the half-way mark, parsing to the end and back
3296          *      is one complete string's parse, the same amount as starting
3297          *      over and going all the way through.  Actually, it would be
3298          *      somewhat less than half-way, as it's faster to just count bytes
3299          *      than to also copy, and we don't have the overhead of allocating
3300          *      a new string, changing the scalar to use it, and freeing the
3301          *      existing one.  But if the memory copy is fast, the break-even
3302          *      point is somewhere after half way.  The counting loop could be
3303          *      sped up by vectorization, etc, to move the break-even point
3304          *      further towards the beginning.
3305          *  2)  if the string doesn't have enough space to handle the converted
3306          *      value.  A new string will have to be allocated, and one might
3307          *      as well, given that, start from the beginning doing the first
3308          *      method.  We've spent extra time parsing the string and in
3309          *      exchange all we've gotten is that we know precisely how big to
3310          *      make the new one.  Perl is more optimized for time than space,
3311          *      so this case is a loser.
3312          * So what I've decided to do is not use the 2nd method unless it is
3313          * guaranteed that a new string won't have to be allocated, assuming
3314          * the worst case.  I also decided not to put any more conditions on it
3315          * than this, for now.  It seems likely that, since the worst case is
3316          * twice as big as the unknown portion of the string (plus 1), we won't
3317          * be guaranteed enough space, causing us to go to the first method,
3318          * unless the string is short, or the first variant character is near
3319          * the end of it.  In either of these cases, it seems best to use the
3320          * 2nd method.  The only circumstance I can think of where this would
3321          * be really slower is if the string had once had much more data in it
3322          * than it does now, but there is still a substantial amount in it  */
3323
3324         {
3325             STRLEN invariant_head = t - s;
3326             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3327             if (SvLEN(sv) < size) {
3328
3329                 /* Here, have decided to allocate a new string */
3330
3331                 U8 *dst;
3332                 U8 *d;
3333
3334                 Newx(dst, size, U8);
3335
3336                 /* If no known invariants at the beginning of the input string,
3337                  * set so starts from there.  Otherwise, can use memory copy to
3338                  * get up to where we are now, and then start from here */
3339
3340                 if (invariant_head <= 0) {
3341                     d = dst;
3342                 } else {
3343                     Copy(s, dst, invariant_head, char);
3344                     d = dst + invariant_head;
3345                 }
3346
3347                 while (t < e) {
3348                     const UV uv = NATIVE8_TO_UNI(*t++);
3349                     if (UNI_IS_INVARIANT(uv))
3350                         *d++ = (U8)UNI_TO_NATIVE(uv);
3351                     else {
3352                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3353                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3354                     }
3355                 }
3356                 *d = '\0';
3357                 SvPV_free(sv); /* No longer using pre-existing string */
3358                 SvPV_set(sv, (char*)dst);
3359                 SvCUR_set(sv, d - dst);
3360                 SvLEN_set(sv, size);
3361             } else {
3362
3363                 /* Here, have decided to get the exact size of the string.
3364                  * Currently this happens only when we know that there is
3365                  * guaranteed enough space to fit the converted string, so
3366                  * don't have to worry about growing.  If two_byte_count is 0,
3367                  * then t points to the first byte of the string which hasn't
3368                  * been examined yet.  Otherwise two_byte_count is 1, and t
3369                  * points to the first byte in the string that will expand to
3370                  * two.  Depending on this, start examining at t or 1 after t.
3371                  * */
3372
3373                 U8 *d = t + two_byte_count;
3374
3375
3376                 /* Count up the remaining bytes that expand to two */
3377
3378                 while (d < e) {
3379                     const U8 chr = *d++;
3380                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3381                 }
3382
3383                 /* The string will expand by just the number of bytes that
3384                  * occupy two positions.  But we are one afterwards because of
3385                  * the increment just above.  This is the place to put the
3386                  * trailing NUL, and to set the length before we decrement */
3387
3388                 d += two_byte_count;
3389                 SvCUR_set(sv, d - s);
3390                 *d-- = '\0';
3391
3392
3393                 /* Having decremented d, it points to the position to put the
3394                  * very last byte of the expanded string.  Go backwards through
3395                  * the string, copying and expanding as we go, stopping when we
3396                  * get to the part that is invariant the rest of the way down */
3397
3398                 e--;
3399                 while (e >= t) {
3400                     const U8 ch = NATIVE8_TO_UNI(*e--);
3401                     if (UNI_IS_INVARIANT(ch)) {
3402                         *d-- = UNI_TO_NATIVE(ch);
3403                     } else {
3404                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3405                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3406                     }
3407                 }
3408             }
3409         }
3410     }
3411
3412     /* Mark as UTF-8 even if no variant - saves scanning loop */
3413     SvUTF8_on(sv);
3414     return SvCUR(sv);
3415 }
3416
3417 /*
3418 =for apidoc sv_utf8_downgrade
3419
3420 Attempts to convert the PV of an SV from characters to bytes.
3421 If the PV contains a character that cannot fit
3422 in a byte, this conversion will fail;
3423 in this case, either returns false or, if C<fail_ok> is not
3424 true, croaks.
3425
3426 This is not as a general purpose Unicode to byte encoding interface:
3427 use the Encode extension for that.
3428
3429 =cut
3430 */
3431
3432 bool
3433 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3434 {
3435     dVAR;
3436
3437     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3438
3439     if (SvPOKp(sv) && SvUTF8(sv)) {
3440         if (SvCUR(sv)) {
3441             U8 *s;
3442             STRLEN len;
3443
3444             if (SvIsCOW(sv)) {
3445                 sv_force_normal_flags(sv, 0);
3446             }
3447             s = (U8 *) SvPV(sv, len);
3448             if (!utf8_to_bytes(s, &len)) {
3449                 if (fail_ok)
3450                     return FALSE;
3451                 else {
3452                     if (PL_op)
3453                         Perl_croak(aTHX_ "Wide character in %s",
3454                                    OP_DESC(PL_op));
3455                     else
3456                         Perl_croak(aTHX_ "Wide character");
3457                 }
3458             }
3459             SvCUR_set(sv, len);
3460         }
3461     }
3462     SvUTF8_off(sv);
3463     return TRUE;
3464 }
3465
3466 /*
3467 =for apidoc sv_utf8_encode
3468
3469 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3470 flag off so that it looks like octets again.
3471
3472 =cut
3473 */
3474
3475 void
3476 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3477 {
3478     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3479
3480     if (SvIsCOW(sv)) {
3481         sv_force_normal_flags(sv, 0);
3482     }
3483     if (SvREADONLY(sv)) {
3484         Perl_croak_no_modify(aTHX);
3485     }
3486     (void) sv_utf8_upgrade(sv);
3487     SvUTF8_off(sv);
3488 }
3489
3490 /*
3491 =for apidoc sv_utf8_decode
3492
3493 If the PV of the SV is an octet sequence in UTF-8
3494 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3495 so that it looks like a character. If the PV contains only single-byte
3496 characters, the C<SvUTF8> flag stays being off.
3497 Scans PV for validity and returns false if the PV is invalid UTF-8.
3498
3499 =cut
3500 */
3501
3502 bool
3503 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3504 {
3505     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3506
3507     if (SvPOKp(sv)) {
3508         const U8 *c;
3509         const U8 *e;
3510
3511         /* The octets may have got themselves encoded - get them back as
3512          * bytes
3513          */
3514         if (!sv_utf8_downgrade(sv, TRUE))
3515             return FALSE;
3516
3517         /* it is actually just a matter of turning the utf8 flag on, but
3518          * we want to make sure everything inside is valid utf8 first.
3519          */
3520         c = (const U8 *) SvPVX_const(sv);
3521         if (!is_utf8_string(c, SvCUR(sv)+1))
3522             return FALSE;
3523         e = (const U8 *) SvEND(sv);
3524         while (c < e) {
3525             const U8 ch = *c++;
3526             if (!UTF8_IS_INVARIANT(ch)) {
3527                 SvUTF8_on(sv);
3528                 break;
3529             }
3530         }
3531     }
3532     return TRUE;
3533 }
3534
3535 /*
3536 =for apidoc sv_setsv
3537
3538 Copies the contents of the source SV C<ssv> into the destination SV
3539 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3540 function if the source SV needs to be reused. Does not handle 'set' magic.
3541 Loosely speaking, it performs a copy-by-value, obliterating any previous
3542 content of the destination.
3543
3544 You probably want to use one of the assortment of wrappers, such as
3545 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3546 C<SvSetMagicSV_nosteal>.
3547
3548 =for apidoc sv_setsv_flags
3549
3550 Copies the contents of the source SV C<ssv> into the destination SV
3551 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3552 function if the source SV needs to be reused. Does not handle 'set' magic.
3553 Loosely speaking, it performs a copy-by-value, obliterating any previous
3554 content of the destination.
3555 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3556 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3557 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3558 and C<sv_setsv_nomg> are implemented in terms of this function.
3559
3560 You probably want to use one of the assortment of wrappers, such as
3561 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3562 C<SvSetMagicSV_nosteal>.
3563
3564 This is the primary function for copying scalars, and most other
3565 copy-ish functions and macros use this underneath.
3566
3567 =cut
3568 */
3569
3570 static void
3571 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3572 {
3573     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3574     HV *old_stash = NULL;
3575
3576     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3577
3578     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3579         const char * const name = GvNAME(sstr);
3580         const STRLEN len = GvNAMELEN(sstr);
3581         {
3582             if (dtype >= SVt_PV) {
3583                 SvPV_free(dstr);
3584                 SvPV_set(dstr, 0);
3585                 SvLEN_set(dstr, 0);
3586                 SvCUR_set(dstr, 0);
3587             }
3588             SvUPGRADE(dstr, SVt_PVGV);
3589             (void)SvOK_off(dstr);
3590             /* FIXME - why are we doing this, then turning it off and on again
3591                below?  */
3592             isGV_with_GP_on(dstr);
3593         }
3594         GvSTASH(dstr) = GvSTASH(sstr);
3595         if (GvSTASH(dstr))
3596             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3597         gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
3598         SvFAKE_on(dstr);        /* can coerce to non-glob */
3599     }
3600
3601     if(GvGP(MUTABLE_GV(sstr))) {
3602         /* If source has method cache entry, clear it */
3603         if(GvCVGEN(sstr)) {
3604             SvREFCNT_dec(GvCV(sstr));
3605             GvCV(sstr) = NULL;
3606             GvCVGEN(sstr) = 0;
3607         }
3608         /* If source has a real method, then a method is
3609            going to change */
3610         else if(
3611          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3612         ) {
3613             mro_changes = 1;
3614         }
3615     }
3616
3617     /* If dest already had a real method, that's a change as well */
3618     if(
3619         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3620      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3621     ) {
3622         mro_changes = 1;
3623     }
3624
3625     /* We don’t need to check the name of the destination if it was not a
3626        glob to begin with. */
3627     if(dtype == SVt_PVGV) {
3628         const char * const name = GvNAME((const GV *)dstr);
3629         if(
3630             strEQ(name,"ISA")
3631          /* The stash may have been detached from the symbol table, so
3632             check its name. */
3633          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3634          && GvAV((const GV *)sstr)
3635         )
3636             mro_changes = 2;
3637         else {
3638             const STRLEN len = GvNAMELEN(dstr);
3639             if (len > 1 && name[len-2] == ':' && name[len-1] == ':') {
3640                 mro_changes = 3;
3641
3642                 /* Set aside the old stash, so we can reset isa caches on
3643                    its subclasses. */
3644                 if((old_stash = GvHV(dstr)))
3645                     /* Make sure we do not lose it early. */
3646                     SvREFCNT_inc_simple_void_NN(
3647                      sv_2mortal((SV *)old_stash)
3648                     );
3649             }
3650         }
3651     }
3652
3653     gp_free(MUTABLE_GV(dstr));
3654     isGV_with_GP_off(dstr);
3655     (void)SvOK_off(dstr);
3656     isGV_with_GP_on(dstr);
3657     GvINTRO_off(dstr);          /* one-shot flag */
3658     GvGP(dstr) = gp_ref(GvGP(sstr));
3659     if (SvTAINTED(sstr))
3660         SvTAINT(dstr);
3661     if (GvIMPORTED(dstr) != GVf_IMPORTED
3662         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3663         {
3664             GvIMPORTED_on(dstr);
3665         }
3666     GvMULTI_on(dstr);
3667     if(mro_changes == 2) {
3668         MAGIC *mg;
3669         SV * const sref = (SV *)GvAV((const GV *)dstr);
3670         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3671             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3672                 AV * const ary = newAV();
3673                 av_push(ary, mg->mg_obj); /* takes the refcount */
3674                 mg->mg_obj = (SV *)ary;
3675             }
3676             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3677         }
3678         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3679         mro_isa_changed_in(GvSTASH(dstr));
3680     }
3681     else if(mro_changes == 3) {
3682         HV * const stash = GvHV(dstr);
3683         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3684             mro_package_moved(
3685                 stash, old_stash,
3686                 (GV *)dstr, NULL, 0
3687             );
3688     }
3689     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3690     return;
3691 }
3692
3693 static void
3694 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3695 {
3696     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3697     SV *dref = NULL;
3698     const int intro = GvINTRO(dstr);
3699     SV **location;
3700     U8 import_flag = 0;
3701     const U32 stype = SvTYPE(sref);
3702
3703     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3704
3705     if (intro) {
3706         GvINTRO_off(dstr);      /* one-shot flag */
3707         GvLINE(dstr) = CopLINE(PL_curcop);
3708         GvEGV(dstr) = MUTABLE_GV(dstr);
3709     }
3710     GvMULTI_on(dstr);
3711     switch (stype) {
3712     case SVt_PVCV:
3713         location = (SV **) &GvCV(dstr);
3714         import_flag = GVf_IMPORTED_CV;
3715         goto common;
3716     case SVt_PVHV:
3717         location = (SV **) &GvHV(dstr);
3718         import_flag = GVf_IMPORTED_HV;
3719         goto common;
3720     case SVt_PVAV:
3721         location = (SV **) &GvAV(dstr);
3722         import_flag = GVf_IMPORTED_AV;
3723         goto common;
3724     case SVt_PVIO:
3725         location = (SV **) &GvIOp(dstr);
3726         goto common;
3727     case SVt_PVFM:
3728         location = (SV **) &GvFORM(dstr);
3729         goto common;
3730     default:
3731         location = &GvSV(dstr);
3732         import_flag = GVf_IMPORTED_SV;
3733     common:
3734         if (intro) {
3735             if (stype == SVt_PVCV) {
3736                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3737                 if (GvCVGEN(dstr)) {
3738                     SvREFCNT_dec(GvCV(dstr));
3739                     GvCV(dstr) = NULL;
3740                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3741                 }
3742             }
3743             SAVEGENERICSV(*location);
3744         }
3745         else
3746             dref = *location;
3747         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3748             CV* const cv = MUTABLE_CV(*location);
3749             if (cv) {
3750                 if (!GvCVGEN((const GV *)dstr) &&
3751                     (CvROOT(cv) || CvXSUB(cv)))
3752                     {
3753                         /* Redefining a sub - warning is mandatory if
3754                            it was a const and its value changed. */
3755                         if (CvCONST(cv) && CvCONST((const CV *)sref)
3756                             && cv_const_sv(cv)
3757                             == cv_const_sv((const CV *)sref)) {
3758                             NOOP;
3759                             /* They are 2 constant subroutines generated from
3760                                the same constant. This probably means that
3761                                they are really the "same" proxy subroutine
3762                                instantiated in 2 places. Most likely this is
3763                                when a constant is exported twice.  Don't warn.
3764                             */
3765                         }
3766                         else if (ckWARN(WARN_REDEFINE)
3767                                  || (CvCONST(cv)
3768                                      && (!CvCONST((const CV *)sref)
3769                                          || sv_cmp(cv_const_sv(cv),
3770                                                    cv_const_sv((const CV *)
3771                                                                sref))))) {
3772                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3773                                         (const char *)
3774                                         (CvCONST(cv)
3775                                          ? "Constant subroutine %s::%s redefined"
3776                                          : "Subroutine %s::%s redefined"),
3777                                         HvNAME_get(GvSTASH((const GV *)dstr)),
3778                                         GvENAME(MUTABLE_GV(dstr)));
3779                         }
3780                     }
3781                 if (!intro)
3782                     cv_ckproto_len(cv, (const GV *)dstr,
3783                                    SvPOK(sref) ? SvPVX_const(sref) : NULL,
3784                                    SvPOK(sref) ? SvCUR(sref) : 0);
3785             }
3786             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3787             GvASSUMECV_on(dstr);
3788             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3789         }
3790         *location = sref;
3791         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3792             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3793             GvFLAGS(dstr) |= import_flag;
3794         }
3795         if (stype == SVt_PVHV) {
3796             const char * const name = GvNAME((GV*)dstr);
3797             const STRLEN len = GvNAMELEN(dstr);
3798             if (
3799                 len > 1 && name[len-2] == ':' && name[len-1] == ':'
3800              && (!dref || HvENAME_get(dref))
3801             ) {
3802                 mro_package_moved(
3803                     (HV *)sref, (HV *)dref,
3804                     (GV *)dstr, NULL, 0
3805                 );
3806             }
3807         }
3808         else if (
3809             stype == SVt_PVAV && sref != dref
3810          && strEQ(GvNAME((GV*)dstr), "ISA")
3811          /* The stash may have been detached from the symbol table, so
3812             check its name before doing anything. */
3813          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3814         ) {
3815             MAGIC *mg;
3816             MAGIC * const omg = dref && SvSMAGICAL(dref)
3817                                  ? mg_find(dref, PERL_MAGIC_isa)
3818                                  : NULL;
3819             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3820                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3821                     AV * const ary = newAV();
3822                     av_push(ary, mg->mg_obj); /* takes the refcount */
3823                     mg->mg_obj = (SV *)ary;
3824                 }
3825                 if (omg) {
3826                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3827                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3828                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3829                         while (items--)
3830                             av_push(
3831                              (AV *)mg->mg_obj,
3832                              SvREFCNT_inc_simple_NN(*svp++)
3833                             );
3834                     }
3835                     else
3836                         av_push(
3837                          (AV *)mg->mg_obj,
3838                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3839                         );
3840                 }
3841                 else
3842                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3843             }
3844             else
3845                 sv_magic(
3846                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3847                 );
3848             /* Since the *ISA assignment could have affected more than
3849                one stash, don’t call mro_isa_changed_in directly, but let
3850                magic_setisa do it for us, as it already has the logic for
3851                dealing with globs vs arrays of globs. */
3852             SvSETMAGIC(sref);
3853         }
3854         break;
3855     }
3856     SvREFCNT_dec(dref);
3857     if (SvTAINTED(sstr))
3858         SvTAINT(dstr);
3859     return;
3860 }
3861
3862 void
3863 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3864 {
3865     dVAR;
3866     register U32 sflags;
3867     register int dtype;
3868     register svtype stype;
3869
3870     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3871
3872     if (sstr == dstr)
3873         return;
3874
3875     if (SvIS_FREED(dstr)) {
3876         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3877                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3878     }
3879     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3880     if (!sstr)
3881         sstr = &PL_sv_undef;
3882     if (SvIS_FREED(sstr)) {
3883         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3884                    (void*)sstr, (void*)dstr);
3885     }
3886     stype = SvTYPE(sstr);
3887     dtype = SvTYPE(dstr);
3888
3889     (void)SvAMAGIC_off(dstr);
3890     if ( SvVOK(dstr) )
3891     {
3892         /* need to nuke the magic */
3893         mg_free(dstr);
3894     }
3895
3896     /* There's a lot of redundancy below but we're going for speed here */
3897
3898     switch (stype) {
3899     case SVt_NULL:
3900       undef_sstr:
3901         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3902             (void)SvOK_off(dstr);
3903             return;
3904         }
3905         break;
3906     case SVt_IV:
3907         if (SvIOK(sstr)) {
3908             switch (dtype) {
3909             case SVt_NULL:
3910                 sv_upgrade(dstr, SVt_IV);
3911                 break;
3912             case SVt_NV:
3913             case SVt_PV:
3914                 sv_upgrade(dstr, SVt_PVIV);
3915                 break;
3916             case SVt_PVGV:
3917             case SVt_PVLV:
3918                 goto end_of_first_switch;
3919             }
3920             (void)SvIOK_only(dstr);
3921             SvIV_set(dstr,  SvIVX(sstr));
3922             if (SvIsUV(sstr))
3923                 SvIsUV_on(dstr);
3924             /* SvTAINTED can only be true if the SV has taint magic, which in
3925                turn means that the SV type is PVMG (or greater). This is the
3926                case statement for SVt_IV, so this cannot be true (whatever gcov
3927                may say).  */
3928             assert(!SvTAINTED(sstr));
3929             return;
3930         }
3931         if (!SvROK(sstr))
3932             goto undef_sstr;
3933         if (dtype < SVt_PV && dtype != SVt_IV)
3934             sv_upgrade(dstr, SVt_IV);
3935         break;
3936
3937     case SVt_NV:
3938         if (SvNOK(sstr)) {
3939             switch (dtype) {
3940             case SVt_NULL:
3941             case SVt_IV:
3942                 sv_upgrade(dstr, SVt_NV);
3943                 break;
3944             case SVt_PV:
3945             case SVt_PVIV:
3946                 sv_upgrade(dstr, SVt_PVNV);
3947                 break;
3948             case SVt_PVGV:
3949             case SVt_PVLV:
3950                 goto end_of_first_switch;
3951             }
3952             SvNV_set(dstr, SvNVX(sstr));
3953             (void)SvNOK_only(dstr);
3954             /* SvTAINTED can only be true if the SV has taint magic, which in
3955                turn means that the SV type is PVMG (or greater). This is the
3956                case statement for SVt_NV, so this cannot be true (whatever gcov
3957                may say).  */
3958             assert(!SvTAINTED(sstr));
3959             return;
3960         }
3961         goto undef_sstr;
3962
3963     case SVt_PVFM:
3964 #ifdef PERL_OLD_COPY_ON_WRITE
3965         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3966             if (dtype < SVt_PVIV)
3967                 sv_upgrade(dstr, SVt_PVIV);
3968             break;
3969         }
3970         /* Fall through */
3971 #endif
3972     case SVt_PV:
3973         if (dtype < SVt_PV)
3974             sv_upgrade(dstr, SVt_PV);
3975         break;
3976     case SVt_PVIV:
3977         if (dtype < SVt_PVIV)
3978             sv_upgrade(dstr, SVt_PVIV);
3979         break;
3980     case SVt_PVNV:
3981         if (dtype < SVt_PVNV)
3982             sv_upgrade(dstr, SVt_PVNV);
3983         break;
3984     default:
3985         {
3986         const char * const type = sv_reftype(sstr,0);
3987         if (PL_op)
3988             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
3989         else
3990             Perl_croak(aTHX_ "Bizarre copy of %s", type);
3991         }
3992         break;
3993
3994     case SVt_REGEXP:
3995         if (dtype < SVt_REGEXP)
3996             sv_upgrade(dstr, SVt_REGEXP);
3997         break;
3998
3999         /* case SVt_BIND: */
4000     case SVt_PVLV:
4001     case SVt_PVGV:
4002         /* SvVALID means that this PVGV is playing at being an FBM.  */
4003
4004     case SVt_PVMG:
4005         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4006             mg_get(sstr);
4007             if (SvTYPE(sstr) != stype)
4008                 stype = SvTYPE(sstr);
4009         }
4010         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4011                     glob_assign_glob(dstr, sstr, dtype);
4012                     return;
4013         }
4014         if (stype == SVt_PVLV)
4015             SvUPGRADE(dstr, SVt_PVNV);
4016         else
4017             SvUPGRADE(dstr, (svtype)stype);
4018     }
4019  end_of_first_switch:
4020
4021     /* dstr may have been upgraded.  */
4022     dtype = SvTYPE(dstr);
4023     sflags = SvFLAGS(sstr);
4024
4025     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
4026         /* Assigning to a subroutine sets the prototype.  */
4027         if (SvOK(sstr)) {
4028             STRLEN len;
4029             const char *const ptr = SvPV_const(sstr, len);
4030
4031             SvGROW(dstr, len + 1);
4032             Copy(ptr, SvPVX(dstr), len + 1, char);
4033             SvCUR_set(dstr, len);
4034             SvPOK_only(dstr);
4035             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4036         } else {
4037             SvOK_off(dstr);
4038         }
4039     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4040         const char * const type = sv_reftype(dstr,0);
4041         if (PL_op)
4042             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4043         else
4044             Perl_croak(aTHX_ "Cannot copy to %s", type);
4045     } else if (sflags & SVf_ROK) {
4046         if (isGV_with_GP(dstr)
4047             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4048             sstr = SvRV(sstr);
4049             if (sstr == dstr) {
4050                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4051                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4052                 {
4053                     GvIMPORTED_on(dstr);
4054                 }
4055                 GvMULTI_on(dstr);
4056                 return;
4057             }
4058             glob_assign_glob(dstr, sstr, dtype);
4059             return;
4060         }
4061
4062         if (dtype >= SVt_PV) {
4063             if (isGV_with_GP(dstr)) {
4064                 glob_assign_ref(dstr, sstr);
4065                 return;
4066             }
4067             if (SvPVX_const(dstr)) {
4068                 SvPV_free(dstr);
4069                 SvLEN_set(dstr, 0);
4070                 SvCUR_set(dstr, 0);
4071             }
4072         }
4073         (void)SvOK_off(dstr);
4074         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4075         SvFLAGS(dstr) |= sflags & SVf_ROK;
4076         assert(!(sflags & SVp_NOK));
4077         assert(!(sflags & SVp_IOK));
4078         assert(!(sflags & SVf_NOK));
4079         assert(!(sflags & SVf_IOK));
4080     }
4081     else if (isGV_with_GP(dstr)) {
4082         if (!(sflags & SVf_OK)) {
4083             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4084                            "Undefined value assigned to typeglob");
4085         }
4086         else {
4087             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
4088             if (dstr != (const SV *)gv) {
4089                 const char * const name = GvNAME((const GV *)dstr);
4090                 const STRLEN len = GvNAMELEN(dstr);
4091                 HV *old_stash = NULL;
4092                 bool reset_isa = FALSE;
4093                 if (len > 1 && name[len-2] == ':' && name[len-1] == ':') {
4094                     /* Set aside the old stash, so we can reset isa caches
4095                        on its subclasses. */
4096                     if((old_stash = GvHV(dstr))) {
4097                         /* Make sure we do not lose it early. */
4098                         SvREFCNT_inc_simple_void_NN(
4099                          sv_2mortal((SV *)old_stash)
4100                         );
4101                     }
4102                     reset_isa = TRUE;
4103                 }
4104
4105                 if (GvGP(dstr))
4106                     gp_free(MUTABLE_GV(dstr));
4107                 GvGP(dstr) = gp_ref(GvGP(gv));
4108
4109                 if (reset_isa) {
4110                     HV * const stash = GvHV(dstr);
4111                     if(
4112                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4113                     )
4114                         mro_package_moved(
4115                          stash, old_stash,
4116                          (GV *)dstr, NULL, 0
4117                         );
4118                 }
4119             }
4120         }
4121     }
4122     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4123         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4124     }
4125     else if (sflags & SVp_POK) {
4126         bool isSwipe = 0;
4127
4128         /*
4129          * Check to see if we can just swipe the string.  If so, it's a
4130          * possible small lose on short strings, but a big win on long ones.
4131          * It might even be a win on short strings if SvPVX_const(dstr)
4132          * has to be allocated and SvPVX_const(sstr) has to be freed.
4133          * Likewise if we can set up COW rather than doing an actual copy, we
4134          * drop to the else clause, as the swipe code and the COW setup code
4135          * have much in common.
4136          */
4137
4138         /* Whichever path we take through the next code, we want this true,
4139            and doing it now facilitates the COW check.  */
4140         (void)SvPOK_only(dstr);
4141
4142         if (
4143             /* If we're already COW then this clause is not true, and if COW
4144                is allowed then we drop down to the else and make dest COW 
4145                with us.  If caller hasn't said that we're allowed to COW
4146                shared hash keys then we don't do the COW setup, even if the
4147                source scalar is a shared hash key scalar.  */
4148             (((flags & SV_COW_SHARED_HASH_KEYS)
4149                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4150                : 1 /* If making a COW copy is forbidden then the behaviour we
4151                        desire is as if the source SV isn't actually already
4152                        COW, even if it is.  So we act as if the source flags
4153                        are not COW, rather than actually testing them.  */
4154               )
4155 #ifndef PERL_OLD_COPY_ON_WRITE
4156              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4157                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4158                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4159                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4160                 but in turn, it's somewhat dead code, never expected to go
4161                 live, but more kept as a placeholder on how to do it better
4162                 in a newer implementation.  */
4163              /* If we are COW and dstr is a suitable target then we drop down
4164                 into the else and make dest a COW of us.  */
4165              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4166 #endif
4167              )
4168             &&
4169             !(isSwipe =
4170                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4171                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4172                  (!(flags & SV_NOSTEAL)) &&
4173                                         /* and we're allowed to steal temps */
4174                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4175                  SvLEN(sstr))             /* and really is a string */
4176 #ifdef PERL_OLD_COPY_ON_WRITE
4177             && ((flags & SV_COW_SHARED_HASH_KEYS)
4178                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4179                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4180                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4181                 : 1)
4182 #endif
4183             ) {
4184             /* Failed the swipe test, and it's not a shared hash key either.
4185                Have to copy the string.  */
4186             STRLEN len = SvCUR(sstr);
4187             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4188             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4189             SvCUR_set(dstr, len);
4190             *SvEND(dstr) = '\0';
4191         } else {
4192             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4193                be true in here.  */
4194             /* Either it's a shared hash key, or it's suitable for
4195                copy-on-write or we can swipe the string.  */
4196             if (DEBUG_C_TEST) {
4197                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4198                 sv_dump(sstr);
4199                 sv_dump(dstr);
4200             }
4201 #ifdef PERL_OLD_COPY_ON_WRITE
4202             if (!isSwipe) {
4203                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4204                     != (SVf_FAKE | SVf_READONLY)) {
4205                     SvREADONLY_on(sstr);
4206                     SvFAKE_on(sstr);
4207                     /* Make the source SV into a loop of 1.
4208                        (about to become 2) */
4209                     SV_COW_NEXT_SV_SET(sstr, sstr);
4210                 }
4211             }
4212 #endif
4213             /* Initial code is common.  */
4214             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4215                 SvPV_free(dstr);
4216             }
4217
4218             if (!isSwipe) {
4219                 /* making another shared SV.  */
4220                 STRLEN cur = SvCUR(sstr);
4221                 STRLEN len = SvLEN(sstr);
4222 #ifdef PERL_OLD_COPY_ON_WRITE
4223                 if (len) {
4224                     assert (SvTYPE(dstr) >= SVt_PVIV);
4225                     /* SvIsCOW_normal */
4226                     /* splice us in between source and next-after-source.  */
4227                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4228                     SV_COW_NEXT_SV_SET(sstr, dstr);
4229                     SvPV_set(dstr, SvPVX_mutable(sstr));
4230                 } else
4231 #endif
4232                 {
4233                     /* SvIsCOW_shared_hash */
4234                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4235                                           "Copy on write: Sharing hash\n"));
4236
4237                     assert (SvTYPE(dstr) >= SVt_PV);
4238                     SvPV_set(dstr,
4239                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4240                 }
4241                 SvLEN_set(dstr, len);
4242                 SvCUR_set(dstr, cur);
4243                 SvREADONLY_on(dstr);
4244                 SvFAKE_on(dstr);
4245             }
4246             else
4247                 {       /* Passes the swipe test.  */
4248                 SvPV_set(dstr, SvPVX_mutable(sstr));
4249                 SvLEN_set(dstr, SvLEN(sstr));
4250                 SvCUR_set(dstr, SvCUR(sstr));
4251
4252                 SvTEMP_off(dstr);
4253                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4254                 SvPV_set(sstr, NULL);
4255                 SvLEN_set(sstr, 0);
4256                 SvCUR_set(sstr, 0);
4257                 SvTEMP_off(sstr);
4258             }
4259         }
4260         if (sflags & SVp_NOK) {
4261             SvNV_set(dstr, SvNVX(sstr));
4262         }
4263         if (sflags & SVp_IOK) {
4264             SvIV_set(dstr, SvIVX(sstr));
4265             /* Must do this otherwise some other overloaded use of 0x80000000
4266                gets confused. I guess SVpbm_VALID */
4267             if (sflags & SVf_IVisUV)
4268                 SvIsUV_on(dstr);
4269         }
4270         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4271         {
4272             const MAGIC * const smg = SvVSTRING_mg(sstr);
4273             if (smg) {
4274                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4275                          smg->mg_ptr, smg->mg_len);
4276                 SvRMAGICAL_on(dstr);
4277             }
4278         }
4279     }
4280     else if (sflags & (SVp_IOK|SVp_NOK)) {
4281         (void)SvOK_off(dstr);
4282         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4283         if (sflags & SVp_IOK) {
4284             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4285             SvIV_set(dstr, SvIVX(sstr));
4286         }
4287         if (sflags & SVp_NOK) {
4288             SvNV_set(dstr, SvNVX(sstr));
4289         }
4290     }
4291     else {
4292         if (isGV_with_GP(sstr)) {
4293             /* This stringification rule for globs is spread in 3 places.
4294                This feels bad. FIXME.  */
4295             const U32 wasfake = sflags & SVf_FAKE;
4296
4297             /* FAKE globs can get coerced, so need to turn this off
4298                temporarily if it is on.  */
4299             SvFAKE_off(sstr);
4300             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4301             SvFLAGS(sstr) |= wasfake;
4302         }
4303         else
4304             (void)SvOK_off(dstr);
4305     }
4306     if (SvTAINTED(sstr))
4307         SvTAINT(dstr);
4308 }
4309
4310 /*
4311 =for apidoc sv_setsv_mg
4312
4313 Like C<sv_setsv>, but also handles 'set' magic.
4314
4315 =cut
4316 */
4317
4318 void
4319 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4320 {
4321     PERL_ARGS_ASSERT_SV_SETSV_MG;
4322
4323     sv_setsv(dstr,sstr);
4324     SvSETMAGIC(dstr);
4325 }
4326
4327 #ifdef PERL_OLD_COPY_ON_WRITE
4328 SV *
4329 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4330 {
4331     STRLEN cur = SvCUR(sstr);
4332     STRLEN len = SvLEN(sstr);
4333     register char *new_pv;
4334
4335     PERL_ARGS_ASSERT_SV_SETSV_COW;
4336
4337     if (DEBUG_C_TEST) {
4338         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4339                       (void*)sstr, (void*)dstr);
4340         sv_dump(sstr);
4341         if (dstr)
4342                     sv_dump(dstr);
4343     }
4344
4345     if (dstr) {
4346         if (SvTHINKFIRST(dstr))
4347             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4348         else if (SvPVX_const(dstr))
4349             Safefree(SvPVX_const(dstr));
4350     }
4351     else
4352         new_SV(dstr);
4353     SvUPGRADE(dstr, SVt_PVIV);
4354
4355     assert (SvPOK(sstr));
4356     assert (SvPOKp(sstr));
4357     assert (!SvIOK(sstr));
4358     assert (!SvIOKp(sstr));
4359     assert (!SvNOK(sstr));
4360     assert (!SvNOKp(sstr));
4361
4362     if (SvIsCOW(sstr)) {
4363
4364         if (SvLEN(sstr) == 0) {
4365             /* source is a COW shared hash key.  */
4366             DEBUG_C(PerlIO_printf(Perl_debug_log,
4367                                   "Fast copy on write: Sharing hash\n"));
4368             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4369             goto common_exit;
4370         }
4371         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4372     } else {
4373         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4374         SvUPGRADE(sstr, SVt_PVIV);
4375         SvREADONLY_on(sstr);
4376         SvFAKE_on(sstr);
4377         DEBUG_C(PerlIO_printf(Perl_debug_log,
4378                               "Fast copy on write: Converting sstr to COW\n"));
4379         SV_COW_NEXT_SV_SET(dstr, sstr);
4380     }
4381     SV_COW_NEXT_SV_SET(sstr, dstr);
4382     new_pv = SvPVX_mutable(sstr);
4383
4384   common_exit:
4385     SvPV_set(dstr, new_pv);
4386     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4387     if (SvUTF8(sstr))
4388         SvUTF8_on(dstr);
4389     SvLEN_set(dstr, len);
4390     SvCUR_set(dstr, cur);
4391     if (DEBUG_C_TEST) {
4392         sv_dump(dstr);
4393     }
4394     return dstr;
4395 }
4396 #endif
4397
4398 /*
4399 =for apidoc sv_setpvn
4400
4401 Copies a string into an SV.  The C<len> parameter indicates the number of
4402 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4403 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4404
4405 =cut
4406 */
4407
4408 void
4409 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4410 {
4411     dVAR;
4412     register char *dptr;
4413
4414     PERL_ARGS_ASSERT_SV_SETPVN;
4415
4416     SV_CHECK_THINKFIRST_COW_DROP(sv);
4417     if (!ptr) {
4418         (void)SvOK_off(sv);
4419         return;
4420     }
4421     else {
4422         /* len is STRLEN which is unsigned, need to copy to signed */
4423         const IV iv = len;
4424         if (iv < 0)
4425             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4426     }
4427     SvUPGRADE(sv, SVt_PV);
4428
4429     dptr = SvGROW(sv, len + 1);
4430     Move(ptr,dptr,len,char);
4431     dptr[len] = '\0';
4432     SvCUR_set(sv, len);
4433     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4434     SvTAINT(sv);
4435 }
4436
4437 /*
4438 =for apidoc sv_setpvn_mg
4439
4440 Like C<sv_setpvn>, but also handles 'set' magic.
4441
4442 =cut
4443 */
4444
4445 void
4446 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4447 {
4448     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4449
4450     sv_setpvn(sv,ptr,len);
4451     SvSETMAGIC(sv);
4452 }
4453
4454 /*
4455 =for apidoc sv_setpv
4456
4457 Copies a string into an SV.  The string must be null-terminated.  Does not
4458 handle 'set' magic.  See C<sv_setpv_mg>.
4459
4460 =cut
4461 */
4462
4463 void
4464 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4465 {
4466     dVAR;
4467     register STRLEN len;
4468
4469     PERL_ARGS_ASSERT_SV_SETPV;
4470
4471     SV_CHECK_THINKFIRST_COW_DROP(sv);
4472     if (!ptr) {
4473         (void)SvOK_off(sv);
4474         return;
4475     }
4476     len = strlen(ptr);
4477     SvUPGRADE(sv, SVt_PV);
4478
4479     SvGROW(sv, len + 1);
4480     Move(ptr,SvPVX(sv),len+1,char);
4481     SvCUR_set(sv, len);
4482     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4483     SvTAINT(sv);
4484 }
4485
4486 /*
4487 =for apidoc sv_setpv_mg
4488
4489 Like C<sv_setpv>, but also handles 'set' magic.
4490
4491 =cut
4492 */
4493
4494 void
4495 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4496 {
4497     PERL_ARGS_ASSERT_SV_SETPV_MG;
4498
4499     sv_setpv(sv,ptr);
4500     SvSETMAGIC(sv);
4501 }
4502
4503 /*
4504 =for apidoc sv_usepvn_flags
4505
4506 Tells an SV to use C<ptr> to find its string value.  Normally the
4507 string is stored inside the SV but sv_usepvn allows the SV to use an
4508 outside string.  The C<ptr> should point to memory that was allocated
4509 by C<malloc>.  The string length, C<len>, must be supplied.  By default
4510 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4511 so that pointer should not be freed or used by the programmer after
4512 giving it to sv_usepvn, and neither should any pointers from "behind"
4513 that pointer (e.g. ptr + 1) be used.
4514
4515 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4516 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4517 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4518 C<len>, and already meets the requirements for storing in C<SvPVX>)
4519
4520 =cut
4521 */
4522
4523 void
4524 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4525 {
4526     dVAR;
4527     STRLEN allocate;
4528
4529     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4530
4531     SV_CHECK_THINKFIRST_COW_DROP(sv);
4532     SvUPGRADE(sv, SVt_PV);
4533     if (!ptr) {
4534         (void)SvOK_off(sv);
4535         if (flags & SV_SMAGIC)
4536             SvSETMAGIC(sv);
4537         return;
4538     }
4539     if (SvPVX_const(sv))
4540         SvPV_free(sv);
4541
4542 #ifdef DEBUGGING
4543     if (flags & SV_HAS_TRAILING_NUL)
4544         assert(ptr[len] == '\0');
4545 #endif
4546
4547     allocate = (flags & SV_HAS_TRAILING_NUL)
4548         ? len + 1 :
4549 #ifdef Perl_safesysmalloc_size
4550         len + 1;
4551 #else 
4552         PERL_STRLEN_ROUNDUP(len + 1);
4553 #endif
4554     if (flags & SV_HAS_TRAILING_NUL) {
4555         /* It's long enough - do nothing.
4556            Specfically Perl_newCONSTSUB is relying on this.  */
4557     } else {
4558 #ifdef DEBUGGING
4559         /* Force a move to shake out bugs in callers.  */
4560         char *new_ptr = (char*)safemalloc(allocate);
4561         Copy(ptr, new_ptr, len, char);
4562         PoisonFree(ptr,len,char);
4563         Safefree(ptr);
4564         ptr = new_ptr;
4565 #else
4566         ptr = (char*) saferealloc (ptr, allocate);
4567 #endif
4568     }
4569 #ifdef Perl_safesysmalloc_size
4570     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4571 #else
4572     SvLEN_set(sv, allocate);
4573 #endif
4574     SvCUR_set(sv, len);
4575     SvPV_set(sv, ptr);
4576     if (!(flags & SV_HAS_TRAILING_NUL)) {
4577         ptr[len] = '\0';
4578     }
4579     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4580     SvTAINT(sv);
4581     if (flags & SV_SMAGIC)
4582         SvSETMAGIC(sv);
4583 }
4584
4585 #ifdef PERL_OLD_COPY_ON_WRITE
4586 /* Need to do this *after* making the SV normal, as we need the buffer
4587    pointer to remain valid until after we've copied it.  If we let go too early,
4588    another thread could invalidate it by unsharing last of the same hash key
4589    (which it can do by means other than releasing copy-on-write Svs)
4590    or by changing the other copy-on-write SVs in the loop.  */
4591 STATIC void
4592 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4593 {
4594     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4595
4596     { /* this SV was SvIsCOW_normal(sv) */
4597          /* we need to find the SV pointing to us.  */
4598         SV *current = SV_COW_NEXT_SV(after);
4599
4600         if (current == sv) {
4601             /* The SV we point to points back to us (there were only two of us
4602                in the loop.)
4603                Hence other SV is no longer copy on write either.  */
4604             SvFAKE_off(after);
4605             SvREADONLY_off(after);
4606         } else {
4607             /* We need to follow the pointers around the loop.  */
4608             SV *next;
4609             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4610                 assert (next);
4611                 current = next;
4612                  /* don't loop forever if the structure is bust, and we have
4613                     a pointer into a closed loop.  */
4614                 assert (current != after);
4615                 assert (SvPVX_const(current) == pvx);
4616             }
4617             /* Make the SV before us point to the SV after us.  */
4618             SV_COW_NEXT_SV_SET(current, after);
4619         }
4620     }
4621 }
4622 #endif
4623 /*
4624 =for apidoc sv_force_normal_flags
4625
4626 Undo various types of fakery on an SV: if the PV is a shared string, make
4627 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4628 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4629 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4630 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4631 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4632 set to some other value.) In addition, the C<flags> parameter gets passed to
4633 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4634 with flags set to 0.
4635
4636 =cut
4637 */
4638
4639 void
4640 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4641 {
4642  &n