This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Adopt Makefile macros MINIPERL_EXE and MINIPERL from VMS, to reduce copy&paste.
[perl5.git] / sv.c
CommitLineData
a0d0e21e 1/* sv.c
79072805 2 *
1129b882 3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
83706693
RGS
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5 * and others
79072805
LW
6 *
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
9 *
4ac71550
TC
10 */
11
12/*
13 * 'I wonder what the Entish is for "yes" and "no",' he thought.
14 * --Pippin
15 *
16 * [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17 */
18
19/*
645c22ef
DM
20 *
21 *
5e045b90
AMS
22 * This file contains the code that creates, manipulates and destroys
23 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24 * structure of an SV, so their creation and destruction is handled
25 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26 * level functions (eg. substr, split, join) for each of the types are
27 * in the pp*.c files.
79072805
LW
28 */
29
30#include "EXTERN.h"
864dbfa3 31#define PERL_IN_SV_C
79072805 32#include "perl.h"
d2f185dc 33#include "regcomp.h"
79072805 34
51371543 35#define FCALL *f
2c5424a7 36
2f8ed50e
OS
37#ifdef __Lynx__
38/* Missing proto on LynxOS */
39 char *gconvert(double, int, int, char *);
40#endif
41
e23c8137 42#ifdef PERL_UTF8_CACHE_ASSERT
ab455f60 43/* if adding more checks watch out for the following tests:
e23c8137
JH
44 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
45 * lib/utf8.t lib/Unicode/Collate/t/index.t
46 * --jhi
47 */
6f207bd3 48# define ASSERT_UTF8_CACHE(cache) \
ab455f60
NC
49 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
50 assert((cache)[2] <= (cache)[3]); \
51 assert((cache)[3] <= (cache)[1]);} \
52 } STMT_END
e23c8137 53#else
6f207bd3 54# define ASSERT_UTF8_CACHE(cache) NOOP
e23c8137
JH
55#endif
56
f8c7b90f 57#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 58#define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
607fa7f2 59#define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
b5ccf5f2 60/* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
765f542d 61 on-write. */
765f542d 62#endif
645c22ef
DM
63
64/* ============================================================================
65
66=head1 Allocation and deallocation of SVs.
67
d2a0f284
JC
68An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
69sv, av, hv...) contains type and reference count information, and for
70many types, a pointer to the body (struct xrv, xpv, xpviv...), which
71contains fields specific to each type. Some types store all they need
72in the head, so don't have a body.
73
74In all but the most memory-paranoid configuations (ex: PURIFY), heads
75and bodies are allocated out of arenas, which by default are
76approximately 4K chunks of memory parcelled up into N heads or bodies.
93e68bfb
JC
77Sv-bodies are allocated by their sv-type, guaranteeing size
78consistency needed to allocate safely from arrays.
79
d2a0f284
JC
80For SV-heads, the first slot in each arena is reserved, and holds a
81link to the next arena, some flags, and a note of the number of slots.
82Snaked through each arena chain is a linked list of free items; when
83this becomes empty, an extra arena is allocated and divided up into N
84items which are threaded into the free list.
85
86SV-bodies are similar, but they use arena-sets by default, which
87separate the link and info from the arena itself, and reclaim the 1st
88slot in the arena. SV-bodies are further described later.
645c22ef
DM
89
90The following global variables are associated with arenas:
91
92 PL_sv_arenaroot pointer to list of SV arenas
93 PL_sv_root pointer to list of free SV structures
94
d2a0f284
JC
95 PL_body_arenas head of linked-list of body arenas
96 PL_body_roots[] array of pointers to list of free bodies of svtype
97 arrays are indexed by the svtype needed
93e68bfb 98
d2a0f284
JC
99A few special SV heads are not allocated from an arena, but are
100instead directly created in the interpreter structure, eg PL_sv_undef.
93e68bfb
JC
101The size of arenas can be changed from the default by setting
102PERL_ARENA_SIZE appropriately at compile time.
645c22ef
DM
103
104The SV arena serves the secondary purpose of allowing still-live SVs
105to be located and destroyed during final cleanup.
106
107At the lowest level, the macros new_SV() and del_SV() grab and free
108an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
109to return the SV to the free list with error checking.) new_SV() calls
110more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
111SVs in the free list have their SvTYPE field set to all ones.
112
ff276b08 113At the time of very final cleanup, sv_free_arenas() is called from
645c22ef 114perl_destruct() to physically free all the arenas allocated since the
6a93a7e5 115start of the interpreter.
645c22ef 116
645c22ef
DM
117The function visit() scans the SV arenas list, and calls a specified
118function for each SV it finds which is still live - ie which has an SvTYPE
119other than all 1's, and a non-zero SvREFCNT. visit() is used by the
120following functions (specified as [function that calls visit()] / [function
121called by visit() for each SV]):
122
123 sv_report_used() / do_report_used()
f2524eef 124 dump all remaining SVs (debugging aid)
645c22ef
DM
125
126 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
127 Attempt to free all objects pointed to by RVs,
128 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
129 try to do the same for all objects indirectly
130 referenced by typeglobs too. Called once from
131 perl_destruct(), prior to calling sv_clean_all()
132 below.
133
134 sv_clean_all() / do_clean_all()
135 SvREFCNT_dec(sv) each remaining SV, possibly
136 triggering an sv_free(). It also sets the
137 SVf_BREAK flag on the SV to indicate that the
138 refcnt has been artificially lowered, and thus
139 stopping sv_free() from giving spurious warnings
140 about SVs which unexpectedly have a refcnt
141 of zero. called repeatedly from perl_destruct()
142 until there are no SVs left.
143
93e68bfb 144=head2 Arena allocator API Summary
645c22ef
DM
145
146Private API to rest of sv.c
147
148 new_SV(), del_SV(),
149
150 new_XIV(), del_XIV(),
151 new_XNV(), del_XNV(),
152 etc
153
154Public API:
155
8cf8f3d1 156 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
645c22ef 157
645c22ef
DM
158=cut
159
3e8320cc 160 * ========================================================================= */
645c22ef 161
4561caa4
CS
162/*
163 * "A time to plant, and a time to uproot what was planted..."
164 */
165
77354fb4 166void
de37a194 167Perl_offer_nice_chunk(pTHX_ void *const chunk, const U32 chunk_size)
77354fb4 168{
97aff369 169 dVAR;
77354fb4
NC
170 void *new_chunk;
171 U32 new_chunk_size;
7918f24d
NC
172
173 PERL_ARGS_ASSERT_OFFER_NICE_CHUNK;
174
77354fb4
NC
175 new_chunk = (void *)(chunk);
176 new_chunk_size = (chunk_size);
177 if (new_chunk_size > PL_nice_chunk_size) {
178 Safefree(PL_nice_chunk);
179 PL_nice_chunk = (char *) new_chunk;
180 PL_nice_chunk_size = new_chunk_size;
181 } else {
182 Safefree(chunk);
183 }
77354fb4 184}
cac9b346 185
d7a2c63c
MHM
186#ifdef PERL_MEM_LOG
187# define MEM_LOG_NEW_SV(sv, file, line, func) \
188 Perl_mem_log_new_sv(sv, file, line, func)
189# define MEM_LOG_DEL_SV(sv, file, line, func) \
190 Perl_mem_log_del_sv(sv, file, line, func)
191#else
192# define MEM_LOG_NEW_SV(sv, file, line, func) NOOP
193# define MEM_LOG_DEL_SV(sv, file, line, func) NOOP
194#endif
195
fd0854ff 196#ifdef DEBUG_LEAKING_SCALARS
22162ca8 197# define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
d7a2c63c
MHM
198# define DEBUG_SV_SERIAL(sv) \
199 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n", \
200 PTR2UV(sv), (long)(sv)->sv_debug_serial))
fd0854ff
DM
201#else
202# define FREE_SV_DEBUG_FILE(sv)
d7a2c63c 203# define DEBUG_SV_SERIAL(sv) NOOP
fd0854ff
DM
204#endif
205
48614a46
NC
206#ifdef PERL_POISON
207# define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
daba3364 208# define SvARENA_CHAIN_SET(sv,val) (sv)->sv_u.svu_rv = MUTABLE_SV((val))
48614a46
NC
209/* Whilst I'd love to do this, it seems that things like to check on
210 unreferenced scalars
7e337ee0 211# define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
48614a46 212*/
7e337ee0
JH
213# define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
214 PoisonNew(&SvREFCNT(sv), 1, U32)
48614a46
NC
215#else
216# define SvARENA_CHAIN(sv) SvANY(sv)
3eef1deb 217# define SvARENA_CHAIN_SET(sv,val) SvANY(sv) = (void *)(val)
48614a46
NC
218# define POSION_SV_HEAD(sv)
219#endif
220
990198f0
DM
221/* Mark an SV head as unused, and add to free list.
222 *
223 * If SVf_BREAK is set, skip adding it to the free list, as this SV had
224 * its refcount artificially decremented during global destruction, so
225 * there may be dangling pointers to it. The last thing we want in that
226 * case is for it to be reused. */
227
053fc874
GS
228#define plant_SV(p) \
229 STMT_START { \
990198f0 230 const U32 old_flags = SvFLAGS(p); \
d7a2c63c
MHM
231 MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__); \
232 DEBUG_SV_SERIAL(p); \
fd0854ff 233 FREE_SV_DEBUG_FILE(p); \
48614a46 234 POSION_SV_HEAD(p); \
053fc874 235 SvFLAGS(p) = SVTYPEMASK; \
990198f0 236 if (!(old_flags & SVf_BREAK)) { \
3eef1deb 237 SvARENA_CHAIN_SET(p, PL_sv_root); \
990198f0
DM
238 PL_sv_root = (p); \
239 } \
053fc874
GS
240 --PL_sv_count; \
241 } STMT_END
a0d0e21e 242
053fc874
GS
243#define uproot_SV(p) \
244 STMT_START { \
245 (p) = PL_sv_root; \
daba3364 246 PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p)); \
053fc874
GS
247 ++PL_sv_count; \
248 } STMT_END
249
645c22ef 250
cac9b346
NC
251/* make some more SVs by adding another arena */
252
cac9b346
NC
253STATIC SV*
254S_more_sv(pTHX)
255{
97aff369 256 dVAR;
cac9b346
NC
257 SV* sv;
258
259 if (PL_nice_chunk) {
260 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
bd61b366 261 PL_nice_chunk = NULL;
cac9b346
NC
262 PL_nice_chunk_size = 0;
263 }
264 else {
265 char *chunk; /* must use New here to match call to */
d2a0f284 266 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
2e7ed132 267 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
cac9b346
NC
268 }
269 uproot_SV(sv);
270 return sv;
271}
272
645c22ef
DM
273/* new_SV(): return a new, empty SV head */
274
eba0f806
DM
275#ifdef DEBUG_LEAKING_SCALARS
276/* provide a real function for a debugger to play with */
277STATIC SV*
d7a2c63c 278S_new_SV(pTHX_ const char *file, int line, const char *func)
eba0f806
DM
279{
280 SV* sv;
281
eba0f806
DM
282 if (PL_sv_root)
283 uproot_SV(sv);
284 else
cac9b346 285 sv = S_more_sv(aTHX);
eba0f806
DM
286 SvANY(sv) = 0;
287 SvREFCNT(sv) = 1;
288 SvFLAGS(sv) = 0;
fd0854ff 289 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
e385c3bf
DM
290 sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
291 ? PL_parser->copline
292 : PL_curcop
f24aceb1
DM
293 ? CopLINE(PL_curcop)
294 : 0
e385c3bf 295 );
fd0854ff
DM
296 sv->sv_debug_inpad = 0;
297 sv->sv_debug_cloned = 0;
fd0854ff 298 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
d7a2c63c
MHM
299
300 sv->sv_debug_serial = PL_sv_serial++;
301
302 MEM_LOG_NEW_SV(sv, file, line, func);
303 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
304 PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
305
eba0f806
DM
306 return sv;
307}
d7a2c63c 308# define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
eba0f806
DM
309
310#else
311# define new_SV(p) \
053fc874 312 STMT_START { \
053fc874
GS
313 if (PL_sv_root) \
314 uproot_SV(p); \
315 else \
cac9b346 316 (p) = S_more_sv(aTHX); \
053fc874
GS
317 SvANY(p) = 0; \
318 SvREFCNT(p) = 1; \
319 SvFLAGS(p) = 0; \
d7a2c63c 320 MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__); \
053fc874 321 } STMT_END
eba0f806 322#endif
463ee0b2 323
645c22ef
DM
324
325/* del_SV(): return an empty SV head to the free list */
326
a0d0e21e 327#ifdef DEBUGGING
4561caa4 328
053fc874
GS
329#define del_SV(p) \
330 STMT_START { \
aea4f609 331 if (DEBUG_D_TEST) \
053fc874
GS
332 del_sv(p); \
333 else \
334 plant_SV(p); \
053fc874 335 } STMT_END
a0d0e21e 336
76e3520e 337STATIC void
cea2e8a9 338S_del_sv(pTHX_ SV *p)
463ee0b2 339{
97aff369 340 dVAR;
7918f24d
NC
341
342 PERL_ARGS_ASSERT_DEL_SV;
343
aea4f609 344 if (DEBUG_D_TEST) {
4633a7c4 345 SV* sva;
a3b680e6 346 bool ok = 0;
daba3364 347 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
53c1dcc0
AL
348 const SV * const sv = sva + 1;
349 const SV * const svend = &sva[SvREFCNT(sva)];
c0ff570e 350 if (p >= sv && p < svend) {
a0d0e21e 351 ok = 1;
c0ff570e
NC
352 break;
353 }
a0d0e21e
LW
354 }
355 if (!ok) {
0453d815 356 if (ckWARN_d(WARN_INTERNAL))
9014280d 357 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc
SB
358 "Attempt to free non-arena SV: 0x%"UVxf
359 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
a0d0e21e
LW
360 return;
361 }
362 }
4561caa4 363 plant_SV(p);
463ee0b2 364}
a0d0e21e 365
4561caa4
CS
366#else /* ! DEBUGGING */
367
368#define del_SV(p) plant_SV(p)
369
370#endif /* DEBUGGING */
463ee0b2 371
645c22ef
DM
372
373/*
ccfc67b7
JH
374=head1 SV Manipulation Functions
375
645c22ef
DM
376=for apidoc sv_add_arena
377
378Given a chunk of memory, link it to the head of the list of arenas,
379and split it into a list of free SVs.
380
381=cut
382*/
383
d2bd4e7f
NC
384static void
385S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
463ee0b2 386{
97aff369 387 dVAR;
daba3364 388 SV *const sva = MUTABLE_SV(ptr);
463ee0b2
LW
389 register SV* sv;
390 register SV* svend;
4633a7c4 391
7918f24d
NC
392 PERL_ARGS_ASSERT_SV_ADD_ARENA;
393
4633a7c4 394 /* The first SV in an arena isn't an SV. */
3280af22 395 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
4633a7c4
LW
396 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
397 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
398
3280af22
NIS
399 PL_sv_arenaroot = sva;
400 PL_sv_root = sva + 1;
4633a7c4
LW
401
402 svend = &sva[SvREFCNT(sva) - 1];
403 sv = sva + 1;
463ee0b2 404 while (sv < svend) {
3eef1deb 405 SvARENA_CHAIN_SET(sv, (sv + 1));
03e36789 406#ifdef DEBUGGING
978b032e 407 SvREFCNT(sv) = 0;
03e36789 408#endif
4b69cbe3 409 /* Must always set typemask because it's always checked in on cleanup
03e36789 410 when the arenas are walked looking for objects. */
8990e307 411 SvFLAGS(sv) = SVTYPEMASK;
463ee0b2
LW
412 sv++;
413 }
3eef1deb 414 SvARENA_CHAIN_SET(sv, 0);
03e36789
NC
415#ifdef DEBUGGING
416 SvREFCNT(sv) = 0;
417#endif
4633a7c4
LW
418 SvFLAGS(sv) = SVTYPEMASK;
419}
420
055972dc
DM
421/* visit(): call the named function for each non-free SV in the arenas
422 * whose flags field matches the flags/mask args. */
645c22ef 423
5226ed68 424STATIC I32
de37a194 425S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
8990e307 426{
97aff369 427 dVAR;
4633a7c4 428 SV* sva;
5226ed68 429 I32 visited = 0;
8990e307 430
7918f24d
NC
431 PERL_ARGS_ASSERT_VISIT;
432
daba3364 433 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
53c1dcc0 434 register const SV * const svend = &sva[SvREFCNT(sva)];
a3b680e6 435 register SV* sv;
4561caa4 436 for (sv = sva + 1; sv < svend; ++sv) {
055972dc
DM
437 if (SvTYPE(sv) != SVTYPEMASK
438 && (sv->sv_flags & mask) == flags
439 && SvREFCNT(sv))
440 {
acfe0abc 441 (FCALL)(aTHX_ sv);
5226ed68
JH
442 ++visited;
443 }
8990e307
LW
444 }
445 }
5226ed68 446 return visited;
8990e307
LW
447}
448
758a08c3
JH
449#ifdef DEBUGGING
450
645c22ef
DM
451/* called by sv_report_used() for each live SV */
452
453static void
5fa45a31 454do_report_used(pTHX_ SV *const sv)
645c22ef
DM
455{
456 if (SvTYPE(sv) != SVTYPEMASK) {
457 PerlIO_printf(Perl_debug_log, "****\n");
458 sv_dump(sv);
459 }
460}
758a08c3 461#endif
645c22ef
DM
462
463/*
464=for apidoc sv_report_used
465
466Dump the contents of all SVs not yet freed. (Debugging aid).
467
468=cut
469*/
470
8990e307 471void
864dbfa3 472Perl_sv_report_used(pTHX)
4561caa4 473{
ff270d3a 474#ifdef DEBUGGING
055972dc 475 visit(do_report_used, 0, 0);
96a5add6
AL
476#else
477 PERL_UNUSED_CONTEXT;
ff270d3a 478#endif
4561caa4
CS
479}
480
645c22ef
DM
481/* called by sv_clean_objs() for each live SV */
482
483static void
de37a194 484do_clean_objs(pTHX_ SV *const ref)
645c22ef 485{
97aff369 486 dVAR;
ea724faa
NC
487 assert (SvROK(ref));
488 {
823a54a3
AL
489 SV * const target = SvRV(ref);
490 if (SvOBJECT(target)) {
491 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
492 if (SvWEAKREF(ref)) {
493 sv_del_backref(target, ref);
494 SvWEAKREF_off(ref);
495 SvRV_set(ref, NULL);
496 } else {
497 SvROK_off(ref);
498 SvRV_set(ref, NULL);
499 SvREFCNT_dec(target);
500 }
645c22ef
DM
501 }
502 }
503
504 /* XXX Might want to check arrays, etc. */
505}
506
507/* called by sv_clean_objs() for each live SV */
508
509#ifndef DISABLE_DESTRUCTOR_KLUDGE
510static void
f30de749 511do_clean_named_objs(pTHX_ SV *const sv)
645c22ef 512{
97aff369 513 dVAR;
ea724faa 514 assert(SvTYPE(sv) == SVt_PVGV);
d011219a
NC
515 assert(isGV_with_GP(sv));
516 if (GvGP(sv)) {
c69033f2
NC
517 if ((
518#ifdef PERL_DONT_CREATE_GVSV
519 GvSV(sv) &&
520#endif
521 SvOBJECT(GvSV(sv))) ||
645c22ef
DM
522 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
523 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9c12f1e5
RGS
524 /* In certain rare cases GvIOp(sv) can be NULL, which would make SvOBJECT(GvIO(sv)) dereference NULL. */
525 (GvIO(sv) ? (SvFLAGS(GvIOp(sv)) & SVs_OBJECT) : 0) ||
645c22ef
DM
526 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
527 {
528 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
ec5f3c78 529 SvFLAGS(sv) |= SVf_BREAK;
645c22ef
DM
530 SvREFCNT_dec(sv);
531 }
532 }
533}
534#endif
535
536/*
537=for apidoc sv_clean_objs
538
539Attempt to destroy all objects not yet freed
540
541=cut
542*/
543
4561caa4 544void
864dbfa3 545Perl_sv_clean_objs(pTHX)
4561caa4 546{
97aff369 547 dVAR;
3280af22 548 PL_in_clean_objs = TRUE;
055972dc 549 visit(do_clean_objs, SVf_ROK, SVf_ROK);
4561caa4 550#ifndef DISABLE_DESTRUCTOR_KLUDGE
2d0f3c12 551 /* some barnacles may yet remain, clinging to typeglobs */
d011219a 552 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
4561caa4 553#endif
3280af22 554 PL_in_clean_objs = FALSE;
4561caa4
CS
555}
556
645c22ef
DM
557/* called by sv_clean_all() for each live SV */
558
559static void
de37a194 560do_clean_all(pTHX_ SV *const sv)
645c22ef 561{
97aff369 562 dVAR;
daba3364 563 if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
cddfcddc 564 /* don't clean pid table and strtab */
d17ea597 565 return;
cddfcddc 566 }
645c22ef
DM
567 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
568 SvFLAGS(sv) |= SVf_BREAK;
569 SvREFCNT_dec(sv);
570}
571
572/*
573=for apidoc sv_clean_all
574
575Decrement the refcnt of each remaining SV, possibly triggering a
576cleanup. This function may have to be called multiple times to free
ff276b08 577SVs which are in complex self-referential hierarchies.
645c22ef
DM
578
579=cut
580*/
581
5226ed68 582I32
864dbfa3 583Perl_sv_clean_all(pTHX)
8990e307 584{
97aff369 585 dVAR;
5226ed68 586 I32 cleaned;
3280af22 587 PL_in_clean_all = TRUE;
055972dc 588 cleaned = visit(do_clean_all, 0,0);
3280af22 589 PL_in_clean_all = FALSE;
5226ed68 590 return cleaned;
8990e307 591}
463ee0b2 592
5e258f8c
JC
593/*
594 ARENASETS: a meta-arena implementation which separates arena-info
595 into struct arena_set, which contains an array of struct
596 arena_descs, each holding info for a single arena. By separating
597 the meta-info from the arena, we recover the 1st slot, formerly
598 borrowed for list management. The arena_set is about the size of an
39244528 599 arena, avoiding the needless malloc overhead of a naive linked-list.
5e258f8c
JC
600
601 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
602 memory in the last arena-set (1/2 on average). In trade, we get
603 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
d2a0f284 604 smaller types). The recovery of the wasted space allows use of
e15dad31
JC
605 small arenas for large, rare body types, by changing array* fields
606 in body_details_by_type[] below.
5e258f8c 607*/
5e258f8c 608struct arena_desc {
398c677b
NC
609 char *arena; /* the raw storage, allocated aligned */
610 size_t size; /* its size ~4k typ */
0a848332 611 U32 misc; /* type, and in future other things. */
5e258f8c
JC
612};
613
e6148039
NC
614struct arena_set;
615
616/* Get the maximum number of elements in set[] such that struct arena_set
e15dad31 617 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
e6148039
NC
618 therefore likely to be 1 aligned memory page. */
619
620#define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
621 - 2 * sizeof(int)) / sizeof (struct arena_desc))
5e258f8c
JC
622
623struct arena_set {
624 struct arena_set* next;
0a848332
NC
625 unsigned int set_size; /* ie ARENAS_PER_SET */
626 unsigned int curr; /* index of next available arena-desc */
5e258f8c
JC
627 struct arena_desc set[ARENAS_PER_SET];
628};
629
645c22ef
DM
630/*
631=for apidoc sv_free_arenas
632
633Deallocate the memory used by all arenas. Note that all the individual SV
634heads and bodies within the arenas must already have been freed.
635
636=cut
637*/
4633a7c4 638void
864dbfa3 639Perl_sv_free_arenas(pTHX)
4633a7c4 640{
97aff369 641 dVAR;
4633a7c4
LW
642 SV* sva;
643 SV* svanext;
0a848332 644 unsigned int i;
4633a7c4
LW
645
646 /* Free arenas here, but be careful about fake ones. (We assume
647 contiguity of the fake ones with the corresponding real ones.) */
648
3280af22 649 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
daba3364 650 svanext = MUTABLE_SV(SvANY(sva));
4633a7c4 651 while (svanext && SvFAKE(svanext))
daba3364 652 svanext = MUTABLE_SV(SvANY(svanext));
4633a7c4
LW
653
654 if (!SvFAKE(sva))
1df70142 655 Safefree(sva);
4633a7c4 656 }
93e68bfb 657
5e258f8c 658 {
0a848332
NC
659 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
660
661 while (aroot) {
662 struct arena_set *current = aroot;
663 i = aroot->curr;
664 while (i--) {
5e258f8c
JC
665 assert(aroot->set[i].arena);
666 Safefree(aroot->set[i].arena);
667 }
0a848332
NC
668 aroot = aroot->next;
669 Safefree(current);
5e258f8c
JC
670 }
671 }
dc8220bf 672 PL_body_arenas = 0;
fdda85ca 673
0a848332
NC
674 i = PERL_ARENA_ROOTS_SIZE;
675 while (i--)
93e68bfb 676 PL_body_roots[i] = 0;
93e68bfb 677
43c5f42d 678 Safefree(PL_nice_chunk);
bd61b366 679 PL_nice_chunk = NULL;
3280af22
NIS
680 PL_nice_chunk_size = 0;
681 PL_sv_arenaroot = 0;
682 PL_sv_root = 0;
4633a7c4
LW
683}
684
bd81e77b
NC
685/*
686 Here are mid-level routines that manage the allocation of bodies out
687 of the various arenas. There are 5 kinds of arenas:
29489e7c 688
bd81e77b
NC
689 1. SV-head arenas, which are discussed and handled above
690 2. regular body arenas
691 3. arenas for reduced-size bodies
692 4. Hash-Entry arenas
693 5. pte arenas (thread related)
29489e7c 694
bd81e77b
NC
695 Arena types 2 & 3 are chained by body-type off an array of
696 arena-root pointers, which is indexed by svtype. Some of the
697 larger/less used body types are malloced singly, since a large
698 unused block of them is wasteful. Also, several svtypes dont have
699 bodies; the data fits into the sv-head itself. The arena-root
700 pointer thus has a few unused root-pointers (which may be hijacked
701 later for arena types 4,5)
29489e7c 702
bd81e77b
NC
703 3 differs from 2 as an optimization; some body types have several
704 unused fields in the front of the structure (which are kept in-place
705 for consistency). These bodies can be allocated in smaller chunks,
706 because the leading fields arent accessed. Pointers to such bodies
707 are decremented to point at the unused 'ghost' memory, knowing that
708 the pointers are used with offsets to the real memory.
29489e7c 709
bd81e77b
NC
710 HE, HEK arenas are managed separately, with separate code, but may
711 be merge-able later..
712
713 PTE arenas are not sv-bodies, but they share these mid-level
714 mechanics, so are considered here. The new mid-level mechanics rely
715 on the sv_type of the body being allocated, so we just reserve one
716 of the unused body-slots for PTEs, then use it in those (2) PTE
717 contexts below (line ~10k)
718*/
719
bd26d9a3 720/* get_arena(size): this creates custom-sized arenas
5e258f8c
JC
721 TBD: export properly for hv.c: S_more_he().
722*/
723void*
de37a194 724Perl_get_arena(pTHX_ const size_t arena_size, const U32 misc)
5e258f8c 725{
7a89be66 726 dVAR;
5e258f8c 727 struct arena_desc* adesc;
39244528 728 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
0a848332 729 unsigned int curr;
5e258f8c 730
476a1e16
JC
731 /* shouldnt need this
732 if (!arena_size) arena_size = PERL_ARENA_SIZE;
733 */
5e258f8c
JC
734
735 /* may need new arena-set to hold new arena */
39244528
NC
736 if (!aroot || aroot->curr >= aroot->set_size) {
737 struct arena_set *newroot;
5e258f8c
JC
738 Newxz(newroot, 1, struct arena_set);
739 newroot->set_size = ARENAS_PER_SET;
39244528
NC
740 newroot->next = aroot;
741 aroot = newroot;
742 PL_body_arenas = (void *) newroot;
52944de8 743 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
5e258f8c
JC
744 }
745
746 /* ok, now have arena-set with at least 1 empty/available arena-desc */
39244528
NC
747 curr = aroot->curr++;
748 adesc = &(aroot->set[curr]);
5e258f8c
JC
749 assert(!adesc->arena);
750
89086707 751 Newx(adesc->arena, arena_size, char);
5e258f8c 752 adesc->size = arena_size;
0a848332 753 adesc->misc = misc;
d67b3c53
JH
754 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n",
755 curr, (void*)adesc->arena, (UV)arena_size));
5e258f8c
JC
756
757 return adesc->arena;
5e258f8c
JC
758}
759
53c1dcc0 760
bd81e77b 761/* return a thing to the free list */
29489e7c 762
bd81e77b
NC
763#define del_body(thing, root) \
764 STMT_START { \
00b6aa41 765 void ** const thing_copy = (void **)thing;\
bd81e77b
NC
766 *thing_copy = *root; \
767 *root = (void*)thing_copy; \
bd81e77b 768 } STMT_END
29489e7c 769
bd81e77b 770/*
d2a0f284
JC
771
772=head1 SV-Body Allocation
773
774Allocation of SV-bodies is similar to SV-heads, differing as follows;
775the allocation mechanism is used for many body types, so is somewhat
776more complicated, it uses arena-sets, and has no need for still-live
777SV detection.
778
779At the outermost level, (new|del)_X*V macros return bodies of the
780appropriate type. These macros call either (new|del)_body_type or
781(new|del)_body_allocated macro pairs, depending on specifics of the
782type. Most body types use the former pair, the latter pair is used to
783allocate body types with "ghost fields".
784
785"ghost fields" are fields that are unused in certain types, and
69ba284b 786consequently don't need to actually exist. They are declared because
d2a0f284
JC
787they're part of a "base type", which allows use of functions as
788methods. The simplest examples are AVs and HVs, 2 aggregate types
789which don't use the fields which support SCALAR semantics.
790
69ba284b 791For these types, the arenas are carved up into appropriately sized
d2a0f284
JC
792chunks, we thus avoid wasted memory for those unaccessed members.
793When bodies are allocated, we adjust the pointer back in memory by the
69ba284b 794size of the part not allocated, so it's as if we allocated the full
d2a0f284
JC
795structure. (But things will all go boom if you write to the part that
796is "not there", because you'll be overwriting the last members of the
797preceding structure in memory.)
798
69ba284b
NC
799We calculate the correction using the STRUCT_OFFSET macro on the first
800member present. If the allocated structure is smaller (no initial NV
801actually allocated) then the net effect is to subtract the size of the NV
802from the pointer, to return a new pointer as if an initial NV were actually
803allocated. (We were using structures named *_allocated for this, but
804this turned out to be a subtle bug, because a structure without an NV
805could have a lower alignment constraint, but the compiler is allowed to
806optimised accesses based on the alignment constraint of the actual pointer
807to the full structure, for example, using a single 64 bit load instruction
808because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
d2a0f284
JC
809
810This is the same trick as was used for NV and IV bodies. Ironically it
811doesn't need to be used for NV bodies any more, because NV is now at
812the start of the structure. IV bodies don't need it either, because
813they are no longer allocated.
814
815In turn, the new_body_* allocators call S_new_body(), which invokes
816new_body_inline macro, which takes a lock, and takes a body off the
817linked list at PL_body_roots[sv_type], calling S_more_bodies() if
818necessary to refresh an empty list. Then the lock is released, and
819the body is returned.
820
821S_more_bodies calls get_arena(), and carves it up into an array of N
822bodies, which it strings into a linked list. It looks up arena-size
823and body-size from the body_details table described below, thus
824supporting the multiple body-types.
825
826If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
827the (new|del)_X*V macros are mapped directly to malloc/free.
828
829*/
830
831/*
832
833For each sv-type, struct body_details bodies_by_type[] carries
834parameters which control these aspects of SV handling:
835
836Arena_size determines whether arenas are used for this body type, and if
837so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
838zero, forcing individual mallocs and frees.
839
840Body_size determines how big a body is, and therefore how many fit into
841each arena. Offset carries the body-pointer adjustment needed for
69ba284b 842"ghost fields", and is used in *_allocated macros.
d2a0f284
JC
843
844But its main purpose is to parameterize info needed in
845Perl_sv_upgrade(). The info here dramatically simplifies the function
69ba284b 846vs the implementation in 5.8.8, making it table-driven. All fields
d2a0f284
JC
847are used for this, except for arena_size.
848
849For the sv-types that have no bodies, arenas are not used, so those
850PL_body_roots[sv_type] are unused, and can be overloaded. In
851something of a special case, SVt_NULL is borrowed for HE arenas;
c6f8b1d0 852PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
d2a0f284 853bodies_by_type[SVt_NULL] slot is not used, as the table is not
c6f8b1d0 854available in hv.c.
d2a0f284 855
c6f8b1d0
JC
856PTEs also use arenas, but are never seen in Perl_sv_upgrade. Nonetheless,
857they get their own slot in bodies_by_type[PTE_SVSLOT =SVt_IV], so they can
858just use the same allocation semantics. At first, PTEs were also
859overloaded to a non-body sv-type, but this yielded hard-to-find malloc
860bugs, so was simplified by claiming a new slot. This choice has no
861consequence at this time.
d2a0f284 862
29489e7c
DM
863*/
864
bd81e77b 865struct body_details {
0fb58b32 866 U8 body_size; /* Size to allocate */
10666ae3 867 U8 copy; /* Size of structure to copy (may be shorter) */
0fb58b32 868 U8 offset;
10666ae3
NC
869 unsigned int type : 4; /* We have space for a sanity check. */
870 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
871 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
872 unsigned int arena : 1; /* Allocated from an arena */
873 size_t arena_size; /* Size of arena to allocate */
bd81e77b 874};
29489e7c 875
bd81e77b
NC
876#define HADNV FALSE
877#define NONV TRUE
29489e7c 878
d2a0f284 879
bd81e77b
NC
880#ifdef PURIFY
881/* With -DPURFIY we allocate everything directly, and don't use arenas.
882 This seems a rather elegant way to simplify some of the code below. */
883#define HASARENA FALSE
884#else
885#define HASARENA TRUE
886#endif
887#define NOARENA FALSE
29489e7c 888
d2a0f284
JC
889/* Size the arenas to exactly fit a given number of bodies. A count
890 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
891 simplifying the default. If count > 0, the arena is sized to fit
892 only that many bodies, allowing arenas to be used for large, rare
893 bodies (XPVFM, XPVIO) without undue waste. The arena size is
894 limited by PERL_ARENA_SIZE, so we can safely oversize the
895 declarations.
896 */
95db5f15
MB
897#define FIT_ARENA0(body_size) \
898 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
899#define FIT_ARENAn(count,body_size) \
900 ( count * body_size <= PERL_ARENA_SIZE) \
901 ? count * body_size \
902 : FIT_ARENA0 (body_size)
903#define FIT_ARENA(count,body_size) \
904 count \
905 ? FIT_ARENAn (count, body_size) \
906 : FIT_ARENA0 (body_size)
d2a0f284 907
bd81e77b
NC
908/* Calculate the length to copy. Specifically work out the length less any
909 final padding the compiler needed to add. See the comment in sv_upgrade
910 for why copying the padding proved to be a bug. */
29489e7c 911
bd81e77b
NC
912#define copy_length(type, last_member) \
913 STRUCT_OFFSET(type, last_member) \
daba3364 914 + sizeof (((type*)SvANY((const SV *)0))->last_member)
29489e7c 915
bd81e77b 916static const struct body_details bodies_by_type[] = {
10666ae3
NC
917 { sizeof(HE), 0, 0, SVt_NULL,
918 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
d2a0f284 919
1cb9cd50 920 /* The bind placeholder pretends to be an RV for now.
c6f8b1d0 921 Also it's marked as "can't upgrade" to stop anyone using it before it's
1cb9cd50
NC
922 implemented. */
923 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
924
d2a0f284
JC
925 /* IVs are in the head, so the allocation size is 0.
926 However, the slot is overloaded for PTEs. */
927 { sizeof(struct ptr_tbl_ent), /* This is used for PTEs. */
928 sizeof(IV), /* This is used to copy out the IV body. */
10666ae3 929 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
d2a0f284
JC
930 NOARENA /* IVS don't need an arena */,
931 /* But PTEs need to know the size of their arena */
932 FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
933 },
934
bd81e77b 935 /* 8 bytes on most ILP32 with IEEE doubles */
10666ae3 936 { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
d2a0f284
JC
937 FIT_ARENA(0, sizeof(NV)) },
938
bd81e77b 939 /* 8 bytes on most ILP32 with IEEE doubles */
69ba284b
NC
940 { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
941 copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
942 + STRUCT_OFFSET(XPV, xpv_cur),
943 SVt_PV, FALSE, NONV, HASARENA,
944 FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
d2a0f284 945
bd81e77b 946 /* 12 */
69ba284b
NC
947 { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
948 copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
949 + STRUCT_OFFSET(XPVIV, xpv_cur),
950 SVt_PVIV, FALSE, NONV, HASARENA,
951 FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
d2a0f284 952
bd81e77b 953 /* 20 */
10666ae3 954 { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
d2a0f284
JC
955 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
956
bd81e77b 957 /* 28 */
10666ae3 958 { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
d2a0f284 959 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
4df7f6af 960
288b8c02 961 /* something big */
b6f60916
NC
962 { sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur),
963 sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur),
964 + STRUCT_OFFSET(regexp, xpv_cur),
08e44740 965 SVt_REGEXP, FALSE, NONV, HASARENA,
b6f60916 966 FIT_ARENA(0, sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur))
5c35adbb 967 },
4df7f6af 968
bd81e77b 969 /* 48 */
10666ae3 970 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
d2a0f284
JC
971 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
972
bd81e77b 973 /* 64 */
10666ae3 974 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
d2a0f284
JC
975 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
976
69ba284b
NC
977 { sizeof(XPVAV) - STRUCT_OFFSET(XPVAV, xav_fill),
978 copy_length(XPVAV, xmg_stash) - STRUCT_OFFSET(XPVAV, xav_fill),
979 + STRUCT_OFFSET(XPVAV, xav_fill),
980 SVt_PVAV, TRUE, NONV, HASARENA,
981 FIT_ARENA(0, sizeof(XPVAV) - STRUCT_OFFSET(XPVAV, xav_fill)) },
d2a0f284 982
69ba284b
NC
983 { sizeof(XPVHV) - STRUCT_OFFSET(XPVHV, xhv_fill),
984 copy_length(XPVHV, xmg_stash) - STRUCT_OFFSET(XPVHV, xhv_fill),
985 + STRUCT_OFFSET(XPVHV, xhv_fill),
986 SVt_PVHV, TRUE, NONV, HASARENA,
987 FIT_ARENA(0, sizeof(XPVHV) - STRUCT_OFFSET(XPVHV, xhv_fill)) },
d2a0f284 988
c84c4652 989 /* 56 */
69ba284b
NC
990 { sizeof(XPVCV) - STRUCT_OFFSET(XPVCV, xpv_cur),
991 sizeof(XPVCV) - STRUCT_OFFSET(XPVCV, xpv_cur),
992 + STRUCT_OFFSET(XPVCV, xpv_cur),
993 SVt_PVCV, TRUE, NONV, HASARENA,
994 FIT_ARENA(0, sizeof(XPVCV) - STRUCT_OFFSET(XPVCV, xpv_cur)) },
995
996 { sizeof(XPVFM) - STRUCT_OFFSET(XPVFM, xpv_cur),
997 sizeof(XPVFM) - STRUCT_OFFSET(XPVFM, xpv_cur),
998 + STRUCT_OFFSET(XPVFM, xpv_cur),
999 SVt_PVFM, TRUE, NONV, NOARENA,
1000 FIT_ARENA(20, sizeof(XPVFM) - STRUCT_OFFSET(XPVFM, xpv_cur)) },
d2a0f284
JC
1001
1002 /* XPVIO is 84 bytes, fits 48x */
b6f60916
NC
1003 { sizeof(XPVIO) - STRUCT_OFFSET(XPVIO, xpv_cur),
1004 sizeof(XPVIO) - STRUCT_OFFSET(XPVIO, xpv_cur),
1005 + STRUCT_OFFSET(XPVIO, xpv_cur),
1006 SVt_PVIO, TRUE, NONV, HASARENA,
1007 FIT_ARENA(24, sizeof(XPVIO) - STRUCT_OFFSET(XPVIO, xpv_cur)) },
bd81e77b 1008};
29489e7c 1009
d2a0f284
JC
1010#define new_body_type(sv_type) \
1011 (void *)((char *)S_new_body(aTHX_ sv_type))
29489e7c 1012
bd81e77b
NC
1013#define del_body_type(p, sv_type) \
1014 del_body(p, &PL_body_roots[sv_type])
29489e7c 1015
29489e7c 1016
bd81e77b 1017#define new_body_allocated(sv_type) \
d2a0f284 1018 (void *)((char *)S_new_body(aTHX_ sv_type) \
bd81e77b 1019 - bodies_by_type[sv_type].offset)
29489e7c 1020
bd81e77b
NC
1021#define del_body_allocated(p, sv_type) \
1022 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
29489e7c 1023
29489e7c 1024
bd81e77b
NC
1025#define my_safemalloc(s) (void*)safemalloc(s)
1026#define my_safecalloc(s) (void*)safecalloc(s, 1)
1027#define my_safefree(p) safefree((char*)p)
29489e7c 1028
bd81e77b 1029#ifdef PURIFY
29489e7c 1030
bd81e77b
NC
1031#define new_XNV() my_safemalloc(sizeof(XPVNV))
1032#define del_XNV(p) my_safefree(p)
29489e7c 1033
bd81e77b
NC
1034#define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1035#define del_XPVNV(p) my_safefree(p)
29489e7c 1036
bd81e77b
NC
1037#define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1038#define del_XPVAV(p) my_safefree(p)
29489e7c 1039
bd81e77b
NC
1040#define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1041#define del_XPVHV(p) my_safefree(p)
29489e7c 1042
bd81e77b
NC
1043#define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1044#define del_XPVMG(p) my_safefree(p)
29489e7c 1045
bd81e77b
NC
1046#define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1047#define del_XPVGV(p) my_safefree(p)
29489e7c 1048
bd81e77b 1049#else /* !PURIFY */
29489e7c 1050
bd81e77b
NC
1051#define new_XNV() new_body_type(SVt_NV)
1052#define del_XNV(p) del_body_type(p, SVt_NV)
29489e7c 1053
bd81e77b
NC
1054#define new_XPVNV() new_body_type(SVt_PVNV)
1055#define del_XPVNV(p) del_body_type(p, SVt_PVNV)
29489e7c 1056
bd81e77b
NC
1057#define new_XPVAV() new_body_allocated(SVt_PVAV)
1058#define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
645c22ef 1059
bd81e77b
NC
1060#define new_XPVHV() new_body_allocated(SVt_PVHV)
1061#define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
645c22ef 1062
bd81e77b
NC
1063#define new_XPVMG() new_body_type(SVt_PVMG)
1064#define del_XPVMG(p) del_body_type(p, SVt_PVMG)
645c22ef 1065
bd81e77b
NC
1066#define new_XPVGV() new_body_type(SVt_PVGV)
1067#define del_XPVGV(p) del_body_type(p, SVt_PVGV)
1d7c1841 1068
bd81e77b 1069#endif /* PURIFY */
93e68bfb 1070
bd81e77b 1071/* no arena for you! */
93e68bfb 1072
bd81e77b 1073#define new_NOARENA(details) \
d2a0f284 1074 my_safemalloc((details)->body_size + (details)->offset)
bd81e77b 1075#define new_NOARENAZ(details) \
d2a0f284
JC
1076 my_safecalloc((details)->body_size + (details)->offset)
1077
1078STATIC void *
de37a194 1079S_more_bodies (pTHX_ const svtype sv_type)
d2a0f284
JC
1080{
1081 dVAR;
1082 void ** const root = &PL_body_roots[sv_type];
96a5add6 1083 const struct body_details * const bdp = &bodies_by_type[sv_type];
d2a0f284
JC
1084 const size_t body_size = bdp->body_size;
1085 char *start;
1086 const char *end;
d8fca402 1087 const size_t arena_size = Perl_malloc_good_size(bdp->arena_size);
0b2d3faa 1088#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
23e9d66c
NC
1089 static bool done_sanity_check;
1090
0b2d3faa
JH
1091 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1092 * variables like done_sanity_check. */
10666ae3 1093 if (!done_sanity_check) {
ea471437 1094 unsigned int i = SVt_LAST;
10666ae3
NC
1095
1096 done_sanity_check = TRUE;
1097
1098 while (i--)
1099 assert (bodies_by_type[i].type == i);
1100 }
1101#endif
1102
23e9d66c
NC
1103 assert(bdp->arena_size);
1104
d8fca402 1105 start = (char*) Perl_get_arena(aTHX_ arena_size, sv_type);
d2a0f284 1106
d8fca402 1107 end = start + arena_size - 2 * body_size;
d2a0f284 1108
d2a0f284 1109 /* computed count doesnt reflect the 1st slot reservation */
d8fca402
NC
1110#if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1111 DEBUG_m(PerlIO_printf(Perl_debug_log,
1112 "arena %p end %p arena-size %d (from %d) type %d "
1113 "size %d ct %d\n",
1114 (void*)start, (void*)end, (int)arena_size,
1115 (int)bdp->arena_size, sv_type, (int)body_size,
1116 (int)arena_size / (int)body_size));
1117#else
d2a0f284
JC
1118 DEBUG_m(PerlIO_printf(Perl_debug_log,
1119 "arena %p end %p arena-size %d type %d size %d ct %d\n",
6c9570dc 1120 (void*)start, (void*)end,
0e84aef4
JH
1121 (int)bdp->arena_size, sv_type, (int)body_size,
1122 (int)bdp->arena_size / (int)body_size));
d8fca402 1123#endif
d2a0f284
JC
1124 *root = (void *)start;
1125
d8fca402 1126 while (start <= end) {
d2a0f284
JC
1127 char * const next = start + body_size;
1128 *(void**) start = (void *)next;
1129 start = next;
1130 }
1131 *(void **)start = 0;
1132
1133 return *root;
1134}
1135
1136/* grab a new thing from the free list, allocating more if necessary.
1137 The inline version is used for speed in hot routines, and the
1138 function using it serves the rest (unless PURIFY).
1139*/
1140#define new_body_inline(xpv, sv_type) \
1141 STMT_START { \
1142 void ** const r3wt = &PL_body_roots[sv_type]; \
11b79775
DD
1143 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1144 ? *((void **)(r3wt)) : more_bodies(sv_type)); \
d2a0f284 1145 *(r3wt) = *(void**)(xpv); \
d2a0f284
JC
1146 } STMT_END
1147
1148#ifndef PURIFY
1149
1150STATIC void *
de37a194 1151S_new_body(pTHX_ const svtype sv_type)
d2a0f284
JC
1152{
1153 dVAR;
1154 void *xpv;
1155 new_body_inline(xpv, sv_type);
1156 return xpv;
1157}
1158
1159#endif
93e68bfb 1160
238b27b3
NC
1161static const struct body_details fake_rv =
1162 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1163
bd81e77b
NC
1164/*
1165=for apidoc sv_upgrade
93e68bfb 1166
bd81e77b
NC
1167Upgrade an SV to a more complex form. Generally adds a new body type to the
1168SV, then copies across as much information as possible from the old body.
1169You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
93e68bfb 1170
bd81e77b 1171=cut
93e68bfb 1172*/
93e68bfb 1173
bd81e77b 1174void
aad570aa 1175Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
cac9b346 1176{
97aff369 1177 dVAR;
bd81e77b
NC
1178 void* old_body;
1179 void* new_body;
42d0e0b7 1180 const svtype old_type = SvTYPE(sv);
d2a0f284 1181 const struct body_details *new_type_details;
238b27b3 1182 const struct body_details *old_type_details
bd81e77b 1183 = bodies_by_type + old_type;
4df7f6af 1184 SV *referant = NULL;
cac9b346 1185
7918f24d
NC
1186 PERL_ARGS_ASSERT_SV_UPGRADE;
1187
1776cbe8
NC
1188 if (old_type == new_type)
1189 return;
1190
1191 /* This clause was purposefully added ahead of the early return above to
1192 the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1193 inference by Nick I-S that it would fix other troublesome cases. See
1194 changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1195
1196 Given that shared hash key scalars are no longer PVIV, but PV, there is
1197 no longer need to unshare so as to free up the IVX slot for its proper
1198 purpose. So it's safe to move the early return earlier. */
1199
bd81e77b
NC
1200 if (new_type != SVt_PV && SvIsCOW(sv)) {
1201 sv_force_normal_flags(sv, 0);
1202 }
cac9b346 1203
bd81e77b 1204 old_body = SvANY(sv);
de042e1d 1205
bd81e77b
NC
1206 /* Copying structures onto other structures that have been neatly zeroed
1207 has a subtle gotcha. Consider XPVMG
cac9b346 1208
bd81e77b
NC
1209 +------+------+------+------+------+-------+-------+
1210 | NV | CUR | LEN | IV | MAGIC | STASH |
1211 +------+------+------+------+------+-------+-------+
1212 0 4 8 12 16 20 24 28
645c22ef 1213
bd81e77b
NC
1214 where NVs are aligned to 8 bytes, so that sizeof that structure is
1215 actually 32 bytes long, with 4 bytes of padding at the end:
08742458 1216
bd81e77b
NC
1217 +------+------+------+------+------+-------+-------+------+
1218 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1219 +------+------+------+------+------+-------+-------+------+
1220 0 4 8 12 16 20 24 28 32
08742458 1221
bd81e77b 1222 so what happens if you allocate memory for this structure:
30f9da9e 1223
bd81e77b
NC
1224 +------+------+------+------+------+-------+-------+------+------+...
1225 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1226 +------+------+------+------+------+-------+-------+------+------+...
1227 0 4 8 12 16 20 24 28 32 36
bfc44f79 1228
bd81e77b
NC
1229 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1230 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1231 started out as zero once, but it's quite possible that it isn't. So now,
1232 rather than a nicely zeroed GP, you have it pointing somewhere random.
1233 Bugs ensue.
bfc44f79 1234
bd81e77b
NC
1235 (In fact, GP ends up pointing at a previous GP structure, because the
1236 principle cause of the padding in XPVMG getting garbage is a copy of
6c9e42f7
NC
1237 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1238 this happens to be moot because XPVGV has been re-ordered, with GP
1239 no longer after STASH)
30f9da9e 1240
bd81e77b
NC
1241 So we are careful and work out the size of used parts of all the
1242 structures. */
bfc44f79 1243
bd81e77b
NC
1244 switch (old_type) {
1245 case SVt_NULL:
1246 break;
1247 case SVt_IV:
4df7f6af
NC
1248 if (SvROK(sv)) {
1249 referant = SvRV(sv);
238b27b3
NC
1250 old_type_details = &fake_rv;
1251 if (new_type == SVt_NV)
1252 new_type = SVt_PVNV;
4df7f6af
NC
1253 } else {
1254 if (new_type < SVt_PVIV) {
1255 new_type = (new_type == SVt_NV)
1256 ? SVt_PVNV : SVt_PVIV;
1257 }
bd81e77b
NC
1258 }
1259 break;
1260 case SVt_NV:
1261 if (new_type < SVt_PVNV) {
1262 new_type = SVt_PVNV;
bd81e77b
NC
1263 }
1264 break;
bd81e77b
NC
1265 case SVt_PV:
1266 assert(new_type > SVt_PV);
1267 assert(SVt_IV < SVt_PV);
1268 assert(SVt_NV < SVt_PV);
1269 break;
1270 case SVt_PVIV:
1271 break;
1272 case SVt_PVNV:
1273 break;
1274 case SVt_PVMG:
1275 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1276 there's no way that it can be safely upgraded, because perl.c
1277 expects to Safefree(SvANY(PL_mess_sv)) */
1278 assert(sv != PL_mess_sv);
1279 /* This flag bit is used to mean other things in other scalar types.
1280 Given that it only has meaning inside the pad, it shouldn't be set
1281 on anything that can get upgraded. */
00b1698f 1282 assert(!SvPAD_TYPED(sv));
bd81e77b
NC
1283 break;
1284 default:
1285 if (old_type_details->cant_upgrade)
c81225bc
NC
1286 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1287 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
bd81e77b 1288 }
3376de98
NC
1289
1290 if (old_type > new_type)
1291 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1292 (int)old_type, (int)new_type);
1293
2fa1109b 1294 new_type_details = bodies_by_type + new_type;
645c22ef 1295
bd81e77b
NC
1296 SvFLAGS(sv) &= ~SVTYPEMASK;
1297 SvFLAGS(sv) |= new_type;
932e9ff9 1298
ab4416c0
NC
1299 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1300 the return statements above will have triggered. */
1301 assert (new_type != SVt_NULL);
bd81e77b 1302 switch (new_type) {
bd81e77b
NC
1303 case SVt_IV:
1304 assert(old_type == SVt_NULL);
1305 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1306 SvIV_set(sv, 0);
1307 return;
1308 case SVt_NV:
1309 assert(old_type == SVt_NULL);
1310 SvANY(sv) = new_XNV();
1311 SvNV_set(sv, 0);
1312 return;
bd81e77b 1313 case SVt_PVHV:
bd81e77b 1314 case SVt_PVAV:
d2a0f284 1315 assert(new_type_details->body_size);
c1ae03ae
NC
1316
1317#ifndef PURIFY
1318 assert(new_type_details->arena);
d2a0f284 1319 assert(new_type_details->arena_size);
c1ae03ae 1320 /* This points to the start of the allocated area. */
d2a0f284
JC
1321 new_body_inline(new_body, new_type);
1322 Zero(new_body, new_type_details->body_size, char);
c1ae03ae
NC
1323 new_body = ((char *)new_body) - new_type_details->offset;
1324#else
1325 /* We always allocated the full length item with PURIFY. To do this
1326 we fake things so that arena is false for all 16 types.. */
1327 new_body = new_NOARENAZ(new_type_details);
1328#endif
1329 SvANY(sv) = new_body;
1330 if (new_type == SVt_PVAV) {
1331 AvMAX(sv) = -1;
1332 AvFILLp(sv) = -1;
1333 AvREAL_only(sv);
64484faa 1334 if (old_type_details->body_size) {
ac572bf4
NC
1335 AvALLOC(sv) = 0;
1336 } else {
1337 /* It will have been zeroed when the new body was allocated.
1338 Lets not write to it, in case it confuses a write-back
1339 cache. */
1340 }
78ac7dd9
NC
1341 } else {
1342 assert(!SvOK(sv));
1343 SvOK_off(sv);
1344#ifndef NODEFAULT_SHAREKEYS
1345 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1346#endif
1347 HvMAX(sv) = 7; /* (start with 8 buckets) */
64484faa 1348 if (old_type_details->body_size) {
78ac7dd9
NC
1349 HvFILL(sv) = 0;
1350 } else {
1351 /* It will have been zeroed when the new body was allocated.
1352 Lets not write to it, in case it confuses a write-back
1353 cache. */
1354 }
c1ae03ae 1355 }
aeb18a1e 1356
bd81e77b
NC
1357 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1358 The target created by newSVrv also is, and it can have magic.
1359 However, it never has SvPVX set.
1360 */
4df7f6af
NC
1361 if (old_type == SVt_IV) {
1362 assert(!SvROK(sv));
1363 } else if (old_type >= SVt_PV) {
bd81e77b
NC
1364 assert(SvPVX_const(sv) == 0);
1365 }
aeb18a1e 1366
bd81e77b 1367 if (old_type >= SVt_PVMG) {
e736a858 1368 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
bd81e77b 1369 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
797c7171
NC
1370 } else {
1371 sv->sv_u.svu_array = NULL; /* or svu_hash */
bd81e77b
NC
1372 }
1373 break;
93e68bfb 1374
93e68bfb 1375
bd81e77b
NC
1376 case SVt_PVIV:
1377 /* XXX Is this still needed? Was it ever needed? Surely as there is
1378 no route from NV to PVIV, NOK can never be true */
1379 assert(!SvNOKp(sv));
1380 assert(!SvNOK(sv));
1381 case SVt_PVIO:
1382 case SVt_PVFM:
bd81e77b
NC
1383 case SVt_PVGV:
1384 case SVt_PVCV:
1385 case SVt_PVLV:
5c35adbb 1386 case SVt_REGEXP:
bd81e77b
NC
1387 case SVt_PVMG:
1388 case SVt_PVNV:
1389 case SVt_PV:
93e68bfb 1390
d2a0f284 1391 assert(new_type_details->body_size);
bd81e77b
NC
1392 /* We always allocated the full length item with PURIFY. To do this
1393 we fake things so that arena is false for all 16 types.. */
1394 if(new_type_details->arena) {
1395 /* This points to the start of the allocated area. */
d2a0f284
JC
1396 new_body_inline(new_body, new_type);
1397 Zero(new_body, new_type_details->body_size, char);
bd81e77b
NC
1398 new_body = ((char *)new_body) - new_type_details->offset;
1399 } else {
1400 new_body = new_NOARENAZ(new_type_details);
1401 }
1402 SvANY(sv) = new_body;
5e2fc214 1403
bd81e77b 1404 if (old_type_details->copy) {
f9ba3d20
NC
1405 /* There is now the potential for an upgrade from something without
1406 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1407 int offset = old_type_details->offset;
1408 int length = old_type_details->copy;
1409
1410 if (new_type_details->offset > old_type_details->offset) {
d4c19fe8 1411 const int difference
f9ba3d20
NC
1412 = new_type_details->offset - old_type_details->offset;
1413 offset += difference;
1414 length -= difference;
1415 }
1416 assert (length >= 0);
1417
1418 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1419 char);
bd81e77b
NC
1420 }
1421
1422#ifndef NV_ZERO_IS_ALLBITS_ZERO
f2524eef 1423 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
e5ce394c
NC
1424 * correct 0.0 for us. Otherwise, if the old body didn't have an
1425 * NV slot, but the new one does, then we need to initialise the
1426 * freshly created NV slot with whatever the correct bit pattern is
1427 * for 0.0 */
e22a937e
NC
1428 if (old_type_details->zero_nv && !new_type_details->zero_nv
1429 && !isGV_with_GP(sv))
bd81e77b 1430 SvNV_set(sv, 0);
82048762 1431#endif
5e2fc214 1432
85dca89a
NC
1433 if (new_type == SVt_PVIO) {
1434 IO * const io = MUTABLE_IO(sv);
1435 GV *iogv = gv_fetchpvs("FileHandle::", 0, SVt_PVHV);
1436
1437 SvOBJECT_on(io);
1438 /* Clear the stashcache because a new IO could overrule a package
1439 name */
1440 hv_clear(PL_stashcache);
1441
1442 /* unless exists($main::{FileHandle}) and
1443 defined(%main::FileHandle::) */
1444 if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1445 iogv = gv_fetchpvs("IO::Handle::", GV_ADD, SVt_PVHV);
1446 SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
f2524eef 1447 IoPAGE_LEN(sv) = 60;
85dca89a 1448 }
4df7f6af
NC
1449 if (old_type < SVt_PV) {
1450 /* referant will be NULL unless the old type was SVt_IV emulating
1451 SVt_RV */
1452 sv->sv_u.svu_rv = referant;
1453 }
bd81e77b
NC
1454 break;
1455 default:
afd78fd5
JH
1456 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1457 (unsigned long)new_type);
bd81e77b 1458 }
73171d91 1459
d2a0f284
JC
1460 if (old_type_details->arena) {
1461 /* If there was an old body, then we need to free it.
1462 Note that there is an assumption that all bodies of types that
1463 can be upgraded came from arenas. Only the more complex non-
1464 upgradable types are allowed to be directly malloc()ed. */
bd81e77b
NC
1465#ifdef PURIFY
1466 my_safefree(old_body);
1467#else
1468 del_body((void*)((char*)old_body + old_type_details->offset),
1469 &PL_body_roots[old_type]);
1470#endif
1471 }
1472}
73171d91 1473
bd81e77b
NC
1474/*
1475=for apidoc sv_backoff
73171d91 1476
bd81e77b
NC
1477Remove any string offset. You should normally use the C<SvOOK_off> macro
1478wrapper instead.
73171d91 1479
bd81e77b 1480=cut
73171d91
NC
1481*/
1482
bd81e77b 1483int
aad570aa 1484Perl_sv_backoff(pTHX_ register SV *const sv)
bd81e77b 1485{
69240efd 1486 STRLEN delta;
7a4bba22 1487 const char * const s = SvPVX_const(sv);
7918f24d
NC
1488
1489 PERL_ARGS_ASSERT_SV_BACKOFF;
96a5add6 1490 PERL_UNUSED_CONTEXT;
7918f24d 1491
bd81e77b
NC
1492 assert(SvOOK(sv));
1493 assert(SvTYPE(sv) != SVt_PVHV);
1494 assert(SvTYPE(sv) != SVt_PVAV);
7a4bba22 1495
69240efd
NC
1496 SvOOK_offset(sv, delta);
1497
7a4bba22
NC
1498 SvLEN_set(sv, SvLEN(sv) + delta);
1499 SvPV_set(sv, SvPVX(sv) - delta);
1500 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
bd81e77b
NC
1501 SvFLAGS(sv) &= ~SVf_OOK;
1502 return 0;
1503}
73171d91 1504
bd81e77b
NC
1505/*
1506=for apidoc sv_grow
73171d91 1507
bd81e77b
NC
1508Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1509upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1510Use the C<SvGROW> wrapper instead.
93e68bfb 1511
bd81e77b
NC
1512=cut
1513*/
93e68bfb 1514
bd81e77b 1515char *
aad570aa 1516Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
bd81e77b
NC
1517{
1518 register char *s;
93e68bfb 1519
7918f24d
NC
1520 PERL_ARGS_ASSERT_SV_GROW;
1521
5db06880
NC
1522 if (PL_madskills && newlen >= 0x100000) {
1523 PerlIO_printf(Perl_debug_log,
1524 "Allocation too large: %"UVxf"\n", (UV)newlen);
1525 }
bd81e77b
NC
1526#ifdef HAS_64K_LIMIT
1527 if (newlen >= 0x10000) {
1528 PerlIO_printf(Perl_debug_log,
1529 "Allocation too large: %"UVxf"\n", (UV)newlen);
1530 my_exit(1);
1531 }
1532#endif /* HAS_64K_LIMIT */
1533 if (SvROK(sv))
1534 sv_unref(sv);
1535 if (SvTYPE(sv) < SVt_PV) {
1536 sv_upgrade(sv, SVt_PV);
1537 s = SvPVX_mutable(sv);
1538 }
1539 else if (SvOOK(sv)) { /* pv is offset? */
1540 sv_backoff(sv);
1541 s = SvPVX_mutable(sv);
1542 if (newlen > SvLEN(sv))
1543 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1544#ifdef HAS_64K_LIMIT
1545 if (newlen >= 0x10000)
1546 newlen = 0xFFFF;
1547#endif
1548 }
1549 else
1550 s = SvPVX_mutable(sv);
aeb18a1e 1551
bd81e77b 1552 if (newlen > SvLEN(sv)) { /* need more room? */
aedff202 1553#ifndef Perl_safesysmalloc_size
bd81e77b 1554 newlen = PERL_STRLEN_ROUNDUP(newlen);
bd81e77b 1555#endif
98653f18 1556 if (SvLEN(sv) && s) {
10edeb5d 1557 s = (char*)saferealloc(s, newlen);
bd81e77b
NC
1558 }
1559 else {
10edeb5d 1560 s = (char*)safemalloc(newlen);
bd81e77b
NC
1561 if (SvPVX_const(sv) && SvCUR(sv)) {
1562 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1563 }
1564 }
1565 SvPV_set(sv, s);
ca7c1a29 1566#ifdef Perl_safesysmalloc_size
98653f18
NC
1567 /* Do this here, do it once, do it right, and then we will never get
1568 called back into sv_grow() unless there really is some growing
1569 needed. */
ca7c1a29 1570 SvLEN_set(sv, Perl_safesysmalloc_size(s));
98653f18 1571#else
bd81e77b 1572 SvLEN_set(sv, newlen);
98653f18 1573#endif
bd81e77b
NC
1574 }
1575 return s;
1576}
aeb18a1e 1577
bd81e77b
NC
1578/*
1579=for apidoc sv_setiv
932e9ff9 1580
bd81e77b
NC
1581Copies an integer into the given SV, upgrading first if necessary.
1582Does not handle 'set' magic. See also C<sv_setiv_mg>.
463ee0b2 1583
bd81e77b
NC
1584=cut
1585*/
463ee0b2 1586
bd81e77b 1587void
aad570aa 1588Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
bd81e77b 1589{
97aff369 1590 dVAR;
7918f24d
NC
1591
1592 PERL_ARGS_ASSERT_SV_SETIV;
1593
bd81e77b
NC
1594 SV_CHECK_THINKFIRST_COW_DROP(sv);
1595 switch (SvTYPE(sv)) {
1596 case SVt_NULL:
bd81e77b 1597 case SVt_NV:
3376de98 1598 sv_upgrade(sv, SVt_IV);
bd81e77b 1599 break;
bd81e77b
NC
1600 case SVt_PV:
1601 sv_upgrade(sv, SVt_PVIV);
1602 break;
463ee0b2 1603
bd81e77b 1604 case SVt_PVGV:
6e592b3a
BM
1605 if (!isGV_with_GP(sv))
1606 break;
bd81e77b
NC
1607 case SVt_PVAV:
1608 case SVt_PVHV:
1609 case SVt_PVCV:
1610 case SVt_PVFM:
1611 case SVt_PVIO:
1612 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1613 OP_DESC(PL_op));
42d0e0b7 1614 default: NOOP;
bd81e77b
NC
1615 }
1616 (void)SvIOK_only(sv); /* validate number */
1617 SvIV_set(sv, i);
1618 SvTAINT(sv);
1619}
932e9ff9 1620
bd81e77b
NC
1621/*
1622=for apidoc sv_setiv_mg
d33b2eba 1623
bd81e77b 1624Like C<sv_setiv>, but also handles 'set' magic.
1c846c1f 1625
bd81e77b
NC
1626=cut
1627*/
d33b2eba 1628
bd81e77b 1629void
aad570aa 1630Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
bd81e77b 1631{
7918f24d
NC
1632 PERL_ARGS_ASSERT_SV_SETIV_MG;
1633
bd81e77b
NC
1634 sv_setiv(sv,i);
1635 SvSETMAGIC(sv);
1636}
727879eb 1637
bd81e77b
NC
1638/*
1639=for apidoc sv_setuv
d33b2eba 1640
bd81e77b
NC
1641Copies an unsigned integer into the given SV, upgrading first if necessary.
1642Does not handle 'set' magic. See also C<sv_setuv_mg>.
9b94d1dd 1643
bd81e77b
NC
1644=cut
1645*/
d33b2eba 1646
bd81e77b 1647void
aad570aa 1648Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
bd81e77b 1649{
7918f24d
NC
1650 PERL_ARGS_ASSERT_SV_SETUV;
1651
bd81e77b
NC
1652 /* With these two if statements:
1653 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
d33b2eba 1654
bd81e77b
NC
1655 without
1656 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1c846c1f 1657
bd81e77b
NC
1658 If you wish to remove them, please benchmark to see what the effect is
1659 */
1660 if (u <= (UV)IV_MAX) {
1661 sv_setiv(sv, (IV)u);
1662 return;
1663 }
1664 sv_setiv(sv, 0);
1665 SvIsUV_on(sv);
1666 SvUV_set(sv, u);
1667}
d33b2eba 1668
bd81e77b
NC
1669/*
1670=for apidoc sv_setuv_mg
727879eb 1671
bd81e77b 1672Like C<sv_setuv>, but also handles 'set' magic.
9b94d1dd 1673
bd81e77b
NC
1674=cut
1675*/
5e2fc214 1676
bd81e77b 1677void
aad570aa 1678Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
bd81e77b 1679{
7918f24d
NC
1680 PERL_ARGS_ASSERT_SV_SETUV_MG;
1681
bd81e77b
NC
1682 sv_setuv(sv,u);
1683 SvSETMAGIC(sv);
1684}
5e2fc214 1685
954c1994 1686/*
bd81e77b 1687=for apidoc sv_setnv
954c1994 1688
bd81e77b
NC
1689Copies a double into the given SV, upgrading first if necessary.
1690Does not handle 'set' magic. See also C<sv_setnv_mg>.
954c1994
GS
1691
1692=cut
1693*/
1694
63f97190 1695void
aad570aa 1696Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
79072805 1697{
97aff369 1698 dVAR;
7918f24d
NC
1699
1700 PERL_ARGS_ASSERT_SV_SETNV;
1701
bd81e77b
NC
1702 SV_CHECK_THINKFIRST_COW_DROP(sv);
1703 switch (SvTYPE(sv)) {
79072805 1704 case SVt_NULL:
79072805 1705 case SVt_IV:
bd81e77b 1706 sv_upgrade(sv, SVt_NV);
79072805
LW
1707 break;
1708 case SVt_PV:
79072805 1709 case SVt_PVIV:
bd81e77b 1710 sv_upgrade(sv, SVt_PVNV);
79072805 1711 break;
bd4b1eb5 1712
bd4b1eb5 1713 case SVt_PVGV:
6e592b3a
BM
1714 if (!isGV_with_GP(sv))
1715 break;
bd81e77b
NC
1716 case SVt_PVAV:
1717 case SVt_PVHV:
79072805 1718 case SVt_PVCV:
bd81e77b
NC
1719 case SVt_PVFM:
1720 case SVt_PVIO:
1721 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1722 OP_NAME(PL_op));
42d0e0b7 1723 default: NOOP;
2068cd4d 1724 }
bd81e77b
NC
1725 SvNV_set(sv, num);
1726 (void)SvNOK_only(sv); /* validate number */
1727 SvTAINT(sv);
79072805
LW
1728}
1729
645c22ef 1730/*
bd81e77b 1731=for apidoc sv_setnv_mg
645c22ef 1732
bd81e77b 1733Like C<sv_setnv>, but also handles 'set' magic.
645c22ef
DM
1734
1735=cut
1736*/
1737
bd81e77b 1738void
aad570aa 1739Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
79072805 1740{
7918f24d
NC
1741 PERL_ARGS_ASSERT_SV_SETNV_MG;
1742
bd81e77b
NC
1743 sv_setnv(sv,num);
1744 SvSETMAGIC(sv);
79072805
LW
1745}
1746
bd81e77b
NC
1747/* Print an "isn't numeric" warning, using a cleaned-up,
1748 * printable version of the offending string
1749 */
954c1994 1750
bd81e77b 1751STATIC void
aad570aa 1752S_not_a_number(pTHX_ SV *const sv)
79072805 1753{
97aff369 1754 dVAR;
bd81e77b
NC
1755 SV *dsv;
1756 char tmpbuf[64];
1757 const char *pv;
94463019 1758
7918f24d
NC
1759 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1760
94463019 1761 if (DO_UTF8(sv)) {
84bafc02 1762 dsv = newSVpvs_flags("", SVs_TEMP);
94463019
JH
1763 pv = sv_uni_display(dsv, sv, 10, 0);
1764 } else {
1765 char *d = tmpbuf;
551405c4 1766 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
94463019
JH
1767 /* each *s can expand to 4 chars + "...\0",
1768 i.e. need room for 8 chars */
ecdeb87c 1769
00b6aa41
AL
1770 const char *s = SvPVX_const(sv);
1771 const char * const end = s + SvCUR(sv);
1772 for ( ; s < end && d < limit; s++ ) {
94463019
JH
1773 int ch = *s & 0xFF;
1774 if (ch & 128 && !isPRINT_LC(ch)) {
1775 *d++ = 'M';
1776 *d++ = '-';
1777 ch &= 127;
1778 }
1779 if (ch == '\n') {
1780 *d++ = '\\';
1781 *d++ = 'n';
1782 }
1783 else if (ch == '\r') {
1784 *d++ = '\\';
1785 *d++ = 'r';
1786 }
1787 else if (ch == '\f') {
1788 *d++ = '\\';
1789 *d++ = 'f';
1790 }
1791 else if (ch == '\\') {
1792 *d++ = '\\';
1793 *d++ = '\\';
1794 }
1795 else if (ch == '\0') {
1796 *d++ = '\\';
1797 *d++ = '0';
1798 }
1799 else if (isPRINT_LC(ch))
1800 *d++ = ch;
1801 else {
1802 *d++ = '^';
1803 *d++ = toCTRL(ch);
1804 }
1805 }
1806 if (s < end) {
1807 *d++ = '.';
1808 *d++ = '.';
1809 *d++ = '.';
1810 }
1811 *d = '\0';
1812 pv = tmpbuf;
a0d0e21e 1813 }
a0d0e21e 1814
533c011a 1815 if (PL_op)
9014280d 1816 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019
JH
1817 "Argument \"%s\" isn't numeric in %s", pv,
1818 OP_DESC(PL_op));
a0d0e21e 1819 else
9014280d 1820 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019 1821 "Argument \"%s\" isn't numeric", pv);
a0d0e21e
LW
1822}
1823
c2988b20
NC
1824/*
1825=for apidoc looks_like_number
1826
645c22ef
DM
1827Test if the content of an SV looks like a number (or is a number).
1828C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1829non-numeric warning), even if your atof() doesn't grok them.
c2988b20
NC
1830
1831=cut
1832*/
1833
1834I32
aad570aa 1835Perl_looks_like_number(pTHX_ SV *const sv)
c2988b20 1836{
a3b680e6 1837 register const char *sbegin;
c2988b20
NC
1838 STRLEN len;
1839
7918f24d
NC
1840 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1841
c2988b20 1842 if (SvPOK(sv)) {
3f7c398e 1843 sbegin = SvPVX_const(sv);
c2988b20
NC
1844 len = SvCUR(sv);
1845 }
1846 else if (SvPOKp(sv))
83003860 1847 sbegin = SvPV_const(sv, len);
c2988b20 1848 else
e0ab1c0e 1849 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
c2988b20
NC
1850 return grok_number(sbegin, len, NULL);
1851}
25da4f38 1852
19f6321d
NC
1853STATIC bool
1854S_glob_2number(pTHX_ GV * const gv)
180488f8
NC
1855{
1856 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1857 SV *const buffer = sv_newmortal();
1858
7918f24d
NC
1859 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1860
180488f8
NC
1861 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1862 is on. */
1863 SvFAKE_off(gv);
1864 gv_efullname3(buffer, gv, "*");
1865 SvFLAGS(gv) |= wasfake;
1866
675c862f
AL
1867 /* We know that all GVs stringify to something that is not-a-number,
1868 so no need to test that. */
1869 if (ckWARN(WARN_NUMERIC))
1870 not_a_number(buffer);
1871 /* We just want something true to return, so that S_sv_2iuv_common
1872 can tail call us and return true. */
19f6321d 1873 return TRUE;
675c862f
AL
1874}
1875
25da4f38
IZ
1876/* Actually, ISO C leaves conversion of UV to IV undefined, but
1877 until proven guilty, assume that things are not that bad... */
1878
645c22ef
DM
1879/*
1880 NV_PRESERVES_UV:
1881
1882 As 64 bit platforms often have an NV that doesn't preserve all bits of
28e5dec8
JH
1883 an IV (an assumption perl has been based on to date) it becomes necessary
1884 to remove the assumption that the NV always carries enough precision to
1885 recreate the IV whenever needed, and that the NV is the canonical form.
1886 Instead, IV/UV and NV need to be given equal rights. So as to not lose
645c22ef 1887 precision as a side effect of conversion (which would lead to insanity
28e5dec8
JH
1888 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1889 1) to distinguish between IV/UV/NV slots that have cached a valid
1890 conversion where precision was lost and IV/UV/NV slots that have a
1891 valid conversion which has lost no precision
645c22ef 1892 2) to ensure that if a numeric conversion to one form is requested that
28e5dec8
JH
1893 would lose precision, the precise conversion (or differently
1894 imprecise conversion) is also performed and cached, to prevent
1895 requests for different numeric formats on the same SV causing
1896 lossy conversion chains. (lossless conversion chains are perfectly
1897 acceptable (still))
1898
1899
1900 flags are used:
1901 SvIOKp is true if the IV slot contains a valid value
1902 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1903 SvNOKp is true if the NV slot contains a valid value
1904 SvNOK is true only if the NV value is accurate
1905
1906 so
645c22ef 1907 while converting from PV to NV, check to see if converting that NV to an
28e5dec8
JH
1908 IV(or UV) would lose accuracy over a direct conversion from PV to
1909 IV(or UV). If it would, cache both conversions, return NV, but mark
1910 SV as IOK NOKp (ie not NOK).
1911
645c22ef 1912 While converting from PV to IV, check to see if converting that IV to an
28e5dec8
JH
1913 NV would lose accuracy over a direct conversion from PV to NV. If it
1914 would, cache both conversions, flag similarly.
1915
1916 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1917 correctly because if IV & NV were set NV *always* overruled.
645c22ef
DM
1918 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1919 changes - now IV and NV together means that the two are interchangeable:
28e5dec8 1920 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
d460ef45 1921
645c22ef
DM
1922 The benefit of this is that operations such as pp_add know that if
1923 SvIOK is true for both left and right operands, then integer addition
1924 can be used instead of floating point (for cases where the result won't
1925 overflow). Before, floating point was always used, which could lead to
28e5dec8
JH
1926 loss of precision compared with integer addition.
1927
1928 * making IV and NV equal status should make maths accurate on 64 bit
1929 platforms
1930 * may speed up maths somewhat if pp_add and friends start to use
645c22ef 1931 integers when possible instead of fp. (Hopefully the overhead in
28e5dec8
JH
1932 looking for SvIOK and checking for overflow will not outweigh the
1933 fp to integer speedup)
1934 * will slow down integer operations (callers of SvIV) on "inaccurate"
1935 values, as the change from SvIOK to SvIOKp will cause a call into
1936 sv_2iv each time rather than a macro access direct to the IV slot
1937 * should speed up number->string conversion on integers as IV is
645c22ef 1938 favoured when IV and NV are equally accurate
28e5dec8
JH
1939
1940 ####################################################################
645c22ef
DM
1941 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1942 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1943 On the other hand, SvUOK is true iff UV.
28e5dec8
JH
1944 ####################################################################
1945
645c22ef 1946 Your mileage will vary depending your CPU's relative fp to integer
28e5dec8
JH
1947 performance ratio.
1948*/
1949
1950#ifndef NV_PRESERVES_UV
645c22ef
DM
1951# define IS_NUMBER_UNDERFLOW_IV 1
1952# define IS_NUMBER_UNDERFLOW_UV 2
1953# define IS_NUMBER_IV_AND_UV 2
1954# define IS_NUMBER_OVERFLOW_IV 4
1955# define IS_NUMBER_OVERFLOW_UV 5
1956
1957/* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
28e5dec8
JH
1958
1959/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1960STATIC int
5de3775c 1961S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
47031da6
NC
1962# ifdef DEBUGGING
1963 , I32 numtype
1964# endif
1965 )
28e5dec8 1966{
97aff369 1967 dVAR;
7918f24d
NC
1968
1969 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1970
3f7c398e 1971 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
1972 if (SvNVX(sv) < (NV)IV_MIN) {
1973 (void)SvIOKp_on(sv);
1974 (void)SvNOK_on(sv);
45977657 1975 SvIV_set(sv, IV_MIN);
28e5dec8
JH
1976 return IS_NUMBER_UNDERFLOW_IV;
1977 }
1978 if (SvNVX(sv) > (NV)UV_MAX) {
1979 (void)SvIOKp_on(sv);
1980 (void)SvNOK_on(sv);
1981 SvIsUV_on(sv);
607fa7f2 1982 SvUV_set(sv, UV_MAX);
28e5dec8
JH
1983 return IS_NUMBER_OVERFLOW_UV;
1984 }
c2988b20
NC
1985 (void)SvIOKp_on(sv);
1986 (void)SvNOK_on(sv);
1987 /* Can't use strtol etc to convert this string. (See truth table in
1988 sv_2iv */
1989 if (SvNVX(sv) <= (UV)IV_MAX) {
45977657 1990 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
1991 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1992 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1993 } else {
1994 /* Integer is imprecise. NOK, IOKp */
1995 }
1996 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1997 }
1998 SvIsUV_on(sv);
607fa7f2 1999 SvUV_set(sv, U_V(SvNVX(sv)));
c2988b20
NC
2000 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2001 if (SvUVX(sv) == UV_MAX) {
2002 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2003 possibly be preserved by NV. Hence, it must be overflow.
2004 NOK, IOKp */
2005 return IS_NUMBER_OVERFLOW_UV;
2006 }
2007 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2008 } else {
2009 /* Integer is imprecise. NOK, IOKp */
28e5dec8 2010 }
c2988b20 2011 return IS_NUMBER_OVERFLOW_IV;
28e5dec8 2012}
645c22ef
DM
2013#endif /* !NV_PRESERVES_UV*/
2014
af359546 2015STATIC bool
7918f24d
NC
2016S_sv_2iuv_common(pTHX_ SV *const sv)
2017{
97aff369 2018 dVAR;
7918f24d
NC
2019
2020 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2021
af359546 2022 if (SvNOKp(sv)) {
28e5dec8
JH
2023 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2024 * without also getting a cached IV/UV from it at the same time
2025 * (ie PV->NV conversion should detect loss of accuracy and cache
af359546
NC
2026 * IV or UV at same time to avoid this. */
2027 /* IV-over-UV optimisation - choose to cache IV if possible */
25da4f38
IZ
2028
2029 if (SvTYPE(sv) == SVt_NV)
2030 sv_upgrade(sv, SVt_PVNV);
2031
28e5dec8
JH
2032 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2033 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2034 certainly cast into the IV range at IV_MAX, whereas the correct
2035 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2036 cases go to UV */
cab190d4
JD
2037#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2038 if (Perl_isnan(SvNVX(sv))) {
2039 SvUV_set(sv, 0);
2040 SvIsUV_on(sv);
fdbe6d7c 2041 return FALSE;
cab190d4 2042 }
cab190d4 2043#endif
28e5dec8 2044 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
45977657 2045 SvIV_set(sv, I_V(SvNVX(sv)));
28e5dec8
JH
2046 if (SvNVX(sv) == (NV) SvIVX(sv)
2047#ifndef NV_PRESERVES_UV
2048 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2049 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2050 /* Don't flag it as "accurately an integer" if the number
2051 came from a (by definition imprecise) NV operation, and
2052 we're outside the range of NV integer precision */
2053#endif
2054 ) {
a43d94f2
NC
2055 if (SvNOK(sv))
2056 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2057 else {
2058 /* scalar has trailing garbage, eg "42a" */
2059 }
28e5dec8 2060 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 2061 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
28e5dec8
JH
2062 PTR2UV(sv),
2063 SvNVX(sv),
2064 SvIVX(sv)));
2065
2066 } else {
2067 /* IV not precise. No need to convert from PV, as NV
2068 conversion would already have cached IV if it detected
2069 that PV->IV would be better than PV->NV->IV
2070 flags already correct - don't set public IOK. */
2071 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 2072 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
28e5dec8
JH
2073 PTR2UV(sv),
2074 SvNVX(sv),
2075 SvIVX(sv)));
2076 }
2077 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2078 but the cast (NV)IV_MIN rounds to a the value less (more
2079 negative) than IV_MIN which happens to be equal to SvNVX ??
2080 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2081 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2082 (NV)UVX == NVX are both true, but the values differ. :-(
2083 Hopefully for 2s complement IV_MIN is something like
2084 0x8000000000000000 which will be exact. NWC */
d460ef45 2085 }
25da4f38 2086 else {
607fa7f2 2087 SvUV_set(sv, U_V(SvNVX(sv)));
28e5dec8
JH
2088 if (
2089 (SvNVX(sv) == (NV) SvUVX(sv))
2090#ifndef NV_PRESERVES_UV
2091 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2092 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2093 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2094 /* Don't flag it as "accurately an integer" if the number
2095 came from a (by definition imprecise) NV operation, and
2096 we're outside the range of NV integer precision */
2097#endif
a43d94f2 2098 && SvNOK(sv)
28e5dec8
JH
2099 )
2100 SvIOK_on(sv);
25da4f38 2101 SvIsUV_on(sv);
1c846c1f 2102 DEBUG_c(PerlIO_printf(Perl_debug_log,
57def98f 2103 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
56431972 2104 PTR2UV(sv),
57def98f
JH
2105 SvUVX(sv),
2106 SvUVX(sv)));
25da4f38 2107 }
748a9306
LW
2108 }
2109 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2110 UV value;
504618e9 2111 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
af359546 2112 /* We want to avoid a possible problem when we cache an IV/ a UV which
25da4f38 2113 may be later translated to an NV, and the resulting NV is not
c2988b20
NC
2114 the same as the direct translation of the initial string
2115 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2116 be careful to ensure that the value with the .456 is around if the
2117 NV value is requested in the future).
1c846c1f 2118
af359546 2119 This means that if we cache such an IV/a UV, we need to cache the
25da4f38 2120 NV as well. Moreover, we trade speed for space, and do not
28e5dec8 2121 cache the NV if we are sure it's not needed.
25da4f38 2122 */
16b7a9a4 2123
c2988b20
NC
2124 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2125 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2126 == IS_NUMBER_IN_UV) {
5e045b90 2127 /* It's definitely an integer, only upgrade to PVIV */
28e5dec8
JH
2128 if (SvTYPE(sv) < SVt_PVIV)
2129 sv_upgrade(sv, SVt_PVIV);
f7bbb42a 2130 (void)SvIOK_on(sv);
c2988b20
NC
2131 } else if (SvTYPE(sv) < SVt_PVNV)
2132 sv_upgrade(sv, SVt_PVNV);
28e5dec8 2133
f2524eef 2134 /* If NVs preserve UVs then we only use the UV value if we know that
c2988b20
NC
2135 we aren't going to call atof() below. If NVs don't preserve UVs
2136 then the value returned may have more precision than atof() will
2137 return, even though value isn't perfectly accurate. */
2138 if ((numtype & (IS_NUMBER_IN_UV
2139#ifdef NV_PRESERVES_UV
2140 | IS_NUMBER_NOT_INT
2141#endif
2142 )) == IS_NUMBER_IN_UV) {
2143 /* This won't turn off the public IOK flag if it was set above */
2144 (void)SvIOKp_on(sv);
2145
2146 if (!(numtype & IS_NUMBER_NEG)) {
2147 /* positive */;
2148 if (value <= (UV)IV_MAX) {
45977657 2149 SvIV_set(sv, (IV)value);
c2988b20 2150 } else {
af359546 2151 /* it didn't overflow, and it was positive. */
607fa7f2 2152 SvUV_set(sv, value);
c2988b20
NC
2153 SvIsUV_on(sv);
2154 }
2155 } else {
2156 /* 2s complement assumption */
2157 if (value <= (UV)IV_MIN) {
45977657 2158 SvIV_set(sv, -(IV)value);
c2988b20
NC
2159 } else {
2160 /* Too negative for an IV. This is a double upgrade, but
d1be9408 2161 I'm assuming it will be rare. */
c2988b20
NC
2162 if (SvTYPE(sv) < SVt_PVNV)
2163 sv_upgrade(sv, SVt_PVNV);
2164 SvNOK_on(sv);
2165 SvIOK_off(sv);
2166 SvIOKp_on(sv);
9d6ce603 2167 SvNV_set(sv, -(NV)value);
45977657 2168 SvIV_set(sv, IV_MIN);
c2988b20
NC
2169 }
2170 }
2171 }
2172 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2173 will be in the previous block to set the IV slot, and the next
2174 block to set the NV slot. So no else here. */
2175
2176 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2177 != IS_NUMBER_IN_UV) {
2178 /* It wasn't an (integer that doesn't overflow the UV). */
3f7c398e 2179 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8 2180
c2988b20
NC
2181 if (! numtype && ckWARN(WARN_NUMERIC))
2182 not_a_number(sv);
28e5dec8 2183
65202027 2184#if defined(USE_LONG_DOUBLE)
c2988b20
NC
2185 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2186 PTR2UV(sv), SvNVX(sv)));
65202027 2187#else
1779d84d 2188 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
c2988b20 2189 PTR2UV(sv), SvNVX(sv)));
65202027 2190#endif
28e5dec8 2191
28e5dec8 2192#ifdef NV_PRESERVES_UV
af359546
NC
2193 (void)SvIOKp_on(sv);
2194 (void)SvNOK_on(sv);
2195 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2196 SvIV_set(sv, I_V(SvNVX(sv)));
2197 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2198 SvIOK_on(sv);
2199 } else {
6f207bd3 2200 NOOP; /* Integer is imprecise. NOK, IOKp */
af359546
NC
2201 }
2202 /* UV will not work better than IV */
2203 } else {
2204 if (SvNVX(sv) > (NV)UV_MAX) {
2205 SvIsUV_on(sv);
2206 /* Integer is inaccurate. NOK, IOKp, is UV */
2207 SvUV_set(sv, UV_MAX);
af359546
NC
2208 } else {
2209 SvUV_set(sv, U_V(SvNVX(sv)));
2210 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2211 NV preservse UV so can do correct comparison. */
2212 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2213 SvIOK_on(sv);
af359546 2214 } else {
6f207bd3 2215 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
af359546
NC
2216 }
2217 }
4b0c9573 2218 SvIsUV_on(sv);
af359546 2219 }
28e5dec8 2220#else /* NV_PRESERVES_UV */
c2988b20
NC
2221 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2222 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
af359546 2223 /* The IV/UV slot will have been set from value returned by
c2988b20
NC
2224 grok_number above. The NV slot has just been set using
2225 Atof. */
560b0c46 2226 SvNOK_on(sv);
c2988b20
NC
2227 assert (SvIOKp(sv));
2228 } else {
2229 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2230 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2231 /* Small enough to preserve all bits. */
2232 (void)SvIOKp_on(sv);
2233 SvNOK_on(sv);
45977657 2234 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
2235 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2236 SvIOK_on(sv);
2237 /* Assumption: first non-preserved integer is < IV_MAX,
2238 this NV is in the preserved range, therefore: */
2239 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2240 < (UV)IV_MAX)) {
32fdb065 2241 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
2242 }
2243 } else {
2244 /* IN_UV NOT_INT
2245 0 0 already failed to read UV.
2246 0 1 already failed to read UV.
2247 1 0 you won't get here in this case. IV/UV
2248 slot set, public IOK, Atof() unneeded.
2249 1 1 already read UV.
2250 so there's no point in sv_2iuv_non_preserve() attempting
2251 to use atol, strtol, strtoul etc. */
47031da6 2252# ifdef DEBUGGING
40a17c4c 2253 sv_2iuv_non_preserve (sv, numtype);
47031da6
NC
2254# else
2255 sv_2iuv_non_preserve (sv);
2256# endif
c2988b20
NC
2257 }
2258 }
28e5dec8 2259#endif /* NV_PRESERVES_UV */
a43d94f2
NC
2260 /* It might be more code efficient to go through the entire logic above
2261 and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2262 gets complex and potentially buggy, so more programmer efficient
2263 to do it this way, by turning off the public flags: */
2264 if (!numtype)
2265 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
25da4f38 2266 }
af359546
NC
2267 }
2268 else {
675c862f 2269 if (isGV_with_GP(sv))
159b6efe 2270 return glob_2number(MUTABLE_GV(sv));
180488f8 2271
af359546
NC
2272 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2273 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2274 report_uninit(sv);
2275 }
25da4f38
IZ
2276 if (SvTYPE(sv) < SVt_IV)
2277 /* Typically the caller expects that sv_any is not NULL now. */
2278 sv_upgrade(sv, SVt_IV);
af359546
NC
2279 /* Return 0 from the caller. */
2280 return TRUE;
2281 }
2282 return FALSE;
2283}
2284
2285/*
2286=for apidoc sv_2iv_flags
2287
2288Return the integer value of an SV, doing any necessary string
2289conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2290Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2291
2292=cut
2293*/
2294
2295IV
5de3775c 2296Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
af359546 2297{
97aff369 2298 dVAR;
af359546 2299 if (!sv)
a0d0e21e 2300 return 0;
cecf5685
NC
2301 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2302 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e
NC
2303 cache IVs just in case. In practice it seems that they never
2304 actually anywhere accessible by user Perl code, let alone get used
2305 in anything other than a string context. */
af359546
NC
2306 if (flags & SV_GMAGIC)
2307 mg_get(sv);
2308 if (SvIOKp(sv))
2309 return SvIVX(sv);
2310 if (SvNOKp(sv)) {
2311 return I_V(SvNVX(sv));
2312 }
71c558c3
NC
2313 if (SvPOKp(sv) && SvLEN(sv)) {
2314 UV value;
2315 const int numtype
2316 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2317
2318 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2319 == IS_NUMBER_IN_UV) {
2320 /* It's definitely an integer */
2321 if (numtype & IS_NUMBER_NEG) {
2322 if (value < (UV)IV_MIN)
2323 return -(IV)value;
2324 } else {
2325 if (value < (UV)IV_MAX)
2326 return (IV)value;
2327 }
2328 }
2329 if (!numtype) {
2330 if (ckWARN(WARN_NUMERIC))
2331 not_a_number(sv);
2332 }
2333 return I_V(Atof(SvPVX_const(sv)));
2334 }
1c7ff15e
NC
2335 if (SvROK(sv)) {
2336 goto return_rok;
af359546 2337 }
1c7ff15e
NC
2338 assert(SvTYPE(sv) >= SVt_PVMG);
2339 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2340 } else if (SvTHINKFIRST(sv)) {
af359546 2341 if (SvROK(sv)) {
1c7ff15e 2342 return_rok:
af359546
NC
2343 if (SvAMAGIC(sv)) {
2344 SV * const tmpstr=AMG_CALLun(sv,numer);
2345 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2346 return SvIV(tmpstr);
2347 }
2348 }
2349 return PTR2IV(SvRV(sv));
2350 }
2351 if (SvIsCOW(sv)) {
2352 sv_force_normal_flags(sv, 0);
2353 }
2354 if (SvREADONLY(sv) && !SvOK(sv)) {
2355 if (ckWARN(WARN_UNINITIALIZED))
2356 report_uninit(sv);
2357 return 0;
2358 }
2359 }
2360 if (!SvIOKp(sv)) {
2361 if (S_sv_2iuv_common(aTHX_ sv))
2362 return 0;
79072805 2363 }
1d7c1841
GS
2364 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2365 PTR2UV(sv),SvIVX(sv)));
25da4f38 2366 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
79072805
LW
2367}
2368
645c22ef 2369/*
891f9566 2370=for apidoc sv_2uv_flags
645c22ef
DM
2371
2372Return the unsigned integer value of an SV, doing any necessary string
891f9566
YST
2373conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2374Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
645c22ef
DM
2375
2376=cut
2377*/
2378
ff68c719 2379UV
5de3775c 2380Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
ff68c719 2381{
97aff369 2382 dVAR;
ff68c719 2383 if (!sv)
2384 return 0;
cecf5685
NC
2385 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2386 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e 2387 cache IVs just in case. */
891f9566
YST
2388 if (flags & SV_GMAGIC)
2389 mg_get(sv);
ff68c719 2390 if (SvIOKp(sv))
2391 return SvUVX(sv);
2392 if (SvNOKp(sv))
2393 return U_V(SvNVX(sv));
71c558c3
NC
2394 if (SvPOKp(sv) && SvLEN(sv)) {
2395 UV value;
2396 const int numtype
2397 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2398
2399 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2400 == IS_NUMBER_IN_UV) {
2401 /* It's definitely an integer */
2402 if (!(numtype & IS_NUMBER_NEG))
2403 return value;
2404 }
2405 if (!numtype) {
2406 if (ckWARN(WARN_NUMERIC))
2407 not_a_number(sv);
2408 }
2409 return U_V(Atof(SvPVX_const(sv)));
2410 }
1c7ff15e
NC
2411 if (SvROK(sv)) {
2412 goto return_rok;
3fe9a6f1 2413 }
1c7ff15e
NC
2414 assert(SvTYPE(sv) >= SVt_PVMG);
2415 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2416 } else if (SvTHINKFIRST(sv)) {
ff68c719 2417 if (SvROK(sv)) {
1c7ff15e 2418 return_rok:
deb46114
NC
2419 if (SvAMAGIC(sv)) {
2420 SV *const tmpstr = AMG_CALLun(sv,numer);
2421 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2422 return SvUV(tmpstr);
2423 }
2424 }
2425 return PTR2UV(SvRV(sv));
ff68c719 2426 }
765f542d
NC
2427 if (SvIsCOW(sv)) {
2428 sv_force_normal_flags(sv, 0);
8a818333 2429 }
0336b60e 2430 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2431 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2432 report_uninit(sv);
ff68c719 2433 return 0;
2434 }
2435 }
af359546
NC
2436 if (!SvIOKp(sv)) {
2437 if (S_sv_2iuv_common(aTHX_ sv))
2438 return 0;
ff68c719 2439 }
25da4f38 2440
1d7c1841
GS
2441 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2442 PTR2UV(sv),SvUVX(sv)));
25da4f38 2443 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
ff68c719 2444}
2445
645c22ef
DM
2446/*
2447=for apidoc sv_2nv
2448
2449Return the num value of an SV, doing any necessary string or integer
2450conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2451macros.
2452
2453=cut
2454*/
2455
65202027 2456NV
5de3775c 2457Perl_sv_2nv(pTHX_ register SV *const sv)
79072805 2458{
97aff369 2459 dVAR;
79072805
LW
2460 if (!sv)
2461 return 0.0;
cecf5685
NC
2462 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2463 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e 2464 cache IVs just in case. */
463ee0b2
LW
2465 mg_get(sv);
2466 if (SvNOKp(sv))
2467 return SvNVX(sv);
0aa395f8 2468 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
041457d9 2469 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
504618e9 2470 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
a0d0e21e 2471 not_a_number(sv);
3f7c398e 2472 return Atof(SvPVX_const(sv));
a0d0e21e 2473 }
25da4f38 2474 if (SvIOKp(sv)) {
1c846c1f 2475 if (SvIsUV(sv))
65202027 2476 return (NV)SvUVX(sv);
25da4f38 2477 else
65202027 2478 return (NV)SvIVX(sv);
47a72cb8
NC
2479 }
2480 if (SvROK(sv)) {
2481 goto return_rok;
2482 }
2483 assert(SvTYPE(sv) >= SVt_PVMG);
2484 /* This falls through to the report_uninit near the end of the
2485 function. */
2486 } else if (SvTHINKFIRST(sv)) {
a0d0e21e 2487 if (SvROK(sv)) {
47a72cb8 2488 return_rok:
deb46114
NC
2489 if (SvAMAGIC(sv)) {
2490 SV *const tmpstr = AMG_CALLun(sv,numer);
2491 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2492 return SvNV(tmpstr);
2493 }
2494 }
2495 return PTR2NV(SvRV(sv));
a0d0e21e 2496 }
765f542d
NC
2497 if (SvIsCOW(sv)) {
2498 sv_force_normal_flags(sv, 0);
8a818333 2499 }
0336b60e 2500 if (SvREADONLY(sv) && !SvOK(sv)) {
599cee73 2501 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2502 report_uninit(sv);
ed6116ce
LW
2503 return 0.0;
2504 }
79072805
LW
2505 }
2506 if (SvTYPE(sv) < SVt_NV) {
7e25a7e9
NC
2507 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2508 sv_upgrade(sv, SVt_NV);
906f284f 2509#ifdef USE_LONG_DOUBLE
097ee67d 2510 DEBUG_c({
f93f4e46 2511 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2512 PerlIO_printf(Perl_debug_log,
2513 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2514 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2515 RESTORE_NUMERIC_LOCAL();
2516 });
65202027 2517#else
572bbb43 2518 DEBUG_c({
f93f4e46 2519 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2520 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
1d7c1841 2521 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2522 RESTORE_NUMERIC_LOCAL();
2523 });
572bbb43 2524#endif
79072805
LW
2525 }
2526 else if (SvTYPE(sv) < SVt_PVNV)
2527 sv_upgrade(sv, SVt_PVNV);
59d8ce62
NC
2528 if (SvNOKp(sv)) {
2529 return SvNVX(sv);
61604483 2530 }
59d8ce62 2531 if (SvIOKp(sv)) {
9d6ce603 2532 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
28e5dec8 2533#ifdef NV_PRESERVES_UV
a43d94f2
NC
2534 if (SvIOK(sv))
2535 SvNOK_on(sv);
2536 else
2537 SvNOKp_on(sv);
28e5dec8
JH
2538#else
2539 /* Only set the public NV OK flag if this NV preserves the IV */
2540 /* Check it's not 0xFFFFFFFFFFFFFFFF */
a43d94f2
NC
2541 if (SvIOK(sv) &&
2542 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
28e5dec8
JH
2543 : (SvIVX(sv) == I_V(SvNVX(sv))))
2544 SvNOK_on(sv);
2545 else
2546 SvNOKp_on(sv);
2547#endif
93a17b20 2548 }
748a9306 2549 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2550 UV value;
3f7c398e 2551 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
041457d9 2552 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
a0d0e21e 2553 not_a_number(sv);
28e5dec8 2554#ifdef NV_PRESERVES_UV
c2988b20
NC
2555 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2556 == IS_NUMBER_IN_UV) {
5e045b90 2557 /* It's definitely an integer */
9d6ce603 2558 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
c2988b20 2559 } else
3f7c398e 2560 SvNV_set(sv, Atof(SvPVX_const(sv)));
a43d94f2
NC
2561 if (numtype)
2562 SvNOK_on(sv);
2563 else
2564 SvNOKp_on(sv);
28e5dec8 2565#else
3f7c398e 2566 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2567 /* Only set the public NV OK flag if this NV preserves the value in
2568 the PV at least as well as an IV/UV would.
2569 Not sure how to do this 100% reliably. */
2570 /* if that shift count is out of range then Configure's test is
2571 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2572 UV_BITS */
2573 if (((UV)1 << NV_PRESERVES_UV_BITS) >
c2988b20 2574 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
28e5dec8 2575 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
c2988b20
NC
2576 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2577 /* Can't use strtol etc to convert this string, so don't try.
2578 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2579 SvNOK_on(sv);
2580 } else {
2581 /* value has been set. It may not be precise. */
2582 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2583 /* 2s complement assumption for (UV)IV_MIN */
2584 SvNOK_on(sv); /* Integer is too negative. */
2585 } else {
2586 SvNOKp_on(sv);
2587 SvIOKp_on(sv);
6fa402ec 2588
c2988b20 2589 if (numtype & IS_NUMBER_NEG) {
45977657 2590 SvIV_set(sv, -(IV)value);
c2988b20 2591 } else if (value <= (UV)IV_MAX) {
45977657 2592 SvIV_set(sv, (IV)value);
c2988b20 2593 } else {
607fa7f2 2594 SvUV_set(sv, value);
c2988b20
NC
2595 SvIsUV_on(sv);
2596 }
2597
2598 if (numtype & IS_NUMBER_NOT_INT) {
2599 /* I believe that even if the original PV had decimals,
2600 they are lost beyond the limit of the FP precision.
2601 However, neither is canonical, so both only get p
2602 flags. NWC, 2000/11/25 */
2603 /* Both already have p flags, so do nothing */
2604 } else {
66a1b24b 2605 const NV nv = SvNVX(sv);
c2988b20
NC
2606 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2607 if (SvIVX(sv) == I_V(nv)) {
2608 SvNOK_on(sv);
c2988b20 2609 } else {
c2988b20
NC
2610 /* It had no "." so it must be integer. */
2611 }
00b6aa41 2612 SvIOK_on(sv);
c2988b20
NC
2613 } else {
2614 /* between IV_MAX and NV(UV_MAX).
2615 Could be slightly > UV_MAX */
6fa402ec 2616
c2988b20
NC
2617 if (numtype & IS_NUMBER_NOT_INT) {
2618 /* UV and NV both imprecise. */
2619 } else {
66a1b24b 2620 const UV nv_as_uv = U_V(nv);
c2988b20
NC
2621
2622 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2623 SvNOK_on(sv);
c2988b20 2624 }
00b6aa41 2625 SvIOK_on(sv);
c2988b20
NC
2626 }
2627 }
2628 }
2629 }
2630 }
a43d94f2
NC
2631 /* It might be more code efficient to go through the entire logic above
2632 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2633 gets complex and potentially buggy, so more programmer efficient
2634 to do it this way, by turning off the public flags: */
2635 if (!numtype)
2636 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
28e5dec8 2637#endif /* NV_PRESERVES_UV */
93a17b20 2638 }
79072805 2639 else {
f7877b28 2640 if (isGV_with_GP(sv)) {
159b6efe 2641 glob_2number(MUTABLE_GV(sv));
180488f8
NC
2642 return 0.0;
2643 }
2644
041457d9 2645 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2646 report_uninit(sv);
7e25a7e9
NC
2647 assert (SvTYPE(sv) >= SVt_NV);
2648 /* Typically the caller expects that sv_any is not NULL now. */
2649 /* XXX Ilya implies that this is a bug in callers that assume this
2650 and ideally should be fixed. */
a0d0e21e 2651 return 0.0;
79072805 2652 }
572bbb43 2653#if defined(USE_LONG_DOUBLE)
097ee67d 2654 DEBUG_c({
f93f4e46 2655 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2656 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2657 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2658 RESTORE_NUMERIC_LOCAL();
2659 });
65202027 2660#else
572bbb43 2661 DEBUG_c({
f93f4e46 2662 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2663 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
1d7c1841 2664 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2665 RESTORE_NUMERIC_LOCAL();
2666 });
572bbb43 2667#endif
463ee0b2 2668 return SvNVX(sv);
79072805
LW
2669}
2670
800401ee
JH
2671/*
2672=for apidoc sv_2num
2673
2674Return an SV with the numeric value of the source SV, doing any necessary
a196a5fa
JH
2675reference or overload conversion. You must use the C<SvNUM(sv)> macro to
2676access this function.
800401ee
JH
2677
2678=cut
2679*/
2680
2681SV *
5de3775c 2682Perl_sv_2num(pTHX_ register SV *const sv)
800401ee 2683{
7918f24d
NC
2684 PERL_ARGS_ASSERT_SV_2NUM;
2685
b9ee0594
RGS
2686 if (!SvROK(sv))
2687 return sv;
800401ee
JH
2688 if (SvAMAGIC(sv)) {
2689 SV * const tmpsv = AMG_CALLun(sv,numer);
2690 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2691 return sv_2num(tmpsv);
2692 }
2693 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2694}
2695
645c22ef
DM
2696/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2697 * UV as a string towards the end of buf, and return pointers to start and
2698 * end of it.
2699 *
2700 * We assume that buf is at least TYPE_CHARS(UV) long.
2701 */
2702
864dbfa3 2703static char *
5de3775c 2704S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
25da4f38 2705{
25da4f38 2706 char *ptr = buf + TYPE_CHARS(UV);
823a54a3 2707 char * const ebuf = ptr;
25da4f38 2708 int sign;
25da4f38 2709
7918f24d
NC
2710 PERL_ARGS_ASSERT_UIV_2BUF;
2711
25da4f38
IZ
2712 if (is_uv)
2713 sign = 0;
2714 else if (iv >= 0) {
2715 uv = iv;
2716 sign = 0;
2717 } else {
2718 uv = -iv;
2719 sign = 1;
2720 }
2721 do {
eb160463 2722 *--ptr = '0' + (char)(uv % 10);
25da4f38
IZ
2723 } while (uv /= 10);
2724 if (sign)
2725 *--ptr = '-';
2726 *peob = ebuf;
2727 return ptr;
2728}
2729
645c22ef
DM
2730/*
2731=for apidoc sv_2pv_flags
2732
ff276b08 2733Returns a pointer to the string value of an SV, and sets *lp to its length.
645c22ef
DM
2734If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2735if necessary.
2736Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2737usually end up here too.
2738
2739=cut
2740*/
2741
8d6d96c1 2742char *
5de3775c 2743Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 2744{
97aff369 2745 dVAR;
79072805 2746 register char *s;
79072805 2747
463ee0b2 2748 if (!sv) {
cdb061a3
NC
2749 if (lp)
2750 *lp = 0;
73d840c0 2751 return (char *)"";
463ee0b2 2752 }
8990e307 2753 if (SvGMAGICAL(sv)) {
8d6d96c1
HS
2754 if (flags & SV_GMAGIC)
2755 mg_get(sv);
463ee0b2 2756 if (SvPOKp(sv)) {
cdb061a3
NC
2757 if (lp)
2758 *lp = SvCUR(sv);
10516c54
NC
2759 if (flags & SV_MUTABLE_RETURN)
2760 return SvPVX_mutable(sv);
4d84ee25
NC
2761 if (flags & SV_CONST_RETURN)
2762 return (char *)SvPVX_const(sv);
463ee0b2
LW
2763 return SvPVX(sv);
2764 }
75dfc8ec
NC
2765 if (SvIOKp(sv) || SvNOKp(sv)) {
2766 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
75dfc8ec
NC
2767 STRLEN len;
2768
2769 if (SvIOKp(sv)) {
e80fed9d 2770 len = SvIsUV(sv)
d9fad198
JH
2771 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2772 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
75dfc8ec 2773 } else {
e8ada2d0
NC
2774 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2775 len = strlen(tbuf);
75dfc8ec 2776 }
b5b886f0
NC
2777 assert(!SvROK(sv));
2778 {
75dfc8ec
NC
2779 dVAR;
2780
2781#ifdef FIXNEGATIVEZERO
e8ada2d0
NC
2782 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2783 tbuf[0] = '0';
2784 tbuf[1] = 0;
75dfc8ec
NC
2785 len = 1;
2786 }
2787#endif
2788 SvUPGRADE(sv, SVt_PV);
2789 if (lp)
2790 *lp = len;
2791 s = SvGROW_mutable(sv, len + 1);
2792 SvCUR_set(sv, len);
2793 SvPOKp_on(sv);
10edeb5d 2794 return (char*)memcpy(s, tbuf, len + 1);
75dfc8ec 2795 }
463ee0b2 2796 }
1c7ff15e
NC
2797 if (SvROK(sv)) {
2798 goto return_rok;
2799 }
2800 assert(SvTYPE(sv) >= SVt_PVMG);
2801 /* This falls through to the report_uninit near the end of the
2802 function. */
2803 } else if (SvTHINKFIRST(sv)) {
ed6116ce 2804 if (SvROK(sv)) {
1c7ff15e 2805 return_rok:
deb46114
NC
2806 if (SvAMAGIC(sv)) {
2807 SV *const tmpstr = AMG_CALLun(sv,string);
2808 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2809 /* Unwrap this: */
2810 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2811 */
2812
2813 char *pv;
2814 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2815 if (flags & SV_CONST_RETURN) {
2816 pv = (char *) SvPVX_const(tmpstr);
2817 } else {
2818 pv = (flags & SV_MUTABLE_RETURN)
2819 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2820 }
2821 if (lp)
2822 *lp = SvCUR(tmpstr);
50adf7d2 2823 } else {
deb46114 2824 pv = sv_2pv_flags(tmpstr, lp, flags);
50adf7d2 2825 }
deb46114
NC
2826 if (SvUTF8(tmpstr))
2827 SvUTF8_on(sv);
2828 else
2829 SvUTF8_off(sv);
2830 return pv;
50adf7d2 2831 }
deb46114
NC
2832 }
2833 {
fafee734
NC
2834 STRLEN len;
2835 char *retval;
2836 char *buffer;
d2c6dc5e 2837 SV *const referent = SvRV(sv);
d8eae41e
NC
2838
2839 if (!referent) {
fafee734
NC
2840 len = 7;
2841 retval = buffer = savepvn("NULLREF", len);
5c35adbb 2842 } else if (SvTYPE(referent) == SVt_REGEXP) {
d2c6dc5e 2843 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
67d2d14d
AB
2844 I32 seen_evals = 0;
2845
2846 assert(re);
2847
2848 /* If the regex is UTF-8 we want the containing scalar to
2849 have an UTF-8 flag too */
2850 if (RX_UTF8(re))
2851 SvUTF8_on(sv);
2852 else
2853 SvUTF8_off(sv);
2854
2855 if ((seen_evals = RX_SEEN_EVALS(re)))
2856 PL_reginterp_cnt += seen_evals;
2857
2858 if (lp)
2859 *lp = RX_WRAPLEN(re);
2860
2861 return RX_WRAPPED(re);
d8eae41e
NC
2862 } else {
2863 const char *const typestr = sv_reftype(referent, 0);
fafee734
NC
2864 const STRLEN typelen = strlen(typestr);
2865 UV addr = PTR2UV(referent);
2866 const char *stashname = NULL;
2867 STRLEN stashnamelen = 0; /* hush, gcc */
2868 const char *buffer_end;
d8eae41e 2869
d8eae41e 2870 if (SvOBJECT(referent)) {
fafee734
NC
2871 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2872
2873 if (name) {
2874 stashname = HEK_KEY(name);
2875 stashnamelen = HEK_LEN(name);
2876
2877 if (HEK_UTF8(name)) {
2878 SvUTF8_on(sv);
2879 } else {
2880 SvUTF8_off(sv);
2881 }
2882 } else {
2883 stashname = "__ANON__";
2884 stashnamelen = 8;
2885 }
2886 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2887 + 2 * sizeof(UV) + 2 /* )\0 */;
2888 } else {
2889 len = typelen + 3 /* (0x */
2890 + 2 * sizeof(UV) + 2 /* )\0 */;
d8eae41e 2891 }
fafee734
NC
2892
2893 Newx(buffer, len, char);
2894 buffer_end = retval = buffer + len;
2895
2896 /* Working backwards */
2897 *--retval = '\0';
2898 *--retval = ')';
2899 do {
2900 *--retval = PL_hexdigit[addr & 15];
2901 } while (addr >>= 4);
2902 *--retval = 'x';
2903 *--retval = '0';
2904 *--retval = '(';
2905
2906 retval -= typelen;
2907 memcpy(retval, typestr, typelen);
2908
2909 if (stashname) {
2910 *--retval = '=';
2911 retval -= stashnamelen;
2912 memcpy(retval, stashname, stashnamelen);
2913 }
2914 /* retval may not neccesarily have reached the start of the
2915 buffer here. */
2916 assert (retval >= buffer);
2917
2918 len = buffer_end - retval - 1; /* -1 for that \0 */
c080367d 2919 }
042dae7a 2920 if (lp)
fafee734
NC
2921 *lp = len;
2922 SAVEFREEPV(buffer);
2923 return retval;
463ee0b2 2924 }
79072805 2925 }
0336b60e 2926 if (SvREADONLY(sv) && !SvOK(sv)) {
cdb061a3
NC
2927 if (lp)
2928 *lp = 0;
9f621bb0
NC
2929 if (flags & SV_UNDEF_RETURNS_NULL)
2930 return NULL;
2931 if (ckWARN(WARN_UNINITIALIZED))
2932 report_uninit(sv);
73d840c0 2933 return (char *)"";
79072805 2934 }
79072805 2935 }
28e5dec8
JH
2936 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2937 /* I'm assuming that if both IV and NV are equally valid then
2938 converting the IV is going to be more efficient */
e1ec3a88 2939 const U32 isUIOK = SvIsUV(sv);
28e5dec8
JH
2940 char buf[TYPE_CHARS(UV)];
2941 char *ebuf, *ptr;
97a130b8 2942 STRLEN len;
28e5dec8
JH
2943
2944 if (SvTYPE(sv) < SVt_PVIV)
2945 sv_upgrade(sv, SVt_PVIV);
4ea1d550 2946 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
97a130b8 2947 len = ebuf - ptr;
5902b6a9 2948 /* inlined from sv_setpvn */
97a130b8
NC
2949 s = SvGROW_mutable(sv, len + 1);
2950 Move(ptr, s, len, char);
2951 s += len;
28e5dec8 2952 *s = '\0';
28e5dec8
JH
2953 }
2954 else if (SvNOKp(sv)) {
4ee39169 2955 dSAVE_ERRNO;
79072805
LW
2956 if (SvTYPE(sv) < SVt_PVNV)
2957 sv_upgrade(sv, SVt_PVNV);
1c846c1f 2958 /* The +20 is pure guesswork. Configure test needed. --jhi */
5902b6a9 2959 s = SvGROW_mutable(sv, NV_DIG + 20);
c81271c3 2960 /* some Xenix systems wipe out errno here */
79072805 2961#ifdef apollo
463ee0b2 2962 if (SvNVX(sv) == 0.0)
d1307786 2963 my_strlcpy(s, "0", SvLEN(sv));
79072805
LW
2964 else
2965#endif /*apollo*/
bbce6d69 2966 {
2d4389e4 2967 Gconvert(SvNVX(sv), NV_DIG, 0, s);
bbce6d69 2968 }
4ee39169 2969 RESTORE_ERRNO;
a0d0e21e 2970#ifdef FIXNEGATIVEZERO
20773dcd
NC
2971 if (*s == '-' && s[1] == '0' && !s[2]) {
2972 s[0] = '0';
2973 s[1] = 0;
2974 }
a0d0e21e 2975#endif
79072805
LW
2976 while (*s) s++;
2977#ifdef hcx
2978 if (s[-1] == '.')
46fc3d4c 2979 *--s = '\0';
79072805
LW
2980#endif
2981 }
79072805 2982 else {
8d1c3e26
NC
2983 if (isGV_with_GP(sv)) {
2984 GV *const gv = MUTABLE_GV(sv);
2985 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2986 SV *const buffer = sv_newmortal();
2987
2988 /* FAKE globs can get coerced, so need to turn this off temporarily
2989 if it is on. */
2990 SvFAKE_off(gv);
2991 gv_efullname3(buffer, gv, "*");
2992 SvFLAGS(gv) |= wasfake;
2993
2994 assert(SvPOK(buffer));
2995 if (lp) {
2996 *lp = SvCUR(buffer);
2997 }
2998 return SvPVX(buffer);
2999 }
180488f8 3000
cdb061a3 3001 if (lp)
00b6aa41 3002 *lp = 0;
9f621bb0
NC
3003 if (flags & SV_UNDEF_RETURNS_NULL)
3004 return NULL;
3005 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
3006 report_uninit(sv);
25da4f38
IZ
3007 if (SvTYPE(sv) < SVt_PV)
3008 /* Typically the caller expects that sv_any is not NULL now. */
3009 sv_upgrade(sv, SVt_PV);
73d840c0 3010 return (char *)"";
79072805 3011 }
cdb061a3 3012 {
823a54a3 3013 const STRLEN len = s - SvPVX_const(sv);
cdb061a3
NC
3014 if (lp)
3015 *lp = len;
3016 SvCUR_set(sv, len);
3017 }
79072805 3018 SvPOK_on(sv);
1d7c1841 3019 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 3020 PTR2UV(sv),SvPVX_const(sv)));
4d84ee25
NC
3021 if (flags & SV_CONST_RETURN)
3022 return (char *)SvPVX_const(sv);
10516c54
NC
3023 if (flags & SV_MUTABLE_RETURN)
3024 return SvPVX_mutable(sv);
463ee0b2
LW
3025 return SvPVX(sv);
3026}
3027
645c22ef 3028/*
6050d10e
JP
3029=for apidoc sv_copypv
3030
3031Copies a stringified representation of the source SV into the
3032destination SV. Automatically performs any necessary mg_get and
54f0641b 3033coercion of numeric values into strings. Guaranteed to preserve
2575c402 3034UTF8 flag even from overloaded objects. Similar in nature to
54f0641b
NIS
3035sv_2pv[_flags] but operates directly on an SV instead of just the
3036string. Mostly uses sv_2pv_flags to do its work, except when that
6050d10e
JP
3037would lose the UTF-8'ness of the PV.
3038
3039=cut
3040*/
3041
3042void
5de3775c 3043Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
6050d10e 3044{
446eaa42 3045 STRLEN len;
53c1dcc0 3046 const char * const s = SvPV_const(ssv,len);
7918f24d
NC
3047
3048 PERL_ARGS_ASSERT_SV_COPYPV;
3049
cb50f42d 3050 sv_setpvn(dsv,s,len);
446eaa42 3051 if (SvUTF8(ssv))
cb50f42d 3052 SvUTF8_on(dsv);
446eaa42 3053 else
cb50f42d 3054 SvUTF8_off(dsv);
6050d10e
JP
3055}
3056
3057/*
645c22ef
DM
3058=for apidoc sv_2pvbyte
3059
3060Return a pointer to the byte-encoded representation of the SV, and set *lp
1e54db1a 3061to its length. May cause the SV to be downgraded from UTF-8 as a
645c22ef
DM
3062side-effect.
3063
3064Usually accessed via the C<SvPVbyte> macro.
3065
3066=cut
3067*/
3068
7340a771 3069char *
5de3775c 3070Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3071{
7918f24d
NC
3072 PERL_ARGS_ASSERT_SV_2PVBYTE;
3073
0875d2fe 3074 sv_utf8_downgrade(sv,0);
97972285 3075 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771
GS
3076}
3077
645c22ef 3078/*
035cbb0e
RGS
3079=for apidoc sv_2pvutf8
3080
3081Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3082to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3083
3084Usually accessed via the C<SvPVutf8> macro.
3085
3086=cut
3087*/
645c22ef 3088
7340a771 3089char *
7bc54cea 3090Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3091{
7918f24d
NC
3092 PERL_ARGS_ASSERT_SV_2PVUTF8;
3093
035cbb0e
RGS
3094 sv_utf8_upgrade(sv);
3095 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771 3096}
1c846c1f 3097
7ee2227d 3098
645c22ef
DM
3099/*
3100=for apidoc sv_2bool
3101
3102This function is only called on magical items, and is only used by
8cf8f3d1 3103sv_true() or its macro equivalent.
645c22ef
DM
3104
3105=cut
3106*/
3107
463ee0b2 3108bool
7bc54cea 3109Perl_sv_2bool(pTHX_ register SV *const sv)
463ee0b2 3110{
97aff369 3111 dVAR;
7918f24d
NC
3112
3113 PERL_ARGS_ASSERT_SV_2BOOL;
3114
5b295bef 3115 SvGETMAGIC(sv);
463ee0b2 3116
a0d0e21e
LW
3117 if (!SvOK(sv))
3118 return 0;
3119 if (SvROK(sv)) {
fabdb6c0
AL
3120 if (SvAMAGIC(sv)) {
3121 SV * const tmpsv = AMG_CALLun(sv,bool_);
3122 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3123 return (bool)SvTRUE(tmpsv);
3124 }
3125 return SvRV(sv) != 0;
a0d0e21e 3126 }
463ee0b2 3127 if (SvPOKp(sv)) {
53c1dcc0
AL
3128 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3129 if (Xpvtmp &&
339049b0 3130 (*sv->sv_u.svu_pv > '0' ||
11343788 3131 Xpvtmp->xpv_cur > 1 ||
339049b0 3132 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
463ee0b2
LW
3133 return 1;
3134 else
3135 return 0;
3136 }
3137 else {
3138 if (SvIOKp(sv))
3139 return SvIVX(sv) != 0;
3140 else {
3141 if (SvNOKp(sv))
3142 return SvNVX(sv) != 0.0;
180488f8 3143 else {
f7877b28 3144 if (isGV_with_GP(sv))
180488f8
NC
3145 return TRUE;
3146 else
3147 return FALSE;
3148 }
463ee0b2
LW
3149 }
3150 }
79072805
LW
3151}
3152
c461cf8f
JH
3153/*
3154=for apidoc sv_utf8_upgrade
3155
78ea37eb 3156Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3157Forces the SV to string form if it is not already.
2bbc8d55 3158Will C<mg_get> on C<sv> if appropriate.
4411f3b6 3159Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3160if the whole string is the same in UTF-8 as not.
3161Returns the number of bytes in the converted string
c461cf8f 3162
13a6c0e0
JH
3163This is not as a general purpose byte encoding to Unicode interface:
3164use the Encode extension for that.
3165
fe749c9a
KW
3166=for apidoc sv_utf8_upgrade_nomg
3167
3168Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3169
8d6d96c1
HS
3170=for apidoc sv_utf8_upgrade_flags
3171
78ea37eb 3172Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3173Forces the SV to string form if it is not already.
8d6d96c1 3174Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3175if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3176will C<mg_get> on C<sv> if appropriate, else not.
3177Returns the number of bytes in the converted string
3178C<sv_utf8_upgrade> and
8d6d96c1
HS
3179C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3180
13a6c0e0
JH
3181This is not as a general purpose byte encoding to Unicode interface:
3182use the Encode extension for that.
3183
8d6d96c1 3184=cut
b3ab6785
KW
3185
3186The grow version is currently not externally documented. It adds a parameter,
3187extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3188have free after it upon return. This allows the caller to reserve extra space
3189that it intends to fill, to avoid extra grows.
3190
3191Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3192which can be used to tell this function to not first check to see if there are
3193any characters that are different in UTF-8 (variant characters) which would
3194force it to allocate a new string to sv, but to assume there are. Typically
3195this flag is used by a routine that has already parsed the string to find that
3196there are such characters, and passes this information on so that the work
3197doesn't have to be repeated.
3198
3199(One might think that the calling routine could pass in the position of the
3200first such variant, so it wouldn't have to be found again. But that is not the
3201case, because typically when the caller is likely to use this flag, it won't be
3202calling this routine unless it finds something that won't fit into a byte.
3203Otherwise it tries to not upgrade and just use bytes. But some things that
3204do fit into a byte are variants in utf8, and the caller may not have been
3205keeping track of these.)
3206
3207If the routine itself changes the string, it adds a trailing NUL. Such a NUL
3208isn't guaranteed due to having other routines do the work in some input cases,
3209or if the input is already flagged as being in utf8.
3210
3211The speed of this could perhaps be improved for many cases if someone wanted to
3212write a fast function that counts the number of variant characters in a string,
3213especially if it could return the position of the first one.
3214
8d6d96c1
HS
3215*/
3216
3217STRLEN
b3ab6785 3218Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
8d6d96c1 3219{
97aff369 3220 dVAR;
7918f24d 3221
b3ab6785 3222 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
7918f24d 3223
808c356f
RGS
3224 if (sv == &PL_sv_undef)
3225 return 0;
e0e62c2a
NIS
3226 if (!SvPOK(sv)) {
3227 STRLEN len = 0;
d52b7888
NC
3228 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3229 (void) sv_2pv_flags(sv,&len, flags);
b3ab6785
KW
3230 if (SvUTF8(sv)) {
3231 if (extra) SvGROW(sv, SvCUR(sv) + extra);
d52b7888 3232 return len;
b3ab6785 3233 }
d52b7888
NC
3234 } else {
3235 (void) SvPV_force(sv,len);
3236 }
e0e62c2a 3237 }
4411f3b6 3238
f5cee72b 3239 if (SvUTF8(sv)) {
b3ab6785 3240 if (extra) SvGROW(sv, SvCUR(sv) + extra);
5fec3b1d 3241 return SvCUR(sv);
f5cee72b 3242 }
5fec3b1d 3243
765f542d
NC
3244 if (SvIsCOW(sv)) {
3245 sv_force_normal_flags(sv, 0);
db42d148
NIS
3246 }
3247
b3ab6785 3248 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
799ef3cb 3249 sv_recode_to_utf8(sv, PL_encoding);
b3ab6785
KW
3250 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3251 return SvCUR(sv);
3252 }
3253
3254 if (SvCUR(sv) > 0) { /* Assume Latin-1/EBCDIC */
c4e7c712 3255 /* This function could be much more efficient if we
2bbc8d55 3256 * had a FLAG in SVs to signal if there are any variant
c4e7c712 3257 * chars in the PV. Given that there isn't such a flag
b3ab6785
KW
3258 * make the loop as fast as possible (although there are certainly ways
3259 * to speed this up, eg. through vectorization) */
3260 U8 * s = (U8 *) SvPVX_const(sv);
3261 U8 * e = (U8 *) SvEND(sv);
3262 U8 *t = s;
3263 STRLEN two_byte_count = 0;
c4e7c712 3264
b3ab6785
KW
3265 if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3266
3267 /* See if really will need to convert to utf8. We mustn't rely on our
3268 * incoming SV being well formed and having a trailing '\0', as certain
3269 * code in pp_formline can send us partially built SVs. */
3270
c4e7c712 3271 while (t < e) {
53c1dcc0 3272 const U8 ch = *t++;
b3ab6785
KW
3273 if (NATIVE_IS_INVARIANT(ch)) continue;
3274
3275 t--; /* t already incremented; re-point to first variant */
3276 two_byte_count = 1;
3277 goto must_be_utf8;
c4e7c712 3278 }
b3ab6785
KW
3279
3280 /* utf8 conversion not needed because all are invariants. Mark as
3281 * UTF-8 even if no variant - saves scanning loop */
c4e7c712 3282 SvUTF8_on(sv);
b3ab6785
KW
3283 return SvCUR(sv);
3284
3285must_be_utf8:
3286
3287 /* Here, the string should be converted to utf8, either because of an
3288 * input flag (two_byte_count = 0), or because a character that
3289 * requires 2 bytes was found (two_byte_count = 1). t points either to
3290 * the beginning of the string (if we didn't examine anything), or to
3291 * the first variant. In either case, everything from s to t - 1 will
3292 * occupy only 1 byte each on output.
3293 *
3294 * There are two main ways to convert. One is to create a new string
3295 * and go through the input starting from the beginning, appending each
3296 * converted value onto the new string as we go along. It's probably
3297 * best to allocate enough space in the string for the worst possible
3298 * case rather than possibly running out of space and having to
3299 * reallocate and then copy what we've done so far. Since everything
3300 * from s to t - 1 is invariant, the destination can be initialized
3301 * with these using a fast memory copy
3302 *
3303 * The other way is to figure out exactly how big the string should be
3304 * by parsing the entire input. Then you don't have to make it big
3305 * enough to handle the worst possible case, and more importantly, if
3306 * the string you already have is large enough, you don't have to
3307 * allocate a new string, you can copy the last character in the input
3308 * string to the final position(s) that will be occupied by the
3309 * converted string and go backwards, stopping at t, since everything
3310 * before that is invariant.
3311 *
3312 * There are advantages and disadvantages to each method.
3313 *
3314 * In the first method, we can allocate a new string, do the memory
3315 * copy from the s to t - 1, and then proceed through the rest of the
3316 * string byte-by-byte.
3317 *
3318 * In the second method, we proceed through the rest of the input
3319 * string just calculating how big the converted string will be. Then
3320 * there are two cases:
3321 * 1) if the string has enough extra space to handle the converted
3322 * value. We go backwards through the string, converting until we
3323 * get to the position we are at now, and then stop. If this
3324 * position is far enough along in the string, this method is
3325 * faster than the other method. If the memory copy were the same
3326 * speed as the byte-by-byte loop, that position would be about
3327 * half-way, as at the half-way mark, parsing to the end and back
3328 * is one complete string's parse, the same amount as starting
3329 * over and going all the way through. Actually, it would be
3330 * somewhat less than half-way, as it's faster to just count bytes
3331 * than to also copy, and we don't have the overhead of allocating
3332 * a new string, changing the scalar to use it, and freeing the
3333 * existing one. But if the memory copy is fast, the break-even
3334 * point is somewhere after half way. The counting loop could be
3335 * sped up by vectorization, etc, to move the break-even point
3336 * further towards the beginning.
3337 * 2) if the string doesn't have enough space to handle the converted
3338 * value. A new string will have to be allocated, and one might
3339 * as well, given that, start from the beginning doing the first
3340 * method. We've spent extra time parsing the string and in
3341 * exchange all we've gotten is that we know precisely how big to
3342 * make the new one. Perl is more optimized for time than space,
3343 * so this case is a loser.
3344 * So what I've decided to do is not use the 2nd method unless it is
3345 * guaranteed that a new string won't have to be allocated, assuming
3346 * the worst case. I also decided not to put any more conditions on it
3347 * than this, for now. It seems likely that, since the worst case is
3348 * twice as big as the unknown portion of the string (plus 1), we won't
3349 * be guaranteed enough space, causing us to go to the first method,
3350 * unless the string is short, or the first variant character is near
3351 * the end of it. In either of these cases, it seems best to use the
3352 * 2nd method. The only circumstance I can think of where this would
3353 * be really slower is if the string had once had much more data in it
3354 * than it does now, but there is still a substantial amount in it */
3355
3356 {
3357 STRLEN invariant_head = t - s;
3358 STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3359 if (SvLEN(sv) < size) {
3360
3361 /* Here, have decided to allocate a new string */
3362
3363 U8 *dst;
3364 U8 *d;
3365
3366 Newx(dst, size, U8);
3367
3368 /* If no known invariants at the beginning of the input string,
3369 * set so starts from there. Otherwise, can use memory copy to
3370 * get up to where we are now, and then start from here */
3371
3372 if (invariant_head <= 0) {
3373 d = dst;
3374 } else {
3375 Copy(s, dst, invariant_head, char);
3376 d = dst + invariant_head;
3377 }
3378
3379 while (t < e) {
3380 const UV uv = NATIVE8_TO_UNI(*t++);
3381 if (UNI_IS_INVARIANT(uv))
3382 *d++ = (U8)UNI_TO_NATIVE(uv);
3383 else {
3384 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3385 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3386 }
3387 }
3388 *d = '\0';
3389 SvPV_free(sv); /* No longer using pre-existing string */
3390 SvPV_set(sv, (char*)dst);
3391 SvCUR_set(sv, d - dst);
3392 SvLEN_set(sv, size);
3393 } else {
3394
3395 /* Here, have decided to get the exact size of the string.
3396 * Currently this happens only when we know that there is
3397 * guaranteed enough space to fit the converted string, so
3398 * don't have to worry about growing. If two_byte_count is 0,
3399 * then t points to the first byte of the string which hasn't
3400 * been examined yet. Otherwise two_byte_count is 1, and t
3401 * points to the first byte in the string that will expand to
3402 * two. Depending on this, start examining at t or 1 after t.
3403 * */
3404
3405 U8 *d = t + two_byte_count;
3406
3407
3408 /* Count up the remaining bytes that expand to two */
3409
3410 while (d < e) {
3411 const U8 chr = *d++;
3412 if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3413 }
3414
3415 /* The string will expand by just the number of bytes that
3416 * occupy two positions. But we are one afterwards because of
3417 * the increment just above. This is the place to put the
3418 * trailing NUL, and to set the length before we decrement */
3419
3420 d += two_byte_count;
3421 SvCUR_set(sv, d - s);
3422 *d-- = '\0';
3423
3424
3425 /* Having decremented d, it points to the position to put the
3426 * very last byte of the expanded string. Go backwards through
3427 * the string, copying and expanding as we go, stopping when we
3428 * get to the part that is invariant the rest of the way down */
3429
3430 e--;
3431 while (e >= t) {
3432 const U8 ch = NATIVE8_TO_UNI(*e--);
3433 if (UNI_IS_INVARIANT(ch)) {
3434 *d-- = UNI_TO_NATIVE(ch);
3435 } else {
3436 *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3437 *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3438 }
3439 }
3440 }
3441 }
560a288e 3442 }
b3ab6785
KW
3443
3444 /* Mark as UTF-8 even if no variant - saves scanning loop */
3445 SvUTF8_on(sv);
4411f3b6 3446 return SvCUR(sv);
560a288e
GS
3447}
3448
c461cf8f
JH
3449/*
3450=for apidoc sv_utf8_downgrade
3451
78ea37eb 3452Attempts to convert the PV of an SV from characters to bytes.
2bbc8d55
SP
3453If the PV contains a character that cannot fit
3454in a byte, this conversion will fail;
78ea37eb 3455in this case, either returns false or, if C<fail_ok> is not
c461cf8f
JH
3456true, croaks.
3457
13a6c0e0
JH
3458This is not as a general purpose Unicode to byte encoding interface:
3459use the Encode extension for that.
3460
c461cf8f
JH
3461=cut
3462*/
3463
560a288e 3464bool
7bc54cea 3465Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
560a288e 3466{
97aff369 3467 dVAR;
7918f24d
NC
3468
3469 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3470
78ea37eb 3471 if (SvPOKp(sv) && SvUTF8(sv)) {
fa301091 3472 if (SvCUR(sv)) {
03cfe0ae 3473 U8 *s;
652088fc 3474 STRLEN len;
fa301091 3475
765f542d
NC
3476 if (SvIsCOW(sv)) {
3477 sv_force_normal_flags(sv, 0);
3478 }
03cfe0ae
NIS
3479 s = (U8 *) SvPV(sv, len);
3480 if (!utf8_to_bytes(s, &len)) {
fa301091
JH
3481 if (fail_ok)
3482 return FALSE;
3483 else {
3484 if (PL_op)
3485 Perl_croak(aTHX_ "Wide character in %s",
53e06cf0 3486 OP_DESC(PL_op));
fa301091
JH
3487 else
3488 Perl_croak(aTHX_ "Wide character");
3489 }
4b3603a4 3490 }
b162af07 3491 SvCUR_set(sv, len);
67e989fb 3492 }
560a288e 3493 }
ffebcc3e 3494 SvUTF8_off(sv);
560a288e
GS
3495 return TRUE;
3496}
3497
c461cf8f
JH
3498/*
3499=for apidoc sv_utf8_encode
3500
78ea37eb
TS
3501Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3502flag off so that it looks like octets again.
c461cf8f
JH
3503
3504=cut
3505*/
3506
560a288e 3507void
7bc54cea 3508Perl_sv_utf8_encode(pTHX_ register SV *const sv)
560a288e 3509{
7918f24d
NC
3510 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3511
4c94c214
NC
3512 if (SvIsCOW(sv)) {
3513 sv_force_normal_flags(sv, 0);
3514 }
3515 if (SvREADONLY(sv)) {
f1f66076 3516 Perl_croak(aTHX_ "%s", PL_no_modify);
4c94c214 3517 }
a5f5288a 3518 (void) sv_utf8_upgrade(sv);
560a288e
GS
3519 SvUTF8_off(sv);
3520}
3521
4411f3b6
NIS
3522/*
3523=for apidoc sv_utf8_decode
3524
78ea37eb
TS
3525If the PV of the SV is an octet sequence in UTF-8
3526and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3527so that it looks like a character. If the PV contains only single-byte
3528characters, the C<SvUTF8> flag stays being off.
3529Scans PV for validity and returns false if the PV is invalid UTF-8.
4411f3b6
NIS
3530
3531=cut
3532*/
3533
560a288e 3534bool
7bc54cea 3535Perl_sv_utf8_decode(pTHX_ register SV *const sv)
560a288e 3536{
7918f24d
NC
3537 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3538
78ea37eb 3539 if (SvPOKp(sv)) {
93524f2b
NC
3540 const U8 *c;
3541 const U8 *e;
9cbac4c7 3542
645c22ef
DM
3543 /* The octets may have got themselves encoded - get them back as
3544 * bytes
3545 */
3546 if (!sv_utf8_downgrade(sv, TRUE))
560a288e
GS
3547 return FALSE;
3548
3549 /* it is actually just a matter of turning the utf8 flag on, but
3550 * we want to make sure everything inside is valid utf8 first.
3551 */
93524f2b 3552 c = (const U8 *) SvPVX_const(sv);
63cd0674 3553 if (!is_utf8_string(c, SvCUR(sv)+1))
67e989fb 3554 return FALSE;
93524f2b 3555 e = (const U8 *) SvEND(sv);
511c2ff0 3556 while (c < e) {
b64e5050 3557 const U8 ch = *c++;
c4d5f83a 3558 if (!UTF8_IS_INVARIANT(ch)) {
67e989fb
JH
3559 SvUTF8_on(sv);
3560 break;
3561 }
560a288e 3562 }
560a288e
GS
3563 }
3564 return TRUE;
3565}
3566
954c1994
GS
3567/*
3568=for apidoc sv_setsv
3569
645c22ef
DM
3570Copies the contents of the source SV C<ssv> into the destination SV
3571C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3572function if the source SV needs to be reused. Does not handle 'set' magic.
3573Loosely speaking, it performs a copy-by-value, obliterating any previous
3574content of the destination.
3575
3576You probably want to use one of the assortment of wrappers, such as
3577C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3578C<SvSetMagicSV_nosteal>.
3579
8d6d96c1
HS
3580=for apidoc sv_setsv_flags
3581
645c22ef
DM
3582Copies the contents of the source SV C<ssv> into the destination SV
3583C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3584function if the source SV needs to be reused. Does not handle 'set' magic.
3585Loosely speaking, it performs a copy-by-value, obliterating any previous
3586content of the destination.
3587If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
5fcdf167
NC
3588C<ssv> if appropriate, else not. If the C<flags> parameter has the
3589C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3590and C<sv_setsv_nomg> are implemented in terms of this function.
645c22ef
DM
3591
3592You probably want to use one of the assortment of wrappers, such as
3593C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3594C<SvSetMagicSV_nosteal>.
3595
3596This is the primary function for copying scalars, and most other
3597copy-ish functions and macros use this underneath.
8d6d96c1
HS
3598
3599=cut
3600*/
3601
5d0301b7 3602static void
7bc54cea 3603S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
5d0301b7 3604{
70cd14a1 3605 I32 mro_changes = 0; /* 1 = method, 2 = isa */
dd69841b 3606
7918f24d
NC
3607 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3608
5d0301b7
NC
3609 if (dtype != SVt_PVGV) {
3610 const char * const name = GvNAME(sstr);
3611 const STRLEN len = GvNAMELEN(sstr);
0d092c36 3612 {
f7877b28
NC
3613 if (dtype >= SVt_PV) {
3614 SvPV_free(dstr);
3615 SvPV_set(dstr, 0);
3616 SvLEN_set(dstr, 0);
3617 SvCUR_set(dstr, 0);
3618 }
0d092c36 3619 SvUPGRADE(dstr, SVt_PVGV);
dedf8e73 3620 (void)SvOK_off(dstr);
2e5b91de
NC
3621 /* FIXME - why are we doing this, then turning it off and on again
3622 below? */
3623 isGV_with_GP_on(dstr);
f7877b28 3624 }
5d0301b7
NC
3625 GvSTASH(dstr) = GvSTASH(sstr);
3626 if (GvSTASH(dstr))
daba3364 3627 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
159b6efe 3628 gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
5d0301b7
NC
3629 SvFAKE_on(dstr); /* can coerce to non-glob */
3630 }
3631
159b6efe 3632 if(GvGP(MUTABLE_GV(sstr))) {
dd69841b
BB
3633 /* If source has method cache entry, clear it */
3634 if(GvCVGEN(sstr)) {
3635 SvREFCNT_dec(GvCV(sstr));
3636 GvCV(sstr) = NULL;
3637 GvCVGEN(sstr) = 0;
3638 }
3639 /* If source has a real method, then a method is
3640 going to change */
159b6efe 3641 else if(GvCV((const GV *)sstr)) {
70cd14a1 3642 mro_changes = 1;
dd69841b
BB
3643 }
3644 }
3645
3646 /* If dest already had a real method, that's a change as well */
159b6efe 3647 if(!mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)) {
70cd14a1 3648 mro_changes = 1;
dd69841b
BB
3649 }
3650
159b6efe 3651 if(strEQ(GvNAME((const GV *)dstr),"ISA"))
70cd14a1
CB
3652 mro_changes = 2;
3653
159b6efe 3654 gp_free(MUTABLE_GV(dstr));
2e5b91de 3655 isGV_with_GP_off(dstr);
5d0301b7 3656 (void)SvOK_off(dstr);
2e5b91de 3657 isGV_with_GP_on(dstr);
dedf8e73 3658 GvINTRO_off(dstr); /* one-shot flag */
5d0301b7
NC
3659 GvGP(dstr) = gp_ref(GvGP(sstr));
3660 if (SvTAINTED(sstr))
3661 SvTAINT(dstr);
3662 if (GvIMPORTED(dstr) != GVf_IMPORTED
3663 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3664 {
3665 GvIMPORTED_on(dstr);
3666 }
3667 GvMULTI_on(dstr);
70cd14a1
CB
3668 if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3669 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
5d0301b7
NC
3670 return;
3671}
3672
b8473700 3673static void
7bc54cea 3674S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
7918f24d 3675{
b8473700
NC
3676 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3677 SV *dref = NULL;
3678 const int intro = GvINTRO(dstr);
2440974c 3679 SV **location;
3386d083 3680 U8 import_flag = 0;
27242d61 3681 const U32 stype = SvTYPE(sref);
26d68d86 3682 bool mro_changes = FALSE;
27242d61 3683
7918f24d 3684 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
b8473700 3685
b8473700
NC
3686 if (intro) {
3687 GvINTRO_off(dstr); /* one-shot flag */
3688 GvLINE(dstr) = CopLINE(PL_curcop);
159b6efe 3689 GvEGV(dstr) = MUTABLE_GV(dstr);
b8473700
NC
3690 }
3691 GvMULTI_on(dstr);
27242d61 3692 switch (stype) {
b8473700 3693 case SVt_PVCV:
27242d61
NC
3694 location = (SV **) &GvCV(dstr);
3695 import_flag = GVf_IMPORTED_CV;
3696 goto common;
3697 case SVt_PVHV:
3698 location = (SV **) &GvHV(dstr);
3699 import_flag = GVf_IMPORTED_HV;
3700 goto common;
3701 case SVt_PVAV:
3702 location = (SV **) &GvAV(dstr);
26d68d86
TC
3703 if (strEQ(GvNAME((GV*)dstr), "ISA"))
3704 mro_changes = TRUE;
27242d61
NC
3705 import_flag = GVf_IMPORTED_AV;
3706 goto common;
3707 case SVt_PVIO:
3708 location = (SV **) &GvIOp(dstr);
3709 goto common;
3710 case SVt_PVFM:
3711 location = (SV **) &GvFORM(dstr);
ef595a33 3712 goto common;
27242d61
NC
3713 default:
3714 location = &GvSV(dstr);
3715 import_flag = GVf_IMPORTED_SV;
3716 common:
b8473700 3717 if (intro) {
27242d61 3718 if (stype == SVt_PVCV) {
ea726b52 3719 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
5f2fca8a 3720 if (GvCVGEN(dstr)) {
27242d61
NC
3721 SvREFCNT_dec(GvCV(dstr));
3722 GvCV(dstr) = NULL;
3723 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
27242d61 3724 }
b8473700 3725 }
27242d61 3726 SAVEGENERICSV(*location);
b8473700
NC
3727 }
3728 else
27242d61 3729 dref = *location;
5f2fca8a 3730 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
ea726b52 3731 CV* const cv = MUTABLE_CV(*location);
b8473700 3732 if (cv) {
159b6efe 3733 if (!GvCVGEN((const GV *)dstr) &&
b8473700
NC
3734 (CvROOT(cv) || CvXSUB(cv)))
3735 {
3736 /* Redefining a sub - warning is mandatory if
3737 it was a const and its value changed. */
ea726b52 3738 if (CvCONST(cv) && CvCONST((const CV *)sref)
126f53f3
NC
3739 && cv_const_sv(cv)
3740 == cv_const_sv((const CV *)sref)) {
6f207bd3 3741 NOOP;
b8473700
NC
3742 /* They are 2 constant subroutines generated from
3743 the same constant. This probably means that
3744 they are really the "same" proxy subroutine
3745 instantiated in 2 places. Most likely this is
3746 when a constant is exported twice. Don't warn.
3747 */
3748 }
3749 else if (ckWARN(WARN_REDEFINE)
3750 || (CvCONST(cv)
ea726b52 3751 && (!CvCONST((const CV *)sref)
b8473700 3752 || sv_cmp(cv_const_sv(cv),
126f53f3
NC
3753 cv_const_sv((const CV *)
3754 sref))))) {
b8473700 3755 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10edeb5d
JH
3756 (const char *)
3757 (CvCONST(cv)
3758 ? "Constant subroutine %s::%s redefined"
3759 : "Subroutine %s::%s redefined"),
159b6efe
NC
3760 HvNAME_get(GvSTASH((const GV *)dstr)),
3761 GvENAME(MUTABLE_GV(dstr)));
b8473700
NC
3762 }
3763 }
3764 if (!intro)
159b6efe 3765 cv_ckproto_len(cv, (const GV *)dstr,
cbf82dd0
NC
3766 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3767 SvPOK(sref) ? SvCUR(sref) : 0);
b8473700 3768 }
b8473700
NC
3769 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3770 GvASSUMECV_on(dstr);
dd69841b 3771 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
b8473700 3772 }
2440974c 3773 *location = sref;
3386d083
NC
3774 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3775 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3776 GvFLAGS(dstr) |= import_flag;
b8473700
NC
3777 }
3778 break;
3779 }
b37c2d43 3780 SvREFCNT_dec(dref);
b8473700
NC
3781 if (SvTAINTED(sstr))
3782 SvTAINT(dstr);
26d68d86 3783 if (mro_changes) mro_isa_changed_in(GvSTASH(dstr));
b8473700
NC
3784 return;
3785}
3786
8d6d96c1 3787void
7bc54cea 3788Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
8d6d96c1 3789{
97aff369 3790 dVAR;
8990e307
LW
3791 register U32 sflags;
3792 register int dtype;
42d0e0b7 3793 register svtype stype;
463ee0b2 3794
7918f24d
NC
3795 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3796
79072805
LW
3797 if (sstr == dstr)
3798 return;
29f4f0ab
NC
3799
3800 if (SvIS_FREED(dstr)) {
3801 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
be2597df 3802 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
29f4f0ab 3803 }
765f542d 3804 SV_CHECK_THINKFIRST_COW_DROP(dstr);
79072805 3805 if (!sstr)
3280af22 3806 sstr = &PL_sv_undef;
29f4f0ab 3807 if (SvIS_FREED(sstr)) {
6c9570dc
MHM
3808 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3809 (void*)sstr, (void*)dstr);
29f4f0ab 3810 }
8990e307
LW
3811 stype = SvTYPE(sstr);
3812 dtype = SvTYPE(dstr);
79072805 3813
52944de8 3814 (void)SvAMAGIC_off(dstr);
7a5fa8a2 3815 if ( SvVOK(dstr) )
ece467f9
JP
3816 {
3817 /* need to nuke the magic */
3818 mg_free(dstr);
ece467f9 3819 }
9e7bc3e8 3820
463ee0b2 3821 /* There's a lot of redundancy below but we're going for speed here */
79072805 3822
8990e307 3823 switch (stype) {
79072805 3824 case SVt_NULL:
aece5585 3825 undef_sstr:
20408e3c
GS
3826 if (dtype != SVt_PVGV) {
3827 (void)SvOK_off(dstr);
3828 return;
3829 }
3830 break;
463ee0b2 3831 case SVt_IV:
aece5585
GA
3832 if (SvIOK(sstr)) {
3833 switch (dtype) {
3834 case SVt_NULL:
8990e307 3835 sv_upgrade(dstr, SVt_IV);
aece5585
GA
3836 break;
3837 case SVt_NV:
aece5585 3838 case SVt_PV:
a0d0e21e 3839 sv_upgrade(dstr, SVt_PVIV);
aece5585 3840 break;
010be86b
NC
3841 case SVt_PVGV:
3842 goto end_of_first_switch;
aece5585
GA
3843 }
3844 (void)SvIOK_only(dstr);
45977657 3845 SvIV_set(dstr, SvIVX(sstr));
25da4f38
IZ
3846 if (SvIsUV(sstr))
3847 SvIsUV_on(dstr);
37c25af0
NC
3848 /* SvTAINTED can only be true if the SV has taint magic, which in
3849 turn means that the SV type is PVMG (or greater). This is the
3850 case statement for SVt_IV, so this cannot be true (whatever gcov
3851 may say). */
3852 assert(!SvTAINTED(sstr));
aece5585 3853 return;
8990e307 3854 }
4df7f6af
NC
3855 if (!SvROK(sstr))
3856 goto undef_sstr;
3857 if (dtype < SVt_PV && dtype != SVt_IV)
3858 sv_upgrade(dstr, SVt_IV);
3859 break;
aece5585 3860
463ee0b2 3861 case SVt_NV:
aece5585
GA
3862 if (SvNOK(sstr)) {
3863 switch (dtype) {
3864 case SVt_NULL:
3865 case SVt_IV:
8990e307 3866 sv_upgrade(dstr, SVt_NV);
aece5585 3867 break;
aece5585
GA
3868 case SVt_PV:
3869 case SVt_PVIV:
a0d0e21e 3870 sv_upgrade(dstr, SVt_PVNV);
aece5585 3871 break;
010be86b
NC
3872 case SVt_PVGV:
3873 goto end_of_first_switch;
aece5585 3874 }
9d6ce603 3875 SvNV_set(dstr, SvNVX(sstr));
aece5585 3876 (void)SvNOK_only(dstr);
37c25af0
NC
3877 /* SvTAINTED can only be true if the SV has taint magic, which in
3878 turn means that the SV type is PVMG (or greater). This is the
3879 case statement for SVt_NV, so this cannot be true (whatever gcov
3880 may say). */
3881 assert(!SvTAINTED(sstr));
aece5585 3882 return;
8990e307 3883 }
aece5585
GA
3884 goto undef_sstr;
3885
fc36a67e 3886 case SVt_PVFM:
f8c7b90f 3887#ifdef PERL_OLD_COPY_ON_WRITE
d89fc664
NC
3888 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3889 if (dtype < SVt_PVIV)
3890 sv_upgrade(dstr, SVt_PVIV);
3891 break;
3892 }
3893 /* Fall through */
3894#endif
fd44068c 3895 case SVt_REGEXP:
d89fc664 3896 case SVt_PV:
8990e307 3897 if (dtype < SVt_PV)
463ee0b2 3898 sv_upgrade(dstr, SVt_PV);
463ee0b2
LW
3899 break;
3900 case SVt_PVIV:
8990e307 3901 if (dtype < SVt_PVIV)
463ee0b2 3902 sv_upgrade(dstr, SVt_PVIV);
463ee0b2
LW
3903 break;
3904 case SVt_PVNV:
8990e307 3905 if (dtype < SVt_PVNV)
463ee0b2 3906 sv_upgrade(dstr, SVt_PVNV);
463ee0b2 3907 break;
489f7bfe 3908 default:
a3b680e6
AL
3909 {
3910 const char * const type = sv_reftype(sstr,0);
533c011a 3911 if (PL_op)
a3b680e6 3912 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
4633a7c4 3913 else
a3b680e6
AL
3914 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3915 }
4633a7c4
LW
3916 break;
3917
cecf5685 3918 /* case SVt_BIND: */
39cb70dc 3919 case SVt_PVLV:
79072805 3920 case SVt_PVGV:
cecf5685 3921 if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
d4c19fe8 3922 glob_assign_glob(dstr, sstr, dtype);
b8c701c1 3923 return;
79072805 3924 }
cecf5685 3925 /* SvVALID means that this PVGV is playing at being an FBM. */
5f66b61c 3926 /*FALLTHROUGH*/
79072805 3927
489f7bfe 3928 case SVt_PVMG:
8d6d96c1 3929 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
973f89ab 3930 mg_get(sstr);
1d9c78c6 3931 if (SvTYPE(sstr) != stype) {
973f89ab 3932 stype = SvTYPE(sstr);
cecf5685 3933 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
d4c19fe8 3934 glob_assign_glob(dstr, sstr, dtype);
b8c701c1
NC
3935 return;
3936 }
973f89ab
CS
3937 }
3938 }
ded42b9f 3939 if (stype == SVt_PVLV)
862a34c6 3940 SvUPGRADE(dstr, SVt_PVNV);
ded42b9f 3941 else
42d0e0b7 3942 SvUPGRADE(dstr, (svtype)stype);
79072805 3943 }
010be86b 3944 end_of_first_switch:
79072805 3945
ff920335
NC
3946 /* dstr may have been upgraded. */
3947 dtype = SvTYPE(dstr);
8990e307
LW
3948 sflags = SvFLAGS(sstr);
3949
ba2fdce6 3950 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
85324b4d
NC
3951 /* Assigning to a subroutine sets the prototype. */
3952 if (SvOK(sstr)) {
3953 STRLEN len;
3954 const char *const ptr = SvPV_const(sstr, len);
3955
3956 SvGROW(dstr, len + 1);
3957 Copy(ptr, SvPVX(dstr), len + 1, char);
3958 SvCUR_set(dstr, len);
fcddd32e 3959 SvPOK_only(dstr);
ba2fdce6 3960 SvFLAGS(dstr) |= sflags & SVf_UTF8;
85324b4d
NC
3961 } else {
3962 SvOK_off(dstr);
3963 }
ba2fdce6
NC
3964 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3965 const char * const type = sv_reftype(dstr,0);
3966 if (PL_op)
3967 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_NAME(PL_op));
3968 else
3969 Perl_croak(aTHX_ "Cannot copy to %s", type);
85324b4d 3970 } else if (sflags & SVf_ROK) {
cecf5685 3971 if (isGV_with_GP(dstr) && dtype == SVt_PVGV
785bee4f 3972 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
acaa9288
NC
3973 sstr = SvRV(sstr);
3974 if (sstr == dstr) {
3975 if (GvIMPORTED(dstr) != GVf_IMPORTED
3976 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3977 {
3978 GvIMPORTED_on(dstr);
3979 }
3980 GvMULTI_on(dstr);
3981 return;
3982 }
785bee4f
NC
3983 glob_assign_glob(dstr, sstr, dtype);
3984 return;
acaa9288
NC
3985 }
3986
8990e307 3987 if (dtype >= SVt_PV) {
fdc5b023 3988 if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
d4c19fe8 3989 glob_assign_ref(dstr, sstr);
b8c701c1
NC
3990 return;
3991 }
3f7c398e 3992 if (SvPVX_const(dstr)) {
8bd4d4c5 3993 SvPV_free(dstr);
b162af07
SP
3994 SvLEN_set(dstr, 0);
3995 SvCUR_set(dstr, 0);
a0d0e21e 3996 }
8990e307 3997 }
a0d0e21e 3998 (void)SvOK_off(dstr);
b162af07 3999 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
96d4b0ee 4000 SvFLAGS(dstr) |= sflags & SVf_ROK;
dfd48732
NC
4001 assert(!(sflags & SVp_NOK));
4002 assert(!(sflags & SVp_IOK));
4003 assert(!(sflags & SVf_NOK));
4004 assert(!(sflags & SVf_IOK));
ed6116ce 4005 }
cecf5685 4006 else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
c0c44674
NC
4007 if (!(sflags & SVf_OK)) {
4008 if (ckWARN(WARN_MISC))
4009 Perl_warner(aTHX_ packWARN(WARN_MISC),
4010 "Undefined value assigned to typeglob");
4011 }
4012 else {
4013 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
daba3364 4014 if (dstr != (const SV *)gv) {
c0c44674 4015 if (GvGP(dstr))
159b6efe 4016 gp_free(MUTABLE_GV(dstr));
c0c44674
NC
4017 GvGP(dstr) = gp_ref(GvGP(gv));
4018 }
4019 }
4020 }
8990e307 4021 else if (sflags & SVp_POK) {
765f542d 4022 bool isSwipe = 0;
79072805
LW
4023
4024 /*
4025 * Check to see if we can just swipe the string. If so, it's a
4026 * possible small lose on short strings, but a big win on long ones.
3f7c398e
SP
4027 * It might even be a win on short strings if SvPVX_const(dstr)
4028 * has to be allocated and SvPVX_const(sstr) has to be freed.
34482cd6
NC
4029 * Likewise if we can set up COW rather than doing an actual copy, we
4030 * drop to the else clause, as the swipe code and the COW setup code
4031 * have much in common.
79072805
LW
4032 */
4033
120fac95
NC
4034 /* Whichever path we take through the next code, we want this true,
4035 and doing it now facilitates the COW check. */
4036 (void)SvPOK_only(dstr);
4037
765f542d 4038 if (
34482cd6
NC
4039 /* If we're already COW then this clause is not true, and if COW
4040 is allowed then we drop down to the else and make dest COW
4041 with us. If caller hasn't said that we're allowed to COW
4042 shared hash keys then we don't do the COW setup, even if the
4043 source scalar is a shared hash key scalar. */
4044 (((flags & SV_COW_SHARED_HASH_KEYS)
4045 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4046 : 1 /* If making a COW copy is forbidden then the behaviour we
4047 desire is as if the source SV isn't actually already
4048 COW, even if it is. So we act as if the source flags
4049 are not COW, rather than actually testing them. */
4050 )
f8c7b90f 4051#ifndef PERL_OLD_COPY_ON_WRITE
34482cd6
NC
4052 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4053 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4054 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4055 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4056 but in turn, it's somewhat dead code, never expected to go
4057 live, but more kept as a placeholder on how to do it better
4058 in a newer implementation. */
4059 /* If we are COW and dstr is a suitable target then we drop down
4060 into the else and make dest a COW of us. */
b8f9541a
NC
4061 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4062#endif
4063 )
765f542d 4064 &&
765f542d
NC
4065 !(isSwipe =
4066 (sflags & SVs_TEMP) && /* slated for free anyway? */
4067 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
5fcdf167
NC
4068 (!(flags & SV_NOSTEAL)) &&
4069 /* and we're allowed to steal temps */
765f542d
NC
4070 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4071 SvLEN(sstr) && /* and really is a string */
645c22ef 4072 /* and won't be needed again, potentially */
765f542d 4073 !(PL_op && PL_op->op_type == OP_AASSIGN))
f8c7b90f 4074#ifdef PERL_OLD_COPY_ON_WRITE
cb23d5b1
NC
4075 && ((flags & SV_COW_SHARED_HASH_KEYS)
4076 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4077 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4b1c7d9e 4078 && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
cb23d5b1 4079 : 1)
765f542d
NC
4080#endif
4081 ) {
4082 /* Failed the swipe test, and it's not a shared hash key either.
4083 Have to copy the string. */
4084 STRLEN len = SvCUR(sstr);
4085 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3f7c398e 4086 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
765f542d
NC
4087 SvCUR_set(dstr, len);
4088 *SvEND(dstr) = '\0';
765f542d 4089 } else {
f8c7b90f 4090 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
765f542d 4091 be true in here. */
765f542d
NC
4092 /* Either it's a shared hash key, or it's suitable for
4093 copy-on-write or we can swipe the string. */
46187eeb 4094 if (DEBUG_C_TEST) {
ed252734 4095 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
e419cbc5
NC
4096 sv_dump(sstr);
4097 sv_dump(dstr);
46187eeb 4098 }
f8c7b90f 4099#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4100 if (!isSwipe) {
765f542d
NC
4101 if ((sflags & (SVf_FAKE | SVf_READONLY))
4102 != (SVf_FAKE | SVf_READONLY)) {
4103 SvREADONLY_on(sstr);
4104 SvFAKE_on(sstr);
4105 /* Make the source SV into a loop of 1.
4106 (about to become 2) */
a29f6d03 4107 SV_COW_NEXT_SV_SET(sstr, sstr);
765f542d
NC
4108 }
4109 }
4110#endif
4111 /* Initial code is common. */
94010e71
NC
4112 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4113 SvPV_free(dstr);
79072805 4114 }
765f542d 4115
765f542d
NC
4116 if (!isSwipe) {
4117 /* making another shared SV. */
4118 STRLEN cur = SvCUR(sstr);
4119 STRLEN len = SvLEN(sstr);
f8c7b90f 4120#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4121 if (len) {
b8f9541a 4122 assert (SvTYPE(dstr) >= SVt_PVIV);
765f542d
NC
4123 /* SvIsCOW_normal */
4124 /* splice us in between source and next-after-source. */
a29f6d03
NC
4125 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4126 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4127 SvPV_set(dstr, SvPVX_mutable(sstr));
a604c751
NC
4128 } else
4129#endif
4130 {
765f542d 4131 /* SvIsCOW_shared_hash */
46187eeb
NC
4132 DEBUG_C(PerlIO_printf(Perl_debug_log,
4133 "Copy on write: Sharing hash\n"));
b8f9541a 4134
bdd68bc3 4135 assert (SvTYPE(dstr) >= SVt_PV);
765f542d 4136 SvPV_set(dstr,
d1db91c6 4137 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
bdd68bc3 4138 }
87a1ef3d
SP
4139 SvLEN_set(dstr, len);
4140 SvCUR_set(dstr, cur);
765f542d
NC
4141 SvREADONLY_on(dstr);
4142 SvFAKE_on(dstr);
765f542d
NC
4143 }
4144 else
765f542d 4145 { /* Passes the swipe test. */
78d1e721 4146 SvPV_set(dstr, SvPVX_mutable(sstr));
765f542d
NC
4147 SvLEN_set(dstr, SvLEN(sstr));
4148 SvCUR_set(dstr, SvCUR(sstr));
4149
4150 SvTEMP_off(dstr);
4151 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
6136c704 4152 SvPV_set(sstr, NULL);
765f542d
NC
4153 SvLEN_set(sstr, 0);
4154 SvCUR_set(sstr, 0);
4155 SvTEMP_off(sstr);
4156 }
4157 }
8990e307 4158 if (sflags & SVp_NOK) {
9d6ce603 4159 SvNV_set(dstr, SvNVX(sstr));
79072805 4160 }
8990e307 4161 if (sflags & SVp_IOK) {
23525414
NC
4162 SvIV_set(dstr, SvIVX(sstr));
4163 /* Must do this otherwise some other overloaded use of 0x80000000
4164 gets confused. I guess SVpbm_VALID */
2b1c7e3e 4165 if (sflags & SVf_IVisUV)
25da4f38 4166 SvIsUV_on(dstr);
79072805 4167 }
96d4b0ee 4168 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4f2da183 4169 {
b0a11fe1 4170 const MAGIC * const smg = SvVSTRING_mg(sstr);
4f2da183
NC
4171 if (smg) {
4172 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4173 smg->mg_ptr, smg->mg_len);
4174 SvRMAGICAL_on(dstr);
4175 }
7a5fa8a2 4176 }
79072805 4177 }
5d581361 4178 else if (sflags & (SVp_IOK|SVp_NOK)) {
c2468cc7 4179 (void)SvOK_off(dstr);
96d4b0ee 4180 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
5d581361
NC
4181 if (sflags & SVp_IOK) {
4182 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4183 SvIV_set(dstr, SvIVX(sstr));
4184 }
3332b3c1 4185 if (sflags & SVp_NOK) {
9d6ce603 4186 SvNV_set(dstr, SvNVX(sstr));
3332b3c1
JH
4187 }
4188 }
79072805 4189 else {
f7877b28 4190 if (isGV_with_GP(sstr)) {
180488f8
NC
4191 /* This stringification rule for globs is spread in 3 places.
4192 This feels bad. FIXME. */
4193 const U32 wasfake = sflags & SVf_FAKE;
4194
4195 /* FAKE globs can get coerced, so need to turn this off
4196 temporarily if it is on. */
4197 SvFAKE_off(sstr);
159b6efe 4198 gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
180488f8
NC
4199 SvFLAGS(sstr) |= wasfake;
4200 }
20408e3c
GS
4201 else
4202 (void)SvOK_off(dstr);
a0d0e21e 4203 }
27c9684d
AP
4204 if (SvTAINTED(sstr))
4205 SvTAINT(dstr);
79072805
LW
4206}
4207
954c1994
GS
4208/*
4209=for apidoc sv_setsv_mg
4210
4211Like C<sv_setsv>, but also handles 'set' magic.
4212
4213=cut
4214*/
4215
79072805 4216void
7bc54cea 4217Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
ef50df4b 4218{
7918f24d
NC
4219 PERL_ARGS_ASSERT_SV_SETSV_MG;
4220
ef50df4b
GS
4221 sv_setsv(dstr,sstr);
4222 SvSETMAGIC(dstr);
4223}
4224
f8c7b90f 4225#ifdef PERL_OLD_COPY_ON_WRITE
ed252734
NC
4226SV *
4227Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4228{
4229 STRLEN cur = SvCUR(sstr);
4230 STRLEN len = SvLEN(sstr);
4231 register char *new_pv;
4232
7918f24d
NC
4233 PERL_ARGS_ASSERT_SV_SETSV_COW;
4234
ed252734
NC
4235 if (DEBUG_C_TEST) {
4236 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
6c9570dc 4237 (void*)sstr, (void*)dstr);
ed252734
NC
4238 sv_dump(sstr);
4239 if (dstr)
4240 sv_dump(dstr);
4241 }
4242
4243 if (dstr) {
4244 if (SvTHINKFIRST(dstr))
4245 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3f7c398e
SP
4246 else if (SvPVX_const(dstr))
4247 Safefree(SvPVX_const(dstr));
ed252734
NC
4248 }
4249 else
4250 new_SV(dstr);
862a34c6 4251 SvUPGRADE(dstr, SVt_PVIV);
ed252734
NC
4252
4253 assert (SvPOK(sstr));
4254 assert (SvPOKp(sstr));
4255 assert (!SvIOK(sstr));
4256 assert (!SvIOKp(sstr));
4257 assert (!SvNOK(sstr));
4258 assert (!SvNOKp(sstr));
4259
4260 if (SvIsCOW(sstr)) {
4261
4262 if (SvLEN(sstr) == 0) {
4263 /* source is a COW shared hash key. */
ed252734
NC
4264 DEBUG_C(PerlIO_printf(Perl_debug_log,
4265 "Fast copy on write: Sharing hash\n"));
d1db91c6 4266 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
ed252734
NC
4267 goto common_exit;
4268 }
4269 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4270 } else {
4271 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
862a34c6 4272 SvUPGRADE(sstr, SVt_PVIV);
ed252734
NC
4273 SvREADONLY_on(sstr);
4274 SvFAKE_on(sstr);
4275 DEBUG_C(PerlIO_printf(Perl_debug_log,
4276 "Fast copy on write: Converting sstr to COW\n"));
4277 SV_COW_NEXT_SV_SET(dstr, sstr);
4278 }
4279 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4280 new_pv = SvPVX_mutable(sstr);
ed252734
NC
4281
4282 common_exit:
4283 SvPV_set(dstr, new_pv);
4284 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4285 if (SvUTF8(sstr))
4286 SvUTF8_on(dstr);
87a1ef3d
SP
4287 SvLEN_set(dstr, len);
4288 SvCUR_set(dstr, cur);
ed252734
NC
4289 if (DEBUG_C_TEST) {
4290 sv_dump(dstr);
4291 }
4292 return dstr;
4293}
4294#endif
4295
954c1994
GS
4296/*
4297=for apidoc sv_setpvn
4298
4299Copies a string into an SV. The C<len> parameter indicates the number of
9e09f5f2
MHM
4300bytes to be copied. If the C<ptr> argument is NULL the SV will become
4301undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
954c1994
GS
4302
4303=cut
4304*/
4305
ef50df4b 4306void
2e000ff2 4307Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
79072805 4308{
97aff369 4309 dVAR;
c6f8c383 4310 register char *dptr;
22c522df 4311
7918f24d
NC
4312 PERL_ARGS_ASSERT_SV_SETPVN;
4313
765f542d 4314 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4315 if (!ptr) {
a0d0e21e 4316 (void)SvOK_off(sv);
463ee0b2
LW
4317 return;
4318 }
22c522df
JH
4319 else {
4320 /* len is STRLEN which is unsigned, need to copy to signed */
a3b680e6 4321 const IV iv = len;
9c5ffd7c
JH
4322 if (iv < 0)
4323 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
22c522df 4324 }
862a34c6 4325 SvUPGRADE(sv, SVt_PV);
c6f8c383 4326
5902b6a9 4327 dptr = SvGROW(sv, len + 1);
c6f8c383
GA
4328 Move(ptr,dptr,len,char);
4329 dptr[len] = '\0';
79072805 4330 SvCUR_set(sv, len);
1aa99e6b 4331 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4332 SvTAINT(sv);
79072805
LW
4333}
4334
954c1994
GS
4335/*
4336=for apidoc sv_setpvn_mg
4337
4338Like C<sv_setpvn>, but also handles 'set' magic.
4339
4340=cut
4341*/
4342
79072805 4343void
2e000ff2 4344Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
ef50df4b 4345{
7918f24d
NC
4346 PERL_ARGS_ASSERT_SV_SETPVN_MG;
4347
ef50df4b
GS
4348 sv_setpvn(sv,ptr,len);
4349 SvSETMAGIC(sv);
4350}
4351
954c1994
GS
4352/*
4353=for apidoc sv_setpv
4354
4355Copies a string into an SV. The string must be null-terminated. Does not
4356handle 'set' magic. See C<sv_setpv_mg>.
4357
4358=cut
4359*/
4360
ef50df4b 4361void
2e000ff2 4362Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4363{
97aff369 4364 dVAR;
79072805
LW
4365 register STRLEN len;
4366
7918f24d
NC
4367 PERL_ARGS_ASSERT_SV_SETPV;
4368
765f542d 4369 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4370 if (!ptr) {
a0d0e21e 4371 (void)SvOK_off(sv);
463ee0b2
LW
4372 return;
4373 }
79072805 4374 len = strlen(ptr);
862a34c6 4375 SvUPGRADE(sv, SVt_PV);
c6f8c383 4376
79072805 4377 SvGROW(sv, len + 1);
463ee0b2 4378 Move(ptr,SvPVX(sv),len+1,char);
79072805 4379 SvCUR_set(sv, len);
1aa99e6b 4380 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2
LW
4381 SvTAINT(sv);
4382}
4383
954c1994
GS
4384/*
4385=for apidoc sv_setpv_mg
4386
4387Like C<sv_setpv>, but also handles 'set' magic.
4388
4389=cut
4390*/
4391
463ee0b2 4392void
2e000ff2 4393Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 4394{
7918f24d
NC
4395 PERL_ARGS_ASSERT_SV_SETPV_MG;
4396
ef50df4b
GS
4397 sv_setpv(sv,ptr);
4398 SvSETMAGIC(sv);
4399}
4400
954c1994 4401/*
47518d95 4402=for apidoc sv_usepvn_flags
954c1994 4403
794a0d33
JH
4404Tells an SV to use C<ptr> to find its string value. Normally the
4405string is stored inside the SV but sv_usepvn allows the SV to use an
4406outside string. The C<ptr> should point to memory that was allocated
c1c21316
NC
4407by C<malloc>. The string length, C<len>, must be supplied. By default
4408this function will realloc (i.e. move) the memory pointed to by C<ptr>,
794a0d33
JH
4409so that pointer should not be freed or used by the programmer after
4410giving it to sv_usepvn, and neither should any pointers from "behind"
c1c21316
NC
4411that pointer (e.g. ptr + 1) be used.
4412
4413If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4414SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
cbf82dd0 4415will be skipped. (i.e. the buffer is actually at least 1 byte longer than
c1c21316 4416C<len>, and already meets the requirements for storing in C<SvPVX>)
954c1994
GS
4417
4418=cut
4419*/
4420
ef50df4b 4421void
2e000ff2 4422Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
463ee0b2 4423{
97aff369 4424 dVAR;
1936d2a7 4425 STRLEN allocate;
7918f24d
NC
4426
4427 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4428
765f542d 4429 SV_CHECK_THINKFIRST_COW_DROP(sv);
862a34c6 4430 SvUPGRADE(sv, SVt_PV);
463ee0b2 4431 if (!ptr) {
a0d0e21e 4432 (void)SvOK_off(sv);
47518d95
NC
4433 if (flags & SV_SMAGIC)
4434 SvSETMAGIC(sv);
463ee0b2
LW
4435 return;
4436 }
3f7c398e 4437 if (SvPVX_const(sv))
8bd4d4c5 4438 SvPV_free(sv);
1936d2a7 4439
0b7042f9 4440#ifdef DEBUGGING
2e90b4cd
NC
4441 if (flags & SV_HAS_TRAILING_NUL)
4442 assert(ptr[len] == '\0');
0b7042f9 4443#endif
2e90b4cd 4444
c1c21316 4445 allocate = (flags & SV_HAS_TRAILING_NUL)
5d487c26 4446 ? len + 1 :
ca7c1a29 4447#ifdef Perl_safesysmalloc_size
5d487c26
NC
4448 len + 1;
4449#else
4450 PERL_STRLEN_ROUNDUP(len + 1);
4451#endif
cbf82dd0
NC
4452 if (flags & SV_HAS_TRAILING_NUL) {
4453 /* It's long enough - do nothing.
4454 Specfically Perl_newCONSTSUB is relying on this. */
4455 } else {
69d25b4f 4456#ifdef DEBUGGING
69d25b4f 4457 /* Force a move to shake out bugs in callers. */
10edeb5d 4458 char *new_ptr = (char*)safemalloc(allocate);
69d25b4f
NC
4459 Copy(ptr, new_ptr, len, char);
4460 PoisonFree(ptr,len,char);
4461 Safefree(ptr);
4462 ptr = new_ptr;
69d25b4f 4463#else
10edeb5d 4464 ptr = (char*) saferealloc (ptr, allocate);
69d25b4f 4465#endif
cbf82dd0 4466 }
ca7c1a29
NC
4467#ifdef Perl_safesysmalloc_size
4468 SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5d487c26 4469#else
1936d2a7 4470 SvLEN_set(sv, allocate);
5d487c26
NC
4471#endif
4472 SvCUR_set(sv, len);
4473 SvPV_set(sv, ptr);
c1c21316 4474 if (!(flags & SV_HAS_TRAILING_NUL)) {
97a130b8 4475 ptr[len] = '\0';
c1c21316 4476 }
1aa99e6b 4477 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4478 SvTAINT(sv);
47518d95
NC
4479 if (flags & SV_SMAGIC)
4480 SvSETMAGIC(sv);
ef50df4b
GS
4481}
4482
f8c7b90f 4483#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4484/* Need to do this *after* making the SV normal, as we need the buffer
4485 pointer to remain valid until after we've copied it. If we let go too early,
4486 another thread could invalidate it by unsharing last of the same hash key
4487 (which it can do by means other than releasing copy-on-write Svs)
4488 or by changing the other copy-on-write SVs in the loop. */
4489STATIC void
5302ffd4 4490S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
765f542d 4491{
7918f24d
NC
4492 PERL_ARGS_ASSERT_SV_RELEASE_COW;
4493
5302ffd4 4494 { /* this SV was SvIsCOW_normal(sv) */
765f542d 4495 /* we need to find the SV pointing to us. */
cf5629ad 4496 SV *current = SV_COW_NEXT_SV(after);
7a5fa8a2 4497
765f542d
NC
4498 if (current == sv) {
4499 /* The SV we point to points back to us (there were only two of us
4500 in the loop.)
4501 Hence other SV is no longer copy on write either. */
4502 SvFAKE_off(after);
4503 SvREADONLY_off(after);
4504 } else {
4505 /* We need to follow the pointers around the loop. */
4506 SV *next;
4507 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4508 assert (next);
4509 current = next;
4510 /* don't loop forever if the structure is bust, and we have
4511 a pointer into a closed loop. */
4512 assert (current != after);
3f7c398e 4513 assert (SvPVX_const(current) == pvx);
765f542d
NC
4514 }
4515 /* Make the SV before us point to the SV after us. */
a29f6d03 4516 SV_COW_NEXT_SV_SET(current, after);
765f542d 4517 }
765f542d
NC
4518 }
4519}
765f542d 4520#endif
645c22ef
DM
4521/*
4522=for apidoc sv_force_normal_flags
4523
4524Undo various types of fakery on an SV: if the PV is a shared string, make
4525a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
765f542d
NC
4526an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4527we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4528then a copy-on-write scalar drops its PV buffer (if any) and becomes
4529SvPOK_off rather than making a copy. (Used where this scalar is about to be
d3050d9d 4530set to some other value.) In addition, the C<flags> parameter gets passed to
765f542d
NC
4531C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4532with flags set to 0.
645c22ef
DM
4533
4534=cut
4535*/
4536
6fc92669 4537void
2e000ff2 4538Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
0f15f207 4539{
97aff369 4540 dVAR;
7918f24d
NC
4541
4542 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4543
f8c7b90f 4544#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4545 if (SvREADONLY(sv)) {
765f542d 4546 if (SvFAKE(sv)) {
b64e5050 4547 const char * const pvx = SvPVX_const(sv);
a28509cc
AL
4548 const STRLEN len = SvLEN(sv);
4549 const STRLEN cur = SvCUR(sv);
5302ffd4
NC
4550 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4551 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4552 we'll fail an assertion. */
4553 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4554
46187eeb
NC
4555 if (DEBUG_C_TEST) {
4556 PerlIO_printf(Perl_debug_log,
4557 "Copy on write: Force normal %ld\n",
4558 (long) flags);
e419cbc5 4559 sv_dump(sv);
46187eeb 4560 }
765f542d
NC
4561 SvFAKE_off(sv);
4562 SvREADONLY_off(sv);
9f653bb5 4563 /* This SV doesn't own the buffer, so need to Newx() a new one: */
6136c704 4564 SvPV_set(sv, NULL);
87a1ef3d 4565 SvLEN_set(sv, 0);
765f542d
NC
4566 if (flags & SV_COW_DROP_PV) {
4567 /* OK, so we don't need to copy our buffer. */
4568 SvPOK_off(sv);
4569 } else {
4570 SvGROW(sv, cur + 1);
4571 Move(pvx,SvPVX(sv),cur,char);
87a1ef3d 4572 SvCUR_set(sv, cur);
765f542d
NC
4573 *SvEND(sv) = '\0';
4574 }
5302ffd4
NC
4575 if (len) {
4576 sv_release_COW(sv, pvx, next);
4577 } else {
4578 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4579 }
46187eeb 4580 if (DEBUG_C_TEST) {
e419cbc5 4581 sv_dump(sv);
46187eeb 4582 }
765f542d 4583 }
923e4eb5 4584 else if (IN_PERL_RUNTIME)
f1f66076 4585 Perl_croak(aTHX_ "%s", PL_no_modify);
765f542d
NC
4586 }
4587#else
2213622d 4588 if (SvREADONLY(sv)) {
1c846c1f 4589 if (SvFAKE(sv)) {
b64e5050 4590 const char * const pvx = SvPVX_const(sv);
66a1b24b 4591 const STRLEN len = SvCUR(sv);
10bcdfd6
NC
4592 SvFAKE_off(sv);
4593 SvREADONLY_off(sv);
bd61b366 4594 SvPV_set(sv, NULL);
66a1b24b 4595 SvLEN_set(sv, 0);
1c846c1f 4596 SvGROW(sv, len + 1);
706aa1c9 4597 Move(pvx,SvPVX(sv),len,char);
1c846c1f 4598 *SvEND(sv) = '\0';
bdd68bc3 4599 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
1c846c1f 4600 }
923e4eb5 4601 else if (IN_PERL_RUNTIME)
f1f66076 4602 Perl_croak(aTHX_ "%s", PL_no_modify);
0f15f207 4603 }
765f542d 4604#endif
2213622d 4605 if (SvROK(sv))
840a7b70 4606 sv_unref_flags(sv, flags);
6fc92669
GS
4607 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4608 sv_unglob(sv);
0f15f207 4609}
1c846c1f 4610
645c22ef 4611/*
954c1994
GS
4612=for apidoc sv_chop
4613
1c846c1f 4614Efficient removal of characters from the beginning of the string buffer.
954c1994
GS
4615SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4616the string buffer. The C<ptr> becomes the first character of the adjusted
645c22ef 4617string. Uses the "OOK hack".
3f7c398e 4618Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
31869a79 4619refer to the same chunk of data.
954c1994
GS
4620
4621=cut
4622*/
4623
79072805 4624void
2e000ff2 4625Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4626{
69240efd
NC
4627 STRLEN delta;
4628 STRLEN old_delta;
7a4bba22
NC
4629 U8 *p;
4630#ifdef DEBUGGING
4631 const U8 *real_start;
4632#endif
6c65d5f9 4633 STRLEN max_delta;
7a4bba22 4634
7918f24d
NC
4635 PERL_ARGS_ASSERT_SV_CHOP;
4636
a0d0e21e 4637 if (!ptr || !SvPOKp(sv))
79072805 4638 return;
3f7c398e 4639 delta = ptr - SvPVX_const(sv);
15895f8a
NC
4640 if (!delta) {
4641 /* Nothing to do. */
4642 return;
4643 }
6c65d5f9
NC
4644 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4645 nothing uses the value of ptr any more. */
837cb3ba 4646 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
6c65d5f9
NC
4647 if (ptr <= SvPVX_const(sv))
4648 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4649 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
2213622d 4650 SV_CHECK_THINKFIRST(sv);
6c65d5f9
NC
4651 if (delta > max_delta)
4652 Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4653 SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4654 SvPVX_const(sv) + max_delta);
79072805
LW
4655
4656 if (!SvOOK(sv)) {
50483b2c 4657 if (!SvLEN(sv)) { /* make copy of shared string */
3f7c398e 4658 const char *pvx = SvPVX_const(sv);
a28509cc 4659 const STRLEN len = SvCUR(sv);
50483b2c 4660 SvGROW(sv, len + 1);
706aa1c9 4661 Move(pvx,SvPVX(sv),len,char);
50483b2c
JD
4662 *SvEND(sv) = '\0';
4663 }
7a5fa8a2 4664 SvFLAGS(sv) |= SVf_OOK;
7a4bba22
NC
4665 old_delta = 0;
4666 } else {
69240efd 4667 SvOOK_offset(sv, old_delta);
79072805 4668 }
b162af07
SP
4669 SvLEN_set(sv, SvLEN(sv) - delta);
4670 SvCUR_set(sv, SvCUR(sv) - delta);
f880fe2f 4671 SvPV_set(sv, SvPVX(sv) + delta);
7a4bba22
NC
4672
4673 p = (U8 *)SvPVX_const(sv);
4674
4675 delta += old_delta;
4676
50af2e61 4677#ifdef DEBUGGING
7a4bba22
NC
4678 real_start = p - delta;
4679#endif
4680
69240efd
NC
4681 assert(delta);
4682 if (delta < 0x100) {
7a4bba22
NC
4683 *--p = (U8) delta;
4684 } else {
69240efd
NC
4685 *--p = 0;
4686 p -= sizeof(STRLEN);
4687 Copy((U8*)&delta, p, sizeof(STRLEN), U8);
7a4bba22
NC
4688 }
4689
4690#ifdef DEBUGGING
4691 /* Fill the preceding buffer with sentinals to verify that no-one is
4692 using it. */
4693 while (p > real_start) {
4694 --p;
4695 *p = (U8)PTR2UV(p);
50af2e61
NC
4696 }
4697#endif
79072805
LW
4698}
4699
954c1994
GS
4700/*
4701=for apidoc sv_catpvn
4702
4703Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4704C<len> indicates number of bytes to copy. If the SV has the UTF-8
4705status set, then the bytes appended should be valid UTF-8.
d5ce4a7c 4706Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
954c1994 4707
8d6d96c1
HS
4708=for apidoc sv_catpvn_flags
4709
4710Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4711C<len> indicates number of bytes to copy. If the SV has the UTF-8
4712status set, then the bytes appended should be valid UTF-8.
8d6d96c1
HS
4713If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4714appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4715in terms of this function.
4716
4717=cut
4718*/
4719
4720void
2e000ff2 4721Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
8d6d96c1 4722{
97aff369 4723 dVAR;
8d6d96c1 4724 STRLEN dlen;
fabdb6c0 4725 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
8d6d96c1 4726
7918f24d
NC
4727 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4728
8d6d96c1
HS
4729 SvGROW(dsv, dlen + slen + 1);
4730 if (sstr == dstr)
3f7c398e 4731 sstr = SvPVX_const(dsv);
8d6d96c1 4732 Move(sstr, SvPVX(dsv) + dlen, slen, char);
b162af07 4733 SvCUR_set(dsv, SvCUR(dsv) + slen);
8d6d96c1
HS
4734 *SvEND(dsv) = '\0';
4735 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4736 SvTAINT(dsv);
bddd5118
NC
4737 if (flags & SV_SMAGIC)
4738 SvSETMAGIC(dsv);
79072805
LW
4739}
4740
954c1994 4741/*
954c1994
GS
4742=for apidoc sv_catsv
4743
13e8c8e3
JH
4744Concatenates the string from SV C<ssv> onto the end of the string in
4745SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4746not 'set' magic. See C<sv_catsv_mg>.
954c1994 4747
8d6d96c1
HS
4748=for apidoc sv_catsv_flags
4749
4750Concatenates the string from SV C<ssv> onto the end of the string in
4751SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4752bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4753and C<sv_catsv_nomg> are implemented in terms of this function.
4754
4755=cut */
4756
ef50df4b 4757void
2e000ff2 4758Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
79072805 4759{
97aff369 4760 dVAR;
7918f24d
NC
4761
4762 PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4763
4764 if (ssv) {
00b6aa41
AL
4765 STRLEN slen;
4766 const char *spv = SvPV_const(ssv, slen);
4767 if (spv) {
bddd5118
NC
4768 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4769 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4770 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4771 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4772 dsv->sv_flags doesn't have that bit set.
4fd84b44 4773 Andy Dougherty 12 Oct 2001
bddd5118
NC
4774 */
4775 const I32 sutf8 = DO_UTF8(ssv);
4776 I32 dutf8;
13e8c8e3 4777
bddd5118
NC
4778 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4779 mg_get(dsv);
4780 dutf8 = DO_UTF8(dsv);
8d6d96c1 4781
bddd5118
NC
4782 if (dutf8 != sutf8) {
4783 if (dutf8) {
4784 /* Not modifying source SV, so taking a temporary copy. */
59cd0e26 4785 SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
13e8c8e3 4786
bddd5118
NC
4787 sv_utf8_upgrade(csv);
4788 spv = SvPV_const(csv, slen);
4789 }
4790 else
7bf79863
KW
4791 /* Leave enough space for the cat that's about to happen */
4792 sv_utf8_upgrade_flags_grow(dsv, 0, slen);
13e8c8e3 4793 }
bddd5118 4794 sv_catpvn_nomg(dsv, spv, slen);
e84ff256 4795 }
560a288e 4796 }
bddd5118
NC
4797 if (flags & SV_SMAGIC)
4798 SvSETMAGIC(dsv);
79072805
LW
4799}
4800
954c1994 4801/*
954c1994
GS
4802=for apidoc sv_catpv
4803
4804Concatenates the string onto the end of the string which is in the SV.
1e54db1a
JH
4805If the SV has the UTF-8 status set, then the bytes appended should be
4806valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
954c1994 4807
d5ce4a7c 4808=cut */
954c1994 4809
ef50df4b 4810void
2b021c53 4811Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
79072805 4812{
97aff369 4813 dVAR;
79072805 4814 register STRLEN len;
463ee0b2 4815 STRLEN tlen;
748a9306 4816 char *junk;
79072805 4817
7918f24d
NC
4818 PERL_ARGS_ASSERT_SV_CATPV;
4819
0c981600 4820 if (!ptr)
79072805 4821 return;
748a9306 4822 junk = SvPV_force(sv, tlen);
0c981600 4823 len = strlen(ptr);
463ee0b2 4824 SvGROW(sv, tlen + len + 1);
0c981600 4825 if (ptr == junk)
3f7c398e 4826 ptr = SvPVX_const(sv);
0c981600 4827 Move(ptr,SvPVX(sv)+tlen,len+1,char);
b162af07 4828 SvCUR_set(sv, SvCUR(sv) + len);
d41ff1b8 4829 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4830 SvTAINT(sv);
79072805
LW
4831}
4832
954c1994
GS
4833/*
4834=for apidoc sv_catpv_mg
4835
4836Like C<sv_catpv>, but also handles 'set' magic.
4837
4838=cut
4839*/
4840
ef50df4b 4841void
2b021c53 4842Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 4843{
7918f24d
NC
4844 PERL_ARGS_ASSERT_SV_CATPV_MG;
4845
0c981600 4846 sv_catpv(sv,ptr);
ef50df4b
GS
4847 SvSETMAGIC(sv);
4848}
4849
645c22ef
DM
4850/*
4851=for apidoc newSV
4852
561b68a9
SH
4853Creates a new SV. A non-zero C<len> parameter indicates the number of
4854bytes of preallocated string space the SV should have. An extra byte for a
4855trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4856space is allocated.) The reference count for the new SV is set to 1.
4857
4858In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4859parameter, I<x>, a debug aid which allowed callers to identify themselves.
4860This aid has been superseded by a new build option, PERL_MEM_LOG (see
4861L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4862modules supporting older perls.
645c22ef
DM
4863
4864=cut
4865*/
4866
79072805 4867SV *
2b021c53 4868Perl_newSV(pTHX_ const STRLEN len)
79072805 4869{
97aff369 4870 dVAR;
79072805 4871 register SV *sv;
1c846c1f 4872
4561caa4 4873 new_SV(sv);
79072805
LW
4874 if (len) {
4875 sv_upgrade(sv, SVt_PV);
4876 SvGROW(sv, len + 1);
4877 }
4878 return sv;
4879}
954c1994 4880/*
92110913 4881=for apidoc sv_magicext
954c1994 4882
68795e93 4883Adds magic to an SV, upgrading it if necessary. Applies the
2d8d5d5a 4884supplied vtable and returns a pointer to the magic added.
92110913 4885
2d8d5d5a
SH
4886Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4887In particular, you can add magic to SvREADONLY SVs, and add more than
4888one instance of the same 'how'.
645c22ef 4889
2d8d5d5a
SH
4890If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4891stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4892special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4893to contain an C<SV*> and is stored as-is with its REFCNT incremented.
92110913 4894
2d8d5d5a 4895(This is now used as a subroutine by C<sv_magic>.)
954c1994
GS
4896
4897=cut
4898*/
92110913 4899MAGIC *
2b021c53
SS
4900Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
4901 const MGVTBL *const vtable, const char *const name, const I32 namlen)
79072805 4902{
97aff369 4903 dVAR;
79072805 4904 MAGIC* mg;
68795e93 4905
7918f24d
NC
4906 PERL_ARGS_ASSERT_SV_MAGICEXT;
4907
7a7f3e45 4908 SvUPGRADE(sv, SVt_PVMG);
a02a5408 4909 Newxz(mg, 1, MAGIC);
79072805 4910 mg->mg_moremagic = SvMAGIC(sv);
b162af07 4911 SvMAGIC_set(sv, mg);
75f9d97a 4912
05f95b08
SB
4913 /* Sometimes a magic contains a reference loop, where the sv and
4914 object refer to each other. To prevent a reference loop that
4915 would prevent such objects being freed, we look for such loops
4916 and if we find one we avoid incrementing the object refcount.
87f0b213
JH
4917
4918 Note we cannot do this to avoid self-tie loops as intervening RV must
b5ccf5f2 4919 have its REFCNT incremented to keep it in existence.
87f0b213
JH
4920
4921 */
14befaf4
DM
4922 if (!obj || obj == sv ||
4923 how == PERL_MAGIC_arylen ||
8d2f4536 4924 how == PERL_MAGIC_symtab ||
75f9d97a 4925 (SvTYPE(obj) == SVt_PVGV &&
4c4652b6
NC
4926 (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
4927 || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
4928 || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
75f9d97a 4929 {
8990e307 4930 mg->mg_obj = obj;
75f9d97a 4931 }
85e6fe83 4932 else {
b37c2d43 4933 mg->mg_obj = SvREFCNT_inc_simple(obj);
85e6fe83
LW
4934 mg->mg_flags |= MGf_REFCOUNTED;
4935 }
b5ccf5f2
YST
4936
4937 /* Normal self-ties simply pass a null object, and instead of
4938 using mg_obj directly, use the SvTIED_obj macro to produce a
4939 new RV as needed. For glob "self-ties", we are tieing the PVIO
4940 with an RV obj pointing to the glob containing the PVIO. In
4941 this case, to avoid a reference loop, we need to weaken the
4942 reference.
4943 */
4944
4945 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
a45c7426 4946 obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
b5ccf5f2
YST
4947 {
4948 sv_rvweaken(obj);
4949 }
4950
79072805 4951 mg->mg_type = how;
565764a8 4952 mg->mg_len = namlen;
9cbac4c7 4953 if (name) {
92110913 4954 if (namlen > 0)
1edc1566 4955 mg->mg_ptr = savepvn(name, namlen);
daba3364
NC
4956 else if (namlen == HEf_SVKEY) {
4957 /* Yes, this is casting away const. This is only for the case of
4958 HEf_SVKEY. I think we need to document this abberation of the
4959 constness of the API, rather than making name non-const, as
4960 that change propagating outwards a long way. */
4961 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
4962 } else
92110913 4963 mg->mg_ptr = (char *) name;
9cbac4c7 4964 }
53d44271 4965 mg->mg_virtual = (MGVTBL *) vtable;
68795e93 4966
92110913
NIS
4967 mg_magical(sv);
4968 if (SvGMAGICAL(sv))
4969 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4970 return mg;
4971}
4972
4973/*
4974=for apidoc sv_magic
1c846c1f 4975
92110913
NIS
4976Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4977then adds a new magic item of type C<how> to the head of the magic list.
4978
2d8d5d5a
SH
4979See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4980handling of the C<name> and C<namlen> arguments.
4981
4509d3fb
SB
4982You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4983to add more than one instance of the same 'how'.
4984
92110913
NIS
4985=cut
4986*/
4987
4988void
2b021c53
SS
4989Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how,
4990 const char *const name, const I32 namlen)
68795e93 4991{
97aff369 4992 dVAR;
53d44271 4993 const MGVTBL *vtable;
92110913 4994 MAGIC* mg;
92110913 4995
7918f24d
NC
4996 PERL_ARGS_ASSERT_SV_MAGIC;
4997
f8c7b90f 4998#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4999 if (SvIsCOW(sv))
5000 sv_force_normal_flags(sv, 0);
5001#endif
92110913 5002 if (SvREADONLY(sv)) {
d8084ca5
DM
5003 if (
5004 /* its okay to attach magic to shared strings; the subsequent
5005 * upgrade to PVMG will unshare the string */
5006 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5007
5008 && IN_PERL_RUNTIME
92110913
NIS
5009 && how != PERL_MAGIC_regex_global
5010 && how != PERL_MAGIC_bm
5011 && how != PERL_MAGIC_fm
5012 && how != PERL_MAGIC_sv
e6469971 5013 && how != PERL_MAGIC_backref
92110913
NIS
5014 )
5015 {
f1f66076 5016 Perl_croak(aTHX_ "%s", PL_no_modify);
92110913
NIS
5017 }
5018 }
5019 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5020 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
68795e93
NIS
5021 /* sv_magic() refuses to add a magic of the same 'how' as an
5022 existing one
92110913 5023 */
2a509ed3 5024 if (how == PERL_MAGIC_taint) {
92110913 5025 mg->mg_len |= 1;
2a509ed3
NC
5026 /* Any scalar which already had taint magic on which someone
5027 (erroneously?) did SvIOK_on() or similar will now be
5028 incorrectly sporting public "OK" flags. */
5029 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5030 }
92110913
NIS
5031 return;
5032 }
5033 }
68795e93 5034
79072805 5035 switch (how) {
14befaf4 5036 case PERL_MAGIC_sv:
92110913 5037 vtable = &PL_vtbl_sv;
79072805 5038 break;
14befaf4 5039 case PERL_MAGIC_overload:
92110913 5040 vtable = &PL_vtbl_amagic;
a0d0e21e 5041 break;
14befaf4 5042 case PERL_MAGIC_overload_elem:
92110913 5043 vtable = &PL_vtbl_amagicelem;
a0d0e21e 5044 break;
14befaf4 5045 case PERL_MAGIC_overload_table:
92110913 5046 vtable = &PL_vtbl_ovrld;
a0d0e21e 5047 break;
14befaf4 5048 case PERL_MAGIC_bm:
92110913 5049 vtable = &PL_vtbl_bm;
79072805 5050 break;
14befaf4 5051 case PERL_MAGIC_regdata:
92110913 5052 vtable = &PL_vtbl_regdata;
6cef1e77 5053 break;
14befaf4 5054 case PERL_MAGIC_regdatum:
92110913 5055 vtable = &PL_vtbl_regdatum;
6cef1e77 5056 break;
14befaf4 5057 case PERL_MAGIC_env:
92110913 5058 vtable = &PL_vtbl_env;
79072805 5059 break;
14befaf4 5060 case PERL_MAGIC_fm:
92110913 5061 vtable = &PL_vtbl_fm;
55497cff 5062 break;
14befaf4 5063 case PERL_MAGIC_envelem:
92110913 5064 vtable = &PL_vtbl_envelem;
79072805 5065 break;
14befaf4 5066 case PERL_MAGIC_regex_global:
92110913 5067 vtable = &PL_vtbl_mglob;
93a17b20 5068 break;
14befaf4 5069 case PERL_MAGIC_isa:
92110913 5070 vtable = &PL_vtbl_isa;
463ee0b2 5071 break;
14befaf4 5072 case PERL_MAGIC_isaelem:
92110913 5073 vtable = &PL_vtbl_isaelem;
463ee0b2 5074 break;
14befaf4 5075 case PERL_MAGIC_nkeys:
92110913 5076 vtable = &PL_vtbl_nkeys;
16660edb 5077 break;
14befaf4 5078 case PERL_MAGIC_dbfile:
aec46f14 5079 vtable = NULL;
93a17b20 5080 break;
14befaf4 5081 case PERL_MAGIC_dbline:
92110913 5082 vtable = &PL_vtbl_dbline;
79072805 5083 break;
36477c24 5084#ifdef USE_LOCALE_COLLATE
14befaf4 5085 case PERL_MAGIC_collxfrm:
92110913 5086 vtable = &PL_vtbl_collxfrm;
bbce6d69 5087 break;
36477c24 5088#endif /* USE_LOCALE_COLLATE */
14befaf4 5089 case PERL_MAGIC_tied:
92110913 5090 vtable = &PL_vtbl_pack;
463ee0b2 5091 break;
14befaf4
DM
5092 case PERL_MAGIC_tiedelem:
5093 case PERL_MAGIC_tiedscalar:
92110913 5094 vtable = &PL_vtbl_packelem;
463ee0b2 5095 break;
14befaf4 5096 case PERL_MAGIC_qr:
92110913 5097 vtable = &PL_vtbl_regexp;
c277df42 5098 break;
14befaf4 5099 case PERL_MAGIC_sig:
92110913 5100 vtable = &PL_vtbl_sig;
79072805 5101 break;
14befaf4 5102 case PERL_MAGIC_sigelem:
92110913 5103 vtable = &PL_vtbl_sigelem;
79072805 5104 break;
14befaf4 5105 case PERL_MAGIC_taint:
92110913 5106 vtable = &PL_vtbl_taint;
463ee0b2 5107 break;
14befaf4 5108 case PERL_MAGIC_uvar:
92110913 5109 vtable = &PL_vtbl_uvar;
79072805 5110 break;
14befaf4 5111 case PERL_MAGIC_vec:
92110913 5112 vtable = &PL_vtbl_vec;
79072805 5113 break;
a3874608 5114 case PERL_MAGIC_arylen_p:
bfcb3514 5115 case PERL_MAGIC_rhash:
8d2f4536 5116 case PERL_MAGIC_symtab:
ece467f9 5117 case PERL_MAGIC_vstring:
aec46f14 5118 vtable = NULL;
ece467f9 5119 break;
7e8c5dac
HS
5120 case PERL_MAGIC_utf8:
5121 vtable = &PL_vtbl_utf8;
5122 break;
14befaf4 5123 case PERL_MAGIC_substr:
92110913 5124 vtable = &PL_vtbl_substr;
79072805 5125 break;
14befaf4 5126 case PERL_MAGIC_defelem:
92110913 5127 vtable = &PL_vtbl_defelem;
5f05dabc 5128 break;
14befaf4 5129 case PERL_MAGIC_arylen:
92110913 5130 vtable = &PL_vtbl_arylen;
79072805 5131 break;
14befaf4 5132 case PERL_MAGIC_pos:
92110913 5133 vtable = &PL_vtbl_pos;
a0d0e21e 5134 break;
14befaf4 5135 case PERL_MAGIC_backref:
92110913 5136 vtable = &PL_vtbl_backref;
810b8aa5 5137 break;
b3ca2e83
NC
5138 case PERL_MAGIC_hintselem:
5139 vtable = &PL_vtbl_hintselem;
5140 break;
f747ebd6
Z
5141 case PERL_MAGIC_hints:
5142 vtable = &PL_vtbl_hints;
5143 break;
14befaf4
DM
5144 case PERL_MAGIC_ext:
5145 /* Reserved for use by extensions not perl internals. */
4633a7c4
LW
5146 /* Useful for attaching extension internal data to perl vars. */
5147 /* Note that multiple extensions may clash if magical scalars */
5148 /* etc holding private data from one are passed to another. */
aec46f14 5149 vtable = NULL;
a0d0e21e 5150 break;
79072805 5151 default:
14befaf4 5152 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
463ee0b2 5153 }
68795e93 5154
92110913 5155 /* Rest of work is done else where */
aec46f14 5156 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
68795e93 5157
92110913
NIS
5158 switch (how) {
5159 case PERL_MAGIC_taint:
5160 mg->mg_len = 1;
5161 break;
5162 case PERL_MAGIC_ext:
5163 case PERL_MAGIC_dbfile:
5164 SvRMAGICAL_on(sv);
5165 break;
5166 }
463ee0b2
LW
5167}
5168
c461cf8f
JH
5169/*
5170=for apidoc sv_unmagic
5171
645c22ef 5172Removes all magic of type C<type> from an SV.
c461cf8f
JH
5173
5174=cut
5175*/
5176
463ee0b2 5177int
2b021c53 5178Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
463ee0b2
LW
5179{
5180 MAGIC* mg;
5181 MAGIC** mgp;
7918f24d
NC
5182
5183 PERL_ARGS_ASSERT_SV_UNMAGIC;
5184
91bba347 5185 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
463ee0b2 5186 return 0;
064cf529 5187 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
463ee0b2
LW
5188 for (mg = *mgp; mg; mg = *mgp) {
5189 if (mg->mg_type == type) {
e1ec3a88 5190 const MGVTBL* const vtbl = mg->mg_virtual;
463ee0b2 5191 *mgp = mg->mg_moremagic;
1d7c1841 5192 if (vtbl && vtbl->svt_free)
fc0dc3b3 5193 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
14befaf4 5194 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
92110913 5195 if (mg->mg_len > 0)
1edc1566 5196 Safefree(mg->mg_ptr);
565764a8 5197 else if (mg->mg_len == HEf_SVKEY)
daba3364 5198 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
d2923cdd 5199 else if (mg->mg_type == PERL_MAGIC_utf8)
7e8c5dac 5200 Safefree(mg->mg_ptr);
9cbac4c7 5201 }
a0d0e21e
LW
5202 if (mg->mg_flags & MGf_REFCOUNTED)
5203 SvREFCNT_dec(mg->mg_obj);
463ee0b2
LW
5204 Safefree(mg);
5205 }
5206 else
5207 mgp = &mg->mg_moremagic;
79072805 5208 }
91bba347 5209 if (!SvMAGIC(sv)) {
463ee0b2 5210 SvMAGICAL_off(sv);
c268c2a6 5211 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
86f55936 5212 SvMAGIC_set(sv, NULL);
463ee0b2
LW
5213 }
5214
5215 return 0;
79072805
LW
5216}
5217
c461cf8f
JH
5218/*
5219=for apidoc sv_rvweaken
5220
645c22ef
DM
5221Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5222referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5223push a back-reference to this RV onto the array of backreferences
1e73acc8
AS
5224associated with that magic. If the RV is magical, set magic will be
5225called after the RV is cleared.
c461cf8f
JH
5226
5227=cut
5228*/
5229
810b8aa5 5230SV *
2b021c53 5231Perl_sv_rvweaken(pTHX_ SV *const sv)
810b8aa5
GS
5232{
5233 SV *tsv;
7918f24d
NC
5234
5235 PERL_ARGS_ASSERT_SV_RVWEAKEN;
5236
810b8aa5
GS
5237 if (!SvOK(sv)) /* let undefs pass */
5238 return sv;
5239 if (!SvROK(sv))
cea2e8a9 5240 Perl_croak(aTHX_ "Can't weaken a nonreference");
810b8aa5 5241 else if (SvWEAKREF(sv)) {
810b8aa5 5242 if (ckWARN(WARN_MISC))
9014280d 5243 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
810b8aa5
GS
5244 return sv;
5245 }
5246 tsv = SvRV(sv);
e15faf7d 5247 Perl_sv_add_backref(aTHX_ tsv, sv);
810b8aa5 5248 SvWEAKREF_on(sv);
1c846c1f 5249 SvREFCNT_dec(tsv);
810b8aa5
GS
5250 return sv;
5251}
5252
645c22ef
DM
5253/* Give tsv backref magic if it hasn't already got it, then push a
5254 * back-reference to sv onto the array associated with the backref magic.
5255 */
5256
fd996479
DM
5257/* A discussion about the backreferences array and its refcount:
5258 *
5259 * The AV holding the backreferences is pointed to either as the mg_obj of
5260 * PERL_MAGIC_backref, or in the specific case of a HV that has the hv_aux
5261 * structure, from the xhv_backreferences field. (A HV without hv_aux will
5262 * have the standard magic instead.) The array is created with a refcount
5263 * of 2. This means that if during global destruction the array gets
5264 * picked on first to have its refcount decremented by the random zapper,
5265 * it won't actually be freed, meaning it's still theere for when its
5266 * parent gets freed.
5267 * When the parent SV is freed, in the case of magic, the magic is freed,
5268 * Perl_magic_killbackrefs is called which decrements one refcount, then
5269 * mg_obj is freed which kills the second count.
5270 * In the vase of a HV being freed, one ref is removed by
5271 * Perl_hv_kill_backrefs, the other by Perl_sv_kill_backrefs, which it
5272 * calls.
5273 */
5274
e15faf7d 5275void
2b021c53 5276Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
810b8aa5 5277{
97aff369 5278 dVAR;
810b8aa5 5279 AV *av;
86f55936 5280
7918f24d
NC
5281 PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5282
86f55936 5283 if (SvTYPE(tsv) == SVt_PVHV) {
85fbaab2 5284 AV **const avp = Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
86f55936
NC
5285
5286 av = *avp;
5287 if (!av) {
5288 /* There is no AV in the offical place - try a fixup. */
5289 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
5290
5291 if (mg) {
5292 /* Aha. They've got it stowed in magic. Bring it back. */
502c6561 5293 av = MUTABLE_AV(mg->mg_obj);
86f55936
NC
5294 /* Stop mg_free decreasing the refernce count. */
5295 mg->mg_obj = NULL;
5296 /* Stop mg_free even calling the destructor, given that
5297 there's no AV to free up. */
5298 mg->mg_virtual = 0;
5299 sv_unmagic(tsv, PERL_MAGIC_backref);
5300 } else {
5301 av = newAV();
5302 AvREAL_off(av);
fd996479 5303 SvREFCNT_inc_simple_void(av); /* see discussion above */
86f55936
NC
5304 }
5305 *avp = av;
5306 }
5307 } else {
5308 const MAGIC *const mg
5309 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5310 if (mg)
502c6561 5311 av = MUTABLE_AV(mg->mg_obj);
86f55936
NC
5312 else {
5313 av = newAV();
5314 AvREAL_off(av);
daba3364 5315 sv_magic(tsv, MUTABLE_SV(av), PERL_MAGIC_backref, NULL, 0);
fd996479 5316 /* av now has a refcnt of 2; see discussion above */
86f55936 5317 }
810b8aa5 5318 }
d91d49e8 5319 if (AvFILLp(av) >= AvMAX(av)) {
d91d49e8
MM
5320 av_extend(av, AvFILLp(av)+1);
5321 }
5322 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
810b8aa5
GS
5323}
5324
645c22ef
DM
5325/* delete a back-reference to ourselves from the backref magic associated
5326 * with the SV we point to.
5327 */
5328
1c846c1f 5329STATIC void
2b021c53 5330S_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
810b8aa5 5331{
97aff369 5332 dVAR;
86f55936 5333 AV *av = NULL;
810b8aa5
GS
5334 SV **svp;
5335 I32 i;
86f55936 5336
7918f24d
NC
5337 PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5338
86f55936 5339 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
85fbaab2 5340 av = *Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5b285ea4
NC
5341 /* We mustn't attempt to "fix up" the hash here by moving the
5342 backreference array back to the hv_aux structure, as that is stored
5343 in the main HvARRAY(), and hfreentries assumes that no-one
5344 reallocates HvARRAY() while it is running. */
86f55936
NC
5345 }
5346 if (!av) {
5347 const MAGIC *const mg
5348 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5349 if (mg)
502c6561 5350 av = MUTABLE_AV(mg->mg_obj);
86f55936 5351 }
41fae7a1
DM
5352
5353 if (!av)
cea2e8a9 5354 Perl_croak(aTHX_ "panic: del_backref");
86f55936 5355
41fae7a1 5356 assert(!SvIS_FREED(av));
86f55936 5357
810b8aa5 5358 svp = AvARRAY(av);
6a76db8b
NC
5359 /* We shouldn't be in here more than once, but for paranoia reasons lets
5360 not assume this. */
5361 for (i = AvFILLp(av); i >= 0; i--) {
5362 if (svp[i] == sv) {
5363 const SSize_t fill = AvFILLp(av);
5364 if (i != fill) {
5365 /* We weren't the last entry.
5366 An unordered list has this property that you can take the
5367 last element off the end to fill the hole, and it's still
5368 an unordered list :-)
5369 */
5370 svp[i] = svp[fill];
5371 }
a0714e2c 5372 svp[fill] = NULL;
6a76db8b
NC
5373 AvFILLp(av) = fill - 1;
5374 }
5375 }
810b8aa5
GS
5376}
5377
86f55936 5378int
2b021c53 5379Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
86f55936
NC
5380{
5381 SV **svp = AvARRAY(av);
5382
7918f24d 5383 PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
86f55936
NC
5384 PERL_UNUSED_ARG(sv);
5385
41fae7a1
DM
5386 assert(!svp || !SvIS_FREED(av));
5387 if (svp) {
86f55936
NC
5388 SV *const *const last = svp + AvFILLp(av);
5389
5390 while (svp <= last) {
5391 if (*svp) {
5392 SV *const referrer = *svp;
5393 if (SvWEAKREF(referrer)) {
5394 /* XXX Should we check that it hasn't changed? */
5395 SvRV_set(referrer, 0);
5396 SvOK_off(referrer);
5397 SvWEAKREF_off(referrer);
1e73acc8 5398 SvSETMAGIC(referrer);
86f55936
NC
5399 } else if (SvTYPE(referrer) == SVt_PVGV ||
5400 SvTYPE(referrer) == SVt_PVLV) {
5401 /* You lookin' at me? */
5402 assert(GvSTASH(referrer));
1d193675 5403 assert(GvSTASH(referrer) == (const HV *)sv);
86f55936
NC
5404 GvSTASH(referrer) = 0;
5405 } else {
5406 Perl_croak(aTHX_
5407 "panic: magic_killbackrefs (flags=%"UVxf")",
5408 (UV)SvFLAGS(referrer));
5409 }
5410
a0714e2c 5411 *svp = NULL;
86f55936
NC
5412 }
5413 svp++;
5414 }
5415 }
5416 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5417 return 0;
5418}
5419
954c1994
GS
5420/*
5421=for apidoc sv_insert
5422
5423Inserts a string at the specified offset/length within the SV. Similar to
c0dd94a0 5424the Perl substr() function. Handles get magic.
954c1994 5425
c0dd94a0
VP
5426=for apidoc sv_insert_flags
5427
5428Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5429
5430=cut
5431*/
5432
5433void
5434Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5435{
97aff369 5436 dVAR;
79072805
LW
5437 register char *big;
5438 register char *mid;
5439 register char *midend;
5440 register char *bigend;
5441 register I32 i;
6ff81951 5442 STRLEN curlen;
1c846c1f 5443
27aecdc6 5444 PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
79072805 5445
8990e307 5446 if (!bigstr)
cea2e8a9 5447 Perl_croak(aTHX_ "Can't modify non-existent substring");
c0dd94a0 5448 SvPV_force_flags(bigstr, curlen, flags);
60fa28ff 5449 (void)SvPOK_only_UTF8(bigstr);
6ff81951
GS
5450 if (offset + len > curlen) {
5451 SvGROW(bigstr, offset+len+1);
93524f2b 5452 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6ff81951
GS
5453 SvCUR_set(bigstr, offset+len);
5454 }
79072805 5455
69b47968 5456 SvTAINT(bigstr);
79072805
LW
5457 i = littlelen - len;
5458 if (i > 0) { /* string might grow */
a0d0e21e 5459 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
79072805
LW
5460 mid = big + offset + len;
5461 midend = bigend = big + SvCUR(bigstr);
5462 bigend += i;
5463 *bigend = '\0';
5464 while (midend > mid) /* shove everything down */
5465 *--bigend = *--midend;
5466 Move(little,big+offset,littlelen,char);
b162af07 5467 SvCUR_set(bigstr, SvCUR(bigstr) + i);
79072805
LW
5468 SvSETMAGIC(bigstr);
5469 return;
5470 }
5471 else if (i == 0) {
463ee0b2 5472 Move(little,SvPVX(bigstr)+offset,len,char);
79072805
LW
5473 SvSETMAGIC(bigstr);
5474 return;
5475 }
5476
463ee0b2 5477 big = SvPVX(bigstr);
79072805
LW
5478 mid = big + offset;
5479 midend = mid + len;
5480 bigend = big + SvCUR(bigstr);
5481
5482 if (midend > bigend)
cea2e8a9 5483 Perl_croak(aTHX_ "panic: sv_insert");
79072805
LW
5484
5485 if (mid - big > bigend - midend) { /* faster to shorten from end */
5486 if (littlelen) {
5487 Move(little, mid, littlelen,char);
5488 mid += littlelen;
5489 }
5490 i = bigend - midend;
5491 if (i > 0) {
5492 Move(midend, mid, i,char);
5493 mid += i;
5494 }
5495 *mid = '\0';
5496 SvCUR_set(bigstr, mid - big);
5497 }
155aba94 5498 else if ((i = mid - big)) { /* faster from front */
79072805
LW
5499 midend -= littlelen;
5500 mid = midend;
0d3c21b0 5501 Move(big, midend - i, i, char);
79072805 5502 sv_chop(bigstr,midend-i);
79072805
LW
5503 if (littlelen)
5504 Move(little, mid, littlelen,char);
5505 }
5506 else if (littlelen) {
5507 midend -= littlelen;
5508 sv_chop(bigstr,midend);
5509 Move(little,midend,littlelen,char);
5510 }
5511 else {
5512 sv_chop(bigstr,midend);
5513 }
5514 SvSETMAGIC(bigstr);
5515}
5516
c461cf8f
JH
5517/*
5518=for apidoc sv_replace
5519
5520Make the first argument a copy of the second, then delete the original.
645c22ef
DM
5521The target SV physically takes over ownership of the body of the source SV
5522and inherits its flags; however, the target keeps any magic it owns,
5523and any magic in the source is discarded.
ff276b08 5524Note that this is a rather specialist SV copying operation; most of the
645c22ef 5525time you'll want to use C<sv_setsv> or one of its many macro front-ends.
c461cf8f
JH
5526
5527=cut
5528*/
79072805
LW
5529
5530void
af828c01 5531Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
79072805 5532{
97aff369 5533 dVAR;
a3b680e6 5534 const U32 refcnt = SvREFCNT(sv);
7918f24d
NC
5535
5536 PERL_ARGS_ASSERT_SV_REPLACE;
5537
765f542d 5538 SV_CHECK_THINKFIRST_COW_DROP(sv);
30e5c352 5539 if (SvREFCNT(nsv) != 1) {
fe13d51d
JM
5540 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5541 " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
30e5c352 5542 }
93a17b20 5543 if (SvMAGICAL(sv)) {
a0d0e21e
LW
5544 if (SvMAGICAL(nsv))
5545 mg_free(nsv);
5546 else
5547 sv_upgrade(nsv, SVt_PVMG);
b162af07 5548 SvMAGIC_set(nsv, SvMAGIC(sv));
a0d0e21e 5549 SvFLAGS(nsv) |= SvMAGICAL(sv);
93a17b20 5550 SvMAGICAL_off(sv);
b162af07 5551 SvMAGIC_set(sv, NULL);
93a17b20 5552 }
79072805
LW
5553 SvREFCNT(sv) = 0;
5554 sv_clear(sv);
477f5d66 5555 assert(!SvREFCNT(sv));
fd0854ff
DM
5556#ifdef DEBUG_LEAKING_SCALARS
5557 sv->sv_flags = nsv->sv_flags;
5558 sv->sv_any = nsv->sv_any;
5559 sv->sv_refcnt = nsv->sv_refcnt;
f34d0642 5560 sv->sv_u = nsv->sv_u;
fd0854ff 5561#else
79072805 5562 StructCopy(nsv,sv,SV);
fd0854ff 5563#endif
4df7f6af 5564 if(SvTYPE(sv) == SVt_IV) {
7b2c381c 5565 SvANY(sv)
339049b0 5566 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
7b2c381c
NC
5567 }
5568
fd0854ff 5569
f8c7b90f 5570#ifdef PERL_OLD_COPY_ON_WRITE
d3d0e6f1
NC
5571 if (SvIsCOW_normal(nsv)) {
5572 /* We need to follow the pointers around the loop to make the
5573 previous SV point to sv, rather than nsv. */
5574 SV *next;
5575 SV *current = nsv;
5576 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5577 assert(next);
5578 current = next;
3f7c398e 5579 assert(SvPVX_const(current) == SvPVX_const(nsv));
d3d0e6f1
NC
5580 }
5581 /* Make the SV before us point to the SV after us. */
5582 if (DEBUG_C_TEST) {
5583 PerlIO_printf(Perl_debug_log, "previous is\n");
5584 sv_dump(current);
a29f6d03
NC
5585 PerlIO_printf(Perl_debug_log,
5586 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
d3d0e6f1
NC
5587 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5588 }
a29f6d03 5589 SV_COW_NEXT_SV_SET(current, sv);
d3d0e6f1
NC
5590 }
5591#endif
79072805 5592 SvREFCNT(sv) = refcnt;
1edc1566 5593 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
39cf41c2 5594 SvREFCNT(nsv) = 0;
463ee0b2 5595 del_SV(nsv);
79072805
LW
5596}
5597
c461cf8f
JH
5598/*
5599=for apidoc sv_clear
5600
645c22ef
DM
5601Clear an SV: call any destructors, free up any memory used by the body,
5602and free the body itself. The SV's head is I<not> freed, although
5603its type is set to all 1's so that it won't inadvertently be assumed
5604to be live during global destruction etc.
5605This function should only be called when REFCNT is zero. Most of the time
5606you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5607instead.
c461cf8f
JH
5608
5609=cut
5610*/
5611
79072805 5612void
af828c01 5613Perl_sv_clear(pTHX_ register SV *const sv)
79072805 5614{
27da23d5 5615 dVAR;
82bb6deb 5616 const U32 type = SvTYPE(sv);
8edfc514
NC
5617 const struct body_details *const sv_type_details
5618 = bodies_by_type + type;
dd69841b 5619 HV *stash;
82bb6deb 5620
7918f24d 5621 PERL_ARGS_ASSERT_SV_CLEAR;
79072805 5622 assert(SvREFCNT(sv) == 0);
ceb531cd 5623 assert(SvTYPE(sv) != SVTYPEMASK);
79072805 5624
d2a0f284
JC
5625 if (type <= SVt_IV) {
5626 /* See the comment in sv.h about the collusion between this early
5627 return and the overloading of the NULL and IV slots in the size
5628 table. */
4df7f6af
NC
5629 if (SvROK(sv)) {
5630 SV * const target = SvRV(sv);
5631 if (SvWEAKREF(sv))
5632 sv_del_backref(target, sv);
5633 else
5634 SvREFCNT_dec(target);
5635 }
5636 SvFLAGS(sv) &= SVf_BREAK;
5637 SvFLAGS(sv) |= SVTYPEMASK;
82bb6deb 5638 return;
d2a0f284 5639 }
82bb6deb 5640
ed6116ce 5641 if (SvOBJECT(sv)) {
eba16661
JH
5642 if (PL_defstash && /* Still have a symbol table? */
5643 SvDESTROYABLE(sv))
5644 {
39644a26 5645 dSP;
893645bd 5646 HV* stash;
d460ef45 5647 do {
b464bac0 5648 CV* destructor;
4e8e7886 5649 stash = SvSTASH(sv);
32251b26 5650 destructor = StashHANDLER(stash,DESTROY);
fbb3ee5a 5651 if (destructor
99ab892b
NC
5652 /* A constant subroutine can have no side effects, so
5653 don't bother calling it. */
5654 && !CvCONST(destructor)
fbb3ee5a
RGS
5655 /* Don't bother calling an empty destructor */
5656 && (CvISXSUB(destructor)
5657 || CvSTART(destructor)->op_next->op_type != OP_LEAVESUB))
5658 {
1b6737cc 5659 SV* const tmpref = newRV(sv);
5cc433a6 5660 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
4e8e7886 5661 ENTER;
e788e7d3 5662 PUSHSTACKi(PERLSI_DESTROY);
4e8e7886
GS
5663 EXTEND(SP, 2);
5664 PUSHMARK(SP);
5cc433a6 5665 PUSHs(tmpref);
4e8e7886 5666 PUTBACK;
daba3364 5667 call_sv(MUTABLE_SV(destructor), G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7a5fa8a2
NIS
5668
5669
d3acc0f7 5670 POPSTACK;
3095d977 5671 SPAGAIN;
4e8e7886 5672 LEAVE;
5cc433a6
AB
5673 if(SvREFCNT(tmpref) < 2) {
5674 /* tmpref is not kept alive! */
5675 SvREFCNT(sv)--;
b162af07 5676 SvRV_set(tmpref, NULL);
5cc433a6
AB
5677 SvROK_off(tmpref);
5678 }
5679 SvREFCNT_dec(tmpref);
4e8e7886
GS
5680 }
5681 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
8ebc5c01 5682
6f44e0a4
JP
5683
5684 if (SvREFCNT(sv)) {
5685 if (PL_in_clean_objs)
cea2e8a9 5686 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
bfcb3514 5687 HvNAME_get(stash));
6f44e0a4
JP
5688 /* DESTROY gave object new lease on life */
5689 return;
5690 }
a0d0e21e 5691 }
4e8e7886 5692
a0d0e21e 5693 if (SvOBJECT(sv)) {
4e8e7886 5694 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
a0d0e21e 5695 SvOBJECT_off(sv); /* Curse the object. */
82bb6deb 5696 if (type != SVt_PVIO)
3280af22 5697 --PL_sv_objcount; /* XXX Might want something more general */
a0d0e21e 5698 }
463ee0b2 5699 }
82bb6deb 5700 if (type >= SVt_PVMG) {
cecf5685 5701 if (type == SVt_PVMG && SvPAD_OUR(sv)) {
73d95100 5702 SvREFCNT_dec(SvOURSTASH(sv));
e736a858 5703 } else if (SvMAGIC(sv))
524189f1 5704 mg_free(sv);
00b1698f 5705 if (type == SVt_PVMG && SvPAD_TYPED(sv))
524189f1
JH
5706 SvREFCNT_dec(SvSTASH(sv));
5707 }
82bb6deb 5708 switch (type) {
cecf5685 5709 /* case SVt_BIND: */
8990e307 5710 case SVt_PVIO:
df0bd2f4
GS
5711 if (IoIFP(sv) &&
5712 IoIFP(sv) != PerlIO_stdin() &&
5f05dabc 5713 IoIFP(sv) != PerlIO_stdout() &&
5714 IoIFP(sv) != PerlIO_stderr())
93578b34 5715 {
a45c7426 5716 io_close(MUTABLE_IO(sv), FALSE);
93578b34 5717 }
1d7c1841 5718 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
1236053a 5719 PerlDir_close(IoDIRP(sv));
1d7c1841 5720 IoDIRP(sv) = (DIR*)NULL;
8990e307
LW
5721 Safefree(IoTOP_NAME(sv));
5722 Safefree(IoFMT_NAME(sv));
5723 Safefree(IoBOTTOM_NAME(sv));
82bb6deb 5724 goto freescalar;
5c35adbb 5725 case SVt_REGEXP:
288b8c02 5726 /* FIXME for plugins */
d2f13c59 5727 pregfree2((REGEXP*) sv);
5c35adbb 5728 goto freescalar;
79072805 5729 case SVt_PVCV:
748a9306 5730 case SVt_PVFM:
ea726b52 5731 cv_undef(MUTABLE_CV(sv));
a0d0e21e 5732 goto freescalar;
79072805 5733 case SVt_PVHV:
1d193675 5734 if (PL_last_swash_hv == (const HV *)sv) {
e7fab884
NC
5735 PL_last_swash_hv = NULL;
5736 }
85fbaab2
NC
5737 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
5738 hv_undef(MUTABLE_HV(sv));
a0d0e21e 5739 break;
79072805 5740 case SVt_PVAV:
502c6561 5741 if (PL_comppad == MUTABLE_AV(sv)) {
3f90d085
DM
5742 PL_comppad = NULL;
5743 PL_curpad = NULL;
5744 }
502c6561 5745 av_undef(MUTABLE_AV(sv));
a0d0e21e 5746 break;
02270b4e 5747 case SVt_PVLV:
dd28f7bb
DM
5748 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5749 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5750 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5751 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5752 }
5753 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5754 SvREFCNT_dec(LvTARG(sv));
a0d0e21e 5755 case SVt_PVGV:
cecf5685 5756 if (isGV_with_GP(sv)) {
159b6efe
NC
5757 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
5758 && HvNAME_get(stash))
dd69841b 5759 mro_method_changed_in(stash);
159b6efe 5760 gp_free(MUTABLE_GV(sv));
cecf5685
NC
5761 if (GvNAME_HEK(sv))
5762 unshare_hek(GvNAME_HEK(sv));
dd69841b
BB
5763 /* If we're in a stash, we don't own a reference to it. However it does
5764 have a back reference to us, which needs to be cleared. */
5765 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
daba3364 5766 sv_del_backref(MUTABLE_SV(stash), sv);
cecf5685 5767 }
8571fe2f
NC
5768 /* FIXME. There are probably more unreferenced pointers to SVs in the
5769 interpreter struct that we should check and tidy in a similar
5770 fashion to this: */
159b6efe 5771 if ((const GV *)sv == PL_last_in_gv)
8571fe2f 5772 PL_last_in_gv = NULL;
79072805 5773 case SVt_PVMG:
79072805
LW
5774 case SVt_PVNV:
5775 case SVt_PVIV:
7a4bba22 5776 case SVt_PV:
a0d0e21e 5777 freescalar:
5228ca4e
NC
5778 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5779 if (SvOOK(sv)) {
69240efd
NC
5780 STRLEN offset;
5781 SvOOK_offset(sv, offset);
5782 SvPV_set(sv, SvPVX_mutable(sv) - offset);
5228ca4e
NC
5783 /* Don't even bother with turning off the OOK flag. */
5784 }
810b8aa5 5785 if (SvROK(sv)) {
b37c2d43 5786 SV * const target = SvRV(sv);
810b8aa5 5787 if (SvWEAKREF(sv))
e15faf7d 5788 sv_del_backref(target, sv);
810b8aa5 5789 else
e15faf7d 5790 SvREFCNT_dec(target);
810b8aa5 5791 }
f8c7b90f 5792#ifdef PERL_OLD_COPY_ON_WRITE
3f7c398e 5793 else if (SvPVX_const(sv)) {
765f542d 5794 if (SvIsCOW(sv)) {
46187eeb
NC
5795 if (DEBUG_C_TEST) {
5796 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
e419cbc5 5797 sv_dump(sv);
46187eeb 5798 }
5302ffd4
NC
5799 if (SvLEN(sv)) {
5800 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5801 } else {
5802 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5803 }
5804
765f542d
NC
5805 SvFAKE_off(sv);
5806 } else if (SvLEN(sv)) {
3f7c398e 5807 Safefree(SvPVX_const(sv));
765f542d
NC
5808 }
5809 }
5810#else
3f7c398e 5811 else if (SvPVX_const(sv) && SvLEN(sv))
94010e71 5812 Safefree(SvPVX_mutable(sv));
3f7c398e 5813 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
bdd68bc3 5814 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
1c846c1f
NIS
5815 SvFAKE_off(sv);
5816 }
765f542d 5817#endif
79072805
LW
5818 break;
5819 case SVt_NV:
79072805
LW
5820 break;
5821 }
5822
893645bd
NC
5823 SvFLAGS(sv) &= SVf_BREAK;
5824 SvFLAGS(sv) |= SVTYPEMASK;
5825
8edfc514 5826 if (sv_type_details->arena) {
b9502f15 5827 del_body(((char *)SvANY(sv) + sv_type_details->offset),
8edfc514
NC
5828 &PL_body_roots[type]);
5829 }
d2a0f284 5830 else if (sv_type_details->body_size) {
8edfc514
NC
5831 my_safefree(SvANY(sv));
5832 }
79072805
LW
5833}
5834
645c22ef
DM
5835/*
5836=for apidoc sv_newref
5837
5838Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5839instead.
5840
5841=cut
5842*/
5843
79072805 5844SV *
af828c01 5845Perl_sv_newref(pTHX_ SV *const sv)
79072805 5846{
96a5add6 5847 PERL_UNUSED_CONTEXT;
463ee0b2 5848 if (sv)
4db098f4 5849 (SvREFCNT(sv))++;
79072805
LW
5850 return sv;
5851}
5852
c461cf8f
JH
5853/*
5854=for apidoc sv_free
5855
645c22ef
DM
5856Decrement an SV's reference count, and if it drops to zero, call
5857C<sv_clear> to invoke destructors and free up any memory used by
5858the body; finally, deallocate the SV's head itself.
5859Normally called via a wrapper macro C<SvREFCNT_dec>.
c461cf8f
JH
5860
5861=cut
5862*/
5863
79072805 5864void
af828c01 5865Perl_sv_free(pTHX_ SV *const sv)
79072805 5866{
27da23d5 5867 dVAR;
79072805
LW
5868 if (!sv)
5869 return;
a0d0e21e
LW
5870 if (SvREFCNT(sv) == 0) {
5871 if (SvFLAGS(sv) & SVf_BREAK)
645c22ef
DM
5872 /* this SV's refcnt has been artificially decremented to
5873 * trigger cleanup */
a0d0e21e 5874 return;
3280af22 5875 if (PL_in_clean_all) /* All is fair */
1edc1566 5876 return;
d689ffdd
JP
5877 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5878 /* make sure SvREFCNT(sv)==0 happens very seldom */
5879 SvREFCNT(sv) = (~(U32)0)/2;
5880 return;
5881 }
41e4abd8 5882 if (ckWARN_d(WARN_INTERNAL)) {
41e4abd8
NC
5883#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5884 Perl_dump_sv_child(aTHX_ sv);
e4c5322d
DM
5885#else
5886 #ifdef DEBUG_LEAKING_SCALARS
bfd95973 5887 sv_dump(sv);
e4c5322d 5888 #endif
bfd95973
NC
5889#ifdef DEBUG_LEAKING_SCALARS_ABORT
5890 if (PL_warnhook == PERL_WARNHOOK_FATAL
5891 || ckDEAD(packWARN(WARN_INTERNAL))) {
5892 /* Don't let Perl_warner cause us to escape our fate: */
5893 abort();
5894 }
5895#endif
5896 /* This may not return: */
5897 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5898 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5899 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
41e4abd8
NC
5900#endif
5901 }
77abb4c6
NC
5902#ifdef DEBUG_LEAKING_SCALARS_ABORT
5903 abort();
5904#endif
79072805
LW
5905 return;
5906 }
4db098f4 5907 if (--(SvREFCNT(sv)) > 0)
8990e307 5908 return;
8c4d3c90
NC
5909 Perl_sv_free2(aTHX_ sv);
5910}
5911
5912void
af828c01 5913Perl_sv_free2(pTHX_ SV *const sv)
8c4d3c90 5914{
27da23d5 5915 dVAR;
7918f24d
NC
5916
5917 PERL_ARGS_ASSERT_SV_FREE2;
5918
463ee0b2
LW
5919#ifdef DEBUGGING
5920 if (SvTEMP(sv)) {
0453d815 5921 if (ckWARN_d(WARN_DEBUGGING))
9014280d 5922 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
472d47bc
SB
5923 "Attempt to free temp prematurely: SV 0x%"UVxf
5924 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
79072805 5925 return;
79072805 5926 }
463ee0b2 5927#endif
d689ffdd
JP
5928 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5929 /* make sure SvREFCNT(sv)==0 happens very seldom */
5930 SvREFCNT(sv) = (~(U32)0)/2;
5931 return;
5932 }
79072805 5933 sv_clear(sv);
477f5d66
CS
5934 if (! SvREFCNT(sv))
5935 del_SV(sv);
79072805
LW
5936}
5937
954c1994
GS
5938/*
5939=for apidoc sv_len
5940
645c22ef
DM
5941Returns the length of the string in the SV. Handles magic and type
5942coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
954c1994
GS
5943
5944=cut
5945*/
5946
79072805 5947STRLEN
af828c01 5948Perl_sv_len(pTHX_ register SV *const sv)
79072805 5949{
463ee0b2 5950 STRLEN len;
79072805
LW
5951
5952 if (!sv)
5953 return 0;
5954
8990e307 5955 if (SvGMAGICAL(sv))
565764a8 5956 len = mg_length(sv);
8990e307 5957 else
4d84ee25 5958 (void)SvPV_const(sv, len);
463ee0b2 5959 return len;
79072805
LW
5960}
5961
c461cf8f
JH
5962/*
5963=for apidoc sv_len_utf8
5964
5965Returns the number of characters in the string in an SV, counting wide
1e54db1a 5966UTF-8 bytes as a single character. Handles magic and type coercion.
c461cf8f
JH
5967
5968=cut
5969*/
5970
7e8c5dac 5971/*
c05a5c57 5972 * The length is cached in PERL_MAGIC_utf8, in the mg_len field. Also the
9564a3bd
NC
5973 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
5974 * (Note that the mg_len is not the length of the mg_ptr field.
5975 * This allows the cache to store the character length of the string without
5976 * needing to malloc() extra storage to attach to the mg_ptr.)
7a5fa8a2 5977 *
7e8c5dac
HS
5978 */
5979
a0ed51b3 5980STRLEN
af828c01 5981Perl_sv_len_utf8(pTHX_ register SV *const sv)
a0ed51b3 5982{
a0ed51b3
LW
5983 if (!sv)
5984 return 0;
5985
a0ed51b3 5986 if (SvGMAGICAL(sv))
b76347f2 5987 return mg_length(sv);
a0ed51b3 5988 else
b76347f2 5989 {
26346457 5990 STRLEN len;
e62f0680 5991 const U8 *s = (U8*)SvPV_const(sv, len);
7e8c5dac 5992
26346457
NC
5993 if (PL_utf8cache) {
5994 STRLEN ulen;
fe5bfecd 5995 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
26346457
NC
5996
5997 if (mg && mg->mg_len != -1) {
5998 ulen = mg->mg_len;
5999 if (PL_utf8cache < 0) {
6000 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6001 if (real != ulen) {
6002 /* Need to turn the assertions off otherwise we may
6003 recurse infinitely while printing error messages.
6004 */
6005 SAVEI8(PL_utf8cache);
6006 PL_utf8cache = 0;
f5992bc4
RB
6007 Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
6008 " real %"UVuf" for %"SVf,
be2597df 6009 (UV) ulen, (UV) real, SVfARG(sv));
26346457
NC
6010 }
6011 }
6012 }
6013 else {
6014 ulen = Perl_utf8_length(aTHX_ s, s + len);
6015 if (!SvREADONLY(sv)) {
6016 if (!mg) {
6017 mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
6018 &PL_vtbl_utf8, 0, 0);
6019 }
cb9e20bb 6020 assert(mg);
26346457 6021 mg->mg_len = ulen;
cb9e20bb 6022 }
cb9e20bb 6023 }
26346457 6024 return ulen;
7e8c5dac 6025 }
26346457 6026 return Perl_utf8_length(aTHX_ s, s + len);
7e8c5dac
HS
6027 }
6028}
6029
9564a3bd
NC
6030/* Walk forwards to find the byte corresponding to the passed in UTF-8
6031 offset. */
bdf30dd6 6032static STRLEN
721e86b6 6033S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
bdf30dd6
NC
6034 STRLEN uoffset)
6035{
6036 const U8 *s = start;
6037
7918f24d
NC
6038 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6039
bdf30dd6
NC
6040 while (s < send && uoffset--)
6041 s += UTF8SKIP(s);
6042 if (s > send) {
6043 /* This is the existing behaviour. Possibly it should be a croak, as
6044 it's actually a bounds error */
6045 s = send;
6046 }
6047 return s - start;
6048}
6049
9564a3bd
NC
6050/* Given the length of the string in both bytes and UTF-8 characters, decide
6051 whether to walk forwards or backwards to find the byte corresponding to
6052 the passed in UTF-8 offset. */
c336ad0b 6053static STRLEN
721e86b6 6054S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
af828c01 6055 const STRLEN uoffset, const STRLEN uend)
c336ad0b
NC
6056{
6057 STRLEN backw = uend - uoffset;
7918f24d
NC
6058
6059 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6060
c336ad0b 6061 if (uoffset < 2 * backw) {
25a8a4ef 6062 /* The assumption is that going forwards is twice the speed of going
c336ad0b
NC
6063 forward (that's where the 2 * backw comes from).
6064 (The real figure of course depends on the UTF-8 data.) */
721e86b6 6065 return sv_pos_u2b_forwards(start, send, uoffset);
c336ad0b
NC
6066 }
6067
6068 while (backw--) {
6069 send--;
6070 while (UTF8_IS_CONTINUATION(*send))
6071 send--;
6072 }
6073 return send - start;
6074}
6075
9564a3bd
NC
6076/* For the string representation of the given scalar, find the byte
6077 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
6078 give another position in the string, *before* the sought offset, which
6079 (which is always true, as 0, 0 is a valid pair of positions), which should
6080 help reduce the amount of linear searching.
6081 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6082 will be used to reduce the amount of linear searching. The cache will be
6083 created if necessary, and the found value offered to it for update. */
28ccbf94 6084static STRLEN
af828c01
SS
6085S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6086 const U8 *const send, const STRLEN uoffset,
7918f24d
NC
6087 STRLEN uoffset0, STRLEN boffset0)
6088{
7087a21c 6089 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
c336ad0b
NC
6090 bool found = FALSE;
6091
7918f24d
NC
6092 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6093
75c33c12
NC
6094 assert (uoffset >= uoffset0);
6095
c336ad0b 6096 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
0905937d 6097 && (*mgp || (*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
d8b2e1f9
NC
6098 if ((*mgp)->mg_ptr) {
6099 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6100 if (cache[0] == uoffset) {
6101 /* An exact match. */
6102 return cache[1];
6103 }
ab455f60
NC
6104 if (cache[2] == uoffset) {
6105 /* An exact match. */
6106 return cache[3];
6107 }
668af93f
NC
6108
6109 if (cache[0] < uoffset) {
d8b2e1f9
NC
6110 /* The cache already knows part of the way. */
6111 if (cache[0] > uoffset0) {
6112 /* The cache knows more than the passed in pair */
6113 uoffset0 = cache[0];
6114 boffset0 = cache[1];
6115 }
6116 if ((*mgp)->mg_len != -1) {
6117 /* And we know the end too. */
6118 boffset = boffset0
721e86b6 6119 + sv_pos_u2b_midway(start + boffset0, send,
d8b2e1f9
NC
6120 uoffset - uoffset0,
6121 (*mgp)->mg_len - uoffset0);
6122 } else {
6123 boffset = boffset0
721e86b6 6124 + sv_pos_u2b_forwards(start + boffset0,
d8b2e1f9
NC
6125 send, uoffset - uoffset0);
6126 }
dd7c5fd3
NC
6127 }
6128 else if (cache[2] < uoffset) {
6129 /* We're between the two cache entries. */
6130 if (cache[2] > uoffset0) {
6131 /* and the cache knows more than the passed in pair */
6132 uoffset0 = cache[2];
6133 boffset0 = cache[3];
6134 }
6135
668af93f 6136 boffset = boffset0
721e86b6 6137 + sv_pos_u2b_midway(start + boffset0,
668af93f
NC
6138 start + cache[1],
6139 uoffset - uoffset0,
6140 cache[0] - uoffset0);
dd7c5fd3
NC
6141 } else {
6142 boffset = boffset0
721e86b6 6143 + sv_pos_u2b_midway(start + boffset0,
dd7c5fd3
NC
6144 start + cache[3],
6145 uoffset - uoffset0,
6146 cache[2] - uoffset0);
d8b2e1f9 6147 }
668af93f 6148 found = TRUE;
d8b2e1f9
NC
6149 }
6150 else if ((*mgp)->mg_len != -1) {
75c33c12
NC
6151 /* If we can take advantage of a passed in offset, do so. */
6152 /* In fact, offset0 is either 0, or less than offset, so don't
6153 need to worry about the other possibility. */
6154 boffset = boffset0
721e86b6 6155 + sv_pos_u2b_midway(start + boffset0, send,
75c33c12
NC
6156 uoffset - uoffset0,
6157 (*mgp)->mg_len - uoffset0);
c336ad0b
NC
6158 found = TRUE;
6159 }
28ccbf94 6160 }
c336ad0b
NC
6161
6162 if (!found || PL_utf8cache < 0) {
75c33c12 6163 const STRLEN real_boffset
721e86b6 6164 = boffset0 + sv_pos_u2b_forwards(start + boffset0,
75c33c12
NC
6165 send, uoffset - uoffset0);
6166
c336ad0b
NC
6167 if (found && PL_utf8cache < 0) {
6168 if (real_boffset != boffset) {
6169 /* Need to turn the assertions off otherwise we may recurse
6170 infinitely while printing error messages. */
6171 SAVEI8(PL_utf8cache);
6172 PL_utf8cache = 0;
f5992bc4
RB
6173 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
6174 " real %"UVuf" for %"SVf,
be2597df 6175 (UV) boffset, (UV) real_boffset, SVfARG(sv));
c336ad0b
NC
6176 }
6177 }
6178 boffset = real_boffset;
28ccbf94 6179 }
0905937d 6180
efcbbafb
NC
6181 if (PL_utf8cache)
6182 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
28ccbf94
NC
6183 return boffset;
6184}
6185
9564a3bd
NC
6186
6187/*
6188=for apidoc sv_pos_u2b
6189
6190Converts the value pointed to by offsetp from a count of UTF-8 chars from
6191the start of the string, to a count of the equivalent number of bytes; if
6192lenp is non-zero, it does the same to lenp, but this time starting from
6193the offset, rather than from the start of the string. Handles magic and
6194type coercion.
6195
6196=cut
6197*/
6198
6199/*
6200 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
c05a5c57 6201 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
6202 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6203 *
6204 */
6205
a0ed51b3 6206void
af828c01 6207Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
a0ed51b3 6208{
245d4a47 6209 const U8 *start;
a0ed51b3
LW
6210 STRLEN len;
6211
7918f24d
NC
6212 PERL_ARGS_ASSERT_SV_POS_U2B;
6213
a0ed51b3
LW
6214 if (!sv)
6215 return;
6216
245d4a47 6217 start = (U8*)SvPV_const(sv, len);
7e8c5dac 6218 if (len) {
bdf30dd6
NC
6219 STRLEN uoffset = (STRLEN) *offsetp;
6220 const U8 * const send = start + len;
0905937d 6221 MAGIC *mg = NULL;
721e86b6 6222 const STRLEN boffset = sv_pos_u2b_cached(sv, &mg, start, send,
28ccbf94 6223 uoffset, 0, 0);
bdf30dd6
NC
6224
6225 *offsetp = (I32) boffset;
6226
6227 if (lenp) {
28ccbf94 6228 /* Convert the relative offset to absolute. */
721e86b6
AL
6229 const STRLEN uoffset2 = uoffset + (STRLEN) *lenp;
6230 const STRLEN boffset2
6231 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
28ccbf94 6232 uoffset, boffset) - boffset;
bdf30dd6 6233
28ccbf94 6234 *lenp = boffset2;
bdf30dd6 6235 }
7e8c5dac
HS
6236 }
6237 else {
6238 *offsetp = 0;
6239 if (lenp)
6240 *lenp = 0;
a0ed51b3 6241 }
e23c8137 6242
a0ed51b3
LW
6243 return;
6244}
6245
9564a3bd
NC
6246/* Create and update the UTF8 magic offset cache, with the proffered utf8/
6247 byte length pairing. The (byte) length of the total SV is passed in too,
6248 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6249 may not have updated SvCUR, so we can't rely on reading it directly.
6250
6251 The proffered utf8/byte length pairing isn't used if the cache already has
6252 two pairs, and swapping either for the proffered pair would increase the
6253 RMS of the intervals between known byte offsets.
6254
6255 The cache itself consists of 4 STRLEN values
6256 0: larger UTF-8 offset
6257 1: corresponding byte offset
6258 2: smaller UTF-8 offset
6259 3: corresponding byte offset
6260
6261 Unused cache pairs have the value 0, 0.
6262 Keeping the cache "backwards" means that the invariant of
6263 cache[0] >= cache[2] is maintained even with empty slots, which means that
6264 the code that uses it doesn't need to worry if only 1 entry has actually
6265 been set to non-zero. It also makes the "position beyond the end of the
6266 cache" logic much simpler, as the first slot is always the one to start
6267 from.
645c22ef 6268*/
ec07b5e0 6269static void
ac1e9476
SS
6270S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6271 const STRLEN utf8, const STRLEN blen)
ec07b5e0
NC
6272{
6273 STRLEN *cache;
7918f24d
NC
6274
6275 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6276
ec07b5e0
NC
6277 if (SvREADONLY(sv))
6278 return;
6279
6280 if (!*mgp) {
6281 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6282 0);
6283 (*mgp)->mg_len = -1;
6284 }
6285 assert(*mgp);
6286
6287 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6288 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6289 (*mgp)->mg_ptr = (char *) cache;
6290 }
6291 assert(cache);
6292
6293 if (PL_utf8cache < 0) {
ef816a78 6294 const U8 *start = (const U8 *) SvPVX_const(sv);
6448472a 6295 const STRLEN realutf8 = utf8_length(start, start + byte);
ec07b5e0
NC
6296
6297 if (realutf8 != utf8) {
6298 /* Need to turn the assertions off otherwise we may recurse
6299 infinitely while printing error messages. */
6300 SAVEI8(PL_utf8cache);
6301 PL_utf8cache = 0;
f5992bc4 6302 Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
be2597df 6303 " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, SVfARG(sv));
ec07b5e0
NC
6304 }
6305 }
ab455f60
NC
6306
6307 /* Cache is held with the later position first, to simplify the code
6308 that deals with unbounded ends. */
6309
6310 ASSERT_UTF8_CACHE(cache);
6311 if (cache[1] == 0) {
6312 /* Cache is totally empty */
6313 cache[0] = utf8;
6314 cache[1] = byte;
6315 } else if (cache[3] == 0) {
6316 if (byte > cache[1]) {
6317 /* New one is larger, so goes first. */
6318 cache[2] = cache[0];
6319 cache[3] = cache[1];
6320 cache[0] = utf8;
6321 cache[1] = byte;
6322 } else {
6323 cache[2] = utf8;
6324 cache[3] = byte;
6325 }
6326 } else {
6327#define THREEWAY_SQUARE(a,b,c,d) \
6328 ((float)((d) - (c))) * ((float)((d) - (c))) \
6329 + ((float)((c) - (b))) * ((float)((c) - (b))) \
6330 + ((float)((b) - (a))) * ((float)((b) - (a)))
6331
6332 /* Cache has 2 slots in use, and we know three potential pairs.
6333 Keep the two that give the lowest RMS distance. Do the
6334 calcualation in bytes simply because we always know the byte
6335 length. squareroot has the same ordering as the positive value,
6336 so don't bother with the actual square root. */
6337 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6338 if (byte > cache[1]) {
6339 /* New position is after the existing pair of pairs. */
6340 const float keep_earlier
6341 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6342 const float keep_later
6343 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6344
6345 if (keep_later < keep_earlier) {
6346 if (keep_later < existing) {
6347 cache[2] = cache[0];
6348 cache[3] = cache[1];
6349 cache[0] = utf8;
6350 cache[1] = byte;
6351 }
6352 }
6353 else {
6354 if (keep_earlier < existing) {
6355 cache[0] = utf8;
6356 cache[1] = byte;
6357 }
6358 }
6359 }
57d7fbf1
NC
6360 else if (byte > cache[3]) {
6361 /* New position is between the existing pair of pairs. */
6362 const float keep_earlier
6363 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6364 const float keep_later
6365 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6366
6367 if (keep_later < keep_earlier) {
6368 if (keep_later < existing) {
6369 cache[2] = utf8;
6370 cache[3] = byte;
6371 }
6372 }
6373 else {
6374 if (keep_earlier < existing) {
6375 cache[0] = utf8;
6376 cache[1] = byte;
6377 }
6378 }
6379 }
6380 else {
6381 /* New position is before the existing pair of pairs. */
6382 const float keep_earlier
6383 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6384 const float keep_later
6385 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6386
6387 if (keep_later < keep_earlier) {
6388 if (keep_later < existing) {
6389 cache[2] = utf8;
6390 cache[3] = byte;
6391 }
6392 }
6393 else {
6394 if (keep_earlier < existing) {
6395 cache[0] = cache[2];
6396 cache[1] = cache[3];
6397 cache[2] = utf8;
6398 cache[3] = byte;
6399 }
6400 }
6401 }
ab455f60 6402 }
0905937d 6403 ASSERT_UTF8_CACHE(cache);
ec07b5e0
NC
6404}
6405
ec07b5e0 6406/* We already know all of the way, now we may be able to walk back. The same
25a8a4ef
NC
6407 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6408 backward is half the speed of walking forward. */
ec07b5e0 6409static STRLEN
ac1e9476
SS
6410S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6411 const U8 *end, STRLEN endu)
ec07b5e0
NC
6412{
6413 const STRLEN forw = target - s;
6414 STRLEN backw = end - target;
6415
7918f24d
NC
6416 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6417
ec07b5e0 6418 if (forw < 2 * backw) {
6448472a 6419 return utf8_length(s, target);
ec07b5e0
NC
6420 }
6421
6422 while (end > target) {
6423 end--;
6424 while (UTF8_IS_CONTINUATION(*end)) {
6425 end--;
6426 }
6427 endu--;
6428 }
6429 return endu;
6430}
6431
9564a3bd
NC
6432/*
6433=for apidoc sv_pos_b2u
6434
6435Converts the value pointed to by offsetp from a count of bytes from the
6436start of the string, to a count of the equivalent number of UTF-8 chars.
6437Handles magic and type coercion.
6438
6439=cut
6440*/
6441
6442/*
6443 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
c05a5c57 6444 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
6445 * byte offsets.
6446 *
6447 */
a0ed51b3 6448void
ac1e9476 6449Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
a0ed51b3 6450{
83003860 6451 const U8* s;
ec07b5e0 6452 const STRLEN byte = *offsetp;
7087a21c 6453 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
ab455f60 6454 STRLEN blen;
ec07b5e0
NC
6455 MAGIC* mg = NULL;
6456 const U8* send;
a922f900 6457 bool found = FALSE;
a0ed51b3 6458
7918f24d
NC
6459 PERL_ARGS_ASSERT_SV_POS_B2U;
6460
a0ed51b3
LW
6461 if (!sv)
6462 return;
6463
ab455f60 6464 s = (const U8*)SvPV_const(sv, blen);
7e8c5dac 6465
ab455f60 6466 if (blen < byte)
ec07b5e0 6467 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7e8c5dac 6468
ec07b5e0 6469 send = s + byte;
a67d7df9 6470
ffca234a
NC
6471 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
6472 && (mg = mg_find(sv, PERL_MAGIC_utf8))) {
6473 if (mg->mg_ptr) {
d4c19fe8 6474 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
b9f984a5 6475 if (cache[1] == byte) {
ec07b5e0
NC
6476 /* An exact match. */
6477 *offsetp = cache[0];
ec07b5e0 6478 return;
7e8c5dac 6479 }
ab455f60
NC
6480 if (cache[3] == byte) {
6481 /* An exact match. */
6482 *offsetp = cache[2];
6483 return;
6484 }
668af93f
NC
6485
6486 if (cache[1] < byte) {
ec07b5e0 6487 /* We already know part of the way. */
b9f984a5
NC
6488 if (mg->mg_len != -1) {
6489 /* Actually, we know the end too. */
6490 len = cache[0]
6491 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
ab455f60 6492 s + blen, mg->mg_len - cache[0]);
b9f984a5 6493 } else {
6448472a 6494 len = cache[0] + utf8_length(s + cache[1], send);
b9f984a5 6495 }
7e8c5dac 6496 }
9f985e4c
NC
6497 else if (cache[3] < byte) {
6498 /* We're between the two cached pairs, so we do the calculation
6499 offset by the byte/utf-8 positions for the earlier pair,
6500 then add the utf-8 characters from the string start to
6501 there. */
6502 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
6503 s + cache[1], cache[0] - cache[2])
6504 + cache[2];
6505
6506 }
6507 else { /* cache[3] > byte */
6508 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
6509 cache[2]);
7e8c5dac 6510
7e8c5dac 6511 }
ec07b5e0 6512 ASSERT_UTF8_CACHE(cache);
a922f900 6513 found = TRUE;
ffca234a 6514 } else if (mg->mg_len != -1) {
ab455f60 6515 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
a922f900 6516 found = TRUE;
7e8c5dac 6517 }
a0ed51b3 6518 }
a922f900 6519 if (!found || PL_utf8cache < 0) {
6448472a 6520 const STRLEN real_len = utf8_length(s, send);
a922f900
NC
6521
6522 if (found && PL_utf8cache < 0) {
6523 if (len != real_len) {
6524 /* Need to turn the assertions off otherwise we may recurse
6525 infinitely while printing error messages. */
6526 SAVEI8(PL_utf8cache);
6527 PL_utf8cache = 0;
f5992bc4
RB
6528 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
6529 " real %"UVuf" for %"SVf,
be2597df 6530 (UV) len, (UV) real_len, SVfARG(sv));
a922f900
NC
6531 }
6532 }
6533 len = real_len;
ec07b5e0
NC
6534 }
6535 *offsetp = len;
6536
efcbbafb
NC
6537 if (PL_utf8cache)
6538 utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
a0ed51b3
LW
6539}
6540
954c1994
GS
6541/*
6542=for apidoc sv_eq
6543
6544Returns a boolean indicating whether the strings in the two SVs are
645c22ef
DM
6545identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6546coerce its args to strings if necessary.
954c1994
GS
6547
6548=cut
6549*/
6550
79072805 6551I32
e01b9e88 6552Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
79072805 6553{
97aff369 6554 dVAR;
e1ec3a88 6555 const char *pv1;
463ee0b2 6556 STRLEN cur1;
e1ec3a88 6557 const char *pv2;
463ee0b2 6558 STRLEN cur2;
e01b9e88 6559 I32 eq = 0;
bd61b366 6560 char *tpv = NULL;
a0714e2c 6561 SV* svrecode = NULL;
79072805 6562
e01b9e88 6563 if (!sv1) {
79072805
LW
6564 pv1 = "";
6565 cur1 = 0;
6566 }
ced497e2
YST
6567 else {
6568 /* if pv1 and pv2 are the same, second SvPV_const call may
6569 * invalidate pv1, so we may need to make a copy */
6570 if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
6571 pv1 = SvPV_const(sv1, cur1);
59cd0e26 6572 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
ced497e2 6573 }
4d84ee25 6574 pv1 = SvPV_const(sv1, cur1);
ced497e2 6575 }
79072805 6576
e01b9e88
SC
6577 if (!sv2){
6578 pv2 = "";
6579 cur2 = 0;
92d29cee 6580 }
e01b9e88 6581 else
4d84ee25 6582 pv2 = SvPV_const(sv2, cur2);
79072805 6583
cf48d248 6584 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
6585 /* Differing utf8ness.
6586 * Do not UTF8size the comparands as a side-effect. */
6587 if (PL_encoding) {
6588 if (SvUTF8(sv1)) {
553e1bcc
AT
6589 svrecode = newSVpvn(pv2, cur2);
6590 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6591 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
6592 }
6593 else {
553e1bcc
AT
6594 svrecode = newSVpvn(pv1, cur1);
6595 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6596 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
6597 }
6598 /* Now both are in UTF-8. */
0a1bd7ac
DM
6599 if (cur1 != cur2) {
6600 SvREFCNT_dec(svrecode);
799ef3cb 6601 return FALSE;
0a1bd7ac 6602 }
799ef3cb
JH
6603 }
6604 else {
6605 bool is_utf8 = TRUE;
6606
6607 if (SvUTF8(sv1)) {
6608 /* sv1 is the UTF-8 one,
6609 * if is equal it must be downgrade-able */
9d4ba2ae 6610 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
799ef3cb
JH
6611 &cur1, &is_utf8);
6612 if (pv != pv1)
553e1bcc 6613 pv1 = tpv = pv;
799ef3cb
JH
6614 }
6615 else {
6616 /* sv2 is the UTF-8 one,
6617 * if is equal it must be downgrade-able */
9d4ba2ae 6618 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
799ef3cb
JH
6619 &cur2, &is_utf8);
6620 if (pv != pv2)
553e1bcc 6621 pv2 = tpv = pv;
799ef3cb
JH
6622 }
6623 if (is_utf8) {
6624 /* Downgrade not possible - cannot be eq */
bf694877 6625 assert (tpv == 0);
799ef3cb
JH
6626 return FALSE;
6627 }
6628 }
cf48d248
JH
6629 }
6630
6631 if (cur1 == cur2)
765f542d 6632 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
e01b9e88 6633
b37c2d43 6634 SvREFCNT_dec(svrecode);
553e1bcc
AT
6635 if (tpv)
6636 Safefree(tpv);
cf48d248 6637
e01b9e88 6638 return eq;
79072805
LW
6639}
6640
954c1994
GS
6641/*
6642=for apidoc sv_cmp
6643
6644Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
6645string in C<sv1> is less than, equal to, or greater than the string in
645c22ef
DM
6646C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6647coerce its args to strings if necessary. See also C<sv_cmp_locale>.
954c1994
GS
6648
6649=cut
6650*/
6651
79072805 6652I32
ac1e9476 6653Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
79072805 6654{
97aff369 6655 dVAR;
560a288e 6656 STRLEN cur1, cur2;
e1ec3a88 6657 const char *pv1, *pv2;
bd61b366 6658 char *tpv = NULL;
cf48d248 6659 I32 cmp;
a0714e2c 6660 SV *svrecode = NULL;
560a288e 6661
e01b9e88
SC
6662 if (!sv1) {
6663 pv1 = "";
560a288e
GS
6664 cur1 = 0;
6665 }
e01b9e88 6666 else
4d84ee25 6667 pv1 = SvPV_const(sv1, cur1);
560a288e 6668
553e1bcc 6669 if (!sv2) {
e01b9e88 6670 pv2 = "";
560a288e
GS
6671 cur2 = 0;
6672 }
e01b9e88 6673 else
4d84ee25 6674 pv2 = SvPV_const(sv2, cur2);
79072805 6675
cf48d248 6676 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
6677 /* Differing utf8ness.
6678 * Do not UTF8size the comparands as a side-effect. */
cf48d248 6679 if (SvUTF8(sv1)) {
799ef3cb 6680 if (PL_encoding) {
553e1bcc
AT
6681 svrecode = newSVpvn(pv2, cur2);
6682 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6683 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
6684 }
6685 else {
e1ec3a88 6686 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
799ef3cb 6687 }
cf48d248
JH
6688 }
6689 else {
799ef3cb 6690 if (PL_encoding) {
553e1bcc
AT
6691 svrecode = newSVpvn(pv1, cur1);
6692 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6693 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
6694 }
6695 else {
e1ec3a88 6696 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
799ef3cb 6697 }
cf48d248
JH
6698 }
6699 }
6700
e01b9e88 6701 if (!cur1) {
cf48d248 6702 cmp = cur2 ? -1 : 0;
e01b9e88 6703 } else if (!cur2) {
cf48d248
JH
6704 cmp = 1;
6705 } else {
e1ec3a88 6706 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
e01b9e88
SC
6707
6708 if (retval) {
cf48d248 6709 cmp = retval < 0 ? -1 : 1;
e01b9e88 6710 } else if (cur1 == cur2) {
cf48d248
JH
6711 cmp = 0;
6712 } else {
6713 cmp = cur1 < cur2 ? -1 : 1;
e01b9e88 6714 }
cf48d248 6715 }
16660edb 6716
b37c2d43 6717 SvREFCNT_dec(svrecode);
553e1bcc
AT
6718 if (tpv)
6719 Safefree(tpv);
cf48d248
JH
6720
6721 return cmp;
bbce6d69 6722}
16660edb 6723
c461cf8f
JH
6724/*
6725=for apidoc sv_cmp_locale
6726
645c22ef
DM
6727Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6728'use bytes' aware, handles get magic, and will coerce its args to strings
d77cdebf 6729if necessary. See also C<sv_cmp>.
c461cf8f
JH
6730
6731=cut
6732*/
6733
bbce6d69 6734I32
ac1e9476 6735Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
bbce6d69 6736{
97aff369 6737 dVAR;
36477c24 6738#ifdef USE_LOCALE_COLLATE
16660edb 6739
bbce6d69 6740 char *pv1, *pv2;
6741 STRLEN len1, len2;
6742 I32 retval;
16660edb 6743
3280af22 6744 if (PL_collation_standard)
bbce6d69 6745 goto raw_compare;
16660edb 6746
bbce6d69 6747 len1 = 0;
8ac85365 6748 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
bbce6d69 6749 len2 = 0;
8ac85365 6750 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
16660edb 6751
bbce6d69 6752 if (!pv1 || !len1) {
6753 if (pv2 && len2)
6754 return -1;
6755 else
6756 goto raw_compare;
6757 }
6758 else {
6759 if (!pv2 || !len2)
6760 return 1;
6761 }
16660edb 6762
bbce6d69 6763 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
16660edb 6764
bbce6d69 6765 if (retval)
16660edb 6766 return retval < 0 ? -1 : 1;
6767
bbce6d69 6768 /*
6769 * When the result of collation is equality, that doesn't mean
6770 * that there are no differences -- some locales exclude some
6771 * characters from consideration. So to avoid false equalities,
6772 * we use the raw string as a tiebreaker.
6773 */
16660edb 6774
bbce6d69 6775 raw_compare:
5f66b61c 6776 /*FALLTHROUGH*/
16660edb 6777
36477c24 6778#endif /* USE_LOCALE_COLLATE */
16660edb 6779
bbce6d69 6780 return sv_cmp(sv1, sv2);
6781}
79072805 6782
645c22ef 6783
36477c24 6784#ifdef USE_LOCALE_COLLATE
645c22ef 6785
7a4c00b4 6786/*
645c22ef
DM
6787=for apidoc sv_collxfrm
6788
6789Add Collate Transform magic to an SV if it doesn't already have it.
6790
6791Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6792scalar data of the variable, but transformed to such a format that a normal
6793memory comparison can be used to compare the data according to the locale
6794settings.
6795
6796=cut
6797*/
6798
bbce6d69 6799char *
ac1e9476 6800Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
bbce6d69 6801{
97aff369 6802 dVAR;
7a4c00b4 6803 MAGIC *mg;
16660edb 6804
7918f24d
NC
6805 PERL_ARGS_ASSERT_SV_COLLXFRM;
6806
14befaf4 6807 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
3280af22 6808 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
93524f2b
NC
6809 const char *s;
6810 char *xf;
bbce6d69 6811 STRLEN len, xlen;
6812
7a4c00b4 6813 if (mg)
6814 Safefree(mg->mg_ptr);
93524f2b 6815 s = SvPV_const(sv, len);
bbce6d69 6816 if ((xf = mem_collxfrm(s, len, &xlen))) {
7a4c00b4 6817 if (! mg) {
d83f0a82
NC
6818#ifdef PERL_OLD_COPY_ON_WRITE
6819 if (SvIsCOW(sv))
6820 sv_force_normal_flags(sv, 0);
6821#endif
6822 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6823 0, 0);
7a4c00b4 6824 assert(mg);
bbce6d69 6825 }
7a4c00b4 6826 mg->mg_ptr = xf;
565764a8 6827 mg->mg_len = xlen;
7a4c00b4 6828 }
6829 else {
ff0cee69 6830 if (mg) {
6831 mg->mg_ptr = NULL;
565764a8 6832 mg->mg_len = -1;
ff0cee69 6833 }
bbce6d69 6834 }
6835 }
7a4c00b4 6836 if (mg && mg->mg_ptr) {
565764a8 6837 *nxp = mg->mg_len;
3280af22 6838 return mg->mg_ptr + sizeof(PL_collation_ix);
bbce6d69 6839 }
6840 else {
6841 *nxp = 0;
6842 return NULL;
16660edb 6843 }
79072805
LW
6844}
6845
36477c24 6846#endif /* USE_LOCALE_COLLATE */
bbce6d69 6847
c461cf8f
JH
6848/*
6849=for apidoc sv_gets
6850
6851Get a line from the filehandle and store it into the SV, optionally
6852appending to the currently-stored string.
6853
6854=cut
6855*/
6856
79072805 6857char *
ac1e9476 6858Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
79072805 6859{
97aff369 6860 dVAR;
e1ec3a88 6861 const char *rsptr;
c07a80fd 6862 STRLEN rslen;
6863 register STDCHAR rslast;
6864 register STDCHAR *bp;
6865 register I32 cnt;
9c5ffd7c 6866 I32 i = 0;
8bfdd7d9 6867 I32 rspara = 0;
c07a80fd 6868
7918f24d
NC
6869 PERL_ARGS_ASSERT_SV_GETS;
6870
bc44a8a2
NC
6871 if (SvTHINKFIRST(sv))
6872 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
765f542d
NC
6873 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6874 from <>.
6875 However, perlbench says it's slower, because the existing swipe code
6876 is faster than copy on write.
6877 Swings and roundabouts. */
862a34c6 6878 SvUPGRADE(sv, SVt_PV);
99491443 6879
ff68c719 6880 SvSCREAM_off(sv);
efd8b2ba
AE
6881
6882 if (append) {
6883 if (PerlIO_isutf8(fp)) {
6884 if (!SvUTF8(sv)) {
6885 sv_utf8_upgrade_nomg(sv);
6886 sv_pos_u2b(sv,&append,0);
6887 }
6888 } else if (SvUTF8(sv)) {
561b68a9 6889 SV * const tsv = newSV(0);
efd8b2ba
AE
6890 sv_gets(tsv, fp, 0);
6891 sv_utf8_upgrade_nomg(tsv);
6892 SvCUR_set(sv,append);
6893 sv_catsv(sv,tsv);
6894 sv_free(tsv);
6895 goto return_string_or_null;
6896 }
6897 }
6898
6899 SvPOK_only(sv);
6900 if (PerlIO_isutf8(fp))
6901 SvUTF8_on(sv);
c07a80fd 6902
923e4eb5 6903 if (IN_PERL_COMPILETIME) {
8bfdd7d9
HS
6904 /* we always read code in line mode */
6905 rsptr = "\n";
6906 rslen = 1;
6907 }
6908 else if (RsSNARF(PL_rs)) {
7a5fa8a2 6909 /* If it is a regular disk file use size from stat() as estimate
acbd132f
JH
6910 of amount we are going to read -- may result in mallocing
6911 more memory than we really need if the layers below reduce
6912 the size we read (e.g. CRLF or a gzip layer).
e468d35b 6913 */
e311fd51 6914 Stat_t st;
e468d35b 6915 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
f54cb97a 6916 const Off_t offset = PerlIO_tell(fp);
58f1856e 6917 if (offset != (Off_t) -1 && st.st_size + append > offset) {
e468d35b
NIS
6918 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6919 }
6920 }
c07a80fd 6921 rsptr = NULL;
6922 rslen = 0;
6923 }
3280af22 6924 else if (RsRECORD(PL_rs)) {
e311fd51 6925 I32 bytesread;
5b2b9c68 6926 char *buffer;
acbd132f 6927 U32 recsize;
048d9da8
CB
6928#ifdef VMS
6929 int fd;
6930#endif
5b2b9c68
HM
6931
6932 /* Grab the size of the record we're getting */
acbd132f 6933 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
e311fd51 6934 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
5b2b9c68
HM
6935 /* Go yank in */
6936#ifdef VMS
6937 /* VMS wants read instead of fread, because fread doesn't respect */
6938 /* RMS record boundaries. This is not necessarily a good thing to be */
e468d35b
NIS
6939 /* doing, but we've got no other real choice - except avoid stdio
6940 as implementation - perhaps write a :vms layer ?
6941 */
048d9da8
CB
6942 fd = PerlIO_fileno(fp);
6943 if (fd == -1) { /* in-memory file from PerlIO::Scalar */
6944 bytesread = PerlIO_read(fp, buffer, recsize);
6945 }
6946 else {
6947 bytesread = PerlLIO_read(fd, buffer, recsize);
6948 }
5b2b9c68
HM
6949#else
6950 bytesread = PerlIO_read(fp, buffer, recsize);
6951#endif
27e6ca2d
AE
6952 if (bytesread < 0)
6953 bytesread = 0;
82f1394b 6954 SvCUR_set(sv, bytesread + append);
e670df4e 6955 buffer[bytesread] = '\0';
efd8b2ba 6956 goto return_string_or_null;
5b2b9c68 6957 }
3280af22 6958 else if (RsPARA(PL_rs)) {
c07a80fd 6959 rsptr = "\n\n";
6960 rslen = 2;
8bfdd7d9 6961 rspara = 1;
c07a80fd 6962 }
7d59b7e4
NIS
6963 else {
6964 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6965 if (PerlIO_isutf8(fp)) {
6966 rsptr = SvPVutf8(PL_rs, rslen);
6967 }
6968 else {
6969 if (SvUTF8(PL_rs)) {
6970 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6971 Perl_croak(aTHX_ "Wide character in $/");
6972 }
6973 }
93524f2b 6974 rsptr = SvPV_const(PL_rs, rslen);
7d59b7e4
NIS
6975 }
6976 }
6977
c07a80fd 6978 rslast = rslen ? rsptr[rslen - 1] : '\0';
6979
8bfdd7d9 6980 if (rspara) { /* have to do this both before and after */
79072805 6981 do { /* to make sure file boundaries work right */
760ac839 6982 if (PerlIO_eof(fp))
a0d0e21e 6983 return 0;
760ac839 6984 i = PerlIO_getc(fp);
79072805 6985 if (i != '\n') {
a0d0e21e
LW
6986 if (i == -1)
6987 return 0;
760ac839 6988 PerlIO_ungetc(fp,i);
79072805
LW
6989 break;
6990 }
6991 } while (i != EOF);
6992 }
c07a80fd 6993
760ac839
LW
6994 /* See if we know enough about I/O mechanism to cheat it ! */
6995
6996 /* This used to be #ifdef test - it is made run-time test for ease
1c846c1f 6997 of abstracting out stdio interface. One call should be cheap
760ac839
LW
6998 enough here - and may even be a macro allowing compile
6999 time optimization.
7000 */
7001
7002 if (PerlIO_fast_gets(fp)) {
7003
7004 /*
7005 * We're going to steal some values from the stdio struct
7006 * and put EVERYTHING in the innermost loop into registers.
7007 */
7008 register STDCHAR *ptr;
7009 STRLEN bpx;
7010 I32 shortbuffered;
7011
16660edb 7012#if defined(VMS) && defined(PERLIO_IS_STDIO)
7013 /* An ungetc()d char is handled separately from the regular
7014 * buffer, so we getc() it back out and stuff it in the buffer.
7015 */
7016 i = PerlIO_getc(fp);
7017 if (i == EOF) return 0;
7018 *(--((*fp)->_ptr)) = (unsigned char) i;
7019 (*fp)->_cnt++;
7020#endif
c07a80fd 7021
c2960299 7022 /* Here is some breathtakingly efficient cheating */
c07a80fd 7023
a20bf0c3 7024 cnt = PerlIO_get_cnt(fp); /* get count into register */
e468d35b 7025 /* make sure we have the room */
7a5fa8a2 7026 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
e468d35b 7027 /* Not room for all of it
7a5fa8a2 7028 if we are looking for a separator and room for some
e468d35b
NIS
7029 */
7030 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7a5fa8a2 7031 /* just process what we have room for */
79072805
LW
7032 shortbuffered = cnt - SvLEN(sv) + append + 1;
7033 cnt -= shortbuffered;
7034 }
7035 else {
7036 shortbuffered = 0;
bbce6d69 7037 /* remember that cnt can be negative */
eb160463 7038 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
79072805
LW
7039 }
7040 }
7a5fa8a2 7041 else
79072805 7042 shortbuffered = 0;
3f7c398e 7043 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
a20bf0c3 7044 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
16660edb 7045 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7046 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
16660edb 7047 DEBUG_P(PerlIO_printf(Perl_debug_log,
ba7abf9d 7048 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7049 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7050 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
79072805
LW
7051 for (;;) {
7052 screamer:
93a17b20 7053 if (cnt > 0) {
c07a80fd 7054 if (rslen) {
760ac839
LW
7055 while (cnt > 0) { /* this | eat */
7056 cnt--;
c07a80fd 7057 if ((*bp++ = *ptr++) == rslast) /* really | dust */
7058 goto thats_all_folks; /* screams | sed :-) */
7059 }
7060 }
7061 else {
1c846c1f
NIS
7062 Copy(ptr, bp, cnt, char); /* this | eat */
7063 bp += cnt; /* screams | dust */
c07a80fd 7064 ptr += cnt; /* louder | sed :-) */
a5f75d66 7065 cnt = 0;
93a17b20 7066 }
79072805
LW
7067 }
7068
748a9306 7069 if (shortbuffered) { /* oh well, must extend */
79072805
LW
7070 cnt = shortbuffered;
7071 shortbuffered = 0;
3f7c398e 7072 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7073 SvCUR_set(sv, bpx);
7074 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3f7c398e 7075 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
79072805
LW
7076 continue;
7077 }
7078
16660edb 7079 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841
GS
7080 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7081 PTR2UV(ptr),(long)cnt));
cc00df79 7082 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
ba7abf9d 7083#if 0
16660edb 7084 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7085 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7086 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7087 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 7088#endif
1c846c1f 7089 /* This used to call 'filbuf' in stdio form, but as that behaves like
774d564b 7090 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7091 another abstraction. */
760ac839 7092 i = PerlIO_getc(fp); /* get more characters */
ba7abf9d 7093#if 0
16660edb 7094 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7095 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7096 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7097 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 7098#endif
a20bf0c3
JH
7099 cnt = PerlIO_get_cnt(fp);
7100 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
16660edb 7101 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7102 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
79072805 7103
748a9306
LW
7104 if (i == EOF) /* all done for ever? */
7105 goto thats_really_all_folks;
7106
3f7c398e 7107 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7108 SvCUR_set(sv, bpx);
7109 SvGROW(sv, bpx + cnt + 2);
3f7c398e 7110 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
c07a80fd 7111
eb160463 7112 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
79072805 7113
c07a80fd 7114 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
79072805 7115 goto thats_all_folks;
79072805
LW
7116 }
7117
7118thats_all_folks:
3f7c398e 7119 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
36477c24 7120 memNE((char*)bp - rslen, rsptr, rslen))
760ac839 7121 goto screamer; /* go back to the fray */
79072805
LW
7122thats_really_all_folks:
7123 if (shortbuffered)
7124 cnt += shortbuffered;
16660edb 7125 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7126 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
cc00df79 7127 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
16660edb 7128 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7129 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7130 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7131 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
79072805 7132 *bp = '\0';
3f7c398e 7133 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
16660edb 7134 DEBUG_P(PerlIO_printf(Perl_debug_log,
fb73857a 7135 "Screamer: done, len=%ld, string=|%.*s|\n",
3f7c398e 7136 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
760ac839
LW
7137 }
7138 else
79072805 7139 {
6edd2cd5 7140 /*The big, slow, and stupid way. */
27da23d5 7141#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
cbbf8932 7142 STDCHAR *buf = NULL;
a02a5408 7143 Newx(buf, 8192, STDCHAR);
6edd2cd5 7144 assert(buf);
4d2c4e07 7145#else
6edd2cd5 7146 STDCHAR buf[8192];
4d2c4e07 7147#endif
79072805 7148
760ac839 7149screamer2:
c07a80fd 7150 if (rslen) {
00b6aa41 7151 register const STDCHAR * const bpe = buf + sizeof(buf);
760ac839 7152 bp = buf;
eb160463 7153 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
760ac839
LW
7154 ; /* keep reading */
7155 cnt = bp - buf;
c07a80fd 7156 }
7157 else {
760ac839 7158 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
16660edb 7159 /* Accomodate broken VAXC compiler, which applies U8 cast to
7160 * both args of ?: operator, causing EOF to change into 255
7161 */
37be0adf 7162 if (cnt > 0)
cbe9e203
JH
7163 i = (U8)buf[cnt - 1];
7164 else
37be0adf 7165 i = EOF;
c07a80fd 7166 }
79072805 7167
cbe9e203
JH
7168 if (cnt < 0)
7169 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
7170 if (append)
7171 sv_catpvn(sv, (char *) buf, cnt);
7172 else
7173 sv_setpvn(sv, (char *) buf, cnt);
c07a80fd 7174
7175 if (i != EOF && /* joy */
7176 (!rslen ||
7177 SvCUR(sv) < rslen ||
3f7c398e 7178 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
79072805
LW
7179 {
7180 append = -1;
63e4d877
CS
7181 /*
7182 * If we're reading from a TTY and we get a short read,
7183 * indicating that the user hit his EOF character, we need
7184 * to notice it now, because if we try to read from the TTY
7185 * again, the EOF condition will disappear.
7186 *
7187 * The comparison of cnt to sizeof(buf) is an optimization
7188 * that prevents unnecessary calls to feof().
7189 *
7190 * - jik 9/25/96
7191 */
bb7a0f54 7192 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
63e4d877 7193 goto screamer2;
79072805 7194 }
6edd2cd5 7195
27da23d5 7196#ifdef USE_HEAP_INSTEAD_OF_STACK
6edd2cd5
JH
7197 Safefree(buf);
7198#endif
79072805
LW
7199 }
7200
8bfdd7d9 7201 if (rspara) { /* have to do this both before and after */
c07a80fd 7202 while (i != EOF) { /* to make sure file boundaries work right */
760ac839 7203 i = PerlIO_getc(fp);
79072805 7204 if (i != '\n') {
760ac839 7205 PerlIO_ungetc(fp,i);
79072805
LW
7206 break;
7207 }
7208 }
7209 }
c07a80fd 7210
efd8b2ba 7211return_string_or_null:
bd61b366 7212 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
79072805
LW
7213}
7214
954c1994
GS
7215/*
7216=for apidoc sv_inc
7217
645c22ef
DM
7218Auto-increment of the value in the SV, doing string to numeric conversion
7219if necessary. Handles 'get' magic.
954c1994
GS
7220
7221=cut
7222*/
7223
79072805 7224void
ac1e9476 7225Perl_sv_inc(pTHX_ register SV *const sv)
79072805 7226{
97aff369 7227 dVAR;
79072805 7228 register char *d;
463ee0b2 7229 int flags;
79072805
LW
7230
7231 if (!sv)
7232 return;
5b295bef 7233 SvGETMAGIC(sv);
ed6116ce 7234 if (SvTHINKFIRST(sv)) {
765f542d
NC
7235 if (SvIsCOW(sv))
7236 sv_force_normal_flags(sv, 0);
0f15f207 7237 if (SvREADONLY(sv)) {
923e4eb5 7238 if (IN_PERL_RUNTIME)
f1f66076 7239 Perl_croak(aTHX_ "%s", PL_no_modify);
0f15f207 7240 }
a0d0e21e 7241 if (SvROK(sv)) {
b5be31e9 7242 IV i;
9e7bc3e8
JD
7243 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7244 return;
56431972 7245 i = PTR2IV(SvRV(sv));
b5be31e9
SM
7246 sv_unref(sv);
7247 sv_setiv(sv, i);
a0d0e21e 7248 }
ed6116ce 7249 }
8990e307 7250 flags = SvFLAGS(sv);
28e5dec8
JH
7251 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7252 /* It's (privately or publicly) a float, but not tested as an
7253 integer, so test it to see. */
d460ef45 7254 (void) SvIV(sv);
28e5dec8
JH
7255 flags = SvFLAGS(sv);
7256 }
7257 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7258 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 7259#ifdef PERL_PRESERVE_IVUV
28e5dec8 7260 oops_its_int:
59d8ce62 7261#endif
25da4f38
IZ
7262 if (SvIsUV(sv)) {
7263 if (SvUVX(sv) == UV_MAX)
a1e868e7 7264 sv_setnv(sv, UV_MAX_P1);
25da4f38
IZ
7265 else
7266 (void)SvIOK_only_UV(sv);
607fa7f2 7267 SvUV_set(sv, SvUVX(sv) + 1);
25da4f38
IZ
7268 } else {
7269 if (SvIVX(sv) == IV_MAX)
28e5dec8 7270 sv_setuv(sv, (UV)IV_MAX + 1);
25da4f38
IZ
7271 else {
7272 (void)SvIOK_only(sv);
45977657 7273 SvIV_set(sv, SvIVX(sv) + 1);
1c846c1f 7274 }
55497cff 7275 }
79072805
LW
7276 return;
7277 }
28e5dec8 7278 if (flags & SVp_NOK) {
b88df990 7279 const NV was = SvNVX(sv);
b68c599a
NC
7280 if (NV_OVERFLOWS_INTEGERS_AT &&
7281 was >= NV_OVERFLOWS_INTEGERS_AT && ckWARN(WARN_IMPRECISION)) {
b88df990
NC
7282 Perl_warner(aTHX_ packWARN(WARN_IMPRECISION),
7283 "Lost precision when incrementing %" NVff " by 1",
7284 was);
7285 }
28e5dec8 7286 (void)SvNOK_only(sv);
b68c599a 7287 SvNV_set(sv, was + 1.0);
28e5dec8
JH
7288 return;
7289 }
7290
3f7c398e 7291 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
28e5dec8 7292 if ((flags & SVTYPEMASK) < SVt_PVIV)
f5282e15 7293 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
28e5dec8 7294 (void)SvIOK_only(sv);
45977657 7295 SvIV_set(sv, 1);
79072805
LW
7296 return;
7297 }
463ee0b2 7298 d = SvPVX(sv);
79072805
LW
7299 while (isALPHA(*d)) d++;
7300 while (isDIGIT(*d)) d++;
6aff239d 7301 if (d < SvEND(sv)) {
28e5dec8 7302#ifdef PERL_PRESERVE_IVUV
d1be9408 7303 /* Got to punt this as an integer if needs be, but we don't issue
28e5dec8
JH
7304 warnings. Probably ought to make the sv_iv_please() that does
7305 the conversion if possible, and silently. */
504618e9 7306 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
7307 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7308 /* Need to try really hard to see if it's an integer.
7309 9.22337203685478e+18 is an integer.
7310 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7311 so $a="9.22337203685478e+18"; $a+0; $a++
7312 needs to be the same as $a="9.22337203685478e+18"; $a++
7313 or we go insane. */
d460ef45 7314
28e5dec8
JH
7315 (void) sv_2iv(sv);
7316 if (SvIOK(sv))
7317 goto oops_its_int;
7318
7319 /* sv_2iv *should* have made this an NV */
7320 if (flags & SVp_NOK) {
7321 (void)SvNOK_only(sv);
9d6ce603 7322 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
7323 return;
7324 }
7325 /* I don't think we can get here. Maybe I should assert this
7326 And if we do get here I suspect that sv_setnv will croak. NWC
7327 Fall through. */
7328#if defined(USE_LONG_DOUBLE)
7329 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
3f7c398e 7330 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 7331#else
1779d84d 7332 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
3f7c398e 7333 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
7334#endif
7335 }
7336#endif /* PERL_PRESERVE_IVUV */
3f7c398e 7337 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
79072805
LW
7338 return;
7339 }
7340 d--;
3f7c398e 7341 while (d >= SvPVX_const(sv)) {
79072805
LW
7342 if (isDIGIT(*d)) {
7343 if (++*d <= '9')
7344 return;
7345 *(d--) = '0';
7346 }
7347 else {
9d116dd7
JH
7348#ifdef EBCDIC
7349 /* MKS: The original code here died if letters weren't consecutive.
7350 * at least it didn't have to worry about non-C locales. The
7351 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
1c846c1f 7352 * arranged in order (although not consecutively) and that only
9d116dd7
JH
7353 * [A-Za-z] are accepted by isALPHA in the C locale.
7354 */
7355 if (*d != 'z' && *d != 'Z') {
7356 do { ++*d; } while (!isALPHA(*d));
7357 return;
7358 }
7359 *(d--) -= 'z' - 'a';
7360#else
79072805
LW
7361 ++*d;
7362 if (isALPHA(*d))
7363 return;
7364 *(d--) -= 'z' - 'a' + 1;
9d116dd7 7365#endif
79072805
LW
7366 }
7367 }
7368 /* oh,oh, the number grew */
7369 SvGROW(sv, SvCUR(sv) + 2);
b162af07 7370 SvCUR_set(sv, SvCUR(sv) + 1);
3f7c398e 7371 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
79072805
LW
7372 *d = d[-1];
7373 if (isDIGIT(d[1]))
7374 *d = '1';
7375 else
7376 *d = d[1];
7377}
7378
954c1994
GS
7379/*
7380=for apidoc sv_dec
7381
645c22ef
DM
7382Auto-decrement of the value in the SV, doing string to numeric conversion
7383if necessary. Handles 'get' magic.
954c1994
GS
7384
7385=cut
7386*/
7387
79072805 7388void
ac1e9476 7389Perl_sv_dec(pTHX_ register SV *const sv)
79072805 7390{
97aff369 7391 dVAR;
463ee0b2
LW
7392 int flags;
7393
79072805
LW
7394 if (!sv)
7395 return;
5b295bef 7396 SvGETMAGIC(sv);
ed6116ce 7397 if (SvTHINKFIRST(sv)) {
765f542d
NC
7398 if (SvIsCOW(sv))
7399 sv_force_normal_flags(sv, 0);
0f15f207 7400 if (SvREADONLY(sv)) {
923e4eb5 7401 if (IN_PERL_RUNTIME)
f1f66076 7402 Perl_croak(aTHX_ "%s", PL_no_modify);
0f15f207 7403 }
a0d0e21e 7404 if (SvROK(sv)) {
b5be31e9 7405 IV i;
9e7bc3e8
JD
7406 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7407 return;
56431972 7408 i = PTR2IV(SvRV(sv));
b5be31e9
SM
7409 sv_unref(sv);
7410 sv_setiv(sv, i);
a0d0e21e 7411 }
ed6116ce 7412 }
28e5dec8
JH
7413 /* Unlike sv_inc we don't have to worry about string-never-numbers
7414 and keeping them magic. But we mustn't warn on punting */
8990e307 7415 flags = SvFLAGS(sv);
28e5dec8
JH
7416 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7417 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 7418#ifdef PERL_PRESERVE_IVUV
28e5dec8 7419 oops_its_int:
59d8ce62 7420#endif
25da4f38
IZ
7421 if (SvIsUV(sv)) {
7422 if (SvUVX(sv) == 0) {
7423 (void)SvIOK_only(sv);
45977657 7424 SvIV_set(sv, -1);
25da4f38
IZ
7425 }
7426 else {
7427 (void)SvIOK_only_UV(sv);
f4eee32f 7428 SvUV_set(sv, SvUVX(sv) - 1);
1c846c1f 7429 }
25da4f38 7430 } else {
b88df990
NC
7431 if (SvIVX(sv) == IV_MIN) {
7432 sv_setnv(sv, (NV)IV_MIN);
7433 goto oops_its_num;
7434 }
25da4f38
IZ
7435 else {
7436 (void)SvIOK_only(sv);
45977657 7437 SvIV_set(sv, SvIVX(sv) - 1);
1c846c1f 7438 }
55497cff 7439 }
7440 return;
7441 }
28e5dec8 7442 if (flags & SVp_NOK) {
b88df990
NC
7443 oops_its_num:
7444 {
7445 const NV was = SvNVX(sv);
b68c599a
NC
7446 if (NV_OVERFLOWS_INTEGERS_AT &&
7447 was <= -NV_OVERFLOWS_INTEGERS_AT && ckWARN(WARN_IMPRECISION)) {
b88df990
NC
7448 Perl_warner(aTHX_ packWARN(WARN_IMPRECISION),
7449 "Lost precision when decrementing %" NVff " by 1",
7450 was);
7451 }
7452 (void)SvNOK_only(sv);
b68c599a 7453 SvNV_set(sv, was - 1.0);
b88df990
NC
7454 return;
7455 }
28e5dec8 7456 }
8990e307 7457 if (!(flags & SVp_POK)) {
ef088171
NC
7458 if ((flags & SVTYPEMASK) < SVt_PVIV)
7459 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
7460 SvIV_set(sv, -1);
7461 (void)SvIOK_only(sv);
79072805
LW
7462 return;
7463 }
28e5dec8
JH
7464#ifdef PERL_PRESERVE_IVUV
7465 {
504618e9 7466 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
7467 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7468 /* Need to try really hard to see if it's an integer.
7469 9.22337203685478e+18 is an integer.
7470 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7471 so $a="9.22337203685478e+18"; $a+0; $a--
7472 needs to be the same as $a="9.22337203685478e+18"; $a--
7473 or we go insane. */
d460ef45 7474
28e5dec8
JH
7475 (void) sv_2iv(sv);
7476 if (SvIOK(sv))
7477 goto oops_its_int;
7478
7479 /* sv_2iv *should* have made this an NV */
7480 if (flags & SVp_NOK) {
7481 (void)SvNOK_only(sv);
9d6ce603 7482 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
7483 return;
7484 }
7485 /* I don't think we can get here. Maybe I should assert this
7486 And if we do get here I suspect that sv_setnv will croak. NWC
7487 Fall through. */
7488#if defined(USE_LONG_DOUBLE)
7489 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
3f7c398e 7490 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 7491#else
1779d84d 7492 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
3f7c398e 7493 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
7494#endif
7495 }
7496 }
7497#endif /* PERL_PRESERVE_IVUV */
3f7c398e 7498 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
79072805
LW
7499}
7500
81041c50
YO
7501/* this define is used to eliminate a chunk of duplicated but shared logic
7502 * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
7503 * used anywhere but here - yves
7504 */
7505#define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
7506 STMT_START { \
7507 EXTEND_MORTAL(1); \
7508 PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
7509 } STMT_END
7510
954c1994
GS
7511/*
7512=for apidoc sv_mortalcopy
7513
645c22ef 7514Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
d4236ebc
DM
7515The new SV is marked as mortal. It will be destroyed "soon", either by an
7516explicit call to FREETMPS, or by an implicit call at places such as
7517statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
954c1994
GS
7518
7519=cut
7520*/
7521
79072805
LW
7522/* Make a string that will exist for the duration of the expression
7523 * evaluation. Actually, it may have to last longer than that, but
7524 * hopefully we won't free it until it has been assigned to a
7525 * permanent location. */
7526
7527SV *
ac1e9476 7528Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
79072805 7529{
97aff369 7530 dVAR;
463ee0b2 7531 register SV *sv;
b881518d 7532
4561caa4 7533 new_SV(sv);
79072805 7534 sv_setsv(sv,oldstr);
81041c50 7535 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307
LW
7536 SvTEMP_on(sv);
7537 return sv;
7538}
7539
954c1994
GS
7540/*
7541=for apidoc sv_newmortal
7542
645c22ef 7543Creates a new null SV which is mortal. The reference count of the SV is
d4236ebc
DM
7544set to 1. It will be destroyed "soon", either by an explicit call to
7545FREETMPS, or by an implicit call at places such as statement boundaries.
7546See also C<sv_mortalcopy> and C<sv_2mortal>.
954c1994
GS
7547
7548=cut
7549*/
7550
8990e307 7551SV *
864dbfa3 7552Perl_sv_newmortal(pTHX)
8990e307 7553{
97aff369 7554 dVAR;
8990e307
LW
7555 register SV *sv;
7556
4561caa4 7557 new_SV(sv);
8990e307 7558 SvFLAGS(sv) = SVs_TEMP;
81041c50 7559 PUSH_EXTEND_MORTAL__SV_C(sv);
79072805
LW
7560 return sv;
7561}
7562
59cd0e26
NC
7563
7564/*
7565=for apidoc newSVpvn_flags
7566
7567Creates a new SV and copies a string into it. The reference count for the
7568SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7569string. You are responsible for ensuring that the source string is at least
7570C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7571Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
7572If C<SVs_TEMP> is set, then C<sv2mortal()> is called on the result before
7573returning. If C<SVf_UTF8> is set, then it will be set on the new SV.
7574C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
7575
7576 #define newSVpvn_utf8(s, len, u) \
7577 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
7578
7579=cut
7580*/
7581
7582SV *
23f13727 7583Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
59cd0e26
NC
7584{
7585 dVAR;
7586 register SV *sv;
7587
7588 /* All the flags we don't support must be zero.
7589 And we're new code so I'm going to assert this from the start. */
7590 assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
7591 new_SV(sv);
7592 sv_setpvn(sv,s,len);
d21488d7
YO
7593
7594 /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
7595 * and do what it does outselves here.
7596 * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
7597 * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
7598 * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
7599 * eleminate quite a few steps than it looks - Yves (explaining patch by gfx)
7600 */
7601
6dfeccca
GF
7602 SvFLAGS(sv) |= flags;
7603
7604 if(flags & SVs_TEMP){
81041c50 7605 PUSH_EXTEND_MORTAL__SV_C(sv);
6dfeccca
GF
7606 }
7607
7608 return sv;
59cd0e26
NC
7609}
7610
954c1994
GS
7611/*
7612=for apidoc sv_2mortal
7613
d4236ebc
DM
7614Marks an existing SV as mortal. The SV will be destroyed "soon", either
7615by an explicit call to FREETMPS, or by an implicit call at places such as
37d2ac18
NC
7616statement boundaries. SvTEMP() is turned on which means that the SV's
7617string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7618and C<sv_mortalcopy>.
954c1994
GS
7619
7620=cut
7621*/
7622
79072805 7623SV *
23f13727 7624Perl_sv_2mortal(pTHX_ register SV *const sv)
79072805 7625{
27da23d5 7626 dVAR;
79072805 7627 if (!sv)
7a5b473e 7628 return NULL;
d689ffdd 7629 if (SvREADONLY(sv) && SvIMMORTAL(sv))
11162842 7630 return sv;
81041c50 7631 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307 7632 SvTEMP_on(sv);
79072805
LW
7633 return sv;
7634}
7635
954c1994
GS
7636/*
7637=for apidoc newSVpv
7638
7639Creates a new SV and copies a string into it. The reference count for the
7640SV is set to 1. If C<len> is zero, Perl will compute the length using
7641strlen(). For efficiency, consider using C<newSVpvn> instead.
7642
7643=cut
7644*/
7645
79072805 7646SV *
23f13727 7647Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
79072805 7648{
97aff369 7649 dVAR;
463ee0b2 7650 register SV *sv;
79072805 7651
4561caa4 7652 new_SV(sv);
ddfa59c7 7653 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
79072805
LW
7654 return sv;
7655}
7656
954c1994
GS
7657/*
7658=for apidoc newSVpvn
7659
7660Creates a new SV and copies a string into it. The reference count for the
1c846c1f 7661SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
954c1994 7662string. You are responsible for ensuring that the source string is at least
9e09f5f2 7663C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
954c1994
GS
7664
7665=cut
7666*/
7667
9da1e3b5 7668SV *
23f13727 7669Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
9da1e3b5 7670{
97aff369 7671 dVAR;
9da1e3b5
MUN
7672 register SV *sv;
7673
7674 new_SV(sv);
9da1e3b5
MUN
7675 sv_setpvn(sv,s,len);
7676 return sv;
7677}
7678
740cce10 7679/*
926f8064 7680=for apidoc newSVhek
bd08039b
NC
7681
7682Creates a new SV from the hash key structure. It will generate scalars that
5aaec2b4
NC
7683point to the shared string table where possible. Returns a new (undefined)
7684SV if the hek is NULL.
bd08039b
NC
7685
7686=cut
7687*/
7688
7689SV *
23f13727 7690Perl_newSVhek(pTHX_ const HEK *const hek)
bd08039b 7691{
97aff369 7692 dVAR;
5aaec2b4
NC
7693 if (!hek) {
7694 SV *sv;
7695
7696 new_SV(sv);
7697 return sv;
7698 }
7699
bd08039b
NC
7700 if (HEK_LEN(hek) == HEf_SVKEY) {
7701 return newSVsv(*(SV**)HEK_KEY(hek));
7702 } else {
7703 const int flags = HEK_FLAGS(hek);
7704 if (flags & HVhek_WASUTF8) {
7705 /* Trouble :-)
7706 Andreas would like keys he put in as utf8 to come back as utf8
7707 */
7708 STRLEN utf8_len = HEK_LEN(hek);
b64e5050
AL
7709 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7710 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
bd08039b
NC
7711
7712 SvUTF8_on (sv);
7713 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7714 return sv;
45e34800 7715 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
bd08039b
NC
7716 /* We don't have a pointer to the hv, so we have to replicate the
7717 flag into every HEK. This hv is using custom a hasing
7718 algorithm. Hence we can't return a shared string scalar, as
7719 that would contain the (wrong) hash value, and might get passed
45e34800
NC
7720 into an hv routine with a regular hash.
7721 Similarly, a hash that isn't using shared hash keys has to have
7722 the flag in every key so that we know not to try to call
7723 share_hek_kek on it. */
bd08039b 7724
b64e5050 7725 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
bd08039b
NC
7726 if (HEK_UTF8(hek))
7727 SvUTF8_on (sv);
7728 return sv;
7729 }
7730 /* This will be overwhelminly the most common case. */
409dfe77
NC
7731 {
7732 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
7733 more efficient than sharepvn(). */
7734 SV *sv;
7735
7736 new_SV(sv);
7737 sv_upgrade(sv, SVt_PV);
7738 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7739 SvCUR_set(sv, HEK_LEN(hek));
7740 SvLEN_set(sv, 0);
7741 SvREADONLY_on(sv);
7742 SvFAKE_on(sv);
7743 SvPOK_on(sv);
7744 if (HEK_UTF8(hek))
7745 SvUTF8_on(sv);
7746 return sv;
7747 }
bd08039b
NC
7748 }
7749}
7750
1c846c1f
NIS
7751/*
7752=for apidoc newSVpvn_share
7753
3f7c398e 7754Creates a new SV with its SvPVX_const pointing to a shared string in the string
645c22ef 7755table. If the string does not already exist in the table, it is created
758fcfc1
VP
7756first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
7757value is used; otherwise the hash is computed. The string's hash can be later
7758be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
7759that as the string table is used for shared hash keys these strings will have
7760SvPVX_const == HeKEY and hash lookup will avoid string compare.
1c846c1f
NIS
7761
7762=cut
7763*/
7764
7765SV *
c3654f1a 7766Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
1c846c1f 7767{
97aff369 7768 dVAR;
1c846c1f 7769 register SV *sv;
c3654f1a 7770 bool is_utf8 = FALSE;
a51caccf
NC
7771 const char *const orig_src = src;
7772
c3654f1a 7773 if (len < 0) {
77caf834 7774 STRLEN tmplen = -len;
c3654f1a 7775 is_utf8 = TRUE;
75a54232 7776 /* See the note in hv.c:hv_fetch() --jhi */
e1ec3a88 7777 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
75a54232
JH
7778 len = tmplen;
7779 }
1c846c1f 7780 if (!hash)
5afd6d42 7781 PERL_HASH(hash, src, len);
1c846c1f 7782 new_SV(sv);
f46ee248
NC
7783 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
7784 changes here, update it there too. */
bdd68bc3 7785 sv_upgrade(sv, SVt_PV);
f880fe2f 7786 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
b162af07 7787 SvCUR_set(sv, len);
b162af07 7788 SvLEN_set(sv, 0);
1c846c1f
NIS
7789 SvREADONLY_on(sv);
7790 SvFAKE_on(sv);
7791 SvPOK_on(sv);
c3654f1a
IH
7792 if (is_utf8)
7793 SvUTF8_on(sv);
a51caccf
NC
7794 if (src != orig_src)
7795 Safefree(src);
1c846c1f
NIS
7796 return sv;
7797}
7798
645c22ef 7799
cea2e8a9 7800#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
7801
7802/* pTHX_ magic can't cope with varargs, so this is a no-context
7803 * version of the main function, (which may itself be aliased to us).
7804 * Don't access this version directly.
7805 */
7806
46fc3d4c 7807SV *
23f13727 7808Perl_newSVpvf_nocontext(const char *const pat, ...)
46fc3d4c 7809{
cea2e8a9 7810 dTHX;
46fc3d4c 7811 register SV *sv;
7812 va_list args;
7918f24d
NC
7813
7814 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
7815
46fc3d4c 7816 va_start(args, pat);
c5be433b 7817 sv = vnewSVpvf(pat, &args);
46fc3d4c 7818 va_end(args);
7819 return sv;
7820}
cea2e8a9 7821#endif
46fc3d4c 7822
954c1994
GS
7823/*
7824=for apidoc newSVpvf
7825
645c22ef 7826Creates a new SV and initializes it with the string formatted like
954c1994
GS
7827C<sprintf>.
7828
7829=cut
7830*/
7831
cea2e8a9 7832SV *
23f13727 7833Perl_newSVpvf(pTHX_ const char *const pat, ...)
cea2e8a9
GS
7834{
7835 register SV *sv;
7836 va_list args;
7918f24d
NC
7837
7838 PERL_ARGS_ASSERT_NEWSVPVF;
7839
cea2e8a9 7840 va_start(args, pat);
c5be433b 7841 sv = vnewSVpvf(pat, &args);
cea2e8a9
GS
7842 va_end(args);
7843 return sv;
7844}
46fc3d4c 7845
645c22ef
DM
7846/* backend for newSVpvf() and newSVpvf_nocontext() */
7847
79072805 7848SV *
23f13727 7849Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
c5be433b 7850{
97aff369 7851 dVAR;
c5be433b 7852 register SV *sv;
7918f24d
NC
7853
7854 PERL_ARGS_ASSERT_VNEWSVPVF;
7855
c5be433b 7856 new_SV(sv);
4608196e 7857 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
7858 return sv;
7859}
7860
954c1994
GS
7861/*
7862=for apidoc newSVnv
7863
7864Creates a new SV and copies a floating point value into it.
7865The reference count for the SV is set to 1.
7866
7867=cut
7868*/
7869
c5be433b 7870SV *
23f13727 7871Perl_newSVnv(pTHX_ const NV n)
79072805 7872{
97aff369 7873 dVAR;
463ee0b2 7874 register SV *sv;
79072805 7875
4561caa4 7876 new_SV(sv);
79072805
LW
7877 sv_setnv(sv,n);
7878 return sv;
7879}
7880
954c1994
GS
7881/*
7882=for apidoc newSViv
7883
7884Creates a new SV and copies an integer into it. The reference count for the
7885SV is set to 1.
7886
7887=cut
7888*/
7889
79072805 7890SV *
23f13727 7891Perl_newSViv(pTHX_ const IV i)
79072805 7892{
97aff369 7893 dVAR;
463ee0b2 7894 register SV *sv;
79072805 7895
4561caa4 7896 new_SV(sv);
79072805
LW
7897 sv_setiv(sv,i);
7898 return sv;
7899}
7900
954c1994 7901/*
1a3327fb
JH
7902=for apidoc newSVuv
7903
7904Creates a new SV and copies an unsigned integer into it.
7905The reference count for the SV is set to 1.
7906
7907=cut
7908*/
7909
7910SV *
23f13727 7911Perl_newSVuv(pTHX_ const UV u)
1a3327fb 7912{
97aff369 7913 dVAR;
1a3327fb
JH
7914 register SV *sv;
7915
7916 new_SV(sv);
7917 sv_setuv(sv,u);
7918 return sv;
7919}
7920
7921/*
b9f83d2f
NC
7922=for apidoc newSV_type
7923
c41f7ed2 7924Creates a new SV, of the type specified. The reference count for the new SV
b9f83d2f
NC
7925is set to 1.
7926
7927=cut
7928*/
7929
7930SV *
fe9845cc 7931Perl_newSV_type(pTHX_ const svtype type)
b9f83d2f
NC
7932{
7933 register SV *sv;
7934
7935 new_SV(sv);
7936 sv_upgrade(sv, type);
7937 return sv;
7938}
7939
7940/*
954c1994
GS
7941=for apidoc newRV_noinc
7942
7943Creates an RV wrapper for an SV. The reference count for the original
7944SV is B<not> incremented.
7945
7946=cut
7947*/
7948
2304df62 7949SV *
23f13727 7950Perl_newRV_noinc(pTHX_ SV *const tmpRef)
2304df62 7951{
97aff369 7952 dVAR;
4df7f6af 7953 register SV *sv = newSV_type(SVt_IV);
7918f24d
NC
7954
7955 PERL_ARGS_ASSERT_NEWRV_NOINC;
7956
76e3520e 7957 SvTEMP_off(tmpRef);
b162af07 7958 SvRV_set(sv, tmpRef);
2304df62 7959 SvROK_on(sv);
2304df62
AD
7960 return sv;
7961}
7962
ff276b08 7963/* newRV_inc is the official function name to use now.
645c22ef
DM
7964 * newRV_inc is in fact #defined to newRV in sv.h
7965 */
7966
5f05dabc 7967SV *
23f13727 7968Perl_newRV(pTHX_ SV *const sv)
5f05dabc 7969{
97aff369 7970 dVAR;
7918f24d
NC
7971
7972 PERL_ARGS_ASSERT_NEWRV;
7973
7f466ec7 7974 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
5f05dabc 7975}
5f05dabc 7976
954c1994
GS
7977/*
7978=for apidoc newSVsv
7979
7980Creates a new SV which is an exact duplicate of the original SV.
645c22ef 7981(Uses C<sv_setsv>).
954c1994
GS
7982
7983=cut
7984*/
7985
79072805 7986SV *
23f13727 7987Perl_newSVsv(pTHX_ register SV *const old)
79072805 7988{
97aff369 7989 dVAR;
463ee0b2 7990 register SV *sv;
79072805
LW
7991
7992 if (!old)
7a5b473e 7993 return NULL;
8990e307 7994 if (SvTYPE(old) == SVTYPEMASK) {
0453d815 7995 if (ckWARN_d(WARN_INTERNAL))
9014280d 7996 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
a0714e2c 7997 return NULL;
79072805 7998 }
4561caa4 7999 new_SV(sv);
e90aabeb
NC
8000 /* SV_GMAGIC is the default for sv_setv()
8001 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8002 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
8003 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
463ee0b2 8004 return sv;
79072805
LW
8005}
8006
645c22ef
DM
8007/*
8008=for apidoc sv_reset
8009
8010Underlying implementation for the C<reset> Perl function.
8011Note that the perl-level function is vaguely deprecated.
8012
8013=cut
8014*/
8015
79072805 8016void
23f13727 8017Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
79072805 8018{
27da23d5 8019 dVAR;
4802d5d7 8020 char todo[PERL_UCHAR_MAX+1];
79072805 8021
7918f24d
NC
8022 PERL_ARGS_ASSERT_SV_RESET;
8023
49d8d3a1
MB
8024 if (!stash)
8025 return;
8026
79072805 8027 if (!*s) { /* reset ?? searches */
daba3364 8028 MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8d2f4536 8029 if (mg) {
c2b1997a
NC
8030 const U32 count = mg->mg_len / sizeof(PMOP**);
8031 PMOP **pmp = (PMOP**) mg->mg_ptr;
8032 PMOP *const *const end = pmp + count;
8033
8034 while (pmp < end) {
c737faaf 8035#ifdef USE_ITHREADS
c2b1997a 8036 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
c737faaf 8037#else
c2b1997a 8038 (*pmp)->op_pmflags &= ~PMf_USED;
c737faaf 8039#endif
c2b1997a 8040 ++pmp;
8d2f4536 8041 }
79072805
LW
8042 }
8043 return;
8044 }
8045
8046 /* reset variables */
8047
8048 if (!HvARRAY(stash))
8049 return;
463ee0b2
LW
8050
8051 Zero(todo, 256, char);
79072805 8052 while (*s) {
b464bac0
AL
8053 I32 max;
8054 I32 i = (unsigned char)*s;
79072805
LW
8055 if (s[1] == '-') {
8056 s += 2;
8057 }
4802d5d7 8058 max = (unsigned char)*s++;
79072805 8059 for ( ; i <= max; i++) {
463ee0b2
LW
8060 todo[i] = 1;
8061 }
a0d0e21e 8062 for (i = 0; i <= (I32) HvMAX(stash); i++) {
b464bac0 8063 HE *entry;
79072805 8064 for (entry = HvARRAY(stash)[i];
9e35f4b3
GS
8065 entry;
8066 entry = HeNEXT(entry))
8067 {
b464bac0
AL
8068 register GV *gv;
8069 register SV *sv;
8070
1edc1566 8071 if (!todo[(U8)*HeKEY(entry)])
463ee0b2 8072 continue;
159b6efe 8073 gv = MUTABLE_GV(HeVAL(entry));
79072805 8074 sv = GvSV(gv);
e203899d
NC
8075 if (sv) {
8076 if (SvTHINKFIRST(sv)) {
8077 if (!SvREADONLY(sv) && SvROK(sv))
8078 sv_unref(sv);
8079 /* XXX Is this continue a bug? Why should THINKFIRST
8080 exempt us from resetting arrays and hashes? */
8081 continue;
8082 }
8083 SvOK_off(sv);
8084 if (SvTYPE(sv) >= SVt_PV) {
8085 SvCUR_set(sv, 0);
bd61b366 8086 if (SvPVX_const(sv) != NULL)
e203899d
NC
8087 *SvPVX(sv) = '\0';
8088 SvTAINT(sv);
8089 }
79072805
LW
8090 }
8091 if (GvAV(gv)) {
8092 av_clear(GvAV(gv));
8093 }
bfcb3514 8094 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
b0269e46
AB
8095#if defined(VMS)
8096 Perl_die(aTHX_ "Can't reset %%ENV on this system");
8097#else /* ! VMS */
463ee0b2 8098 hv_clear(GvHV(gv));
b0269e46
AB
8099# if defined(USE_ENVIRON_ARRAY)
8100 if (gv == PL_envgv)
8101 my_clearenv();
8102# endif /* USE_ENVIRON_ARRAY */
8103#endif /* VMS */
79072805
LW
8104 }
8105 }
8106 }
8107 }
8108}
8109
645c22ef
DM
8110/*
8111=for apidoc sv_2io
8112
8113Using various gambits, try to get an IO from an SV: the IO slot if its a
8114GV; or the recursive result if we're an RV; or the IO slot of the symbol
8115named after the PV if we're a string.
8116
8117=cut
8118*/
8119
46fc3d4c 8120IO*
23f13727 8121Perl_sv_2io(pTHX_ SV *const sv)
46fc3d4c 8122{
8123 IO* io;
8124 GV* gv;
8125
7918f24d
NC
8126 PERL_ARGS_ASSERT_SV_2IO;
8127
46fc3d4c 8128 switch (SvTYPE(sv)) {
8129 case SVt_PVIO:
a45c7426 8130 io = MUTABLE_IO(sv);
46fc3d4c 8131 break;
8132 case SVt_PVGV:
6e592b3a 8133 if (isGV_with_GP(sv)) {
159b6efe 8134 gv = MUTABLE_GV(sv);
6e592b3a
BM
8135 io = GvIO(gv);
8136 if (!io)
8137 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8138 break;
8139 }
8140 /* FALL THROUGH */
46fc3d4c 8141 default:
8142 if (!SvOK(sv))
cea2e8a9 8143 Perl_croak(aTHX_ PL_no_usym, "filehandle");
46fc3d4c 8144 if (SvROK(sv))
8145 return sv_2io(SvRV(sv));
f776e3cd 8146 gv = gv_fetchsv(sv, 0, SVt_PVIO);
46fc3d4c 8147 if (gv)
8148 io = GvIO(gv);
8149 else
8150 io = 0;
8151 if (!io)
be2597df 8152 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
46fc3d4c 8153 break;
8154 }
8155 return io;
8156}
8157
645c22ef
DM
8158/*
8159=for apidoc sv_2cv
8160
8161Using various gambits, try to get a CV from an SV; in addition, try if
8162possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
f2c0649b 8163The flags in C<lref> are passed to sv_fetchsv.
645c22ef
DM
8164
8165=cut
8166*/
8167
79072805 8168CV *
23f13727 8169Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
79072805 8170{
27da23d5 8171 dVAR;
a0714e2c 8172 GV *gv = NULL;
601f1833 8173 CV *cv = NULL;
79072805 8174
7918f24d
NC
8175 PERL_ARGS_ASSERT_SV_2CV;
8176
85dec29a
NC
8177 if (!sv) {
8178 *st = NULL;
8179 *gvp = NULL;
8180 return NULL;
8181 }
79072805 8182 switch (SvTYPE(sv)) {
79072805
LW
8183 case SVt_PVCV:
8184 *st = CvSTASH(sv);
a0714e2c 8185 *gvp = NULL;
ea726b52 8186 return MUTABLE_CV(sv);
79072805
LW
8187 case SVt_PVHV:
8188 case SVt_PVAV:
ef58ba18 8189 *st = NULL;
a0714e2c 8190 *gvp = NULL;
601f1833 8191 return NULL;
8990e307 8192 case SVt_PVGV:
6e592b3a 8193 if (isGV_with_GP(sv)) {
159b6efe 8194 gv = MUTABLE_GV(sv);
6e592b3a
BM
8195 *gvp = gv;
8196 *st = GvESTASH(gv);
8197 goto fix_gv;
8198 }
8199 /* FALL THROUGH */
8990e307 8200
79072805 8201 default:
a0d0e21e 8202 if (SvROK(sv)) {
823a54a3 8203 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
c4f3bd1e 8204 SvGETMAGIC(sv);
f5284f61
IZ
8205 tryAMAGICunDEREF(to_cv);
8206
62f274bf
GS
8207 sv = SvRV(sv);
8208 if (SvTYPE(sv) == SVt_PVCV) {
ea726b52 8209 cv = MUTABLE_CV(sv);
a0714e2c 8210 *gvp = NULL;
62f274bf
GS
8211 *st = CvSTASH(cv);
8212 return cv;
8213 }
6e592b3a 8214 else if(isGV_with_GP(sv))
159b6efe 8215 gv = MUTABLE_GV(sv);
62f274bf 8216 else
cea2e8a9 8217 Perl_croak(aTHX_ "Not a subroutine reference");
a0d0e21e 8218 }
6e592b3a 8219 else if (isGV_with_GP(sv)) {
9d0f7ed7 8220 SvGETMAGIC(sv);
159b6efe 8221 gv = MUTABLE_GV(sv);
9d0f7ed7 8222 }
79072805 8223 else
9d0f7ed7 8224 gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
79072805 8225 *gvp = gv;
ef58ba18
NC
8226 if (!gv) {
8227 *st = NULL;
601f1833 8228 return NULL;
ef58ba18 8229 }
e26df76a 8230 /* Some flags to gv_fetchsv mean don't really create the GV */
6e592b3a 8231 if (!isGV_with_GP(gv)) {
e26df76a
NC
8232 *st = NULL;
8233 return NULL;
8234 }
79072805 8235 *st = GvESTASH(gv);
8990e307 8236 fix_gv:
8ebc5c01 8237 if (lref && !GvCVu(gv)) {
4633a7c4 8238 SV *tmpsv;
748a9306 8239 ENTER;
561b68a9 8240 tmpsv = newSV(0);
bd61b366 8241 gv_efullname3(tmpsv, gv, NULL);
f6ec51f7
GS
8242 /* XXX this is probably not what they think they're getting.
8243 * It has the same effect as "sub name;", i.e. just a forward
8244 * declaration! */
774d564b 8245 newSUB(start_subparse(FALSE, 0),
4633a7c4 8246 newSVOP(OP_CONST, 0, tmpsv),
5f66b61c 8247 NULL, NULL);
748a9306 8248 LEAVE;
8ebc5c01 8249 if (!GvCVu(gv))
35c1215d 8250 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
4052d21c 8251 SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8990e307 8252 }
8ebc5c01 8253 return GvCVu(gv);
79072805
LW
8254 }
8255}
8256
c461cf8f
JH
8257/*
8258=for apidoc sv_true
8259
8260Returns true if the SV has a true value by Perl's rules.
645c22ef
DM
8261Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8262instead use an in-line version.
c461cf8f
JH
8263
8264=cut
8265*/
8266
79072805 8267I32
23f13727 8268Perl_sv_true(pTHX_ register SV *const sv)
79072805 8269{
8990e307
LW
8270 if (!sv)
8271 return 0;
79072805 8272 if (SvPOK(sv)) {
823a54a3
AL
8273 register const XPV* const tXpv = (XPV*)SvANY(sv);
8274 if (tXpv &&
c2f1de04 8275 (tXpv->xpv_cur > 1 ||
339049b0 8276 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
79072805
LW
8277 return 1;
8278 else
8279 return 0;
8280 }
8281 else {
8282 if (SvIOK(sv))
463ee0b2 8283 return SvIVX(sv) != 0;
79072805
LW
8284 else {
8285 if (SvNOK(sv))
463ee0b2 8286 return SvNVX(sv) != 0.0;
79072805 8287 else
463ee0b2 8288 return sv_2bool(sv);
79072805
LW
8289 }
8290 }
8291}
79072805 8292
645c22ef 8293/*
c461cf8f
JH
8294=for apidoc sv_pvn_force
8295
8296Get a sensible string out of the SV somehow.
645c22ef
DM
8297A private implementation of the C<SvPV_force> macro for compilers which
8298can't cope with complex macro expressions. Always use the macro instead.
c461cf8f 8299
8d6d96c1
HS
8300=for apidoc sv_pvn_force_flags
8301
8302Get a sensible string out of the SV somehow.
8303If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8304appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8305implemented in terms of this function.
645c22ef
DM
8306You normally want to use the various wrapper macros instead: see
8307C<SvPV_force> and C<SvPV_force_nomg>
8d6d96c1
HS
8308
8309=cut
8310*/
8311
8312char *
12964ddd 8313Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 8314{
97aff369 8315 dVAR;
7918f24d
NC
8316
8317 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8318
6fc92669 8319 if (SvTHINKFIRST(sv) && !SvROK(sv))
765f542d 8320 sv_force_normal_flags(sv, 0);
1c846c1f 8321
a0d0e21e 8322 if (SvPOK(sv)) {
13c5b33c
NC
8323 if (lp)
8324 *lp = SvCUR(sv);
a0d0e21e
LW
8325 }
8326 else {
a3b680e6 8327 char *s;
13c5b33c
NC
8328 STRLEN len;
8329
4d84ee25 8330 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
b64e5050 8331 const char * const ref = sv_reftype(sv,0);
4d84ee25
NC
8332 if (PL_op)
8333 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
b64e5050 8334 ref, OP_NAME(PL_op));
4d84ee25 8335 else
b64e5050 8336 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
4d84ee25 8337 }
1f257c95
NC
8338 if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8339 || isGV_with_GP(sv))
cea2e8a9 8340 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
53e06cf0 8341 OP_NAME(PL_op));
b64e5050 8342 s = sv_2pv_flags(sv, &len, flags);
13c5b33c
NC
8343 if (lp)
8344 *lp = len;
8345
3f7c398e 8346 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
a0d0e21e
LW
8347 if (SvROK(sv))
8348 sv_unref(sv);
862a34c6 8349 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
a0d0e21e 8350 SvGROW(sv, len + 1);
706aa1c9 8351 Move(s,SvPVX(sv),len,char);
a0d0e21e 8352 SvCUR_set(sv, len);
97a130b8 8353 SvPVX(sv)[len] = '\0';
a0d0e21e
LW
8354 }
8355 if (!SvPOK(sv)) {
8356 SvPOK_on(sv); /* validate pointer */
8357 SvTAINT(sv);
1d7c1841 8358 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 8359 PTR2UV(sv),SvPVX_const(sv)));
a0d0e21e
LW
8360 }
8361 }
4d84ee25 8362 return SvPVX_mutable(sv);
a0d0e21e
LW
8363}
8364
645c22ef 8365/*
645c22ef
DM
8366=for apidoc sv_pvbyten_force
8367
0feed65a 8368The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
645c22ef
DM
8369
8370=cut
8371*/
8372
7340a771 8373char *
12964ddd 8374Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 8375{
7918f24d
NC
8376 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8377
46ec2f14 8378 sv_pvn_force(sv,lp);
ffebcc3e 8379 sv_utf8_downgrade(sv,0);
46ec2f14
TS
8380 *lp = SvCUR(sv);
8381 return SvPVX(sv);
7340a771
GS
8382}
8383
645c22ef 8384/*
c461cf8f
JH
8385=for apidoc sv_pvutf8n_force
8386
0feed65a 8387The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
c461cf8f
JH
8388
8389=cut
8390*/
8391
7340a771 8392char *
12964ddd 8393Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 8394{
7918f24d
NC
8395 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
8396
46ec2f14 8397 sv_pvn_force(sv,lp);
560a288e 8398 sv_utf8_upgrade(sv);
46ec2f14
TS
8399 *lp = SvCUR(sv);
8400 return SvPVX(sv);
7340a771
GS
8401}
8402
c461cf8f
JH
8403/*
8404=for apidoc sv_reftype
8405
8406Returns a string describing what the SV is a reference to.
8407
8408=cut
8409*/
8410
2b388283 8411const char *
12964ddd 8412Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
a0d0e21e 8413{
7918f24d
NC
8414 PERL_ARGS_ASSERT_SV_REFTYPE;
8415
07409e01
NC
8416 /* The fact that I don't need to downcast to char * everywhere, only in ?:
8417 inside return suggests a const propagation bug in g++. */
c86bf373 8418 if (ob && SvOBJECT(sv)) {
1b6737cc 8419 char * const name = HvNAME_get(SvSTASH(sv));
07409e01 8420 return name ? name : (char *) "__ANON__";
c86bf373 8421 }
a0d0e21e
LW
8422 else {
8423 switch (SvTYPE(sv)) {
8424 case SVt_NULL:
8425 case SVt_IV:
8426 case SVt_NV:
a0d0e21e
LW
8427 case SVt_PV:
8428 case SVt_PVIV:
8429 case SVt_PVNV:
8430 case SVt_PVMG:
1cb0ed9b 8431 if (SvVOK(sv))
439cb1c4 8432 return "VSTRING";
a0d0e21e
LW
8433 if (SvROK(sv))
8434 return "REF";
8435 else
8436 return "SCALAR";
1cb0ed9b 8437
07409e01 8438 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
be65207d
DM
8439 /* tied lvalues should appear to be
8440 * scalars for backwards compatitbility */
8441 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
07409e01 8442 ? "SCALAR" : "LVALUE");
a0d0e21e
LW
8443 case SVt_PVAV: return "ARRAY";
8444 case SVt_PVHV: return "HASH";
8445 case SVt_PVCV: return "CODE";
6e592b3a
BM
8446 case SVt_PVGV: return (char *) (isGV_with_GP(sv)
8447 ? "GLOB" : "SCALAR");
1d2dff63 8448 case SVt_PVFM: return "FORMAT";
27f9d8f3 8449 case SVt_PVIO: return "IO";
cecf5685 8450 case SVt_BIND: return "BIND";
b7c9370f 8451 case SVt_REGEXP: return "REGEXP";
a0d0e21e
LW
8452 default: return "UNKNOWN";
8453 }
8454 }
8455}
8456
954c1994
GS
8457/*
8458=for apidoc sv_isobject
8459
8460Returns a boolean indicating whether the SV is an RV pointing to a blessed
8461object. If the SV is not an RV, or if the object is not blessed, then this
8462will return false.
8463
8464=cut
8465*/
8466
463ee0b2 8467int
864dbfa3 8468Perl_sv_isobject(pTHX_ SV *sv)
85e6fe83 8469{
68dc0745 8470 if (!sv)
8471 return 0;
5b295bef 8472 SvGETMAGIC(sv);
85e6fe83
LW
8473 if (!SvROK(sv))
8474 return 0;
daba3364 8475 sv = SvRV(sv);
85e6fe83
LW
8476 if (!SvOBJECT(sv))
8477 return 0;
8478 return 1;
8479}
8480
954c1994
GS
8481/*
8482=for apidoc sv_isa
8483
8484Returns a boolean indicating whether the SV is blessed into the specified
8485class. This does not check for subtypes; use C<sv_derived_from> to verify
8486an inheritance relationship.
8487
8488=cut
8489*/
8490
85e6fe83 8491int
12964ddd 8492Perl_sv_isa(pTHX_ SV *sv, const char *const name)
463ee0b2 8493{
bfcb3514 8494 const char *hvname;
7918f24d
NC
8495
8496 PERL_ARGS_ASSERT_SV_ISA;
8497
68dc0745 8498 if (!sv)
8499 return 0;
5b295bef 8500 SvGETMAGIC(sv);
ed6116ce 8501 if (!SvROK(sv))
463ee0b2 8502 return 0;
daba3364 8503 sv = SvRV(sv);
ed6116ce 8504 if (!SvOBJECT(sv))
463ee0b2 8505 return 0;
bfcb3514
NC
8506 hvname = HvNAME_get(SvSTASH(sv));
8507 if (!hvname)
e27ad1f2 8508 return 0;
463ee0b2 8509
bfcb3514 8510 return strEQ(hvname, name);
463ee0b2
LW
8511}
8512
954c1994
GS
8513/*
8514=for apidoc newSVrv
8515
8516Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
8517it will be upgraded to one. If C<classname> is non-null then the new SV will
8518be blessed in the specified package. The new SV is returned and its
8519reference count is 1.
8520
8521=cut
8522*/
8523
463ee0b2 8524SV*
12964ddd 8525Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
463ee0b2 8526{
97aff369 8527 dVAR;
463ee0b2
LW
8528 SV *sv;
8529
7918f24d
NC
8530 PERL_ARGS_ASSERT_NEWSVRV;
8531
4561caa4 8532 new_SV(sv);
51cf62d8 8533
765f542d 8534 SV_CHECK_THINKFIRST_COW_DROP(rv);
52944de8 8535 (void)SvAMAGIC_off(rv);
51cf62d8 8536
0199fce9 8537 if (SvTYPE(rv) >= SVt_PVMG) {
a3b680e6 8538 const U32 refcnt = SvREFCNT(rv);
0199fce9
JD
8539 SvREFCNT(rv) = 0;
8540 sv_clear(rv);
8541 SvFLAGS(rv) = 0;
8542 SvREFCNT(rv) = refcnt;
0199fce9 8543
4df7f6af 8544 sv_upgrade(rv, SVt_IV);
dc5494d2
NC
8545 } else if (SvROK(rv)) {
8546 SvREFCNT_dec(SvRV(rv));
43230e26
NC
8547 } else {
8548 prepare_SV_for_RV(rv);
0199fce9 8549 }
51cf62d8 8550
0c34ef67 8551 SvOK_off(rv);
b162af07 8552 SvRV_set(rv, sv);
ed6116ce 8553 SvROK_on(rv);
463ee0b2 8554
a0d0e21e 8555 if (classname) {
da51bb9b 8556 HV* const stash = gv_stashpv(classname, GV_ADD);
a0d0e21e
LW
8557 (void)sv_bless(rv, stash);
8558 }
8559 return sv;
8560}
8561
954c1994
GS
8562/*
8563=for apidoc sv_setref_pv
8564
8565Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
8566argument will be upgraded to an RV. That RV will be modified to point to
8567the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8568into the SV. The C<classname> argument indicates the package for the
bd61b366 8569blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8570will have a reference count of 1, and the RV will be returned.
954c1994
GS
8571
8572Do not use with other Perl types such as HV, AV, SV, CV, because those
8573objects will become corrupted by the pointer copy process.
8574
8575Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8576
8577=cut
8578*/
8579
a0d0e21e 8580SV*
12964ddd 8581Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
a0d0e21e 8582{
97aff369 8583 dVAR;
7918f24d
NC
8584
8585 PERL_ARGS_ASSERT_SV_SETREF_PV;
8586
189b2af5 8587 if (!pv) {
3280af22 8588 sv_setsv(rv, &PL_sv_undef);
189b2af5
GS
8589 SvSETMAGIC(rv);
8590 }
a0d0e21e 8591 else
56431972 8592 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
a0d0e21e
LW
8593 return rv;
8594}
8595
954c1994
GS
8596/*
8597=for apidoc sv_setref_iv
8598
8599Copies an integer into a new SV, optionally blessing the SV. The C<rv>
8600argument will be upgraded to an RV. That RV will be modified to point to
8601the new SV. The C<classname> argument indicates the package for the
bd61b366 8602blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8603will have a reference count of 1, and the RV will be returned.
954c1994
GS
8604
8605=cut
8606*/
8607
a0d0e21e 8608SV*
12964ddd 8609Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
a0d0e21e 8610{
7918f24d
NC
8611 PERL_ARGS_ASSERT_SV_SETREF_IV;
8612
a0d0e21e
LW
8613 sv_setiv(newSVrv(rv,classname), iv);
8614 return rv;
8615}
8616
954c1994 8617/*
e1c57cef
JH
8618=for apidoc sv_setref_uv
8619
8620Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
8621argument will be upgraded to an RV. That RV will be modified to point to
8622the new SV. The C<classname> argument indicates the package for the
bd61b366 8623blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8624will have a reference count of 1, and the RV will be returned.
e1c57cef
JH
8625
8626=cut
8627*/
8628
8629SV*
12964ddd 8630Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
e1c57cef 8631{
7918f24d
NC
8632 PERL_ARGS_ASSERT_SV_SETREF_UV;
8633
e1c57cef
JH
8634 sv_setuv(newSVrv(rv,classname), uv);
8635 return rv;
8636}
8637
8638/*
954c1994
GS
8639=for apidoc sv_setref_nv
8640
8641Copies a double into a new SV, optionally blessing the SV. The C<rv>
8642argument will be upgraded to an RV. That RV will be modified to point to
8643the new SV. The C<classname> argument indicates the package for the
bd61b366 8644blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8645will have a reference count of 1, and the RV will be returned.
954c1994
GS
8646
8647=cut
8648*/
8649
a0d0e21e 8650SV*
12964ddd 8651Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
a0d0e21e 8652{
7918f24d
NC
8653 PERL_ARGS_ASSERT_SV_SETREF_NV;
8654
a0d0e21e
LW
8655 sv_setnv(newSVrv(rv,classname), nv);
8656 return rv;
8657}
463ee0b2 8658
954c1994
GS
8659/*
8660=for apidoc sv_setref_pvn
8661
8662Copies a string into a new SV, optionally blessing the SV. The length of the
8663string must be specified with C<n>. The C<rv> argument will be upgraded to
8664an RV. That RV will be modified to point to the new SV. The C<classname>
8665argument indicates the package for the blessing. Set C<classname> to
bd61b366 8666C<NULL> to avoid the blessing. The new SV will have a reference count
d34c2299 8667of 1, and the RV will be returned.
954c1994
GS
8668
8669Note that C<sv_setref_pv> copies the pointer while this copies the string.
8670
8671=cut
8672*/
8673
a0d0e21e 8674SV*
12964ddd
SS
8675Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
8676 const char *const pv, const STRLEN n)
a0d0e21e 8677{
7918f24d
NC
8678 PERL_ARGS_ASSERT_SV_SETREF_PVN;
8679
a0d0e21e 8680 sv_setpvn(newSVrv(rv,classname), pv, n);
463ee0b2
LW
8681 return rv;
8682}
8683
954c1994
GS
8684/*
8685=for apidoc sv_bless
8686
8687Blesses an SV into a specified package. The SV must be an RV. The package
8688must be designated by its stash (see C<gv_stashpv()>). The reference count
8689of the SV is unaffected.
8690
8691=cut
8692*/
8693
a0d0e21e 8694SV*
12964ddd 8695Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
a0d0e21e 8696{
97aff369 8697 dVAR;
76e3520e 8698 SV *tmpRef;
7918f24d
NC
8699
8700 PERL_ARGS_ASSERT_SV_BLESS;
8701
a0d0e21e 8702 if (!SvROK(sv))
cea2e8a9 8703 Perl_croak(aTHX_ "Can't bless non-reference value");
76e3520e
GS
8704 tmpRef = SvRV(sv);
8705 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
e0744413
NC
8706 if (SvIsCOW(tmpRef))
8707 sv_force_normal_flags(tmpRef, 0);
76e3520e 8708 if (SvREADONLY(tmpRef))
f1f66076 8709 Perl_croak(aTHX_ "%s", PL_no_modify);
76e3520e
GS
8710 if (SvOBJECT(tmpRef)) {
8711 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 8712 --PL_sv_objcount;
76e3520e 8713 SvREFCNT_dec(SvSTASH(tmpRef));
2e3febc6 8714 }
a0d0e21e 8715 }
76e3520e
GS
8716 SvOBJECT_on(tmpRef);
8717 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 8718 ++PL_sv_objcount;
862a34c6 8719 SvUPGRADE(tmpRef, SVt_PVMG);
85fbaab2 8720 SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
a0d0e21e 8721
2e3febc6
CS
8722 if (Gv_AMG(stash))
8723 SvAMAGIC_on(sv);
8724 else
52944de8 8725 (void)SvAMAGIC_off(sv);
a0d0e21e 8726
1edbfb88
AB
8727 if(SvSMAGICAL(tmpRef))
8728 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8729 mg_set(tmpRef);
8730
8731
ecdeb87c 8732
a0d0e21e
LW
8733 return sv;
8734}
8735
645c22ef 8736/* Downgrades a PVGV to a PVMG.
645c22ef
DM
8737 */
8738
76e3520e 8739STATIC void
89e38212 8740S_sv_unglob(pTHX_ SV *const sv)
a0d0e21e 8741{
97aff369 8742 dVAR;
850fabdf 8743 void *xpvmg;
dd69841b 8744 HV *stash;
b37c2d43 8745 SV * const temp = sv_newmortal();
850fabdf 8746
7918f24d
NC
8747 PERL_ARGS_ASSERT_SV_UNGLOB;
8748
a0d0e21e
LW
8749 assert(SvTYPE(sv) == SVt_PVGV);
8750 SvFAKE_off(sv);
159b6efe 8751 gv_efullname3(temp, MUTABLE_GV(sv), "*");
180488f8 8752
f7877b28 8753 if (GvGP(sv)) {
159b6efe
NC
8754 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
8755 && HvNAME_get(stash))
dd69841b 8756 mro_method_changed_in(stash);
159b6efe 8757 gp_free(MUTABLE_GV(sv));
f7877b28 8758 }
e826b3c7 8759 if (GvSTASH(sv)) {
daba3364 8760 sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
5c284bb0 8761 GvSTASH(sv) = NULL;
e826b3c7 8762 }
a5f75d66 8763 GvMULTI_off(sv);
acda4c6a
NC
8764 if (GvNAME_HEK(sv)) {
8765 unshare_hek(GvNAME_HEK(sv));
8766 }
2e5b91de 8767 isGV_with_GP_off(sv);
850fabdf
GS
8768
8769 /* need to keep SvANY(sv) in the right arena */
8770 xpvmg = new_XPVMG();
8771 StructCopy(SvANY(sv), xpvmg, XPVMG);
8772 del_XPVGV(SvANY(sv));
8773 SvANY(sv) = xpvmg;
8774
a0d0e21e
LW
8775 SvFLAGS(sv) &= ~SVTYPEMASK;
8776 SvFLAGS(sv) |= SVt_PVMG;
180488f8
NC
8777
8778 /* Intentionally not calling any local SET magic, as this isn't so much a
8779 set operation as merely an internal storage change. */
8780 sv_setsv_flags(sv, temp, 0);
a0d0e21e
LW
8781}
8782
954c1994 8783/*
840a7b70 8784=for apidoc sv_unref_flags
954c1994
GS
8785
8786Unsets the RV status of the SV, and decrements the reference count of
8787whatever was being referenced by the RV. This can almost be thought of
840a7b70
IZ
8788as a reversal of C<newSVrv>. The C<cflags> argument can contain
8789C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8790(otherwise the decrementing is conditional on the reference count being
8791different from one or the reference being a readonly SV).
7889fe52 8792See C<SvROK_off>.
954c1994
GS
8793
8794=cut
8795*/
8796
ed6116ce 8797void
89e38212 8798Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
ed6116ce 8799{
b64e5050 8800 SV* const target = SvRV(ref);
810b8aa5 8801
7918f24d
NC
8802 PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
8803
e15faf7d
NC
8804 if (SvWEAKREF(ref)) {
8805 sv_del_backref(target, ref);
8806 SvWEAKREF_off(ref);
8807 SvRV_set(ref, NULL);
810b8aa5
GS
8808 return;
8809 }
e15faf7d
NC
8810 SvRV_set(ref, NULL);
8811 SvROK_off(ref);
8812 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
04ca4930 8813 assigned to as BEGIN {$a = \"Foo"} will fail. */
e15faf7d
NC
8814 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8815 SvREFCNT_dec(target);
840a7b70 8816 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
e15faf7d 8817 sv_2mortal(target); /* Schedule for freeing later */
ed6116ce 8818}
8990e307 8819
840a7b70 8820/*
645c22ef
DM
8821=for apidoc sv_untaint
8822
8823Untaint an SV. Use C<SvTAINTED_off> instead.
8824=cut
8825*/
8826
bbce6d69 8827void
89e38212 8828Perl_sv_untaint(pTHX_ SV *const sv)
bbce6d69 8829{
7918f24d
NC
8830 PERL_ARGS_ASSERT_SV_UNTAINT;
8831
13f57bf8 8832 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
b64e5050 8833 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
36477c24 8834 if (mg)
565764a8 8835 mg->mg_len &= ~1;
36477c24 8836 }
bbce6d69 8837}
8838
645c22ef
DM
8839/*
8840=for apidoc sv_tainted
8841
8842Test an SV for taintedness. Use C<SvTAINTED> instead.
8843=cut
8844*/
8845
bbce6d69 8846bool
89e38212 8847Perl_sv_tainted(pTHX_ SV *const sv)
bbce6d69 8848{
7918f24d
NC
8849 PERL_ARGS_ASSERT_SV_TAINTED;
8850
13f57bf8 8851 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
823a54a3 8852 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
2ddb8a4f 8853 if (mg && (mg->mg_len & 1) )
36477c24 8854 return TRUE;
8855 }
8856 return FALSE;
bbce6d69 8857}
8858
09540bc3
JH
8859/*
8860=for apidoc sv_setpviv
8861
8862Copies an integer into the given SV, also updating its string value.
8863Does not handle 'set' magic. See C<sv_setpviv_mg>.
8864
8865=cut
8866*/
8867
8868void
89e38212 8869Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
09540bc3
JH
8870{
8871 char buf[TYPE_CHARS(UV)];
8872 char *ebuf;
b64e5050 8873 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
09540bc3 8874
7918f24d
NC
8875 PERL_ARGS_ASSERT_SV_SETPVIV;
8876
09540bc3
JH
8877 sv_setpvn(sv, ptr, ebuf - ptr);
8878}
8879
8880/*
8881=for apidoc sv_setpviv_mg
8882
8883Like C<sv_setpviv>, but also handles 'set' magic.
8884
8885=cut
8886*/
8887
8888void
89e38212 8889Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
09540bc3 8890{
7918f24d
NC
8891 PERL_ARGS_ASSERT_SV_SETPVIV_MG;
8892
df7eb254 8893 sv_setpviv(sv, iv);
09540bc3
JH
8894 SvSETMAGIC(sv);
8895}
8896
cea2e8a9 8897#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
8898
8899/* pTHX_ magic can't cope with varargs, so this is a no-context
8900 * version of the main function, (which may itself be aliased to us).
8901 * Don't access this version directly.
8902 */
8903
cea2e8a9 8904void
89e38212 8905Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
8906{
8907 dTHX;
8908 va_list args;
7918f24d
NC
8909
8910 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
8911
cea2e8a9 8912 va_start(args, pat);
c5be433b 8913 sv_vsetpvf(sv, pat, &args);
cea2e8a9
GS
8914 va_end(args);
8915}
8916
645c22ef
DM
8917/* pTHX_ magic can't cope with varargs, so this is a no-context
8918 * version of the main function, (which may itself be aliased to us).
8919 * Don't access this version directly.
8920 */
cea2e8a9
GS
8921
8922void
89e38212 8923Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
8924{
8925 dTHX;
8926 va_list args;
7918f24d
NC
8927
8928 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
8929
cea2e8a9 8930 va_start(args, pat);
c5be433b 8931 sv_vsetpvf_mg(sv, pat, &args);
cea2e8a9 8932 va_end(args);
cea2e8a9
GS
8933}
8934#endif
8935
954c1994
GS
8936/*
8937=for apidoc sv_setpvf
8938
bffc3d17
SH
8939Works like C<sv_catpvf> but copies the text into the SV instead of
8940appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
954c1994
GS
8941
8942=cut
8943*/
8944
46fc3d4c 8945void
89e38212 8946Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 8947{
8948 va_list args;
7918f24d
NC
8949
8950 PERL_ARGS_ASSERT_SV_SETPVF;
8951
46fc3d4c 8952 va_start(args, pat);
c5be433b 8953 sv_vsetpvf(sv, pat, &args);
46fc3d4c 8954 va_end(args);
8955}
8956
bffc3d17
SH
8957/*
8958=for apidoc sv_vsetpvf
8959
8960Works like C<sv_vcatpvf> but copies the text into the SV instead of
8961appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8962
8963Usually used via its frontend C<sv_setpvf>.
8964
8965=cut
8966*/
645c22ef 8967
c5be433b 8968void
89e38212 8969Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 8970{
7918f24d
NC
8971 PERL_ARGS_ASSERT_SV_VSETPVF;
8972
4608196e 8973 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b 8974}
ef50df4b 8975
954c1994
GS
8976/*
8977=for apidoc sv_setpvf_mg
8978
8979Like C<sv_setpvf>, but also handles 'set' magic.
8980
8981=cut
8982*/
8983
ef50df4b 8984void
89e38212 8985Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
8986{
8987 va_list args;
7918f24d
NC
8988
8989 PERL_ARGS_ASSERT_SV_SETPVF_MG;
8990
ef50df4b 8991 va_start(args, pat);
c5be433b 8992 sv_vsetpvf_mg(sv, pat, &args);
ef50df4b 8993 va_end(args);
c5be433b
GS
8994}
8995
bffc3d17
SH
8996/*
8997=for apidoc sv_vsetpvf_mg
8998
8999Like C<sv_vsetpvf>, but also handles 'set' magic.
9000
9001Usually used via its frontend C<sv_setpvf_mg>.
9002
9003=cut
9004*/
645c22ef 9005
c5be433b 9006void
89e38212 9007Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9008{
7918f24d
NC
9009 PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9010
4608196e 9011 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9012 SvSETMAGIC(sv);
9013}
9014
cea2e8a9 9015#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
9016
9017/* pTHX_ magic can't cope with varargs, so this is a no-context
9018 * version of the main function, (which may itself be aliased to us).
9019 * Don't access this version directly.
9020 */
9021
cea2e8a9 9022void
89e38212 9023Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9024{
9025 dTHX;
9026 va_list args;
7918f24d
NC
9027
9028 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9029
cea2e8a9 9030 va_start(args, pat);
c5be433b 9031 sv_vcatpvf(sv, pat, &args);
cea2e8a9
GS
9032 va_end(args);
9033}
9034
645c22ef
DM
9035/* pTHX_ magic can't cope with varargs, so this is a no-context
9036 * version of the main function, (which may itself be aliased to us).
9037 * Don't access this version directly.
9038 */
9039
cea2e8a9 9040void
89e38212 9041Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9042{
9043 dTHX;
9044 va_list args;
7918f24d
NC
9045
9046 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9047
cea2e8a9 9048 va_start(args, pat);
c5be433b 9049 sv_vcatpvf_mg(sv, pat, &args);
cea2e8a9 9050 va_end(args);
cea2e8a9
GS
9051}
9052#endif
9053
954c1994
GS
9054/*
9055=for apidoc sv_catpvf
9056
d5ce4a7c
GA
9057Processes its arguments like C<sprintf> and appends the formatted
9058output to an SV. If the appended data contains "wide" characters
9059(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9060and characters >255 formatted with %c), the original SV might get
bffc3d17 9061upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
cdd94ca7
NC
9062C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9063valid UTF-8; if the original SV was bytes, the pattern should be too.
954c1994 9064
d5ce4a7c 9065=cut */
954c1994 9066
46fc3d4c 9067void
66ceb532 9068Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 9069{
9070 va_list args;
7918f24d
NC
9071
9072 PERL_ARGS_ASSERT_SV_CATPVF;
9073
46fc3d4c 9074 va_start(args, pat);
c5be433b 9075 sv_vcatpvf(sv, pat, &args);
46fc3d4c 9076 va_end(args);
9077}
9078
bffc3d17
SH
9079/*
9080=for apidoc sv_vcatpvf
9081
9082Processes its arguments like C<vsprintf> and appends the formatted output
9083to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
9084
9085Usually used via its frontend C<sv_catpvf>.
9086
9087=cut
9088*/
645c22ef 9089
ef50df4b 9090void
66ceb532 9091Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9092{
7918f24d
NC
9093 PERL_ARGS_ASSERT_SV_VCATPVF;
9094
4608196e 9095 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
9096}
9097
954c1994
GS
9098/*
9099=for apidoc sv_catpvf_mg
9100
9101Like C<sv_catpvf>, but also handles 'set' magic.
9102
9103=cut
9104*/
9105
c5be433b 9106void
66ceb532 9107Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
9108{
9109 va_list args;
7918f24d
NC
9110
9111 PERL_ARGS_ASSERT_SV_CATPVF_MG;
9112
ef50df4b 9113 va_start(args, pat);
c5be433b 9114 sv_vcatpvf_mg(sv, pat, &args);
ef50df4b 9115 va_end(args);
c5be433b
GS
9116}
9117
bffc3d17
SH
9118/*
9119=for apidoc sv_vcatpvf_mg
9120
9121Like C<sv_vcatpvf>, but also handles 'set' magic.
9122
9123Usually used via its frontend C<sv_catpvf_mg>.
9124
9125=cut
9126*/
645c22ef 9127
c5be433b 9128void
66ceb532 9129Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9130{
7918f24d
NC
9131 PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9132
4608196e 9133 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9134 SvSETMAGIC(sv);
9135}
9136
954c1994
GS
9137/*
9138=for apidoc sv_vsetpvfn
9139
bffc3d17 9140Works like C<sv_vcatpvfn> but copies the text into the SV instead of
954c1994
GS
9141appending it.
9142
bffc3d17 9143Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
645c22ef 9144
954c1994
GS
9145=cut
9146*/
9147
46fc3d4c 9148void
66ceb532
SS
9149Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9150 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9151{
7918f24d
NC
9152 PERL_ARGS_ASSERT_SV_VSETPVFN;
9153
76f68e9b 9154 sv_setpvs(sv, "");
7d5ea4e7 9155 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
46fc3d4c 9156}
9157
2d00ba3b 9158STATIC I32
66ceb532 9159S_expect_number(pTHX_ char **const pattern)
211dfcf1 9160{
97aff369 9161 dVAR;
211dfcf1 9162 I32 var = 0;
7918f24d
NC
9163
9164 PERL_ARGS_ASSERT_EXPECT_NUMBER;
9165
211dfcf1
HS
9166 switch (**pattern) {
9167 case '1': case '2': case '3':
9168 case '4': case '5': case '6':
9169 case '7': case '8': case '9':
2fba7546
GA
9170 var = *(*pattern)++ - '0';
9171 while (isDIGIT(**pattern)) {
5f66b61c 9172 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
2fba7546
GA
9173 if (tmp < var)
9174 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_NAME(PL_op) : "sv_vcatpvfn"));
9175 var = tmp;
9176 }
211dfcf1
HS
9177 }
9178 return var;
9179}
211dfcf1 9180
c445ea15 9181STATIC char *
66ceb532 9182S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
4151a5fe 9183{
a3b680e6 9184 const int neg = nv < 0;
4151a5fe 9185 UV uv;
4151a5fe 9186
7918f24d
NC
9187 PERL_ARGS_ASSERT_F0CONVERT;
9188
4151a5fe
IZ
9189 if (neg)
9190 nv = -nv;
9191 if (nv < UV_MAX) {
b464bac0 9192 char *p = endbuf;
4151a5fe 9193 nv += 0.5;
028f8eaa 9194 uv = (UV)nv;
4151a5fe
IZ
9195 if (uv & 1 && uv == nv)
9196 uv--; /* Round to even */
9197 do {
a3b680e6 9198 const unsigned dig = uv % 10;
4151a5fe
IZ
9199 *--p = '0' + dig;
9200 } while (uv /= 10);
9201 if (neg)
9202 *--p = '-';
9203 *len = endbuf - p;
9204 return p;
9205 }
bd61b366 9206 return NULL;
4151a5fe
IZ
9207}
9208
9209
954c1994
GS
9210/*
9211=for apidoc sv_vcatpvfn
9212
9213Processes its arguments like C<vsprintf> and appends the formatted output
9214to an SV. Uses an array of SVs if the C style variable argument list is
9215missing (NULL). When running with taint checks enabled, indicates via
9216C<maybe_tainted> if results are untrustworthy (often due to the use of
9217locales).
9218
bffc3d17 9219Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
645c22ef 9220
954c1994
GS
9221=cut
9222*/
9223
8896765a
RB
9224
9225#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
9226 vecstr = (U8*)SvPV_const(vecsv,veclen);\
9227 vec_utf8 = DO_UTF8(vecsv);
9228
1ef29b0e
RGS
9229/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9230
46fc3d4c 9231void
66ceb532
SS
9232Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9233 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9234{
97aff369 9235 dVAR;
46fc3d4c 9236 char *p;
9237 char *q;
a3b680e6 9238 const char *patend;
fc36a67e 9239 STRLEN origlen;
46fc3d4c 9240 I32 svix = 0;
27da23d5 9241 static const char nullstr[] = "(null)";
a0714e2c 9242 SV *argsv = NULL;
b464bac0
AL
9243 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
9244 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
a0714e2c 9245 SV *nsv = NULL;
4151a5fe
IZ
9246 /* Times 4: a decimal digit takes more than 3 binary digits.
9247 * NV_DIG: mantissa takes than many decimal digits.
9248 * Plus 32: Playing safe. */
9249 char ebuf[IV_DIG * 4 + NV_DIG + 32];
9250 /* large enough for "%#.#f" --chip */
9251 /* what about long double NVs? --jhi */
db79b45b 9252
7918f24d 9253 PERL_ARGS_ASSERT_SV_VCATPVFN;
53c1dcc0
AL
9254 PERL_UNUSED_ARG(maybe_tainted);
9255
46fc3d4c 9256 /* no matter what, this is a string now */
fc36a67e 9257 (void)SvPV_force(sv, origlen);
46fc3d4c 9258
8896765a 9259 /* special-case "", "%s", and "%-p" (SVf - see below) */
46fc3d4c 9260 if (patlen == 0)
9261 return;
0dbb1585 9262 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
2d03de9c
AL
9263 if (args) {
9264 const char * const s = va_arg(*args, char*);
9265 sv_catpv(sv, s ? s : nullstr);
9266 }
9267 else if (svix < svmax) {
9268 sv_catsv(sv, *svargs);
2d03de9c
AL
9269 }
9270 return;
0dbb1585 9271 }
8896765a
RB
9272 if (args && patlen == 3 && pat[0] == '%' &&
9273 pat[1] == '-' && pat[2] == 'p') {
daba3364 9274 argsv = MUTABLE_SV(va_arg(*args, void*));
8896765a 9275 sv_catsv(sv, argsv);
8896765a 9276 return;
46fc3d4c 9277 }
9278
1d917b39 9279#ifndef USE_LONG_DOUBLE
4151a5fe 9280 /* special-case "%.<number>[gf]" */
7af36d83 9281 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
4151a5fe
IZ
9282 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9283 unsigned digits = 0;
9284 const char *pp;
9285
9286 pp = pat + 2;
9287 while (*pp >= '0' && *pp <= '9')
9288 digits = 10 * digits + (*pp++ - '0');
028f8eaa 9289 if (pp - pat == (int)patlen - 1) {
4151a5fe
IZ
9290 NV nv;
9291
7af36d83 9292 if (svix < svmax)
4151a5fe
IZ
9293 nv = SvNV(*svargs);
9294 else
9295 return;
9296 if (*pp == 'g') {
2873255c
NC
9297 /* Add check for digits != 0 because it seems that some
9298 gconverts are buggy in this case, and we don't yet have
9299 a Configure test for this. */
9300 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9301 /* 0, point, slack */
2e59c212 9302 Gconvert(nv, (int)digits, 0, ebuf);
4151a5fe
IZ
9303 sv_catpv(sv, ebuf);
9304 if (*ebuf) /* May return an empty string for digits==0 */
9305 return;
9306 }
9307 } else if (!digits) {
9308 STRLEN l;
9309
9310 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9311 sv_catpvn(sv, p, l);
9312 return;
9313 }
9314 }
9315 }
9316 }
1d917b39 9317#endif /* !USE_LONG_DOUBLE */
4151a5fe 9318
2cf2cfc6 9319 if (!args && svix < svmax && DO_UTF8(*svargs))
205f51d8 9320 has_utf8 = TRUE;
2cf2cfc6 9321
46fc3d4c 9322 patend = (char*)pat + patlen;
9323 for (p = (char*)pat; p < patend; p = q) {
9324 bool alt = FALSE;
9325 bool left = FALSE;
b22c7a20 9326 bool vectorize = FALSE;
211dfcf1 9327 bool vectorarg = FALSE;
2cf2cfc6 9328 bool vec_utf8 = FALSE;
46fc3d4c 9329 char fill = ' ';
9330 char plus = 0;
9331 char intsize = 0;
9332 STRLEN width = 0;
fc36a67e 9333 STRLEN zeros = 0;
46fc3d4c 9334 bool has_precis = FALSE;
9335 STRLEN precis = 0;
c445ea15 9336 const I32 osvix = svix;
2cf2cfc6 9337 bool is_utf8 = FALSE; /* is this item utf8? */
20f6aaab
AS
9338#ifdef HAS_LDBL_SPRINTF_BUG
9339 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8 9340 with sfio - Allen <allens@cpan.org> */
20f6aaab
AS
9341 bool fix_ldbl_sprintf_bug = FALSE;
9342#endif
205f51d8 9343
46fc3d4c 9344 char esignbuf[4];
89ebb4a3 9345 U8 utf8buf[UTF8_MAXBYTES+1];
46fc3d4c 9346 STRLEN esignlen = 0;
9347
bd61b366 9348 const char *eptr = NULL;
1d1ac7bc 9349 const char *fmtstart;
fc36a67e 9350 STRLEN elen = 0;
a0714e2c 9351 SV *vecsv = NULL;
4608196e 9352 const U8 *vecstr = NULL;
b22c7a20 9353 STRLEN veclen = 0;
934abaf1 9354 char c = 0;
46fc3d4c 9355 int i;
9c5ffd7c 9356 unsigned base = 0;
8c8eb53c
RB
9357 IV iv = 0;
9358 UV uv = 0;
9e5b023a
JH
9359 /* we need a long double target in case HAS_LONG_DOUBLE but
9360 not USE_LONG_DOUBLE
9361 */
35fff930 9362#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9e5b023a
JH
9363 long double nv;
9364#else
65202027 9365 NV nv;
9e5b023a 9366#endif
46fc3d4c 9367 STRLEN have;
9368 STRLEN need;
9369 STRLEN gap;
7af36d83 9370 const char *dotstr = ".";
b22c7a20 9371 STRLEN dotstrlen = 1;
211dfcf1 9372 I32 efix = 0; /* explicit format parameter index */
eb3fce90 9373 I32 ewix = 0; /* explicit width index */
211dfcf1
HS
9374 I32 epix = 0; /* explicit precision index */
9375 I32 evix = 0; /* explicit vector index */
eb3fce90 9376 bool asterisk = FALSE;
46fc3d4c 9377
211dfcf1 9378 /* echo everything up to the next format specification */
46fc3d4c 9379 for (q = p; q < patend && *q != '%'; ++q) ;
9380 if (q > p) {
db79b45b
JH
9381 if (has_utf8 && !pat_utf8)
9382 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9383 else
9384 sv_catpvn(sv, p, q - p);
46fc3d4c 9385 p = q;
9386 }
9387 if (q++ >= patend)
9388 break;
9389
1d1ac7bc
MHM
9390 fmtstart = q;
9391
211dfcf1
HS
9392/*
9393 We allow format specification elements in this order:
9394 \d+\$ explicit format parameter index
9395 [-+ 0#]+ flags
a472f209 9396 v|\*(\d+\$)?v vector with optional (optionally specified) arg
f3583277 9397 0 flag (as above): repeated to allow "v02"
211dfcf1
HS
9398 \d+|\*(\d+\$)? width using optional (optionally specified) arg
9399 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9400 [hlqLV] size
8896765a
RB
9401 [%bcdefginopsuxDFOUX] format (mandatory)
9402*/
9403
9404 if (args) {
9405/*
9406 As of perl5.9.3, printf format checking is on by default.
9407 Internally, perl uses %p formats to provide an escape to
9408 some extended formatting. This block deals with those
9409 extensions: if it does not match, (char*)q is reset and
9410 the normal format processing code is used.
9411
9412 Currently defined extensions are:
9413 %p include pointer address (standard)
9414 %-p (SVf) include an SV (previously %_)
9415 %-<num>p include an SV with precision <num>
8896765a
RB
9416 %<num>p reserved for future extensions
9417
9418 Robin Barker 2005-07-14
f46d31f2
RB
9419
9420 %1p (VDf) removed. RMB 2007-10-19
211dfcf1 9421*/
8896765a
RB
9422 char* r = q;
9423 bool sv = FALSE;
9424 STRLEN n = 0;
9425 if (*q == '-')
9426 sv = *q++;
c445ea15 9427 n = expect_number(&q);
8896765a
RB
9428 if (*q++ == 'p') {
9429 if (sv) { /* SVf */
9430 if (n) {
9431 precis = n;
9432 has_precis = TRUE;
9433 }
daba3364 9434 argsv = MUTABLE_SV(va_arg(*args, void*));
4ea561bc 9435 eptr = SvPV_const(argsv, elen);
8896765a
RB
9436 if (DO_UTF8(argsv))
9437 is_utf8 = TRUE;
9438 goto string;
9439 }
8896765a
RB
9440 else if (n) {
9441 if (ckWARN_d(WARN_INTERNAL))
9442 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9443 "internal %%<num>p might conflict with future printf extensions");
9444 }
9445 }
9446 q = r;
9447 }
9448
c445ea15 9449 if ( (width = expect_number(&q)) ) {
211dfcf1
HS
9450 if (*q == '$') {
9451 ++q;
9452 efix = width;
9453 } else {
9454 goto gotwidth;
9455 }
9456 }
9457
fc36a67e 9458 /* FLAGS */
9459
46fc3d4c 9460 while (*q) {
9461 switch (*q) {
9462 case ' ':
9463 case '+':
9911cee9
TS
9464 if (plus == '+' && *q == ' ') /* '+' over ' ' */
9465 q++;
9466 else
9467 plus = *q++;
46fc3d4c 9468 continue;
9469
9470 case '-':
9471 left = TRUE;
9472 q++;
9473 continue;
9474
9475 case '0':
9476 fill = *q++;
9477 continue;
9478
9479 case '#':
9480 alt = TRUE;
9481 q++;
9482 continue;
9483
fc36a67e 9484 default:
9485 break;
9486 }
9487 break;
9488 }
46fc3d4c 9489
211dfcf1 9490 tryasterisk:
eb3fce90 9491 if (*q == '*') {
211dfcf1 9492 q++;
c445ea15 9493 if ( (ewix = expect_number(&q)) )
211dfcf1
HS
9494 if (*q++ != '$')
9495 goto unknown;
eb3fce90 9496 asterisk = TRUE;
211dfcf1
HS
9497 }
9498 if (*q == 'v') {
eb3fce90 9499 q++;
211dfcf1
HS
9500 if (vectorize)
9501 goto unknown;
9cbac4c7 9502 if ((vectorarg = asterisk)) {
211dfcf1
HS
9503 evix = ewix;
9504 ewix = 0;
9505 asterisk = FALSE;
9506 }
9507 vectorize = TRUE;
9508 goto tryasterisk;
eb3fce90
JH
9509 }
9510
211dfcf1 9511 if (!asterisk)
858a90f9 9512 {
7a5fa8a2 9513 if( *q == '0' )
f3583277 9514 fill = *q++;
c445ea15 9515 width = expect_number(&q);
858a90f9 9516 }
211dfcf1
HS
9517
9518 if (vectorize) {
9519 if (vectorarg) {
9520 if (args)
9521 vecsv = va_arg(*args, SV*);
7ad96abb
NC
9522 else if (evix) {
9523 vecsv = (evix > 0 && evix <= svmax)
9524 ? svargs[evix-1] : &PL_sv_undef;
9525 } else {
9526 vecsv = svix < svmax ? svargs[svix++] : &PL_sv_undef;
9527 }
245d4a47 9528 dotstr = SvPV_const(vecsv, dotstrlen);
640283f5
NC
9529 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
9530 bad with tied or overloaded values that return UTF8. */
211dfcf1 9531 if (DO_UTF8(vecsv))
2cf2cfc6 9532 is_utf8 = TRUE;
640283f5
NC
9533 else if (has_utf8) {
9534 vecsv = sv_mortalcopy(vecsv);
9535 sv_utf8_upgrade(vecsv);
9536 dotstr = SvPV_const(vecsv, dotstrlen);
9537 is_utf8 = TRUE;
9538 }
211dfcf1
HS
9539 }
9540 if (args) {
8896765a 9541 VECTORIZE_ARGS
eb3fce90 9542 }
7ad96abb 9543 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
211dfcf1 9544 vecsv = svargs[efix ? efix-1 : svix++];
245d4a47 9545 vecstr = (U8*)SvPV_const(vecsv,veclen);
2cf2cfc6 9546 vec_utf8 = DO_UTF8(vecsv);
96b8f7ce
JP
9547
9548 /* if this is a version object, we need to convert
9549 * back into v-string notation and then let the
9550 * vectorize happen normally
d7aa5382 9551 */
96b8f7ce
JP
9552 if (sv_derived_from(vecsv, "version")) {
9553 char *version = savesvpv(vecsv);
85fbaab2 9554 if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
34ba6322
SP
9555 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9556 "vector argument not supported with alpha versions");
9557 goto unknown;
9558 }
96b8f7ce 9559 vecsv = sv_newmortal();
65b06e02 9560 scan_vstring(version, version + veclen, vecsv);
96b8f7ce
JP
9561 vecstr = (U8*)SvPV_const(vecsv, veclen);
9562 vec_utf8 = DO_UTF8(vecsv);
9563 Safefree(version);
d7aa5382 9564 }
211dfcf1
HS
9565 }
9566 else {
9567 vecstr = (U8*)"";
9568 veclen = 0;
9569 }
eb3fce90 9570 }
fc36a67e 9571
eb3fce90 9572 if (asterisk) {
fc36a67e 9573 if (args)
9574 i = va_arg(*args, int);
9575 else
eb3fce90
JH
9576 i = (ewix ? ewix <= svmax : svix < svmax) ?
9577 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
fc36a67e 9578 left |= (i < 0);
9579 width = (i < 0) ? -i : i;
fc36a67e 9580 }
211dfcf1 9581 gotwidth:
fc36a67e 9582
9583 /* PRECISION */
46fc3d4c 9584
fc36a67e 9585 if (*q == '.') {
9586 q++;
9587 if (*q == '*') {
211dfcf1 9588 q++;
c445ea15 9589 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
7b8dd722
HS
9590 goto unknown;
9591 /* XXX: todo, support specified precision parameter */
9592 if (epix)
211dfcf1 9593 goto unknown;
46fc3d4c 9594 if (args)
9595 i = va_arg(*args, int);
9596 else
eb3fce90
JH
9597 i = (ewix ? ewix <= svmax : svix < svmax)
9598 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9911cee9
TS
9599 precis = i;
9600 has_precis = !(i < 0);
fc36a67e 9601 }
9602 else {
9603 precis = 0;
9604 while (isDIGIT(*q))
9605 precis = precis * 10 + (*q++ - '0');
9911cee9 9606 has_precis = TRUE;
fc36a67e 9607 }
fc36a67e 9608 }
46fc3d4c 9609
fc36a67e 9610 /* SIZE */
46fc3d4c 9611
fc36a67e 9612 switch (*q) {
c623ac67
GS
9613#ifdef WIN32
9614 case 'I': /* Ix, I32x, and I64x */
9615# ifdef WIN64
9616 if (q[1] == '6' && q[2] == '4') {
9617 q += 3;
9618 intsize = 'q';
9619 break;
9620 }
9621# endif
9622 if (q[1] == '3' && q[2] == '2') {
9623 q += 3;
9624 break;
9625 }
9626# ifdef WIN64
9627 intsize = 'q';
9628# endif
9629 q++;
9630 break;
9631#endif
9e5b023a 9632#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
6f9bb7fd 9633 case 'L': /* Ld */
5f66b61c 9634 /*FALLTHROUGH*/
e5c81feb 9635#ifdef HAS_QUAD
6f9bb7fd 9636 case 'q': /* qd */
9e5b023a 9637#endif
6f9bb7fd
GS
9638 intsize = 'q';
9639 q++;
9640 break;
9641#endif
fc36a67e 9642 case 'l':
9e5b023a 9643#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
205f51d8 9644 if (*(q + 1) == 'l') { /* lld, llf */
fc36a67e 9645 intsize = 'q';
9646 q += 2;
46fc3d4c 9647 break;
cf2093f6 9648 }
fc36a67e 9649#endif
5f66b61c 9650 /*FALLTHROUGH*/
fc36a67e 9651 case 'h':
5f66b61c 9652 /*FALLTHROUGH*/
fc36a67e 9653 case 'V':
9654 intsize = *q++;
46fc3d4c 9655 break;
9656 }
9657
fc36a67e 9658 /* CONVERSION */
9659
211dfcf1
HS
9660 if (*q == '%') {
9661 eptr = q++;
9662 elen = 1;
26372e71
GA
9663 if (vectorize) {
9664 c = '%';
9665 goto unknown;
9666 }
211dfcf1
HS
9667 goto string;
9668 }
9669
26372e71 9670 if (!vectorize && !args) {
86c51f8b
NC
9671 if (efix) {
9672 const I32 i = efix-1;
9673 argsv = (i >= 0 && i < svmax) ? svargs[i] : &PL_sv_undef;
9674 } else {
9675 argsv = (svix >= 0 && svix < svmax)
9676 ? svargs[svix++] : &PL_sv_undef;
9677 }
863811b2 9678 }
211dfcf1 9679
46fc3d4c 9680 switch (c = *q++) {
9681
9682 /* STRINGS */
9683
46fc3d4c 9684 case 'c':
26372e71
GA
9685 if (vectorize)
9686 goto unknown;
4ea561bc 9687 uv = (args) ? va_arg(*args, int) : SvIV(argsv);
1bd104fb
JH
9688 if ((uv > 255 ||
9689 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
0064a8a9 9690 && !IN_BYTES) {
dfe13c55 9691 eptr = (char*)utf8buf;
9041c2e3 9692 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
2cf2cfc6 9693 is_utf8 = TRUE;
7e2040f0
GS
9694 }
9695 else {
9696 c = (char)uv;
9697 eptr = &c;
9698 elen = 1;
a0ed51b3 9699 }
46fc3d4c 9700 goto string;
9701
46fc3d4c 9702 case 's':
26372e71
GA
9703 if (vectorize)
9704 goto unknown;
9705 if (args) {
fc36a67e 9706 eptr = va_arg(*args, char*);
c635e13b 9707 if (eptr)
9708 elen = strlen(eptr);
9709 else {
27da23d5 9710 eptr = (char *)nullstr;
c635e13b 9711 elen = sizeof nullstr - 1;
9712 }
46fc3d4c 9713 }
211dfcf1 9714 else {
4ea561bc 9715 eptr = SvPV_const(argsv, elen);
7e2040f0 9716 if (DO_UTF8(argsv)) {
c494f1f4 9717 STRLEN old_precis = precis;
a0ed51b3 9718 if (has_precis && precis < elen) {
c494f1f4 9719 STRLEN ulen = sv_len_utf8(argsv);
9ef5ed94 9720 I32 p = precis > ulen ? ulen : precis;
7e2040f0 9721 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
a0ed51b3
LW
9722 precis = p;
9723 }
9724 if (width) { /* fudge width (can't fudge elen) */
59b61096
AV
9725 if (has_precis && precis < elen)
9726 width += precis - old_precis;
9727 else
9728 width += elen - sv_len_utf8(argsv);
a0ed51b3 9729 }
2cf2cfc6 9730 is_utf8 = TRUE;
a0ed51b3
LW
9731 }
9732 }
fc36a67e 9733
46fc3d4c 9734 string:
9ef5ed94 9735 if (has_precis && precis < elen)
46fc3d4c 9736 elen = precis;
9737 break;
9738
9739 /* INTEGERS */
9740
fc36a67e 9741 case 'p':
be75b157 9742 if (alt || vectorize)
c2e66d9e 9743 goto unknown;
211dfcf1 9744 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
fc36a67e 9745 base = 16;
9746 goto integer;
9747
46fc3d4c 9748 case 'D':
29fe7a80 9749#ifdef IV_IS_QUAD
22f3ae8c 9750 intsize = 'q';
29fe7a80 9751#else
46fc3d4c 9752 intsize = 'l';
29fe7a80 9753#endif
5f66b61c 9754 /*FALLTHROUGH*/
46fc3d4c 9755 case 'd':
9756 case 'i':
8896765a
RB
9757#if vdNUMBER
9758 format_vd:
9759#endif
b22c7a20 9760 if (vectorize) {
ba210ebe 9761 STRLEN ulen;
211dfcf1
HS
9762 if (!veclen)
9763 continue;
2cf2cfc6
A
9764 if (vec_utf8)
9765 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9766 UTF8_ALLOW_ANYUV);
b22c7a20 9767 else {
e83d50c9 9768 uv = *vecstr;
b22c7a20
GS
9769 ulen = 1;
9770 }
9771 vecstr += ulen;
9772 veclen -= ulen;
e83d50c9
JP
9773 if (plus)
9774 esignbuf[esignlen++] = plus;
b22c7a20
GS
9775 }
9776 else if (args) {
46fc3d4c 9777 switch (intsize) {
9778 case 'h': iv = (short)va_arg(*args, int); break;
46fc3d4c 9779 case 'l': iv = va_arg(*args, long); break;
fc36a67e 9780 case 'V': iv = va_arg(*args, IV); break;
b10c0dba 9781 default: iv = va_arg(*args, int); break;
53f65a9e 9782 case 'q':
cf2093f6 9783#ifdef HAS_QUAD
53f65a9e
HS
9784 iv = va_arg(*args, Quad_t); break;
9785#else
9786 goto unknown;
cf2093f6 9787#endif
46fc3d4c 9788 }
9789 }
9790 else {
4ea561bc 9791 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
46fc3d4c 9792 switch (intsize) {
b10c0dba
MHM
9793 case 'h': iv = (short)tiv; break;
9794 case 'l': iv = (long)tiv; break;
9795 case 'V':
9796 default: iv = tiv; break;
53f65a9e 9797 case 'q':
cf2093f6 9798#ifdef HAS_QUAD
53f65a9e
HS
9799 iv = (Quad_t)tiv; break;
9800#else
9801 goto unknown;
cf2093f6 9802#endif
46fc3d4c 9803 }
9804 }
e83d50c9
JP
9805 if ( !vectorize ) /* we already set uv above */
9806 {
9807 if (iv >= 0) {
9808 uv = iv;
9809 if (plus)
9810 esignbuf[esignlen++] = plus;
9811 }
9812 else {
9813 uv = -iv;
9814 esignbuf[esignlen++] = '-';
9815 }
46fc3d4c 9816 }
9817 base = 10;
9818 goto integer;
9819
fc36a67e 9820 case 'U':
29fe7a80 9821#ifdef IV_IS_QUAD
22f3ae8c 9822 intsize = 'q';
29fe7a80 9823#else
fc36a67e 9824 intsize = 'l';
29fe7a80 9825#endif
5f66b61c 9826 /*FALLTHROUGH*/
fc36a67e 9827 case 'u':
9828 base = 10;
9829 goto uns_integer;
9830
7ff06cc7 9831 case 'B':
4f19785b
WSI
9832 case 'b':
9833 base = 2;
9834 goto uns_integer;
9835
46fc3d4c 9836 case 'O':
29fe7a80 9837#ifdef IV_IS_QUAD
22f3ae8c 9838 intsize = 'q';
29fe7a80 9839#else
46fc3d4c 9840 intsize = 'l';
29fe7a80 9841#endif
5f66b61c 9842 /*FALLTHROUGH*/
46fc3d4c 9843 case 'o':
9844 base = 8;
9845 goto uns_integer;
9846
9847 case 'X':
46fc3d4c 9848 case 'x':
9849 base = 16;
46fc3d4c 9850
9851 uns_integer:
b22c7a20 9852 if (vectorize) {
ba210ebe 9853 STRLEN ulen;
b22c7a20 9854 vector:
211dfcf1
HS
9855 if (!veclen)
9856 continue;
2cf2cfc6
A
9857 if (vec_utf8)
9858 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9859 UTF8_ALLOW_ANYUV);
b22c7a20 9860 else {
a05b299f 9861 uv = *vecstr;
b22c7a20
GS
9862 ulen = 1;
9863 }
9864 vecstr += ulen;
9865 veclen -= ulen;
9866 }
9867 else if (args) {
46fc3d4c 9868 switch (intsize) {
9869 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
46fc3d4c 9870 case 'l': uv = va_arg(*args, unsigned long); break;
fc36a67e 9871 case 'V': uv = va_arg(*args, UV); break;
b10c0dba 9872 default: uv = va_arg(*args, unsigned); break;
53f65a9e 9873 case 'q':
cf2093f6 9874#ifdef HAS_QUAD
53f65a9e
HS
9875 uv = va_arg(*args, Uquad_t); break;
9876#else
9877 goto unknown;
cf2093f6 9878#endif
46fc3d4c 9879 }
9880 }
9881 else {
4ea561bc 9882 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
46fc3d4c 9883 switch (intsize) {
b10c0dba
MHM
9884 case 'h': uv = (unsigned short)tuv; break;
9885 case 'l': uv = (unsigned long)tuv; break;
9886 case 'V':
9887 default: uv = tuv; break;
53f65a9e 9888 case 'q':
cf2093f6 9889#ifdef HAS_QUAD
53f65a9e
HS
9890 uv = (Uquad_t)tuv; break;
9891#else
9892 goto unknown;
cf2093f6 9893#endif
46fc3d4c 9894 }
9895 }
9896
9897 integer:
4d84ee25
NC
9898 {
9899 char *ptr = ebuf + sizeof ebuf;
1387f30c
DD
9900 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
9901 zeros = 0;
9902
4d84ee25
NC
9903 switch (base) {
9904 unsigned dig;
9905 case 16:
14eb61ab 9906 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
4d84ee25
NC
9907 do {
9908 dig = uv & 15;
9909 *--ptr = p[dig];
9910 } while (uv >>= 4);
1387f30c 9911 if (tempalt) {
4d84ee25
NC
9912 esignbuf[esignlen++] = '0';
9913 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9914 }
9915 break;
9916 case 8:
9917 do {
9918 dig = uv & 7;
9919 *--ptr = '0' + dig;
9920 } while (uv >>= 3);
9921 if (alt && *ptr != '0')
9922 *--ptr = '0';
9923 break;
9924 case 2:
9925 do {
9926 dig = uv & 1;
9927 *--ptr = '0' + dig;
9928 } while (uv >>= 1);
1387f30c 9929 if (tempalt) {
4d84ee25 9930 esignbuf[esignlen++] = '0';
7ff06cc7 9931 esignbuf[esignlen++] = c;
4d84ee25
NC
9932 }
9933 break;
9934 default: /* it had better be ten or less */
9935 do {
9936 dig = uv % base;
9937 *--ptr = '0' + dig;
9938 } while (uv /= base);
9939 break;
46fc3d4c 9940 }
4d84ee25
NC
9941 elen = (ebuf + sizeof ebuf) - ptr;
9942 eptr = ptr;
9943 if (has_precis) {
9944 if (precis > elen)
9945 zeros = precis - elen;
e6bb52fd
TS
9946 else if (precis == 0 && elen == 1 && *eptr == '0'
9947 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
4d84ee25 9948 elen = 0;
9911cee9
TS
9949
9950 /* a precision nullifies the 0 flag. */
9951 if (fill == '0')
9952 fill = ' ';
eda88b6d 9953 }
c10ed8b9 9954 }
46fc3d4c 9955 break;
9956
9957 /* FLOATING POINT */
9958
fc36a67e 9959 case 'F':
9960 c = 'f'; /* maybe %F isn't supported here */
5f66b61c 9961 /*FALLTHROUGH*/
46fc3d4c 9962 case 'e': case 'E':
fc36a67e 9963 case 'f':
46fc3d4c 9964 case 'g': case 'G':
26372e71
GA
9965 if (vectorize)
9966 goto unknown;
46fc3d4c 9967
9968 /* This is evil, but floating point is even more evil */
9969
9e5b023a
JH
9970 /* for SV-style calling, we can only get NV
9971 for C-style calling, we assume %f is double;
9972 for simplicity we allow any of %Lf, %llf, %qf for long double
9973 */
9974 switch (intsize) {
9975 case 'V':
9976#if defined(USE_LONG_DOUBLE)
9977 intsize = 'q';
9978#endif
9979 break;
8a2e3f14 9980/* [perl #20339] - we should accept and ignore %lf rather than die */
00e17364 9981 case 'l':
5f66b61c 9982 /*FALLTHROUGH*/
9e5b023a
JH
9983 default:
9984#if defined(USE_LONG_DOUBLE)
9985 intsize = args ? 0 : 'q';
9986#endif
9987 break;
9988 case 'q':
9989#if defined(HAS_LONG_DOUBLE)
9990 break;
9991#else
5f66b61c 9992 /*FALLTHROUGH*/
9e5b023a
JH
9993#endif
9994 case 'h':
9e5b023a
JH
9995 goto unknown;
9996 }
9997
9998 /* now we need (long double) if intsize == 'q', else (double) */
26372e71 9999 nv = (args) ?
35fff930
JH
10000#if LONG_DOUBLESIZE > DOUBLESIZE
10001 intsize == 'q' ?
205f51d8
AS
10002 va_arg(*args, long double) :
10003 va_arg(*args, double)
35fff930 10004#else
205f51d8 10005 va_arg(*args, double)
35fff930 10006#endif
4ea561bc 10007 : SvNV(argsv);
fc36a67e 10008
10009 need = 0;
3952c29a
NC
10010 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10011 else. frexp() has some unspecified behaviour for those three */
10012 if (c != 'e' && c != 'E' && (nv * 0) == 0) {
fc36a67e 10013 i = PERL_INT_MIN;
9e5b023a
JH
10014 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10015 will cast our (long double) to (double) */
73b309ea 10016 (void)Perl_frexp(nv, &i);
fc36a67e 10017 if (i == PERL_INT_MIN)
cea2e8a9 10018 Perl_die(aTHX_ "panic: frexp");
c635e13b 10019 if (i > 0)
fc36a67e 10020 need = BIT_DIGITS(i);
10021 }
10022 need += has_precis ? precis : 6; /* known default */
20f6aaab 10023
fc36a67e 10024 if (need < width)
10025 need = width;
10026
20f6aaab
AS
10027#ifdef HAS_LDBL_SPRINTF_BUG
10028 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8
AS
10029 with sfio - Allen <allens@cpan.org> */
10030
10031# ifdef DBL_MAX
10032# define MY_DBL_MAX DBL_MAX
10033# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10034# if DOUBLESIZE >= 8
10035# define MY_DBL_MAX 1.7976931348623157E+308L
10036# else
10037# define MY_DBL_MAX 3.40282347E+38L
10038# endif
10039# endif
10040
10041# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10042# define MY_DBL_MAX_BUG 1L
20f6aaab 10043# else
205f51d8 10044# define MY_DBL_MAX_BUG MY_DBL_MAX
20f6aaab 10045# endif
20f6aaab 10046
205f51d8
AS
10047# ifdef DBL_MIN
10048# define MY_DBL_MIN DBL_MIN
10049# else /* XXX guessing! -Allen */
10050# if DOUBLESIZE >= 8
10051# define MY_DBL_MIN 2.2250738585072014E-308L
10052# else
10053# define MY_DBL_MIN 1.17549435E-38L
10054# endif
10055# endif
20f6aaab 10056
205f51d8
AS
10057 if ((intsize == 'q') && (c == 'f') &&
10058 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10059 (need < DBL_DIG)) {
10060 /* it's going to be short enough that
10061 * long double precision is not needed */
10062
10063 if ((nv <= 0L) && (nv >= -0L))
10064 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10065 else {
10066 /* would use Perl_fp_class as a double-check but not
10067 * functional on IRIX - see perl.h comments */
10068
10069 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10070 /* It's within the range that a double can represent */
10071#if defined(DBL_MAX) && !defined(DBL_MIN)
10072 if ((nv >= ((long double)1/DBL_MAX)) ||
10073 (nv <= (-(long double)1/DBL_MAX)))
20f6aaab 10074#endif
205f51d8 10075 fix_ldbl_sprintf_bug = TRUE;
20f6aaab 10076 }
205f51d8
AS
10077 }
10078 if (fix_ldbl_sprintf_bug == TRUE) {
10079 double temp;
10080
10081 intsize = 0;
10082 temp = (double)nv;
10083 nv = (NV)temp;
10084 }
20f6aaab 10085 }
205f51d8
AS
10086
10087# undef MY_DBL_MAX
10088# undef MY_DBL_MAX_BUG
10089# undef MY_DBL_MIN
10090
20f6aaab
AS
10091#endif /* HAS_LDBL_SPRINTF_BUG */
10092
46fc3d4c 10093 need += 20; /* fudge factor */
80252599
GS
10094 if (PL_efloatsize < need) {
10095 Safefree(PL_efloatbuf);
10096 PL_efloatsize = need + 20; /* more fudge */
a02a5408 10097 Newx(PL_efloatbuf, PL_efloatsize, char);
7d5ea4e7 10098 PL_efloatbuf[0] = '\0';
46fc3d4c 10099 }
10100
4151a5fe
IZ
10101 if ( !(width || left || plus || alt) && fill != '0'
10102 && has_precis && intsize != 'q' ) { /* Shortcuts */
2873255c
NC
10103 /* See earlier comment about buggy Gconvert when digits,
10104 aka precis is 0 */
10105 if ( c == 'g' && precis) {
2e59c212 10106 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
4150c189
NC
10107 /* May return an empty string for digits==0 */
10108 if (*PL_efloatbuf) {
10109 elen = strlen(PL_efloatbuf);
4151a5fe 10110 goto float_converted;
4150c189 10111 }
4151a5fe
IZ
10112 } else if ( c == 'f' && !precis) {
10113 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10114 break;
10115 }
10116 }
4d84ee25
NC
10117 {
10118 char *ptr = ebuf + sizeof ebuf;
10119 *--ptr = '\0';
10120 *--ptr = c;
10121 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9e5b023a 10122#if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
4d84ee25
NC
10123 if (intsize == 'q') {
10124 /* Copy the one or more characters in a long double
10125 * format before the 'base' ([efgEFG]) character to
10126 * the format string. */
10127 static char const prifldbl[] = PERL_PRIfldbl;
10128 char const *p = prifldbl + sizeof(prifldbl) - 3;
10129 while (p >= prifldbl) { *--ptr = *p--; }
10130 }
65202027 10131#endif
4d84ee25
NC
10132 if (has_precis) {
10133 base = precis;
10134 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10135 *--ptr = '.';
10136 }
10137 if (width) {
10138 base = width;
10139 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10140 }
10141 if (fill == '0')
10142 *--ptr = fill;
10143 if (left)
10144 *--ptr = '-';
10145 if (plus)
10146 *--ptr = plus;
10147 if (alt)
10148 *--ptr = '#';
10149 *--ptr = '%';
10150
10151 /* No taint. Otherwise we are in the strange situation
10152 * where printf() taints but print($float) doesn't.
10153 * --jhi */
9e5b023a 10154#if defined(HAS_LONG_DOUBLE)
4150c189 10155 elen = ((intsize == 'q')
d9fad198
JH
10156 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10157 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9e5b023a 10158#else
4150c189 10159 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9e5b023a 10160#endif
4d84ee25 10161 }
4151a5fe 10162 float_converted:
80252599 10163 eptr = PL_efloatbuf;
46fc3d4c 10164 break;
10165
fc36a67e 10166 /* SPECIAL */
10167
10168 case 'n':
26372e71
GA
10169 if (vectorize)
10170 goto unknown;
fc36a67e 10171 i = SvCUR(sv) - origlen;
26372e71 10172 if (args) {
c635e13b 10173 switch (intsize) {
10174 case 'h': *(va_arg(*args, short*)) = i; break;
10175 default: *(va_arg(*args, int*)) = i; break;
10176 case 'l': *(va_arg(*args, long*)) = i; break;
10177 case 'V': *(va_arg(*args, IV*)) = i; break;
53f65a9e 10178 case 'q':
cf2093f6 10179#ifdef HAS_QUAD
53f65a9e
HS
10180 *(va_arg(*args, Quad_t*)) = i; break;
10181#else
10182 goto unknown;
cf2093f6 10183#endif
c635e13b 10184 }
fc36a67e 10185 }
9dd79c3f 10186 else
211dfcf1 10187 sv_setuv_mg(argsv, (UV)i);
fc36a67e 10188 continue; /* not "break" */
10189
10190 /* UNKNOWN */
10191
46fc3d4c 10192 default:
fc36a67e 10193 unknown:
041457d9
DM
10194 if (!args
10195 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10196 && ckWARN(WARN_PRINTF))
10197 {
c4420975 10198 SV * const msg = sv_newmortal();
35c1215d
NC
10199 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10200 (PL_op->op_type == OP_PRTF) ? "" : "s");
1d1ac7bc
MHM
10201 if (fmtstart < patend) {
10202 const char * const fmtend = q < patend ? q : patend;
10203 const char * f;
10204 sv_catpvs(msg, "\"%");
10205 for (f = fmtstart; f < fmtend; f++) {
10206 if (isPRINT(*f)) {
10207 sv_catpvn(msg, f, 1);
10208 } else {
10209 Perl_sv_catpvf(aTHX_ msg,
10210 "\\%03"UVof, (UV)*f & 0xFF);
10211 }
10212 }
10213 sv_catpvs(msg, "\"");
10214 } else {
396482e1 10215 sv_catpvs(msg, "end of string");
1d1ac7bc 10216 }
be2597df 10217 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
c635e13b 10218 }
fb73857a 10219
10220 /* output mangled stuff ... */
10221 if (c == '\0')
10222 --q;
46fc3d4c 10223 eptr = p;
10224 elen = q - p;
fb73857a 10225
10226 /* ... right here, because formatting flags should not apply */
10227 SvGROW(sv, SvCUR(sv) + elen + 1);
10228 p = SvEND(sv);
4459522c 10229 Copy(eptr, p, elen, char);
fb73857a 10230 p += elen;
10231 *p = '\0';
3f7c398e 10232 SvCUR_set(sv, p - SvPVX_const(sv));
58e33a90 10233 svix = osvix;
fb73857a 10234 continue; /* not "break" */
46fc3d4c 10235 }
10236
cc61b222
TS
10237 if (is_utf8 != has_utf8) {
10238 if (is_utf8) {
10239 if (SvCUR(sv))
10240 sv_utf8_upgrade(sv);
10241 }
10242 else {
10243 const STRLEN old_elen = elen;
59cd0e26 10244 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
cc61b222
TS
10245 sv_utf8_upgrade(nsv);
10246 eptr = SvPVX_const(nsv);
10247 elen = SvCUR(nsv);
10248
10249 if (width) { /* fudge width (can't fudge elen) */
10250 width += elen - old_elen;
10251 }
10252 is_utf8 = TRUE;
10253 }
10254 }
10255
6c94ec8b 10256 have = esignlen + zeros + elen;
ed2b91d2 10257 if (have < zeros)
f1f66076 10258 Perl_croak_nocontext("%s", PL_memory_wrap);
6c94ec8b 10259
46fc3d4c 10260 need = (have > width ? have : width);
10261 gap = need - have;
10262
d2641cbd 10263 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
f1f66076 10264 Perl_croak_nocontext("%s", PL_memory_wrap);
b22c7a20 10265 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
46fc3d4c 10266 p = SvEND(sv);
10267 if (esignlen && fill == '0') {
53c1dcc0 10268 int i;
eb160463 10269 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 10270 *p++ = esignbuf[i];
10271 }
10272 if (gap && !left) {
10273 memset(p, fill, gap);
10274 p += gap;
10275 }
10276 if (esignlen && fill != '0') {
53c1dcc0 10277 int i;
eb160463 10278 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 10279 *p++ = esignbuf[i];
10280 }
fc36a67e 10281 if (zeros) {
53c1dcc0 10282 int i;
fc36a67e 10283 for (i = zeros; i; i--)
10284 *p++ = '0';
10285 }
46fc3d4c 10286 if (elen) {
4459522c 10287 Copy(eptr, p, elen, char);
46fc3d4c 10288 p += elen;
10289 }
10290 if (gap && left) {
10291 memset(p, ' ', gap);
10292 p += gap;
10293 }
b22c7a20
GS
10294 if (vectorize) {
10295 if (veclen) {
4459522c 10296 Copy(dotstr, p, dotstrlen, char);
b22c7a20
GS
10297 p += dotstrlen;
10298 }
10299 else
10300 vectorize = FALSE; /* done iterating over vecstr */
10301 }
2cf2cfc6
A
10302 if (is_utf8)
10303 has_utf8 = TRUE;
10304 if (has_utf8)
7e2040f0 10305 SvUTF8_on(sv);
46fc3d4c 10306 *p = '\0';
3f7c398e 10307 SvCUR_set(sv, p - SvPVX_const(sv));
b22c7a20
GS
10308 if (vectorize) {
10309 esignlen = 0;
10310 goto vector;
10311 }
46fc3d4c 10312 }
10313}
51371543 10314
645c22ef
DM
10315/* =========================================================================
10316
10317=head1 Cloning an interpreter
10318
10319All the macros and functions in this section are for the private use of
10320the main function, perl_clone().
10321
f2fc5c80 10322The foo_dup() functions make an exact copy of an existing foo thingy.
645c22ef
DM
10323During the course of a cloning, a hash table is used to map old addresses
10324to new addresses. The table is created and manipulated with the
10325ptr_table_* functions.
10326
10327=cut
10328
3e8320cc 10329 * =========================================================================*/
645c22ef
DM
10330
10331
1d7c1841
GS
10332#if defined(USE_ITHREADS)
10333
d4c19fe8 10334/* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
1d7c1841
GS
10335#ifndef GpREFCNT_inc
10336# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10337#endif
10338
10339
a41cc44e 10340/* Certain cases in Perl_ss_dup have been merged, by relying on the fact
3e07292d 10341 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
538f2e76
NC
10342 If this changes, please unmerge ss_dup.
10343 Likewise, sv_dup_inc_multiple() relies on this fact. */
d2d73c3e 10344#define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
7f466ec7 10345#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup(s,t))
502c6561
NC
10346#define av_dup(s,t) MUTABLE_AV(sv_dup((const SV *)s,t))
10347#define av_dup_inc(s,t) MUTABLE_AV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
85fbaab2
NC
10348#define hv_dup(s,t) MUTABLE_HV(sv_dup((const SV *)s,t))
10349#define hv_dup_inc(s,t) MUTABLE_HV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
daba3364 10350#define cv_dup(s,t) MUTABLE_CV(sv_dup((const SV *)s,t))
ea726b52 10351#define cv_dup_inc(s,t) MUTABLE_CV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
daba3364 10352#define io_dup(s,t) MUTABLE_IO(sv_dup((const SV *)s,t))
a45c7426 10353#define io_dup_inc(s,t) MUTABLE_IO(SvREFCNT_inc(sv_dup((const SV *)s,t)))
159b6efe
NC
10354#define gv_dup(s,t) MUTABLE_GV(sv_dup((const SV *)s,t))
10355#define gv_dup_inc(s,t) MUTABLE_GV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
6136c704
AL
10356#define SAVEPV(p) ((p) ? savepv(p) : NULL)
10357#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
8cf8f3d1 10358
199e78b7
DM
10359/* clone a parser */
10360
10361yy_parser *
66ceb532 10362Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
199e78b7
DM
10363{
10364 yy_parser *parser;
10365
7918f24d
NC
10366 PERL_ARGS_ASSERT_PARSER_DUP;
10367
199e78b7
DM
10368 if (!proto)
10369 return NULL;
10370
7c197c94
DM
10371 /* look for it in the table first */
10372 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
10373 if (parser)
10374 return parser;
10375
10376 /* create anew and remember what it is */
199e78b7 10377 Newxz(parser, 1, yy_parser);
7c197c94 10378 ptr_table_store(PL_ptr_table, proto, parser);
199e78b7
DM
10379
10380 parser->yyerrstatus = 0;
10381 parser->yychar = YYEMPTY; /* Cause a token to be read. */
10382
10383 /* XXX these not yet duped */
10384 parser->old_parser = NULL;
10385 parser->stack = NULL;
10386 parser->ps = NULL;
10387 parser->stack_size = 0;
10388 /* XXX parser->stack->state = 0; */
10389
10390 /* XXX eventually, just Copy() most of the parser struct ? */
10391
10392 parser->lex_brackets = proto->lex_brackets;
10393 parser->lex_casemods = proto->lex_casemods;
10394 parser->lex_brackstack = savepvn(proto->lex_brackstack,
10395 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
10396 parser->lex_casestack = savepvn(proto->lex_casestack,
10397 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
10398 parser->lex_defer = proto->lex_defer;
10399 parser->lex_dojoin = proto->lex_dojoin;
10400 parser->lex_expect = proto->lex_expect;
10401 parser->lex_formbrack = proto->lex_formbrack;
10402 parser->lex_inpat = proto->lex_inpat;
10403 parser->lex_inwhat = proto->lex_inwhat;
10404 parser->lex_op = proto->lex_op;
10405 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
10406 parser->lex_starts = proto->lex_starts;
10407 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
10408 parser->multi_close = proto->multi_close;
10409 parser->multi_open = proto->multi_open;
10410 parser->multi_start = proto->multi_start;
670a9cb2 10411 parser->multi_end = proto->multi_end;
199e78b7
DM
10412 parser->pending_ident = proto->pending_ident;
10413 parser->preambled = proto->preambled;
10414 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
bdc0bf6f 10415 parser->linestr = sv_dup_inc(proto->linestr, param);
53a7735b
DM
10416 parser->expect = proto->expect;
10417 parser->copline = proto->copline;
f06b5848 10418 parser->last_lop_op = proto->last_lop_op;
bc177e6b 10419 parser->lex_state = proto->lex_state;
2f9285f8 10420 parser->rsfp = fp_dup(proto->rsfp, '<', param);
5486870f
DM
10421 /* rsfp_filters entries have fake IoDIRP() */
10422 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12bd6ede
DM
10423 parser->in_my = proto->in_my;
10424 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13765c85 10425 parser->error_count = proto->error_count;
bc177e6b 10426
53a7735b 10427
f06b5848
DM
10428 parser->linestr = sv_dup_inc(proto->linestr, param);
10429
10430 {
1e05feb3
AL
10431 char * const ols = SvPVX(proto->linestr);
10432 char * const ls = SvPVX(parser->linestr);
f06b5848
DM
10433
10434 parser->bufptr = ls + (proto->bufptr >= ols ?
10435 proto->bufptr - ols : 0);
10436 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
10437 proto->oldbufptr - ols : 0);
10438 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
10439 proto->oldoldbufptr - ols : 0);
10440 parser->linestart = ls + (proto->linestart >= ols ?
10441 proto->linestart - ols : 0);
10442 parser->last_uni = ls + (proto->last_uni >= ols ?
10443 proto->last_uni - ols : 0);
10444 parser->last_lop = ls + (proto->last_lop >= ols ?
10445 proto->last_lop - ols : 0);
10446
10447 parser->bufend = ls + SvCUR(parser->linestr);
10448 }
199e78b7 10449
14047fc9
DM
10450 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
10451
2f9285f8 10452
199e78b7
DM
10453#ifdef PERL_MAD
10454 parser->endwhite = proto->endwhite;
10455 parser->faketokens = proto->faketokens;
10456 parser->lasttoke = proto->lasttoke;
10457 parser->nextwhite = proto->nextwhite;
10458 parser->realtokenstart = proto->realtokenstart;
10459 parser->skipwhite = proto->skipwhite;
10460 parser->thisclose = proto->thisclose;
10461 parser->thismad = proto->thismad;
10462 parser->thisopen = proto->thisopen;
10463 parser->thisstuff = proto->thisstuff;
10464 parser->thistoken = proto->thistoken;
10465 parser->thiswhite = proto->thiswhite;
fb205e7a
DM
10466
10467 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
10468 parser->curforce = proto->curforce;
10469#else
10470 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
10471 Copy(proto->nexttype, parser->nexttype, 5, I32);
10472 parser->nexttoke = proto->nexttoke;
199e78b7 10473#endif
f0c5aa00
DM
10474
10475 /* XXX should clone saved_curcop here, but we aren't passed
10476 * proto_perl; so do it in perl_clone_using instead */
10477
199e78b7
DM
10478 return parser;
10479}
10480
d2d73c3e 10481
d2d73c3e 10482/* duplicate a file handle */
645c22ef 10483
1d7c1841 10484PerlIO *
3be3cdd6 10485Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
1d7c1841
GS
10486{
10487 PerlIO *ret;
53c1dcc0 10488
7918f24d 10489 PERL_ARGS_ASSERT_FP_DUP;
53c1dcc0 10490 PERL_UNUSED_ARG(type);
73d840c0 10491
1d7c1841
GS
10492 if (!fp)
10493 return (PerlIO*)NULL;
10494
10495 /* look for it in the table first */
10496 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10497 if (ret)
10498 return ret;
10499
10500 /* create anew and remember what it is */
ecdeb87c 10501 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
1d7c1841
GS
10502 ptr_table_store(PL_ptr_table, fp, ret);
10503 return ret;
10504}
10505
645c22ef
DM
10506/* duplicate a directory handle */
10507
1d7c1841 10508DIR *
66ceb532 10509Perl_dirp_dup(pTHX_ DIR *const dp)
1d7c1841 10510{
96a5add6 10511 PERL_UNUSED_CONTEXT;
1d7c1841
GS
10512 if (!dp)
10513 return (DIR*)NULL;
10514 /* XXX TODO */
10515 return dp;
10516}
10517
ff276b08 10518/* duplicate a typeglob */
645c22ef 10519
1d7c1841 10520GP *
66ceb532 10521Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
1d7c1841
GS
10522{
10523 GP *ret;
b37c2d43 10524
7918f24d
NC
10525 PERL_ARGS_ASSERT_GP_DUP;
10526
1d7c1841
GS
10527 if (!gp)
10528 return (GP*)NULL;
10529 /* look for it in the table first */
10530 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10531 if (ret)
10532 return ret;
10533
10534 /* create anew and remember what it is */
a02a5408 10535 Newxz(ret, 1, GP);
1d7c1841
GS
10536 ptr_table_store(PL_ptr_table, gp, ret);
10537
10538 /* clone */
46d65037
NC
10539 /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
10540 on Newxz() to do this for us. */
d2d73c3e
AB
10541 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
10542 ret->gp_io = io_dup_inc(gp->gp_io, param);
10543 ret->gp_form = cv_dup_inc(gp->gp_form, param);
10544 ret->gp_av = av_dup_inc(gp->gp_av, param);
10545 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
10546 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10547 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
1d7c1841 10548 ret->gp_cvgen = gp->gp_cvgen;
1d7c1841 10549 ret->gp_line = gp->gp_line;
566771cc 10550 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
1d7c1841
GS
10551 return ret;
10552}
10553
645c22ef
DM
10554/* duplicate a chain of magic */
10555
1d7c1841 10556MAGIC *
b88ec9b8 10557Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
1d7c1841 10558{
c160a186 10559 MAGIC *mgret = NULL;
0228edf6 10560 MAGIC **mgprev_p = &mgret;
7918f24d
NC
10561
10562 PERL_ARGS_ASSERT_MG_DUP;
10563
1d7c1841
GS
10564 for (; mg; mg = mg->mg_moremagic) {
10565 MAGIC *nmg;
45f7fcc8 10566 Newx(nmg, 1, MAGIC);
0228edf6
NC
10567 *mgprev_p = nmg;
10568 mgprev_p = &(nmg->mg_moremagic);
10569
45f7fcc8
NC
10570 /* There was a comment "XXX copy dynamic vtable?" but as we don't have
10571 dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
10572 from the original commit adding Perl_mg_dup() - revision 4538.
10573 Similarly there is the annotation "XXX random ptr?" next to the
10574 assignment to nmg->mg_ptr. */
10575 *nmg = *mg;
10576
288b8c02 10577 /* FIXME for plugins
45f7fcc8
NC
10578 if (nmg->mg_type == PERL_MAGIC_qr) {
10579 nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
1d7c1841 10580 }
288b8c02
NC
10581 else
10582 */
45f7fcc8 10583 if(nmg->mg_type == PERL_MAGIC_backref) {
d7cbc7b5
NC
10584 /* The backref AV has its reference count deliberately bumped by
10585 1. */
502c6561 10586 nmg->mg_obj
45f7fcc8 10587 = SvREFCNT_inc(av_dup_inc((const AV *) nmg->mg_obj, param));
05bd4103 10588 }
1d7c1841 10589 else {
45f7fcc8
NC
10590 nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
10591 ? sv_dup_inc(nmg->mg_obj, param)
10592 : sv_dup(nmg->mg_obj, param);
10593 }
10594
10595 if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
10596 if (nmg->mg_len > 0) {
10597 nmg->mg_ptr = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
10598 if (nmg->mg_type == PERL_MAGIC_overload_table &&
10599 AMT_AMAGIC((AMT*)nmg->mg_ptr))
14befaf4 10600 {
0bcc34c2 10601 AMT * const namtp = (AMT*)nmg->mg_ptr;
538f2e76
NC
10602 sv_dup_inc_multiple((SV**)(namtp->table),
10603 (SV**)(namtp->table), NofAMmeth, param);
1d7c1841
GS
10604 }
10605 }
45f7fcc8
NC
10606 else if (nmg->mg_len == HEf_SVKEY)
10607 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
1d7c1841 10608 }
45f7fcc8 10609 if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
68795e93
NIS
10610 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10611 }
1d7c1841
GS
10612 }
10613 return mgret;
10614}
10615
4674ade5
NC
10616#endif /* USE_ITHREADS */
10617
645c22ef
DM
10618/* create a new pointer-mapping table */
10619
1d7c1841
GS
10620PTR_TBL_t *
10621Perl_ptr_table_new(pTHX)
10622{
10623 PTR_TBL_t *tbl;
96a5add6
AL
10624 PERL_UNUSED_CONTEXT;
10625
b3a120bf 10626 Newx(tbl, 1, PTR_TBL_t);
1d7c1841
GS
10627 tbl->tbl_max = 511;
10628 tbl->tbl_items = 0;
a02a5408 10629 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
1d7c1841
GS
10630 return tbl;
10631}
10632
7119fd33
NC
10633#define PTR_TABLE_HASH(ptr) \
10634 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
134ca3d6 10635
93e68bfb
JC
10636/*
10637 we use the PTE_SVSLOT 'reservation' made above, both here (in the
10638 following define) and at call to new_body_inline made below in
10639 Perl_ptr_table_store()
10640 */
10641
10642#define del_pte(p) del_body_type(p, PTE_SVSLOT)
32e691d0 10643
645c22ef
DM
10644/* map an existing pointer using a table */
10645
7bf61b54 10646STATIC PTR_TBL_ENT_t *
1eb6e4ca 10647S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
7918f24d 10648{
1d7c1841 10649 PTR_TBL_ENT_t *tblent;
4373e329 10650 const UV hash = PTR_TABLE_HASH(sv);
7918f24d
NC
10651
10652 PERL_ARGS_ASSERT_PTR_TABLE_FIND;
10653
1d7c1841
GS
10654 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10655 for (; tblent; tblent = tblent->next) {
10656 if (tblent->oldval == sv)
7bf61b54 10657 return tblent;
1d7c1841 10658 }
d4c19fe8 10659 return NULL;
7bf61b54
NC
10660}
10661
10662void *
1eb6e4ca 10663Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
7bf61b54 10664{
b0e6ae5b 10665 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
7918f24d
NC
10666
10667 PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
96a5add6 10668 PERL_UNUSED_CONTEXT;
7918f24d 10669
d4c19fe8 10670 return tblent ? tblent->newval : NULL;
1d7c1841
GS
10671}
10672
645c22ef
DM
10673/* add a new entry to a pointer-mapping table */
10674
1d7c1841 10675void
1eb6e4ca 10676Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
1d7c1841 10677{
0c9fdfe0 10678 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
7918f24d
NC
10679
10680 PERL_ARGS_ASSERT_PTR_TABLE_STORE;
96a5add6 10681 PERL_UNUSED_CONTEXT;
1d7c1841 10682
7bf61b54
NC
10683 if (tblent) {
10684 tblent->newval = newsv;
10685 } else {
10686 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
10687
d2a0f284
JC
10688 new_body_inline(tblent, PTE_SVSLOT);
10689
7bf61b54
NC
10690 tblent->oldval = oldsv;
10691 tblent->newval = newsv;
10692 tblent->next = tbl->tbl_ary[entry];
10693 tbl->tbl_ary[entry] = tblent;
10694 tbl->tbl_items++;
10695 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
10696 ptr_table_split(tbl);
1d7c1841 10697 }
1d7c1841
GS
10698}
10699
645c22ef
DM
10700/* double the hash bucket size of an existing ptr table */
10701
1d7c1841 10702void
1eb6e4ca 10703Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
1d7c1841
GS
10704{
10705 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
4373e329 10706 const UV oldsize = tbl->tbl_max + 1;
1d7c1841
GS
10707 UV newsize = oldsize * 2;
10708 UV i;
7918f24d
NC
10709
10710 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
96a5add6 10711 PERL_UNUSED_CONTEXT;
1d7c1841
GS
10712
10713 Renew(ary, newsize, PTR_TBL_ENT_t*);
10714 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10715 tbl->tbl_max = --newsize;
10716 tbl->tbl_ary = ary;
10717 for (i=0; i < oldsize; i++, ary++) {
10718 PTR_TBL_ENT_t **curentp, **entp, *ent;
10719 if (!*ary)
10720 continue;
10721 curentp = ary + oldsize;
10722 for (entp = ary, ent = *ary; ent; ent = *entp) {
134ca3d6 10723 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
1d7c1841
GS
10724 *entp = ent->next;
10725 ent->next = *curentp;
10726 *curentp = ent;
10727 continue;
10728 }
10729 else
10730 entp = &ent->next;
10731 }
10732 }
10733}
10734
645c22ef
DM
10735/* remove all the entries from a ptr table */
10736
a0739874 10737void
1eb6e4ca 10738Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
a0739874 10739{
d5cefff9 10740 if (tbl && tbl->tbl_items) {
c445ea15 10741 register PTR_TBL_ENT_t * const * const array = tbl->tbl_ary;
d5cefff9 10742 UV riter = tbl->tbl_max;
a0739874 10743
d5cefff9
NC
10744 do {
10745 PTR_TBL_ENT_t *entry = array[riter];
ab1e7f95 10746
d5cefff9 10747 while (entry) {
00b6aa41 10748 PTR_TBL_ENT_t * const oentry = entry;
d5cefff9
NC
10749 entry = entry->next;
10750 del_pte(oentry);
10751 }
10752 } while (riter--);
a0739874 10753
d5cefff9
NC
10754 tbl->tbl_items = 0;
10755 }
a0739874
DM
10756}
10757
645c22ef
DM
10758/* clear and free a ptr table */
10759
a0739874 10760void
1eb6e4ca 10761Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
a0739874
DM
10762{
10763 if (!tbl) {
10764 return;
10765 }
10766 ptr_table_clear(tbl);
10767 Safefree(tbl->tbl_ary);
10768 Safefree(tbl);
10769}
10770
4674ade5 10771#if defined(USE_ITHREADS)
5bd07a3d 10772
83841fad 10773void
1eb6e4ca 10774Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
83841fad 10775{
7918f24d
NC
10776 PERL_ARGS_ASSERT_RVPV_DUP;
10777
83841fad 10778 if (SvROK(sstr)) {
b162af07 10779 SvRV_set(dstr, SvWEAKREF(sstr)
f19a12a3
MHM
10780 ? sv_dup(SvRV_const(sstr), param)
10781 : sv_dup_inc(SvRV_const(sstr), param));
f880fe2f 10782
83841fad 10783 }
3f7c398e 10784 else if (SvPVX_const(sstr)) {
83841fad
NIS
10785 /* Has something there */
10786 if (SvLEN(sstr)) {
68795e93 10787 /* Normal PV - clone whole allocated space */
3f7c398e 10788 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
d3d0e6f1
NC
10789 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10790 /* Not that normal - actually sstr is copy on write.
10791 But we are a true, independant SV, so: */
10792 SvREADONLY_off(dstr);
10793 SvFAKE_off(dstr);
10794 }
68795e93 10795 }
83841fad
NIS
10796 else {
10797 /* Special case - not normally malloced for some reason */
f7877b28
NC
10798 if (isGV_with_GP(sstr)) {
10799 /* Don't need to do anything here. */
10800 }
10801 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
ef10be65
NC
10802 /* A "shared" PV - clone it as "shared" PV */
10803 SvPV_set(dstr,
10804 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
10805 param)));
83841fad
NIS
10806 }
10807 else {
10808 /* Some other special case - random pointer */
d2c6dc5e 10809 SvPV_set(dstr, (char *) SvPVX_const(sstr));
d3d0e6f1 10810 }
83841fad
NIS
10811 }
10812 }
10813 else {
4608196e 10814 /* Copy the NULL */
4df7f6af 10815 SvPV_set(dstr, NULL);
83841fad
NIS
10816 }
10817}
10818
538f2e76
NC
10819/* duplicate a list of SVs. source and dest may point to the same memory. */
10820static SV **
10821S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
10822 SSize_t items, CLONE_PARAMS *const param)
10823{
10824 PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
10825
10826 while (items-- > 0) {
10827 *dest++ = sv_dup_inc(*source++, param);
10828 }
10829
10830 return dest;
10831}
10832
662fb8b2
NC
10833/* duplicate an SV of any type (including AV, HV etc) */
10834
1d7c1841 10835SV *
1eb6e4ca 10836Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
1d7c1841 10837{
27da23d5 10838 dVAR;
1d7c1841
GS
10839 SV *dstr;
10840
7918f24d
NC
10841 PERL_ARGS_ASSERT_SV_DUP;
10842
bfd95973
NC
10843 if (!sstr)
10844 return NULL;
10845 if (SvTYPE(sstr) == SVTYPEMASK) {
10846#ifdef DEBUG_LEAKING_SCALARS_ABORT
10847 abort();
10848#endif
6136c704 10849 return NULL;
bfd95973 10850 }
1d7c1841 10851 /* look for it in the table first */
daba3364 10852 dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
1d7c1841
GS
10853 if (dstr)
10854 return dstr;
10855
0405e91e
AB
10856 if(param->flags & CLONEf_JOIN_IN) {
10857 /** We are joining here so we don't want do clone
10858 something that is bad **/
eb86f8b3 10859 if (SvTYPE(sstr) == SVt_PVHV) {
9bde8eb0 10860 const HEK * const hvname = HvNAME_HEK(sstr);
eb86f8b3
AL
10861 if (hvname)
10862 /** don't clone stashes if they already exist **/
daba3364 10863 return MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
0405e91e
AB
10864 }
10865 }
10866
1d7c1841
GS
10867 /* create anew and remember what it is */
10868 new_SV(dstr);
fd0854ff
DM
10869
10870#ifdef DEBUG_LEAKING_SCALARS
10871 dstr->sv_debug_optype = sstr->sv_debug_optype;
10872 dstr->sv_debug_line = sstr->sv_debug_line;
10873 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
10874 dstr->sv_debug_cloned = 1;
fd0854ff 10875 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
fd0854ff
DM
10876#endif
10877
1d7c1841
GS
10878 ptr_table_store(PL_ptr_table, sstr, dstr);
10879
10880 /* clone */
10881 SvFLAGS(dstr) = SvFLAGS(sstr);
10882 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
10883 SvREFCNT(dstr) = 0; /* must be before any other dups! */
10884
10885#ifdef DEBUGGING
3f7c398e 10886 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
1d7c1841 10887 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
6c9570dc 10888 (void*)PL_watch_pvx, SvPVX_const(sstr));
1d7c1841
GS
10889#endif
10890
9660f481
DM
10891 /* don't clone objects whose class has asked us not to */
10892 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
33de8e4a 10893 SvFLAGS(dstr) = 0;
9660f481
DM
10894 return dstr;
10895 }
10896
1d7c1841
GS
10897 switch (SvTYPE(sstr)) {
10898 case SVt_NULL:
10899 SvANY(dstr) = NULL;
10900 break;
10901 case SVt_IV:
339049b0 10902 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
4df7f6af
NC
10903 if(SvROK(sstr)) {
10904 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10905 } else {
10906 SvIV_set(dstr, SvIVX(sstr));
10907 }
1d7c1841
GS
10908 break;
10909 case SVt_NV:
10910 SvANY(dstr) = new_XNV();
9d6ce603 10911 SvNV_set(dstr, SvNVX(sstr));
1d7c1841 10912 break;
cecf5685 10913 /* case SVt_BIND: */
662fb8b2
NC
10914 default:
10915 {
10916 /* These are all the types that need complex bodies allocating. */
662fb8b2 10917 void *new_body;
2bcc16b3
NC
10918 const svtype sv_type = SvTYPE(sstr);
10919 const struct body_details *const sv_type_details
10920 = bodies_by_type + sv_type;
662fb8b2 10921
93e68bfb 10922 switch (sv_type) {
662fb8b2 10923 default:
bb263b4e 10924 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
662fb8b2
NC
10925 break;
10926
662fb8b2 10927 case SVt_PVGV:
c22188b4
NC
10928 case SVt_PVIO:
10929 case SVt_PVFM:
10930 case SVt_PVHV:
10931 case SVt_PVAV:
662fb8b2 10932 case SVt_PVCV:
662fb8b2 10933 case SVt_PVLV:
5c35adbb 10934 case SVt_REGEXP:
662fb8b2 10935 case SVt_PVMG:
662fb8b2 10936 case SVt_PVNV:
662fb8b2 10937 case SVt_PVIV:
662fb8b2 10938 case SVt_PV:
d2a0f284 10939 assert(sv_type_details->body_size);
c22188b4 10940 if (sv_type_details->arena) {
d2a0f284 10941 new_body_inline(new_body, sv_type);
c22188b4 10942 new_body
b9502f15 10943 = (void*)((char*)new_body - sv_type_details->offset);
c22188b4
NC
10944 } else {
10945 new_body = new_NOARENA(sv_type_details);
10946 }
1d7c1841 10947 }
662fb8b2
NC
10948 assert(new_body);
10949 SvANY(dstr) = new_body;
10950
2bcc16b3 10951#ifndef PURIFY
b9502f15
NC
10952 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
10953 ((char*)SvANY(dstr)) + sv_type_details->offset,
f32993d6 10954 sv_type_details->copy, char);
2bcc16b3
NC
10955#else
10956 Copy(((char*)SvANY(sstr)),
10957 ((char*)SvANY(dstr)),
d2a0f284 10958 sv_type_details->body_size + sv_type_details->offset, char);
2bcc16b3 10959#endif
662fb8b2 10960
f7877b28
NC
10961 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
10962 && !isGV_with_GP(dstr))
662fb8b2
NC
10963 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10964
10965 /* The Copy above means that all the source (unduplicated) pointers
10966 are now in the destination. We can check the flags and the
10967 pointers in either, but it's possible that there's less cache
10968 missing by always going for the destination.
10969 FIXME - instrument and check that assumption */
f32993d6 10970 if (sv_type >= SVt_PVMG) {
885ffcb3 10971 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
73d95100 10972 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
e736a858 10973 } else if (SvMAGIC(dstr))
662fb8b2
NC
10974 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
10975 if (SvSTASH(dstr))
10976 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
1d7c1841 10977 }
662fb8b2 10978
f32993d6
NC
10979 /* The cast silences a GCC warning about unhandled types. */
10980 switch ((int)sv_type) {
662fb8b2
NC
10981 case SVt_PV:
10982 break;
10983 case SVt_PVIV:
10984 break;
10985 case SVt_PVNV:
10986 break;
10987 case SVt_PVMG:
10988 break;
5c35adbb 10989 case SVt_REGEXP:
288b8c02 10990 /* FIXME for plugins */
d2f13c59 10991 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
f708cfc1 10992 break;
662fb8b2
NC
10993 case SVt_PVLV:
10994 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
10995 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
10996 LvTARG(dstr) = dstr;
10997 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
daba3364 10998 LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
662fb8b2
NC
10999 else
11000 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
662fb8b2 11001 case SVt_PVGV:
cecf5685 11002 if(isGV_with_GP(sstr)) {
566771cc 11003 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
39cb70dc
NC
11004 /* Don't call sv_add_backref here as it's going to be
11005 created as part of the magic cloning of the symbol
11006 table. */
f7877b28
NC
11007 /* Danger Will Robinson - GvGP(dstr) isn't initialised
11008 at the point of this comment. */
39cb70dc 11009 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
f7877b28
NC
11010 GvGP(dstr) = gp_dup(GvGP(sstr), param);
11011 (void)GpREFCNT_inc(GvGP(dstr));
11012 } else
11013 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
662fb8b2
NC
11014 break;
11015 case SVt_PVIO:
11016 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
11017 if (IoOFP(dstr) == IoIFP(sstr))
11018 IoOFP(dstr) = IoIFP(dstr);
11019 else
11020 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
5486870f 11021 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
662fb8b2
NC
11022 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11023 /* I have no idea why fake dirp (rsfps)
11024 should be treated differently but otherwise
11025 we end up with leaks -- sky*/
11026 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
11027 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
11028 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11029 } else {
11030 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
11031 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
11032 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
100ce7e1
NC
11033 if (IoDIRP(dstr)) {
11034 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
11035 } else {
6f207bd3 11036 NOOP;
100ce7e1
NC
11037 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
11038 }
662fb8b2
NC
11039 }
11040 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
11041 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
11042 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
11043 break;
11044 case SVt_PVAV:
2779b694
KB
11045 /* avoid cloning an empty array */
11046 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
662fb8b2 11047 SV **dst_ary, **src_ary;
502c6561 11048 SSize_t items = AvFILLp((const AV *)sstr) + 1;
662fb8b2 11049
502c6561
NC
11050 src_ary = AvARRAY((const AV *)sstr);
11051 Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
662fb8b2 11052 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
502c6561
NC
11053 AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11054 AvALLOC((const AV *)dstr) = dst_ary;
11055 if (AvREAL((const AV *)sstr)) {
538f2e76
NC
11056 dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11057 param);
662fb8b2
NC
11058 }
11059 else {
11060 while (items-- > 0)
11061 *dst_ary++ = sv_dup(*src_ary++, param);
11062 }
502c6561 11063 items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
662fb8b2
NC
11064 while (items-- > 0) {
11065 *dst_ary++ = &PL_sv_undef;
11066 }
bfcb3514 11067 }
662fb8b2 11068 else {
502c6561
NC
11069 AvARRAY(MUTABLE_AV(dstr)) = NULL;
11070 AvALLOC((const AV *)dstr) = (SV**)NULL;
2779b694
KB
11071 AvMAX( (const AV *)dstr) = -1;
11072 AvFILLp((const AV *)dstr) = -1;
b79f7545 11073 }
662fb8b2
NC
11074 break;
11075 case SVt_PVHV:
1d193675 11076 if (HvARRAY((const HV *)sstr)) {
7e265ef3
AL
11077 STRLEN i = 0;
11078 const bool sharekeys = !!HvSHAREKEYS(sstr);
11079 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
11080 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
11081 char *darray;
11082 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
11083 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
11084 char);
11085 HvARRAY(dstr) = (HE**)darray;
11086 while (i <= sxhv->xhv_max) {
11087 const HE * const source = HvARRAY(sstr)[i];
11088 HvARRAY(dstr)[i] = source
11089 ? he_dup(source, sharekeys, param) : 0;
11090 ++i;
11091 }
11092 if (SvOOK(sstr)) {
11093 HEK *hvname;
11094 const struct xpvhv_aux * const saux = HvAUX(sstr);
11095 struct xpvhv_aux * const daux = HvAUX(dstr);
11096 /* This flag isn't copied. */
11097 /* SvOOK_on(hv) attacks the IV flags. */
11098 SvFLAGS(dstr) |= SVf_OOK;
11099
11100 hvname = saux->xhv_name;
566771cc 11101 daux->xhv_name = hek_dup(hvname, param);
7e265ef3
AL
11102
11103 daux->xhv_riter = saux->xhv_riter;
11104 daux->xhv_eiter = saux->xhv_eiter
11105 ? he_dup(saux->xhv_eiter,
11106 (bool)!!HvSHAREKEYS(sstr), param) : 0;
b17f5ab7 11107 /* backref array needs refcnt=2; see sv_add_backref */
7e265ef3
AL
11108 daux->xhv_backreferences =
11109 saux->xhv_backreferences
502c6561 11110 ? MUTABLE_AV(SvREFCNT_inc(
daba3364 11111 sv_dup_inc((const SV *)saux->xhv_backreferences, param)))
86f55936 11112 : 0;
e1a479c5
BB
11113
11114 daux->xhv_mro_meta = saux->xhv_mro_meta
11115 ? mro_meta_dup(saux->xhv_mro_meta, param)
11116 : 0;
11117
7e265ef3
AL
11118 /* Record stashes for possible cloning in Perl_clone(). */
11119 if (hvname)
11120 av_push(param->stashes, dstr);
662fb8b2 11121 }
662fb8b2 11122 }
7e265ef3 11123 else
85fbaab2 11124 HvARRAY(MUTABLE_HV(dstr)) = NULL;
662fb8b2 11125 break;
662fb8b2 11126 case SVt_PVCV:
bb172083
NC
11127 if (!(param->flags & CLONEf_COPY_STACKS)) {
11128 CvDEPTH(dstr) = 0;
11129 }
11130 case SVt_PVFM:
662fb8b2
NC
11131 /* NOTE: not refcounted */
11132 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
11133 OP_REFCNT_LOCK;
d04ba589
NC
11134 if (!CvISXSUB(dstr))
11135 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
662fb8b2 11136 OP_REFCNT_UNLOCK;
cfae286e 11137 if (CvCONST(dstr) && CvISXSUB(dstr)) {
d32faaf3 11138 CvXSUBANY(dstr).any_ptr =
daba3364 11139 sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
662fb8b2
NC
11140 }
11141 /* don't dup if copying back - CvGV isn't refcounted, so the
11142 * duped GV may never be freed. A bit of a hack! DAPM */
11143 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
a0714e2c 11144 NULL : gv_dup(CvGV(dstr), param) ;
662fb8b2
NC
11145 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
11146 CvOUTSIDE(dstr) =
11147 CvWEAKOUTSIDE(sstr)
11148 ? cv_dup( CvOUTSIDE(dstr), param)
11149 : cv_dup_inc(CvOUTSIDE(dstr), param);
aed2304a 11150 if (!CvISXSUB(dstr))
662fb8b2
NC
11151 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
11152 break;
bfcb3514 11153 }
1d7c1841 11154 }
1d7c1841
GS
11155 }
11156
11157 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
11158 ++PL_sv_objcount;
11159
11160 return dstr;
d2d73c3e 11161 }
1d7c1841 11162
645c22ef
DM
11163/* duplicate a context */
11164
1d7c1841 11165PERL_CONTEXT *
a8fc9800 11166Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
1d7c1841
GS
11167{
11168 PERL_CONTEXT *ncxs;
11169
7918f24d
NC
11170 PERL_ARGS_ASSERT_CX_DUP;
11171
1d7c1841
GS
11172 if (!cxs)
11173 return (PERL_CONTEXT*)NULL;
11174
11175 /* look for it in the table first */
11176 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
11177 if (ncxs)
11178 return ncxs;
11179
11180 /* create anew and remember what it is */
c2d565bf 11181 Newx(ncxs, max + 1, PERL_CONTEXT);
1d7c1841 11182 ptr_table_store(PL_ptr_table, cxs, ncxs);
c2d565bf 11183 Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
1d7c1841
GS
11184
11185 while (ix >= 0) {
c445ea15 11186 PERL_CONTEXT * const ncx = &ncxs[ix];
c2d565bf 11187 if (CxTYPE(ncx) == CXt_SUBST) {
1d7c1841
GS
11188 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
11189 }
11190 else {
c2d565bf 11191 switch (CxTYPE(ncx)) {
1d7c1841 11192 case CXt_SUB:
c2d565bf
NC
11193 ncx->blk_sub.cv = (ncx->blk_sub.olddepth == 0
11194 ? cv_dup_inc(ncx->blk_sub.cv, param)
11195 : cv_dup(ncx->blk_sub.cv,param));
bafb2adc 11196 ncx->blk_sub.argarray = (CxHASARGS(ncx)
c2d565bf
NC
11197 ? av_dup_inc(ncx->blk_sub.argarray,
11198 param)
7d49f689 11199 : NULL);
c2d565bf
NC
11200 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,
11201 param);
d8d97e70 11202 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
c2d565bf 11203 ncx->blk_sub.oldcomppad);
1d7c1841
GS
11204 break;
11205 case CXt_EVAL:
c2d565bf
NC
11206 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
11207 param);
11208 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
1d7c1841 11209 break;
d01136d6 11210 case CXt_LOOP_LAZYSV:
d01136d6
BS
11211 ncx->blk_loop.state_u.lazysv.end
11212 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
840fe433
NC
11213 /* We are taking advantage of av_dup_inc and sv_dup_inc
11214 actually being the same function, and order equivalance of
11215 the two unions.
11216 We can assert the later [but only at run time :-(] */
11217 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
11218 (void *) &ncx->blk_loop.state_u.lazysv.cur);
3b719c58 11219 case CXt_LOOP_FOR:
d01136d6
BS
11220 ncx->blk_loop.state_u.ary.ary
11221 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
11222 case CXt_LOOP_LAZYIV:
3b719c58 11223 case CXt_LOOP_PLAIN:
e846cb92
NC
11224 if (CxPADLOOP(ncx)) {
11225 ncx->blk_loop.oldcomppad
11226 = (PAD*)ptr_table_fetch(PL_ptr_table,
11227 ncx->blk_loop.oldcomppad);
11228 } else {
11229 ncx->blk_loop.oldcomppad
159b6efe
NC
11230 = (PAD*)gv_dup((const GV *)ncx->blk_loop.oldcomppad,
11231 param);
e846cb92 11232 }
1d7c1841
GS
11233 break;
11234 case CXt_FORMAT:
f9c764c5
NC
11235 ncx->blk_format.cv = cv_dup(ncx->blk_format.cv, param);
11236 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param);
11237 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
c2d565bf 11238 param);
1d7c1841
GS
11239 break;
11240 case CXt_BLOCK:
11241 case CXt_NULL:
11242 break;
11243 }
11244 }
11245 --ix;
11246 }
11247 return ncxs;
11248}
11249
645c22ef
DM
11250/* duplicate a stack info structure */
11251
1d7c1841 11252PERL_SI *
a8fc9800 11253Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
1d7c1841
GS
11254{
11255 PERL_SI *nsi;
11256
7918f24d
NC
11257 PERL_ARGS_ASSERT_SI_DUP;
11258
1d7c1841
GS
11259 if (!si)
11260 return (PERL_SI*)NULL;
11261
11262 /* look for it in the table first */
11263 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
11264 if (nsi)
11265 return nsi;
11266
11267 /* create anew and remember what it is */
a02a5408 11268 Newxz(nsi, 1, PERL_SI);
1d7c1841
GS
11269 ptr_table_store(PL_ptr_table, si, nsi);
11270
d2d73c3e 11271 nsi->si_stack = av_dup_inc(si->si_stack, param);
1d7c1841
GS
11272 nsi->si_cxix = si->si_cxix;
11273 nsi->si_cxmax = si->si_cxmax;
d2d73c3e 11274 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
1d7c1841 11275 nsi->si_type = si->si_type;
d2d73c3e
AB
11276 nsi->si_prev = si_dup(si->si_prev, param);
11277 nsi->si_next = si_dup(si->si_next, param);
1d7c1841
GS
11278 nsi->si_markoff = si->si_markoff;
11279
11280 return nsi;
11281}
11282
11283#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
11284#define TOPINT(ss,ix) ((ss)[ix].any_i32)
11285#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
11286#define TOPLONG(ss,ix) ((ss)[ix].any_long)
11287#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
11288#define TOPIV(ss,ix) ((ss)[ix].any_iv)
38d8b13e
HS
11289#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
11290#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
1d7c1841
GS
11291#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
11292#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
11293#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
11294#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
11295#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
11296#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11297
11298/* XXXXX todo */
11299#define pv_dup_inc(p) SAVEPV(p)
11300#define pv_dup(p) SAVEPV(p)
11301#define svp_dup_inc(p,pp) any_dup(p,pp)
11302
645c22ef
DM
11303/* map any object to the new equivent - either something in the
11304 * ptr table, or something in the interpreter structure
11305 */
11306
1d7c1841 11307void *
53c1dcc0 11308Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
1d7c1841
GS
11309{
11310 void *ret;
11311
7918f24d
NC
11312 PERL_ARGS_ASSERT_ANY_DUP;
11313
1d7c1841
GS
11314 if (!v)
11315 return (void*)NULL;
11316
11317 /* look for it in the table first */
11318 ret = ptr_table_fetch(PL_ptr_table, v);
11319 if (ret)
11320 return ret;
11321
11322 /* see if it is part of the interpreter structure */
11323 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
acfe0abc 11324 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
05ec9bb3 11325 else {
1d7c1841 11326 ret = v;
05ec9bb3 11327 }
1d7c1841
GS
11328
11329 return ret;
11330}
11331
645c22ef
DM
11332/* duplicate the save stack */
11333
1d7c1841 11334ANY *
a8fc9800 11335Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
1d7c1841 11336{
53d44271 11337 dVAR;
907b3e23
DM
11338 ANY * const ss = proto_perl->Isavestack;
11339 const I32 max = proto_perl->Isavestack_max;
11340 I32 ix = proto_perl->Isavestack_ix;
1d7c1841 11341 ANY *nss;
daba3364 11342 const SV *sv;
1d193675
NC
11343 const GV *gv;
11344 const AV *av;
11345 const HV *hv;
1d7c1841
GS
11346 void* ptr;
11347 int intval;
11348 long longval;
11349 GP *gp;
11350 IV iv;
b24356f5 11351 I32 i;
c4e33207 11352 char *c = NULL;
1d7c1841 11353 void (*dptr) (void*);
acfe0abc 11354 void (*dxptr) (pTHX_ void*);
1d7c1841 11355
7918f24d
NC
11356 PERL_ARGS_ASSERT_SS_DUP;
11357
a02a5408 11358 Newxz(nss, max, ANY);
1d7c1841
GS
11359
11360 while (ix > 0) {
b24356f5
NC
11361 const I32 type = POPINT(ss,ix);
11362 TOPINT(nss,ix) = type;
11363 switch (type) {
3e07292d 11364 case SAVEt_HELEM: /* hash element */
daba3364 11365 sv = (const SV *)POPPTR(ss,ix);
3e07292d
NC
11366 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11367 /* fall through */
1d7c1841 11368 case SAVEt_ITEM: /* normal string */
a41cc44e 11369 case SAVEt_SV: /* scalar reference */
daba3364 11370 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11371 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
11372 /* fall through */
11373 case SAVEt_FREESV:
11374 case SAVEt_MORTALIZESV:
daba3364 11375 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11376 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 11377 break;
05ec9bb3
NIS
11378 case SAVEt_SHARED_PVREF: /* char* in shared space */
11379 c = (char*)POPPTR(ss,ix);
11380 TOPPTR(nss,ix) = savesharedpv(c);
11381 ptr = POPPTR(ss,ix);
11382 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11383 break;
1d7c1841
GS
11384 case SAVEt_GENERIC_SVREF: /* generic sv */
11385 case SAVEt_SVREF: /* scalar reference */
daba3364 11386 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11387 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
11388 ptr = POPPTR(ss,ix);
11389 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11390 break;
a41cc44e 11391 case SAVEt_HV: /* hash reference */
1d7c1841 11392 case SAVEt_AV: /* array reference */
daba3364 11393 sv = (const SV *) POPPTR(ss,ix);
337d28f5 11394 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
11395 /* fall through */
11396 case SAVEt_COMPPAD:
11397 case SAVEt_NSTAB:
daba3364 11398 sv = (const SV *) POPPTR(ss,ix);
3e07292d 11399 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
11400 break;
11401 case SAVEt_INT: /* int reference */
11402 ptr = POPPTR(ss,ix);
11403 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11404 intval = (int)POPINT(ss,ix);
11405 TOPINT(nss,ix) = intval;
11406 break;
11407 case SAVEt_LONG: /* long reference */
11408 ptr = POPPTR(ss,ix);
11409 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
3e07292d
NC
11410 /* fall through */
11411 case SAVEt_CLEARSV:
1d7c1841
GS
11412 longval = (long)POPLONG(ss,ix);
11413 TOPLONG(nss,ix) = longval;
11414 break;
11415 case SAVEt_I32: /* I32 reference */
11416 case SAVEt_I16: /* I16 reference */
11417 case SAVEt_I8: /* I8 reference */
88effcc9 11418 case SAVEt_COP_ARYBASE: /* call CopARYBASE_set */
1d7c1841
GS
11419 ptr = POPPTR(ss,ix);
11420 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
1ccabee8 11421 i = POPINT(ss,ix);
1d7c1841
GS
11422 TOPINT(nss,ix) = i;
11423 break;
11424 case SAVEt_IV: /* IV reference */
11425 ptr = POPPTR(ss,ix);
11426 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11427 iv = POPIV(ss,ix);
11428 TOPIV(nss,ix) = iv;
11429 break;
a41cc44e
NC
11430 case SAVEt_HPTR: /* HV* reference */
11431 case SAVEt_APTR: /* AV* reference */
1d7c1841
GS
11432 case SAVEt_SPTR: /* SV* reference */
11433 ptr = POPPTR(ss,ix);
11434 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 11435 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11436 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
11437 break;
11438 case SAVEt_VPTR: /* random* reference */
11439 ptr = POPPTR(ss,ix);
11440 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11441 ptr = POPPTR(ss,ix);
11442 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11443 break;
b03d03b0 11444 case SAVEt_GENERIC_PVREF: /* generic char* */
1d7c1841
GS
11445 case SAVEt_PPTR: /* char* reference */
11446 ptr = POPPTR(ss,ix);
11447 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11448 c = (char*)POPPTR(ss,ix);
11449 TOPPTR(nss,ix) = pv_dup(c);
11450 break;
1d7c1841
GS
11451 case SAVEt_GP: /* scalar reference */
11452 gp = (GP*)POPPTR(ss,ix);
d2d73c3e 11453 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
1d7c1841 11454 (void)GpREFCNT_inc(gp);
159b6efe 11455 gv = (const GV *)POPPTR(ss,ix);
2ed3c8fc 11456 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
1d7c1841 11457 break;
1d7c1841
GS
11458 case SAVEt_FREEOP:
11459 ptr = POPPTR(ss,ix);
11460 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11461 /* these are assumed to be refcounted properly */
53c1dcc0 11462 OP *o;
1d7c1841
GS
11463 switch (((OP*)ptr)->op_type) {
11464 case OP_LEAVESUB:
11465 case OP_LEAVESUBLV:
11466 case OP_LEAVEEVAL:
11467 case OP_LEAVE:
11468 case OP_SCOPE:
11469 case OP_LEAVEWRITE:
e977893f
GS
11470 TOPPTR(nss,ix) = ptr;
11471 o = (OP*)ptr;
d3c72c2a 11472 OP_REFCNT_LOCK;
594cd643 11473 (void) OpREFCNT_inc(o);
d3c72c2a 11474 OP_REFCNT_UNLOCK;
1d7c1841
GS
11475 break;
11476 default:
5f66b61c 11477 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
11478 break;
11479 }
11480 }
11481 else
5f66b61c 11482 TOPPTR(nss,ix) = NULL;
1d7c1841 11483 break;
1d7c1841 11484 case SAVEt_DELETE:
1d193675 11485 hv = (const HV *)POPPTR(ss,ix);
d2d73c3e 11486 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
35d4f826
NC
11487 i = POPINT(ss,ix);
11488 TOPINT(nss,ix) = i;
8e41545f
NC
11489 /* Fall through */
11490 case SAVEt_FREEPV:
1d7c1841
GS
11491 c = (char*)POPPTR(ss,ix);
11492 TOPPTR(nss,ix) = pv_dup_inc(c);
35d4f826 11493 break;
3e07292d 11494 case SAVEt_STACK_POS: /* Position on Perl stack */
1d7c1841
GS
11495 i = POPINT(ss,ix);
11496 TOPINT(nss,ix) = i;
11497 break;
11498 case SAVEt_DESTRUCTOR:
11499 ptr = POPPTR(ss,ix);
11500 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11501 dptr = POPDPTR(ss,ix);
8141890a
JH
11502 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
11503 any_dup(FPTR2DPTR(void *, dptr),
11504 proto_perl));
1d7c1841
GS
11505 break;
11506 case SAVEt_DESTRUCTOR_X:
11507 ptr = POPPTR(ss,ix);
11508 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11509 dxptr = POPDXPTR(ss,ix);
8141890a
JH
11510 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
11511 any_dup(FPTR2DPTR(void *, dxptr),
11512 proto_perl));
1d7c1841
GS
11513 break;
11514 case SAVEt_REGCONTEXT:
11515 case SAVEt_ALLOC:
11516 i = POPINT(ss,ix);
11517 TOPINT(nss,ix) = i;
11518 ix -= i;
11519 break;
1d7c1841 11520 case SAVEt_AELEM: /* array element */
daba3364 11521 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11522 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
11523 i = POPINT(ss,ix);
11524 TOPINT(nss,ix) = i;
502c6561 11525 av = (const AV *)POPPTR(ss,ix);
d2d73c3e 11526 TOPPTR(nss,ix) = av_dup_inc(av, param);
1d7c1841 11527 break;
1d7c1841
GS
11528 case SAVEt_OP:
11529 ptr = POPPTR(ss,ix);
11530 TOPPTR(nss,ix) = ptr;
11531 break;
11532 case SAVEt_HINTS:
b3ca2e83 11533 ptr = POPPTR(ss,ix);
080ac856 11534 if (ptr) {
7b6dd8c3 11535 HINTS_REFCNT_LOCK;
080ac856 11536 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
7b6dd8c3
NC
11537 HINTS_REFCNT_UNLOCK;
11538 }
cbb1fbea 11539 TOPPTR(nss,ix) = ptr;
601cee3b
NC
11540 i = POPINT(ss,ix);
11541 TOPINT(nss,ix) = i;
a8f8b6a7 11542 if (i & HINT_LOCALIZE_HH) {
1d193675 11543 hv = (const HV *)POPPTR(ss,ix);
a8f8b6a7
NC
11544 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11545 }
1d7c1841 11546 break;
09edbca0 11547 case SAVEt_PADSV_AND_MORTALIZE:
c3564e5c
GS
11548 longval = (long)POPLONG(ss,ix);
11549 TOPLONG(nss,ix) = longval;
11550 ptr = POPPTR(ss,ix);
11551 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 11552 sv = (const SV *)POPPTR(ss,ix);
09edbca0 11553 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
c3564e5c 11554 break;
a1bb4754 11555 case SAVEt_BOOL:
38d8b13e 11556 ptr = POPPTR(ss,ix);
b9609c01 11557 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
38d8b13e 11558 longval = (long)POPBOOL(ss,ix);
b9609c01 11559 TOPBOOL(nss,ix) = (bool)longval;
a1bb4754 11560 break;
8bd2680e
MHM
11561 case SAVEt_SET_SVFLAGS:
11562 i = POPINT(ss,ix);
11563 TOPINT(nss,ix) = i;
11564 i = POPINT(ss,ix);
11565 TOPINT(nss,ix) = i;
daba3364 11566 sv = (const SV *)POPPTR(ss,ix);
8bd2680e
MHM
11567 TOPPTR(nss,ix) = sv_dup(sv, param);
11568 break;
5bfb7d0e
NC
11569 case SAVEt_RE_STATE:
11570 {
11571 const struct re_save_state *const old_state
11572 = (struct re_save_state *)
11573 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11574 struct re_save_state *const new_state
11575 = (struct re_save_state *)
11576 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11577
11578 Copy(old_state, new_state, 1, struct re_save_state);
11579 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
11580
11581 new_state->re_state_bostr
11582 = pv_dup(old_state->re_state_bostr);
11583 new_state->re_state_reginput
11584 = pv_dup(old_state->re_state_reginput);
5bfb7d0e
NC
11585 new_state->re_state_regeol
11586 = pv_dup(old_state->re_state_regeol);
f0ab9afb
NC
11587 new_state->re_state_regoffs
11588 = (regexp_paren_pair*)
11589 any_dup(old_state->re_state_regoffs, proto_perl);
5bfb7d0e 11590 new_state->re_state_reglastparen
11b79775
DD
11591 = (U32*) any_dup(old_state->re_state_reglastparen,
11592 proto_perl);
5bfb7d0e 11593 new_state->re_state_reglastcloseparen
11b79775 11594 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
5bfb7d0e 11595 proto_perl);
5bfb7d0e
NC
11596 /* XXX This just has to be broken. The old save_re_context
11597 code did SAVEGENERICPV(PL_reg_start_tmp);
11598 PL_reg_start_tmp is char **.
11599 Look above to what the dup code does for
11600 SAVEt_GENERIC_PVREF
11601 It can never have worked.
11602 So this is merely a faithful copy of the exiting bug: */
11603 new_state->re_state_reg_start_tmp
11604 = (char **) pv_dup((char *)
11605 old_state->re_state_reg_start_tmp);
11606 /* I assume that it only ever "worked" because no-one called
11607 (pseudo)fork while the regexp engine had re-entered itself.
11608 */
5bfb7d0e
NC
11609#ifdef PERL_OLD_COPY_ON_WRITE
11610 new_state->re_state_nrs
11611 = sv_dup(old_state->re_state_nrs, param);
11612#endif
11613 new_state->re_state_reg_magic
11b79775
DD
11614 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
11615 proto_perl);
5bfb7d0e 11616 new_state->re_state_reg_oldcurpm
11b79775
DD
11617 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
11618 proto_perl);
5bfb7d0e 11619 new_state->re_state_reg_curpm
11b79775
DD
11620 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
11621 proto_perl);
5bfb7d0e
NC
11622 new_state->re_state_reg_oldsaved
11623 = pv_dup(old_state->re_state_reg_oldsaved);
11624 new_state->re_state_reg_poscache
11625 = pv_dup(old_state->re_state_reg_poscache);
5bfb7d0e
NC
11626 new_state->re_state_reg_starttry
11627 = pv_dup(old_state->re_state_reg_starttry);
5bfb7d0e
NC
11628 break;
11629 }
68da3b2f
NC
11630 case SAVEt_COMPILE_WARNINGS:
11631 ptr = POPPTR(ss,ix);
11632 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
7b6dd8c3 11633 break;
7c197c94
DM
11634 case SAVEt_PARSER:
11635 ptr = POPPTR(ss,ix);
456084a8 11636 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
7c197c94 11637 break;
1d7c1841 11638 default:
147bc374
NC
11639 Perl_croak(aTHX_
11640 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
1d7c1841
GS
11641 }
11642 }
11643
bd81e77b
NC
11644 return nss;
11645}
11646
11647
11648/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11649 * flag to the result. This is done for each stash before cloning starts,
11650 * so we know which stashes want their objects cloned */
11651
11652static void
f30de749 11653do_mark_cloneable_stash(pTHX_ SV *const sv)
bd81e77b 11654{
1d193675 11655 const HEK * const hvname = HvNAME_HEK((const HV *)sv);
bd81e77b 11656 if (hvname) {
85fbaab2 11657 GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
bd81e77b
NC
11658 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11659 if (cloner && GvCV(cloner)) {
11660 dSP;
11661 UV status;
11662
11663 ENTER;
11664 SAVETMPS;
11665 PUSHMARK(SP);
6e449a3a 11666 mXPUSHs(newSVhek(hvname));
bd81e77b 11667 PUTBACK;
daba3364 11668 call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
bd81e77b
NC
11669 SPAGAIN;
11670 status = POPu;
11671 PUTBACK;
11672 FREETMPS;
11673 LEAVE;
11674 if (status)
11675 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
11676 }
11677 }
11678}
11679
11680
11681
11682/*
11683=for apidoc perl_clone
11684
11685Create and return a new interpreter by cloning the current one.
11686
11687perl_clone takes these flags as parameters:
11688
11689CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
11690without it we only clone the data and zero the stacks,
11691with it we copy the stacks and the new perl interpreter is
11692ready to run at the exact same point as the previous one.
11693The pseudo-fork code uses COPY_STACKS while the
878090d5 11694threads->create doesn't.
bd81e77b
NC
11695
11696CLONEf_KEEP_PTR_TABLE
11697perl_clone keeps a ptr_table with the pointer of the old
11698variable as a key and the new variable as a value,
11699this allows it to check if something has been cloned and not
11700clone it again but rather just use the value and increase the
11701refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
11702the ptr_table using the function
11703C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
11704reason to keep it around is if you want to dup some of your own
11705variable who are outside the graph perl scans, example of this
11706code is in threads.xs create
11707
11708CLONEf_CLONE_HOST
11709This is a win32 thing, it is ignored on unix, it tells perls
11710win32host code (which is c++) to clone itself, this is needed on
11711win32 if you want to run two threads at the same time,
11712if you just want to do some stuff in a separate perl interpreter
11713and then throw it away and return to the original one,
11714you don't need to do anything.
11715
11716=cut
11717*/
11718
11719/* XXX the above needs expanding by someone who actually understands it ! */
11720EXTERN_C PerlInterpreter *
11721perl_clone_host(PerlInterpreter* proto_perl, UV flags);
11722
11723PerlInterpreter *
11724perl_clone(PerlInterpreter *proto_perl, UV flags)
11725{
11726 dVAR;
11727#ifdef PERL_IMPLICIT_SYS
11728
7918f24d
NC
11729 PERL_ARGS_ASSERT_PERL_CLONE;
11730
bd81e77b
NC
11731 /* perlhost.h so we need to call into it
11732 to clone the host, CPerlHost should have a c interface, sky */
11733
11734 if (flags & CLONEf_CLONE_HOST) {
11735 return perl_clone_host(proto_perl,flags);
11736 }
11737 return perl_clone_using(proto_perl, flags,
11738 proto_perl->IMem,
11739 proto_perl->IMemShared,
11740 proto_perl->IMemParse,
11741 proto_perl->IEnv,
11742 proto_perl->IStdIO,
11743 proto_perl->ILIO,
11744 proto_perl->IDir,
11745 proto_perl->ISock,
11746 proto_perl->IProc);
11747}
11748
11749PerlInterpreter *
11750perl_clone_using(PerlInterpreter *proto_perl, UV flags,
11751 struct IPerlMem* ipM, struct IPerlMem* ipMS,
11752 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
11753 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
11754 struct IPerlDir* ipD, struct IPerlSock* ipS,
11755 struct IPerlProc* ipP)
11756{
11757 /* XXX many of the string copies here can be optimized if they're
11758 * constants; they need to be allocated as common memory and just
11759 * their pointers copied. */
11760
11761 IV i;
11762 CLONE_PARAMS clone_params;
5f66b61c 11763 CLONE_PARAMS* const param = &clone_params;
bd81e77b 11764
5f66b61c 11765 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
7918f24d
NC
11766
11767 PERL_ARGS_ASSERT_PERL_CLONE_USING;
11768
bd81e77b
NC
11769 /* for each stash, determine whether its objects should be cloned */
11770 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11771 PERL_SET_THX(my_perl);
11772
11773# ifdef DEBUGGING
7e337ee0 11774 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
11775 PL_op = NULL;
11776 PL_curcop = NULL;
bd81e77b
NC
11777 PL_markstack = 0;
11778 PL_scopestack = 0;
11779 PL_savestack = 0;
11780 PL_savestack_ix = 0;
11781 PL_savestack_max = -1;
11782 PL_sig_pending = 0;
b8328dae 11783 PL_parser = NULL;
bd81e77b
NC
11784 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11785# else /* !DEBUGGING */
11786 Zero(my_perl, 1, PerlInterpreter);
11787# endif /* DEBUGGING */
11788
11789 /* host pointers */
11790 PL_Mem = ipM;
11791 PL_MemShared = ipMS;
11792 PL_MemParse = ipMP;
11793 PL_Env = ipE;
11794 PL_StdIO = ipStd;
11795 PL_LIO = ipLIO;
11796 PL_Dir = ipD;
11797 PL_Sock = ipS;
11798 PL_Proc = ipP;
11799#else /* !PERL_IMPLICIT_SYS */
11800 IV i;
11801 CLONE_PARAMS clone_params;
11802 CLONE_PARAMS* param = &clone_params;
5f66b61c 11803 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
7918f24d
NC
11804
11805 PERL_ARGS_ASSERT_PERL_CLONE;
11806
bd81e77b
NC
11807 /* for each stash, determine whether its objects should be cloned */
11808 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11809 PERL_SET_THX(my_perl);
11810
11811# ifdef DEBUGGING
7e337ee0 11812 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
11813 PL_op = NULL;
11814 PL_curcop = NULL;
bd81e77b
NC
11815 PL_markstack = 0;
11816 PL_scopestack = 0;
11817 PL_savestack = 0;
11818 PL_savestack_ix = 0;
11819 PL_savestack_max = -1;
11820 PL_sig_pending = 0;
b8328dae 11821 PL_parser = NULL;
bd81e77b
NC
11822 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11823# else /* !DEBUGGING */
11824 Zero(my_perl, 1, PerlInterpreter);
11825# endif /* DEBUGGING */
11826#endif /* PERL_IMPLICIT_SYS */
11827 param->flags = flags;
11828 param->proto_perl = proto_perl;
11829
7cb608b5
NC
11830 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
11831
fdda85ca 11832 PL_body_arenas = NULL;
bd81e77b
NC
11833 Zero(&PL_body_roots, 1, PL_body_roots);
11834
11835 PL_nice_chunk = NULL;
11836 PL_nice_chunk_size = 0;
11837 PL_sv_count = 0;
11838 PL_sv_objcount = 0;
a0714e2c
SS
11839 PL_sv_root = NULL;
11840 PL_sv_arenaroot = NULL;
bd81e77b
NC
11841
11842 PL_debug = proto_perl->Idebug;
11843
11844 PL_hash_seed = proto_perl->Ihash_seed;
11845 PL_rehash_seed = proto_perl->Irehash_seed;
11846
11847#ifdef USE_REENTRANT_API
11848 /* XXX: things like -Dm will segfault here in perlio, but doing
11849 * PERL_SET_CONTEXT(proto_perl);
11850 * breaks too many other things
11851 */
11852 Perl_reentrant_init(aTHX);
11853#endif
11854
11855 /* create SV map for pointer relocation */
11856 PL_ptr_table = ptr_table_new();
11857
11858 /* initialize these special pointers as early as possible */
11859 SvANY(&PL_sv_undef) = NULL;
11860 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
11861 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
11862 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
11863
11864 SvANY(&PL_sv_no) = new_XPVNV();
11865 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
11866 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11867 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 11868 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
bd81e77b
NC
11869 SvCUR_set(&PL_sv_no, 0);
11870 SvLEN_set(&PL_sv_no, 1);
11871 SvIV_set(&PL_sv_no, 0);
11872 SvNV_set(&PL_sv_no, 0);
11873 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
11874
11875 SvANY(&PL_sv_yes) = new_XPVNV();
11876 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
11877 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11878 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 11879 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
bd81e77b
NC
11880 SvCUR_set(&PL_sv_yes, 1);
11881 SvLEN_set(&PL_sv_yes, 2);
11882 SvIV_set(&PL_sv_yes, 1);
11883 SvNV_set(&PL_sv_yes, 1);
11884 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
11885
11886 /* create (a non-shared!) shared string table */
11887 PL_strtab = newHV();
11888 HvSHAREKEYS_off(PL_strtab);
11889 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
11890 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11891
11892 PL_compiling = proto_perl->Icompiling;
11893
11894 /* These two PVs will be free'd special way so must set them same way op.c does */
11895 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11896 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11897
11898 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
11899 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11900
11901 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
72dc9ed5 11902 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
c28fe1ec 11903 if (PL_compiling.cop_hints_hash) {
cbb1fbea 11904 HINTS_REFCNT_LOCK;
c28fe1ec 11905 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
cbb1fbea
NC
11906 HINTS_REFCNT_UNLOCK;
11907 }
907b3e23 11908 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
5892a4d4
NC
11909#ifdef PERL_DEBUG_READONLY_OPS
11910 PL_slabs = NULL;
11911 PL_slab_count = 0;
11912#endif
bd81e77b
NC
11913
11914 /* pseudo environmental stuff */
11915 PL_origargc = proto_perl->Iorigargc;
11916 PL_origargv = proto_perl->Iorigargv;
11917
11918 param->stashes = newAV(); /* Setup array of objects to call clone on */
11919
11920 /* Set tainting stuff before PerlIO_debug can possibly get called */
11921 PL_tainting = proto_perl->Itainting;
11922 PL_taint_warn = proto_perl->Itaint_warn;
11923
11924#ifdef PERLIO_LAYERS
11925 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11926 PerlIO_clone(aTHX_ proto_perl, param);
11927#endif
11928
11929 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
11930 PL_incgv = gv_dup(proto_perl->Iincgv, param);
11931 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
11932 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
11933 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
11934 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
11935
11936 /* switches */
11937 PL_minus_c = proto_perl->Iminus_c;
11938 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
11939 PL_localpatches = proto_perl->Ilocalpatches;
11940 PL_splitstr = proto_perl->Isplitstr;
bd81e77b
NC
11941 PL_minus_n = proto_perl->Iminus_n;
11942 PL_minus_p = proto_perl->Iminus_p;
11943 PL_minus_l = proto_perl->Iminus_l;
11944 PL_minus_a = proto_perl->Iminus_a;
bc9b29db 11945 PL_minus_E = proto_perl->Iminus_E;
bd81e77b
NC
11946 PL_minus_F = proto_perl->Iminus_F;
11947 PL_doswitches = proto_perl->Idoswitches;
11948 PL_dowarn = proto_perl->Idowarn;
11949 PL_doextract = proto_perl->Idoextract;
11950 PL_sawampersand = proto_perl->Isawampersand;
11951 PL_unsafe = proto_perl->Iunsafe;
11952 PL_inplace = SAVEPV(proto_perl->Iinplace);
11953 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
11954 PL_perldb = proto_perl->Iperldb;
11955 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11956 PL_exit_flags = proto_perl->Iexit_flags;
11957
11958 /* magical thingies */
11959 /* XXX time(&PL_basetime) when asked for? */
11960 PL_basetime = proto_perl->Ibasetime;
11961 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
11962
11963 PL_maxsysfd = proto_perl->Imaxsysfd;
bd81e77b
NC
11964 PL_statusvalue = proto_perl->Istatusvalue;
11965#ifdef VMS
11966 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
11967#else
11968 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
11969#endif
11970 PL_encoding = sv_dup(proto_perl->Iencoding, param);
11971
76f68e9b
MHM
11972 sv_setpvs(PERL_DEBUG_PAD(0), ""); /* For regex debugging. */
11973 sv_setpvs(PERL_DEBUG_PAD(1), ""); /* ext/re needs these */
11974 sv_setpvs(PERL_DEBUG_PAD(2), ""); /* even without DEBUGGING. */
bd81e77b 11975
84da74a7 11976
f9f4320a 11977 /* RE engine related */
84da74a7
YO
11978 Zero(&PL_reg_state, 1, struct re_save_state);
11979 PL_reginterp_cnt = 0;
11980 PL_regmatch_slab = NULL;
11981
bd81e77b 11982 /* Clone the regex array */
937c6efd
NC
11983 /* ORANGE FIXME for plugins, probably in the SV dup code.
11984 newSViv(PTR2IV(CALLREGDUPE(
11985 INT2PTR(REGEXP *, SvIVX(regex)), param))))
11986 */
11987 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
bd81e77b
NC
11988 PL_regex_pad = AvARRAY(PL_regex_padav);
11989
11990 /* shortcuts to various I/O objects */
e23d9e2f 11991 PL_ofsgv = gv_dup(proto_perl->Iofsgv, param);
bd81e77b
NC
11992 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
11993 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
11994 PL_defgv = gv_dup(proto_perl->Idefgv, param);
11995 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
11996 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
11997 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
1d7c1841 11998
bd81e77b
NC
11999 /* shortcuts to regexp stuff */
12000 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
9660f481 12001
bd81e77b
NC
12002 /* shortcuts to misc objects */
12003 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
9660f481 12004
bd81e77b
NC
12005 /* shortcuts to debugging objects */
12006 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
12007 PL_DBline = gv_dup(proto_perl->IDBline, param);
12008 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
12009 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
12010 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
12011 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
bd81e77b 12012 PL_dbargs = av_dup(proto_perl->Idbargs, param);
9660f481 12013
bd81e77b 12014 /* symbol tables */
907b3e23
DM
12015 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
12016 PL_curstash = hv_dup(proto_perl->Icurstash, param);
bd81e77b
NC
12017 PL_debstash = hv_dup(proto_perl->Idebstash, param);
12018 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
12019 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
12020
12021 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
12022 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
12023 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
3c10abe3
AG
12024 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
12025 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
bd81e77b
NC
12026 PL_endav = av_dup_inc(proto_perl->Iendav, param);
12027 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
12028 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
12029
12030 PL_sub_generation = proto_perl->Isub_generation;
dd69841b 12031 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
bd81e77b
NC
12032
12033 /* funky return mechanisms */
12034 PL_forkprocess = proto_perl->Iforkprocess;
12035
12036 /* subprocess state */
12037 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
12038
12039 /* internal state */
12040 PL_maxo = proto_perl->Imaxo;
12041 if (proto_perl->Iop_mask)
12042 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
12043 else
bd61b366 12044 PL_op_mask = NULL;
bd81e77b
NC
12045 /* PL_asserting = proto_perl->Iasserting; */
12046
12047 /* current interpreter roots */
12048 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
d3c72c2a 12049 OP_REFCNT_LOCK;
bd81e77b 12050 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
d3c72c2a 12051 OP_REFCNT_UNLOCK;
bd81e77b
NC
12052 PL_main_start = proto_perl->Imain_start;
12053 PL_eval_root = proto_perl->Ieval_root;
12054 PL_eval_start = proto_perl->Ieval_start;
12055
12056 /* runtime control stuff */
12057 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
bd81e77b
NC
12058
12059 PL_filemode = proto_perl->Ifilemode;
12060 PL_lastfd = proto_perl->Ilastfd;
12061 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
12062 PL_Argv = NULL;
bd61b366 12063 PL_Cmd = NULL;
bd81e77b 12064 PL_gensym = proto_perl->Igensym;
bd81e77b
NC
12065 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
12066 PL_laststatval = proto_perl->Ilaststatval;
12067 PL_laststype = proto_perl->Ilaststype;
a0714e2c 12068 PL_mess_sv = NULL;
bd81e77b
NC
12069
12070 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
12071
12072 /* interpreter atexit processing */
12073 PL_exitlistlen = proto_perl->Iexitlistlen;
12074 if (PL_exitlistlen) {
12075 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12076 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9660f481 12077 }
bd81e77b
NC
12078 else
12079 PL_exitlist = (PerlExitListEntry*)NULL;
f16dd614
DM
12080
12081 PL_my_cxt_size = proto_perl->Imy_cxt_size;
4c901e72 12082 if (PL_my_cxt_size) {
f16dd614
DM
12083 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
12084 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
53d44271 12085#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 12086 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
53d44271
JH
12087 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
12088#endif
f16dd614 12089 }
53d44271 12090 else {
f16dd614 12091 PL_my_cxt_list = (void**)NULL;
53d44271 12092#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 12093 PL_my_cxt_keys = (const char**)NULL;
53d44271
JH
12094#endif
12095 }
bd81e77b
NC
12096 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
12097 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
12098 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
12099
12100 PL_profiledata = NULL;
9660f481 12101
bd81e77b 12102 PL_compcv = cv_dup(proto_perl->Icompcv, param);
9660f481 12103
bd81e77b 12104 PAD_CLONE_VARS(proto_perl, param);
9660f481 12105
bd81e77b
NC
12106#ifdef HAVE_INTERP_INTERN
12107 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
12108#endif
645c22ef 12109
bd81e77b
NC
12110 /* more statics moved here */
12111 PL_generation = proto_perl->Igeneration;
12112 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
645c22ef 12113
bd81e77b
NC
12114 PL_in_clean_objs = proto_perl->Iin_clean_objs;
12115 PL_in_clean_all = proto_perl->Iin_clean_all;
6a78b4db 12116
bd81e77b
NC
12117 PL_uid = proto_perl->Iuid;
12118 PL_euid = proto_perl->Ieuid;
12119 PL_gid = proto_perl->Igid;
12120 PL_egid = proto_perl->Iegid;
12121 PL_nomemok = proto_perl->Inomemok;
12122 PL_an = proto_perl->Ian;
12123 PL_evalseq = proto_perl->Ievalseq;
12124 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
12125 PL_origalen = proto_perl->Iorigalen;
12126#ifdef PERL_USES_PL_PIDSTATUS
12127 PL_pidstatus = newHV(); /* XXX flag for cloning? */
12128#endif
12129 PL_osname = SAVEPV(proto_perl->Iosname);
12130 PL_sighandlerp = proto_perl->Isighandlerp;
6a78b4db 12131
bd81e77b 12132 PL_runops = proto_perl->Irunops;
6a78b4db 12133
199e78b7
DM
12134 PL_parser = parser_dup(proto_perl->Iparser, param);
12135
f0c5aa00
DM
12136 /* XXX this only works if the saved cop has already been cloned */
12137 if (proto_perl->Iparser) {
12138 PL_parser->saved_curcop = (COP*)any_dup(
12139 proto_perl->Iparser->saved_curcop,
12140 proto_perl);
12141 }
12142
bd81e77b
NC
12143 PL_subline = proto_perl->Isubline;
12144 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
c43294b8 12145
bd81e77b
NC
12146#ifdef FCRYPT
12147 PL_cryptseen = proto_perl->Icryptseen;
12148#endif
1d7c1841 12149
bd81e77b 12150 PL_hints = proto_perl->Ihints;
1d7c1841 12151
bd81e77b 12152 PL_amagic_generation = proto_perl->Iamagic_generation;
d2d73c3e 12153
bd81e77b
NC
12154#ifdef USE_LOCALE_COLLATE
12155 PL_collation_ix = proto_perl->Icollation_ix;
12156 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
12157 PL_collation_standard = proto_perl->Icollation_standard;
12158 PL_collxfrm_base = proto_perl->Icollxfrm_base;
12159 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
12160#endif /* USE_LOCALE_COLLATE */
1d7c1841 12161
bd81e77b
NC
12162#ifdef USE_LOCALE_NUMERIC
12163 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
12164 PL_numeric_standard = proto_perl->Inumeric_standard;
12165 PL_numeric_local = proto_perl->Inumeric_local;
12166 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
12167#endif /* !USE_LOCALE_NUMERIC */
1d7c1841 12168
bd81e77b
NC
12169 /* utf8 character classes */
12170 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
bd81e77b
NC
12171 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
12172 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
12173 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
12174 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
12175 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
12176 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
12177 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
12178 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
12179 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
12180 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
12181 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
12182 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
12183 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
12184 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
12185 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
12186 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
12187 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
12188 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
1d7c1841 12189
bd81e77b
NC
12190 /* Did the locale setup indicate UTF-8? */
12191 PL_utf8locale = proto_perl->Iutf8locale;
12192 /* Unicode features (see perlrun/-C) */
12193 PL_unicode = proto_perl->Iunicode;
1d7c1841 12194
bd81e77b
NC
12195 /* Pre-5.8 signals control */
12196 PL_signals = proto_perl->Isignals;
1d7c1841 12197
bd81e77b
NC
12198 /* times() ticks per second */
12199 PL_clocktick = proto_perl->Iclocktick;
1d7c1841 12200
bd81e77b
NC
12201 /* Recursion stopper for PerlIO_find_layer */
12202 PL_in_load_module = proto_perl->Iin_load_module;
8df990a8 12203
bd81e77b
NC
12204 /* sort() routine */
12205 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
e5dd39fc 12206
bd81e77b
NC
12207 /* Not really needed/useful since the reenrant_retint is "volatile",
12208 * but do it for consistency's sake. */
12209 PL_reentrant_retint = proto_perl->Ireentrant_retint;
1d7c1841 12210
bd81e77b
NC
12211 /* Hooks to shared SVs and locks. */
12212 PL_sharehook = proto_perl->Isharehook;
12213 PL_lockhook = proto_perl->Ilockhook;
12214 PL_unlockhook = proto_perl->Iunlockhook;
12215 PL_threadhook = proto_perl->Ithreadhook;
eba16661 12216 PL_destroyhook = proto_perl->Idestroyhook;
1d7c1841 12217
bd81e77b
NC
12218#ifdef THREADS_HAVE_PIDS
12219 PL_ppid = proto_perl->Ippid;
12220#endif
1d7c1841 12221
bd81e77b 12222 /* swatch cache */
5c284bb0 12223 PL_last_swash_hv = NULL; /* reinits on demand */
bd81e77b
NC
12224 PL_last_swash_klen = 0;
12225 PL_last_swash_key[0]= '\0';
12226 PL_last_swash_tmps = (U8*)NULL;
12227 PL_last_swash_slen = 0;
1d7c1841 12228
bd81e77b
NC
12229 PL_glob_index = proto_perl->Iglob_index;
12230 PL_srand_called = proto_perl->Isrand_called;
05ec9bb3 12231
bd81e77b
NC
12232 if (proto_perl->Ipsig_pend) {
12233 Newxz(PL_psig_pend, SIG_SIZE, int);
12234 }
12235 else {
12236 PL_psig_pend = (int*)NULL;
12237 }
05ec9bb3 12238
d525a7b2
NC
12239 if (proto_perl->Ipsig_name) {
12240 Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
12241 sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
538f2e76 12242 param);
d525a7b2 12243 PL_psig_ptr = PL_psig_name + SIG_SIZE;
bd81e77b
NC
12244 }
12245 else {
12246 PL_psig_ptr = (SV**)NULL;
12247 PL_psig_name = (SV**)NULL;
12248 }
05ec9bb3 12249
907b3e23 12250 /* intrpvar.h stuff */
1d7c1841 12251
bd81e77b
NC
12252 if (flags & CLONEf_COPY_STACKS) {
12253 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
907b3e23
DM
12254 PL_tmps_ix = proto_perl->Itmps_ix;
12255 PL_tmps_max = proto_perl->Itmps_max;
12256 PL_tmps_floor = proto_perl->Itmps_floor;
e92c6be8
NC
12257 Newx(PL_tmps_stack, PL_tmps_max, SV*);
12258 sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack, PL_tmps_ix,
12259 param);
d2d73c3e 12260
bd81e77b 12261 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
907b3e23 12262 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
bd81e77b 12263 Newxz(PL_markstack, i, I32);
907b3e23
DM
12264 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
12265 - proto_perl->Imarkstack);
12266 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
12267 - proto_perl->Imarkstack);
12268 Copy(proto_perl->Imarkstack, PL_markstack,
bd81e77b 12269 PL_markstack_ptr - PL_markstack + 1, I32);
d2d73c3e 12270
bd81e77b
NC
12271 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
12272 * NOTE: unlike the others! */
907b3e23
DM
12273 PL_scopestack_ix = proto_perl->Iscopestack_ix;
12274 PL_scopestack_max = proto_perl->Iscopestack_max;
bd81e77b 12275 Newxz(PL_scopestack, PL_scopestack_max, I32);
907b3e23 12276 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
d419787a 12277
bd81e77b 12278 /* NOTE: si_dup() looks at PL_markstack */
907b3e23 12279 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
d2d73c3e 12280
bd81e77b 12281 /* PL_curstack = PL_curstackinfo->si_stack; */
907b3e23
DM
12282 PL_curstack = av_dup(proto_perl->Icurstack, param);
12283 PL_mainstack = av_dup(proto_perl->Imainstack, param);
1d7c1841 12284
bd81e77b
NC
12285 /* next PUSHs() etc. set *(PL_stack_sp+1) */
12286 PL_stack_base = AvARRAY(PL_curstack);
907b3e23
DM
12287 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
12288 - proto_perl->Istack_base);
bd81e77b 12289 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
1d7c1841 12290
bd81e77b
NC
12291 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
12292 * NOTE: unlike the others! */
907b3e23
DM
12293 PL_savestack_ix = proto_perl->Isavestack_ix;
12294 PL_savestack_max = proto_perl->Isavestack_max;
bd81e77b
NC
12295 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
12296 PL_savestack = ss_dup(proto_perl, param);
12297 }
12298 else {
12299 init_stacks();
12300 ENTER; /* perl_destruct() wants to LEAVE; */
34394ecd
DM
12301
12302 /* although we're not duplicating the tmps stack, we should still
12303 * add entries for any SVs on the tmps stack that got cloned by a
12304 * non-refcount means (eg a temp in @_); otherwise they will be
12305 * orphaned
12306 */
907b3e23 12307 for (i = 0; i<= proto_perl->Itmps_ix; i++) {
daba3364
NC
12308 SV * const nsv = MUTABLE_SV(ptr_table_fetch(PL_ptr_table,
12309 proto_perl->Itmps_stack[i]));
34394ecd 12310 if (nsv && !SvREFCNT(nsv)) {
81041c50 12311 PUSH_EXTEND_MORTAL__SV_C(SvREFCNT_inc_simple(nsv));
34394ecd
DM
12312 }
12313 }
bd81e77b 12314 }
1d7c1841 12315
907b3e23 12316 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
bd81e77b 12317 PL_top_env = &PL_start_env;
1d7c1841 12318
907b3e23 12319 PL_op = proto_perl->Iop;
4a4c6fe3 12320
a0714e2c 12321 PL_Sv = NULL;
bd81e77b 12322 PL_Xpv = (XPV*)NULL;
24792b8d 12323 my_perl->Ina = proto_perl->Ina;
1fcf4c12 12324
907b3e23
DM
12325 PL_statbuf = proto_perl->Istatbuf;
12326 PL_statcache = proto_perl->Istatcache;
12327 PL_statgv = gv_dup(proto_perl->Istatgv, param);
12328 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
bd81e77b 12329#ifdef HAS_TIMES
907b3e23 12330 PL_timesbuf = proto_perl->Itimesbuf;
bd81e77b 12331#endif
1d7c1841 12332
907b3e23
DM
12333 PL_tainted = proto_perl->Itainted;
12334 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
12335 PL_rs = sv_dup_inc(proto_perl->Irs, param);
12336 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
907b3e23
DM
12337 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
12338 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
12339 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
12340 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
12341 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
12342
12343 PL_restartop = proto_perl->Irestartop;
12344 PL_in_eval = proto_perl->Iin_eval;
12345 PL_delaymagic = proto_perl->Idelaymagic;
12346 PL_dirty = proto_perl->Idirty;
12347 PL_localizing = proto_perl->Ilocalizing;
12348
12349 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
4608196e 12350 PL_hv_fetch_ent_mh = NULL;
907b3e23 12351 PL_modcount = proto_perl->Imodcount;
5f66b61c 12352 PL_lastgotoprobe = NULL;
907b3e23 12353 PL_dumpindent = proto_perl->Idumpindent;
1d7c1841 12354
907b3e23
DM
12355 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
12356 PL_sortstash = hv_dup(proto_perl->Isortstash, param);
12357 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param);
12358 PL_secondgv = gv_dup(proto_perl->Isecondgv, param);
bd61b366 12359 PL_efloatbuf = NULL; /* reinits on demand */
bd81e77b 12360 PL_efloatsize = 0; /* reinits on demand */
d2d73c3e 12361
bd81e77b 12362 /* regex stuff */
1d7c1841 12363
bd81e77b
NC
12364 PL_screamfirst = NULL;
12365 PL_screamnext = NULL;
12366 PL_maxscream = -1; /* reinits on demand */
a0714e2c 12367 PL_lastscream = NULL;
1d7c1841 12368
1d7c1841 12369
907b3e23 12370 PL_regdummy = proto_perl->Iregdummy;
bd81e77b
NC
12371 PL_colorset = 0; /* reinits PL_colors[] */
12372 /*PL_colors[6] = {0,0,0,0,0,0};*/
1d7c1841 12373
84da74a7 12374
1d7c1841 12375
bd81e77b 12376 /* Pluggable optimizer */
907b3e23 12377 PL_peepp = proto_perl->Ipeepp;
f37b8c3f
VP
12378 /* op_free() hook */
12379 PL_opfreehook = proto_perl->Iopfreehook;
1d7c1841 12380
bd81e77b 12381 PL_stashcache = newHV();
1d7c1841 12382
b7185faf 12383 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
907b3e23 12384 proto_perl->Iwatchaddr);
b7185faf
DM
12385 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
12386 if (PL_debug && PL_watchaddr) {
12387 PerlIO_printf(Perl_debug_log,
12388 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
907b3e23 12389 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
b7185faf
DM
12390 PTR2UV(PL_watchok));
12391 }
12392
a3e6e81e
NC
12393 PL_registered_mros = hv_dup_inc(proto_perl->Iregistered_mros, param);
12394
bd81e77b
NC
12395 /* Call the ->CLONE method, if it exists, for each of the stashes
12396 identified by sv_dup() above.
12397 */
12398 while(av_len(param->stashes) != -1) {
85fbaab2 12399 HV* const stash = MUTABLE_HV(av_shift(param->stashes));
bd81e77b
NC
12400 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12401 if (cloner && GvCV(cloner)) {
12402 dSP;
12403 ENTER;
12404 SAVETMPS;
12405 PUSHMARK(SP);
6e449a3a 12406 mXPUSHs(newSVhek(HvNAME_HEK(stash)));
bd81e77b 12407 PUTBACK;
daba3364 12408 call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
bd81e77b
NC
12409 FREETMPS;
12410 LEAVE;
12411 }
1d7c1841 12412 }
1d7c1841 12413
b0b93b3c
DM
12414 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12415 ptr_table_free(PL_ptr_table);
12416 PL_ptr_table = NULL;
12417 }
12418
12419
bd81e77b 12420 SvREFCNT_dec(param->stashes);
1d7c1841 12421
bd81e77b
NC
12422 /* orphaned? eg threads->new inside BEGIN or use */
12423 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
b37c2d43 12424 SvREFCNT_inc_simple_void(PL_compcv);
bd81e77b
NC
12425 SAVEFREESV(PL_compcv);
12426 }
dd2155a4 12427
bd81e77b
NC
12428 return my_perl;
12429}
1d7c1841 12430
bd81e77b 12431#endif /* USE_ITHREADS */
1d7c1841 12432
bd81e77b
NC
12433/*
12434=head1 Unicode Support
1d7c1841 12435
bd81e77b 12436=for apidoc sv_recode_to_utf8
1d7c1841 12437
bd81e77b
NC
12438The encoding is assumed to be an Encode object, on entry the PV
12439of the sv is assumed to be octets in that encoding, and the sv
12440will be converted into Unicode (and UTF-8).
1d7c1841 12441
bd81e77b
NC
12442If the sv already is UTF-8 (or if it is not POK), or if the encoding
12443is not a reference, nothing is done to the sv. If the encoding is not
12444an C<Encode::XS> Encoding object, bad things will happen.
12445(See F<lib/encoding.pm> and L<Encode>).
1d7c1841 12446
bd81e77b 12447The PV of the sv is returned.
1d7c1841 12448
bd81e77b 12449=cut */
1d7c1841 12450
bd81e77b
NC
12451char *
12452Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12453{
12454 dVAR;
7918f24d
NC
12455
12456 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
12457
bd81e77b
NC
12458 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12459 SV *uni;
12460 STRLEN len;
12461 const char *s;
12462 dSP;
12463 ENTER;
12464 SAVETMPS;
12465 save_re_context();
12466 PUSHMARK(sp);
12467 EXTEND(SP, 3);
12468 XPUSHs(encoding);
12469 XPUSHs(sv);
12470/*
12471 NI-S 2002/07/09
12472 Passing sv_yes is wrong - it needs to be or'ed set of constants
12473 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12474 remove converted chars from source.
1d7c1841 12475
bd81e77b 12476 Both will default the value - let them.
1d7c1841 12477
bd81e77b
NC
12478 XPUSHs(&PL_sv_yes);
12479*/
12480 PUTBACK;
12481 call_method("decode", G_SCALAR);
12482 SPAGAIN;
12483 uni = POPs;
12484 PUTBACK;
12485 s = SvPV_const(uni, len);
12486 if (s != SvPVX_const(sv)) {
12487 SvGROW(sv, len + 1);
12488 Move(s, SvPVX(sv), len + 1, char);
12489 SvCUR_set(sv, len);
12490 }
12491 FREETMPS;
12492 LEAVE;
12493 SvUTF8_on(sv);
12494 return SvPVX(sv);
389edf32 12495 }
bd81e77b
NC
12496 return SvPOKp(sv) ? SvPVX(sv) : NULL;
12497}
1d7c1841 12498
bd81e77b
NC
12499/*
12500=for apidoc sv_cat_decode
1d7c1841 12501
bd81e77b
NC
12502The encoding is assumed to be an Encode object, the PV of the ssv is
12503assumed to be octets in that encoding and decoding the input starts
12504from the position which (PV + *offset) pointed to. The dsv will be
12505concatenated the decoded UTF-8 string from ssv. Decoding will terminate
12506when the string tstr appears in decoding output or the input ends on
12507the PV of the ssv. The value which the offset points will be modified
12508to the last input position on the ssv.
1d7c1841 12509
bd81e77b 12510Returns TRUE if the terminator was found, else returns FALSE.
1d7c1841 12511
bd81e77b
NC
12512=cut */
12513
12514bool
12515Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12516 SV *ssv, int *offset, char *tstr, int tlen)
12517{
12518 dVAR;
12519 bool ret = FALSE;
7918f24d
NC
12520
12521 PERL_ARGS_ASSERT_SV_CAT_DECODE;
12522
bd81e77b
NC
12523 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12524 SV *offsv;
12525 dSP;
12526 ENTER;
12527 SAVETMPS;
12528 save_re_context();
12529 PUSHMARK(sp);
12530 EXTEND(SP, 6);
12531 XPUSHs(encoding);
12532 XPUSHs(dsv);
12533 XPUSHs(ssv);
6e449a3a
MHM
12534 offsv = newSViv(*offset);
12535 mXPUSHs(offsv);
12536 mXPUSHp(tstr, tlen);
bd81e77b
NC
12537 PUTBACK;
12538 call_method("cat_decode", G_SCALAR);
12539 SPAGAIN;
12540 ret = SvTRUE(TOPs);
12541 *offset = SvIV(offsv);
12542 PUTBACK;
12543 FREETMPS;
12544 LEAVE;
389edf32 12545 }
bd81e77b
NC
12546 else
12547 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
12548 return ret;
1d7c1841 12549
bd81e77b 12550}
1d7c1841 12551
bd81e77b
NC
12552/* ---------------------------------------------------------------------
12553 *
12554 * support functions for report_uninit()
12555 */
1d7c1841 12556
bd81e77b
NC
12557/* the maxiumum size of array or hash where we will scan looking
12558 * for the undefined element that triggered the warning */
1d7c1841 12559
bd81e77b 12560#define FUV_MAX_SEARCH_SIZE 1000
1d7c1841 12561
bd81e77b
NC
12562/* Look for an entry in the hash whose value has the same SV as val;
12563 * If so, return a mortal copy of the key. */
1d7c1841 12564
bd81e77b 12565STATIC SV*
6c1b357c 12566S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
bd81e77b
NC
12567{
12568 dVAR;
12569 register HE **array;
12570 I32 i;
6c3182a5 12571
7918f24d
NC
12572 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
12573
bd81e77b
NC
12574 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
12575 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
a0714e2c 12576 return NULL;
6c3182a5 12577
bd81e77b 12578 array = HvARRAY(hv);
6c3182a5 12579
bd81e77b
NC
12580 for (i=HvMAX(hv); i>0; i--) {
12581 register HE *entry;
12582 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
12583 if (HeVAL(entry) != val)
12584 continue;
12585 if ( HeVAL(entry) == &PL_sv_undef ||
12586 HeVAL(entry) == &PL_sv_placeholder)
12587 continue;
12588 if (!HeKEY(entry))
a0714e2c 12589 return NULL;
bd81e77b
NC
12590 if (HeKLEN(entry) == HEf_SVKEY)
12591 return sv_mortalcopy(HeKEY_sv(entry));
a663657d 12592 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
bd81e77b
NC
12593 }
12594 }
a0714e2c 12595 return NULL;
bd81e77b 12596}
6c3182a5 12597
bd81e77b
NC
12598/* Look for an entry in the array whose value has the same SV as val;
12599 * If so, return the index, otherwise return -1. */
6c3182a5 12600
bd81e77b 12601STATIC I32
6c1b357c 12602S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
bd81e77b 12603{
97aff369 12604 dVAR;
7918f24d
NC
12605
12606 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
12607
bd81e77b
NC
12608 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
12609 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
12610 return -1;
57c6e6d2 12611
4a021917
AL
12612 if (val != &PL_sv_undef) {
12613 SV ** const svp = AvARRAY(av);
12614 I32 i;
12615
12616 for (i=AvFILLp(av); i>=0; i--)
12617 if (svp[i] == val)
12618 return i;
bd81e77b
NC
12619 }
12620 return -1;
12621}
15a5279a 12622
bd81e77b
NC
12623/* S_varname(): return the name of a variable, optionally with a subscript.
12624 * If gv is non-zero, use the name of that global, along with gvtype (one
12625 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
12626 * targ. Depending on the value of the subscript_type flag, return:
12627 */
bce260cd 12628
bd81e77b
NC
12629#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
12630#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
12631#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
12632#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
bce260cd 12633
bd81e77b 12634STATIC SV*
6c1b357c
NC
12635S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
12636 const SV *const keyname, I32 aindex, int subscript_type)
bd81e77b 12637{
1d7c1841 12638
bd81e77b
NC
12639 SV * const name = sv_newmortal();
12640 if (gv) {
12641 char buffer[2];
12642 buffer[0] = gvtype;
12643 buffer[1] = 0;
1d7c1841 12644
bd81e77b 12645 /* as gv_fullname4(), but add literal '^' for $^FOO names */
66fe0623 12646
bd81e77b 12647 gv_fullname4(name, gv, buffer, 0);
1d7c1841 12648
bd81e77b
NC
12649 if ((unsigned int)SvPVX(name)[1] <= 26) {
12650 buffer[0] = '^';
12651 buffer[1] = SvPVX(name)[1] + 'A' - 1;
1d7c1841 12652
bd81e77b
NC
12653 /* Swap the 1 unprintable control character for the 2 byte pretty
12654 version - ie substr($name, 1, 1) = $buffer; */
12655 sv_insert(name, 1, 1, buffer, 2);
1d7c1841 12656 }
bd81e77b
NC
12657 }
12658 else {
289b91d9 12659 CV * const cv = find_runcv(NULL);
bd81e77b
NC
12660 SV *sv;
12661 AV *av;
1d7c1841 12662
bd81e77b 12663 if (!cv || !CvPADLIST(cv))
a0714e2c 12664 return NULL;
502c6561 12665 av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
bd81e77b 12666 sv = *av_fetch(av, targ, FALSE);
f8503592 12667 sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
bd81e77b 12668 }
1d7c1841 12669
bd81e77b 12670 if (subscript_type == FUV_SUBSCRIPT_HASH) {
561b68a9 12671 SV * const sv = newSV(0);
bd81e77b
NC
12672 *SvPVX(name) = '$';
12673 Perl_sv_catpvf(aTHX_ name, "{%s}",
12674 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
12675 SvREFCNT_dec(sv);
12676 }
12677 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
12678 *SvPVX(name) = '$';
12679 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
12680 }
84335ee9
NC
12681 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
12682 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
12683 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0);
12684 }
1d7c1841 12685
bd81e77b
NC
12686 return name;
12687}
1d7c1841 12688
1d7c1841 12689
bd81e77b
NC
12690/*
12691=for apidoc find_uninit_var
1d7c1841 12692
bd81e77b
NC
12693Find the name of the undefined variable (if any) that caused the operator o
12694to issue a "Use of uninitialized value" warning.
12695If match is true, only return a name if it's value matches uninit_sv.
12696So roughly speaking, if a unary operator (such as OP_COS) generates a
12697warning, then following the direct child of the op may yield an
12698OP_PADSV or OP_GV that gives the name of the undefined variable. On the
12699other hand, with OP_ADD there are two branches to follow, so we only print
12700the variable name if we get an exact match.
1d7c1841 12701
bd81e77b 12702The name is returned as a mortal SV.
1d7c1841 12703
bd81e77b
NC
12704Assumes that PL_op is the op that originally triggered the error, and that
12705PL_comppad/PL_curpad points to the currently executing pad.
1d7c1841 12706
bd81e77b
NC
12707=cut
12708*/
1d7c1841 12709
bd81e77b 12710STATIC SV *
6c1b357c
NC
12711S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
12712 bool match)
bd81e77b
NC
12713{
12714 dVAR;
12715 SV *sv;
6c1b357c
NC
12716 const GV *gv;
12717 const OP *o, *o2, *kid;
1d7c1841 12718
bd81e77b
NC
12719 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
12720 uninit_sv == &PL_sv_placeholder)))
a0714e2c 12721 return NULL;
1d7c1841 12722
bd81e77b 12723 switch (obase->op_type) {
1d7c1841 12724
bd81e77b
NC
12725 case OP_RV2AV:
12726 case OP_RV2HV:
12727 case OP_PADAV:
12728 case OP_PADHV:
12729 {
12730 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
12731 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
12732 I32 index = 0;
a0714e2c 12733 SV *keysv = NULL;
bd81e77b 12734 int subscript_type = FUV_SUBSCRIPT_WITHIN;
1d7c1841 12735
bd81e77b
NC
12736 if (pad) { /* @lex, %lex */
12737 sv = PAD_SVl(obase->op_targ);
a0714e2c 12738 gv = NULL;
bd81e77b
NC
12739 }
12740 else {
12741 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
12742 /* @global, %global */
12743 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
12744 if (!gv)
12745 break;
daba3364 12746 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
bd81e77b
NC
12747 }
12748 else /* @{expr}, %{expr} */
12749 return find_uninit_var(cUNOPx(obase)->op_first,
12750 uninit_sv, match);
12751 }
1d7c1841 12752
bd81e77b
NC
12753 /* attempt to find a match within the aggregate */
12754 if (hash) {
85fbaab2 12755 keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
12756 if (keysv)
12757 subscript_type = FUV_SUBSCRIPT_HASH;
12758 }
12759 else {
502c6561 12760 index = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
12761 if (index >= 0)
12762 subscript_type = FUV_SUBSCRIPT_ARRAY;
12763 }
1d7c1841 12764
bd81e77b
NC
12765 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
12766 break;
1d7c1841 12767
bd81e77b
NC
12768 return varname(gv, hash ? '%' : '@', obase->op_targ,
12769 keysv, index, subscript_type);
12770 }
1d7c1841 12771
bd81e77b
NC
12772 case OP_PADSV:
12773 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
12774 break;
a0714e2c
SS
12775 return varname(NULL, '$', obase->op_targ,
12776 NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 12777
bd81e77b
NC
12778 case OP_GVSV:
12779 gv = cGVOPx_gv(obase);
12780 if (!gv || (match && GvSV(gv) != uninit_sv))
12781 break;
a0714e2c 12782 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 12783
bd81e77b
NC
12784 case OP_AELEMFAST:
12785 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
12786 if (match) {
12787 SV **svp;
502c6561 12788 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
bd81e77b
NC
12789 if (!av || SvRMAGICAL(av))
12790 break;
12791 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12792 if (!svp || *svp != uninit_sv)
12793 break;
12794 }
a0714e2c
SS
12795 return varname(NULL, '$', obase->op_targ,
12796 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
12797 }
12798 else {
12799 gv = cGVOPx_gv(obase);
12800 if (!gv)
12801 break;
12802 if (match) {
12803 SV **svp;
6c1b357c 12804 AV *const av = GvAV(gv);
bd81e77b
NC
12805 if (!av || SvRMAGICAL(av))
12806 break;
12807 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12808 if (!svp || *svp != uninit_sv)
12809 break;
12810 }
12811 return varname(gv, '$', 0,
a0714e2c 12812 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
12813 }
12814 break;
1d7c1841 12815
bd81e77b
NC
12816 case OP_EXISTS:
12817 o = cUNOPx(obase)->op_first;
12818 if (!o || o->op_type != OP_NULL ||
12819 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
12820 break;
12821 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
a2efc822 12822
bd81e77b
NC
12823 case OP_AELEM:
12824 case OP_HELEM:
12825 if (PL_op == obase)
12826 /* $a[uninit_expr] or $h{uninit_expr} */
12827 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
081fc587 12828
a0714e2c 12829 gv = NULL;
bd81e77b
NC
12830 o = cBINOPx(obase)->op_first;
12831 kid = cBINOPx(obase)->op_last;
8cf8f3d1 12832
bd81e77b 12833 /* get the av or hv, and optionally the gv */
a0714e2c 12834 sv = NULL;
bd81e77b
NC
12835 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
12836 sv = PAD_SV(o->op_targ);
12837 }
12838 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
12839 && cUNOPo->op_first->op_type == OP_GV)
12840 {
12841 gv = cGVOPx_gv(cUNOPo->op_first);
12842 if (!gv)
12843 break;
daba3364
NC
12844 sv = o->op_type
12845 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
bd81e77b
NC
12846 }
12847 if (!sv)
12848 break;
12849
12850 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
12851 /* index is constant */
12852 if (match) {
12853 if (SvMAGICAL(sv))
12854 break;
12855 if (obase->op_type == OP_HELEM) {
85fbaab2 12856 HE* he = hv_fetch_ent(MUTABLE_HV(sv), cSVOPx_sv(kid), 0, 0);
bd81e77b
NC
12857 if (!he || HeVAL(he) != uninit_sv)
12858 break;
12859 }
12860 else {
502c6561 12861 SV * const * const svp = av_fetch(MUTABLE_AV(sv), SvIV(cSVOPx_sv(kid)), FALSE);
bd81e77b
NC
12862 if (!svp || *svp != uninit_sv)
12863 break;
12864 }
12865 }
12866 if (obase->op_type == OP_HELEM)
12867 return varname(gv, '%', o->op_targ,
12868 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
12869 else
a0714e2c 12870 return varname(gv, '@', o->op_targ, NULL,
bd81e77b 12871 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
12872 }
12873 else {
12874 /* index is an expression;
12875 * attempt to find a match within the aggregate */
12876 if (obase->op_type == OP_HELEM) {
85fbaab2 12877 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
12878 if (keysv)
12879 return varname(gv, '%', o->op_targ,
12880 keysv, 0, FUV_SUBSCRIPT_HASH);
12881 }
12882 else {
502c6561
NC
12883 const I32 index
12884 = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
12885 if (index >= 0)
12886 return varname(gv, '@', o->op_targ,
a0714e2c 12887 NULL, index, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
12888 }
12889 if (match)
12890 break;
12891 return varname(gv,
12892 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
12893 ? '@' : '%',
a0714e2c 12894 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
f284b03f 12895 }
bd81e77b 12896 break;
dc507217 12897
bd81e77b
NC
12898 case OP_AASSIGN:
12899 /* only examine RHS */
12900 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
6d26897e 12901
bd81e77b
NC
12902 case OP_OPEN:
12903 o = cUNOPx(obase)->op_first;
12904 if (o->op_type == OP_PUSHMARK)
12905 o = o->op_sibling;
1d7c1841 12906
bd81e77b
NC
12907 if (!o->op_sibling) {
12908 /* one-arg version of open is highly magical */
a0ae6670 12909
bd81e77b
NC
12910 if (o->op_type == OP_GV) { /* open FOO; */
12911 gv = cGVOPx_gv(o);
12912 if (match && GvSV(gv) != uninit_sv)
12913 break;
12914 return varname(gv, '$', 0,
a0714e2c 12915 NULL, 0, FUV_SUBSCRIPT_NONE);
bd81e77b
NC
12916 }
12917 /* other possibilities not handled are:
12918 * open $x; or open my $x; should return '${*$x}'
12919 * open expr; should return '$'.expr ideally
12920 */
12921 break;
12922 }
12923 goto do_op;
ccfc67b7 12924
bd81e77b
NC
12925 /* ops where $_ may be an implicit arg */
12926 case OP_TRANS:
12927 case OP_SUBST:
12928 case OP_MATCH:
12929 if ( !(obase->op_flags & OPf_STACKED)) {
12930 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
12931 ? PAD_SVl(obase->op_targ)
12932 : DEFSV))
12933 {
12934 sv = sv_newmortal();
76f68e9b 12935 sv_setpvs(sv, "$_");
bd81e77b
NC
12936 return sv;
12937 }
12938 }
12939 goto do_op;
9f4817db 12940
bd81e77b
NC
12941 case OP_PRTF:
12942 case OP_PRINT:
3ef1310e 12943 case OP_SAY:
fa8d1836 12944 match = 1; /* print etc can return undef on defined args */
bd81e77b
NC
12945 /* skip filehandle as it can't produce 'undef' warning */
12946 o = cUNOPx(obase)->op_first;
12947 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
12948 o = o->op_sibling->op_sibling;
12949 goto do_op2;
9f4817db 12950
9f4817db 12951
50edf520 12952 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
bd81e77b 12953 case OP_RV2SV:
8b0dea50
DM
12954 case OP_CUSTOM: /* XS or custom code could trigger random warnings */
12955
12956 /* the following ops are capable of returning PL_sv_undef even for
12957 * defined arg(s) */
12958
12959 case OP_BACKTICK:
12960 case OP_PIPE_OP:
12961 case OP_FILENO:
12962 case OP_BINMODE:
12963 case OP_TIED:
12964 case OP_GETC:
12965 case OP_SYSREAD:
12966 case OP_SEND:
12967 case OP_IOCTL:
12968 case OP_SOCKET:
12969 case OP_SOCKPAIR:
12970 case OP_BIND:
12971 case OP_CONNECT:
12972 case OP_LISTEN:
12973 case OP_ACCEPT:
12974 case OP_SHUTDOWN:
12975 case OP_SSOCKOPT:
12976 case OP_GETPEERNAME:
12977 case OP_FTRREAD:
12978 case OP_FTRWRITE:
12979 case OP_FTREXEC:
12980 case OP_FTROWNED:
12981 case OP_FTEREAD:
12982 case OP_FTEWRITE:
12983 case OP_FTEEXEC:
12984 case OP_FTEOWNED:
12985 case OP_FTIS:
12986 case OP_FTZERO:
12987 case OP_FTSIZE:
12988 case OP_FTFILE:
12989 case OP_FTDIR:
12990 case OP_FTLINK:
12991 case OP_FTPIPE:
12992 case OP_FTSOCK:
12993 case OP_FTBLK:
12994 case OP_FTCHR:
12995 case OP_FTTTY:
12996 case OP_FTSUID:
12997 case OP_FTSGID:
12998 case OP_FTSVTX:
12999 case OP_FTTEXT:
13000 case OP_FTBINARY:
13001 case OP_FTMTIME:
13002 case OP_FTATIME:
13003 case OP_FTCTIME:
13004 case OP_READLINK:
13005 case OP_OPEN_DIR:
13006 case OP_READDIR:
13007 case OP_TELLDIR:
13008 case OP_SEEKDIR:
13009 case OP_REWINDDIR:
13010 case OP_CLOSEDIR:
13011 case OP_GMTIME:
13012 case OP_ALARM:
13013 case OP_SEMGET:
13014 case OP_GETLOGIN:
13015 case OP_UNDEF:
13016 case OP_SUBSTR:
13017 case OP_AEACH:
13018 case OP_EACH:
13019 case OP_SORT:
13020 case OP_CALLER:
13021 case OP_DOFILE:
fa8d1836
DM
13022 case OP_PROTOTYPE:
13023 case OP_NCMP:
13024 case OP_SMARTMATCH:
13025 case OP_UNPACK:
13026 case OP_SYSOPEN:
13027 case OP_SYSSEEK:
8b0dea50 13028 match = 1;
bd81e77b 13029 goto do_op;
9f4817db 13030
7697b7e7
DM
13031 case OP_ENTERSUB:
13032 case OP_GOTO:
a2fb3d36
DM
13033 /* XXX tmp hack: these two may call an XS sub, and currently
13034 XS subs don't have a SUB entry on the context stack, so CV and
13035 pad determination goes wrong, and BAD things happen. So, just
13036 don't try to determine the value under those circumstances.
7697b7e7
DM
13037 Need a better fix at dome point. DAPM 11/2007 */
13038 break;
13039
4f187fc9
VP
13040 case OP_FLIP:
13041 case OP_FLOP:
13042 {
13043 GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
13044 if (gv && GvSV(gv) == uninit_sv)
13045 return newSVpvs_flags("$.", SVs_TEMP);
13046 goto do_op;
13047 }
8b0dea50 13048
cc4b8646
DM
13049 case OP_POS:
13050 /* def-ness of rval pos() is independent of the def-ness of its arg */
13051 if ( !(obase->op_flags & OPf_MOD))
13052 break;
13053
bd81e77b
NC
13054 case OP_SCHOMP:
13055 case OP_CHOMP:
13056 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
84bafc02 13057 return newSVpvs_flags("${$/}", SVs_TEMP);
5f66b61c 13058 /*FALLTHROUGH*/
5d170f3a 13059
bd81e77b
NC
13060 default:
13061 do_op:
13062 if (!(obase->op_flags & OPf_KIDS))
13063 break;
13064 o = cUNOPx(obase)->op_first;
13065
13066 do_op2:
13067 if (!o)
13068 break;
f9893866 13069
bd81e77b
NC
13070 /* if all except one arg are constant, or have no side-effects,
13071 * or are optimized away, then it's unambiguous */
5f66b61c 13072 o2 = NULL;
bd81e77b 13073 for (kid=o; kid; kid = kid->op_sibling) {
e15d5972
AL
13074 if (kid) {
13075 const OPCODE type = kid->op_type;
13076 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
13077 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
13078 || (type == OP_PUSHMARK)
bd81e77b 13079 )
bd81e77b 13080 continue;
e15d5972 13081 }
bd81e77b 13082 if (o2) { /* more than one found */
5f66b61c 13083 o2 = NULL;
bd81e77b
NC
13084 break;
13085 }
13086 o2 = kid;
13087 }
13088 if (o2)
13089 return find_uninit_var(o2, uninit_sv, match);
7a5fa8a2 13090
bd81e77b
NC
13091 /* scan all args */
13092 while (o) {
13093 sv = find_uninit_var(o, uninit_sv, 1);
13094 if (sv)
13095 return sv;
13096 o = o->op_sibling;
d0063567 13097 }
bd81e77b 13098 break;
f9893866 13099 }
a0714e2c 13100 return NULL;
9f4817db
JH
13101}
13102
220e2d4e 13103
bd81e77b
NC
13104/*
13105=for apidoc report_uninit
68795e93 13106
bd81e77b 13107Print appropriate "Use of uninitialized variable" warning
220e2d4e 13108
bd81e77b
NC
13109=cut
13110*/
220e2d4e 13111
bd81e77b 13112void
b3dbd76e 13113Perl_report_uninit(pTHX_ const SV *uninit_sv)
220e2d4e 13114{
97aff369 13115 dVAR;
bd81e77b 13116 if (PL_op) {
a0714e2c 13117 SV* varname = NULL;
bd81e77b
NC
13118 if (uninit_sv) {
13119 varname = find_uninit_var(PL_op, uninit_sv,0);
13120 if (varname)
13121 sv_insert(varname, 0, 0, " ", 1);
13122 }
13123 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13124 varname ? SvPV_nolen_const(varname) : "",
13125 " in ", OP_DESC(PL_op));
220e2d4e 13126 }
a73e8557 13127 else
bd81e77b
NC
13128 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13129 "", "", "");
220e2d4e 13130}
f9893866 13131
241d1a3b
NC
13132/*
13133 * Local variables:
13134 * c-indentation-style: bsd
13135 * c-basic-offset: 4
13136 * indent-tabs-mode: t
13137 * End:
13138 *
37442d52
RGS
13139 * ex: set ts=8 sts=4 sw=4 noet:
13140 */