This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In Perl_sv_usepvn_flags(), with MYMALLOC, use the actual malloc()ed
[perl5.git] / sv.c
CommitLineData
a0d0e21e 1/* sv.c
79072805 2 *
4bb101f2 3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
7272f7c1 4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
79072805
LW
5 *
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
8 *
a0d0e21e 9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
645c22ef
DM
10 *
11 *
5e045b90
AMS
12 * This file contains the code that creates, manipulates and destroys
13 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14 * structure of an SV, so their creation and destruction is handled
15 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16 * level functions (eg. substr, split, join) for each of the types are
17 * in the pp*.c files.
79072805
LW
18 */
19
20#include "EXTERN.h"
864dbfa3 21#define PERL_IN_SV_C
79072805 22#include "perl.h"
d2f185dc 23#include "regcomp.h"
79072805 24
51371543 25#define FCALL *f
2c5424a7 26
2f8ed50e
OS
27#ifdef __Lynx__
28/* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
30#endif
31
e23c8137 32#ifdef PERL_UTF8_CACHE_ASSERT
ab455f60 33/* if adding more checks watch out for the following tests:
e23c8137
JH
34 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
35 * lib/utf8.t lib/Unicode/Collate/t/index.t
36 * --jhi
37 */
6f207bd3 38# define ASSERT_UTF8_CACHE(cache) \
ab455f60
NC
39 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
40 assert((cache)[2] <= (cache)[3]); \
41 assert((cache)[3] <= (cache)[1]);} \
42 } STMT_END
e23c8137 43#else
6f207bd3 44# define ASSERT_UTF8_CACHE(cache) NOOP
e23c8137
JH
45#endif
46
f8c7b90f 47#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 48#define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
607fa7f2 49#define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
b5ccf5f2 50/* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
765f542d 51 on-write. */
765f542d 52#endif
645c22ef
DM
53
54/* ============================================================================
55
56=head1 Allocation and deallocation of SVs.
57
d2a0f284
JC
58An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
59sv, av, hv...) contains type and reference count information, and for
60many types, a pointer to the body (struct xrv, xpv, xpviv...), which
61contains fields specific to each type. Some types store all they need
62in the head, so don't have a body.
63
64In all but the most memory-paranoid configuations (ex: PURIFY), heads
65and bodies are allocated out of arenas, which by default are
66approximately 4K chunks of memory parcelled up into N heads or bodies.
93e68bfb
JC
67Sv-bodies are allocated by their sv-type, guaranteeing size
68consistency needed to allocate safely from arrays.
69
d2a0f284
JC
70For SV-heads, the first slot in each arena is reserved, and holds a
71link to the next arena, some flags, and a note of the number of slots.
72Snaked through each arena chain is a linked list of free items; when
73this becomes empty, an extra arena is allocated and divided up into N
74items which are threaded into the free list.
75
76SV-bodies are similar, but they use arena-sets by default, which
77separate the link and info from the arena itself, and reclaim the 1st
78slot in the arena. SV-bodies are further described later.
645c22ef
DM
79
80The following global variables are associated with arenas:
81
82 PL_sv_arenaroot pointer to list of SV arenas
83 PL_sv_root pointer to list of free SV structures
84
d2a0f284
JC
85 PL_body_arenas head of linked-list of body arenas
86 PL_body_roots[] array of pointers to list of free bodies of svtype
87 arrays are indexed by the svtype needed
93e68bfb 88
d2a0f284
JC
89A few special SV heads are not allocated from an arena, but are
90instead directly created in the interpreter structure, eg PL_sv_undef.
93e68bfb
JC
91The size of arenas can be changed from the default by setting
92PERL_ARENA_SIZE appropriately at compile time.
645c22ef
DM
93
94The SV arena serves the secondary purpose of allowing still-live SVs
95to be located and destroyed during final cleanup.
96
97At the lowest level, the macros new_SV() and del_SV() grab and free
98an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
99to return the SV to the free list with error checking.) new_SV() calls
100more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
101SVs in the free list have their SvTYPE field set to all ones.
102
ff276b08 103At the time of very final cleanup, sv_free_arenas() is called from
645c22ef 104perl_destruct() to physically free all the arenas allocated since the
6a93a7e5 105start of the interpreter.
645c22ef 106
645c22ef
DM
107The function visit() scans the SV arenas list, and calls a specified
108function for each SV it finds which is still live - ie which has an SvTYPE
109other than all 1's, and a non-zero SvREFCNT. visit() is used by the
110following functions (specified as [function that calls visit()] / [function
111called by visit() for each SV]):
112
113 sv_report_used() / do_report_used()
f2524eef 114 dump all remaining SVs (debugging aid)
645c22ef
DM
115
116 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
117 Attempt to free all objects pointed to by RVs,
118 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
119 try to do the same for all objects indirectly
120 referenced by typeglobs too. Called once from
121 perl_destruct(), prior to calling sv_clean_all()
122 below.
123
124 sv_clean_all() / do_clean_all()
125 SvREFCNT_dec(sv) each remaining SV, possibly
126 triggering an sv_free(). It also sets the
127 SVf_BREAK flag on the SV to indicate that the
128 refcnt has been artificially lowered, and thus
129 stopping sv_free() from giving spurious warnings
130 about SVs which unexpectedly have a refcnt
131 of zero. called repeatedly from perl_destruct()
132 until there are no SVs left.
133
93e68bfb 134=head2 Arena allocator API Summary
645c22ef
DM
135
136Private API to rest of sv.c
137
138 new_SV(), del_SV(),
139
140 new_XIV(), del_XIV(),
141 new_XNV(), del_XNV(),
142 etc
143
144Public API:
145
8cf8f3d1 146 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
645c22ef 147
645c22ef
DM
148=cut
149
150============================================================================ */
151
4561caa4
CS
152/*
153 * "A time to plant, and a time to uproot what was planted..."
154 */
155
77354fb4 156void
de37a194 157Perl_offer_nice_chunk(pTHX_ void *const chunk, const U32 chunk_size)
77354fb4 158{
97aff369 159 dVAR;
77354fb4
NC
160 void *new_chunk;
161 U32 new_chunk_size;
7918f24d
NC
162
163 PERL_ARGS_ASSERT_OFFER_NICE_CHUNK;
164
77354fb4
NC
165 new_chunk = (void *)(chunk);
166 new_chunk_size = (chunk_size);
167 if (new_chunk_size > PL_nice_chunk_size) {
168 Safefree(PL_nice_chunk);
169 PL_nice_chunk = (char *) new_chunk;
170 PL_nice_chunk_size = new_chunk_size;
171 } else {
172 Safefree(chunk);
173 }
77354fb4 174}
cac9b346 175
fd0854ff 176#ifdef DEBUG_LEAKING_SCALARS
22162ca8 177# define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
fd0854ff
DM
178#else
179# define FREE_SV_DEBUG_FILE(sv)
180#endif
181
48614a46
NC
182#ifdef PERL_POISON
183# define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
184/* Whilst I'd love to do this, it seems that things like to check on
185 unreferenced scalars
7e337ee0 186# define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
48614a46 187*/
7e337ee0
JH
188# define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
189 PoisonNew(&SvREFCNT(sv), 1, U32)
48614a46
NC
190#else
191# define SvARENA_CHAIN(sv) SvANY(sv)
192# define POSION_SV_HEAD(sv)
193#endif
194
053fc874
GS
195#define plant_SV(p) \
196 STMT_START { \
fd0854ff 197 FREE_SV_DEBUG_FILE(p); \
48614a46
NC
198 POSION_SV_HEAD(p); \
199 SvARENA_CHAIN(p) = (void *)PL_sv_root; \
053fc874
GS
200 SvFLAGS(p) = SVTYPEMASK; \
201 PL_sv_root = (p); \
202 --PL_sv_count; \
203 } STMT_END
a0d0e21e 204
053fc874
GS
205#define uproot_SV(p) \
206 STMT_START { \
207 (p) = PL_sv_root; \
bb7bbd9c 208 PL_sv_root = (SV*)SvARENA_CHAIN(p); \
053fc874
GS
209 ++PL_sv_count; \
210 } STMT_END
211
645c22ef 212
cac9b346
NC
213/* make some more SVs by adding another arena */
214
cac9b346
NC
215STATIC SV*
216S_more_sv(pTHX)
217{
97aff369 218 dVAR;
cac9b346
NC
219 SV* sv;
220
221 if (PL_nice_chunk) {
222 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
bd61b366 223 PL_nice_chunk = NULL;
cac9b346
NC
224 PL_nice_chunk_size = 0;
225 }
226 else {
227 char *chunk; /* must use New here to match call to */
d2a0f284 228 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
2e7ed132 229 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
cac9b346
NC
230 }
231 uproot_SV(sv);
232 return sv;
233}
234
645c22ef
DM
235/* new_SV(): return a new, empty SV head */
236
eba0f806
DM
237#ifdef DEBUG_LEAKING_SCALARS
238/* provide a real function for a debugger to play with */
239STATIC SV*
240S_new_SV(pTHX)
241{
242 SV* sv;
243
eba0f806
DM
244 if (PL_sv_root)
245 uproot_SV(sv);
246 else
cac9b346 247 sv = S_more_sv(aTHX);
eba0f806
DM
248 SvANY(sv) = 0;
249 SvREFCNT(sv) = 1;
250 SvFLAGS(sv) = 0;
fd0854ff 251 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
f24aceb1
DM
252 sv->sv_debug_line = (U16) (PL_parser
253 ? PL_parser->copline == NOLINE
254 ? PL_curcop
255 ? CopLINE(PL_curcop)
256 : 0
257 : PL_parser->copline
258 : 0);
fd0854ff
DM
259 sv->sv_debug_inpad = 0;
260 sv->sv_debug_cloned = 0;
fd0854ff 261 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
fd0854ff 262
eba0f806
DM
263 return sv;
264}
265# define new_SV(p) (p)=S_new_SV(aTHX)
266
267#else
268# define new_SV(p) \
053fc874 269 STMT_START { \
053fc874
GS
270 if (PL_sv_root) \
271 uproot_SV(p); \
272 else \
cac9b346 273 (p) = S_more_sv(aTHX); \
053fc874
GS
274 SvANY(p) = 0; \
275 SvREFCNT(p) = 1; \
276 SvFLAGS(p) = 0; \
277 } STMT_END
eba0f806 278#endif
463ee0b2 279
645c22ef
DM
280
281/* del_SV(): return an empty SV head to the free list */
282
a0d0e21e 283#ifdef DEBUGGING
4561caa4 284
053fc874
GS
285#define del_SV(p) \
286 STMT_START { \
aea4f609 287 if (DEBUG_D_TEST) \
053fc874
GS
288 del_sv(p); \
289 else \
290 plant_SV(p); \
053fc874 291 } STMT_END
a0d0e21e 292
76e3520e 293STATIC void
cea2e8a9 294S_del_sv(pTHX_ SV *p)
463ee0b2 295{
97aff369 296 dVAR;
7918f24d
NC
297
298 PERL_ARGS_ASSERT_DEL_SV;
299
aea4f609 300 if (DEBUG_D_TEST) {
4633a7c4 301 SV* sva;
a3b680e6 302 bool ok = 0;
3280af22 303 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
53c1dcc0
AL
304 const SV * const sv = sva + 1;
305 const SV * const svend = &sva[SvREFCNT(sva)];
c0ff570e 306 if (p >= sv && p < svend) {
a0d0e21e 307 ok = 1;
c0ff570e
NC
308 break;
309 }
a0d0e21e
LW
310 }
311 if (!ok) {
0453d815 312 if (ckWARN_d(WARN_INTERNAL))
9014280d 313 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc
SB
314 "Attempt to free non-arena SV: 0x%"UVxf
315 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
a0d0e21e
LW
316 return;
317 }
318 }
4561caa4 319 plant_SV(p);
463ee0b2 320}
a0d0e21e 321
4561caa4
CS
322#else /* ! DEBUGGING */
323
324#define del_SV(p) plant_SV(p)
325
326#endif /* DEBUGGING */
463ee0b2 327
645c22ef
DM
328
329/*
ccfc67b7
JH
330=head1 SV Manipulation Functions
331
645c22ef
DM
332=for apidoc sv_add_arena
333
334Given a chunk of memory, link it to the head of the list of arenas,
335and split it into a list of free SVs.
336
337=cut
338*/
339
4633a7c4 340void
de37a194 341Perl_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
463ee0b2 342{
97aff369 343 dVAR;
0bd48802 344 SV* const sva = (SV*)ptr;
463ee0b2
LW
345 register SV* sv;
346 register SV* svend;
4633a7c4 347
7918f24d
NC
348 PERL_ARGS_ASSERT_SV_ADD_ARENA;
349
4633a7c4 350 /* The first SV in an arena isn't an SV. */
3280af22 351 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
4633a7c4
LW
352 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
353 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
354
3280af22
NIS
355 PL_sv_arenaroot = sva;
356 PL_sv_root = sva + 1;
4633a7c4
LW
357
358 svend = &sva[SvREFCNT(sva) - 1];
359 sv = sva + 1;
463ee0b2 360 while (sv < svend) {
48614a46 361 SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
03e36789 362#ifdef DEBUGGING
978b032e 363 SvREFCNT(sv) = 0;
03e36789 364#endif
4b69cbe3 365 /* Must always set typemask because it's always checked in on cleanup
03e36789 366 when the arenas are walked looking for objects. */
8990e307 367 SvFLAGS(sv) = SVTYPEMASK;
463ee0b2
LW
368 sv++;
369 }
48614a46 370 SvARENA_CHAIN(sv) = 0;
03e36789
NC
371#ifdef DEBUGGING
372 SvREFCNT(sv) = 0;
373#endif
4633a7c4
LW
374 SvFLAGS(sv) = SVTYPEMASK;
375}
376
055972dc
DM
377/* visit(): call the named function for each non-free SV in the arenas
378 * whose flags field matches the flags/mask args. */
645c22ef 379
5226ed68 380STATIC I32
de37a194 381S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
8990e307 382{
97aff369 383 dVAR;
4633a7c4 384 SV* sva;
5226ed68 385 I32 visited = 0;
8990e307 386
7918f24d
NC
387 PERL_ARGS_ASSERT_VISIT;
388
3280af22 389 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
53c1dcc0 390 register const SV * const svend = &sva[SvREFCNT(sva)];
a3b680e6 391 register SV* sv;
4561caa4 392 for (sv = sva + 1; sv < svend; ++sv) {
055972dc
DM
393 if (SvTYPE(sv) != SVTYPEMASK
394 && (sv->sv_flags & mask) == flags
395 && SvREFCNT(sv))
396 {
acfe0abc 397 (FCALL)(aTHX_ sv);
5226ed68
JH
398 ++visited;
399 }
8990e307
LW
400 }
401 }
5226ed68 402 return visited;
8990e307
LW
403}
404
758a08c3
JH
405#ifdef DEBUGGING
406
645c22ef
DM
407/* called by sv_report_used() for each live SV */
408
409static void
acfe0abc 410do_report_used(pTHX_ SV *sv)
645c22ef
DM
411{
412 if (SvTYPE(sv) != SVTYPEMASK) {
413 PerlIO_printf(Perl_debug_log, "****\n");
414 sv_dump(sv);
415 }
416}
758a08c3 417#endif
645c22ef
DM
418
419/*
420=for apidoc sv_report_used
421
422Dump the contents of all SVs not yet freed. (Debugging aid).
423
424=cut
425*/
426
8990e307 427void
864dbfa3 428Perl_sv_report_used(pTHX)
4561caa4 429{
ff270d3a 430#ifdef DEBUGGING
055972dc 431 visit(do_report_used, 0, 0);
96a5add6
AL
432#else
433 PERL_UNUSED_CONTEXT;
ff270d3a 434#endif
4561caa4
CS
435}
436
645c22ef
DM
437/* called by sv_clean_objs() for each live SV */
438
439static void
de37a194 440do_clean_objs(pTHX_ SV *const ref)
645c22ef 441{
97aff369 442 dVAR;
ea724faa
NC
443 assert (SvROK(ref));
444 {
823a54a3
AL
445 SV * const target = SvRV(ref);
446 if (SvOBJECT(target)) {
447 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
448 if (SvWEAKREF(ref)) {
449 sv_del_backref(target, ref);
450 SvWEAKREF_off(ref);
451 SvRV_set(ref, NULL);
452 } else {
453 SvROK_off(ref);
454 SvRV_set(ref, NULL);
455 SvREFCNT_dec(target);
456 }
645c22ef
DM
457 }
458 }
459
460 /* XXX Might want to check arrays, etc. */
461}
462
463/* called by sv_clean_objs() for each live SV */
464
465#ifndef DISABLE_DESTRUCTOR_KLUDGE
466static void
f30de749 467do_clean_named_objs(pTHX_ SV *const sv)
645c22ef 468{
97aff369 469 dVAR;
ea724faa 470 assert(SvTYPE(sv) == SVt_PVGV);
d011219a
NC
471 assert(isGV_with_GP(sv));
472 if (GvGP(sv)) {
c69033f2
NC
473 if ((
474#ifdef PERL_DONT_CREATE_GVSV
475 GvSV(sv) &&
476#endif
477 SvOBJECT(GvSV(sv))) ||
645c22ef
DM
478 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
479 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9c12f1e5
RGS
480 /* In certain rare cases GvIOp(sv) can be NULL, which would make SvOBJECT(GvIO(sv)) dereference NULL. */
481 (GvIO(sv) ? (SvFLAGS(GvIOp(sv)) & SVs_OBJECT) : 0) ||
645c22ef
DM
482 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
483 {
484 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
ec5f3c78 485 SvFLAGS(sv) |= SVf_BREAK;
645c22ef
DM
486 SvREFCNT_dec(sv);
487 }
488 }
489}
490#endif
491
492/*
493=for apidoc sv_clean_objs
494
495Attempt to destroy all objects not yet freed
496
497=cut
498*/
499
4561caa4 500void
864dbfa3 501Perl_sv_clean_objs(pTHX)
4561caa4 502{
97aff369 503 dVAR;
3280af22 504 PL_in_clean_objs = TRUE;
055972dc 505 visit(do_clean_objs, SVf_ROK, SVf_ROK);
4561caa4 506#ifndef DISABLE_DESTRUCTOR_KLUDGE
2d0f3c12 507 /* some barnacles may yet remain, clinging to typeglobs */
d011219a 508 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
4561caa4 509#endif
3280af22 510 PL_in_clean_objs = FALSE;
4561caa4
CS
511}
512
645c22ef
DM
513/* called by sv_clean_all() for each live SV */
514
515static void
de37a194 516do_clean_all(pTHX_ SV *const sv)
645c22ef 517{
97aff369 518 dVAR;
645c22ef
DM
519 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
520 SvFLAGS(sv) |= SVf_BREAK;
521 SvREFCNT_dec(sv);
522}
523
524/*
525=for apidoc sv_clean_all
526
527Decrement the refcnt of each remaining SV, possibly triggering a
528cleanup. This function may have to be called multiple times to free
ff276b08 529SVs which are in complex self-referential hierarchies.
645c22ef
DM
530
531=cut
532*/
533
5226ed68 534I32
864dbfa3 535Perl_sv_clean_all(pTHX)
8990e307 536{
97aff369 537 dVAR;
5226ed68 538 I32 cleaned;
3280af22 539 PL_in_clean_all = TRUE;
055972dc 540 cleaned = visit(do_clean_all, 0,0);
3280af22 541 PL_in_clean_all = FALSE;
5226ed68 542 return cleaned;
8990e307 543}
463ee0b2 544
5e258f8c
JC
545/*
546 ARENASETS: a meta-arena implementation which separates arena-info
547 into struct arena_set, which contains an array of struct
548 arena_descs, each holding info for a single arena. By separating
549 the meta-info from the arena, we recover the 1st slot, formerly
550 borrowed for list management. The arena_set is about the size of an
39244528 551 arena, avoiding the needless malloc overhead of a naive linked-list.
5e258f8c
JC
552
553 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
554 memory in the last arena-set (1/2 on average). In trade, we get
555 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
d2a0f284 556 smaller types). The recovery of the wasted space allows use of
e15dad31
JC
557 small arenas for large, rare body types, by changing array* fields
558 in body_details_by_type[] below.
5e258f8c 559*/
5e258f8c 560struct arena_desc {
398c677b
NC
561 char *arena; /* the raw storage, allocated aligned */
562 size_t size; /* its size ~4k typ */
0a848332 563 U32 misc; /* type, and in future other things. */
5e258f8c
JC
564};
565
e6148039
NC
566struct arena_set;
567
568/* Get the maximum number of elements in set[] such that struct arena_set
e15dad31 569 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
e6148039
NC
570 therefore likely to be 1 aligned memory page. */
571
572#define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
573 - 2 * sizeof(int)) / sizeof (struct arena_desc))
5e258f8c
JC
574
575struct arena_set {
576 struct arena_set* next;
0a848332
NC
577 unsigned int set_size; /* ie ARENAS_PER_SET */
578 unsigned int curr; /* index of next available arena-desc */
5e258f8c
JC
579 struct arena_desc set[ARENAS_PER_SET];
580};
581
645c22ef
DM
582/*
583=for apidoc sv_free_arenas
584
585Deallocate the memory used by all arenas. Note that all the individual SV
586heads and bodies within the arenas must already have been freed.
587
588=cut
589*/
4633a7c4 590void
864dbfa3 591Perl_sv_free_arenas(pTHX)
4633a7c4 592{
97aff369 593 dVAR;
4633a7c4
LW
594 SV* sva;
595 SV* svanext;
0a848332 596 unsigned int i;
4633a7c4
LW
597
598 /* Free arenas here, but be careful about fake ones. (We assume
599 contiguity of the fake ones with the corresponding real ones.) */
600
3280af22 601 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
4633a7c4
LW
602 svanext = (SV*) SvANY(sva);
603 while (svanext && SvFAKE(svanext))
604 svanext = (SV*) SvANY(svanext);
605
606 if (!SvFAKE(sva))
1df70142 607 Safefree(sva);
4633a7c4 608 }
93e68bfb 609
5e258f8c 610 {
0a848332
NC
611 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
612
613 while (aroot) {
614 struct arena_set *current = aroot;
615 i = aroot->curr;
616 while (i--) {
5e258f8c
JC
617 assert(aroot->set[i].arena);
618 Safefree(aroot->set[i].arena);
619 }
0a848332
NC
620 aroot = aroot->next;
621 Safefree(current);
5e258f8c
JC
622 }
623 }
dc8220bf 624 PL_body_arenas = 0;
fdda85ca 625
0a848332
NC
626 i = PERL_ARENA_ROOTS_SIZE;
627 while (i--)
93e68bfb 628 PL_body_roots[i] = 0;
93e68bfb 629
43c5f42d 630 Safefree(PL_nice_chunk);
bd61b366 631 PL_nice_chunk = NULL;
3280af22
NIS
632 PL_nice_chunk_size = 0;
633 PL_sv_arenaroot = 0;
634 PL_sv_root = 0;
4633a7c4
LW
635}
636
bd81e77b
NC
637/*
638 Here are mid-level routines that manage the allocation of bodies out
639 of the various arenas. There are 5 kinds of arenas:
29489e7c 640
bd81e77b
NC
641 1. SV-head arenas, which are discussed and handled above
642 2. regular body arenas
643 3. arenas for reduced-size bodies
644 4. Hash-Entry arenas
645 5. pte arenas (thread related)
29489e7c 646
bd81e77b
NC
647 Arena types 2 & 3 are chained by body-type off an array of
648 arena-root pointers, which is indexed by svtype. Some of the
649 larger/less used body types are malloced singly, since a large
650 unused block of them is wasteful. Also, several svtypes dont have
651 bodies; the data fits into the sv-head itself. The arena-root
652 pointer thus has a few unused root-pointers (which may be hijacked
653 later for arena types 4,5)
29489e7c 654
bd81e77b
NC
655 3 differs from 2 as an optimization; some body types have several
656 unused fields in the front of the structure (which are kept in-place
657 for consistency). These bodies can be allocated in smaller chunks,
658 because the leading fields arent accessed. Pointers to such bodies
659 are decremented to point at the unused 'ghost' memory, knowing that
660 the pointers are used with offsets to the real memory.
29489e7c 661
bd81e77b
NC
662 HE, HEK arenas are managed separately, with separate code, but may
663 be merge-able later..
664
665 PTE arenas are not sv-bodies, but they share these mid-level
666 mechanics, so are considered here. The new mid-level mechanics rely
667 on the sv_type of the body being allocated, so we just reserve one
668 of the unused body-slots for PTEs, then use it in those (2) PTE
669 contexts below (line ~10k)
670*/
671
bd26d9a3 672/* get_arena(size): this creates custom-sized arenas
5e258f8c
JC
673 TBD: export properly for hv.c: S_more_he().
674*/
675void*
de37a194 676Perl_get_arena(pTHX_ const size_t arena_size, const U32 misc)
5e258f8c 677{
7a89be66 678 dVAR;
5e258f8c 679 struct arena_desc* adesc;
39244528 680 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
0a848332 681 unsigned int curr;
5e258f8c 682
476a1e16
JC
683 /* shouldnt need this
684 if (!arena_size) arena_size = PERL_ARENA_SIZE;
685 */
5e258f8c
JC
686
687 /* may need new arena-set to hold new arena */
39244528
NC
688 if (!aroot || aroot->curr >= aroot->set_size) {
689 struct arena_set *newroot;
5e258f8c
JC
690 Newxz(newroot, 1, struct arena_set);
691 newroot->set_size = ARENAS_PER_SET;
39244528
NC
692 newroot->next = aroot;
693 aroot = newroot;
694 PL_body_arenas = (void *) newroot;
52944de8 695 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
5e258f8c
JC
696 }
697
698 /* ok, now have arena-set with at least 1 empty/available arena-desc */
39244528
NC
699 curr = aroot->curr++;
700 adesc = &(aroot->set[curr]);
5e258f8c
JC
701 assert(!adesc->arena);
702
89086707 703 Newx(adesc->arena, arena_size, char);
5e258f8c 704 adesc->size = arena_size;
0a848332 705 adesc->misc = misc;
d67b3c53
JH
706 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n",
707 curr, (void*)adesc->arena, (UV)arena_size));
5e258f8c
JC
708
709 return adesc->arena;
5e258f8c
JC
710}
711
53c1dcc0 712
bd81e77b 713/* return a thing to the free list */
29489e7c 714
bd81e77b
NC
715#define del_body(thing, root) \
716 STMT_START { \
00b6aa41 717 void ** const thing_copy = (void **)thing;\
bd81e77b
NC
718 *thing_copy = *root; \
719 *root = (void*)thing_copy; \
bd81e77b 720 } STMT_END
29489e7c 721
bd81e77b 722/*
d2a0f284
JC
723
724=head1 SV-Body Allocation
725
726Allocation of SV-bodies is similar to SV-heads, differing as follows;
727the allocation mechanism is used for many body types, so is somewhat
728more complicated, it uses arena-sets, and has no need for still-live
729SV detection.
730
731At the outermost level, (new|del)_X*V macros return bodies of the
732appropriate type. These macros call either (new|del)_body_type or
733(new|del)_body_allocated macro pairs, depending on specifics of the
734type. Most body types use the former pair, the latter pair is used to
735allocate body types with "ghost fields".
736
737"ghost fields" are fields that are unused in certain types, and
738consequently dont need to actually exist. They are declared because
739they're part of a "base type", which allows use of functions as
740methods. The simplest examples are AVs and HVs, 2 aggregate types
741which don't use the fields which support SCALAR semantics.
742
743For these types, the arenas are carved up into *_allocated size
744chunks, we thus avoid wasted memory for those unaccessed members.
745When bodies are allocated, we adjust the pointer back in memory by the
746size of the bit not allocated, so it's as if we allocated the full
747structure. (But things will all go boom if you write to the part that
748is "not there", because you'll be overwriting the last members of the
749preceding structure in memory.)
750
751We calculate the correction using the STRUCT_OFFSET macro. For
752example, if xpv_allocated is the same structure as XPV then the two
753OFFSETs sum to zero, and the pointer is unchanged. If the allocated
754structure is smaller (no initial NV actually allocated) then the net
755effect is to subtract the size of the NV from the pointer, to return a
756new pointer as if an initial NV were actually allocated.
757
758This is the same trick as was used for NV and IV bodies. Ironically it
759doesn't need to be used for NV bodies any more, because NV is now at
760the start of the structure. IV bodies don't need it either, because
761they are no longer allocated.
762
763In turn, the new_body_* allocators call S_new_body(), which invokes
764new_body_inline macro, which takes a lock, and takes a body off the
765linked list at PL_body_roots[sv_type], calling S_more_bodies() if
766necessary to refresh an empty list. Then the lock is released, and
767the body is returned.
768
769S_more_bodies calls get_arena(), and carves it up into an array of N
770bodies, which it strings into a linked list. It looks up arena-size
771and body-size from the body_details table described below, thus
772supporting the multiple body-types.
773
774If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
775the (new|del)_X*V macros are mapped directly to malloc/free.
776
777*/
778
779/*
780
781For each sv-type, struct body_details bodies_by_type[] carries
782parameters which control these aspects of SV handling:
783
784Arena_size determines whether arenas are used for this body type, and if
785so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
786zero, forcing individual mallocs and frees.
787
788Body_size determines how big a body is, and therefore how many fit into
789each arena. Offset carries the body-pointer adjustment needed for
790*_allocated body types, and is used in *_allocated macros.
791
792But its main purpose is to parameterize info needed in
793Perl_sv_upgrade(). The info here dramatically simplifies the function
794vs the implementation in 5.8.7, making it table-driven. All fields
795are used for this, except for arena_size.
796
797For the sv-types that have no bodies, arenas are not used, so those
798PL_body_roots[sv_type] are unused, and can be overloaded. In
799something of a special case, SVt_NULL is borrowed for HE arenas;
c6f8b1d0 800PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
d2a0f284 801bodies_by_type[SVt_NULL] slot is not used, as the table is not
c6f8b1d0 802available in hv.c.
d2a0f284 803
c6f8b1d0
JC
804PTEs also use arenas, but are never seen in Perl_sv_upgrade. Nonetheless,
805they get their own slot in bodies_by_type[PTE_SVSLOT =SVt_IV], so they can
806just use the same allocation semantics. At first, PTEs were also
807overloaded to a non-body sv-type, but this yielded hard-to-find malloc
808bugs, so was simplified by claiming a new slot. This choice has no
809consequence at this time.
d2a0f284 810
29489e7c
DM
811*/
812
bd81e77b 813struct body_details {
0fb58b32 814 U8 body_size; /* Size to allocate */
10666ae3 815 U8 copy; /* Size of structure to copy (may be shorter) */
0fb58b32 816 U8 offset;
10666ae3
NC
817 unsigned int type : 4; /* We have space for a sanity check. */
818 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
819 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
820 unsigned int arena : 1; /* Allocated from an arena */
821 size_t arena_size; /* Size of arena to allocate */
bd81e77b 822};
29489e7c 823
bd81e77b
NC
824#define HADNV FALSE
825#define NONV TRUE
29489e7c 826
d2a0f284 827
bd81e77b
NC
828#ifdef PURIFY
829/* With -DPURFIY we allocate everything directly, and don't use arenas.
830 This seems a rather elegant way to simplify some of the code below. */
831#define HASARENA FALSE
832#else
833#define HASARENA TRUE
834#endif
835#define NOARENA FALSE
29489e7c 836
d2a0f284
JC
837/* Size the arenas to exactly fit a given number of bodies. A count
838 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
839 simplifying the default. If count > 0, the arena is sized to fit
840 only that many bodies, allowing arenas to be used for large, rare
841 bodies (XPVFM, XPVIO) without undue waste. The arena size is
842 limited by PERL_ARENA_SIZE, so we can safely oversize the
843 declarations.
844 */
95db5f15
MB
845#define FIT_ARENA0(body_size) \
846 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
847#define FIT_ARENAn(count,body_size) \
848 ( count * body_size <= PERL_ARENA_SIZE) \
849 ? count * body_size \
850 : FIT_ARENA0 (body_size)
851#define FIT_ARENA(count,body_size) \
852 count \
853 ? FIT_ARENAn (count, body_size) \
854 : FIT_ARENA0 (body_size)
d2a0f284 855
bd81e77b 856/* A macro to work out the offset needed to subtract from a pointer to (say)
29489e7c 857
bd81e77b
NC
858typedef struct {
859 STRLEN xpv_cur;
860 STRLEN xpv_len;
861} xpv_allocated;
29489e7c 862
bd81e77b 863to make its members accessible via a pointer to (say)
29489e7c 864
bd81e77b
NC
865struct xpv {
866 NV xnv_nv;
867 STRLEN xpv_cur;
868 STRLEN xpv_len;
869};
29489e7c 870
bd81e77b 871*/
29489e7c 872
bd81e77b
NC
873#define relative_STRUCT_OFFSET(longer, shorter, member) \
874 (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
29489e7c 875
bd81e77b
NC
876/* Calculate the length to copy. Specifically work out the length less any
877 final padding the compiler needed to add. See the comment in sv_upgrade
878 for why copying the padding proved to be a bug. */
29489e7c 879
bd81e77b
NC
880#define copy_length(type, last_member) \
881 STRUCT_OFFSET(type, last_member) \
882 + sizeof (((type*)SvANY((SV*)0))->last_member)
29489e7c 883
bd81e77b 884static const struct body_details bodies_by_type[] = {
10666ae3
NC
885 { sizeof(HE), 0, 0, SVt_NULL,
886 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
d2a0f284 887
1cb9cd50 888 /* The bind placeholder pretends to be an RV for now.
c6f8b1d0 889 Also it's marked as "can't upgrade" to stop anyone using it before it's
1cb9cd50
NC
890 implemented. */
891 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
892
d2a0f284
JC
893 /* IVs are in the head, so the allocation size is 0.
894 However, the slot is overloaded for PTEs. */
895 { sizeof(struct ptr_tbl_ent), /* This is used for PTEs. */
896 sizeof(IV), /* This is used to copy out the IV body. */
10666ae3 897 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
d2a0f284
JC
898 NOARENA /* IVS don't need an arena */,
899 /* But PTEs need to know the size of their arena */
900 FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
901 },
902
bd81e77b 903 /* 8 bytes on most ILP32 with IEEE doubles */
10666ae3 904 { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
d2a0f284
JC
905 FIT_ARENA(0, sizeof(NV)) },
906
bd81e77b 907 /* 8 bytes on most ILP32 with IEEE doubles */
d2a0f284
JC
908 { sizeof(xpv_allocated),
909 copy_length(XPV, xpv_len)
910 - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
911 + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
10666ae3 912 SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) },
d2a0f284 913
bd81e77b 914 /* 12 */
d2a0f284
JC
915 { sizeof(xpviv_allocated),
916 copy_length(XPVIV, xiv_u)
917 - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
918 + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
10666ae3 919 SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) },
d2a0f284 920
bd81e77b 921 /* 20 */
10666ae3 922 { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
d2a0f284
JC
923 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
924
bd81e77b 925 /* 28 */
10666ae3 926 { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
d2a0f284 927 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
4df7f6af 928
288b8c02 929 /* something big */
08e44740
NC
930 { sizeof(struct regexp_allocated), sizeof(struct regexp_allocated),
931 + relative_STRUCT_OFFSET(struct regexp_allocated, regexp, xpv_cur),
932 SVt_REGEXP, FALSE, NONV, HASARENA,
933 FIT_ARENA(0, sizeof(struct regexp_allocated))
5c35adbb 934 },
4df7f6af 935
bd81e77b 936 /* 48 */
10666ae3 937 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
d2a0f284
JC
938 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
939
bd81e77b 940 /* 64 */
10666ae3 941 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
d2a0f284
JC
942 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
943
944 { sizeof(xpvav_allocated),
945 copy_length(XPVAV, xmg_stash)
946 - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
947 + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
9c59bb28 948 SVt_PVAV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) },
d2a0f284
JC
949
950 { sizeof(xpvhv_allocated),
951 copy_length(XPVHV, xmg_stash)
952 - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
953 + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
9c59bb28 954 SVt_PVHV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) },
d2a0f284 955
c84c4652 956 /* 56 */
4115f141 957 { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated),
c84c4652 958 + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur),
10666ae3 959 SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) },
d2a0f284 960
4115f141 961 { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated),
3038937b 962 + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur),
10666ae3 963 SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) },
d2a0f284
JC
964
965 /* XPVIO is 84 bytes, fits 48x */
167f2c4d
NC
966 { sizeof(xpvio_allocated), sizeof(xpvio_allocated),
967 + relative_STRUCT_OFFSET(xpvio_allocated, XPVIO, xpv_cur),
968 SVt_PVIO, TRUE, NONV, HASARENA, FIT_ARENA(24, sizeof(xpvio_allocated)) },
bd81e77b 969};
29489e7c 970
d2a0f284
JC
971#define new_body_type(sv_type) \
972 (void *)((char *)S_new_body(aTHX_ sv_type))
29489e7c 973
bd81e77b
NC
974#define del_body_type(p, sv_type) \
975 del_body(p, &PL_body_roots[sv_type])
29489e7c 976
29489e7c 977
bd81e77b 978#define new_body_allocated(sv_type) \
d2a0f284 979 (void *)((char *)S_new_body(aTHX_ sv_type) \
bd81e77b 980 - bodies_by_type[sv_type].offset)
29489e7c 981
bd81e77b
NC
982#define del_body_allocated(p, sv_type) \
983 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
29489e7c 984
29489e7c 985
bd81e77b
NC
986#define my_safemalloc(s) (void*)safemalloc(s)
987#define my_safecalloc(s) (void*)safecalloc(s, 1)
988#define my_safefree(p) safefree((char*)p)
29489e7c 989
bd81e77b 990#ifdef PURIFY
29489e7c 991
bd81e77b
NC
992#define new_XNV() my_safemalloc(sizeof(XPVNV))
993#define del_XNV(p) my_safefree(p)
29489e7c 994
bd81e77b
NC
995#define new_XPVNV() my_safemalloc(sizeof(XPVNV))
996#define del_XPVNV(p) my_safefree(p)
29489e7c 997
bd81e77b
NC
998#define new_XPVAV() my_safemalloc(sizeof(XPVAV))
999#define del_XPVAV(p) my_safefree(p)
29489e7c 1000
bd81e77b
NC
1001#define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1002#define del_XPVHV(p) my_safefree(p)
29489e7c 1003
bd81e77b
NC
1004#define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1005#define del_XPVMG(p) my_safefree(p)
29489e7c 1006
bd81e77b
NC
1007#define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1008#define del_XPVGV(p) my_safefree(p)
29489e7c 1009
bd81e77b 1010#else /* !PURIFY */
29489e7c 1011
bd81e77b
NC
1012#define new_XNV() new_body_type(SVt_NV)
1013#define del_XNV(p) del_body_type(p, SVt_NV)
29489e7c 1014
bd81e77b
NC
1015#define new_XPVNV() new_body_type(SVt_PVNV)
1016#define del_XPVNV(p) del_body_type(p, SVt_PVNV)
29489e7c 1017
bd81e77b
NC
1018#define new_XPVAV() new_body_allocated(SVt_PVAV)
1019#define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
645c22ef 1020
bd81e77b
NC
1021#define new_XPVHV() new_body_allocated(SVt_PVHV)
1022#define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
645c22ef 1023
bd81e77b
NC
1024#define new_XPVMG() new_body_type(SVt_PVMG)
1025#define del_XPVMG(p) del_body_type(p, SVt_PVMG)
645c22ef 1026
bd81e77b
NC
1027#define new_XPVGV() new_body_type(SVt_PVGV)
1028#define del_XPVGV(p) del_body_type(p, SVt_PVGV)
1d7c1841 1029
bd81e77b 1030#endif /* PURIFY */
93e68bfb 1031
bd81e77b 1032/* no arena for you! */
93e68bfb 1033
bd81e77b 1034#define new_NOARENA(details) \
d2a0f284 1035 my_safemalloc((details)->body_size + (details)->offset)
bd81e77b 1036#define new_NOARENAZ(details) \
d2a0f284
JC
1037 my_safecalloc((details)->body_size + (details)->offset)
1038
1039STATIC void *
de37a194 1040S_more_bodies (pTHX_ const svtype sv_type)
d2a0f284
JC
1041{
1042 dVAR;
1043 void ** const root = &PL_body_roots[sv_type];
96a5add6 1044 const struct body_details * const bdp = &bodies_by_type[sv_type];
d2a0f284
JC
1045 const size_t body_size = bdp->body_size;
1046 char *start;
1047 const char *end;
0b2d3faa 1048#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
23e9d66c
NC
1049 static bool done_sanity_check;
1050
0b2d3faa
JH
1051 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1052 * variables like done_sanity_check. */
10666ae3 1053 if (!done_sanity_check) {
ea471437 1054 unsigned int i = SVt_LAST;
10666ae3
NC
1055
1056 done_sanity_check = TRUE;
1057
1058 while (i--)
1059 assert (bodies_by_type[i].type == i);
1060 }
1061#endif
1062
23e9d66c
NC
1063 assert(bdp->arena_size);
1064
0a848332 1065 start = (char*) Perl_get_arena(aTHX_ bdp->arena_size, sv_type);
d2a0f284
JC
1066
1067 end = start + bdp->arena_size - body_size;
1068
d2a0f284
JC
1069 /* computed count doesnt reflect the 1st slot reservation */
1070 DEBUG_m(PerlIO_printf(Perl_debug_log,
1071 "arena %p end %p arena-size %d type %d size %d ct %d\n",
6c9570dc 1072 (void*)start, (void*)end,
0e84aef4
JH
1073 (int)bdp->arena_size, sv_type, (int)body_size,
1074 (int)bdp->arena_size / (int)body_size));
d2a0f284
JC
1075
1076 *root = (void *)start;
1077
1078 while (start < end) {
1079 char * const next = start + body_size;
1080 *(void**) start = (void *)next;
1081 start = next;
1082 }
1083 *(void **)start = 0;
1084
1085 return *root;
1086}
1087
1088/* grab a new thing from the free list, allocating more if necessary.
1089 The inline version is used for speed in hot routines, and the
1090 function using it serves the rest (unless PURIFY).
1091*/
1092#define new_body_inline(xpv, sv_type) \
1093 STMT_START { \
1094 void ** const r3wt = &PL_body_roots[sv_type]; \
11b79775
DD
1095 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1096 ? *((void **)(r3wt)) : more_bodies(sv_type)); \
d2a0f284 1097 *(r3wt) = *(void**)(xpv); \
d2a0f284
JC
1098 } STMT_END
1099
1100#ifndef PURIFY
1101
1102STATIC void *
de37a194 1103S_new_body(pTHX_ const svtype sv_type)
d2a0f284
JC
1104{
1105 dVAR;
1106 void *xpv;
1107 new_body_inline(xpv, sv_type);
1108 return xpv;
1109}
1110
1111#endif
93e68bfb 1112
238b27b3
NC
1113static const struct body_details fake_rv =
1114 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1115
bd81e77b
NC
1116/*
1117=for apidoc sv_upgrade
93e68bfb 1118
bd81e77b
NC
1119Upgrade an SV to a more complex form. Generally adds a new body type to the
1120SV, then copies across as much information as possible from the old body.
1121You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
93e68bfb 1122
bd81e77b 1123=cut
93e68bfb 1124*/
93e68bfb 1125
bd81e77b 1126void
aad570aa 1127Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
cac9b346 1128{
97aff369 1129 dVAR;
bd81e77b
NC
1130 void* old_body;
1131 void* new_body;
42d0e0b7 1132 const svtype old_type = SvTYPE(sv);
d2a0f284 1133 const struct body_details *new_type_details;
238b27b3 1134 const struct body_details *old_type_details
bd81e77b 1135 = bodies_by_type + old_type;
4df7f6af 1136 SV *referant = NULL;
cac9b346 1137
7918f24d
NC
1138 PERL_ARGS_ASSERT_SV_UPGRADE;
1139
bd81e77b
NC
1140 if (new_type != SVt_PV && SvIsCOW(sv)) {
1141 sv_force_normal_flags(sv, 0);
1142 }
cac9b346 1143
bd81e77b
NC
1144 if (old_type == new_type)
1145 return;
cac9b346 1146
bd81e77b 1147 old_body = SvANY(sv);
de042e1d 1148
bd81e77b
NC
1149 /* Copying structures onto other structures that have been neatly zeroed
1150 has a subtle gotcha. Consider XPVMG
cac9b346 1151
bd81e77b
NC
1152 +------+------+------+------+------+-------+-------+
1153 | NV | CUR | LEN | IV | MAGIC | STASH |
1154 +------+------+------+------+------+-------+-------+
1155 0 4 8 12 16 20 24 28
645c22ef 1156
bd81e77b
NC
1157 where NVs are aligned to 8 bytes, so that sizeof that structure is
1158 actually 32 bytes long, with 4 bytes of padding at the end:
08742458 1159
bd81e77b
NC
1160 +------+------+------+------+------+-------+-------+------+
1161 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1162 +------+------+------+------+------+-------+-------+------+
1163 0 4 8 12 16 20 24 28 32
08742458 1164
bd81e77b 1165 so what happens if you allocate memory for this structure:
30f9da9e 1166
bd81e77b
NC
1167 +------+------+------+------+------+-------+-------+------+------+...
1168 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1169 +------+------+------+------+------+-------+-------+------+------+...
1170 0 4 8 12 16 20 24 28 32 36
bfc44f79 1171
bd81e77b
NC
1172 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1173 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1174 started out as zero once, but it's quite possible that it isn't. So now,
1175 rather than a nicely zeroed GP, you have it pointing somewhere random.
1176 Bugs ensue.
bfc44f79 1177
bd81e77b
NC
1178 (In fact, GP ends up pointing at a previous GP structure, because the
1179 principle cause of the padding in XPVMG getting garbage is a copy of
6c9e42f7
NC
1180 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1181 this happens to be moot because XPVGV has been re-ordered, with GP
1182 no longer after STASH)
30f9da9e 1183
bd81e77b
NC
1184 So we are careful and work out the size of used parts of all the
1185 structures. */
bfc44f79 1186
bd81e77b
NC
1187 switch (old_type) {
1188 case SVt_NULL:
1189 break;
1190 case SVt_IV:
4df7f6af
NC
1191 if (SvROK(sv)) {
1192 referant = SvRV(sv);
238b27b3
NC
1193 old_type_details = &fake_rv;
1194 if (new_type == SVt_NV)
1195 new_type = SVt_PVNV;
4df7f6af
NC
1196 } else {
1197 if (new_type < SVt_PVIV) {
1198 new_type = (new_type == SVt_NV)
1199 ? SVt_PVNV : SVt_PVIV;
1200 }
bd81e77b
NC
1201 }
1202 break;
1203 case SVt_NV:
1204 if (new_type < SVt_PVNV) {
1205 new_type = SVt_PVNV;
bd81e77b
NC
1206 }
1207 break;
bd81e77b
NC
1208 case SVt_PV:
1209 assert(new_type > SVt_PV);
1210 assert(SVt_IV < SVt_PV);
1211 assert(SVt_NV < SVt_PV);
1212 break;
1213 case SVt_PVIV:
1214 break;
1215 case SVt_PVNV:
1216 break;
1217 case SVt_PVMG:
1218 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1219 there's no way that it can be safely upgraded, because perl.c
1220 expects to Safefree(SvANY(PL_mess_sv)) */
1221 assert(sv != PL_mess_sv);
1222 /* This flag bit is used to mean other things in other scalar types.
1223 Given that it only has meaning inside the pad, it shouldn't be set
1224 on anything that can get upgraded. */
00b1698f 1225 assert(!SvPAD_TYPED(sv));
bd81e77b
NC
1226 break;
1227 default:
1228 if (old_type_details->cant_upgrade)
c81225bc
NC
1229 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1230 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
bd81e77b 1231 }
3376de98
NC
1232
1233 if (old_type > new_type)
1234 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1235 (int)old_type, (int)new_type);
1236
2fa1109b 1237 new_type_details = bodies_by_type + new_type;
645c22ef 1238
bd81e77b
NC
1239 SvFLAGS(sv) &= ~SVTYPEMASK;
1240 SvFLAGS(sv) |= new_type;
932e9ff9 1241
ab4416c0
NC
1242 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1243 the return statements above will have triggered. */
1244 assert (new_type != SVt_NULL);
bd81e77b 1245 switch (new_type) {
bd81e77b
NC
1246 case SVt_IV:
1247 assert(old_type == SVt_NULL);
1248 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1249 SvIV_set(sv, 0);
1250 return;
1251 case SVt_NV:
1252 assert(old_type == SVt_NULL);
1253 SvANY(sv) = new_XNV();
1254 SvNV_set(sv, 0);
1255 return;
bd81e77b 1256 case SVt_PVHV:
bd81e77b 1257 case SVt_PVAV:
d2a0f284 1258 assert(new_type_details->body_size);
c1ae03ae
NC
1259
1260#ifndef PURIFY
1261 assert(new_type_details->arena);
d2a0f284 1262 assert(new_type_details->arena_size);
c1ae03ae 1263 /* This points to the start of the allocated area. */
d2a0f284
JC
1264 new_body_inline(new_body, new_type);
1265 Zero(new_body, new_type_details->body_size, char);
c1ae03ae
NC
1266 new_body = ((char *)new_body) - new_type_details->offset;
1267#else
1268 /* We always allocated the full length item with PURIFY. To do this
1269 we fake things so that arena is false for all 16 types.. */
1270 new_body = new_NOARENAZ(new_type_details);
1271#endif
1272 SvANY(sv) = new_body;
1273 if (new_type == SVt_PVAV) {
1274 AvMAX(sv) = -1;
1275 AvFILLp(sv) = -1;
1276 AvREAL_only(sv);
64484faa 1277 if (old_type_details->body_size) {
ac572bf4
NC
1278 AvALLOC(sv) = 0;
1279 } else {
1280 /* It will have been zeroed when the new body was allocated.
1281 Lets not write to it, in case it confuses a write-back
1282 cache. */
1283 }
78ac7dd9
NC
1284 } else {
1285 assert(!SvOK(sv));
1286 SvOK_off(sv);
1287#ifndef NODEFAULT_SHAREKEYS
1288 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1289#endif
1290 HvMAX(sv) = 7; /* (start with 8 buckets) */
64484faa 1291 if (old_type_details->body_size) {
78ac7dd9
NC
1292 HvFILL(sv) = 0;
1293 } else {
1294 /* It will have been zeroed when the new body was allocated.
1295 Lets not write to it, in case it confuses a write-back
1296 cache. */
1297 }
c1ae03ae 1298 }
aeb18a1e 1299
bd81e77b
NC
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 */
4df7f6af
NC
1304 if (old_type == SVt_IV) {
1305 assert(!SvROK(sv));
1306 } else if (old_type >= SVt_PV) {
bd81e77b
NC
1307 assert(SvPVX_const(sv) == 0);
1308 }
aeb18a1e 1309
bd81e77b 1310 if (old_type >= SVt_PVMG) {
e736a858 1311 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
bd81e77b 1312 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
797c7171
NC
1313 } else {
1314 sv->sv_u.svu_array = NULL; /* or svu_hash */
bd81e77b
NC
1315 }
1316 break;
93e68bfb 1317
93e68bfb 1318
bd81e77b
NC
1319 case SVt_PVIV:
1320 /* XXX Is this still needed? Was it ever needed? Surely as there is
1321 no route from NV to PVIV, NOK can never be true */
1322 assert(!SvNOKp(sv));
1323 assert(!SvNOK(sv));
1324 case SVt_PVIO:
1325 case SVt_PVFM:
bd81e77b
NC
1326 case SVt_PVGV:
1327 case SVt_PVCV:
1328 case SVt_PVLV:
5c35adbb 1329 case SVt_REGEXP:
bd81e77b
NC
1330 case SVt_PVMG:
1331 case SVt_PVNV:
1332 case SVt_PV:
93e68bfb 1333
d2a0f284 1334 assert(new_type_details->body_size);
bd81e77b
NC
1335 /* We always allocated the full length item with PURIFY. To do this
1336 we fake things so that arena is false for all 16 types.. */
1337 if(new_type_details->arena) {
1338 /* This points to the start of the allocated area. */
d2a0f284
JC
1339 new_body_inline(new_body, new_type);
1340 Zero(new_body, new_type_details->body_size, char);
bd81e77b
NC
1341 new_body = ((char *)new_body) - new_type_details->offset;
1342 } else {
1343 new_body = new_NOARENAZ(new_type_details);
1344 }
1345 SvANY(sv) = new_body;
5e2fc214 1346
bd81e77b 1347 if (old_type_details->copy) {
f9ba3d20
NC
1348 /* There is now the potential for an upgrade from something without
1349 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1350 int offset = old_type_details->offset;
1351 int length = old_type_details->copy;
1352
1353 if (new_type_details->offset > old_type_details->offset) {
d4c19fe8 1354 const int difference
f9ba3d20
NC
1355 = new_type_details->offset - old_type_details->offset;
1356 offset += difference;
1357 length -= difference;
1358 }
1359 assert (length >= 0);
1360
1361 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1362 char);
bd81e77b
NC
1363 }
1364
1365#ifndef NV_ZERO_IS_ALLBITS_ZERO
f2524eef 1366 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
e5ce394c
NC
1367 * correct 0.0 for us. Otherwise, if the old body didn't have an
1368 * NV slot, but the new one does, then we need to initialise the
1369 * freshly created NV slot with whatever the correct bit pattern is
1370 * for 0.0 */
e22a937e
NC
1371 if (old_type_details->zero_nv && !new_type_details->zero_nv
1372 && !isGV_with_GP(sv))
bd81e77b 1373 SvNV_set(sv, 0);
82048762 1374#endif
5e2fc214 1375
bd81e77b 1376 if (new_type == SVt_PVIO)
f2524eef 1377 IoPAGE_LEN(sv) = 60;
4df7f6af
NC
1378 if (old_type < SVt_PV) {
1379 /* referant will be NULL unless the old type was SVt_IV emulating
1380 SVt_RV */
1381 sv->sv_u.svu_rv = referant;
1382 }
bd81e77b
NC
1383 break;
1384 default:
afd78fd5
JH
1385 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1386 (unsigned long)new_type);
bd81e77b 1387 }
73171d91 1388
d2a0f284
JC
1389 if (old_type_details->arena) {
1390 /* If there was an old body, then we need to free it.
1391 Note that there is an assumption that all bodies of types that
1392 can be upgraded came from arenas. Only the more complex non-
1393 upgradable types are allowed to be directly malloc()ed. */
bd81e77b
NC
1394#ifdef PURIFY
1395 my_safefree(old_body);
1396#else
1397 del_body((void*)((char*)old_body + old_type_details->offset),
1398 &PL_body_roots[old_type]);
1399#endif
1400 }
1401}
73171d91 1402
bd81e77b
NC
1403/*
1404=for apidoc sv_backoff
73171d91 1405
bd81e77b
NC
1406Remove any string offset. You should normally use the C<SvOOK_off> macro
1407wrapper instead.
73171d91 1408
bd81e77b 1409=cut
73171d91
NC
1410*/
1411
bd81e77b 1412int
aad570aa 1413Perl_sv_backoff(pTHX_ register SV *const sv)
bd81e77b 1414{
69240efd 1415 STRLEN delta;
7a4bba22 1416 const char * const s = SvPVX_const(sv);
7918f24d
NC
1417
1418 PERL_ARGS_ASSERT_SV_BACKOFF;
96a5add6 1419 PERL_UNUSED_CONTEXT;
7918f24d 1420
bd81e77b
NC
1421 assert(SvOOK(sv));
1422 assert(SvTYPE(sv) != SVt_PVHV);
1423 assert(SvTYPE(sv) != SVt_PVAV);
7a4bba22 1424
69240efd
NC
1425 SvOOK_offset(sv, delta);
1426
7a4bba22
NC
1427 SvLEN_set(sv, SvLEN(sv) + delta);
1428 SvPV_set(sv, SvPVX(sv) - delta);
1429 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
bd81e77b
NC
1430 SvFLAGS(sv) &= ~SVf_OOK;
1431 return 0;
1432}
73171d91 1433
bd81e77b
NC
1434/*
1435=for apidoc sv_grow
73171d91 1436
bd81e77b
NC
1437Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1438upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1439Use the C<SvGROW> wrapper instead.
93e68bfb 1440
bd81e77b
NC
1441=cut
1442*/
93e68bfb 1443
bd81e77b 1444char *
aad570aa 1445Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
bd81e77b
NC
1446{
1447 register char *s;
93e68bfb 1448
7918f24d
NC
1449 PERL_ARGS_ASSERT_SV_GROW;
1450
5db06880
NC
1451 if (PL_madskills && newlen >= 0x100000) {
1452 PerlIO_printf(Perl_debug_log,
1453 "Allocation too large: %"UVxf"\n", (UV)newlen);
1454 }
bd81e77b
NC
1455#ifdef HAS_64K_LIMIT
1456 if (newlen >= 0x10000) {
1457 PerlIO_printf(Perl_debug_log,
1458 "Allocation too large: %"UVxf"\n", (UV)newlen);
1459 my_exit(1);
1460 }
1461#endif /* HAS_64K_LIMIT */
1462 if (SvROK(sv))
1463 sv_unref(sv);
1464 if (SvTYPE(sv) < SVt_PV) {
1465 sv_upgrade(sv, SVt_PV);
1466 s = SvPVX_mutable(sv);
1467 }
1468 else if (SvOOK(sv)) { /* pv is offset? */
1469 sv_backoff(sv);
1470 s = SvPVX_mutable(sv);
1471 if (newlen > SvLEN(sv))
1472 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1473#ifdef HAS_64K_LIMIT
1474 if (newlen >= 0x10000)
1475 newlen = 0xFFFF;
1476#endif
1477 }
1478 else
1479 s = SvPVX_mutable(sv);
aeb18a1e 1480
bd81e77b 1481 if (newlen > SvLEN(sv)) { /* need more room? */
98653f18 1482#ifndef MYMALLOC
bd81e77b 1483 newlen = PERL_STRLEN_ROUNDUP(newlen);
bd81e77b 1484#endif
98653f18 1485 if (SvLEN(sv) && s) {
10edeb5d 1486 s = (char*)saferealloc(s, newlen);
bd81e77b
NC
1487 }
1488 else {
10edeb5d 1489 s = (char*)safemalloc(newlen);
bd81e77b
NC
1490 if (SvPVX_const(sv) && SvCUR(sv)) {
1491 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1492 }
1493 }
1494 SvPV_set(sv, s);
98653f18
NC
1495#ifdef MYMALLOC
1496 /* Do this here, do it once, do it right, and then we will never get
1497 called back into sv_grow() unless there really is some growing
1498 needed. */
1499 SvLEN_set(sv, malloced_size(s));
1500#else
bd81e77b 1501 SvLEN_set(sv, newlen);
98653f18 1502#endif
bd81e77b
NC
1503 }
1504 return s;
1505}
aeb18a1e 1506
bd81e77b
NC
1507/*
1508=for apidoc sv_setiv
932e9ff9 1509
bd81e77b
NC
1510Copies an integer into the given SV, upgrading first if necessary.
1511Does not handle 'set' magic. See also C<sv_setiv_mg>.
463ee0b2 1512
bd81e77b
NC
1513=cut
1514*/
463ee0b2 1515
bd81e77b 1516void
aad570aa 1517Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
bd81e77b 1518{
97aff369 1519 dVAR;
7918f24d
NC
1520
1521 PERL_ARGS_ASSERT_SV_SETIV;
1522
bd81e77b
NC
1523 SV_CHECK_THINKFIRST_COW_DROP(sv);
1524 switch (SvTYPE(sv)) {
1525 case SVt_NULL:
bd81e77b 1526 case SVt_NV:
3376de98 1527 sv_upgrade(sv, SVt_IV);
bd81e77b 1528 break;
bd81e77b
NC
1529 case SVt_PV:
1530 sv_upgrade(sv, SVt_PVIV);
1531 break;
463ee0b2 1532
bd81e77b
NC
1533 case SVt_PVGV:
1534 case SVt_PVAV:
1535 case SVt_PVHV:
1536 case SVt_PVCV:
1537 case SVt_PVFM:
1538 case SVt_PVIO:
1539 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1540 OP_DESC(PL_op));
42d0e0b7 1541 default: NOOP;
bd81e77b
NC
1542 }
1543 (void)SvIOK_only(sv); /* validate number */
1544 SvIV_set(sv, i);
1545 SvTAINT(sv);
1546}
932e9ff9 1547
bd81e77b
NC
1548/*
1549=for apidoc sv_setiv_mg
d33b2eba 1550
bd81e77b 1551Like C<sv_setiv>, but also handles 'set' magic.
1c846c1f 1552
bd81e77b
NC
1553=cut
1554*/
d33b2eba 1555
bd81e77b 1556void
aad570aa 1557Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
bd81e77b 1558{
7918f24d
NC
1559 PERL_ARGS_ASSERT_SV_SETIV_MG;
1560
bd81e77b
NC
1561 sv_setiv(sv,i);
1562 SvSETMAGIC(sv);
1563}
727879eb 1564
bd81e77b
NC
1565/*
1566=for apidoc sv_setuv
d33b2eba 1567
bd81e77b
NC
1568Copies an unsigned integer into the given SV, upgrading first if necessary.
1569Does not handle 'set' magic. See also C<sv_setuv_mg>.
9b94d1dd 1570
bd81e77b
NC
1571=cut
1572*/
d33b2eba 1573
bd81e77b 1574void
aad570aa 1575Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
bd81e77b 1576{
7918f24d
NC
1577 PERL_ARGS_ASSERT_SV_SETUV;
1578
bd81e77b
NC
1579 /* With these two if statements:
1580 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
d33b2eba 1581
bd81e77b
NC
1582 without
1583 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1c846c1f 1584
bd81e77b
NC
1585 If you wish to remove them, please benchmark to see what the effect is
1586 */
1587 if (u <= (UV)IV_MAX) {
1588 sv_setiv(sv, (IV)u);
1589 return;
1590 }
1591 sv_setiv(sv, 0);
1592 SvIsUV_on(sv);
1593 SvUV_set(sv, u);
1594}
d33b2eba 1595
bd81e77b
NC
1596/*
1597=for apidoc sv_setuv_mg
727879eb 1598
bd81e77b 1599Like C<sv_setuv>, but also handles 'set' magic.
9b94d1dd 1600
bd81e77b
NC
1601=cut
1602*/
5e2fc214 1603
bd81e77b 1604void
aad570aa 1605Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
bd81e77b 1606{
7918f24d
NC
1607 PERL_ARGS_ASSERT_SV_SETUV_MG;
1608
bd81e77b
NC
1609 sv_setuv(sv,u);
1610 SvSETMAGIC(sv);
1611}
5e2fc214 1612
954c1994 1613/*
bd81e77b 1614=for apidoc sv_setnv
954c1994 1615
bd81e77b
NC
1616Copies a double into the given SV, upgrading first if necessary.
1617Does not handle 'set' magic. See also C<sv_setnv_mg>.
954c1994
GS
1618
1619=cut
1620*/
1621
63f97190 1622void
aad570aa 1623Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
79072805 1624{
97aff369 1625 dVAR;
7918f24d
NC
1626
1627 PERL_ARGS_ASSERT_SV_SETNV;
1628
bd81e77b
NC
1629 SV_CHECK_THINKFIRST_COW_DROP(sv);
1630 switch (SvTYPE(sv)) {
79072805 1631 case SVt_NULL:
79072805 1632 case SVt_IV:
bd81e77b 1633 sv_upgrade(sv, SVt_NV);
79072805
LW
1634 break;
1635 case SVt_PV:
79072805 1636 case SVt_PVIV:
bd81e77b 1637 sv_upgrade(sv, SVt_PVNV);
79072805 1638 break;
bd4b1eb5 1639
bd4b1eb5 1640 case SVt_PVGV:
bd81e77b
NC
1641 case SVt_PVAV:
1642 case SVt_PVHV:
79072805 1643 case SVt_PVCV:
bd81e77b
NC
1644 case SVt_PVFM:
1645 case SVt_PVIO:
1646 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1647 OP_NAME(PL_op));
42d0e0b7 1648 default: NOOP;
2068cd4d 1649 }
bd81e77b
NC
1650 SvNV_set(sv, num);
1651 (void)SvNOK_only(sv); /* validate number */
1652 SvTAINT(sv);
79072805
LW
1653}
1654
645c22ef 1655/*
bd81e77b 1656=for apidoc sv_setnv_mg
645c22ef 1657
bd81e77b 1658Like C<sv_setnv>, but also handles 'set' magic.
645c22ef
DM
1659
1660=cut
1661*/
1662
bd81e77b 1663void
aad570aa 1664Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
79072805 1665{
7918f24d
NC
1666 PERL_ARGS_ASSERT_SV_SETNV_MG;
1667
bd81e77b
NC
1668 sv_setnv(sv,num);
1669 SvSETMAGIC(sv);
79072805
LW
1670}
1671
bd81e77b
NC
1672/* Print an "isn't numeric" warning, using a cleaned-up,
1673 * printable version of the offending string
1674 */
954c1994 1675
bd81e77b 1676STATIC void
aad570aa 1677S_not_a_number(pTHX_ SV *const sv)
79072805 1678{
97aff369 1679 dVAR;
bd81e77b
NC
1680 SV *dsv;
1681 char tmpbuf[64];
1682 const char *pv;
94463019 1683
7918f24d
NC
1684 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1685
94463019 1686 if (DO_UTF8(sv)) {
84bafc02 1687 dsv = newSVpvs_flags("", SVs_TEMP);
94463019
JH
1688 pv = sv_uni_display(dsv, sv, 10, 0);
1689 } else {
1690 char *d = tmpbuf;
551405c4 1691 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
94463019
JH
1692 /* each *s can expand to 4 chars + "...\0",
1693 i.e. need room for 8 chars */
ecdeb87c 1694
00b6aa41
AL
1695 const char *s = SvPVX_const(sv);
1696 const char * const end = s + SvCUR(sv);
1697 for ( ; s < end && d < limit; s++ ) {
94463019
JH
1698 int ch = *s & 0xFF;
1699 if (ch & 128 && !isPRINT_LC(ch)) {
1700 *d++ = 'M';
1701 *d++ = '-';
1702 ch &= 127;
1703 }
1704 if (ch == '\n') {
1705 *d++ = '\\';
1706 *d++ = 'n';
1707 }
1708 else if (ch == '\r') {
1709 *d++ = '\\';
1710 *d++ = 'r';
1711 }
1712 else if (ch == '\f') {
1713 *d++ = '\\';
1714 *d++ = 'f';
1715 }
1716 else if (ch == '\\') {
1717 *d++ = '\\';
1718 *d++ = '\\';
1719 }
1720 else if (ch == '\0') {
1721 *d++ = '\\';
1722 *d++ = '0';
1723 }
1724 else if (isPRINT_LC(ch))
1725 *d++ = ch;
1726 else {
1727 *d++ = '^';
1728 *d++ = toCTRL(ch);
1729 }
1730 }
1731 if (s < end) {
1732 *d++ = '.';
1733 *d++ = '.';
1734 *d++ = '.';
1735 }
1736 *d = '\0';
1737 pv = tmpbuf;
a0d0e21e 1738 }
a0d0e21e 1739
533c011a 1740 if (PL_op)
9014280d 1741 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019
JH
1742 "Argument \"%s\" isn't numeric in %s", pv,
1743 OP_DESC(PL_op));
a0d0e21e 1744 else
9014280d 1745 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019 1746 "Argument \"%s\" isn't numeric", pv);
a0d0e21e
LW
1747}
1748
c2988b20
NC
1749/*
1750=for apidoc looks_like_number
1751
645c22ef
DM
1752Test if the content of an SV looks like a number (or is a number).
1753C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1754non-numeric warning), even if your atof() doesn't grok them.
c2988b20
NC
1755
1756=cut
1757*/
1758
1759I32
aad570aa 1760Perl_looks_like_number(pTHX_ SV *const sv)
c2988b20 1761{
a3b680e6 1762 register const char *sbegin;
c2988b20
NC
1763 STRLEN len;
1764
7918f24d
NC
1765 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1766
c2988b20 1767 if (SvPOK(sv)) {
3f7c398e 1768 sbegin = SvPVX_const(sv);
c2988b20
NC
1769 len = SvCUR(sv);
1770 }
1771 else if (SvPOKp(sv))
83003860 1772 sbegin = SvPV_const(sv, len);
c2988b20 1773 else
e0ab1c0e 1774 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
c2988b20
NC
1775 return grok_number(sbegin, len, NULL);
1776}
25da4f38 1777
19f6321d
NC
1778STATIC bool
1779S_glob_2number(pTHX_ GV * const gv)
180488f8
NC
1780{
1781 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1782 SV *const buffer = sv_newmortal();
1783
7918f24d
NC
1784 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1785
180488f8
NC
1786 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1787 is on. */
1788 SvFAKE_off(gv);
1789 gv_efullname3(buffer, gv, "*");
1790 SvFLAGS(gv) |= wasfake;
1791
675c862f
AL
1792 /* We know that all GVs stringify to something that is not-a-number,
1793 so no need to test that. */
1794 if (ckWARN(WARN_NUMERIC))
1795 not_a_number(buffer);
1796 /* We just want something true to return, so that S_sv_2iuv_common
1797 can tail call us and return true. */
19f6321d 1798 return TRUE;
675c862f
AL
1799}
1800
1801STATIC char *
19f6321d 1802S_glob_2pv(pTHX_ GV * const gv, STRLEN * const len)
675c862f
AL
1803{
1804 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1805 SV *const buffer = sv_newmortal();
1806
7918f24d
NC
1807 PERL_ARGS_ASSERT_GLOB_2PV;
1808
675c862f
AL
1809 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1810 is on. */
1811 SvFAKE_off(gv);
1812 gv_efullname3(buffer, gv, "*");
1813 SvFLAGS(gv) |= wasfake;
1814
1815 assert(SvPOK(buffer));
a6d61a6c
NC
1816 if (len) {
1817 *len = SvCUR(buffer);
1818 }
675c862f 1819 return SvPVX(buffer);
180488f8
NC
1820}
1821
25da4f38
IZ
1822/* Actually, ISO C leaves conversion of UV to IV undefined, but
1823 until proven guilty, assume that things are not that bad... */
1824
645c22ef
DM
1825/*
1826 NV_PRESERVES_UV:
1827
1828 As 64 bit platforms often have an NV that doesn't preserve all bits of
28e5dec8
JH
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
645c22ef 1833 precision as a side effect of conversion (which would lead to insanity
28e5dec8
JH
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
645c22ef 1838 2) to ensure that if a numeric conversion to one form is requested that
28e5dec8
JH
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
645c22ef 1853 while converting from PV to NV, check to see if converting that NV to an
28e5dec8
JH
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
645c22ef 1858 While converting from PV to IV, check to see if converting that IV to an
28e5dec8
JH
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.
645c22ef
DM
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:
28e5dec8 1866 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
d460ef45 1867
645c22ef
DM
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
28e5dec8
JH
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
645c22ef 1877 integers when possible instead of fp. (Hopefully the overhead in
28e5dec8
JH
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
645c22ef 1884 favoured when IV and NV are equally accurate
28e5dec8
JH
1885
1886 ####################################################################
645c22ef
DM
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.
28e5dec8
JH
1890 ####################################################################
1891
645c22ef 1892 Your mileage will vary depending your CPU's relative fp to integer
28e5dec8
JH
1893 performance ratio.
1894*/
1895
1896#ifndef NV_PRESERVES_UV
645c22ef
DM
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() */
28e5dec8
JH
1904
1905/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1906STATIC int
5de3775c 1907S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
47031da6
NC
1908# ifdef DEBUGGING
1909 , I32 numtype
1910# endif
1911 )
28e5dec8 1912{
97aff369 1913 dVAR;
7918f24d
NC
1914
1915 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1916
3f7c398e 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));
28e5dec8
JH
1918 if (SvNVX(sv) < (NV)IV_MIN) {
1919 (void)SvIOKp_on(sv);
1920 (void)SvNOK_on(sv);
45977657 1921 SvIV_set(sv, IV_MIN);
28e5dec8
JH
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);
607fa7f2 1928 SvUV_set(sv, UV_MAX);
28e5dec8
JH
1929 return IS_NUMBER_OVERFLOW_UV;
1930 }
c2988b20
NC
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) {
45977657 1936 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
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);
607fa7f2 1945 SvUV_set(sv, U_V(SvNVX(sv)));
c2988b20
NC
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 */
28e5dec8 1956 }
c2988b20 1957 return IS_NUMBER_OVERFLOW_IV;
28e5dec8 1958}
645c22ef
DM
1959#endif /* !NV_PRESERVES_UV*/
1960
af359546 1961STATIC bool
7918f24d
NC
1962S_sv_2iuv_common(pTHX_ SV *const sv)
1963{
97aff369 1964 dVAR;
7918f24d
NC
1965
1966 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1967
af359546 1968 if (SvNOKp(sv)) {
28e5dec8
JH
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
af359546
NC
1972 * IV or UV at same time to avoid this. */
1973 /* IV-over-UV optimisation - choose to cache IV if possible */
25da4f38
IZ
1974
1975 if (SvTYPE(sv) == SVt_NV)
1976 sv_upgrade(sv, SVt_PVNV);
1977
28e5dec8
JH
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 */
cab190d4
JD
1983#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1984 if (Perl_isnan(SvNVX(sv))) {
1985 SvUV_set(sv, 0);
1986 SvIsUV_on(sv);
fdbe6d7c 1987 return FALSE;
cab190d4 1988 }
cab190d4 1989#endif
28e5dec8 1990 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
45977657 1991 SvIV_set(sv, I_V(SvNVX(sv)));
28e5dec8
JH
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 ) {
a43d94f2
NC
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 }
28e5dec8 2006 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 2007 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
28e5dec8
JH
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,
7234c960 2018 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
28e5dec8
JH
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 */
d460ef45 2031 }
25da4f38 2032 else {
607fa7f2 2033 SvUV_set(sv, U_V(SvNVX(sv)));
28e5dec8
JH
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
a43d94f2 2044 && SvNOK(sv)
28e5dec8
JH
2045 )
2046 SvIOK_on(sv);
25da4f38 2047 SvIsUV_on(sv);
1c846c1f 2048 DEBUG_c(PerlIO_printf(Perl_debug_log,
57def98f 2049 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
56431972 2050 PTR2UV(sv),
57def98f
JH
2051 SvUVX(sv),
2052 SvUVX(sv)));
25da4f38 2053 }
748a9306
LW
2054 }
2055 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2056 UV value;
504618e9 2057 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
af359546 2058 /* We want to avoid a possible problem when we cache an IV/ a UV which
25da4f38 2059 may be later translated to an NV, and the resulting NV is not
c2988b20
NC
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).
1c846c1f 2064
af359546 2065 This means that if we cache such an IV/a UV, we need to cache the
25da4f38 2066 NV as well. Moreover, we trade speed for space, and do not
28e5dec8 2067 cache the NV if we are sure it's not needed.
25da4f38 2068 */
16b7a9a4 2069
c2988b20
NC
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) {
5e045b90 2073 /* It's definitely an integer, only upgrade to PVIV */
28e5dec8
JH
2074 if (SvTYPE(sv) < SVt_PVIV)
2075 sv_upgrade(sv, SVt_PVIV);
f7bbb42a 2076 (void)SvIOK_on(sv);
c2988b20
NC
2077 } else if (SvTYPE(sv) < SVt_PVNV)
2078 sv_upgrade(sv, SVt_PVNV);
28e5dec8 2079
f2524eef 2080 /* If NVs preserve UVs then we only use the UV value if we know that
c2988b20
NC
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) {
45977657 2095 SvIV_set(sv, (IV)value);
c2988b20 2096 } else {
af359546 2097 /* it didn't overflow, and it was positive. */
607fa7f2 2098 SvUV_set(sv, value);
c2988b20
NC
2099 SvIsUV_on(sv);
2100 }
2101 } else {
2102 /* 2s complement assumption */
2103 if (value <= (UV)IV_MIN) {
45977657 2104 SvIV_set(sv, -(IV)value);
c2988b20
NC
2105 } else {
2106 /* Too negative for an IV. This is a double upgrade, but
d1be9408 2107 I'm assuming it will be rare. */
c2988b20
NC
2108 if (SvTYPE(sv) < SVt_PVNV)
2109 sv_upgrade(sv, SVt_PVNV);
2110 SvNOK_on(sv);
2111 SvIOK_off(sv);
2112 SvIOKp_on(sv);
9d6ce603 2113 SvNV_set(sv, -(NV)value);
45977657 2114 SvIV_set(sv, IV_MIN);
c2988b20
NC
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). */
3f7c398e 2125 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8 2126
c2988b20
NC
2127 if (! numtype && ckWARN(WARN_NUMERIC))
2128 not_a_number(sv);
28e5dec8 2129
65202027 2130#if defined(USE_LONG_DOUBLE)
c2988b20
NC
2131 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2132 PTR2UV(sv), SvNVX(sv)));
65202027 2133#else
1779d84d 2134 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
c2988b20 2135 PTR2UV(sv), SvNVX(sv)));
65202027 2136#endif
28e5dec8 2137
28e5dec8 2138#ifdef NV_PRESERVES_UV
af359546
NC
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 {
6f207bd3 2146 NOOP; /* Integer is imprecise. NOK, IOKp */
af359546
NC
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);
af359546
NC
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);
af359546 2160 } else {
6f207bd3 2161 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
af359546
NC
2162 }
2163 }
4b0c9573 2164 SvIsUV_on(sv);
af359546 2165 }
28e5dec8 2166#else /* NV_PRESERVES_UV */
c2988b20
NC
2167 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2168 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
af359546 2169 /* The IV/UV slot will have been set from value returned by
c2988b20
NC
2170 grok_number above. The NV slot has just been set using
2171 Atof. */
560b0c46 2172 SvNOK_on(sv);
c2988b20
NC
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);
45977657 2180 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
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)) {
32fdb065 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);
c2988b20
NC
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. */
47031da6 2198# ifdef DEBUGGING
40a17c4c 2199 sv_2iuv_non_preserve (sv, numtype);
47031da6
NC
2200# else
2201 sv_2iuv_non_preserve (sv);
2202# endif
c2988b20
NC
2203 }
2204 }
28e5dec8 2205#endif /* NV_PRESERVES_UV */
a43d94f2
NC
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);
25da4f38 2212 }
af359546
NC
2213 }
2214 else {
675c862f 2215 if (isGV_with_GP(sv))
a0933d07 2216 return glob_2number((GV *)sv);
180488f8 2217
af359546
NC
2218 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2219 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2220 report_uninit(sv);
2221 }
25da4f38
IZ
2222 if (SvTYPE(sv) < SVt_IV)
2223 /* Typically the caller expects that sv_any is not NULL now. */
2224 sv_upgrade(sv, SVt_IV);
af359546
NC
2225 /* Return 0 from the caller. */
2226 return TRUE;
2227 }
2228 return FALSE;
2229}
2230
2231/*
2232=for apidoc sv_2iv_flags
2233
2234Return the integer value of an SV, doing any necessary string
2235conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2236Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2237
2238=cut
2239*/
2240
2241IV
5de3775c 2242Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
af359546 2243{
97aff369 2244 dVAR;
af359546 2245 if (!sv)
a0d0e21e 2246 return 0;
cecf5685
NC
2247 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2248 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e
NC
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. */
af359546
NC
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 }
71c558c3
NC
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 }
1c7ff15e
NC
2281 if (SvROK(sv)) {
2282 goto return_rok;
af359546 2283 }
1c7ff15e
NC
2284 assert(SvTYPE(sv) >= SVt_PVMG);
2285 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2286 } else if (SvTHINKFIRST(sv)) {
af359546 2287 if (SvROK(sv)) {
1c7ff15e 2288 return_rok:
af359546
NC
2289 if (SvAMAGIC(sv)) {
2290 SV * const tmpstr=AMG_CALLun(sv,numer);
2291 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2292 return SvIV(tmpstr);
2293 }
2294 }
2295 return PTR2IV(SvRV(sv));
2296 }
2297 if (SvIsCOW(sv)) {
2298 sv_force_normal_flags(sv, 0);
2299 }
2300 if (SvREADONLY(sv) && !SvOK(sv)) {
2301 if (ckWARN(WARN_UNINITIALIZED))
2302 report_uninit(sv);
2303 return 0;
2304 }
2305 }
2306 if (!SvIOKp(sv)) {
2307 if (S_sv_2iuv_common(aTHX_ sv))
2308 return 0;
79072805 2309 }
1d7c1841
GS
2310 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2311 PTR2UV(sv),SvIVX(sv)));
25da4f38 2312 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
79072805
LW
2313}
2314
645c22ef 2315/*
891f9566 2316=for apidoc sv_2uv_flags
645c22ef
DM
2317
2318Return the unsigned integer value of an SV, doing any necessary string
891f9566
YST
2319conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2320Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
645c22ef
DM
2321
2322=cut
2323*/
2324
ff68c719 2325UV
5de3775c 2326Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
ff68c719 2327{
97aff369 2328 dVAR;
ff68c719 2329 if (!sv)
2330 return 0;
cecf5685
NC
2331 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2332 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e 2333 cache IVs just in case. */
891f9566
YST
2334 if (flags & SV_GMAGIC)
2335 mg_get(sv);
ff68c719 2336 if (SvIOKp(sv))
2337 return SvUVX(sv);
2338 if (SvNOKp(sv))
2339 return U_V(SvNVX(sv));
71c558c3
NC
2340 if (SvPOKp(sv) && SvLEN(sv)) {
2341 UV value;
2342 const int numtype
2343 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2344
2345 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2346 == IS_NUMBER_IN_UV) {
2347 /* It's definitely an integer */
2348 if (!(numtype & IS_NUMBER_NEG))
2349 return value;
2350 }
2351 if (!numtype) {
2352 if (ckWARN(WARN_NUMERIC))
2353 not_a_number(sv);
2354 }
2355 return U_V(Atof(SvPVX_const(sv)));
2356 }
1c7ff15e
NC
2357 if (SvROK(sv)) {
2358 goto return_rok;
3fe9a6f1 2359 }
1c7ff15e
NC
2360 assert(SvTYPE(sv) >= SVt_PVMG);
2361 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2362 } else if (SvTHINKFIRST(sv)) {
ff68c719 2363 if (SvROK(sv)) {
1c7ff15e 2364 return_rok:
deb46114
NC
2365 if (SvAMAGIC(sv)) {
2366 SV *const tmpstr = AMG_CALLun(sv,numer);
2367 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2368 return SvUV(tmpstr);
2369 }
2370 }
2371 return PTR2UV(SvRV(sv));
ff68c719 2372 }
765f542d
NC
2373 if (SvIsCOW(sv)) {
2374 sv_force_normal_flags(sv, 0);
8a818333 2375 }
0336b60e 2376 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2377 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2378 report_uninit(sv);
ff68c719 2379 return 0;
2380 }
2381 }
af359546
NC
2382 if (!SvIOKp(sv)) {
2383 if (S_sv_2iuv_common(aTHX_ sv))
2384 return 0;
ff68c719 2385 }
25da4f38 2386
1d7c1841
GS
2387 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2388 PTR2UV(sv),SvUVX(sv)));
25da4f38 2389 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
ff68c719 2390}
2391
645c22ef
DM
2392/*
2393=for apidoc sv_2nv
2394
2395Return the num value of an SV, doing any necessary string or integer
2396conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2397macros.
2398
2399=cut
2400*/
2401
65202027 2402NV
5de3775c 2403Perl_sv_2nv(pTHX_ register SV *const sv)
79072805 2404{
97aff369 2405 dVAR;
79072805
LW
2406 if (!sv)
2407 return 0.0;
cecf5685
NC
2408 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2409 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e 2410 cache IVs just in case. */
463ee0b2
LW
2411 mg_get(sv);
2412 if (SvNOKp(sv))
2413 return SvNVX(sv);
0aa395f8 2414 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
041457d9 2415 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
504618e9 2416 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
a0d0e21e 2417 not_a_number(sv);
3f7c398e 2418 return Atof(SvPVX_const(sv));
a0d0e21e 2419 }
25da4f38 2420 if (SvIOKp(sv)) {
1c846c1f 2421 if (SvIsUV(sv))
65202027 2422 return (NV)SvUVX(sv);
25da4f38 2423 else
65202027 2424 return (NV)SvIVX(sv);
47a72cb8
NC
2425 }
2426 if (SvROK(sv)) {
2427 goto return_rok;
2428 }
2429 assert(SvTYPE(sv) >= SVt_PVMG);
2430 /* This falls through to the report_uninit near the end of the
2431 function. */
2432 } else if (SvTHINKFIRST(sv)) {
a0d0e21e 2433 if (SvROK(sv)) {
47a72cb8 2434 return_rok:
deb46114
NC
2435 if (SvAMAGIC(sv)) {
2436 SV *const tmpstr = AMG_CALLun(sv,numer);
2437 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2438 return SvNV(tmpstr);
2439 }
2440 }
2441 return PTR2NV(SvRV(sv));
a0d0e21e 2442 }
765f542d
NC
2443 if (SvIsCOW(sv)) {
2444 sv_force_normal_flags(sv, 0);
8a818333 2445 }
0336b60e 2446 if (SvREADONLY(sv) && !SvOK(sv)) {
599cee73 2447 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2448 report_uninit(sv);
ed6116ce
LW
2449 return 0.0;
2450 }
79072805
LW
2451 }
2452 if (SvTYPE(sv) < SVt_NV) {
7e25a7e9
NC
2453 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2454 sv_upgrade(sv, SVt_NV);
906f284f 2455#ifdef USE_LONG_DOUBLE
097ee67d 2456 DEBUG_c({
f93f4e46 2457 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2458 PerlIO_printf(Perl_debug_log,
2459 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2460 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2461 RESTORE_NUMERIC_LOCAL();
2462 });
65202027 2463#else
572bbb43 2464 DEBUG_c({
f93f4e46 2465 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2466 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
1d7c1841 2467 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2468 RESTORE_NUMERIC_LOCAL();
2469 });
572bbb43 2470#endif
79072805
LW
2471 }
2472 else if (SvTYPE(sv) < SVt_PVNV)
2473 sv_upgrade(sv, SVt_PVNV);
59d8ce62
NC
2474 if (SvNOKp(sv)) {
2475 return SvNVX(sv);
61604483 2476 }
59d8ce62 2477 if (SvIOKp(sv)) {
9d6ce603 2478 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
28e5dec8 2479#ifdef NV_PRESERVES_UV
a43d94f2
NC
2480 if (SvIOK(sv))
2481 SvNOK_on(sv);
2482 else
2483 SvNOKp_on(sv);
28e5dec8
JH
2484#else
2485 /* Only set the public NV OK flag if this NV preserves the IV */
2486 /* Check it's not 0xFFFFFFFFFFFFFFFF */
a43d94f2
NC
2487 if (SvIOK(sv) &&
2488 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
28e5dec8
JH
2489 : (SvIVX(sv) == I_V(SvNVX(sv))))
2490 SvNOK_on(sv);
2491 else
2492 SvNOKp_on(sv);
2493#endif
93a17b20 2494 }
748a9306 2495 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2496 UV value;
3f7c398e 2497 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
041457d9 2498 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
a0d0e21e 2499 not_a_number(sv);
28e5dec8 2500#ifdef NV_PRESERVES_UV
c2988b20
NC
2501 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2502 == IS_NUMBER_IN_UV) {
5e045b90 2503 /* It's definitely an integer */
9d6ce603 2504 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
c2988b20 2505 } else
3f7c398e 2506 SvNV_set(sv, Atof(SvPVX_const(sv)));
a43d94f2
NC
2507 if (numtype)
2508 SvNOK_on(sv);
2509 else
2510 SvNOKp_on(sv);
28e5dec8 2511#else
3f7c398e 2512 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2513 /* Only set the public NV OK flag if this NV preserves the value in
2514 the PV at least as well as an IV/UV would.
2515 Not sure how to do this 100% reliably. */
2516 /* if that shift count is out of range then Configure's test is
2517 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2518 UV_BITS */
2519 if (((UV)1 << NV_PRESERVES_UV_BITS) >
c2988b20 2520 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
28e5dec8 2521 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
c2988b20
NC
2522 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2523 /* Can't use strtol etc to convert this string, so don't try.
2524 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2525 SvNOK_on(sv);
2526 } else {
2527 /* value has been set. It may not be precise. */
2528 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2529 /* 2s complement assumption for (UV)IV_MIN */
2530 SvNOK_on(sv); /* Integer is too negative. */
2531 } else {
2532 SvNOKp_on(sv);
2533 SvIOKp_on(sv);
6fa402ec 2534
c2988b20 2535 if (numtype & IS_NUMBER_NEG) {
45977657 2536 SvIV_set(sv, -(IV)value);
c2988b20 2537 } else if (value <= (UV)IV_MAX) {
45977657 2538 SvIV_set(sv, (IV)value);
c2988b20 2539 } else {
607fa7f2 2540 SvUV_set(sv, value);
c2988b20
NC
2541 SvIsUV_on(sv);
2542 }
2543
2544 if (numtype & IS_NUMBER_NOT_INT) {
2545 /* I believe that even if the original PV had decimals,
2546 they are lost beyond the limit of the FP precision.
2547 However, neither is canonical, so both only get p
2548 flags. NWC, 2000/11/25 */
2549 /* Both already have p flags, so do nothing */
2550 } else {
66a1b24b 2551 const NV nv = SvNVX(sv);
c2988b20
NC
2552 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2553 if (SvIVX(sv) == I_V(nv)) {
2554 SvNOK_on(sv);
c2988b20 2555 } else {
c2988b20
NC
2556 /* It had no "." so it must be integer. */
2557 }
00b6aa41 2558 SvIOK_on(sv);
c2988b20
NC
2559 } else {
2560 /* between IV_MAX and NV(UV_MAX).
2561 Could be slightly > UV_MAX */
6fa402ec 2562
c2988b20
NC
2563 if (numtype & IS_NUMBER_NOT_INT) {
2564 /* UV and NV both imprecise. */
2565 } else {
66a1b24b 2566 const UV nv_as_uv = U_V(nv);
c2988b20
NC
2567
2568 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2569 SvNOK_on(sv);
c2988b20 2570 }
00b6aa41 2571 SvIOK_on(sv);
c2988b20
NC
2572 }
2573 }
2574 }
2575 }
2576 }
a43d94f2
NC
2577 /* It might be more code efficient to go through the entire logic above
2578 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2579 gets complex and potentially buggy, so more programmer efficient
2580 to do it this way, by turning off the public flags: */
2581 if (!numtype)
2582 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
28e5dec8 2583#endif /* NV_PRESERVES_UV */
93a17b20 2584 }
79072805 2585 else {
f7877b28 2586 if (isGV_with_GP(sv)) {
19f6321d 2587 glob_2number((GV *)sv);
180488f8
NC
2588 return 0.0;
2589 }
2590
041457d9 2591 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2592 report_uninit(sv);
7e25a7e9
NC
2593 assert (SvTYPE(sv) >= SVt_NV);
2594 /* Typically the caller expects that sv_any is not NULL now. */
2595 /* XXX Ilya implies that this is a bug in callers that assume this
2596 and ideally should be fixed. */
a0d0e21e 2597 return 0.0;
79072805 2598 }
572bbb43 2599#if defined(USE_LONG_DOUBLE)
097ee67d 2600 DEBUG_c({
f93f4e46 2601 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2602 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2603 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2604 RESTORE_NUMERIC_LOCAL();
2605 });
65202027 2606#else
572bbb43 2607 DEBUG_c({
f93f4e46 2608 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2609 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
1d7c1841 2610 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2611 RESTORE_NUMERIC_LOCAL();
2612 });
572bbb43 2613#endif
463ee0b2 2614 return SvNVX(sv);
79072805
LW
2615}
2616
800401ee
JH
2617/*
2618=for apidoc sv_2num
2619
2620Return an SV with the numeric value of the source SV, doing any necessary
a196a5fa
JH
2621reference or overload conversion. You must use the C<SvNUM(sv)> macro to
2622access this function.
800401ee
JH
2623
2624=cut
2625*/
2626
2627SV *
5de3775c 2628Perl_sv_2num(pTHX_ register SV *const sv)
800401ee 2629{
7918f24d
NC
2630 PERL_ARGS_ASSERT_SV_2NUM;
2631
b9ee0594
RGS
2632 if (!SvROK(sv))
2633 return sv;
800401ee
JH
2634 if (SvAMAGIC(sv)) {
2635 SV * const tmpsv = AMG_CALLun(sv,numer);
2636 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2637 return sv_2num(tmpsv);
2638 }
2639 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2640}
2641
645c22ef
DM
2642/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2643 * UV as a string towards the end of buf, and return pointers to start and
2644 * end of it.
2645 *
2646 * We assume that buf is at least TYPE_CHARS(UV) long.
2647 */
2648
864dbfa3 2649static char *
5de3775c 2650S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
25da4f38 2651{
25da4f38 2652 char *ptr = buf + TYPE_CHARS(UV);
823a54a3 2653 char * const ebuf = ptr;
25da4f38 2654 int sign;
25da4f38 2655
7918f24d
NC
2656 PERL_ARGS_ASSERT_UIV_2BUF;
2657
25da4f38
IZ
2658 if (is_uv)
2659 sign = 0;
2660 else if (iv >= 0) {
2661 uv = iv;
2662 sign = 0;
2663 } else {
2664 uv = -iv;
2665 sign = 1;
2666 }
2667 do {
eb160463 2668 *--ptr = '0' + (char)(uv % 10);
25da4f38
IZ
2669 } while (uv /= 10);
2670 if (sign)
2671 *--ptr = '-';
2672 *peob = ebuf;
2673 return ptr;
2674}
2675
645c22ef
DM
2676/*
2677=for apidoc sv_2pv_flags
2678
ff276b08 2679Returns a pointer to the string value of an SV, and sets *lp to its length.
645c22ef
DM
2680If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2681if necessary.
2682Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2683usually end up here too.
2684
2685=cut
2686*/
2687
8d6d96c1 2688char *
5de3775c 2689Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 2690{
97aff369 2691 dVAR;
79072805 2692 register char *s;
79072805 2693
463ee0b2 2694 if (!sv) {
cdb061a3
NC
2695 if (lp)
2696 *lp = 0;
73d840c0 2697 return (char *)"";
463ee0b2 2698 }
8990e307 2699 if (SvGMAGICAL(sv)) {
8d6d96c1
HS
2700 if (flags & SV_GMAGIC)
2701 mg_get(sv);
463ee0b2 2702 if (SvPOKp(sv)) {
cdb061a3
NC
2703 if (lp)
2704 *lp = SvCUR(sv);
10516c54
NC
2705 if (flags & SV_MUTABLE_RETURN)
2706 return SvPVX_mutable(sv);
4d84ee25
NC
2707 if (flags & SV_CONST_RETURN)
2708 return (char *)SvPVX_const(sv);
463ee0b2
LW
2709 return SvPVX(sv);
2710 }
75dfc8ec
NC
2711 if (SvIOKp(sv) || SvNOKp(sv)) {
2712 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
75dfc8ec
NC
2713 STRLEN len;
2714
2715 if (SvIOKp(sv)) {
e80fed9d 2716 len = SvIsUV(sv)
d9fad198
JH
2717 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2718 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
75dfc8ec 2719 } else {
e8ada2d0
NC
2720 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2721 len = strlen(tbuf);
75dfc8ec 2722 }
b5b886f0
NC
2723 assert(!SvROK(sv));
2724 {
75dfc8ec
NC
2725 dVAR;
2726
2727#ifdef FIXNEGATIVEZERO
e8ada2d0
NC
2728 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2729 tbuf[0] = '0';
2730 tbuf[1] = 0;
75dfc8ec
NC
2731 len = 1;
2732 }
2733#endif
2734 SvUPGRADE(sv, SVt_PV);
2735 if (lp)
2736 *lp = len;
2737 s = SvGROW_mutable(sv, len + 1);
2738 SvCUR_set(sv, len);
2739 SvPOKp_on(sv);
10edeb5d 2740 return (char*)memcpy(s, tbuf, len + 1);
75dfc8ec 2741 }
463ee0b2 2742 }
1c7ff15e
NC
2743 if (SvROK(sv)) {
2744 goto return_rok;
2745 }
2746 assert(SvTYPE(sv) >= SVt_PVMG);
2747 /* This falls through to the report_uninit near the end of the
2748 function. */
2749 } else if (SvTHINKFIRST(sv)) {
ed6116ce 2750 if (SvROK(sv)) {
1c7ff15e 2751 return_rok:
deb46114
NC
2752 if (SvAMAGIC(sv)) {
2753 SV *const tmpstr = AMG_CALLun(sv,string);
2754 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2755 /* Unwrap this: */
2756 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2757 */
2758
2759 char *pv;
2760 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2761 if (flags & SV_CONST_RETURN) {
2762 pv = (char *) SvPVX_const(tmpstr);
2763 } else {
2764 pv = (flags & SV_MUTABLE_RETURN)
2765 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2766 }
2767 if (lp)
2768 *lp = SvCUR(tmpstr);
50adf7d2 2769 } else {
deb46114 2770 pv = sv_2pv_flags(tmpstr, lp, flags);
50adf7d2 2771 }
deb46114
NC
2772 if (SvUTF8(tmpstr))
2773 SvUTF8_on(sv);
2774 else
2775 SvUTF8_off(sv);
2776 return pv;
50adf7d2 2777 }
deb46114
NC
2778 }
2779 {
fafee734
NC
2780 STRLEN len;
2781 char *retval;
2782 char *buffer;
d8eae41e
NC
2783 const SV *const referent = (SV*)SvRV(sv);
2784
2785 if (!referent) {
fafee734
NC
2786 len = 7;
2787 retval = buffer = savepvn("NULLREF", len);
5c35adbb 2788 } else if (SvTYPE(referent) == SVt_REGEXP) {
67d2d14d
AB
2789 const REGEXP * const re = (REGEXP *)referent;
2790 I32 seen_evals = 0;
2791
2792 assert(re);
2793
2794 /* If the regex is UTF-8 we want the containing scalar to
2795 have an UTF-8 flag too */
2796 if (RX_UTF8(re))
2797 SvUTF8_on(sv);
2798 else
2799 SvUTF8_off(sv);
2800
2801 if ((seen_evals = RX_SEEN_EVALS(re)))
2802 PL_reginterp_cnt += seen_evals;
2803
2804 if (lp)
2805 *lp = RX_WRAPLEN(re);
2806
2807 return RX_WRAPPED(re);
d8eae41e
NC
2808 } else {
2809 const char *const typestr = sv_reftype(referent, 0);
fafee734
NC
2810 const STRLEN typelen = strlen(typestr);
2811 UV addr = PTR2UV(referent);
2812 const char *stashname = NULL;
2813 STRLEN stashnamelen = 0; /* hush, gcc */
2814 const char *buffer_end;
d8eae41e 2815
d8eae41e 2816 if (SvOBJECT(referent)) {
fafee734
NC
2817 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2818
2819 if (name) {
2820 stashname = HEK_KEY(name);
2821 stashnamelen = HEK_LEN(name);
2822
2823 if (HEK_UTF8(name)) {
2824 SvUTF8_on(sv);
2825 } else {
2826 SvUTF8_off(sv);
2827 }
2828 } else {
2829 stashname = "__ANON__";
2830 stashnamelen = 8;
2831 }
2832 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2833 + 2 * sizeof(UV) + 2 /* )\0 */;
2834 } else {
2835 len = typelen + 3 /* (0x */
2836 + 2 * sizeof(UV) + 2 /* )\0 */;
d8eae41e 2837 }
fafee734
NC
2838
2839 Newx(buffer, len, char);
2840 buffer_end = retval = buffer + len;
2841
2842 /* Working backwards */
2843 *--retval = '\0';
2844 *--retval = ')';
2845 do {
2846 *--retval = PL_hexdigit[addr & 15];
2847 } while (addr >>= 4);
2848 *--retval = 'x';
2849 *--retval = '0';
2850 *--retval = '(';
2851
2852 retval -= typelen;
2853 memcpy(retval, typestr, typelen);
2854
2855 if (stashname) {
2856 *--retval = '=';
2857 retval -= stashnamelen;
2858 memcpy(retval, stashname, stashnamelen);
2859 }
2860 /* retval may not neccesarily have reached the start of the
2861 buffer here. */
2862 assert (retval >= buffer);
2863
2864 len = buffer_end - retval - 1; /* -1 for that \0 */
c080367d 2865 }
042dae7a 2866 if (lp)
fafee734
NC
2867 *lp = len;
2868 SAVEFREEPV(buffer);
2869 return retval;
463ee0b2 2870 }
79072805 2871 }
0336b60e 2872 if (SvREADONLY(sv) && !SvOK(sv)) {
cdb061a3
NC
2873 if (lp)
2874 *lp = 0;
9f621bb0
NC
2875 if (flags & SV_UNDEF_RETURNS_NULL)
2876 return NULL;
2877 if (ckWARN(WARN_UNINITIALIZED))
2878 report_uninit(sv);
73d840c0 2879 return (char *)"";
79072805 2880 }
79072805 2881 }
28e5dec8
JH
2882 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2883 /* I'm assuming that if both IV and NV are equally valid then
2884 converting the IV is going to be more efficient */
e1ec3a88 2885 const U32 isUIOK = SvIsUV(sv);
28e5dec8
JH
2886 char buf[TYPE_CHARS(UV)];
2887 char *ebuf, *ptr;
97a130b8 2888 STRLEN len;
28e5dec8
JH
2889
2890 if (SvTYPE(sv) < SVt_PVIV)
2891 sv_upgrade(sv, SVt_PVIV);
4ea1d550 2892 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
97a130b8 2893 len = ebuf - ptr;
5902b6a9 2894 /* inlined from sv_setpvn */
97a130b8
NC
2895 s = SvGROW_mutable(sv, len + 1);
2896 Move(ptr, s, len, char);
2897 s += len;
28e5dec8 2898 *s = '\0';
28e5dec8
JH
2899 }
2900 else if (SvNOKp(sv)) {
c81271c3 2901 const int olderrno = errno;
79072805
LW
2902 if (SvTYPE(sv) < SVt_PVNV)
2903 sv_upgrade(sv, SVt_PVNV);
1c846c1f 2904 /* The +20 is pure guesswork. Configure test needed. --jhi */
5902b6a9 2905 s = SvGROW_mutable(sv, NV_DIG + 20);
c81271c3 2906 /* some Xenix systems wipe out errno here */
79072805 2907#ifdef apollo
463ee0b2 2908 if (SvNVX(sv) == 0.0)
d1307786 2909 my_strlcpy(s, "0", SvLEN(sv));
79072805
LW
2910 else
2911#endif /*apollo*/
bbce6d69 2912 {
2d4389e4 2913 Gconvert(SvNVX(sv), NV_DIG, 0, s);
bbce6d69 2914 }
79072805 2915 errno = olderrno;
a0d0e21e 2916#ifdef FIXNEGATIVEZERO
20773dcd
NC
2917 if (*s == '-' && s[1] == '0' && !s[2]) {
2918 s[0] = '0';
2919 s[1] = 0;
2920 }
a0d0e21e 2921#endif
79072805
LW
2922 while (*s) s++;
2923#ifdef hcx
2924 if (s[-1] == '.')
46fc3d4c 2925 *--s = '\0';
79072805
LW
2926#endif
2927 }
79072805 2928 else {
675c862f 2929 if (isGV_with_GP(sv))
19f6321d 2930 return glob_2pv((GV *)sv, lp);
180488f8 2931
cdb061a3 2932 if (lp)
00b6aa41 2933 *lp = 0;
9f621bb0
NC
2934 if (flags & SV_UNDEF_RETURNS_NULL)
2935 return NULL;
2936 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2937 report_uninit(sv);
25da4f38
IZ
2938 if (SvTYPE(sv) < SVt_PV)
2939 /* Typically the caller expects that sv_any is not NULL now. */
2940 sv_upgrade(sv, SVt_PV);
73d840c0 2941 return (char *)"";
79072805 2942 }
cdb061a3 2943 {
823a54a3 2944 const STRLEN len = s - SvPVX_const(sv);
cdb061a3
NC
2945 if (lp)
2946 *lp = len;
2947 SvCUR_set(sv, len);
2948 }
79072805 2949 SvPOK_on(sv);
1d7c1841 2950 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 2951 PTR2UV(sv),SvPVX_const(sv)));
4d84ee25
NC
2952 if (flags & SV_CONST_RETURN)
2953 return (char *)SvPVX_const(sv);
10516c54
NC
2954 if (flags & SV_MUTABLE_RETURN)
2955 return SvPVX_mutable(sv);
463ee0b2
LW
2956 return SvPVX(sv);
2957}
2958
645c22ef 2959/*
6050d10e
JP
2960=for apidoc sv_copypv
2961
2962Copies a stringified representation of the source SV into the
2963destination SV. Automatically performs any necessary mg_get and
54f0641b 2964coercion of numeric values into strings. Guaranteed to preserve
2575c402 2965UTF8 flag even from overloaded objects. Similar in nature to
54f0641b
NIS
2966sv_2pv[_flags] but operates directly on an SV instead of just the
2967string. Mostly uses sv_2pv_flags to do its work, except when that
6050d10e
JP
2968would lose the UTF-8'ness of the PV.
2969
2970=cut
2971*/
2972
2973void
5de3775c 2974Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
6050d10e 2975{
446eaa42 2976 STRLEN len;
53c1dcc0 2977 const char * const s = SvPV_const(ssv,len);
7918f24d
NC
2978
2979 PERL_ARGS_ASSERT_SV_COPYPV;
2980
cb50f42d 2981 sv_setpvn(dsv,s,len);
446eaa42 2982 if (SvUTF8(ssv))
cb50f42d 2983 SvUTF8_on(dsv);
446eaa42 2984 else
cb50f42d 2985 SvUTF8_off(dsv);
6050d10e
JP
2986}
2987
2988/*
645c22ef
DM
2989=for apidoc sv_2pvbyte
2990
2991Return a pointer to the byte-encoded representation of the SV, and set *lp
1e54db1a 2992to its length. May cause the SV to be downgraded from UTF-8 as a
645c22ef
DM
2993side-effect.
2994
2995Usually accessed via the C<SvPVbyte> macro.
2996
2997=cut
2998*/
2999
7340a771 3000char *
5de3775c 3001Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3002{
7918f24d
NC
3003 PERL_ARGS_ASSERT_SV_2PVBYTE;
3004
0875d2fe 3005 sv_utf8_downgrade(sv,0);
97972285 3006 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771
GS
3007}
3008
645c22ef 3009/*
035cbb0e
RGS
3010=for apidoc sv_2pvutf8
3011
3012Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3013to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3014
3015Usually accessed via the C<SvPVutf8> macro.
3016
3017=cut
3018*/
645c22ef 3019
7340a771
GS
3020char *
3021Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3022{
7918f24d
NC
3023 PERL_ARGS_ASSERT_SV_2PVUTF8;
3024
035cbb0e
RGS
3025 sv_utf8_upgrade(sv);
3026 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771 3027}
1c846c1f 3028
7ee2227d 3029
645c22ef
DM
3030/*
3031=for apidoc sv_2bool
3032
3033This function is only called on magical items, and is only used by
8cf8f3d1 3034sv_true() or its macro equivalent.
645c22ef
DM
3035
3036=cut
3037*/
3038
463ee0b2 3039bool
864dbfa3 3040Perl_sv_2bool(pTHX_ register SV *sv)
463ee0b2 3041{
97aff369 3042 dVAR;
7918f24d
NC
3043
3044 PERL_ARGS_ASSERT_SV_2BOOL;
3045
5b295bef 3046 SvGETMAGIC(sv);
463ee0b2 3047
a0d0e21e
LW
3048 if (!SvOK(sv))
3049 return 0;
3050 if (SvROK(sv)) {
fabdb6c0
AL
3051 if (SvAMAGIC(sv)) {
3052 SV * const tmpsv = AMG_CALLun(sv,bool_);
3053 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3054 return (bool)SvTRUE(tmpsv);
3055 }
3056 return SvRV(sv) != 0;
a0d0e21e 3057 }
463ee0b2 3058 if (SvPOKp(sv)) {
53c1dcc0
AL
3059 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3060 if (Xpvtmp &&
339049b0 3061 (*sv->sv_u.svu_pv > '0' ||
11343788 3062 Xpvtmp->xpv_cur > 1 ||
339049b0 3063 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
463ee0b2
LW
3064 return 1;
3065 else
3066 return 0;
3067 }
3068 else {
3069 if (SvIOKp(sv))
3070 return SvIVX(sv) != 0;
3071 else {
3072 if (SvNOKp(sv))
3073 return SvNVX(sv) != 0.0;
180488f8 3074 else {
f7877b28 3075 if (isGV_with_GP(sv))
180488f8
NC
3076 return TRUE;
3077 else
3078 return FALSE;
3079 }
463ee0b2
LW
3080 }
3081 }
79072805
LW
3082}
3083
c461cf8f
JH
3084/*
3085=for apidoc sv_utf8_upgrade
3086
78ea37eb 3087Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3088Forces the SV to string form if it is not already.
4411f3b6
NIS
3089Always sets the SvUTF8 flag to avoid future validity checks even
3090if all the bytes have hibit clear.
c461cf8f 3091
13a6c0e0
JH
3092This is not as a general purpose byte encoding to Unicode interface:
3093use the Encode extension for that.
3094
8d6d96c1
HS
3095=for apidoc sv_utf8_upgrade_flags
3096
78ea37eb 3097Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3098Forces the SV to string form if it is not already.
8d6d96c1
HS
3099Always sets the SvUTF8 flag to avoid future validity checks even
3100if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3101will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3102C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3103
13a6c0e0
JH
3104This is not as a general purpose byte encoding to Unicode interface:
3105use the Encode extension for that.
3106
8d6d96c1
HS
3107=cut
3108*/
3109
3110STRLEN
3111Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3112{
97aff369 3113 dVAR;
7918f24d
NC
3114
3115 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS;
3116
808c356f
RGS
3117 if (sv == &PL_sv_undef)
3118 return 0;
e0e62c2a
NIS
3119 if (!SvPOK(sv)) {
3120 STRLEN len = 0;
d52b7888
NC
3121 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3122 (void) sv_2pv_flags(sv,&len, flags);
3123 if (SvUTF8(sv))
3124 return len;
3125 } else {
3126 (void) SvPV_force(sv,len);
3127 }
e0e62c2a 3128 }
4411f3b6 3129
f5cee72b 3130 if (SvUTF8(sv)) {
5fec3b1d 3131 return SvCUR(sv);
f5cee72b 3132 }
5fec3b1d 3133
765f542d
NC
3134 if (SvIsCOW(sv)) {
3135 sv_force_normal_flags(sv, 0);
db42d148
NIS
3136 }
3137
88632417 3138 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
799ef3cb 3139 sv_recode_to_utf8(sv, PL_encoding);
9f4817db 3140 else { /* Assume Latin-1/EBCDIC */
c4e7c712
NC
3141 /* This function could be much more efficient if we
3142 * had a FLAG in SVs to signal if there are any hibit
3143 * chars in the PV. Given that there isn't such a flag
3144 * make the loop as fast as possible. */
00b6aa41 3145 const U8 * const s = (U8 *) SvPVX_const(sv);
c4420975 3146 const U8 * const e = (U8 *) SvEND(sv);
93524f2b 3147 const U8 *t = s;
c4e7c712
NC
3148
3149 while (t < e) {
53c1dcc0 3150 const U8 ch = *t++;
00b6aa41
AL
3151 /* Check for hi bit */
3152 if (!NATIVE_IS_INVARIANT(ch)) {
3153 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3154 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
3155
3156 SvPV_free(sv); /* No longer using what was there before. */
3157 SvPV_set(sv, (char*)recoded);
3158 SvCUR_set(sv, len - 1);
3159 SvLEN_set(sv, len); /* No longer know the real size. */
c4e7c712 3160 break;
00b6aa41 3161 }
c4e7c712
NC
3162 }
3163 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3164 SvUTF8_on(sv);
560a288e 3165 }
4411f3b6 3166 return SvCUR(sv);
560a288e
GS
3167}
3168
c461cf8f
JH
3169/*
3170=for apidoc sv_utf8_downgrade
3171
78ea37eb
TS
3172Attempts to convert the PV of an SV from characters to bytes.
3173If the PV contains a character beyond byte, this conversion will fail;
3174in this case, either returns false or, if C<fail_ok> is not
c461cf8f
JH
3175true, croaks.
3176
13a6c0e0
JH
3177This is not as a general purpose Unicode to byte encoding interface:
3178use the Encode extension for that.
3179
c461cf8f
JH
3180=cut
3181*/
3182
560a288e
GS
3183bool
3184Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3185{
97aff369 3186 dVAR;
7918f24d
NC
3187
3188 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3189
78ea37eb 3190 if (SvPOKp(sv) && SvUTF8(sv)) {
fa301091 3191 if (SvCUR(sv)) {
03cfe0ae 3192 U8 *s;
652088fc 3193 STRLEN len;
fa301091 3194
765f542d
NC
3195 if (SvIsCOW(sv)) {
3196 sv_force_normal_flags(sv, 0);
3197 }
03cfe0ae
NIS
3198 s = (U8 *) SvPV(sv, len);
3199 if (!utf8_to_bytes(s, &len)) {
fa301091
JH
3200 if (fail_ok)
3201 return FALSE;
3202 else {
3203 if (PL_op)
3204 Perl_croak(aTHX_ "Wide character in %s",
53e06cf0 3205 OP_DESC(PL_op));
fa301091
JH
3206 else
3207 Perl_croak(aTHX_ "Wide character");
3208 }
4b3603a4 3209 }
b162af07 3210 SvCUR_set(sv, len);
67e989fb 3211 }
560a288e 3212 }
ffebcc3e 3213 SvUTF8_off(sv);
560a288e
GS
3214 return TRUE;
3215}
3216
c461cf8f
JH
3217/*
3218=for apidoc sv_utf8_encode
3219
78ea37eb
TS
3220Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3221flag off so that it looks like octets again.
c461cf8f
JH
3222
3223=cut
3224*/
3225
560a288e
GS
3226void
3227Perl_sv_utf8_encode(pTHX_ register SV *sv)
3228{
7918f24d
NC
3229 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3230
4c94c214
NC
3231 if (SvIsCOW(sv)) {
3232 sv_force_normal_flags(sv, 0);
3233 }
3234 if (SvREADONLY(sv)) {
3235 Perl_croak(aTHX_ PL_no_modify);
3236 }
a5f5288a 3237 (void) sv_utf8_upgrade(sv);
560a288e
GS
3238 SvUTF8_off(sv);
3239}
3240
4411f3b6
NIS
3241/*
3242=for apidoc sv_utf8_decode
3243
78ea37eb
TS
3244If the PV of the SV is an octet sequence in UTF-8
3245and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3246so that it looks like a character. If the PV contains only single-byte
3247characters, the C<SvUTF8> flag stays being off.
3248Scans PV for validity and returns false if the PV is invalid UTF-8.
4411f3b6
NIS
3249
3250=cut
3251*/
3252
560a288e
GS
3253bool
3254Perl_sv_utf8_decode(pTHX_ register SV *sv)
3255{
7918f24d
NC
3256 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3257
78ea37eb 3258 if (SvPOKp(sv)) {
93524f2b
NC
3259 const U8 *c;
3260 const U8 *e;
9cbac4c7 3261
645c22ef
DM
3262 /* The octets may have got themselves encoded - get them back as
3263 * bytes
3264 */
3265 if (!sv_utf8_downgrade(sv, TRUE))
560a288e
GS
3266 return FALSE;
3267
3268 /* it is actually just a matter of turning the utf8 flag on, but
3269 * we want to make sure everything inside is valid utf8 first.
3270 */
93524f2b 3271 c = (const U8 *) SvPVX_const(sv);
63cd0674 3272 if (!is_utf8_string(c, SvCUR(sv)+1))
67e989fb 3273 return FALSE;
93524f2b 3274 e = (const U8 *) SvEND(sv);
511c2ff0 3275 while (c < e) {
b64e5050 3276 const U8 ch = *c++;
c4d5f83a 3277 if (!UTF8_IS_INVARIANT(ch)) {
67e989fb
JH
3278 SvUTF8_on(sv);
3279 break;
3280 }
560a288e 3281 }
560a288e
GS
3282 }
3283 return TRUE;
3284}
3285
954c1994
GS
3286/*
3287=for apidoc sv_setsv
3288
645c22ef
DM
3289Copies the contents of the source SV C<ssv> into the destination SV
3290C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3291function if the source SV needs to be reused. Does not handle 'set' magic.
3292Loosely speaking, it performs a copy-by-value, obliterating any previous
3293content of the destination.
3294
3295You probably want to use one of the assortment of wrappers, such as
3296C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3297C<SvSetMagicSV_nosteal>.
3298
8d6d96c1
HS
3299=for apidoc sv_setsv_flags
3300
645c22ef
DM
3301Copies the contents of the source SV C<ssv> into the destination SV
3302C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3303function if the source SV needs to be reused. Does not handle 'set' magic.
3304Loosely speaking, it performs a copy-by-value, obliterating any previous
3305content of the destination.
3306If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
5fcdf167
NC
3307C<ssv> if appropriate, else not. If the C<flags> parameter has the
3308C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3309and C<sv_setsv_nomg> are implemented in terms of this function.
645c22ef
DM
3310
3311You probably want to use one of the assortment of wrappers, such as
3312C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3313C<SvSetMagicSV_nosteal>.
3314
3315This is the primary function for copying scalars, and most other
3316copy-ish functions and macros use this underneath.
8d6d96c1
HS
3317
3318=cut
3319*/
3320
5d0301b7 3321static void
2eb42952 3322S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype)
5d0301b7 3323{
70cd14a1 3324 I32 mro_changes = 0; /* 1 = method, 2 = isa */
dd69841b 3325
7918f24d
NC
3326 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3327
5d0301b7
NC
3328 if (dtype != SVt_PVGV) {
3329 const char * const name = GvNAME(sstr);
3330 const STRLEN len = GvNAMELEN(sstr);
0d092c36 3331 {
f7877b28
NC
3332 if (dtype >= SVt_PV) {
3333 SvPV_free(dstr);
3334 SvPV_set(dstr, 0);
3335 SvLEN_set(dstr, 0);
3336 SvCUR_set(dstr, 0);
3337 }
0d092c36 3338 SvUPGRADE(dstr, SVt_PVGV);
dedf8e73 3339 (void)SvOK_off(dstr);
2e5b91de
NC
3340 /* FIXME - why are we doing this, then turning it off and on again
3341 below? */
3342 isGV_with_GP_on(dstr);
f7877b28 3343 }
5d0301b7
NC
3344 GvSTASH(dstr) = GvSTASH(sstr);
3345 if (GvSTASH(dstr))
3346 Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
ae8cc45f 3347 gv_name_set((GV *)dstr, name, len, GV_ADD);
5d0301b7
NC
3348 SvFAKE_on(dstr); /* can coerce to non-glob */
3349 }
3350
3351#ifdef GV_UNIQUE_CHECK
3352 if (GvUNIQUE((GV*)dstr)) {
3353 Perl_croak(aTHX_ PL_no_modify);
3354 }
3355#endif
3356
dd69841b
BB
3357 if(GvGP((GV*)sstr)) {
3358 /* If source has method cache entry, clear it */
3359 if(GvCVGEN(sstr)) {
3360 SvREFCNT_dec(GvCV(sstr));
3361 GvCV(sstr) = NULL;
3362 GvCVGEN(sstr) = 0;
3363 }
3364 /* If source has a real method, then a method is
3365 going to change */
3366 else if(GvCV((GV*)sstr)) {
70cd14a1 3367 mro_changes = 1;
dd69841b
BB
3368 }
3369 }
3370
3371 /* If dest already had a real method, that's a change as well */
70cd14a1
CB
3372 if(!mro_changes && GvGP((GV*)dstr) && GvCVu((GV*)dstr)) {
3373 mro_changes = 1;
dd69841b
BB
3374 }
3375
70cd14a1
CB
3376 if(strEQ(GvNAME((GV*)dstr),"ISA"))
3377 mro_changes = 2;
3378
f7877b28 3379 gp_free((GV*)dstr);
2e5b91de 3380 isGV_with_GP_off(dstr);
5d0301b7 3381 (void)SvOK_off(dstr);
2e5b91de 3382 isGV_with_GP_on(dstr);
dedf8e73 3383 GvINTRO_off(dstr); /* one-shot flag */
5d0301b7
NC
3384 GvGP(dstr) = gp_ref(GvGP(sstr));
3385 if (SvTAINTED(sstr))
3386 SvTAINT(dstr);
3387 if (GvIMPORTED(dstr) != GVf_IMPORTED
3388 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3389 {
3390 GvIMPORTED_on(dstr);
3391 }
3392 GvMULTI_on(dstr);
70cd14a1
CB
3393 if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3394 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
5d0301b7
NC
3395 return;
3396}
3397
b8473700 3398static void
7918f24d
NC
3399S_glob_assign_ref(pTHX_ SV *dstr, SV *sstr)
3400{
b8473700
NC
3401 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3402 SV *dref = NULL;
3403 const int intro = GvINTRO(dstr);
2440974c 3404 SV **location;
3386d083 3405 U8 import_flag = 0;
27242d61
NC
3406 const U32 stype = SvTYPE(sref);
3407
7918f24d 3408 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
b8473700
NC
3409
3410#ifdef GV_UNIQUE_CHECK
3411 if (GvUNIQUE((GV*)dstr)) {
3412 Perl_croak(aTHX_ PL_no_modify);
3413 }
3414#endif
3415
3416 if (intro) {
3417 GvINTRO_off(dstr); /* one-shot flag */
3418 GvLINE(dstr) = CopLINE(PL_curcop);
3419 GvEGV(dstr) = (GV*)dstr;
3420 }
3421 GvMULTI_on(dstr);
27242d61 3422 switch (stype) {
b8473700 3423 case SVt_PVCV:
27242d61
NC
3424 location = (SV **) &GvCV(dstr);
3425 import_flag = GVf_IMPORTED_CV;
3426 goto common;
3427 case SVt_PVHV:
3428 location = (SV **) &GvHV(dstr);
3429 import_flag = GVf_IMPORTED_HV;
3430 goto common;
3431 case SVt_PVAV:
3432 location = (SV **) &GvAV(dstr);
3433 import_flag = GVf_IMPORTED_AV;
3434 goto common;
3435 case SVt_PVIO:
3436 location = (SV **) &GvIOp(dstr);
3437 goto common;
3438 case SVt_PVFM:
3439 location = (SV **) &GvFORM(dstr);
3440 default:
3441 location = &GvSV(dstr);
3442 import_flag = GVf_IMPORTED_SV;
3443 common:
b8473700 3444 if (intro) {
27242d61 3445 if (stype == SVt_PVCV) {
5f2fca8a
BB
3446 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (CV*)sref || GvCVGEN(dstr))) {*/
3447 if (GvCVGEN(dstr)) {
27242d61
NC
3448 SvREFCNT_dec(GvCV(dstr));
3449 GvCV(dstr) = NULL;
3450 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
27242d61 3451 }
b8473700 3452 }
27242d61 3453 SAVEGENERICSV(*location);
b8473700
NC
3454 }
3455 else
27242d61 3456 dref = *location;
5f2fca8a 3457 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
27242d61 3458 CV* const cv = (CV*)*location;
b8473700
NC
3459 if (cv) {
3460 if (!GvCVGEN((GV*)dstr) &&
3461 (CvROOT(cv) || CvXSUB(cv)))
3462 {
3463 /* Redefining a sub - warning is mandatory if
3464 it was a const and its value changed. */
3465 if (CvCONST(cv) && CvCONST((CV*)sref)
3466 && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
6f207bd3 3467 NOOP;
b8473700
NC
3468 /* They are 2 constant subroutines generated from
3469 the same constant. This probably means that
3470 they are really the "same" proxy subroutine
3471 instantiated in 2 places. Most likely this is
3472 when a constant is exported twice. Don't warn.
3473 */
3474 }
3475 else if (ckWARN(WARN_REDEFINE)
3476 || (CvCONST(cv)
3477 && (!CvCONST((CV*)sref)
3478 || sv_cmp(cv_const_sv(cv),
3479 cv_const_sv((CV*)sref))))) {
3480 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10edeb5d
JH
3481 (const char *)
3482 (CvCONST(cv)
3483 ? "Constant subroutine %s::%s redefined"
3484 : "Subroutine %s::%s redefined"),
b8473700
NC
3485 HvNAME_get(GvSTASH((GV*)dstr)),
3486 GvENAME((GV*)dstr));
3487 }
3488 }
3489 if (!intro)
cbf82dd0
NC
3490 cv_ckproto_len(cv, (GV*)dstr,
3491 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3492 SvPOK(sref) ? SvCUR(sref) : 0);
b8473700 3493 }
b8473700
NC
3494 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3495 GvASSUMECV_on(dstr);
dd69841b 3496 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
b8473700 3497 }
2440974c 3498 *location = sref;
3386d083
NC
3499 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3500 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3501 GvFLAGS(dstr) |= import_flag;
b8473700
NC
3502 }
3503 break;
3504 }
b37c2d43 3505 SvREFCNT_dec(dref);
b8473700
NC
3506 if (SvTAINTED(sstr))
3507 SvTAINT(dstr);
3508 return;
3509}
3510
8d6d96c1
HS
3511void
3512Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3513{
97aff369 3514 dVAR;
8990e307
LW
3515 register U32 sflags;
3516 register int dtype;
42d0e0b7 3517 register svtype stype;
463ee0b2 3518
7918f24d
NC
3519 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3520
79072805
LW
3521 if (sstr == dstr)
3522 return;
29f4f0ab
NC
3523
3524 if (SvIS_FREED(dstr)) {
3525 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
be2597df 3526 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
29f4f0ab 3527 }
765f542d 3528 SV_CHECK_THINKFIRST_COW_DROP(dstr);
79072805 3529 if (!sstr)
3280af22 3530 sstr = &PL_sv_undef;
29f4f0ab 3531 if (SvIS_FREED(sstr)) {
6c9570dc
MHM
3532 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3533 (void*)sstr, (void*)dstr);
29f4f0ab 3534 }
8990e307
LW
3535 stype = SvTYPE(sstr);
3536 dtype = SvTYPE(dstr);
79072805 3537
52944de8 3538 (void)SvAMAGIC_off(dstr);
7a5fa8a2 3539 if ( SvVOK(dstr) )
ece467f9
JP
3540 {
3541 /* need to nuke the magic */
3542 mg_free(dstr);
3543 SvRMAGICAL_off(dstr);
3544 }
9e7bc3e8 3545
463ee0b2 3546 /* There's a lot of redundancy below but we're going for speed here */
79072805 3547
8990e307 3548 switch (stype) {
79072805 3549 case SVt_NULL:
aece5585 3550 undef_sstr:
20408e3c
GS
3551 if (dtype != SVt_PVGV) {
3552 (void)SvOK_off(dstr);
3553 return;
3554 }
3555 break;
463ee0b2 3556 case SVt_IV:
aece5585
GA
3557 if (SvIOK(sstr)) {
3558 switch (dtype) {
3559 case SVt_NULL:
8990e307 3560 sv_upgrade(dstr, SVt_IV);
aece5585
GA
3561 break;
3562 case SVt_NV:
aece5585 3563 case SVt_PV:
a0d0e21e 3564 sv_upgrade(dstr, SVt_PVIV);
aece5585 3565 break;
010be86b
NC
3566 case SVt_PVGV:
3567 goto end_of_first_switch;
aece5585
GA
3568 }
3569 (void)SvIOK_only(dstr);
45977657 3570 SvIV_set(dstr, SvIVX(sstr));
25da4f38
IZ
3571 if (SvIsUV(sstr))
3572 SvIsUV_on(dstr);
37c25af0
NC
3573 /* SvTAINTED can only be true if the SV has taint magic, which in
3574 turn means that the SV type is PVMG (or greater). This is the
3575 case statement for SVt_IV, so this cannot be true (whatever gcov
3576 may say). */
3577 assert(!SvTAINTED(sstr));
aece5585 3578 return;
8990e307 3579 }
4df7f6af
NC
3580 if (!SvROK(sstr))
3581 goto undef_sstr;
3582 if (dtype < SVt_PV && dtype != SVt_IV)
3583 sv_upgrade(dstr, SVt_IV);
3584 break;
aece5585 3585
463ee0b2 3586 case SVt_NV:
aece5585
GA
3587 if (SvNOK(sstr)) {
3588 switch (dtype) {
3589 case SVt_NULL:
3590 case SVt_IV:
8990e307 3591 sv_upgrade(dstr, SVt_NV);
aece5585 3592 break;
aece5585
GA
3593 case SVt_PV:
3594 case SVt_PVIV:
a0d0e21e 3595 sv_upgrade(dstr, SVt_PVNV);
aece5585 3596 break;
010be86b
NC
3597 case SVt_PVGV:
3598 goto end_of_first_switch;
aece5585 3599 }
9d6ce603 3600 SvNV_set(dstr, SvNVX(sstr));
aece5585 3601 (void)SvNOK_only(dstr);
37c25af0
NC
3602 /* SvTAINTED can only be true if the SV has taint magic, which in
3603 turn means that the SV type is PVMG (or greater). This is the
3604 case statement for SVt_NV, so this cannot be true (whatever gcov
3605 may say). */
3606 assert(!SvTAINTED(sstr));
aece5585 3607 return;
8990e307 3608 }
aece5585
GA
3609 goto undef_sstr;
3610
fc36a67e 3611 case SVt_PVFM:
f8c7b90f 3612#ifdef PERL_OLD_COPY_ON_WRITE
d89fc664
NC
3613 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3614 if (dtype < SVt_PVIV)
3615 sv_upgrade(dstr, SVt_PVIV);
3616 break;
3617 }
3618 /* Fall through */
3619#endif
fd44068c 3620 case SVt_REGEXP:
d89fc664 3621 case SVt_PV:
8990e307 3622 if (dtype < SVt_PV)
463ee0b2 3623 sv_upgrade(dstr, SVt_PV);
463ee0b2
LW
3624 break;
3625 case SVt_PVIV:
8990e307 3626 if (dtype < SVt_PVIV)
463ee0b2 3627 sv_upgrade(dstr, SVt_PVIV);
463ee0b2
LW
3628 break;
3629 case SVt_PVNV:
8990e307 3630 if (dtype < SVt_PVNV)
463ee0b2 3631 sv_upgrade(dstr, SVt_PVNV);
463ee0b2 3632 break;
489f7bfe 3633 default:
a3b680e6
AL
3634 {
3635 const char * const type = sv_reftype(sstr,0);
533c011a 3636 if (PL_op)
a3b680e6 3637 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
4633a7c4 3638 else
a3b680e6
AL
3639 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3640 }
4633a7c4
LW
3641 break;
3642
cecf5685 3643 /* case SVt_BIND: */
39cb70dc 3644 case SVt_PVLV:
79072805 3645 case SVt_PVGV:
cecf5685 3646 if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
d4c19fe8 3647 glob_assign_glob(dstr, sstr, dtype);
b8c701c1 3648 return;
79072805 3649 }
cecf5685 3650 /* SvVALID means that this PVGV is playing at being an FBM. */
5f66b61c 3651 /*FALLTHROUGH*/
79072805 3652
489f7bfe