This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perlhack: Add reference to TAP for test protocol
[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) {
9b387841
NC
356 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
357 "Attempt to free non-arena SV: 0x%"UVxf
358 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
a0d0e21e
LW
359 return;
360 }
361 }
4561caa4 362 plant_SV(p);
463ee0b2 363}
a0d0e21e 364
4561caa4
CS
365#else /* ! DEBUGGING */
366
367#define del_SV(p) plant_SV(p)
368
369#endif /* DEBUGGING */
463ee0b2 370
645c22ef
DM
371
372/*
ccfc67b7
JH
373=head1 SV Manipulation Functions
374
645c22ef
DM
375=for apidoc sv_add_arena
376
377Given a chunk of memory, link it to the head of the list of arenas,
378and split it into a list of free SVs.
379
380=cut
381*/
382
d2bd4e7f
NC
383static void
384S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
463ee0b2 385{
97aff369 386 dVAR;
daba3364 387 SV *const sva = MUTABLE_SV(ptr);
463ee0b2
LW
388 register SV* sv;
389 register SV* svend;
4633a7c4 390
7918f24d
NC
391 PERL_ARGS_ASSERT_SV_ADD_ARENA;
392
4633a7c4 393 /* The first SV in an arena isn't an SV. */
3280af22 394 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
4633a7c4
LW
395 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
396 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
397
3280af22
NIS
398 PL_sv_arenaroot = sva;
399 PL_sv_root = sva + 1;
4633a7c4
LW
400
401 svend = &sva[SvREFCNT(sva) - 1];
402 sv = sva + 1;
463ee0b2 403 while (sv < svend) {
3eef1deb 404 SvARENA_CHAIN_SET(sv, (sv + 1));
03e36789 405#ifdef DEBUGGING
978b032e 406 SvREFCNT(sv) = 0;
03e36789 407#endif
4b69cbe3 408 /* Must always set typemask because it's always checked in on cleanup
03e36789 409 when the arenas are walked looking for objects. */
8990e307 410 SvFLAGS(sv) = SVTYPEMASK;
463ee0b2
LW
411 sv++;
412 }
3eef1deb 413 SvARENA_CHAIN_SET(sv, 0);
03e36789
NC
414#ifdef DEBUGGING
415 SvREFCNT(sv) = 0;
416#endif
4633a7c4
LW
417 SvFLAGS(sv) = SVTYPEMASK;
418}
419
055972dc
DM
420/* visit(): call the named function for each non-free SV in the arenas
421 * whose flags field matches the flags/mask args. */
645c22ef 422
5226ed68 423STATIC I32
de37a194 424S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
8990e307 425{
97aff369 426 dVAR;
4633a7c4 427 SV* sva;
5226ed68 428 I32 visited = 0;
8990e307 429
7918f24d
NC
430 PERL_ARGS_ASSERT_VISIT;
431
daba3364 432 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
53c1dcc0 433 register const SV * const svend = &sva[SvREFCNT(sva)];
a3b680e6 434 register SV* sv;
4561caa4 435 for (sv = sva + 1; sv < svend; ++sv) {
055972dc
DM
436 if (SvTYPE(sv) != SVTYPEMASK
437 && (sv->sv_flags & mask) == flags
438 && SvREFCNT(sv))
439 {
acfe0abc 440 (FCALL)(aTHX_ sv);
5226ed68
JH
441 ++visited;
442 }
8990e307
LW
443 }
444 }
5226ed68 445 return visited;
8990e307
LW
446}
447
758a08c3
JH
448#ifdef DEBUGGING
449
645c22ef
DM
450/* called by sv_report_used() for each live SV */
451
452static void
5fa45a31 453do_report_used(pTHX_ SV *const sv)
645c22ef
DM
454{
455 if (SvTYPE(sv) != SVTYPEMASK) {
456 PerlIO_printf(Perl_debug_log, "****\n");
457 sv_dump(sv);
458 }
459}
758a08c3 460#endif
645c22ef
DM
461
462/*
463=for apidoc sv_report_used
464
465Dump the contents of all SVs not yet freed. (Debugging aid).
466
467=cut
468*/
469
8990e307 470void
864dbfa3 471Perl_sv_report_used(pTHX)
4561caa4 472{
ff270d3a 473#ifdef DEBUGGING
055972dc 474 visit(do_report_used, 0, 0);
96a5add6
AL
475#else
476 PERL_UNUSED_CONTEXT;
ff270d3a 477#endif
4561caa4
CS
478}
479
645c22ef
DM
480/* called by sv_clean_objs() for each live SV */
481
482static void
de37a194 483do_clean_objs(pTHX_ SV *const ref)
645c22ef 484{
97aff369 485 dVAR;
ea724faa
NC
486 assert (SvROK(ref));
487 {
823a54a3
AL
488 SV * const target = SvRV(ref);
489 if (SvOBJECT(target)) {
490 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
491 if (SvWEAKREF(ref)) {
492 sv_del_backref(target, ref);
493 SvWEAKREF_off(ref);
494 SvRV_set(ref, NULL);
495 } else {
496 SvROK_off(ref);
497 SvRV_set(ref, NULL);
498 SvREFCNT_dec(target);
499 }
645c22ef
DM
500 }
501 }
502
503 /* XXX Might want to check arrays, etc. */
504}
505
506/* called by sv_clean_objs() for each live SV */
507
508#ifndef DISABLE_DESTRUCTOR_KLUDGE
509static void
f30de749 510do_clean_named_objs(pTHX_ SV *const sv)
645c22ef 511{
97aff369 512 dVAR;
ea724faa 513 assert(SvTYPE(sv) == SVt_PVGV);
d011219a
NC
514 assert(isGV_with_GP(sv));
515 if (GvGP(sv)) {
c69033f2
NC
516 if ((
517#ifdef PERL_DONT_CREATE_GVSV
518 GvSV(sv) &&
519#endif
520 SvOBJECT(GvSV(sv))) ||
645c22ef
DM
521 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
522 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9c12f1e5
RGS
523 /* In certain rare cases GvIOp(sv) can be NULL, which would make SvOBJECT(GvIO(sv)) dereference NULL. */
524 (GvIO(sv) ? (SvFLAGS(GvIOp(sv)) & SVs_OBJECT) : 0) ||
645c22ef
DM
525 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
526 {
527 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
ec5f3c78 528 SvFLAGS(sv) |= SVf_BREAK;
645c22ef
DM
529 SvREFCNT_dec(sv);
530 }
531 }
532}
533#endif
534
535/*
536=for apidoc sv_clean_objs
537
538Attempt to destroy all objects not yet freed
539
540=cut
541*/
542
4561caa4 543void
864dbfa3 544Perl_sv_clean_objs(pTHX)
4561caa4 545{
97aff369 546 dVAR;
3280af22 547 PL_in_clean_objs = TRUE;
055972dc 548 visit(do_clean_objs, SVf_ROK, SVf_ROK);
4561caa4 549#ifndef DISABLE_DESTRUCTOR_KLUDGE
2d0f3c12 550 /* some barnacles may yet remain, clinging to typeglobs */
d011219a 551 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
4561caa4 552#endif
3280af22 553 PL_in_clean_objs = FALSE;
4561caa4
CS
554}
555
645c22ef
DM
556/* called by sv_clean_all() for each live SV */
557
558static void
de37a194 559do_clean_all(pTHX_ SV *const sv)
645c22ef 560{
97aff369 561 dVAR;
daba3364 562 if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
cddfcddc 563 /* don't clean pid table and strtab */
d17ea597 564 return;
cddfcddc 565 }
645c22ef
DM
566 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
567 SvFLAGS(sv) |= SVf_BREAK;
568 SvREFCNT_dec(sv);
569}
570
571/*
572=for apidoc sv_clean_all
573
574Decrement the refcnt of each remaining SV, possibly triggering a
575cleanup. This function may have to be called multiple times to free
ff276b08 576SVs which are in complex self-referential hierarchies.
645c22ef
DM
577
578=cut
579*/
580
5226ed68 581I32
864dbfa3 582Perl_sv_clean_all(pTHX)
8990e307 583{
97aff369 584 dVAR;
5226ed68 585 I32 cleaned;
3280af22 586 PL_in_clean_all = TRUE;
055972dc 587 cleaned = visit(do_clean_all, 0,0);
3280af22 588 PL_in_clean_all = FALSE;
5226ed68 589 return cleaned;
8990e307 590}
463ee0b2 591
5e258f8c
JC
592/*
593 ARENASETS: a meta-arena implementation which separates arena-info
594 into struct arena_set, which contains an array of struct
595 arena_descs, each holding info for a single arena. By separating
596 the meta-info from the arena, we recover the 1st slot, formerly
597 borrowed for list management. The arena_set is about the size of an
39244528 598 arena, avoiding the needless malloc overhead of a naive linked-list.
5e258f8c
JC
599
600 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
601 memory in the last arena-set (1/2 on average). In trade, we get
602 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
d2a0f284 603 smaller types). The recovery of the wasted space allows use of
e15dad31
JC
604 small arenas for large, rare body types, by changing array* fields
605 in body_details_by_type[] below.
5e258f8c 606*/
5e258f8c 607struct arena_desc {
398c677b
NC
608 char *arena; /* the raw storage, allocated aligned */
609 size_t size; /* its size ~4k typ */
e5973ed5 610 svtype utype; /* bodytype stored in arena */
5e258f8c
JC
611};
612
e6148039
NC
613struct arena_set;
614
615/* Get the maximum number of elements in set[] such that struct arena_set
e15dad31 616 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
e6148039
NC
617 therefore likely to be 1 aligned memory page. */
618
619#define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
620 - 2 * sizeof(int)) / sizeof (struct arena_desc))
5e258f8c
JC
621
622struct arena_set {
623 struct arena_set* next;
0a848332
NC
624 unsigned int set_size; /* ie ARENAS_PER_SET */
625 unsigned int curr; /* index of next available arena-desc */
5e258f8c
JC
626 struct arena_desc set[ARENAS_PER_SET];
627};
628
645c22ef
DM
629/*
630=for apidoc sv_free_arenas
631
632Deallocate the memory used by all arenas. Note that all the individual SV
633heads and bodies within the arenas must already have been freed.
634
635=cut
636*/
4633a7c4 637void
864dbfa3 638Perl_sv_free_arenas(pTHX)
4633a7c4 639{
97aff369 640 dVAR;
4633a7c4
LW
641 SV* sva;
642 SV* svanext;
0a848332 643 unsigned int i;
4633a7c4
LW
644
645 /* Free arenas here, but be careful about fake ones. (We assume
646 contiguity of the fake ones with the corresponding real ones.) */
647
3280af22 648 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
daba3364 649 svanext = MUTABLE_SV(SvANY(sva));
4633a7c4 650 while (svanext && SvFAKE(svanext))
daba3364 651 svanext = MUTABLE_SV(SvANY(svanext));
4633a7c4
LW
652
653 if (!SvFAKE(sva))
1df70142 654 Safefree(sva);
4633a7c4 655 }
93e68bfb 656
5e258f8c 657 {
0a848332
NC
658 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
659
660 while (aroot) {
661 struct arena_set *current = aroot;
662 i = aroot->curr;
663 while (i--) {
5e258f8c
JC
664 assert(aroot->set[i].arena);
665 Safefree(aroot->set[i].arena);
666 }
0a848332
NC
667 aroot = aroot->next;
668 Safefree(current);
5e258f8c
JC
669 }
670 }
dc8220bf 671 PL_body_arenas = 0;
fdda85ca 672
0a848332
NC
673 i = PERL_ARENA_ROOTS_SIZE;
674 while (i--)
93e68bfb 675 PL_body_roots[i] = 0;
93e68bfb 676
43c5f42d 677 Safefree(PL_nice_chunk);
bd61b366 678 PL_nice_chunk = NULL;
3280af22
NIS
679 PL_nice_chunk_size = 0;
680 PL_sv_arenaroot = 0;
681 PL_sv_root = 0;
4633a7c4
LW
682}
683
bd81e77b
NC
684/*
685 Here are mid-level routines that manage the allocation of bodies out
686 of the various arenas. There are 5 kinds of arenas:
29489e7c 687
bd81e77b
NC
688 1. SV-head arenas, which are discussed and handled above
689 2. regular body arenas
690 3. arenas for reduced-size bodies
691 4. Hash-Entry arenas
29489e7c 692
bd81e77b
NC
693 Arena types 2 & 3 are chained by body-type off an array of
694 arena-root pointers, which is indexed by svtype. Some of the
695 larger/less used body types are malloced singly, since a large
696 unused block of them is wasteful. Also, several svtypes dont have
697 bodies; the data fits into the sv-head itself. The arena-root
698 pointer thus has a few unused root-pointers (which may be hijacked
699 later for arena types 4,5)
29489e7c 700
bd81e77b
NC
701 3 differs from 2 as an optimization; some body types have several
702 unused fields in the front of the structure (which are kept in-place
703 for consistency). These bodies can be allocated in smaller chunks,
704 because the leading fields arent accessed. Pointers to such bodies
705 are decremented to point at the unused 'ghost' memory, knowing that
706 the pointers are used with offsets to the real memory.
29489e7c 707
bd81e77b
NC
708 HE, HEK arenas are managed separately, with separate code, but may
709 be merge-able later..
bd81e77b
NC
710*/
711
bd26d9a3 712/* get_arena(size): this creates custom-sized arenas
5e258f8c
JC
713 TBD: export properly for hv.c: S_more_he().
714*/
715void*
e5973ed5 716Perl_get_arena(pTHX_ const size_t arena_size, const svtype bodytype)
5e258f8c 717{
7a89be66 718 dVAR;
5e258f8c 719 struct arena_desc* adesc;
39244528 720 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
0a848332 721 unsigned int curr;
5e258f8c 722
476a1e16
JC
723 /* shouldnt need this
724 if (!arena_size) arena_size = PERL_ARENA_SIZE;
725 */
5e258f8c
JC
726
727 /* may need new arena-set to hold new arena */
39244528
NC
728 if (!aroot || aroot->curr >= aroot->set_size) {
729 struct arena_set *newroot;
5e258f8c
JC
730 Newxz(newroot, 1, struct arena_set);
731 newroot->set_size = ARENAS_PER_SET;
39244528
NC
732 newroot->next = aroot;
733 aroot = newroot;
734 PL_body_arenas = (void *) newroot;
52944de8 735 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
5e258f8c
JC
736 }
737
738 /* ok, now have arena-set with at least 1 empty/available arena-desc */
39244528
NC
739 curr = aroot->curr++;
740 adesc = &(aroot->set[curr]);
5e258f8c
JC
741 assert(!adesc->arena);
742
89086707 743 Newx(adesc->arena, arena_size, char);
5e258f8c 744 adesc->size = arena_size;
e5973ed5 745 adesc->utype = bodytype;
d67b3c53
JH
746 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n",
747 curr, (void*)adesc->arena, (UV)arena_size));
5e258f8c
JC
748
749 return adesc->arena;
5e258f8c
JC
750}
751
53c1dcc0 752
bd81e77b 753/* return a thing to the free list */
29489e7c 754
bd81e77b
NC
755#define del_body(thing, root) \
756 STMT_START { \
00b6aa41 757 void ** const thing_copy = (void **)thing;\
bd81e77b
NC
758 *thing_copy = *root; \
759 *root = (void*)thing_copy; \
bd81e77b 760 } STMT_END
29489e7c 761
bd81e77b 762/*
d2a0f284
JC
763
764=head1 SV-Body Allocation
765
766Allocation of SV-bodies is similar to SV-heads, differing as follows;
767the allocation mechanism is used for many body types, so is somewhat
768more complicated, it uses arena-sets, and has no need for still-live
769SV detection.
770
771At the outermost level, (new|del)_X*V macros return bodies of the
772appropriate type. These macros call either (new|del)_body_type or
773(new|del)_body_allocated macro pairs, depending on specifics of the
774type. Most body types use the former pair, the latter pair is used to
775allocate body types with "ghost fields".
776
777"ghost fields" are fields that are unused in certain types, and
69ba284b 778consequently don't need to actually exist. They are declared because
d2a0f284
JC
779they're part of a "base type", which allows use of functions as
780methods. The simplest examples are AVs and HVs, 2 aggregate types
781which don't use the fields which support SCALAR semantics.
782
69ba284b 783For these types, the arenas are carved up into appropriately sized
d2a0f284
JC
784chunks, we thus avoid wasted memory for those unaccessed members.
785When bodies are allocated, we adjust the pointer back in memory by the
69ba284b 786size of the part not allocated, so it's as if we allocated the full
d2a0f284
JC
787structure. (But things will all go boom if you write to the part that
788is "not there", because you'll be overwriting the last members of the
789preceding structure in memory.)
790
69ba284b
NC
791We calculate the correction using the STRUCT_OFFSET macro on the first
792member present. If the allocated structure is smaller (no initial NV
793actually allocated) then the net effect is to subtract the size of the NV
794from the pointer, to return a new pointer as if an initial NV were actually
795allocated. (We were using structures named *_allocated for this, but
796this turned out to be a subtle bug, because a structure without an NV
797could have a lower alignment constraint, but the compiler is allowed to
798optimised accesses based on the alignment constraint of the actual pointer
799to the full structure, for example, using a single 64 bit load instruction
800because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
d2a0f284
JC
801
802This is the same trick as was used for NV and IV bodies. Ironically it
803doesn't need to be used for NV bodies any more, because NV is now at
804the start of the structure. IV bodies don't need it either, because
805they are no longer allocated.
806
807In turn, the new_body_* allocators call S_new_body(), which invokes
808new_body_inline macro, which takes a lock, and takes a body off the
809linked list at PL_body_roots[sv_type], calling S_more_bodies() if
810necessary to refresh an empty list. Then the lock is released, and
811the body is returned.
812
813S_more_bodies calls get_arena(), and carves it up into an array of N
814bodies, which it strings into a linked list. It looks up arena-size
815and body-size from the body_details table described below, thus
816supporting the multiple body-types.
817
818If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
819the (new|del)_X*V macros are mapped directly to malloc/free.
820
821*/
822
823/*
824
825For each sv-type, struct body_details bodies_by_type[] carries
826parameters which control these aspects of SV handling:
827
828Arena_size determines whether arenas are used for this body type, and if
829so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
830zero, forcing individual mallocs and frees.
831
832Body_size determines how big a body is, and therefore how many fit into
833each arena. Offset carries the body-pointer adjustment needed for
69ba284b 834"ghost fields", and is used in *_allocated macros.
d2a0f284
JC
835
836But its main purpose is to parameterize info needed in
837Perl_sv_upgrade(). The info here dramatically simplifies the function
69ba284b 838vs the implementation in 5.8.8, making it table-driven. All fields
d2a0f284
JC
839are used for this, except for arena_size.
840
841For the sv-types that have no bodies, arenas are not used, so those
842PL_body_roots[sv_type] are unused, and can be overloaded. In
843something of a special case, SVt_NULL is borrowed for HE arenas;
c6f8b1d0 844PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
d2a0f284 845bodies_by_type[SVt_NULL] slot is not used, as the table is not
c6f8b1d0 846available in hv.c.
d2a0f284 847
29489e7c
DM
848*/
849
bd81e77b 850struct body_details {
0fb58b32 851 U8 body_size; /* Size to allocate */
10666ae3 852 U8 copy; /* Size of structure to copy (may be shorter) */
0fb58b32 853 U8 offset;
10666ae3
NC
854 unsigned int type : 4; /* We have space for a sanity check. */
855 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
856 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
857 unsigned int arena : 1; /* Allocated from an arena */
858 size_t arena_size; /* Size of arena to allocate */
bd81e77b 859};
29489e7c 860
bd81e77b
NC
861#define HADNV FALSE
862#define NONV TRUE
29489e7c 863
d2a0f284 864
bd81e77b
NC
865#ifdef PURIFY
866/* With -DPURFIY we allocate everything directly, and don't use arenas.
867 This seems a rather elegant way to simplify some of the code below. */
868#define HASARENA FALSE
869#else
870#define HASARENA TRUE
871#endif
872#define NOARENA FALSE
29489e7c 873
d2a0f284
JC
874/* Size the arenas to exactly fit a given number of bodies. A count
875 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
876 simplifying the default. If count > 0, the arena is sized to fit
877 only that many bodies, allowing arenas to be used for large, rare
878 bodies (XPVFM, XPVIO) without undue waste. The arena size is
879 limited by PERL_ARENA_SIZE, so we can safely oversize the
880 declarations.
881 */
95db5f15
MB
882#define FIT_ARENA0(body_size) \
883 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
884#define FIT_ARENAn(count,body_size) \
885 ( count * body_size <= PERL_ARENA_SIZE) \
886 ? count * body_size \
887 : FIT_ARENA0 (body_size)
888#define FIT_ARENA(count,body_size) \
889 count \
890 ? FIT_ARENAn (count, body_size) \
891 : FIT_ARENA0 (body_size)
d2a0f284 892
bd81e77b
NC
893/* Calculate the length to copy. Specifically work out the length less any
894 final padding the compiler needed to add. See the comment in sv_upgrade
895 for why copying the padding proved to be a bug. */
29489e7c 896
bd81e77b
NC
897#define copy_length(type, last_member) \
898 STRUCT_OFFSET(type, last_member) \
daba3364 899 + sizeof (((type*)SvANY((const SV *)0))->last_member)
29489e7c 900
bd81e77b 901static const struct body_details bodies_by_type[] = {
10666ae3
NC
902 { sizeof(HE), 0, 0, SVt_NULL,
903 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
d2a0f284 904
1cb9cd50 905 /* The bind placeholder pretends to be an RV for now.
c6f8b1d0 906 Also it's marked as "can't upgrade" to stop anyone using it before it's
1cb9cd50
NC
907 implemented. */
908 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
909
db93c0c4
NC
910 /* IVs are in the head, so the allocation size is 0. */
911 { 0,
d2a0f284 912 sizeof(IV), /* This is used to copy out the IV body. */
10666ae3 913 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
db93c0c4 914 NOARENA /* IVS don't need an arena */, 0
d2a0f284
JC
915 },
916
bd81e77b 917 /* 8 bytes on most ILP32 with IEEE doubles */
6e128786
NC
918 { sizeof(NV), sizeof(NV),
919 STRUCT_OFFSET(XPVNV, xnv_u),
920 SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
d2a0f284 921
bd81e77b 922 /* 8 bytes on most ILP32 with IEEE doubles */
601dfd0a 923 { sizeof(XPV),
889d28b2
NC
924 copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
925 + STRUCT_OFFSET(XPV, xpv_cur),
69ba284b 926 SVt_PV, FALSE, NONV, HASARENA,
889d28b2 927 FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
d2a0f284 928
889d28b2 929#if 2 *PTRSIZE <= IVSIZE
bd81e77b 930 /* 12 */
601dfd0a 931 { sizeof(XPVIV),
889d28b2
NC
932 copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
933 + STRUCT_OFFSET(XPV, xpv_cur),
934 SVt_PVIV, FALSE, NONV, HASARENA,
935 FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
936 /* 12 */
937#else
938 { sizeof(XPVIV),
601dfd0a
NC
939 copy_length(XPVIV, xiv_u),
940 0,
69ba284b 941 SVt_PVIV, FALSE, NONV, HASARENA,
889d28b2
NC
942 FIT_ARENA(0, sizeof(XPVIV)) },
943#endif
d2a0f284 944
889d28b2
NC
945#if (2 *PTRSIZE <= IVSIZE) && (2 *PTRSIZE <= NVSIZE)
946 /* 20 */
947 { sizeof(XPVNV),
948 copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
949 + STRUCT_OFFSET(XPV, xpv_cur),
950 SVt_PVNV, FALSE, HADNV, HASARENA,
951 FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
952#else
bd81e77b 953 /* 20 */
6e128786 954 { sizeof(XPVNV), copy_length(XPVNV, xnv_u), 0, SVt_PVNV, FALSE, HADNV,
d2a0f284 955 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
889d28b2 956#endif
d2a0f284 957
bd81e77b 958 /* 28 */
6e128786 959 { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
d2a0f284 960 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
4df7f6af 961
288b8c02 962 /* something big */
601dfd0a
NC
963 { sizeof(regexp),
964 sizeof(regexp),
965 0,
08e44740 966 SVt_REGEXP, FALSE, NONV, HASARENA,
b6f60916 967 FIT_ARENA(0, sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur))
5c35adbb 968 },
4df7f6af 969
bd81e77b 970 /* 48 */
10666ae3 971 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
d2a0f284
JC
972 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
973
bd81e77b 974 /* 64 */
10666ae3 975 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
d2a0f284
JC
976 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
977
601dfd0a 978 { sizeof(XPVAV),
4f7003f5 979 copy_length(XPVAV, xav_alloc),
601dfd0a 980 0,
69ba284b 981 SVt_PVAV, TRUE, NONV, HASARENA,
601dfd0a 982 FIT_ARENA(0, sizeof(XPVAV)) },
d2a0f284 983
601dfd0a 984 { sizeof(XPVHV),
359164a0 985 copy_length(XPVHV, xhv_max),
601dfd0a 986 0,
69ba284b 987 SVt_PVHV, TRUE, NONV, HASARENA,
601dfd0a 988 FIT_ARENA(0, sizeof(XPVHV)) },
d2a0f284 989
c84c4652 990 /* 56 */
601dfd0a
NC
991 { sizeof(XPVCV),
992 sizeof(XPVCV),
993 0,
69ba284b 994 SVt_PVCV, TRUE, NONV, HASARENA,
601dfd0a 995 FIT_ARENA(0, sizeof(XPVCV)) },
69ba284b 996
601dfd0a
NC
997 { sizeof(XPVFM),
998 sizeof(XPVFM),
999 0,
69ba284b 1000 SVt_PVFM, TRUE, NONV, NOARENA,
601dfd0a 1001 FIT_ARENA(20, sizeof(XPVFM)) },
d2a0f284
JC
1002
1003 /* XPVIO is 84 bytes, fits 48x */
601dfd0a
NC
1004 { sizeof(XPVIO),
1005 sizeof(XPVIO),
1006 0,
b6f60916 1007 SVt_PVIO, TRUE, NONV, HASARENA,
601dfd0a 1008 FIT_ARENA(24, sizeof(XPVIO)) },
bd81e77b 1009};
29489e7c 1010
bd81e77b 1011#define new_body_allocated(sv_type) \
d2a0f284 1012 (void *)((char *)S_new_body(aTHX_ sv_type) \
bd81e77b 1013 - bodies_by_type[sv_type].offset)
29489e7c 1014
bd81e77b
NC
1015#define del_body_allocated(p, sv_type) \
1016 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
29489e7c 1017
29489e7c 1018
bd81e77b
NC
1019#define my_safemalloc(s) (void*)safemalloc(s)
1020#define my_safecalloc(s) (void*)safecalloc(s, 1)
1021#define my_safefree(p) safefree((char*)p)
29489e7c 1022
bd81e77b 1023#ifdef PURIFY
29489e7c 1024
bd81e77b
NC
1025#define new_XNV() my_safemalloc(sizeof(XPVNV))
1026#define del_XNV(p) my_safefree(p)
29489e7c 1027
bd81e77b
NC
1028#define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1029#define del_XPVNV(p) my_safefree(p)
29489e7c 1030
bd81e77b
NC
1031#define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1032#define del_XPVAV(p) my_safefree(p)
29489e7c 1033
bd81e77b
NC
1034#define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1035#define del_XPVHV(p) my_safefree(p)
29489e7c 1036
bd81e77b
NC
1037#define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1038#define del_XPVMG(p) my_safefree(p)
29489e7c 1039
bd81e77b
NC
1040#define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1041#define del_XPVGV(p) my_safefree(p)
29489e7c 1042
bd81e77b 1043#else /* !PURIFY */
29489e7c 1044
65ac1738
NC
1045#define new_XNV() new_body_allocated(SVt_NV)
1046#define del_XNV(p) del_body_allocated(p, SVt_NV)
29489e7c 1047
65ac1738
NC
1048#define new_XPVNV() new_body_allocated(SVt_PVNV)
1049#define del_XPVNV(p) del_body_allocated(p, SVt_PVNV)
29489e7c 1050
bd81e77b
NC
1051#define new_XPVAV() new_body_allocated(SVt_PVAV)
1052#define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
645c22ef 1053
bd81e77b
NC
1054#define new_XPVHV() new_body_allocated(SVt_PVHV)
1055#define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
645c22ef 1056
65ac1738
NC
1057#define new_XPVMG() new_body_allocated(SVt_PVMG)
1058#define del_XPVMG(p) del_body_allocated(p, SVt_PVMG)
645c22ef 1059
65ac1738
NC
1060#define new_XPVGV() new_body_allocated(SVt_PVGV)
1061#define del_XPVGV(p) del_body_allocated(p, SVt_PVGV)
1d7c1841 1062
bd81e77b 1063#endif /* PURIFY */
93e68bfb 1064
bd81e77b 1065/* no arena for you! */
93e68bfb 1066
bd81e77b 1067#define new_NOARENA(details) \
d2a0f284 1068 my_safemalloc((details)->body_size + (details)->offset)
bd81e77b 1069#define new_NOARENAZ(details) \
d2a0f284
JC
1070 my_safecalloc((details)->body_size + (details)->offset)
1071
1072STATIC void *
de37a194 1073S_more_bodies (pTHX_ const svtype sv_type)
d2a0f284
JC
1074{
1075 dVAR;
1076 void ** const root = &PL_body_roots[sv_type];
96a5add6 1077 const struct body_details * const bdp = &bodies_by_type[sv_type];
d2a0f284
JC
1078 const size_t body_size = bdp->body_size;
1079 char *start;
1080 const char *end;
d8fca402 1081 const size_t arena_size = Perl_malloc_good_size(bdp->arena_size);
0b2d3faa 1082#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
23e9d66c
NC
1083 static bool done_sanity_check;
1084
0b2d3faa
JH
1085 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1086 * variables like done_sanity_check. */
10666ae3 1087 if (!done_sanity_check) {
ea471437 1088 unsigned int i = SVt_LAST;
10666ae3
NC
1089
1090 done_sanity_check = TRUE;
1091
1092 while (i--)
1093 assert (bodies_by_type[i].type == i);
1094 }
1095#endif
1096
23e9d66c
NC
1097 assert(bdp->arena_size);
1098
d8fca402 1099 start = (char*) Perl_get_arena(aTHX_ arena_size, sv_type);
d2a0f284 1100
d8fca402 1101 end = start + arena_size - 2 * body_size;
d2a0f284 1102
d2a0f284 1103 /* computed count doesnt reflect the 1st slot reservation */
d8fca402
NC
1104#if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1105 DEBUG_m(PerlIO_printf(Perl_debug_log,
1106 "arena %p end %p arena-size %d (from %d) type %d "
1107 "size %d ct %d\n",
1108 (void*)start, (void*)end, (int)arena_size,
1109 (int)bdp->arena_size, sv_type, (int)body_size,
1110 (int)arena_size / (int)body_size));
1111#else
d2a0f284
JC
1112 DEBUG_m(PerlIO_printf(Perl_debug_log,
1113 "arena %p end %p arena-size %d type %d size %d ct %d\n",
6c9570dc 1114 (void*)start, (void*)end,
0e84aef4
JH
1115 (int)bdp->arena_size, sv_type, (int)body_size,
1116 (int)bdp->arena_size / (int)body_size));
d8fca402 1117#endif
d2a0f284
JC
1118 *root = (void *)start;
1119
d8fca402 1120 while (start <= end) {
d2a0f284
JC
1121 char * const next = start + body_size;
1122 *(void**) start = (void *)next;
1123 start = next;
1124 }
1125 *(void **)start = 0;
1126
1127 return *root;
1128}
1129
1130/* grab a new thing from the free list, allocating more if necessary.
1131 The inline version is used for speed in hot routines, and the
1132 function using it serves the rest (unless PURIFY).
1133*/
1134#define new_body_inline(xpv, sv_type) \
1135 STMT_START { \
1136 void ** const r3wt = &PL_body_roots[sv_type]; \
11b79775
DD
1137 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1138 ? *((void **)(r3wt)) : more_bodies(sv_type)); \
d2a0f284 1139 *(r3wt) = *(void**)(xpv); \
d2a0f284
JC
1140 } STMT_END
1141
1142#ifndef PURIFY
1143
1144STATIC void *
de37a194 1145S_new_body(pTHX_ const svtype sv_type)
d2a0f284
JC
1146{
1147 dVAR;
1148 void *xpv;
1149 new_body_inline(xpv, sv_type);
1150 return xpv;
1151}
1152
1153#endif
93e68bfb 1154
238b27b3
NC
1155static const struct body_details fake_rv =
1156 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1157
bd81e77b
NC
1158/*
1159=for apidoc sv_upgrade
93e68bfb 1160
bd81e77b
NC
1161Upgrade an SV to a more complex form. Generally adds a new body type to the
1162SV, then copies across as much information as possible from the old body.
1163You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
93e68bfb 1164
bd81e77b 1165=cut
93e68bfb 1166*/
93e68bfb 1167
bd81e77b 1168void
aad570aa 1169Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
cac9b346 1170{
97aff369 1171 dVAR;
bd81e77b
NC
1172 void* old_body;
1173 void* new_body;
42d0e0b7 1174 const svtype old_type = SvTYPE(sv);
d2a0f284 1175 const struct body_details *new_type_details;
238b27b3 1176 const struct body_details *old_type_details
bd81e77b 1177 = bodies_by_type + old_type;
4df7f6af 1178 SV *referant = NULL;
cac9b346 1179
7918f24d
NC
1180 PERL_ARGS_ASSERT_SV_UPGRADE;
1181
1776cbe8
NC
1182 if (old_type == new_type)
1183 return;
1184
1185 /* This clause was purposefully added ahead of the early return above to
1186 the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1187 inference by Nick I-S that it would fix other troublesome cases. See
1188 changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1189
1190 Given that shared hash key scalars are no longer PVIV, but PV, there is
1191 no longer need to unshare so as to free up the IVX slot for its proper
1192 purpose. So it's safe to move the early return earlier. */
1193
bd81e77b
NC
1194 if (new_type != SVt_PV && SvIsCOW(sv)) {
1195 sv_force_normal_flags(sv, 0);
1196 }
cac9b346 1197
bd81e77b 1198 old_body = SvANY(sv);
de042e1d 1199
bd81e77b
NC
1200 /* Copying structures onto other structures that have been neatly zeroed
1201 has a subtle gotcha. Consider XPVMG
cac9b346 1202
bd81e77b
NC
1203 +------+------+------+------+------+-------+-------+
1204 | NV | CUR | LEN | IV | MAGIC | STASH |
1205 +------+------+------+------+------+-------+-------+
1206 0 4 8 12 16 20 24 28
645c22ef 1207
bd81e77b
NC
1208 where NVs are aligned to 8 bytes, so that sizeof that structure is
1209 actually 32 bytes long, with 4 bytes of padding at the end:
08742458 1210
bd81e77b
NC
1211 +------+------+------+------+------+-------+-------+------+
1212 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1213 +------+------+------+------+------+-------+-------+------+
1214 0 4 8 12 16 20 24 28 32
08742458 1215
bd81e77b 1216 so what happens if you allocate memory for this structure:
30f9da9e 1217
bd81e77b
NC
1218 +------+------+------+------+------+-------+-------+------+------+...
1219 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1220 +------+------+------+------+------+-------+-------+------+------+...
1221 0 4 8 12 16 20 24 28 32 36
bfc44f79 1222
bd81e77b
NC
1223 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1224 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1225 started out as zero once, but it's quite possible that it isn't. So now,
1226 rather than a nicely zeroed GP, you have it pointing somewhere random.
1227 Bugs ensue.
bfc44f79 1228
bd81e77b
NC
1229 (In fact, GP ends up pointing at a previous GP structure, because the
1230 principle cause of the padding in XPVMG getting garbage is a copy of
6c9e42f7
NC
1231 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1232 this happens to be moot because XPVGV has been re-ordered, with GP
1233 no longer after STASH)
30f9da9e 1234
bd81e77b
NC
1235 So we are careful and work out the size of used parts of all the
1236 structures. */
bfc44f79 1237
bd81e77b
NC
1238 switch (old_type) {
1239 case SVt_NULL:
1240 break;
1241 case SVt_IV:
4df7f6af
NC
1242 if (SvROK(sv)) {
1243 referant = SvRV(sv);
238b27b3
NC
1244 old_type_details = &fake_rv;
1245 if (new_type == SVt_NV)
1246 new_type = SVt_PVNV;
4df7f6af
NC
1247 } else {
1248 if (new_type < SVt_PVIV) {
1249 new_type = (new_type == SVt_NV)
1250 ? SVt_PVNV : SVt_PVIV;
1251 }
bd81e77b
NC
1252 }
1253 break;
1254 case SVt_NV:
1255 if (new_type < SVt_PVNV) {
1256 new_type = SVt_PVNV;
bd81e77b
NC
1257 }
1258 break;
bd81e77b
NC
1259 case SVt_PV:
1260 assert(new_type > SVt_PV);
1261 assert(SVt_IV < SVt_PV);
1262 assert(SVt_NV < SVt_PV);
1263 break;
1264 case SVt_PVIV:
1265 break;
1266 case SVt_PVNV:
1267 break;
1268 case SVt_PVMG:
1269 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1270 there's no way that it can be safely upgraded, because perl.c
1271 expects to Safefree(SvANY(PL_mess_sv)) */
1272 assert(sv != PL_mess_sv);
1273 /* This flag bit is used to mean other things in other scalar types.
1274 Given that it only has meaning inside the pad, it shouldn't be set
1275 on anything that can get upgraded. */
00b1698f 1276 assert(!SvPAD_TYPED(sv));
bd81e77b
NC
1277 break;
1278 default:
1279 if (old_type_details->cant_upgrade)
c81225bc
NC
1280 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1281 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
bd81e77b 1282 }
3376de98
NC
1283
1284 if (old_type > new_type)
1285 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1286 (int)old_type, (int)new_type);
1287
2fa1109b 1288 new_type_details = bodies_by_type + new_type;
645c22ef 1289
bd81e77b
NC
1290 SvFLAGS(sv) &= ~SVTYPEMASK;
1291 SvFLAGS(sv) |= new_type;
932e9ff9 1292
ab4416c0
NC
1293 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1294 the return statements above will have triggered. */
1295 assert (new_type != SVt_NULL);
bd81e77b 1296 switch (new_type) {
bd81e77b
NC
1297 case SVt_IV:
1298 assert(old_type == SVt_NULL);
1299 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1300 SvIV_set(sv, 0);
1301 return;
1302 case SVt_NV:
1303 assert(old_type == SVt_NULL);
1304 SvANY(sv) = new_XNV();
1305 SvNV_set(sv, 0);
1306 return;
bd81e77b 1307 case SVt_PVHV:
bd81e77b 1308 case SVt_PVAV:
d2a0f284 1309 assert(new_type_details->body_size);
c1ae03ae
NC
1310
1311#ifndef PURIFY
1312 assert(new_type_details->arena);
d2a0f284 1313 assert(new_type_details->arena_size);
c1ae03ae 1314 /* This points to the start of the allocated area. */
d2a0f284
JC
1315 new_body_inline(new_body, new_type);
1316 Zero(new_body, new_type_details->body_size, char);
c1ae03ae
NC
1317 new_body = ((char *)new_body) - new_type_details->offset;
1318#else
1319 /* We always allocated the full length item with PURIFY. To do this
1320 we fake things so that arena is false for all 16 types.. */
1321 new_body = new_NOARENAZ(new_type_details);
1322#endif
1323 SvANY(sv) = new_body;
1324 if (new_type == SVt_PVAV) {
1325 AvMAX(sv) = -1;
1326 AvFILLp(sv) = -1;
1327 AvREAL_only(sv);
64484faa 1328 if (old_type_details->body_size) {
ac572bf4
NC
1329 AvALLOC(sv) = 0;
1330 } else {
1331 /* It will have been zeroed when the new body was allocated.
1332 Lets not write to it, in case it confuses a write-back
1333 cache. */
1334 }
78ac7dd9
NC
1335 } else {
1336 assert(!SvOK(sv));
1337 SvOK_off(sv);
1338#ifndef NODEFAULT_SHAREKEYS
1339 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1340#endif
1341 HvMAX(sv) = 7; /* (start with 8 buckets) */
c1ae03ae 1342 }
aeb18a1e 1343
bd81e77b
NC
1344 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1345 The target created by newSVrv also is, and it can have magic.
1346 However, it never has SvPVX set.
1347 */
4df7f6af
NC
1348 if (old_type == SVt_IV) {
1349 assert(!SvROK(sv));
1350 } else if (old_type >= SVt_PV) {
bd81e77b
NC
1351 assert(SvPVX_const(sv) == 0);
1352 }
aeb18a1e 1353
bd81e77b 1354 if (old_type >= SVt_PVMG) {
e736a858 1355 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
bd81e77b 1356 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
797c7171
NC
1357 } else {
1358 sv->sv_u.svu_array = NULL; /* or svu_hash */
bd81e77b
NC
1359 }
1360 break;
93e68bfb 1361
93e68bfb 1362
b9ad13ac
NC
1363 case SVt_REGEXP:
1364 /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1365 sv_force_normal_flags(sv) is called. */
1366 SvFAKE_on(sv);
bd81e77b
NC
1367 case SVt_PVIV:
1368 /* XXX Is this still needed? Was it ever needed? Surely as there is
1369 no route from NV to PVIV, NOK can never be true */
1370 assert(!SvNOKp(sv));
1371 assert(!SvNOK(sv));
1372 case SVt_PVIO:
1373 case SVt_PVFM:
bd81e77b
NC
1374 case SVt_PVGV:
1375 case SVt_PVCV:
1376 case SVt_PVLV:
1377 case SVt_PVMG:
1378 case SVt_PVNV:
1379 case SVt_PV:
93e68bfb 1380
d2a0f284 1381 assert(new_type_details->body_size);
bd81e77b
NC
1382 /* We always allocated the full length item with PURIFY. To do this
1383 we fake things so that arena is false for all 16 types.. */
1384 if(new_type_details->arena) {
1385 /* This points to the start of the allocated area. */
d2a0f284
JC
1386 new_body_inline(new_body, new_type);
1387 Zero(new_body, new_type_details->body_size, char);
bd81e77b
NC
1388 new_body = ((char *)new_body) - new_type_details->offset;
1389 } else {
1390 new_body = new_NOARENAZ(new_type_details);
1391 }
1392 SvANY(sv) = new_body;
5e2fc214 1393
bd81e77b 1394 if (old_type_details->copy) {
f9ba3d20
NC
1395 /* There is now the potential for an upgrade from something without
1396 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1397 int offset = old_type_details->offset;
1398 int length = old_type_details->copy;
1399
1400 if (new_type_details->offset > old_type_details->offset) {
d4c19fe8 1401 const int difference
f9ba3d20
NC
1402 = new_type_details->offset - old_type_details->offset;
1403 offset += difference;
1404 length -= difference;
1405 }
1406 assert (length >= 0);
1407
1408 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1409 char);
bd81e77b
NC
1410 }
1411
1412#ifndef NV_ZERO_IS_ALLBITS_ZERO
f2524eef 1413 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
e5ce394c
NC
1414 * correct 0.0 for us. Otherwise, if the old body didn't have an
1415 * NV slot, but the new one does, then we need to initialise the
1416 * freshly created NV slot with whatever the correct bit pattern is
1417 * for 0.0 */
e22a937e
NC
1418 if (old_type_details->zero_nv && !new_type_details->zero_nv
1419 && !isGV_with_GP(sv))
bd81e77b 1420 SvNV_set(sv, 0);
82048762 1421#endif
5e2fc214 1422
85dca89a
NC
1423 if (new_type == SVt_PVIO) {
1424 IO * const io = MUTABLE_IO(sv);
d963bf01 1425 GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
85dca89a
NC
1426
1427 SvOBJECT_on(io);
1428 /* Clear the stashcache because a new IO could overrule a package
1429 name */
1430 hv_clear(PL_stashcache);
1431
85dca89a 1432 SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
f2524eef 1433 IoPAGE_LEN(sv) = 60;
85dca89a 1434 }
4df7f6af
NC
1435 if (old_type < SVt_PV) {
1436 /* referant will be NULL unless the old type was SVt_IV emulating
1437 SVt_RV */
1438 sv->sv_u.svu_rv = referant;
1439 }
bd81e77b
NC
1440 break;
1441 default:
afd78fd5
JH
1442 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1443 (unsigned long)new_type);
bd81e77b 1444 }
73171d91 1445
db93c0c4 1446 if (old_type > SVt_IV) {
bd81e77b
NC
1447#ifdef PURIFY
1448 my_safefree(old_body);
1449#else
bc786448
GG
1450 /* Note that there is an assumption that all bodies of types that
1451 can be upgraded came from arenas. Only the more complex non-
1452 upgradable types are allowed to be directly malloc()ed. */
1453 assert(old_type_details->arena);
bd81e77b
NC
1454 del_body((void*)((char*)old_body + old_type_details->offset),
1455 &PL_body_roots[old_type]);
1456#endif
1457 }
1458}
73171d91 1459
bd81e77b
NC
1460/*
1461=for apidoc sv_backoff
73171d91 1462
bd81e77b
NC
1463Remove any string offset. You should normally use the C<SvOOK_off> macro
1464wrapper instead.
73171d91 1465
bd81e77b 1466=cut
73171d91
NC
1467*/
1468
bd81e77b 1469int
aad570aa 1470Perl_sv_backoff(pTHX_ register SV *const sv)
bd81e77b 1471{
69240efd 1472 STRLEN delta;
7a4bba22 1473 const char * const s = SvPVX_const(sv);
7918f24d
NC
1474
1475 PERL_ARGS_ASSERT_SV_BACKOFF;
96a5add6 1476 PERL_UNUSED_CONTEXT;
7918f24d 1477
bd81e77b
NC
1478 assert(SvOOK(sv));
1479 assert(SvTYPE(sv) != SVt_PVHV);
1480 assert(SvTYPE(sv) != SVt_PVAV);
7a4bba22 1481
69240efd
NC
1482 SvOOK_offset(sv, delta);
1483
7a4bba22
NC
1484 SvLEN_set(sv, SvLEN(sv) + delta);
1485 SvPV_set(sv, SvPVX(sv) - delta);
1486 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
bd81e77b
NC
1487 SvFLAGS(sv) &= ~SVf_OOK;
1488 return 0;
1489}
73171d91 1490
bd81e77b
NC
1491/*
1492=for apidoc sv_grow
73171d91 1493
bd81e77b
NC
1494Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1495upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1496Use the C<SvGROW> wrapper instead.
93e68bfb 1497
bd81e77b
NC
1498=cut
1499*/
93e68bfb 1500
bd81e77b 1501char *
aad570aa 1502Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
bd81e77b
NC
1503{
1504 register char *s;
93e68bfb 1505
7918f24d
NC
1506 PERL_ARGS_ASSERT_SV_GROW;
1507
5db06880
NC
1508 if (PL_madskills && newlen >= 0x100000) {
1509 PerlIO_printf(Perl_debug_log,
1510 "Allocation too large: %"UVxf"\n", (UV)newlen);
1511 }
bd81e77b
NC
1512#ifdef HAS_64K_LIMIT
1513 if (newlen >= 0x10000) {
1514 PerlIO_printf(Perl_debug_log,
1515 "Allocation too large: %"UVxf"\n", (UV)newlen);
1516 my_exit(1);
1517 }
1518#endif /* HAS_64K_LIMIT */
1519 if (SvROK(sv))
1520 sv_unref(sv);
1521 if (SvTYPE(sv) < SVt_PV) {
1522 sv_upgrade(sv, SVt_PV);
1523 s = SvPVX_mutable(sv);
1524 }
1525 else if (SvOOK(sv)) { /* pv is offset? */
1526 sv_backoff(sv);
1527 s = SvPVX_mutable(sv);
1528 if (newlen > SvLEN(sv))
1529 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1530#ifdef HAS_64K_LIMIT
1531 if (newlen >= 0x10000)
1532 newlen = 0xFFFF;
1533#endif
1534 }
1535 else
1536 s = SvPVX_mutable(sv);
aeb18a1e 1537
bd81e77b 1538 if (newlen > SvLEN(sv)) { /* need more room? */
aedff202 1539#ifndef Perl_safesysmalloc_size
bd81e77b 1540 newlen = PERL_STRLEN_ROUNDUP(newlen);
bd81e77b 1541#endif
98653f18 1542 if (SvLEN(sv) && s) {
10edeb5d 1543 s = (char*)saferealloc(s, newlen);
bd81e77b
NC
1544 }
1545 else {
10edeb5d 1546 s = (char*)safemalloc(newlen);
bd81e77b
NC
1547 if (SvPVX_const(sv) && SvCUR(sv)) {
1548 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1549 }
1550 }
1551 SvPV_set(sv, s);
ca7c1a29 1552#ifdef Perl_safesysmalloc_size
98653f18
NC
1553 /* Do this here, do it once, do it right, and then we will never get
1554 called back into sv_grow() unless there really is some growing
1555 needed. */
ca7c1a29 1556 SvLEN_set(sv, Perl_safesysmalloc_size(s));
98653f18 1557#else
bd81e77b 1558 SvLEN_set(sv, newlen);
98653f18 1559#endif
bd81e77b
NC
1560 }
1561 return s;
1562}
aeb18a1e 1563
bd81e77b
NC
1564/*
1565=for apidoc sv_setiv
932e9ff9 1566
bd81e77b
NC
1567Copies an integer into the given SV, upgrading first if necessary.
1568Does not handle 'set' magic. See also C<sv_setiv_mg>.
463ee0b2 1569
bd81e77b
NC
1570=cut
1571*/
463ee0b2 1572
bd81e77b 1573void
aad570aa 1574Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
bd81e77b 1575{
97aff369 1576 dVAR;
7918f24d
NC
1577
1578 PERL_ARGS_ASSERT_SV_SETIV;
1579
bd81e77b
NC
1580 SV_CHECK_THINKFIRST_COW_DROP(sv);
1581 switch (SvTYPE(sv)) {
1582 case SVt_NULL:
bd81e77b 1583 case SVt_NV:
3376de98 1584 sv_upgrade(sv, SVt_IV);
bd81e77b 1585 break;
bd81e77b
NC
1586 case SVt_PV:
1587 sv_upgrade(sv, SVt_PVIV);
1588 break;
463ee0b2 1589
bd81e77b 1590 case SVt_PVGV:
6e592b3a
BM
1591 if (!isGV_with_GP(sv))
1592 break;
bd81e77b
NC
1593 case SVt_PVAV:
1594 case SVt_PVHV:
1595 case SVt_PVCV:
1596 case SVt_PVFM:
1597 case SVt_PVIO:
1598 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1599 OP_DESC(PL_op));
42d0e0b7 1600 default: NOOP;
bd81e77b
NC
1601 }
1602 (void)SvIOK_only(sv); /* validate number */
1603 SvIV_set(sv, i);
1604 SvTAINT(sv);
1605}
932e9ff9 1606
bd81e77b
NC
1607/*
1608=for apidoc sv_setiv_mg
d33b2eba 1609
bd81e77b 1610Like C<sv_setiv>, but also handles 'set' magic.
1c846c1f 1611
bd81e77b
NC
1612=cut
1613*/
d33b2eba 1614
bd81e77b 1615void
aad570aa 1616Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
bd81e77b 1617{
7918f24d
NC
1618 PERL_ARGS_ASSERT_SV_SETIV_MG;
1619
bd81e77b
NC
1620 sv_setiv(sv,i);
1621 SvSETMAGIC(sv);
1622}
727879eb 1623
bd81e77b
NC
1624/*
1625=for apidoc sv_setuv
d33b2eba 1626
bd81e77b
NC
1627Copies an unsigned integer into the given SV, upgrading first if necessary.
1628Does not handle 'set' magic. See also C<sv_setuv_mg>.
9b94d1dd 1629
bd81e77b
NC
1630=cut
1631*/
d33b2eba 1632
bd81e77b 1633void
aad570aa 1634Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
bd81e77b 1635{
7918f24d
NC
1636 PERL_ARGS_ASSERT_SV_SETUV;
1637
bd81e77b
NC
1638 /* With these two if statements:
1639 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
d33b2eba 1640
bd81e77b
NC
1641 without
1642 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1c846c1f 1643
bd81e77b
NC
1644 If you wish to remove them, please benchmark to see what the effect is
1645 */
1646 if (u <= (UV)IV_MAX) {
1647 sv_setiv(sv, (IV)u);
1648 return;
1649 }
1650 sv_setiv(sv, 0);
1651 SvIsUV_on(sv);
1652 SvUV_set(sv, u);
1653}
d33b2eba 1654
bd81e77b
NC
1655/*
1656=for apidoc sv_setuv_mg
727879eb 1657
bd81e77b 1658Like C<sv_setuv>, but also handles 'set' magic.
9b94d1dd 1659
bd81e77b
NC
1660=cut
1661*/
5e2fc214 1662
bd81e77b 1663void
aad570aa 1664Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
bd81e77b 1665{
7918f24d
NC
1666 PERL_ARGS_ASSERT_SV_SETUV_MG;
1667
bd81e77b
NC
1668 sv_setuv(sv,u);
1669 SvSETMAGIC(sv);
1670}
5e2fc214 1671
954c1994 1672/*
bd81e77b 1673=for apidoc sv_setnv
954c1994 1674
bd81e77b
NC
1675Copies a double into the given SV, upgrading first if necessary.
1676Does not handle 'set' magic. See also C<sv_setnv_mg>.
954c1994
GS
1677
1678=cut
1679*/
1680
63f97190 1681void
aad570aa 1682Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
79072805 1683{
97aff369 1684 dVAR;
7918f24d
NC
1685
1686 PERL_ARGS_ASSERT_SV_SETNV;
1687
bd81e77b
NC
1688 SV_CHECK_THINKFIRST_COW_DROP(sv);
1689 switch (SvTYPE(sv)) {
79072805 1690 case SVt_NULL:
79072805 1691 case SVt_IV:
bd81e77b 1692 sv_upgrade(sv, SVt_NV);
79072805
LW
1693 break;
1694 case SVt_PV:
79072805 1695 case SVt_PVIV:
bd81e77b 1696 sv_upgrade(sv, SVt_PVNV);
79072805 1697 break;
bd4b1eb5 1698
bd4b1eb5 1699 case SVt_PVGV:
6e592b3a
BM
1700 if (!isGV_with_GP(sv))
1701 break;
bd81e77b
NC
1702 case SVt_PVAV:
1703 case SVt_PVHV:
79072805 1704 case SVt_PVCV:
bd81e77b
NC
1705 case SVt_PVFM:
1706 case SVt_PVIO:
1707 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
94bbb3f4 1708 OP_DESC(PL_op));
42d0e0b7 1709 default: NOOP;
2068cd4d 1710 }
bd81e77b
NC
1711 SvNV_set(sv, num);
1712 (void)SvNOK_only(sv); /* validate number */
1713 SvTAINT(sv);
79072805
LW
1714}
1715
645c22ef 1716/*
bd81e77b 1717=for apidoc sv_setnv_mg
645c22ef 1718
bd81e77b 1719Like C<sv_setnv>, but also handles 'set' magic.
645c22ef
DM
1720
1721=cut
1722*/
1723
bd81e77b 1724void
aad570aa 1725Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
79072805 1726{
7918f24d
NC
1727 PERL_ARGS_ASSERT_SV_SETNV_MG;
1728
bd81e77b
NC
1729 sv_setnv(sv,num);
1730 SvSETMAGIC(sv);
79072805
LW
1731}
1732
bd81e77b
NC
1733/* Print an "isn't numeric" warning, using a cleaned-up,
1734 * printable version of the offending string
1735 */
954c1994 1736
bd81e77b 1737STATIC void
aad570aa 1738S_not_a_number(pTHX_ SV *const sv)
79072805 1739{
97aff369 1740 dVAR;
bd81e77b
NC
1741 SV *dsv;
1742 char tmpbuf[64];
1743 const char *pv;
94463019 1744
7918f24d
NC
1745 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1746
94463019 1747 if (DO_UTF8(sv)) {
84bafc02 1748 dsv = newSVpvs_flags("", SVs_TEMP);
94463019
JH
1749 pv = sv_uni_display(dsv, sv, 10, 0);
1750 } else {
1751 char *d = tmpbuf;
551405c4 1752 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
94463019
JH
1753 /* each *s can expand to 4 chars + "...\0",
1754 i.e. need room for 8 chars */
ecdeb87c 1755
00b6aa41
AL
1756 const char *s = SvPVX_const(sv);
1757 const char * const end = s + SvCUR(sv);
1758 for ( ; s < end && d < limit; s++ ) {
94463019
JH
1759 int ch = *s & 0xFF;
1760 if (ch & 128 && !isPRINT_LC(ch)) {
1761 *d++ = 'M';
1762 *d++ = '-';
1763 ch &= 127;
1764 }
1765 if (ch == '\n') {
1766 *d++ = '\\';
1767 *d++ = 'n';
1768 }
1769 else if (ch == '\r') {
1770 *d++ = '\\';
1771 *d++ = 'r';
1772 }
1773 else if (ch == '\f') {
1774 *d++ = '\\';
1775 *d++ = 'f';
1776 }
1777 else if (ch == '\\') {
1778 *d++ = '\\';
1779 *d++ = '\\';
1780 }
1781 else if (ch == '\0') {
1782 *d++ = '\\';
1783 *d++ = '0';
1784 }
1785 else if (isPRINT_LC(ch))
1786 *d++ = ch;
1787 else {
1788 *d++ = '^';
1789 *d++ = toCTRL(ch);
1790 }
1791 }
1792 if (s < end) {
1793 *d++ = '.';
1794 *d++ = '.';
1795 *d++ = '.';
1796 }
1797 *d = '\0';
1798 pv = tmpbuf;
a0d0e21e 1799 }
a0d0e21e 1800
533c011a 1801 if (PL_op)
9014280d 1802 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019
JH
1803 "Argument \"%s\" isn't numeric in %s", pv,
1804 OP_DESC(PL_op));
a0d0e21e 1805 else
9014280d 1806 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019 1807 "Argument \"%s\" isn't numeric", pv);
a0d0e21e
LW
1808}
1809
c2988b20
NC
1810/*
1811=for apidoc looks_like_number
1812
645c22ef
DM
1813Test if the content of an SV looks like a number (or is a number).
1814C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1815non-numeric warning), even if your atof() doesn't grok them.
c2988b20
NC
1816
1817=cut
1818*/
1819
1820I32
aad570aa 1821Perl_looks_like_number(pTHX_ SV *const sv)
c2988b20 1822{
a3b680e6 1823 register const char *sbegin;
c2988b20
NC
1824 STRLEN len;
1825
7918f24d
NC
1826 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1827
c2988b20 1828 if (SvPOK(sv)) {
3f7c398e 1829 sbegin = SvPVX_const(sv);
c2988b20
NC
1830 len = SvCUR(sv);
1831 }
1832 else if (SvPOKp(sv))
83003860 1833 sbegin = SvPV_const(sv, len);
c2988b20 1834 else
e0ab1c0e 1835 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
c2988b20
NC
1836 return grok_number(sbegin, len, NULL);
1837}
25da4f38 1838
19f6321d
NC
1839STATIC bool
1840S_glob_2number(pTHX_ GV * const gv)
180488f8
NC
1841{
1842 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1843 SV *const buffer = sv_newmortal();
1844
7918f24d
NC
1845 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1846
180488f8
NC
1847 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1848 is on. */
1849 SvFAKE_off(gv);
1850 gv_efullname3(buffer, gv, "*");
1851 SvFLAGS(gv) |= wasfake;
1852
675c862f
AL
1853 /* We know that all GVs stringify to something that is not-a-number,
1854 so no need to test that. */
1855 if (ckWARN(WARN_NUMERIC))
1856 not_a_number(buffer);
1857 /* We just want something true to return, so that S_sv_2iuv_common
1858 can tail call us and return true. */
19f6321d 1859 return TRUE;
675c862f
AL
1860}
1861
25da4f38
IZ
1862/* Actually, ISO C leaves conversion of UV to IV undefined, but
1863 until proven guilty, assume that things are not that bad... */
1864
645c22ef
DM
1865/*
1866 NV_PRESERVES_UV:
1867
1868 As 64 bit platforms often have an NV that doesn't preserve all bits of
28e5dec8
JH
1869 an IV (an assumption perl has been based on to date) it becomes necessary
1870 to remove the assumption that the NV always carries enough precision to
1871 recreate the IV whenever needed, and that the NV is the canonical form.
1872 Instead, IV/UV and NV need to be given equal rights. So as to not lose
645c22ef 1873 precision as a side effect of conversion (which would lead to insanity
28e5dec8
JH
1874 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1875 1) to distinguish between IV/UV/NV slots that have cached a valid
1876 conversion where precision was lost and IV/UV/NV slots that have a
1877 valid conversion which has lost no precision
645c22ef 1878 2) to ensure that if a numeric conversion to one form is requested that
28e5dec8
JH
1879 would lose precision, the precise conversion (or differently
1880 imprecise conversion) is also performed and cached, to prevent
1881 requests for different numeric formats on the same SV causing
1882 lossy conversion chains. (lossless conversion chains are perfectly
1883 acceptable (still))
1884
1885
1886 flags are used:
1887 SvIOKp is true if the IV slot contains a valid value
1888 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1889 SvNOKp is true if the NV slot contains a valid value
1890 SvNOK is true only if the NV value is accurate
1891
1892 so
645c22ef 1893 while converting from PV to NV, check to see if converting that NV to an
28e5dec8
JH
1894 IV(or UV) would lose accuracy over a direct conversion from PV to
1895 IV(or UV). If it would, cache both conversions, return NV, but mark
1896 SV as IOK NOKp (ie not NOK).
1897
645c22ef 1898 While converting from PV to IV, check to see if converting that IV to an
28e5dec8
JH
1899 NV would lose accuracy over a direct conversion from PV to NV. If it
1900 would, cache both conversions, flag similarly.
1901
1902 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1903 correctly because if IV & NV were set NV *always* overruled.
645c22ef
DM
1904 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1905 changes - now IV and NV together means that the two are interchangeable:
28e5dec8 1906 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
d460ef45 1907
645c22ef
DM
1908 The benefit of this is that operations such as pp_add know that if
1909 SvIOK is true for both left and right operands, then integer addition
1910 can be used instead of floating point (for cases where the result won't
1911 overflow). Before, floating point was always used, which could lead to
28e5dec8
JH
1912 loss of precision compared with integer addition.
1913
1914 * making IV and NV equal status should make maths accurate on 64 bit
1915 platforms
1916 * may speed up maths somewhat if pp_add and friends start to use
645c22ef 1917 integers when possible instead of fp. (Hopefully the overhead in
28e5dec8
JH
1918 looking for SvIOK and checking for overflow will not outweigh the
1919 fp to integer speedup)
1920 * will slow down integer operations (callers of SvIV) on "inaccurate"
1921 values, as the change from SvIOK to SvIOKp will cause a call into
1922 sv_2iv each time rather than a macro access direct to the IV slot
1923 * should speed up number->string conversion on integers as IV is
645c22ef 1924 favoured when IV and NV are equally accurate
28e5dec8
JH
1925
1926 ####################################################################
645c22ef
DM
1927 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1928 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1929 On the other hand, SvUOK is true iff UV.
28e5dec8
JH
1930 ####################################################################
1931
645c22ef 1932 Your mileage will vary depending your CPU's relative fp to integer
28e5dec8
JH
1933 performance ratio.
1934*/
1935
1936#ifndef NV_PRESERVES_UV
645c22ef
DM
1937# define IS_NUMBER_UNDERFLOW_IV 1
1938# define IS_NUMBER_UNDERFLOW_UV 2
1939# define IS_NUMBER_IV_AND_UV 2
1940# define IS_NUMBER_OVERFLOW_IV 4
1941# define IS_NUMBER_OVERFLOW_UV 5
1942
1943/* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
28e5dec8
JH
1944
1945/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1946STATIC int
5de3775c 1947S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
47031da6
NC
1948# ifdef DEBUGGING
1949 , I32 numtype
1950# endif
1951 )
28e5dec8 1952{
97aff369 1953 dVAR;
7918f24d
NC
1954
1955 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1956
3f7c398e 1957 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
1958 if (SvNVX(sv) < (NV)IV_MIN) {
1959 (void)SvIOKp_on(sv);
1960 (void)SvNOK_on(sv);
45977657 1961 SvIV_set(sv, IV_MIN);
28e5dec8
JH
1962 return IS_NUMBER_UNDERFLOW_IV;
1963 }
1964 if (SvNVX(sv) > (NV)UV_MAX) {
1965 (void)SvIOKp_on(sv);
1966 (void)SvNOK_on(sv);
1967 SvIsUV_on(sv);
607fa7f2 1968 SvUV_set(sv, UV_MAX);
28e5dec8
JH
1969 return IS_NUMBER_OVERFLOW_UV;
1970 }
c2988b20
NC
1971 (void)SvIOKp_on(sv);
1972 (void)SvNOK_on(sv);
1973 /* Can't use strtol etc to convert this string. (See truth table in
1974 sv_2iv */
1975 if (SvNVX(sv) <= (UV)IV_MAX) {
45977657 1976 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
1977 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1978 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1979 } else {
1980 /* Integer is imprecise. NOK, IOKp */
1981 }
1982 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1983 }
1984 SvIsUV_on(sv);
607fa7f2 1985 SvUV_set(sv, U_V(SvNVX(sv)));
c2988b20
NC
1986 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1987 if (SvUVX(sv) == UV_MAX) {
1988 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1989 possibly be preserved by NV. Hence, it must be overflow.
1990 NOK, IOKp */
1991 return IS_NUMBER_OVERFLOW_UV;
1992 }
1993 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1994 } else {
1995 /* Integer is imprecise. NOK, IOKp */
28e5dec8 1996 }
c2988b20 1997 return IS_NUMBER_OVERFLOW_IV;
28e5dec8 1998}
645c22ef
DM
1999#endif /* !NV_PRESERVES_UV*/
2000
af359546 2001STATIC bool
7918f24d
NC
2002S_sv_2iuv_common(pTHX_ SV *const sv)
2003{
97aff369 2004 dVAR;
7918f24d
NC
2005
2006 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2007
af359546 2008 if (SvNOKp(sv)) {
28e5dec8
JH
2009 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2010 * without also getting a cached IV/UV from it at the same time
2011 * (ie PV->NV conversion should detect loss of accuracy and cache
af359546
NC
2012 * IV or UV at same time to avoid this. */
2013 /* IV-over-UV optimisation - choose to cache IV if possible */
25da4f38
IZ
2014
2015 if (SvTYPE(sv) == SVt_NV)
2016 sv_upgrade(sv, SVt_PVNV);
2017
28e5dec8
JH
2018 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2019 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2020 certainly cast into the IV range at IV_MAX, whereas the correct
2021 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2022 cases go to UV */
cab190d4
JD
2023#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2024 if (Perl_isnan(SvNVX(sv))) {
2025 SvUV_set(sv, 0);
2026 SvIsUV_on(sv);
fdbe6d7c 2027 return FALSE;
cab190d4 2028 }
cab190d4 2029#endif
28e5dec8 2030 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
45977657 2031 SvIV_set(sv, I_V(SvNVX(sv)));
28e5dec8
JH
2032 if (SvNVX(sv) == (NV) SvIVX(sv)
2033#ifndef NV_PRESERVES_UV
2034 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2035 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2036 /* Don't flag it as "accurately an integer" if the number
2037 came from a (by definition imprecise) NV operation, and
2038 we're outside the range of NV integer precision */
2039#endif
2040 ) {
a43d94f2
NC
2041 if (SvNOK(sv))
2042 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2043 else {
2044 /* scalar has trailing garbage, eg "42a" */
2045 }
28e5dec8 2046 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 2047 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
28e5dec8
JH
2048 PTR2UV(sv),
2049 SvNVX(sv),
2050 SvIVX(sv)));
2051
2052 } else {
2053 /* IV not precise. No need to convert from PV, as NV
2054 conversion would already have cached IV if it detected
2055 that PV->IV would be better than PV->NV->IV
2056 flags already correct - don't set public IOK. */
2057 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 2058 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
28e5dec8
JH
2059 PTR2UV(sv),
2060 SvNVX(sv),
2061 SvIVX(sv)));
2062 }
2063 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2064 but the cast (NV)IV_MIN rounds to a the value less (more
2065 negative) than IV_MIN which happens to be equal to SvNVX ??
2066 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2067 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2068 (NV)UVX == NVX are both true, but the values differ. :-(
2069 Hopefully for 2s complement IV_MIN is something like
2070 0x8000000000000000 which will be exact. NWC */
d460ef45 2071 }
25da4f38 2072 else {
607fa7f2 2073 SvUV_set(sv, U_V(SvNVX(sv)));
28e5dec8
JH
2074 if (
2075 (SvNVX(sv) == (NV) SvUVX(sv))
2076#ifndef NV_PRESERVES_UV
2077 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2078 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2079 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2080 /* Don't flag it as "accurately an integer" if the number
2081 came from a (by definition imprecise) NV operation, and
2082 we're outside the range of NV integer precision */
2083#endif
a43d94f2 2084 && SvNOK(sv)
28e5dec8
JH
2085 )
2086 SvIOK_on(sv);
25da4f38 2087 SvIsUV_on(sv);
1c846c1f 2088 DEBUG_c(PerlIO_printf(Perl_debug_log,
57def98f 2089 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
56431972 2090 PTR2UV(sv),
57def98f
JH
2091 SvUVX(sv),
2092 SvUVX(sv)));
25da4f38 2093 }
748a9306
LW
2094 }
2095 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2096 UV value;
504618e9 2097 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
af359546 2098 /* We want to avoid a possible problem when we cache an IV/ a UV which
25da4f38 2099 may be later translated to an NV, and the resulting NV is not
c2988b20
NC
2100 the same as the direct translation of the initial string
2101 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2102 be careful to ensure that the value with the .456 is around if the
2103 NV value is requested in the future).
1c846c1f 2104
af359546 2105 This means that if we cache such an IV/a UV, we need to cache the
25da4f38 2106 NV as well. Moreover, we trade speed for space, and do not
28e5dec8 2107 cache the NV if we are sure it's not needed.
25da4f38 2108 */
16b7a9a4 2109
c2988b20
NC
2110 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2111 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2112 == IS_NUMBER_IN_UV) {
5e045b90 2113 /* It's definitely an integer, only upgrade to PVIV */
28e5dec8
JH
2114 if (SvTYPE(sv) < SVt_PVIV)
2115 sv_upgrade(sv, SVt_PVIV);
f7bbb42a 2116 (void)SvIOK_on(sv);
c2988b20
NC
2117 } else if (SvTYPE(sv) < SVt_PVNV)
2118 sv_upgrade(sv, SVt_PVNV);
28e5dec8 2119
f2524eef 2120 /* If NVs preserve UVs then we only use the UV value if we know that
c2988b20
NC
2121 we aren't going to call atof() below. If NVs don't preserve UVs
2122 then the value returned may have more precision than atof() will
2123 return, even though value isn't perfectly accurate. */
2124 if ((numtype & (IS_NUMBER_IN_UV
2125#ifdef NV_PRESERVES_UV
2126 | IS_NUMBER_NOT_INT
2127#endif
2128 )) == IS_NUMBER_IN_UV) {
2129 /* This won't turn off the public IOK flag if it was set above */
2130 (void)SvIOKp_on(sv);
2131
2132 if (!(numtype & IS_NUMBER_NEG)) {
2133 /* positive */;
2134 if (value <= (UV)IV_MAX) {
45977657 2135 SvIV_set(sv, (IV)value);
c2988b20 2136 } else {
af359546 2137 /* it didn't overflow, and it was positive. */
607fa7f2 2138 SvUV_set(sv, value);
c2988b20
NC
2139 SvIsUV_on(sv);
2140 }
2141 } else {
2142 /* 2s complement assumption */
2143 if (value <= (UV)IV_MIN) {
45977657 2144 SvIV_set(sv, -(IV)value);
c2988b20
NC
2145 } else {
2146 /* Too negative for an IV. This is a double upgrade, but
d1be9408 2147 I'm assuming it will be rare. */
c2988b20
NC
2148 if (SvTYPE(sv) < SVt_PVNV)
2149 sv_upgrade(sv, SVt_PVNV);
2150 SvNOK_on(sv);
2151 SvIOK_off(sv);
2152 SvIOKp_on(sv);
9d6ce603 2153 SvNV_set(sv, -(NV)value);
45977657 2154 SvIV_set(sv, IV_MIN);
c2988b20
NC
2155 }
2156 }
2157 }
2158 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2159 will be in the previous block to set the IV slot, and the next
2160 block to set the NV slot. So no else here. */
2161
2162 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2163 != IS_NUMBER_IN_UV) {
2164 /* It wasn't an (integer that doesn't overflow the UV). */
3f7c398e 2165 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8 2166
c2988b20
NC
2167 if (! numtype && ckWARN(WARN_NUMERIC))
2168 not_a_number(sv);
28e5dec8 2169
65202027 2170#if defined(USE_LONG_DOUBLE)
c2988b20
NC
2171 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2172 PTR2UV(sv), SvNVX(sv)));
65202027 2173#else
1779d84d 2174 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
c2988b20 2175 PTR2UV(sv), SvNVX(sv)));
65202027 2176#endif
28e5dec8 2177
28e5dec8 2178#ifdef NV_PRESERVES_UV
af359546
NC
2179 (void)SvIOKp_on(sv);
2180 (void)SvNOK_on(sv);
2181 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2182 SvIV_set(sv, I_V(SvNVX(sv)));
2183 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2184 SvIOK_on(sv);
2185 } else {
6f207bd3 2186 NOOP; /* Integer is imprecise. NOK, IOKp */
af359546
NC
2187 }
2188 /* UV will not work better than IV */
2189 } else {
2190 if (SvNVX(sv) > (NV)UV_MAX) {
2191 SvIsUV_on(sv);
2192 /* Integer is inaccurate. NOK, IOKp, is UV */
2193 SvUV_set(sv, UV_MAX);
af359546
NC
2194 } else {
2195 SvUV_set(sv, U_V(SvNVX(sv)));
2196 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2197 NV preservse UV so can do correct comparison. */
2198 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2199 SvIOK_on(sv);
af359546 2200 } else {
6f207bd3 2201 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
af359546
NC
2202 }
2203 }
4b0c9573 2204 SvIsUV_on(sv);
af359546 2205 }
28e5dec8 2206#else /* NV_PRESERVES_UV */
c2988b20
NC
2207 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2208 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
af359546 2209 /* The IV/UV slot will have been set from value returned by
c2988b20
NC
2210 grok_number above. The NV slot has just been set using
2211 Atof. */
560b0c46 2212 SvNOK_on(sv);
c2988b20
NC
2213 assert (SvIOKp(sv));
2214 } else {
2215 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2216 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2217 /* Small enough to preserve all bits. */
2218 (void)SvIOKp_on(sv);
2219 SvNOK_on(sv);
45977657 2220 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
2221 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2222 SvIOK_on(sv);
2223 /* Assumption: first non-preserved integer is < IV_MAX,
2224 this NV is in the preserved range, therefore: */
2225 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2226 < (UV)IV_MAX)) {
32fdb065 2227 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
2228 }
2229 } else {
2230 /* IN_UV NOT_INT
2231 0 0 already failed to read UV.
2232 0 1 already failed to read UV.
2233 1 0 you won't get here in this case. IV/UV
2234 slot set, public IOK, Atof() unneeded.
2235 1 1 already read UV.
2236 so there's no point in sv_2iuv_non_preserve() attempting
2237 to use atol, strtol, strtoul etc. */
47031da6 2238# ifdef DEBUGGING
40a17c4c 2239 sv_2iuv_non_preserve (sv, numtype);
47031da6
NC
2240# else
2241 sv_2iuv_non_preserve (sv);
2242# endif
c2988b20
NC
2243 }
2244 }
28e5dec8 2245#endif /* NV_PRESERVES_UV */
a43d94f2
NC
2246 /* It might be more code efficient to go through the entire logic above
2247 and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2248 gets complex and potentially buggy, so more programmer efficient
2249 to do it this way, by turning off the public flags: */
2250 if (!numtype)
2251 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
25da4f38 2252 }
af359546
NC
2253 }
2254 else {
675c862f 2255 if (isGV_with_GP(sv))
159b6efe 2256 return glob_2number(MUTABLE_GV(sv));
180488f8 2257
af359546
NC
2258 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2259 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2260 report_uninit(sv);
2261 }
25da4f38
IZ
2262 if (SvTYPE(sv) < SVt_IV)
2263 /* Typically the caller expects that sv_any is not NULL now. */
2264 sv_upgrade(sv, SVt_IV);
af359546
NC
2265 /* Return 0 from the caller. */
2266 return TRUE;
2267 }
2268 return FALSE;
2269}
2270
2271/*
2272=for apidoc sv_2iv_flags
2273
2274Return the integer value of an SV, doing any necessary string
2275conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2276Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2277
2278=cut
2279*/
2280
2281IV
5de3775c 2282Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
af359546 2283{
97aff369 2284 dVAR;
af359546 2285 if (!sv)
a0d0e21e 2286 return 0;
cecf5685
NC
2287 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2288 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e
NC
2289 cache IVs just in case. In practice it seems that they never
2290 actually anywhere accessible by user Perl code, let alone get used
2291 in anything other than a string context. */
af359546
NC
2292 if (flags & SV_GMAGIC)
2293 mg_get(sv);
2294 if (SvIOKp(sv))
2295 return SvIVX(sv);
2296 if (SvNOKp(sv)) {
2297 return I_V(SvNVX(sv));
2298 }
71c558c3
NC
2299 if (SvPOKp(sv) && SvLEN(sv)) {
2300 UV value;
2301 const int numtype
2302 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2303
2304 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2305 == IS_NUMBER_IN_UV) {
2306 /* It's definitely an integer */
2307 if (numtype & IS_NUMBER_NEG) {
2308 if (value < (UV)IV_MIN)
2309 return -(IV)value;
2310 } else {
2311 if (value < (UV)IV_MAX)
2312 return (IV)value;
2313 }
2314 }
2315 if (!numtype) {
2316 if (ckWARN(WARN_NUMERIC))
2317 not_a_number(sv);
2318 }
2319 return I_V(Atof(SvPVX_const(sv)));
2320 }
1c7ff15e
NC
2321 if (SvROK(sv)) {
2322 goto return_rok;
af359546 2323 }
1c7ff15e
NC
2324 assert(SvTYPE(sv) >= SVt_PVMG);
2325 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2326 } else if (SvTHINKFIRST(sv)) {
af359546 2327 if (SvROK(sv)) {
1c7ff15e 2328 return_rok:
af359546 2329 if (SvAMAGIC(sv)) {
aee036bb
DM
2330 SV * tmpstr;
2331 if (flags & SV_SKIP_OVERLOAD)
2332 return 0;
2333 tmpstr=AMG_CALLun(sv,numer);
af359546
NC
2334 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2335 return SvIV(tmpstr);
2336 }
2337 }
2338 return PTR2IV(SvRV(sv));
2339 }
2340 if (SvIsCOW(sv)) {
2341 sv_force_normal_flags(sv, 0);
2342 }
2343 if (SvREADONLY(sv) && !SvOK(sv)) {
2344 if (ckWARN(WARN_UNINITIALIZED))
2345 report_uninit(sv);
2346 return 0;
2347 }
2348 }
2349 if (!SvIOKp(sv)) {
2350 if (S_sv_2iuv_common(aTHX_ sv))
2351 return 0;
79072805 2352 }
1d7c1841
GS
2353 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2354 PTR2UV(sv),SvIVX(sv)));
25da4f38 2355 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
79072805
LW
2356}
2357
645c22ef 2358/*
891f9566 2359=for apidoc sv_2uv_flags
645c22ef
DM
2360
2361Return the unsigned integer value of an SV, doing any necessary string
891f9566
YST
2362conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2363Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
645c22ef
DM
2364
2365=cut
2366*/
2367
ff68c719 2368UV
5de3775c 2369Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
ff68c719 2370{
97aff369 2371 dVAR;
ff68c719 2372 if (!sv)
2373 return 0;
cecf5685
NC
2374 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2375 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e 2376 cache IVs just in case. */
891f9566
YST
2377 if (flags & SV_GMAGIC)
2378 mg_get(sv);
ff68c719 2379 if (SvIOKp(sv))
2380 return SvUVX(sv);
2381 if (SvNOKp(sv))
2382 return U_V(SvNVX(sv));
71c558c3
NC
2383 if (SvPOKp(sv) && SvLEN(sv)) {
2384 UV value;
2385 const int numtype
2386 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2387
2388 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2389 == IS_NUMBER_IN_UV) {
2390 /* It's definitely an integer */
2391 if (!(numtype & IS_NUMBER_NEG))
2392 return value;
2393 }
2394 if (!numtype) {
2395 if (ckWARN(WARN_NUMERIC))
2396 not_a_number(sv);
2397 }
2398 return U_V(Atof(SvPVX_const(sv)));
2399 }
1c7ff15e
NC
2400 if (SvROK(sv)) {
2401 goto return_rok;
3fe9a6f1 2402 }
1c7ff15e
NC
2403 assert(SvTYPE(sv) >= SVt_PVMG);
2404 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2405 } else if (SvTHINKFIRST(sv)) {
ff68c719 2406 if (SvROK(sv)) {
1c7ff15e 2407 return_rok:
deb46114 2408 if (SvAMAGIC(sv)) {
aee036bb
DM
2409 SV *tmpstr;
2410 if (flags & SV_SKIP_OVERLOAD)
2411 return 0;
2412 tmpstr = AMG_CALLun(sv,numer);
deb46114
NC
2413 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2414 return SvUV(tmpstr);
2415 }
2416 }
2417 return PTR2UV(SvRV(sv));
ff68c719 2418 }
765f542d
NC
2419 if (SvIsCOW(sv)) {
2420 sv_force_normal_flags(sv, 0);
8a818333 2421 }
0336b60e 2422 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2423 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2424 report_uninit(sv);
ff68c719 2425 return 0;
2426 }
2427 }
af359546
NC
2428 if (!SvIOKp(sv)) {
2429 if (S_sv_2iuv_common(aTHX_ sv))
2430 return 0;
ff68c719 2431 }
25da4f38 2432
1d7c1841
GS
2433 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2434 PTR2UV(sv),SvUVX(sv)));
25da4f38 2435 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
ff68c719 2436}
2437
645c22ef 2438/*
196007d1 2439=for apidoc sv_2nv_flags
645c22ef
DM
2440
2441Return the num value of an SV, doing any necessary string or integer
39d5de13
DM
2442conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2443Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
645c22ef
DM
2444
2445=cut
2446*/
2447
65202027 2448NV
39d5de13 2449Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
79072805 2450{
97aff369 2451 dVAR;
79072805
LW
2452 if (!sv)
2453 return 0.0;
cecf5685
NC
2454 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2455 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e 2456 cache IVs just in case. */
39d5de13
DM
2457 if (flags & SV_GMAGIC)
2458 mg_get(sv);
463ee0b2
LW
2459 if (SvNOKp(sv))
2460 return SvNVX(sv);
0aa395f8 2461 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
041457d9 2462 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
504618e9 2463 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
a0d0e21e 2464 not_a_number(sv);
3f7c398e 2465 return Atof(SvPVX_const(sv));
a0d0e21e 2466 }
25da4f38 2467 if (SvIOKp(sv)) {
1c846c1f 2468 if (SvIsUV(sv))
65202027 2469 return (NV)SvUVX(sv);
25da4f38 2470 else
65202027 2471 return (NV)SvIVX(sv);
47a72cb8
NC
2472 }
2473 if (SvROK(sv)) {
2474 goto return_rok;
2475 }
2476 assert(SvTYPE(sv) >= SVt_PVMG);
2477 /* This falls through to the report_uninit near the end of the
2478 function. */
2479 } else if (SvTHINKFIRST(sv)) {
a0d0e21e 2480 if (SvROK(sv)) {
47a72cb8 2481 return_rok:
deb46114 2482 if (SvAMAGIC(sv)) {
aee036bb
DM
2483 SV *tmpstr;
2484 if (flags & SV_SKIP_OVERLOAD)
2485 return 0;
2486 tmpstr = AMG_CALLun(sv,numer);
deb46114
NC
2487 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2488 return SvNV(tmpstr);
2489 }
2490 }
2491 return PTR2NV(SvRV(sv));
a0d0e21e 2492 }
765f542d
NC
2493 if (SvIsCOW(sv)) {
2494 sv_force_normal_flags(sv, 0);
8a818333 2495 }
0336b60e 2496 if (SvREADONLY(sv) && !SvOK(sv)) {
599cee73 2497 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2498 report_uninit(sv);
ed6116ce
LW
2499 return 0.0;
2500 }
79072805
LW
2501 }
2502 if (SvTYPE(sv) < SVt_NV) {
7e25a7e9
NC
2503 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2504 sv_upgrade(sv, SVt_NV);
906f284f 2505#ifdef USE_LONG_DOUBLE
097ee67d 2506 DEBUG_c({
f93f4e46 2507 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2508 PerlIO_printf(Perl_debug_log,
2509 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2510 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2511 RESTORE_NUMERIC_LOCAL();
2512 });
65202027 2513#else
572bbb43 2514 DEBUG_c({
f93f4e46 2515 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2516 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
1d7c1841 2517 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2518 RESTORE_NUMERIC_LOCAL();
2519 });
572bbb43 2520#endif
79072805
LW
2521 }
2522 else if (SvTYPE(sv) < SVt_PVNV)
2523 sv_upgrade(sv, SVt_PVNV);
59d8ce62
NC
2524 if (SvNOKp(sv)) {
2525 return SvNVX(sv);
61604483 2526 }
59d8ce62 2527 if (SvIOKp(sv)) {
9d6ce603 2528 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
28e5dec8 2529#ifdef NV_PRESERVES_UV
a43d94f2
NC
2530 if (SvIOK(sv))
2531 SvNOK_on(sv);
2532 else
2533 SvNOKp_on(sv);
28e5dec8
JH
2534#else
2535 /* Only set the public NV OK flag if this NV preserves the IV */
2536 /* Check it's not 0xFFFFFFFFFFFFFFFF */
a43d94f2
NC
2537 if (SvIOK(sv) &&
2538 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
28e5dec8
JH
2539 : (SvIVX(sv) == I_V(SvNVX(sv))))
2540 SvNOK_on(sv);
2541 else
2542 SvNOKp_on(sv);
2543#endif
93a17b20 2544 }
748a9306 2545 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2546 UV value;
3f7c398e 2547 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
041457d9 2548 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
a0d0e21e 2549 not_a_number(sv);
28e5dec8 2550#ifdef NV_PRESERVES_UV
c2988b20
NC
2551 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2552 == IS_NUMBER_IN_UV) {
5e045b90 2553 /* It's definitely an integer */
9d6ce603 2554 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
c2988b20 2555 } else
3f7c398e 2556 SvNV_set(sv, Atof(SvPVX_const(sv)));
a43d94f2
NC
2557 if (numtype)
2558 SvNOK_on(sv);
2559 else
2560 SvNOKp_on(sv);
28e5dec8 2561#else
3f7c398e 2562 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2563 /* Only set the public NV OK flag if this NV preserves the value in
2564 the PV at least as well as an IV/UV would.
2565 Not sure how to do this 100% reliably. */
2566 /* if that shift count is out of range then Configure's test is
2567 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2568 UV_BITS */
2569 if (((UV)1 << NV_PRESERVES_UV_BITS) >
c2988b20 2570 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
28e5dec8 2571 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
c2988b20
NC
2572 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2573 /* Can't use strtol etc to convert this string, so don't try.
2574 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2575 SvNOK_on(sv);
2576 } else {
2577 /* value has been set. It may not be precise. */
2578 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2579 /* 2s complement assumption for (UV)IV_MIN */
2580 SvNOK_on(sv); /* Integer is too negative. */
2581 } else {
2582 SvNOKp_on(sv);
2583 SvIOKp_on(sv);
6fa402ec 2584
c2988b20 2585 if (numtype & IS_NUMBER_NEG) {
45977657 2586 SvIV_set(sv, -(IV)value);
c2988b20 2587 } else if (value <= (UV)IV_MAX) {
45977657 2588 SvIV_set(sv, (IV)value);
c2988b20 2589 } else {
607fa7f2 2590 SvUV_set(sv, value);
c2988b20
NC
2591 SvIsUV_on(sv);
2592 }
2593
2594 if (numtype & IS_NUMBER_NOT_INT) {
2595 /* I believe that even if the original PV had decimals,
2596 they are lost beyond the limit of the FP precision.
2597 However, neither is canonical, so both only get p
2598 flags. NWC, 2000/11/25 */
2599 /* Both already have p flags, so do nothing */
2600 } else {
66a1b24b 2601 const NV nv = SvNVX(sv);
c2988b20
NC
2602 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2603 if (SvIVX(sv) == I_V(nv)) {
2604 SvNOK_on(sv);
c2988b20 2605 } else {
c2988b20
NC
2606 /* It had no "." so it must be integer. */
2607 }
00b6aa41 2608 SvIOK_on(sv);
c2988b20
NC
2609 } else {
2610 /* between IV_MAX and NV(UV_MAX).
2611 Could be slightly > UV_MAX */
6fa402ec 2612
c2988b20
NC
2613 if (numtype & IS_NUMBER_NOT_INT) {
2614 /* UV and NV both imprecise. */
2615 } else {
66a1b24b 2616 const UV nv_as_uv = U_V(nv);
c2988b20
NC
2617
2618 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2619 SvNOK_on(sv);
c2988b20 2620 }
00b6aa41 2621 SvIOK_on(sv);
c2988b20
NC
2622 }
2623 }
2624 }
2625 }
2626 }
a43d94f2
NC
2627 /* It might be more code efficient to go through the entire logic above
2628 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2629 gets complex and potentially buggy, so more programmer efficient
2630 to do it this way, by turning off the public flags: */
2631 if (!numtype)
2632 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
28e5dec8 2633#endif /* NV_PRESERVES_UV */
93a17b20 2634 }
79072805 2635 else {
f7877b28 2636 if (isGV_with_GP(sv)) {
159b6efe 2637 glob_2number(MUTABLE_GV(sv));
180488f8
NC
2638 return 0.0;
2639 }
2640
041457d9 2641 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2642 report_uninit(sv);
7e25a7e9
NC
2643 assert (SvTYPE(sv) >= SVt_NV);
2644 /* Typically the caller expects that sv_any is not NULL now. */
2645 /* XXX Ilya implies that this is a bug in callers that assume this
2646 and ideally should be fixed. */
a0d0e21e 2647 return 0.0;
79072805 2648 }
572bbb43 2649#if defined(USE_LONG_DOUBLE)
097ee67d 2650 DEBUG_c({
f93f4e46 2651 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2652 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2653 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2654 RESTORE_NUMERIC_LOCAL();
2655 });
65202027 2656#else
572bbb43 2657 DEBUG_c({
f93f4e46 2658 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2659 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
1d7c1841 2660 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2661 RESTORE_NUMERIC_LOCAL();
2662 });
572bbb43 2663#endif
463ee0b2 2664 return SvNVX(sv);
79072805
LW
2665}
2666
800401ee
JH
2667/*
2668=for apidoc sv_2num
2669
2670Return an SV with the numeric value of the source SV, doing any necessary
a196a5fa
JH
2671reference or overload conversion. You must use the C<SvNUM(sv)> macro to
2672access this function.
800401ee
JH
2673
2674=cut
2675*/
2676
2677SV *
5de3775c 2678Perl_sv_2num(pTHX_ register SV *const sv)
800401ee 2679{
7918f24d
NC
2680 PERL_ARGS_ASSERT_SV_2NUM;
2681
b9ee0594
RGS
2682 if (!SvROK(sv))
2683 return sv;
800401ee
JH
2684 if (SvAMAGIC(sv)) {
2685 SV * const tmpsv = AMG_CALLun(sv,numer);
2686 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2687 return sv_2num(tmpsv);
2688 }
2689 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2690}
2691
645c22ef
DM
2692/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2693 * UV as a string towards the end of buf, and return pointers to start and
2694 * end of it.
2695 *
2696 * We assume that buf is at least TYPE_CHARS(UV) long.
2697 */
2698
864dbfa3 2699static char *
5de3775c 2700S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
25da4f38 2701{
25da4f38 2702 char *ptr = buf + TYPE_CHARS(UV);
823a54a3 2703 char * const ebuf = ptr;
25da4f38 2704 int sign;
25da4f38 2705
7918f24d
NC
2706 PERL_ARGS_ASSERT_UIV_2BUF;
2707
25da4f38
IZ
2708 if (is_uv)
2709 sign = 0;
2710 else if (iv >= 0) {
2711 uv = iv;
2712 sign = 0;
2713 } else {
2714 uv = -iv;
2715 sign = 1;
2716 }
2717 do {
eb160463 2718 *--ptr = '0' + (char)(uv % 10);
25da4f38
IZ
2719 } while (uv /= 10);
2720 if (sign)
2721 *--ptr = '-';
2722 *peob = ebuf;
2723 return ptr;
2724}
2725
645c22ef
DM
2726/*
2727=for apidoc sv_2pv_flags
2728
ff276b08 2729Returns a pointer to the string value of an SV, and sets *lp to its length.
645c22ef
DM
2730If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2731if necessary.
2732Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2733usually end up here too.
2734
2735=cut
2736*/
2737
8d6d96c1 2738char *
5de3775c 2739Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 2740{
97aff369 2741 dVAR;
79072805 2742 register char *s;
79072805 2743
463ee0b2 2744 if (!sv) {
cdb061a3
NC
2745 if (lp)
2746 *lp = 0;
73d840c0 2747 return (char *)"";
463ee0b2 2748 }
8990e307 2749 if (SvGMAGICAL(sv)) {
8d6d96c1
HS
2750 if (flags & SV_GMAGIC)
2751 mg_get(sv);
463ee0b2 2752 if (SvPOKp(sv)) {
cdb061a3
NC
2753 if (lp)
2754 *lp = SvCUR(sv);
10516c54
NC
2755 if (flags & SV_MUTABLE_RETURN)
2756 return SvPVX_mutable(sv);
4d84ee25
NC
2757 if (flags & SV_CONST_RETURN)
2758 return (char *)SvPVX_const(sv);
463ee0b2
LW
2759 return SvPVX(sv);
2760 }
75dfc8ec
NC
2761 if (SvIOKp(sv) || SvNOKp(sv)) {
2762 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
75dfc8ec
NC
2763 STRLEN len;
2764
2765 if (SvIOKp(sv)) {
e80fed9d 2766 len = SvIsUV(sv)
d9fad198
JH
2767 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2768 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
75dfc8ec 2769 } else {
e8ada2d0
NC
2770 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2771 len = strlen(tbuf);
75dfc8ec 2772 }
b5b886f0
NC
2773 assert(!SvROK(sv));
2774 {
75dfc8ec
NC
2775 dVAR;
2776
2777#ifdef FIXNEGATIVEZERO
e8ada2d0
NC
2778 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2779 tbuf[0] = '0';
2780 tbuf[1] = 0;
75dfc8ec
NC
2781 len = 1;
2782 }
2783#endif
2784 SvUPGRADE(sv, SVt_PV);
2785 if (lp)
2786 *lp = len;
2787 s = SvGROW_mutable(sv, len + 1);
2788 SvCUR_set(sv, len);
2789 SvPOKp_on(sv);
10edeb5d 2790 return (char*)memcpy(s, tbuf, len + 1);
75dfc8ec 2791 }
463ee0b2 2792 }
1c7ff15e
NC
2793 if (SvROK(sv)) {
2794 goto return_rok;
2795 }
2796 assert(SvTYPE(sv) >= SVt_PVMG);
2797 /* This falls through to the report_uninit near the end of the
2798 function. */
2799 } else if (SvTHINKFIRST(sv)) {
ed6116ce 2800 if (SvROK(sv)) {
1c7ff15e 2801 return_rok:
deb46114 2802 if (SvAMAGIC(sv)) {
aee036bb
DM
2803 SV *tmpstr;
2804 if (flags & SV_SKIP_OVERLOAD)
2805 return NULL;
2806 tmpstr = AMG_CALLun(sv,string);
deb46114
NC
2807 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2808 /* Unwrap this: */
2809 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2810 */
2811
2812 char *pv;
2813 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2814 if (flags & SV_CONST_RETURN) {
2815 pv = (char *) SvPVX_const(tmpstr);
2816 } else {
2817 pv = (flags & SV_MUTABLE_RETURN)
2818 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2819 }
2820 if (lp)
2821 *lp = SvCUR(tmpstr);
50adf7d2 2822 } else {
deb46114 2823 pv = sv_2pv_flags(tmpstr, lp, flags);
50adf7d2 2824 }
deb46114
NC
2825 if (SvUTF8(tmpstr))
2826 SvUTF8_on(sv);
2827 else
2828 SvUTF8_off(sv);
2829 return pv;
50adf7d2 2830 }
deb46114
NC
2831 }
2832 {
fafee734
NC
2833 STRLEN len;
2834 char *retval;
2835 char *buffer;
d2c6dc5e 2836 SV *const referent = SvRV(sv);
d8eae41e
NC
2837
2838 if (!referent) {
fafee734
NC
2839 len = 7;
2840 retval = buffer = savepvn("NULLREF", len);
5c35adbb 2841 } else if (SvTYPE(referent) == SVt_REGEXP) {
d2c6dc5e 2842 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
67d2d14d
AB
2843 I32 seen_evals = 0;
2844
2845 assert(re);
2846
2847 /* If the regex is UTF-8 we want the containing scalar to
2848 have an UTF-8 flag too */
2849 if (RX_UTF8(re))
2850 SvUTF8_on(sv);
2851 else
2852 SvUTF8_off(sv);
2853
2854 if ((seen_evals = RX_SEEN_EVALS(re)))
2855 PL_reginterp_cnt += seen_evals;
2856
2857 if (lp)
2858 *lp = RX_WRAPLEN(re);
2859
2860 return RX_WRAPPED(re);
d8eae41e
NC
2861 } else {
2862 const char *const typestr = sv_reftype(referent, 0);
fafee734
NC
2863 const STRLEN typelen = strlen(typestr);
2864 UV addr = PTR2UV(referent);
2865 const char *stashname = NULL;
2866 STRLEN stashnamelen = 0; /* hush, gcc */
2867 const char *buffer_end;
d8eae41e 2868
d8eae41e 2869 if (SvOBJECT(referent)) {
fafee734
NC
2870 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2871
2872 if (name) {
2873 stashname = HEK_KEY(name);
2874 stashnamelen = HEK_LEN(name);
2875
2876 if (HEK_UTF8(name)) {
2877 SvUTF8_on(sv);
2878 } else {
2879 SvUTF8_off(sv);
2880 }
2881 } else {
2882 stashname = "__ANON__";
2883 stashnamelen = 8;
2884 }
2885 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2886 + 2 * sizeof(UV) + 2 /* )\0 */;
2887 } else {
2888 len = typelen + 3 /* (0x */
2889 + 2 * sizeof(UV) + 2 /* )\0 */;
d8eae41e 2890 }
fafee734
NC
2891
2892 Newx(buffer, len, char);
2893 buffer_end = retval = buffer + len;
2894
2895 /* Working backwards */
2896 *--retval = '\0';
2897 *--retval = ')';
2898 do {
2899 *--retval = PL_hexdigit[addr & 15];
2900 } while (addr >>= 4);
2901 *--retval = 'x';
2902 *--retval = '0';
2903 *--retval = '(';
2904
2905 retval -= typelen;
2906 memcpy(retval, typestr, typelen);
2907
2908 if (stashname) {
2909 *--retval = '=';
2910 retval -= stashnamelen;
2911 memcpy(retval, stashname, stashnamelen);
2912 }
2913 /* retval may not neccesarily have reached the start of the
2914 buffer here. */
2915 assert (retval >= buffer);
2916
2917 len = buffer_end - retval - 1; /* -1 for that \0 */
c080367d 2918 }
042dae7a 2919 if (lp)
fafee734
NC
2920 *lp = len;
2921 SAVEFREEPV(buffer);
2922 return retval;
463ee0b2 2923 }
79072805 2924 }
0336b60e 2925 if (SvREADONLY(sv) && !SvOK(sv)) {
cdb061a3
NC
2926 if (lp)
2927 *lp = 0;
9f621bb0
NC
2928 if (flags & SV_UNDEF_RETURNS_NULL)
2929 return NULL;
2930 if (ckWARN(WARN_UNINITIALIZED))
2931 report_uninit(sv);
73d840c0 2932 return (char *)"";
79072805 2933 }
79072805 2934 }
28e5dec8
JH
2935 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2936 /* I'm assuming that if both IV and NV are equally valid then
2937 converting the IV is going to be more efficient */
e1ec3a88 2938 const U32 isUIOK = SvIsUV(sv);
28e5dec8
JH
2939 char buf[TYPE_CHARS(UV)];
2940 char *ebuf, *ptr;
97a130b8 2941 STRLEN len;
28e5dec8
JH
2942
2943 if (SvTYPE(sv) < SVt_PVIV)
2944 sv_upgrade(sv, SVt_PVIV);
4ea1d550 2945 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
97a130b8 2946 len = ebuf - ptr;
5902b6a9 2947 /* inlined from sv_setpvn */
97a130b8
NC
2948 s = SvGROW_mutable(sv, len + 1);
2949 Move(ptr, s, len, char);
2950 s += len;
28e5dec8 2951 *s = '\0';
28e5dec8
JH
2952 }
2953 else if (SvNOKp(sv)) {
4ee39169 2954 dSAVE_ERRNO;
79072805
LW
2955 if (SvTYPE(sv) < SVt_PVNV)
2956 sv_upgrade(sv, SVt_PVNV);
1c846c1f 2957 /* The +20 is pure guesswork. Configure test needed. --jhi */
5902b6a9 2958 s = SvGROW_mutable(sv, NV_DIG + 20);
c81271c3 2959 /* some Xenix systems wipe out errno here */
79072805 2960#ifdef apollo
463ee0b2 2961 if (SvNVX(sv) == 0.0)
d1307786 2962 my_strlcpy(s, "0", SvLEN(sv));
79072805
LW
2963 else
2964#endif /*apollo*/
bbce6d69 2965 {
2d4389e4 2966 Gconvert(SvNVX(sv), NV_DIG, 0, s);
bbce6d69 2967 }
4ee39169 2968 RESTORE_ERRNO;
a0d0e21e 2969#ifdef FIXNEGATIVEZERO
20773dcd
NC
2970 if (*s == '-' && s[1] == '0' && !s[2]) {
2971 s[0] = '0';
2972 s[1] = 0;
2973 }
a0d0e21e 2974#endif
79072805
LW
2975 while (*s) s++;
2976#ifdef hcx
2977 if (s[-1] == '.')
46fc3d4c 2978 *--s = '\0';
79072805
LW
2979#endif
2980 }
79072805 2981 else {
8d1c3e26
NC
2982 if (isGV_with_GP(sv)) {
2983 GV *const gv = MUTABLE_GV(sv);
2984 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2985 SV *const buffer = sv_newmortal();
2986
2987 /* FAKE globs can get coerced, so need to turn this off temporarily
2988 if it is on. */
2989 SvFAKE_off(gv);
2990 gv_efullname3(buffer, gv, "*");
2991 SvFLAGS(gv) |= wasfake;
2992
1809c940
DM
2993 if (SvPOK(buffer)) {
2994 if (lp) {
2995 *lp = SvCUR(buffer);
2996 }
2997 return SvPVX(buffer);
2998 }
2999 else {
3000 if (lp)
3001 *lp = 0;
3002 return (char *)"";
8d1c3e26 3003 }
8d1c3e26 3004 }
180488f8 3005
cdb061a3 3006 if (lp)
00b6aa41 3007 *lp = 0;
9f621bb0
NC
3008 if (flags & SV_UNDEF_RETURNS_NULL)
3009 return NULL;
3010 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
3011 report_uninit(sv);
25da4f38
IZ
3012 if (SvTYPE(sv) < SVt_PV)
3013 /* Typically the caller expects that sv_any is not NULL now. */
3014 sv_upgrade(sv, SVt_PV);
73d840c0 3015 return (char *)"";
79072805 3016 }
cdb061a3 3017 {
823a54a3 3018 const STRLEN len = s - SvPVX_const(sv);
cdb061a3
NC
3019 if (lp)
3020 *lp = len;
3021 SvCUR_set(sv, len);
3022 }
79072805 3023 SvPOK_on(sv);
1d7c1841 3024 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 3025 PTR2UV(sv),SvPVX_const(sv)));
4d84ee25
NC
3026 if (flags & SV_CONST_RETURN)
3027 return (char *)SvPVX_const(sv);
10516c54
NC
3028 if (flags & SV_MUTABLE_RETURN)
3029 return SvPVX_mutable(sv);
463ee0b2
LW
3030 return SvPVX(sv);
3031}
3032
645c22ef 3033/*
6050d10e
JP
3034=for apidoc sv_copypv
3035
3036Copies a stringified representation of the source SV into the
3037destination SV. Automatically performs any necessary mg_get and
54f0641b 3038coercion of numeric values into strings. Guaranteed to preserve
2575c402 3039UTF8 flag even from overloaded objects. Similar in nature to
54f0641b
NIS
3040sv_2pv[_flags] but operates directly on an SV instead of just the
3041string. Mostly uses sv_2pv_flags to do its work, except when that
6050d10e
JP
3042would lose the UTF-8'ness of the PV.
3043
3044=cut
3045*/
3046
3047void
5de3775c 3048Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
6050d10e 3049{
446eaa42 3050 STRLEN len;
53c1dcc0 3051 const char * const s = SvPV_const(ssv,len);
7918f24d
NC
3052
3053 PERL_ARGS_ASSERT_SV_COPYPV;
3054
cb50f42d 3055 sv_setpvn(dsv,s,len);
446eaa42 3056 if (SvUTF8(ssv))
cb50f42d 3057 SvUTF8_on(dsv);
446eaa42 3058 else
cb50f42d 3059 SvUTF8_off(dsv);
6050d10e
JP
3060}
3061
3062/*
645c22ef
DM
3063=for apidoc sv_2pvbyte
3064
3065Return a pointer to the byte-encoded representation of the SV, and set *lp
1e54db1a 3066to its length. May cause the SV to be downgraded from UTF-8 as a
645c22ef
DM
3067side-effect.
3068
3069Usually accessed via the C<SvPVbyte> macro.
3070
3071=cut
3072*/
3073
7340a771 3074char *
5de3775c 3075Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3076{
7918f24d
NC
3077 PERL_ARGS_ASSERT_SV_2PVBYTE;
3078
0875d2fe 3079 sv_utf8_downgrade(sv,0);
97972285 3080 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771
GS
3081}
3082
645c22ef 3083/*
035cbb0e
RGS
3084=for apidoc sv_2pvutf8
3085
3086Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3087to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3088
3089Usually accessed via the C<SvPVutf8> macro.
3090
3091=cut
3092*/
645c22ef 3093
7340a771 3094char *
7bc54cea 3095Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3096{
7918f24d
NC
3097 PERL_ARGS_ASSERT_SV_2PVUTF8;
3098
035cbb0e
RGS
3099 sv_utf8_upgrade(sv);
3100 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771 3101}
1c846c1f 3102
7ee2227d 3103
645c22ef
DM
3104/*
3105=for apidoc sv_2bool
3106
3107This function is only called on magical items, and is only used by
8cf8f3d1 3108sv_true() or its macro equivalent.
645c22ef
DM
3109
3110=cut
3111*/
3112
463ee0b2 3113bool
7bc54cea 3114Perl_sv_2bool(pTHX_ register SV *const sv)
463ee0b2 3115{
97aff369 3116 dVAR;
7918f24d
NC
3117
3118 PERL_ARGS_ASSERT_SV_2BOOL;
3119
5b295bef 3120 SvGETMAGIC(sv);
463ee0b2 3121
a0d0e21e
LW
3122 if (!SvOK(sv))
3123 return 0;
3124 if (SvROK(sv)) {
fabdb6c0
AL
3125 if (SvAMAGIC(sv)) {
3126 SV * const tmpsv = AMG_CALLun(sv,bool_);
3127 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
f2338a2e 3128 return cBOOL(SvTRUE(tmpsv));
fabdb6c0
AL
3129 }
3130 return SvRV(sv) != 0;
a0d0e21e 3131 }
463ee0b2 3132 if (SvPOKp(sv)) {
53c1dcc0
AL
3133 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3134 if (Xpvtmp &&
339049b0 3135 (*sv->sv_u.svu_pv > '0' ||
11343788 3136 Xpvtmp->xpv_cur > 1 ||
339049b0 3137 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
463ee0b2
LW
3138 return 1;
3139 else
3140 return 0;
3141 }
3142 else {
3143 if (SvIOKp(sv))
3144 return SvIVX(sv) != 0;
3145 else {
3146 if (SvNOKp(sv))
3147 return SvNVX(sv) != 0.0;
180488f8 3148 else {
f7877b28 3149 if (isGV_with_GP(sv))
180488f8
NC
3150 return TRUE;
3151 else
3152 return FALSE;
3153 }
463ee0b2
LW
3154 }
3155 }
79072805
LW
3156}
3157
c461cf8f
JH
3158/*
3159=for apidoc sv_utf8_upgrade
3160
78ea37eb 3161Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3162Forces the SV to string form if it is not already.
2bbc8d55 3163Will C<mg_get> on C<sv> if appropriate.
4411f3b6 3164Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3165if the whole string is the same in UTF-8 as not.
3166Returns the number of bytes in the converted string
c461cf8f 3167
13a6c0e0
JH
3168This is not as a general purpose byte encoding to Unicode interface:
3169use the Encode extension for that.
3170
fe749c9a
KW
3171=for apidoc sv_utf8_upgrade_nomg
3172
3173Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3174
8d6d96c1
HS
3175=for apidoc sv_utf8_upgrade_flags
3176
78ea37eb 3177Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3178Forces the SV to string form if it is not already.
8d6d96c1 3179Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3180if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3181will C<mg_get> on C<sv> if appropriate, else not.
3182Returns the number of bytes in the converted string
3183C<sv_utf8_upgrade> and
8d6d96c1
HS
3184C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3185
13a6c0e0
JH
3186This is not as a general purpose byte encoding to Unicode interface:
3187use the Encode extension for that.
3188
8d6d96c1 3189=cut
b3ab6785
KW
3190
3191The grow version is currently not externally documented. It adds a parameter,
3192extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3193have free after it upon return. This allows the caller to reserve extra space
3194that it intends to fill, to avoid extra grows.
3195
3196Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3197which can be used to tell this function to not first check to see if there are
3198any characters that are different in UTF-8 (variant characters) which would
3199force it to allocate a new string to sv, but to assume there are. Typically
3200this flag is used by a routine that has already parsed the string to find that
3201there are such characters, and passes this information on so that the work
3202doesn't have to be repeated.
3203
3204(One might think that the calling routine could pass in the position of the
3205first such variant, so it wouldn't have to be found again. But that is not the
3206case, because typically when the caller is likely to use this flag, it won't be
3207calling this routine unless it finds something that won't fit into a byte.
3208Otherwise it tries to not upgrade and just use bytes. But some things that
3209do fit into a byte are variants in utf8, and the caller may not have been
3210keeping track of these.)
3211
3212If the routine itself changes the string, it adds a trailing NUL. Such a NUL
3213isn't guaranteed due to having other routines do the work in some input cases,
3214or if the input is already flagged as being in utf8.
3215
3216The speed of this could perhaps be improved for many cases if someone wanted to
3217write a fast function that counts the number of variant characters in a string,
3218especially if it could return the position of the first one.
3219
8d6d96c1
HS
3220*/
3221
3222STRLEN
b3ab6785 3223Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
8d6d96c1 3224{
97aff369 3225 dVAR;
7918f24d 3226
b3ab6785 3227 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
7918f24d 3228
808c356f
RGS
3229 if (sv == &PL_sv_undef)
3230 return 0;
e0e62c2a
NIS
3231 if (!SvPOK(sv)) {
3232 STRLEN len = 0;
d52b7888
NC
3233 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3234 (void) sv_2pv_flags(sv,&len, flags);
b3ab6785
KW
3235 if (SvUTF8(sv)) {
3236 if (extra) SvGROW(sv, SvCUR(sv) + extra);
d52b7888 3237 return len;
b3ab6785 3238 }
d52b7888
NC
3239 } else {
3240 (void) SvPV_force(sv,len);
3241 }
e0e62c2a 3242 }
4411f3b6 3243
f5cee72b 3244 if (SvUTF8(sv)) {
b3ab6785 3245 if (extra) SvGROW(sv, SvCUR(sv) + extra);
5fec3b1d 3246 return SvCUR(sv);
f5cee72b 3247 }
5fec3b1d 3248
765f542d
NC
3249 if (SvIsCOW(sv)) {
3250 sv_force_normal_flags(sv, 0);
db42d148
NIS
3251 }
3252
b3ab6785 3253 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
799ef3cb 3254 sv_recode_to_utf8(sv, PL_encoding);
b3ab6785
KW
3255 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3256 return SvCUR(sv);
3257 }
3258
4e93345f
KW
3259 if (SvCUR(sv) == 0) {
3260 if (extra) SvGROW(sv, extra);
3261 } else { /* Assume Latin-1/EBCDIC */
c4e7c712 3262 /* This function could be much more efficient if we
2bbc8d55 3263 * had a FLAG in SVs to signal if there are any variant
c4e7c712 3264 * chars in the PV. Given that there isn't such a flag
b3ab6785
KW
3265 * make the loop as fast as possible (although there are certainly ways
3266 * to speed this up, eg. through vectorization) */
3267 U8 * s = (U8 *) SvPVX_const(sv);
3268 U8 * e = (U8 *) SvEND(sv);
3269 U8 *t = s;
3270 STRLEN two_byte_count = 0;
c4e7c712 3271
b3ab6785
KW
3272 if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3273
3274 /* See if really will need to convert to utf8. We mustn't rely on our
3275 * incoming SV being well formed and having a trailing '\0', as certain
3276 * code in pp_formline can send us partially built SVs. */
3277
c4e7c712 3278 while (t < e) {
53c1dcc0 3279 const U8 ch = *t++;
b3ab6785
KW
3280 if (NATIVE_IS_INVARIANT(ch)) continue;
3281
3282 t--; /* t already incremented; re-point to first variant */
3283 two_byte_count = 1;
3284 goto must_be_utf8;
c4e7c712 3285 }
b3ab6785
KW
3286
3287 /* utf8 conversion not needed because all are invariants. Mark as
3288 * UTF-8 even if no variant - saves scanning loop */
c4e7c712 3289 SvUTF8_on(sv);
b3ab6785
KW
3290 return SvCUR(sv);
3291
3292must_be_utf8:
3293
3294 /* Here, the string should be converted to utf8, either because of an
3295 * input flag (two_byte_count = 0), or because a character that
3296 * requires 2 bytes was found (two_byte_count = 1). t points either to
3297 * the beginning of the string (if we didn't examine anything), or to
3298 * the first variant. In either case, everything from s to t - 1 will
3299 * occupy only 1 byte each on output.
3300 *
3301 * There are two main ways to convert. One is to create a new string
3302 * and go through the input starting from the beginning, appending each
3303 * converted value onto the new string as we go along. It's probably
3304 * best to allocate enough space in the string for the worst possible
3305 * case rather than possibly running out of space and having to
3306 * reallocate and then copy what we've done so far. Since everything
3307 * from s to t - 1 is invariant, the destination can be initialized
3308 * with these using a fast memory copy
3309 *
3310 * The other way is to figure out exactly how big the string should be
3311 * by parsing the entire input. Then you don't have to make it big
3312 * enough to handle the worst possible case, and more importantly, if
3313 * the string you already have is large enough, you don't have to
3314 * allocate a new string, you can copy the last character in the input
3315 * string to the final position(s) that will be occupied by the
3316 * converted string and go backwards, stopping at t, since everything
3317 * before that is invariant.
3318 *
3319 * There are advantages and disadvantages to each method.
3320 *
3321 * In the first method, we can allocate a new string, do the memory
3322 * copy from the s to t - 1, and then proceed through the rest of the
3323 * string byte-by-byte.
3324 *
3325 * In the second method, we proceed through the rest of the input
3326 * string just calculating how big the converted string will be. Then
3327 * there are two cases:
3328 * 1) if the string has enough extra space to handle the converted
3329 * value. We go backwards through the string, converting until we
3330 * get to the position we are at now, and then stop. If this
3331 * position is far enough along in the string, this method is
3332 * faster than the other method. If the memory copy were the same
3333 * speed as the byte-by-byte loop, that position would be about
3334 * half-way, as at the half-way mark, parsing to the end and back
3335 * is one complete string's parse, the same amount as starting
3336 * over and going all the way through. Actually, it would be
3337 * somewhat less than half-way, as it's faster to just count bytes
3338 * than to also copy, and we don't have the overhead of allocating
3339 * a new string, changing the scalar to use it, and freeing the
3340 * existing one. But if the memory copy is fast, the break-even
3341 * point is somewhere after half way. The counting loop could be
3342 * sped up by vectorization, etc, to move the break-even point
3343 * further towards the beginning.
3344 * 2) if the string doesn't have enough space to handle the converted
3345 * value. A new string will have to be allocated, and one might
3346 * as well, given that, start from the beginning doing the first
3347 * method. We've spent extra time parsing the string and in
3348 * exchange all we've gotten is that we know precisely how big to
3349 * make the new one. Perl is more optimized for time than space,
3350 * so this case is a loser.
3351 * So what I've decided to do is not use the 2nd method unless it is
3352 * guaranteed that a new string won't have to be allocated, assuming
3353 * the worst case. I also decided not to put any more conditions on it
3354 * than this, for now. It seems likely that, since the worst case is
3355 * twice as big as the unknown portion of the string (plus 1), we won't
3356 * be guaranteed enough space, causing us to go to the first method,
3357 * unless the string is short, or the first variant character is near
3358 * the end of it. In either of these cases, it seems best to use the
3359 * 2nd method. The only circumstance I can think of where this would
3360 * be really slower is if the string had once had much more data in it
3361 * than it does now, but there is still a substantial amount in it */
3362
3363 {
3364 STRLEN invariant_head = t - s;
3365 STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3366 if (SvLEN(sv) < size) {
3367
3368 /* Here, have decided to allocate a new string */
3369
3370 U8 *dst;
3371 U8 *d;
3372
3373 Newx(dst, size, U8);
3374
3375 /* If no known invariants at the beginning of the input string,
3376 * set so starts from there. Otherwise, can use memory copy to
3377 * get up to where we are now, and then start from here */
3378
3379 if (invariant_head <= 0) {
3380 d = dst;
3381 } else {
3382 Copy(s, dst, invariant_head, char);
3383 d = dst + invariant_head;
3384 }
3385
3386 while (t < e) {
3387 const UV uv = NATIVE8_TO_UNI(*t++);
3388 if (UNI_IS_INVARIANT(uv))
3389 *d++ = (U8)UNI_TO_NATIVE(uv);
3390 else {
3391 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3392 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3393 }
3394 }
3395 *d = '\0';
3396 SvPV_free(sv); /* No longer using pre-existing string */
3397 SvPV_set(sv, (char*)dst);
3398 SvCUR_set(sv, d - dst);
3399 SvLEN_set(sv, size);
3400 } else {
3401
3402 /* Here, have decided to get the exact size of the string.
3403 * Currently this happens only when we know that there is
3404 * guaranteed enough space to fit the converted string, so
3405 * don't have to worry about growing. If two_byte_count is 0,
3406 * then t points to the first byte of the string which hasn't
3407 * been examined yet. Otherwise two_byte_count is 1, and t
3408 * points to the first byte in the string that will expand to
3409 * two. Depending on this, start examining at t or 1 after t.
3410 * */
3411
3412 U8 *d = t + two_byte_count;
3413
3414
3415 /* Count up the remaining bytes that expand to two */
3416
3417 while (d < e) {
3418 const U8 chr = *d++;
3419 if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3420 }
3421
3422 /* The string will expand by just the number of bytes that
3423 * occupy two positions. But we are one afterwards because of
3424 * the increment just above. This is the place to put the
3425 * trailing NUL, and to set the length before we decrement */
3426
3427 d += two_byte_count;
3428 SvCUR_set(sv, d - s);
3429 *d-- = '\0';
3430
3431
3432 /* Having decremented d, it points to the position to put the
3433 * very last byte of the expanded string. Go backwards through
3434 * the string, copying and expanding as we go, stopping when we
3435 * get to the part that is invariant the rest of the way down */
3436
3437 e--;
3438 while (e >= t) {
3439 const U8 ch = NATIVE8_TO_UNI(*e--);
3440 if (UNI_IS_INVARIANT(ch)) {
3441 *d-- = UNI_TO_NATIVE(ch);
3442 } else {
3443 *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3444 *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3445 }
3446 }
3447 }
3448 }
560a288e 3449 }
b3ab6785
KW
3450
3451 /* Mark as UTF-8 even if no variant - saves scanning loop */
3452 SvUTF8_on(sv);
4411f3b6 3453 return SvCUR(sv);
560a288e
GS
3454}
3455
c461cf8f
JH
3456/*
3457=for apidoc sv_utf8_downgrade
3458
78ea37eb 3459Attempts to convert the PV of an SV from characters to bytes.
2bbc8d55
SP
3460If the PV contains a character that cannot fit
3461in a byte, this conversion will fail;
78ea37eb 3462in this case, either returns false or, if C<fail_ok> is not
c461cf8f
JH
3463true, croaks.
3464
13a6c0e0
JH
3465This is not as a general purpose Unicode to byte encoding interface:
3466use the Encode extension for that.
3467
c461cf8f
JH
3468=cut
3469*/
3470
560a288e 3471bool
7bc54cea 3472Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
560a288e 3473{
97aff369 3474 dVAR;
7918f24d
NC
3475
3476 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3477
78ea37eb 3478 if (SvPOKp(sv) && SvUTF8(sv)) {
fa301091 3479 if (SvCUR(sv)) {
03cfe0ae 3480 U8 *s;
652088fc 3481 STRLEN len;
fa301091 3482
765f542d
NC
3483 if (SvIsCOW(sv)) {
3484 sv_force_normal_flags(sv, 0);
3485 }
03cfe0ae
NIS
3486 s = (U8 *) SvPV(sv, len);
3487 if (!utf8_to_bytes(s, &len)) {
fa301091
JH
3488 if (fail_ok)
3489 return FALSE;
3490 else {
3491 if (PL_op)
3492 Perl_croak(aTHX_ "Wide character in %s",
53e06cf0 3493 OP_DESC(PL_op));
fa301091
JH
3494 else
3495 Perl_croak(aTHX_ "Wide character");
3496 }
4b3603a4 3497 }
b162af07 3498 SvCUR_set(sv, len);
67e989fb 3499 }
560a288e 3500 }
ffebcc3e 3501 SvUTF8_off(sv);
560a288e
GS
3502 return TRUE;
3503}
3504
c461cf8f
JH
3505/*
3506=for apidoc sv_utf8_encode
3507
78ea37eb
TS
3508Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3509flag off so that it looks like octets again.
c461cf8f
JH
3510
3511=cut
3512*/
3513
560a288e 3514void
7bc54cea 3515Perl_sv_utf8_encode(pTHX_ register SV *const sv)
560a288e 3516{
7918f24d
NC
3517 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3518
4c94c214
NC
3519 if (SvIsCOW(sv)) {
3520 sv_force_normal_flags(sv, 0);
3521 }
3522 if (SvREADONLY(sv)) {
f1f66076 3523 Perl_croak(aTHX_ "%s", PL_no_modify);
4c94c214 3524 }
a5f5288a 3525 (void) sv_utf8_upgrade(sv);
560a288e
GS
3526 SvUTF8_off(sv);
3527}
3528
4411f3b6
NIS
3529/*
3530=for apidoc sv_utf8_decode
3531
78ea37eb
TS
3532If the PV of the SV is an octet sequence in UTF-8
3533and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3534so that it looks like a character. If the PV contains only single-byte
3535characters, the C<SvUTF8> flag stays being off.
3536Scans PV for validity and returns false if the PV is invalid UTF-8.
4411f3b6
NIS
3537
3538=cut
3539*/
3540
560a288e 3541bool
7bc54cea 3542Perl_sv_utf8_decode(pTHX_ register SV *const sv)
560a288e 3543{
7918f24d
NC
3544 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3545
78ea37eb 3546 if (SvPOKp(sv)) {
93524f2b
NC
3547 const U8 *c;
3548 const U8 *e;
9cbac4c7 3549
645c22ef
DM
3550 /* The octets may have got themselves encoded - get them back as
3551 * bytes
3552 */
3553 if (!sv_utf8_downgrade(sv, TRUE))
560a288e
GS
3554 return FALSE;
3555
3556 /* it is actually just a matter of turning the utf8 flag on, but
3557 * we want to make sure everything inside is valid utf8 first.
3558 */
93524f2b 3559 c = (const U8 *) SvPVX_const(sv);
63cd0674 3560 if (!is_utf8_string(c, SvCUR(sv)+1))
67e989fb 3561 return FALSE;
93524f2b 3562 e = (const U8 *) SvEND(sv);
511c2ff0 3563 while (c < e) {
b64e5050 3564 const U8 ch = *c++;
c4d5f83a 3565 if (!UTF8_IS_INVARIANT(ch)) {
67e989fb
JH
3566 SvUTF8_on(sv);
3567 break;
3568 }
560a288e 3569 }
560a288e
GS
3570 }
3571 return TRUE;
3572}
3573
954c1994
GS
3574/*
3575=for apidoc sv_setsv
3576
645c22ef
DM
3577Copies the contents of the source SV C<ssv> into the destination SV
3578C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3579function if the source SV needs to be reused. Does not handle 'set' magic.
3580Loosely speaking, it performs a copy-by-value, obliterating any previous
3581content of the destination.
3582
3583You probably want to use one of the assortment of wrappers, such as
3584C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3585C<SvSetMagicSV_nosteal>.
3586
8d6d96c1
HS
3587=for apidoc sv_setsv_flags
3588
645c22ef
DM
3589Copies the contents of the source SV C<ssv> into the destination SV
3590C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3591function if the source SV needs to be reused. Does not handle 'set' magic.
3592Loosely speaking, it performs a copy-by-value, obliterating any previous
3593content of the destination.
3594If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
5fcdf167
NC
3595C<ssv> if appropriate, else not. If the C<flags> parameter has the
3596C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3597and C<sv_setsv_nomg> are implemented in terms of this function.
645c22ef
DM
3598
3599You probably want to use one of the assortment of wrappers, such as
3600C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3601C<SvSetMagicSV_nosteal>.
3602
3603This is the primary function for copying scalars, and most other
3604copy-ish functions and macros use this underneath.
8d6d96c1
HS
3605
3606=cut
3607*/
3608
5d0301b7 3609static void
7bc54cea 3610S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
5d0301b7 3611{
70cd14a1 3612 I32 mro_changes = 0; /* 1 = method, 2 = isa */
dd69841b 3613
7918f24d
NC
3614 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3615
5d0301b7
NC
3616 if (dtype != SVt_PVGV) {
3617 const char * const name = GvNAME(sstr);
3618 const STRLEN len = GvNAMELEN(sstr);
0d092c36 3619 {
f7877b28
NC
3620 if (dtype >= SVt_PV) {
3621 SvPV_free(dstr);
3622 SvPV_set(dstr, 0);
3623 SvLEN_set(dstr, 0);
3624 SvCUR_set(dstr, 0);
3625 }
0d092c36 3626 SvUPGRADE(dstr, SVt_PVGV);
dedf8e73 3627 (void)SvOK_off(dstr);
2e5b91de
NC
3628 /* FIXME - why are we doing this, then turning it off and on again
3629 below? */
3630 isGV_with_GP_on(dstr);
f7877b28 3631 }
5d0301b7
NC
3632 GvSTASH(dstr) = GvSTASH(sstr);
3633 if (GvSTASH(dstr))
daba3364 3634 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
159b6efe 3635 gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
5d0301b7
NC
3636 SvFAKE_on(dstr); /* can coerce to non-glob */
3637 }
3638
159b6efe 3639 if(GvGP(MUTABLE_GV(sstr))) {
dd69841b
BB
3640 /* If source has method cache entry, clear it */
3641 if(GvCVGEN(sstr)) {
3642 SvREFCNT_dec(GvCV(sstr));
3643 GvCV(sstr) = NULL;
3644 GvCVGEN(sstr) = 0;
3645 }
3646 /* If source has a real method, then a method is
3647 going to change */
159b6efe 3648 else if(GvCV((const GV *)sstr)) {
70cd14a1 3649 mro_changes = 1;
dd69841b
BB
3650 }
3651 }
3652
3653 /* If dest already had a real method, that's a change as well */
159b6efe 3654 if(!mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)) {
70cd14a1 3655 mro_changes = 1;
dd69841b
BB
3656 }
3657
159b6efe 3658 if(strEQ(GvNAME((const GV *)dstr),"ISA"))
70cd14a1
CB
3659 mro_changes = 2;
3660
159b6efe 3661 gp_free(MUTABLE_GV(dstr));
2e5b91de 3662 isGV_with_GP_off(dstr);
5d0301b7 3663 (void)SvOK_off(dstr);
2e5b91de 3664 isGV_with_GP_on(dstr);
dedf8e73 3665 GvINTRO_off(dstr); /* one-shot flag */
5d0301b7
NC
3666 GvGP(dstr) = gp_ref(GvGP(sstr));
3667 if (SvTAINTED(sstr))
3668 SvTAINT(dstr);
3669 if (GvIMPORTED(dstr) != GVf_IMPORTED
3670 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3671 {
3672 GvIMPORTED_on(dstr);
3673 }
3674 GvMULTI_on(dstr);
70cd14a1
CB
3675 if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3676 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
5d0301b7
NC
3677 return;
3678}
3679
b8473700 3680static void
7bc54cea 3681S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
7918f24d 3682{
b8473700
NC
3683 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3684 SV *dref = NULL;
3685 const int intro = GvINTRO(dstr);
2440974c 3686 SV **location;
3386d083 3687 U8 import_flag = 0;
27242d61
NC
3688 const U32 stype = SvTYPE(sref);
3689
7918f24d 3690 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
b8473700 3691
b8473700
NC
3692 if (intro) {
3693 GvINTRO_off(dstr); /* one-shot flag */
3694 GvLINE(dstr) = CopLINE(PL_curcop);
159b6efe 3695 GvEGV(dstr) = MUTABLE_GV(dstr);
b8473700
NC
3696 }
3697 GvMULTI_on(dstr);
27242d61 3698 switch (stype) {
b8473700 3699 case SVt_PVCV:
27242d61
NC
3700 location = (SV **) &GvCV(dstr);
3701 import_flag = GVf_IMPORTED_CV;
3702 goto common;
3703 case SVt_PVHV:
3704 location = (SV **) &GvHV(dstr);
3705 import_flag = GVf_IMPORTED_HV;
3706 goto common;
3707 case SVt_PVAV:
3708 location = (SV **) &GvAV(dstr);
3709 import_flag = GVf_IMPORTED_AV;
3710 goto common;
3711 case SVt_PVIO:
3712 location = (SV **) &GvIOp(dstr);
3713 goto common;
3714 case SVt_PVFM:
3715 location = (SV **) &GvFORM(dstr);
ef595a33 3716 goto common;
27242d61
NC
3717 default:
3718 location = &GvSV(dstr);
3719 import_flag = GVf_IMPORTED_SV;
3720 common:
b8473700 3721 if (intro) {
27242d61 3722 if (stype == SVt_PVCV) {
ea726b52 3723 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
5f2fca8a 3724 if (GvCVGEN(dstr)) {
27242d61
NC
3725 SvREFCNT_dec(GvCV(dstr));
3726 GvCV(dstr) = NULL;
3727 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
27242d61 3728 }
b8473700 3729 }
27242d61 3730 SAVEGENERICSV(*location);
b8473700
NC
3731 }
3732 else
27242d61 3733 dref = *location;
5f2fca8a 3734 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
ea726b52 3735 CV* const cv = MUTABLE_CV(*location);
b8473700 3736 if (cv) {
159b6efe 3737 if (!GvCVGEN((const GV *)dstr) &&
b8473700
NC
3738 (CvROOT(cv) || CvXSUB(cv)))
3739 {
3740 /* Redefining a sub - warning is mandatory if
3741 it was a const and its value changed. */
ea726b52 3742 if (CvCONST(cv) && CvCONST((const CV *)sref)
126f53f3
NC
3743 && cv_const_sv(cv)
3744 == cv_const_sv((const CV *)sref)) {
6f207bd3 3745 NOOP;
b8473700
NC
3746 /* They are 2 constant subroutines generated from
3747 the same constant. This probably means that
3748 they are really the "same" proxy subroutine
3749 instantiated in 2 places. Most likely this is
3750 when a constant is exported twice. Don't warn.
3751 */
3752 }
3753 else if (ckWARN(WARN_REDEFINE)
3754 || (CvCONST(cv)
ea726b52 3755 && (!CvCONST((const CV *)sref)
b8473700 3756 || sv_cmp(cv_const_sv(cv),
126f53f3
NC
3757 cv_const_sv((const CV *)
3758 sref))))) {
b8473700 3759 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10edeb5d
JH
3760 (const char *)
3761 (CvCONST(cv)
3762 ? "Constant subroutine %s::%s redefined"
3763 : "Subroutine %s::%s redefined"),
159b6efe
NC
3764 HvNAME_get(GvSTASH((const GV *)dstr)),
3765 GvENAME(MUTABLE_GV(dstr)));
b8473700
NC
3766 }
3767 }
3768 if (!intro)
159b6efe 3769 cv_ckproto_len(cv, (const GV *)dstr,
cbf82dd0
NC
3770 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3771 SvPOK(sref) ? SvCUR(sref) : 0);
b8473700 3772 }
b8473700
NC
3773 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3774 GvASSUMECV_on(dstr);
dd69841b 3775 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
b8473700 3776 }
2440974c 3777 *location = sref;
3386d083
NC
3778 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3779 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3780 GvFLAGS(dstr) |= import_flag;
b8473700 3781 }
d851b122
TC
3782 if (stype == SVt_PVAV && strEQ(GvNAME((GV*)dstr), "ISA")) {
3783 sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3784 mro_isa_changed_in(GvSTASH(dstr));
3785 }
b8473700
NC
3786 break;
3787 }
b37c2d43 3788 SvREFCNT_dec(dref);
b8473700
NC
3789 if (SvTAINTED(sstr))
3790 SvTAINT(dstr);
3791 return;
3792}
3793
8d6d96c1 3794void
7bc54cea 3795Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
8d6d96c1 3796{
97aff369 3797 dVAR;
8990e307
LW
3798 register U32 sflags;
3799 register int dtype;
42d0e0b7 3800 register svtype stype;
463ee0b2 3801
7918f24d
NC
3802 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3803
79072805
LW
3804 if (sstr == dstr)
3805 return;
29f4f0ab
NC
3806
3807 if (SvIS_FREED(dstr)) {
3808 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
be2597df 3809 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
29f4f0ab 3810 }
765f542d 3811 SV_CHECK_THINKFIRST_COW_DROP(dstr);
79072805 3812 if (!sstr)
3280af22 3813 sstr = &PL_sv_undef;
29f4f0ab 3814 if (SvIS_FREED(sstr)) {
6c9570dc
MHM
3815 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3816 (void*)sstr, (void*)dstr);
29f4f0ab 3817 }
8990e307
LW
3818 stype = SvTYPE(sstr);
3819 dtype = SvTYPE(dstr);
79072805 3820
52944de8 3821 (void)SvAMAGIC_off(dstr);
7a5fa8a2 3822 if ( SvVOK(dstr) )
ece467f9
JP
3823 {
3824 /* need to nuke the magic */
3825 mg_free(dstr);
ece467f9 3826 }
9e7bc3e8 3827
463ee0b2 3828 /* There's a lot of redundancy below but we're going for speed here */
79072805 3829
8990e307 3830 switch (stype) {
79072805 3831 case SVt_NULL:
aece5585 3832 undef_sstr:
20408e3c
GS
3833 if (dtype != SVt_PVGV) {
3834 (void)SvOK_off(dstr);
3835 return;
3836 }
3837 break;
463ee0b2 3838 case SVt_IV:
aece5585
GA
3839 if (SvIOK(sstr)) {
3840 switch (dtype) {
3841 case SVt_NULL:
8990e307 3842 sv_upgrade(dstr, SVt_IV);
aece5585
GA
3843 break;
3844 case SVt_NV:
aece5585 3845 case SVt_PV:
a0d0e21e 3846 sv_upgrade(dstr, SVt_PVIV);
aece5585 3847 break;
010be86b
NC
3848 case SVt_PVGV:
3849 goto end_of_first_switch;
aece5585
GA
3850 }
3851 (void)SvIOK_only(dstr);
45977657 3852 SvIV_set(dstr, SvIVX(sstr));
25da4f38
IZ
3853 if (SvIsUV(sstr))
3854 SvIsUV_on(dstr);
37c25af0
NC
3855 /* SvTAINTED can only be true if the SV has taint magic, which in
3856 turn means that the SV type is PVMG (or greater). This is the
3857 case statement for SVt_IV, so this cannot be true (whatever gcov
3858 may say). */
3859 assert(!SvTAINTED(sstr));
aece5585 3860 return;
8990e307 3861 }
4df7f6af
NC
3862 if (!SvROK(sstr))
3863 goto undef_sstr;
3864 if (dtype < SVt_PV && dtype != SVt_IV)
3865 sv_upgrade(dstr, SVt_IV);
3866 break;
aece5585 3867
463ee0b2 3868 case SVt_NV:
aece5585
GA
3869 if (SvNOK(sstr)) {
3870 switch (dtype) {
3871 case SVt_NULL:
3872 case SVt_IV:
8990e307 3873 sv_upgrade(dstr, SVt_NV);
aece5585 3874 break;
aece5585
GA
3875 case SVt_PV:
3876 case SVt_PVIV:
a0d0e21e 3877 sv_upgrade(dstr, SVt_PVNV);
aece5585 3878 break;
010be86b
NC
3879 case SVt_PVGV:
3880 goto end_of_first_switch;
aece5585 3881 }
9d6ce603 3882 SvNV_set(dstr, SvNVX(sstr));
aece5585 3883 (void)SvNOK_only(dstr);
37c25af0
NC
3884 /* SvTAINTED can only be true if the SV has taint magic, which in
3885 turn means that the SV type is PVMG (or greater). This is the
3886 case statement for SVt_NV, so this cannot be true (whatever gcov
3887 may say). */
3888 assert(!SvTAINTED(sstr));
aece5585 3889 return;
8990e307 3890 }
aece5585
GA
3891 goto undef_sstr;
3892
fc36a67e 3893 case SVt_PVFM:
f8c7b90f 3894#ifdef PERL_OLD_COPY_ON_WRITE
d89fc664
NC
3895 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3896 if (dtype < SVt_PVIV)
3897 sv_upgrade(dstr, SVt_PVIV);
3898 break;
3899 }
3900 /* Fall through */
3901#endif
3902 case SVt_PV:
8990e307 3903 if (dtype < SVt_PV)
463ee0b2 3904 sv_upgrade(dstr, SVt_PV);
463ee0b2
LW
3905 break;
3906 case SVt_PVIV:
8990e307 3907 if (dtype < SVt_PVIV)
463ee0b2 3908 sv_upgrade(dstr, SVt_PVIV);
463ee0b2
LW
3909 break;
3910 case SVt_PVNV:
8990e307 3911 if (dtype < SVt_PVNV)
463ee0b2 3912 sv_upgrade(dstr, SVt_PVNV);
463ee0b2 3913 break;
489f7bfe 3914 default:
a3b680e6
AL
3915 {
3916 const char * const type = sv_reftype(sstr,0);
533c011a 3917 if (PL_op)
94bbb3f4 3918 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4633a7c4 3919 else
a3b680e6
AL
3920 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3921 }
4633a7c4
LW
3922 break;
3923
f0826785
BM
3924 case SVt_REGEXP:
3925 if (dtype < SVt_REGEXP)
3926 sv_upgrade(dstr, SVt_REGEXP);
3927 break;
3928
cecf5685 3929 /* case SVt_BIND: */
39cb70dc 3930 case SVt_PVLV:
79072805 3931 case SVt_PVGV:
cecf5685 3932 if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
d4c19fe8 3933 glob_assign_glob(dstr, sstr, dtype);
b8c701c1 3934 return;
79072805 3935 }
cecf5685 3936 /* SvVALID means that this PVGV is playing at being an FBM. */
5f66b61c 3937 /*FALLTHROUGH*/
79072805 3938
489f7bfe 3939 case SVt_PVMG:
8d6d96c1 3940 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
973f89ab 3941 mg_get(sstr);
1d9c78c6 3942 if (SvTYPE(sstr) != stype) {
973f89ab 3943 stype = SvTYPE(sstr);
cecf5685 3944 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
d4c19fe8 3945 glob_assign_glob(dstr, sstr, dtype);
b8c701c1
NC
3946 return;
3947 }
973f89ab
CS
3948 }
3949 }
ded42b9f 3950 if (stype == SVt_PVLV)
862a34c6 3951 SvUPGRADE(dstr, SVt_PVNV);
ded42b9f 3952 else
42d0e0b7 3953 SvUPGRADE(dstr, (svtype)stype);
79072805 3954 }
010be86b 3955 end_of_first_switch:
79072805 3956
ff920335
NC
3957 /* dstr may have been upgraded. */
3958 dtype = SvTYPE(dstr);
8990e307
LW
3959 sflags = SvFLAGS(sstr);
3960
ba2fdce6 3961 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
85324b4d
NC
3962 /* Assigning to a subroutine sets the prototype. */
3963 if (SvOK(sstr)) {
3964 STRLEN len;
3965 const char *const ptr = SvPV_const(sstr, len);
3966
3967 SvGROW(dstr, len + 1);
3968 Copy(ptr, SvPVX(dstr), len + 1, char);
3969 SvCUR_set(dstr, len);
fcddd32e 3970 SvPOK_only(dstr);
ba2fdce6 3971 SvFLAGS(dstr) |= sflags & SVf_UTF8;
85324b4d
NC
3972 } else {
3973 SvOK_off(dstr);
3974 }
ba2fdce6
NC
3975 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3976 const char * const type = sv_reftype(dstr,0);
3977 if (PL_op)
94bbb3f4 3978 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
ba2fdce6
NC
3979 else
3980 Perl_croak(aTHX_ "Cannot copy to %s", type);
85324b4d 3981 } else if (sflags & SVf_ROK) {
cecf5685 3982 if (isGV_with_GP(dstr) && dtype == SVt_PVGV
785bee4f 3983 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
acaa9288
NC
3984 sstr = SvRV(sstr);
3985 if (sstr == dstr) {
3986 if (GvIMPORTED(dstr) != GVf_IMPORTED
3987 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3988 {
3989 GvIMPORTED_on(dstr);
3990 }
3991 GvMULTI_on(dstr);
3992 return;
3993 }
785bee4f
NC
3994 glob_assign_glob(dstr, sstr, dtype);
3995 return;
acaa9288
NC
3996 }
3997
8990e307 3998 if (dtype >= SVt_PV) {
fdc5b023 3999 if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
d4c19fe8 4000 glob_assign_ref(dstr, sstr);
b8c701c1
NC
4001 return;
4002 }
3f7c398e 4003 if (SvPVX_const(dstr)) {
8bd4d4c5 4004 SvPV_free(dstr);
b162af07
SP
4005 SvLEN_set(dstr, 0);
4006 SvCUR_set(dstr, 0);
a0d0e21e 4007 }
8990e307 4008 }
a0d0e21e 4009 (void)SvOK_off(dstr);
b162af07 4010 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
96d4b0ee 4011 SvFLAGS(dstr) |= sflags & SVf_ROK;
dfd48732
NC
4012 assert(!(sflags & SVp_NOK));
4013 assert(!(sflags & SVp_IOK));
4014 assert(!(sflags & SVf_NOK));
4015 assert(!(sflags & SVf_IOK));
ed6116ce 4016 }
cecf5685 4017 else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
c0c44674 4018 if (!(sflags & SVf_OK)) {
a2a5de95
NC
4019 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4020 "Undefined value assigned to typeglob");
c0c44674
NC
4021 }
4022 else {
4023 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
daba3364 4024 if (dstr != (const SV *)gv) {
c0c44674 4025 if (GvGP(dstr))
159b6efe 4026 gp_free(MUTABLE_GV(dstr));
c0c44674
NC
4027 GvGP(dstr) = gp_ref(GvGP(gv));
4028 }
4029 }
4030 }
f0826785
BM
4031 else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4032 reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4033 }
8990e307 4034 else if (sflags & SVp_POK) {
765f542d 4035 bool isSwipe = 0;
79072805
LW
4036
4037 /*
4038 * Check to see if we can just swipe the string. If so, it's a
4039 * possible small lose on short strings, but a big win on long ones.
3f7c398e
SP
4040 * It might even be a win on short strings if SvPVX_const(dstr)
4041 * has to be allocated and SvPVX_const(sstr) has to be freed.
34482cd6
NC
4042 * Likewise if we can set up COW rather than doing an actual copy, we
4043 * drop to the else clause, as the swipe code and the COW setup code
4044 * have much in common.
79072805
LW
4045 */
4046
120fac95
NC
4047 /* Whichever path we take through the next code, we want this true,
4048 and doing it now facilitates the COW check. */
4049 (void)SvPOK_only(dstr);
4050
765f542d 4051 if (
34482cd6
NC
4052 /* If we're already COW then this clause is not true, and if COW
4053 is allowed then we drop down to the else and make dest COW
4054 with us. If caller hasn't said that we're allowed to COW
4055 shared hash keys then we don't do the COW setup, even if the
4056 source scalar is a shared hash key scalar. */
4057 (((flags & SV_COW_SHARED_HASH_KEYS)
4058 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4059 : 1 /* If making a COW copy is forbidden then the behaviour we
4060 desire is as if the source SV isn't actually already
4061 COW, even if it is. So we act as if the source flags
4062 are not COW, rather than actually testing them. */
4063 )
f8c7b90f 4064#ifndef PERL_OLD_COPY_ON_WRITE
34482cd6
NC
4065 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4066 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4067 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4068 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4069 but in turn, it's somewhat dead code, never expected to go
4070 live, but more kept as a placeholder on how to do it better
4071 in a newer implementation. */
4072 /* If we are COW and dstr is a suitable target then we drop down
4073 into the else and make dest a COW of us. */
b8f9541a
NC
4074 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4075#endif
4076 )
765f542d 4077 &&
765f542d
NC
4078 !(isSwipe =
4079 (sflags & SVs_TEMP) && /* slated for free anyway? */
4080 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
5fcdf167
NC
4081 (!(flags & SV_NOSTEAL)) &&
4082 /* and we're allowed to steal temps */
765f542d 4083 SvREFCNT(sstr) == 1 && /* and no other references to it? */
61e5f455 4084 SvLEN(sstr)) /* and really is a string */
f8c7b90f 4085#ifdef PERL_OLD_COPY_ON_WRITE
cb23d5b1
NC
4086 && ((flags & SV_COW_SHARED_HASH_KEYS)
4087 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4088 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4b1c7d9e 4089 && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
cb23d5b1 4090 : 1)
765f542d
NC
4091#endif
4092 ) {
4093 /* Failed the swipe test, and it's not a shared hash key either.
4094 Have to copy the string. */
4095 STRLEN len = SvCUR(sstr);
4096 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3f7c398e 4097 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
765f542d
NC
4098 SvCUR_set(dstr, len);
4099 *SvEND(dstr) = '\0';
765f542d 4100 } else {
f8c7b90f 4101 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
765f542d 4102 be true in here. */
765f542d
NC
4103 /* Either it's a shared hash key, or it's suitable for
4104 copy-on-write or we can swipe the string. */
46187eeb 4105 if (DEBUG_C_TEST) {
ed252734 4106 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
e419cbc5
NC
4107 sv_dump(sstr);
4108 sv_dump(dstr);
46187eeb 4109 }
f8c7b90f 4110#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4111 if (!isSwipe) {
765f542d
NC
4112 if ((sflags & (SVf_FAKE | SVf_READONLY))
4113 != (SVf_FAKE | SVf_READONLY)) {
4114 SvREADONLY_on(sstr);
4115 SvFAKE_on(sstr);
4116 /* Make the source SV into a loop of 1.
4117 (about to become 2) */
a29f6d03 4118 SV_COW_NEXT_SV_SET(sstr, sstr);
765f542d
NC
4119 }
4120 }
4121#endif
4122 /* Initial code is common. */
94010e71
NC
4123 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4124 SvPV_free(dstr);
79072805 4125 }
765f542d 4126
765f542d
NC
4127 if (!isSwipe) {
4128 /* making another shared SV. */
4129 STRLEN cur = SvCUR(sstr);
4130 STRLEN len = SvLEN(sstr);
f8c7b90f 4131#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4132 if (len) {
b8f9541a 4133 assert (SvTYPE(dstr) >= SVt_PVIV);
765f542d
NC
4134 /* SvIsCOW_normal */
4135 /* splice us in between source and next-after-source. */
a29f6d03
NC
4136 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4137 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4138 SvPV_set(dstr, SvPVX_mutable(sstr));
a604c751
NC
4139 } else
4140#endif
4141 {
765f542d 4142 /* SvIsCOW_shared_hash */
46187eeb
NC
4143 DEBUG_C(PerlIO_printf(Perl_debug_log,
4144 "Copy on write: Sharing hash\n"));
b8f9541a 4145
bdd68bc3 4146 assert (SvTYPE(dstr) >= SVt_PV);
765f542d 4147 SvPV_set(dstr,
d1db91c6 4148 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
bdd68bc3 4149 }
87a1ef3d
SP
4150 SvLEN_set(dstr, len);
4151 SvCUR_set(dstr, cur);
765f542d
NC
4152 SvREADONLY_on(dstr);
4153 SvFAKE_on(dstr);
765f542d
NC
4154 }
4155 else
765f542d 4156 { /* Passes the swipe test. */
78d1e721 4157 SvPV_set(dstr, SvPVX_mutable(sstr));
765f542d
NC
4158 SvLEN_set(dstr, SvLEN(sstr));
4159 SvCUR_set(dstr, SvCUR(sstr));
4160
4161 SvTEMP_off(dstr);
4162 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
6136c704 4163 SvPV_set(sstr, NULL);
765f542d
NC
4164 SvLEN_set(sstr, 0);
4165 SvCUR_set(sstr, 0);
4166 SvTEMP_off(sstr);
4167 }
4168 }
8990e307 4169 if (sflags & SVp_NOK) {
9d6ce603 4170 SvNV_set(dstr, SvNVX(sstr));
79072805 4171 }
8990e307 4172 if (sflags & SVp_IOK) {
23525414
NC
4173 SvIV_set(dstr, SvIVX(sstr));
4174 /* Must do this otherwise some other overloaded use of 0x80000000
4175 gets confused. I guess SVpbm_VALID */
2b1c7e3e 4176 if (sflags & SVf_IVisUV)
25da4f38 4177 SvIsUV_on(dstr);
79072805 4178 }
96d4b0ee 4179 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4f2da183 4180 {
b0a11fe1 4181 const MAGIC * const smg = SvVSTRING_mg(sstr);
4f2da183
NC
4182 if (smg) {
4183 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4184 smg->mg_ptr, smg->mg_len);
4185 SvRMAGICAL_on(dstr);
4186 }
7a5fa8a2 4187 }
79072805 4188 }
5d581361 4189 else if (sflags & (SVp_IOK|SVp_NOK)) {
c2468cc7 4190 (void)SvOK_off(dstr);
96d4b0ee 4191 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
5d581361
NC
4192 if (sflags & SVp_IOK) {
4193 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4194 SvIV_set(dstr, SvIVX(sstr));
4195 }
3332b3c1 4196 if (sflags & SVp_NOK) {
9d6ce603 4197 SvNV_set(dstr, SvNVX(sstr));
3332b3c1
JH
4198 }
4199 }
79072805 4200 else {
f7877b28 4201 if (isGV_with_GP(sstr)) {
180488f8
NC
4202 /* This stringification rule for globs is spread in 3 places.
4203 This feels bad. FIXME. */
4204 const U32 wasfake = sflags & SVf_FAKE;
4205
4206 /* FAKE globs can get coerced, so need to turn this off
4207 temporarily if it is on. */
4208 SvFAKE_off(sstr);
159b6efe 4209 gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
180488f8
NC
4210 SvFLAGS(sstr) |= wasfake;
4211 }
20408e3c
GS
4212 else
4213 (void)SvOK_off(dstr);
a0d0e21e 4214 }
27c9684d
AP
4215 if (SvTAINTED(sstr))
4216 SvTAINT(dstr);
79072805
LW
4217}
4218
954c1994
GS
4219/*
4220=for apidoc sv_setsv_mg
4221
4222Like C<sv_setsv>, but also handles 'set' magic.
4223
4224=cut
4225*/
4226
79072805 4227void
7bc54cea 4228Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
ef50df4b 4229{
7918f24d
NC
4230 PERL_ARGS_ASSERT_SV_SETSV_MG;
4231
ef50df4b
GS
4232 sv_setsv(dstr,sstr);
4233 SvSETMAGIC(dstr);
4234}
4235
f8c7b90f 4236#ifdef PERL_OLD_COPY_ON_WRITE
ed252734
NC
4237SV *
4238Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4239{
4240 STRLEN cur = SvCUR(sstr);
4241 STRLEN len = SvLEN(sstr);
4242 register char *new_pv;
4243
7918f24d
NC
4244 PERL_ARGS_ASSERT_SV_SETSV_COW;
4245
ed252734
NC
4246 if (DEBUG_C_TEST) {
4247 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
6c9570dc 4248 (void*)sstr, (void*)dstr);
ed252734
NC
4249 sv_dump(sstr);
4250 if (dstr)
4251 sv_dump(dstr);
4252 }
4253
4254 if (dstr) {
4255 if (SvTHINKFIRST(dstr))
4256 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3f7c398e
SP
4257 else if (SvPVX_const(dstr))
4258 Safefree(SvPVX_const(dstr));
ed252734
NC
4259 }
4260 else
4261 new_SV(dstr);
862a34c6 4262 SvUPGRADE(dstr, SVt_PVIV);
ed252734
NC
4263
4264 assert (SvPOK(sstr));
4265 assert (SvPOKp(sstr));
4266 assert (!SvIOK(sstr));
4267 assert (!SvIOKp(sstr));
4268 assert (!SvNOK(sstr));
4269 assert (!SvNOKp(sstr));
4270
4271 if (SvIsCOW(sstr)) {
4272
4273 if (SvLEN(sstr) == 0) {
4274 /* source is a COW shared hash key. */
ed252734
NC
4275 DEBUG_C(PerlIO_printf(Perl_debug_log,
4276 "Fast copy on write: Sharing hash\n"));
d1db91c6 4277 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
ed252734
NC
4278 goto common_exit;
4279 }
4280 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4281 } else {
4282 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
862a34c6 4283 SvUPGRADE(sstr, SVt_PVIV);
ed252734
NC
4284 SvREADONLY_on(sstr);
4285 SvFAKE_on(sstr);
4286 DEBUG_C(PerlIO_printf(Perl_debug_log,
4287 "Fast copy on write: Converting sstr to COW\n"));
4288 SV_COW_NEXT_SV_SET(dstr, sstr);
4289 }
4290 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4291 new_pv = SvPVX_mutable(sstr);
ed252734
NC
4292
4293 common_exit:
4294 SvPV_set(dstr, new_pv);
4295 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4296 if (SvUTF8(sstr))
4297 SvUTF8_on(dstr);
87a1ef3d
SP
4298 SvLEN_set(dstr, len);
4299 SvCUR_set(dstr, cur);
ed252734
NC
4300 if (DEBUG_C_TEST) {
4301 sv_dump(dstr);
4302 }
4303 return dstr;
4304}
4305#endif
4306
954c1994
GS
4307/*
4308=for apidoc sv_setpvn
4309
4310Copies a string into an SV. The C<len> parameter indicates the number of
9e09f5f2
MHM
4311bytes to be copied. If the C<ptr> argument is NULL the SV will become
4312undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
954c1994
GS
4313
4314=cut
4315*/
4316
ef50df4b 4317void
2e000ff2 4318Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
79072805 4319{
97aff369 4320 dVAR;
c6f8c383 4321 register char *dptr;
22c522df 4322
7918f24d
NC
4323 PERL_ARGS_ASSERT_SV_SETPVN;
4324
765f542d 4325 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4326 if (!ptr) {
a0d0e21e 4327 (void)SvOK_off(sv);
463ee0b2
LW
4328 return;
4329 }
22c522df
JH
4330 else {
4331 /* len is STRLEN which is unsigned, need to copy to signed */
a3b680e6 4332 const IV iv = len;
9c5ffd7c
JH
4333 if (iv < 0)
4334 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
22c522df 4335 }
862a34c6 4336 SvUPGRADE(sv, SVt_PV);
c6f8c383 4337
5902b6a9 4338 dptr = SvGROW(sv, len + 1);
c6f8c383
GA
4339 Move(ptr,dptr,len,char);
4340 dptr[len] = '\0';
79072805 4341 SvCUR_set(sv, len);
1aa99e6b 4342 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4343 SvTAINT(sv);
79072805
LW
4344}
4345
954c1994
GS
4346/*
4347=for apidoc sv_setpvn_mg
4348
4349Like C<sv_setpvn>, but also handles 'set' magic.
4350
4351=cut
4352*/
4353
79072805 4354void
2e000ff2 4355Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
ef50df4b 4356{
7918f24d
NC
4357 PERL_ARGS_ASSERT_SV_SETPVN_MG;
4358
ef50df4b
GS
4359 sv_setpvn(sv,ptr,len);
4360 SvSETMAGIC(sv);
4361}
4362
954c1994
GS
4363/*
4364=for apidoc sv_setpv
4365
4366Copies a string into an SV. The string must be null-terminated. Does not
4367handle 'set' magic. See C<sv_setpv_mg>.
4368
4369=cut
4370*/
4371
ef50df4b 4372void
2e000ff2 4373Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4374{
97aff369 4375 dVAR;
79072805
LW
4376 register STRLEN len;
4377
7918f24d
NC
4378 PERL_ARGS_ASSERT_SV_SETPV;
4379
765f542d 4380 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4381 if (!ptr) {
a0d0e21e 4382 (void)SvOK_off(sv);
463ee0b2
LW
4383 return;
4384 }
79072805 4385 len = strlen(ptr);
862a34c6 4386 SvUPGRADE(sv, SVt_PV);
c6f8c383 4387
79072805 4388 SvGROW(sv, len + 1);
463ee0b2 4389 Move(ptr,SvPVX(sv),len+1,char);
79072805 4390 SvCUR_set(sv, len);
1aa99e6b 4391 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2
LW
4392 SvTAINT(sv);
4393}
4394
954c1994
GS
4395/*
4396=for apidoc sv_setpv_mg
4397
4398Like C<sv_setpv>, but also handles 'set' magic.
4399
4400=cut
4401*/
4402
463ee0b2 4403void
2e000ff2 4404Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 4405{
7918f24d
NC
4406 PERL_ARGS_ASSERT_SV_SETPV_MG;
4407
ef50df4b
GS
4408 sv_setpv(sv,ptr);
4409 SvSETMAGIC(sv);
4410}
4411
954c1994 4412/*
47518d95 4413=for apidoc sv_usepvn_flags
954c1994 4414
794a0d33
JH
4415Tells an SV to use C<ptr> to find its string value. Normally the
4416string is stored inside the SV but sv_usepvn allows the SV to use an
4417outside string. The C<ptr> should point to memory that was allocated
c1c21316
NC
4418by C<malloc>. The string length, C<len>, must be supplied. By default
4419this function will realloc (i.e. move) the memory pointed to by C<ptr>,
794a0d33
JH
4420so that pointer should not be freed or used by the programmer after
4421giving it to sv_usepvn, and neither should any pointers from "behind"
c1c21316
NC
4422that pointer (e.g. ptr + 1) be used.
4423
4424If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4425SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
cbf82dd0 4426will be skipped. (i.e. the buffer is actually at least 1 byte longer than
c1c21316 4427C<len>, and already meets the requirements for storing in C<SvPVX>)
954c1994
GS
4428
4429=cut
4430*/
4431
ef50df4b 4432void
2e000ff2 4433Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
463ee0b2 4434{
97aff369 4435 dVAR;
1936d2a7 4436 STRLEN allocate;
7918f24d
NC
4437
4438 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4439
765f542d 4440 SV_CHECK_THINKFIRST_COW_DROP(sv);
862a34c6 4441 SvUPGRADE(sv, SVt_PV);
463ee0b2 4442 if (!ptr) {
a0d0e21e 4443 (void)SvOK_off(sv);
47518d95
NC
4444 if (flags & SV_SMAGIC)
4445 SvSETMAGIC(sv);
463ee0b2
LW
4446 return;
4447 }
3f7c398e 4448 if (SvPVX_const(sv))
8bd4d4c5 4449 SvPV_free(sv);
1936d2a7 4450
0b7042f9 4451#ifdef DEBUGGING
2e90b4cd
NC
4452 if (flags & SV_HAS_TRAILING_NUL)
4453 assert(ptr[len] == '\0');
0b7042f9 4454#endif
2e90b4cd 4455
c1c21316 4456 allocate = (flags & SV_HAS_TRAILING_NUL)
5d487c26 4457 ? len + 1 :
ca7c1a29 4458#ifdef Perl_safesysmalloc_size
5d487c26
NC
4459 len + 1;
4460#else
4461 PERL_STRLEN_ROUNDUP(len + 1);
4462#endif
cbf82dd0
NC
4463 if (flags & SV_HAS_TRAILING_NUL) {
4464 /* It's long enough - do nothing.
4465 Specfically Perl_newCONSTSUB is relying on this. */
4466 } else {
69d25b4f 4467#ifdef DEBUGGING
69d25b4f 4468 /* Force a move to shake out bugs in callers. */
10edeb5d 4469 char *new_ptr = (char*)safemalloc(allocate);
69d25b4f
NC
4470 Copy(ptr, new_ptr, len, char);
4471 PoisonFree(ptr,len,char);
4472 Safefree(ptr);
4473 ptr = new_ptr;
69d25b4f 4474#else
10edeb5d 4475 ptr = (char*) saferealloc (ptr, allocate);
69d25b4f 4476#endif
cbf82dd0 4477 }
ca7c1a29
NC
4478#ifdef Perl_safesysmalloc_size
4479 SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5d487c26 4480#else
1936d2a7 4481 SvLEN_set(sv, allocate);
5d487c26
NC
4482#endif
4483 SvCUR_set(sv, len);
4484 SvPV_set(sv, ptr);
c1c21316 4485 if (!(flags & SV_HAS_TRAILING_NUL)) {
97a130b8 4486 ptr[len] = '\0';
c1c21316 4487 }
1aa99e6b 4488 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4489 SvTAINT(sv);
47518d95
NC
4490 if (flags & SV_SMAGIC)
4491 SvSETMAGIC(sv);
ef50df4b
GS
4492}
4493
f8c7b90f 4494#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4495/* Need to do this *after* making the SV normal, as we need the buffer
4496 pointer to remain valid until after we've copied it. If we let go too early,
4497 another thread could invalidate it by unsharing last of the same hash key
4498 (which it can do by means other than releasing copy-on-write Svs)
4499 or by changing the other copy-on-write SVs in the loop. */
4500STATIC void
5302ffd4 4501S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
765f542d 4502{
7918f24d
NC
4503 PERL_ARGS_ASSERT_SV_RELEASE_COW;
4504
5302ffd4 4505 { /* this SV was SvIsCOW_normal(sv) */
765f542d 4506 /* we need to find the SV pointing to us. */
cf5629ad 4507 SV *current = SV_COW_NEXT_SV(after);
7a5fa8a2 4508
765f542d
NC
4509 if (current == sv) {
4510 /* The SV we point to points back to us (there were only two of us
4511 in the loop.)
4512 Hence other SV is no longer copy on write either. */
4513 SvFAKE_off(after);
4514 SvREADONLY_off(after);
4515 } else {
4516 /* We need to follow the pointers around the loop. */
4517 SV *next;
4518 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4519 assert (next);
4520 current = next;
4521 /* don't loop forever if the structure is bust, and we have
4522 a pointer into a closed loop. */
4523 assert (current != after);
3f7c398e 4524 assert (SvPVX_const(current) == pvx);
765f542d
NC
4525 }
4526 /* Make the SV before us point to the SV after us. */
a29f6d03 4527 SV_COW_NEXT_SV_SET(current, after);
765f542d 4528 }
765f542d
NC
4529 }
4530}
765f542d 4531#endif
645c22ef
DM
4532/*
4533=for apidoc sv_force_normal_flags
4534
4535Undo various types of fakery on an SV: if the PV is a shared string, make
4536a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
765f542d
NC
4537an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4538we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4539then a copy-on-write scalar drops its PV buffer (if any) and becomes
4540SvPOK_off rather than making a copy. (Used where this scalar is about to be
d3050d9d 4541set to some other value.) In addition, the C<flags> parameter gets passed to
765f542d
NC
4542C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4543with flags set to 0.
645c22ef
DM
4544
4545=cut
4546*/
4547
6fc92669 4548void
2e000ff2 4549Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
0f15f207 4550{
97aff369 4551 dVAR;
7918f24d
NC
4552
4553 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4554
f8c7b90f 4555#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4556 if (SvREADONLY(sv)) {
765f542d 4557 if (SvFAKE(sv)) {
b64e5050 4558 const char * const pvx = SvPVX_const(sv);
a28509cc
AL
4559 const STRLEN len = SvLEN(sv);
4560 const STRLEN cur = SvCUR(sv);
5302ffd4
NC
4561 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4562 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4563 we'll fail an assertion. */
4564 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4565
46187eeb
NC
4566 if (DEBUG_C_TEST) {
4567 PerlIO_printf(Perl_debug_log,
4568 "Copy on write: Force normal %ld\n",
4569 (long) flags);
e419cbc5 4570 sv_dump(sv);
46187eeb 4571 }
765f542d
NC
4572 SvFAKE_off(sv);
4573 SvREADONLY_off(sv);
9f653bb5 4574 /* This SV doesn't own the buffer, so need to Newx() a new one: */
6136c704 4575 SvPV_set(sv, NULL);
87a1ef3d 4576 SvLEN_set(sv, 0);
765f542d
NC
4577 if (flags & SV_COW_DROP_PV) {
4578 /* OK, so we don't need to copy our buffer. */
4579 SvPOK_off(sv);
4580 } else {
4581 SvGROW(sv, cur + 1);
4582 Move(pvx,SvPVX(sv),cur,char);
87a1ef3d 4583 SvCUR_set(sv, cur);
765f542d
NC
4584 *SvEND(sv) = '\0';
4585 }
5302ffd4
NC
4586 if (len) {
4587 sv_release_COW(sv, pvx, next);
4588 } else {
4589 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4590 }
46187eeb 4591 if (DEBUG_C_TEST) {
e419cbc5 4592 sv_dump(sv);
46187eeb 4593 }
765f542d 4594 }
923e4eb5 4595 else if (IN_PERL_RUNTIME)
f1f66076 4596 Perl_croak(aTHX_ "%s", PL_no_modify);
765f542d
NC
4597 }
4598#else
2213622d 4599 if (SvREADONLY(sv)) {
1c846c1f 4600 if (SvFAKE(sv)) {
b64e5050 4601 const char * const pvx = SvPVX_const(sv);
66a1b24b 4602 const STRLEN len = SvCUR(sv);
10bcdfd6
NC
4603 SvFAKE_off(sv);
4604 SvREADONLY_off(sv);
bd61b366 4605 SvPV_set(sv, NULL);
66a1b24b 4606 SvLEN_set(sv, 0);
1c846c1f 4607 SvGROW(sv, len + 1);
706aa1c9 4608 Move(pvx,SvPVX(sv),len,char);
1c846c1f 4609 *SvEND(sv) = '\0';
bdd68bc3 4610 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
1c846c1f 4611 }
923e4eb5 4612 else if (IN_PERL_RUNTIME)
f1f66076 4613 Perl_croak(aTHX_ "%s", PL_no_modify);
0f15f207 4614 }
765f542d 4615#endif
2213622d 4616 if (SvROK(sv))
840a7b70 4617 sv_unref_flags(sv, flags);
6fc92669
GS
4618 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4619 sv_unglob(sv);
b9ad13ac
NC
4620 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4621 /* Need to downgrade the REGEXP to a simple(r) scalar. This is analagous
4622 to sv_unglob. We only need it here, so inline it. */
4623 const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4624 SV *const temp = newSV_type(new_type);
4625 void *const temp_p = SvANY(sv);
4626
4627 if (new_type == SVt_PVMG) {
4628 SvMAGIC_set(temp, SvMAGIC(sv));
4629 SvMAGIC_set(sv, NULL);
4630 SvSTASH_set(temp, SvSTASH(sv));
4631 SvSTASH_set(sv, NULL);
4632 }
4633 SvCUR_set(temp, SvCUR(sv));
4634 /* Remember that SvPVX is in the head, not the body. */
4635 if (SvLEN(temp)) {
4636 SvLEN_set(temp, SvLEN(sv));
4637 /* This signals "buffer is owned by someone else" in sv_clear,
4638 which is the least effort way to stop it freeing the buffer.
4639 */
4640 SvLEN_set(sv, SvLEN(sv)+1);
4641 } else {
4642 /* Their buffer is already owned by someone else. */
4643 SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4644 SvLEN_set(temp, SvCUR(sv)+1);
4645 }
4646
4647 /* Now swap the rest of the bodies. */
4648
4649 SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4650 SvFLAGS(sv) |= new_type;
4651 SvANY(sv) = SvANY(temp);
4652
4653 SvFLAGS(temp) &= ~(SVTYPEMASK);
4654 SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4655 SvANY(temp) = temp_p;
4656
4657 SvREFCNT_dec(temp);
4658 }
0f15f207 4659}
1c846c1f 4660
645c22ef 4661/*
954c1994
GS
4662=for apidoc sv_chop
4663
1c846c1f 4664Efficient removal of characters from the beginning of the string buffer.
954c1994
GS
4665SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4666the string buffer. The C<ptr> becomes the first character of the adjusted
645c22ef 4667string. Uses the "OOK hack".
3f7c398e 4668Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
31869a79 4669refer to the same chunk of data.
954c1994
GS
4670
4671=cut
4672*/
4673
79072805 4674void
2e000ff2 4675Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4676{
69240efd
NC
4677 STRLEN delta;
4678 STRLEN old_delta;
7a4bba22
NC
4679 U8 *p;
4680#ifdef DEBUGGING
4681 const U8 *real_start;
4682#endif
6c65d5f9 4683 STRLEN max_delta;
7a4bba22 4684
7918f24d
NC
4685 PERL_ARGS_ASSERT_SV_CHOP;
4686
a0d0e21e 4687 if (!ptr || !SvPOKp(sv))
79072805 4688 return;
3f7c398e 4689 delta = ptr - SvPVX_const(sv);
15895f8a
NC
4690 if (!delta) {
4691 /* Nothing to do. */
4692 return;
4693 }
6c65d5f9
NC
4694 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4695 nothing uses the value of ptr any more. */
837cb3ba 4696 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
6c65d5f9
NC
4697 if (ptr <= SvPVX_const(sv))
4698 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4699 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
2213622d 4700 SV_CHECK_THINKFIRST(sv);
6c65d5f9
NC
4701 if (delta > max_delta)
4702 Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4703 SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4704 SvPVX_const(sv) + max_delta);
79072805
LW
4705
4706 if (!SvOOK(sv)) {
50483b2c 4707 if (!SvLEN(sv)) { /* make copy of shared string */
3f7c398e 4708 const char *pvx = SvPVX_const(sv);
a28509cc 4709 const STRLEN len = SvCUR(sv);
50483b2c 4710 SvGROW(sv, len + 1);
706aa1c9 4711 Move(pvx,SvPVX(sv),len,char);
50483b2c
JD
4712 *SvEND(sv) = '\0';
4713 }
7a5fa8a2 4714 SvFLAGS(sv) |= SVf_OOK;
7a4bba22
NC
4715 old_delta = 0;
4716 } else {
69240efd 4717 SvOOK_offset(sv, old_delta);
79072805 4718 }
b162af07
SP
4719 SvLEN_set(sv, SvLEN(sv) - delta);
4720 SvCUR_set(sv, SvCUR(sv) - delta);
f880fe2f 4721 SvPV_set(sv, SvPVX(sv) + delta);
7a4bba22
NC
4722
4723 p = (U8 *)SvPVX_const(sv);
4724
4725 delta += old_delta;
4726
50af2e61 4727#ifdef DEBUGGING
7a4bba22
NC
4728 real_start = p - delta;
4729#endif
4730
69240efd
NC
4731 assert(delta);
4732 if (delta < 0x100) {
7a4bba22
NC
4733 *--p = (U8) delta;
4734 } else {
69240efd
NC
4735 *--p = 0;
4736 p -= sizeof(STRLEN);
4737 Copy((U8*)&delta, p, sizeof(STRLEN), U8);
7a4bba22
NC
4738 }
4739
4740#ifdef DEBUGGING
4741 /* Fill the preceding buffer with sentinals to verify that no-one is
4742 using it. */
4743 while (p > real_start) {
4744 --p;
4745 *p = (U8)PTR2UV(p);
50af2e61
NC
4746 }
4747#endif
79072805
LW
4748}
4749
954c1994
GS
4750/*
4751=for apidoc sv_catpvn
4752
4753Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4754C<len> indicates number of bytes to copy. If the SV has the UTF-8
4755status set, then the bytes appended should be valid UTF-8.
d5ce4a7c 4756Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
954c1994 4757
8d6d96c1
HS
4758=for apidoc sv_catpvn_flags
4759
4760Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4761C<len> indicates number of bytes to copy. If the SV has the UTF-8
4762status set, then the bytes appended should be valid UTF-8.
8d6d96c1
HS
4763If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4764appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4765in terms of this function.
4766
4767=cut
4768*/
4769
4770void
2e000ff2 4771Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
8d6d96c1 4772{
97aff369 4773 dVAR;
8d6d96c1 4774 STRLEN dlen;
fabdb6c0 4775 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
8d6d96c1 4776
7918f24d
NC
4777 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4778
8d6d96c1
HS
4779 SvGROW(dsv, dlen + slen + 1);
4780 if (sstr == dstr)
3f7c398e 4781 sstr = SvPVX_const(dsv);
8d6d96c1 4782 Move(sstr, SvPVX(dsv) + dlen, slen, char);
b162af07 4783 SvCUR_set(dsv, SvCUR(dsv) + slen);
8d6d96c1
HS
4784 *SvEND(dsv) = '\0';
4785 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4786 SvTAINT(dsv);
bddd5118
NC
4787 if (flags & SV_SMAGIC)
4788 SvSETMAGIC(dsv);
79072805
LW
4789}
4790
954c1994 4791/*
954c1994
GS
4792=for apidoc sv_catsv
4793
13e8c8e3
JH
4794Concatenates the string from SV C<ssv> onto the end of the string in
4795SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4796not 'set' magic. See C<sv_catsv_mg>.
954c1994 4797
8d6d96c1
HS
4798=for apidoc sv_catsv_flags
4799
4800Concatenates the string from SV C<ssv> onto the end of the string in
4801SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4802bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4803and C<sv_catsv_nomg> are implemented in terms of this function.
4804
4805=cut */
4806
ef50df4b 4807void
2e000ff2 4808Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
79072805 4809{
97aff369 4810 dVAR;
7918f24d
NC
4811
4812 PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4813
4814 if (ssv) {
00b6aa41
AL
4815 STRLEN slen;
4816 const char *spv = SvPV_const(ssv, slen);
4817 if (spv) {
bddd5118
NC
4818 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4819 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4820 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4821 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4822 dsv->sv_flags doesn't have that bit set.
4fd84b44 4823 Andy Dougherty 12 Oct 2001
bddd5118
NC
4824 */
4825 const I32 sutf8 = DO_UTF8(ssv);
4826 I32 dutf8;
13e8c8e3 4827
bddd5118
NC
4828 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4829 mg_get(dsv);
4830 dutf8 = DO_UTF8(dsv);
8d6d96c1 4831
bddd5118
NC
4832 if (dutf8 != sutf8) {
4833 if (dutf8) {
4834 /* Not modifying source SV, so taking a temporary copy. */
59cd0e26 4835 SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
13e8c8e3 4836
bddd5118
NC
4837 sv_utf8_upgrade(csv);
4838 spv = SvPV_const(csv, slen);
4839 }
4840 else
7bf79863
KW
4841 /* Leave enough space for the cat that's about to happen */
4842 sv_utf8_upgrade_flags_grow(dsv, 0, slen);
13e8c8e3 4843 }
bddd5118 4844 sv_catpvn_nomg(dsv, spv, slen);
e84ff256 4845 }
560a288e 4846 }
bddd5118
NC
4847 if (flags & SV_SMAGIC)
4848 SvSETMAGIC(dsv);
79072805
LW
4849}
4850
954c1994 4851/*
954c1994
GS
4852=for apidoc sv_catpv
4853
4854Concatenates the string onto the end of the string which is in the SV.
1e54db1a
JH
4855If the SV has the UTF-8 status set, then the bytes appended should be
4856valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
954c1994 4857
d5ce4a7c 4858=cut */
954c1994 4859
ef50df4b 4860void
2b021c53 4861Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
79072805 4862{
97aff369 4863 dVAR;
79072805 4864 register STRLEN len;
463ee0b2 4865 STRLEN tlen;
748a9306 4866 char *junk;
79072805 4867
7918f24d
NC
4868 PERL_ARGS_ASSERT_SV_CATPV;
4869
0c981600 4870 if (!ptr)
79072805 4871 return;
748a9306 4872 junk = SvPV_force(sv, tlen);
0c981600 4873 len = strlen(ptr);
463ee0b2 4874 SvGROW(sv, tlen + len + 1);
0c981600 4875 if (ptr == junk)
3f7c398e 4876 ptr = SvPVX_const(sv);
0c981600 4877 Move(ptr,SvPVX(sv)+tlen,len+1,char);
b162af07 4878 SvCUR_set(sv, SvCUR(sv) + len);
d41ff1b8 4879 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4880 SvTAINT(sv);
79072805
LW
4881}
4882
954c1994
GS
4883/*
4884=for apidoc sv_catpv_mg
4885
4886Like C<sv_catpv>, but also handles 'set' magic.
4887
4888=cut
4889*/
4890
ef50df4b 4891void
2b021c53 4892Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 4893{
7918f24d
NC
4894 PERL_ARGS_ASSERT_SV_CATPV_MG;
4895
0c981600 4896 sv_catpv(sv,ptr);
ef50df4b
GS
4897 SvSETMAGIC(sv);
4898}
4899
645c22ef
DM
4900/*
4901=for apidoc newSV
4902
561b68a9
SH
4903Creates a new SV. A non-zero C<len> parameter indicates the number of
4904bytes of preallocated string space the SV should have. An extra byte for a
4905trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4906space is allocated.) The reference count for the new SV is set to 1.
4907
4908In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4909parameter, I<x>, a debug aid which allowed callers to identify themselves.
4910This aid has been superseded by a new build option, PERL_MEM_LOG (see
4911L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4912modules supporting older perls.
645c22ef
DM
4913
4914=cut
4915*/
4916
79072805 4917SV *
2b021c53 4918Perl_newSV(pTHX_ const STRLEN len)
79072805 4919{
97aff369 4920 dVAR;
79072805 4921 register SV *sv;
1c846c1f 4922
4561caa4 4923 new_SV(sv);
79072805
LW
4924 if (len) {
4925 sv_upgrade(sv, SVt_PV);
4926 SvGROW(sv, len + 1);
4927 }
4928 return sv;
4929}
954c1994 4930/*
92110913 4931=for apidoc sv_magicext
954c1994 4932
68795e93 4933Adds magic to an SV, upgrading it if necessary. Applies the
2d8d5d5a 4934supplied vtable and returns a pointer to the magic added.
92110913 4935
2d8d5d5a
SH
4936Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4937In particular, you can add magic to SvREADONLY SVs, and add more than
4938one instance of the same 'how'.
645c22ef 4939
2d8d5d5a
SH
4940If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4941stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4942special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4943to contain an C<SV*> and is stored as-is with its REFCNT incremented.
92110913 4944
2d8d5d5a 4945(This is now used as a subroutine by C<sv_magic>.)
954c1994
GS
4946
4947=cut
4948*/
92110913 4949MAGIC *
2b021c53
SS
4950Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
4951 const MGVTBL *const vtable, const char *const name, const I32 namlen)
79072805 4952{
97aff369 4953 dVAR;
79072805 4954 MAGIC* mg;
68795e93 4955
7918f24d
NC
4956 PERL_ARGS_ASSERT_SV_MAGICEXT;
4957
7a7f3e45 4958 SvUPGRADE(sv, SVt_PVMG);
a02a5408 4959 Newxz(mg, 1, MAGIC);
79072805 4960 mg->mg_moremagic = SvMAGIC(sv);
b162af07 4961 SvMAGIC_set(sv, mg);
75f9d97a 4962
05f95b08
SB
4963 /* Sometimes a magic contains a reference loop, where the sv and
4964 object refer to each other. To prevent a reference loop that
4965 would prevent such objects being freed, we look for such loops
4966 and if we find one we avoid incrementing the object refcount.
87f0b213
JH
4967
4968 Note we cannot do this to avoid self-tie loops as intervening RV must
b5ccf5f2 4969 have its REFCNT incremented to keep it in existence.
87f0b213
JH
4970
4971 */
14befaf4
DM
4972 if (!obj || obj == sv ||
4973 how == PERL_MAGIC_arylen ||
8d2f4536 4974 how == PERL_MAGIC_symtab ||
75f9d97a 4975 (SvTYPE(obj) == SVt_PVGV &&
4c4652b6
NC
4976 (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
4977 || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
4978 || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
75f9d97a 4979 {
8990e307 4980 mg->mg_obj = obj;
75f9d97a 4981 }
85e6fe83 4982 else {
b37c2d43 4983 mg->mg_obj = SvREFCNT_inc_simple(obj);
85e6fe83
LW
4984 mg->mg_flags |= MGf_REFCOUNTED;
4985 }
b5ccf5f2
YST
4986
4987 /* Normal self-ties simply pass a null object, and instead of
4988 using mg_obj directly, use the SvTIED_obj macro to produce a
4989 new RV as needed. For glob "self-ties", we are tieing the PVIO
4990 with an RV obj pointing to the glob containing the PVIO. In
4991 this case, to avoid a reference loop, we need to weaken the
4992 reference.
4993 */
4994
4995 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
a45c7426 4996 obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
b5ccf5f2
YST
4997 {
4998 sv_rvweaken(obj);
4999 }
5000
79072805 5001 mg->mg_type = how;
565764a8 5002 mg->mg_len = namlen;
9cbac4c7 5003 if (name) {
92110913 5004 if (namlen > 0)
1edc1566 5005 mg->mg_ptr = savepvn(name, namlen);
daba3364
NC
5006 else if (namlen == HEf_SVKEY) {
5007 /* Yes, this is casting away const. This is only for the case of
5008 HEf_SVKEY. I think we need to document this abberation of the
5009 constness of the API, rather than making name non-const, as
5010 that change propagating outwards a long way. */
5011 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5012 } else
92110913 5013 mg->mg_ptr = (char *) name;
9cbac4c7 5014 }
53d44271 5015 mg->mg_virtual = (MGVTBL *) vtable;
68795e93 5016
92110913
NIS
5017 mg_magical(sv);
5018 if (SvGMAGICAL(sv))
5019 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5020 return mg;
5021}
5022
5023/*
5024=for apidoc sv_magic
1c846c1f 5025
92110913
NIS
5026Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5027then adds a new magic item of type C<how> to the head of the magic list.
5028
2d8d5d5a
SH
5029See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5030handling of the C<name> and C<namlen> arguments.
5031
4509d3fb
SB
5032You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5033to add more than one instance of the same 'how'.
5034
92110913
NIS
5035=cut
5036*/
5037
5038void
2b021c53
SS
5039Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how,
5040 const char *const name, const I32 namlen)
68795e93 5041{
97aff369 5042 dVAR;
53d44271 5043 const MGVTBL *vtable;
92110913 5044 MAGIC* mg;
92110913 5045
7918f24d
NC
5046 PERL_ARGS_ASSERT_SV_MAGIC;
5047
f8c7b90f 5048#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
5049 if (SvIsCOW(sv))
5050 sv_force_normal_flags(sv, 0);
5051#endif
92110913 5052 if (SvREADONLY(sv)) {
d8084ca5
DM
5053 if (
5054 /* its okay to attach magic to shared strings; the subsequent
5055 * upgrade to PVMG will unshare the string */
5056 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5057
5058 && IN_PERL_RUNTIME
92110913
NIS
5059 && how != PERL_MAGIC_regex_global
5060 && how != PERL_MAGIC_bm
5061 && how != PERL_MAGIC_fm
5062 && how != PERL_MAGIC_sv
e6469971 5063 && how != PERL_MAGIC_backref
92110913
NIS
5064 )
5065 {
f1f66076 5066 Perl_croak(aTHX_ "%s", PL_no_modify);
92110913
NIS
5067 }
5068 }
5069 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5070 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
68795e93
NIS
5071 /* sv_magic() refuses to add a magic of the same 'how' as an
5072 existing one
92110913 5073 */
2a509ed3 5074 if (how == PERL_MAGIC_taint) {
92110913 5075 mg->mg_len |= 1;
2a509ed3
NC
5076 /* Any scalar which already had taint magic on which someone
5077 (erroneously?) did SvIOK_on() or similar will now be
5078 incorrectly sporting public "OK" flags. */
5079 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5080 }
92110913
NIS
5081 return;
5082 }
5083 }
68795e93 5084
79072805 5085 switch (how) {
14befaf4 5086 case PERL_MAGIC_sv:
92110913 5087 vtable = &PL_vtbl_sv;
79072805 5088 break;
14befaf4 5089 case PERL_MAGIC_overload:
92110913 5090 vtable = &PL_vtbl_amagic;
a0d0e21e 5091 break;
14befaf4 5092 case PERL_MAGIC_overload_elem:
92110913 5093 vtable = &PL_vtbl_amagicelem;
a0d0e21e 5094 break;
14befaf4 5095 case PERL_MAGIC_overload_table:
92110913 5096 vtable = &PL_vtbl_ovrld;
a0d0e21e 5097 break;
14befaf4 5098 case PERL_MAGIC_bm:
92110913 5099 vtable = &PL_vtbl_bm;
79072805 5100 break;
14befaf4 5101 case PERL_MAGIC_regdata:
92110913 5102 vtable = &PL_vtbl_regdata;
6cef1e77 5103 break;
14befaf4 5104 case PERL_MAGIC_regdatum:
92110913 5105 vtable = &PL_vtbl_regdatum;
6cef1e77 5106 break;
14befaf4 5107 case PERL_MAGIC_env:
92110913 5108 vtable = &PL_vtbl_env;
79072805 5109 break;
14befaf4 5110 case PERL_MAGIC_fm:
92110913 5111 vtable = &PL_vtbl_fm;
55497cff 5112 break;
14befaf4 5113 case PERL_MAGIC_envelem:
92110913 5114 vtable = &PL_vtbl_envelem;
79072805 5115 break;
14befaf4 5116 case PERL_MAGIC_regex_global:
92110913 5117 vtable = &PL_vtbl_mglob;
93a17b20 5118 break;
14befaf4 5119 case PERL_MAGIC_isa:
92110913 5120 vtable = &PL_vtbl_isa;
463ee0b2 5121 break;
14befaf4 5122 case PERL_MAGIC_isaelem:
92110913 5123 vtable = &PL_vtbl_isaelem;
463ee0b2 5124 break;
14befaf4 5125 case PERL_MAGIC_nkeys:
92110913 5126 vtable = &PL_vtbl_nkeys;
16660edb 5127 break;
14befaf4 5128 case PERL_MAGIC_dbfile:
aec46f14 5129 vtable = NULL;
93a17b20 5130 break;
14befaf4 5131 case PERL_MAGIC_dbline:
92110913 5132 vtable = &PL_vtbl_dbline;
79072805 5133 break;
36477c24 5134#ifdef USE_LOCALE_COLLATE
14befaf4 5135 case PERL_MAGIC_collxfrm:
92110913 5136 vtable = &PL_vtbl_collxfrm;
bbce6d69 5137 break;
36477c24 5138#endif /* USE_LOCALE_COLLATE */
14befaf4 5139 case PERL_MAGIC_tied:
92110913 5140 vtable = &PL_vtbl_pack;
463ee0b2 5141 break;
14befaf4
DM
5142 case PERL_MAGIC_tiedelem:
5143 case PERL_MAGIC_tiedscalar:
92110913 5144 vtable = &PL_vtbl_packelem;
463ee0b2 5145 break;
14befaf4 5146 case PERL_MAGIC_qr:
92110913 5147 vtable = &PL_vtbl_regexp;
c277df42 5148 break;
14befaf4 5149 case PERL_MAGIC_sig:
92110913 5150 vtable = &PL_vtbl_sig;
79072805 5151 break;
14befaf4 5152 case PERL_MAGIC_sigelem:
92110913 5153 vtable = &PL_vtbl_sigelem;
79072805 5154 break;
14befaf4 5155 case PERL_MAGIC_taint:
92110913 5156 vtable = &PL_vtbl_taint;
463ee0b2 5157 break;
14befaf4 5158 case PERL_MAGIC_uvar:
92110913 5159 vtable = &PL_vtbl_uvar;
79072805 5160 break;
14befaf4 5161 case PERL_MAGIC_vec:
92110913 5162 vtable = &PL_vtbl_vec;
79072805 5163 break;
a3874608 5164 case PERL_MAGIC_arylen_p:
bfcb3514 5165 case PERL_MAGIC_rhash:
8d2f4536 5166 case PERL_MAGIC_symtab:
ece467f9 5167 case PERL_MAGIC_vstring:
aec46f14 5168 vtable = NULL;
ece467f9 5169 break;
7e8c5dac
HS
5170 case PERL_MAGIC_utf8:
5171 vtable = &PL_vtbl_utf8;
5172 break;
14befaf4 5173 case PERL_MAGIC_substr:
92110913 5174 vtable = &PL_vtbl_substr;
79072805 5175 break;
14befaf4 5176 case PERL_MAGIC_defelem:
92110913 5177 vtable = &PL_vtbl_defelem;
5f05dabc 5178 break;
14befaf4 5179 case PERL_MAGIC_arylen:
92110913 5180 vtable = &PL_vtbl_arylen;
79072805 5181 break;
14befaf4 5182 case PERL_MAGIC_pos:
92110913 5183 vtable = &PL_vtbl_pos;
a0d0e21e 5184 break;
14befaf4 5185 case PERL_MAGIC_backref:
92110913 5186 vtable = &PL_vtbl_backref;
810b8aa5 5187 break;
b3ca2e83
NC
5188 case PERL_MAGIC_hintselem:
5189 vtable = &PL_vtbl_hintselem;
5190 break;
f747ebd6
Z
5191 case PERL_MAGIC_hints:
5192 vtable = &PL_vtbl_hints;
5193 break;
14befaf4
DM
5194 case PERL_MAGIC_ext:
5195 /* Reserved for use by extensions not perl internals. */
4633a7c4
LW
5196 /* Useful for attaching extension internal data to perl vars. */
5197 /* Note that multiple extensions may clash if magical scalars */
5198 /* etc holding private data from one are passed to another. */
aec46f14 5199 vtable = NULL;
a0d0e21e 5200 break;
79072805 5201 default:
14befaf4 5202 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
463ee0b2 5203 }
68795e93 5204
92110913 5205 /* Rest of work is done else where */
aec46f14 5206 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
68795e93 5207
92110913
NIS
5208 switch (how) {
5209 case PERL_MAGIC_taint:
5210 mg->mg_len = 1;
5211 break;
5212 case PERL_MAGIC_ext:
5213 case PERL_MAGIC_dbfile:
5214 SvRMAGICAL_on(sv);
5215 break;
5216 }
463ee0b2
LW
5217}
5218
c461cf8f
JH
5219/*
5220=for apidoc sv_unmagic
5221
645c22ef 5222Removes all magic of type C<type> from an SV.
c461cf8f
JH
5223
5224=cut
5225*/
5226
463ee0b2 5227int
2b021c53 5228Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
463ee0b2
LW
5229{
5230 MAGIC* mg;
5231 MAGIC** mgp;
7918f24d
NC
5232
5233 PERL_ARGS_ASSERT_SV_UNMAGIC;
5234
91bba347 5235 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
463ee0b2 5236 return 0;
064cf529 5237 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
463ee0b2
LW
5238 for (mg = *mgp; mg; mg = *mgp) {
5239 if (mg->mg_type == type) {
e1ec3a88 5240 const MGVTBL* const vtbl = mg->mg_virtual;
463ee0b2 5241 *mgp = mg->mg_moremagic;
1d7c1841 5242 if (vtbl && vtbl->svt_free)
fc0dc3b3 5243 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
14befaf4 5244 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
92110913 5245 if (mg->mg_len > 0)
1edc1566 5246 Safefree(mg->mg_ptr);
565764a8 5247 else if (mg->mg_len == HEf_SVKEY)
daba3364 5248 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
d2923cdd 5249 else if (mg->mg_type == PERL_MAGIC_utf8)
7e8c5dac 5250 Safefree(mg->mg_ptr);
9cbac4c7 5251 }
a0d0e21e
LW
5252 if (mg->mg_flags & MGf_REFCOUNTED)
5253 SvREFCNT_dec(mg->mg_obj);
463ee0b2
LW
5254 Safefree(mg);
5255 }
5256 else
5257 mgp = &mg->mg_moremagic;
79072805 5258 }
806e7ca7
CS
5259 if (SvMAGIC(sv)) {
5260 if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */
5261 mg_magical(sv); /* else fix the flags now */
5262 }
5263 else {
463ee0b2 5264 SvMAGICAL_off(sv);
c268c2a6 5265 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
463ee0b2 5266 }
463ee0b2 5267 return 0;
79072805
LW
5268}
5269
c461cf8f
JH
5270/*
5271=for apidoc sv_rvweaken
5272
645c22ef
DM
5273Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5274referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5275push a back-reference to this RV onto the array of backreferences
1e73acc8
AS
5276associated with that magic. If the RV is magical, set magic will be
5277called after the RV is cleared.
c461cf8f
JH
5278
5279=cut
5280*/
5281
810b8aa5 5282SV *
2b021c53 5283Perl_sv_rvweaken(pTHX_ SV *const sv)
810b8aa5
GS
5284{
5285 SV *tsv;
7918f24d
NC
5286
5287 PERL_ARGS_ASSERT_SV_RVWEAKEN;
5288
810b8aa5
GS
5289 if (!SvOK(sv)) /* let undefs pass */
5290 return sv;
5291 if (!SvROK(sv))
cea2e8a9 5292 Perl_croak(aTHX_ "Can't weaken a nonreference");
810b8aa5 5293 else if (SvWEAKREF(sv)) {
a2a5de95 5294 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
810b8aa5
GS
5295 return sv;
5296 }
5297 tsv = SvRV(sv);
e15faf7d 5298 Perl_sv_add_backref(aTHX_ tsv, sv);
810b8aa5 5299 SvWEAKREF_on(sv);
1c846c1f 5300 SvREFCNT_dec(tsv);
810b8aa5
GS
5301 return sv;
5302}
5303
645c22ef
DM
5304/* Give tsv backref magic if it hasn't already got it, then push a
5305 * back-reference to sv onto the array associated with the backref magic.
5306 */
5307
fd996479
DM
5308/* A discussion about the backreferences array and its refcount:
5309 *
5310 * The AV holding the backreferences is pointed to either as the mg_obj of
5311 * PERL_MAGIC_backref, or in the specific case of a HV that has the hv_aux
5312 * structure, from the xhv_backreferences field. (A HV without hv_aux will
5313 * have the standard magic instead.) The array is created with a refcount
5314 * of 2. This means that if during global destruction the array gets
5315 * picked on first to have its refcount decremented by the random zapper,
5316 * it won't actually be freed, meaning it's still theere for when its
5317 * parent gets freed.
5318 * When the parent SV is freed, in the case of magic, the magic is freed,
5319 * Perl_magic_killbackrefs is called which decrements one refcount, then
5320 * mg_obj is freed which kills the second count.
5321 * In the vase of a HV being freed, one ref is removed by
5322 * Perl_hv_kill_backrefs, the other by Perl_sv_kill_backrefs, which it
5323 * calls.
5324 */
5325
e15faf7d 5326void
2b021c53 5327Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
810b8aa5 5328{
97aff369 5329 dVAR;
810b8aa5 5330 AV *av;
86f55936 5331
7918f24d
NC
5332 PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5333
86f55936 5334 if (SvTYPE(tsv) == SVt_PVHV) {
85fbaab2 5335 AV **const avp = Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
86f55936
NC
5336
5337 av = *avp;
5338 if (!av) {
5339 /* There is no AV in the offical place - try a fixup. */
5340 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
5341
5342 if (mg) {
5343 /* Aha. They've got it stowed in magic. Bring it back. */
502c6561 5344 av = MUTABLE_AV(mg->mg_obj);
86f55936
NC
5345 /* Stop mg_free decreasing the refernce count. */
5346 mg->mg_obj = NULL;
5347 /* Stop mg_free even calling the destructor, given that
5348 there's no AV to free up. */
5349 mg->mg_virtual = 0;
5350 sv_unmagic(tsv, PERL_MAGIC_backref);
5351 } else {
5352 av = newAV();
5353 AvREAL_off(av);
fd996479 5354 SvREFCNT_inc_simple_void(av); /* see discussion above */
86f55936
NC
5355 }
5356 *avp = av;
5357 }
5358 } else {
5359 const MAGIC *const mg
5360 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5361 if (mg)
502c6561 5362 av = MUTABLE_AV(mg->mg_obj);
86f55936
NC
5363 else {
5364 av = newAV();
5365 AvREAL_off(av);
daba3364 5366 sv_magic(tsv, MUTABLE_SV(av), PERL_MAGIC_backref, NULL, 0);
fd996479 5367 /* av now has a refcnt of 2; see discussion above */
86f55936 5368 }
810b8aa5 5369 }
d91d49e8 5370 if (AvFILLp(av) >= AvMAX(av)) {
d91d49e8
MM
5371 av_extend(av, AvFILLp(av)+1);
5372 }
5373 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
810b8aa5
GS
5374}
5375
645c22ef
DM
5376/* delete a back-reference to ourselves from the backref magic associated
5377 * with the SV we point to.
5378 */
5379
1c846c1f 5380STATIC void
2b021c53 5381S_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
810b8aa5 5382{
97aff369 5383 dVAR;
86f55936 5384 AV *av = NULL;
810b8aa5
GS
5385 SV **svp;
5386 I32 i;
86f55936 5387
7918f24d
NC
5388 PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5389
86f55936 5390 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
85fbaab2 5391 av = *Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5b285ea4
NC
5392 /* We mustn't attempt to "fix up" the hash here by moving the
5393 backreference array back to the hv_aux structure, as that is stored
5394 in the main HvARRAY(), and hfreentries assumes that no-one
5395 reallocates HvARRAY() while it is running. */
86f55936
NC
5396 }
5397 if (!av) {
5398 const MAGIC *const mg
5399 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5400 if (mg)
502c6561 5401 av = MUTABLE_AV(mg->mg_obj);
86f55936 5402 }
41fae7a1
DM
5403
5404 if (!av)
cea2e8a9 5405 Perl_croak(aTHX_ "panic: del_backref");
86f55936 5406
41fae7a1 5407 assert(!SvIS_FREED(av));
86f55936 5408
810b8aa5 5409 svp = AvARRAY(av);
6a76db8b
NC
5410 /* We shouldn't be in here more than once, but for paranoia reasons lets
5411 not assume this. */
5412 for (i = AvFILLp(av); i >= 0; i--) {
5413 if (svp[i] == sv) {
5414 const SSize_t fill = AvFILLp(av);
5415 if (i != fill) {
5416 /* We weren't the last entry.
5417 An unordered list has this property that you can take the
5418 last element off the end to fill the hole, and it's still
5419 an unordered list :-)
5420 */
5421 svp[i] = svp[fill];
5422 }
a0714e2c 5423 svp[fill] = NULL;
6a76db8b
NC
5424 AvFILLp(av) = fill - 1;
5425 }
5426 }
810b8aa5
GS
5427}
5428
86f55936 5429int
2b021c53 5430Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
86f55936
NC
5431{
5432 SV **svp = AvARRAY(av);
5433
7918f24d 5434 PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
86f55936
NC
5435 PERL_UNUSED_ARG(sv);
5436
41fae7a1
DM
5437 assert(!svp || !SvIS_FREED(av));
5438 if (svp) {
86f55936
NC
5439 SV *const *const last = svp + AvFILLp(av);
5440
5441 while (svp <= last) {
5442 if (*svp) {
5443 SV *const referrer = *svp;
5444 if (SvWEAKREF(referrer)) {
5445 /* XXX Should we check that it hasn't changed? */
5446 SvRV_set(referrer, 0);
5447 SvOK_off(referrer);
5448 SvWEAKREF_off(referrer);
1e73acc8 5449 SvSETMAGIC(referrer);
86f55936
NC
5450 } else if (SvTYPE(referrer) == SVt_PVGV ||
5451 SvTYPE(referrer) == SVt_PVLV) {
5452 /* You lookin' at me? */
5453 assert(GvSTASH(referrer));
1d193675 5454 assert(GvSTASH(referrer) == (const HV *)sv);
86f55936
NC
5455 GvSTASH(referrer) = 0;
5456 } else {
5457 Perl_croak(aTHX_
5458 "panic: magic_killbackrefs (flags=%"UVxf")",
5459 (UV)SvFLAGS(referrer));
5460 }
5461
a0714e2c 5462 *svp = NULL;
86f55936
NC
5463 }
5464 svp++;
5465 }
5466 }
5467 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5468 return 0;
5469}
5470
954c1994
GS
5471/*
5472=for apidoc sv_insert
5473
5474Inserts a string at the specified offset/length within the SV. Similar to
c0dd94a0 5475the Perl substr() function. Handles get magic.
954c1994 5476
c0dd94a0
VP
5477=for apidoc sv_insert_flags
5478
5479Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5480
5481=cut
5482*/
5483
5484void
5485Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5486{
97aff369 5487 dVAR;
79072805
LW
5488 register char *big;
5489 register char *mid;
5490 register char *midend;
5491 register char *bigend;
5492 register I32 i;
6ff81951 5493 STRLEN curlen;
1c846c1f 5494
27aecdc6 5495 PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
79072805 5496
8990e307 5497 if (!bigstr)
cea2e8a9 5498 Perl_croak(aTHX_ "Can't modify non-existent substring");
c0dd94a0 5499 SvPV_force_flags(bigstr, curlen, flags);
60fa28ff 5500 (void)SvPOK_only_UTF8(bigstr);
6ff81951
GS
5501 if (offset + len > curlen) {
5502 SvGROW(bigstr, offset+len+1);
93524f2b 5503 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6ff81951
GS
5504 SvCUR_set(bigstr, offset+len);
5505 }
79072805 5506
69b47968 5507 SvTAINT(bigstr);
79072805
LW
5508 i = littlelen - len;
5509 if (i > 0) { /* string might grow */
a0d0e21e 5510 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
79072805
LW
5511 mid = big + offset + len;
5512 midend = bigend = big + SvCUR(bigstr);
5513 bigend += i;
5514 *bigend = '\0';
5515 while (midend > mid) /* shove everything down */
5516 *--bigend = *--midend;
5517 Move(little,big+offset,littlelen,char);
b162af07 5518 SvCUR_set(bigstr, SvCUR(bigstr) + i);
79072805
LW
5519 SvSETMAGIC(bigstr);
5520 return;
5521 }
5522 else if (i == 0) {
463ee0b2 5523 Move(little,SvPVX(bigstr)+offset,len,char);
79072805
LW
5524 SvSETMAGIC(bigstr);
5525 return;
5526 }
5527
463ee0b2 5528 big = SvPVX(bigstr);
79072805
LW
5529 mid = big + offset;
5530 midend = mid + len;
5531 bigend = big + SvCUR(bigstr);
5532
5533 if (midend > bigend)
cea2e8a9 5534 Perl_croak(aTHX_ "panic: sv_insert");
79072805
LW
5535
5536 if (mid - big > bigend - midend) { /* faster to shorten from end */
5537 if (littlelen) {
5538 Move(little, mid, littlelen,char);
5539 mid += littlelen;
5540 }
5541 i = bigend - midend;
5542 if (i > 0) {
5543 Move(midend, mid, i,char);
5544 mid += i;
5545 }
5546 *mid = '\0';
5547 SvCUR_set(bigstr, mid - big);
5548 }
155aba94 5549 else if ((i = mid - big)) { /* faster from front */
79072805
LW
5550 midend -= littlelen;
5551 mid = midend;
0d3c21b0 5552 Move(big, midend - i, i, char);
79072805 5553 sv_chop(bigstr,midend-i);
79072805
LW
5554 if (littlelen)
5555 Move(little, mid, littlelen,char);
5556 }
5557 else if (littlelen) {
5558 midend -= littlelen;
5559 sv_chop(bigstr,midend);
5560 Move(little,midend,littlelen,char);
5561 }
5562 else {
5563 sv_chop(bigstr,midend);
5564 }
5565 SvSETMAGIC(bigstr);
5566}
5567
c461cf8f
JH
5568/*
5569=for apidoc sv_replace
5570
5571Make the first argument a copy of the second, then delete the original.
645c22ef
DM
5572The target SV physically takes over ownership of the body of the source SV
5573and inherits its flags; however, the target keeps any magic it owns,
5574and any magic in the source is discarded.
ff276b08 5575Note that this is a rather specialist SV copying operation; most of the
645c22ef 5576time you'll want to use C<sv_setsv> or one of its many macro front-ends.
c461cf8f
JH
5577
5578=cut
5579*/
79072805
LW
5580
5581void
af828c01 5582Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
79072805 5583{
97aff369 5584 dVAR;
a3b680e6 5585 const U32 refcnt = SvREFCNT(sv);
7918f24d
NC
5586
5587 PERL_ARGS_ASSERT_SV_REPLACE;
5588
765f542d 5589 SV_CHECK_THINKFIRST_COW_DROP(sv);
30e5c352 5590 if (SvREFCNT(nsv) != 1) {
fe13d51d
JM
5591 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5592 " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
30e5c352 5593 }
93a17b20 5594 if (SvMAGICAL(sv)) {
a0d0e21e
LW
5595 if (SvMAGICAL(nsv))
5596 mg_free(nsv);
5597 else
5598 sv_upgrade(nsv, SVt_PVMG);
b162af07 5599 SvMAGIC_set(nsv, SvMAGIC(sv));
a0d0e21e 5600 SvFLAGS(nsv) |= SvMAGICAL(sv);
93a17b20 5601 SvMAGICAL_off(sv);
b162af07 5602 SvMAGIC_set(sv, NULL);
93a17b20 5603 }
79072805
LW
5604 SvREFCNT(sv) = 0;
5605 sv_clear(sv);
477f5d66 5606 assert(!SvREFCNT(sv));
fd0854ff
DM
5607#ifdef DEBUG_LEAKING_SCALARS
5608 sv->sv_flags = nsv->sv_flags;
5609 sv->sv_any = nsv->sv_any;
5610 sv->sv_refcnt = nsv->sv_refcnt;
f34d0642 5611 sv->sv_u = nsv->sv_u;
fd0854ff 5612#else
79072805 5613 StructCopy(nsv,sv,SV);
fd0854ff 5614#endif
4df7f6af 5615 if(SvTYPE(sv) == SVt_IV) {
7b2c381c 5616 SvANY(sv)
339049b0 5617 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
7b2c381c
NC
5618 }
5619
fd0854ff 5620
f8c7b90f 5621#ifdef PERL_OLD_COPY_ON_WRITE
d3d0e6f1
NC
5622 if (SvIsCOW_normal(nsv)) {
5623 /* We need to follow the pointers around the loop to make the
5624 previous SV point to sv, rather than nsv. */
5625 SV *next;
5626 SV *current = nsv;
5627 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5628 assert(next);
5629 current = next;
3f7c398e 5630 assert(SvPVX_const(current) == SvPVX_const(nsv));
d3d0e6f1
NC
5631 }
5632 /* Make the SV before us point to the SV after us. */
5633 if (DEBUG_C_TEST) {
5634 PerlIO_printf(Perl_debug_log, "previous is\n");
5635 sv_dump(current);
a29f6d03
NC
5636 PerlIO_printf(Perl_debug_log,
5637 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
d3d0e6f1
NC
5638 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5639 }
a29f6d03 5640 SV_COW_NEXT_SV_SET(current, sv);
d3d0e6f1
NC
5641 }
5642#endif
79072805 5643 SvREFCNT(sv) = refcnt;
1edc1566 5644 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
39cf41c2 5645 SvREFCNT(nsv) = 0;
463ee0b2 5646 del_SV(nsv);
79072805
LW
5647}
5648
c461cf8f
JH
5649/*
5650=for apidoc sv_clear
5651
645c22ef
DM
5652Clear an SV: call any destructors, free up any memory used by the body,
5653and free the body itself. The SV's head is I<not> freed, although
5654its type is set to all 1's so that it won't inadvertently be assumed
5655to be live during global destruction etc.
5656This function should only be called when REFCNT is zero. Most of the time
5657you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5658instead.
c461cf8f
JH
5659
5660=cut
5661*/
5662
79072805 5663void
af828c01 5664Perl_sv_clear(pTHX_ register SV *const sv)
79072805 5665{
27da23d5 5666 dVAR;
82bb6deb 5667 const U32 type = SvTYPE(sv);
8edfc514
NC
5668 const struct body_details *const sv_type_details
5669 = bodies_by_type + type;
dd69841b 5670 HV *stash;
82bb6deb 5671
7918f24d 5672 PERL_ARGS_ASSERT_SV_CLEAR;
79072805 5673 assert(SvREFCNT(sv) == 0);
ceb531cd 5674 assert(SvTYPE(sv) != SVTYPEMASK);
79072805 5675
d2a0f284
JC
5676 if (type <= SVt_IV) {
5677 /* See the comment in sv.h about the collusion between this early
db93c0c4
NC
5678 return and the overloading of the NULL slots in the size table. */
5679 if (SvROK(sv))
5680 goto free_rv;
4df7f6af
NC
5681 SvFLAGS(sv) &= SVf_BREAK;
5682 SvFLAGS(sv) |= SVTYPEMASK;
82bb6deb 5683 return;
d2a0f284 5684 }
82bb6deb 5685
ed6116ce 5686 if (SvOBJECT(sv)) {
eba16661
JH
5687 if (PL_defstash && /* Still have a symbol table? */
5688 SvDESTROYABLE(sv))
5689 {
39644a26 5690 dSP;
893645bd 5691 HV* stash;
d460ef45 5692 do {
b464bac0 5693 CV* destructor;
4e8e7886 5694 stash = SvSTASH(sv);
32251b26 5695 destructor = StashHANDLER(stash,DESTROY);
fbb3ee5a 5696 if (destructor
99ab892b
NC
5697 /* A constant subroutine can have no side effects, so
5698 don't bother calling it. */
5699 && !CvCONST(destructor)
fbb3ee5a
RGS
5700 /* Don't bother calling an empty destructor */
5701 && (CvISXSUB(destructor)
1f15e670
NT
5702 || (CvSTART(destructor)
5703 && (CvSTART(destructor)->op_next->op_type != OP_LEAVESUB))))
fbb3ee5a 5704 {
1b6737cc 5705 SV* const tmpref = newRV(sv);
5cc433a6 5706 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
4e8e7886 5707 ENTER;
e788e7d3 5708 PUSHSTACKi(PERLSI_DESTROY);
4e8e7886
GS
5709 EXTEND(SP, 2);
5710 PUSHMARK(SP);
5cc433a6 5711 PUSHs(tmpref);
4e8e7886 5712 PUTBACK;
daba3364 5713 call_sv(MUTABLE_SV(destructor), G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7a5fa8a2
NIS
5714
5715
d3acc0f7 5716 POPSTACK;
3095d977 5717 SPAGAIN;
4e8e7886 5718 LEAVE;
5cc433a6
AB
5719 if(SvREFCNT(tmpref) < 2) {
5720 /* tmpref is not kept alive! */
5721 SvREFCNT(sv)--;
b162af07 5722 SvRV_set(tmpref, NULL);
5cc433a6
AB
5723 SvROK_off(tmpref);
5724 }
5725 SvREFCNT_dec(tmpref);
4e8e7886
GS
5726 }
5727 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
8ebc5c01 5728
6f44e0a4
JP
5729
5730 if (SvREFCNT(sv)) {
5731 if (PL_in_clean_objs)
cea2e8a9 5732 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
bfcb3514 5733 HvNAME_get(stash));
6f44e0a4
JP
5734 /* DESTROY gave object new lease on life */
5735 return;
5736 }
a0d0e21e 5737 }
4e8e7886 5738
a0d0e21e 5739 if (SvOBJECT(sv)) {
4e8e7886 5740 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
a0d0e21e 5741 SvOBJECT_off(sv); /* Curse the object. */
82bb6deb 5742 if (type != SVt_PVIO)
3280af22 5743 --PL_sv_objcount; /* XXX Might want something more general */
a0d0e21e 5744 }
463ee0b2 5745 }
82bb6deb 5746 if (type >= SVt_PVMG) {
cecf5685 5747 if (type == SVt_PVMG && SvPAD_OUR(sv)) {
73d95100 5748 SvREFCNT_dec(SvOURSTASH(sv));
e736a858 5749 } else if (SvMAGIC(sv))
524189f1 5750 mg_free(sv);
00b1698f 5751 if (type == SVt_PVMG && SvPAD_TYPED(sv))
524189f1
JH
5752 SvREFCNT_dec(SvSTASH(sv));
5753 }
82bb6deb 5754 switch (type) {
cecf5685 5755 /* case SVt_BIND: */
8990e307 5756 case SVt_PVIO:
df0bd2f4
GS
5757 if (IoIFP(sv) &&
5758 IoIFP(sv) != PerlIO_stdin() &&
5f05dabc 5759 IoIFP(sv) != PerlIO_stdout() &&
5760 IoIFP(sv) != PerlIO_stderr())
93578b34 5761 {
a45c7426 5762 io_close(MUTABLE_IO(sv), FALSE);
93578b34 5763 }
1d7c1841 5764 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
1236053a 5765 PerlDir_close(IoDIRP(sv));
1d7c1841 5766 IoDIRP(sv) = (DIR*)NULL;
8990e307
LW
5767 Safefree(IoTOP_NAME(sv));
5768 Safefree(IoFMT_NAME(sv));
5769 Safefree(IoBOTTOM_NAME(sv));
82bb6deb 5770 goto freescalar;
5c35adbb 5771 case SVt_REGEXP:
288b8c02 5772 /* FIXME for plugins */
d2f13c59 5773 pregfree2((REGEXP*) sv);
5c35adbb 5774 goto freescalar;
79072805 5775 case SVt_PVCV:
748a9306 5776 case SVt_PVFM:
ea726b52 5777 cv_undef(MUTABLE_CV(sv));
a0d0e21e 5778 goto freescalar;
79072805 5779 case SVt_PVHV:
1d193675 5780 if (PL_last_swash_hv == (const HV *)sv) {
e7fab884
NC
5781 PL_last_swash_hv = NULL;
5782 }
85fbaab2
NC
5783 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
5784 hv_undef(MUTABLE_HV(sv));
a0d0e21e 5785 break;
79072805 5786 case SVt_PVAV:
502c6561 5787 if (PL_comppad == MUTABLE_AV(sv)) {
3f90d085
DM
5788 PL_comppad = NULL;
5789 PL_curpad = NULL;
5790 }
502c6561 5791 av_undef(MUTABLE_AV(sv));
a0d0e21e 5792 break;
02270b4e 5793 case SVt_PVLV:
dd28f7bb
DM
5794 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5795 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5796 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5797 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5798 }
5799 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5800 SvREFCNT_dec(LvTARG(sv));
a0d0e21e 5801 case SVt_PVGV:
cecf5685 5802 if (isGV_with_GP(sv)) {
159b6efe
NC
5803 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
5804 && HvNAME_get(stash))
dd69841b 5805 mro_method_changed_in(stash);
159b6efe 5806 gp_free(MUTABLE_GV(sv));
cecf5685
NC
5807 if (GvNAME_HEK(sv))
5808 unshare_hek(GvNAME_HEK(sv));
dd69841b
BB
5809 /* If we're in a stash, we don't own a reference to it. However it does
5810 have a back reference to us, which needs to be cleared. */
5811 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
daba3364 5812 sv_del_backref(MUTABLE_SV(stash), sv);
cecf5685 5813 }
8571fe2f
NC
5814 /* FIXME. There are probably more unreferenced pointers to SVs in the
5815 interpreter struct that we should check and tidy in a similar
5816 fashion to this: */
159b6efe 5817 if ((const GV *)sv == PL_last_in_gv)
8571fe2f 5818 PL_last_in_gv = NULL;
79072805 5819 case SVt_PVMG:
79072805
LW
5820 case SVt_PVNV:
5821 case SVt_PVIV:
7a4bba22 5822 case SVt_PV:
a0d0e21e 5823 freescalar:
5228ca4e
NC
5824 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5825 if (SvOOK(sv)) {
69240efd
NC
5826 STRLEN offset;
5827 SvOOK_offset(sv, offset);
5828 SvPV_set(sv, SvPVX_mutable(sv) - offset);
5228ca4e
NC
5829 /* Don't even bother with turning off the OOK flag. */
5830 }
810b8aa5 5831 if (SvROK(sv)) {
db93c0c4
NC
5832 free_rv:
5833 {
5834 SV * const target = SvRV(sv);
5835 if (SvWEAKREF(sv))
5836 sv_del_backref(target, sv);
5837 else
5838 SvREFCNT_dec(target);
5839 }
810b8aa5 5840 }
f8c7b90f 5841#ifdef PERL_OLD_COPY_ON_WRITE
3f7c398e 5842 else if (SvPVX_const(sv)) {
765f542d 5843 if (SvIsCOW(sv)) {
46187eeb
NC
5844 if (DEBUG_C_TEST) {
5845 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
e419cbc5 5846 sv_dump(sv);
46187eeb 5847 }
5302ffd4
NC
5848 if (SvLEN(sv)) {
5849 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5850 } else {
5851 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5852 }
5853
765f542d
NC
5854 SvFAKE_off(sv);
5855 } else if (SvLEN(sv)) {
3f7c398e 5856 Safefree(SvPVX_const(sv));
765f542d
NC
5857 }
5858 }
5859#else
3f7c398e 5860 else if (SvPVX_const(sv) && SvLEN(sv))
94010e71 5861 Safefree(SvPVX_mutable(sv));
3f7c398e 5862 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
bdd68bc3 5863 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
1c846c1f
NIS
5864 SvFAKE_off(sv);
5865 }
765f542d 5866#endif
79072805
LW
5867 break;
5868 case SVt_NV:
79072805
LW
5869 break;
5870 }
5871
893645bd
NC
5872 SvFLAGS(sv) &= SVf_BREAK;
5873 SvFLAGS(sv) |= SVTYPEMASK;
5874
8edfc514 5875 if (sv_type_details->arena) {
b9502f15 5876 del_body(((char *)SvANY(sv) + sv_type_details->offset),
8edfc514
NC
5877 &PL_body_roots[type]);
5878 }
d2a0f284 5879 else if (sv_type_details->body_size) {
8edfc514
NC
5880 my_safefree(SvANY(sv));
5881 }
79072805
LW
5882}
5883
645c22ef
DM
5884/*
5885=for apidoc sv_newref
5886
5887Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5888instead.
5889
5890=cut
5891*/
5892
79072805 5893SV *
af828c01 5894Perl_sv_newref(pTHX_ SV *const sv)
79072805 5895{
96a5add6 5896 PERL_UNUSED_CONTEXT;
463ee0b2 5897 if (sv)
4db098f4 5898 (SvREFCNT(sv))++;
79072805
LW
5899 return sv;
5900}
5901
c461cf8f
JH
5902/*
5903=for apidoc sv_free
5904
645c22ef
DM
5905Decrement an SV's reference count, and if it drops to zero, call
5906C<sv_clear> to invoke destructors and free up any memory used by
5907the body; finally, deallocate the SV's head itself.
5908Normally called via a wrapper macro C<SvREFCNT_dec>.
c461cf8f
JH
5909
5910=cut
5911*/
5912
79072805 5913void
af828c01 5914Perl_sv_free(pTHX_ SV *const sv)
79072805 5915{
27da23d5 5916 dVAR;
79072805
LW
5917 if (!sv)
5918 return;
a0d0e21e
LW
5919 if (SvREFCNT(sv) == 0) {
5920 if (SvFLAGS(sv) & SVf_BREAK)
645c22ef
DM
5921 /* this SV's refcnt has been artificially decremented to
5922 * trigger cleanup */
a0d0e21e 5923 return;
3280af22 5924 if (PL_in_clean_all) /* All is fair */
1edc1566 5925 return;
d689ffdd
JP
5926 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5927 /* make sure SvREFCNT(sv)==0 happens very seldom */
5928 SvREFCNT(sv) = (~(U32)0)/2;
5929 return;
5930 }
41e4abd8 5931 if (ckWARN_d(WARN_INTERNAL)) {
41e4abd8
NC
5932#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5933 Perl_dump_sv_child(aTHX_ sv);
e4c5322d
DM
5934#else
5935 #ifdef DEBUG_LEAKING_SCALARS
bfd95973 5936 sv_dump(sv);
e4c5322d 5937 #endif
bfd95973
NC
5938#ifdef DEBUG_LEAKING_SCALARS_ABORT
5939 if (PL_warnhook == PERL_WARNHOOK_FATAL
5940 || ckDEAD(packWARN(WARN_INTERNAL))) {
5941 /* Don't let Perl_warner cause us to escape our fate: */
5942 abort();
5943 }
5944#endif
5945 /* This may not return: */
5946 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5947 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5948 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
41e4abd8
NC
5949#endif
5950 }
77abb4c6
NC
5951#ifdef DEBUG_LEAKING_SCALARS_ABORT
5952 abort();
5953#endif
79072805
LW
5954 return;
5955 }
4db098f4 5956 if (--(SvREFCNT(sv)) > 0)
8990e307 5957 return;
8c4d3c90
NC
5958 Perl_sv_free2(aTHX_ sv);
5959}
5960
5961void
af828c01 5962Perl_sv_free2(pTHX_ SV *const sv)
8c4d3c90 5963{
27da23d5 5964 dVAR;
7918f24d
NC
5965
5966 PERL_ARGS_ASSERT_SV_FREE2;
5967
463ee0b2
LW
5968#ifdef DEBUGGING
5969 if (SvTEMP(sv)) {
9b387841
NC
5970 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
5971 "Attempt to free temp prematurely: SV 0x%"UVxf
5972 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
79072805 5973 return;
79072805 5974 }
463ee0b2 5975#endif
d689ffdd
JP
5976 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5977 /* make sure SvREFCNT(sv)==0 happens very seldom */
5978 SvREFCNT(sv) = (~(U32)0)/2;
5979 return;
5980 }
79072805 5981 sv_clear(sv);
477f5d66
CS
5982 if (! SvREFCNT(sv))
5983 del_SV(sv);
79072805
LW
5984}
5985
954c1994
GS
5986/*
5987=for apidoc sv_len
5988
645c22ef
DM
5989Returns the length of the string in the SV. Handles magic and type
5990coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
954c1994
GS
5991
5992=cut
5993*/
5994
79072805 5995STRLEN
af828c01 5996Perl_sv_len(pTHX_ register SV *const sv)
79072805 5997{
463ee0b2 5998 STRLEN len;
79072805
LW
5999
6000 if (!sv)
6001 return 0;
6002
8990e307 6003 if (SvGMAGICAL(sv))
565764a8 6004 len = mg_length(sv);
8990e307 6005 else
4d84ee25 6006 (void)SvPV_const(sv, len);
463ee0b2 6007 return len;
79072805
LW
6008}
6009
c461cf8f
JH
6010/*
6011=for apidoc sv_len_utf8
6012
6013Returns the number of characters in the string in an SV, counting wide
1e54db1a 6014UTF-8 bytes as a single character. Handles magic and type coercion.
c461cf8f
JH
6015
6016=cut
6017*/
6018
7e8c5dac 6019/*
c05a5c57 6020 * The length is cached in PERL_MAGIC_utf8, in the mg_len field. Also the
9564a3bd
NC
6021 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6022 * (Note that the mg_len is not the length of the mg_ptr field.
6023 * This allows the cache to store the character length of the string without
6024 * needing to malloc() extra storage to attach to the mg_ptr.)
7a5fa8a2 6025 *
7e8c5dac
HS
6026 */
6027
a0ed51b3 6028STRLEN
af828c01 6029Perl_sv_len_utf8(pTHX_ register SV *const sv)
a0ed51b3 6030{
a0ed51b3
LW
6031 if (!sv)
6032 return 0;
6033
a0ed51b3 6034 if (SvGMAGICAL(sv))
b76347f2 6035 return mg_length(sv);
a0ed51b3 6036 else
b76347f2 6037 {
26346457 6038 STRLEN len;
e62f0680 6039 const U8 *s = (U8*)SvPV_const(sv, len);
7e8c5dac 6040
26346457
NC
6041 if (PL_utf8cache) {
6042 STRLEN ulen;
fe5bfecd 6043 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
26346457
NC
6044
6045 if (mg && mg->mg_len != -1) {
6046 ulen = mg->mg_len;
6047 if (PL_utf8cache < 0) {
6048 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6049 if (real != ulen) {
6050 /* Need to turn the assertions off otherwise we may
6051 recurse infinitely while printing error messages.
6052 */
6053 SAVEI8(PL_utf8cache);
6054 PL_utf8cache = 0;
f5992bc4
RB
6055 Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
6056 " real %"UVuf" for %"SVf,
be2597df 6057 (UV) ulen, (UV) real, SVfARG(sv));
26346457
NC
6058 }
6059 }
6060 }
6061 else {
6062 ulen = Perl_utf8_length(aTHX_ s, s + len);
6063 if (!SvREADONLY(sv)) {
f89a570b
CS
6064 if (!mg && (SvTYPE(sv) < SVt_PVMG ||
6065 !(mg = mg_find(sv, PERL_MAGIC_utf8)))) {
26346457
NC
6066 mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
6067 &PL_vtbl_utf8, 0, 0);
6068 }
cb9e20bb 6069 assert(mg);
26346457 6070 mg->mg_len = ulen;
566a4373
NC
6071 /* For now, treat "overflowed" as "still unknown".
6072 See RT #72924. */
6073 if (ulen != (STRLEN) mg->mg_len)
6074 mg->mg_len = -1;
cb9e20bb 6075 }
cb9e20bb 6076 }
26346457 6077 return ulen;
7e8c5dac 6078 }
26346457 6079 return Perl_utf8_length(aTHX_ s, s + len);
7e8c5dac
HS
6080 }
6081}
6082
9564a3bd
NC
6083/* Walk forwards to find the byte corresponding to the passed in UTF-8
6084 offset. */
bdf30dd6 6085static STRLEN
721e86b6 6086S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
bdf30dd6
NC
6087 STRLEN uoffset)
6088{
6089 const U8 *s = start;
6090
7918f24d
NC
6091 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6092
bdf30dd6
NC
6093 while (s < send && uoffset--)
6094 s += UTF8SKIP(s);
6095 if (s > send) {
6096 /* This is the existing behaviour. Possibly it should be a croak, as
6097 it's actually a bounds error */
6098 s = send;
6099 }
6100 return s - start;
6101}
6102
9564a3bd
NC
6103/* Given the length of the string in both bytes and UTF-8 characters, decide
6104 whether to walk forwards or backwards to find the byte corresponding to
6105 the passed in UTF-8 offset. */
c336ad0b 6106static STRLEN
721e86b6 6107S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
af828c01 6108 const STRLEN uoffset, const STRLEN uend)
c336ad0b
NC
6109{
6110 STRLEN backw = uend - uoffset;
7918f24d
NC
6111
6112 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6113
c336ad0b 6114 if (uoffset < 2 * backw) {
25a8a4ef 6115 /* The assumption is that going forwards is twice the speed of going
c336ad0b
NC
6116 forward (that's where the 2 * backw comes from).
6117 (The real figure of course depends on the UTF-8 data.) */
721e86b6 6118 return sv_pos_u2b_forwards(start, send, uoffset);
c336ad0b
NC
6119 }
6120
6121 while (backw--) {
6122 send--;
6123 while (UTF8_IS_CONTINUATION(*send))
6124 send--;
6125 }
6126 return send - start;
6127}
6128
9564a3bd
NC
6129/* For the string representation of the given scalar, find the byte
6130 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
6131 give another position in the string, *before* the sought offset, which
6132 (which is always true, as 0, 0 is a valid pair of positions), which should
6133 help reduce the amount of linear searching.
6134 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6135 will be used to reduce the amount of linear searching. The cache will be
6136 created if necessary, and the found value offered to it for update. */
28ccbf94 6137static STRLEN
af828c01
SS
6138S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6139 const U8 *const send, const STRLEN uoffset,
7918f24d
NC
6140 STRLEN uoffset0, STRLEN boffset0)
6141{
7087a21c 6142 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
c336ad0b
NC
6143 bool found = FALSE;
6144
7918f24d
NC
6145 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6146
75c33c12
NC
6147 assert (uoffset >= uoffset0);
6148
f89a570b
CS
6149 if (!SvREADONLY(sv)
6150 && PL_utf8cache
6151 && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6152 (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
d8b2e1f9
NC
6153 if ((*mgp)->mg_ptr) {
6154 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6155 if (cache[0] == uoffset) {
6156 /* An exact match. */
6157 return cache[1];
6158 }
ab455f60
NC
6159 if (cache[2] == uoffset) {
6160 /* An exact match. */
6161 return cache[3];
6162 }
668af93f
NC
6163
6164 if (cache[0] < uoffset) {
d8b2e1f9
NC
6165 /* The cache already knows part of the way. */
6166 if (cache[0] > uoffset0) {
6167 /* The cache knows more than the passed in pair */
6168 uoffset0 = cache[0];
6169 boffset0 = cache[1];
6170 }
6171 if ((*mgp)->mg_len != -1) {
6172 /* And we know the end too. */
6173 boffset = boffset0
721e86b6 6174 + sv_pos_u2b_midway(start + boffset0, send,
d8b2e1f9
NC
6175 uoffset - uoffset0,
6176 (*mgp)->mg_len - uoffset0);
6177 } else {
6178 boffset = boffset0
721e86b6 6179 + sv_pos_u2b_forwards(start + boffset0,
d8b2e1f9
NC
6180 send, uoffset - uoffset0);
6181 }
dd7c5fd3
NC
6182 }
6183 else if (cache[2] < uoffset) {
6184 /* We're between the two cache entries. */
6185 if (cache[2] > uoffset0) {
6186 /* and the cache knows more than the passed in pair */
6187 uoffset0 = cache[2];
6188 boffset0 = cache[3];
6189 }
6190
668af93f 6191 boffset = boffset0
721e86b6 6192 + sv_pos_u2b_midway(start + boffset0,
668af93f
NC
6193 start + cache[1],
6194 uoffset - uoffset0,
6195 cache[0] - uoffset0);
dd7c5fd3
NC
6196 } else {
6197 boffset = boffset0
721e86b6 6198 + sv_pos_u2b_midway(start + boffset0,
dd7c5fd3
NC
6199 start + cache[3],
6200 uoffset - uoffset0,
6201 cache[2] - uoffset0);
d8b2e1f9 6202 }
668af93f 6203 found = TRUE;
d8b2e1f9
NC
6204 }
6205 else if ((*mgp)->mg_len != -1) {
75c33c12
NC
6206 /* If we can take advantage of a passed in offset, do so. */
6207 /* In fact, offset0 is either 0, or less than offset, so don't
6208 need to worry about the other possibility. */
6209 boffset = boffset0
721e86b6 6210 + sv_pos_u2b_midway(start + boffset0, send,
75c33c12
NC
6211 uoffset - uoffset0,
6212 (*mgp)->mg_len - uoffset0);
c336ad0b
NC
6213 found = TRUE;
6214 }
28ccbf94 6215 }
c336ad0b
NC
6216
6217 if (!found || PL_utf8cache < 0) {
75c33c12 6218 const STRLEN real_boffset
721e86b6 6219 = boffset0 + sv_pos_u2b_forwards(start + boffset0,
75c33c12
NC
6220 send, uoffset - uoffset0);
6221
c336ad0b
NC
6222 if (found && PL_utf8cache < 0) {
6223 if (real_boffset != boffset) {
6224 /* Need to turn the assertions off otherwise we may recurse
6225 infinitely while printing error messages. */
6226 SAVEI8(PL_utf8cache);
6227 PL_utf8cache = 0;
f5992bc4
RB
6228 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
6229 " real %"UVuf" for %"SVf,
be2597df 6230 (UV) boffset, (UV) real_boffset, SVfARG(sv));
c336ad0b
NC
6231 }
6232 }
6233 boffset = real_boffset;
28ccbf94 6234 }
0905937d 6235
efcbbafb
NC
6236 if (PL_utf8cache)
6237 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
28ccbf94
NC
6238 return boffset;
6239}
6240
9564a3bd
NC
6241
6242/*
d931b1be 6243=for apidoc sv_pos_u2b_flags
9564a3bd
NC
6244
6245Converts the value pointed to by offsetp from a count of UTF-8 chars from
6246the start of the string, to a count of the equivalent number of bytes; if
6247lenp is non-zero, it does the same to lenp, but this time starting from
d931b1be
NC
6248the offset, rather than from the start of the string. Handles type coercion.
6249I<flags> is passed to C<SvPV_flags>, and usually should be
6250C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
9564a3bd
NC
6251
6252=cut
6253*/
6254
6255/*
d931b1be 6256 * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
c05a5c57 6257 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
6258 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6259 *
6260 */
6261
d931b1be
NC
6262STRLEN
6263Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6264 U32 flags)
a0ed51b3 6265{
245d4a47 6266 const U8 *start;
a0ed51b3 6267 STRLEN len;
d931b1be 6268 STRLEN boffset;
a0ed51b3 6269
d931b1be 6270 PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7918f24d 6271
d931b1be 6272 start = (U8*)SvPV_flags(sv, len, flags);
7e8c5dac 6273 if (len) {
bdf30dd6 6274 const U8 * const send = start + len;
0905937d 6275 MAGIC *mg = NULL;
d931b1be 6276 boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
bdf30dd6
NC
6277
6278 if (lenp) {
28ccbf94 6279 /* Convert the relative offset to absolute. */
777f7c56 6280 const STRLEN uoffset2 = uoffset + *lenp;
721e86b6
AL
6281 const STRLEN boffset2
6282 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
28ccbf94 6283 uoffset, boffset) - boffset;
bdf30dd6 6284
28ccbf94 6285 *lenp = boffset2;
bdf30dd6 6286 }
d931b1be
NC
6287 } else {
6288 if (lenp)
6289 *lenp = 0;
6290 boffset = 0;
a0ed51b3 6291 }
e23c8137 6292
d931b1be 6293 return boffset;
a0ed51b3
LW
6294}
6295
777f7c56
EB
6296/*
6297=for apidoc sv_pos_u2b
6298
6299Converts the value pointed to by offsetp from a count of UTF-8 chars from
6300the start of the string, to a count of the equivalent number of bytes; if
6301lenp is non-zero, it does the same to lenp, but this time starting from
6302the offset, rather than from the start of the string. Handles magic and
6303type coercion.
6304
d931b1be
NC
6305Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6306than 2Gb.
6307
777f7c56
EB
6308=cut
6309*/
6310
6311/*
6312 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6313 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6314 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6315 *
6316 */
6317
6318/* This function is subject to size and sign problems */
6319
6320void
6321Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6322{
d931b1be
NC
6323 PERL_ARGS_ASSERT_SV_POS_U2B;
6324
777f7c56
EB
6325 if (lenp) {
6326 STRLEN ulen = (STRLEN)*lenp;
d931b1be
NC
6327 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6328 SV_GMAGIC|SV_CONST_RETURN);
777f7c56
EB
6329 *lenp = (I32)ulen;
6330 } else {
d931b1be
NC
6331 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6332 SV_GMAGIC|SV_CONST_RETURN);
777f7c56 6333 }
777f7c56
EB
6334}
6335
9564a3bd
NC
6336/* Create and update the UTF8 magic offset cache, with the proffered utf8/
6337 byte length pairing. The (byte) length of the total SV is passed in too,
6338 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6339 may not have updated SvCUR, so we can't rely on reading it directly.
6340
6341 The proffered utf8/byte length pairing isn't used if the cache already has
6342 two pairs, and swapping either for the proffered pair would increase the
6343 RMS of the intervals between known byte offsets.
6344
6345 The cache itself consists of 4 STRLEN values
6346 0: larger UTF-8 offset
6347 1: corresponding byte offset
6348 2: smaller UTF-8 offset
6349 3: corresponding byte offset
6350
6351 Unused cache pairs have the value 0, 0.
6352 Keeping the cache "backwards" means that the invariant of
6353 cache[0] >= cache[2] is maintained even with empty slots, which means that
6354 the code that uses it doesn't need to worry if only 1 entry has actually
6355 been set to non-zero. It also makes the "position beyond the end of the
6356 cache" logic much simpler, as the first slot is always the one to start
6357 from.
645c22ef 6358*/
ec07b5e0 6359static void
ac1e9476
SS
6360S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6361 const STRLEN utf8, const STRLEN blen)
ec07b5e0
NC
6362{
6363 STRLEN *cache;
7918f24d
NC
6364
6365 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6366
ec07b5e0
NC
6367 if (SvREADONLY(sv))
6368 return;
6369
f89a570b
CS
6370 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6371 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
ec07b5e0
NC
6372 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6373 0);
6374 (*mgp)->mg_len = -1;
6375 }
6376 assert(*mgp);
6377
6378 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6379 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6380 (*mgp)->mg_ptr = (char *) cache;
6381 }
6382 assert(cache);
6383
ab8be49d
NC
6384 if (PL_utf8cache < 0 && SvPOKp(sv)) {
6385 /* SvPOKp() because it's possible that sv has string overloading, and
6386 therefore is a reference, hence SvPVX() is actually a pointer.
6387 This cures the (very real) symptoms of RT 69422, but I'm not actually
6388 sure whether we should even be caching the results of UTF-8
6389 operations on overloading, given that nothing stops overloading
6390 returning a different value every time it's called. */
ef816a78 6391 const U8 *start = (const U8 *) SvPVX_const(sv);
6448472a 6392 const STRLEN realutf8 = utf8_length(start, start + byte);
ec07b5e0
NC
6393
6394 if (realutf8 != utf8) {
6395 /* Need to turn the assertions off otherwise we may recurse
6396 infinitely while printing error messages. */
6397 SAVEI8(PL_utf8cache);
6398 PL_utf8cache = 0;
f5992bc4 6399 Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
be2597df 6400 " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, SVfARG(sv));
ec07b5e0
NC
6401 }
6402 }
ab455f60
NC
6403
6404 /* Cache is held with the later position first, to simplify the code
6405 that deals with unbounded ends. */
6406
6407 ASSERT_UTF8_CACHE(cache);
6408 if (cache[1] == 0) {
6409 /* Cache is totally empty */
6410 cache[0] = utf8;
6411 cache[1] = byte;
6412 } else if (cache[3] == 0) {
6413 if (byte > cache[1]) {
6414 /* New one is larger, so goes first. */
6415 cache[2] = cache[0];
6416 cache[3] = cache[1];
6417 cache[0] = utf8;
6418 cache[1] = byte;
6419 } else {
6420 cache[2] = utf8;
6421 cache[3] = byte;
6422 }
6423 } else {
6424#define THREEWAY_SQUARE(a,b,c,d) \
6425 ((float)((d) - (c))) * ((float)((d) - (c))) \
6426 + ((float)((c) - (b))) * ((float)((c) - (b))) \
6427 + ((float)((b) - (a))) * ((float)((b) - (a)))
6428
6429 /* Cache has 2 slots in use, and we know three potential pairs.
6430 Keep the two that give the lowest RMS distance. Do the
6431 calcualation in bytes simply because we always know the byte
6432 length. squareroot has the same ordering as the positive value,
6433 so don't bother with the actual square root. */
6434 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6435 if (byte > cache[1]) {
6436 /* New position is after the existing pair of pairs. */
6437 const float keep_earlier
6438 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6439 const float keep_later
6440 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6441
6442 if (keep_later < keep_earlier) {
6443 if (keep_later < existing) {
6444 cache[2] = cache[0];
6445 cache[3] = cache[1];
6446 cache[0] = utf8;
6447 cache[1] = byte;
6448 }
6449 }
6450 else {
6451 if (keep_earlier < existing) {
6452 cache[0] = utf8;
6453 cache[1] = byte;
6454 }
6455 }
6456 }
57d7fbf1
NC
6457 else if (byte > cache[3]) {
6458 /* New position is between the existing pair of pairs. */
6459 const float keep_earlier
6460 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6461 const float keep_later
6462 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6463
6464 if (keep_later < keep_earlier) {
6465 if (keep_later < existing) {
6466 cache[2] = utf8;
6467 cache[3] = byte;
6468 }
6469 }
6470 else {
6471 if (keep_earlier < existing) {
6472 cache[0] = utf8;
6473 cache[1] = byte;
6474 }
6475 }
6476 }
6477 else {
6478 /* New position is before the existing pair of pairs. */
6479 const float keep_earlier
6480 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6481 const float keep_later
6482 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6483
6484 if (keep_later < keep_earlier) {
6485 if (keep_later < existing) {
6486 cache[2] = utf8;
6487 cache[3] = byte;
6488 }
6489 }
6490 else {
6491 if (keep_earlier < existing) {
6492 cache[0] = cache[2];
6493 cache[1] = cache[3];
6494 cache[2] = utf8;
6495 cache[3] = byte;
6496 }
6497 }
6498 }
ab455f60 6499 }
0905937d 6500 ASSERT_UTF8_CACHE(cache);
ec07b5e0
NC
6501}
6502
ec07b5e0 6503/* We already know all of the way, now we may be able to walk back. The same
25a8a4ef
NC
6504 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6505 backward is half the speed of walking forward. */
ec07b5e0 6506static STRLEN
ac1e9476
SS
6507S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6508 const U8 *end, STRLEN endu)
ec07b5e0
NC
6509{
6510 const STRLEN forw = target - s;
6511 STRLEN backw = end - target;
6512
7918f24d
NC
6513 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6514
ec07b5e0 6515 if (forw < 2 * backw) {
6448472a 6516 return utf8_length(s, target);
ec07b5e0
NC
6517 }
6518
6519 while (end > target) {
6520 end--;
6521 while (UTF8_IS_CONTINUATION(*end)) {
6522 end--;
6523 }
6524 endu--;
6525 }
6526 return endu;
6527}
6528
9564a3bd
NC
6529/*
6530=for apidoc sv_pos_b2u
6531
6532Converts the value pointed to by offsetp from a count of bytes from the
6533start of the string, to a count of the equivalent number of UTF-8 chars.
6534Handles magic and type coercion.
6535
6536=cut
6537*/
6538
6539/*
6540 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
c05a5c57 6541 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
6542 * byte offsets.
6543 *
6544 */
a0ed51b3 6545void
ac1e9476 6546Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
a0ed51b3 6547{
83003860 6548 const U8* s;
ec07b5e0 6549 const STRLEN byte = *offsetp;
7087a21c 6550 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
ab455f60 6551 STRLEN blen;
ec07b5e0
NC
6552 MAGIC* mg = NULL;
6553 const U8* send;
a922f900 6554 bool found = FALSE;
a0ed51b3 6555
7918f24d
NC
6556 PERL_ARGS_ASSERT_SV_POS_B2U;
6557
a0ed51b3
LW
6558 if (!sv)
6559 return;
6560
ab455f60 6561 s = (const U8*)SvPV_const(sv, blen);
7e8c5dac 6562
ab455f60 6563 if (blen < byte)
ec07b5e0 6564 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7e8c5dac 6565
ec07b5e0 6566 send = s + byte;
a67d7df9 6567
f89a570b
CS
6568 if (!SvREADONLY(sv)
6569 && PL_utf8cache
6570 && SvTYPE(sv) >= SVt_PVMG
6571 && (mg = mg_find(sv, PERL_MAGIC_utf8)))
6572 {
ffca234a 6573 if (mg->mg_ptr) {
d4c19fe8 6574 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
b9f984a5 6575 if (cache[1] == byte) {
ec07b5e0
NC
6576 /* An exact match. */
6577 *offsetp = cache[0];
ec07b5e0 6578 return;
7e8c5dac 6579 }
ab455f60
NC
6580 if (cache[3] == byte) {
6581 /* An exact match. */
6582 *offsetp = cache[2];
6583 return;
6584 }
668af93f
NC
6585
6586 if (cache[1] < byte) {
ec07b5e0 6587 /* We already know part of the way. */
b9f984a5
NC
6588 if (mg->mg_len != -1) {
6589 /* Actually, we know the end too. */
6590 len = cache[0]
6591 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
ab455f60 6592 s + blen, mg->mg_len - cache[0]);
b9f984a5 6593 } else {
6448472a 6594 len = cache[0] + utf8_length(s + cache[1], send);
b9f984a5 6595 }
7e8c5dac 6596 }
9f985e4c
NC
6597 else if (cache[3] < byte) {
6598 /* We're between the two cached pairs, so we do the calculation
6599 offset by the byte/utf-8 positions for the earlier pair,
6600 then add the utf-8 characters from the string start to
6601 there. */
6602 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
6603 s + cache[1], cache[0] - cache[2])
6604 + cache[2];
6605
6606 }
6607 else { /* cache[3] > byte */
6608 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
6609 cache[2]);
7e8c5dac 6610
7e8c5dac 6611 }
ec07b5e0 6612 ASSERT_UTF8_CACHE(cache);
a922f900 6613 found = TRUE;
ffca234a 6614 } else if (mg->mg_len != -1) {
ab455f60 6615 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
a922f900 6616 found = TRUE;
7e8c5dac 6617 }
a0ed51b3 6618 }
a922f900 6619 if (!found || PL_utf8cache < 0) {
6448472a 6620 const STRLEN real_len = utf8_length(s, send);
a922f900
NC
6621
6622 if (found && PL_utf8cache < 0) {
6623 if (len != real_len) {
6624 /* Need to turn the assertions off otherwise we may recurse
6625 infinitely while printing error messages. */
6626 SAVEI8(PL_utf8cache);
6627 PL_utf8cache = 0;
f5992bc4
RB
6628 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
6629 " real %"UVuf" for %"SVf,
be2597df 6630 (UV) len, (UV) real_len, SVfARG(sv));
a922f900
NC
6631 }
6632 }
6633 len = real_len;
ec07b5e0
NC
6634 }
6635 *offsetp = len;
6636
efcbbafb
NC
6637 if (PL_utf8cache)
6638 utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
a0ed51b3
LW
6639}
6640
954c1994
GS
6641/*
6642=for apidoc sv_eq
6643
6644Returns a boolean indicating whether the strings in the two SVs are
645c22ef
DM
6645identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6646coerce its args to strings if necessary.
954c1994
GS
6647
6648=cut
6649*/
6650
79072805 6651I32
e01b9e88 6652Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
79072805 6653{
97aff369 6654 dVAR;
e1ec3a88 6655 const char *pv1;
463ee0b2 6656 STRLEN cur1;
e1ec3a88 6657 const char *pv2;
463ee0b2 6658 STRLEN cur2;
e01b9e88 6659 I32 eq = 0;
bd61b366 6660 char *tpv = NULL;
a0714e2c 6661 SV* svrecode = NULL;
79072805 6662
e01b9e88 6663 if (!sv1) {
79072805
LW
6664 pv1 = "";
6665 cur1 = 0;
6666 }
ced497e2
YST
6667 else {
6668 /* if pv1 and pv2 are the same, second SvPV_const call may
6669 * invalidate pv1, so we may need to make a copy */
6670 if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
6671 pv1 = SvPV_const(sv1, cur1);
59cd0e26 6672 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
ced497e2 6673 }
4d84ee25 6674 pv1 = SvPV_const(sv1, cur1);
ced497e2 6675 }
79072805 6676
e01b9e88
SC
6677 if (!sv2){
6678 pv2 = "";
6679 cur2 = 0;
92d29cee 6680 }
e01b9e88 6681 else
4d84ee25 6682 pv2 = SvPV_const(sv2, cur2);
79072805 6683
cf48d248 6684 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
6685 /* Differing utf8ness.
6686 * Do not UTF8size the comparands as a side-effect. */
6687 if (PL_encoding) {
6688 if (SvUTF8(sv1)) {
553e1bcc
AT
6689 svrecode = newSVpvn(pv2, cur2);
6690 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6691 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
6692 }
6693 else {
553e1bcc
AT
6694 svrecode = newSVpvn(pv1, cur1);
6695 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6696 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
6697 }
6698 /* Now both are in UTF-8. */
0a1bd7ac
DM
6699 if (cur1 != cur2) {
6700 SvREFCNT_dec(svrecode);
799ef3cb 6701 return FALSE;
0a1bd7ac 6702 }
799ef3cb
JH
6703 }
6704 else {
6705 bool is_utf8 = TRUE;
6706
6707 if (SvUTF8(sv1)) {
6708 /* sv1 is the UTF-8 one,
6709 * if is equal it must be downgrade-able */
9d4ba2ae 6710 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
799ef3cb
JH
6711 &cur1, &is_utf8);
6712 if (pv != pv1)
553e1bcc 6713 pv1 = tpv = pv;
799ef3cb
JH
6714 }
6715 else {
6716 /* sv2 is the UTF-8 one,
6717 * if is equal it must be downgrade-able */
9d4ba2ae 6718 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
799ef3cb
JH
6719 &cur2, &is_utf8);
6720 if (pv != pv2)
553e1bcc 6721 pv2 = tpv = pv;
799ef3cb
JH
6722 }
6723 if (is_utf8) {
6724 /* Downgrade not possible - cannot be eq */
bf694877 6725 assert (tpv == 0);
799ef3cb
JH
6726 return FALSE;
6727 }
6728 }
cf48d248
JH
6729 }
6730
6731 if (cur1 == cur2)
765f542d 6732 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
e01b9e88 6733
b37c2d43 6734 SvREFCNT_dec(svrecode);
553e1bcc
AT
6735 if (tpv)
6736 Safefree(tpv);
cf48d248 6737
e01b9e88 6738 return eq;
79072805
LW
6739}
6740
954c1994
GS
6741/*
6742=for apidoc sv_cmp
6743
6744Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
6745string in C<sv1> is less than, equal to, or greater than the string in
645c22ef
DM
6746C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6747coerce its args to strings if necessary. See also C<sv_cmp_locale>.
954c1994
GS
6748
6749=cut
6750*/
6751
79072805 6752I32
ac1e9476 6753Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
79072805 6754{
97aff369 6755 dVAR;
560a288e 6756 STRLEN cur1, cur2;
e1ec3a88 6757 const char *pv1, *pv2;
bd61b366 6758 char *tpv = NULL;
cf48d248 6759 I32 cmp;
a0714e2c 6760 SV *svrecode = NULL;
560a288e 6761
e01b9e88
SC
6762 if (!sv1) {
6763 pv1 = "";
560a288e
GS
6764 cur1 = 0;
6765 }
e01b9e88 6766 else
4d84ee25 6767 pv1 = SvPV_const(sv1, cur1);
560a288e 6768
553e1bcc 6769 if (!sv2) {
e01b9e88 6770 pv2 = "";
560a288e
GS
6771 cur2 = 0;
6772 }
e01b9e88 6773 else
4d84ee25 6774 pv2 = SvPV_const(sv2, cur2);
79072805 6775
cf48d248 6776 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
6777 /* Differing utf8ness.
6778 * Do not UTF8size the comparands as a side-effect. */
cf48d248 6779 if (SvUTF8(sv1)) {
799ef3cb 6780 if (PL_encoding) {
553e1bcc
AT
6781 svrecode = newSVpvn(pv2, cur2);
6782 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6783 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
6784 }
6785 else {
e1ec3a88 6786 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
799ef3cb 6787 }
cf48d248
JH
6788 }
6789 else {
799ef3cb 6790 if (PL_encoding) {
553e1bcc
AT
6791 svrecode = newSVpvn(pv1, cur1);
6792 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6793 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
6794 }
6795 else {
e1ec3a88 6796 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
799ef3cb 6797 }
cf48d248
JH
6798 }
6799 }
6800
e01b9e88 6801 if (!cur1) {
cf48d248 6802 cmp = cur2 ? -1 : 0;
e01b9e88 6803 } else if (!cur2) {
cf48d248
JH
6804 cmp = 1;
6805 } else {
e1ec3a88 6806 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
e01b9e88
SC
6807
6808 if (retval) {
cf48d248 6809 cmp = retval < 0 ? -1 : 1;
e01b9e88 6810 } else if (cur1 == cur2) {
cf48d248
JH
6811 cmp = 0;
6812 } else {
6813 cmp = cur1 < cur2 ? -1 : 1;
e01b9e88 6814 }
cf48d248 6815 }
16660edb 6816
b37c2d43 6817 SvREFCNT_dec(svrecode);
553e1bcc
AT
6818 if (tpv)
6819 Safefree(tpv);
cf48d248
JH
6820
6821 return cmp;
bbce6d69 6822}
16660edb 6823
c461cf8f
JH
6824/*
6825=for apidoc sv_cmp_locale
6826
645c22ef
DM
6827Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6828'use bytes' aware, handles get magic, and will coerce its args to strings
d77cdebf 6829if necessary. See also C<sv_cmp>.
c461cf8f
JH
6830
6831=cut
6832*/
6833
bbce6d69 6834I32
ac1e9476 6835Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
bbce6d69 6836{
97aff369 6837 dVAR;
36477c24 6838#ifdef USE_LOCALE_COLLATE
16660edb 6839
bbce6d69 6840 char *pv1, *pv2;
6841 STRLEN len1, len2;
6842 I32 retval;
16660edb 6843
3280af22 6844 if (PL_collation_standard)
bbce6d69 6845 goto raw_compare;
16660edb 6846
bbce6d69 6847 len1 = 0;
8ac85365 6848 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
bbce6d69 6849 len2 = 0;
8ac85365 6850 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
16660edb 6851
bbce6d69 6852 if (!pv1 || !len1) {
6853 if (pv2 && len2)
6854 return -1;
6855 else
6856 goto raw_compare;
6857 }
6858 else {
6859 if (!pv2 || !len2)
6860 return 1;
6861 }
16660edb 6862
bbce6d69 6863 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
16660edb 6864
bbce6d69 6865 if (retval)
16660edb 6866 return retval < 0 ? -1 : 1;
6867
bbce6d69 6868 /*
6869 * When the result of collation is equality, that doesn't mean
6870 * that there are no differences -- some locales exclude some
6871 * characters from consideration. So to avoid false equalities,
6872 * we use the raw string as a tiebreaker.
6873 */
16660edb 6874
bbce6d69 6875 raw_compare:
5f66b61c 6876 /*FALLTHROUGH*/
16660edb 6877
36477c24 6878#endif /* USE_LOCALE_COLLATE */
16660edb 6879
bbce6d69 6880 return sv_cmp(sv1, sv2);
6881}
79072805 6882
645c22ef 6883
36477c24 6884#ifdef USE_LOCALE_COLLATE
645c22ef 6885
7a4c00b4 6886/*
645c22ef
DM
6887=for apidoc sv_collxfrm
6888
6889Add Collate Transform magic to an SV if it doesn't already have it.
6890
6891Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6892scalar data of the variable, but transformed to such a format that a normal
6893memory comparison can be used to compare the data according to the locale
6894settings.
6895
6896=cut
6897*/
6898
bbce6d69 6899char *
ac1e9476 6900Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
bbce6d69 6901{
97aff369 6902 dVAR;
7a4c00b4 6903 MAGIC *mg;
16660edb 6904
7918f24d
NC
6905 PERL_ARGS_ASSERT_SV_COLLXFRM;
6906
14befaf4 6907 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
3280af22 6908 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
93524f2b
NC
6909 const char *s;
6910 char *xf;
bbce6d69 6911 STRLEN len, xlen;
6912
7a4c00b4 6913 if (mg)
6914 Safefree(mg->mg_ptr);
93524f2b 6915 s = SvPV_const(sv, len);
bbce6d69 6916 if ((xf = mem_collxfrm(s, len, &xlen))) {
7a4c00b4 6917 if (! mg) {
d83f0a82
NC
6918#ifdef PERL_OLD_COPY_ON_WRITE
6919 if (SvIsCOW(sv))
6920 sv_force_normal_flags(sv, 0);
6921#endif
6922 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6923 0, 0);
7a4c00b4 6924 assert(mg);
bbce6d69 6925 }
7a4c00b4 6926 mg->mg_ptr = xf;
565764a8 6927 mg->mg_len = xlen;
7a4c00b4 6928 }
6929 else {
ff0cee69 6930 if (mg) {
6931 mg->mg_ptr = NULL;
565764a8 6932 mg->mg_len = -1;
ff0cee69 6933 }
bbce6d69 6934 }
6935 }
7a4c00b4 6936 if (mg && mg->mg_ptr) {
565764a8 6937 *nxp = mg->mg_len;
3280af22 6938 return mg->mg_ptr + sizeof(PL_collation_ix);
bbce6d69 6939 }
6940 else {
6941 *nxp = 0;
6942 return NULL;
16660edb 6943 }
79072805
LW
6944}
6945
36477c24 6946#endif /* USE_LOCALE_COLLATE */
bbce6d69 6947
c461cf8f
JH
6948/*
6949=for apidoc sv_gets
6950
6951Get a line from the filehandle and store it into the SV, optionally
6952appending to the currently-stored string.
6953
6954=cut
6955*/
6956
79072805 6957char *
ac1e9476 6958Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
79072805 6959{
97aff369 6960 dVAR;
e1ec3a88 6961 const char *rsptr;
c07a80fd 6962 STRLEN rslen;
6963 register STDCHAR rslast;
6964 register STDCHAR *bp;
6965 register I32 cnt;
9c5ffd7c 6966 I32 i = 0;
8bfdd7d9 6967 I32 rspara = 0;
c07a80fd 6968
7918f24d
NC
6969 PERL_ARGS_ASSERT_SV_GETS;
6970
bc44a8a2
NC
6971 if (SvTHINKFIRST(sv))
6972 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
765f542d
NC
6973 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6974 from <>.
6975 However, perlbench says it's slower, because the existing swipe code
6976 is faster than copy on write.
6977 Swings and roundabouts. */
862a34c6 6978 SvUPGRADE(sv, SVt_PV);
99491443 6979
ff68c719 6980 SvSCREAM_off(sv);
efd8b2ba
AE
6981
6982 if (append) {
6983 if (PerlIO_isutf8(fp)) {
6984 if (!SvUTF8(sv)) {
6985 sv_utf8_upgrade_nomg(sv);
6986 sv_pos_u2b(sv,&append,0);
6987 }
6988 } else if (SvUTF8(sv)) {
561b68a9 6989 SV * const tsv = newSV(0);
efd8b2ba
AE
6990 sv_gets(tsv, fp, 0);
6991 sv_utf8_upgrade_nomg(tsv);
6992 SvCUR_set(sv,append);
6993 sv_catsv(sv,tsv);
6994 sv_free(tsv);
6995 goto return_string_or_null;
6996 }
6997 }
6998
6999 SvPOK_only(sv);
7000 if (PerlIO_isutf8(fp))
7001 SvUTF8_on(sv);
c07a80fd 7002
923e4eb5 7003 if (IN_PERL_COMPILETIME) {
8bfdd7d9
HS
7004 /* we always read code in line mode */
7005 rsptr = "\n";
7006 rslen = 1;
7007 }
7008 else if (RsSNARF(PL_rs)) {
7a5fa8a2 7009 /* If it is a regular disk file use size from stat() as estimate
acbd132f
JH
7010 of amount we are going to read -- may result in mallocing
7011 more memory than we really need if the layers below reduce
7012 the size we read (e.g. CRLF or a gzip layer).
e468d35b 7013 */
e311fd51 7014 Stat_t st;
e468d35b 7015 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
f54cb97a 7016 const Off_t offset = PerlIO_tell(fp);
58f1856e 7017 if (offset != (Off_t) -1 && st.st_size + append > offset) {
e468d35b
NIS
7018 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7019 }
7020 }
c07a80fd 7021 rsptr = NULL;
7022 rslen = 0;
7023 }
3280af22 7024 else if (RsRECORD(PL_rs)) {
e311fd51 7025 I32 bytesread;
5b2b9c68 7026 char *buffer;
acbd132f 7027 U32 recsize;
048d9da8
CB
7028#ifdef VMS
7029 int fd;
7030#endif
5b2b9c68
HM
7031
7032 /* Grab the size of the record we're getting */
acbd132f 7033 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
e311fd51 7034 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
5b2b9c68
HM
7035 /* Go yank in */
7036#ifdef VMS
7037 /* VMS wants read instead of fread, because fread doesn't respect */
7038 /* RMS record boundaries. This is not necessarily a good thing to be */
e468d35b
NIS
7039 /* doing, but we've got no other real choice - except avoid stdio
7040 as implementation - perhaps write a :vms layer ?
7041 */
048d9da8
CB
7042 fd = PerlIO_fileno(fp);
7043 if (fd == -1) { /* in-memory file from PerlIO::Scalar */
7044 bytesread = PerlIO_read(fp, buffer, recsize);
7045 }
7046 else {
7047 bytesread = PerlLIO_read(fd, buffer, recsize);
7048 }
5b2b9c68
HM
7049#else
7050 bytesread = PerlIO_read(fp, buffer, recsize);
7051#endif
27e6ca2d
AE
7052 if (bytesread < 0)
7053 bytesread = 0;
82f1394b 7054 SvCUR_set(sv, bytesread + append);
e670df4e 7055 buffer[bytesread] = '\0';
efd8b2ba 7056 goto return_string_or_null;
5b2b9c68 7057 }
3280af22 7058 else if (RsPARA(PL_rs)) {
c07a80fd 7059 rsptr = "\n\n";
7060 rslen = 2;
8bfdd7d9 7061 rspara = 1;
c07a80fd 7062 }
7d59b7e4
NIS
7063 else {
7064 /* Get $/ i.e. PL_rs into same encoding as stream wants */
7065 if (PerlIO_isutf8(fp)) {
7066 rsptr = SvPVutf8(PL_rs, rslen);
7067 }
7068 else {
7069 if (SvUTF8(PL_rs)) {
7070 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7071 Perl_croak(aTHX_ "Wide character in $/");
7072 }
7073 }
93524f2b 7074 rsptr = SvPV_const(PL_rs, rslen);
7d59b7e4
NIS
7075 }
7076 }
7077
c07a80fd 7078 rslast = rslen ? rsptr[rslen - 1] : '\0';
7079
8bfdd7d9 7080 if (rspara) { /* have to do this both before and after */
79072805 7081 do { /* to make sure file boundaries work right */
760ac839 7082 if (PerlIO_eof(fp))
a0d0e21e 7083 return 0;
760ac839 7084 i = PerlIO_getc(fp);
79072805 7085 if (i != '\n') {
a0d0e21e
LW
7086 if (i == -1)
7087 return 0;
760ac839 7088 PerlIO_ungetc(fp,i);
79072805
LW
7089 break;
7090 }
7091 } while (i != EOF);
7092 }
c07a80fd 7093
760ac839
LW
7094 /* See if we know enough about I/O mechanism to cheat it ! */
7095
7096 /* This used to be #ifdef test - it is made run-time test for ease
1c846c1f 7097 of abstracting out stdio interface. One call should be cheap
760ac839
LW
7098 enough here - and may even be a macro allowing compile
7099 time optimization.
7100 */
7101
7102 if (PerlIO_fast_gets(fp)) {
7103
7104 /*
7105 * We're going to steal some values from the stdio struct
7106 * and put EVERYTHING in the innermost loop into registers.
7107 */
7108 register STDCHAR *ptr;
7109 STRLEN bpx;
7110 I32 shortbuffered;
7111
16660edb 7112#if defined(VMS) && defined(PERLIO_IS_STDIO)
7113 /* An ungetc()d char is handled separately from the regular
7114 * buffer, so we getc() it back out and stuff it in the buffer.
7115 */
7116 i = PerlIO_getc(fp);
7117 if (i == EOF) return 0;
7118 *(--((*fp)->_ptr)) = (unsigned char) i;
7119 (*fp)->_cnt++;
7120#endif
c07a80fd 7121
c2960299 7122 /* Here is some breathtakingly efficient cheating */
c07a80fd 7123
a20bf0c3 7124 cnt = PerlIO_get_cnt(fp); /* get count into register */
e468d35b 7125 /* make sure we have the room */
7a5fa8a2 7126 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
e468d35b 7127 /* Not room for all of it
7a5fa8a2 7128 if we are looking for a separator and room for some
e468d35b
NIS
7129 */
7130 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7a5fa8a2 7131 /* just process what we have room for */
79072805
LW
7132 shortbuffered = cnt - SvLEN(sv) + append + 1;
7133 cnt -= shortbuffered;
7134 }
7135 else {
7136 shortbuffered = 0;
bbce6d69 7137 /* remember that cnt can be negative */
eb160463 7138 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
79072805
LW
7139 }
7140 }
7a5fa8a2 7141 else
79072805 7142 shortbuffered = 0;
3f7c398e 7143 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
a20bf0c3 7144 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
16660edb 7145 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7146 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
16660edb 7147 DEBUG_P(PerlIO_printf(Perl_debug_log,
ba7abf9d 7148 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7149 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7150 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
79072805
LW
7151 for (;;) {
7152 screamer:
93a17b20 7153 if (cnt > 0) {
c07a80fd 7154 if (rslen) {
760ac839
LW
7155 while (cnt > 0) { /* this | eat */
7156 cnt--;
c07a80fd 7157 if ((*bp++ = *ptr++) == rslast) /* really | dust */
7158 goto thats_all_folks; /* screams | sed :-) */
7159 }
7160 }
7161 else {
1c846c1f
NIS
7162 Copy(ptr, bp, cnt, char); /* this | eat */
7163 bp += cnt; /* screams | dust */
c07a80fd 7164 ptr += cnt; /* louder | sed :-) */
a5f75d66 7165 cnt = 0;
93a17b20 7166 }
79072805
LW
7167 }
7168
748a9306 7169 if (shortbuffered) { /* oh well, must extend */
79072805
LW
7170 cnt = shortbuffered;
7171 shortbuffered = 0;
3f7c398e 7172 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7173 SvCUR_set(sv, bpx);
7174 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3f7c398e 7175 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
79072805
LW
7176 continue;
7177 }
7178
16660edb 7179 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841
GS
7180 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7181 PTR2UV(ptr),(long)cnt));
cc00df79 7182 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
ba7abf9d 7183#if 0
16660edb 7184 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7185 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7186 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7187 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 7188#endif
1c846c1f 7189 /* This used to call 'filbuf' in stdio form, but as that behaves like
774d564b 7190 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7191 another abstraction. */
760ac839 7192 i = PerlIO_getc(fp); /* get more characters */
ba7abf9d 7193#if 0
16660edb 7194 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7195 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7196 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7197 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 7198#endif
a20bf0c3
JH
7199 cnt = PerlIO_get_cnt(fp);
7200 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
16660edb 7201 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7202 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
79072805 7203
748a9306
LW
7204 if (i == EOF) /* all done for ever? */
7205 goto thats_really_all_folks;
7206
3f7c398e 7207 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7208 SvCUR_set(sv, bpx);
7209 SvGROW(sv, bpx + cnt + 2);
3f7c398e 7210 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
c07a80fd 7211
eb160463 7212 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
79072805 7213
c07a80fd 7214 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
79072805 7215 goto thats_all_folks;
79072805
LW
7216 }
7217
7218thats_all_folks:
3f7c398e 7219 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
36477c24 7220 memNE((char*)bp - rslen, rsptr, rslen))
760ac839 7221 goto screamer; /* go back to the fray */
79072805
LW
7222thats_really_all_folks:
7223 if (shortbuffered)
7224 cnt += shortbuffered;
16660edb 7225 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7226 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
cc00df79 7227 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
16660edb 7228 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7229 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7230 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7231 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
79072805 7232 *bp = '\0';
3f7c398e 7233 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
16660edb 7234 DEBUG_P(PerlIO_printf(Perl_debug_log,
fb73857a 7235 "Screamer: done, len=%ld, string=|%.*s|\n",
3f7c398e 7236 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
760ac839
LW
7237 }
7238 else
79072805 7239 {
6edd2cd5 7240 /*The big, slow, and stupid way. */
27da23d5 7241#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
cbbf8932 7242 STDCHAR *buf = NULL;
a02a5408 7243 Newx(buf, 8192, STDCHAR);
6edd2cd5 7244 assert(buf);
4d2c4e07 7245#else
6edd2cd5 7246 STDCHAR buf[8192];
4d2c4e07 7247#endif
79072805 7248
760ac839 7249screamer2:
c07a80fd 7250 if (rslen) {
00b6aa41 7251 register const STDCHAR * const bpe = buf + sizeof(buf);
760ac839 7252 bp = buf;
eb160463 7253 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
760ac839
LW
7254 ; /* keep reading */
7255 cnt = bp - buf;
c07a80fd 7256 }
7257 else {
760ac839 7258 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
16660edb 7259 /* Accomodate broken VAXC compiler, which applies U8 cast to
7260 * both args of ?: operator, causing EOF to change into 255
7261 */
37be0adf 7262 if (cnt > 0)
cbe9e203
JH
7263 i = (U8)buf[cnt - 1];
7264 else
37be0adf 7265 i = EOF;
c07a80fd 7266 }
79072805 7267
cbe9e203
JH
7268 if (cnt < 0)
7269 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
7270 if (append)
7271 sv_catpvn(sv, (char *) buf, cnt);
7272 else
7273 sv_setpvn(sv, (char *) buf, cnt);
c07a80fd 7274
7275 if (i != EOF && /* joy */
7276 (!rslen ||
7277 SvCUR(sv) < rslen ||
3f7c398e 7278 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
79072805
LW
7279 {
7280 append = -1;
63e4d877
CS
7281 /*
7282 * If we're reading from a TTY and we get a short read,
7283 * indicating that the user hit his EOF character, we need
7284 * to notice it now, because if we try to read from the TTY
7285 * again, the EOF condition will disappear.
7286 *
7287 * The comparison of cnt to sizeof(buf) is an optimization
7288 * that prevents unnecessary calls to feof().
7289 *
7290 * - jik 9/25/96
7291 */
bb7a0f54 7292 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
63e4d877 7293 goto screamer2;
79072805 7294 }
6edd2cd5 7295
27da23d5 7296#ifdef USE_HEAP_INSTEAD_OF_STACK
6edd2cd5
JH
7297 Safefree(buf);
7298#endif
79072805
LW
7299 }
7300
8bfdd7d9 7301 if (rspara) { /* have to do this both before and after */
c07a80fd 7302 while (i != EOF) { /* to make sure file boundaries work right */
760ac839 7303 i = PerlIO_getc(fp);
79072805 7304 if (i != '\n') {
760ac839 7305 PerlIO_ungetc(fp,i);
79072805
LW
7306 break;
7307 }
7308 }
7309 }
c07a80fd 7310
efd8b2ba 7311return_string_or_null:
bd61b366 7312 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
79072805
LW
7313}
7314
954c1994
GS
7315/*
7316=for apidoc sv_inc
7317
645c22ef 7318Auto-increment of the value in the SV, doing string to numeric conversion
6f1401dc 7319if necessary. Handles 'get' magic and operator overloading.
954c1994
GS
7320
7321=cut
7322*/
7323
79072805 7324void
ac1e9476 7325Perl_sv_inc(pTHX_ register SV *const sv)
79072805 7326{
6f1401dc
DM
7327 if (!sv)
7328 return;
7329 SvGETMAGIC(sv);
7330 sv_inc_nomg(sv);
7331}
7332
7333/*
7334=for apidoc sv_inc_nomg
7335
7336Auto-increment of the value in the SV, doing string to numeric conversion
7337if necessary. Handles operator overloading. Skips handling 'get' magic.
7338
7339=cut
7340*/
7341
7342void
7343Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7344{
97aff369 7345 dVAR;
79072805 7346 register char *d;
463ee0b2 7347 int flags;
79072805
LW
7348
7349 if (!sv)
7350 return;
ed6116ce 7351 if (SvTHINKFIRST(sv)) {
765f542d
NC
7352 if (SvIsCOW(sv))
7353 sv_force_normal_flags(sv, 0);
0f15f207 7354 if (SvREADONLY(sv)) {
923e4eb5 7355 if (IN_PERL_RUNTIME)
f1f66076 7356 Perl_croak(aTHX_ "%s", PL_no_modify);
0f15f207 7357 }
a0d0e21e 7358 if (SvROK(sv)) {
b5be31e9 7359 IV i;
9e7bc3e8
JD
7360 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7361 return;
56431972 7362 i = PTR2IV(SvRV(sv));
b5be31e9
SM
7363 sv_unref(sv);
7364 sv_setiv(sv, i);
a0d0e21e 7365 }
ed6116ce 7366 }
8990e307 7367 flags = SvFLAGS(sv);
28e5dec8
JH
7368 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7369 /* It's (privately or publicly) a float, but not tested as an
7370 integer, so test it to see. */
d460ef45 7371 (void) SvIV(sv);
28e5dec8
JH
7372 flags = SvFLAGS(sv);
7373 }
7374 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7375 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 7376#ifdef PERL_PRESERVE_IVUV
28e5dec8 7377 oops_its_int:
59d8ce62 7378#endif
25da4f38
IZ
7379 if (SvIsUV(sv)) {
7380 if (SvUVX(sv) == UV_MAX)
a1e868e7 7381 sv_setnv(sv, UV_MAX_P1);
25da4f38
IZ
7382 else
7383 (void)SvIOK_only_UV(sv);
607fa7f2 7384 SvUV_set(sv, SvUVX(sv) + 1);
25da4f38
IZ
7385 } else {
7386 if (SvIVX(sv) == IV_MAX)
28e5dec8 7387 sv_setuv(sv, (UV)IV_MAX + 1);
25da4f38
IZ
7388 else {
7389 (void)SvIOK_only(sv);
45977657 7390 SvIV_set(sv, SvIVX(sv) + 1);
1c846c1f 7391 }
55497cff 7392 }
79072805
LW
7393 return;
7394 }
28e5dec8 7395 if (flags & SVp_NOK) {
b88df990 7396 const NV was = SvNVX(sv);
b68c599a 7397 if (NV_OVERFLOWS_INTEGERS_AT &&
a2a5de95
NC
7398 was >= NV_OVERFLOWS_INTEGERS_AT) {
7399 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7400 "Lost precision when incrementing %" NVff " by 1",
7401 was);
b88df990 7402 }
28e5dec8 7403 (void)SvNOK_only(sv);
b68c599a 7404 SvNV_set(sv, was + 1.0);
28e5dec8
JH
7405 return;
7406 }
7407
3f7c398e 7408 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
28e5dec8 7409 if ((flags & SVTYPEMASK) < SVt_PVIV)
f5282e15 7410 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
28e5dec8 7411 (void)SvIOK_only(sv);
45977657 7412 SvIV_set(sv, 1);
79072805
LW
7413 return;
7414 }
463ee0b2 7415 d = SvPVX(sv);
79072805
LW
7416 while (isALPHA(*d)) d++;
7417 while (isDIGIT(*d)) d++;
6aff239d 7418 if (d < SvEND(sv)) {
28e5dec8 7419#ifdef PERL_PRESERVE_IVUV
d1be9408 7420 /* Got to punt this as an integer if needs be, but we don't issue
28e5dec8
JH
7421 warnings. Probably ought to make the sv_iv_please() that does
7422 the conversion if possible, and silently. */
504618e9 7423 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
7424 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7425 /* Need to try really hard to see if it's an integer.
7426 9.22337203685478e+18 is an integer.
7427 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7428 so $a="9.22337203685478e+18"; $a+0; $a++
7429 needs to be the same as $a="9.22337203685478e+18"; $a++
7430 or we go insane. */
d460ef45 7431
28e5dec8
JH
7432 (void) sv_2iv(sv);
7433 if (SvIOK(sv))
7434 goto oops_its_int;
7435
7436 /* sv_2iv *should* have made this an NV */
7437 if (flags & SVp_NOK) {
7438 (void)SvNOK_only(sv);
9d6ce603 7439 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
7440 return;
7441 }
7442 /* I don't think we can get here. Maybe I should assert this
7443 And if we do get here I suspect that sv_setnv will croak. NWC
7444 Fall through. */
7445#if defined(USE_LONG_DOUBLE)
7446 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 7447 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 7448#else
1779d84d 7449 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 7450 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
7451#endif
7452 }
7453#endif /* PERL_PRESERVE_IVUV */
3f7c398e 7454 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
79072805
LW
7455 return;
7456 }
7457 d--;
3f7c398e 7458 while (d >= SvPVX_const(sv)) {
79072805
LW
7459 if (isDIGIT(*d)) {
7460 if (++*d <= '9')
7461 return;
7462 *(d--) = '0';
7463 }
7464 else {
9d116dd7
JH
7465#ifdef EBCDIC
7466 /* MKS: The original code here died if letters weren't consecutive.
7467 * at least it didn't have to worry about non-C locales. The
7468 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
1c846c1f 7469 * arranged in order (although not consecutively) and that only
9d116dd7
JH
7470 * [A-Za-z] are accepted by isALPHA in the C locale.
7471 */
7472 if (*d != 'z' && *d != 'Z') {
7473 do { ++*d; } while (!isALPHA(*d));
7474 return;
7475 }
7476 *(d--) -= 'z' - 'a';
7477#else
79072805
LW
7478 ++*d;
7479 if (isALPHA(*d))
7480 return;
7481 *(d--) -= 'z' - 'a' + 1;
9d116dd7 7482#endif
79072805
LW
7483 }
7484 }
7485 /* oh,oh, the number grew */
7486 SvGROW(sv, SvCUR(sv) + 2);
b162af07 7487 SvCUR_set(sv, SvCUR(sv) + 1);
3f7c398e 7488 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
79072805
LW
7489 *d = d[-1];
7490 if (isDIGIT(d[1]))
7491 *d = '1';
7492 else
7493 *d = d[1];
7494}
7495
954c1994
GS
7496/*
7497=for apidoc sv_dec
7498
645c22ef 7499Auto-decrement of the value in the SV, doing string to numeric conversion
6f1401dc 7500if necessary. Handles 'get' magic and operator overloading.
954c1994
GS
7501
7502=cut
7503*/
7504
79072805 7505void
ac1e9476 7506Perl_sv_dec(pTHX_ register SV *const sv)
79072805 7507{
97aff369 7508 dVAR;
6f1401dc
DM
7509 if (!sv)
7510 return;
7511 SvGETMAGIC(sv);
7512 sv_dec_nomg(sv);
7513}
7514
7515/*
7516=for apidoc sv_dec_nomg
7517
7518Auto-decrement of the value in the SV, doing string to numeric conversion
7519if necessary. Handles operator overloading. Skips handling 'get' magic.
7520
7521=cut
7522*/
7523
7524void
7525Perl_sv_dec_nomg(pTHX_ register SV *const sv)
7526{
7527 dVAR;
463ee0b2
LW
7528 int flags;
7529
79072805
LW
7530 if (!sv)
7531 return;
ed6116ce 7532 if (SvTHINKFIRST(sv)) {
765f542d
NC
7533 if (SvIsCOW(sv))
7534 sv_force_normal_flags(sv, 0);
0f15f207 7535 if (SvREADONLY(sv)) {
923e4eb5 7536 if (IN_PERL_RUNTIME)
f1f66076 7537 Perl_croak(aTHX_ "%s", PL_no_modify);
0f15f207 7538 }
a0d0e21e 7539 if (SvROK(sv)) {
b5be31e9 7540 IV i;
9e7bc3e8
JD
7541 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7542 return;
56431972 7543 i = PTR2IV(SvRV(sv));
b5be31e9
SM
7544 sv_unref(sv);
7545 sv_setiv(sv, i);
a0d0e21e 7546 }
ed6116ce 7547 }
28e5dec8
JH
7548 /* Unlike sv_inc we don't have to worry about string-never-numbers
7549 and keeping them magic. But we mustn't warn on punting */
8990e307 7550 flags = SvFLAGS(sv);
28e5dec8
JH
7551 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7552 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 7553#ifdef PERL_PRESERVE_IVUV
28e5dec8 7554 oops_its_int:
59d8ce62 7555#endif
25da4f38
IZ
7556 if (SvIsUV(sv)) {
7557 if (SvUVX(sv) == 0) {
7558 (void)SvIOK_only(sv);
45977657 7559 SvIV_set(sv, -1);
25da4f38
IZ
7560 }
7561 else {
7562 (void)SvIOK_only_UV(sv);
f4eee32f 7563 SvUV_set(sv, SvUVX(sv) - 1);
1c846c1f 7564 }
25da4f38 7565 } else {
b88df990
NC
7566 if (SvIVX(sv) == IV_MIN) {
7567 sv_setnv(sv, (NV)IV_MIN);
7568 goto oops_its_num;
7569 }
25da4f38
IZ
7570 else {
7571 (void)SvIOK_only(sv);
45977657 7572 SvIV_set(sv, SvIVX(sv) - 1);
1c846c1f 7573 }
55497cff 7574 }
7575 return;
7576 }
28e5dec8 7577 if (flags & SVp_NOK) {
b88df990
NC
7578 oops_its_num:
7579 {
7580 const NV was = SvNVX(sv);
b68c599a 7581 if (NV_OVERFLOWS_INTEGERS_AT &&
a2a5de95
NC
7582 was <= -NV_OVERFLOWS_INTEGERS_AT) {
7583 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7584 "Lost precision when decrementing %" NVff " by 1",
7585 was);
b88df990
NC
7586 }
7587 (void)SvNOK_only(sv);
b68c599a 7588 SvNV_set(sv, was - 1.0);
b88df990
NC
7589 return;
7590 }
28e5dec8 7591 }
8990e307 7592 if (!(flags & SVp_POK)) {
ef088171
NC
7593 if ((flags & SVTYPEMASK) < SVt_PVIV)
7594 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
7595 SvIV_set(sv, -1);
7596 (void)SvIOK_only(sv);
79072805
LW
7597 return;
7598 }
28e5dec8
JH
7599#ifdef PERL_PRESERVE_IVUV
7600 {
504618e9 7601 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
7602 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7603 /* Need to try really hard to see if it's an integer.
7604 9.22337203685478e+18 is an integer.
7605 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7606 so $a="9.22337203685478e+18"; $a+0; $a--
7607 needs to be the same as $a="9.22337203685478e+18"; $a--
7608 or we go insane. */
d460ef45 7609
28e5dec8
JH
7610 (void) sv_2iv(sv);
7611 if (SvIOK(sv))
7612 goto oops_its_int;
7613
7614 /* sv_2iv *should* have made this an NV */
7615 if (flags & SVp_NOK) {
7616 (void)SvNOK_only(sv);
9d6ce603 7617 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
7618 return;
7619 }
7620 /* I don't think we can get here. Maybe I should assert this
7621 And if we do get here I suspect that sv_setnv will croak. NWC
7622 Fall through. */
7623#if defined(USE_LONG_DOUBLE)
7624 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 7625 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 7626#else
1779d84d 7627 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 7628 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
7629#endif
7630 }
7631 }
7632#endif /* PERL_PRESERVE_IVUV */
3f7c398e 7633 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
79072805
LW
7634}
7635
81041c50
YO
7636/* this define is used to eliminate a chunk of duplicated but shared logic
7637 * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
7638 * used anywhere but here - yves
7639 */
7640#define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
7641 STMT_START { \
7642 EXTEND_MORTAL(1); \
7643 PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
7644 } STMT_END
7645
954c1994
GS
7646/*
7647=for apidoc sv_mortalcopy
7648
645c22ef 7649Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
d4236ebc
DM
7650The new SV is marked as mortal. It will be destroyed "soon", either by an
7651explicit call to FREETMPS, or by an implicit call at places such as
7652statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
954c1994
GS
7653
7654=cut
7655*/
7656
79072805
LW
7657/* Make a string that will exist for the duration of the expression
7658 * evaluation. Actually, it may have to last longer than that, but
7659 * hopefully we won't free it until it has been assigned to a
7660 * permanent location. */
7661
7662SV *
ac1e9476 7663Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
79072805 7664{
97aff369 7665 dVAR;
463ee0b2 7666 register SV *sv;
b881518d 7667
4561caa4 7668 new_SV(sv);
79072805 7669 sv_setsv(sv,oldstr);
81041c50 7670 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307
LW
7671 SvTEMP_on(sv);
7672 return sv;
7673}
7674
954c1994
GS
7675/*
7676=for apidoc sv_newmortal
7677
645c22ef 7678Creates a new null SV which is mortal. The reference count of the SV is
d4236ebc
DM
7679set to 1. It will be destroyed "soon", either by an explicit call to
7680FREETMPS, or by an implicit call at places such as statement boundaries.
7681See also C<sv_mortalcopy> and C<sv_2mortal>.
954c1994
GS
7682
7683=cut
7684*/
7685
8990e307 7686SV *
864dbfa3 7687Perl_sv_newmortal(pTHX)
8990e307 7688{
97aff369 7689 dVAR;
8990e307
LW
7690 register SV *sv;
7691
4561caa4 7692 new_SV(sv);
8990e307 7693 SvFLAGS(sv) = SVs_TEMP;
81041c50 7694 PUSH_EXTEND_MORTAL__SV_C(sv);
79072805
LW
7695 return sv;
7696}
7697
59cd0e26
NC
7698
7699/*
7700=for apidoc newSVpvn_flags
7701
7702Creates a new SV and copies a string into it. The reference count for the
7703SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7704string. You are responsible for ensuring that the source string is at least
7705C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7706Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
7707If C<SVs_TEMP> is set, then C<sv2mortal()> is called on the result before
c790c9b6
KW
7708returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
7709C<SVf_UTF8> flag will be set on the new SV.
59cd0e26
NC
7710C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
7711
7712 #define newSVpvn_utf8(s, len, u) \
7713 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
7714
7715=cut
7716*/
7717
7718SV *
23f13727 7719Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
59cd0e26
NC
7720{
7721 dVAR;
7722 register SV *sv;
7723
7724 /* All the flags we don't support must be zero.
7725 And we're new code so I'm going to assert this from the start. */
7726 assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
7727 new_SV(sv);
7728 sv_setpvn(sv,s,len);
d21488d7
YO
7729
7730 /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
7731 * and do what it does outselves here.
7732 * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
7733 * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
7734 * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
7735 * eleminate quite a few steps than it looks - Yves (explaining patch by gfx)
7736 */
7737
6dfeccca
GF
7738 SvFLAGS(sv) |= flags;
7739
7740 if(flags & SVs_TEMP){
81041c50 7741 PUSH_EXTEND_MORTAL__SV_C(sv);
6dfeccca
GF
7742 }
7743
7744 return sv;
59cd0e26
NC
7745}
7746
954c1994
GS
7747/*
7748=for apidoc sv_2mortal
7749
d4236ebc
DM
7750Marks an existing SV as mortal. The SV will be destroyed "soon", either
7751by an explicit call to FREETMPS, or by an implicit call at places such as
37d2ac18
NC
7752statement boundaries. SvTEMP() is turned on which means that the SV's
7753string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7754and C<sv_mortalcopy>.
954c1994
GS
7755
7756=cut
7757*/
7758
79072805 7759SV *
23f13727 7760Perl_sv_2mortal(pTHX_ register SV *const sv)
79072805 7761{
27da23d5 7762 dVAR;
79072805 7763 if (!sv)
7a5b473e 7764 return NULL;
d689ffdd 7765 if (SvREADONLY(sv) && SvIMMORTAL(sv))
11162842 7766 return sv;
81041c50 7767 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307 7768 SvTEMP_on(sv);
79072805
LW
7769 return sv;
7770}
7771
954c1994
GS
7772/*
7773=for apidoc newSVpv
7774
7775Creates a new SV and copies a string into it. The reference count for the
7776SV is set to 1. If C<len> is zero, Perl will compute the length using
7777strlen(). For efficiency, consider using C<newSVpvn> instead.
7778
7779=cut
7780*/
7781
79072805 7782SV *
23f13727 7783Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
79072805 7784{
97aff369 7785 dVAR;
463ee0b2 7786 register SV *sv;
79072805 7787
4561caa4 7788 new_SV(sv);
ddfa59c7 7789 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
79072805
LW
7790 return sv;
7791}
7792
954c1994
GS
7793/*
7794=for apidoc newSVpvn
7795
7796Creates a new SV and copies a string into it. The reference count for the
1c846c1f 7797SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
954c1994 7798string. You are responsible for ensuring that the source string is at least
9e09f5f2 7799C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
954c1994
GS
7800
7801=cut
7802*/
7803
9da1e3b5 7804SV *
23f13727 7805Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
9da1e3b5 7806{
97aff369 7807 dVAR;
9da1e3b5
MUN
7808 register SV *sv;
7809
7810 new_SV(sv);
9da1e3b5
MUN
7811 sv_setpvn(sv,s,len);
7812 return sv;
7813}
7814
740cce10 7815/*
926f8064 7816=for apidoc newSVhek
bd08039b
NC
7817
7818Creates a new SV from the hash key structure. It will generate scalars that
5aaec2b4
NC
7819point to the shared string table where possible. Returns a new (undefined)
7820SV if the hek is NULL.
bd08039b
NC
7821
7822=cut
7823*/
7824
7825SV *
23f13727 7826Perl_newSVhek(pTHX_ const HEK *const hek)
bd08039b 7827{
97aff369 7828 dVAR;
5aaec2b4
NC
7829 if (!hek) {
7830 SV *sv;
7831
7832 new_SV(sv);
7833 return sv;
7834 }
7835
bd08039b
NC
7836 if (HEK_LEN(hek) == HEf_SVKEY) {
7837 return newSVsv(*(SV**)HEK_KEY(hek));
7838 } else {
7839 const int flags = HEK_FLAGS(hek);
7840 if (flags & HVhek_WASUTF8) {
7841 /* Trouble :-)
7842 Andreas would like keys he put in as utf8 to come back as utf8
7843 */
7844 STRLEN utf8_len = HEK_LEN(hek);
b64e5050
AL
7845 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7846 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
bd08039b
NC
7847
7848 SvUTF8_on (sv);
7849 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7850 return sv;
45e34800 7851 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
bd08039b
NC
7852 /* We don't have a pointer to the hv, so we have to replicate the
7853 flag into every HEK. This hv is using custom a hasing
7854 algorithm. Hence we can't return a shared string scalar, as
7855 that would contain the (wrong) hash value, and might get passed
45e34800
NC
7856 into an hv routine with a regular hash.
7857 Similarly, a hash that isn't using shared hash keys has to have
7858 the flag in every key so that we know not to try to call
7859 share_hek_kek on it. */
bd08039b 7860
b64e5050 7861 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
bd08039b
NC
7862 if (HEK_UTF8(hek))
7863 SvUTF8_on (sv);
7864 return sv;
7865 }
7866 /* This will be overwhelminly the most common case. */
409dfe77
NC
7867 {
7868 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
7869 more efficient than sharepvn(). */
7870 SV *sv;
7871
7872 new_SV(sv);
7873 sv_upgrade(sv, SVt_PV);
7874 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7875 SvCUR_set(sv, HEK_LEN(hek));
7876 SvLEN_set(sv, 0);
7877 SvREADONLY_on(sv);
7878 SvFAKE_on(sv);
7879 SvPOK_on(sv);
7880 if (HEK_UTF8(hek))
7881 SvUTF8_on(sv);
7882 return sv;
7883 }
bd08039b
NC
7884 }
7885}
7886
1c846c1f
NIS
7887/*
7888=for apidoc newSVpvn_share
7889
3f7c398e 7890Creates a new SV with its SvPVX_const pointing to a shared string in the string
645c22ef 7891table. If the string does not already exist in the table, it is created
758fcfc1
VP
7892first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
7893value is used; otherwise the hash is computed. The string's hash can be later
7894be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
7895that as the string table is used for shared hash keys these strings will have
7896SvPVX_const == HeKEY and hash lookup will avoid string compare.
1c846c1f
NIS
7897
7898=cut
7899*/
7900
7901SV *
c3654f1a 7902Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
1c846c1f 7903{
97aff369 7904 dVAR;
1c846c1f 7905 register SV *sv;
c3654f1a 7906 bool is_utf8 = FALSE;
a51caccf
NC
7907 const char *const orig_src = src;
7908
c3654f1a 7909 if (len < 0) {
77caf834 7910 STRLEN tmplen = -len;
c3654f1a 7911 is_utf8 = TRUE;
75a54232 7912 /* See the note in hv.c:hv_fetch() --jhi */
e1ec3a88 7913 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
75a54232
JH
7914 len = tmplen;
7915 }
1c846c1f 7916 if (!hash)
5afd6d42 7917 PERL_HASH(hash, src, len);
1c846c1f 7918 new_SV(sv);
f46ee248
NC
7919 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
7920 changes here, update it there too. */
bdd68bc3 7921 sv_upgrade(sv, SVt_PV);
f880fe2f 7922 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
b162af07 7923 SvCUR_set(sv, len);
b162af07 7924 SvLEN_set(sv, 0);
1c846c1f
NIS
7925 SvREADONLY_on(sv);
7926 SvFAKE_on(sv);
7927 SvPOK_on(sv);
c3654f1a
IH
7928 if (is_utf8)
7929 SvUTF8_on(sv);
a51caccf
NC
7930 if (src != orig_src)
7931 Safefree(src);
1c846c1f
NIS
7932 return sv;
7933}
7934
645c22ef 7935
cea2e8a9 7936#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
7937
7938/* pTHX_ magic can't cope with varargs, so this is a no-context
7939 * version of the main function, (which may itself be aliased to us).
7940 * Don't access this version directly.
7941 */
7942
46fc3d4c 7943SV *
23f13727 7944Perl_newSVpvf_nocontext(const char *const pat, ...)
46fc3d4c 7945{
cea2e8a9 7946 dTHX;
46fc3d4c 7947 register SV *sv;
7948 va_list args;
7918f24d
NC
7949
7950 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
7951
46fc3d4c 7952 va_start(args, pat);
c5be433b 7953 sv = vnewSVpvf(pat, &args);
46fc3d4c 7954 va_end(args);
7955 return sv;
7956}
cea2e8a9 7957#endif
46fc3d4c 7958
954c1994
GS
7959/*
7960=for apidoc newSVpvf
7961
645c22ef 7962Creates a new SV and initializes it with the string formatted like
954c1994
GS
7963C<sprintf>.
7964
7965=cut
7966*/
7967
cea2e8a9 7968SV *
23f13727 7969Perl_newSVpvf(pTHX_ const char *const pat, ...)
cea2e8a9
GS
7970{
7971 register SV *sv;
7972 va_list args;
7918f24d
NC
7973
7974 PERL_ARGS_ASSERT_NEWSVPVF;
7975
cea2e8a9 7976 va_start(args, pat);
c5be433b 7977 sv = vnewSVpvf(pat, &args);
cea2e8a9
GS
7978 va_end(args);
7979 return sv;
7980}
46fc3d4c 7981
645c22ef
DM
7982/* backend for newSVpvf() and newSVpvf_nocontext() */
7983
79072805 7984SV *
23f13727 7985Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
c5be433b 7986{
97aff369 7987 dVAR;
c5be433b 7988 register SV *sv;
7918f24d
NC
7989
7990 PERL_ARGS_ASSERT_VNEWSVPVF;
7991
c5be433b 7992 new_SV(sv);
4608196e 7993 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
7994 return sv;
7995}
7996
954c1994
GS
7997/*
7998=for apidoc newSVnv
7999
8000Creates a new SV and copies a floating point value into it.
8001The reference count for the SV is set to 1.
8002
8003=cut
8004*/
8005
c5be433b 8006SV *
23f13727 8007Perl_newSVnv(pTHX_ const NV n)
79072805 8008{
97aff369 8009 dVAR;
463ee0b2 8010 register SV *sv;
79072805 8011
4561caa4 8012 new_SV(sv);
79072805
LW
8013 sv_setnv(sv,n);
8014 return sv;
8015}
8016
954c1994
GS
8017/*
8018=for apidoc newSViv
8019
8020Creates a new SV and copies an integer into it. The reference count for the
8021SV is set to 1.
8022
8023=cut
8024*/
8025
79072805 8026SV *
23f13727 8027Perl_newSViv(pTHX_ const IV i)
79072805 8028{
97aff369 8029 dVAR;
463ee0b2 8030 register SV *sv;
79072805 8031
4561caa4 8032 new_SV(sv);
79072805
LW
8033 sv_setiv(sv,i);
8034 return sv;
8035}
8036
954c1994 8037/*
1a3327fb
JH
8038=for apidoc newSVuv
8039
8040Creates a new SV and copies an unsigned integer into it.
8041The reference count for the SV is set to 1.
8042
8043=cut
8044*/
8045
8046SV *
23f13727 8047Perl_newSVuv(pTHX_ const UV u)
1a3327fb 8048{
97aff369 8049 dVAR;
1a3327fb
JH
8050 register SV *sv;
8051
8052 new_SV(sv);
8053 sv_setuv(sv,u);
8054 return sv;
8055}
8056
8057/*
b9f83d2f
NC
8058=for apidoc newSV_type
8059
c41f7ed2 8060Creates a new SV, of the type specified. The reference count for the new SV
b9f83d2f
NC
8061is set to 1.
8062
8063=cut
8064*/
8065
8066SV *
fe9845cc 8067Perl_newSV_type(pTHX_ const svtype type)
b9f83d2f
NC
8068{
8069 register SV *sv;
8070
8071 new_SV(sv);
8072 sv_upgrade(sv, type);
8073 return sv;
8074}
8075
8076/*
954c1994
GS
8077=for apidoc newRV_noinc
8078
8079Creates an RV wrapper for an SV. The reference count for the original
8080SV is B<not> incremented.
8081
8082=cut
8083*/
8084
2304df62 8085SV *
23f13727 8086Perl_newRV_noinc(pTHX_ SV *const tmpRef)
2304df62 8087{
97aff369 8088 dVAR;
4df7f6af 8089 register SV *sv = newSV_type(SVt_IV);
7918f24d
NC
8090
8091 PERL_ARGS_ASSERT_NEWRV_NOINC;
8092
76e3520e 8093 SvTEMP_off(tmpRef);
b162af07 8094 SvRV_set(sv, tmpRef);
2304df62 8095 SvROK_on(sv);
2304df62
AD
8096 return sv;
8097}
8098
ff276b08 8099/* newRV_inc is the official function name to use now.
645c22ef
DM
8100 * newRV_inc is in fact #defined to newRV in sv.h
8101 */
8102
5f05dabc 8103SV *
23f13727 8104Perl_newRV(pTHX_ SV *const sv)
5f05dabc 8105{
97aff369 8106 dVAR;
7918f24d
NC
8107
8108 PERL_ARGS_ASSERT_NEWRV;
8109
7f466ec7 8110 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
5f05dabc 8111}
5f05dabc 8112
954c1994
GS
8113/*
8114=for apidoc newSVsv
8115
8116Creates a new SV which is an exact duplicate of the original SV.
645c22ef 8117(Uses C<sv_setsv>).
954c1994
GS
8118
8119=cut
8120*/
8121
79072805 8122SV *
23f13727 8123Perl_newSVsv(pTHX_ register SV *const old)
79072805 8124{
97aff369 8125 dVAR;
463ee0b2 8126 register SV *sv;
79072805
LW
8127
8128 if (!old)
7a5b473e 8129 return NULL;
8990e307 8130 if (SvTYPE(old) == SVTYPEMASK) {
9b387841 8131 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
a0714e2c 8132 return NULL;
79072805 8133 }
4561caa4 8134 new_SV(sv);
e90aabeb
NC
8135 /* SV_GMAGIC is the default for sv_setv()
8136 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8137 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
8138 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
463ee0b2 8139 return sv;
79072805
LW
8140}
8141
645c22ef
DM
8142/*
8143=for apidoc sv_reset
8144
8145Underlying implementation for the C<reset> Perl function.
8146Note that the perl-level function is vaguely deprecated.
8147
8148=cut
8149*/
8150
79072805 8151void
23f13727 8152Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
79072805 8153{
27da23d5 8154 dVAR;
4802d5d7 8155 char todo[PERL_UCHAR_MAX+1];
79072805 8156
7918f24d
NC
8157 PERL_ARGS_ASSERT_SV_RESET;
8158
49d8d3a1
MB
8159 if (!stash)
8160 return;
8161
79072805 8162 if (!*s) { /* reset ?? searches */
daba3364 8163 MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8d2f4536 8164 if (mg) {
c2b1997a
NC
8165 const U32 count = mg->mg_len / sizeof(PMOP**);
8166 PMOP **pmp = (PMOP**) mg->mg_ptr;
8167 PMOP *const *const end = pmp + count;
8168
8169 while (pmp < end) {
c737faaf 8170#ifdef USE_ITHREADS
c2b1997a 8171 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
c737faaf 8172#else
c2b1997a 8173 (*pmp)->op_pmflags &= ~PMf_USED;
c737faaf 8174#endif
c2b1997a 8175 ++pmp;
8d2f4536 8176 }
79072805
LW
8177 }
8178 return;
8179 }
8180
8181 /* reset variables */
8182
8183 if (!HvARRAY(stash))
8184 return;
463ee0b2
LW
8185
8186 Zero(todo, 256, char);
79072805 8187 while (*s) {
b464bac0
AL
8188 I32 max;
8189 I32 i = (unsigned char)*s;
79072805
LW
8190 if (s[1] == '-') {
8191 s += 2;
8192 }
4802d5d7 8193 max = (unsigned char)*s++;
79072805 8194 for ( ; i <= max; i++) {
463ee0b2
LW
8195 todo[i] = 1;
8196 }
a0d0e21e 8197 for (i = 0; i <= (I32) HvMAX(stash); i++) {
b464bac0 8198 HE *entry;
79072805 8199 for (entry = HvARRAY(stash)[i];
9e35f4b3
GS
8200 entry;
8201 entry = HeNEXT(entry))
8202 {
b464bac0
AL
8203 register GV *gv;
8204 register SV *sv;
8205
1edc1566 8206 if (!todo[(U8)*HeKEY(entry)])
463ee0b2 8207 continue;
159b6efe 8208 gv = MUTABLE_GV(HeVAL(entry));
79072805 8209 sv = GvSV(gv);
e203899d
NC
8210 if (sv) {
8211 if (SvTHINKFIRST(sv)) {
8212 if (!SvREADONLY(sv) && SvROK(sv))
8213 sv_unref(sv);
8214 /* XXX Is this continue a bug? Why should THINKFIRST
8215 exempt us from resetting arrays and hashes? */
8216 continue;
8217 }
8218 SvOK_off(sv);
8219 if (SvTYPE(sv) >= SVt_PV) {
8220 SvCUR_set(sv, 0);
bd61b366 8221 if (SvPVX_const(sv) != NULL)
e203899d
NC
8222 *SvPVX(sv) = '\0';
8223 SvTAINT(sv);
8224 }
79072805
LW
8225 }
8226 if (GvAV(gv)) {
8227 av_clear(GvAV(gv));
8228 }
bfcb3514 8229 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
b0269e46
AB
8230#if defined(VMS)
8231 Perl_die(aTHX_ "Can't reset %%ENV on this system");
8232#else /* ! VMS */
463ee0b2 8233 hv_clear(GvHV(gv));
b0269e46
AB
8234# if defined(USE_ENVIRON_ARRAY)
8235 if (gv == PL_envgv)
8236 my_clearenv();
8237# endif /* USE_ENVIRON_ARRAY */
8238#endif /* VMS */
79072805
LW
8239 }
8240 }
8241 }
8242 }
8243}
8244
645c22ef
DM
8245/*
8246=for apidoc sv_2io
8247
8248Using various gambits, try to get an IO from an SV: the IO slot if its a
8249GV; or the recursive result if we're an RV; or the IO slot of the symbol
8250named after the PV if we're a string.
8251
8252=cut
8253*/
8254
46fc3d4c 8255IO*
23f13727 8256Perl_sv_2io(pTHX_ SV *const sv)
46fc3d4c 8257{
8258 IO* io;
8259 GV* gv;
8260
7918f24d
NC
8261 PERL_ARGS_ASSERT_SV_2IO;
8262
46fc3d4c 8263 switch (SvTYPE(sv)) {
8264 case SVt_PVIO:
a45c7426 8265 io = MUTABLE_IO(sv);
46fc3d4c 8266 break;
8267 case SVt_PVGV:
6e592b3a 8268 if (isGV_with_GP(sv)) {
159b6efe 8269 gv = MUTABLE_GV(sv);
6e592b3a
BM
8270 io = GvIO(gv);
8271 if (!io)
8272 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8273 break;
8274 }
8275 /* FALL THROUGH */
46fc3d4c 8276 default:
8277 if (!SvOK(sv))
cea2e8a9 8278 Perl_croak(aTHX_ PL_no_usym, "filehandle");
46fc3d4c 8279 if (SvROK(sv))
8280 return sv_2io(SvRV(sv));
f776e3cd 8281 gv = gv_fetchsv(sv, 0, SVt_PVIO);
46fc3d4c 8282 if (gv)
8283 io = GvIO(gv);
8284 else
8285 io = 0;
8286 if (!io)
be2597df 8287 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
46fc3d4c 8288 break;
8289 }
8290 return io;
8291}
8292
645c22ef
DM
8293/*
8294=for apidoc sv_2cv
8295
8296Using various gambits, try to get a CV from an SV; in addition, try if
8297possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8e324704 8298The flags in C<lref> are passed to gv_fetchsv.
645c22ef
DM
8299
8300=cut
8301*/
8302
79072805 8303CV *
23f13727 8304Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
79072805 8305{
27da23d5 8306 dVAR;
a0714e2c 8307 GV *gv = NULL;
601f1833 8308 CV *cv = NULL;
79072805 8309
7918f24d
NC
8310 PERL_ARGS_ASSERT_SV_2CV;
8311
85dec29a
NC
8312 if (!sv) {
8313 *st = NULL;
8314 *gvp = NULL;
8315 return NULL;
8316 }
79072805 8317 switch (SvTYPE(sv)) {
79072805
LW
8318 case SVt_PVCV:
8319 *st = CvSTASH(sv);
a0714e2c 8320 *gvp = NULL;
ea726b52 8321 return MUTABLE_CV(sv);
79072805
LW
8322 case SVt_PVHV:
8323 case SVt_PVAV:
ef58ba18 8324 *st = NULL;
a0714e2c 8325 *gvp = NULL;
601f1833 8326 return NULL;
8990e307 8327 case SVt_PVGV:
6e592b3a 8328 if (isGV_with_GP(sv)) {
159b6efe 8329 gv = MUTABLE_GV(sv);
6e592b3a
BM
8330 *gvp = gv;
8331 *st = GvESTASH(gv);
8332 goto fix_gv;
8333 }
8334 /* FALL THROUGH */
8990e307 8335
79072805 8336 default:
a0d0e21e 8337 if (SvROK(sv)) {
823a54a3 8338 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
c4f3bd1e 8339 SvGETMAGIC(sv);
f5284f61
IZ
8340 tryAMAGICunDEREF(to_cv);
8341
62f274bf
GS
8342 sv = SvRV(sv);
8343 if (SvTYPE(sv) == SVt_PVCV) {
ea726b52 8344 cv = MUTABLE_CV(sv);
a0714e2c 8345 *gvp = NULL;
62f274bf
GS
8346 *st = CvSTASH(cv);
8347 return cv;
8348 }
6e592b3a 8349 else if(isGV_with_GP(sv))
159b6efe 8350 gv = MUTABLE_GV(sv);
62f274bf 8351 else
cea2e8a9 8352 Perl_croak(aTHX_ "Not a subroutine reference");
a0d0e21e 8353 }
6e592b3a 8354 else if (isGV_with_GP(sv)) {
9d0f7ed7 8355 SvGETMAGIC(sv);
159b6efe 8356 gv = MUTABLE_GV(sv);
9d0f7ed7 8357 }
79072805 8358 else
9d0f7ed7 8359 gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
79072805 8360 *gvp = gv;
ef58ba18
NC
8361 if (!gv) {
8362 *st = NULL;
601f1833 8363 return NULL;
ef58ba18 8364 }
e26df76a 8365 /* Some flags to gv_fetchsv mean don't really create the GV */
6e592b3a 8366 if (!isGV_with_GP(gv)) {
e26df76a
NC
8367 *st = NULL;
8368 return NULL;
8369 }
79072805 8370 *st = GvESTASH(gv);
8990e307 8371 fix_gv:
8ebc5c01 8372 if (lref && !GvCVu(gv)) {
4633a7c4 8373 SV *tmpsv;
748a9306 8374 ENTER;
561b68a9 8375 tmpsv = newSV(0);
bd61b366 8376 gv_efullname3(tmpsv, gv, NULL);
f6ec51f7
GS
8377 /* XXX this is probably not what they think they're getting.
8378 * It has the same effect as "sub name;", i.e. just a forward
8379 * declaration! */
774d564b 8380 newSUB(start_subparse(FALSE, 0),
4633a7c4 8381 newSVOP(OP_CONST, 0, tmpsv),
5f66b61c 8382 NULL, NULL);
748a9306 8383 LEAVE;
8ebc5c01 8384 if (!GvCVu(gv))
35c1215d 8385 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
4052d21c 8386 SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8990e307 8387 }
8ebc5c01 8388 return GvCVu(gv);
79072805
LW
8389 }
8390}
8391
c461cf8f
JH
8392/*
8393=for apidoc sv_true
8394
8395Returns true if the SV has a true value by Perl's rules.
645c22ef
DM
8396Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8397instead use an in-line version.
c461cf8f
JH
8398
8399=cut
8400*/
8401
79072805 8402I32
23f13727 8403Perl_sv_true(pTHX_ register SV *const sv)
79072805 8404{
8990e307
LW
8405 if (!sv)
8406 return 0;
79072805 8407 if (SvPOK(sv)) {
823a54a3
AL
8408 register const XPV* const tXpv = (XPV*)SvANY(sv);
8409 if (tXpv &&
c2f1de04 8410 (tXpv->xpv_cur > 1 ||
339049b0 8411 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
79072805
LW
8412 return 1;
8413 else
8414 return 0;
8415 }
8416 else {
8417 if (SvIOK(sv))
463ee0b2 8418 return SvIVX(sv) != 0;
79072805
LW
8419 else {
8420 if (SvNOK(sv))
463ee0b2 8421 return SvNVX(sv) != 0.0;
79072805 8422 else
463ee0b2 8423 return sv_2bool(sv);
79072805
LW
8424 }
8425 }
8426}
79072805 8427
645c22ef 8428/*
c461cf8f
JH
8429=for apidoc sv_pvn_force
8430
8431Get a sensible string out of the SV somehow.
645c22ef
DM
8432A private implementation of the C<SvPV_force> macro for compilers which
8433can't cope with complex macro expressions. Always use the macro instead.
c461cf8f 8434
8d6d96c1
HS
8435=for apidoc sv_pvn_force_flags
8436
8437Get a sensible string out of the SV somehow.
8438If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8439appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8440implemented in terms of this function.
645c22ef
DM
8441You normally want to use the various wrapper macros instead: see
8442C<SvPV_force> and C<SvPV_force_nomg>
8d6d96c1
HS
8443
8444=cut
8445*/
8446
8447char *
12964ddd 8448Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 8449{
97aff369 8450 dVAR;
7918f24d
NC
8451
8452 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8453
6fc92669 8454 if (SvTHINKFIRST(sv) && !SvROK(sv))
765f542d 8455 sv_force_normal_flags(sv, 0);
1c846c1f 8456
a0d0e21e 8457 if (SvPOK(sv)) {
13c5b33c
NC
8458 if (lp)
8459 *lp = SvCUR(sv);
a0d0e21e
LW
8460 }
8461 else {
a3b680e6 8462 char *s;
13c5b33c
NC
8463 STRLEN len;
8464
4d84ee25 8465 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
b64e5050 8466 const char * const ref = sv_reftype(sv,0);
4d84ee25
NC
8467 if (PL_op)
8468 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
94bbb3f4 8469 ref, OP_DESC(PL_op));
4d84ee25 8470 else
b64e5050 8471 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
4d84ee25 8472 }
1f257c95
NC
8473 if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8474 || isGV_with_GP(sv))
cea2e8a9 8475 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
94bbb3f4 8476 OP_DESC(PL_op));
b64e5050 8477 s = sv_2pv_flags(sv, &len, flags);
13c5b33c
NC
8478 if (lp)
8479 *lp = len;
8480
3f7c398e 8481 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
a0d0e21e
LW
8482 if (SvROK(sv))
8483 sv_unref(sv);
862a34c6 8484 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
a0d0e21e 8485 SvGROW(sv, len + 1);
706aa1c9 8486 Move(s,SvPVX(sv),len,char);
a0d0e21e 8487 SvCUR_set(sv, len);
97a130b8 8488 SvPVX(sv)[len] = '\0';
a0d0e21e
LW
8489 }
8490 if (!SvPOK(sv)) {
8491 SvPOK_on(sv); /* validate pointer */
8492 SvTAINT(sv);
1d7c1841 8493 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 8494 PTR2UV(sv),SvPVX_const(sv)));
a0d0e21e
LW
8495 }
8496 }
4d84ee25 8497 return SvPVX_mutable(sv);
a0d0e21e
LW
8498}
8499
645c22ef 8500/*
645c22ef
DM
8501=for apidoc sv_pvbyten_force
8502
0feed65a 8503The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
645c22ef
DM
8504
8505=cut
8506*/
8507
7340a771 8508char *
12964ddd 8509Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 8510{
7918f24d
NC
8511 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8512
46ec2f14 8513 sv_pvn_force(sv,lp);
ffebcc3e 8514 sv_utf8_downgrade(sv,0);
46ec2f14
TS
8515 *lp = SvCUR(sv);
8516 return SvPVX(sv);
7340a771
GS
8517}
8518
645c22ef 8519/*
c461cf8f
JH
8520=for apidoc sv_pvutf8n_force
8521
0feed65a 8522The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
c461cf8f
JH
8523
8524=cut
8525*/
8526
7340a771 8527char *
12964ddd 8528Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 8529{
7918f24d
NC
8530 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
8531
46ec2f14 8532 sv_pvn_force(sv,lp);
560a288e 8533 sv_utf8_upgrade(sv);
46ec2f14
TS
8534 *lp = SvCUR(sv);
8535 return SvPVX(sv);
7340a771
GS
8536}
8537
c461cf8f
JH
8538/*
8539=for apidoc sv_reftype
8540
8541Returns a string describing what the SV is a reference to.
8542
8543=cut
8544*/
8545
2b388283 8546const char *
12964ddd 8547Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
a0d0e21e 8548{
7918f24d
NC
8549 PERL_ARGS_ASSERT_SV_REFTYPE;
8550
07409e01
NC
8551 /* The fact that I don't need to downcast to char * everywhere, only in ?:
8552 inside return suggests a const propagation bug in g++. */
c86bf373 8553 if (ob && SvOBJECT(sv)) {
1b6737cc 8554 char * const name = HvNAME_get(SvSTASH(sv));
07409e01 8555 return name ? name : (char *) "__ANON__";
c86bf373 8556 }
a0d0e21e
LW
8557 else {
8558 switch (SvTYPE(sv)) {
8559 case SVt_NULL:
8560 case SVt_IV:
8561 case SVt_NV:
a0d0e21e
LW
8562 case SVt_PV:
8563 case SVt_PVIV:
8564 case SVt_PVNV:
8565 case SVt_PVMG:
1cb0ed9b 8566 if (SvVOK(sv))
439cb1c4 8567 return "VSTRING";
a0d0e21e
LW
8568 if (SvROK(sv))
8569 return "REF";
8570 else
8571 return "SCALAR";
1cb0ed9b 8572
07409e01 8573 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
be65207d
DM
8574 /* tied lvalues should appear to be
8575 * scalars for backwards compatitbility */
8576 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
07409e01 8577 ? "SCALAR" : "LVALUE");
a0d0e21e
LW
8578 case SVt_PVAV: return "ARRAY";
8579 case SVt_PVHV: return "HASH";
8580 case SVt_PVCV: return "CODE";
6e592b3a
BM
8581 case SVt_PVGV: return (char *) (isGV_with_GP(sv)
8582 ? "GLOB" : "SCALAR");
1d2dff63 8583 case SVt_PVFM: return "FORMAT";
27f9d8f3 8584 case SVt_PVIO: return "IO";
cecf5685 8585 case SVt_BIND: return "BIND";
b7c9370f 8586 case SVt_REGEXP: return "REGEXP";
a0d0e21e
LW
8587 default: return "UNKNOWN";
8588 }
8589 }
8590}
8591
954c1994
GS
8592/*
8593=for apidoc sv_isobject
8594
8595Returns a boolean indicating whether the SV is an RV pointing to a blessed
8596object. If the SV is not an RV, or if the object is not blessed, then this
8597will return false.
8598
8599=cut
8600*/
8601
463ee0b2 8602int
864dbfa3 8603Perl_sv_isobject(pTHX_ SV *sv)
85e6fe83 8604{
68dc0745 8605 if (!sv)
8606 return 0;
5b295bef 8607 SvGETMAGIC(sv);
85e6fe83
LW
8608 if (!SvROK(sv))
8609 return 0;
daba3364 8610 sv = SvRV(sv);
85e6fe83
LW
8611 if (!SvOBJECT(sv))
8612 return 0;
8613 return 1;
8614}
8615
954c1994
GS
8616/*
8617=for apidoc sv_isa
8618
8619Returns a boolean indicating whether the SV is blessed into the specified
8620class. This does not check for subtypes; use C<sv_derived_from> to verify
8621an inheritance relationship.
8622
8623=cut
8624*/
8625
85e6fe83 8626int
12964ddd 8627Perl_sv_isa(pTHX_ SV *sv, const char *const name)
463ee0b2 8628{
bfcb3514 8629 const char *hvname;
7918f24d
NC
8630
8631 PERL_ARGS_ASSERT_SV_ISA;
8632
68dc0745 8633 if (!sv)
8634 return 0;
5b295bef 8635 SvGETMAGIC(sv);
ed6116ce 8636 if (!SvROK(sv))
463ee0b2 8637 return 0;
daba3364 8638 sv = SvRV(sv);
ed6116ce 8639 if (!SvOBJECT(sv))
463ee0b2 8640 return 0;
bfcb3514
NC
8641 hvname = HvNAME_get(SvSTASH(sv));
8642 if (!hvname)
e27ad1f2 8643 return 0;
463ee0b2 8644
bfcb3514 8645 return strEQ(hvname, name);
463ee0b2
LW
8646}
8647
954c1994
GS
8648/*
8649=for apidoc newSVrv
8650
8651Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
8652it will be upgraded to one. If C<classname> is non-null then the new SV will
8653be blessed in the specified package. The new SV is returned and its
8654reference count is 1.
8655
8656=cut
8657*/
8658
463ee0b2 8659SV*
12964ddd 8660Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
463ee0b2 8661{
97aff369 8662 dVAR;
463ee0b2
LW
8663 SV *sv;
8664
7918f24d
NC
8665 PERL_ARGS_ASSERT_NEWSVRV;
8666
4561caa4 8667 new_SV(sv);
51cf62d8 8668
765f542d 8669 SV_CHECK_THINKFIRST_COW_DROP(rv);
52944de8 8670 (void)SvAMAGIC_off(rv);
51cf62d8 8671
0199fce9 8672 if (SvTYPE(rv) >= SVt_PVMG) {
a3b680e6 8673 const U32 refcnt = SvREFCNT(rv);
0199fce9
JD
8674 SvREFCNT(rv) = 0;
8675 sv_clear(rv);
8676 SvFLAGS(rv) = 0;
8677 SvREFCNT(rv) = refcnt;
0199fce9 8678
4df7f6af 8679 sv_upgrade(rv, SVt_IV);
dc5494d2
NC
8680 } else if (SvROK(rv)) {
8681 SvREFCNT_dec(SvRV(rv));
43230e26
NC
8682 } else {
8683 prepare_SV_for_RV(rv);
0199fce9 8684 }
51cf62d8 8685
0c34ef67 8686 SvOK_off(rv);
b162af07 8687 SvRV_set(rv, sv);
ed6116ce 8688 SvROK_on(rv);
463ee0b2 8689
a0d0e21e 8690 if (classname) {
da51bb9b 8691 HV* const stash = gv_stashpv(classname, GV_ADD);
a0d0e21e
LW
8692 (void)sv_bless(rv, stash);
8693 }
8694 return sv;
8695}
8696
954c1994
GS
8697/*
8698=for apidoc sv_setref_pv
8699
8700Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
8701argument will be upgraded to an RV. That RV will be modified to point to
8702the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8703into the SV. The C<classname> argument indicates the package for the
bd61b366 8704blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8705will have a reference count of 1, and the RV will be returned.
954c1994
GS
8706
8707Do not use with other Perl types such as HV, AV, SV, CV, because those
8708objects will become corrupted by the pointer copy process.
8709
8710Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8711
8712=cut
8713*/
8714
a0d0e21e 8715SV*
12964ddd 8716Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
a0d0e21e 8717{
97aff369 8718 dVAR;
7918f24d
NC
8719
8720 PERL_ARGS_ASSERT_SV_SETREF_PV;
8721
189b2af5 8722 if (!pv) {
3280af22 8723 sv_setsv(rv, &PL_sv_undef);
189b2af5
GS
8724 SvSETMAGIC(rv);
8725 }
a0d0e21e 8726 else
56431972 8727 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
a0d0e21e
LW
8728 return rv;
8729}
8730
954c1994
GS
8731/*
8732=for apidoc sv_setref_iv
8733
8734Copies an integer into a new SV, optionally blessing the SV. The C<rv>
8735argument will be upgraded to an RV. That RV will be modified to point to
8736the new SV. The C<classname> argument indicates the package for the
bd61b366 8737blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8738will have a reference count of 1, and the RV will be returned.
954c1994
GS
8739
8740=cut
8741*/
8742
a0d0e21e 8743SV*
12964ddd 8744Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
a0d0e21e 8745{
7918f24d
NC
8746 PERL_ARGS_ASSERT_SV_SETREF_IV;
8747
a0d0e21e
LW
8748 sv_setiv(newSVrv(rv,classname), iv);
8749 return rv;
8750}
8751
954c1994 8752/*
e1c57cef
JH
8753=for apidoc sv_setref_uv
8754
8755Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
8756argument will be upgraded to an RV. That RV will be modified to point to
8757the new SV. The C<classname> argument indicates the package for the
bd61b366 8758blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8759will have a reference count of 1, and the RV will be returned.
e1c57cef
JH
8760
8761=cut
8762*/
8763
8764SV*
12964ddd 8765Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
e1c57cef 8766{
7918f24d
NC
8767 PERL_ARGS_ASSERT_SV_SETREF_UV;
8768
e1c57cef
JH
8769 sv_setuv(newSVrv(rv,classname), uv);
8770 return rv;
8771}
8772
8773/*
954c1994
GS
8774=for apidoc sv_setref_nv
8775
8776Copies a double into a new SV, optionally blessing the SV. The C<rv>
8777argument will be upgraded to an RV. That RV will be modified to point to
8778the new SV. The C<classname> argument indicates the package for the
bd61b366 8779blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8780will have a reference count of 1, and the RV will be returned.
954c1994
GS
8781
8782=cut
8783*/
8784
a0d0e21e 8785SV*
12964ddd 8786Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
a0d0e21e 8787{
7918f24d
NC
8788 PERL_ARGS_ASSERT_SV_SETREF_NV;
8789
a0d0e21e
LW
8790 sv_setnv(newSVrv(rv,classname), nv);
8791 return rv;
8792}
463ee0b2 8793
954c1994
GS
8794/*
8795=for apidoc sv_setref_pvn
8796
8797Copies a string into a new SV, optionally blessing the SV. The length of the
8798string must be specified with C<n>. The C<rv> argument will be upgraded to
8799an RV. That RV will be modified to point to the new SV. The C<classname>
8800argument indicates the package for the blessing. Set C<classname> to
bd61b366 8801C<NULL> to avoid the blessing. The new SV will have a reference count
d34c2299 8802of 1, and the RV will be returned.
954c1994
GS
8803
8804Note that C<sv_setref_pv> copies the pointer while this copies the string.
8805
8806=cut
8807*/
8808
a0d0e21e 8809SV*
12964ddd
SS
8810Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
8811 const char *const pv, const STRLEN n)
a0d0e21e 8812{
7918f24d
NC
8813 PERL_ARGS_ASSERT_SV_SETREF_PVN;
8814
a0d0e21e 8815 sv_setpvn(newSVrv(rv,classname), pv, n);
463ee0b2
LW
8816 return rv;
8817}
8818
954c1994
GS
8819/*
8820=for apidoc sv_bless
8821
8822Blesses an SV into a specified package. The SV must be an RV. The package
8823must be designated by its stash (see C<gv_stashpv()>). The reference count
8824of the SV is unaffected.
8825
8826=cut
8827*/
8828
a0d0e21e 8829SV*
12964ddd 8830Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
a0d0e21e 8831{
97aff369 8832 dVAR;
76e3520e 8833 SV *tmpRef;
7918f24d
NC
8834
8835 PERL_ARGS_ASSERT_SV_BLESS;
8836
a0d0e21e 8837 if (!SvROK(sv))
cea2e8a9 8838 Perl_croak(aTHX_ "Can't bless non-reference value");
76e3520e
GS
8839 tmpRef = SvRV(sv);
8840 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
e0744413
NC
8841 if (SvIsCOW(tmpRef))
8842 sv_force_normal_flags(tmpRef, 0);
76e3520e 8843 if (SvREADONLY(tmpRef))
f1f66076 8844 Perl_croak(aTHX_ "%s", PL_no_modify);
76e3520e
GS
8845 if (SvOBJECT(tmpRef)) {
8846 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 8847 --PL_sv_objcount;
76e3520e 8848 SvREFCNT_dec(SvSTASH(tmpRef));
2e3febc6 8849 }
a0d0e21e 8850 }
76e3520e
GS
8851 SvOBJECT_on(tmpRef);
8852 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 8853 ++PL_sv_objcount;
862a34c6 8854 SvUPGRADE(tmpRef, SVt_PVMG);
85fbaab2 8855 SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
a0d0e21e 8856
2e3febc6
CS
8857 if (Gv_AMG(stash))
8858 SvAMAGIC_on(sv);
8859 else
52944de8 8860 (void)SvAMAGIC_off(sv);
a0d0e21e 8861
1edbfb88
AB
8862 if(SvSMAGICAL(tmpRef))
8863 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8864 mg_set(tmpRef);
8865
8866
ecdeb87c 8867
a0d0e21e
LW
8868 return sv;
8869}
8870
645c22ef 8871/* Downgrades a PVGV to a PVMG.
645c22ef
DM
8872 */
8873
76e3520e 8874STATIC void
89e38212 8875S_sv_unglob(pTHX_ SV *const sv)
a0d0e21e 8876{
97aff369 8877 dVAR;
850fabdf 8878 void *xpvmg;
dd69841b 8879 HV *stash;
b37c2d43 8880 SV * const temp = sv_newmortal();
850fabdf 8881
7918f24d
NC
8882 PERL_ARGS_ASSERT_SV_UNGLOB;
8883
a0d0e21e
LW
8884 assert(SvTYPE(sv) == SVt_PVGV);
8885 SvFAKE_off(sv);
159b6efe 8886 gv_efullname3(temp, MUTABLE_GV(sv), "*");
180488f8 8887
f7877b28 8888 if (GvGP(sv)) {
159b6efe
NC
8889 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
8890 && HvNAME_get(stash))
dd69841b 8891 mro_method_changed_in(stash);
159b6efe 8892 gp_free(MUTABLE_GV(sv));
f7877b28 8893 }
e826b3c7 8894 if (GvSTASH(sv)) {
daba3364 8895 sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
5c284bb0 8896 GvSTASH(sv) = NULL;
e826b3c7 8897 }
a5f75d66 8898 GvMULTI_off(sv);
acda4c6a
NC
8899 if (GvNAME_HEK(sv)) {
8900 unshare_hek(GvNAME_HEK(sv));
8901 }
2e5b91de 8902 isGV_with_GP_off(sv);
850fabdf
GS
8903
8904 /* need to keep SvANY(sv) in the right arena */
8905 xpvmg = new_XPVMG();
8906 StructCopy(SvANY(sv), xpvmg, XPVMG);
8907 del_XPVGV(SvANY(sv));
8908 SvANY(sv) = xpvmg;
8909
a0d0e21e
LW
8910 SvFLAGS(sv) &= ~SVTYPEMASK;
8911 SvFLAGS(sv) |= SVt_PVMG;
180488f8
NC
8912
8913 /* Intentionally not calling any local SET magic, as this isn't so much a
8914 set operation as merely an internal storage change. */
8915 sv_setsv_flags(sv, temp, 0);
a0d0e21e
LW
8916}
8917
954c1994 8918/*
840a7b70 8919=for apidoc sv_unref_flags
954c1994
GS
8920
8921Unsets the RV status of the SV, and decrements the reference count of
8922whatever was being referenced by the RV. This can almost be thought of
840a7b70
IZ
8923as a reversal of C<newSVrv>. The C<cflags> argument can contain
8924C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8925(otherwise the decrementing is conditional on the reference count being
8926different from one or the reference being a readonly SV).
7889fe52 8927See C<SvROK_off>.
954c1994
GS
8928
8929=cut
8930*/
8931
ed6116ce 8932void
89e38212 8933Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
ed6116ce 8934{
b64e5050 8935 SV* const target = SvRV(ref);
810b8aa5 8936
7918f24d
NC
8937 PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
8938
e15faf7d
NC
8939 if (SvWEAKREF(ref)) {
8940 sv_del_backref(target, ref);
8941 SvWEAKREF_off(ref);
8942 SvRV_set(ref, NULL);
810b8aa5
GS
8943 return;
8944 }
e15faf7d
NC
8945 SvRV_set(ref, NULL);
8946 SvROK_off(ref);
8947 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
04ca4930 8948 assigned to as BEGIN {$a = \"Foo"} will fail. */
e15faf7d
NC
8949 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8950 SvREFCNT_dec(target);
840a7b70 8951 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
e15faf7d 8952 sv_2mortal(target); /* Schedule for freeing later */
ed6116ce 8953}
8990e307 8954
840a7b70 8955/*
645c22ef
DM
8956=for apidoc sv_untaint
8957
8958Untaint an SV. Use C<SvTAINTED_off> instead.
8959=cut
8960*/
8961
bbce6d69 8962void
89e38212 8963Perl_sv_untaint(pTHX_ SV *const sv)
bbce6d69 8964{
7918f24d
NC
8965 PERL_ARGS_ASSERT_SV_UNTAINT;
8966
13f57bf8 8967 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
b64e5050 8968 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
36477c24 8969 if (mg)
565764a8 8970 mg->mg_len &= ~1;
36477c24 8971 }
bbce6d69 8972}
8973
645c22ef
DM
8974/*
8975=for apidoc sv_tainted
8976
8977Test an SV for taintedness. Use C<SvTAINTED> instead.
8978=cut
8979*/
8980
bbce6d69 8981bool
89e38212 8982Perl_sv_tainted(pTHX_ SV *const sv)
bbce6d69 8983{
7918f24d
NC
8984 PERL_ARGS_ASSERT_SV_TAINTED;
8985
13f57bf8 8986 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
823a54a3 8987 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
2ddb8a4f 8988 if (mg && (mg->mg_len & 1) )
36477c24 8989 return TRUE;
8990 }
8991 return FALSE;
bbce6d69 8992}
8993
09540bc3
JH
8994/*
8995=for apidoc sv_setpviv
8996
8997Copies an integer into the given SV, also updating its string value.
8998Does not handle 'set' magic. See C<sv_setpviv_mg>.
8999
9000=cut
9001*/
9002
9003void
89e38212 9004Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
09540bc3
JH
9005{
9006 char buf[TYPE_CHARS(UV)];
9007 char *ebuf;
b64e5050 9008 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
09540bc3 9009
7918f24d
NC
9010 PERL_ARGS_ASSERT_SV_SETPVIV;
9011
09540bc3
JH
9012 sv_setpvn(sv, ptr, ebuf - ptr);
9013}
9014
9015/*
9016=for apidoc sv_setpviv_mg
9017
9018Like C<sv_setpviv>, but also handles 'set' magic.
9019
9020=cut
9021*/
9022
9023void
89e38212 9024Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
09540bc3 9025{
7918f24d
NC
9026 PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9027
df7eb254 9028 sv_setpviv(sv, iv);
09540bc3
JH
9029 SvSETMAGIC(sv);
9030}
9031
cea2e8a9 9032#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
9033
9034/* pTHX_ magic can't cope with varargs, so this is a no-context
9035 * version of the main function, (which may itself be aliased to us).
9036 * Don't access this version directly.
9037 */
9038
cea2e8a9 9039void
89e38212 9040Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9041{
9042 dTHX;
9043 va_list args;
7918f24d
NC
9044
9045 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9046
cea2e8a9 9047 va_start(args, pat);
c5be433b 9048 sv_vsetpvf(sv, pat, &args);
cea2e8a9
GS
9049 va_end(args);
9050}
9051
645c22ef
DM
9052/* pTHX_ magic can't cope with varargs, so this is a no-context
9053 * version of the main function, (which may itself be aliased to us).
9054 * Don't access this version directly.
9055 */
cea2e8a9
GS
9056
9057void
89e38212 9058Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9059{
9060 dTHX;
9061 va_list args;
7918f24d
NC
9062
9063 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9064
cea2e8a9 9065 va_start(args, pat);
c5be433b 9066 sv_vsetpvf_mg(sv, pat, &args);
cea2e8a9 9067 va_end(args);
cea2e8a9
GS
9068}
9069#endif
9070
954c1994
GS
9071/*
9072=for apidoc sv_setpvf
9073
bffc3d17
SH
9074Works like C<sv_catpvf> but copies the text into the SV instead of
9075appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
954c1994
GS
9076
9077=cut
9078*/
9079
46fc3d4c 9080void
89e38212 9081Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 9082{
9083 va_list args;
7918f24d
NC
9084
9085 PERL_ARGS_ASSERT_SV_SETPVF;
9086
46fc3d4c 9087 va_start(args, pat);
c5be433b 9088 sv_vsetpvf(sv, pat, &args);
46fc3d4c 9089 va_end(args);
9090}
9091
bffc3d17
SH
9092/*
9093=for apidoc sv_vsetpvf
9094
9095Works like C<sv_vcatpvf> but copies the text into the SV instead of
9096appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
9097
9098Usually used via its frontend C<sv_setpvf>.
9099
9100=cut
9101*/
645c22ef 9102
c5be433b 9103void
89e38212 9104Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9105{
7918f24d
NC
9106 PERL_ARGS_ASSERT_SV_VSETPVF;
9107
4608196e 9108 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b 9109}
ef50df4b 9110
954c1994
GS
9111/*
9112=for apidoc sv_setpvf_mg
9113
9114Like C<sv_setpvf>, but also handles 'set' magic.
9115
9116=cut
9117*/
9118
ef50df4b 9119void
89e38212 9120Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
9121{
9122 va_list args;
7918f24d
NC
9123
9124 PERL_ARGS_ASSERT_SV_SETPVF_MG;
9125
ef50df4b 9126 va_start(args, pat);
c5be433b 9127 sv_vsetpvf_mg(sv, pat, &args);
ef50df4b 9128 va_end(args);
c5be433b
GS
9129}
9130
bffc3d17
SH
9131/*
9132=for apidoc sv_vsetpvf_mg
9133
9134Like C<sv_vsetpvf>, but also handles 'set' magic.
9135
9136Usually used via its frontend C<sv_setpvf_mg>.
9137
9138=cut
9139*/
645c22ef 9140
c5be433b 9141void
89e38212 9142Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9143{
7918f24d
NC
9144 PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9145
4608196e 9146 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9147 SvSETMAGIC(sv);
9148}
9149
cea2e8a9 9150#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
9151
9152/* pTHX_ magic can't cope with varargs, so this is a no-context
9153 * version of the main function, (which may itself be aliased to us).
9154 * Don't access this version directly.
9155 */
9156
cea2e8a9 9157void
89e38212 9158Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9159{
9160 dTHX;
9161 va_list args;
7918f24d
NC
9162
9163 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9164
cea2e8a9 9165 va_start(args, pat);
c5be433b 9166 sv_vcatpvf(sv, pat, &args);
cea2e8a9
GS
9167 va_end(args);
9168}
9169
645c22ef
DM
9170/* pTHX_ magic can't cope with varargs, so this is a no-context
9171 * version of the main function, (which may itself be aliased to us).
9172 * Don't access this version directly.
9173 */
9174
cea2e8a9 9175void
89e38212 9176Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9177{
9178 dTHX;
9179 va_list args;
7918f24d
NC
9180
9181 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9182
cea2e8a9 9183 va_start(args, pat);
c5be433b 9184 sv_vcatpvf_mg(sv, pat, &args);
cea2e8a9 9185 va_end(args);
cea2e8a9
GS
9186}
9187#endif
9188
954c1994
GS
9189/*
9190=for apidoc sv_catpvf
9191
d5ce4a7c
GA
9192Processes its arguments like C<sprintf> and appends the formatted
9193output to an SV. If the appended data contains "wide" characters
9194(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9195and characters >255 formatted with %c), the original SV might get
bffc3d17 9196upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
cdd94ca7
NC
9197C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9198valid UTF-8; if the original SV was bytes, the pattern should be too.
954c1994 9199
d5ce4a7c 9200=cut */
954c1994 9201
46fc3d4c 9202void
66ceb532 9203Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 9204{
9205 va_list args;
7918f24d
NC
9206
9207 PERL_ARGS_ASSERT_SV_CATPVF;
9208
46fc3d4c 9209 va_start(args, pat);
c5be433b 9210 sv_vcatpvf(sv, pat, &args);
46fc3d4c 9211 va_end(args);
9212}
9213
bffc3d17
SH
9214/*
9215=for apidoc sv_vcatpvf
9216
9217Processes its arguments like C<vsprintf> and appends the formatted output
9218to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
9219
9220Usually used via its frontend C<sv_catpvf>.
9221
9222=cut
9223*/
645c22ef 9224
ef50df4b 9225void
66ceb532 9226Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9227{
7918f24d
NC
9228 PERL_ARGS_ASSERT_SV_VCATPVF;
9229
4608196e 9230 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
9231}
9232
954c1994
GS
9233/*
9234=for apidoc sv_catpvf_mg
9235
9236Like C<sv_catpvf>, but also handles 'set' magic.
9237
9238=cut
9239*/
9240
c5be433b 9241void
66ceb532 9242Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
9243{
9244 va_list args;
7918f24d
NC
9245
9246 PERL_ARGS_ASSERT_SV_CATPVF_MG;
9247
ef50df4b 9248 va_start(args, pat);
c5be433b 9249 sv_vcatpvf_mg(sv, pat, &args);
ef50df4b 9250 va_end(args);
c5be433b
GS
9251}
9252
bffc3d17
SH
9253/*
9254=for apidoc sv_vcatpvf_mg
9255
9256Like C<sv_vcatpvf>, but also handles 'set' magic.
9257
9258Usually used via its frontend C<sv_catpvf_mg>.
9259
9260=cut
9261*/
645c22ef 9262
c5be433b 9263void
66ceb532 9264Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9265{
7918f24d
NC
9266 PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9267
4608196e 9268 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9269 SvSETMAGIC(sv);
9270}
9271
954c1994
GS
9272/*
9273=for apidoc sv_vsetpvfn
9274
bffc3d17 9275Works like C<sv_vcatpvfn> but copies the text into the SV instead of
954c1994
GS
9276appending it.
9277
bffc3d17 9278Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
645c22ef 9279
954c1994
GS
9280=cut
9281*/
9282
46fc3d4c 9283void
66ceb532
SS
9284Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9285 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9286{
7918f24d
NC
9287 PERL_ARGS_ASSERT_SV_VSETPVFN;
9288
76f68e9b 9289 sv_setpvs(sv, "");
7d5ea4e7 9290 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
46fc3d4c 9291}
9292
7baa4690
HS
9293
9294/*
9295 * Warn of missing argument to sprintf, and then return a defined value
9296 * to avoid inappropriate "use of uninit" warnings [perl #71000].
9297 */
9298#define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9299STATIC SV*
81ae3cde 9300S_vcatpvfn_missing_argument(pTHX) {
7baa4690
HS
9301 if (ckWARN(WARN_MISSING)) {
9302 Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9303 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9304 }
9305 return &PL_sv_no;
9306}
9307
9308
2d00ba3b 9309STATIC I32
66ceb532 9310S_expect_number(pTHX_ char **const pattern)
211dfcf1 9311{
97aff369 9312 dVAR;
211dfcf1 9313 I32 var = 0;
7918f24d
NC
9314
9315 PERL_ARGS_ASSERT_EXPECT_NUMBER;
9316
211dfcf1
HS
9317 switch (**pattern) {
9318 case '1': case '2': case '3':
9319 case '4': case '5': case '6':
9320 case '7': case '8': case '9':
2fba7546
GA
9321 var = *(*pattern)++ - '0';
9322 while (isDIGIT(**pattern)) {
5f66b61c 9323 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
2fba7546 9324 if (tmp < var)
94bbb3f4 9325 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
2fba7546
GA
9326 var = tmp;
9327 }
211dfcf1
HS
9328 }
9329 return var;
9330}
211dfcf1 9331
c445ea15 9332STATIC char *
66ceb532 9333S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
4151a5fe 9334{
a3b680e6 9335 const int neg = nv < 0;
4151a5fe 9336 UV uv;
4151a5fe 9337
7918f24d
NC
9338 PERL_ARGS_ASSERT_F0CONVERT;
9339
4151a5fe
IZ
9340 if (neg)
9341 nv = -nv;
9342 if (nv < UV_MAX) {
b464bac0 9343 char *p = endbuf;
4151a5fe 9344 nv += 0.5;
028f8eaa 9345 uv = (UV)nv;
4151a5fe
IZ
9346 if (uv & 1 && uv == nv)
9347 uv--; /* Round to even */
9348 do {
a3b680e6 9349 const unsigned dig = uv % 10;
4151a5fe
IZ
9350 *--p = '0' + dig;
9351 } while (uv /= 10);
9352 if (neg)
9353 *--p = '-';
9354 *len = endbuf - p;
9355 return p;
9356 }
bd61b366 9357 return NULL;
4151a5fe
IZ
9358}
9359
9360
954c1994
GS
9361/*
9362=for apidoc sv_vcatpvfn
9363
9364Processes its arguments like C<vsprintf> and appends the formatted output
9365to an SV. Uses an array of SVs if the C style variable argument list is
9366missing (NULL). When running with taint checks enabled, indicates via
9367C<maybe_tainted> if results are untrustworthy (often due to the use of
9368locales).
9369
bffc3d17 9370Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
645c22ef 9371
954c1994
GS
9372=cut
9373*/
9374
8896765a
RB
9375
9376#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
9377 vecstr = (U8*)SvPV_const(vecsv,veclen);\
9378 vec_utf8 = DO_UTF8(vecsv);
9379
1ef29b0e
RGS
9380/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9381
46fc3d4c 9382void
66ceb532
SS
9383Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9384 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9385{
97aff369 9386 dVAR;
46fc3d4c 9387 char *p;
9388 char *q;
a3b680e6 9389 const char *patend;
fc36a67e 9390 STRLEN origlen;
46fc3d4c 9391 I32 svix = 0;
27da23d5 9392 static const char nullstr[] = "(null)";
a0714e2c 9393 SV *argsv = NULL;
b464bac0
AL
9394 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
9395 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
a0714e2c 9396 SV *nsv = NULL;
4151a5fe
IZ
9397 /* Times 4: a decimal digit takes more than 3 binary digits.
9398 * NV_DIG: mantissa takes than many decimal digits.
9399 * Plus 32: Playing safe. */
9400 char ebuf[IV_DIG * 4 + NV_DIG + 32];
9401 /* large enough for "%#.#f" --chip */
9402 /* what about long double NVs? --jhi */
db79b45b 9403
7918f24d 9404 PERL_ARGS_ASSERT_SV_VCATPVFN;
53c1dcc0
AL
9405 PERL_UNUSED_ARG(maybe_tainted);
9406
46fc3d4c 9407 /* no matter what, this is a string now */
fc36a67e 9408 (void)SvPV_force(sv, origlen);
46fc3d4c 9409
8896765a 9410 /* special-case "", "%s", and "%-p" (SVf - see below) */
46fc3d4c 9411 if (patlen == 0)
9412 return;
0dbb1585 9413 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
2d03de9c
AL
9414 if (args) {
9415 const char * const s = va_arg(*args, char*);
9416 sv_catpv(sv, s ? s : nullstr);
9417 }
9418 else if (svix < svmax) {
9419 sv_catsv(sv, *svargs);
2d03de9c 9420 }
5b98cd54
VP
9421 else
9422 S_vcatpvfn_missing_argument(aTHX);
2d03de9c 9423 return;
0dbb1585 9424 }
8896765a
RB
9425 if (args && patlen == 3 && pat[0] == '%' &&
9426 pat[1] == '-' && pat[2] == 'p') {
daba3364 9427 argsv = MUTABLE_SV(va_arg(*args, void*));
8896765a 9428 sv_catsv(sv, argsv);
8896765a 9429 return;
46fc3d4c 9430 }
9431
1d917b39 9432#ifndef USE_LONG_DOUBLE
4151a5fe 9433 /* special-case "%.<number>[gf]" */
7af36d83 9434 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
4151a5fe
IZ
9435 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9436 unsigned digits = 0;
9437 const char *pp;
9438
9439 pp = pat + 2;
9440 while (*pp >= '0' && *pp <= '9')
9441 digits = 10 * digits + (*pp++ - '0');
95ea86d5
NC
9442 if (pp - pat == (int)patlen - 1 && svix < svmax) {
9443 const NV nv = SvNV(*svargs);
4151a5fe 9444 if (*pp == 'g') {
2873255c
NC
9445 /* Add check for digits != 0 because it seems that some
9446 gconverts are buggy in this case, and we don't yet have
9447 a Configure test for this. */
9448 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9449 /* 0, point, slack */
2e59c212 9450 Gconvert(nv, (int)digits, 0, ebuf);
4151a5fe
IZ
9451 sv_catpv(sv, ebuf);
9452 if (*ebuf) /* May return an empty string for digits==0 */
9453 return;
9454 }
9455 } else if (!digits) {
9456 STRLEN l;
9457
9458 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9459 sv_catpvn(sv, p, l);
9460 return;
9461 }
9462 }
9463 }
9464 }
1d917b39 9465#endif /* !USE_LONG_DOUBLE */
4151a5fe 9466
2cf2cfc6 9467 if (!args && svix < svmax && DO_UTF8(*svargs))
205f51d8 9468 has_utf8 = TRUE;
2cf2cfc6 9469
46fc3d4c 9470 patend = (char*)pat + patlen;
9471 for (p = (char*)pat; p < patend; p = q) {
9472 bool alt = FALSE;
9473 bool left = FALSE;
b22c7a20 9474 bool vectorize = FALSE;
211dfcf1 9475 bool vectorarg = FALSE;
2cf2cfc6 9476 bool vec_utf8 = FALSE;
46fc3d4c 9477 char fill = ' ';
9478 char plus = 0;
9479 char intsize = 0;
9480 STRLEN width = 0;
fc36a67e 9481 STRLEN zeros = 0;
46fc3d4c 9482 bool has_precis = FALSE;
9483 STRLEN precis = 0;
c445ea15 9484 const I32 osvix = svix;
2cf2cfc6 9485 bool is_utf8 = FALSE; /* is this item utf8? */
20f6aaab
AS
9486#ifdef HAS_LDBL_SPRINTF_BUG
9487 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8 9488 with sfio - Allen <allens@cpan.org> */
20f6aaab
AS
9489 bool fix_ldbl_sprintf_bug = FALSE;
9490#endif
205f51d8 9491
46fc3d4c 9492 char esignbuf[4];
89ebb4a3 9493 U8 utf8buf[UTF8_MAXBYTES+1];
46fc3d4c 9494 STRLEN esignlen = 0;
9495
bd61b366 9496 const char *eptr = NULL;
1d1ac7bc 9497 const char *fmtstart;
fc36a67e 9498 STRLEN elen = 0;
a0714e2c 9499 SV *vecsv = NULL;
4608196e 9500 const U8 *vecstr = NULL;
b22c7a20 9501 STRLEN veclen = 0;
934abaf1 9502 char c = 0;
46fc3d4c 9503 int i;
9c5ffd7c 9504 unsigned base = 0;
8c8eb53c
RB
9505 IV iv = 0;
9506 UV uv = 0;
9e5b023a
JH
9507 /* we need a long double target in case HAS_LONG_DOUBLE but
9508 not USE_LONG_DOUBLE
9509 */
35fff930 9510#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9e5b023a
JH
9511 long double nv;
9512#else
65202027 9513 NV nv;
9e5b023a 9514#endif
46fc3d4c 9515 STRLEN have;
9516 STRLEN need;
9517 STRLEN gap;
7af36d83 9518 const char *dotstr = ".";
b22c7a20 9519 STRLEN dotstrlen = 1;
211dfcf1 9520 I32 efix = 0; /* explicit format parameter index */
eb3fce90 9521 I32 ewix = 0; /* explicit width index */
211dfcf1
HS
9522 I32 epix = 0; /* explicit precision index */
9523 I32 evix = 0; /* explicit vector index */
eb3fce90 9524 bool asterisk = FALSE;
46fc3d4c 9525
211dfcf1 9526 /* echo everything up to the next format specification */
46fc3d4c 9527 for (q = p; q < patend && *q != '%'; ++q) ;
9528 if (q > p) {
db79b45b
JH
9529 if (has_utf8 && !pat_utf8)
9530 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9531 else
9532 sv_catpvn(sv, p, q - p);
46fc3d4c 9533 p = q;
9534 }
9535 if (q++ >= patend)
9536 break;
9537
1d1ac7bc
MHM
9538 fmtstart = q;
9539
211dfcf1
HS
9540/*
9541 We allow format specification elements in this order:
9542 \d+\$ explicit format parameter index
9543 [-+ 0#]+ flags
a472f209 9544 v|\*(\d+\$)?v vector with optional (optionally specified) arg
f3583277 9545 0 flag (as above): repeated to allow "v02"
211dfcf1
HS
9546 \d+|\*(\d+\$)? width using optional (optionally specified) arg
9547 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9548 [hlqLV] size
8896765a
RB
9549 [%bcdefginopsuxDFOUX] format (mandatory)
9550*/
9551
9552 if (args) {
9553/*
9554 As of perl5.9.3, printf format checking is on by default.
9555 Internally, perl uses %p formats to provide an escape to
9556 some extended formatting. This block deals with those
9557 extensions: if it does not match, (char*)q is reset and
9558 the normal format processing code is used.
9559
9560 Currently defined extensions are:
9561 %p include pointer address (standard)
9562 %-p (SVf) include an SV (previously %_)
9563 %-<num>p include an SV with precision <num>
8896765a
RB
9564 %<num>p reserved for future extensions
9565
9566 Robin Barker 2005-07-14
f46d31f2
RB
9567
9568 %1p (VDf) removed. RMB 2007-10-19
211dfcf1 9569*/
8896765a
RB
9570 char* r = q;
9571 bool sv = FALSE;
9572 STRLEN n = 0;
9573 if (*q == '-')
9574 sv = *q++;
c445ea15 9575 n = expect_number(&q);
8896765a
RB
9576 if (*q++ == 'p') {
9577 if (sv) { /* SVf */
9578 if (n) {
9579 precis = n;
9580 has_precis = TRUE;
9581 }
daba3364 9582 argsv = MUTABLE_SV(va_arg(*args, void*));
4ea561bc 9583 eptr = SvPV_const(argsv, elen);
8896765a
RB
9584 if (DO_UTF8(argsv))
9585 is_utf8 = TRUE;
9586 goto string;
9587 }
8896765a 9588 else if (n) {
9b387841
NC
9589 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
9590 "internal %%<num>p might conflict with future printf extensions");
8896765a
RB
9591 }
9592 }
9593 q = r;
9594 }
9595
c445ea15 9596 if ( (width = expect_number(&q)) ) {
211dfcf1
HS
9597 if (*q == '$') {
9598 ++q;
9599 efix = width;
9600 } else {
9601 goto gotwidth;
9602 }
9603 }
9604
fc36a67e 9605 /* FLAGS */
9606
46fc3d4c 9607 while (*q) {
9608 switch (*q) {
9609 case ' ':
9610 case '+':
9911cee9
TS
9611 if (plus == '+' && *q == ' ') /* '+' over ' ' */
9612 q++;
9613 else
9614 plus = *q++;
46fc3d4c 9615 continue;
9616
9617 case '-':
9618 left = TRUE;
9619 q++;
9620 continue;
9621
9622 case '0':
9623 fill = *q++;
9624 continue;
9625
9626 case '#':
9627 alt = TRUE;
9628 q++;
9629 continue;
9630
fc36a67e 9631 default:
9632 break;
9633 }
9634 break;
9635 }
46fc3d4c 9636
211dfcf1 9637 tryasterisk:
eb3fce90 9638 if (*q == '*') {
211dfcf1 9639 q++;
c445ea15 9640 if ( (ewix = expect_number(&q)) )
211dfcf1
HS
9641 if (*q++ != '$')
9642 goto unknown;
eb3fce90 9643 asterisk = TRUE;
211dfcf1
HS
9644 }
9645 if (*q == 'v') {
eb3fce90 9646 q++;
211dfcf1
HS
9647 if (vectorize)
9648 goto unknown;
9cbac4c7 9649 if ((vectorarg = asterisk)) {
211dfcf1
HS
9650 evix = ewix;
9651 ewix = 0;
9652 asterisk = FALSE;
9653 }
9654 vectorize = TRUE;
9655 goto tryasterisk;
eb3fce90
JH
9656 }
9657
211dfcf1 9658 if (!asterisk)
858a90f9 9659 {
7a5fa8a2 9660 if( *q == '0' )
f3583277 9661 fill = *q++;
c445ea15 9662 width = expect_number(&q);
858a90f9 9663 }
211dfcf1
HS
9664
9665 if (vectorize) {
9666 if (vectorarg) {
9667 if (args)
9668 vecsv = va_arg(*args, SV*);
7ad96abb
NC
9669 else if (evix) {
9670 vecsv = (evix > 0 && evix <= svmax)
81ae3cde 9671 ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
7ad96abb 9672 } else {
7baa4690 9673 vecsv = svix < svmax
81ae3cde 9674 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
7ad96abb 9675 }
245d4a47 9676 dotstr = SvPV_const(vecsv, dotstrlen);
640283f5
NC
9677 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
9678 bad with tied or overloaded values that return UTF8. */
211dfcf1 9679 if (DO_UTF8(vecsv))
2cf2cfc6 9680 is_utf8 = TRUE;
640283f5
NC
9681 else if (has_utf8) {
9682 vecsv = sv_mortalcopy(vecsv);
9683 sv_utf8_upgrade(vecsv);
9684 dotstr = SvPV_const(vecsv, dotstrlen);
9685 is_utf8 = TRUE;
9686 }
211dfcf1
HS
9687 }
9688 if (args) {
8896765a 9689 VECTORIZE_ARGS
eb3fce90 9690 }
7ad96abb 9691 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
211dfcf1 9692 vecsv = svargs[efix ? efix-1 : svix++];
245d4a47 9693 vecstr = (U8*)SvPV_const(vecsv,veclen);
2cf2cfc6 9694 vec_utf8 = DO_UTF8(vecsv);
96b8f7ce
JP
9695
9696 /* if this is a version object, we need to convert
9697 * back into v-string notation and then let the
9698 * vectorize happen normally
d7aa5382 9699 */
96b8f7ce
JP
9700 if (sv_derived_from(vecsv, "version")) {
9701 char *version = savesvpv(vecsv);
85fbaab2 9702 if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
34ba6322
SP
9703 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9704 "vector argument not supported with alpha versions");
9705 goto unknown;
9706 }
96b8f7ce 9707 vecsv = sv_newmortal();
65b06e02 9708 scan_vstring(version, version + veclen, vecsv);
96b8f7ce
JP
9709 vecstr = (U8*)SvPV_const(vecsv, veclen);
9710 vec_utf8 = DO_UTF8(vecsv);
9711 Safefree(version);
d7aa5382 9712 }
211dfcf1
HS
9713 }
9714 else {
9715 vecstr = (U8*)"";
9716 veclen = 0;
9717 }
eb3fce90 9718 }
fc36a67e 9719
eb3fce90 9720 if (asterisk) {
fc36a67e 9721 if (args)
9722 i = va_arg(*args, int);
9723 else
eb3fce90
JH
9724 i = (ewix ? ewix <= svmax : svix < svmax) ?
9725 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
fc36a67e 9726 left |= (i < 0);
9727 width = (i < 0) ? -i : i;
fc36a67e 9728 }
211dfcf1 9729 gotwidth:
fc36a67e 9730
9731 /* PRECISION */
46fc3d4c 9732
fc36a67e 9733 if (*q == '.') {
9734 q++;
9735 if (*q == '*') {
211dfcf1 9736 q++;
c445ea15 9737 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
7b8dd722
HS
9738 goto unknown;
9739 /* XXX: todo, support specified precision parameter */
9740 if (epix)
211dfcf1 9741 goto unknown;
46fc3d4c 9742 if (args)
9743 i = va_arg(*args, int);
9744 else
eb3fce90
JH
9745 i = (ewix ? ewix <= svmax : svix < svmax)
9746 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9911cee9
TS
9747 precis = i;
9748 has_precis = !(i < 0);
fc36a67e 9749 }
9750 else {
9751 precis = 0;
9752 while (isDIGIT(*q))
9753 precis = precis * 10 + (*q++ - '0');
9911cee9 9754 has_precis = TRUE;
fc36a67e 9755 }
fc36a67e 9756 }
46fc3d4c 9757
fc36a67e 9758 /* SIZE */
46fc3d4c 9759
fc36a67e 9760 switch (*q) {
c623ac67
GS
9761#ifdef WIN32
9762 case 'I': /* Ix, I32x, and I64x */
9763# ifdef WIN64
9764 if (q[1] == '6' && q[2] == '4') {
9765 q += 3;
9766 intsize = 'q';
9767 break;
9768 }
9769# endif
9770 if (q[1] == '3' && q[2] == '2') {
9771 q += 3;
9772 break;
9773 }
9774# ifdef WIN64
9775 intsize = 'q';
9776# endif
9777 q++;
9778 break;
9779#endif
9e5b023a 9780#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
6f9bb7fd 9781 case 'L': /* Ld */
5f66b61c 9782 /*FALLTHROUGH*/
e5c81feb 9783#ifdef HAS_QUAD
6f9bb7fd 9784 case 'q': /* qd */
9e5b023a 9785#endif
6f9bb7fd
GS
9786 intsize = 'q';
9787 q++;
9788 break;
9789#endif
fc36a67e 9790 case 'l':
9e5b023a 9791#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
205f51d8 9792 if (*(q + 1) == 'l') { /* lld, llf */
fc36a67e 9793 intsize = 'q';
9794 q += 2;
46fc3d4c 9795 break;
cf2093f6 9796 }
fc36a67e 9797#endif
5f66b61c 9798 /*FALLTHROUGH*/
fc36a67e 9799 case 'h':
5f66b61c 9800 /*FALLTHROUGH*/
fc36a67e 9801 case 'V':
9802 intsize = *q++;
46fc3d4c 9803 break;
9804 }
9805
fc36a67e 9806 /* CONVERSION */
9807
211dfcf1
HS
9808 if (*q == '%') {
9809 eptr = q++;
9810 elen = 1;
26372e71
GA
9811 if (vectorize) {
9812 c = '%';
9813 goto unknown;
9814 }
211dfcf1
HS
9815 goto string;
9816 }
9817
26372e71 9818 if (!vectorize && !args) {
86c51f8b
NC
9819 if (efix) {
9820 const I32 i = efix-1;
7baa4690 9821 argsv = (i >= 0 && i < svmax)
81ae3cde 9822 ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
86c51f8b
NC
9823 } else {
9824 argsv = (svix >= 0 && svix < svmax)
81ae3cde 9825 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
86c51f8b 9826 }
863811b2 9827 }
211dfcf1 9828
46fc3d4c 9829 switch (c = *q++) {
9830
9831 /* STRINGS */
9832
46fc3d4c 9833 case 'c':
26372e71
GA
9834 if (vectorize)
9835 goto unknown;
4ea561bc 9836 uv = (args) ? va_arg(*args, int) : SvIV(argsv);
1bd104fb
JH
9837 if ((uv > 255 ||
9838 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
0064a8a9 9839 && !IN_BYTES) {
dfe13c55 9840 eptr = (char*)utf8buf;
9041c2e3 9841 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
2cf2cfc6 9842 is_utf8 = TRUE;
7e2040f0
GS
9843 }
9844 else {
9845 c = (char)uv;
9846 eptr = &c;
9847 elen = 1;
a0ed51b3 9848 }
46fc3d4c 9849 goto string;
9850
46fc3d4c 9851 case 's':
26372e71
GA
9852 if (vectorize)
9853 goto unknown;
9854 if (args) {
fc36a67e 9855 eptr = va_arg(*args, char*);
c635e13b 9856 if (eptr)
9857 elen = strlen(eptr);
9858 else {
27da23d5 9859 eptr = (char *)nullstr;
c635e13b 9860 elen = sizeof nullstr - 1;
9861 }
46fc3d4c 9862 }
211dfcf1 9863 else {
4ea561bc 9864 eptr = SvPV_const(argsv, elen);
7e2040f0 9865 if (DO_UTF8(argsv)) {
c494f1f4 9866 STRLEN old_precis = precis;
a0ed51b3 9867 if (has_precis && precis < elen) {
c494f1f4 9868 STRLEN ulen = sv_len_utf8(argsv);
9ef5ed94 9869 I32 p = precis > ulen ? ulen : precis;
7e2040f0 9870 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
a0ed51b3
LW
9871 precis = p;
9872 }
9873 if (width) { /* fudge width (can't fudge elen) */
59b61096
AV
9874 if (has_precis && precis < elen)
9875 width += precis - old_precis;
9876 else
9877 width += elen - sv_len_utf8(argsv);
a0ed51b3 9878 }
2cf2cfc6 9879 is_utf8 = TRUE;
a0ed51b3
LW
9880 }
9881 }
fc36a67e 9882
46fc3d4c 9883 string:
9ef5ed94 9884 if (has_precis && precis < elen)
46fc3d4c 9885 elen = precis;
9886 break;
9887
9888 /* INTEGERS */
9889
fc36a67e 9890 case 'p':
be75b157 9891 if (alt || vectorize)
c2e66d9e 9892 goto unknown;
211dfcf1 9893 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
fc36a67e 9894 base = 16;
9895 goto integer;
9896
46fc3d4c 9897 case 'D':
29fe7a80 9898#ifdef IV_IS_QUAD
22f3ae8c 9899 intsize = 'q';
29fe7a80 9900#else
46fc3d4c 9901 intsize = 'l';
29fe7a80 9902#endif
5f66b61c 9903 /*FALLTHROUGH*/
46fc3d4c 9904 case 'd':
9905 case 'i':
8896765a
RB
9906#if vdNUMBER
9907 format_vd:
9908#endif
b22c7a20 9909 if (vectorize) {
ba210ebe 9910 STRLEN ulen;
211dfcf1
HS
9911 if (!veclen)
9912 continue;
2cf2cfc6
A
9913 if (vec_utf8)
9914 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9915 UTF8_ALLOW_ANYUV);
b22c7a20 9916 else {
e83d50c9 9917 uv = *vecstr;
b22c7a20
GS
9918 ulen = 1;
9919 }
9920 vecstr += ulen;
9921 veclen -= ulen;
e83d50c9
JP
9922 if (plus)
9923 esignbuf[esignlen++] = plus;
b22c7a20
GS
9924 }
9925 else if (args) {
46fc3d4c 9926 switch (intsize) {
9927 case 'h': iv = (short)va_arg(*args, int); break;
46fc3d4c 9928 case 'l': iv = va_arg(*args, long); break;
fc36a67e 9929 case 'V': iv = va_arg(*args, IV); break;
b10c0dba 9930 default: iv = va_arg(*args, int); break;
53f65a9e 9931 case 'q':
cf2093f6 9932#ifdef HAS_QUAD
53f65a9e
HS
9933 iv = va_arg(*args, Quad_t); break;
9934#else
9935 goto unknown;
cf2093f6 9936#endif
46fc3d4c 9937 }
9938 }
9939 else {
4ea561bc 9940 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
46fc3d4c 9941 switch (intsize) {
b10c0dba
MHM
9942 case 'h': iv = (short)tiv; break;
9943 case 'l': iv = (long)tiv; break;
9944 case 'V':
9945 default: iv = tiv; break;
53f65a9e 9946 case 'q':
cf2093f6 9947#ifdef HAS_QUAD
53f65a9e
HS
9948 iv = (Quad_t)tiv; break;
9949#else
9950 goto unknown;
cf2093f6 9951#endif
46fc3d4c 9952 }
9953 }
e83d50c9
JP
9954 if ( !vectorize ) /* we already set uv above */
9955 {
9956 if (iv >= 0) {
9957 uv = iv;
9958 if (plus)
9959 esignbuf[esignlen++] = plus;
9960 }
9961 else {
9962 uv = -iv;
9963 esignbuf[esignlen++] = '-';
9964 }
46fc3d4c 9965 }
9966 base = 10;
9967 goto integer;
9968
fc36a67e 9969 case 'U':
29fe7a80 9970#ifdef IV_IS_QUAD
22f3ae8c 9971 intsize = 'q';
29fe7a80 9972#else
fc36a67e 9973 intsize = 'l';
29fe7a80 9974#endif
5f66b61c 9975 /*FALLTHROUGH*/
fc36a67e 9976 case 'u':
9977 base = 10;
9978 goto uns_integer;
9979
7ff06cc7 9980 case 'B':
4f19785b
WSI
9981 case 'b':
9982 base = 2;
9983 goto uns_integer;
9984
46fc3d4c 9985 case 'O':
29fe7a80 9986#ifdef IV_IS_QUAD
22f3ae8c 9987 intsize = 'q';
29fe7a80 9988#else
46fc3d4c 9989 intsize = 'l';
29fe7a80 9990#endif
5f66b61c 9991 /*FALLTHROUGH*/
46fc3d4c 9992 case 'o':
9993 base = 8;
9994 goto uns_integer;
9995
9996 case 'X':
46fc3d4c 9997 case 'x':
9998 base = 16;
46fc3d4c 9999
10000 uns_integer:
b22c7a20 10001 if (vectorize) {
ba210ebe 10002 STRLEN ulen;
b22c7a20 10003 vector:
211dfcf1
HS
10004 if (!veclen)
10005 continue;
2cf2cfc6
A
10006 if (vec_utf8)
10007 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10008 UTF8_ALLOW_ANYUV);
b22c7a20 10009 else {
a05b299f 10010 uv = *vecstr;
b22c7a20
GS
10011 ulen = 1;
10012 }
10013 vecstr += ulen;
10014 veclen -= ulen;
10015 }
10016 else if (args) {
46fc3d4c 10017 switch (intsize) {
10018 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
46fc3d4c 10019 case 'l': uv = va_arg(*args, unsigned long); break;
fc36a67e 10020 case 'V': uv = va_arg(*args, UV); break;
b10c0dba 10021 default: uv = va_arg(*args, unsigned); break;
53f65a9e 10022 case 'q':
cf2093f6 10023#ifdef HAS_QUAD
53f65a9e
HS
10024 uv = va_arg(*args, Uquad_t); break;
10025#else
10026 goto unknown;
cf2093f6 10027#endif
46fc3d4c 10028 }
10029 }
10030 else {
4ea561bc 10031 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
46fc3d4c 10032 switch (intsize) {
b10c0dba
MHM
10033 case 'h': uv = (unsigned short)tuv; break;
10034 case 'l': uv = (unsigned long)tuv; break;
10035 case 'V':
10036 default: uv = tuv; break;
53f65a9e 10037 case 'q':
cf2093f6 10038#ifdef HAS_QUAD
53f65a9e
HS
10039 uv = (Uquad_t)tuv; break;
10040#else
10041 goto unknown;
cf2093f6 10042#endif
46fc3d4c 10043 }
10044 }
10045
10046 integer:
4d84ee25
NC
10047 {
10048 char *ptr = ebuf + sizeof ebuf;
1387f30c
DD
10049 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10050 zeros = 0;
10051
4d84ee25
NC
10052 switch (base) {
10053 unsigned dig;
10054 case 16:
14eb61ab 10055 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
4d84ee25
NC
10056 do {
10057 dig = uv & 15;
10058 *--ptr = p[dig];
10059 } while (uv >>= 4);
1387f30c 10060 if (tempalt) {
4d84ee25
NC
10061 esignbuf[esignlen++] = '0';
10062 esignbuf[esignlen++] = c; /* 'x' or 'X' */
10063 }
10064 break;
10065 case 8:
10066 do {
10067 dig = uv & 7;
10068 *--ptr = '0' + dig;
10069 } while (uv >>= 3);
10070 if (alt && *ptr != '0')
10071 *--ptr = '0';
10072 break;
10073 case 2:
10074 do {
10075 dig = uv & 1;
10076 *--ptr = '0' + dig;
10077 } while (uv >>= 1);
1387f30c 10078 if (tempalt) {
4d84ee25 10079 esignbuf[esignlen++] = '0';
7ff06cc7 10080 esignbuf[esignlen++] = c;
4d84ee25
NC
10081 }
10082 break;
10083 default: /* it had better be ten or less */
10084 do {
10085 dig = uv % base;
10086 *--ptr = '0' + dig;
10087 } while (uv /= base);
10088 break;
46fc3d4c 10089 }
4d84ee25
NC
10090 elen = (ebuf + sizeof ebuf) - ptr;
10091 eptr = ptr;
10092 if (has_precis) {
10093 if (precis > elen)
10094 zeros = precis - elen;
e6bb52fd
TS
10095 else if (precis == 0 && elen == 1 && *eptr == '0'
10096 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
4d84ee25 10097 elen = 0;
9911cee9
TS
10098
10099 /* a precision nullifies the 0 flag. */
10100 if (fill == '0')
10101 fill = ' ';
eda88b6d 10102 }
c10ed8b9 10103 }
46fc3d4c 10104 break;
10105
10106 /* FLOATING POINT */
10107
fc36a67e 10108 case 'F':
10109 c = 'f'; /* maybe %F isn't supported here */
5f66b61c 10110 /*FALLTHROUGH*/
46fc3d4c 10111 case 'e': case 'E':
fc36a67e 10112 case 'f':
46fc3d4c 10113 case 'g': case 'G':
26372e71
GA
10114 if (vectorize)
10115 goto unknown;
46fc3d4c 10116
10117 /* This is evil, but floating point is even more evil */
10118
9e5b023a
JH
10119 /* for SV-style calling, we can only get NV
10120 for C-style calling, we assume %f is double;
10121 for simplicity we allow any of %Lf, %llf, %qf for long double
10122 */
10123 switch (intsize) {
10124 case 'V':
10125#if defined(USE_LONG_DOUBLE)
10126 intsize = 'q';
10127#endif
10128 break;
8a2e3f14 10129/* [perl #20339] - we should accept and ignore %lf rather than die */
00e17364 10130 case 'l':
5f66b61c 10131 /*FALLTHROUGH*/
9e5b023a
JH
10132 default:
10133#if defined(USE_LONG_DOUBLE)
10134 intsize = args ? 0 : 'q';
10135#endif
10136 break;
10137 case 'q':
10138#if defined(HAS_LONG_DOUBLE)
10139 break;
10140#else
5f66b61c 10141 /*FALLTHROUGH*/
9e5b023a
JH
10142#endif
10143 case 'h':
9e5b023a
JH
10144 goto unknown;
10145 }
10146
10147 /* now we need (long double) if intsize == 'q', else (double) */
26372e71 10148 nv = (args) ?
35fff930
JH
10149#if LONG_DOUBLESIZE > DOUBLESIZE
10150 intsize == 'q' ?
205f51d8
AS
10151 va_arg(*args, long double) :
10152 va_arg(*args, double)
35fff930 10153#else
205f51d8 10154 va_arg(*args, double)
35fff930 10155#endif
4ea561bc 10156 : SvNV(argsv);
fc36a67e 10157
10158 need = 0;
3952c29a
NC
10159 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10160 else. frexp() has some unspecified behaviour for those three */
10161 if (c != 'e' && c != 'E' && (nv * 0) == 0) {
fc36a67e 10162 i = PERL_INT_MIN;
9e5b023a
JH
10163 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10164 will cast our (long double) to (double) */
73b309ea 10165 (void)Perl_frexp(nv, &i);
fc36a67e 10166 if (i == PERL_INT_MIN)
cea2e8a9 10167 Perl_die(aTHX_ "panic: frexp");
c635e13b 10168 if (i > 0)
fc36a67e 10169 need = BIT_DIGITS(i);
10170 }
10171 need += has_precis ? precis : 6; /* known default */
20f6aaab 10172
fc36a67e 10173 if (need < width)
10174 need = width;
10175
20f6aaab
AS
10176#ifdef HAS_LDBL_SPRINTF_BUG
10177 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8
AS
10178 with sfio - Allen <allens@cpan.org> */
10179
10180# ifdef DBL_MAX
10181# define MY_DBL_MAX DBL_MAX
10182# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10183# if DOUBLESIZE >= 8
10184# define MY_DBL_MAX 1.7976931348623157E+308L
10185# else
10186# define MY_DBL_MAX 3.40282347E+38L
10187# endif
10188# endif
10189
10190# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10191# define MY_DBL_MAX_BUG 1L
20f6aaab 10192# else
205f51d8 10193# define MY_DBL_MAX_BUG MY_DBL_MAX
20f6aaab 10194# endif
20f6aaab 10195
205f51d8
AS
10196# ifdef DBL_MIN
10197# define MY_DBL_MIN DBL_MIN
10198# else /* XXX guessing! -Allen */
10199# if DOUBLESIZE >= 8
10200# define MY_DBL_MIN 2.2250738585072014E-308L
10201# else
10202# define MY_DBL_MIN 1.17549435E-38L
10203# endif
10204# endif
20f6aaab 10205
205f51d8
AS
10206 if ((intsize == 'q') && (c == 'f') &&
10207 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10208 (need < DBL_DIG)) {
10209 /* it's going to be short enough that
10210 * long double precision is not needed */
10211
10212 if ((nv <= 0L) && (nv >= -0L))
10213 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10214 else {
10215 /* would use Perl_fp_class as a double-check but not
10216 * functional on IRIX - see perl.h comments */
10217
10218 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10219 /* It's within the range that a double can represent */
10220#if defined(DBL_MAX) && !defined(DBL_MIN)
10221 if ((nv >= ((long double)1/DBL_MAX)) ||
10222 (nv <= (-(long double)1/DBL_MAX)))
20f6aaab 10223#endif
205f51d8 10224 fix_ldbl_sprintf_bug = TRUE;
20f6aaab 10225 }
205f51d8
AS
10226 }
10227 if (fix_ldbl_sprintf_bug == TRUE) {
10228 double temp;
10229
10230 intsize = 0;
10231 temp = (double)nv;
10232 nv = (NV)temp;
10233 }
20f6aaab 10234 }
205f51d8
AS
10235
10236# undef MY_DBL_MAX
10237# undef MY_DBL_MAX_BUG
10238# undef MY_DBL_MIN
10239
20f6aaab
AS
10240#endif /* HAS_LDBL_SPRINTF_BUG */
10241
46fc3d4c 10242 need += 20; /* fudge factor */
80252599
GS
10243 if (PL_efloatsize < need) {
10244 Safefree(PL_efloatbuf);
10245 PL_efloatsize = need + 20; /* more fudge */
a02a5408 10246 Newx(PL_efloatbuf, PL_efloatsize, char);
7d5ea4e7 10247 PL_efloatbuf[0] = '\0';
46fc3d4c 10248 }
10249
4151a5fe
IZ
10250 if ( !(width || left || plus || alt) && fill != '0'
10251 && has_precis && intsize != 'q' ) { /* Shortcuts */
2873255c
NC
10252 /* See earlier comment about buggy Gconvert when digits,
10253 aka precis is 0 */
10254 if ( c == 'g' && precis) {
2e59c212 10255 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
4150c189
NC
10256 /* May return an empty string for digits==0 */
10257 if (*PL_efloatbuf) {
10258 elen = strlen(PL_efloatbuf);
4151a5fe 10259 goto float_converted;
4150c189 10260 }
4151a5fe
IZ
10261 } else if ( c == 'f' && !precis) {
10262 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10263 break;
10264 }
10265 }
4d84ee25
NC
10266 {
10267 char *ptr = ebuf + sizeof ebuf;
10268 *--ptr = '\0';
10269 *--ptr = c;
10270 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9e5b023a 10271#if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
4d84ee25
NC
10272 if (intsize == 'q') {
10273 /* Copy the one or more characters in a long double
10274 * format before the 'base' ([efgEFG]) character to
10275 * the format string. */
10276 static char const prifldbl[] = PERL_PRIfldbl;
10277 char const *p = prifldbl + sizeof(prifldbl) - 3;
10278 while (p >= prifldbl) { *--ptr = *p--; }
10279 }
65202027 10280#endif
4d84ee25
NC
10281 if (has_precis) {
10282 base = precis;
10283 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10284 *--ptr = '.';
10285 }
10286 if (width) {
10287 base = width;
10288 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10289 }
10290 if (fill == '0')
10291 *--ptr = fill;
10292 if (left)
10293 *--ptr = '-';
10294 if (plus)
10295 *--ptr = plus;
10296 if (alt)
10297 *--ptr = '#';
10298 *--ptr = '%';
10299
10300 /* No taint. Otherwise we are in the strange situation
10301 * where printf() taints but print($float) doesn't.
10302 * --jhi */
9e5b023a 10303#if defined(HAS_LONG_DOUBLE)
4150c189 10304 elen = ((intsize == 'q')
d9fad198
JH
10305 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10306 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9e5b023a 10307#else
4150c189 10308 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9e5b023a 10309#endif
4d84ee25 10310 }
4151a5fe 10311 float_converted:
80252599 10312 eptr = PL_efloatbuf;
46fc3d4c 10313 break;
10314
fc36a67e 10315 /* SPECIAL */
10316
10317 case 'n':
26372e71
GA
10318 if (vectorize)
10319 goto unknown;
fc36a67e 10320 i = SvCUR(sv) - origlen;
26372e71 10321 if (args) {
c635e13b 10322 switch (intsize) {
10323 case 'h': *(va_arg(*args, short*)) = i; break;
10324 default: *(va_arg(*args, int*)) = i; break;
10325 case 'l': *(va_arg(*args, long*)) = i; break;
10326 case 'V': *(va_arg(*args, IV*)) = i; break;
53f65a9e 10327 case 'q':
cf2093f6 10328#ifdef HAS_QUAD
53f65a9e
HS
10329 *(va_arg(*args, Quad_t*)) = i; break;
10330#else
10331 goto unknown;
cf2093f6 10332#endif
c635e13b 10333 }
fc36a67e 10334 }
9dd79c3f 10335 else
211dfcf1 10336 sv_setuv_mg(argsv, (UV)i);
fc36a67e 10337 continue; /* not "break" */
10338
10339 /* UNKNOWN */
10340
46fc3d4c 10341 default:
fc36a67e 10342 unknown:
041457d9
DM
10343 if (!args
10344 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10345 && ckWARN(WARN_PRINTF))
10346 {
c4420975 10347 SV * const msg = sv_newmortal();
35c1215d
NC
10348 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10349 (PL_op->op_type == OP_PRTF) ? "" : "s");
1d1ac7bc
MHM
10350 if (fmtstart < patend) {
10351 const char * const fmtend = q < patend ? q : patend;
10352 const char * f;
10353 sv_catpvs(msg, "\"%");
10354 for (f = fmtstart; f < fmtend; f++) {
10355 if (isPRINT(*f)) {
10356 sv_catpvn(msg, f, 1);
10357 } else {
10358 Perl_sv_catpvf(aTHX_ msg,
10359 "\\%03"UVof, (UV)*f & 0xFF);
10360 }
10361 }
10362 sv_catpvs(msg, "\"");
10363 } else {
396482e1 10364 sv_catpvs(msg, "end of string");
1d1ac7bc 10365 }
be2597df 10366 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
c635e13b 10367 }
fb73857a 10368
10369 /* output mangled stuff ... */
10370 if (c == '\0')
10371 --q;
46fc3d4c 10372 eptr = p;
10373 elen = q - p;
fb73857a 10374
10375 /* ... right here, because formatting flags should not apply */
10376 SvGROW(sv, SvCUR(sv) + elen + 1);
10377 p = SvEND(sv);
4459522c 10378 Copy(eptr, p, elen, char);
fb73857a 10379 p += elen;
10380 *p = '\0';
3f7c398e 10381 SvCUR_set(sv, p - SvPVX_const(sv));
58e33a90 10382 svix = osvix;
fb73857a 10383 continue; /* not "break" */
46fc3d4c 10384 }
10385
cc61b222
TS
10386 if (is_utf8 != has_utf8) {
10387 if (is_utf8) {
10388 if (SvCUR(sv))
10389 sv_utf8_upgrade(sv);
10390 }
10391 else {
10392 const STRLEN old_elen = elen;
59cd0e26 10393 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
cc61b222
TS
10394 sv_utf8_upgrade(nsv);
10395 eptr = SvPVX_const(nsv);
10396 elen = SvCUR(nsv);
10397
10398 if (width) { /* fudge width (can't fudge elen) */
10399 width += elen - old_elen;
10400 }
10401 is_utf8 = TRUE;
10402 }
10403 }
10404
6c94ec8b 10405 have = esignlen + zeros + elen;
ed2b91d2 10406 if (have < zeros)
f1f66076 10407 Perl_croak_nocontext("%s", PL_memory_wrap);
6c94ec8b 10408
46fc3d4c 10409 need = (have > width ? have : width);
10410 gap = need - have;
10411
d2641cbd 10412 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
f1f66076 10413 Perl_croak_nocontext("%s", PL_memory_wrap);
b22c7a20 10414 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
46fc3d4c 10415 p = SvEND(sv);
10416 if (esignlen && fill == '0') {
53c1dcc0 10417 int i;
eb160463 10418 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 10419 *p++ = esignbuf[i];
10420 }
10421 if (gap && !left) {
10422 memset(p, fill, gap);
10423 p += gap;
10424 }
10425 if (esignlen && fill != '0') {
53c1dcc0 10426 int i;
eb160463 10427 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 10428 *p++ = esignbuf[i];
10429 }
fc36a67e 10430 if (zeros) {
53c1dcc0 10431 int i;
fc36a67e 10432 for (i = zeros; i; i--)
10433 *p++ = '0';
10434 }
46fc3d4c 10435 if (elen) {
4459522c 10436 Copy(eptr, p, elen, char);
46fc3d4c 10437 p += elen;
10438 }
10439 if (gap && left) {
10440 memset(p, ' ', gap);
10441 p += gap;
10442 }
b22c7a20
GS
10443 if (vectorize) {
10444 if (veclen) {
4459522c 10445 Copy(dotstr, p, dotstrlen, char);
b22c7a20
GS
10446 p += dotstrlen;
10447 }
10448 else
10449 vectorize = FALSE; /* done iterating over vecstr */
10450 }
2cf2cfc6
A
10451 if (is_utf8)
10452 has_utf8 = TRUE;
10453 if (has_utf8)
7e2040f0 10454 SvUTF8_on(sv);
46fc3d4c 10455 *p = '\0';
3f7c398e 10456 SvCUR_set(sv, p - SvPVX_const(sv));
b22c7a20
GS
10457 if (vectorize) {
10458 esignlen = 0;
10459 goto vector;
10460 }
46fc3d4c 10461 }
3e6bd4bf 10462 SvTAINT(sv);
46fc3d4c 10463}
51371543 10464
645c22ef
DM
10465/* =========================================================================
10466
10467=head1 Cloning an interpreter
10468
10469All the macros and functions in this section are for the private use of
10470the main function, perl_clone().
10471
f2fc5c80 10472The foo_dup() functions make an exact copy of an existing foo thingy.
645c22ef
DM
10473During the course of a cloning, a hash table is used to map old addresses
10474to new addresses. The table is created and manipulated with the
10475ptr_table_* functions.
10476
10477=cut
10478
3e8320cc 10479 * =========================================================================*/
645c22ef
DM
10480
10481
1d7c1841
GS
10482#if defined(USE_ITHREADS)
10483
d4c19fe8 10484/* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
1d7c1841
GS
10485#ifndef GpREFCNT_inc
10486# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10487#endif
10488
10489
a41cc44e 10490/* Certain cases in Perl_ss_dup have been merged, by relying on the fact
3e07292d 10491 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
538f2e76
NC
10492 If this changes, please unmerge ss_dup.
10493 Likewise, sv_dup_inc_multiple() relies on this fact. */
a09252eb 10494#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup_inc(s,t))
502c6561 10495#define av_dup(s,t) MUTABLE_AV(sv_dup((const SV *)s,t))
a09252eb 10496#define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
85fbaab2 10497#define hv_dup(s,t) MUTABLE_HV(sv_dup((const SV *)s,t))
a09252eb 10498#define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
daba3364 10499#define cv_dup(s,t) MUTABLE_CV(sv_dup((const SV *)s,t))
a09252eb 10500#define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
daba3364 10501#define io_dup(s,t) MUTABLE_IO(sv_dup((const SV *)s,t))
a09252eb 10502#define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
159b6efe 10503#define gv_dup(s,t) MUTABLE_GV(sv_dup((const SV *)s,t))
a09252eb 10504#define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
6136c704
AL
10505#define SAVEPV(p) ((p) ? savepv(p) : NULL)
10506#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
8cf8f3d1 10507
199e78b7
DM
10508/* clone a parser */
10509
10510yy_parser *
66ceb532 10511Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
199e78b7
DM
10512{
10513 yy_parser *parser;
10514
7918f24d
NC
10515 PERL_ARGS_ASSERT_PARSER_DUP;
10516
199e78b7
DM
10517 if (!proto)
10518 return NULL;
10519
7c197c94
DM
10520 /* look for it in the table first */
10521 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
10522 if (parser)
10523 return parser;
10524
10525 /* create anew and remember what it is */
199e78b7 10526 Newxz(parser, 1, yy_parser);
7c197c94 10527 ptr_table_store(PL_ptr_table, proto, parser);
199e78b7
DM
10528
10529 parser->yyerrstatus = 0;
10530 parser->yychar = YYEMPTY; /* Cause a token to be read. */
10531
10532 /* XXX these not yet duped */
10533 parser->old_parser = NULL;
10534 parser->stack = NULL;
10535 parser->ps = NULL;
10536 parser->stack_size = 0;
10537 /* XXX parser->stack->state = 0; */
10538
10539 /* XXX eventually, just Copy() most of the parser struct ? */
10540
10541 parser->lex_brackets = proto->lex_brackets;
10542 parser->lex_casemods = proto->lex_casemods;
10543 parser->lex_brackstack = savepvn(proto->lex_brackstack,
10544 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
10545 parser->lex_casestack = savepvn(proto->lex_casestack,
10546 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
10547 parser->lex_defer = proto->lex_defer;
10548 parser->lex_dojoin = proto->lex_dojoin;
10549 parser->lex_expect = proto->lex_expect;
10550 parser->lex_formbrack = proto->lex_formbrack;
10551 parser->lex_inpat = proto->lex_inpat;
10552 parser->lex_inwhat = proto->lex_inwhat;
10553 parser->lex_op = proto->lex_op;
10554 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
10555 parser->lex_starts = proto->lex_starts;
10556 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
10557 parser->multi_close = proto->multi_close;
10558 parser->multi_open = proto->multi_open;
10559 parser->multi_start = proto->multi_start;
670a9cb2 10560 parser->multi_end = proto->multi_end;
199e78b7
DM
10561 parser->pending_ident = proto->pending_ident;
10562 parser->preambled = proto->preambled;
10563 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
bdc0bf6f 10564 parser->linestr = sv_dup_inc(proto->linestr, param);
53a7735b
DM
10565 parser->expect = proto->expect;
10566 parser->copline = proto->copline;
f06b5848 10567 parser->last_lop_op = proto->last_lop_op;
bc177e6b 10568 parser->lex_state = proto->lex_state;
2f9285f8 10569 parser->rsfp = fp_dup(proto->rsfp, '<', param);
5486870f
DM
10570 /* rsfp_filters entries have fake IoDIRP() */
10571 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12bd6ede
DM
10572 parser->in_my = proto->in_my;
10573 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13765c85 10574 parser->error_count = proto->error_count;
bc177e6b 10575
53a7735b 10576
f06b5848
DM
10577 parser->linestr = sv_dup_inc(proto->linestr, param);
10578
10579 {
1e05feb3
AL
10580 char * const ols = SvPVX(proto->linestr);
10581 char * const ls = SvPVX(parser->linestr);
f06b5848
DM
10582
10583 parser->bufptr = ls + (proto->bufptr >= ols ?
10584 proto->bufptr - ols : 0);
10585 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
10586 proto->oldbufptr - ols : 0);
10587 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
10588 proto->oldoldbufptr - ols : 0);
10589 parser->linestart = ls + (proto->linestart >= ols ?
10590 proto->linestart - ols : 0);
10591 parser->last_uni = ls + (proto->last_uni >= ols ?
10592 proto->last_uni - ols : 0);
10593 parser->last_lop = ls + (proto->last_lop >= ols ?
10594 proto->last_lop - ols : 0);
10595
10596 parser->bufend = ls + SvCUR(parser->linestr);
10597 }
199e78b7 10598
14047fc9
DM
10599 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
10600
2f9285f8 10601
199e78b7
DM
10602#ifdef PERL_MAD
10603 parser->endwhite = proto->endwhite;
10604 parser->faketokens = proto->faketokens;
10605 parser->lasttoke = proto->lasttoke;
10606 parser->nextwhite = proto->nextwhite;
10607 parser->realtokenstart = proto->realtokenstart;
10608 parser->skipwhite = proto->skipwhite;
10609 parser->thisclose = proto->thisclose;
10610 parser->thismad = proto->thismad;
10611 parser->thisopen = proto->thisopen;
10612 parser->thisstuff = proto->thisstuff;
10613 parser->thistoken = proto->thistoken;
10614 parser->thiswhite = proto->thiswhite;
fb205e7a
DM
10615
10616 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
10617 parser->curforce = proto->curforce;
10618#else
10619 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
10620 Copy(proto->nexttype, parser->nexttype, 5, I32);
10621 parser->nexttoke = proto->nexttoke;
199e78b7 10622#endif
f0c5aa00
DM
10623
10624 /* XXX should clone saved_curcop here, but we aren't passed
10625 * proto_perl; so do it in perl_clone_using instead */
10626
199e78b7
DM
10627 return parser;
10628}
10629
d2d73c3e 10630
d2d73c3e 10631/* duplicate a file handle */
645c22ef 10632
1d7c1841 10633PerlIO *
3be3cdd6 10634Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
1d7c1841
GS
10635{
10636 PerlIO *ret;
53c1dcc0 10637
7918f24d 10638 PERL_ARGS_ASSERT_FP_DUP;
53c1dcc0 10639 PERL_UNUSED_ARG(type);
73d840c0 10640
1d7c1841
GS
10641 if (!fp)
10642 return (PerlIO*)NULL;
10643
10644 /* look for it in the table first */
10645 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10646 if (ret)
10647 return ret;
10648
10649 /* create anew and remember what it is */
ecdeb87c 10650 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
1d7c1841
GS
10651 ptr_table_store(PL_ptr_table, fp, ret);
10652 return ret;
10653}
10654
645c22ef
DM
10655/* duplicate a directory handle */
10656
1d7c1841 10657DIR *
66ceb532 10658Perl_dirp_dup(pTHX_ DIR *const dp)
1d7c1841 10659{
96a5add6 10660 PERL_UNUSED_CONTEXT;
1d7c1841
GS
10661 if (!dp)
10662 return (DIR*)NULL;
10663 /* XXX TODO */
10664 return dp;
10665}
10666
ff276b08 10667/* duplicate a typeglob */
645c22ef 10668
1d7c1841 10669GP *
66ceb532 10670Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
1d7c1841
GS
10671{
10672 GP *ret;
b37c2d43 10673
7918f24d
NC
10674 PERL_ARGS_ASSERT_GP_DUP;
10675
1d7c1841
GS
10676 if (!gp)
10677 return (GP*)NULL;
10678 /* look for it in the table first */
10679 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10680 if (ret)
10681 return ret;
10682
10683 /* create anew and remember what it is */
a02a5408 10684 Newxz(ret, 1, GP);
1d7c1841
GS
10685 ptr_table_store(PL_ptr_table, gp, ret);
10686
10687 /* clone */
46d65037
NC
10688 /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
10689 on Newxz() to do this for us. */
d2d73c3e
AB
10690 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
10691 ret->gp_io = io_dup_inc(gp->gp_io, param);
10692 ret->gp_form = cv_dup_inc(gp->gp_form, param);
10693 ret->gp_av = av_dup_inc(gp->gp_av, param);
10694 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
10695 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10696 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
1d7c1841 10697 ret->gp_cvgen = gp->gp_cvgen;
1d7c1841 10698 ret->gp_line = gp->gp_line;
566771cc 10699 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
1d7c1841
GS
10700 return ret;
10701}
10702
645c22ef
DM
10703/* duplicate a chain of magic */
10704
1d7c1841 10705MAGIC *
b88ec9b8 10706Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
1d7c1841 10707{
c160a186 10708 MAGIC *mgret = NULL;
0228edf6 10709 MAGIC **mgprev_p = &mgret;
7918f24d
NC
10710
10711 PERL_ARGS_ASSERT_MG_DUP;
10712
1d7c1841
GS
10713 for (; mg; mg = mg->mg_moremagic) {
10714 MAGIC *nmg;
45f7fcc8 10715 Newx(nmg, 1, MAGIC);
0228edf6
NC
10716 *mgprev_p = nmg;
10717 mgprev_p = &(nmg->mg_moremagic);
10718
45f7fcc8
NC
10719 /* There was a comment "XXX copy dynamic vtable?" but as we don't have
10720 dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
10721 from the original commit adding Perl_mg_dup() - revision 4538.
10722 Similarly there is the annotation "XXX random ptr?" next to the
10723 assignment to nmg->mg_ptr. */
10724 *nmg = *mg;
10725
288b8c02 10726 /* FIXME for plugins
45f7fcc8
NC
10727 if (nmg->mg_type == PERL_MAGIC_qr) {
10728 nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
1d7c1841 10729 }
288b8c02
NC
10730 else
10731 */
45f7fcc8 10732 if(nmg->mg_type == PERL_MAGIC_backref) {
d7cbc7b5
NC
10733 /* The backref AV has its reference count deliberately bumped by
10734 1. */
502c6561 10735 nmg->mg_obj
45f7fcc8 10736 = SvREFCNT_inc(av_dup_inc((const AV *) nmg->mg_obj, param));
05bd4103 10737 }
1d7c1841 10738 else {
45f7fcc8
NC
10739 nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
10740 ? sv_dup_inc(nmg->mg_obj, param)
10741 : sv_dup(nmg->mg_obj, param);
10742 }
10743
10744 if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
10745 if (nmg->mg_len > 0) {
10746 nmg->mg_ptr = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
10747 if (nmg->mg_type == PERL_MAGIC_overload_table &&
10748 AMT_AMAGIC((AMT*)nmg->mg_ptr))
14befaf4 10749 {
0bcc34c2 10750 AMT * const namtp = (AMT*)nmg->mg_ptr;
538f2e76
NC
10751 sv_dup_inc_multiple((SV**)(namtp->table),
10752 (SV**)(namtp->table), NofAMmeth, param);
1d7c1841
GS
10753 }
10754 }
45f7fcc8
NC
10755 else if (nmg->mg_len == HEf_SVKEY)
10756 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
1d7c1841 10757 }
45f7fcc8 10758 if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
68795e93
NIS
10759 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10760 }
1d7c1841
GS
10761 }
10762 return mgret;
10763}
10764
4674ade5
NC
10765#endif /* USE_ITHREADS */
10766
db93c0c4
NC
10767struct ptr_tbl_arena {
10768 struct ptr_tbl_arena *next;
10769 struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers. */
10770};
10771
645c22ef
DM
10772/* create a new pointer-mapping table */
10773
1d7c1841
GS
10774PTR_TBL_t *
10775Perl_ptr_table_new(pTHX)
10776{
10777 PTR_TBL_t *tbl;
96a5add6
AL
10778 PERL_UNUSED_CONTEXT;
10779
b3a120bf 10780 Newx(tbl, 1, PTR_TBL_t);
1d7c1841
GS
10781 tbl->tbl_max = 511;
10782 tbl->tbl_items = 0;
db93c0c4
NC
10783 tbl->tbl_arena = NULL;
10784 tbl->tbl_arena_next = NULL;
10785 tbl->tbl_arena_end = NULL;
a02a5408 10786 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
1d7c1841
GS
10787 return tbl;
10788}
10789
7119fd33
NC
10790#define PTR_TABLE_HASH(ptr) \
10791 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
134ca3d6 10792
645c22ef
DM
10793/* map an existing pointer using a table */
10794
7bf61b54 10795STATIC PTR_TBL_ENT_t *
1eb6e4ca 10796S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
7918f24d 10797{
1d7c1841 10798 PTR_TBL_ENT_t *tblent;
4373e329 10799 const UV hash = PTR_TABLE_HASH(sv);
7918f24d
NC
10800
10801 PERL_ARGS_ASSERT_PTR_TABLE_FIND;
10802
1d7c1841
GS
10803 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10804 for (; tblent; tblent = tblent->next) {
10805 if (tblent->oldval == sv)
7bf61b54 10806 return tblent;
1d7c1841 10807 }
d4c19fe8 10808 return NULL;
7bf61b54
NC
10809}
10810
10811void *
1eb6e4ca 10812Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
7bf61b54 10813{
b0e6ae5b 10814 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
7918f24d
NC
10815
10816 PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
96a5add6 10817 PERL_UNUSED_CONTEXT;
7918f24d 10818
d4c19fe8 10819 return tblent ? tblent->newval : NULL;
1d7c1841
GS
10820}
10821
645c22ef
DM
10822/* add a new entry to a pointer-mapping table */
10823
1d7c1841 10824void
1eb6e4ca 10825Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
1d7c1841 10826{
0c9fdfe0 10827 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
7918f24d
NC
10828
10829 PERL_ARGS_ASSERT_PTR_TABLE_STORE;
96a5add6 10830 PERL_UNUSED_CONTEXT;
1d7c1841 10831
7bf61b54
NC
10832 if (tblent) {
10833 tblent->newval = newsv;
10834 } else {
10835 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
10836
db93c0c4
NC
10837 if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
10838 struct ptr_tbl_arena *new_arena;
10839
10840 Newx(new_arena, 1, struct ptr_tbl_arena);
10841 new_arena->next = tbl->tbl_arena;
10842 tbl->tbl_arena = new_arena;
10843 tbl->tbl_arena_next = new_arena->array;
10844 tbl->tbl_arena_end = new_arena->array
10845 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
10846 }
10847
10848 tblent = tbl->tbl_arena_next++;
d2a0f284 10849
7bf61b54
NC
10850 tblent->oldval = oldsv;
10851 tblent->newval = newsv;
10852 tblent->next = tbl->tbl_ary[entry];
10853 tbl->tbl_ary[entry] = tblent;
10854 tbl->tbl_items++;
10855 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
10856 ptr_table_split(tbl);
1d7c1841 10857 }
1d7c1841
GS
10858}
10859
645c22ef
DM
10860/* double the hash bucket size of an existing ptr table */
10861
1d7c1841 10862void
1eb6e4ca 10863Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
1d7c1841
GS
10864{
10865 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
4373e329 10866 const UV oldsize = tbl->tbl_max + 1;
1d7c1841
GS
10867 UV newsize = oldsize * 2;
10868 UV i;
7918f24d
NC
10869
10870 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
96a5add6 10871 PERL_UNUSED_CONTEXT;
1d7c1841
GS
10872
10873 Renew(ary, newsize, PTR_TBL_ENT_t*);
10874 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10875 tbl->tbl_max = --newsize;
10876 tbl->tbl_ary = ary;
10877 for (i=0; i < oldsize; i++, ary++) {
10878 PTR_TBL_ENT_t **curentp, **entp, *ent;
10879 if (!*ary)
10880 continue;
10881 curentp = ary + oldsize;
10882 for (entp = ary, ent = *ary; ent; ent = *entp) {
134ca3d6 10883 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
1d7c1841
GS
10884 *entp = ent->next;
10885 ent->next = *curentp;
10886 *curentp = ent;
10887 continue;
10888 }
10889 else
10890 entp = &ent->next;
10891 }
10892 }
10893}
10894
645c22ef 10895/* remove all the entries from a ptr table */
5c5ade3e 10896/* Deprecated - will be removed post 5.14 */
645c22ef 10897
a0739874 10898void
1eb6e4ca 10899Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
a0739874 10900{
d5cefff9 10901 if (tbl && tbl->tbl_items) {
db93c0c4 10902 struct ptr_tbl_arena *arena = tbl->tbl_arena;
a0739874 10903
db93c0c4 10904 Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
ab1e7f95 10905
db93c0c4
NC
10906 while (arena) {
10907 struct ptr_tbl_arena *next = arena->next;
10908
10909 Safefree(arena);
10910 arena = next;
10911 };
a0739874 10912
d5cefff9 10913 tbl->tbl_items = 0;
db93c0c4
NC
10914 tbl->tbl_arena = NULL;
10915 tbl->tbl_arena_next = NULL;
10916 tbl->tbl_arena_end = NULL;
d5cefff9 10917 }
a0739874
DM
10918}
10919
645c22ef
DM
10920/* clear and free a ptr table */
10921
a0739874 10922void
1eb6e4ca 10923Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
a0739874 10924{
5c5ade3e
NC
10925 struct ptr_tbl_arena *arena;
10926
a0739874
DM
10927 if (!tbl) {
10928 return;
10929 }
5c5ade3e
NC
10930
10931 arena = tbl->tbl_arena;
10932
10933 while (arena) {
10934 struct ptr_tbl_arena *next = arena->next;
10935
10936 Safefree(arena);
10937 arena = next;
10938 }
10939
a0739874
DM
10940 Safefree(tbl->tbl_ary);
10941 Safefree(tbl);
10942}
10943
4674ade5 10944#if defined(USE_ITHREADS)
5bd07a3d 10945
83841fad 10946void
1eb6e4ca 10947Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
83841fad 10948{
7918f24d
NC
10949 PERL_ARGS_ASSERT_RVPV_DUP;
10950
83841fad 10951 if (SvROK(sstr)) {
b162af07 10952 SvRV_set(dstr, SvWEAKREF(sstr)
f19a12a3
MHM
10953 ? sv_dup(SvRV_const(sstr), param)
10954 : sv_dup_inc(SvRV_const(sstr), param));
f880fe2f 10955
83841fad 10956 }
3f7c398e 10957 else if (SvPVX_const(sstr)) {
83841fad
NIS
10958 /* Has something there */
10959 if (SvLEN(sstr)) {
68795e93 10960 /* Normal PV - clone whole allocated space */
3f7c398e 10961 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
d3d0e6f1
NC
10962 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10963 /* Not that normal - actually sstr is copy on write.
10964 But we are a true, independant SV, so: */
10965 SvREADONLY_off(dstr);
10966 SvFAKE_off(dstr);
10967 }
68795e93 10968 }
83841fad
NIS
10969 else {
10970 /* Special case - not normally malloced for some reason */
f7877b28
NC
10971 if (isGV_with_GP(sstr)) {
10972 /* Don't need to do anything here. */
10973 }
10974 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
ef10be65
NC
10975 /* A "shared" PV - clone it as "shared" PV */
10976 SvPV_set(dstr,
10977 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
10978 param)));
83841fad
NIS
10979 }
10980 else {
10981 /* Some other special case - random pointer */
d2c6dc5e 10982 SvPV_set(dstr, (char *) SvPVX_const(sstr));
d3d0e6f1 10983 }
83841fad
NIS
10984 }
10985 }
10986 else {
4608196e 10987 /* Copy the NULL */
4df7f6af 10988 SvPV_set(dstr, NULL);
83841fad
NIS
10989 }
10990}
10991
538f2e76
NC
10992/* duplicate a list of SVs. source and dest may point to the same memory. */
10993static SV **
10994S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
10995 SSize_t items, CLONE_PARAMS *const param)
10996{
10997 PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
10998
10999 while (items-- > 0) {
11000 *dest++ = sv_dup_inc(*source++, param);
11001 }
11002
11003 return dest;
11004}
11005
662fb8b2
NC
11006/* duplicate an SV of any type (including AV, HV etc) */
11007
d08d57ef
NC
11008static SV *
11009S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
1d7c1841 11010{
27da23d5 11011 dVAR;
1d7c1841
GS
11012 SV *dstr;
11013
d08d57ef 11014 PERL_ARGS_ASSERT_SV_DUP_COMMON;
7918f24d 11015
bfd95973
NC
11016 if (SvTYPE(sstr) == SVTYPEMASK) {
11017#ifdef DEBUG_LEAKING_SCALARS_ABORT
11018 abort();
11019#endif
6136c704 11020 return NULL;
bfd95973 11021 }
1d7c1841 11022 /* look for it in the table first */
daba3364 11023 dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
1d7c1841
GS
11024 if (dstr)
11025 return dstr;
11026
0405e91e
AB
11027 if(param->flags & CLONEf_JOIN_IN) {
11028 /** We are joining here so we don't want do clone
11029 something that is bad **/
eb86f8b3 11030 if (SvTYPE(sstr) == SVt_PVHV) {
9bde8eb0 11031 const HEK * const hvname = HvNAME_HEK(sstr);
eb86f8b3
AL
11032 if (hvname)
11033 /** don't clone stashes if they already exist **/
daba3364 11034 return MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
0405e91e
AB
11035 }
11036 }
11037
1d7c1841
GS
11038 /* create anew and remember what it is */
11039 new_SV(dstr);
fd0854ff
DM
11040
11041#ifdef DEBUG_LEAKING_SCALARS
11042 dstr->sv_debug_optype = sstr->sv_debug_optype;
11043 dstr->sv_debug_line = sstr->sv_debug_line;
11044 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11045 dstr->sv_debug_cloned = 1;
fd0854ff 11046 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
fd0854ff
DM
11047#endif
11048
1d7c1841
GS
11049 ptr_table_store(PL_ptr_table, sstr, dstr);
11050
11051 /* clone */
11052 SvFLAGS(dstr) = SvFLAGS(sstr);
11053 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
11054 SvREFCNT(dstr) = 0; /* must be before any other dups! */
11055
11056#ifdef DEBUGGING
3f7c398e 11057 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
1d7c1841 11058 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
6c9570dc 11059 (void*)PL_watch_pvx, SvPVX_const(sstr));
1d7c1841
GS
11060#endif
11061
9660f481
DM
11062 /* don't clone objects whose class has asked us not to */
11063 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
33de8e4a 11064 SvFLAGS(dstr) = 0;
9660f481
DM
11065 return dstr;
11066 }
11067
1d7c1841
GS
11068 switch (SvTYPE(sstr)) {
11069 case SVt_NULL:
11070 SvANY(dstr) = NULL;
11071 break;
11072 case SVt_IV:
339049b0 11073 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
4df7f6af
NC
11074 if(SvROK(sstr)) {
11075 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11076 } else {
11077 SvIV_set(dstr, SvIVX(sstr));
11078 }
1d7c1841
GS
11079 break;
11080 case SVt_NV:
11081 SvANY(dstr) = new_XNV();
9d6ce603 11082 SvNV_set(dstr, SvNVX(sstr));
1d7c1841 11083 break;
cecf5685 11084 /* case SVt_BIND: */
662fb8b2
NC
11085 default:
11086 {
11087 /* These are all the types that need complex bodies allocating. */
662fb8b2 11088 void *new_body;
2bcc16b3
NC
11089 const svtype sv_type = SvTYPE(sstr);
11090 const struct body_details *const sv_type_details
11091 = bodies_by_type + sv_type;
662fb8b2 11092
93e68bfb 11093 switch (sv_type) {
662fb8b2 11094 default:
bb263b4e 11095 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
662fb8b2
NC
11096 break;
11097
662fb8b2 11098 case SVt_PVGV:
c22188b4
NC
11099 case SVt_PVIO:
11100 case SVt_PVFM:
11101 case SVt_PVHV:
11102 case SVt_PVAV:
662fb8b2 11103 case SVt_PVCV:
662fb8b2 11104 case SVt_PVLV:
5c35adbb 11105 case SVt_REGEXP:
662fb8b2 11106 case SVt_PVMG:
662fb8b2 11107 case SVt_PVNV:
662fb8b2 11108 case SVt_PVIV:
662fb8b2 11109 case SVt_PV:
d2a0f284 11110 assert(sv_type_details->body_size);
c22188b4 11111 if (sv_type_details->arena) {
d2a0f284 11112 new_body_inline(new_body, sv_type);
c22188b4 11113 new_body
b9502f15 11114 = (void*)((char*)new_body - sv_type_details->offset);
c22188b4
NC
11115 } else {
11116 new_body = new_NOARENA(sv_type_details);
11117 }
1d7c1841 11118 }
662fb8b2
NC
11119 assert(new_body);
11120 SvANY(dstr) = new_body;
11121
2bcc16b3 11122#ifndef PURIFY
b9502f15
NC
11123 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11124 ((char*)SvANY(dstr)) + sv_type_details->offset,
f32993d6 11125 sv_type_details->copy, char);
2bcc16b3
NC
11126#else
11127 Copy(((char*)SvANY(sstr)),
11128 ((char*)SvANY(dstr)),
d2a0f284 11129 sv_type_details->body_size + sv_type_details->offset, char);
2bcc16b3 11130#endif
662fb8b2 11131
f7877b28
NC
11132 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11133 && !isGV_with_GP(dstr))
662fb8b2
NC
11134 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11135
11136 /* The Copy above means that all the source (unduplicated) pointers
11137 are now in the destination. We can check the flags and the
11138 pointers in either, but it's possible that there's less cache
11139 missing by always going for the destination.
11140 FIXME - instrument and check that assumption */
f32993d6 11141 if (sv_type >= SVt_PVMG) {
885ffcb3 11142 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
73d95100 11143 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
e736a858 11144 } else if (SvMAGIC(dstr))
662fb8b2
NC
11145 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11146 if (SvSTASH(dstr))
11147 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
1d7c1841 11148 }
662fb8b2 11149
f32993d6
NC
11150 /* The cast silences a GCC warning about unhandled types. */
11151 switch ((int)sv_type) {
662fb8b2
NC
11152 case SVt_PV:
11153 break;
11154 case SVt_PVIV:
11155 break;
11156 case SVt_PVNV:
11157 break;
11158 case SVt_PVMG:
11159 break;
5c35adbb 11160 case SVt_REGEXP:
288b8c02 11161 /* FIXME for plugins */
d2f13c59 11162 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
f708cfc1 11163 break;
662fb8b2
NC
11164 case SVt_PVLV:
11165 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11166 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11167 LvTARG(dstr) = dstr;
11168 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
daba3364 11169 LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
662fb8b2
NC
11170 else
11171 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
662fb8b2 11172 case SVt_PVGV:
cecf5685 11173 if(isGV_with_GP(sstr)) {
566771cc 11174 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
39cb70dc
NC
11175 /* Don't call sv_add_backref here as it's going to be
11176 created as part of the magic cloning of the symbol
27bca322
FC
11177 table--unless this is during a join and the stash
11178 is not actually being cloned. */
f7877b28
NC
11179 /* Danger Will Robinson - GvGP(dstr) isn't initialised
11180 at the point of this comment. */
39cb70dc 11181 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
27bca322
FC
11182 if(param->flags & CLONEf_JOIN_IN) {
11183 const HEK * const hvname
11184 = HvNAME_HEK(GvSTASH(dstr));
11185 if( hvname
11186 && GvSTASH(dstr) == gv_stashpvn(
11187 HEK_KEY(hvname), HEK_LEN(hvname), 0
11188 )
11189 )
11190 Perl_sv_add_backref(
11191 aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr
11192 );
11193 }
f7877b28
NC
11194 GvGP(dstr) = gp_dup(GvGP(sstr), param);
11195 (void)GpREFCNT_inc(GvGP(dstr));
11196 } else
11197 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
662fb8b2
NC
11198 break;
11199 case SVt_PVIO:
11200 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
11201 if (IoOFP(dstr) == IoIFP(sstr))
11202 IoOFP(dstr) = IoIFP(dstr);
11203 else
11204 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
5486870f 11205 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
662fb8b2
NC
11206 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11207 /* I have no idea why fake dirp (rsfps)
11208 should be treated differently but otherwise
11209 we end up with leaks -- sky*/
11210 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
11211 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
11212 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11213 } else {
11214 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
11215 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
11216 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
100ce7e1
NC
11217 if (IoDIRP(dstr)) {
11218 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
11219 } else {
6f207bd3 11220 NOOP;
100ce7e1
NC
11221 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
11222 }
662fb8b2
NC
11223 }
11224 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
11225 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
11226 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
11227 break;
11228 case SVt_PVAV:
2779b694
KB
11229 /* avoid cloning an empty array */
11230 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
662fb8b2 11231 SV **dst_ary, **src_ary;
502c6561 11232 SSize_t items = AvFILLp((const AV *)sstr) + 1;
662fb8b2 11233
502c6561
NC
11234 src_ary = AvARRAY((const AV *)sstr);
11235 Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
662fb8b2 11236 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
502c6561
NC
11237 AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11238 AvALLOC((const AV *)dstr) = dst_ary;
11239 if (AvREAL((const AV *)sstr)) {
538f2e76
NC
11240 dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11241 param);
662fb8b2
NC
11242 }
11243 else {
11244 while (items-- > 0)
11245 *dst_ary++ = sv_dup(*src_ary++, param);
11246 }
502c6561 11247 items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
662fb8b2
NC
11248 while (items-- > 0) {
11249 *dst_ary++ = &PL_sv_undef;
11250 }
bfcb3514 11251 }
662fb8b2 11252 else {
502c6561
NC
11253 AvARRAY(MUTABLE_AV(dstr)) = NULL;
11254 AvALLOC((const AV *)dstr) = (SV**)NULL;
2779b694
KB
11255 AvMAX( (const AV *)dstr) = -1;
11256 AvFILLp((const AV *)dstr) = -1;
b79f7545 11257 }
662fb8b2
NC
11258 break;
11259 case SVt_PVHV:
1d193675 11260 if (HvARRAY((const HV *)sstr)) {
7e265ef3
AL
11261 STRLEN i = 0;
11262 const bool sharekeys = !!HvSHAREKEYS(sstr);
11263 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
11264 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
11265 char *darray;
11266 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
11267 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
11268 char);
11269 HvARRAY(dstr) = (HE**)darray;
11270 while (i <= sxhv->xhv_max) {
11271 const HE * const source = HvARRAY(sstr)[i];
11272 HvARRAY(dstr)[i] = source
11273 ? he_dup(source, sharekeys, param) : 0;
11274 ++i;
11275 }
11276 if (SvOOK(sstr)) {
11277 HEK *hvname;
11278 const struct xpvhv_aux * const saux = HvAUX(sstr);
11279 struct xpvhv_aux * const daux = HvAUX(dstr);
11280 /* This flag isn't copied. */
11281 /* SvOOK_on(hv) attacks the IV flags. */
11282 SvFLAGS(dstr) |= SVf_OOK;
11283
11284 hvname = saux->xhv_name;
566771cc 11285 daux->xhv_name = hek_dup(hvname, param);
7e265ef3
AL
11286
11287 daux->xhv_riter = saux->xhv_riter;
11288 daux->xhv_eiter = saux->xhv_eiter
11289 ? he_dup(saux->xhv_eiter,
f2338a2e 11290 cBOOL(HvSHAREKEYS(sstr)), param) : 0;
b17f5ab7 11291 /* backref array needs refcnt=2; see sv_add_backref */
7e265ef3
AL
11292 daux->xhv_backreferences =
11293 saux->xhv_backreferences
502c6561 11294 ? MUTABLE_AV(SvREFCNT_inc(
daba3364 11295 sv_dup_inc((const SV *)saux->xhv_backreferences, param)))
86f55936 11296 : 0;
e1a479c5
BB
11297
11298 daux->xhv_mro_meta = saux->xhv_mro_meta
11299 ? mro_meta_dup(saux->xhv_mro_meta, param)
11300 : 0;
11301
7e265ef3
AL
11302 /* Record stashes for possible cloning in Perl_clone(). */
11303 if (hvname)
11304 av_push(param->stashes, dstr);
662fb8b2 11305 }
662fb8b2 11306 }
7e265ef3 11307 else
85fbaab2 11308 HvARRAY(MUTABLE_HV(dstr)) = NULL;
662fb8b2 11309 break;
662fb8b2 11310 case SVt_PVCV:
bb172083
NC
11311 if (!(param->flags & CLONEf_COPY_STACKS)) {
11312 CvDEPTH(dstr) = 0;
11313 }
11314 case SVt_PVFM:
662fb8b2
NC
11315 /* NOTE: not refcounted */
11316 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
11317 OP_REFCNT_LOCK;
d04ba589
NC
11318 if (!CvISXSUB(dstr))
11319 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
662fb8b2 11320 OP_REFCNT_UNLOCK;
cfae286e 11321 if (CvCONST(dstr) && CvISXSUB(dstr)) {
d32faaf3 11322 CvXSUBANY(dstr).any_ptr =
daba3364 11323 sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
662fb8b2
NC
11324 }
11325 /* don't dup if copying back - CvGV isn't refcounted, so the
11326 * duped GV may never be freed. A bit of a hack! DAPM */
11327 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
a0714e2c 11328 NULL : gv_dup(CvGV(dstr), param) ;
d5b1589c 11329 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
662fb8b2
NC
11330 CvOUTSIDE(dstr) =
11331 CvWEAKOUTSIDE(sstr)
11332 ? cv_dup( CvOUTSIDE(dstr), param)
11333 : cv_dup_inc(CvOUTSIDE(dstr), param);
aed2304a 11334 if (!CvISXSUB(dstr))
662fb8b2
NC
11335 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
11336 break;
bfcb3514 11337 }
1d7c1841 11338 }
1d7c1841
GS
11339 }
11340
11341 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
11342 ++PL_sv_objcount;
11343
11344 return dstr;
d2d73c3e 11345 }
1d7c1841 11346
a09252eb
NC
11347SV *
11348Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11349{
11350 PERL_ARGS_ASSERT_SV_DUP_INC;
d08d57ef
NC
11351 return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
11352}
11353
11354SV *
11355Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11356{
11357 SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
11358 PERL_ARGS_ASSERT_SV_DUP;
11359
04518cc3
NC
11360 /* Track every SV that (at least initially) had a reference count of 0.
11361 We need to do this by holding an actual reference to it in this array.
11362 If we attempt to cheat, turn AvREAL_off(), and store only pointers
11363 (akin to the stashes hash, and the perl stack), we come unstuck if
11364 a weak reference (or other SV legitimately SvREFCNT() == 0 for this
11365 thread) is manipulated in a CLONE method, because CLONE runs before the
11366 unreferenced array is walked to find SVs still with SvREFCNT() == 0
11367 (and fix things up by giving each a reference via the temps stack).
11368 Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
11369 then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
11370 before the walk of unreferenced happens and a reference to that is SV
11371 added to the temps stack. At which point we have the same SV considered
11372 to be in use, and free to be re-used. Not good.
11373 */
d08d57ef
NC
11374 if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
11375 assert(param->unreferenced);
04518cc3 11376 av_push(param->unreferenced, SvREFCNT_inc(dstr));
d08d57ef
NC
11377 }
11378
11379 return dstr;
a09252eb
NC
11380}
11381
645c22ef
DM
11382/* duplicate a context */
11383
1d7c1841 11384PERL_CONTEXT *
a8fc9800 11385Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
1d7c1841
GS
11386{
11387 PERL_CONTEXT *ncxs;
11388
7918f24d
NC
11389 PERL_ARGS_ASSERT_CX_DUP;
11390
1d7c1841
GS
11391 if (!cxs)
11392 return (PERL_CONTEXT*)NULL;
11393
11394 /* look for it in the table first */
11395 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
11396 if (ncxs)
11397 return ncxs;
11398
11399 /* create anew and remember what it is */
c2d565bf 11400 Newx(ncxs, max + 1, PERL_CONTEXT);
1d7c1841 11401 ptr_table_store(PL_ptr_table, cxs, ncxs);
c2d565bf 11402 Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
1d7c1841
GS
11403
11404 while (ix >= 0) {
c445ea15 11405 PERL_CONTEXT * const ncx = &ncxs[ix];
c2d565bf 11406 if (CxTYPE(ncx) == CXt_SUBST) {
1d7c1841
GS
11407 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
11408 }
11409 else {
c2d565bf 11410 switch (CxTYPE(ncx)) {
1d7c1841 11411 case CXt_SUB:
c2d565bf
NC
11412 ncx->blk_sub.cv = (ncx->blk_sub.olddepth == 0
11413 ? cv_dup_inc(ncx->blk_sub.cv, param)
11414 : cv_dup(ncx->blk_sub.cv,param));
bafb2adc 11415 ncx->blk_sub.argarray = (CxHASARGS(ncx)
c2d565bf
NC
11416 ? av_dup_inc(ncx->blk_sub.argarray,
11417 param)
7d49f689 11418 : NULL);
c2d565bf
NC
11419 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,
11420 param);
d8d97e70 11421 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
c2d565bf 11422 ncx->blk_sub.oldcomppad);
1d7c1841
GS
11423 break;
11424 case CXt_EVAL:
c2d565bf
NC
11425 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
11426 param);
11427 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
1d7c1841 11428 break;
d01136d6 11429 case CXt_LOOP_LAZYSV:
d01136d6
BS
11430 ncx->blk_loop.state_u.lazysv.end
11431 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
840fe433
NC
11432 /* We are taking advantage of av_dup_inc and sv_dup_inc
11433 actually being the same function, and order equivalance of
11434 the two unions.
11435 We can assert the later [but only at run time :-(] */
11436 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
11437 (void *) &ncx->blk_loop.state_u.lazysv.cur);
3b719c58 11438 case CXt_LOOP_FOR:
d01136d6
BS
11439 ncx->blk_loop.state_u.ary.ary
11440 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
11441 case CXt_LOOP_LAZYIV:
3b719c58 11442 case CXt_LOOP_PLAIN:
e846cb92
NC
11443 if (CxPADLOOP(ncx)) {
11444 ncx->blk_loop.oldcomppad
11445 = (PAD*)ptr_table_fetch(PL_ptr_table,
11446 ncx->blk_loop.oldcomppad);
11447 } else {
11448 ncx->blk_loop.oldcomppad
159b6efe
NC
11449 = (PAD*)gv_dup((const GV *)ncx->blk_loop.oldcomppad,
11450 param);
e846cb92 11451 }
1d7c1841
GS
11452 break;
11453 case CXt_FORMAT:
f9c764c5
NC
11454 ncx->blk_format.cv = cv_dup(ncx->blk_format.cv, param);
11455 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param);
11456 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
c2d565bf 11457 param);
1d7c1841
GS
11458 break;
11459 case CXt_BLOCK:
11460 case CXt_NULL:
11461 break;
11462 }
11463 }
11464 --ix;
11465 }
11466 return ncxs;
11467}
11468
645c22ef
DM
11469/* duplicate a stack info structure */
11470
1d7c1841 11471PERL_SI *
a8fc9800 11472Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
1d7c1841
GS
11473{
11474 PERL_SI *nsi;
11475
7918f24d
NC
11476 PERL_ARGS_ASSERT_SI_DUP;
11477
1d7c1841
GS
11478 if (!si)
11479 return (PERL_SI*)NULL;
11480
11481 /* look for it in the table first */
11482 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
11483 if (nsi)
11484 return nsi;
11485
11486 /* create anew and remember what it is */
a02a5408 11487 Newxz(nsi, 1, PERL_SI);
1d7c1841
GS
11488 ptr_table_store(PL_ptr_table, si, nsi);
11489
d2d73c3e 11490 nsi->si_stack = av_dup_inc(si->si_stack, param);
1d7c1841
GS
11491 nsi->si_cxix = si->si_cxix;
11492 nsi->si_cxmax = si->si_cxmax;
d2d73c3e 11493 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
1d7c1841 11494 nsi->si_type = si->si_type;
d2d73c3e
AB
11495 nsi->si_prev = si_dup(si->si_prev, param);
11496 nsi->si_next = si_dup(si->si_next, param);
1d7c1841
GS
11497 nsi->si_markoff = si->si_markoff;
11498
11499 return nsi;
11500}
11501
11502#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
11503#define TOPINT(ss,ix) ((ss)[ix].any_i32)
11504#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
11505#define TOPLONG(ss,ix) ((ss)[ix].any_long)
11506#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
11507#define TOPIV(ss,ix) ((ss)[ix].any_iv)
c6bf6a65
NC
11508#define POPUV(ss,ix) ((ss)[--(ix)].any_uv)
11509#define TOPUV(ss,ix) ((ss)[ix].any_uv)
38d8b13e
HS
11510#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
11511#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
1d7c1841
GS
11512#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
11513#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
11514#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
11515#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
11516#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
11517#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11518
11519/* XXXXX todo */
11520#define pv_dup_inc(p) SAVEPV(p)
11521#define pv_dup(p) SAVEPV(p)
11522#define svp_dup_inc(p,pp) any_dup(p,pp)
11523
645c22ef
DM
11524/* map any object to the new equivent - either something in the
11525 * ptr table, or something in the interpreter structure
11526 */
11527
1d7c1841 11528void *
53c1dcc0 11529Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
1d7c1841
GS
11530{
11531 void *ret;
11532
7918f24d
NC
11533 PERL_ARGS_ASSERT_ANY_DUP;
11534
1d7c1841
GS
11535 if (!v)
11536 return (void*)NULL;
11537
11538 /* look for it in the table first */
11539 ret = ptr_table_fetch(PL_ptr_table, v);
11540 if (ret)
11541 return ret;
11542
11543 /* see if it is part of the interpreter structure */
11544 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
acfe0abc 11545 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
05ec9bb3 11546 else {
1d7c1841 11547 ret = v;
05ec9bb3 11548 }
1d7c1841
GS
11549
11550 return ret;
11551}
11552
645c22ef
DM
11553/* duplicate the save stack */
11554
1d7c1841 11555ANY *
a8fc9800 11556Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
1d7c1841 11557{
53d44271 11558 dVAR;
907b3e23
DM
11559 ANY * const ss = proto_perl->Isavestack;
11560 const I32 max = proto_perl->Isavestack_max;
11561 I32 ix = proto_perl->Isavestack_ix;
1d7c1841 11562 ANY *nss;
daba3364 11563 const SV *sv;
1d193675
NC
11564 const GV *gv;
11565 const AV *av;
11566 const HV *hv;
1d7c1841
GS
11567 void* ptr;
11568 int intval;
11569 long longval;
11570 GP *gp;
11571 IV iv;
b24356f5 11572 I32 i;
c4e33207 11573 char *c = NULL;
1d7c1841 11574 void (*dptr) (void*);
acfe0abc 11575 void (*dxptr) (pTHX_ void*);
1d7c1841 11576
7918f24d
NC
11577 PERL_ARGS_ASSERT_SS_DUP;
11578
a02a5408 11579 Newxz(nss, max, ANY);
1d7c1841
GS
11580
11581 while (ix > 0) {
c6bf6a65
NC
11582 const UV uv = POPUV(ss,ix);
11583 const U8 type = (U8)uv & SAVE_MASK;
11584
11585 TOPUV(nss,ix) = uv;
b24356f5 11586 switch (type) {
cdcdfc56
NC
11587 case SAVEt_CLEARSV:
11588 break;
3e07292d 11589 case SAVEt_HELEM: /* hash element */
daba3364 11590 sv = (const SV *)POPPTR(ss,ix);
3e07292d
NC
11591 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11592 /* fall through */
1d7c1841 11593 case SAVEt_ITEM: /* normal string */
a41cc44e 11594 case SAVEt_SV: /* scalar reference */
daba3364 11595 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11596 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
11597 /* fall through */
11598 case SAVEt_FREESV:
11599 case SAVEt_MORTALIZESV:
daba3364 11600 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11601 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 11602 break;
05ec9bb3
NIS
11603 case SAVEt_SHARED_PVREF: /* char* in shared space */
11604 c = (char*)POPPTR(ss,ix);
11605 TOPPTR(nss,ix) = savesharedpv(c);
11606 ptr = POPPTR(ss,ix);
11607 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11608 break;
1d7c1841
GS
11609 case SAVEt_GENERIC_SVREF: /* generic sv */
11610 case SAVEt_SVREF: /* scalar reference */
daba3364 11611 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11612 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
11613 ptr = POPPTR(ss,ix);
11614 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11615 break;
a41cc44e 11616 case SAVEt_HV: /* hash reference */
1d7c1841 11617 case SAVEt_AV: /* array reference */
daba3364 11618 sv = (const SV *) POPPTR(ss,ix);
337d28f5 11619 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
11620 /* fall through */
11621 case SAVEt_COMPPAD:
11622 case SAVEt_NSTAB:
daba3364 11623 sv = (const SV *) POPPTR(ss,ix);
3e07292d 11624 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
11625 break;
11626 case SAVEt_INT: /* int reference */
11627 ptr = POPPTR(ss,ix);
11628 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11629 intval = (int)POPINT(ss,ix);
11630 TOPINT(nss,ix) = intval;
11631 break;
11632 case SAVEt_LONG: /* long reference */
11633 ptr = POPPTR(ss,ix);
11634 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11635 longval = (long)POPLONG(ss,ix);
11636 TOPLONG(nss,ix) = longval;
11637 break;
11638 case SAVEt_I32: /* I32 reference */
88effcc9 11639 case SAVEt_COP_ARYBASE: /* call CopARYBASE_set */
1d7c1841
GS
11640 ptr = POPPTR(ss,ix);
11641 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
1ccabee8 11642 i = POPINT(ss,ix);
1d7c1841
GS
11643 TOPINT(nss,ix) = i;
11644 break;
11645 case SAVEt_IV: /* IV reference */
11646 ptr = POPPTR(ss,ix);
11647 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11648 iv = POPIV(ss,ix);
11649 TOPIV(nss,ix) = iv;
11650 break;
a41cc44e
NC
11651 case SAVEt_HPTR: /* HV* reference */
11652 case SAVEt_APTR: /* AV* reference */
1d7c1841
GS
11653 case SAVEt_SPTR: /* SV* reference */
11654 ptr = POPPTR(ss,ix);
11655 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 11656 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11657 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
11658 break;
11659 case SAVEt_VPTR: /* random* reference */
11660 ptr = POPPTR(ss,ix);
11661 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
65504245 11662 /* Fall through */
994d373a 11663 case SAVEt_INT_SMALL:
89abef21 11664 case SAVEt_I32_SMALL:
c9441fce 11665 case SAVEt_I16: /* I16 reference */
6c61c2d4 11666 case SAVEt_I8: /* I8 reference */
65504245 11667 case SAVEt_BOOL:
1d7c1841
GS
11668 ptr = POPPTR(ss,ix);
11669 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11670 break;
b03d03b0 11671 case SAVEt_GENERIC_PVREF: /* generic char* */
1d7c1841
GS
11672 case SAVEt_PPTR: /* char* reference */
11673 ptr = POPPTR(ss,ix);
11674 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11675 c = (char*)POPPTR(ss,ix);
11676 TOPPTR(nss,ix) = pv_dup(c);
11677 break;
1d7c1841 11678 case SAVEt_GP: /* scalar reference */
b9e00b79
LR
11679 gv = (const GV *)POPPTR(ss,ix);
11680 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
1d7c1841 11681 gp = (GP*)POPPTR(ss,ix);
d2d73c3e 11682 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
1d7c1841 11683 (void)GpREFCNT_inc(gp);
bbda9cad
VP
11684 i = POPINT(ss,ix);
11685 TOPINT(nss,ix) = i;
b9e00b79 11686 break;
1d7c1841
GS
11687 case SAVEt_FREEOP:
11688 ptr = POPPTR(ss,ix);
11689 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11690 /* these are assumed to be refcounted properly */
53c1dcc0 11691 OP *o;
1d7c1841
GS
11692 switch (((OP*)ptr)->op_type) {
11693 case OP_LEAVESUB:
11694 case OP_LEAVESUBLV:
11695 case OP_LEAVEEVAL:
11696 case OP_LEAVE:
11697 case OP_SCOPE:
11698 case OP_LEAVEWRITE:
e977893f
GS
11699 TOPPTR(nss,ix) = ptr;
11700 o = (OP*)ptr;
d3c72c2a 11701 OP_REFCNT_LOCK;
594cd643 11702 (void) OpREFCNT_inc(o);
d3c72c2a 11703 OP_REFCNT_UNLOCK;
1d7c1841
GS
11704 break;
11705 default:
5f66b61c 11706 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
11707 break;
11708 }
11709 }
11710 else
5f66b61c 11711 TOPPTR(nss,ix) = NULL;
1d7c1841 11712 break;
1d7c1841 11713 case SAVEt_DELETE:
1d193675 11714 hv = (const HV *)POPPTR(ss,ix);
d2d73c3e 11715 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
35d4f826
NC
11716 i = POPINT(ss,ix);
11717 TOPINT(nss,ix) = i;
8e41545f
NC
11718 /* Fall through */
11719 case SAVEt_FREEPV:
1d7c1841
GS
11720 c = (char*)POPPTR(ss,ix);
11721 TOPPTR(nss,ix) = pv_dup_inc(c);
35d4f826 11722 break;
3e07292d 11723 case SAVEt_STACK_POS: /* Position on Perl stack */
1d7c1841
GS
11724 i = POPINT(ss,ix);
11725 TOPINT(nss,ix) = i;
11726 break;
11727 case SAVEt_DESTRUCTOR:
11728 ptr = POPPTR(ss,ix);
11729 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11730 dptr = POPDPTR(ss,ix);
8141890a
JH
11731 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
11732 any_dup(FPTR2DPTR(void *, dptr),
11733 proto_perl));
1d7c1841
GS
11734 break;
11735 case SAVEt_DESTRUCTOR_X:
11736 ptr = POPPTR(ss,ix);
11737 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11738 dxptr = POPDXPTR(ss,ix);
8141890a
JH
11739 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
11740 any_dup(FPTR2DPTR(void *, dxptr),
11741 proto_perl));
1d7c1841
GS
11742 break;
11743 case SAVEt_REGCONTEXT:
11744 case SAVEt_ALLOC:
1be36ce0 11745 ix -= uv >> SAVE_TIGHT_SHIFT;
1d7c1841 11746 break;
1d7c1841 11747 case SAVEt_AELEM: /* array element */
daba3364 11748 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11749 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
11750 i = POPINT(ss,ix);
11751 TOPINT(nss,ix) = i;
502c6561 11752 av = (const AV *)POPPTR(ss,ix);
d2d73c3e 11753 TOPPTR(nss,ix) = av_dup_inc(av, param);
1d7c1841 11754 break;
1d7c1841
GS
11755 case SAVEt_OP:
11756 ptr = POPPTR(ss,ix);
11757 TOPPTR(nss,ix) = ptr;
11758 break;
11759 case SAVEt_HINTS:
b3ca2e83 11760 ptr = POPPTR(ss,ix);
080ac856 11761 if (ptr) {
7b6dd8c3 11762 HINTS_REFCNT_LOCK;
080ac856 11763 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
7b6dd8c3
NC
11764 HINTS_REFCNT_UNLOCK;
11765 }
cbb1fbea 11766 TOPPTR(nss,ix) = ptr;
601cee3b
NC
11767 i = POPINT(ss,ix);
11768 TOPINT(nss,ix) = i;
a8f8b6a7 11769 if (i & HINT_LOCALIZE_HH) {
1d193675 11770 hv = (const HV *)POPPTR(ss,ix);
a8f8b6a7
NC
11771 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11772 }
1d7c1841 11773 break;
09edbca0 11774 case SAVEt_PADSV_AND_MORTALIZE:
c3564e5c
GS
11775 longval = (long)POPLONG(ss,ix);
11776 TOPLONG(nss,ix) = longval;
11777 ptr = POPPTR(ss,ix);
11778 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 11779 sv = (const SV *)POPPTR(ss,ix);
09edbca0 11780 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
c3564e5c 11781 break;
8bd2680e
MHM
11782 case SAVEt_SET_SVFLAGS:
11783 i = POPINT(ss,ix);
11784 TOPINT(nss,ix) = i;
11785 i = POPINT(ss,ix);
11786 TOPINT(nss,ix) = i;
daba3364 11787 sv = (const SV *)POPPTR(ss,ix);
8bd2680e
MHM
11788 TOPPTR(nss,ix) = sv_dup(sv, param);
11789 break;
5bfb7d0e
NC
11790 case SAVEt_RE_STATE:
11791 {
11792 const struct re_save_state *const old_state
11793 = (struct re_save_state *)
11794 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11795 struct re_save_state *const new_state
11796 = (struct re_save_state *)
11797 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11798
11799 Copy(old_state, new_state, 1, struct re_save_state);
11800 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
11801
11802 new_state->re_state_bostr
11803 = pv_dup(old_state->re_state_bostr);
11804 new_state->re_state_reginput
11805 = pv_dup(old_state->re_state_reginput);
5bfb7d0e
NC
11806 new_state->re_state_regeol
11807 = pv_dup(old_state->re_state_regeol);
f0ab9afb
NC
11808 new_state->re_state_regoffs
11809 = (regexp_paren_pair*)
11810 any_dup(old_state->re_state_regoffs, proto_perl);
5bfb7d0e 11811 new_state->re_state_reglastparen
11b79775
DD
11812 = (U32*) any_dup(old_state->re_state_reglastparen,
11813 proto_perl);
5bfb7d0e 11814 new_state->re_state_reglastcloseparen
11b79775 11815 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
5bfb7d0e 11816 proto_perl);
5bfb7d0e
NC
11817 /* XXX This just has to be broken. The old save_re_context
11818 code did SAVEGENERICPV(PL_reg_start_tmp);
11819 PL_reg_start_tmp is char **.
11820 Look above to what the dup code does for
11821 SAVEt_GENERIC_PVREF
11822 It can never have worked.
11823 So this is merely a faithful copy of the exiting bug: */
11824 new_state->re_state_reg_start_tmp
11825 = (char **) pv_dup((char *)
11826 old_state->re_state_reg_start_tmp);
11827 /* I assume that it only ever "worked" because no-one called
11828 (pseudo)fork while the regexp engine had re-entered itself.
11829 */
5bfb7d0e
NC
11830#ifdef PERL_OLD_COPY_ON_WRITE
11831 new_state->re_state_nrs
11832 = sv_dup(old_state->re_state_nrs, param);
11833#endif
11834 new_state->re_state_reg_magic
11b79775
DD
11835 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
11836 proto_perl);
5bfb7d0e 11837 new_state->re_state_reg_oldcurpm
11b79775
DD
11838 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
11839 proto_perl);
5bfb7d0e 11840 new_state->re_state_reg_curpm
11b79775
DD
11841 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
11842 proto_perl);
5bfb7d0e
NC
11843 new_state->re_state_reg_oldsaved
11844 = pv_dup(old_state->re_state_reg_oldsaved);
11845 new_state->re_state_reg_poscache
11846 = pv_dup(old_state->re_state_reg_poscache);
5bfb7d0e
NC
11847 new_state->re_state_reg_starttry
11848 = pv_dup(old_state->re_state_reg_starttry);
5bfb7d0e
NC
11849 break;
11850 }
68da3b2f
NC
11851 case SAVEt_COMPILE_WARNINGS:
11852 ptr = POPPTR(ss,ix);
11853 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
7b6dd8c3 11854 break;
7c197c94
DM
11855 case SAVEt_PARSER:
11856 ptr = POPPTR(ss,ix);
456084a8 11857 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
7c197c94 11858 break;
1d7c1841 11859 default:
147bc374
NC
11860 Perl_croak(aTHX_
11861 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
1d7c1841
GS
11862 }
11863 }
11864
bd81e77b
NC
11865 return nss;
11866}
11867
11868
11869/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11870 * flag to the result. This is done for each stash before cloning starts,
11871 * so we know which stashes want their objects cloned */
11872
11873static void
f30de749 11874do_mark_cloneable_stash(pTHX_ SV *const sv)
bd81e77b 11875{
1d193675 11876 const HEK * const hvname = HvNAME_HEK((const HV *)sv);
bd81e77b 11877 if (hvname) {
85fbaab2 11878 GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
bd81e77b
NC
11879 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11880 if (cloner && GvCV(cloner)) {
11881 dSP;
11882 UV status;
11883
11884 ENTER;
11885 SAVETMPS;
11886 PUSHMARK(SP);
6e449a3a 11887 mXPUSHs(newSVhek(hvname));
bd81e77b 11888 PUTBACK;
daba3364 11889 call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
bd81e77b
NC
11890 SPAGAIN;
11891 status = POPu;
11892 PUTBACK;
11893 FREETMPS;
11894 LEAVE;
11895 if (status)
11896 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
11897 }
11898 }
11899}
11900
11901
11902
11903/*
11904=for apidoc perl_clone
11905
11906Create and return a new interpreter by cloning the current one.
11907
11908perl_clone takes these flags as parameters:
11909
11910CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
11911without it we only clone the data and zero the stacks,
11912with it we copy the stacks and the new perl interpreter is
11913ready to run at the exact same point as the previous one.
11914The pseudo-fork code uses COPY_STACKS while the
878090d5 11915threads->create doesn't.
bd81e77b
NC
11916
11917CLONEf_KEEP_PTR_TABLE
11918perl_clone keeps a ptr_table with the pointer of the old
11919variable as a key and the new variable as a value,
11920this allows it to check if something has been cloned and not
11921clone it again but rather just use the value and increase the
11922refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
11923the ptr_table using the function
11924C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
11925reason to keep it around is if you want to dup some of your own
11926variable who are outside the graph perl scans, example of this
11927code is in threads.xs create
11928
11929CLONEf_CLONE_HOST
11930This is a win32 thing, it is ignored on unix, it tells perls
11931win32host code (which is c++) to clone itself, this is needed on
11932win32 if you want to run two threads at the same time,
11933if you just want to do some stuff in a separate perl interpreter
11934and then throw it away and return to the original one,
11935you don't need to do anything.
11936
11937=cut
11938*/
11939
11940/* XXX the above needs expanding by someone who actually understands it ! */
11941EXTERN_C PerlInterpreter *
11942perl_clone_host(PerlInterpreter* proto_perl, UV flags);
11943
11944PerlInterpreter *
11945perl_clone(PerlInterpreter *proto_perl, UV flags)
11946{
11947 dVAR;
11948#ifdef PERL_IMPLICIT_SYS
11949
7918f24d
NC
11950 PERL_ARGS_ASSERT_PERL_CLONE;
11951
bd81e77b
NC
11952 /* perlhost.h so we need to call into it
11953 to clone the host, CPerlHost should have a c interface, sky */
11954
11955 if (flags & CLONEf_CLONE_HOST) {
11956 return perl_clone_host(proto_perl,flags);
11957 }
11958 return perl_clone_using(proto_perl, flags,
11959 proto_perl->IMem,
11960 proto_perl->IMemShared,
11961 proto_perl->IMemParse,
11962 proto_perl->IEnv,
11963 proto_perl->IStdIO,
11964 proto_perl->ILIO,
11965 proto_perl->IDir,
11966 proto_perl->ISock,
11967 proto_perl->IProc);
11968}
11969
11970PerlInterpreter *
11971perl_clone_using(PerlInterpreter *proto_perl, UV flags,
11972 struct IPerlMem* ipM, struct IPerlMem* ipMS,
11973 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
11974 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
11975 struct IPerlDir* ipD, struct IPerlSock* ipS,
11976 struct IPerlProc* ipP)
11977{
11978 /* XXX many of the string copies here can be optimized if they're
11979 * constants; they need to be allocated as common memory and just
11980 * their pointers copied. */
11981
11982 IV i;
11983 CLONE_PARAMS clone_params;
5f66b61c 11984 CLONE_PARAMS* const param = &clone_params;
bd81e77b 11985
5f66b61c 11986 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
7918f24d
NC
11987
11988 PERL_ARGS_ASSERT_PERL_CLONE_USING;
bd81e77b
NC
11989#else /* !PERL_IMPLICIT_SYS */
11990 IV i;
11991 CLONE_PARAMS clone_params;
11992 CLONE_PARAMS* param = &clone_params;
5f66b61c 11993 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
7918f24d
NC
11994
11995 PERL_ARGS_ASSERT_PERL_CLONE;
b59cce4c 11996#endif /* PERL_IMPLICIT_SYS */
7918f24d 11997
bd81e77b
NC
11998 /* for each stash, determine whether its objects should be cloned */
11999 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12000 PERL_SET_THX(my_perl);
12001
b59cce4c 12002#ifdef DEBUGGING
7e337ee0 12003 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
12004 PL_op = NULL;
12005 PL_curcop = NULL;
bd81e77b
NC
12006 PL_markstack = 0;
12007 PL_scopestack = 0;
cbdd5331 12008 PL_scopestack_name = 0;
bd81e77b
NC
12009 PL_savestack = 0;
12010 PL_savestack_ix = 0;
12011 PL_savestack_max = -1;
12012 PL_sig_pending = 0;
b8328dae 12013 PL_parser = NULL;
bd81e77b 12014 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
02d9cd5e 12015# ifdef DEBUG_LEAKING_SCALARS
4149198f 12016 PL_sv_serial = (((U32)my_perl >> 2) & 0xfff) * 1000000;
02d9cd5e 12017# endif
b59cce4c 12018#else /* !DEBUGGING */
bd81e77b 12019 Zero(my_perl, 1, PerlInterpreter);
b59cce4c 12020#endif /* DEBUGGING */
742421a6
DM
12021
12022#ifdef PERL_IMPLICIT_SYS
12023 /* host pointers */
12024 PL_Mem = ipM;
12025 PL_MemShared = ipMS;
12026 PL_MemParse = ipMP;
12027 PL_Env = ipE;
12028 PL_StdIO = ipStd;
12029 PL_LIO = ipLIO;
12030 PL_Dir = ipD;
12031 PL_Sock = ipS;
12032 PL_Proc = ipP;
12033#endif /* PERL_IMPLICIT_SYS */
12034
bd81e77b 12035 param->flags = flags;
f7abe70b
NC
12036 /* Nothing in the core code uses this, but we make it available to
12037 extensions (using mg_dup). */
bd81e77b 12038 param->proto_perl = proto_perl;
f7abe70b
NC
12039 /* Likely nothing will use this, but it is initialised to be consistent
12040 with Perl_clone_params_new(). */
12041 param->proto_perl = my_perl;
d08d57ef 12042 param->unreferenced = NULL;
bd81e77b 12043
7cb608b5
NC
12044 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12045
fdda85ca 12046 PL_body_arenas = NULL;
bd81e77b
NC
12047 Zero(&PL_body_roots, 1, PL_body_roots);
12048
12049 PL_nice_chunk = NULL;
12050 PL_nice_chunk_size = 0;
12051 PL_sv_count = 0;
12052 PL_sv_objcount = 0;
a0714e2c
SS
12053 PL_sv_root = NULL;
12054 PL_sv_arenaroot = NULL;
bd81e77b
NC
12055
12056 PL_debug = proto_perl->Idebug;
12057
12058 PL_hash_seed = proto_perl->Ihash_seed;
12059 PL_rehash_seed = proto_perl->Irehash_seed;
12060
12061#ifdef USE_REENTRANT_API
12062 /* XXX: things like -Dm will segfault here in perlio, but doing
12063 * PERL_SET_CONTEXT(proto_perl);
12064 * breaks too many other things
12065 */
12066 Perl_reentrant_init(aTHX);
12067#endif
12068
12069 /* create SV map for pointer relocation */
12070 PL_ptr_table = ptr_table_new();
12071
12072 /* initialize these special pointers as early as possible */
12073 SvANY(&PL_sv_undef) = NULL;
12074 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
12075 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
12076 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
12077
12078 SvANY(&PL_sv_no) = new_XPVNV();
12079 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
12080 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12081 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 12082 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
bd81e77b
NC
12083 SvCUR_set(&PL_sv_no, 0);
12084 SvLEN_set(&PL_sv_no, 1);
12085 SvIV_set(&PL_sv_no, 0);
12086 SvNV_set(&PL_sv_no, 0);
12087 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
12088
12089 SvANY(&PL_sv_yes) = new_XPVNV();
12090 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
12091 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12092 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 12093 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
bd81e77b
NC
12094 SvCUR_set(&PL_sv_yes, 1);
12095 SvLEN_set(&PL_sv_yes, 2);
12096 SvIV_set(&PL_sv_yes, 1);
12097 SvNV_set(&PL_sv_yes, 1);
12098 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
12099
a1f97a07
DM
12100 /* dbargs array probably holds garbage */
12101 PL_dbargs = NULL;
7fa38291 12102
bd81e77b
NC
12103 /* create (a non-shared!) shared string table */
12104 PL_strtab = newHV();
12105 HvSHAREKEYS_off(PL_strtab);
12106 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
12107 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
12108
12109 PL_compiling = proto_perl->Icompiling;
12110
12111 /* These two PVs will be free'd special way so must set them same way op.c does */
12112 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
12113 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
12114
12115 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
12116 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
12117
12118 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
72dc9ed5 12119 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
c28fe1ec 12120 if (PL_compiling.cop_hints_hash) {
cbb1fbea 12121 HINTS_REFCNT_LOCK;
c28fe1ec 12122 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
cbb1fbea
NC
12123 HINTS_REFCNT_UNLOCK;
12124 }
907b3e23 12125 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
5892a4d4
NC
12126#ifdef PERL_DEBUG_READONLY_OPS
12127 PL_slabs = NULL;
12128 PL_slab_count = 0;
12129#endif
bd81e77b
NC
12130
12131 /* pseudo environmental stuff */
12132 PL_origargc = proto_perl->Iorigargc;
12133 PL_origargv = proto_perl->Iorigargv;
12134
12135 param->stashes = newAV(); /* Setup array of objects to call clone on */
842c4123
NC
12136 /* This makes no difference to the implementation, as it always pushes
12137 and shifts pointers to other SVs without changing their reference
12138 count, with the array becoming empty before it is freed. However, it
12139 makes it conceptually clear what is going on, and will avoid some
12140 work inside av.c, filling slots between AvFILL() and AvMAX() with
12141 &PL_sv_undef, and SvREFCNT_dec()ing those. */
12142 AvREAL_off(param->stashes);
bd81e77b 12143
d08d57ef
NC
12144 if (!(flags & CLONEf_COPY_STACKS)) {
12145 param->unreferenced = newAV();
d08d57ef
NC
12146 }
12147
bd81e77b
NC
12148 /* Set tainting stuff before PerlIO_debug can possibly get called */
12149 PL_tainting = proto_perl->Itainting;
12150 PL_taint_warn = proto_perl->Itaint_warn;
12151
12152#ifdef PERLIO_LAYERS
12153 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
12154 PerlIO_clone(aTHX_ proto_perl, param);
12155#endif
12156
12157 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
12158 PL_incgv = gv_dup(proto_perl->Iincgv, param);
12159 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
12160 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
12161 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
12162 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
12163
12164 /* switches */
12165 PL_minus_c = proto_perl->Iminus_c;
12166 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
12167 PL_localpatches = proto_perl->Ilocalpatches;
12168 PL_splitstr = proto_perl->Isplitstr;
bd81e77b
NC
12169 PL_minus_n = proto_perl->Iminus_n;
12170 PL_minus_p = proto_perl->Iminus_p;
12171 PL_minus_l = proto_perl->Iminus_l;
12172 PL_minus_a = proto_perl->Iminus_a;
bc9b29db 12173 PL_minus_E = proto_perl->Iminus_E;
bd81e77b
NC
12174 PL_minus_F = proto_perl->Iminus_F;
12175 PL_doswitches = proto_perl->Idoswitches;
12176 PL_dowarn = proto_perl->Idowarn;
12177 PL_doextract = proto_perl->Idoextract;
12178 PL_sawampersand = proto_perl->Isawampersand;
12179 PL_unsafe = proto_perl->Iunsafe;
12180 PL_inplace = SAVEPV(proto_perl->Iinplace);
12181 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
12182 PL_perldb = proto_perl->Iperldb;
12183 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12184 PL_exit_flags = proto_perl->Iexit_flags;
12185
12186 /* magical thingies */
12187 /* XXX time(&PL_basetime) when asked for? */
12188 PL_basetime = proto_perl->Ibasetime;
12189 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
12190
12191 PL_maxsysfd = proto_perl->Imaxsysfd;
bd81e77b
NC
12192 PL_statusvalue = proto_perl->Istatusvalue;
12193#ifdef VMS
12194 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
12195#else
12196 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12197#endif
12198 PL_encoding = sv_dup(proto_perl->Iencoding, param);
12199
76f68e9b
MHM
12200 sv_setpvs(PERL_DEBUG_PAD(0), ""); /* For regex debugging. */
12201 sv_setpvs(PERL_DEBUG_PAD(1), ""); /* ext/re needs these */
12202 sv_setpvs(PERL_DEBUG_PAD(2), ""); /* even without DEBUGGING. */
bd81e77b 12203
84da74a7 12204
f9f4320a 12205 /* RE engine related */
84da74a7
YO
12206 Zero(&PL_reg_state, 1, struct re_save_state);
12207 PL_reginterp_cnt = 0;
12208 PL_regmatch_slab = NULL;
12209
bd81e77b 12210 /* Clone the regex array */
937c6efd
NC
12211 /* ORANGE FIXME for plugins, probably in the SV dup code.
12212 newSViv(PTR2IV(CALLREGDUPE(
12213 INT2PTR(REGEXP *, SvIVX(regex)), param))))
12214 */
12215 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
bd81e77b
NC
12216 PL_regex_pad = AvARRAY(PL_regex_padav);
12217
12218 /* shortcuts to various I/O objects */
e23d9e2f 12219 PL_ofsgv = gv_dup(proto_perl->Iofsgv, param);
bd81e77b
NC
12220 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
12221 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
12222 PL_defgv = gv_dup(proto_perl->Idefgv, param);
12223 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
12224 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
12225 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
1d7c1841 12226
bd81e77b
NC
12227 /* shortcuts to regexp stuff */
12228 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
9660f481 12229
bd81e77b
NC
12230 /* shortcuts to misc objects */
12231 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
9660f481 12232
bd81e77b
NC
12233 /* shortcuts to debugging objects */
12234 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
12235 PL_DBline = gv_dup(proto_perl->IDBline, param);
12236 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
12237 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
12238 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
12239 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
9660f481 12240
bd81e77b 12241 /* symbol tables */
907b3e23
DM
12242 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
12243 PL_curstash = hv_dup(proto_perl->Icurstash, param);
bd81e77b
NC
12244 PL_debstash = hv_dup(proto_perl->Idebstash, param);
12245 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
12246 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
12247
12248 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
12249 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
12250 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
3c10abe3
AG
12251 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
12252 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
bd81e77b
NC
12253 PL_endav = av_dup_inc(proto_perl->Iendav, param);
12254 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
12255 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
12256
12257 PL_sub_generation = proto_perl->Isub_generation;
dd69841b 12258 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
bd81e77b
NC
12259
12260 /* funky return mechanisms */
12261 PL_forkprocess = proto_perl->Iforkprocess;
12262
12263 /* subprocess state */
12264 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
12265
12266 /* internal state */
12267 PL_maxo = proto_perl->Imaxo;
12268 if (proto_perl->Iop_mask)
12269 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
12270 else
bd61b366 12271 PL_op_mask = NULL;
bd81e77b
NC
12272 /* PL_asserting = proto_perl->Iasserting; */
12273
12274 /* current interpreter roots */
12275 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
d3c72c2a 12276 OP_REFCNT_LOCK;
bd81e77b 12277 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
d3c72c2a 12278 OP_REFCNT_UNLOCK;
bd81e77b
NC
12279 PL_main_start = proto_perl->Imain_start;
12280 PL_eval_root = proto_perl->Ieval_root;
12281 PL_eval_start = proto_perl->Ieval_start;
12282
12283 /* runtime control stuff */
12284 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
bd81e77b
NC
12285
12286 PL_filemode = proto_perl->Ifilemode;
12287 PL_lastfd = proto_perl->Ilastfd;
12288 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
12289 PL_Argv = NULL;
bd61b366 12290 PL_Cmd = NULL;
bd81e77b 12291 PL_gensym = proto_perl->Igensym;
bd81e77b
NC
12292 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
12293 PL_laststatval = proto_perl->Ilaststatval;
12294 PL_laststype = proto_perl->Ilaststype;
a0714e2c 12295 PL_mess_sv = NULL;
bd81e77b
NC
12296
12297 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
12298
12299 /* interpreter atexit processing */
12300 PL_exitlistlen = proto_perl->Iexitlistlen;
12301 if (PL_exitlistlen) {
12302 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12303 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9660f481 12304 }
bd81e77b
NC
12305 else
12306 PL_exitlist = (PerlExitListEntry*)NULL;
f16dd614
DM
12307
12308 PL_my_cxt_size = proto_perl->Imy_cxt_size;
4c901e72 12309 if (PL_my_cxt_size) {
f16dd614
DM
12310 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
12311 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
53d44271 12312#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 12313 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
53d44271
JH
12314 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
12315#endif
f16dd614 12316 }
53d44271 12317 else {
f16dd614 12318 PL_my_cxt_list = (void**)NULL;
53d44271 12319#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 12320 PL_my_cxt_keys = (const char**)NULL;
53d44271
JH
12321#endif
12322 }
bd81e77b
NC
12323 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
12324 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
12325 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
12326
12327 PL_profiledata = NULL;
9660f481 12328
bd81e77b 12329 PL_compcv = cv_dup(proto_perl->Icompcv, param);
9660f481 12330
bd81e77b 12331 PAD_CLONE_VARS(proto_perl, param);
9660f481 12332
bd81e77b
NC
12333#ifdef HAVE_INTERP_INTERN
12334 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
12335#endif
645c22ef 12336
bd81e77b
NC
12337 /* more statics moved here */
12338 PL_generation = proto_perl->Igeneration;
12339 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
645c22ef 12340
bd81e77b
NC
12341 PL_in_clean_objs = proto_perl->Iin_clean_objs;
12342 PL_in_clean_all = proto_perl->Iin_clean_all;
6a78b4db 12343
bd81e77b
NC
12344 PL_uid = proto_perl->Iuid;
12345 PL_euid = proto_perl->Ieuid;
12346 PL_gid = proto_perl->Igid;
12347 PL_egid = proto_perl->Iegid;
12348 PL_nomemok = proto_perl->Inomemok;
12349 PL_an = proto_perl->Ian;
12350 PL_evalseq = proto_perl->Ievalseq;
12351 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
12352 PL_origalen = proto_perl->Iorigalen;
12353#ifdef PERL_USES_PL_PIDSTATUS
12354 PL_pidstatus = newHV(); /* XXX flag for cloning? */
12355#endif
12356 PL_osname = SAVEPV(proto_perl->Iosname);
12357 PL_sighandlerp = proto_perl->Isighandlerp;
6a78b4db 12358
bd81e77b 12359 PL_runops = proto_perl->Irunops;
6a78b4db 12360
199e78b7
DM
12361 PL_parser = parser_dup(proto_perl->Iparser, param);
12362
f0c5aa00
DM
12363 /* XXX this only works if the saved cop has already been cloned */
12364 if (proto_perl->Iparser) {
12365 PL_parser->saved_curcop = (COP*)any_dup(
12366 proto_perl->Iparser->saved_curcop,
12367 proto_perl);
12368 }
12369
bd81e77b
NC
12370 PL_subline = proto_perl->Isubline;
12371 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
c43294b8 12372
bd81e77b
NC
12373#ifdef FCRYPT
12374 PL_cryptseen = proto_perl->Icryptseen;
12375#endif
1d7c1841 12376
bd81e77b 12377 PL_hints = proto_perl->Ihints;
1d7c1841 12378
bd81e77b 12379 PL_amagic_generation = proto_perl->Iamagic_generation;
d2d73c3e 12380
bd81e77b
NC
12381#ifdef USE_LOCALE_COLLATE
12382 PL_collation_ix = proto_perl->Icollation_ix;
12383 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
12384 PL_collation_standard = proto_perl->Icollation_standard;
12385 PL_collxfrm_base = proto_perl->Icollxfrm_base;
12386 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
12387#endif /* USE_LOCALE_COLLATE */
1d7c1841 12388
bd81e77b
NC
12389#ifdef USE_LOCALE_NUMERIC
12390 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
12391 PL_numeric_standard = proto_perl->Inumeric_standard;
12392 PL_numeric_local = proto_perl->Inumeric_local;
12393 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
12394#endif /* !USE_LOCALE_NUMERIC */
1d7c1841 12395
bd81e77b
NC
12396 /* utf8 character classes */
12397 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
bd81e77b
NC
12398 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
12399 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
12400 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
12401 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
12402 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
12403 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
12404 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
12405 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
12406 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
12407 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
12408 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
12409 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
37e2e78e
KW
12410 PL_utf8_X_begin = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
12411 PL_utf8_X_extend = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
12412 PL_utf8_X_prepend = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
12413 PL_utf8_X_non_hangul = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
12414 PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
12415 PL_utf8_X_LV = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
12416 PL_utf8_X_LVT = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
12417 PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
12418 PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
12419 PL_utf8_X_LV_LVT_V = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
bd81e77b
NC
12420 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
12421 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
12422 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
12423 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
12424 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
12425 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
1d7c1841 12426
bd81e77b
NC
12427 /* Did the locale setup indicate UTF-8? */
12428 PL_utf8locale = proto_perl->Iutf8locale;
12429 /* Unicode features (see perlrun/-C) */
12430 PL_unicode = proto_perl->Iunicode;
1d7c1841 12431
bd81e77b
NC
12432 /* Pre-5.8 signals control */
12433 PL_signals = proto_perl->Isignals;
1d7c1841 12434
bd81e77b
NC
12435 /* times() ticks per second */
12436 PL_clocktick = proto_perl->Iclocktick;
1d7c1841 12437
bd81e77b
NC
12438 /* Recursion stopper for PerlIO_find_layer */
12439 PL_in_load_module = proto_perl->Iin_load_module;
8df990a8 12440
bd81e77b
NC
12441 /* sort() routine */
12442 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
e5dd39fc 12443
bd81e77b
NC
12444 /* Not really needed/useful since the reenrant_retint is "volatile",
12445 * but do it for consistency's sake. */
12446 PL_reentrant_retint = proto_perl->Ireentrant_retint;
1d7c1841 12447
bd81e77b
NC
12448 /* Hooks to shared SVs and locks. */
12449 PL_sharehook = proto_perl->Isharehook;
12450 PL_lockhook = proto_perl->Ilockhook;
12451 PL_unlockhook = proto_perl->Iunlockhook;
12452 PL_threadhook = proto_perl->Ithreadhook;
eba16661 12453 PL_destroyhook = proto_perl->Idestroyhook;
92f022bb 12454 PL_signalhook = proto_perl->Isignalhook;
1d7c1841 12455
bd81e77b
NC
12456#ifdef THREADS_HAVE_PIDS
12457 PL_ppid = proto_perl->Ippid;
12458#endif
1d7c1841 12459
bd81e77b 12460 /* swatch cache */
5c284bb0 12461 PL_last_swash_hv = NULL; /* reinits on demand */
bd81e77b
NC
12462 PL_last_swash_klen = 0;
12463 PL_last_swash_key[0]= '\0';
12464 PL_last_swash_tmps = (U8*)NULL;
12465 PL_last_swash_slen = 0;
1d7c1841 12466
bd81e77b
NC
12467 PL_glob_index = proto_perl->Iglob_index;
12468 PL_srand_called = proto_perl->Isrand_called;
05ec9bb3 12469
bd81e77b
NC
12470 if (proto_perl->Ipsig_pend) {
12471 Newxz(PL_psig_pend, SIG_SIZE, int);
12472 }
12473 else {
12474 PL_psig_pend = (int*)NULL;
12475 }
05ec9bb3 12476
d525a7b2
NC
12477 if (proto_perl->Ipsig_name) {
12478 Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
12479 sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
538f2e76 12480 param);
d525a7b2 12481 PL_psig_ptr = PL_psig_name + SIG_SIZE;
bd81e77b
NC
12482 }
12483 else {
12484 PL_psig_ptr = (SV**)NULL;
12485 PL_psig_name = (SV**)NULL;
12486 }
05ec9bb3 12487
907b3e23 12488 /* intrpvar.h stuff */
1d7c1841 12489
bd81e77b
NC
12490 if (flags & CLONEf_COPY_STACKS) {
12491 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
907b3e23
DM
12492 PL_tmps_ix = proto_perl->Itmps_ix;
12493 PL_tmps_max = proto_perl->Itmps_max;
12494 PL_tmps_floor = proto_perl->Itmps_floor;
e92c6be8 12495 Newx(PL_tmps_stack, PL_tmps_max, SV*);
1d8a41fe
JD
12496 sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
12497 PL_tmps_ix+1, param);
d2d73c3e 12498
bd81e77b 12499 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
907b3e23 12500 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
bd81e77b 12501 Newxz(PL_markstack, i, I32);
907b3e23
DM
12502 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
12503 - proto_perl->Imarkstack);
12504 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
12505 - proto_perl->Imarkstack);
12506 Copy(proto_perl->Imarkstack, PL_markstack,
bd81e77b 12507 PL_markstack_ptr - PL_markstack + 1, I32);
d2d73c3e 12508
bd81e77b
NC
12509 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
12510 * NOTE: unlike the others! */
907b3e23
DM
12511 PL_scopestack_ix = proto_perl->Iscopestack_ix;
12512 PL_scopestack_max = proto_perl->Iscopestack_max;
bd81e77b 12513 Newxz(PL_scopestack, PL_scopestack_max, I32);
907b3e23 12514 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
d419787a 12515
cbdd5331
JD
12516#ifdef DEBUGGING
12517 Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
12518 Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
12519#endif
bd81e77b 12520 /* NOTE: si_dup() looks at PL_markstack */
907b3e23 12521 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
d2d73c3e 12522
bd81e77b 12523 /* PL_curstack = PL_curstackinfo->si_stack; */
907b3e23
DM
12524 PL_curstack = av_dup(proto_perl->Icurstack, param);
12525 PL_mainstack = av_dup(proto_perl->Imainstack, param);
1d7c1841 12526
bd81e77b
NC
12527 /* next PUSHs() etc. set *(PL_stack_sp+1) */
12528 PL_stack_base = AvARRAY(PL_curstack);
907b3e23
DM
12529 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
12530 - proto_perl->Istack_base);
bd81e77b 12531 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
1d7c1841 12532
bd81e77b
NC
12533 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
12534 * NOTE: unlike the others! */
907b3e23
DM
12535 PL_savestack_ix = proto_perl->Isavestack_ix;
12536 PL_savestack_max = proto_perl->Isavestack_max;
bd81e77b
NC
12537 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
12538 PL_savestack = ss_dup(proto_perl, param);
12539 }
12540 else {
12541 init_stacks();
12542 ENTER; /* perl_destruct() wants to LEAVE; */
12543 }
1d7c1841 12544
907b3e23 12545 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
bd81e77b 12546 PL_top_env = &PL_start_env;
1d7c1841 12547
907b3e23 12548 PL_op = proto_perl->Iop;
4a4c6fe3 12549
a0714e2c 12550 PL_Sv = NULL;
bd81e77b 12551 PL_Xpv = (XPV*)NULL;
24792b8d 12552 my_perl->Ina = proto_perl->Ina;
1fcf4c12 12553
907b3e23
DM
12554 PL_statbuf = proto_perl->Istatbuf;
12555 PL_statcache = proto_perl->Istatcache;
12556 PL_statgv = gv_dup(proto_perl->Istatgv, param);
12557 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
bd81e77b 12558#ifdef HAS_TIMES
907b3e23 12559 PL_timesbuf = proto_perl->Itimesbuf;
bd81e77b 12560#endif
1d7c1841 12561
907b3e23
DM
12562 PL_tainted = proto_perl->Itainted;
12563 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
12564 PL_rs = sv_dup_inc(proto_perl->Irs, param);
12565 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
907b3e23
DM
12566 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
12567 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
12568 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
12569 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
12570 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
12571
febb3a6d 12572 PL_restartjmpenv = proto_perl->Irestartjmpenv;
907b3e23
DM
12573 PL_restartop = proto_perl->Irestartop;
12574 PL_in_eval = proto_perl->Iin_eval;
12575 PL_delaymagic = proto_perl->Idelaymagic;
12576 PL_dirty = proto_perl->Idirty;
12577 PL_localizing = proto_perl->Ilocalizing;
12578
12579 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
4608196e 12580 PL_hv_fetch_ent_mh = NULL;
907b3e23 12581 PL_modcount = proto_perl->Imodcount;
5f66b61c 12582 PL_lastgotoprobe = NULL;
907b3e23 12583 PL_dumpindent = proto_perl->Idumpindent;
1d7c1841 12584
907b3e23
DM
12585 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
12586 PL_sortstash = hv_dup(proto_perl->Isortstash, param);
12587 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param);
12588 PL_secondgv = gv_dup(proto_perl->Isecondgv, param);
bd61b366 12589 PL_efloatbuf = NULL; /* reinits on demand */
bd81e77b 12590 PL_efloatsize = 0; /* reinits on demand */
d2d73c3e 12591
bd81e77b 12592 /* regex stuff */
1d7c1841 12593
bd81e77b
NC
12594 PL_screamfirst = NULL;
12595 PL_screamnext = NULL;
12596 PL_maxscream = -1; /* reinits on demand */
a0714e2c 12597 PL_lastscream = NULL;
1d7c1841 12598
1d7c1841 12599
907b3e23 12600 PL_regdummy = proto_perl->Iregdummy;
bd81e77b
NC
12601 PL_colorset = 0; /* reinits PL_colors[] */
12602 /*PL_colors[6] = {0,0,0,0,0,0};*/
1d7c1841 12603
84da74a7 12604
1d7c1841 12605
bd81e77b 12606 /* Pluggable optimizer */
907b3e23 12607 PL_peepp = proto_perl->Ipeepp;
f37b8c3f
VP
12608 /* op_free() hook */
12609 PL_opfreehook = proto_perl->Iopfreehook;
1d7c1841 12610
bd81e77b 12611 PL_stashcache = newHV();
1d7c1841 12612
b7185faf 12613 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
907b3e23 12614 proto_perl->Iwatchaddr);
b7185faf
DM
12615 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
12616 if (PL_debug && PL_watchaddr) {
12617 PerlIO_printf(Perl_debug_log,
12618 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
907b3e23 12619 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
b7185faf
DM
12620 PTR2UV(PL_watchok));
12621 }
12622
a3e6e81e
NC
12623 PL_registered_mros = hv_dup_inc(proto_perl->Iregistered_mros, param);
12624
bd81e77b
NC
12625 /* Call the ->CLONE method, if it exists, for each of the stashes
12626 identified by sv_dup() above.
12627 */
12628 while(av_len(param->stashes) != -1) {
85fbaab2 12629 HV* const stash = MUTABLE_HV(av_shift(param->stashes));
bd81e77b
NC
12630 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12631 if (cloner && GvCV(cloner)) {
12632 dSP;
12633 ENTER;
12634 SAVETMPS;
12635 PUSHMARK(SP);
6e449a3a 12636 mXPUSHs(newSVhek(HvNAME_HEK(stash)));
bd81e77b 12637 PUTBACK;
daba3364 12638 call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
bd81e77b
NC
12639 FREETMPS;
12640 LEAVE;
12641 }
1d7c1841 12642 }
1d7c1841 12643
b0b93b3c
DM
12644 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12645 ptr_table_free(PL_ptr_table);
12646 PL_ptr_table = NULL;
12647 }
12648
d08d57ef 12649 if (!(flags & CLONEf_COPY_STACKS)) {
e4295668 12650 unreferenced_to_tmp_stack(param->unreferenced);
d08d57ef 12651 }
b0b93b3c 12652
bd81e77b 12653 SvREFCNT_dec(param->stashes);
1d7c1841 12654
bd81e77b
NC
12655 /* orphaned? eg threads->new inside BEGIN or use */
12656 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
b37c2d43 12657 SvREFCNT_inc_simple_void(PL_compcv);
bd81e77b
NC
12658 SAVEFREESV(PL_compcv);
12659 }
dd2155a4 12660
bd81e77b
NC
12661 return my_perl;
12662}
1d7c1841 12663
e4295668
NC
12664static void
12665S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
12666{
12667 PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
12668
12669 if (AvFILLp(unreferenced) > -1) {
12670 SV **svp = AvARRAY(unreferenced);
12671 SV **const last = svp + AvFILLp(unreferenced);
12672 SSize_t count = 0;
12673
12674 do {
04518cc3 12675 if (SvREFCNT(*svp) == 1)
e4295668
NC
12676 ++count;
12677 } while (++svp <= last);
12678
12679 EXTEND_MORTAL(count);
12680 svp = AvARRAY(unreferenced);
12681
12682 do {
04518cc3
NC
12683 if (SvREFCNT(*svp) == 1) {
12684 /* Our reference is the only one to this SV. This means that
12685 in this thread, the scalar effectively has a 0 reference.
12686 That doesn't work (cleanup never happens), so donate our
12687 reference to it onto the save stack. */
12688 PL_tmps_stack[++PL_tmps_ix] = *svp;
12689 } else {
12690 /* As an optimisation, because we are already walking the
12691 entire array, instead of above doing either
12692 SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
12693 release our reference to the scalar, so that at the end of
12694 the array owns zero references to the scalars it happens to
12695 point to. We are effectively converting the array from
12696 AvREAL() on to AvREAL() off. This saves the av_clear()
12697 (triggered by the SvREFCNT_dec(unreferenced) below) from
12698 walking the array a second time. */
12699 SvREFCNT_dec(*svp);
12700 }
12701
e4295668 12702 } while (++svp <= last);
04518cc3 12703 AvREAL_off(unreferenced);
e4295668
NC
12704 }
12705 SvREFCNT_dec(unreferenced);
12706}
12707
f7abe70b
NC
12708void
12709Perl_clone_params_del(CLONE_PARAMS *param)
12710{
12711 PerlInterpreter *const was = PERL_GET_THX;
1db366cc
NC
12712 PerlInterpreter *const to = param->new_perl;
12713 dTHXa(to);
f7abe70b
NC
12714
12715 PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
12716
1db366cc
NC
12717 if (was != to) {
12718 PERL_SET_THX(to);
12719 }
f7abe70b 12720
1db366cc 12721 SvREFCNT_dec(param->stashes);
e4295668
NC
12722 if (param->unreferenced)
12723 unreferenced_to_tmp_stack(param->unreferenced);
f7abe70b 12724
1db366cc 12725 Safefree(param);
f7abe70b 12726
1db366cc
NC
12727 if (was != to) {
12728 PERL_SET_THX(was);
f7abe70b
NC
12729 }
12730}
12731
12732CLONE_PARAMS *
12733Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
12734{
12735 /* Need to play this game, as newAV() can call safesysmalloc(), and that
12736 does a dTHX; to get the context from thread local storage.
12737 FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
12738 a version that passes in my_perl. */
12739 PerlInterpreter *const was = PERL_GET_THX;
12740 CLONE_PARAMS *param;
f7abe70b
NC
12741
12742 PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
12743
12744 if (was != to) {
12745 PERL_SET_THX(to);
12746 }
12747
12748 /* Given that we've set the context, we can do this unshared. */
12749 Newx(param, 1, CLONE_PARAMS);
12750
12751 param->flags = 0;
12752 param->proto_perl = from;
1db366cc 12753 param->new_perl = to;
f7abe70b
NC
12754 param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
12755 AvREAL_off(param->stashes);
d08d57ef 12756 param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
f7abe70b 12757
f7abe70b
NC
12758 if (was != to) {
12759 PERL_SET_THX(was);
12760 }
12761 return param;
12762}
12763
bd81e77b 12764#endif /* USE_ITHREADS */
1d7c1841 12765
bd81e77b
NC
12766/*
12767=head1 Unicode Support
1d7c1841 12768
bd81e77b 12769=for apidoc sv_recode_to_utf8
1d7c1841 12770
bd81e77b
NC
12771The encoding is assumed to be an Encode object, on entry the PV
12772of the sv is assumed to be octets in that encoding, and the sv
12773will be converted into Unicode (and UTF-8).
1d7c1841 12774
bd81e77b
NC
12775If the sv already is UTF-8 (or if it is not POK), or if the encoding
12776is not a reference, nothing is done to the sv. If the encoding is not
12777an C<Encode::XS> Encoding object, bad things will happen.
12778(See F<lib/encoding.pm> and L<Encode>).
1d7c1841 12779
bd81e77b 12780The PV of the sv is returned.
1d7c1841 12781
bd81e77b 12782=cut */
1d7c1841 12783
bd81e77b
NC
12784char *
12785Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12786{
12787 dVAR;
7918f24d
NC
12788
12789 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
12790
bd81e77b
NC
12791 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12792 SV *uni;
12793 STRLEN len;
12794 const char *s;
12795 dSP;
12796 ENTER;
12797 SAVETMPS;
12798 save_re_context();
12799 PUSHMARK(sp);
12800 EXTEND(SP, 3);
12801 XPUSHs(encoding);
12802 XPUSHs(sv);
12803/*
12804 NI-S 2002/07/09
12805 Passing sv_yes is wrong - it needs to be or'ed set of constants
12806 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12807 remove converted chars from source.
1d7c1841 12808
bd81e77b 12809 Both will default the value - let them.
1d7c1841 12810
bd81e77b
NC
12811 XPUSHs(&PL_sv_yes);
12812*/
12813 PUTBACK;
12814 call_method("decode", G_SCALAR);
12815 SPAGAIN;
12816 uni = POPs;
12817 PUTBACK;
12818 s = SvPV_const(uni, len);
12819 if (s != SvPVX_const(sv)) {
12820 SvGROW(sv, len + 1);
12821 Move(s, SvPVX(sv), len + 1, char);
12822 SvCUR_set(sv, len);
12823 }
12824 FREETMPS;
12825 LEAVE;
12826 SvUTF8_on(sv);
12827 return SvPVX(sv);
389edf32 12828 }
bd81e77b
NC
12829 return SvPOKp(sv) ? SvPVX(sv) : NULL;
12830}
1d7c1841 12831
bd81e77b
NC
12832/*
12833=for apidoc sv_cat_decode
1d7c1841 12834
bd81e77b
NC
12835The encoding is assumed to be an Encode object, the PV of the ssv is
12836assumed to be octets in that encoding and decoding the input starts
12837from the position which (PV + *offset) pointed to. The dsv will be
12838concatenated the decoded UTF-8 string from ssv. Decoding will terminate
12839when the string tstr appears in decoding output or the input ends on
12840the PV of the ssv. The value which the offset points will be modified
12841to the last input position on the ssv.
1d7c1841 12842
bd81e77b 12843Returns TRUE if the terminator was found, else returns FALSE.
1d7c1841 12844
bd81e77b
NC
12845=cut */
12846
12847bool
12848Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12849 SV *ssv, int *offset, char *tstr, int tlen)
12850{
12851 dVAR;
12852 bool ret = FALSE;
7918f24d
NC
12853
12854 PERL_ARGS_ASSERT_SV_CAT_DECODE;
12855
bd81e77b
NC
12856 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12857 SV *offsv;
12858 dSP;
12859 ENTER;
12860 SAVETMPS;
12861 save_re_context();
12862 PUSHMARK(sp);
12863 EXTEND(SP, 6);
12864 XPUSHs(encoding);
12865 XPUSHs(dsv);
12866 XPUSHs(ssv);
6e449a3a
MHM
12867 offsv = newSViv(*offset);
12868 mXPUSHs(offsv);
12869 mXPUSHp(tstr, tlen);
bd81e77b
NC
12870 PUTBACK;
12871 call_method("cat_decode", G_SCALAR);
12872 SPAGAIN;
12873 ret = SvTRUE(TOPs);
12874 *offset = SvIV(offsv);
12875 PUTBACK;
12876 FREETMPS;
12877 LEAVE;
389edf32 12878 }
bd81e77b
NC
12879 else
12880 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
12881 return ret;
1d7c1841 12882
bd81e77b 12883}
1d7c1841 12884
bd81e77b
NC
12885/* ---------------------------------------------------------------------
12886 *
12887 * support functions for report_uninit()
12888 */
1d7c1841 12889
bd81e77b
NC
12890/* the maxiumum size of array or hash where we will scan looking
12891 * for the undefined element that triggered the warning */
1d7c1841 12892
bd81e77b 12893#define FUV_MAX_SEARCH_SIZE 1000
1d7c1841 12894
bd81e77b
NC
12895/* Look for an entry in the hash whose value has the same SV as val;
12896 * If so, return a mortal copy of the key. */
1d7c1841 12897
bd81e77b 12898STATIC SV*
6c1b357c 12899S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
bd81e77b
NC
12900{
12901 dVAR;
12902 register HE **array;
12903 I32 i;
6c3182a5 12904
7918f24d
NC
12905 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
12906
bd81e77b
NC
12907 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
12908 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
a0714e2c 12909 return NULL;
6c3182a5 12910
bd81e77b 12911 array = HvARRAY(hv);
6c3182a5 12912
bd81e77b
NC
12913 for (i=HvMAX(hv); i>0; i--) {
12914 register HE *entry;
12915 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
12916 if (HeVAL(entry) != val)
12917 continue;
12918 if ( HeVAL(entry) == &PL_sv_undef ||
12919 HeVAL(entry) == &PL_sv_placeholder)
12920 continue;
12921 if (!HeKEY(entry))
a0714e2c 12922 return NULL;
bd81e77b
NC
12923 if (HeKLEN(entry) == HEf_SVKEY)
12924 return sv_mortalcopy(HeKEY_sv(entry));
a663657d 12925 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
bd81e77b
NC
12926 }
12927 }
a0714e2c 12928 return NULL;
bd81e77b 12929}
6c3182a5 12930
bd81e77b
NC
12931/* Look for an entry in the array whose value has the same SV as val;
12932 * If so, return the index, otherwise return -1. */
6c3182a5 12933
bd81e77b 12934STATIC I32
6c1b357c 12935S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
bd81e77b 12936{
97aff369 12937 dVAR;
7918f24d
NC
12938
12939 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
12940
bd81e77b
NC
12941 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
12942 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
12943 return -1;
57c6e6d2 12944
4a021917
AL
12945 if (val != &PL_sv_undef) {
12946 SV ** const svp = AvARRAY(av);
12947 I32 i;
12948
12949 for (i=AvFILLp(av); i>=0; i--)
12950 if (svp[i] == val)
12951 return i;
bd81e77b
NC
12952 }
12953 return -1;
12954}
15a5279a 12955
bd81e77b
NC
12956/* S_varname(): return the name of a variable, optionally with a subscript.
12957 * If gv is non-zero, use the name of that global, along with gvtype (one
12958 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
12959 * targ. Depending on the value of the subscript_type flag, return:
12960 */
bce260cd 12961
bd81e77b
NC
12962#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
12963#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
12964#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
12965#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
bce260cd 12966
bd81e77b 12967STATIC SV*
6c1b357c
NC
12968S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
12969 const SV *const keyname, I32 aindex, int subscript_type)
bd81e77b 12970{
1d7c1841 12971
bd81e77b
NC
12972 SV * const name = sv_newmortal();
12973 if (gv) {
12974 char buffer[2];
12975 buffer[0] = gvtype;
12976 buffer[1] = 0;
1d7c1841 12977
bd81e77b 12978 /* as gv_fullname4(), but add literal '^' for $^FOO names */
66fe0623 12979
bd81e77b 12980 gv_fullname4(name, gv, buffer, 0);
1d7c1841 12981
bd81e77b
NC
12982 if ((unsigned int)SvPVX(name)[1] <= 26) {
12983 buffer[0] = '^';
12984 buffer[1] = SvPVX(name)[1] + 'A' - 1;
1d7c1841 12985
bd81e77b
NC
12986 /* Swap the 1 unprintable control character for the 2 byte pretty
12987 version - ie substr($name, 1, 1) = $buffer; */
12988 sv_insert(name, 1, 1, buffer, 2);
1d7c1841 12989 }
bd81e77b
NC
12990 }
12991 else {
289b91d9 12992 CV * const cv = find_runcv(NULL);
bd81e77b
NC
12993 SV *sv;
12994 AV *av;
1d7c1841 12995
bd81e77b 12996 if (!cv || !CvPADLIST(cv))
a0714e2c 12997 return NULL;
502c6561 12998 av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
bd81e77b 12999 sv = *av_fetch(av, targ, FALSE);
f8503592 13000 sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
bd81e77b 13001 }
1d7c1841 13002
bd81e77b 13003 if (subscript_type == FUV_SUBSCRIPT_HASH) {
561b68a9 13004 SV * const sv = newSV(0);
bd81e77b
NC
13005 *SvPVX(name) = '$';
13006 Perl_sv_catpvf(aTHX_ name, "{%s}",
13007 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13008 SvREFCNT_dec(sv);
13009 }
13010 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13011 *SvPVX(name) = '$';
13012 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13013 }
84335ee9
NC
13014 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13015 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13016 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0);
13017 }
1d7c1841 13018
bd81e77b
NC
13019 return name;
13020}
1d7c1841 13021
1d7c1841 13022
bd81e77b
NC
13023/*
13024=for apidoc find_uninit_var
1d7c1841 13025
bd81e77b
NC
13026Find the name of the undefined variable (if any) that caused the operator o
13027to issue a "Use of uninitialized value" warning.
13028If match is true, only return a name if it's value matches uninit_sv.
13029So roughly speaking, if a unary operator (such as OP_COS) generates a
13030warning, then following the direct child of the op may yield an
13031OP_PADSV or OP_GV that gives the name of the undefined variable. On the
13032other hand, with OP_ADD there are two branches to follow, so we only print
13033the variable name if we get an exact match.
1d7c1841 13034
bd81e77b 13035The name is returned as a mortal SV.
1d7c1841 13036
bd81e77b
NC
13037Assumes that PL_op is the op that originally triggered the error, and that
13038PL_comppad/PL_curpad points to the currently executing pad.
1d7c1841 13039
bd81e77b
NC
13040=cut
13041*/
1d7c1841 13042
bd81e77b 13043STATIC SV *
6c1b357c
NC
13044S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13045 bool match)
bd81e77b
NC
13046{
13047 dVAR;
13048 SV *sv;
6c1b357c
NC
13049 const GV *gv;
13050 const OP *o, *o2, *kid;
1d7c1841 13051
bd81e77b
NC
13052 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13053 uninit_sv == &PL_sv_placeholder)))
a0714e2c 13054 return NULL;
1d7c1841 13055
bd81e77b 13056 switch (obase->op_type) {
1d7c1841 13057
bd81e77b
NC
13058 case OP_RV2AV:
13059 case OP_RV2HV:
13060 case OP_PADAV:
13061 case OP_PADHV:
13062 {
13063 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13064 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13065 I32 index = 0;
a0714e2c 13066 SV *keysv = NULL;
bd81e77b 13067 int subscript_type = FUV_SUBSCRIPT_WITHIN;
1d7c1841 13068
bd81e77b
NC
13069 if (pad) { /* @lex, %lex */
13070 sv = PAD_SVl(obase->op_targ);
a0714e2c 13071 gv = NULL;
bd81e77b
NC
13072 }
13073 else {
13074 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13075 /* @global, %global */
13076 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13077 if (!gv)
13078 break;
daba3364 13079 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
bd81e77b
NC
13080 }
13081 else /* @{expr}, %{expr} */
13082 return find_uninit_var(cUNOPx(obase)->op_first,
13083 uninit_sv, match);
13084 }
1d7c1841 13085
bd81e77b
NC
13086 /* attempt to find a match within the aggregate */
13087 if (hash) {
85fbaab2 13088 keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
13089 if (keysv)
13090 subscript_type = FUV_SUBSCRIPT_HASH;
13091 }
13092 else {
502c6561 13093 index = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
13094 if (index >= 0)
13095 subscript_type = FUV_SUBSCRIPT_ARRAY;
13096 }
1d7c1841 13097
bd81e77b
NC
13098 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13099 break;
1d7c1841 13100
bd81e77b
NC
13101 return varname(gv, hash ? '%' : '@', obase->op_targ,
13102 keysv, index, subscript_type);
13103 }
1d7c1841 13104
bd81e77b
NC
13105 case OP_PADSV:
13106 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13107 break;
a0714e2c
SS
13108 return varname(NULL, '$', obase->op_targ,
13109 NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 13110
bd81e77b
NC
13111 case OP_GVSV:
13112 gv = cGVOPx_gv(obase);
13113 if (!gv || (match && GvSV(gv) != uninit_sv))
13114 break;
a0714e2c 13115 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 13116
bd81e77b
NC
13117 case OP_AELEMFAST:
13118 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
13119 if (match) {
13120 SV **svp;
502c6561 13121 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
bd81e77b
NC
13122 if (!av || SvRMAGICAL(av))
13123 break;
13124 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13125 if (!svp || *svp != uninit_sv)
13126 break;
13127 }
a0714e2c
SS
13128 return varname(NULL, '$', obase->op_targ,
13129 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13130 }
13131 else {
13132 gv = cGVOPx_gv(obase);
13133 if (!gv)
13134 break;
13135 if (match) {
13136 SV **svp;
6c1b357c 13137 AV *const av = GvAV(gv);
bd81e77b
NC
13138 if (!av || SvRMAGICAL(av))
13139 break;
13140 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13141 if (!svp || *svp != uninit_sv)
13142 break;
13143 }
13144 return varname(gv, '$', 0,
a0714e2c 13145 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13146 }
13147 break;
1d7c1841 13148
bd81e77b
NC
13149 case OP_EXISTS:
13150 o = cUNOPx(obase)->op_first;
13151 if (!o || o->op_type != OP_NULL ||
13152 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
13153 break;
13154 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
a2efc822 13155
bd81e77b
NC
13156 case OP_AELEM:
13157 case OP_HELEM:
13158 if (PL_op == obase)
13159 /* $a[uninit_expr] or $h{uninit_expr} */
13160 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
081fc587 13161
a0714e2c 13162 gv = NULL;
bd81e77b
NC
13163 o = cBINOPx(obase)->op_first;
13164 kid = cBINOPx(obase)->op_last;
8cf8f3d1 13165
bd81e77b 13166 /* get the av or hv, and optionally the gv */
a0714e2c 13167 sv = NULL;
bd81e77b
NC
13168 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
13169 sv = PAD_SV(o->op_targ);
13170 }
13171 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
13172 && cUNOPo->op_first->op_type == OP_GV)
13173 {
13174 gv = cGVOPx_gv(cUNOPo->op_first);
13175 if (!gv)
13176 break;
daba3364
NC
13177 sv = o->op_type
13178 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
bd81e77b
NC
13179 }
13180 if (!sv)
13181 break;
13182
13183 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
13184 /* index is constant */
13185 if (match) {
13186 if (SvMAGICAL(sv))
13187 break;
13188 if (obase->op_type == OP_HELEM) {
85fbaab2 13189 HE* he = hv_fetch_ent(MUTABLE_HV(sv), cSVOPx_sv(kid), 0, 0);
bd81e77b
NC
13190 if (!he || HeVAL(he) != uninit_sv)
13191 break;
13192 }
13193 else {
502c6561 13194 SV * const * const svp = av_fetch(MUTABLE_AV(sv), SvIV(cSVOPx_sv(kid)), FALSE);
bd81e77b
NC
13195 if (!svp || *svp != uninit_sv)
13196 break;
13197 }
13198 }
13199 if (obase->op_type == OP_HELEM)
13200 return varname(gv, '%', o->op_targ,
13201 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
13202 else
a0714e2c 13203 return varname(gv, '@', o->op_targ, NULL,
bd81e77b 13204 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13205 }
13206 else {
13207 /* index is an expression;
13208 * attempt to find a match within the aggregate */
13209 if (obase->op_type == OP_HELEM) {
85fbaab2 13210 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
13211 if (keysv)
13212 return varname(gv, '%', o->op_targ,
13213 keysv, 0, FUV_SUBSCRIPT_HASH);
13214 }
13215 else {
502c6561
NC
13216 const I32 index
13217 = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
13218 if (index >= 0)
13219 return varname(gv, '@', o->op_targ,
a0714e2c 13220 NULL, index, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13221 }
13222 if (match)
13223 break;
13224 return varname(gv,
13225 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
13226 ? '@' : '%',
a0714e2c 13227 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
f284b03f 13228 }
bd81e77b 13229 break;
dc507217 13230
bd81e77b
NC
13231 case OP_AASSIGN:
13232 /* only examine RHS */
13233 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
6d26897e 13234
bd81e77b
NC
13235 case OP_OPEN:
13236 o = cUNOPx(obase)->op_first;
13237 if (o->op_type == OP_PUSHMARK)
13238 o = o->op_sibling;
1d7c1841 13239
bd81e77b
NC
13240 if (!o->op_sibling) {
13241 /* one-arg version of open is highly magical */
a0ae6670 13242
bd81e77b
NC
13243 if (o->op_type == OP_GV) { /* open FOO; */
13244 gv = cGVOPx_gv(o);
13245 if (match && GvSV(gv) != uninit_sv)
13246 break;
13247 return varname(gv, '$', 0,
a0714e2c 13248 NULL, 0, FUV_SUBSCRIPT_NONE);
bd81e77b
NC
13249 }
13250 /* other possibilities not handled are:
13251 * open $x; or open my $x; should return '${*$x}'
13252 * open expr; should return '$'.expr ideally
13253 */
13254 break;
13255 }
13256 goto do_op;
ccfc67b7 13257
bd81e77b
NC
13258 /* ops where $_ may be an implicit arg */
13259 case OP_TRANS:
13260 case OP_SUBST:
13261 case OP_MATCH:
13262 if ( !(obase->op_flags & OPf_STACKED)) {
13263 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
13264 ? PAD_SVl(obase->op_targ)
13265 : DEFSV))
13266 {
13267 sv = sv_newmortal();
76f68e9b 13268 sv_setpvs(sv, "$_");
bd81e77b
NC
13269 return sv;
13270 }
13271 }
13272 goto do_op;
9f4817db 13273
bd81e77b
NC
13274 case OP_PRTF:
13275 case OP_PRINT:
3ef1310e 13276 case OP_SAY:
fa8d1836 13277 match = 1; /* print etc can return undef on defined args */
bd81e77b
NC
13278 /* skip filehandle as it can't produce 'undef' warning */
13279 o = cUNOPx(obase)->op_first;
13280 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
13281 o = o->op_sibling->op_sibling;
13282 goto do_op2;
9f4817db 13283
9f4817db 13284
50edf520 13285 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
bd81e77b 13286 case OP_RV2SV:
8b0dea50
DM
13287 case OP_CUSTOM: /* XS or custom code could trigger random warnings */
13288
13289 /* the following ops are capable of returning PL_sv_undef even for
13290 * defined arg(s) */
13291
13292 case OP_BACKTICK:
13293 case OP_PIPE_OP:
13294 case OP_FILENO:
13295 case OP_BINMODE:
13296 case OP_TIED:
13297 case OP_GETC:
13298 case OP_SYSREAD:
13299 case OP_SEND:
13300 case OP_IOCTL:
13301 case OP_SOCKET:
13302 case OP_SOCKPAIR:
13303 case OP_BIND:
13304 case OP_CONNECT:
13305 case OP_LISTEN:
13306 case OP_ACCEPT:
13307 case OP_SHUTDOWN:
13308 case OP_SSOCKOPT:
13309 case OP_GETPEERNAME:
13310 case OP_FTRREAD:
13311 case OP_FTRWRITE:
13312 case OP_FTREXEC:
13313 case OP_FTROWNED:
13314 case OP_FTEREAD:
13315 case OP_FTEWRITE:
13316 case OP_FTEEXEC:
13317 case OP_FTEOWNED:
13318 case OP_FTIS:
13319 case OP_FTZERO:
13320 case OP_FTSIZE:
13321 case OP_FTFILE:
13322 case OP_FTDIR:
13323 case OP_FTLINK:
13324 case OP_FTPIPE:
13325 case OP_FTSOCK:
13326 case OP_FTBLK:
13327 case OP_FTCHR:
13328 case OP_FTTTY:
13329 case OP_FTSUID:
13330 case OP_FTSGID:
13331 case OP_FTSVTX:
13332 case OP_FTTEXT:
13333 case OP_FTBINARY:
13334 case OP_FTMTIME:
13335 case OP_FTATIME:
13336 case OP_FTCTIME:
13337 case OP_READLINK:
13338 case OP_OPEN_DIR:
13339 case OP_READDIR:
13340 case OP_TELLDIR:
13341 case OP_SEEKDIR:
13342 case OP_REWINDDIR:
13343 case OP_CLOSEDIR:
13344 case OP_GMTIME:
13345 case OP_ALARM:
13346 case OP_SEMGET:
13347 case OP_GETLOGIN:
13348 case OP_UNDEF:
13349 case OP_SUBSTR:
13350 case OP_AEACH:
13351 case OP_EACH:
13352 case OP_SORT:
13353 case OP_CALLER:
13354 case OP_DOFILE:
fa8d1836
DM
13355 case OP_PROTOTYPE:
13356 case OP_NCMP:
13357 case OP_SMARTMATCH:
13358 case OP_UNPACK:
13359 case OP_SYSOPEN:
13360 case OP_SYSSEEK:
8b0dea50 13361 match = 1;
bd81e77b 13362 goto do_op;
9f4817db 13363
7697b7e7
DM
13364 case OP_ENTERSUB:
13365 case OP_GOTO:
a2fb3d36
DM
13366 /* XXX tmp hack: these two may call an XS sub, and currently
13367 XS subs don't have a SUB entry on the context stack, so CV and
13368 pad determination goes wrong, and BAD things happen. So, just
13369 don't try to determine the value under those circumstances.
7697b7e7
DM
13370 Need a better fix at dome point. DAPM 11/2007 */
13371 break;
13372
4f187fc9
VP
13373 case OP_FLIP:
13374 case OP_FLOP:
13375 {
13376 GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
13377 if (gv && GvSV(gv) == uninit_sv)
13378 return newSVpvs_flags("$.", SVs_TEMP);
13379 goto do_op;
13380 }
8b0dea50 13381
cc4b8646
DM
13382 case OP_POS:
13383 /* def-ness of rval pos() is independent of the def-ness of its arg */
13384 if ( !(obase->op_flags & OPf_MOD))
13385 break;
13386
bd81e77b
NC
13387 case OP_SCHOMP:
13388 case OP_CHOMP:
13389 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
84bafc02 13390 return newSVpvs_flags("${$/}", SVs_TEMP);
5f66b61c 13391 /*FALLTHROUGH*/
5d170f3a 13392
bd81e77b
NC
13393 default:
13394 do_op:
13395 if (!(obase->op_flags & OPf_KIDS))
13396 break;
13397 o = cUNOPx(obase)->op_first;
13398
13399 do_op2:
13400 if (!o)
13401 break;
f9893866 13402
bd81e77b
NC
13403 /* if all except one arg are constant, or have no side-effects,
13404 * or are optimized away, then it's unambiguous */
5f66b61c 13405 o2 = NULL;
bd81e77b 13406 for (kid=o; kid; kid = kid->op_sibling) {
e15d5972
AL
13407 if (kid) {
13408 const OPCODE type = kid->op_type;
13409 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
13410 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
13411 || (type == OP_PUSHMARK)
bd81e77b 13412 )
bd81e77b 13413 continue;
e15d5972 13414 }
bd81e77b 13415 if (o2) { /* more than one found */
5f66b61c 13416 o2 = NULL;
bd81e77b
NC
13417 break;
13418 }
13419 o2 = kid;
13420 }
13421 if (o2)
13422 return find_uninit_var(o2, uninit_sv, match);
7a5fa8a2 13423
bd81e77b
NC
13424 /* scan all args */
13425 while (o) {
13426 sv = find_uninit_var(o, uninit_sv, 1);
13427 if (sv)
13428 return sv;
13429 o = o->op_sibling;
d0063567 13430 }
bd81e77b 13431 break;
f9893866 13432 }
a0714e2c 13433 return NULL;
9f4817db
JH
13434}
13435
220e2d4e 13436
bd81e77b
NC
13437/*
13438=for apidoc report_uninit
68795e93 13439
bd81e77b 13440Print appropriate "Use of uninitialized variable" warning
220e2d4e 13441
bd81e77b
NC
13442=cut
13443*/
220e2d4e 13444
bd81e77b 13445void
b3dbd76e 13446Perl_report_uninit(pTHX_ const SV *uninit_sv)
220e2d4e 13447{
97aff369 13448 dVAR;
bd81e77b 13449 if (PL_op) {
a0714e2c 13450 SV* varname = NULL;
bd81e77b
NC
13451 if (uninit_sv) {
13452 varname = find_uninit_var(PL_op, uninit_sv,0);
13453 if (varname)
13454 sv_insert(varname, 0, 0, " ", 1);
13455 }
13456 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13457 varname ? SvPV_nolen_const(varname) : "",
13458 " in ", OP_DESC(PL_op));
220e2d4e 13459 }
a73e8557 13460 else
bd81e77b
NC
13461 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13462 "", "", "");
220e2d4e 13463}
f9893866 13464
241d1a3b
NC
13465/*
13466 * Local variables:
13467 * c-indentation-style: bsd
13468 * c-basic-offset: 4
13469 * indent-tabs-mode: t
13470 * End:
13471 *
37442d52
RGS
13472 * ex: set ts=8 sts=4 sw=4 noet:
13473 */