This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add new release to perlhist
[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);
a02ec77a 2686 TAINT_IF(tmpsv && SvTAINTED(tmpsv));
800401ee
JH
2687 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2688 return sv_2num(tmpsv);
2689 }
2690 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2691}
2692
645c22ef
DM
2693/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2694 * UV as a string towards the end of buf, and return pointers to start and
2695 * end of it.
2696 *
2697 * We assume that buf is at least TYPE_CHARS(UV) long.
2698 */
2699
864dbfa3 2700static char *
5de3775c 2701S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
25da4f38 2702{
25da4f38 2703 char *ptr = buf + TYPE_CHARS(UV);
823a54a3 2704 char * const ebuf = ptr;
25da4f38 2705 int sign;
25da4f38 2706
7918f24d
NC
2707 PERL_ARGS_ASSERT_UIV_2BUF;
2708
25da4f38
IZ
2709 if (is_uv)
2710 sign = 0;
2711 else if (iv >= 0) {
2712 uv = iv;
2713 sign = 0;
2714 } else {
2715 uv = -iv;
2716 sign = 1;
2717 }
2718 do {
eb160463 2719 *--ptr = '0' + (char)(uv % 10);
25da4f38
IZ
2720 } while (uv /= 10);
2721 if (sign)
2722 *--ptr = '-';
2723 *peob = ebuf;
2724 return ptr;
2725}
2726
645c22ef
DM
2727/*
2728=for apidoc sv_2pv_flags
2729
ff276b08 2730Returns a pointer to the string value of an SV, and sets *lp to its length.
645c22ef
DM
2731If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2732if necessary.
2733Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2734usually end up here too.
2735
2736=cut
2737*/
2738
8d6d96c1 2739char *
5de3775c 2740Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 2741{
97aff369 2742 dVAR;
79072805 2743 register char *s;
79072805 2744
463ee0b2 2745 if (!sv) {
cdb061a3
NC
2746 if (lp)
2747 *lp = 0;
73d840c0 2748 return (char *)"";
463ee0b2 2749 }
8990e307 2750 if (SvGMAGICAL(sv)) {
8d6d96c1
HS
2751 if (flags & SV_GMAGIC)
2752 mg_get(sv);
463ee0b2 2753 if (SvPOKp(sv)) {
cdb061a3
NC
2754 if (lp)
2755 *lp = SvCUR(sv);
10516c54
NC
2756 if (flags & SV_MUTABLE_RETURN)
2757 return SvPVX_mutable(sv);
4d84ee25
NC
2758 if (flags & SV_CONST_RETURN)
2759 return (char *)SvPVX_const(sv);
463ee0b2
LW
2760 return SvPVX(sv);
2761 }
75dfc8ec
NC
2762 if (SvIOKp(sv) || SvNOKp(sv)) {
2763 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
75dfc8ec
NC
2764 STRLEN len;
2765
2766 if (SvIOKp(sv)) {
e80fed9d 2767 len = SvIsUV(sv)
d9fad198
JH
2768 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2769 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
75dfc8ec 2770 } else {
e8ada2d0
NC
2771 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2772 len = strlen(tbuf);
75dfc8ec 2773 }
b5b886f0
NC
2774 assert(!SvROK(sv));
2775 {
75dfc8ec
NC
2776 dVAR;
2777
2778#ifdef FIXNEGATIVEZERO
e8ada2d0
NC
2779 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2780 tbuf[0] = '0';
2781 tbuf[1] = 0;
75dfc8ec
NC
2782 len = 1;
2783 }
2784#endif
2785 SvUPGRADE(sv, SVt_PV);
2786 if (lp)
2787 *lp = len;
2788 s = SvGROW_mutable(sv, len + 1);
2789 SvCUR_set(sv, len);
2790 SvPOKp_on(sv);
10edeb5d 2791 return (char*)memcpy(s, tbuf, len + 1);
75dfc8ec 2792 }
463ee0b2 2793 }
1c7ff15e
NC
2794 if (SvROK(sv)) {
2795 goto return_rok;
2796 }
2797 assert(SvTYPE(sv) >= SVt_PVMG);
2798 /* This falls through to the report_uninit near the end of the
2799 function. */
2800 } else if (SvTHINKFIRST(sv)) {
ed6116ce 2801 if (SvROK(sv)) {
1c7ff15e 2802 return_rok:
deb46114 2803 if (SvAMAGIC(sv)) {
aee036bb
DM
2804 SV *tmpstr;
2805 if (flags & SV_SKIP_OVERLOAD)
2806 return NULL;
2807 tmpstr = AMG_CALLun(sv,string);
a02ec77a 2808 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
deb46114
NC
2809 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2810 /* Unwrap this: */
2811 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2812 */
2813
2814 char *pv;
2815 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2816 if (flags & SV_CONST_RETURN) {
2817 pv = (char *) SvPVX_const(tmpstr);
2818 } else {
2819 pv = (flags & SV_MUTABLE_RETURN)
2820 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2821 }
2822 if (lp)
2823 *lp = SvCUR(tmpstr);
50adf7d2 2824 } else {
deb46114 2825 pv = sv_2pv_flags(tmpstr, lp, flags);
50adf7d2 2826 }
deb46114
NC
2827 if (SvUTF8(tmpstr))
2828 SvUTF8_on(sv);
2829 else
2830 SvUTF8_off(sv);
2831 return pv;
50adf7d2 2832 }
deb46114
NC
2833 }
2834 {
fafee734
NC
2835 STRLEN len;
2836 char *retval;
2837 char *buffer;
d2c6dc5e 2838 SV *const referent = SvRV(sv);
d8eae41e
NC
2839
2840 if (!referent) {
fafee734
NC
2841 len = 7;
2842 retval = buffer = savepvn("NULLREF", len);
5c35adbb 2843 } else if (SvTYPE(referent) == SVt_REGEXP) {
d2c6dc5e 2844 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
67d2d14d
AB
2845 I32 seen_evals = 0;
2846
2847 assert(re);
2848
2849 /* If the regex is UTF-8 we want the containing scalar to
2850 have an UTF-8 flag too */
2851 if (RX_UTF8(re))
2852 SvUTF8_on(sv);
2853 else
2854 SvUTF8_off(sv);
2855
2856 if ((seen_evals = RX_SEEN_EVALS(re)))
2857 PL_reginterp_cnt += seen_evals;
2858
2859 if (lp)
2860 *lp = RX_WRAPLEN(re);
2861
2862 return RX_WRAPPED(re);
d8eae41e
NC
2863 } else {
2864 const char *const typestr = sv_reftype(referent, 0);
fafee734
NC
2865 const STRLEN typelen = strlen(typestr);
2866 UV addr = PTR2UV(referent);
2867 const char *stashname = NULL;
2868 STRLEN stashnamelen = 0; /* hush, gcc */
2869 const char *buffer_end;
d8eae41e 2870
d8eae41e 2871 if (SvOBJECT(referent)) {
fafee734
NC
2872 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2873
2874 if (name) {
2875 stashname = HEK_KEY(name);
2876 stashnamelen = HEK_LEN(name);
2877
2878 if (HEK_UTF8(name)) {
2879 SvUTF8_on(sv);
2880 } else {
2881 SvUTF8_off(sv);
2882 }
2883 } else {
2884 stashname = "__ANON__";
2885 stashnamelen = 8;
2886 }
2887 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2888 + 2 * sizeof(UV) + 2 /* )\0 */;
2889 } else {
2890 len = typelen + 3 /* (0x */
2891 + 2 * sizeof(UV) + 2 /* )\0 */;
d8eae41e 2892 }
fafee734
NC
2893
2894 Newx(buffer, len, char);
2895 buffer_end = retval = buffer + len;
2896
2897 /* Working backwards */
2898 *--retval = '\0';
2899 *--retval = ')';
2900 do {
2901 *--retval = PL_hexdigit[addr & 15];
2902 } while (addr >>= 4);
2903 *--retval = 'x';
2904 *--retval = '0';
2905 *--retval = '(';
2906
2907 retval -= typelen;
2908 memcpy(retval, typestr, typelen);
2909
2910 if (stashname) {
2911 *--retval = '=';
2912 retval -= stashnamelen;
2913 memcpy(retval, stashname, stashnamelen);
2914 }
2915 /* retval may not neccesarily have reached the start of the
2916 buffer here. */
2917 assert (retval >= buffer);
2918
2919 len = buffer_end - retval - 1; /* -1 for that \0 */
c080367d 2920 }
042dae7a 2921 if (lp)
fafee734
NC
2922 *lp = len;
2923 SAVEFREEPV(buffer);
2924 return retval;
463ee0b2 2925 }
79072805 2926 }
0336b60e 2927 if (SvREADONLY(sv) && !SvOK(sv)) {
cdb061a3
NC
2928 if (lp)
2929 *lp = 0;
9f621bb0
NC
2930 if (flags & SV_UNDEF_RETURNS_NULL)
2931 return NULL;
2932 if (ckWARN(WARN_UNINITIALIZED))
2933 report_uninit(sv);
73d840c0 2934 return (char *)"";
79072805 2935 }
79072805 2936 }
28e5dec8
JH
2937 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2938 /* I'm assuming that if both IV and NV are equally valid then
2939 converting the IV is going to be more efficient */
e1ec3a88 2940 const U32 isUIOK = SvIsUV(sv);
28e5dec8
JH
2941 char buf[TYPE_CHARS(UV)];
2942 char *ebuf, *ptr;
97a130b8 2943 STRLEN len;
28e5dec8
JH
2944
2945 if (SvTYPE(sv) < SVt_PVIV)
2946 sv_upgrade(sv, SVt_PVIV);
4ea1d550 2947 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
97a130b8 2948 len = ebuf - ptr;
5902b6a9 2949 /* inlined from sv_setpvn */
97a130b8
NC
2950 s = SvGROW_mutable(sv, len + 1);
2951 Move(ptr, s, len, char);
2952 s += len;
28e5dec8 2953 *s = '\0';
28e5dec8
JH
2954 }
2955 else if (SvNOKp(sv)) {
4ee39169 2956 dSAVE_ERRNO;
79072805
LW
2957 if (SvTYPE(sv) < SVt_PVNV)
2958 sv_upgrade(sv, SVt_PVNV);
1c846c1f 2959 /* The +20 is pure guesswork. Configure test needed. --jhi */
5902b6a9 2960 s = SvGROW_mutable(sv, NV_DIG + 20);
c81271c3 2961 /* some Xenix systems wipe out errno here */
79072805 2962#ifdef apollo
463ee0b2 2963 if (SvNVX(sv) == 0.0)
d1307786 2964 my_strlcpy(s, "0", SvLEN(sv));
79072805
LW
2965 else
2966#endif /*apollo*/
bbce6d69 2967 {
2d4389e4 2968 Gconvert(SvNVX(sv), NV_DIG, 0, s);
bbce6d69 2969 }
4ee39169 2970 RESTORE_ERRNO;
a0d0e21e 2971#ifdef FIXNEGATIVEZERO
20773dcd
NC
2972 if (*s == '-' && s[1] == '0' && !s[2]) {
2973 s[0] = '0';
2974 s[1] = 0;
2975 }
a0d0e21e 2976#endif
79072805
LW
2977 while (*s) s++;
2978#ifdef hcx
2979 if (s[-1] == '.')
46fc3d4c 2980 *--s = '\0';
79072805
LW
2981#endif
2982 }
79072805 2983 else {
8d1c3e26
NC
2984 if (isGV_with_GP(sv)) {
2985 GV *const gv = MUTABLE_GV(sv);
2986 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2987 SV *const buffer = sv_newmortal();
2988
2989 /* FAKE globs can get coerced, so need to turn this off temporarily
2990 if it is on. */
2991 SvFAKE_off(gv);
2992 gv_efullname3(buffer, gv, "*");
2993 SvFLAGS(gv) |= wasfake;
2994
1809c940
DM
2995 if (SvPOK(buffer)) {
2996 if (lp) {
2997 *lp = SvCUR(buffer);
2998 }
2999 return SvPVX(buffer);
3000 }
3001 else {
3002 if (lp)
3003 *lp = 0;
3004 return (char *)"";
8d1c3e26 3005 }
8d1c3e26 3006 }
180488f8 3007
cdb061a3 3008 if (lp)
00b6aa41 3009 *lp = 0;
9f621bb0
NC
3010 if (flags & SV_UNDEF_RETURNS_NULL)
3011 return NULL;
3012 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
3013 report_uninit(sv);
25da4f38
IZ
3014 if (SvTYPE(sv) < SVt_PV)
3015 /* Typically the caller expects that sv_any is not NULL now. */
3016 sv_upgrade(sv, SVt_PV);
73d840c0 3017 return (char *)"";
79072805 3018 }
cdb061a3 3019 {
823a54a3 3020 const STRLEN len = s - SvPVX_const(sv);
cdb061a3
NC
3021 if (lp)
3022 *lp = len;
3023 SvCUR_set(sv, len);
3024 }
79072805 3025 SvPOK_on(sv);
1d7c1841 3026 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 3027 PTR2UV(sv),SvPVX_const(sv)));
4d84ee25
NC
3028 if (flags & SV_CONST_RETURN)
3029 return (char *)SvPVX_const(sv);
10516c54
NC
3030 if (flags & SV_MUTABLE_RETURN)
3031 return SvPVX_mutable(sv);
463ee0b2
LW
3032 return SvPVX(sv);
3033}
3034
645c22ef 3035/*
6050d10e
JP
3036=for apidoc sv_copypv
3037
3038Copies a stringified representation of the source SV into the
3039destination SV. Automatically performs any necessary mg_get and
54f0641b 3040coercion of numeric values into strings. Guaranteed to preserve
2575c402 3041UTF8 flag even from overloaded objects. Similar in nature to
54f0641b
NIS
3042sv_2pv[_flags] but operates directly on an SV instead of just the
3043string. Mostly uses sv_2pv_flags to do its work, except when that
6050d10e
JP
3044would lose the UTF-8'ness of the PV.
3045
3046=cut
3047*/
3048
3049void
5de3775c 3050Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
6050d10e 3051{
446eaa42 3052 STRLEN len;
53c1dcc0 3053 const char * const s = SvPV_const(ssv,len);
7918f24d
NC
3054
3055 PERL_ARGS_ASSERT_SV_COPYPV;
3056
cb50f42d 3057 sv_setpvn(dsv,s,len);
446eaa42 3058 if (SvUTF8(ssv))
cb50f42d 3059 SvUTF8_on(dsv);
446eaa42 3060 else
cb50f42d 3061 SvUTF8_off(dsv);
6050d10e
JP
3062}
3063
3064/*
645c22ef
DM
3065=for apidoc sv_2pvbyte
3066
3067Return a pointer to the byte-encoded representation of the SV, and set *lp
1e54db1a 3068to its length. May cause the SV to be downgraded from UTF-8 as a
645c22ef
DM
3069side-effect.
3070
3071Usually accessed via the C<SvPVbyte> macro.
3072
3073=cut
3074*/
3075
7340a771 3076char *
5de3775c 3077Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3078{
7918f24d
NC
3079 PERL_ARGS_ASSERT_SV_2PVBYTE;
3080
0875d2fe 3081 sv_utf8_downgrade(sv,0);
97972285 3082 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771
GS
3083}
3084
645c22ef 3085/*
035cbb0e
RGS
3086=for apidoc sv_2pvutf8
3087
3088Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3089to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3090
3091Usually accessed via the C<SvPVutf8> macro.
3092
3093=cut
3094*/
645c22ef 3095
7340a771 3096char *
7bc54cea 3097Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3098{
7918f24d
NC
3099 PERL_ARGS_ASSERT_SV_2PVUTF8;
3100
035cbb0e
RGS
3101 sv_utf8_upgrade(sv);
3102 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771 3103}
1c846c1f 3104
7ee2227d 3105
645c22ef
DM
3106/*
3107=for apidoc sv_2bool
3108
3109This function is only called on magical items, and is only used by
8cf8f3d1 3110sv_true() or its macro equivalent.
645c22ef
DM
3111
3112=cut
3113*/
3114
463ee0b2 3115bool
7bc54cea 3116Perl_sv_2bool(pTHX_ register SV *const sv)
463ee0b2 3117{
97aff369 3118 dVAR;
7918f24d
NC
3119
3120 PERL_ARGS_ASSERT_SV_2BOOL;
3121
5b295bef 3122 SvGETMAGIC(sv);
463ee0b2 3123
a0d0e21e
LW
3124 if (!SvOK(sv))
3125 return 0;
3126 if (SvROK(sv)) {
fabdb6c0
AL
3127 if (SvAMAGIC(sv)) {
3128 SV * const tmpsv = AMG_CALLun(sv,bool_);
3129 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
f2338a2e 3130 return cBOOL(SvTRUE(tmpsv));
fabdb6c0
AL
3131 }
3132 return SvRV(sv) != 0;
a0d0e21e 3133 }
463ee0b2 3134 if (SvPOKp(sv)) {
53c1dcc0
AL
3135 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3136 if (Xpvtmp &&
339049b0 3137 (*sv->sv_u.svu_pv > '0' ||
11343788 3138 Xpvtmp->xpv_cur > 1 ||
339049b0 3139 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
463ee0b2
LW
3140 return 1;
3141 else
3142 return 0;
3143 }
3144 else {
3145 if (SvIOKp(sv))
3146 return SvIVX(sv) != 0;
3147 else {
3148 if (SvNOKp(sv))
3149 return SvNVX(sv) != 0.0;
180488f8 3150 else {
f7877b28 3151 if (isGV_with_GP(sv))
180488f8
NC
3152 return TRUE;
3153 else
3154 return FALSE;
3155 }
463ee0b2
LW
3156 }
3157 }
79072805
LW
3158}
3159
c461cf8f
JH
3160/*
3161=for apidoc sv_utf8_upgrade
3162
78ea37eb 3163Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3164Forces the SV to string form if it is not already.
2bbc8d55 3165Will C<mg_get> on C<sv> if appropriate.
4411f3b6 3166Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3167if the whole string is the same in UTF-8 as not.
3168Returns the number of bytes in the converted string
c461cf8f 3169
13a6c0e0
JH
3170This is not as a general purpose byte encoding to Unicode interface:
3171use the Encode extension for that.
3172
fe749c9a
KW
3173=for apidoc sv_utf8_upgrade_nomg
3174
3175Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3176
8d6d96c1
HS
3177=for apidoc sv_utf8_upgrade_flags
3178
78ea37eb 3179Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3180Forces the SV to string form if it is not already.
8d6d96c1 3181Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3182if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3183will C<mg_get> on C<sv> if appropriate, else not.
3184Returns the number of bytes in the converted string
3185C<sv_utf8_upgrade> and
8d6d96c1
HS
3186C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3187
13a6c0e0
JH
3188This is not as a general purpose byte encoding to Unicode interface:
3189use the Encode extension for that.
3190
8d6d96c1 3191=cut
b3ab6785
KW
3192
3193The grow version is currently not externally documented. It adds a parameter,
3194extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3195have free after it upon return. This allows the caller to reserve extra space
3196that it intends to fill, to avoid extra grows.
3197
3198Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3199which can be used to tell this function to not first check to see if there are
3200any characters that are different in UTF-8 (variant characters) which would
3201force it to allocate a new string to sv, but to assume there are. Typically
3202this flag is used by a routine that has already parsed the string to find that
3203there are such characters, and passes this information on so that the work
3204doesn't have to be repeated.
3205
3206(One might think that the calling routine could pass in the position of the
3207first such variant, so it wouldn't have to be found again. But that is not the
3208case, because typically when the caller is likely to use this flag, it won't be
3209calling this routine unless it finds something that won't fit into a byte.
3210Otherwise it tries to not upgrade and just use bytes. But some things that
3211do fit into a byte are variants in utf8, and the caller may not have been
3212keeping track of these.)
3213
3214If the routine itself changes the string, it adds a trailing NUL. Such a NUL
3215isn't guaranteed due to having other routines do the work in some input cases,
3216or if the input is already flagged as being in utf8.
3217
3218The speed of this could perhaps be improved for many cases if someone wanted to
3219write a fast function that counts the number of variant characters in a string,
3220especially if it could return the position of the first one.
3221
8d6d96c1
HS
3222*/
3223
3224STRLEN
b3ab6785 3225Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
8d6d96c1 3226{
97aff369 3227 dVAR;
7918f24d 3228
b3ab6785 3229 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
7918f24d 3230
808c356f
RGS
3231 if (sv == &PL_sv_undef)
3232 return 0;
e0e62c2a
NIS
3233 if (!SvPOK(sv)) {
3234 STRLEN len = 0;
d52b7888
NC
3235 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3236 (void) sv_2pv_flags(sv,&len, flags);
b3ab6785
KW
3237 if (SvUTF8(sv)) {
3238 if (extra) SvGROW(sv, SvCUR(sv) + extra);
d52b7888 3239 return len;
b3ab6785 3240 }
d52b7888
NC
3241 } else {
3242 (void) SvPV_force(sv,len);
3243 }
e0e62c2a 3244 }
4411f3b6 3245
f5cee72b 3246 if (SvUTF8(sv)) {
b3ab6785 3247 if (extra) SvGROW(sv, SvCUR(sv) + extra);
5fec3b1d 3248 return SvCUR(sv);
f5cee72b 3249 }
5fec3b1d 3250
765f542d
NC
3251 if (SvIsCOW(sv)) {
3252 sv_force_normal_flags(sv, 0);
db42d148
NIS
3253 }
3254
b3ab6785 3255 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
799ef3cb 3256 sv_recode_to_utf8(sv, PL_encoding);
b3ab6785
KW
3257 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3258 return SvCUR(sv);
3259 }
3260
4e93345f
KW
3261 if (SvCUR(sv) == 0) {
3262 if (extra) SvGROW(sv, extra);
3263 } else { /* Assume Latin-1/EBCDIC */
c4e7c712 3264 /* This function could be much more efficient if we
2bbc8d55 3265 * had a FLAG in SVs to signal if there are any variant
c4e7c712 3266 * chars in the PV. Given that there isn't such a flag
b3ab6785
KW
3267 * make the loop as fast as possible (although there are certainly ways
3268 * to speed this up, eg. through vectorization) */
3269 U8 * s = (U8 *) SvPVX_const(sv);
3270 U8 * e = (U8 *) SvEND(sv);
3271 U8 *t = s;
3272 STRLEN two_byte_count = 0;
c4e7c712 3273
b3ab6785
KW
3274 if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3275
3276 /* See if really will need to convert to utf8. We mustn't rely on our
3277 * incoming SV being well formed and having a trailing '\0', as certain
3278 * code in pp_formline can send us partially built SVs. */
3279
c4e7c712 3280 while (t < e) {
53c1dcc0 3281 const U8 ch = *t++;
b3ab6785
KW
3282 if (NATIVE_IS_INVARIANT(ch)) continue;
3283
3284 t--; /* t already incremented; re-point to first variant */
3285 two_byte_count = 1;
3286 goto must_be_utf8;
c4e7c712 3287 }
b3ab6785
KW
3288
3289 /* utf8 conversion not needed because all are invariants. Mark as
3290 * UTF-8 even if no variant - saves scanning loop */
c4e7c712 3291 SvUTF8_on(sv);
b3ab6785
KW
3292 return SvCUR(sv);
3293
3294must_be_utf8:
3295
3296 /* Here, the string should be converted to utf8, either because of an
3297 * input flag (two_byte_count = 0), or because a character that
3298 * requires 2 bytes was found (two_byte_count = 1). t points either to
3299 * the beginning of the string (if we didn't examine anything), or to
3300 * the first variant. In either case, everything from s to t - 1 will
3301 * occupy only 1 byte each on output.
3302 *
3303 * There are two main ways to convert. One is to create a new string
3304 * and go through the input starting from the beginning, appending each
3305 * converted value onto the new string as we go along. It's probably
3306 * best to allocate enough space in the string for the worst possible
3307 * case rather than possibly running out of space and having to
3308 * reallocate and then copy what we've done so far. Since everything
3309 * from s to t - 1 is invariant, the destination can be initialized
3310 * with these using a fast memory copy
3311 *
3312 * The other way is to figure out exactly how big the string should be
3313 * by parsing the entire input. Then you don't have to make it big
3314 * enough to handle the worst possible case, and more importantly, if
3315 * the string you already have is large enough, you don't have to
3316 * allocate a new string, you can copy the last character in the input
3317 * string to the final position(s) that will be occupied by the
3318 * converted string and go backwards, stopping at t, since everything
3319 * before that is invariant.
3320 *
3321 * There are advantages and disadvantages to each method.
3322 *
3323 * In the first method, we can allocate a new string, do the memory
3324 * copy from the s to t - 1, and then proceed through the rest of the
3325 * string byte-by-byte.
3326 *
3327 * In the second method, we proceed through the rest of the input
3328 * string just calculating how big the converted string will be. Then
3329 * there are two cases:
3330 * 1) if the string has enough extra space to handle the converted
3331 * value. We go backwards through the string, converting until we
3332 * get to the position we are at now, and then stop. If this
3333 * position is far enough along in the string, this method is
3334 * faster than the other method. If the memory copy were the same
3335 * speed as the byte-by-byte loop, that position would be about
3336 * half-way, as at the half-way mark, parsing to the end and back
3337 * is one complete string's parse, the same amount as starting
3338 * over and going all the way through. Actually, it would be
3339 * somewhat less than half-way, as it's faster to just count bytes
3340 * than to also copy, and we don't have the overhead of allocating
3341 * a new string, changing the scalar to use it, and freeing the
3342 * existing one. But if the memory copy is fast, the break-even
3343 * point is somewhere after half way. The counting loop could be
3344 * sped up by vectorization, etc, to move the break-even point
3345 * further towards the beginning.
3346 * 2) if the string doesn't have enough space to handle the converted
3347 * value. A new string will have to be allocated, and one might
3348 * as well, given that, start from the beginning doing the first
3349 * method. We've spent extra time parsing the string and in
3350 * exchange all we've gotten is that we know precisely how big to
3351 * make the new one. Perl is more optimized for time than space,
3352 * so this case is a loser.
3353 * So what I've decided to do is not use the 2nd method unless it is
3354 * guaranteed that a new string won't have to be allocated, assuming
3355 * the worst case. I also decided not to put any more conditions on it
3356 * than this, for now. It seems likely that, since the worst case is
3357 * twice as big as the unknown portion of the string (plus 1), we won't
3358 * be guaranteed enough space, causing us to go to the first method,
3359 * unless the string is short, or the first variant character is near
3360 * the end of it. In either of these cases, it seems best to use the
3361 * 2nd method. The only circumstance I can think of where this would
3362 * be really slower is if the string had once had much more data in it
3363 * than it does now, but there is still a substantial amount in it */
3364
3365 {
3366 STRLEN invariant_head = t - s;
3367 STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3368 if (SvLEN(sv) < size) {
3369
3370 /* Here, have decided to allocate a new string */
3371
3372 U8 *dst;
3373 U8 *d;
3374
3375 Newx(dst, size, U8);
3376
3377 /* If no known invariants at the beginning of the input string,
3378 * set so starts from there. Otherwise, can use memory copy to
3379 * get up to where we are now, and then start from here */
3380
3381 if (invariant_head <= 0) {
3382 d = dst;
3383 } else {
3384 Copy(s, dst, invariant_head, char);
3385 d = dst + invariant_head;
3386 }
3387
3388 while (t < e) {
3389 const UV uv = NATIVE8_TO_UNI(*t++);
3390 if (UNI_IS_INVARIANT(uv))
3391 *d++ = (U8)UNI_TO_NATIVE(uv);
3392 else {
3393 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3394 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3395 }
3396 }
3397 *d = '\0';
3398 SvPV_free(sv); /* No longer using pre-existing string */
3399 SvPV_set(sv, (char*)dst);
3400 SvCUR_set(sv, d - dst);
3401 SvLEN_set(sv, size);
3402 } else {
3403
3404 /* Here, have decided to get the exact size of the string.
3405 * Currently this happens only when we know that there is
3406 * guaranteed enough space to fit the converted string, so
3407 * don't have to worry about growing. If two_byte_count is 0,
3408 * then t points to the first byte of the string which hasn't
3409 * been examined yet. Otherwise two_byte_count is 1, and t
3410 * points to the first byte in the string that will expand to
3411 * two. Depending on this, start examining at t or 1 after t.
3412 * */
3413
3414 U8 *d = t + two_byte_count;
3415
3416
3417 /* Count up the remaining bytes that expand to two */
3418
3419 while (d < e) {
3420 const U8 chr = *d++;
3421 if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3422 }
3423
3424 /* The string will expand by just the number of bytes that
3425 * occupy two positions. But we are one afterwards because of
3426 * the increment just above. This is the place to put the
3427 * trailing NUL, and to set the length before we decrement */
3428
3429 d += two_byte_count;
3430 SvCUR_set(sv, d - s);
3431 *d-- = '\0';
3432
3433
3434 /* Having decremented d, it points to the position to put the
3435 * very last byte of the expanded string. Go backwards through
3436 * the string, copying and expanding as we go, stopping when we
3437 * get to the part that is invariant the rest of the way down */
3438
3439 e--;
3440 while (e >= t) {
3441 const U8 ch = NATIVE8_TO_UNI(*e--);
3442 if (UNI_IS_INVARIANT(ch)) {
3443 *d-- = UNI_TO_NATIVE(ch);
3444 } else {
3445 *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3446 *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3447 }
3448 }
3449 }
3450 }
560a288e 3451 }
b3ab6785
KW
3452
3453 /* Mark as UTF-8 even if no variant - saves scanning loop */
3454 SvUTF8_on(sv);
4411f3b6 3455 return SvCUR(sv);
560a288e
GS
3456}
3457
c461cf8f
JH
3458/*
3459=for apidoc sv_utf8_downgrade
3460
78ea37eb 3461Attempts to convert the PV of an SV from characters to bytes.
2bbc8d55
SP
3462If the PV contains a character that cannot fit
3463in a byte, this conversion will fail;
78ea37eb 3464in this case, either returns false or, if C<fail_ok> is not
c461cf8f
JH
3465true, croaks.
3466
13a6c0e0
JH
3467This is not as a general purpose Unicode to byte encoding interface:
3468use the Encode extension for that.
3469
c461cf8f
JH
3470=cut
3471*/
3472
560a288e 3473bool
7bc54cea 3474Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
560a288e 3475{
97aff369 3476 dVAR;
7918f24d
NC
3477
3478 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3479
78ea37eb 3480 if (SvPOKp(sv) && SvUTF8(sv)) {
fa301091 3481 if (SvCUR(sv)) {
03cfe0ae 3482 U8 *s;
652088fc 3483 STRLEN len;
fa301091 3484
765f542d
NC
3485 if (SvIsCOW(sv)) {
3486 sv_force_normal_flags(sv, 0);
3487 }
03cfe0ae
NIS
3488 s = (U8 *) SvPV(sv, len);
3489 if (!utf8_to_bytes(s, &len)) {
fa301091
JH
3490 if (fail_ok)
3491 return FALSE;
3492 else {
3493 if (PL_op)
3494 Perl_croak(aTHX_ "Wide character in %s",
53e06cf0 3495 OP_DESC(PL_op));
fa301091
JH
3496 else
3497 Perl_croak(aTHX_ "Wide character");
3498 }
4b3603a4 3499 }
b162af07 3500 SvCUR_set(sv, len);
67e989fb 3501 }
560a288e 3502 }
ffebcc3e 3503 SvUTF8_off(sv);
560a288e
GS
3504 return TRUE;
3505}
3506
c461cf8f
JH
3507/*
3508=for apidoc sv_utf8_encode
3509
78ea37eb
TS
3510Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3511flag off so that it looks like octets again.
c461cf8f
JH
3512
3513=cut
3514*/
3515
560a288e 3516void
7bc54cea 3517Perl_sv_utf8_encode(pTHX_ register SV *const sv)
560a288e 3518{
7918f24d
NC
3519 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3520
4c94c214
NC
3521 if (SvIsCOW(sv)) {
3522 sv_force_normal_flags(sv, 0);
3523 }
3524 if (SvREADONLY(sv)) {
6ad8f254 3525 Perl_croak_no_modify(aTHX);
4c94c214 3526 }
a5f5288a 3527 (void) sv_utf8_upgrade(sv);
560a288e
GS
3528 SvUTF8_off(sv);
3529}
3530
4411f3b6
NIS
3531/*
3532=for apidoc sv_utf8_decode
3533
78ea37eb
TS
3534If the PV of the SV is an octet sequence in UTF-8
3535and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3536so that it looks like a character. If the PV contains only single-byte
3537characters, the C<SvUTF8> flag stays being off.
3538Scans PV for validity and returns false if the PV is invalid UTF-8.
4411f3b6
NIS
3539
3540=cut
3541*/
3542
560a288e 3543bool
7bc54cea 3544Perl_sv_utf8_decode(pTHX_ register SV *const sv)
560a288e 3545{
7918f24d
NC
3546 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3547
78ea37eb 3548 if (SvPOKp(sv)) {
93524f2b
NC
3549 const U8 *c;
3550 const U8 *e;
9cbac4c7 3551
645c22ef
DM
3552 /* The octets may have got themselves encoded - get them back as
3553 * bytes
3554 */
3555 if (!sv_utf8_downgrade(sv, TRUE))
560a288e
GS
3556 return FALSE;
3557
3558 /* it is actually just a matter of turning the utf8 flag on, but
3559 * we want to make sure everything inside is valid utf8 first.
3560 */
93524f2b 3561 c = (const U8 *) SvPVX_const(sv);
63cd0674 3562 if (!is_utf8_string(c, SvCUR(sv)+1))
67e989fb 3563 return FALSE;
93524f2b 3564 e = (const U8 *) SvEND(sv);
511c2ff0 3565 while (c < e) {
b64e5050 3566 const U8 ch = *c++;
c4d5f83a 3567 if (!UTF8_IS_INVARIANT(ch)) {
67e989fb
JH
3568 SvUTF8_on(sv);
3569 break;
3570 }
560a288e 3571 }
560a288e
GS
3572 }
3573 return TRUE;
3574}
3575
954c1994
GS
3576/*
3577=for apidoc sv_setsv
3578
645c22ef
DM
3579Copies the contents of the source SV C<ssv> into the destination SV
3580C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3581function if the source SV needs to be reused. Does not handle 'set' magic.
3582Loosely speaking, it performs a copy-by-value, obliterating any previous
3583content of the destination.
3584
3585You probably want to use one of the assortment of wrappers, such as
3586C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3587C<SvSetMagicSV_nosteal>.
3588
8d6d96c1
HS
3589=for apidoc sv_setsv_flags
3590
645c22ef
DM
3591Copies the contents of the source SV C<ssv> into the destination SV
3592C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3593function if the source SV needs to be reused. Does not handle 'set' magic.
3594Loosely speaking, it performs a copy-by-value, obliterating any previous
3595content of the destination.
3596If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
5fcdf167
NC
3597C<ssv> if appropriate, else not. If the C<flags> parameter has the
3598C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3599and C<sv_setsv_nomg> are implemented in terms of this function.
645c22ef
DM
3600
3601You probably want to use one of the assortment of wrappers, such as
3602C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3603C<SvSetMagicSV_nosteal>.
3604
3605This is the primary function for copying scalars, and most other
3606copy-ish functions and macros use this underneath.
8d6d96c1
HS
3607
3608=cut
3609*/
3610
5d0301b7 3611static void
7bc54cea 3612S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
5d0301b7 3613{
70cd14a1 3614 I32 mro_changes = 0; /* 1 = method, 2 = isa */
dd69841b 3615
7918f24d
NC
3616 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3617
5d0301b7
NC
3618 if (dtype != SVt_PVGV) {
3619 const char * const name = GvNAME(sstr);
3620 const STRLEN len = GvNAMELEN(sstr);
0d092c36 3621 {
f7877b28
NC
3622 if (dtype >= SVt_PV) {
3623 SvPV_free(dstr);
3624 SvPV_set(dstr, 0);
3625 SvLEN_set(dstr, 0);
3626 SvCUR_set(dstr, 0);
3627 }
0d092c36 3628 SvUPGRADE(dstr, SVt_PVGV);
dedf8e73 3629 (void)SvOK_off(dstr);
2e5b91de
NC
3630 /* FIXME - why are we doing this, then turning it off and on again
3631 below? */
3632 isGV_with_GP_on(dstr);
f7877b28 3633 }
5d0301b7
NC
3634 GvSTASH(dstr) = GvSTASH(sstr);
3635 if (GvSTASH(dstr))
daba3364 3636 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
159b6efe 3637 gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
5d0301b7
NC
3638 SvFAKE_on(dstr); /* can coerce to non-glob */
3639 }
3640
159b6efe 3641 if(GvGP(MUTABLE_GV(sstr))) {
dd69841b
BB
3642 /* If source has method cache entry, clear it */
3643 if(GvCVGEN(sstr)) {
3644 SvREFCNT_dec(GvCV(sstr));
3645 GvCV(sstr) = NULL;
3646 GvCVGEN(sstr) = 0;
3647 }
3648 /* If source has a real method, then a method is
3649 going to change */
159b6efe 3650 else if(GvCV((const GV *)sstr)) {
70cd14a1 3651 mro_changes = 1;
dd69841b
BB
3652 }
3653 }
3654
3655 /* If dest already had a real method, that's a change as well */
159b6efe 3656 if(!mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)) {
70cd14a1 3657 mro_changes = 1;
dd69841b
BB
3658 }
3659
159b6efe 3660 if(strEQ(GvNAME((const GV *)dstr),"ISA"))
70cd14a1
CB
3661 mro_changes = 2;
3662
159b6efe 3663 gp_free(MUTABLE_GV(dstr));
2e5b91de 3664 isGV_with_GP_off(dstr);
5d0301b7 3665 (void)SvOK_off(dstr);
2e5b91de 3666 isGV_with_GP_on(dstr);
dedf8e73 3667 GvINTRO_off(dstr); /* one-shot flag */
5d0301b7
NC
3668 GvGP(dstr) = gp_ref(GvGP(sstr));
3669 if (SvTAINTED(sstr))
3670 SvTAINT(dstr);
3671 if (GvIMPORTED(dstr) != GVf_IMPORTED
3672 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3673 {
3674 GvIMPORTED_on(dstr);
3675 }
3676 GvMULTI_on(dstr);
70cd14a1
CB
3677 if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3678 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
5d0301b7
NC
3679 return;
3680}
3681
b8473700 3682static void
7bc54cea 3683S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
7918f24d 3684{
b8473700
NC
3685 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3686 SV *dref = NULL;
3687 const int intro = GvINTRO(dstr);
2440974c 3688 SV **location;
3386d083 3689 U8 import_flag = 0;
27242d61
NC
3690 const U32 stype = SvTYPE(sref);
3691
7918f24d 3692 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
b8473700 3693
b8473700
NC
3694 if (intro) {
3695 GvINTRO_off(dstr); /* one-shot flag */
3696 GvLINE(dstr) = CopLINE(PL_curcop);
159b6efe 3697 GvEGV(dstr) = MUTABLE_GV(dstr);
b8473700
NC
3698 }
3699 GvMULTI_on(dstr);
27242d61 3700 switch (stype) {
b8473700 3701 case SVt_PVCV:
27242d61
NC
3702 location = (SV **) &GvCV(dstr);
3703 import_flag = GVf_IMPORTED_CV;
3704 goto common;
3705 case SVt_PVHV:
3706 location = (SV **) &GvHV(dstr);
3707 import_flag = GVf_IMPORTED_HV;
3708 goto common;
3709 case SVt_PVAV:
3710 location = (SV **) &GvAV(dstr);
3711 import_flag = GVf_IMPORTED_AV;
3712 goto common;
3713 case SVt_PVIO:
3714 location = (SV **) &GvIOp(dstr);
3715 goto common;
3716 case SVt_PVFM:
3717 location = (SV **) &GvFORM(dstr);
ef595a33 3718 goto common;
27242d61
NC
3719 default:
3720 location = &GvSV(dstr);
3721 import_flag = GVf_IMPORTED_SV;
3722 common:
b8473700 3723 if (intro) {
27242d61 3724 if (stype == SVt_PVCV) {
ea726b52 3725 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
5f2fca8a 3726 if (GvCVGEN(dstr)) {
27242d61
NC
3727 SvREFCNT_dec(GvCV(dstr));
3728 GvCV(dstr) = NULL;
3729 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
27242d61 3730 }
b8473700 3731 }
27242d61 3732 SAVEGENERICSV(*location);
b8473700
NC
3733 }
3734 else
27242d61 3735 dref = *location;
5f2fca8a 3736 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
ea726b52 3737 CV* const cv = MUTABLE_CV(*location);
b8473700 3738 if (cv) {
159b6efe 3739 if (!GvCVGEN((const GV *)dstr) &&
b8473700
NC
3740 (CvROOT(cv) || CvXSUB(cv)))
3741 {
3742 /* Redefining a sub - warning is mandatory if
3743 it was a const and its value changed. */
ea726b52 3744 if (CvCONST(cv) && CvCONST((const CV *)sref)
126f53f3
NC
3745 && cv_const_sv(cv)
3746 == cv_const_sv((const CV *)sref)) {
6f207bd3 3747 NOOP;
b8473700
NC
3748 /* They are 2 constant subroutines generated from
3749 the same constant. This probably means that
3750 they are really the "same" proxy subroutine
3751 instantiated in 2 places. Most likely this is
3752 when a constant is exported twice. Don't warn.
3753 */
3754 }
3755 else if (ckWARN(WARN_REDEFINE)
3756 || (CvCONST(cv)
ea726b52 3757 && (!CvCONST((const CV *)sref)
b8473700 3758 || sv_cmp(cv_const_sv(cv),
126f53f3
NC
3759 cv_const_sv((const CV *)
3760 sref))))) {
b8473700 3761 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10edeb5d
JH
3762 (const char *)
3763 (CvCONST(cv)
3764 ? "Constant subroutine %s::%s redefined"
3765 : "Subroutine %s::%s redefined"),
159b6efe
NC
3766 HvNAME_get(GvSTASH((const GV *)dstr)),
3767 GvENAME(MUTABLE_GV(dstr)));
b8473700
NC
3768 }
3769 }
3770 if (!intro)
159b6efe 3771 cv_ckproto_len(cv, (const GV *)dstr,
cbf82dd0
NC
3772 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3773 SvPOK(sref) ? SvCUR(sref) : 0);
b8473700 3774 }
b8473700
NC
3775 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3776 GvASSUMECV_on(dstr);
dd69841b 3777 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
b8473700 3778 }
2440974c 3779 *location = sref;
3386d083
NC
3780 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3781 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3782 GvFLAGS(dstr) |= import_flag;
b8473700 3783 }
d851b122
TC
3784 if (stype == SVt_PVAV && strEQ(GvNAME((GV*)dstr), "ISA")) {
3785 sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3786 mro_isa_changed_in(GvSTASH(dstr));
3787 }
b8473700
NC
3788 break;
3789 }
b37c2d43 3790 SvREFCNT_dec(dref);
b8473700
NC
3791 if (SvTAINTED(sstr))
3792 SvTAINT(dstr);
3793 return;
3794}
3795
8d6d96c1 3796void
7bc54cea 3797Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
8d6d96c1 3798{
97aff369 3799 dVAR;
8990e307
LW
3800 register U32 sflags;
3801 register int dtype;
42d0e0b7 3802 register svtype stype;
463ee0b2 3803
7918f24d
NC
3804 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3805
79072805
LW
3806 if (sstr == dstr)
3807 return;
29f4f0ab
NC
3808
3809 if (SvIS_FREED(dstr)) {
3810 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
be2597df 3811 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
29f4f0ab 3812 }
765f542d 3813 SV_CHECK_THINKFIRST_COW_DROP(dstr);
79072805 3814 if (!sstr)
3280af22 3815 sstr = &PL_sv_undef;
29f4f0ab 3816 if (SvIS_FREED(sstr)) {
6c9570dc
MHM
3817 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3818 (void*)sstr, (void*)dstr);
29f4f0ab 3819 }
8990e307
LW
3820 stype = SvTYPE(sstr);
3821 dtype = SvTYPE(dstr);
79072805 3822
52944de8 3823 (void)SvAMAGIC_off(dstr);
7a5fa8a2 3824 if ( SvVOK(dstr) )
ece467f9
JP
3825 {
3826 /* need to nuke the magic */
3827 mg_free(dstr);
ece467f9 3828 }
9e7bc3e8 3829
463ee0b2 3830 /* There's a lot of redundancy below but we're going for speed here */
79072805 3831
8990e307 3832 switch (stype) {
79072805 3833 case SVt_NULL:
aece5585 3834 undef_sstr:
20408e3c
GS
3835 if (dtype != SVt_PVGV) {
3836 (void)SvOK_off(dstr);
3837 return;
3838 }
3839 break;
463ee0b2 3840 case SVt_IV:
aece5585
GA
3841 if (SvIOK(sstr)) {
3842 switch (dtype) {
3843 case SVt_NULL:
8990e307 3844 sv_upgrade(dstr, SVt_IV);
aece5585
GA
3845 break;
3846 case SVt_NV:
aece5585 3847 case SVt_PV:
a0d0e21e 3848 sv_upgrade(dstr, SVt_PVIV);
aece5585 3849 break;
010be86b
NC
3850 case SVt_PVGV:
3851 goto end_of_first_switch;
aece5585
GA
3852 }
3853 (void)SvIOK_only(dstr);
45977657 3854 SvIV_set(dstr, SvIVX(sstr));
25da4f38
IZ
3855 if (SvIsUV(sstr))
3856 SvIsUV_on(dstr);
37c25af0
NC
3857 /* SvTAINTED can only be true if the SV has taint magic, which in
3858 turn means that the SV type is PVMG (or greater). This is the
3859 case statement for SVt_IV, so this cannot be true (whatever gcov
3860 may say). */
3861 assert(!SvTAINTED(sstr));
aece5585 3862 return;
8990e307 3863 }
4df7f6af
NC
3864 if (!SvROK(sstr))
3865 goto undef_sstr;
3866 if (dtype < SVt_PV && dtype != SVt_IV)
3867 sv_upgrade(dstr, SVt_IV);
3868 break;
aece5585 3869
463ee0b2 3870 case SVt_NV:
aece5585
GA
3871 if (SvNOK(sstr)) {
3872 switch (dtype) {
3873 case SVt_NULL:
3874 case SVt_IV:
8990e307 3875 sv_upgrade(dstr, SVt_NV);
aece5585 3876 break;
aece5585
GA
3877 case SVt_PV:
3878 case SVt_PVIV:
a0d0e21e 3879 sv_upgrade(dstr, SVt_PVNV);
aece5585 3880 break;
010be86b
NC
3881 case SVt_PVGV:
3882 goto end_of_first_switch;
aece5585 3883 }
9d6ce603 3884 SvNV_set(dstr, SvNVX(sstr));
aece5585 3885 (void)SvNOK_only(dstr);
37c25af0
NC
3886 /* SvTAINTED can only be true if the SV has taint magic, which in
3887 turn means that the SV type is PVMG (or greater). This is the
3888 case statement for SVt_NV, so this cannot be true (whatever gcov
3889 may say). */
3890 assert(!SvTAINTED(sstr));
aece5585 3891 return;
8990e307 3892 }
aece5585
GA
3893 goto undef_sstr;
3894
fc36a67e 3895 case SVt_PVFM:
f8c7b90f 3896#ifdef PERL_OLD_COPY_ON_WRITE
d89fc664
NC
3897 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3898 if (dtype < SVt_PVIV)
3899 sv_upgrade(dstr, SVt_PVIV);
3900 break;
3901 }
3902 /* Fall through */
3903#endif
3904 case SVt_PV:
8990e307 3905 if (dtype < SVt_PV)
463ee0b2 3906 sv_upgrade(dstr, SVt_PV);
463ee0b2
LW
3907 break;
3908 case SVt_PVIV:
8990e307 3909 if (dtype < SVt_PVIV)
463ee0b2 3910 sv_upgrade(dstr, SVt_PVIV);
463ee0b2
LW
3911 break;
3912 case SVt_PVNV:
8990e307 3913 if (dtype < SVt_PVNV)
463ee0b2 3914 sv_upgrade(dstr, SVt_PVNV);
463ee0b2 3915 break;
489f7bfe 3916 default:
a3b680e6
AL
3917 {
3918 const char * const type = sv_reftype(sstr,0);
533c011a 3919 if (PL_op)
94bbb3f4 3920 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4633a7c4 3921 else
a3b680e6
AL
3922 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3923 }
4633a7c4
LW
3924 break;
3925
f0826785
BM
3926 case SVt_REGEXP:
3927 if (dtype < SVt_REGEXP)
3928 sv_upgrade(dstr, SVt_REGEXP);
3929 break;
3930
cecf5685 3931 /* case SVt_BIND: */
39cb70dc 3932 case SVt_PVLV:
79072805 3933 case SVt_PVGV:
cecf5685 3934 if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
d4c19fe8 3935 glob_assign_glob(dstr, sstr, dtype);
b8c701c1 3936 return;
79072805 3937 }
cecf5685 3938 /* SvVALID means that this PVGV is playing at being an FBM. */
5f66b61c 3939 /*FALLTHROUGH*/
79072805 3940
489f7bfe 3941 case SVt_PVMG:
8d6d96c1 3942 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
973f89ab 3943 mg_get(sstr);
1d9c78c6 3944 if (SvTYPE(sstr) != stype) {
973f89ab 3945 stype = SvTYPE(sstr);
cecf5685 3946 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
d4c19fe8 3947 glob_assign_glob(dstr, sstr, dtype);
b8c701c1
NC
3948 return;
3949 }
973f89ab
CS
3950 }
3951 }
ded42b9f 3952 if (stype == SVt_PVLV)
862a34c6 3953 SvUPGRADE(dstr, SVt_PVNV);
ded42b9f 3954 else
42d0e0b7 3955 SvUPGRADE(dstr, (svtype)stype);
79072805 3956 }
010be86b 3957 end_of_first_switch:
79072805 3958
ff920335
NC
3959 /* dstr may have been upgraded. */
3960 dtype = SvTYPE(dstr);
8990e307
LW
3961 sflags = SvFLAGS(sstr);
3962
ba2fdce6 3963 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
85324b4d
NC
3964 /* Assigning to a subroutine sets the prototype. */
3965 if (SvOK(sstr)) {
3966 STRLEN len;
3967 const char *const ptr = SvPV_const(sstr, len);
3968
3969 SvGROW(dstr, len + 1);
3970 Copy(ptr, SvPVX(dstr), len + 1, char);
3971 SvCUR_set(dstr, len);
fcddd32e 3972 SvPOK_only(dstr);
ba2fdce6 3973 SvFLAGS(dstr) |= sflags & SVf_UTF8;
85324b4d
NC
3974 } else {
3975 SvOK_off(dstr);
3976 }
ba2fdce6
NC
3977 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3978 const char * const type = sv_reftype(dstr,0);
3979 if (PL_op)
94bbb3f4 3980 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
ba2fdce6
NC
3981 else
3982 Perl_croak(aTHX_ "Cannot copy to %s", type);
85324b4d 3983 } else if (sflags & SVf_ROK) {
cecf5685 3984 if (isGV_with_GP(dstr) && dtype == SVt_PVGV
785bee4f 3985 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
acaa9288
NC
3986 sstr = SvRV(sstr);
3987 if (sstr == dstr) {
3988 if (GvIMPORTED(dstr) != GVf_IMPORTED
3989 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3990 {
3991 GvIMPORTED_on(dstr);
3992 }
3993 GvMULTI_on(dstr);
3994 return;
3995 }
785bee4f
NC
3996 glob_assign_glob(dstr, sstr, dtype);
3997 return;
acaa9288
NC
3998 }
3999
8990e307 4000 if (dtype >= SVt_PV) {
fdc5b023 4001 if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
d4c19fe8 4002 glob_assign_ref(dstr, sstr);
b8c701c1
NC
4003 return;
4004 }
3f7c398e 4005 if (SvPVX_const(dstr)) {
8bd4d4c5 4006 SvPV_free(dstr);
b162af07
SP
4007 SvLEN_set(dstr, 0);
4008 SvCUR_set(dstr, 0);
a0d0e21e 4009 }
8990e307 4010 }
a0d0e21e 4011 (void)SvOK_off(dstr);
b162af07 4012 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
96d4b0ee 4013 SvFLAGS(dstr) |= sflags & SVf_ROK;
dfd48732
NC
4014 assert(!(sflags & SVp_NOK));
4015 assert(!(sflags & SVp_IOK));
4016 assert(!(sflags & SVf_NOK));
4017 assert(!(sflags & SVf_IOK));
ed6116ce 4018 }
cecf5685 4019 else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
c0c44674 4020 if (!(sflags & SVf_OK)) {
a2a5de95
NC
4021 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4022 "Undefined value assigned to typeglob");
c0c44674
NC
4023 }
4024 else {
4025 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
daba3364 4026 if (dstr != (const SV *)gv) {
c0c44674 4027 if (GvGP(dstr))
159b6efe 4028 gp_free(MUTABLE_GV(dstr));
c0c44674
NC
4029 GvGP(dstr) = gp_ref(GvGP(gv));
4030 }
4031 }
4032 }
f0826785
BM
4033 else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4034 reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4035 }
8990e307 4036 else if (sflags & SVp_POK) {
765f542d 4037 bool isSwipe = 0;
79072805
LW
4038
4039 /*
4040 * Check to see if we can just swipe the string. If so, it's a
4041 * possible small lose on short strings, but a big win on long ones.
3f7c398e
SP
4042 * It might even be a win on short strings if SvPVX_const(dstr)
4043 * has to be allocated and SvPVX_const(sstr) has to be freed.
34482cd6
NC
4044 * Likewise if we can set up COW rather than doing an actual copy, we
4045 * drop to the else clause, as the swipe code and the COW setup code
4046 * have much in common.
79072805
LW
4047 */
4048
120fac95
NC
4049 /* Whichever path we take through the next code, we want this true,
4050 and doing it now facilitates the COW check. */
4051 (void)SvPOK_only(dstr);
4052
765f542d 4053 if (
34482cd6
NC
4054 /* If we're already COW then this clause is not true, and if COW
4055 is allowed then we drop down to the else and make dest COW
4056 with us. If caller hasn't said that we're allowed to COW
4057 shared hash keys then we don't do the COW setup, even if the
4058 source scalar is a shared hash key scalar. */
4059 (((flags & SV_COW_SHARED_HASH_KEYS)
4060 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4061 : 1 /* If making a COW copy is forbidden then the behaviour we
4062 desire is as if the source SV isn't actually already
4063 COW, even if it is. So we act as if the source flags
4064 are not COW, rather than actually testing them. */
4065 )
f8c7b90f 4066#ifndef PERL_OLD_COPY_ON_WRITE
34482cd6
NC
4067 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4068 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4069 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4070 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4071 but in turn, it's somewhat dead code, never expected to go
4072 live, but more kept as a placeholder on how to do it better
4073 in a newer implementation. */
4074 /* If we are COW and dstr is a suitable target then we drop down
4075 into the else and make dest a COW of us. */
b8f9541a
NC
4076 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4077#endif
4078 )
765f542d 4079 &&
765f542d
NC
4080 !(isSwipe =
4081 (sflags & SVs_TEMP) && /* slated for free anyway? */
4082 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
5fcdf167
NC
4083 (!(flags & SV_NOSTEAL)) &&
4084 /* and we're allowed to steal temps */
765f542d 4085 SvREFCNT(sstr) == 1 && /* and no other references to it? */
61e5f455 4086 SvLEN(sstr)) /* and really is a string */
f8c7b90f 4087#ifdef PERL_OLD_COPY_ON_WRITE
cb23d5b1
NC
4088 && ((flags & SV_COW_SHARED_HASH_KEYS)
4089 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4090 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4b1c7d9e 4091 && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
cb23d5b1 4092 : 1)
765f542d
NC
4093#endif
4094 ) {
4095 /* Failed the swipe test, and it's not a shared hash key either.
4096 Have to copy the string. */
4097 STRLEN len = SvCUR(sstr);
4098 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3f7c398e 4099 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
765f542d
NC
4100 SvCUR_set(dstr, len);
4101 *SvEND(dstr) = '\0';
765f542d 4102 } else {
f8c7b90f 4103 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
765f542d 4104 be true in here. */
765f542d
NC
4105 /* Either it's a shared hash key, or it's suitable for
4106 copy-on-write or we can swipe the string. */
46187eeb 4107 if (DEBUG_C_TEST) {
ed252734 4108 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
e419cbc5
NC
4109 sv_dump(sstr);
4110 sv_dump(dstr);
46187eeb 4111 }
f8c7b90f 4112#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4113 if (!isSwipe) {
765f542d
NC
4114 if ((sflags & (SVf_FAKE | SVf_READONLY))
4115 != (SVf_FAKE | SVf_READONLY)) {
4116 SvREADONLY_on(sstr);
4117 SvFAKE_on(sstr);
4118 /* Make the source SV into a loop of 1.
4119 (about to become 2) */
a29f6d03 4120 SV_COW_NEXT_SV_SET(sstr, sstr);
765f542d
NC
4121 }
4122 }
4123#endif
4124 /* Initial code is common. */
94010e71
NC
4125 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4126 SvPV_free(dstr);
79072805 4127 }
765f542d 4128
765f542d
NC
4129 if (!isSwipe) {
4130 /* making another shared SV. */
4131 STRLEN cur = SvCUR(sstr);
4132 STRLEN len = SvLEN(sstr);
f8c7b90f 4133#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4134 if (len) {
b8f9541a 4135 assert (SvTYPE(dstr) >= SVt_PVIV);
765f542d
NC
4136 /* SvIsCOW_normal */
4137 /* splice us in between source and next-after-source. */
a29f6d03
NC
4138 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4139 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4140 SvPV_set(dstr, SvPVX_mutable(sstr));
a604c751
NC
4141 } else
4142#endif
4143 {
765f542d 4144 /* SvIsCOW_shared_hash */
46187eeb
NC
4145 DEBUG_C(PerlIO_printf(Perl_debug_log,
4146 "Copy on write: Sharing hash\n"));
b8f9541a 4147
bdd68bc3 4148 assert (SvTYPE(dstr) >= SVt_PV);
765f542d 4149 SvPV_set(dstr,
d1db91c6 4150 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
bdd68bc3 4151 }
87a1ef3d
SP
4152 SvLEN_set(dstr, len);
4153 SvCUR_set(dstr, cur);
765f542d
NC
4154 SvREADONLY_on(dstr);
4155 SvFAKE_on(dstr);
765f542d
NC
4156 }
4157 else
765f542d 4158 { /* Passes the swipe test. */
78d1e721 4159 SvPV_set(dstr, SvPVX_mutable(sstr));
765f542d
NC
4160 SvLEN_set(dstr, SvLEN(sstr));
4161 SvCUR_set(dstr, SvCUR(sstr));
4162
4163 SvTEMP_off(dstr);
4164 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
6136c704 4165 SvPV_set(sstr, NULL);
765f542d
NC
4166 SvLEN_set(sstr, 0);
4167 SvCUR_set(sstr, 0);
4168 SvTEMP_off(sstr);
4169 }
4170 }
8990e307 4171 if (sflags & SVp_NOK) {
9d6ce603 4172 SvNV_set(dstr, SvNVX(sstr));
79072805 4173 }
8990e307 4174 if (sflags & SVp_IOK) {
23525414
NC
4175 SvIV_set(dstr, SvIVX(sstr));
4176 /* Must do this otherwise some other overloaded use of 0x80000000
4177 gets confused. I guess SVpbm_VALID */
2b1c7e3e 4178 if (sflags & SVf_IVisUV)
25da4f38 4179 SvIsUV_on(dstr);
79072805 4180 }
96d4b0ee 4181 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4f2da183 4182 {
b0a11fe1 4183 const MAGIC * const smg = SvVSTRING_mg(sstr);
4f2da183
NC
4184 if (smg) {
4185 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4186 smg->mg_ptr, smg->mg_len);
4187 SvRMAGICAL_on(dstr);
4188 }
7a5fa8a2 4189 }
79072805 4190 }
5d581361 4191 else if (sflags & (SVp_IOK|SVp_NOK)) {
c2468cc7 4192 (void)SvOK_off(dstr);
96d4b0ee 4193 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
5d581361
NC
4194 if (sflags & SVp_IOK) {
4195 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4196 SvIV_set(dstr, SvIVX(sstr));
4197 }
3332b3c1 4198 if (sflags & SVp_NOK) {
9d6ce603 4199 SvNV_set(dstr, SvNVX(sstr));
3332b3c1
JH
4200 }
4201 }
79072805 4202 else {
f7877b28 4203 if (isGV_with_GP(sstr)) {
180488f8
NC
4204 /* This stringification rule for globs is spread in 3 places.
4205 This feels bad. FIXME. */
4206 const U32 wasfake = sflags & SVf_FAKE;
4207
4208 /* FAKE globs can get coerced, so need to turn this off
4209 temporarily if it is on. */
4210 SvFAKE_off(sstr);
159b6efe 4211 gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
180488f8
NC
4212 SvFLAGS(sstr) |= wasfake;
4213 }
20408e3c
GS
4214 else
4215 (void)SvOK_off(dstr);
a0d0e21e 4216 }
27c9684d
AP
4217 if (SvTAINTED(sstr))
4218 SvTAINT(dstr);
79072805
LW
4219}
4220
954c1994
GS
4221/*
4222=for apidoc sv_setsv_mg
4223
4224Like C<sv_setsv>, but also handles 'set' magic.
4225
4226=cut
4227*/
4228
79072805 4229void
7bc54cea 4230Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
ef50df4b 4231{
7918f24d
NC
4232 PERL_ARGS_ASSERT_SV_SETSV_MG;
4233
ef50df4b
GS
4234 sv_setsv(dstr,sstr);
4235 SvSETMAGIC(dstr);
4236}
4237
f8c7b90f 4238#ifdef PERL_OLD_COPY_ON_WRITE
ed252734
NC
4239SV *
4240Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4241{
4242 STRLEN cur = SvCUR(sstr);
4243 STRLEN len = SvLEN(sstr);
4244 register char *new_pv;
4245
7918f24d
NC
4246 PERL_ARGS_ASSERT_SV_SETSV_COW;
4247
ed252734
NC
4248 if (DEBUG_C_TEST) {
4249 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
6c9570dc 4250 (void*)sstr, (void*)dstr);
ed252734
NC
4251 sv_dump(sstr);
4252 if (dstr)
4253 sv_dump(dstr);
4254 }
4255
4256 if (dstr) {
4257 if (SvTHINKFIRST(dstr))
4258 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3f7c398e
SP
4259 else if (SvPVX_const(dstr))
4260 Safefree(SvPVX_const(dstr));
ed252734
NC
4261 }
4262 else
4263 new_SV(dstr);
862a34c6 4264 SvUPGRADE(dstr, SVt_PVIV);
ed252734
NC
4265
4266 assert (SvPOK(sstr));
4267 assert (SvPOKp(sstr));
4268 assert (!SvIOK(sstr));
4269 assert (!SvIOKp(sstr));
4270 assert (!SvNOK(sstr));
4271 assert (!SvNOKp(sstr));
4272
4273 if (SvIsCOW(sstr)) {
4274
4275 if (SvLEN(sstr) == 0) {
4276 /* source is a COW shared hash key. */
ed252734
NC
4277 DEBUG_C(PerlIO_printf(Perl_debug_log,
4278 "Fast copy on write: Sharing hash\n"));
d1db91c6 4279 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
ed252734
NC
4280 goto common_exit;
4281 }
4282 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4283 } else {
4284 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
862a34c6 4285 SvUPGRADE(sstr, SVt_PVIV);
ed252734
NC
4286 SvREADONLY_on(sstr);
4287 SvFAKE_on(sstr);
4288 DEBUG_C(PerlIO_printf(Perl_debug_log,
4289 "Fast copy on write: Converting sstr to COW\n"));
4290 SV_COW_NEXT_SV_SET(dstr, sstr);
4291 }
4292 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4293 new_pv = SvPVX_mutable(sstr);
ed252734
NC
4294
4295 common_exit:
4296 SvPV_set(dstr, new_pv);
4297 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4298 if (SvUTF8(sstr))
4299 SvUTF8_on(dstr);
87a1ef3d
SP
4300 SvLEN_set(dstr, len);
4301 SvCUR_set(dstr, cur);
ed252734
NC
4302 if (DEBUG_C_TEST) {
4303 sv_dump(dstr);
4304 }
4305 return dstr;
4306}
4307#endif
4308
954c1994
GS
4309/*
4310=for apidoc sv_setpvn
4311
4312Copies a string into an SV. The C<len> parameter indicates the number of
9e09f5f2
MHM
4313bytes to be copied. If the C<ptr> argument is NULL the SV will become
4314undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
954c1994
GS
4315
4316=cut
4317*/
4318
ef50df4b 4319void
2e000ff2 4320Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
79072805 4321{
97aff369 4322 dVAR;
c6f8c383 4323 register char *dptr;
22c522df 4324
7918f24d
NC
4325 PERL_ARGS_ASSERT_SV_SETPVN;
4326
765f542d 4327 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4328 if (!ptr) {
a0d0e21e 4329 (void)SvOK_off(sv);
463ee0b2
LW
4330 return;
4331 }
22c522df
JH
4332 else {
4333 /* len is STRLEN which is unsigned, need to copy to signed */
a3b680e6 4334 const IV iv = len;
9c5ffd7c
JH
4335 if (iv < 0)
4336 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
22c522df 4337 }
862a34c6 4338 SvUPGRADE(sv, SVt_PV);
c6f8c383 4339
5902b6a9 4340 dptr = SvGROW(sv, len + 1);
c6f8c383
GA
4341 Move(ptr,dptr,len,char);
4342 dptr[len] = '\0';
79072805 4343 SvCUR_set(sv, len);
1aa99e6b 4344 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4345 SvTAINT(sv);
79072805
LW
4346}
4347
954c1994
GS
4348/*
4349=for apidoc sv_setpvn_mg
4350
4351Like C<sv_setpvn>, but also handles 'set' magic.
4352
4353=cut
4354*/
4355
79072805 4356void
2e000ff2 4357Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
ef50df4b 4358{
7918f24d
NC
4359 PERL_ARGS_ASSERT_SV_SETPVN_MG;
4360
ef50df4b
GS
4361 sv_setpvn(sv,ptr,len);
4362 SvSETMAGIC(sv);
4363}
4364
954c1994
GS
4365/*
4366=for apidoc sv_setpv
4367
4368Copies a string into an SV. The string must be null-terminated. Does not
4369handle 'set' magic. See C<sv_setpv_mg>.
4370
4371=cut
4372*/
4373
ef50df4b 4374void
2e000ff2 4375Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4376{
97aff369 4377 dVAR;
79072805
LW
4378 register STRLEN len;
4379
7918f24d
NC
4380 PERL_ARGS_ASSERT_SV_SETPV;
4381
765f542d 4382 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4383 if (!ptr) {
a0d0e21e 4384 (void)SvOK_off(sv);
463ee0b2
LW
4385 return;
4386 }
79072805 4387 len = strlen(ptr);
862a34c6 4388 SvUPGRADE(sv, SVt_PV);
c6f8c383 4389
79072805 4390 SvGROW(sv, len + 1);
463ee0b2 4391 Move(ptr,SvPVX(sv),len+1,char);
79072805 4392 SvCUR_set(sv, len);
1aa99e6b 4393 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2
LW
4394 SvTAINT(sv);
4395}
4396
954c1994
GS
4397/*
4398=for apidoc sv_setpv_mg
4399
4400Like C<sv_setpv>, but also handles 'set' magic.
4401
4402=cut
4403*/
4404
463ee0b2 4405void
2e000ff2 4406Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 4407{
7918f24d
NC
4408 PERL_ARGS_ASSERT_SV_SETPV_MG;
4409
ef50df4b
GS
4410 sv_setpv(sv,ptr);
4411 SvSETMAGIC(sv);
4412}
4413
954c1994 4414/*
47518d95 4415=for apidoc sv_usepvn_flags
954c1994 4416
794a0d33
JH
4417Tells an SV to use C<ptr> to find its string value. Normally the
4418string is stored inside the SV but sv_usepvn allows the SV to use an
4419outside string. The C<ptr> should point to memory that was allocated
c1c21316
NC
4420by C<malloc>. The string length, C<len>, must be supplied. By default
4421this function will realloc (i.e. move) the memory pointed to by C<ptr>,
794a0d33
JH
4422so that pointer should not be freed or used by the programmer after
4423giving it to sv_usepvn, and neither should any pointers from "behind"
c1c21316
NC
4424that pointer (e.g. ptr + 1) be used.
4425
4426If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4427SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
cbf82dd0 4428will be skipped. (i.e. the buffer is actually at least 1 byte longer than
c1c21316 4429C<len>, and already meets the requirements for storing in C<SvPVX>)
954c1994
GS
4430
4431=cut
4432*/
4433
ef50df4b 4434void
2e000ff2 4435Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
463ee0b2 4436{
97aff369 4437 dVAR;
1936d2a7 4438 STRLEN allocate;
7918f24d
NC
4439
4440 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4441
765f542d 4442 SV_CHECK_THINKFIRST_COW_DROP(sv);
862a34c6 4443 SvUPGRADE(sv, SVt_PV);
463ee0b2 4444 if (!ptr) {
a0d0e21e 4445 (void)SvOK_off(sv);
47518d95
NC
4446 if (flags & SV_SMAGIC)
4447 SvSETMAGIC(sv);
463ee0b2
LW
4448 return;
4449 }
3f7c398e 4450 if (SvPVX_const(sv))
8bd4d4c5 4451 SvPV_free(sv);
1936d2a7 4452
0b7042f9 4453#ifdef DEBUGGING
2e90b4cd
NC
4454 if (flags & SV_HAS_TRAILING_NUL)
4455 assert(ptr[len] == '\0');
0b7042f9 4456#endif
2e90b4cd 4457
c1c21316 4458 allocate = (flags & SV_HAS_TRAILING_NUL)
5d487c26 4459 ? len + 1 :
ca7c1a29 4460#ifdef Perl_safesysmalloc_size
5d487c26
NC
4461 len + 1;
4462#else
4463 PERL_STRLEN_ROUNDUP(len + 1);
4464#endif
cbf82dd0
NC
4465 if (flags & SV_HAS_TRAILING_NUL) {
4466 /* It's long enough - do nothing.
4467 Specfically Perl_newCONSTSUB is relying on this. */
4468 } else {
69d25b4f 4469#ifdef DEBUGGING
69d25b4f 4470 /* Force a move to shake out bugs in callers. */
10edeb5d 4471 char *new_ptr = (char*)safemalloc(allocate);
69d25b4f
NC
4472 Copy(ptr, new_ptr, len, char);
4473 PoisonFree(ptr,len,char);
4474 Safefree(ptr);
4475 ptr = new_ptr;
69d25b4f 4476#else
10edeb5d 4477 ptr = (char*) saferealloc (ptr, allocate);
69d25b4f 4478#endif
cbf82dd0 4479 }
ca7c1a29
NC
4480#ifdef Perl_safesysmalloc_size
4481 SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5d487c26 4482#else
1936d2a7 4483 SvLEN_set(sv, allocate);
5d487c26
NC
4484#endif
4485 SvCUR_set(sv, len);
4486 SvPV_set(sv, ptr);
c1c21316 4487 if (!(flags & SV_HAS_TRAILING_NUL)) {
97a130b8 4488 ptr[len] = '\0';
c1c21316 4489 }
1aa99e6b 4490 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4491 SvTAINT(sv);
47518d95
NC
4492 if (flags & SV_SMAGIC)
4493 SvSETMAGIC(sv);
ef50df4b
GS
4494}
4495
f8c7b90f 4496#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4497/* Need to do this *after* making the SV normal, as we need the buffer
4498 pointer to remain valid until after we've copied it. If we let go too early,
4499 another thread could invalidate it by unsharing last of the same hash key
4500 (which it can do by means other than releasing copy-on-write Svs)
4501 or by changing the other copy-on-write SVs in the loop. */
4502STATIC void
5302ffd4 4503S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
765f542d 4504{
7918f24d
NC
4505 PERL_ARGS_ASSERT_SV_RELEASE_COW;
4506
5302ffd4 4507 { /* this SV was SvIsCOW_normal(sv) */
765f542d 4508 /* we need to find the SV pointing to us. */
cf5629ad 4509 SV *current = SV_COW_NEXT_SV(after);
7a5fa8a2 4510
765f542d
NC
4511 if (current == sv) {
4512 /* The SV we point to points back to us (there were only two of us
4513 in the loop.)
4514 Hence other SV is no longer copy on write either. */
4515 SvFAKE_off(after);
4516 SvREADONLY_off(after);
4517 } else {
4518 /* We need to follow the pointers around the loop. */
4519 SV *next;
4520 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4521 assert (next);
4522 current = next;
4523 /* don't loop forever if the structure is bust, and we have
4524 a pointer into a closed loop. */
4525 assert (current != after);
3f7c398e 4526 assert (SvPVX_const(current) == pvx);
765f542d
NC
4527 }
4528 /* Make the SV before us point to the SV after us. */
a29f6d03 4529 SV_COW_NEXT_SV_SET(current, after);
765f542d 4530 }
765f542d
NC
4531 }
4532}
765f542d 4533#endif
645c22ef
DM
4534/*
4535=for apidoc sv_force_normal_flags
4536
4537Undo various types of fakery on an SV: if the PV is a shared string, make
4538a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
765f542d
NC
4539an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4540we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4541then a copy-on-write scalar drops its PV buffer (if any) and becomes
4542SvPOK_off rather than making a copy. (Used where this scalar is about to be
d3050d9d 4543set to some other value.) In addition, the C<flags> parameter gets passed to
765f542d
NC
4544C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4545with flags set to 0.
645c22ef
DM
4546
4547=cut
4548*/
4549
6fc92669 4550void
2e000ff2 4551Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
0f15f207 4552{
97aff369 4553 dVAR;
7918f24d
NC
4554
4555 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4556
f8c7b90f 4557#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4558 if (SvREADONLY(sv)) {
765f542d 4559 if (SvFAKE(sv)) {
b64e5050 4560 const char * const pvx = SvPVX_const(sv);
a28509cc
AL
4561 const STRLEN len = SvLEN(sv);
4562 const STRLEN cur = SvCUR(sv);
5302ffd4
NC
4563 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4564 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4565 we'll fail an assertion. */
4566 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4567
46187eeb
NC
4568 if (DEBUG_C_TEST) {
4569 PerlIO_printf(Perl_debug_log,
4570 "Copy on write: Force normal %ld\n",
4571 (long) flags);
e419cbc5 4572 sv_dump(sv);
46187eeb 4573 }
765f542d
NC
4574 SvFAKE_off(sv);
4575 SvREADONLY_off(sv);
9f653bb5 4576 /* This SV doesn't own the buffer, so need to Newx() a new one: */
6136c704 4577 SvPV_set(sv, NULL);
87a1ef3d 4578 SvLEN_set(sv, 0);
765f542d
NC
4579 if (flags & SV_COW_DROP_PV) {
4580 /* OK, so we don't need to copy our buffer. */
4581 SvPOK_off(sv);
4582 } else {
4583 SvGROW(sv, cur + 1);
4584 Move(pvx,SvPVX(sv),cur,char);
87a1ef3d 4585 SvCUR_set(sv, cur);
765f542d
NC
4586 *SvEND(sv) = '\0';
4587 }
5302ffd4
NC
4588 if (len) {
4589 sv_release_COW(sv, pvx, next);
4590 } else {
4591 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4592 }
46187eeb 4593 if (DEBUG_C_TEST) {
e419cbc5 4594 sv_dump(sv);
46187eeb 4595 }
765f542d 4596 }
923e4eb5 4597 else if (IN_PERL_RUNTIME)
6ad8f254 4598 Perl_croak_no_modify(aTHX);
765f542d
NC
4599 }
4600#else
2213622d 4601 if (SvREADONLY(sv)) {
1c846c1f 4602 if (SvFAKE(sv)) {
b64e5050 4603 const char * const pvx = SvPVX_const(sv);
66a1b24b 4604 const STRLEN len = SvCUR(sv);
10bcdfd6
NC
4605 SvFAKE_off(sv);
4606 SvREADONLY_off(sv);
bd61b366 4607 SvPV_set(sv, NULL);
66a1b24b 4608 SvLEN_set(sv, 0);
1c846c1f 4609 SvGROW(sv, len + 1);
706aa1c9 4610 Move(pvx,SvPVX(sv),len,char);
1c846c1f 4611 *SvEND(sv) = '\0';
bdd68bc3 4612 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
1c846c1f 4613 }
923e4eb5 4614 else if (IN_PERL_RUNTIME)
6ad8f254 4615 Perl_croak_no_modify(aTHX);
0f15f207 4616 }
765f542d 4617#endif
2213622d 4618 if (SvROK(sv))
840a7b70 4619 sv_unref_flags(sv, flags);
6fc92669
GS
4620 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4621 sv_unglob(sv);
b9ad13ac
NC
4622 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4623 /* Need to downgrade the REGEXP to a simple(r) scalar. This is analagous
4624 to sv_unglob. We only need it here, so inline it. */
4625 const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4626 SV *const temp = newSV_type(new_type);
4627 void *const temp_p = SvANY(sv);
4628
4629 if (new_type == SVt_PVMG) {
4630 SvMAGIC_set(temp, SvMAGIC(sv));
4631 SvMAGIC_set(sv, NULL);
4632 SvSTASH_set(temp, SvSTASH(sv));
4633 SvSTASH_set(sv, NULL);
4634 }
4635 SvCUR_set(temp, SvCUR(sv));
4636 /* Remember that SvPVX is in the head, not the body. */
4637 if (SvLEN(temp)) {
4638 SvLEN_set(temp, SvLEN(sv));
4639 /* This signals "buffer is owned by someone else" in sv_clear,
4640 which is the least effort way to stop it freeing the buffer.
4641 */
4642 SvLEN_set(sv, SvLEN(sv)+1);
4643 } else {
4644 /* Their buffer is already owned by someone else. */
4645 SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4646 SvLEN_set(temp, SvCUR(sv)+1);
4647 }
4648
4649 /* Now swap the rest of the bodies. */
4650
4651 SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4652 SvFLAGS(sv) |= new_type;
4653 SvANY(sv) = SvANY(temp);
4654
4655 SvFLAGS(temp) &= ~(SVTYPEMASK);
4656 SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4657 SvANY(temp) = temp_p;
4658
4659 SvREFCNT_dec(temp);
4660 }
0f15f207 4661}
1c846c1f 4662
645c22ef 4663/*
954c1994
GS
4664=for apidoc sv_chop
4665
1c846c1f 4666Efficient removal of characters from the beginning of the string buffer.
954c1994
GS
4667SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4668the string buffer. The C<ptr> becomes the first character of the adjusted
645c22ef 4669string. Uses the "OOK hack".
3f7c398e 4670Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
31869a79 4671refer to the same chunk of data.
954c1994
GS
4672
4673=cut
4674*/
4675
79072805 4676void
2e000ff2 4677Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4678{
69240efd
NC
4679 STRLEN delta;
4680 STRLEN old_delta;
7a4bba22
NC
4681 U8 *p;
4682#ifdef DEBUGGING
4683 const U8 *real_start;
4684#endif
6c65d5f9 4685 STRLEN max_delta;
7a4bba22 4686
7918f24d
NC
4687 PERL_ARGS_ASSERT_SV_CHOP;
4688
a0d0e21e 4689 if (!ptr || !SvPOKp(sv))
79072805 4690 return;
3f7c398e 4691 delta = ptr - SvPVX_const(sv);
15895f8a
NC
4692 if (!delta) {
4693 /* Nothing to do. */
4694 return;
4695 }
6c65d5f9
NC
4696 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4697 nothing uses the value of ptr any more. */
837cb3ba 4698 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
6c65d5f9
NC
4699 if (ptr <= SvPVX_const(sv))
4700 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4701 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
2213622d 4702 SV_CHECK_THINKFIRST(sv);
6c65d5f9
NC
4703 if (delta > max_delta)
4704 Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4705 SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4706 SvPVX_const(sv) + max_delta);
79072805
LW
4707
4708 if (!SvOOK(sv)) {
50483b2c 4709 if (!SvLEN(sv)) { /* make copy of shared string */
3f7c398e 4710 const char *pvx = SvPVX_const(sv);
a28509cc 4711 const STRLEN len = SvCUR(sv);
50483b2c 4712 SvGROW(sv, len + 1);
706aa1c9 4713 Move(pvx,SvPVX(sv),len,char);
50483b2c
JD
4714 *SvEND(sv) = '\0';
4715 }
7a5fa8a2 4716 SvFLAGS(sv) |= SVf_OOK;
7a4bba22
NC
4717 old_delta = 0;
4718 } else {
69240efd 4719 SvOOK_offset(sv, old_delta);
79072805 4720 }
b162af07
SP
4721 SvLEN_set(sv, SvLEN(sv) - delta);
4722 SvCUR_set(sv, SvCUR(sv) - delta);
f880fe2f 4723 SvPV_set(sv, SvPVX(sv) + delta);
7a4bba22
NC
4724
4725 p = (U8 *)SvPVX_const(sv);
4726
4727 delta += old_delta;
4728
50af2e61 4729#ifdef DEBUGGING
7a4bba22
NC
4730 real_start = p - delta;
4731#endif
4732
69240efd
NC
4733 assert(delta);
4734 if (delta < 0x100) {
7a4bba22
NC
4735 *--p = (U8) delta;
4736 } else {
69240efd
NC
4737 *--p = 0;
4738 p -= sizeof(STRLEN);
4739 Copy((U8*)&delta, p, sizeof(STRLEN), U8);
7a4bba22
NC
4740 }
4741
4742#ifdef DEBUGGING
4743 /* Fill the preceding buffer with sentinals to verify that no-one is
4744 using it. */
4745 while (p > real_start) {
4746 --p;
4747 *p = (U8)PTR2UV(p);
50af2e61
NC
4748 }
4749#endif
79072805
LW
4750}
4751
954c1994
GS
4752/*
4753=for apidoc sv_catpvn
4754
4755Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4756C<len> indicates number of bytes to copy. If the SV has the UTF-8
4757status set, then the bytes appended should be valid UTF-8.
d5ce4a7c 4758Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
954c1994 4759
8d6d96c1
HS
4760=for apidoc sv_catpvn_flags
4761
4762Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4763C<len> indicates number of bytes to copy. If the SV has the UTF-8
4764status set, then the bytes appended should be valid UTF-8.
8d6d96c1
HS
4765If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4766appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4767in terms of this function.
4768
4769=cut
4770*/
4771
4772void
2e000ff2 4773Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
8d6d96c1 4774{
97aff369 4775 dVAR;
8d6d96c1 4776 STRLEN dlen;
fabdb6c0 4777 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
8d6d96c1 4778
7918f24d
NC
4779 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4780
8d6d96c1
HS
4781 SvGROW(dsv, dlen + slen + 1);
4782 if (sstr == dstr)
3f7c398e 4783 sstr = SvPVX_const(dsv);
8d6d96c1 4784 Move(sstr, SvPVX(dsv) + dlen, slen, char);
b162af07 4785 SvCUR_set(dsv, SvCUR(dsv) + slen);
8d6d96c1
HS
4786 *SvEND(dsv) = '\0';
4787 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4788 SvTAINT(dsv);
bddd5118
NC
4789 if (flags & SV_SMAGIC)
4790 SvSETMAGIC(dsv);
79072805
LW
4791}
4792
954c1994 4793/*
954c1994
GS
4794=for apidoc sv_catsv
4795
13e8c8e3
JH
4796Concatenates the string from SV C<ssv> onto the end of the string in
4797SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4798not 'set' magic. See C<sv_catsv_mg>.
954c1994 4799
8d6d96c1
HS
4800=for apidoc sv_catsv_flags
4801
4802Concatenates the string from SV C<ssv> onto the end of the string in
4803SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4804bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4805and C<sv_catsv_nomg> are implemented in terms of this function.
4806
4807=cut */
4808
ef50df4b 4809void
2e000ff2 4810Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
79072805 4811{
97aff369 4812 dVAR;
7918f24d
NC
4813
4814 PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4815
4816 if (ssv) {
00b6aa41
AL
4817 STRLEN slen;
4818 const char *spv = SvPV_const(ssv, slen);
4819 if (spv) {
bddd5118
NC
4820 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4821 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4822 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4823 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4824 dsv->sv_flags doesn't have that bit set.
4fd84b44 4825 Andy Dougherty 12 Oct 2001
bddd5118
NC
4826 */
4827 const I32 sutf8 = DO_UTF8(ssv);
4828 I32 dutf8;
13e8c8e3 4829
bddd5118
NC
4830 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4831 mg_get(dsv);
4832 dutf8 = DO_UTF8(dsv);
8d6d96c1 4833
bddd5118
NC
4834 if (dutf8 != sutf8) {
4835 if (dutf8) {
4836 /* Not modifying source SV, so taking a temporary copy. */
59cd0e26 4837 SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
13e8c8e3 4838
bddd5118
NC
4839 sv_utf8_upgrade(csv);
4840 spv = SvPV_const(csv, slen);
4841 }
4842 else
7bf79863
KW
4843 /* Leave enough space for the cat that's about to happen */
4844 sv_utf8_upgrade_flags_grow(dsv, 0, slen);
13e8c8e3 4845 }
bddd5118 4846 sv_catpvn_nomg(dsv, spv, slen);
e84ff256 4847 }
560a288e 4848 }
bddd5118
NC
4849 if (flags & SV_SMAGIC)
4850 SvSETMAGIC(dsv);
79072805
LW
4851}
4852
954c1994 4853/*
954c1994
GS
4854=for apidoc sv_catpv
4855
4856Concatenates the string onto the end of the string which is in the SV.
1e54db1a
JH
4857If the SV has the UTF-8 status set, then the bytes appended should be
4858valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
954c1994 4859
d5ce4a7c 4860=cut */
954c1994 4861
ef50df4b 4862void
2b021c53 4863Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
79072805 4864{
97aff369 4865 dVAR;
79072805 4866 register STRLEN len;
463ee0b2 4867 STRLEN tlen;
748a9306 4868 char *junk;
79072805 4869
7918f24d
NC
4870 PERL_ARGS_ASSERT_SV_CATPV;
4871
0c981600 4872 if (!ptr)
79072805 4873 return;
748a9306 4874 junk = SvPV_force(sv, tlen);
0c981600 4875 len = strlen(ptr);
463ee0b2 4876 SvGROW(sv, tlen + len + 1);
0c981600 4877 if (ptr == junk)
3f7c398e 4878 ptr = SvPVX_const(sv);
0c981600 4879 Move(ptr,SvPVX(sv)+tlen,len+1,char);
b162af07 4880 SvCUR_set(sv, SvCUR(sv) + len);
d41ff1b8 4881 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4882 SvTAINT(sv);
79072805
LW
4883}
4884
954c1994
GS
4885/*
4886=for apidoc sv_catpv_mg
4887
4888Like C<sv_catpv>, but also handles 'set' magic.
4889
4890=cut
4891*/
4892
ef50df4b 4893void
2b021c53 4894Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 4895{
7918f24d
NC
4896 PERL_ARGS_ASSERT_SV_CATPV_MG;
4897
0c981600 4898 sv_catpv(sv,ptr);
ef50df4b
GS
4899 SvSETMAGIC(sv);
4900}
4901
645c22ef
DM
4902/*
4903=for apidoc newSV
4904
561b68a9
SH
4905Creates a new SV. A non-zero C<len> parameter indicates the number of
4906bytes of preallocated string space the SV should have. An extra byte for a
4907trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4908space is allocated.) The reference count for the new SV is set to 1.
4909
4910In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4911parameter, I<x>, a debug aid which allowed callers to identify themselves.
4912This aid has been superseded by a new build option, PERL_MEM_LOG (see
4913L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4914modules supporting older perls.
645c22ef
DM
4915
4916=cut
4917*/
4918
79072805 4919SV *
2b021c53 4920Perl_newSV(pTHX_ const STRLEN len)
79072805 4921{
97aff369 4922 dVAR;
79072805 4923 register SV *sv;
1c846c1f 4924
4561caa4 4925 new_SV(sv);
79072805
LW
4926 if (len) {
4927 sv_upgrade(sv, SVt_PV);
4928 SvGROW(sv, len + 1);
4929 }
4930 return sv;
4931}
954c1994 4932/*
92110913 4933=for apidoc sv_magicext
954c1994 4934
68795e93 4935Adds magic to an SV, upgrading it if necessary. Applies the
2d8d5d5a 4936supplied vtable and returns a pointer to the magic added.
92110913 4937
2d8d5d5a
SH
4938Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4939In particular, you can add magic to SvREADONLY SVs, and add more than
4940one instance of the same 'how'.
645c22ef 4941
2d8d5d5a
SH
4942If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4943stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4944special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4945to contain an C<SV*> and is stored as-is with its REFCNT incremented.
92110913 4946
2d8d5d5a 4947(This is now used as a subroutine by C<sv_magic>.)
954c1994
GS
4948
4949=cut
4950*/
92110913 4951MAGIC *
2b021c53
SS
4952Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
4953 const MGVTBL *const vtable, const char *const name, const I32 namlen)
79072805 4954{
97aff369 4955 dVAR;
79072805 4956 MAGIC* mg;
68795e93 4957
7918f24d
NC
4958 PERL_ARGS_ASSERT_SV_MAGICEXT;
4959
7a7f3e45 4960 SvUPGRADE(sv, SVt_PVMG);
a02a5408 4961 Newxz(mg, 1, MAGIC);
79072805 4962 mg->mg_moremagic = SvMAGIC(sv);
b162af07 4963 SvMAGIC_set(sv, mg);
75f9d97a 4964
05f95b08
SB
4965 /* Sometimes a magic contains a reference loop, where the sv and
4966 object refer to each other. To prevent a reference loop that
4967 would prevent such objects being freed, we look for such loops
4968 and if we find one we avoid incrementing the object refcount.
87f0b213
JH
4969
4970 Note we cannot do this to avoid self-tie loops as intervening RV must
b5ccf5f2 4971 have its REFCNT incremented to keep it in existence.
87f0b213
JH
4972
4973 */
14befaf4
DM
4974 if (!obj || obj == sv ||
4975 how == PERL_MAGIC_arylen ||
8d2f4536 4976 how == PERL_MAGIC_symtab ||
75f9d97a 4977 (SvTYPE(obj) == SVt_PVGV &&
4c4652b6
NC
4978 (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
4979 || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
4980 || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
75f9d97a 4981 {
8990e307 4982 mg->mg_obj = obj;
75f9d97a 4983 }
85e6fe83 4984 else {
b37c2d43 4985 mg->mg_obj = SvREFCNT_inc_simple(obj);
85e6fe83
LW
4986 mg->mg_flags |= MGf_REFCOUNTED;
4987 }
b5ccf5f2
YST
4988
4989 /* Normal self-ties simply pass a null object, and instead of
4990 using mg_obj directly, use the SvTIED_obj macro to produce a
4991 new RV as needed. For glob "self-ties", we are tieing the PVIO
4992 with an RV obj pointing to the glob containing the PVIO. In
4993 this case, to avoid a reference loop, we need to weaken the
4994 reference.
4995 */
4996
4997 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
a45c7426 4998 obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
b5ccf5f2
YST
4999 {
5000 sv_rvweaken(obj);
5001 }
5002
79072805 5003 mg->mg_type = how;
565764a8 5004 mg->mg_len = namlen;
9cbac4c7 5005 if (name) {
92110913 5006 if (namlen > 0)
1edc1566 5007 mg->mg_ptr = savepvn(name, namlen);
daba3364
NC
5008 else if (namlen == HEf_SVKEY) {
5009 /* Yes, this is casting away const. This is only for the case of
5010 HEf_SVKEY. I think we need to document this abberation of the
5011 constness of the API, rather than making name non-const, as
5012 that change propagating outwards a long way. */
5013 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5014 } else
92110913 5015 mg->mg_ptr = (char *) name;
9cbac4c7 5016 }
53d44271 5017 mg->mg_virtual = (MGVTBL *) vtable;
68795e93 5018
92110913
NIS
5019 mg_magical(sv);
5020 if (SvGMAGICAL(sv))
5021 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5022 return mg;
5023}
5024
5025/*
5026=for apidoc sv_magic
1c846c1f 5027
92110913
NIS
5028Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5029then adds a new magic item of type C<how> to the head of the magic list.
5030
2d8d5d5a
SH
5031See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5032handling of the C<name> and C<namlen> arguments.
5033
4509d3fb
SB
5034You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5035to add more than one instance of the same 'how'.
5036
92110913
NIS
5037=cut
5038*/
5039
5040void
2b021c53
SS
5041Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how,
5042 const char *const name, const I32 namlen)
68795e93 5043{
97aff369 5044 dVAR;
53d44271 5045 const MGVTBL *vtable;
92110913 5046 MAGIC* mg;
92110913 5047
7918f24d
NC
5048 PERL_ARGS_ASSERT_SV_MAGIC;
5049
f8c7b90f 5050#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
5051 if (SvIsCOW(sv))
5052 sv_force_normal_flags(sv, 0);
5053#endif
92110913 5054 if (SvREADONLY(sv)) {
d8084ca5
DM
5055 if (
5056 /* its okay to attach magic to shared strings; the subsequent
5057 * upgrade to PVMG will unshare the string */
5058 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5059
5060 && IN_PERL_RUNTIME
92110913
NIS
5061 && how != PERL_MAGIC_regex_global
5062 && how != PERL_MAGIC_bm
5063 && how != PERL_MAGIC_fm
5064 && how != PERL_MAGIC_sv
e6469971 5065 && how != PERL_MAGIC_backref
92110913
NIS
5066 )
5067 {
6ad8f254 5068 Perl_croak_no_modify(aTHX);
92110913
NIS
5069 }
5070 }
5071 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5072 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
68795e93
NIS
5073 /* sv_magic() refuses to add a magic of the same 'how' as an
5074 existing one
92110913 5075 */
2a509ed3 5076 if (how == PERL_MAGIC_taint) {
92110913 5077 mg->mg_len |= 1;
2a509ed3
NC
5078 /* Any scalar which already had taint magic on which someone
5079 (erroneously?) did SvIOK_on() or similar will now be
5080 incorrectly sporting public "OK" flags. */
5081 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5082 }
92110913
NIS
5083 return;
5084 }
5085 }
68795e93 5086
79072805 5087 switch (how) {
14befaf4 5088 case PERL_MAGIC_sv:
92110913 5089 vtable = &PL_vtbl_sv;
79072805 5090 break;
14befaf4 5091 case PERL_MAGIC_overload:
92110913 5092 vtable = &PL_vtbl_amagic;
a0d0e21e 5093 break;
14befaf4 5094 case PERL_MAGIC_overload_elem:
92110913 5095 vtable = &PL_vtbl_amagicelem;
a0d0e21e 5096 break;
14befaf4 5097 case PERL_MAGIC_overload_table:
92110913 5098 vtable = &PL_vtbl_ovrld;
a0d0e21e 5099 break;
14befaf4 5100 case PERL_MAGIC_bm:
92110913 5101 vtable = &PL_vtbl_bm;
79072805 5102 break;
14befaf4 5103 case PERL_MAGIC_regdata:
92110913 5104 vtable = &PL_vtbl_regdata;
6cef1e77 5105 break;
14befaf4 5106 case PERL_MAGIC_regdatum:
92110913 5107 vtable = &PL_vtbl_regdatum;
6cef1e77 5108 break;
14befaf4 5109 case PERL_MAGIC_env:
92110913 5110 vtable = &PL_vtbl_env;
79072805 5111 break;
14befaf4 5112 case PERL_MAGIC_fm:
92110913 5113 vtable = &PL_vtbl_fm;
55497cff 5114 break;
14befaf4 5115 case PERL_MAGIC_envelem:
92110913 5116 vtable = &PL_vtbl_envelem;
79072805 5117 break;
14befaf4 5118 case PERL_MAGIC_regex_global:
92110913 5119 vtable = &PL_vtbl_mglob;
93a17b20 5120 break;
14befaf4 5121 case PERL_MAGIC_isa:
92110913 5122 vtable = &PL_vtbl_isa;
463ee0b2 5123 break;
14befaf4 5124 case PERL_MAGIC_isaelem:
92110913 5125 vtable = &PL_vtbl_isaelem;
463ee0b2 5126 break;
14befaf4 5127 case PERL_MAGIC_nkeys:
92110913 5128 vtable = &PL_vtbl_nkeys;
16660edb 5129 break;
14befaf4 5130 case PERL_MAGIC_dbfile:
aec46f14 5131 vtable = NULL;
93a17b20 5132 break;
14befaf4 5133 case PERL_MAGIC_dbline:
92110913 5134 vtable = &PL_vtbl_dbline;
79072805 5135 break;
36477c24 5136#ifdef USE_LOCALE_COLLATE
14befaf4 5137 case PERL_MAGIC_collxfrm:
92110913 5138 vtable = &PL_vtbl_collxfrm;
bbce6d69 5139 break;
36477c24 5140#endif /* USE_LOCALE_COLLATE */
14befaf4 5141 case PERL_MAGIC_tied:
92110913 5142 vtable = &PL_vtbl_pack;
463ee0b2 5143 break;
14befaf4
DM
5144 case PERL_MAGIC_tiedelem:
5145 case PERL_MAGIC_tiedscalar:
92110913 5146 vtable = &PL_vtbl_packelem;
463ee0b2 5147 break;
14befaf4 5148 case PERL_MAGIC_qr:
92110913 5149 vtable = &PL_vtbl_regexp;
c277df42 5150 break;
14befaf4 5151 case PERL_MAGIC_sig:
92110913 5152 vtable = &PL_vtbl_sig;
79072805 5153 break;
14befaf4 5154 case PERL_MAGIC_sigelem:
92110913 5155 vtable = &PL_vtbl_sigelem;
79072805 5156 break;
14befaf4 5157 case PERL_MAGIC_taint:
92110913 5158 vtable = &PL_vtbl_taint;
463ee0b2 5159 break;
14befaf4 5160 case PERL_MAGIC_uvar:
92110913 5161 vtable = &PL_vtbl_uvar;
79072805 5162 break;
14befaf4 5163 case PERL_MAGIC_vec:
92110913 5164 vtable = &PL_vtbl_vec;
79072805 5165 break;
a3874608 5166 case PERL_MAGIC_arylen_p:
bfcb3514 5167 case PERL_MAGIC_rhash:
8d2f4536 5168 case PERL_MAGIC_symtab:
ece467f9 5169 case PERL_MAGIC_vstring:
aec46f14 5170 vtable = NULL;
ece467f9 5171 break;
7e8c5dac
HS
5172 case PERL_MAGIC_utf8:
5173 vtable = &PL_vtbl_utf8;
5174 break;
14befaf4 5175 case PERL_MAGIC_substr:
92110913 5176 vtable = &PL_vtbl_substr;
79072805 5177 break;
14befaf4 5178 case PERL_MAGIC_defelem:
92110913 5179 vtable = &PL_vtbl_defelem;
5f05dabc 5180 break;
14befaf4 5181 case PERL_MAGIC_arylen:
92110913 5182 vtable = &PL_vtbl_arylen;
79072805 5183 break;
14befaf4 5184 case PERL_MAGIC_pos:
92110913 5185 vtable = &PL_vtbl_pos;
a0d0e21e 5186 break;
14befaf4 5187 case PERL_MAGIC_backref:
92110913 5188 vtable = &PL_vtbl_backref;
810b8aa5 5189 break;
b3ca2e83
NC
5190 case PERL_MAGIC_hintselem:
5191 vtable = &PL_vtbl_hintselem;
5192 break;
f747ebd6
Z
5193 case PERL_MAGIC_hints:
5194 vtable = &PL_vtbl_hints;
5195 break;
14befaf4
DM
5196 case PERL_MAGIC_ext:
5197 /* Reserved for use by extensions not perl internals. */
4633a7c4
LW
5198 /* Useful for attaching extension internal data to perl vars. */
5199 /* Note that multiple extensions may clash if magical scalars */
5200 /* etc holding private data from one are passed to another. */
aec46f14 5201 vtable = NULL;
a0d0e21e 5202 break;
79072805 5203 default:
14befaf4 5204 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
463ee0b2 5205 }
68795e93 5206
92110913 5207 /* Rest of work is done else where */
aec46f14 5208 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
68795e93 5209
92110913
NIS
5210 switch (how) {
5211 case PERL_MAGIC_taint:
5212 mg->mg_len = 1;
5213 break;
5214 case PERL_MAGIC_ext:
5215 case PERL_MAGIC_dbfile:
5216 SvRMAGICAL_on(sv);
5217 break;
5218 }
463ee0b2
LW
5219}
5220
c461cf8f
JH
5221/*
5222=for apidoc sv_unmagic
5223
645c22ef 5224Removes all magic of type C<type> from an SV.
c461cf8f
JH
5225
5226=cut
5227*/
5228
463ee0b2 5229int
2b021c53 5230Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
463ee0b2
LW
5231{
5232 MAGIC* mg;
5233 MAGIC** mgp;
7918f24d
NC
5234
5235 PERL_ARGS_ASSERT_SV_UNMAGIC;
5236
91bba347 5237 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
463ee0b2 5238 return 0;
064cf529 5239 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
463ee0b2
LW
5240 for (mg = *mgp; mg; mg = *mgp) {
5241 if (mg->mg_type == type) {
e1ec3a88 5242 const MGVTBL* const vtbl = mg->mg_virtual;
463ee0b2 5243 *mgp = mg->mg_moremagic;
1d7c1841 5244 if (vtbl && vtbl->svt_free)
fc0dc3b3 5245 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
14befaf4 5246 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
92110913 5247 if (mg->mg_len > 0)
1edc1566 5248 Safefree(mg->mg_ptr);
565764a8 5249 else if (mg->mg_len == HEf_SVKEY)
daba3364 5250 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
d2923cdd 5251 else if (mg->mg_type == PERL_MAGIC_utf8)
7e8c5dac 5252 Safefree(mg->mg_ptr);
9cbac4c7 5253 }
a0d0e21e
LW
5254 if (mg->mg_flags & MGf_REFCOUNTED)
5255 SvREFCNT_dec(mg->mg_obj);
463ee0b2
LW
5256 Safefree(mg);
5257 }
5258 else
5259 mgp = &mg->mg_moremagic;
79072805 5260 }
806e7ca7
CS
5261 if (SvMAGIC(sv)) {
5262 if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */
5263 mg_magical(sv); /* else fix the flags now */
5264 }
5265 else {
463ee0b2 5266 SvMAGICAL_off(sv);
c268c2a6 5267 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
463ee0b2 5268 }
463ee0b2 5269 return 0;
79072805
LW
5270}
5271
c461cf8f
JH
5272/*
5273=for apidoc sv_rvweaken
5274
645c22ef
DM
5275Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5276referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5277push a back-reference to this RV onto the array of backreferences
1e73acc8
AS
5278associated with that magic. If the RV is magical, set magic will be
5279called after the RV is cleared.
c461cf8f
JH
5280
5281=cut
5282*/
5283
810b8aa5 5284SV *
2b021c53 5285Perl_sv_rvweaken(pTHX_ SV *const sv)
810b8aa5
GS
5286{
5287 SV *tsv;
7918f24d
NC
5288
5289 PERL_ARGS_ASSERT_SV_RVWEAKEN;
5290
810b8aa5
GS
5291 if (!SvOK(sv)) /* let undefs pass */
5292 return sv;
5293 if (!SvROK(sv))
cea2e8a9 5294 Perl_croak(aTHX_ "Can't weaken a nonreference");
810b8aa5 5295 else if (SvWEAKREF(sv)) {
a2a5de95 5296 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
810b8aa5
GS
5297 return sv;
5298 }
5299 tsv = SvRV(sv);
e15faf7d 5300 Perl_sv_add_backref(aTHX_ tsv, sv);
810b8aa5 5301 SvWEAKREF_on(sv);
1c846c1f 5302 SvREFCNT_dec(tsv);
810b8aa5
GS
5303 return sv;
5304}
5305
645c22ef
DM
5306/* Give tsv backref magic if it hasn't already got it, then push a
5307 * back-reference to sv onto the array associated with the backref magic.
5308 */
5309
fd996479
DM
5310/* A discussion about the backreferences array and its refcount:
5311 *
5312 * The AV holding the backreferences is pointed to either as the mg_obj of
044d8c24
DM
5313 * PERL_MAGIC_backref, or in the specific case of a HV, from the
5314 * xhv_backreferences field of the HvAUX structure. The array is created
5315 * with a refcount of 2. This means that if during global destruction the
5316 * array gets picked on before its parent to have its refcount decremented
5317 * by the random zapper, it won't actually be freed, meaning it's still
5318 * there for when its parent gets freed.
fd996479
DM
5319 * When the parent SV is freed, in the case of magic, the magic is freed,
5320 * Perl_magic_killbackrefs is called which decrements one refcount, then
5321 * mg_obj is freed which kills the second count.
044d8c24
DM
5322 * In the vase of a HV being freed, one ref is removed by S_hfreeentries,
5323 * the other by Perl_sv_kill_backrefs, which it calls.
fd996479
DM
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) {
044d8c24
DM
5339 av = newAV();
5340 AvREAL_off(av);
5341 SvREFCNT_inc_simple_void(av); /* see discussion above */
86f55936
NC
5342 *avp = av;
5343 }
5344 } else {
5345 const MAGIC *const mg
5346 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5347 if (mg)
502c6561 5348 av = MUTABLE_AV(mg->mg_obj);
86f55936
NC
5349 else {
5350 av = newAV();
5351 AvREAL_off(av);
daba3364 5352 sv_magic(tsv, MUTABLE_SV(av), PERL_MAGIC_backref, NULL, 0);
fd996479 5353 /* av now has a refcnt of 2; see discussion above */
86f55936 5354 }
810b8aa5 5355 }
d91d49e8 5356 if (AvFILLp(av) >= AvMAX(av)) {
d91d49e8
MM
5357 av_extend(av, AvFILLp(av)+1);
5358 }
5359 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
810b8aa5
GS
5360}
5361
645c22ef
DM
5362/* delete a back-reference to ourselves from the backref magic associated
5363 * with the SV we point to.
5364 */
5365
4c74a7df
DM
5366void
5367Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
810b8aa5 5368{
97aff369 5369 dVAR;
86f55936 5370 AV *av = NULL;
810b8aa5
GS
5371 SV **svp;
5372 I32 i;
86f55936 5373
7918f24d
NC
5374 PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5375
64345bb5
DM
5376 if (SvTYPE(tsv) == SVt_PVHV) {
5377 if (SvOOK(tsv)) {
5378 /* SvOOK: We must avoid creating the hv_aux structure if its
5379 * not already there, as that is stored in the main HvARRAY(),
5380 * and hfreentries assumes that no-one reallocates HvARRAY()
5381 * while it is running. */
5382 av = *Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5383 }
86f55936 5384 }
64345bb5 5385 else {
86f55936
NC
5386 const MAGIC *const mg
5387 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5388 if (mg)
502c6561 5389 av = MUTABLE_AV(mg->mg_obj);
86f55936 5390 }
41fae7a1
DM
5391
5392 if (!av)
cea2e8a9 5393 Perl_croak(aTHX_ "panic: del_backref");
86f55936 5394
41fae7a1 5395 assert(!SvIS_FREED(av));
86f55936 5396
810b8aa5 5397 svp = AvARRAY(av);
6a76db8b
NC
5398 /* We shouldn't be in here more than once, but for paranoia reasons lets
5399 not assume this. */
5400 for (i = AvFILLp(av); i >= 0; i--) {
5401 if (svp[i] == sv) {
5402 const SSize_t fill = AvFILLp(av);
5403 if (i != fill) {
5404 /* We weren't the last entry.
5405 An unordered list has this property that you can take the
5406 last element off the end to fill the hole, and it's still
5407 an unordered list :-)
5408 */
5409 svp[i] = svp[fill];
5410 }
a0714e2c 5411 svp[fill] = NULL;
6a76db8b
NC
5412 AvFILLp(av) = fill - 1;
5413 }
5414 }
810b8aa5
GS
5415}
5416
86f55936 5417int
2b021c53 5418Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
86f55936
NC
5419{
5420 SV **svp = AvARRAY(av);
5421
7918f24d 5422 PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
86f55936 5423
41fae7a1 5424 if (svp) {
86f55936
NC
5425 SV *const *const last = svp + AvFILLp(av);
5426
044d8c24 5427 assert(!SvIS_FREED(av));
86f55936
NC
5428 while (svp <= last) {
5429 if (*svp) {
5430 SV *const referrer = *svp;
5431 if (SvWEAKREF(referrer)) {
5432 /* XXX Should we check that it hasn't changed? */
4c74a7df 5433 assert(SvROK(referrer));
86f55936
NC
5434 SvRV_set(referrer, 0);
5435 SvOK_off(referrer);
5436 SvWEAKREF_off(referrer);
1e73acc8 5437 SvSETMAGIC(referrer);
86f55936
NC
5438 } else if (SvTYPE(referrer) == SVt_PVGV ||
5439 SvTYPE(referrer) == SVt_PVLV) {
803f2748 5440 assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
86f55936
NC
5441 /* You lookin' at me? */
5442 assert(GvSTASH(referrer));
1d193675 5443 assert(GvSTASH(referrer) == (const HV *)sv);
86f55936 5444 GvSTASH(referrer) = 0;
803f2748
DM
5445 } else if (SvTYPE(referrer) == SVt_PVCV ||
5446 SvTYPE(referrer) == SVt_PVFM) {
5447 if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5448 /* You lookin' at me? */
5449 assert(CvSTASH(referrer));
5450 assert(CvSTASH(referrer) == (const HV *)sv);
5451 CvSTASH(referrer) = 0;
5452 }
5453 else {
5454 assert(SvTYPE(sv) == SVt_PVGV);
5455 /* You lookin' at me? */
5456 assert(CvGV(referrer));
5457 assert(CvGV(referrer) == (const GV *)sv);
5458 anonymise_cv_maybe(MUTABLE_GV(sv),
5459 MUTABLE_CV(referrer));
5460 }
5461
86f55936
NC
5462 } else {
5463 Perl_croak(aTHX_
5464 "panic: magic_killbackrefs (flags=%"UVxf")",
5465 (UV)SvFLAGS(referrer));
5466 }
5467
a0714e2c 5468 *svp = NULL;
86f55936
NC
5469 }
5470 svp++;
5471 }
044d8c24 5472 AvFILLp(av) = -1;
86f55936
NC
5473 }
5474 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5475 return 0;
5476}
5477
954c1994
GS
5478/*
5479=for apidoc sv_insert
5480
5481Inserts a string at the specified offset/length within the SV. Similar to
c0dd94a0 5482the Perl substr() function. Handles get magic.
954c1994 5483
c0dd94a0
VP
5484=for apidoc sv_insert_flags
5485
5486Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5487
5488=cut
5489*/
5490
5491void
5492Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5493{
97aff369 5494 dVAR;
79072805
LW
5495 register char *big;
5496 register char *mid;
5497 register char *midend;
5498 register char *bigend;
5499 register I32 i;
6ff81951 5500 STRLEN curlen;
1c846c1f 5501
27aecdc6 5502 PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
79072805 5503
8990e307 5504 if (!bigstr)
cea2e8a9 5505 Perl_croak(aTHX_ "Can't modify non-existent substring");
c0dd94a0 5506 SvPV_force_flags(bigstr, curlen, flags);
60fa28ff 5507 (void)SvPOK_only_UTF8(bigstr);
6ff81951
GS
5508 if (offset + len > curlen) {
5509 SvGROW(bigstr, offset+len+1);
93524f2b 5510 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6ff81951
GS
5511 SvCUR_set(bigstr, offset+len);
5512 }
79072805 5513
69b47968 5514 SvTAINT(bigstr);
79072805
LW
5515 i = littlelen - len;
5516 if (i > 0) { /* string might grow */
a0d0e21e 5517 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
79072805
LW
5518 mid = big + offset + len;
5519 midend = bigend = big + SvCUR(bigstr);
5520 bigend += i;
5521 *bigend = '\0';
5522 while (midend > mid) /* shove everything down */
5523 *--bigend = *--midend;
5524 Move(little,big+offset,littlelen,char);
b162af07 5525 SvCUR_set(bigstr, SvCUR(bigstr) + i);
79072805
LW
5526 SvSETMAGIC(bigstr);
5527 return;
5528 }
5529 else if (i == 0) {
463ee0b2 5530 Move(little,SvPVX(bigstr)+offset,len,char);
79072805
LW
5531 SvSETMAGIC(bigstr);
5532 return;
5533 }
5534
463ee0b2 5535 big = SvPVX(bigstr);
79072805
LW
5536 mid = big + offset;
5537 midend = mid + len;
5538 bigend = big + SvCUR(bigstr);
5539
5540 if (midend > bigend)
cea2e8a9 5541 Perl_croak(aTHX_ "panic: sv_insert");
79072805
LW
5542
5543 if (mid - big > bigend - midend) { /* faster to shorten from end */
5544 if (littlelen) {
5545 Move(little, mid, littlelen,char);
5546 mid += littlelen;
5547 }
5548 i = bigend - midend;
5549 if (i > 0) {
5550 Move(midend, mid, i,char);
5551 mid += i;
5552 }
5553 *mid = '\0';
5554 SvCUR_set(bigstr, mid - big);
5555 }
155aba94 5556 else if ((i = mid - big)) { /* faster from front */
79072805
LW
5557 midend -= littlelen;
5558 mid = midend;
0d3c21b0 5559 Move(big, midend - i, i, char);
79072805 5560 sv_chop(bigstr,midend-i);
79072805
LW
5561 if (littlelen)
5562 Move(little, mid, littlelen,char);
5563 }
5564 else if (littlelen) {
5565 midend -= littlelen;
5566 sv_chop(bigstr,midend);
5567 Move(little,midend,littlelen,char);
5568 }
5569 else {
5570 sv_chop(bigstr,midend);
5571 }
5572 SvSETMAGIC(bigstr);
5573}
5574
c461cf8f
JH
5575/*
5576=for apidoc sv_replace
5577
5578Make the first argument a copy of the second, then delete the original.
645c22ef
DM
5579The target SV physically takes over ownership of the body of the source SV
5580and inherits its flags; however, the target keeps any magic it owns,
5581and any magic in the source is discarded.
ff276b08 5582Note that this is a rather specialist SV copying operation; most of the
645c22ef 5583time you'll want to use C<sv_setsv> or one of its many macro front-ends.
c461cf8f
JH
5584
5585=cut
5586*/
79072805
LW
5587
5588void
af828c01 5589Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
79072805 5590{
97aff369 5591 dVAR;
a3b680e6 5592 const U32 refcnt = SvREFCNT(sv);
7918f24d
NC
5593
5594 PERL_ARGS_ASSERT_SV_REPLACE;
5595
765f542d 5596 SV_CHECK_THINKFIRST_COW_DROP(sv);
30e5c352 5597 if (SvREFCNT(nsv) != 1) {
fe13d51d
JM
5598 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5599 " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
30e5c352 5600 }
93a17b20 5601 if (SvMAGICAL(sv)) {
a0d0e21e
LW
5602 if (SvMAGICAL(nsv))
5603 mg_free(nsv);
5604 else
5605 sv_upgrade(nsv, SVt_PVMG);
b162af07 5606 SvMAGIC_set(nsv, SvMAGIC(sv));
a0d0e21e 5607 SvFLAGS(nsv) |= SvMAGICAL(sv);
93a17b20 5608 SvMAGICAL_off(sv);
b162af07 5609 SvMAGIC_set(sv, NULL);
93a17b20 5610 }
79072805
LW
5611 SvREFCNT(sv) = 0;
5612 sv_clear(sv);
477f5d66 5613 assert(!SvREFCNT(sv));
fd0854ff
DM
5614#ifdef DEBUG_LEAKING_SCALARS
5615 sv->sv_flags = nsv->sv_flags;
5616 sv->sv_any = nsv->sv_any;
5617 sv->sv_refcnt = nsv->sv_refcnt;
f34d0642 5618 sv->sv_u = nsv->sv_u;
fd0854ff 5619#else
79072805 5620 StructCopy(nsv,sv,SV);
fd0854ff 5621#endif
4df7f6af 5622 if(SvTYPE(sv) == SVt_IV) {
7b2c381c 5623 SvANY(sv)
339049b0 5624 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
7b2c381c
NC
5625 }
5626
fd0854ff 5627
f8c7b90f 5628#ifdef PERL_OLD_COPY_ON_WRITE
d3d0e6f1
NC
5629 if (SvIsCOW_normal(nsv)) {
5630 /* We need to follow the pointers around the loop to make the
5631 previous SV point to sv, rather than nsv. */
5632 SV *next;
5633 SV *current = nsv;
5634 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5635 assert(next);
5636 current = next;
3f7c398e 5637 assert(SvPVX_const(current) == SvPVX_const(nsv));
d3d0e6f1
NC
5638 }
5639 /* Make the SV before us point to the SV after us. */
5640 if (DEBUG_C_TEST) {
5641 PerlIO_printf(Perl_debug_log, "previous is\n");
5642 sv_dump(current);
a29f6d03
NC
5643 PerlIO_printf(Perl_debug_log,
5644 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
d3d0e6f1
NC
5645 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5646 }
a29f6d03 5647 SV_COW_NEXT_SV_SET(current, sv);
d3d0e6f1
NC
5648 }
5649#endif
79072805 5650 SvREFCNT(sv) = refcnt;
1edc1566 5651 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
39cf41c2 5652 SvREFCNT(nsv) = 0;
463ee0b2 5653 del_SV(nsv);
79072805
LW
5654}
5655
803f2748
DM
5656/* We're about to free a GV which has a CV that refers back to us.
5657 * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5658 * field) */
5659
5660STATIC void
5661S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5662{
5663 char *stash;
5664 SV *gvname;
5665 GV *anongv;
5666
5667 PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5668
5669 /* be assertive! */
5670 assert(SvREFCNT(gv) == 0);
5671 assert(isGV(gv) && isGV_with_GP(gv));
5672 assert(GvGP(gv));
5673 assert(!CvANON(cv));
5674 assert(CvGV(cv) == gv);
5675
5676 /* will the CV shortly be freed by gp_free() ? */
5677 if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
b3f91e91 5678 SvANY(cv)->xcv_gv = NULL;
803f2748
DM
5679 return;
5680 }
5681
5682 /* if not, anonymise: */
5683 stash = GvSTASH(gv) ? HvNAME(GvSTASH(gv)) : NULL;
5684 gvname = Perl_newSVpvf(aTHX_ "%s::__ANON__",
5685 stash ? stash : "__ANON__");
5686 anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5687 SvREFCNT_dec(gvname);
5688
5689 CvANON_on(cv);
cfc1e951 5690 CvCVGV_RC_on(cv);
b3f91e91 5691 SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
803f2748
DM
5692}
5693
5694
c461cf8f
JH
5695/*
5696=for apidoc sv_clear
5697
645c22ef
DM
5698Clear an SV: call any destructors, free up any memory used by the body,
5699and free the body itself. The SV's head is I<not> freed, although
5700its type is set to all 1's so that it won't inadvertently be assumed
5701to be live during global destruction etc.
5702This function should only be called when REFCNT is zero. Most of the time
5703you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5704instead.
c461cf8f
JH
5705
5706=cut
5707*/
5708
79072805 5709void
af828c01 5710Perl_sv_clear(pTHX_ register SV *const sv)
79072805 5711{
27da23d5 5712 dVAR;
82bb6deb 5713 const U32 type = SvTYPE(sv);
8edfc514
NC
5714 const struct body_details *const sv_type_details
5715 = bodies_by_type + type;
dd69841b 5716 HV *stash;
82bb6deb 5717
7918f24d 5718 PERL_ARGS_ASSERT_SV_CLEAR;
79072805 5719 assert(SvREFCNT(sv) == 0);
ceb531cd 5720 assert(SvTYPE(sv) != SVTYPEMASK);
79072805 5721
d2a0f284
JC
5722 if (type <= SVt_IV) {
5723 /* See the comment in sv.h about the collusion between this early
db93c0c4
NC
5724 return and the overloading of the NULL slots in the size table. */
5725 if (SvROK(sv))
5726 goto free_rv;
4df7f6af
NC
5727 SvFLAGS(sv) &= SVf_BREAK;
5728 SvFLAGS(sv) |= SVTYPEMASK;
82bb6deb 5729 return;
d2a0f284 5730 }
82bb6deb 5731
ed6116ce 5732 if (SvOBJECT(sv)) {
eba16661
JH
5733 if (PL_defstash && /* Still have a symbol table? */
5734 SvDESTROYABLE(sv))
5735 {
39644a26 5736 dSP;
893645bd 5737 HV* stash;
d460ef45 5738 do {
b464bac0 5739 CV* destructor;
4e8e7886 5740 stash = SvSTASH(sv);
32251b26 5741 destructor = StashHANDLER(stash,DESTROY);
fbb3ee5a 5742 if (destructor
99ab892b
NC
5743 /* A constant subroutine can have no side effects, so
5744 don't bother calling it. */
5745 && !CvCONST(destructor)
fbb3ee5a
RGS
5746 /* Don't bother calling an empty destructor */
5747 && (CvISXSUB(destructor)
1f15e670
NT
5748 || (CvSTART(destructor)
5749 && (CvSTART(destructor)->op_next->op_type != OP_LEAVESUB))))
fbb3ee5a 5750 {
1b6737cc 5751 SV* const tmpref = newRV(sv);
5cc433a6 5752 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
4e8e7886 5753 ENTER;
e788e7d3 5754 PUSHSTACKi(PERLSI_DESTROY);
4e8e7886
GS
5755 EXTEND(SP, 2);
5756 PUSHMARK(SP);
5cc433a6 5757 PUSHs(tmpref);
4e8e7886 5758 PUTBACK;
daba3364 5759 call_sv(MUTABLE_SV(destructor), G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7a5fa8a2
NIS
5760
5761
d3acc0f7 5762 POPSTACK;
3095d977 5763 SPAGAIN;
4e8e7886 5764 LEAVE;
5cc433a6
AB
5765 if(SvREFCNT(tmpref) < 2) {
5766 /* tmpref is not kept alive! */
5767 SvREFCNT(sv)--;
b162af07 5768 SvRV_set(tmpref, NULL);
5cc433a6
AB
5769 SvROK_off(tmpref);
5770 }
5771 SvREFCNT_dec(tmpref);
4e8e7886
GS
5772 }
5773 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
8ebc5c01 5774
6f44e0a4
JP
5775
5776 if (SvREFCNT(sv)) {
5777 if (PL_in_clean_objs)
cea2e8a9 5778 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
bfcb3514 5779 HvNAME_get(stash));
6f44e0a4
JP
5780 /* DESTROY gave object new lease on life */
5781 return;
5782 }
a0d0e21e 5783 }
4e8e7886 5784
a0d0e21e 5785 if (SvOBJECT(sv)) {
4e8e7886 5786 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
a0d0e21e 5787 SvOBJECT_off(sv); /* Curse the object. */
82bb6deb 5788 if (type != SVt_PVIO)
3280af22 5789 --PL_sv_objcount; /* XXX Might want something more general */
a0d0e21e 5790 }
463ee0b2 5791 }
82bb6deb 5792 if (type >= SVt_PVMG) {
cecf5685 5793 if (type == SVt_PVMG && SvPAD_OUR(sv)) {
73d95100 5794 SvREFCNT_dec(SvOURSTASH(sv));
e736a858 5795 } else if (SvMAGIC(sv))
524189f1 5796 mg_free(sv);
00b1698f 5797 if (type == SVt_PVMG && SvPAD_TYPED(sv))
524189f1
JH
5798 SvREFCNT_dec(SvSTASH(sv));
5799 }
82bb6deb 5800 switch (type) {
cecf5685 5801 /* case SVt_BIND: */
8990e307 5802 case SVt_PVIO:
df0bd2f4
GS
5803 if (IoIFP(sv) &&
5804 IoIFP(sv) != PerlIO_stdin() &&
5f05dabc 5805 IoIFP(sv) != PerlIO_stdout() &&
6f7e8353
NC
5806 IoIFP(sv) != PerlIO_stderr() &&
5807 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
93578b34 5808 {
a45c7426 5809 io_close(MUTABLE_IO(sv), FALSE);
93578b34 5810 }
1d7c1841 5811 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
1236053a 5812 PerlDir_close(IoDIRP(sv));
1d7c1841 5813 IoDIRP(sv) = (DIR*)NULL;
8990e307
LW
5814 Safefree(IoTOP_NAME(sv));
5815 Safefree(IoFMT_NAME(sv));
5816 Safefree(IoBOTTOM_NAME(sv));
82bb6deb 5817 goto freescalar;
5c35adbb 5818 case SVt_REGEXP:
288b8c02 5819 /* FIXME for plugins */
d2f13c59 5820 pregfree2((REGEXP*) sv);
5c35adbb 5821 goto freescalar;
79072805 5822 case SVt_PVCV:
748a9306 5823 case SVt_PVFM:
ea726b52 5824 cv_undef(MUTABLE_CV(sv));
4c74a7df
DM
5825 /* If we're in a stash, we don't own a reference to it. However it does
5826 have a back reference to us, which needs to be cleared. */
5827 if ((stash = CvSTASH(sv)))
5828 sv_del_backref(MUTABLE_SV(stash), sv);
a0d0e21e 5829 goto freescalar;
79072805 5830 case SVt_PVHV:
1d193675 5831 if (PL_last_swash_hv == (const HV *)sv) {
e7fab884
NC
5832 PL_last_swash_hv = NULL;
5833 }
85fbaab2 5834 hv_undef(MUTABLE_HV(sv));
a0d0e21e 5835 break;
79072805 5836 case SVt_PVAV:
502c6561 5837 if (PL_comppad == MUTABLE_AV(sv)) {
3f90d085
DM
5838 PL_comppad = NULL;
5839 PL_curpad = NULL;
5840 }
502c6561 5841 av_undef(MUTABLE_AV(sv));
a0d0e21e 5842 break;
02270b4e 5843 case SVt_PVLV:
dd28f7bb
DM
5844 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5845 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5846 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5847 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5848 }
5849 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5850 SvREFCNT_dec(LvTARG(sv));
a0d0e21e 5851 case SVt_PVGV:
cecf5685 5852 if (isGV_with_GP(sv)) {
159b6efe
NC
5853 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
5854 && HvNAME_get(stash))
dd69841b 5855 mro_method_changed_in(stash);
159b6efe 5856 gp_free(MUTABLE_GV(sv));
cecf5685
NC
5857 if (GvNAME_HEK(sv))
5858 unshare_hek(GvNAME_HEK(sv));
dd69841b
BB
5859 /* If we're in a stash, we don't own a reference to it. However it does
5860 have a back reference to us, which needs to be cleared. */
5861 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
daba3364 5862 sv_del_backref(MUTABLE_SV(stash), sv);
cecf5685 5863 }
8571fe2f
NC
5864 /* FIXME. There are probably more unreferenced pointers to SVs in the
5865 interpreter struct that we should check and tidy in a similar
5866 fashion to this: */
159b6efe 5867 if ((const GV *)sv == PL_last_in_gv)
8571fe2f 5868 PL_last_in_gv = NULL;
79072805 5869 case SVt_PVMG:
79072805
LW
5870 case SVt_PVNV:
5871 case SVt_PVIV:
7a4bba22 5872 case SVt_PV:
a0d0e21e 5873 freescalar:
5228ca4e
NC
5874 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5875 if (SvOOK(sv)) {
69240efd
NC
5876 STRLEN offset;
5877 SvOOK_offset(sv, offset);
5878 SvPV_set(sv, SvPVX_mutable(sv) - offset);
5228ca4e
NC
5879 /* Don't even bother with turning off the OOK flag. */
5880 }
810b8aa5 5881 if (SvROK(sv)) {
db93c0c4
NC
5882 free_rv:
5883 {
5884 SV * const target = SvRV(sv);
5885 if (SvWEAKREF(sv))
5886 sv_del_backref(target, sv);
5887 else
5888 SvREFCNT_dec(target);
5889 }
810b8aa5 5890 }
f8c7b90f 5891#ifdef PERL_OLD_COPY_ON_WRITE
6f7e8353
NC
5892 else if (SvPVX_const(sv)
5893 && !(SvTYPE(sv) == SVt_PVIO && !(IoFLAGS(sv) & IOf_FAKE_DIRP))) {
765f542d 5894 if (SvIsCOW(sv)) {
46187eeb
NC
5895 if (DEBUG_C_TEST) {
5896 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
e419cbc5 5897 sv_dump(sv);
46187eeb 5898 }
5302ffd4
NC
5899 if (SvLEN(sv)) {
5900 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5901 } else {
5902 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5903 }
5904
765f542d
NC
5905 SvFAKE_off(sv);
5906 } else if (SvLEN(sv)) {
3f7c398e 5907 Safefree(SvPVX_const(sv));
765f542d
NC
5908 }
5909 }
5910#else
6f7e8353
NC
5911 else if (SvPVX_const(sv) && SvLEN(sv)
5912 && !(SvTYPE(sv) == SVt_PVIO && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
94010e71 5913 Safefree(SvPVX_mutable(sv));
3f7c398e 5914 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
bdd68bc3 5915 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
1c846c1f
NIS
5916 SvFAKE_off(sv);
5917 }
765f542d 5918#endif
79072805
LW
5919 break;
5920 case SVt_NV:
79072805
LW
5921 break;
5922 }
5923
893645bd
NC
5924 SvFLAGS(sv) &= SVf_BREAK;
5925 SvFLAGS(sv) |= SVTYPEMASK;
5926
8edfc514 5927 if (sv_type_details->arena) {
b9502f15 5928 del_body(((char *)SvANY(sv) + sv_type_details->offset),
8edfc514
NC
5929 &PL_body_roots[type]);
5930 }
d2a0f284 5931 else if (sv_type_details->body_size) {
8edfc514
NC
5932 my_safefree(SvANY(sv));
5933 }
79072805
LW
5934}
5935
645c22ef
DM
5936/*
5937=for apidoc sv_newref
5938
5939Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5940instead.
5941
5942=cut
5943*/
5944
79072805 5945SV *
af828c01 5946Perl_sv_newref(pTHX_ SV *const sv)
79072805 5947{
96a5add6 5948 PERL_UNUSED_CONTEXT;
463ee0b2 5949 if (sv)
4db098f4 5950 (SvREFCNT(sv))++;
79072805
LW
5951 return sv;
5952}
5953
c461cf8f
JH
5954/*
5955=for apidoc sv_free
5956
645c22ef
DM
5957Decrement an SV's reference count, and if it drops to zero, call
5958C<sv_clear> to invoke destructors and free up any memory used by
5959the body; finally, deallocate the SV's head itself.
5960Normally called via a wrapper macro C<SvREFCNT_dec>.
c461cf8f
JH
5961
5962=cut
5963*/
5964
79072805 5965void
af828c01 5966Perl_sv_free(pTHX_ SV *const sv)
79072805 5967{
27da23d5 5968 dVAR;
79072805
LW
5969 if (!sv)
5970 return;
a0d0e21e
LW
5971 if (SvREFCNT(sv) == 0) {
5972 if (SvFLAGS(sv) & SVf_BREAK)
645c22ef
DM
5973 /* this SV's refcnt has been artificially decremented to
5974 * trigger cleanup */
a0d0e21e 5975 return;
3280af22 5976 if (PL_in_clean_all) /* All is fair */
1edc1566 5977 return;
d689ffdd
JP
5978 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5979 /* make sure SvREFCNT(sv)==0 happens very seldom */
5980 SvREFCNT(sv) = (~(U32)0)/2;
5981 return;
5982 }
41e4abd8 5983 if (ckWARN_d(WARN_INTERNAL)) {
41e4abd8
NC
5984#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5985 Perl_dump_sv_child(aTHX_ sv);
e4c5322d
DM
5986#else
5987 #ifdef DEBUG_LEAKING_SCALARS
bfd95973 5988 sv_dump(sv);
e4c5322d 5989 #endif
bfd95973
NC
5990#ifdef DEBUG_LEAKING_SCALARS_ABORT
5991 if (PL_warnhook == PERL_WARNHOOK_FATAL
5992 || ckDEAD(packWARN(WARN_INTERNAL))) {
5993 /* Don't let Perl_warner cause us to escape our fate: */
5994 abort();
5995 }
5996#endif
5997 /* This may not return: */
5998 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5999 "Attempt to free unreferenced scalar: SV 0x%"UVxf
6000 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
41e4abd8
NC
6001#endif
6002 }
77abb4c6
NC
6003#ifdef DEBUG_LEAKING_SCALARS_ABORT
6004 abort();
6005#endif
79072805
LW
6006 return;
6007 }
4db098f4 6008 if (--(SvREFCNT(sv)) > 0)
8990e307 6009 return;
8c4d3c90
NC
6010 Perl_sv_free2(aTHX_ sv);
6011}
6012
6013void
af828c01 6014Perl_sv_free2(pTHX_ SV *const sv)
8c4d3c90 6015{
27da23d5 6016 dVAR;
7918f24d
NC
6017
6018 PERL_ARGS_ASSERT_SV_FREE2;
6019
463ee0b2
LW
6020#ifdef DEBUGGING
6021 if (SvTEMP(sv)) {
9b387841
NC
6022 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6023 "Attempt to free temp prematurely: SV 0x%"UVxf
6024 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
79072805 6025 return;
79072805 6026 }
463ee0b2 6027#endif
d689ffdd
JP
6028 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6029 /* make sure SvREFCNT(sv)==0 happens very seldom */
6030 SvREFCNT(sv) = (~(U32)0)/2;
6031 return;
6032 }
79072805 6033 sv_clear(sv);
477f5d66
CS
6034 if (! SvREFCNT(sv))
6035 del_SV(sv);
79072805
LW
6036}
6037
954c1994
GS
6038/*
6039=for apidoc sv_len
6040
645c22ef
DM
6041Returns the length of the string in the SV. Handles magic and type
6042coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
954c1994
GS
6043
6044=cut
6045*/
6046
79072805 6047STRLEN
af828c01 6048Perl_sv_len(pTHX_ register SV *const sv)
79072805 6049{
463ee0b2 6050 STRLEN len;
79072805
LW
6051
6052 if (!sv)
6053 return 0;
6054
8990e307 6055 if (SvGMAGICAL(sv))
565764a8 6056 len = mg_length(sv);
8990e307 6057 else
4d84ee25 6058 (void)SvPV_const(sv, len);
463ee0b2 6059 return len;
79072805
LW
6060}
6061
c461cf8f
JH
6062/*
6063=for apidoc sv_len_utf8
6064
6065Returns the number of characters in the string in an SV, counting wide
1e54db1a 6066UTF-8 bytes as a single character. Handles magic and type coercion.
c461cf8f
JH
6067
6068=cut
6069*/
6070
7e8c5dac 6071/*
c05a5c57 6072 * The length is cached in PERL_MAGIC_utf8, in the mg_len field. Also the
9564a3bd
NC
6073 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6074 * (Note that the mg_len is not the length of the mg_ptr field.
6075 * This allows the cache to store the character length of the string without
6076 * needing to malloc() extra storage to attach to the mg_ptr.)
7a5fa8a2 6077 *
7e8c5dac
HS
6078 */
6079
a0ed51b3 6080STRLEN
af828c01 6081Perl_sv_len_utf8(pTHX_ register SV *const sv)
a0ed51b3 6082{
a0ed51b3
LW
6083 if (!sv)
6084 return 0;
6085
a0ed51b3 6086 if (SvGMAGICAL(sv))
b76347f2 6087 return mg_length(sv);
a0ed51b3 6088 else
b76347f2 6089 {
26346457 6090 STRLEN len;
e62f0680 6091 const U8 *s = (U8*)SvPV_const(sv, len);
7e8c5dac 6092
26346457
NC
6093 if (PL_utf8cache) {
6094 STRLEN ulen;
fe5bfecd 6095 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
26346457 6096
6ef2ab89
NC
6097 if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6098 if (mg->mg_len != -1)
6099 ulen = mg->mg_len;
6100 else {
6101 /* We can use the offset cache for a headstart.
6102 The longer value is stored in the first pair. */
6103 STRLEN *cache = (STRLEN *) mg->mg_ptr;
6104
6105 ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6106 s + len);
6107 }
6108
26346457
NC
6109 if (PL_utf8cache < 0) {
6110 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
9df83ffd 6111 assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
26346457
NC
6112 }
6113 }
6114 else {
6115 ulen = Perl_utf8_length(aTHX_ s, s + len);
ec49a12c 6116 utf8_mg_len_cache_update(sv, &mg, ulen);
cb9e20bb 6117 }
26346457 6118 return ulen;
7e8c5dac 6119 }
26346457 6120 return Perl_utf8_length(aTHX_ s, s + len);
7e8c5dac
HS
6121 }
6122}
6123
9564a3bd
NC
6124/* Walk forwards to find the byte corresponding to the passed in UTF-8
6125 offset. */
bdf30dd6 6126static STRLEN
721e86b6 6127S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
79d2d448 6128 STRLEN *const uoffset_p, bool *const at_end)
bdf30dd6
NC
6129{
6130 const U8 *s = start;
3e2d3818 6131 STRLEN uoffset = *uoffset_p;
bdf30dd6 6132
7918f24d
NC
6133 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6134
3e2d3818
NC
6135 while (s < send && uoffset) {
6136 --uoffset;
bdf30dd6 6137 s += UTF8SKIP(s);
3e2d3818 6138 }
79d2d448
NC
6139 if (s == send) {
6140 *at_end = TRUE;
6141 }
6142 else if (s > send) {
6143 *at_end = TRUE;
bdf30dd6
NC
6144 /* This is the existing behaviour. Possibly it should be a croak, as
6145 it's actually a bounds error */
6146 s = send;
6147 }
3e2d3818 6148 *uoffset_p -= uoffset;
bdf30dd6
NC
6149 return s - start;
6150}
6151
9564a3bd
NC
6152/* Given the length of the string in both bytes and UTF-8 characters, decide
6153 whether to walk forwards or backwards to find the byte corresponding to
6154 the passed in UTF-8 offset. */
c336ad0b 6155static STRLEN
721e86b6 6156S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
503752a1 6157 STRLEN uoffset, const STRLEN uend)
c336ad0b
NC
6158{
6159 STRLEN backw = uend - uoffset;
7918f24d
NC
6160
6161 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6162
c336ad0b 6163 if (uoffset < 2 * backw) {
25a8a4ef 6164 /* The assumption is that going forwards is twice the speed of going
c336ad0b
NC
6165 forward (that's where the 2 * backw comes from).
6166 (The real figure of course depends on the UTF-8 data.) */
503752a1
NC
6167 const U8 *s = start;
6168
6169 while (s < send && uoffset--)
6170 s += UTF8SKIP(s);
6171 assert (s <= send);
6172 if (s > send)
6173 s = send;
6174 return s - start;
c336ad0b
NC
6175 }
6176
6177 while (backw--) {
6178 send--;
6179 while (UTF8_IS_CONTINUATION(*send))
6180 send--;
6181 }
6182 return send - start;
6183}
6184
9564a3bd
NC
6185/* For the string representation of the given scalar, find the byte
6186 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
6187 give another position in the string, *before* the sought offset, which
6188 (which is always true, as 0, 0 is a valid pair of positions), which should
6189 help reduce the amount of linear searching.
6190 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6191 will be used to reduce the amount of linear searching. The cache will be
6192 created if necessary, and the found value offered to it for update. */
28ccbf94 6193static STRLEN
af828c01 6194S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
3e2d3818 6195 const U8 *const send, STRLEN uoffset,
7918f24d
NC
6196 STRLEN uoffset0, STRLEN boffset0)
6197{
7087a21c 6198 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
c336ad0b 6199 bool found = FALSE;
79d2d448 6200 bool at_end = FALSE;
c336ad0b 6201
7918f24d
NC
6202 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6203
75c33c12
NC
6204 assert (uoffset >= uoffset0);
6205
48f9cf71
NC
6206 if (!uoffset)
6207 return 0;
6208
f89a570b
CS
6209 if (!SvREADONLY(sv)
6210 && PL_utf8cache
6211 && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6212 (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
d8b2e1f9
NC
6213 if ((*mgp)->mg_ptr) {
6214 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6215 if (cache[0] == uoffset) {
6216 /* An exact match. */
6217 return cache[1];
6218 }
ab455f60
NC
6219 if (cache[2] == uoffset) {
6220 /* An exact match. */
6221 return cache[3];
6222 }
668af93f
NC
6223
6224 if (cache[0] < uoffset) {
d8b2e1f9
NC
6225 /* The cache already knows part of the way. */
6226 if (cache[0] > uoffset0) {
6227 /* The cache knows more than the passed in pair */
6228 uoffset0 = cache[0];
6229 boffset0 = cache[1];
6230 }
6231 if ((*mgp)->mg_len != -1) {
6232 /* And we know the end too. */
6233 boffset = boffset0
721e86b6 6234 + sv_pos_u2b_midway(start + boffset0, send,
d8b2e1f9
NC
6235 uoffset - uoffset0,
6236 (*mgp)->mg_len - uoffset0);
6237 } else {
3e2d3818 6238 uoffset -= uoffset0;
d8b2e1f9 6239 boffset = boffset0
721e86b6 6240 + sv_pos_u2b_forwards(start + boffset0,
79d2d448 6241 send, &uoffset, &at_end);
3e2d3818 6242 uoffset += uoffset0;
d8b2e1f9 6243 }
dd7c5fd3
NC
6244 }
6245 else if (cache[2] < uoffset) {
6246 /* We're between the two cache entries. */
6247 if (cache[2] > uoffset0) {
6248 /* and the cache knows more than the passed in pair */
6249 uoffset0 = cache[2];
6250 boffset0 = cache[3];
6251 }
6252
668af93f 6253 boffset = boffset0
721e86b6 6254 + sv_pos_u2b_midway(start + boffset0,
668af93f
NC
6255 start + cache[1],
6256 uoffset - uoffset0,
6257 cache[0] - uoffset0);
dd7c5fd3
NC
6258 } else {
6259 boffset = boffset0
721e86b6 6260 + sv_pos_u2b_midway(start + boffset0,
dd7c5fd3
NC
6261 start + cache[3],
6262 uoffset - uoffset0,
6263 cache[2] - uoffset0);
d8b2e1f9 6264 }
668af93f 6265 found = TRUE;
d8b2e1f9
NC
6266 }
6267 else if ((*mgp)->mg_len != -1) {
75c33c12
NC
6268 /* If we can take advantage of a passed in offset, do so. */
6269 /* In fact, offset0 is either 0, or less than offset, so don't
6270 need to worry about the other possibility. */
6271 boffset = boffset0
721e86b6 6272 + sv_pos_u2b_midway(start + boffset0, send,
75c33c12
NC
6273 uoffset - uoffset0,
6274 (*mgp)->mg_len - uoffset0);
c336ad0b
NC
6275 found = TRUE;
6276 }
28ccbf94 6277 }
c336ad0b
NC
6278
6279 if (!found || PL_utf8cache < 0) {
3e2d3818
NC
6280 STRLEN real_boffset;
6281 uoffset -= uoffset0;
6282 real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
79d2d448 6283 send, &uoffset, &at_end);
3e2d3818 6284 uoffset += uoffset0;
75c33c12 6285
9df83ffd
NC
6286 if (found && PL_utf8cache < 0)
6287 assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6288 real_boffset, sv);
c336ad0b 6289 boffset = real_boffset;
28ccbf94 6290 }
0905937d 6291
79d2d448
NC
6292 if (PL_utf8cache) {
6293 if (at_end)
6294 utf8_mg_len_cache_update(sv, mgp, uoffset);
6295 else
6296 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6297 }
28ccbf94
NC
6298 return boffset;
6299}
6300
9564a3bd
NC
6301
6302/*
d931b1be 6303=for apidoc sv_pos_u2b_flags
9564a3bd
NC
6304
6305Converts the value pointed to by offsetp from a count of UTF-8 chars from
6306the start of the string, to a count of the equivalent number of bytes; if
6307lenp is non-zero, it does the same to lenp, but this time starting from
d931b1be
NC
6308the offset, rather than from the start of the string. Handles type coercion.
6309I<flags> is passed to C<SvPV_flags>, and usually should be
6310C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
9564a3bd
NC
6311
6312=cut
6313*/
6314
6315/*
d931b1be 6316 * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
c05a5c57 6317 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
6318 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6319 *
6320 */
6321
d931b1be
NC
6322STRLEN
6323Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6324 U32 flags)
a0ed51b3 6325{
245d4a47 6326 const U8 *start;
a0ed51b3 6327 STRLEN len;
d931b1be 6328 STRLEN boffset;
a0ed51b3 6329
d931b1be 6330 PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7918f24d 6331
d931b1be 6332 start = (U8*)SvPV_flags(sv, len, flags);
7e8c5dac 6333 if (len) {
bdf30dd6 6334 const U8 * const send = start + len;
0905937d 6335 MAGIC *mg = NULL;
d931b1be 6336 boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
bdf30dd6 6337
48f9cf71
NC
6338 if (lenp
6339 && *lenp /* don't bother doing work for 0, as its bytes equivalent
6340 is 0, and *lenp is already set to that. */) {
28ccbf94 6341 /* Convert the relative offset to absolute. */
777f7c56 6342 const STRLEN uoffset2 = uoffset + *lenp;
721e86b6
AL
6343 const STRLEN boffset2
6344 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
28ccbf94 6345 uoffset, boffset) - boffset;
bdf30dd6 6346
28ccbf94 6347 *lenp = boffset2;
bdf30dd6 6348 }
d931b1be
NC
6349 } else {
6350 if (lenp)
6351 *lenp = 0;
6352 boffset = 0;
a0ed51b3 6353 }
e23c8137 6354
d931b1be 6355 return boffset;
a0ed51b3
LW
6356}
6357
777f7c56
EB
6358/*
6359=for apidoc sv_pos_u2b
6360
6361Converts the value pointed to by offsetp from a count of UTF-8 chars from
6362the start of the string, to a count of the equivalent number of bytes; if
6363lenp is non-zero, it does the same to lenp, but this time starting from
6364the offset, rather than from the start of the string. Handles magic and
6365type coercion.
6366
d931b1be
NC
6367Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6368than 2Gb.
6369
777f7c56
EB
6370=cut
6371*/
6372
6373/*
6374 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6375 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6376 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6377 *
6378 */
6379
6380/* This function is subject to size and sign problems */
6381
6382void
6383Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6384{
d931b1be
NC
6385 PERL_ARGS_ASSERT_SV_POS_U2B;
6386
777f7c56
EB
6387 if (lenp) {
6388 STRLEN ulen = (STRLEN)*lenp;
d931b1be
NC
6389 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6390 SV_GMAGIC|SV_CONST_RETURN);
777f7c56
EB
6391 *lenp = (I32)ulen;
6392 } else {
d931b1be
NC
6393 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6394 SV_GMAGIC|SV_CONST_RETURN);
777f7c56 6395 }
777f7c56
EB
6396}
6397
ec49a12c
NC
6398static void
6399S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6400 const STRLEN ulen)
6401{
6402 PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6403 if (SvREADONLY(sv))
6404 return;
6405
6406 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6407 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6408 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6409 }
6410 assert(*mgp);
6411
6412 (*mgp)->mg_len = ulen;
6413 /* For now, treat "overflowed" as "still unknown". See RT #72924. */
6414 if (ulen != (STRLEN) (*mgp)->mg_len)
6415 (*mgp)->mg_len = -1;
6416}
6417
9564a3bd
NC
6418/* Create and update the UTF8 magic offset cache, with the proffered utf8/
6419 byte length pairing. The (byte) length of the total SV is passed in too,
6420 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6421 may not have updated SvCUR, so we can't rely on reading it directly.
6422
6423 The proffered utf8/byte length pairing isn't used if the cache already has
6424 two pairs, and swapping either for the proffered pair would increase the
6425 RMS of the intervals between known byte offsets.
6426
6427 The cache itself consists of 4 STRLEN values
6428 0: larger UTF-8 offset
6429 1: corresponding byte offset
6430 2: smaller UTF-8 offset
6431 3: corresponding byte offset
6432
6433 Unused cache pairs have the value 0, 0.
6434 Keeping the cache "backwards" means that the invariant of
6435 cache[0] >= cache[2] is maintained even with empty slots, which means that
6436 the code that uses it doesn't need to worry if only 1 entry has actually
6437 been set to non-zero. It also makes the "position beyond the end of the
6438 cache" logic much simpler, as the first slot is always the one to start
6439 from.
645c22ef 6440*/
ec07b5e0 6441static void
ac1e9476
SS
6442S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6443 const STRLEN utf8, const STRLEN blen)
ec07b5e0
NC
6444{
6445 STRLEN *cache;
7918f24d
NC
6446
6447 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6448
ec07b5e0
NC
6449 if (SvREADONLY(sv))
6450 return;
6451
f89a570b
CS
6452 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6453 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
ec07b5e0
NC
6454 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6455 0);
6456 (*mgp)->mg_len = -1;
6457 }
6458 assert(*mgp);
6459
6460 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6461 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6462 (*mgp)->mg_ptr = (char *) cache;
6463 }
6464 assert(cache);
6465
ab8be49d
NC
6466 if (PL_utf8cache < 0 && SvPOKp(sv)) {
6467 /* SvPOKp() because it's possible that sv has string overloading, and
6468 therefore is a reference, hence SvPVX() is actually a pointer.
6469 This cures the (very real) symptoms of RT 69422, but I'm not actually
6470 sure whether we should even be caching the results of UTF-8
6471 operations on overloading, given that nothing stops overloading
6472 returning a different value every time it's called. */
ef816a78 6473 const U8 *start = (const U8 *) SvPVX_const(sv);
6448472a 6474 const STRLEN realutf8 = utf8_length(start, start + byte);
ec07b5e0 6475
9df83ffd
NC
6476 assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6477 sv);
ec07b5e0 6478 }
ab455f60
NC
6479
6480 /* Cache is held with the later position first, to simplify the code
6481 that deals with unbounded ends. */
6482
6483 ASSERT_UTF8_CACHE(cache);
6484 if (cache[1] == 0) {
6485 /* Cache is totally empty */
6486 cache[0] = utf8;
6487 cache[1] = byte;
6488 } else if (cache[3] == 0) {
6489 if (byte > cache[1]) {
6490 /* New one is larger, so goes first. */
6491 cache[2] = cache[0];
6492 cache[3] = cache[1];
6493 cache[0] = utf8;
6494 cache[1] = byte;
6495 } else {
6496 cache[2] = utf8;
6497 cache[3] = byte;
6498 }
6499 } else {
6500#define THREEWAY_SQUARE(a,b,c,d) \
6501 ((float)((d) - (c))) * ((float)((d) - (c))) \
6502 + ((float)((c) - (b))) * ((float)((c) - (b))) \
6503 + ((float)((b) - (a))) * ((float)((b) - (a)))
6504
6505 /* Cache has 2 slots in use, and we know three potential pairs.
6506 Keep the two that give the lowest RMS distance. Do the
6507 calcualation in bytes simply because we always know the byte
6508 length. squareroot has the same ordering as the positive value,
6509 so don't bother with the actual square root. */
6510 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6511 if (byte > cache[1]) {
6512 /* New position is after the existing pair of pairs. */
6513 const float keep_earlier
6514 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6515 const float keep_later
6516 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6517
6518 if (keep_later < keep_earlier) {
6519 if (keep_later < existing) {
6520 cache[2] = cache[0];
6521 cache[3] = cache[1];
6522 cache[0] = utf8;
6523 cache[1] = byte;
6524 }
6525 }
6526 else {
6527 if (keep_earlier < existing) {
6528 cache[0] = utf8;
6529 cache[1] = byte;
6530 }
6531 }
6532 }
57d7fbf1
NC
6533 else if (byte > cache[3]) {
6534 /* New position is between the existing pair of pairs. */
6535 const float keep_earlier
6536 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6537 const float keep_later
6538 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6539
6540 if (keep_later < keep_earlier) {
6541 if (keep_later < existing) {
6542 cache[2] = utf8;
6543 cache[3] = byte;
6544 }
6545 }
6546 else {
6547 if (keep_earlier < existing) {
6548 cache[0] = utf8;
6549 cache[1] = byte;
6550 }
6551 }
6552 }
6553 else {
6554 /* New position is before the existing pair of pairs. */
6555 const float keep_earlier
6556 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6557 const float keep_later
6558 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6559
6560 if (keep_later < keep_earlier) {
6561 if (keep_later < existing) {
6562 cache[2] = utf8;
6563 cache[3] = byte;
6564 }
6565 }
6566 else {
6567 if (keep_earlier < existing) {
6568 cache[0] = cache[2];
6569 cache[1] = cache[3];
6570 cache[2] = utf8;
6571 cache[3] = byte;
6572 }
6573 }
6574 }
ab455f60 6575 }
0905937d 6576 ASSERT_UTF8_CACHE(cache);
ec07b5e0
NC
6577}
6578
ec07b5e0 6579/* We already know all of the way, now we may be able to walk back. The same
25a8a4ef
NC
6580 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6581 backward is half the speed of walking forward. */
ec07b5e0 6582static STRLEN
ac1e9476
SS
6583S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6584 const U8 *end, STRLEN endu)
ec07b5e0
NC
6585{
6586 const STRLEN forw = target - s;
6587 STRLEN backw = end - target;
6588
7918f24d
NC
6589 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6590
ec07b5e0 6591 if (forw < 2 * backw) {
6448472a 6592 return utf8_length(s, target);
ec07b5e0
NC
6593 }
6594
6595 while (end > target) {
6596 end--;
6597 while (UTF8_IS_CONTINUATION(*end)) {
6598 end--;
6599 }
6600 endu--;
6601 }
6602 return endu;
6603}
6604
9564a3bd
NC
6605/*
6606=for apidoc sv_pos_b2u
6607
6608Converts the value pointed to by offsetp from a count of bytes from the
6609start of the string, to a count of the equivalent number of UTF-8 chars.
6610Handles magic and type coercion.
6611
6612=cut
6613*/
6614
6615/*
6616 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
c05a5c57 6617 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
6618 * byte offsets.
6619 *
6620 */
a0ed51b3 6621void
ac1e9476 6622Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
a0ed51b3 6623{
83003860 6624 const U8* s;
ec07b5e0 6625 const STRLEN byte = *offsetp;
7087a21c 6626 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
ab455f60 6627 STRLEN blen;
ec07b5e0
NC
6628 MAGIC* mg = NULL;
6629 const U8* send;
a922f900 6630 bool found = FALSE;
a0ed51b3 6631
7918f24d
NC
6632 PERL_ARGS_ASSERT_SV_POS_B2U;
6633
a0ed51b3
LW
6634 if (!sv)
6635 return;
6636
ab455f60 6637 s = (const U8*)SvPV_const(sv, blen);
7e8c5dac 6638
ab455f60 6639 if (blen < byte)
ec07b5e0 6640 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7e8c5dac 6641
ec07b5e0 6642 send = s + byte;
a67d7df9 6643
f89a570b
CS
6644 if (!SvREADONLY(sv)
6645 && PL_utf8cache
6646 && SvTYPE(sv) >= SVt_PVMG
6647 && (mg = mg_find(sv, PERL_MAGIC_utf8)))
6648 {
ffca234a 6649 if (mg->mg_ptr) {
d4c19fe8 6650 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
b9f984a5 6651 if (cache[1] == byte) {
ec07b5e0
NC
6652 /* An exact match. */
6653 *offsetp = cache[0];
ec07b5e0 6654 return;
7e8c5dac 6655 }
ab455f60
NC
6656 if (cache[3] == byte) {
6657 /* An exact match. */
6658 *offsetp = cache[2];
6659 return;
6660 }
668af93f
NC
6661
6662 if (cache[1] < byte) {
ec07b5e0 6663 /* We already know part of the way. */
b9f984a5
NC
6664 if (mg->mg_len != -1) {
6665 /* Actually, we know the end too. */
6666 len = cache[0]
6667 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
ab455f60 6668 s + blen, mg->mg_len - cache[0]);
b9f984a5 6669 } else {
6448472a 6670 len = cache[0] + utf8_length(s + cache[1], send);
b9f984a5 6671 }
7e8c5dac 6672 }
9f985e4c
NC
6673 else if (cache[3] < byte) {
6674 /* We're between the two cached pairs, so we do the calculation
6675 offset by the byte/utf-8 positions for the earlier pair,
6676 then add the utf-8 characters from the string start to
6677 there. */
6678 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
6679 s + cache[1], cache[0] - cache[2])
6680 + cache[2];
6681
6682 }
6683 else { /* cache[3] > byte */
6684 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
6685 cache[2]);
7e8c5dac 6686
7e8c5dac 6687 }
ec07b5e0 6688 ASSERT_UTF8_CACHE(cache);
a922f900 6689 found = TRUE;
ffca234a 6690 } else if (mg->mg_len != -1) {
ab455f60 6691 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
a922f900 6692 found = TRUE;
7e8c5dac 6693 }
a0ed51b3 6694 }
a922f900 6695 if (!found || PL_utf8cache < 0) {
6448472a 6696 const STRLEN real_len = utf8_length(s, send);
a922f900 6697
9df83ffd
NC
6698 if (found && PL_utf8cache < 0)
6699 assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
a922f900 6700 len = real_len;
ec07b5e0
NC
6701 }
6702 *offsetp = len;
6703
0d7caf4c
NC
6704 if (PL_utf8cache) {
6705 if (blen == byte)
6706 utf8_mg_len_cache_update(sv, &mg, len);
6707 else
6708 utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
6709 }
a0ed51b3
LW
6710}
6711
9df83ffd
NC
6712static void
6713S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
6714 STRLEN real, SV *const sv)
6715{
6716 PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
6717
6718 /* As this is debugging only code, save space by keeping this test here,
6719 rather than inlining it in all the callers. */
6720 if (from_cache == real)
6721 return;
6722
6723 /* Need to turn the assertions off otherwise we may recurse infinitely
6724 while printing error messages. */
6725 SAVEI8(PL_utf8cache);
6726 PL_utf8cache = 0;
6727 Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
6728 func, (UV) from_cache, (UV) real, SVfARG(sv));
6729}
6730
954c1994
GS
6731/*
6732=for apidoc sv_eq
6733
6734Returns a boolean indicating whether the strings in the two SVs are
645c22ef
DM
6735identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6736coerce its args to strings if necessary.
954c1994
GS
6737
6738=cut
6739*/
6740
79072805 6741I32
e01b9e88 6742Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
79072805 6743{
97aff369 6744 dVAR;
e1ec3a88 6745 const char *pv1;
463ee0b2 6746 STRLEN cur1;
e1ec3a88 6747 const char *pv2;
463ee0b2 6748 STRLEN cur2;
e01b9e88 6749 I32 eq = 0;
bd61b366 6750 char *tpv = NULL;
a0714e2c 6751 SV* svrecode = NULL;
79072805 6752
e01b9e88 6753 if (!sv1) {
79072805
LW
6754 pv1 = "";
6755 cur1 = 0;
6756 }
ced497e2
YST
6757 else {
6758 /* if pv1 and pv2 are the same, second SvPV_const call may
6759 * invalidate pv1, so we may need to make a copy */
6760 if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
6761 pv1 = SvPV_const(sv1, cur1);
59cd0e26 6762 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
ced497e2 6763 }
4d84ee25 6764 pv1 = SvPV_const(sv1, cur1);
ced497e2 6765 }
79072805 6766
e01b9e88
SC
6767 if (!sv2){
6768 pv2 = "";
6769 cur2 = 0;
92d29cee 6770 }
e01b9e88 6771 else
4d84ee25 6772 pv2 = SvPV_const(sv2, cur2);
79072805 6773
cf48d248 6774 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
6775 /* Differing utf8ness.
6776 * Do not UTF8size the comparands as a side-effect. */
6777 if (PL_encoding) {
6778 if (SvUTF8(sv1)) {
553e1bcc
AT
6779 svrecode = newSVpvn(pv2, cur2);
6780 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6781 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
6782 }
6783 else {
553e1bcc
AT
6784 svrecode = newSVpvn(pv1, cur1);
6785 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6786 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
6787 }
6788 /* Now both are in UTF-8. */
0a1bd7ac
DM
6789 if (cur1 != cur2) {
6790 SvREFCNT_dec(svrecode);
799ef3cb 6791 return FALSE;
0a1bd7ac 6792 }
799ef3cb
JH
6793 }
6794 else {
6795 bool is_utf8 = TRUE;
6796
6797 if (SvUTF8(sv1)) {
6798 /* sv1 is the UTF-8 one,
6799 * if is equal it must be downgrade-able */
9d4ba2ae 6800 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
799ef3cb
JH
6801 &cur1, &is_utf8);
6802 if (pv != pv1)
553e1bcc 6803 pv1 = tpv = pv;
799ef3cb
JH
6804 }
6805 else {
6806 /* sv2 is the UTF-8 one,
6807 * if is equal it must be downgrade-able */
9d4ba2ae 6808 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
799ef3cb
JH
6809 &cur2, &is_utf8);
6810 if (pv != pv2)
553e1bcc 6811 pv2 = tpv = pv;
799ef3cb
JH
6812 }
6813 if (is_utf8) {
6814 /* Downgrade not possible - cannot be eq */
bf694877 6815 assert (tpv == 0);
799ef3cb
JH
6816 return FALSE;
6817 }
6818 }
cf48d248
JH
6819 }
6820
6821 if (cur1 == cur2)
765f542d 6822 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
e01b9e88 6823
b37c2d43 6824 SvREFCNT_dec(svrecode);
553e1bcc
AT
6825 if (tpv)
6826 Safefree(tpv);
cf48d248 6827
e01b9e88 6828 return eq;
79072805
LW
6829}
6830
954c1994
GS
6831/*
6832=for apidoc sv_cmp
6833
6834Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
6835string in C<sv1> is less than, equal to, or greater than the string in
645c22ef
DM
6836C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6837coerce its args to strings if necessary. See also C<sv_cmp_locale>.
954c1994
GS
6838
6839=cut
6840*/
6841
79072805 6842I32
ac1e9476 6843Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
79072805 6844{
97aff369 6845 dVAR;
560a288e 6846 STRLEN cur1, cur2;
e1ec3a88 6847 const char *pv1, *pv2;
bd61b366 6848 char *tpv = NULL;
cf48d248 6849 I32 cmp;
a0714e2c 6850 SV *svrecode = NULL;
560a288e 6851
e01b9e88
SC
6852 if (!sv1) {
6853 pv1 = "";
560a288e
GS
6854 cur1 = 0;
6855 }
e01b9e88 6856 else
4d84ee25 6857 pv1 = SvPV_const(sv1, cur1);
560a288e 6858
553e1bcc 6859 if (!sv2) {
e01b9e88 6860 pv2 = "";
560a288e
GS
6861 cur2 = 0;
6862 }
e01b9e88 6863 else
4d84ee25 6864 pv2 = SvPV_const(sv2, cur2);
79072805 6865
cf48d248 6866 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
6867 /* Differing utf8ness.
6868 * Do not UTF8size the comparands as a side-effect. */
cf48d248 6869 if (SvUTF8(sv1)) {
799ef3cb 6870 if (PL_encoding) {
553e1bcc
AT
6871 svrecode = newSVpvn(pv2, cur2);
6872 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6873 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
6874 }
6875 else {
e1ec3a88 6876 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
799ef3cb 6877 }
cf48d248
JH
6878 }
6879 else {
799ef3cb 6880 if (PL_encoding) {
553e1bcc
AT
6881 svrecode = newSVpvn(pv1, cur1);
6882 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6883 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
6884 }
6885 else {
e1ec3a88 6886 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
799ef3cb 6887 }
cf48d248
JH
6888 }
6889 }
6890
e01b9e88 6891 if (!cur1) {
cf48d248 6892 cmp = cur2 ? -1 : 0;
e01b9e88 6893 } else if (!cur2) {
cf48d248
JH
6894 cmp = 1;
6895 } else {
e1ec3a88 6896 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
e01b9e88
SC
6897
6898 if (retval) {
cf48d248 6899 cmp = retval < 0 ? -1 : 1;
e01b9e88 6900 } else if (cur1 == cur2) {
cf48d248
JH
6901 cmp = 0;
6902 } else {
6903 cmp = cur1 < cur2 ? -1 : 1;
e01b9e88 6904 }
cf48d248 6905 }
16660edb 6906
b37c2d43 6907 SvREFCNT_dec(svrecode);
553e1bcc
AT
6908 if (tpv)
6909 Safefree(tpv);
cf48d248
JH
6910
6911 return cmp;
bbce6d69 6912}
16660edb 6913
c461cf8f
JH
6914/*
6915=for apidoc sv_cmp_locale
6916
645c22ef
DM
6917Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6918'use bytes' aware, handles get magic, and will coerce its args to strings
d77cdebf 6919if necessary. See also C<sv_cmp>.
c461cf8f
JH
6920
6921=cut
6922*/
6923
bbce6d69 6924I32
ac1e9476 6925Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
bbce6d69 6926{
97aff369 6927 dVAR;
36477c24 6928#ifdef USE_LOCALE_COLLATE
16660edb 6929
bbce6d69 6930 char *pv1, *pv2;
6931 STRLEN len1, len2;
6932 I32 retval;
16660edb 6933
3280af22 6934 if (PL_collation_standard)
bbce6d69 6935 goto raw_compare;
16660edb 6936
bbce6d69 6937 len1 = 0;
8ac85365 6938 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
bbce6d69 6939 len2 = 0;
8ac85365 6940 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
16660edb 6941
bbce6d69 6942 if (!pv1 || !len1) {
6943 if (pv2 && len2)
6944 return -1;
6945 else
6946 goto raw_compare;
6947 }
6948 else {
6949 if (!pv2 || !len2)
6950 return 1;
6951 }
16660edb 6952
bbce6d69 6953 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
16660edb 6954
bbce6d69 6955 if (retval)
16660edb 6956 return retval < 0 ? -1 : 1;
6957
bbce6d69 6958 /*
6959 * When the result of collation is equality, that doesn't mean
6960 * that there are no differences -- some locales exclude some
6961 * characters from consideration. So to avoid false equalities,
6962 * we use the raw string as a tiebreaker.
6963 */
16660edb 6964
bbce6d69 6965 raw_compare:
5f66b61c 6966 /*FALLTHROUGH*/
16660edb 6967
36477c24 6968#endif /* USE_LOCALE_COLLATE */
16660edb 6969
bbce6d69 6970 return sv_cmp(sv1, sv2);
6971}
79072805 6972
645c22ef 6973
36477c24 6974#ifdef USE_LOCALE_COLLATE
645c22ef 6975
7a4c00b4 6976/*
645c22ef
DM
6977=for apidoc sv_collxfrm
6978
6979Add Collate Transform magic to an SV if it doesn't already have it.
6980
6981Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6982scalar data of the variable, but transformed to such a format that a normal
6983memory comparison can be used to compare the data according to the locale
6984settings.
6985
6986=cut
6987*/
6988
bbce6d69 6989char *
ac1e9476 6990Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
bbce6d69 6991{
97aff369 6992 dVAR;
7a4c00b4 6993 MAGIC *mg;
16660edb 6994
7918f24d
NC
6995 PERL_ARGS_ASSERT_SV_COLLXFRM;
6996
14befaf4 6997 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
3280af22 6998 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
93524f2b
NC
6999 const char *s;
7000 char *xf;
bbce6d69 7001 STRLEN len, xlen;
7002
7a4c00b4 7003 if (mg)
7004 Safefree(mg->mg_ptr);
93524f2b 7005 s = SvPV_const(sv, len);
bbce6d69 7006 if ((xf = mem_collxfrm(s, len, &xlen))) {
7a4c00b4 7007 if (! mg) {
d83f0a82
NC
7008#ifdef PERL_OLD_COPY_ON_WRITE
7009 if (SvIsCOW(sv))
7010 sv_force_normal_flags(sv, 0);
7011#endif
7012 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7013 0, 0);
7a4c00b4 7014 assert(mg);
bbce6d69 7015 }
7a4c00b4 7016 mg->mg_ptr = xf;
565764a8 7017 mg->mg_len = xlen;
7a4c00b4 7018 }
7019 else {
ff0cee69 7020 if (mg) {
7021 mg->mg_ptr = NULL;
565764a8 7022 mg->mg_len = -1;
ff0cee69 7023 }
bbce6d69 7024 }
7025 }
7a4c00b4 7026 if (mg && mg->mg_ptr) {
565764a8 7027 *nxp = mg->mg_len;
3280af22 7028 return mg->mg_ptr + sizeof(PL_collation_ix);
bbce6d69 7029 }
7030 else {
7031 *nxp = 0;
7032 return NULL;
16660edb 7033 }
79072805
LW
7034}
7035
36477c24 7036#endif /* USE_LOCALE_COLLATE */
bbce6d69 7037
c461cf8f
JH
7038/*
7039=for apidoc sv_gets
7040
7041Get a line from the filehandle and store it into the SV, optionally
7042appending to the currently-stored string.
7043
7044=cut
7045*/
7046
79072805 7047char *
ac1e9476 7048Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
79072805 7049{
97aff369 7050 dVAR;
e1ec3a88 7051 const char *rsptr;
c07a80fd 7052 STRLEN rslen;
7053 register STDCHAR rslast;
7054 register STDCHAR *bp;
7055 register I32 cnt;
9c5ffd7c 7056 I32 i = 0;
8bfdd7d9 7057 I32 rspara = 0;
c07a80fd 7058
7918f24d
NC
7059 PERL_ARGS_ASSERT_SV_GETS;
7060
bc44a8a2
NC
7061 if (SvTHINKFIRST(sv))
7062 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
765f542d
NC
7063 /* XXX. If you make this PVIV, then copy on write can copy scalars read
7064 from <>.
7065 However, perlbench says it's slower, because the existing swipe code
7066 is faster than copy on write.
7067 Swings and roundabouts. */
862a34c6 7068 SvUPGRADE(sv, SVt_PV);
99491443 7069
ff68c719 7070 SvSCREAM_off(sv);
efd8b2ba
AE
7071
7072 if (append) {
7073 if (PerlIO_isutf8(fp)) {
7074 if (!SvUTF8(sv)) {
7075 sv_utf8_upgrade_nomg(sv);
7076 sv_pos_u2b(sv,&append,0);
7077 }
7078 } else if (SvUTF8(sv)) {
561b68a9 7079 SV * const tsv = newSV(0);
efd8b2ba
AE
7080 sv_gets(tsv, fp, 0);
7081 sv_utf8_upgrade_nomg(tsv);
7082 SvCUR_set(sv,append);
7083 sv_catsv(sv,tsv);
7084 sv_free(tsv);
7085 goto return_string_or_null;
7086 }
7087 }
7088
7089 SvPOK_only(sv);
05dee287
JJ
7090 if (!append) {
7091 SvCUR_set(sv,0);
7092 }
efd8b2ba
AE
7093 if (PerlIO_isutf8(fp))
7094 SvUTF8_on(sv);
c07a80fd 7095
923e4eb5 7096 if (IN_PERL_COMPILETIME) {
8bfdd7d9
HS
7097 /* we always read code in line mode */
7098 rsptr = "\n";
7099 rslen = 1;
7100 }
7101 else if (RsSNARF(PL_rs)) {
7a5fa8a2 7102 /* If it is a regular disk file use size from stat() as estimate
acbd132f
JH
7103 of amount we are going to read -- may result in mallocing
7104 more memory than we really need if the layers below reduce
7105 the size we read (e.g. CRLF or a gzip layer).
e468d35b 7106 */
e311fd51 7107 Stat_t st;
e468d35b 7108 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
f54cb97a 7109 const Off_t offset = PerlIO_tell(fp);
58f1856e 7110 if (offset != (Off_t) -1 && st.st_size + append > offset) {
e468d35b
NIS
7111 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7112 }
7113 }
c07a80fd 7114 rsptr = NULL;
7115 rslen = 0;
7116 }
3280af22 7117 else if (RsRECORD(PL_rs)) {
e311fd51 7118 I32 bytesread;
5b2b9c68 7119 char *buffer;
acbd132f 7120 U32 recsize;
048d9da8
CB
7121#ifdef VMS
7122 int fd;
7123#endif
5b2b9c68
HM
7124
7125 /* Grab the size of the record we're getting */
acbd132f 7126 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
e311fd51 7127 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
5b2b9c68
HM
7128 /* Go yank in */
7129#ifdef VMS
7130 /* VMS wants read instead of fread, because fread doesn't respect */
7131 /* RMS record boundaries. This is not necessarily a good thing to be */
e468d35b
NIS
7132 /* doing, but we've got no other real choice - except avoid stdio
7133 as implementation - perhaps write a :vms layer ?
7134 */
048d9da8
CB
7135 fd = PerlIO_fileno(fp);
7136 if (fd == -1) { /* in-memory file from PerlIO::Scalar */
7137 bytesread = PerlIO_read(fp, buffer, recsize);
7138 }
7139 else {
7140 bytesread = PerlLIO_read(fd, buffer, recsize);
7141 }
5b2b9c68
HM
7142#else
7143 bytesread = PerlIO_read(fp, buffer, recsize);
7144#endif
27e6ca2d
AE
7145 if (bytesread < 0)
7146 bytesread = 0;
82f1394b 7147 SvCUR_set(sv, bytesread + append);
e670df4e 7148 buffer[bytesread] = '\0';
efd8b2ba 7149 goto return_string_or_null;
5b2b9c68 7150 }
3280af22 7151 else if (RsPARA(PL_rs)) {
c07a80fd 7152 rsptr = "\n\n";
7153 rslen = 2;
8bfdd7d9 7154 rspara = 1;
c07a80fd 7155 }
7d59b7e4
NIS
7156 else {
7157 /* Get $/ i.e. PL_rs into same encoding as stream wants */
7158 if (PerlIO_isutf8(fp)) {
7159 rsptr = SvPVutf8(PL_rs, rslen);
7160 }
7161 else {
7162 if (SvUTF8(PL_rs)) {
7163 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7164 Perl_croak(aTHX_ "Wide character in $/");
7165 }
7166 }
93524f2b 7167 rsptr = SvPV_const(PL_rs, rslen);
7d59b7e4
NIS
7168 }
7169 }
7170
c07a80fd 7171 rslast = rslen ? rsptr[rslen - 1] : '\0';
7172
8bfdd7d9 7173 if (rspara) { /* have to do this both before and after */
79072805 7174 do { /* to make sure file boundaries work right */
760ac839 7175 if (PerlIO_eof(fp))
a0d0e21e 7176 return 0;
760ac839 7177 i = PerlIO_getc(fp);
79072805 7178 if (i != '\n') {
a0d0e21e
LW
7179 if (i == -1)
7180 return 0;
760ac839 7181 PerlIO_ungetc(fp,i);
79072805
LW
7182 break;
7183 }
7184 } while (i != EOF);
7185 }
c07a80fd 7186
760ac839
LW
7187 /* See if we know enough about I/O mechanism to cheat it ! */
7188
7189 /* This used to be #ifdef test - it is made run-time test for ease
1c846c1f 7190 of abstracting out stdio interface. One call should be cheap
760ac839
LW
7191 enough here - and may even be a macro allowing compile
7192 time optimization.
7193 */
7194
7195 if (PerlIO_fast_gets(fp)) {
7196
7197 /*
7198 * We're going to steal some values from the stdio struct
7199 * and put EVERYTHING in the innermost loop into registers.
7200 */
7201 register STDCHAR *ptr;
7202 STRLEN bpx;
7203 I32 shortbuffered;
7204
16660edb 7205#if defined(VMS) && defined(PERLIO_IS_STDIO)
7206 /* An ungetc()d char is handled separately from the regular
7207 * buffer, so we getc() it back out and stuff it in the buffer.
7208 */
7209 i = PerlIO_getc(fp);
7210 if (i == EOF) return 0;
7211 *(--((*fp)->_ptr)) = (unsigned char) i;
7212 (*fp)->_cnt++;
7213#endif
c07a80fd 7214
c2960299 7215 /* Here is some breathtakingly efficient cheating */
c07a80fd 7216
a20bf0c3 7217 cnt = PerlIO_get_cnt(fp); /* get count into register */
e468d35b 7218 /* make sure we have the room */
7a5fa8a2 7219 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
e468d35b 7220 /* Not room for all of it
7a5fa8a2 7221 if we are looking for a separator and room for some
e468d35b
NIS
7222 */
7223 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7a5fa8a2 7224 /* just process what we have room for */
79072805
LW
7225 shortbuffered = cnt - SvLEN(sv) + append + 1;
7226 cnt -= shortbuffered;
7227 }
7228 else {
7229 shortbuffered = 0;
bbce6d69 7230 /* remember that cnt can be negative */
eb160463 7231 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
79072805
LW
7232 }
7233 }
7a5fa8a2 7234 else
79072805 7235 shortbuffered = 0;
3f7c398e 7236 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
a20bf0c3 7237 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
16660edb 7238 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7239 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
16660edb 7240 DEBUG_P(PerlIO_printf(Perl_debug_log,
ba7abf9d 7241 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7242 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7243 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
79072805
LW
7244 for (;;) {
7245 screamer:
93a17b20 7246 if (cnt > 0) {
c07a80fd 7247 if (rslen) {
760ac839
LW
7248 while (cnt > 0) { /* this | eat */
7249 cnt--;
c07a80fd 7250 if ((*bp++ = *ptr++) == rslast) /* really | dust */
7251 goto thats_all_folks; /* screams | sed :-) */
7252 }
7253 }
7254 else {
1c846c1f
NIS
7255 Copy(ptr, bp, cnt, char); /* this | eat */
7256 bp += cnt; /* screams | dust */
c07a80fd 7257 ptr += cnt; /* louder | sed :-) */
a5f75d66 7258 cnt = 0;
93a17b20 7259 }
79072805
LW
7260 }
7261
748a9306 7262 if (shortbuffered) { /* oh well, must extend */
79072805
LW
7263 cnt = shortbuffered;
7264 shortbuffered = 0;
3f7c398e 7265 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7266 SvCUR_set(sv, bpx);
7267 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3f7c398e 7268 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
79072805
LW
7269 continue;
7270 }
7271
16660edb 7272 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841
GS
7273 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7274 PTR2UV(ptr),(long)cnt));
cc00df79 7275 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
ba7abf9d 7276#if 0
16660edb 7277 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7278 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7279 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7280 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 7281#endif
1c846c1f 7282 /* This used to call 'filbuf' in stdio form, but as that behaves like
774d564b 7283 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7284 another abstraction. */
760ac839 7285 i = PerlIO_getc(fp); /* get more characters */
ba7abf9d 7286#if 0
16660edb 7287 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7288 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7289 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7290 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 7291#endif
a20bf0c3
JH
7292 cnt = PerlIO_get_cnt(fp);
7293 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
16660edb 7294 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7295 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
79072805 7296
748a9306
LW
7297 if (i == EOF) /* all done for ever? */
7298 goto thats_really_all_folks;
7299
3f7c398e 7300 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7301 SvCUR_set(sv, bpx);
7302 SvGROW(sv, bpx + cnt + 2);
3f7c398e 7303 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
c07a80fd 7304
eb160463 7305 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
79072805 7306
c07a80fd 7307 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
79072805 7308 goto thats_all_folks;
79072805
LW
7309 }
7310
7311thats_all_folks:
3f7c398e 7312 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
36477c24 7313 memNE((char*)bp - rslen, rsptr, rslen))
760ac839 7314 goto screamer; /* go back to the fray */
79072805
LW
7315thats_really_all_folks:
7316 if (shortbuffered)
7317 cnt += shortbuffered;
16660edb 7318 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7319 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
cc00df79 7320 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
16660edb 7321 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7322 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7323 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7324 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
79072805 7325 *bp = '\0';
3f7c398e 7326 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
16660edb 7327 DEBUG_P(PerlIO_printf(Perl_debug_log,
fb73857a 7328 "Screamer: done, len=%ld, string=|%.*s|\n",
3f7c398e 7329 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
760ac839
LW
7330 }
7331 else
79072805 7332 {
6edd2cd5 7333 /*The big, slow, and stupid way. */
27da23d5 7334#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
cbbf8932 7335 STDCHAR *buf = NULL;
a02a5408 7336 Newx(buf, 8192, STDCHAR);
6edd2cd5 7337 assert(buf);
4d2c4e07 7338#else
6edd2cd5 7339 STDCHAR buf[8192];
4d2c4e07 7340#endif
79072805 7341
760ac839 7342screamer2:
c07a80fd 7343 if (rslen) {
00b6aa41 7344 register const STDCHAR * const bpe = buf + sizeof(buf);
760ac839 7345 bp = buf;
eb160463 7346 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
760ac839
LW
7347 ; /* keep reading */
7348 cnt = bp - buf;
c07a80fd 7349 }
7350 else {
760ac839 7351 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
16660edb 7352 /* Accomodate broken VAXC compiler, which applies U8 cast to
7353 * both args of ?: operator, causing EOF to change into 255
7354 */
37be0adf 7355 if (cnt > 0)
cbe9e203
JH
7356 i = (U8)buf[cnt - 1];
7357 else
37be0adf 7358 i = EOF;
c07a80fd 7359 }
79072805 7360
cbe9e203
JH
7361 if (cnt < 0)
7362 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
7363 if (append)
7364 sv_catpvn(sv, (char *) buf, cnt);
7365 else
7366 sv_setpvn(sv, (char *) buf, cnt);
c07a80fd 7367
7368 if (i != EOF && /* joy */
7369 (!rslen ||
7370 SvCUR(sv) < rslen ||
3f7c398e 7371 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
79072805
LW
7372 {
7373 append = -1;
63e4d877
CS
7374 /*
7375 * If we're reading from a TTY and we get a short read,
7376 * indicating that the user hit his EOF character, we need
7377 * to notice it now, because if we try to read from the TTY
7378 * again, the EOF condition will disappear.
7379 *
7380 * The comparison of cnt to sizeof(buf) is an optimization
7381 * that prevents unnecessary calls to feof().
7382 *
7383 * - jik 9/25/96
7384 */
bb7a0f54 7385 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
63e4d877 7386 goto screamer2;
79072805 7387 }
6edd2cd5 7388
27da23d5 7389#ifdef USE_HEAP_INSTEAD_OF_STACK
6edd2cd5
JH
7390 Safefree(buf);
7391#endif
79072805
LW
7392 }
7393
8bfdd7d9 7394 if (rspara) { /* have to do this both before and after */
c07a80fd 7395 while (i != EOF) { /* to make sure file boundaries work right */
760ac839 7396 i = PerlIO_getc(fp);
79072805 7397 if (i != '\n') {
760ac839 7398 PerlIO_ungetc(fp,i);
79072805
LW
7399 break;
7400 }
7401 }
7402 }
c07a80fd 7403
efd8b2ba 7404return_string_or_null:
bd61b366 7405 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
79072805
LW
7406}
7407
954c1994
GS
7408/*
7409=for apidoc sv_inc
7410
645c22ef 7411Auto-increment of the value in the SV, doing string to numeric conversion
6f1401dc 7412if necessary. Handles 'get' magic and operator overloading.
954c1994
GS
7413
7414=cut
7415*/
7416
79072805 7417void
ac1e9476 7418Perl_sv_inc(pTHX_ register SV *const sv)
79072805 7419{
6f1401dc
DM
7420 if (!sv)
7421 return;
7422 SvGETMAGIC(sv);
7423 sv_inc_nomg(sv);
7424}
7425
7426/*
7427=for apidoc sv_inc_nomg
7428
7429Auto-increment of the value in the SV, doing string to numeric conversion
7430if necessary. Handles operator overloading. Skips handling 'get' magic.
7431
7432=cut
7433*/
7434
7435void
7436Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7437{
97aff369 7438 dVAR;
79072805 7439 register char *d;
463ee0b2 7440 int flags;
79072805
LW
7441
7442 if (!sv)
7443 return;
ed6116ce 7444 if (SvTHINKFIRST(sv)) {
765f542d
NC
7445 if (SvIsCOW(sv))
7446 sv_force_normal_flags(sv, 0);
0f15f207 7447 if (SvREADONLY(sv)) {
923e4eb5 7448 if (IN_PERL_RUNTIME)
6ad8f254 7449 Perl_croak_no_modify(aTHX);
0f15f207 7450 }
a0d0e21e 7451 if (SvROK(sv)) {
b5be31e9 7452 IV i;
9e7bc3e8
JD
7453 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7454 return;
56431972 7455 i = PTR2IV(SvRV(sv));
b5be31e9
SM
7456 sv_unref(sv);
7457 sv_setiv(sv, i);
a0d0e21e 7458 }
ed6116ce 7459 }
8990e307 7460 flags = SvFLAGS(sv);
28e5dec8
JH
7461 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7462 /* It's (privately or publicly) a float, but not tested as an
7463 integer, so test it to see. */
d460ef45 7464 (void) SvIV(sv);
28e5dec8
JH
7465 flags = SvFLAGS(sv);
7466 }
7467 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7468 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 7469#ifdef PERL_PRESERVE_IVUV
28e5dec8 7470 oops_its_int:
59d8ce62 7471#endif
25da4f38
IZ
7472 if (SvIsUV(sv)) {
7473 if (SvUVX(sv) == UV_MAX)
a1e868e7 7474 sv_setnv(sv, UV_MAX_P1);
25da4f38
IZ
7475 else
7476 (void)SvIOK_only_UV(sv);
607fa7f2 7477 SvUV_set(sv, SvUVX(sv) + 1);
25da4f38
IZ
7478 } else {
7479 if (SvIVX(sv) == IV_MAX)
28e5dec8 7480 sv_setuv(sv, (UV)IV_MAX + 1);
25da4f38
IZ
7481 else {
7482 (void)SvIOK_only(sv);
45977657 7483 SvIV_set(sv, SvIVX(sv) + 1);
1c846c1f 7484 }
55497cff 7485 }
79072805
LW
7486 return;
7487 }
28e5dec8 7488 if (flags & SVp_NOK) {
b88df990 7489 const NV was = SvNVX(sv);
b68c599a 7490 if (NV_OVERFLOWS_INTEGERS_AT &&
a2a5de95
NC
7491 was >= NV_OVERFLOWS_INTEGERS_AT) {
7492 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7493 "Lost precision when incrementing %" NVff " by 1",
7494 was);
b88df990 7495 }
28e5dec8 7496 (void)SvNOK_only(sv);
b68c599a 7497 SvNV_set(sv, was + 1.0);
28e5dec8
JH
7498 return;
7499 }
7500
3f7c398e 7501 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
28e5dec8 7502 if ((flags & SVTYPEMASK) < SVt_PVIV)
f5282e15 7503 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
28e5dec8 7504 (void)SvIOK_only(sv);
45977657 7505 SvIV_set(sv, 1);
79072805
LW
7506 return;
7507 }
463ee0b2 7508 d = SvPVX(sv);
79072805
LW
7509 while (isALPHA(*d)) d++;
7510 while (isDIGIT(*d)) d++;
6aff239d 7511 if (d < SvEND(sv)) {
28e5dec8 7512#ifdef PERL_PRESERVE_IVUV
d1be9408 7513 /* Got to punt this as an integer if needs be, but we don't issue
28e5dec8
JH
7514 warnings. Probably ought to make the sv_iv_please() that does
7515 the conversion if possible, and silently. */
504618e9 7516 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
7517 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7518 /* Need to try really hard to see if it's an integer.
7519 9.22337203685478e+18 is an integer.
7520 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7521 so $a="9.22337203685478e+18"; $a+0; $a++
7522 needs to be the same as $a="9.22337203685478e+18"; $a++
7523 or we go insane. */
d460ef45 7524
28e5dec8
JH
7525 (void) sv_2iv(sv);
7526 if (SvIOK(sv))
7527 goto oops_its_int;
7528
7529 /* sv_2iv *should* have made this an NV */
7530 if (flags & SVp_NOK) {
7531 (void)SvNOK_only(sv);
9d6ce603 7532 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
7533 return;
7534 }
7535 /* I don't think we can get here. Maybe I should assert this
7536 And if we do get here I suspect that sv_setnv will croak. NWC
7537 Fall through. */
7538#if defined(USE_LONG_DOUBLE)
7539 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 7540 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 7541#else
1779d84d 7542 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 7543 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
7544#endif
7545 }
7546#endif /* PERL_PRESERVE_IVUV */
3f7c398e 7547 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
79072805
LW
7548 return;
7549 }
7550 d--;
3f7c398e 7551 while (d >= SvPVX_const(sv)) {
79072805
LW
7552 if (isDIGIT(*d)) {
7553 if (++*d <= '9')
7554 return;
7555 *(d--) = '0';
7556 }
7557 else {
9d116dd7
JH
7558#ifdef EBCDIC
7559 /* MKS: The original code here died if letters weren't consecutive.
7560 * at least it didn't have to worry about non-C locales. The
7561 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
1c846c1f 7562 * arranged in order (although not consecutively) and that only
9d116dd7
JH
7563 * [A-Za-z] are accepted by isALPHA in the C locale.
7564 */
7565 if (*d != 'z' && *d != 'Z') {
7566 do { ++*d; } while (!isALPHA(*d));
7567 return;
7568 }
7569 *(d--) -= 'z' - 'a';
7570#else
79072805
LW
7571 ++*d;
7572 if (isALPHA(*d))
7573 return;
7574 *(d--) -= 'z' - 'a' + 1;
9d116dd7 7575#endif
79072805
LW
7576 }
7577 }
7578 /* oh,oh, the number grew */
7579 SvGROW(sv, SvCUR(sv) + 2);
b162af07 7580 SvCUR_set(sv, SvCUR(sv) + 1);
3f7c398e 7581 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
79072805
LW
7582 *d = d[-1];
7583 if (isDIGIT(d[1]))
7584 *d = '1';
7585 else
7586 *d = d[1];
7587}
7588
954c1994
GS
7589/*
7590=for apidoc sv_dec
7591
645c22ef 7592Auto-decrement of the value in the SV, doing string to numeric conversion
6f1401dc 7593if necessary. Handles 'get' magic and operator overloading.
954c1994
GS
7594
7595=cut
7596*/
7597
79072805 7598void
ac1e9476 7599Perl_sv_dec(pTHX_ register SV *const sv)
79072805 7600{
97aff369 7601 dVAR;
6f1401dc
DM
7602 if (!sv)
7603 return;
7604 SvGETMAGIC(sv);
7605 sv_dec_nomg(sv);
7606}
7607
7608/*
7609=for apidoc sv_dec_nomg
7610
7611Auto-decrement of the value in the SV, doing string to numeric conversion
7612if necessary. Handles operator overloading. Skips handling 'get' magic.
7613
7614=cut
7615*/
7616
7617void
7618Perl_sv_dec_nomg(pTHX_ register SV *const sv)
7619{
7620 dVAR;
463ee0b2
LW
7621 int flags;
7622
79072805
LW
7623 if (!sv)
7624 return;
ed6116ce 7625 if (SvTHINKFIRST(sv)) {
765f542d
NC
7626 if (SvIsCOW(sv))
7627 sv_force_normal_flags(sv, 0);
0f15f207 7628 if (SvREADONLY(sv)) {
923e4eb5 7629 if (IN_PERL_RUNTIME)
6ad8f254 7630 Perl_croak_no_modify(aTHX);
0f15f207 7631 }
a0d0e21e 7632 if (SvROK(sv)) {
b5be31e9 7633 IV i;
9e7bc3e8
JD
7634 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7635 return;
56431972 7636 i = PTR2IV(SvRV(sv));
b5be31e9
SM
7637 sv_unref(sv);
7638 sv_setiv(sv, i);
a0d0e21e 7639 }
ed6116ce 7640 }
28e5dec8
JH
7641 /* Unlike sv_inc we don't have to worry about string-never-numbers
7642 and keeping them magic. But we mustn't warn on punting */
8990e307 7643 flags = SvFLAGS(sv);
28e5dec8
JH
7644 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7645 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 7646#ifdef PERL_PRESERVE_IVUV
28e5dec8 7647 oops_its_int:
59d8ce62 7648#endif
25da4f38
IZ
7649 if (SvIsUV(sv)) {
7650 if (SvUVX(sv) == 0) {
7651 (void)SvIOK_only(sv);
45977657 7652 SvIV_set(sv, -1);
25da4f38
IZ
7653 }
7654 else {
7655 (void)SvIOK_only_UV(sv);
f4eee32f 7656 SvUV_set(sv, SvUVX(sv) - 1);
1c846c1f 7657 }
25da4f38 7658 } else {
b88df990
NC
7659 if (SvIVX(sv) == IV_MIN) {
7660 sv_setnv(sv, (NV)IV_MIN);
7661 goto oops_its_num;
7662 }
25da4f38
IZ
7663 else {
7664 (void)SvIOK_only(sv);
45977657 7665 SvIV_set(sv, SvIVX(sv) - 1);
1c846c1f 7666 }
55497cff 7667 }
7668 return;
7669 }
28e5dec8 7670 if (flags & SVp_NOK) {
b88df990
NC
7671 oops_its_num:
7672 {
7673 const NV was = SvNVX(sv);
b68c599a 7674 if (NV_OVERFLOWS_INTEGERS_AT &&
a2a5de95
NC
7675 was <= -NV_OVERFLOWS_INTEGERS_AT) {
7676 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7677 "Lost precision when decrementing %" NVff " by 1",
7678 was);
b88df990
NC
7679 }
7680 (void)SvNOK_only(sv);
b68c599a 7681 SvNV_set(sv, was - 1.0);
b88df990
NC
7682 return;
7683 }
28e5dec8 7684 }
8990e307 7685 if (!(flags & SVp_POK)) {
ef088171
NC
7686 if ((flags & SVTYPEMASK) < SVt_PVIV)
7687 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
7688 SvIV_set(sv, -1);
7689 (void)SvIOK_only(sv);
79072805
LW
7690 return;
7691 }
28e5dec8
JH
7692#ifdef PERL_PRESERVE_IVUV
7693 {
504618e9 7694 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
7695 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7696 /* Need to try really hard to see if it's an integer.
7697 9.22337203685478e+18 is an integer.
7698 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7699 so $a="9.22337203685478e+18"; $a+0; $a--
7700 needs to be the same as $a="9.22337203685478e+18"; $a--
7701 or we go insane. */
d460ef45 7702
28e5dec8
JH
7703 (void) sv_2iv(sv);
7704 if (SvIOK(sv))
7705 goto oops_its_int;
7706
7707 /* sv_2iv *should* have made this an NV */
7708 if (flags & SVp_NOK) {
7709 (void)SvNOK_only(sv);
9d6ce603 7710 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
7711 return;
7712 }
7713 /* I don't think we can get here. Maybe I should assert this
7714 And if we do get here I suspect that sv_setnv will croak. NWC
7715 Fall through. */
7716#if defined(USE_LONG_DOUBLE)
7717 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 7718 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 7719#else
1779d84d 7720 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 7721 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
7722#endif
7723 }
7724 }
7725#endif /* PERL_PRESERVE_IVUV */
3f7c398e 7726 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
79072805
LW
7727}
7728
81041c50
YO
7729/* this define is used to eliminate a chunk of duplicated but shared logic
7730 * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
7731 * used anywhere but here - yves
7732 */
7733#define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
7734 STMT_START { \
7735 EXTEND_MORTAL(1); \
7736 PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
7737 } STMT_END
7738
954c1994
GS
7739/*
7740=for apidoc sv_mortalcopy
7741
645c22ef 7742Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
d4236ebc
DM
7743The new SV is marked as mortal. It will be destroyed "soon", either by an
7744explicit call to FREETMPS, or by an implicit call at places such as
7745statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
954c1994
GS
7746
7747=cut
7748*/
7749
79072805
LW
7750/* Make a string that will exist for the duration of the expression
7751 * evaluation. Actually, it may have to last longer than that, but
7752 * hopefully we won't free it until it has been assigned to a
7753 * permanent location. */
7754
7755SV *
ac1e9476 7756Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
79072805 7757{
97aff369 7758 dVAR;
463ee0b2 7759 register SV *sv;
b881518d 7760
4561caa4 7761 new_SV(sv);
79072805 7762 sv_setsv(sv,oldstr);
81041c50 7763 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307
LW
7764 SvTEMP_on(sv);
7765 return sv;
7766}
7767
954c1994
GS
7768/*
7769=for apidoc sv_newmortal
7770
645c22ef 7771Creates a new null SV which is mortal. The reference count of the SV is
d4236ebc
DM
7772set to 1. It will be destroyed "soon", either by an explicit call to
7773FREETMPS, or by an implicit call at places such as statement boundaries.
7774See also C<sv_mortalcopy> and C<sv_2mortal>.
954c1994
GS
7775
7776=cut
7777*/
7778
8990e307 7779SV *
864dbfa3 7780Perl_sv_newmortal(pTHX)
8990e307 7781{
97aff369 7782 dVAR;
8990e307
LW
7783 register SV *sv;
7784
4561caa4 7785 new_SV(sv);
8990e307 7786 SvFLAGS(sv) = SVs_TEMP;
81041c50 7787 PUSH_EXTEND_MORTAL__SV_C(sv);
79072805
LW
7788 return sv;
7789}
7790
59cd0e26
NC
7791
7792/*
7793=for apidoc newSVpvn_flags
7794
7795Creates a new SV and copies a string into it. The reference count for the
7796SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7797string. You are responsible for ensuring that the source string is at least
7798C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7799Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
7800If C<SVs_TEMP> is set, then C<sv2mortal()> is called on the result before
c790c9b6
KW
7801returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
7802C<SVf_UTF8> flag will be set on the new SV.
59cd0e26
NC
7803C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
7804
7805 #define newSVpvn_utf8(s, len, u) \
7806 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
7807
7808=cut
7809*/
7810
7811SV *
23f13727 7812Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
59cd0e26
NC
7813{
7814 dVAR;
7815 register SV *sv;
7816
7817 /* All the flags we don't support must be zero.
7818 And we're new code so I'm going to assert this from the start. */
7819 assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
7820 new_SV(sv);
7821 sv_setpvn(sv,s,len);
d21488d7
YO
7822
7823 /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
7824 * and do what it does outselves here.
7825 * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
7826 * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
7827 * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
7828 * eleminate quite a few steps than it looks - Yves (explaining patch by gfx)
7829 */
7830
6dfeccca
GF
7831 SvFLAGS(sv) |= flags;
7832
7833 if(flags & SVs_TEMP){
81041c50 7834 PUSH_EXTEND_MORTAL__SV_C(sv);
6dfeccca
GF
7835 }
7836
7837 return sv;
59cd0e26
NC
7838}
7839
954c1994
GS
7840/*
7841=for apidoc sv_2mortal
7842
d4236ebc
DM
7843Marks an existing SV as mortal. The SV will be destroyed "soon", either
7844by an explicit call to FREETMPS, or by an implicit call at places such as
37d2ac18
NC
7845statement boundaries. SvTEMP() is turned on which means that the SV's
7846string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7847and C<sv_mortalcopy>.
954c1994
GS
7848
7849=cut
7850*/
7851
79072805 7852SV *
23f13727 7853Perl_sv_2mortal(pTHX_ register SV *const sv)
79072805 7854{
27da23d5 7855 dVAR;
79072805 7856 if (!sv)
7a5b473e 7857 return NULL;
d689ffdd 7858 if (SvREADONLY(sv) && SvIMMORTAL(sv))
11162842 7859 return sv;
81041c50 7860 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307 7861 SvTEMP_on(sv);
79072805
LW
7862 return sv;
7863}
7864
954c1994
GS
7865/*
7866=for apidoc newSVpv
7867
7868Creates a new SV and copies a string into it. The reference count for the
7869SV is set to 1. If C<len> is zero, Perl will compute the length using
7870strlen(). For efficiency, consider using C<newSVpvn> instead.
7871
7872=cut
7873*/
7874
79072805 7875SV *
23f13727 7876Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
79072805 7877{
97aff369 7878 dVAR;
463ee0b2 7879 register SV *sv;
79072805 7880
4561caa4 7881 new_SV(sv);
ddfa59c7 7882 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
79072805
LW
7883 return sv;
7884}
7885
954c1994
GS
7886/*
7887=for apidoc newSVpvn
7888
7889Creates a new SV and copies a string into it. The reference count for the
1c846c1f 7890SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
954c1994 7891string. You are responsible for ensuring that the source string is at least
9e09f5f2 7892C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
954c1994
GS
7893
7894=cut
7895*/
7896
9da1e3b5 7897SV *
23f13727 7898Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
9da1e3b5 7899{
97aff369 7900 dVAR;
9da1e3b5
MUN
7901 register SV *sv;
7902
7903 new_SV(sv);
9da1e3b5
MUN
7904 sv_setpvn(sv,s,len);
7905 return sv;
7906}
7907
740cce10 7908/*
926f8064 7909=for apidoc newSVhek
bd08039b
NC
7910
7911Creates a new SV from the hash key structure. It will generate scalars that
5aaec2b4
NC
7912point to the shared string table where possible. Returns a new (undefined)
7913SV if the hek is NULL.
bd08039b
NC
7914
7915=cut
7916*/
7917
7918SV *
23f13727 7919Perl_newSVhek(pTHX_ const HEK *const hek)
bd08039b 7920{
97aff369 7921 dVAR;
5aaec2b4
NC
7922 if (!hek) {
7923 SV *sv;
7924
7925 new_SV(sv);
7926 return sv;
7927 }
7928
bd08039b
NC
7929 if (HEK_LEN(hek) == HEf_SVKEY) {
7930 return newSVsv(*(SV**)HEK_KEY(hek));
7931 } else {
7932 const int flags = HEK_FLAGS(hek);
7933 if (flags & HVhek_WASUTF8) {
7934 /* Trouble :-)
7935 Andreas would like keys he put in as utf8 to come back as utf8
7936 */
7937 STRLEN utf8_len = HEK_LEN(hek);
b64e5050
AL
7938 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7939 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
bd08039b
NC
7940
7941 SvUTF8_on (sv);
7942 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7943 return sv;
45e34800 7944 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
bd08039b
NC
7945 /* We don't have a pointer to the hv, so we have to replicate the
7946 flag into every HEK. This hv is using custom a hasing
7947 algorithm. Hence we can't return a shared string scalar, as
7948 that would contain the (wrong) hash value, and might get passed
45e34800
NC
7949 into an hv routine with a regular hash.
7950 Similarly, a hash that isn't using shared hash keys has to have
7951 the flag in every key so that we know not to try to call
7952 share_hek_kek on it. */
bd08039b 7953
b64e5050 7954 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
bd08039b
NC
7955 if (HEK_UTF8(hek))
7956 SvUTF8_on (sv);
7957 return sv;
7958 }
7959 /* This will be overwhelminly the most common case. */
409dfe77
NC
7960 {
7961 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
7962 more efficient than sharepvn(). */
7963 SV *sv;
7964
7965 new_SV(sv);
7966 sv_upgrade(sv, SVt_PV);
7967 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7968 SvCUR_set(sv, HEK_LEN(hek));
7969 SvLEN_set(sv, 0);
7970 SvREADONLY_on(sv);
7971 SvFAKE_on(sv);
7972 SvPOK_on(sv);
7973 if (HEK_UTF8(hek))
7974 SvUTF8_on(sv);
7975 return sv;
7976 }
bd08039b
NC
7977 }
7978}
7979
1c846c1f
NIS
7980/*
7981=for apidoc newSVpvn_share
7982
3f7c398e 7983Creates a new SV with its SvPVX_const pointing to a shared string in the string
645c22ef 7984table. If the string does not already exist in the table, it is created
758fcfc1
VP
7985first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
7986value is used; otherwise the hash is computed. The string's hash can be later
7987be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
7988that as the string table is used for shared hash keys these strings will have
7989SvPVX_const == HeKEY and hash lookup will avoid string compare.
1c846c1f
NIS
7990
7991=cut
7992*/
7993
7994SV *
c3654f1a 7995Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
1c846c1f 7996{
97aff369 7997 dVAR;
1c846c1f 7998 register SV *sv;
c3654f1a 7999 bool is_utf8 = FALSE;
a51caccf
NC
8000 const char *const orig_src = src;
8001
c3654f1a 8002 if (len < 0) {
77caf834 8003 STRLEN tmplen = -len;
c3654f1a 8004 is_utf8 = TRUE;
75a54232 8005 /* See the note in hv.c:hv_fetch() --jhi */
e1ec3a88 8006 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
75a54232
JH
8007 len = tmplen;
8008 }
1c846c1f 8009 if (!hash)
5afd6d42 8010 PERL_HASH(hash, src, len);
1c846c1f 8011 new_SV(sv);
f46ee248
NC
8012 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8013 changes here, update it there too. */
bdd68bc3 8014 sv_upgrade(sv, SVt_PV);
f880fe2f 8015 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
b162af07 8016 SvCUR_set(sv, len);
b162af07 8017 SvLEN_set(sv, 0);
1c846c1f
NIS
8018 SvREADONLY_on(sv);
8019 SvFAKE_on(sv);
8020 SvPOK_on(sv);
c3654f1a
IH
8021 if (is_utf8)
8022 SvUTF8_on(sv);
a51caccf
NC
8023 if (src != orig_src)
8024 Safefree(src);
1c846c1f
NIS
8025 return sv;
8026}
8027
645c22ef 8028
cea2e8a9 8029#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
8030
8031/* pTHX_ magic can't cope with varargs, so this is a no-context
8032 * version of the main function, (which may itself be aliased to us).
8033 * Don't access this version directly.
8034 */
8035
46fc3d4c 8036SV *
23f13727 8037Perl_newSVpvf_nocontext(const char *const pat, ...)
46fc3d4c 8038{
cea2e8a9 8039 dTHX;
46fc3d4c 8040 register SV *sv;
8041 va_list args;
7918f24d
NC
8042
8043 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8044
46fc3d4c 8045 va_start(args, pat);
c5be433b 8046 sv = vnewSVpvf(pat, &args);
46fc3d4c 8047 va_end(args);
8048 return sv;
8049}
cea2e8a9 8050#endif
46fc3d4c 8051
954c1994
GS
8052/*
8053=for apidoc newSVpvf
8054
645c22ef 8055Creates a new SV and initializes it with the string formatted like
954c1994
GS
8056C<sprintf>.
8057
8058=cut
8059*/
8060
cea2e8a9 8061SV *
23f13727 8062Perl_newSVpvf(pTHX_ const char *const pat, ...)
cea2e8a9
GS
8063{
8064 register SV *sv;
8065 va_list args;
7918f24d
NC
8066
8067 PERL_ARGS_ASSERT_NEWSVPVF;
8068
cea2e8a9 8069 va_start(args, pat);
c5be433b 8070 sv = vnewSVpvf(pat, &args);
cea2e8a9
GS
8071 va_end(args);
8072 return sv;
8073}
46fc3d4c 8074
645c22ef
DM
8075/* backend for newSVpvf() and newSVpvf_nocontext() */
8076
79072805 8077SV *
23f13727 8078Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
c5be433b 8079{
97aff369 8080 dVAR;
c5be433b 8081 register SV *sv;
7918f24d
NC
8082
8083 PERL_ARGS_ASSERT_VNEWSVPVF;
8084
c5be433b 8085 new_SV(sv);
4608196e 8086 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
8087 return sv;
8088}
8089
954c1994
GS
8090/*
8091=for apidoc newSVnv
8092
8093Creates a new SV and copies a floating point value into it.
8094The reference count for the SV is set to 1.
8095
8096=cut
8097*/
8098
c5be433b 8099SV *
23f13727 8100Perl_newSVnv(pTHX_ const NV n)
79072805 8101{
97aff369 8102 dVAR;
463ee0b2 8103 register SV *sv;
79072805 8104
4561caa4 8105 new_SV(sv);
79072805
LW
8106 sv_setnv(sv,n);
8107 return sv;
8108}
8109
954c1994
GS
8110/*
8111=for apidoc newSViv
8112
8113Creates a new SV and copies an integer into it. The reference count for the
8114SV is set to 1.
8115
8116=cut
8117*/
8118
79072805 8119SV *
23f13727 8120Perl_newSViv(pTHX_ const IV i)
79072805 8121{
97aff369 8122 dVAR;
463ee0b2 8123 register SV *sv;
79072805 8124
4561caa4 8125 new_SV(sv);
79072805
LW
8126 sv_setiv(sv,i);
8127 return sv;
8128}
8129
954c1994 8130/*
1a3327fb
JH
8131=for apidoc newSVuv
8132
8133Creates a new SV and copies an unsigned integer into it.
8134The reference count for the SV is set to 1.
8135
8136=cut
8137*/
8138
8139SV *
23f13727 8140Perl_newSVuv(pTHX_ const UV u)
1a3327fb 8141{
97aff369 8142 dVAR;
1a3327fb
JH
8143 register SV *sv;
8144
8145 new_SV(sv);
8146 sv_setuv(sv,u);
8147 return sv;
8148}
8149
8150/*
b9f83d2f
NC
8151=for apidoc newSV_type
8152
c41f7ed2 8153Creates a new SV, of the type specified. The reference count for the new SV
b9f83d2f
NC
8154is set to 1.
8155
8156=cut
8157*/
8158
8159SV *
fe9845cc 8160Perl_newSV_type(pTHX_ const svtype type)
b9f83d2f
NC
8161{
8162 register SV *sv;
8163
8164 new_SV(sv);
8165 sv_upgrade(sv, type);
8166 return sv;
8167}
8168
8169/*
954c1994
GS
8170=for apidoc newRV_noinc
8171
8172Creates an RV wrapper for an SV. The reference count for the original
8173SV is B<not> incremented.
8174
8175=cut
8176*/
8177
2304df62 8178SV *
23f13727 8179Perl_newRV_noinc(pTHX_ SV *const tmpRef)
2304df62 8180{
97aff369 8181 dVAR;
4df7f6af 8182 register SV *sv = newSV_type(SVt_IV);
7918f24d
NC
8183
8184 PERL_ARGS_ASSERT_NEWRV_NOINC;
8185
76e3520e 8186 SvTEMP_off(tmpRef);
b162af07 8187 SvRV_set(sv, tmpRef);
2304df62 8188 SvROK_on(sv);
2304df62
AD
8189 return sv;
8190}
8191
ff276b08 8192/* newRV_inc is the official function name to use now.
645c22ef
DM
8193 * newRV_inc is in fact #defined to newRV in sv.h
8194 */
8195
5f05dabc 8196SV *
23f13727 8197Perl_newRV(pTHX_ SV *const sv)
5f05dabc 8198{
97aff369 8199 dVAR;
7918f24d
NC
8200
8201 PERL_ARGS_ASSERT_NEWRV;
8202
7f466ec7 8203 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
5f05dabc 8204}
5f05dabc 8205
954c1994
GS
8206/*
8207=for apidoc newSVsv
8208
8209Creates a new SV which is an exact duplicate of the original SV.
645c22ef 8210(Uses C<sv_setsv>).
954c1994
GS
8211
8212=cut
8213*/
8214
79072805 8215SV *
23f13727 8216Perl_newSVsv(pTHX_ register SV *const old)
79072805 8217{
97aff369 8218 dVAR;
463ee0b2 8219 register SV *sv;
79072805
LW
8220
8221 if (!old)
7a5b473e 8222 return NULL;
8990e307 8223 if (SvTYPE(old) == SVTYPEMASK) {
9b387841 8224 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
a0714e2c 8225 return NULL;
79072805 8226 }
4561caa4 8227 new_SV(sv);
e90aabeb
NC
8228 /* SV_GMAGIC is the default for sv_setv()
8229 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8230 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
8231 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
463ee0b2 8232 return sv;
79072805
LW
8233}
8234
645c22ef
DM
8235/*
8236=for apidoc sv_reset
8237
8238Underlying implementation for the C<reset> Perl function.
8239Note that the perl-level function is vaguely deprecated.
8240
8241=cut
8242*/
8243
79072805 8244void
23f13727 8245Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
79072805 8246{
27da23d5 8247 dVAR;
4802d5d7 8248 char todo[PERL_UCHAR_MAX+1];
79072805 8249
7918f24d
NC
8250 PERL_ARGS_ASSERT_SV_RESET;
8251
49d8d3a1
MB
8252 if (!stash)
8253 return;
8254
79072805 8255 if (!*s) { /* reset ?? searches */
daba3364 8256 MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8d2f4536 8257 if (mg) {
c2b1997a
NC
8258 const U32 count = mg->mg_len / sizeof(PMOP**);
8259 PMOP **pmp = (PMOP**) mg->mg_ptr;
8260 PMOP *const *const end = pmp + count;
8261
8262 while (pmp < end) {
c737faaf 8263#ifdef USE_ITHREADS
c2b1997a 8264 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
c737faaf 8265#else
c2b1997a 8266 (*pmp)->op_pmflags &= ~PMf_USED;
c737faaf 8267#endif
c2b1997a 8268 ++pmp;
8d2f4536 8269 }
79072805
LW
8270 }
8271 return;
8272 }
8273
8274 /* reset variables */
8275
8276 if (!HvARRAY(stash))
8277 return;
463ee0b2
LW
8278
8279 Zero(todo, 256, char);
79072805 8280 while (*s) {
b464bac0
AL
8281 I32 max;
8282 I32 i = (unsigned char)*s;
79072805
LW
8283 if (s[1] == '-') {
8284 s += 2;
8285 }
4802d5d7 8286 max = (unsigned char)*s++;
79072805 8287 for ( ; i <= max; i++) {
463ee0b2
LW
8288 todo[i] = 1;
8289 }
a0d0e21e 8290 for (i = 0; i <= (I32) HvMAX(stash); i++) {
b464bac0 8291 HE *entry;
79072805 8292 for (entry = HvARRAY(stash)[i];
9e35f4b3
GS
8293 entry;
8294 entry = HeNEXT(entry))
8295 {
b464bac0
AL
8296 register GV *gv;
8297 register SV *sv;
8298
1edc1566 8299 if (!todo[(U8)*HeKEY(entry)])
463ee0b2 8300 continue;
159b6efe 8301 gv = MUTABLE_GV(HeVAL(entry));
79072805 8302 sv = GvSV(gv);
e203899d
NC
8303 if (sv) {
8304 if (SvTHINKFIRST(sv)) {
8305 if (!SvREADONLY(sv) && SvROK(sv))
8306 sv_unref(sv);
8307 /* XXX Is this continue a bug? Why should THINKFIRST
8308 exempt us from resetting arrays and hashes? */
8309 continue;
8310 }
8311 SvOK_off(sv);
8312 if (SvTYPE(sv) >= SVt_PV) {
8313 SvCUR_set(sv, 0);
bd61b366 8314 if (SvPVX_const(sv) != NULL)
e203899d
NC
8315 *SvPVX(sv) = '\0';
8316 SvTAINT(sv);
8317 }
79072805
LW
8318 }
8319 if (GvAV(gv)) {
8320 av_clear(GvAV(gv));
8321 }
bfcb3514 8322 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
b0269e46
AB
8323#if defined(VMS)
8324 Perl_die(aTHX_ "Can't reset %%ENV on this system");
8325#else /* ! VMS */
463ee0b2 8326 hv_clear(GvHV(gv));
b0269e46
AB
8327# if defined(USE_ENVIRON_ARRAY)
8328 if (gv == PL_envgv)
8329 my_clearenv();
8330# endif /* USE_ENVIRON_ARRAY */
8331#endif /* VMS */
79072805
LW
8332 }
8333 }
8334 }
8335 }
8336}
8337
645c22ef
DM
8338/*
8339=for apidoc sv_2io
8340
8341Using various gambits, try to get an IO from an SV: the IO slot if its a
8342GV; or the recursive result if we're an RV; or the IO slot of the symbol
8343named after the PV if we're a string.
8344
8345=cut
8346*/
8347
46fc3d4c 8348IO*
23f13727 8349Perl_sv_2io(pTHX_ SV *const sv)
46fc3d4c 8350{
8351 IO* io;
8352 GV* gv;
8353
7918f24d
NC
8354 PERL_ARGS_ASSERT_SV_2IO;
8355
46fc3d4c 8356 switch (SvTYPE(sv)) {
8357 case SVt_PVIO:
a45c7426 8358 io = MUTABLE_IO(sv);
46fc3d4c 8359 break;
8360 case SVt_PVGV:
6e592b3a 8361 if (isGV_with_GP(sv)) {
159b6efe 8362 gv = MUTABLE_GV(sv);
6e592b3a
BM
8363 io = GvIO(gv);
8364 if (!io)
8365 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8366 break;
8367 }
8368 /* FALL THROUGH */
46fc3d4c 8369 default:
8370 if (!SvOK(sv))
cea2e8a9 8371 Perl_croak(aTHX_ PL_no_usym, "filehandle");
46fc3d4c 8372 if (SvROK(sv))
8373 return sv_2io(SvRV(sv));
f776e3cd 8374 gv = gv_fetchsv(sv, 0, SVt_PVIO);
46fc3d4c 8375 if (gv)
8376 io = GvIO(gv);
8377 else
8378 io = 0;
8379 if (!io)
be2597df 8380 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
46fc3d4c 8381 break;
8382 }
8383 return io;
8384}
8385
645c22ef
DM
8386/*
8387=for apidoc sv_2cv
8388
8389Using various gambits, try to get a CV from an SV; in addition, try if
8390possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8e324704 8391The flags in C<lref> are passed to gv_fetchsv.
645c22ef
DM
8392
8393=cut
8394*/
8395
79072805 8396CV *
23f13727 8397Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
79072805 8398{
27da23d5 8399 dVAR;
a0714e2c 8400 GV *gv = NULL;
601f1833 8401 CV *cv = NULL;
79072805 8402
7918f24d
NC
8403 PERL_ARGS_ASSERT_SV_2CV;
8404
85dec29a
NC
8405 if (!sv) {
8406 *st = NULL;
8407 *gvp = NULL;
8408 return NULL;
8409 }
79072805 8410 switch (SvTYPE(sv)) {
79072805
LW
8411 case SVt_PVCV:
8412 *st = CvSTASH(sv);
a0714e2c 8413 *gvp = NULL;
ea726b52 8414 return MUTABLE_CV(sv);
79072805
LW
8415 case SVt_PVHV:
8416 case SVt_PVAV:
ef58ba18 8417 *st = NULL;
a0714e2c 8418 *gvp = NULL;
601f1833 8419 return NULL;
8990e307 8420 case SVt_PVGV:
6e592b3a 8421 if (isGV_with_GP(sv)) {
159b6efe 8422 gv = MUTABLE_GV(sv);
6e592b3a
BM
8423 *gvp = gv;
8424 *st = GvESTASH(gv);
8425 goto fix_gv;
8426 }
8427 /* FALL THROUGH */
8990e307 8428
79072805 8429 default:
a0d0e21e 8430 if (SvROK(sv)) {
823a54a3 8431 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
c4f3bd1e 8432 SvGETMAGIC(sv);
f5284f61
IZ
8433 tryAMAGICunDEREF(to_cv);
8434
62f274bf
GS
8435 sv = SvRV(sv);
8436 if (SvTYPE(sv) == SVt_PVCV) {
ea726b52 8437 cv = MUTABLE_CV(sv);
a0714e2c 8438 *gvp = NULL;
62f274bf
GS
8439 *st = CvSTASH(cv);
8440 return cv;
8441 }
6e592b3a 8442 else if(isGV_with_GP(sv))
159b6efe 8443 gv = MUTABLE_GV(sv);
62f274bf 8444 else
cea2e8a9 8445 Perl_croak(aTHX_ "Not a subroutine reference");
a0d0e21e 8446 }
6e592b3a 8447 else if (isGV_with_GP(sv)) {
9d0f7ed7 8448 SvGETMAGIC(sv);
159b6efe 8449 gv = MUTABLE_GV(sv);
9d0f7ed7 8450 }
79072805 8451 else
9d0f7ed7 8452 gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
79072805 8453 *gvp = gv;
ef58ba18
NC
8454 if (!gv) {
8455 *st = NULL;
601f1833 8456 return NULL;
ef58ba18 8457 }
e26df76a 8458 /* Some flags to gv_fetchsv mean don't really create the GV */
6e592b3a 8459 if (!isGV_with_GP(gv)) {
e26df76a
NC
8460 *st = NULL;
8461 return NULL;
8462 }
79072805 8463 *st = GvESTASH(gv);
8990e307 8464 fix_gv:
8ebc5c01 8465 if (lref && !GvCVu(gv)) {
4633a7c4 8466 SV *tmpsv;
748a9306 8467 ENTER;
561b68a9 8468 tmpsv = newSV(0);
bd61b366 8469 gv_efullname3(tmpsv, gv, NULL);
f6ec51f7
GS
8470 /* XXX this is probably not what they think they're getting.
8471 * It has the same effect as "sub name;", i.e. just a forward
8472 * declaration! */
774d564b 8473 newSUB(start_subparse(FALSE, 0),
4633a7c4 8474 newSVOP(OP_CONST, 0, tmpsv),
5f66b61c 8475 NULL, NULL);
748a9306 8476 LEAVE;
8ebc5c01 8477 if (!GvCVu(gv))
35c1215d 8478 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
4052d21c 8479 SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8990e307 8480 }
8ebc5c01 8481 return GvCVu(gv);
79072805
LW
8482 }
8483}
8484
c461cf8f
JH
8485/*
8486=for apidoc sv_true
8487
8488Returns true if the SV has a true value by Perl's rules.
645c22ef
DM
8489Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8490instead use an in-line version.
c461cf8f
JH
8491
8492=cut
8493*/
8494
79072805 8495I32
23f13727 8496Perl_sv_true(pTHX_ register SV *const sv)
79072805 8497{
8990e307
LW
8498 if (!sv)
8499 return 0;
79072805 8500 if (SvPOK(sv)) {
823a54a3
AL
8501 register const XPV* const tXpv = (XPV*)SvANY(sv);
8502 if (tXpv &&
c2f1de04 8503 (tXpv->xpv_cur > 1 ||
339049b0 8504 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
79072805
LW
8505 return 1;
8506 else
8507 return 0;
8508 }
8509 else {
8510 if (SvIOK(sv))
463ee0b2 8511 return SvIVX(sv) != 0;
79072805
LW
8512 else {
8513 if (SvNOK(sv))
463ee0b2 8514 return SvNVX(sv) != 0.0;
79072805 8515 else
463ee0b2 8516 return sv_2bool(sv);
79072805
LW
8517 }
8518 }
8519}
79072805 8520
645c22ef 8521/*
c461cf8f
JH
8522=for apidoc sv_pvn_force
8523
8524Get a sensible string out of the SV somehow.
645c22ef
DM
8525A private implementation of the C<SvPV_force> macro for compilers which
8526can't cope with complex macro expressions. Always use the macro instead.
c461cf8f 8527
8d6d96c1
HS
8528=for apidoc sv_pvn_force_flags
8529
8530Get a sensible string out of the SV somehow.
8531If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8532appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8533implemented in terms of this function.
645c22ef
DM
8534You normally want to use the various wrapper macros instead: see
8535C<SvPV_force> and C<SvPV_force_nomg>
8d6d96c1
HS
8536
8537=cut
8538*/
8539
8540char *
12964ddd 8541Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 8542{
97aff369 8543 dVAR;
7918f24d
NC
8544
8545 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8546
6fc92669 8547 if (SvTHINKFIRST(sv) && !SvROK(sv))
765f542d 8548 sv_force_normal_flags(sv, 0);
1c846c1f 8549
a0d0e21e 8550 if (SvPOK(sv)) {
13c5b33c
NC
8551 if (lp)
8552 *lp = SvCUR(sv);
a0d0e21e
LW
8553 }
8554 else {
a3b680e6 8555 char *s;
13c5b33c
NC
8556 STRLEN len;
8557
4d84ee25 8558 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
b64e5050 8559 const char * const ref = sv_reftype(sv,0);
4d84ee25
NC
8560 if (PL_op)
8561 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
94bbb3f4 8562 ref, OP_DESC(PL_op));
4d84ee25 8563 else
b64e5050 8564 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
4d84ee25 8565 }
1f257c95
NC
8566 if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8567 || isGV_with_GP(sv))
cea2e8a9 8568 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
94bbb3f4 8569 OP_DESC(PL_op));
b64e5050 8570 s = sv_2pv_flags(sv, &len, flags);
13c5b33c
NC
8571 if (lp)
8572 *lp = len;
8573
3f7c398e 8574 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
a0d0e21e
LW
8575 if (SvROK(sv))
8576 sv_unref(sv);
862a34c6 8577 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
a0d0e21e 8578 SvGROW(sv, len + 1);
706aa1c9 8579 Move(s,SvPVX(sv),len,char);
a0d0e21e 8580 SvCUR_set(sv, len);
97a130b8 8581 SvPVX(sv)[len] = '\0';
a0d0e21e
LW
8582 }
8583 if (!SvPOK(sv)) {
8584 SvPOK_on(sv); /* validate pointer */
8585 SvTAINT(sv);
1d7c1841 8586 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 8587 PTR2UV(sv),SvPVX_const(sv)));
a0d0e21e
LW
8588 }
8589 }
4d84ee25 8590 return SvPVX_mutable(sv);
a0d0e21e
LW
8591}
8592
645c22ef 8593/*
645c22ef
DM
8594=for apidoc sv_pvbyten_force
8595
0feed65a 8596The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
645c22ef
DM
8597
8598=cut
8599*/
8600
7340a771 8601char *
12964ddd 8602Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 8603{
7918f24d
NC
8604 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8605
46ec2f14 8606 sv_pvn_force(sv,lp);
ffebcc3e 8607 sv_utf8_downgrade(sv,0);
46ec2f14
TS
8608 *lp = SvCUR(sv);
8609 return SvPVX(sv);
7340a771
GS
8610}
8611
645c22ef 8612/*
c461cf8f
JH
8613=for apidoc sv_pvutf8n_force
8614
0feed65a 8615The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
c461cf8f
JH
8616
8617=cut
8618*/
8619
7340a771 8620char *
12964ddd 8621Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 8622{
7918f24d
NC
8623 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
8624
46ec2f14 8625 sv_pvn_force(sv,lp);
560a288e 8626 sv_utf8_upgrade(sv);
46ec2f14
TS
8627 *lp = SvCUR(sv);
8628 return SvPVX(sv);
7340a771
GS
8629}
8630
c461cf8f
JH
8631/*
8632=for apidoc sv_reftype
8633
8634Returns a string describing what the SV is a reference to.
8635
8636=cut
8637*/
8638
2b388283 8639const char *
12964ddd 8640Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
a0d0e21e 8641{
7918f24d
NC
8642 PERL_ARGS_ASSERT_SV_REFTYPE;
8643
07409e01
NC
8644 /* The fact that I don't need to downcast to char * everywhere, only in ?:
8645 inside return suggests a const propagation bug in g++. */
c86bf373 8646 if (ob && SvOBJECT(sv)) {
1b6737cc 8647 char * const name = HvNAME_get(SvSTASH(sv));
07409e01 8648 return name ? name : (char *) "__ANON__";
c86bf373 8649 }
a0d0e21e
LW
8650 else {
8651 switch (SvTYPE(sv)) {
8652 case SVt_NULL:
8653 case SVt_IV:
8654 case SVt_NV:
a0d0e21e
LW
8655 case SVt_PV:
8656 case SVt_PVIV:
8657 case SVt_PVNV:
8658 case SVt_PVMG:
1cb0ed9b 8659 if (SvVOK(sv))
439cb1c4 8660 return "VSTRING";
a0d0e21e
LW
8661 if (SvROK(sv))
8662 return "REF";
8663 else
8664 return "SCALAR";
1cb0ed9b 8665
07409e01 8666 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
be65207d
DM
8667 /* tied lvalues should appear to be
8668 * scalars for backwards compatitbility */
8669 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
07409e01 8670 ? "SCALAR" : "LVALUE");
a0d0e21e
LW
8671 case SVt_PVAV: return "ARRAY";
8672 case SVt_PVHV: return "HASH";
8673 case SVt_PVCV: return "CODE";
6e592b3a
BM
8674 case SVt_PVGV: return (char *) (isGV_with_GP(sv)
8675 ? "GLOB" : "SCALAR");
1d2dff63 8676 case SVt_PVFM: return "FORMAT";
27f9d8f3 8677 case SVt_PVIO: return "IO";
cecf5685 8678 case SVt_BIND: return "BIND";
b7c9370f 8679 case SVt_REGEXP: return "REGEXP";
a0d0e21e
LW
8680 default: return "UNKNOWN";
8681 }
8682 }
8683}
8684
954c1994
GS
8685/*
8686=for apidoc sv_isobject
8687
8688Returns a boolean indicating whether the SV is an RV pointing to a blessed
8689object. If the SV is not an RV, or if the object is not blessed, then this
8690will return false.
8691
8692=cut
8693*/
8694
463ee0b2 8695int
864dbfa3 8696Perl_sv_isobject(pTHX_ SV *sv)
85e6fe83 8697{
68dc0745 8698 if (!sv)
8699 return 0;
5b295bef 8700 SvGETMAGIC(sv);
85e6fe83
LW
8701 if (!SvROK(sv))
8702 return 0;
daba3364 8703 sv = SvRV(sv);
85e6fe83
LW
8704 if (!SvOBJECT(sv))
8705 return 0;
8706 return 1;
8707}
8708
954c1994
GS
8709/*
8710=for apidoc sv_isa
8711
8712Returns a boolean indicating whether the SV is blessed into the specified
8713class. This does not check for subtypes; use C<sv_derived_from> to verify
8714an inheritance relationship.
8715
8716=cut
8717*/
8718
85e6fe83 8719int
12964ddd 8720Perl_sv_isa(pTHX_ SV *sv, const char *const name)
463ee0b2 8721{
bfcb3514 8722 const char *hvname;
7918f24d
NC
8723
8724 PERL_ARGS_ASSERT_SV_ISA;
8725
68dc0745 8726 if (!sv)
8727 return 0;
5b295bef 8728 SvGETMAGIC(sv);
ed6116ce 8729 if (!SvROK(sv))
463ee0b2 8730 return 0;
daba3364 8731 sv = SvRV(sv);
ed6116ce 8732 if (!SvOBJECT(sv))
463ee0b2 8733 return 0;
bfcb3514
NC
8734 hvname = HvNAME_get(SvSTASH(sv));
8735 if (!hvname)
e27ad1f2 8736 return 0;
463ee0b2 8737
bfcb3514 8738 return strEQ(hvname, name);
463ee0b2
LW
8739}
8740
954c1994
GS
8741/*
8742=for apidoc newSVrv
8743
8744Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
8745it will be upgraded to one. If C<classname> is non-null then the new SV will
8746be blessed in the specified package. The new SV is returned and its
8747reference count is 1.
8748
8749=cut
8750*/
8751
463ee0b2 8752SV*
12964ddd 8753Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
463ee0b2 8754{
97aff369 8755 dVAR;
463ee0b2
LW
8756 SV *sv;
8757
7918f24d
NC
8758 PERL_ARGS_ASSERT_NEWSVRV;
8759
4561caa4 8760 new_SV(sv);
51cf62d8 8761
765f542d 8762 SV_CHECK_THINKFIRST_COW_DROP(rv);
52944de8 8763 (void)SvAMAGIC_off(rv);
51cf62d8 8764
0199fce9 8765 if (SvTYPE(rv) >= SVt_PVMG) {
a3b680e6 8766 const U32 refcnt = SvREFCNT(rv);
0199fce9
JD
8767 SvREFCNT(rv) = 0;
8768 sv_clear(rv);
8769 SvFLAGS(rv) = 0;
8770 SvREFCNT(rv) = refcnt;
0199fce9 8771
4df7f6af 8772 sv_upgrade(rv, SVt_IV);
dc5494d2
NC
8773 } else if (SvROK(rv)) {
8774 SvREFCNT_dec(SvRV(rv));
43230e26
NC
8775 } else {
8776 prepare_SV_for_RV(rv);
0199fce9 8777 }
51cf62d8 8778
0c34ef67 8779 SvOK_off(rv);
b162af07 8780 SvRV_set(rv, sv);
ed6116ce 8781 SvROK_on(rv);
463ee0b2 8782
a0d0e21e 8783 if (classname) {
da51bb9b 8784 HV* const stash = gv_stashpv(classname, GV_ADD);
a0d0e21e
LW
8785 (void)sv_bless(rv, stash);
8786 }
8787 return sv;
8788}
8789
954c1994
GS
8790/*
8791=for apidoc sv_setref_pv
8792
8793Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
8794argument will be upgraded to an RV. That RV will be modified to point to
8795the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8796into the SV. The C<classname> argument indicates the package for the
bd61b366 8797blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8798will have a reference count of 1, and the RV will be returned.
954c1994
GS
8799
8800Do not use with other Perl types such as HV, AV, SV, CV, because those
8801objects will become corrupted by the pointer copy process.
8802
8803Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8804
8805=cut
8806*/
8807
a0d0e21e 8808SV*
12964ddd 8809Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
a0d0e21e 8810{
97aff369 8811 dVAR;
7918f24d
NC
8812
8813 PERL_ARGS_ASSERT_SV_SETREF_PV;
8814
189b2af5 8815 if (!pv) {
3280af22 8816 sv_setsv(rv, &PL_sv_undef);
189b2af5
GS
8817 SvSETMAGIC(rv);
8818 }
a0d0e21e 8819 else
56431972 8820 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
a0d0e21e
LW
8821 return rv;
8822}
8823
954c1994
GS
8824/*
8825=for apidoc sv_setref_iv
8826
8827Copies an integer into a new SV, optionally blessing the SV. The C<rv>
8828argument will be upgraded to an RV. That RV will be modified to point to
8829the new SV. The C<classname> argument indicates the package for the
bd61b366 8830blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8831will have a reference count of 1, and the RV will be returned.
954c1994
GS
8832
8833=cut
8834*/
8835
a0d0e21e 8836SV*
12964ddd 8837Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
a0d0e21e 8838{
7918f24d
NC
8839 PERL_ARGS_ASSERT_SV_SETREF_IV;
8840
a0d0e21e
LW
8841 sv_setiv(newSVrv(rv,classname), iv);
8842 return rv;
8843}
8844
954c1994 8845/*
e1c57cef
JH
8846=for apidoc sv_setref_uv
8847
8848Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
8849argument will be upgraded to an RV. That RV will be modified to point to
8850the new SV. The C<classname> argument indicates the package for the
bd61b366 8851blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8852will have a reference count of 1, and the RV will be returned.
e1c57cef
JH
8853
8854=cut
8855*/
8856
8857SV*
12964ddd 8858Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
e1c57cef 8859{
7918f24d
NC
8860 PERL_ARGS_ASSERT_SV_SETREF_UV;
8861
e1c57cef
JH
8862 sv_setuv(newSVrv(rv,classname), uv);
8863 return rv;
8864}
8865
8866/*
954c1994
GS
8867=for apidoc sv_setref_nv
8868
8869Copies a double into a new SV, optionally blessing the SV. The C<rv>
8870argument will be upgraded to an RV. That RV will be modified to point to
8871the new SV. The C<classname> argument indicates the package for the
bd61b366 8872blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 8873will have a reference count of 1, and the RV will be returned.
954c1994
GS
8874
8875=cut
8876*/
8877
a0d0e21e 8878SV*
12964ddd 8879Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
a0d0e21e 8880{
7918f24d
NC
8881 PERL_ARGS_ASSERT_SV_SETREF_NV;
8882
a0d0e21e
LW
8883 sv_setnv(newSVrv(rv,classname), nv);
8884 return rv;
8885}
463ee0b2 8886
954c1994
GS
8887/*
8888=for apidoc sv_setref_pvn
8889
8890Copies a string into a new SV, optionally blessing the SV. The length of the
8891string must be specified with C<n>. The C<rv> argument will be upgraded to
8892an RV. That RV will be modified to point to the new SV. The C<classname>
8893argument indicates the package for the blessing. Set C<classname> to
bd61b366 8894C<NULL> to avoid the blessing. The new SV will have a reference count
d34c2299 8895of 1, and the RV will be returned.
954c1994
GS
8896
8897Note that C<sv_setref_pv> copies the pointer while this copies the string.
8898
8899=cut
8900*/
8901
a0d0e21e 8902SV*
12964ddd
SS
8903Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
8904 const char *const pv, const STRLEN n)
a0d0e21e 8905{
7918f24d
NC
8906 PERL_ARGS_ASSERT_SV_SETREF_PVN;
8907
a0d0e21e 8908 sv_setpvn(newSVrv(rv,classname), pv, n);
463ee0b2
LW
8909 return rv;
8910}
8911
954c1994
GS
8912/*
8913=for apidoc sv_bless
8914
8915Blesses an SV into a specified package. The SV must be an RV. The package
8916must be designated by its stash (see C<gv_stashpv()>). The reference count
8917of the SV is unaffected.
8918
8919=cut
8920*/
8921
a0d0e21e 8922SV*
12964ddd 8923Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
a0d0e21e 8924{
97aff369 8925 dVAR;
76e3520e 8926 SV *tmpRef;
7918f24d
NC
8927
8928 PERL_ARGS_ASSERT_SV_BLESS;
8929
a0d0e21e 8930 if (!SvROK(sv))
cea2e8a9 8931 Perl_croak(aTHX_ "Can't bless non-reference value");
76e3520e
GS
8932 tmpRef = SvRV(sv);
8933 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
e0744413
NC
8934 if (SvIsCOW(tmpRef))
8935 sv_force_normal_flags(tmpRef, 0);
76e3520e 8936 if (SvREADONLY(tmpRef))
6ad8f254 8937 Perl_croak_no_modify(aTHX);
76e3520e
GS
8938 if (SvOBJECT(tmpRef)) {
8939 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 8940 --PL_sv_objcount;
76e3520e 8941 SvREFCNT_dec(SvSTASH(tmpRef));
2e3febc6 8942 }
a0d0e21e 8943 }
76e3520e
GS
8944 SvOBJECT_on(tmpRef);
8945 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 8946 ++PL_sv_objcount;
862a34c6 8947 SvUPGRADE(tmpRef, SVt_PVMG);
85fbaab2 8948 SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
a0d0e21e 8949
2e3febc6
CS
8950 if (Gv_AMG(stash))
8951 SvAMAGIC_on(sv);
8952 else
52944de8 8953 (void)SvAMAGIC_off(sv);
a0d0e21e 8954
1edbfb88
AB
8955 if(SvSMAGICAL(tmpRef))
8956 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8957 mg_set(tmpRef);
8958
8959
ecdeb87c 8960
a0d0e21e
LW
8961 return sv;
8962}
8963
645c22ef 8964/* Downgrades a PVGV to a PVMG.
645c22ef
DM
8965 */
8966
76e3520e 8967STATIC void
89e38212 8968S_sv_unglob(pTHX_ SV *const sv)
a0d0e21e 8969{
97aff369 8970 dVAR;
850fabdf 8971 void *xpvmg;
dd69841b 8972 HV *stash;
b37c2d43 8973 SV * const temp = sv_newmortal();
850fabdf 8974
7918f24d
NC
8975 PERL_ARGS_ASSERT_SV_UNGLOB;
8976
a0d0e21e
LW
8977 assert(SvTYPE(sv) == SVt_PVGV);
8978 SvFAKE_off(sv);
159b6efe 8979 gv_efullname3(temp, MUTABLE_GV(sv), "*");
180488f8 8980
f7877b28 8981 if (GvGP(sv)) {
159b6efe
NC
8982 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
8983 && HvNAME_get(stash))
dd69841b 8984 mro_method_changed_in(stash);
159b6efe 8985 gp_free(MUTABLE_GV(sv));
f7877b28 8986 }
e826b3c7 8987 if (GvSTASH(sv)) {
daba3364 8988 sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
5c284bb0 8989 GvSTASH(sv) = NULL;
e826b3c7 8990 }
a5f75d66 8991 GvMULTI_off(sv);
acda4c6a
NC
8992 if (GvNAME_HEK(sv)) {
8993 unshare_hek(GvNAME_HEK(sv));
8994 }
2e5b91de 8995 isGV_with_GP_off(sv);
850fabdf
GS
8996
8997 /* need to keep SvANY(sv) in the right arena */
8998 xpvmg = new_XPVMG();
8999 StructCopy(SvANY(sv), xpvmg, XPVMG);
9000 del_XPVGV(SvANY(sv));
9001 SvANY(sv) = xpvmg;
9002
a0d0e21e
LW
9003 SvFLAGS(sv) &= ~SVTYPEMASK;
9004 SvFLAGS(sv) |= SVt_PVMG;
180488f8
NC
9005
9006 /* Intentionally not calling any local SET magic, as this isn't so much a
9007 set operation as merely an internal storage change. */
9008 sv_setsv_flags(sv, temp, 0);
a0d0e21e
LW
9009}
9010
954c1994 9011/*
840a7b70 9012=for apidoc sv_unref_flags
954c1994
GS
9013
9014Unsets the RV status of the SV, and decrements the reference count of
9015whatever was being referenced by the RV. This can almost be thought of
840a7b70
IZ
9016as a reversal of C<newSVrv>. The C<cflags> argument can contain
9017C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9018(otherwise the decrementing is conditional on the reference count being
9019different from one or the reference being a readonly SV).
7889fe52 9020See C<SvROK_off>.
954c1994
GS
9021
9022=cut
9023*/
9024
ed6116ce 9025void
89e38212 9026Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
ed6116ce 9027{
b64e5050 9028 SV* const target = SvRV(ref);
810b8aa5 9029
7918f24d
NC
9030 PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9031
e15faf7d
NC
9032 if (SvWEAKREF(ref)) {
9033 sv_del_backref(target, ref);
9034 SvWEAKREF_off(ref);
9035 SvRV_set(ref, NULL);
810b8aa5
GS
9036 return;
9037 }
e15faf7d
NC
9038 SvRV_set(ref, NULL);
9039 SvROK_off(ref);
9040 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
04ca4930 9041 assigned to as BEGIN {$a = \"Foo"} will fail. */
e15faf7d
NC
9042 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9043 SvREFCNT_dec(target);
840a7b70 9044 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
e15faf7d 9045 sv_2mortal(target); /* Schedule for freeing later */
ed6116ce 9046}
8990e307 9047
840a7b70 9048/*
645c22ef
DM
9049=for apidoc sv_untaint
9050
9051Untaint an SV. Use C<SvTAINTED_off> instead.
9052=cut
9053*/
9054
bbce6d69 9055void
89e38212 9056Perl_sv_untaint(pTHX_ SV *const sv)
bbce6d69 9057{
7918f24d
NC
9058 PERL_ARGS_ASSERT_SV_UNTAINT;
9059
13f57bf8 9060 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
b64e5050 9061 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
36477c24 9062 if (mg)
565764a8 9063 mg->mg_len &= ~1;
36477c24 9064 }
bbce6d69 9065}
9066
645c22ef
DM
9067/*
9068=for apidoc sv_tainted
9069
9070Test an SV for taintedness. Use C<SvTAINTED> instead.
9071=cut
9072*/
9073
bbce6d69 9074bool
89e38212 9075Perl_sv_tainted(pTHX_ SV *const sv)
bbce6d69 9076{
7918f24d
NC
9077 PERL_ARGS_ASSERT_SV_TAINTED;
9078
13f57bf8 9079 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
823a54a3 9080 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
2ddb8a4f 9081 if (mg && (mg->mg_len & 1) )
36477c24 9082 return TRUE;
9083 }
9084 return FALSE;
bbce6d69 9085}
9086
09540bc3
JH
9087/*
9088=for apidoc sv_setpviv
9089
9090Copies an integer into the given SV, also updating its string value.
9091Does not handle 'set' magic. See C<sv_setpviv_mg>.
9092
9093=cut
9094*/
9095
9096void
89e38212 9097Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
09540bc3
JH
9098{
9099 char buf[TYPE_CHARS(UV)];
9100 char *ebuf;
b64e5050 9101 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
09540bc3 9102
7918f24d
NC
9103 PERL_ARGS_ASSERT_SV_SETPVIV;
9104
09540bc3
JH
9105 sv_setpvn(sv, ptr, ebuf - ptr);
9106}
9107
9108/*
9109=for apidoc sv_setpviv_mg
9110
9111Like C<sv_setpviv>, but also handles 'set' magic.
9112
9113=cut
9114*/
9115
9116void
89e38212 9117Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
09540bc3 9118{
7918f24d
NC
9119 PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9120
df7eb254 9121 sv_setpviv(sv, iv);
09540bc3
JH
9122 SvSETMAGIC(sv);
9123}
9124
cea2e8a9 9125#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
9126
9127/* pTHX_ magic can't cope with varargs, so this is a no-context
9128 * version of the main function, (which may itself be aliased to us).
9129 * Don't access this version directly.
9130 */
9131
cea2e8a9 9132void
89e38212 9133Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9134{
9135 dTHX;
9136 va_list args;
7918f24d
NC
9137
9138 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9139
cea2e8a9 9140 va_start(args, pat);
c5be433b 9141 sv_vsetpvf(sv, pat, &args);
cea2e8a9
GS
9142 va_end(args);
9143}
9144
645c22ef
DM
9145/* pTHX_ magic can't cope with varargs, so this is a no-context
9146 * version of the main function, (which may itself be aliased to us).
9147 * Don't access this version directly.
9148 */
cea2e8a9
GS
9149
9150void
89e38212 9151Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9152{
9153 dTHX;
9154 va_list args;
7918f24d
NC
9155
9156 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9157
cea2e8a9 9158 va_start(args, pat);
c5be433b 9159 sv_vsetpvf_mg(sv, pat, &args);
cea2e8a9 9160 va_end(args);
cea2e8a9
GS
9161}
9162#endif
9163
954c1994
GS
9164/*
9165=for apidoc sv_setpvf
9166
bffc3d17
SH
9167Works like C<sv_catpvf> but copies the text into the SV instead of
9168appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
954c1994
GS
9169
9170=cut
9171*/
9172
46fc3d4c 9173void
89e38212 9174Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 9175{
9176 va_list args;
7918f24d
NC
9177
9178 PERL_ARGS_ASSERT_SV_SETPVF;
9179
46fc3d4c 9180 va_start(args, pat);
c5be433b 9181 sv_vsetpvf(sv, pat, &args);
46fc3d4c 9182 va_end(args);
9183}
9184
bffc3d17
SH
9185/*
9186=for apidoc sv_vsetpvf
9187
9188Works like C<sv_vcatpvf> but copies the text into the SV instead of
9189appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
9190
9191Usually used via its frontend C<sv_setpvf>.
9192
9193=cut
9194*/
645c22ef 9195
c5be433b 9196void
89e38212 9197Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9198{
7918f24d
NC
9199 PERL_ARGS_ASSERT_SV_VSETPVF;
9200
4608196e 9201 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b 9202}
ef50df4b 9203
954c1994
GS
9204/*
9205=for apidoc sv_setpvf_mg
9206
9207Like C<sv_setpvf>, but also handles 'set' magic.
9208
9209=cut
9210*/
9211
ef50df4b 9212void
89e38212 9213Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
9214{
9215 va_list args;
7918f24d
NC
9216
9217 PERL_ARGS_ASSERT_SV_SETPVF_MG;
9218
ef50df4b 9219 va_start(args, pat);
c5be433b 9220 sv_vsetpvf_mg(sv, pat, &args);
ef50df4b 9221 va_end(args);
c5be433b
GS
9222}
9223
bffc3d17
SH
9224/*
9225=for apidoc sv_vsetpvf_mg
9226
9227Like C<sv_vsetpvf>, but also handles 'set' magic.
9228
9229Usually used via its frontend C<sv_setpvf_mg>.
9230
9231=cut
9232*/
645c22ef 9233
c5be433b 9234void
89e38212 9235Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9236{
7918f24d
NC
9237 PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9238
4608196e 9239 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9240 SvSETMAGIC(sv);
9241}
9242
cea2e8a9 9243#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
9244
9245/* pTHX_ magic can't cope with varargs, so this is a no-context
9246 * version of the main function, (which may itself be aliased to us).
9247 * Don't access this version directly.
9248 */
9249
cea2e8a9 9250void
89e38212 9251Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9252{
9253 dTHX;
9254 va_list args;
7918f24d
NC
9255
9256 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9257
cea2e8a9 9258 va_start(args, pat);
c5be433b 9259 sv_vcatpvf(sv, pat, &args);
cea2e8a9
GS
9260 va_end(args);
9261}
9262
645c22ef
DM
9263/* pTHX_ magic can't cope with varargs, so this is a no-context
9264 * version of the main function, (which may itself be aliased to us).
9265 * Don't access this version directly.
9266 */
9267
cea2e8a9 9268void
89e38212 9269Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9270{
9271 dTHX;
9272 va_list args;
7918f24d
NC
9273
9274 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9275
cea2e8a9 9276 va_start(args, pat);
c5be433b 9277 sv_vcatpvf_mg(sv, pat, &args);
cea2e8a9 9278 va_end(args);
cea2e8a9
GS
9279}
9280#endif
9281
954c1994
GS
9282/*
9283=for apidoc sv_catpvf
9284
d5ce4a7c
GA
9285Processes its arguments like C<sprintf> and appends the formatted
9286output to an SV. If the appended data contains "wide" characters
9287(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9288and characters >255 formatted with %c), the original SV might get
bffc3d17 9289upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
cdd94ca7
NC
9290C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9291valid UTF-8; if the original SV was bytes, the pattern should be too.
954c1994 9292
d5ce4a7c 9293=cut */
954c1994 9294
46fc3d4c 9295void
66ceb532 9296Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 9297{
9298 va_list args;
7918f24d
NC
9299
9300 PERL_ARGS_ASSERT_SV_CATPVF;
9301
46fc3d4c 9302 va_start(args, pat);
c5be433b 9303 sv_vcatpvf(sv, pat, &args);
46fc3d4c 9304 va_end(args);
9305}
9306
bffc3d17
SH
9307/*
9308=for apidoc sv_vcatpvf
9309
9310Processes its arguments like C<vsprintf> and appends the formatted output
9311to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
9312
9313Usually used via its frontend C<sv_catpvf>.
9314
9315=cut
9316*/
645c22ef 9317
ef50df4b 9318void
66ceb532 9319Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9320{
7918f24d
NC
9321 PERL_ARGS_ASSERT_SV_VCATPVF;
9322
4608196e 9323 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
9324}
9325
954c1994
GS
9326/*
9327=for apidoc sv_catpvf_mg
9328
9329Like C<sv_catpvf>, but also handles 'set' magic.
9330
9331=cut
9332*/
9333
c5be433b 9334void
66ceb532 9335Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
9336{
9337 va_list args;
7918f24d
NC
9338
9339 PERL_ARGS_ASSERT_SV_CATPVF_MG;
9340
ef50df4b 9341 va_start(args, pat);
c5be433b 9342 sv_vcatpvf_mg(sv, pat, &args);
ef50df4b 9343 va_end(args);
c5be433b
GS
9344}
9345
bffc3d17
SH
9346/*
9347=for apidoc sv_vcatpvf_mg
9348
9349Like C<sv_vcatpvf>, but also handles 'set' magic.
9350
9351Usually used via its frontend C<sv_catpvf_mg>.
9352
9353=cut
9354*/
645c22ef 9355
c5be433b 9356void
66ceb532 9357Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9358{
7918f24d
NC
9359 PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9360
4608196e 9361 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9362 SvSETMAGIC(sv);
9363}
9364
954c1994
GS
9365/*
9366=for apidoc sv_vsetpvfn
9367
bffc3d17 9368Works like C<sv_vcatpvfn> but copies the text into the SV instead of
954c1994
GS
9369appending it.
9370
bffc3d17 9371Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
645c22ef 9372
954c1994
GS
9373=cut
9374*/
9375
46fc3d4c 9376void
66ceb532
SS
9377Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9378 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9379{
7918f24d
NC
9380 PERL_ARGS_ASSERT_SV_VSETPVFN;
9381
76f68e9b 9382 sv_setpvs(sv, "");
7d5ea4e7 9383 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
46fc3d4c 9384}
9385
7baa4690
HS
9386
9387/*
9388 * Warn of missing argument to sprintf, and then return a defined value
9389 * to avoid inappropriate "use of uninit" warnings [perl #71000].
9390 */
9391#define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9392STATIC SV*
81ae3cde 9393S_vcatpvfn_missing_argument(pTHX) {
7baa4690
HS
9394 if (ckWARN(WARN_MISSING)) {
9395 Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9396 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9397 }
9398 return &PL_sv_no;
9399}
9400
9401
2d00ba3b 9402STATIC I32
66ceb532 9403S_expect_number(pTHX_ char **const pattern)
211dfcf1 9404{
97aff369 9405 dVAR;
211dfcf1 9406 I32 var = 0;
7918f24d
NC
9407
9408 PERL_ARGS_ASSERT_EXPECT_NUMBER;
9409
211dfcf1
HS
9410 switch (**pattern) {
9411 case '1': case '2': case '3':
9412 case '4': case '5': case '6':
9413 case '7': case '8': case '9':
2fba7546
GA
9414 var = *(*pattern)++ - '0';
9415 while (isDIGIT(**pattern)) {
5f66b61c 9416 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
2fba7546 9417 if (tmp < var)
94bbb3f4 9418 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
2fba7546
GA
9419 var = tmp;
9420 }
211dfcf1
HS
9421 }
9422 return var;
9423}
211dfcf1 9424
c445ea15 9425STATIC char *
66ceb532 9426S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
4151a5fe 9427{
a3b680e6 9428 const int neg = nv < 0;
4151a5fe 9429 UV uv;
4151a5fe 9430
7918f24d
NC
9431 PERL_ARGS_ASSERT_F0CONVERT;
9432
4151a5fe
IZ
9433 if (neg)
9434 nv = -nv;
9435 if (nv < UV_MAX) {
b464bac0 9436 char *p = endbuf;
4151a5fe 9437 nv += 0.5;
028f8eaa 9438 uv = (UV)nv;
4151a5fe
IZ
9439 if (uv & 1 && uv == nv)
9440 uv--; /* Round to even */
9441 do {
a3b680e6 9442 const unsigned dig = uv % 10;
4151a5fe
IZ
9443 *--p = '0' + dig;
9444 } while (uv /= 10);
9445 if (neg)
9446 *--p = '-';
9447 *len = endbuf - p;
9448 return p;
9449 }
bd61b366 9450 return NULL;
4151a5fe
IZ
9451}
9452
9453
954c1994
GS
9454/*
9455=for apidoc sv_vcatpvfn
9456
9457Processes its arguments like C<vsprintf> and appends the formatted output
9458to an SV. Uses an array of SVs if the C style variable argument list is
9459missing (NULL). When running with taint checks enabled, indicates via
9460C<maybe_tainted> if results are untrustworthy (often due to the use of
9461locales).
9462
bffc3d17 9463Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
645c22ef 9464
954c1994
GS
9465=cut
9466*/
9467
8896765a
RB
9468
9469#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
9470 vecstr = (U8*)SvPV_const(vecsv,veclen);\
9471 vec_utf8 = DO_UTF8(vecsv);
9472
1ef29b0e
RGS
9473/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9474
46fc3d4c 9475void
66ceb532
SS
9476Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9477 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9478{
97aff369 9479 dVAR;
46fc3d4c 9480 char *p;
9481 char *q;
a3b680e6 9482 const char *patend;
fc36a67e 9483 STRLEN origlen;
46fc3d4c 9484 I32 svix = 0;
27da23d5 9485 static const char nullstr[] = "(null)";
a0714e2c 9486 SV *argsv = NULL;
b464bac0
AL
9487 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
9488 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
a0714e2c 9489 SV *nsv = NULL;
4151a5fe
IZ
9490 /* Times 4: a decimal digit takes more than 3 binary digits.
9491 * NV_DIG: mantissa takes than many decimal digits.
9492 * Plus 32: Playing safe. */
9493 char ebuf[IV_DIG * 4 + NV_DIG + 32];
9494 /* large enough for "%#.#f" --chip */
9495 /* what about long double NVs? --jhi */
db79b45b 9496
7918f24d 9497 PERL_ARGS_ASSERT_SV_VCATPVFN;
53c1dcc0
AL
9498 PERL_UNUSED_ARG(maybe_tainted);
9499
46fc3d4c 9500 /* no matter what, this is a string now */
fc36a67e 9501 (void)SvPV_force(sv, origlen);
46fc3d4c 9502
8896765a 9503 /* special-case "", "%s", and "%-p" (SVf - see below) */
46fc3d4c 9504 if (patlen == 0)
9505 return;
0dbb1585 9506 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
2d03de9c
AL
9507 if (args) {
9508 const char * const s = va_arg(*args, char*);
9509 sv_catpv(sv, s ? s : nullstr);
9510 }
9511 else if (svix < svmax) {
9512 sv_catsv(sv, *svargs);
2d03de9c 9513 }
5b98cd54
VP
9514 else
9515 S_vcatpvfn_missing_argument(aTHX);
2d03de9c 9516 return;
0dbb1585 9517 }
8896765a
RB
9518 if (args && patlen == 3 && pat[0] == '%' &&
9519 pat[1] == '-' && pat[2] == 'p') {
daba3364 9520 argsv = MUTABLE_SV(va_arg(*args, void*));
8896765a 9521 sv_catsv(sv, argsv);
8896765a 9522 return;
46fc3d4c 9523 }
9524
1d917b39 9525#ifndef USE_LONG_DOUBLE
4151a5fe 9526 /* special-case "%.<number>[gf]" */
7af36d83 9527 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
4151a5fe
IZ
9528 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9529 unsigned digits = 0;
9530 const char *pp;
9531
9532 pp = pat + 2;
9533 while (*pp >= '0' && *pp <= '9')
9534 digits = 10 * digits + (*pp++ - '0');
95ea86d5
NC
9535 if (pp - pat == (int)patlen - 1 && svix < svmax) {
9536 const NV nv = SvNV(*svargs);
4151a5fe 9537 if (*pp == 'g') {
2873255c
NC
9538 /* Add check for digits != 0 because it seems that some
9539 gconverts are buggy in this case, and we don't yet have
9540 a Configure test for this. */
9541 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9542 /* 0, point, slack */
2e59c212 9543 Gconvert(nv, (int)digits, 0, ebuf);
4151a5fe
IZ
9544 sv_catpv(sv, ebuf);
9545 if (*ebuf) /* May return an empty string for digits==0 */
9546 return;
9547 }
9548 } else if (!digits) {
9549 STRLEN l;
9550
9551 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9552 sv_catpvn(sv, p, l);
9553 return;
9554 }
9555 }
9556 }
9557 }
1d917b39 9558#endif /* !USE_LONG_DOUBLE */
4151a5fe 9559
2cf2cfc6 9560 if (!args && svix < svmax && DO_UTF8(*svargs))
205f51d8 9561 has_utf8 = TRUE;
2cf2cfc6 9562
46fc3d4c 9563 patend = (char*)pat + patlen;
9564 for (p = (char*)pat; p < patend; p = q) {
9565 bool alt = FALSE;
9566 bool left = FALSE;
b22c7a20 9567 bool vectorize = FALSE;
211dfcf1 9568 bool vectorarg = FALSE;
2cf2cfc6 9569 bool vec_utf8 = FALSE;
46fc3d4c 9570 char fill = ' ';
9571 char plus = 0;
9572 char intsize = 0;
9573 STRLEN width = 0;
fc36a67e 9574 STRLEN zeros = 0;
46fc3d4c 9575 bool has_precis = FALSE;
9576 STRLEN precis = 0;
c445ea15 9577 const I32 osvix = svix;
2cf2cfc6 9578 bool is_utf8 = FALSE; /* is this item utf8? */
20f6aaab
AS
9579#ifdef HAS_LDBL_SPRINTF_BUG
9580 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8 9581 with sfio - Allen <allens@cpan.org> */
20f6aaab
AS
9582 bool fix_ldbl_sprintf_bug = FALSE;
9583#endif
205f51d8 9584
46fc3d4c 9585 char esignbuf[4];
89ebb4a3 9586 U8 utf8buf[UTF8_MAXBYTES+1];
46fc3d4c 9587 STRLEN esignlen = 0;
9588
bd61b366 9589 const char *eptr = NULL;
1d1ac7bc 9590 const char *fmtstart;
fc36a67e 9591 STRLEN elen = 0;
a0714e2c 9592 SV *vecsv = NULL;
4608196e 9593 const U8 *vecstr = NULL;
b22c7a20 9594 STRLEN veclen = 0;
934abaf1 9595 char c = 0;
46fc3d4c 9596 int i;
9c5ffd7c 9597 unsigned base = 0;
8c8eb53c
RB
9598 IV iv = 0;
9599 UV uv = 0;
9e5b023a
JH
9600 /* we need a long double target in case HAS_LONG_DOUBLE but
9601 not USE_LONG_DOUBLE
9602 */
35fff930 9603#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9e5b023a
JH
9604 long double nv;
9605#else
65202027 9606 NV nv;
9e5b023a 9607#endif
46fc3d4c 9608 STRLEN have;
9609 STRLEN need;
9610 STRLEN gap;
7af36d83 9611 const char *dotstr = ".";
b22c7a20 9612 STRLEN dotstrlen = 1;
211dfcf1 9613 I32 efix = 0; /* explicit format parameter index */
eb3fce90 9614 I32 ewix = 0; /* explicit width index */
211dfcf1
HS
9615 I32 epix = 0; /* explicit precision index */
9616 I32 evix = 0; /* explicit vector index */
eb3fce90 9617 bool asterisk = FALSE;
46fc3d4c 9618
211dfcf1 9619 /* echo everything up to the next format specification */
46fc3d4c 9620 for (q = p; q < patend && *q != '%'; ++q) ;
9621 if (q > p) {
db79b45b
JH
9622 if (has_utf8 && !pat_utf8)
9623 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9624 else
9625 sv_catpvn(sv, p, q - p);
46fc3d4c 9626 p = q;
9627 }
9628 if (q++ >= patend)
9629 break;
9630
1d1ac7bc
MHM
9631 fmtstart = q;
9632
211dfcf1
HS
9633/*
9634 We allow format specification elements in this order:
9635 \d+\$ explicit format parameter index
9636 [-+ 0#]+ flags
a472f209 9637 v|\*(\d+\$)?v vector with optional (optionally specified) arg
f3583277 9638 0 flag (as above): repeated to allow "v02"
211dfcf1
HS
9639 \d+|\*(\d+\$)? width using optional (optionally specified) arg
9640 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9641 [hlqLV] size
8896765a
RB
9642 [%bcdefginopsuxDFOUX] format (mandatory)
9643*/
9644
9645 if (args) {
9646/*
9647 As of perl5.9.3, printf format checking is on by default.
9648 Internally, perl uses %p formats to provide an escape to
9649 some extended formatting. This block deals with those
9650 extensions: if it does not match, (char*)q is reset and
9651 the normal format processing code is used.
9652
9653 Currently defined extensions are:
9654 %p include pointer address (standard)
9655 %-p (SVf) include an SV (previously %_)
9656 %-<num>p include an SV with precision <num>
8896765a
RB
9657 %<num>p reserved for future extensions
9658
9659 Robin Barker 2005-07-14
f46d31f2
RB
9660
9661 %1p (VDf) removed. RMB 2007-10-19
211dfcf1 9662*/
8896765a
RB
9663 char* r = q;
9664 bool sv = FALSE;
9665 STRLEN n = 0;
9666 if (*q == '-')
9667 sv = *q++;
c445ea15 9668 n = expect_number(&q);
8896765a
RB
9669 if (*q++ == 'p') {
9670 if (sv) { /* SVf */
9671 if (n) {
9672 precis = n;
9673 has_precis = TRUE;
9674 }
daba3364 9675 argsv = MUTABLE_SV(va_arg(*args, void*));
4ea561bc 9676 eptr = SvPV_const(argsv, elen);
8896765a
RB
9677 if (DO_UTF8(argsv))
9678 is_utf8 = TRUE;
9679 goto string;
9680 }
8896765a 9681 else if (n) {
9b387841
NC
9682 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
9683 "internal %%<num>p might conflict with future printf extensions");
8896765a
RB
9684 }
9685 }
9686 q = r;
9687 }
9688
c445ea15 9689 if ( (width = expect_number(&q)) ) {
211dfcf1
HS
9690 if (*q == '$') {
9691 ++q;
9692 efix = width;
9693 } else {
9694 goto gotwidth;
9695 }
9696 }
9697
fc36a67e 9698 /* FLAGS */
9699
46fc3d4c 9700 while (*q) {
9701 switch (*q) {
9702 case ' ':
9703 case '+':
9911cee9
TS
9704 if (plus == '+' && *q == ' ') /* '+' over ' ' */
9705 q++;
9706 else
9707 plus = *q++;
46fc3d4c 9708 continue;
9709
9710 case '-':
9711 left = TRUE;
9712 q++;
9713 continue;
9714
9715 case '0':
9716 fill = *q++;
9717 continue;
9718
9719 case '#':
9720 alt = TRUE;
9721 q++;
9722 continue;
9723
fc36a67e 9724 default:
9725 break;
9726 }
9727 break;
9728 }
46fc3d4c 9729
211dfcf1 9730 tryasterisk:
eb3fce90 9731 if (*q == '*') {
211dfcf1 9732 q++;
c445ea15 9733 if ( (ewix = expect_number(&q)) )
211dfcf1
HS
9734 if (*q++ != '$')
9735 goto unknown;
eb3fce90 9736 asterisk = TRUE;
211dfcf1
HS
9737 }
9738 if (*q == 'v') {
eb3fce90 9739 q++;
211dfcf1
HS
9740 if (vectorize)
9741 goto unknown;
9cbac4c7 9742 if ((vectorarg = asterisk)) {
211dfcf1
HS
9743 evix = ewix;
9744 ewix = 0;
9745 asterisk = FALSE;
9746 }
9747 vectorize = TRUE;
9748 goto tryasterisk;
eb3fce90
JH
9749 }
9750
211dfcf1 9751 if (!asterisk)
858a90f9 9752 {
7a5fa8a2 9753 if( *q == '0' )
f3583277 9754 fill = *q++;
c445ea15 9755 width = expect_number(&q);
858a90f9 9756 }
211dfcf1
HS
9757
9758 if (vectorize) {
9759 if (vectorarg) {
9760 if (args)
9761 vecsv = va_arg(*args, SV*);
7ad96abb
NC
9762 else if (evix) {
9763 vecsv = (evix > 0 && evix <= svmax)
81ae3cde 9764 ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
7ad96abb 9765 } else {
7baa4690 9766 vecsv = svix < svmax
81ae3cde 9767 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
7ad96abb 9768 }
245d4a47 9769 dotstr = SvPV_const(vecsv, dotstrlen);
640283f5
NC
9770 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
9771 bad with tied or overloaded values that return UTF8. */
211dfcf1 9772 if (DO_UTF8(vecsv))
2cf2cfc6 9773 is_utf8 = TRUE;
640283f5
NC
9774 else if (has_utf8) {
9775 vecsv = sv_mortalcopy(vecsv);
9776 sv_utf8_upgrade(vecsv);
9777 dotstr = SvPV_const(vecsv, dotstrlen);
9778 is_utf8 = TRUE;
9779 }
211dfcf1
HS
9780 }
9781 if (args) {
8896765a 9782 VECTORIZE_ARGS
eb3fce90 9783 }
7ad96abb 9784 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
211dfcf1 9785 vecsv = svargs[efix ? efix-1 : svix++];
245d4a47 9786 vecstr = (U8*)SvPV_const(vecsv,veclen);
2cf2cfc6 9787 vec_utf8 = DO_UTF8(vecsv);
96b8f7ce
JP
9788
9789 /* if this is a version object, we need to convert
9790 * back into v-string notation and then let the
9791 * vectorize happen normally
d7aa5382 9792 */
96b8f7ce
JP
9793 if (sv_derived_from(vecsv, "version")) {
9794 char *version = savesvpv(vecsv);
85fbaab2 9795 if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
34ba6322
SP
9796 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9797 "vector argument not supported with alpha versions");
9798 goto unknown;
9799 }
96b8f7ce 9800 vecsv = sv_newmortal();
65b06e02 9801 scan_vstring(version, version + veclen, vecsv);
96b8f7ce
JP
9802 vecstr = (U8*)SvPV_const(vecsv, veclen);
9803 vec_utf8 = DO_UTF8(vecsv);
9804 Safefree(version);
d7aa5382 9805 }
211dfcf1
HS
9806 }
9807 else {
9808 vecstr = (U8*)"";
9809 veclen = 0;
9810 }
eb3fce90 9811 }
fc36a67e 9812
eb3fce90 9813 if (asterisk) {
fc36a67e 9814 if (args)
9815 i = va_arg(*args, int);
9816 else
eb3fce90
JH
9817 i = (ewix ? ewix <= svmax : svix < svmax) ?
9818 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
fc36a67e 9819 left |= (i < 0);
9820 width = (i < 0) ? -i : i;
fc36a67e 9821 }
211dfcf1 9822 gotwidth:
fc36a67e 9823
9824 /* PRECISION */
46fc3d4c 9825
fc36a67e 9826 if (*q == '.') {
9827 q++;
9828 if (*q == '*') {
211dfcf1 9829 q++;
c445ea15 9830 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
7b8dd722
HS
9831 goto unknown;
9832 /* XXX: todo, support specified precision parameter */
9833 if (epix)
211dfcf1 9834 goto unknown;
46fc3d4c 9835 if (args)
9836 i = va_arg(*args, int);
9837 else
eb3fce90
JH
9838 i = (ewix ? ewix <= svmax : svix < svmax)
9839 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9911cee9
TS
9840 precis = i;
9841 has_precis = !(i < 0);
fc36a67e 9842 }
9843 else {
9844 precis = 0;
9845 while (isDIGIT(*q))
9846 precis = precis * 10 + (*q++ - '0');
9911cee9 9847 has_precis = TRUE;
fc36a67e 9848 }
fc36a67e 9849 }
46fc3d4c 9850
fc36a67e 9851 /* SIZE */
46fc3d4c 9852
fc36a67e 9853 switch (*q) {
c623ac67
GS
9854#ifdef WIN32
9855 case 'I': /* Ix, I32x, and I64x */
9856# ifdef WIN64
9857 if (q[1] == '6' && q[2] == '4') {
9858 q += 3;
9859 intsize = 'q';
9860 break;
9861 }
9862# endif
9863 if (q[1] == '3' && q[2] == '2') {
9864 q += 3;
9865 break;
9866 }
9867# ifdef WIN64
9868 intsize = 'q';
9869# endif
9870 q++;
9871 break;
9872#endif
9e5b023a 9873#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
6f9bb7fd 9874 case 'L': /* Ld */
5f66b61c 9875 /*FALLTHROUGH*/
e5c81feb 9876#ifdef HAS_QUAD
6f9bb7fd 9877 case 'q': /* qd */
9e5b023a 9878#endif
6f9bb7fd
GS
9879 intsize = 'q';
9880 q++;
9881 break;
9882#endif
fc36a67e 9883 case 'l':
9e5b023a 9884#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
205f51d8 9885 if (*(q + 1) == 'l') { /* lld, llf */
fc36a67e 9886 intsize = 'q';
9887 q += 2;
46fc3d4c 9888 break;
cf2093f6 9889 }
fc36a67e 9890#endif
5f66b61c 9891 /*FALLTHROUGH*/
fc36a67e 9892 case 'h':
5f66b61c 9893 /*FALLTHROUGH*/
fc36a67e 9894 case 'V':
9895 intsize = *q++;
46fc3d4c 9896 break;
9897 }
9898
fc36a67e 9899 /* CONVERSION */
9900
211dfcf1
HS
9901 if (*q == '%') {
9902 eptr = q++;
9903 elen = 1;
26372e71
GA
9904 if (vectorize) {
9905 c = '%';
9906 goto unknown;
9907 }
211dfcf1
HS
9908 goto string;
9909 }
9910
26372e71 9911 if (!vectorize && !args) {
86c51f8b
NC
9912 if (efix) {
9913 const I32 i = efix-1;
7baa4690 9914 argsv = (i >= 0 && i < svmax)
81ae3cde 9915 ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
86c51f8b
NC
9916 } else {
9917 argsv = (svix >= 0 && svix < svmax)
81ae3cde 9918 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
86c51f8b 9919 }
863811b2 9920 }
211dfcf1 9921
46fc3d4c 9922 switch (c = *q++) {
9923
9924 /* STRINGS */
9925
46fc3d4c 9926 case 'c':
26372e71
GA
9927 if (vectorize)
9928 goto unknown;
4ea561bc 9929 uv = (args) ? va_arg(*args, int) : SvIV(argsv);
1bd104fb
JH
9930 if ((uv > 255 ||
9931 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
0064a8a9 9932 && !IN_BYTES) {
dfe13c55 9933 eptr = (char*)utf8buf;
9041c2e3 9934 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
2cf2cfc6 9935 is_utf8 = TRUE;
7e2040f0
GS
9936 }
9937 else {
9938 c = (char)uv;
9939 eptr = &c;
9940 elen = 1;
a0ed51b3 9941 }
46fc3d4c 9942 goto string;
9943
46fc3d4c 9944 case 's':
26372e71
GA
9945 if (vectorize)
9946 goto unknown;
9947 if (args) {
fc36a67e 9948 eptr = va_arg(*args, char*);
c635e13b 9949 if (eptr)
9950 elen = strlen(eptr);
9951 else {
27da23d5 9952 eptr = (char *)nullstr;
c635e13b 9953 elen = sizeof nullstr - 1;
9954 }
46fc3d4c 9955 }
211dfcf1 9956 else {
4ea561bc 9957 eptr = SvPV_const(argsv, elen);
7e2040f0 9958 if (DO_UTF8(argsv)) {
c494f1f4 9959 STRLEN old_precis = precis;
a0ed51b3 9960 if (has_precis && precis < elen) {
c494f1f4 9961 STRLEN ulen = sv_len_utf8(argsv);
9ef5ed94 9962 I32 p = precis > ulen ? ulen : precis;
7e2040f0 9963 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
a0ed51b3
LW
9964 precis = p;
9965 }
9966 if (width) { /* fudge width (can't fudge elen) */
59b61096
AV
9967 if (has_precis && precis < elen)
9968 width += precis - old_precis;
9969 else
9970 width += elen - sv_len_utf8(argsv);
a0ed51b3 9971 }
2cf2cfc6 9972 is_utf8 = TRUE;
a0ed51b3
LW
9973 }
9974 }
fc36a67e 9975
46fc3d4c 9976 string:
9ef5ed94 9977 if (has_precis && precis < elen)
46fc3d4c 9978 elen = precis;
9979 break;
9980
9981 /* INTEGERS */
9982
fc36a67e 9983 case 'p':
be75b157 9984 if (alt || vectorize)
c2e66d9e 9985 goto unknown;
211dfcf1 9986 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
fc36a67e 9987 base = 16;
9988 goto integer;
9989
46fc3d4c 9990 case 'D':
29fe7a80 9991#ifdef IV_IS_QUAD
22f3ae8c 9992 intsize = 'q';
29fe7a80 9993#else
46fc3d4c 9994 intsize = 'l';
29fe7a80 9995#endif
5f66b61c 9996 /*FALLTHROUGH*/
46fc3d4c 9997 case 'd':
9998 case 'i':
8896765a
RB
9999#if vdNUMBER
10000 format_vd:
10001#endif
b22c7a20 10002 if (vectorize) {
ba210ebe 10003 STRLEN ulen;
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 {
e83d50c9 10010 uv = *vecstr;
b22c7a20
GS
10011 ulen = 1;
10012 }
10013 vecstr += ulen;
10014 veclen -= ulen;
e83d50c9
JP
10015 if (plus)
10016 esignbuf[esignlen++] = plus;
b22c7a20
GS
10017 }
10018 else if (args) {
46fc3d4c 10019 switch (intsize) {
10020 case 'h': iv = (short)va_arg(*args, int); break;
46fc3d4c 10021 case 'l': iv = va_arg(*args, long); break;
fc36a67e 10022 case 'V': iv = va_arg(*args, IV); break;
b10c0dba 10023 default: iv = va_arg(*args, int); break;
53f65a9e 10024 case 'q':
cf2093f6 10025#ifdef HAS_QUAD
53f65a9e
HS
10026 iv = va_arg(*args, Quad_t); break;
10027#else
10028 goto unknown;
cf2093f6 10029#endif
46fc3d4c 10030 }
10031 }
10032 else {
4ea561bc 10033 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
46fc3d4c 10034 switch (intsize) {
b10c0dba
MHM
10035 case 'h': iv = (short)tiv; break;
10036 case 'l': iv = (long)tiv; break;
10037 case 'V':
10038 default: iv = tiv; break;
53f65a9e 10039 case 'q':
cf2093f6 10040#ifdef HAS_QUAD
53f65a9e
HS
10041 iv = (Quad_t)tiv; break;
10042#else
10043 goto unknown;
cf2093f6 10044#endif
46fc3d4c 10045 }
10046 }
e83d50c9
JP
10047 if ( !vectorize ) /* we already set uv above */
10048 {
10049 if (iv >= 0) {
10050 uv = iv;
10051 if (plus)
10052 esignbuf[esignlen++] = plus;
10053 }
10054 else {
10055 uv = -iv;
10056 esignbuf[esignlen++] = '-';
10057 }
46fc3d4c 10058 }
10059 base = 10;
10060 goto integer;
10061
fc36a67e 10062 case 'U':
29fe7a80 10063#ifdef IV_IS_QUAD
22f3ae8c 10064 intsize = 'q';
29fe7a80 10065#else
fc36a67e 10066 intsize = 'l';
29fe7a80 10067#endif
5f66b61c 10068 /*FALLTHROUGH*/
fc36a67e 10069 case 'u':
10070 base = 10;
10071 goto uns_integer;
10072
7ff06cc7 10073 case 'B':
4f19785b
WSI
10074 case 'b':
10075 base = 2;
10076 goto uns_integer;
10077
46fc3d4c 10078 case 'O':
29fe7a80 10079#ifdef IV_IS_QUAD
22f3ae8c 10080 intsize = 'q';
29fe7a80 10081#else
46fc3d4c 10082 intsize = 'l';
29fe7a80 10083#endif
5f66b61c 10084 /*FALLTHROUGH*/
46fc3d4c 10085 case 'o':
10086 base = 8;
10087 goto uns_integer;
10088
10089 case 'X':
46fc3d4c 10090 case 'x':
10091 base = 16;
46fc3d4c 10092
10093 uns_integer:
b22c7a20 10094 if (vectorize) {
ba210ebe 10095 STRLEN ulen;
b22c7a20 10096 vector:
211dfcf1
HS
10097 if (!veclen)
10098 continue;
2cf2cfc6
A
10099 if (vec_utf8)
10100 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10101 UTF8_ALLOW_ANYUV);
b22c7a20 10102 else {
a05b299f 10103 uv = *vecstr;
b22c7a20
GS
10104 ulen = 1;
10105 }
10106 vecstr += ulen;
10107 veclen -= ulen;
10108 }
10109 else if (args) {
46fc3d4c 10110 switch (intsize) {
10111 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
46fc3d4c 10112 case 'l': uv = va_arg(*args, unsigned long); break;
fc36a67e 10113 case 'V': uv = va_arg(*args, UV); break;
b10c0dba 10114 default: uv = va_arg(*args, unsigned); break;
53f65a9e 10115 case 'q':
cf2093f6 10116#ifdef HAS_QUAD
53f65a9e
HS
10117 uv = va_arg(*args, Uquad_t); break;
10118#else
10119 goto unknown;
cf2093f6 10120#endif
46fc3d4c 10121 }
10122 }
10123 else {
4ea561bc 10124 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
46fc3d4c 10125 switch (intsize) {
b10c0dba
MHM
10126 case 'h': uv = (unsigned short)tuv; break;
10127 case 'l': uv = (unsigned long)tuv; break;
10128 case 'V':
10129 default: uv = tuv; break;
53f65a9e 10130 case 'q':
cf2093f6 10131#ifdef HAS_QUAD
53f65a9e
HS
10132 uv = (Uquad_t)tuv; break;
10133#else
10134 goto unknown;
cf2093f6 10135#endif
46fc3d4c 10136 }
10137 }
10138
10139 integer:
4d84ee25
NC
10140 {
10141 char *ptr = ebuf + sizeof ebuf;
1387f30c
DD
10142 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10143 zeros = 0;
10144
4d84ee25
NC
10145 switch (base) {
10146 unsigned dig;
10147 case 16:
14eb61ab 10148 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
4d84ee25
NC
10149 do {
10150 dig = uv & 15;
10151 *--ptr = p[dig];
10152 } while (uv >>= 4);
1387f30c 10153 if (tempalt) {
4d84ee25
NC
10154 esignbuf[esignlen++] = '0';
10155 esignbuf[esignlen++] = c; /* 'x' or 'X' */
10156 }
10157 break;
10158 case 8:
10159 do {
10160 dig = uv & 7;
10161 *--ptr = '0' + dig;
10162 } while (uv >>= 3);
10163 if (alt && *ptr != '0')
10164 *--ptr = '0';
10165 break;
10166 case 2:
10167 do {
10168 dig = uv & 1;
10169 *--ptr = '0' + dig;
10170 } while (uv >>= 1);
1387f30c 10171 if (tempalt) {
4d84ee25 10172 esignbuf[esignlen++] = '0';
7ff06cc7 10173 esignbuf[esignlen++] = c;
4d84ee25
NC
10174 }
10175 break;
10176 default: /* it had better be ten or less */
10177 do {
10178 dig = uv % base;
10179 *--ptr = '0' + dig;
10180 } while (uv /= base);
10181 break;
46fc3d4c 10182 }
4d84ee25
NC
10183 elen = (ebuf + sizeof ebuf) - ptr;
10184 eptr = ptr;
10185 if (has_precis) {
10186 if (precis > elen)
10187 zeros = precis - elen;
e6bb52fd
TS
10188 else if (precis == 0 && elen == 1 && *eptr == '0'
10189 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
4d84ee25 10190 elen = 0;
9911cee9
TS
10191
10192 /* a precision nullifies the 0 flag. */
10193 if (fill == '0')
10194 fill = ' ';
eda88b6d 10195 }
c10ed8b9 10196 }
46fc3d4c 10197 break;
10198
10199 /* FLOATING POINT */
10200
fc36a67e 10201 case 'F':
10202 c = 'f'; /* maybe %F isn't supported here */
5f66b61c 10203 /*FALLTHROUGH*/
46fc3d4c 10204 case 'e': case 'E':
fc36a67e 10205 case 'f':
46fc3d4c 10206 case 'g': case 'G':
26372e71
GA
10207 if (vectorize)
10208 goto unknown;
46fc3d4c 10209
10210 /* This is evil, but floating point is even more evil */
10211
9e5b023a
JH
10212 /* for SV-style calling, we can only get NV
10213 for C-style calling, we assume %f is double;
10214 for simplicity we allow any of %Lf, %llf, %qf for long double
10215 */
10216 switch (intsize) {
10217 case 'V':
10218#if defined(USE_LONG_DOUBLE)
10219 intsize = 'q';
10220#endif
10221 break;
8a2e3f14 10222/* [perl #20339] - we should accept and ignore %lf rather than die */
00e17364 10223 case 'l':
5f66b61c 10224 /*FALLTHROUGH*/
9e5b023a
JH
10225 default:
10226#if defined(USE_LONG_DOUBLE)
10227 intsize = args ? 0 : 'q';
10228#endif
10229 break;
10230 case 'q':
10231#if defined(HAS_LONG_DOUBLE)
10232 break;
10233#else
5f66b61c 10234 /*FALLTHROUGH*/
9e5b023a
JH
10235#endif
10236 case 'h':
9e5b023a
JH
10237 goto unknown;
10238 }
10239
10240 /* now we need (long double) if intsize == 'q', else (double) */
26372e71 10241 nv = (args) ?
35fff930
JH
10242#if LONG_DOUBLESIZE > DOUBLESIZE
10243 intsize == 'q' ?
205f51d8
AS
10244 va_arg(*args, long double) :
10245 va_arg(*args, double)
35fff930 10246#else
205f51d8 10247 va_arg(*args, double)
35fff930 10248#endif
4ea561bc 10249 : SvNV(argsv);
fc36a67e 10250
10251 need = 0;
3952c29a
NC
10252 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10253 else. frexp() has some unspecified behaviour for those three */
10254 if (c != 'e' && c != 'E' && (nv * 0) == 0) {
fc36a67e 10255 i = PERL_INT_MIN;
9e5b023a
JH
10256 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10257 will cast our (long double) to (double) */
73b309ea 10258 (void)Perl_frexp(nv, &i);
fc36a67e 10259 if (i == PERL_INT_MIN)
cea2e8a9 10260 Perl_die(aTHX_ "panic: frexp");
c635e13b 10261 if (i > 0)
fc36a67e 10262 need = BIT_DIGITS(i);
10263 }
10264 need += has_precis ? precis : 6; /* known default */
20f6aaab 10265
fc36a67e 10266 if (need < width)
10267 need = width;
10268
20f6aaab
AS
10269#ifdef HAS_LDBL_SPRINTF_BUG
10270 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8
AS
10271 with sfio - Allen <allens@cpan.org> */
10272
10273# ifdef DBL_MAX
10274# define MY_DBL_MAX DBL_MAX
10275# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10276# if DOUBLESIZE >= 8
10277# define MY_DBL_MAX 1.7976931348623157E+308L
10278# else
10279# define MY_DBL_MAX 3.40282347E+38L
10280# endif
10281# endif
10282
10283# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10284# define MY_DBL_MAX_BUG 1L
20f6aaab 10285# else
205f51d8 10286# define MY_DBL_MAX_BUG MY_DBL_MAX
20f6aaab 10287# endif
20f6aaab 10288
205f51d8
AS
10289# ifdef DBL_MIN
10290# define MY_DBL_MIN DBL_MIN
10291# else /* XXX guessing! -Allen */
10292# if DOUBLESIZE >= 8
10293# define MY_DBL_MIN 2.2250738585072014E-308L
10294# else
10295# define MY_DBL_MIN 1.17549435E-38L
10296# endif
10297# endif
20f6aaab 10298
205f51d8
AS
10299 if ((intsize == 'q') && (c == 'f') &&
10300 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10301 (need < DBL_DIG)) {
10302 /* it's going to be short enough that
10303 * long double precision is not needed */
10304
10305 if ((nv <= 0L) && (nv >= -0L))
10306 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10307 else {
10308 /* would use Perl_fp_class as a double-check but not
10309 * functional on IRIX - see perl.h comments */
10310
10311 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10312 /* It's within the range that a double can represent */
10313#if defined(DBL_MAX) && !defined(DBL_MIN)
10314 if ((nv >= ((long double)1/DBL_MAX)) ||
10315 (nv <= (-(long double)1/DBL_MAX)))
20f6aaab 10316#endif
205f51d8 10317 fix_ldbl_sprintf_bug = TRUE;
20f6aaab 10318 }
205f51d8
AS
10319 }
10320 if (fix_ldbl_sprintf_bug == TRUE) {
10321 double temp;
10322
10323 intsize = 0;
10324 temp = (double)nv;
10325 nv = (NV)temp;
10326 }
20f6aaab 10327 }
205f51d8
AS
10328
10329# undef MY_DBL_MAX
10330# undef MY_DBL_MAX_BUG
10331# undef MY_DBL_MIN
10332
20f6aaab
AS
10333#endif /* HAS_LDBL_SPRINTF_BUG */
10334
46fc3d4c 10335 need += 20; /* fudge factor */
80252599
GS
10336 if (PL_efloatsize < need) {
10337 Safefree(PL_efloatbuf);
10338 PL_efloatsize = need + 20; /* more fudge */
a02a5408 10339 Newx(PL_efloatbuf, PL_efloatsize, char);
7d5ea4e7 10340 PL_efloatbuf[0] = '\0';
46fc3d4c 10341 }
10342
4151a5fe
IZ
10343 if ( !(width || left || plus || alt) && fill != '0'
10344 && has_precis && intsize != 'q' ) { /* Shortcuts */
2873255c
NC
10345 /* See earlier comment about buggy Gconvert when digits,
10346 aka precis is 0 */
10347 if ( c == 'g' && precis) {
2e59c212 10348 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
4150c189
NC
10349 /* May return an empty string for digits==0 */
10350 if (*PL_efloatbuf) {
10351 elen = strlen(PL_efloatbuf);
4151a5fe 10352 goto float_converted;
4150c189 10353 }
4151a5fe
IZ
10354 } else if ( c == 'f' && !precis) {
10355 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10356 break;
10357 }
10358 }
4d84ee25
NC
10359 {
10360 char *ptr = ebuf + sizeof ebuf;
10361 *--ptr = '\0';
10362 *--ptr = c;
10363 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9e5b023a 10364#if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
4d84ee25
NC
10365 if (intsize == 'q') {
10366 /* Copy the one or more characters in a long double
10367 * format before the 'base' ([efgEFG]) character to
10368 * the format string. */
10369 static char const prifldbl[] = PERL_PRIfldbl;
10370 char const *p = prifldbl + sizeof(prifldbl) - 3;
10371 while (p >= prifldbl) { *--ptr = *p--; }
10372 }
65202027 10373#endif
4d84ee25
NC
10374 if (has_precis) {
10375 base = precis;
10376 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10377 *--ptr = '.';
10378 }
10379 if (width) {
10380 base = width;
10381 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10382 }
10383 if (fill == '0')
10384 *--ptr = fill;
10385 if (left)
10386 *--ptr = '-';
10387 if (plus)
10388 *--ptr = plus;
10389 if (alt)
10390 *--ptr = '#';
10391 *--ptr = '%';
10392
10393 /* No taint. Otherwise we are in the strange situation
10394 * where printf() taints but print($float) doesn't.
10395 * --jhi */
9e5b023a 10396#if defined(HAS_LONG_DOUBLE)
4150c189 10397 elen = ((intsize == 'q')
d9fad198
JH
10398 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10399 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9e5b023a 10400#else
4150c189 10401 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9e5b023a 10402#endif
4d84ee25 10403 }
4151a5fe 10404 float_converted:
80252599 10405 eptr = PL_efloatbuf;
46fc3d4c 10406 break;
10407
fc36a67e 10408 /* SPECIAL */
10409
10410 case 'n':
26372e71
GA
10411 if (vectorize)
10412 goto unknown;
fc36a67e 10413 i = SvCUR(sv) - origlen;
26372e71 10414 if (args) {
c635e13b 10415 switch (intsize) {
10416 case 'h': *(va_arg(*args, short*)) = i; break;
10417 default: *(va_arg(*args, int*)) = i; break;
10418 case 'l': *(va_arg(*args, long*)) = i; break;
10419 case 'V': *(va_arg(*args, IV*)) = i; break;
53f65a9e 10420 case 'q':
cf2093f6 10421#ifdef HAS_QUAD
53f65a9e
HS
10422 *(va_arg(*args, Quad_t*)) = i; break;
10423#else
10424 goto unknown;
cf2093f6 10425#endif
c635e13b 10426 }
fc36a67e 10427 }
9dd79c3f 10428 else
211dfcf1 10429 sv_setuv_mg(argsv, (UV)i);
fc36a67e 10430 continue; /* not "break" */
10431
10432 /* UNKNOWN */
10433
46fc3d4c 10434 default:
fc36a67e 10435 unknown:
041457d9
DM
10436 if (!args
10437 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10438 && ckWARN(WARN_PRINTF))
10439 {
c4420975 10440 SV * const msg = sv_newmortal();
35c1215d
NC
10441 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10442 (PL_op->op_type == OP_PRTF) ? "" : "s");
1d1ac7bc
MHM
10443 if (fmtstart < patend) {
10444 const char * const fmtend = q < patend ? q : patend;
10445 const char * f;
10446 sv_catpvs(msg, "\"%");
10447 for (f = fmtstart; f < fmtend; f++) {
10448 if (isPRINT(*f)) {
10449 sv_catpvn(msg, f, 1);
10450 } else {
10451 Perl_sv_catpvf(aTHX_ msg,
10452 "\\%03"UVof, (UV)*f & 0xFF);
10453 }
10454 }
10455 sv_catpvs(msg, "\"");
10456 } else {
396482e1 10457 sv_catpvs(msg, "end of string");
1d1ac7bc 10458 }
be2597df 10459 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
c635e13b 10460 }
fb73857a 10461
10462 /* output mangled stuff ... */
10463 if (c == '\0')
10464 --q;
46fc3d4c 10465 eptr = p;
10466 elen = q - p;
fb73857a 10467
10468 /* ... right here, because formatting flags should not apply */
10469 SvGROW(sv, SvCUR(sv) + elen + 1);
10470 p = SvEND(sv);
4459522c 10471 Copy(eptr, p, elen, char);
fb73857a 10472 p += elen;
10473 *p = '\0';
3f7c398e 10474 SvCUR_set(sv, p - SvPVX_const(sv));
58e33a90 10475 svix = osvix;
fb73857a 10476 continue; /* not "break" */
46fc3d4c 10477 }
10478
cc61b222
TS
10479 if (is_utf8 != has_utf8) {
10480 if (is_utf8) {
10481 if (SvCUR(sv))
10482 sv_utf8_upgrade(sv);
10483 }
10484 else {
10485 const STRLEN old_elen = elen;
59cd0e26 10486 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
cc61b222
TS
10487 sv_utf8_upgrade(nsv);
10488 eptr = SvPVX_const(nsv);
10489 elen = SvCUR(nsv);
10490
10491 if (width) { /* fudge width (can't fudge elen) */
10492 width += elen - old_elen;
10493 }
10494 is_utf8 = TRUE;
10495 }
10496 }
10497
6c94ec8b 10498 have = esignlen + zeros + elen;
ed2b91d2 10499 if (have < zeros)
f1f66076 10500 Perl_croak_nocontext("%s", PL_memory_wrap);
6c94ec8b 10501
46fc3d4c 10502 need = (have > width ? have : width);
10503 gap = need - have;
10504
d2641cbd 10505 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
f1f66076 10506 Perl_croak_nocontext("%s", PL_memory_wrap);
b22c7a20 10507 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
46fc3d4c 10508 p = SvEND(sv);
10509 if (esignlen && fill == '0') {
53c1dcc0 10510 int i;
eb160463 10511 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 10512 *p++ = esignbuf[i];
10513 }
10514 if (gap && !left) {
10515 memset(p, fill, gap);
10516 p += gap;
10517 }
10518 if (esignlen && fill != '0') {
53c1dcc0 10519 int i;
eb160463 10520 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 10521 *p++ = esignbuf[i];
10522 }
fc36a67e 10523 if (zeros) {
53c1dcc0 10524 int i;
fc36a67e 10525 for (i = zeros; i; i--)
10526 *p++ = '0';
10527 }
46fc3d4c 10528 if (elen) {
4459522c 10529 Copy(eptr, p, elen, char);
46fc3d4c 10530 p += elen;
10531 }
10532 if (gap && left) {
10533 memset(p, ' ', gap);
10534 p += gap;
10535 }
b22c7a20
GS
10536 if (vectorize) {
10537 if (veclen) {
4459522c 10538 Copy(dotstr, p, dotstrlen, char);
b22c7a20
GS
10539 p += dotstrlen;
10540 }
10541 else
10542 vectorize = FALSE; /* done iterating over vecstr */
10543 }
2cf2cfc6
A
10544 if (is_utf8)
10545 has_utf8 = TRUE;
10546 if (has_utf8)
7e2040f0 10547 SvUTF8_on(sv);
46fc3d4c 10548 *p = '\0';
3f7c398e 10549 SvCUR_set(sv, p - SvPVX_const(sv));
b22c7a20
GS
10550 if (vectorize) {
10551 esignlen = 0;
10552 goto vector;
10553 }
46fc3d4c 10554 }
3e6bd4bf 10555 SvTAINT(sv);
46fc3d4c 10556}
51371543 10557
645c22ef
DM
10558/* =========================================================================
10559
10560=head1 Cloning an interpreter
10561
10562All the macros and functions in this section are for the private use of
10563the main function, perl_clone().
10564
f2fc5c80 10565The foo_dup() functions make an exact copy of an existing foo thingy.
645c22ef
DM
10566During the course of a cloning, a hash table is used to map old addresses
10567to new addresses. The table is created and manipulated with the
10568ptr_table_* functions.
10569
10570=cut
10571
3e8320cc 10572 * =========================================================================*/
645c22ef
DM
10573
10574
1d7c1841
GS
10575#if defined(USE_ITHREADS)
10576
d4c19fe8 10577/* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
1d7c1841
GS
10578#ifndef GpREFCNT_inc
10579# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10580#endif
10581
10582
a41cc44e 10583/* Certain cases in Perl_ss_dup have been merged, by relying on the fact
3e07292d 10584 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
538f2e76
NC
10585 If this changes, please unmerge ss_dup.
10586 Likewise, sv_dup_inc_multiple() relies on this fact. */
a09252eb 10587#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup_inc(s,t))
502c6561 10588#define av_dup(s,t) MUTABLE_AV(sv_dup((const SV *)s,t))
a09252eb 10589#define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
85fbaab2 10590#define hv_dup(s,t) MUTABLE_HV(sv_dup((const SV *)s,t))
a09252eb 10591#define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
daba3364 10592#define cv_dup(s,t) MUTABLE_CV(sv_dup((const SV *)s,t))
a09252eb 10593#define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
daba3364 10594#define io_dup(s,t) MUTABLE_IO(sv_dup((const SV *)s,t))
a09252eb 10595#define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
159b6efe 10596#define gv_dup(s,t) MUTABLE_GV(sv_dup((const SV *)s,t))
a09252eb 10597#define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
6136c704
AL
10598#define SAVEPV(p) ((p) ? savepv(p) : NULL)
10599#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
8cf8f3d1 10600
199e78b7
DM
10601/* clone a parser */
10602
10603yy_parser *
66ceb532 10604Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
199e78b7
DM
10605{
10606 yy_parser *parser;
10607
7918f24d
NC
10608 PERL_ARGS_ASSERT_PARSER_DUP;
10609
199e78b7
DM
10610 if (!proto)
10611 return NULL;
10612
7c197c94
DM
10613 /* look for it in the table first */
10614 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
10615 if (parser)
10616 return parser;
10617
10618 /* create anew and remember what it is */
199e78b7 10619 Newxz(parser, 1, yy_parser);
7c197c94 10620 ptr_table_store(PL_ptr_table, proto, parser);
199e78b7
DM
10621
10622 parser->yyerrstatus = 0;
10623 parser->yychar = YYEMPTY; /* Cause a token to be read. */
10624
10625 /* XXX these not yet duped */
10626 parser->old_parser = NULL;
10627 parser->stack = NULL;
10628 parser->ps = NULL;
10629 parser->stack_size = 0;
10630 /* XXX parser->stack->state = 0; */
10631
10632 /* XXX eventually, just Copy() most of the parser struct ? */
10633
10634 parser->lex_brackets = proto->lex_brackets;
10635 parser->lex_casemods = proto->lex_casemods;
10636 parser->lex_brackstack = savepvn(proto->lex_brackstack,
10637 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
10638 parser->lex_casestack = savepvn(proto->lex_casestack,
10639 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
10640 parser->lex_defer = proto->lex_defer;
10641 parser->lex_dojoin = proto->lex_dojoin;
10642 parser->lex_expect = proto->lex_expect;
10643 parser->lex_formbrack = proto->lex_formbrack;
10644 parser->lex_inpat = proto->lex_inpat;
10645 parser->lex_inwhat = proto->lex_inwhat;
10646 parser->lex_op = proto->lex_op;
10647 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
10648 parser->lex_starts = proto->lex_starts;
10649 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
10650 parser->multi_close = proto->multi_close;
10651 parser->multi_open = proto->multi_open;
10652 parser->multi_start = proto->multi_start;
670a9cb2 10653 parser->multi_end = proto->multi_end;
199e78b7
DM
10654 parser->pending_ident = proto->pending_ident;
10655 parser->preambled = proto->preambled;
10656 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
bdc0bf6f 10657 parser->linestr = sv_dup_inc(proto->linestr, param);
53a7735b
DM
10658 parser->expect = proto->expect;
10659 parser->copline = proto->copline;
f06b5848 10660 parser->last_lop_op = proto->last_lop_op;
bc177e6b 10661 parser->lex_state = proto->lex_state;
2f9285f8 10662 parser->rsfp = fp_dup(proto->rsfp, '<', param);
5486870f
DM
10663 /* rsfp_filters entries have fake IoDIRP() */
10664 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12bd6ede
DM
10665 parser->in_my = proto->in_my;
10666 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13765c85 10667 parser->error_count = proto->error_count;
bc177e6b 10668
53a7735b 10669
f06b5848
DM
10670 parser->linestr = sv_dup_inc(proto->linestr, param);
10671
10672 {
1e05feb3
AL
10673 char * const ols = SvPVX(proto->linestr);
10674 char * const ls = SvPVX(parser->linestr);
f06b5848
DM
10675
10676 parser->bufptr = ls + (proto->bufptr >= ols ?
10677 proto->bufptr - ols : 0);
10678 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
10679 proto->oldbufptr - ols : 0);
10680 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
10681 proto->oldoldbufptr - ols : 0);
10682 parser->linestart = ls + (proto->linestart >= ols ?
10683 proto->linestart - ols : 0);
10684 parser->last_uni = ls + (proto->last_uni >= ols ?
10685 proto->last_uni - ols : 0);
10686 parser->last_lop = ls + (proto->last_lop >= ols ?
10687 proto->last_lop - ols : 0);
10688
10689 parser->bufend = ls + SvCUR(parser->linestr);
10690 }
199e78b7 10691
14047fc9
DM
10692 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
10693
2f9285f8 10694
199e78b7
DM
10695#ifdef PERL_MAD
10696 parser->endwhite = proto->endwhite;
10697 parser->faketokens = proto->faketokens;
10698 parser->lasttoke = proto->lasttoke;
10699 parser->nextwhite = proto->nextwhite;
10700 parser->realtokenstart = proto->realtokenstart;
10701 parser->skipwhite = proto->skipwhite;
10702 parser->thisclose = proto->thisclose;
10703 parser->thismad = proto->thismad;
10704 parser->thisopen = proto->thisopen;
10705 parser->thisstuff = proto->thisstuff;
10706 parser->thistoken = proto->thistoken;
10707 parser->thiswhite = proto->thiswhite;
fb205e7a
DM
10708
10709 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
10710 parser->curforce = proto->curforce;
10711#else
10712 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
10713 Copy(proto->nexttype, parser->nexttype, 5, I32);
10714 parser->nexttoke = proto->nexttoke;
199e78b7 10715#endif
f0c5aa00
DM
10716
10717 /* XXX should clone saved_curcop here, but we aren't passed
10718 * proto_perl; so do it in perl_clone_using instead */
10719
199e78b7
DM
10720 return parser;
10721}
10722
d2d73c3e 10723
d2d73c3e 10724/* duplicate a file handle */
645c22ef 10725
1d7c1841 10726PerlIO *
3be3cdd6 10727Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
1d7c1841
GS
10728{
10729 PerlIO *ret;
53c1dcc0 10730
7918f24d 10731 PERL_ARGS_ASSERT_FP_DUP;
53c1dcc0 10732 PERL_UNUSED_ARG(type);
73d840c0 10733
1d7c1841
GS
10734 if (!fp)
10735 return (PerlIO*)NULL;
10736
10737 /* look for it in the table first */
10738 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10739 if (ret)
10740 return ret;
10741
10742 /* create anew and remember what it is */
ecdeb87c 10743 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
1d7c1841
GS
10744 ptr_table_store(PL_ptr_table, fp, ret);
10745 return ret;
10746}
10747
645c22ef
DM
10748/* duplicate a directory handle */
10749
1d7c1841 10750DIR *
66ceb532 10751Perl_dirp_dup(pTHX_ DIR *const dp)
1d7c1841 10752{
96a5add6 10753 PERL_UNUSED_CONTEXT;
1d7c1841
GS
10754 if (!dp)
10755 return (DIR*)NULL;
10756 /* XXX TODO */
10757 return dp;
10758}
10759
ff276b08 10760/* duplicate a typeglob */
645c22ef 10761
1d7c1841 10762GP *
66ceb532 10763Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
1d7c1841
GS
10764{
10765 GP *ret;
b37c2d43 10766
7918f24d
NC
10767 PERL_ARGS_ASSERT_GP_DUP;
10768
1d7c1841
GS
10769 if (!gp)
10770 return (GP*)NULL;
10771 /* look for it in the table first */
10772 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10773 if (ret)
10774 return ret;
10775
10776 /* create anew and remember what it is */
a02a5408 10777 Newxz(ret, 1, GP);
1d7c1841
GS
10778 ptr_table_store(PL_ptr_table, gp, ret);
10779
10780 /* clone */
46d65037
NC
10781 /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
10782 on Newxz() to do this for us. */
d2d73c3e
AB
10783 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
10784 ret->gp_io = io_dup_inc(gp->gp_io, param);
10785 ret->gp_form = cv_dup_inc(gp->gp_form, param);
10786 ret->gp_av = av_dup_inc(gp->gp_av, param);
10787 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
10788 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10789 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
1d7c1841 10790 ret->gp_cvgen = gp->gp_cvgen;
1d7c1841 10791 ret->gp_line = gp->gp_line;
566771cc 10792 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
1d7c1841
GS
10793 return ret;
10794}
10795
645c22ef
DM
10796/* duplicate a chain of magic */
10797
1d7c1841 10798MAGIC *
b88ec9b8 10799Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
1d7c1841 10800{
c160a186 10801 MAGIC *mgret = NULL;
0228edf6 10802 MAGIC **mgprev_p = &mgret;
7918f24d
NC
10803
10804 PERL_ARGS_ASSERT_MG_DUP;
10805
1d7c1841
GS
10806 for (; mg; mg = mg->mg_moremagic) {
10807 MAGIC *nmg;
803f2748
DM
10808
10809 if ((param->flags & CLONEf_JOIN_IN)
10810 && mg->mg_type == PERL_MAGIC_backref)
10811 /* when joining, we let the individual SVs add themselves to
10812 * backref as needed. */
10813 continue;
10814
45f7fcc8 10815 Newx(nmg, 1, MAGIC);
0228edf6
NC
10816 *mgprev_p = nmg;
10817 mgprev_p = &(nmg->mg_moremagic);
10818
45f7fcc8
NC
10819 /* There was a comment "XXX copy dynamic vtable?" but as we don't have
10820 dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
10821 from the original commit adding Perl_mg_dup() - revision 4538.
10822 Similarly there is the annotation "XXX random ptr?" next to the
10823 assignment to nmg->mg_ptr. */
10824 *nmg = *mg;
10825
288b8c02 10826 /* FIXME for plugins
45f7fcc8
NC
10827 if (nmg->mg_type == PERL_MAGIC_qr) {
10828 nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
1d7c1841 10829 }
288b8c02
NC
10830 else
10831 */
45f7fcc8 10832 if(nmg->mg_type == PERL_MAGIC_backref) {
d7cbc7b5
NC
10833 /* The backref AV has its reference count deliberately bumped by
10834 1. */
502c6561 10835 nmg->mg_obj
45f7fcc8 10836 = SvREFCNT_inc(av_dup_inc((const AV *) nmg->mg_obj, param));
05bd4103 10837 }
1d7c1841 10838 else {
45f7fcc8
NC
10839 nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
10840 ? sv_dup_inc(nmg->mg_obj, param)
10841 : sv_dup(nmg->mg_obj, param);
10842 }
10843
10844 if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
10845 if (nmg->mg_len > 0) {
10846 nmg->mg_ptr = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
10847 if (nmg->mg_type == PERL_MAGIC_overload_table &&
10848 AMT_AMAGIC((AMT*)nmg->mg_ptr))
14befaf4 10849 {
0bcc34c2 10850 AMT * const namtp = (AMT*)nmg->mg_ptr;
538f2e76
NC
10851 sv_dup_inc_multiple((SV**)(namtp->table),
10852 (SV**)(namtp->table), NofAMmeth, param);
1d7c1841
GS
10853 }
10854 }
45f7fcc8
NC
10855 else if (nmg->mg_len == HEf_SVKEY)
10856 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
1d7c1841 10857 }
45f7fcc8 10858 if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
68795e93
NIS
10859 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10860 }
1d7c1841
GS
10861 }
10862 return mgret;
10863}
10864
4674ade5
NC
10865#endif /* USE_ITHREADS */
10866
db93c0c4
NC
10867struct ptr_tbl_arena {
10868 struct ptr_tbl_arena *next;
10869 struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers. */
10870};
10871
645c22ef
DM
10872/* create a new pointer-mapping table */
10873
1d7c1841
GS
10874PTR_TBL_t *
10875Perl_ptr_table_new(pTHX)
10876{
10877 PTR_TBL_t *tbl;
96a5add6
AL
10878 PERL_UNUSED_CONTEXT;
10879
b3a120bf 10880 Newx(tbl, 1, PTR_TBL_t);
1d7c1841
GS
10881 tbl->tbl_max = 511;
10882 tbl->tbl_items = 0;
db93c0c4
NC
10883 tbl->tbl_arena = NULL;
10884 tbl->tbl_arena_next = NULL;
10885 tbl->tbl_arena_end = NULL;
a02a5408 10886 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
1d7c1841
GS
10887 return tbl;
10888}
10889
7119fd33
NC
10890#define PTR_TABLE_HASH(ptr) \
10891 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
134ca3d6 10892
645c22ef
DM
10893/* map an existing pointer using a table */
10894
7bf61b54 10895STATIC PTR_TBL_ENT_t *
1eb6e4ca 10896S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
7918f24d 10897{
1d7c1841 10898 PTR_TBL_ENT_t *tblent;
4373e329 10899 const UV hash = PTR_TABLE_HASH(sv);
7918f24d
NC
10900
10901 PERL_ARGS_ASSERT_PTR_TABLE_FIND;
10902
1d7c1841
GS
10903 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10904 for (; tblent; tblent = tblent->next) {
10905 if (tblent->oldval == sv)
7bf61b54 10906 return tblent;
1d7c1841 10907 }
d4c19fe8 10908 return NULL;
7bf61b54
NC
10909}
10910
10911void *
1eb6e4ca 10912Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
7bf61b54 10913{
b0e6ae5b 10914 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
7918f24d
NC
10915
10916 PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
96a5add6 10917 PERL_UNUSED_CONTEXT;
7918f24d 10918
d4c19fe8 10919 return tblent ? tblent->newval : NULL;
1d7c1841
GS
10920}
10921
645c22ef
DM
10922/* add a new entry to a pointer-mapping table */
10923
1d7c1841 10924void
1eb6e4ca 10925Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
1d7c1841 10926{
0c9fdfe0 10927 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
7918f24d
NC
10928
10929 PERL_ARGS_ASSERT_PTR_TABLE_STORE;
96a5add6 10930 PERL_UNUSED_CONTEXT;
1d7c1841 10931
7bf61b54
NC
10932 if (tblent) {
10933 tblent->newval = newsv;
10934 } else {
10935 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
10936
db93c0c4
NC
10937 if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
10938 struct ptr_tbl_arena *new_arena;
10939
10940 Newx(new_arena, 1, struct ptr_tbl_arena);
10941 new_arena->next = tbl->tbl_arena;
10942 tbl->tbl_arena = new_arena;
10943 tbl->tbl_arena_next = new_arena->array;
10944 tbl->tbl_arena_end = new_arena->array
10945 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
10946 }
10947
10948 tblent = tbl->tbl_arena_next++;
d2a0f284 10949
7bf61b54
NC
10950 tblent->oldval = oldsv;
10951 tblent->newval = newsv;
10952 tblent->next = tbl->tbl_ary[entry];
10953 tbl->tbl_ary[entry] = tblent;
10954 tbl->tbl_items++;
10955 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
10956 ptr_table_split(tbl);
1d7c1841 10957 }
1d7c1841
GS
10958}
10959
645c22ef
DM
10960/* double the hash bucket size of an existing ptr table */
10961
1d7c1841 10962void
1eb6e4ca 10963Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
1d7c1841
GS
10964{
10965 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
4373e329 10966 const UV oldsize = tbl->tbl_max + 1;
1d7c1841
GS
10967 UV newsize = oldsize * 2;
10968 UV i;
7918f24d
NC
10969
10970 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
96a5add6 10971 PERL_UNUSED_CONTEXT;
1d7c1841
GS
10972
10973 Renew(ary, newsize, PTR_TBL_ENT_t*);
10974 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10975 tbl->tbl_max = --newsize;
10976 tbl->tbl_ary = ary;
10977 for (i=0; i < oldsize; i++, ary++) {
4c9d89c5
NC
10978 PTR_TBL_ENT_t **entp = ary;
10979 PTR_TBL_ENT_t *ent = *ary;
10980 PTR_TBL_ENT_t **curentp;
10981 if (!ent)
1d7c1841
GS
10982 continue;
10983 curentp = ary + oldsize;
4c9d89c5 10984 do {
134ca3d6 10985 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
1d7c1841
GS
10986 *entp = ent->next;
10987 ent->next = *curentp;
10988 *curentp = ent;
1d7c1841
GS
10989 }
10990 else
10991 entp = &ent->next;
4c9d89c5
NC
10992 ent = *entp;
10993 } while (ent);
1d7c1841
GS
10994 }
10995}
10996
645c22ef 10997/* remove all the entries from a ptr table */
5c5ade3e 10998/* Deprecated - will be removed post 5.14 */
645c22ef 10999
a0739874 11000void
1eb6e4ca 11001Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
a0739874 11002{
d5cefff9 11003 if (tbl && tbl->tbl_items) {
db93c0c4 11004 struct ptr_tbl_arena *arena = tbl->tbl_arena;
a0739874 11005
db93c0c4 11006 Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
ab1e7f95 11007
db93c0c4
NC
11008 while (arena) {
11009 struct ptr_tbl_arena *next = arena->next;
11010
11011 Safefree(arena);
11012 arena = next;
11013 };
a0739874 11014
d5cefff9 11015 tbl->tbl_items = 0;
db93c0c4
NC
11016 tbl->tbl_arena = NULL;
11017 tbl->tbl_arena_next = NULL;
11018 tbl->tbl_arena_end = NULL;
d5cefff9 11019 }
a0739874
DM
11020}
11021
645c22ef
DM
11022/* clear and free a ptr table */
11023
a0739874 11024void
1eb6e4ca 11025Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
a0739874 11026{
5c5ade3e
NC
11027 struct ptr_tbl_arena *arena;
11028
a0739874
DM
11029 if (!tbl) {
11030 return;
11031 }
5c5ade3e
NC
11032
11033 arena = tbl->tbl_arena;
11034
11035 while (arena) {
11036 struct ptr_tbl_arena *next = arena->next;
11037
11038 Safefree(arena);
11039 arena = next;
11040 }
11041
a0739874
DM
11042 Safefree(tbl->tbl_ary);
11043 Safefree(tbl);
11044}
11045
4674ade5 11046#if defined(USE_ITHREADS)
5bd07a3d 11047
83841fad 11048void
1eb6e4ca 11049Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
83841fad 11050{
7918f24d
NC
11051 PERL_ARGS_ASSERT_RVPV_DUP;
11052
83841fad 11053 if (SvROK(sstr)) {
803f2748
DM
11054 if (SvWEAKREF(sstr)) {
11055 SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11056 if (param->flags & CLONEf_JOIN_IN) {
11057 /* if joining, we add any back references individually rather
11058 * than copying the whole backref array */
11059 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11060 }
11061 }
11062 else
11063 SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
83841fad 11064 }
3f7c398e 11065 else if (SvPVX_const(sstr)) {
83841fad
NIS
11066 /* Has something there */
11067 if (SvLEN(sstr)) {
68795e93 11068 /* Normal PV - clone whole allocated space */
3f7c398e 11069 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
d3d0e6f1
NC
11070 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11071 /* Not that normal - actually sstr is copy on write.
11072 But we are a true, independant SV, so: */
11073 SvREADONLY_off(dstr);
11074 SvFAKE_off(dstr);
11075 }
68795e93 11076 }
83841fad
NIS
11077 else {
11078 /* Special case - not normally malloced for some reason */
f7877b28
NC
11079 if (isGV_with_GP(sstr)) {
11080 /* Don't need to do anything here. */
11081 }
11082 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
ef10be65
NC
11083 /* A "shared" PV - clone it as "shared" PV */
11084 SvPV_set(dstr,
11085 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11086 param)));
83841fad
NIS
11087 }
11088 else {
11089 /* Some other special case - random pointer */
d2c6dc5e 11090 SvPV_set(dstr, (char *) SvPVX_const(sstr));
d3d0e6f1 11091 }
83841fad
NIS
11092 }
11093 }
11094 else {
4608196e 11095 /* Copy the NULL */
4df7f6af 11096 SvPV_set(dstr, NULL);
83841fad
NIS
11097 }
11098}
11099
538f2e76
NC
11100/* duplicate a list of SVs. source and dest may point to the same memory. */
11101static SV **
11102S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11103 SSize_t items, CLONE_PARAMS *const param)
11104{
11105 PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11106
11107 while (items-- > 0) {
11108 *dest++ = sv_dup_inc(*source++, param);
11109 }
11110
11111 return dest;
11112}
11113
662fb8b2
NC
11114/* duplicate an SV of any type (including AV, HV etc) */
11115
d08d57ef
NC
11116static SV *
11117S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
1d7c1841 11118{
27da23d5 11119 dVAR;
1d7c1841
GS
11120 SV *dstr;
11121
d08d57ef 11122 PERL_ARGS_ASSERT_SV_DUP_COMMON;
7918f24d 11123
bfd95973
NC
11124 if (SvTYPE(sstr) == SVTYPEMASK) {
11125#ifdef DEBUG_LEAKING_SCALARS_ABORT
11126 abort();
11127#endif
6136c704 11128 return NULL;
bfd95973 11129 }
1d7c1841 11130 /* look for it in the table first */
daba3364 11131 dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
1d7c1841
GS
11132 if (dstr)
11133 return dstr;
11134
0405e91e
AB
11135 if(param->flags & CLONEf_JOIN_IN) {
11136 /** We are joining here so we don't want do clone
11137 something that is bad **/
eb86f8b3 11138 if (SvTYPE(sstr) == SVt_PVHV) {
9bde8eb0 11139 const HEK * const hvname = HvNAME_HEK(sstr);
96bafef9 11140 if (hvname) {
eb86f8b3 11141 /** don't clone stashes if they already exist **/
96bafef9
DM
11142 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
11143 ptr_table_store(PL_ptr_table, sstr, dstr);
11144 return dstr;
11145 }
0405e91e
AB
11146 }
11147 }
11148
1d7c1841
GS
11149 /* create anew and remember what it is */
11150 new_SV(dstr);
fd0854ff
DM
11151
11152#ifdef DEBUG_LEAKING_SCALARS
11153 dstr->sv_debug_optype = sstr->sv_debug_optype;
11154 dstr->sv_debug_line = sstr->sv_debug_line;
11155 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11156 dstr->sv_debug_cloned = 1;
fd0854ff 11157 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
fd0854ff
DM
11158#endif
11159
1d7c1841
GS
11160 ptr_table_store(PL_ptr_table, sstr, dstr);
11161
11162 /* clone */
11163 SvFLAGS(dstr) = SvFLAGS(sstr);
11164 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
11165 SvREFCNT(dstr) = 0; /* must be before any other dups! */
11166
11167#ifdef DEBUGGING
3f7c398e 11168 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
1d7c1841 11169 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
6c9570dc 11170 (void*)PL_watch_pvx, SvPVX_const(sstr));
1d7c1841
GS
11171#endif
11172
9660f481
DM
11173 /* don't clone objects whose class has asked us not to */
11174 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
33de8e4a 11175 SvFLAGS(dstr) = 0;
9660f481
DM
11176 return dstr;
11177 }
11178
1d7c1841
GS
11179 switch (SvTYPE(sstr)) {
11180 case SVt_NULL:
11181 SvANY(dstr) = NULL;
11182 break;
11183 case SVt_IV:
339049b0 11184 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
4df7f6af
NC
11185 if(SvROK(sstr)) {
11186 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11187 } else {
11188 SvIV_set(dstr, SvIVX(sstr));
11189 }
1d7c1841
GS
11190 break;
11191 case SVt_NV:
11192 SvANY(dstr) = new_XNV();
9d6ce603 11193 SvNV_set(dstr, SvNVX(sstr));
1d7c1841 11194 break;
cecf5685 11195 /* case SVt_BIND: */
662fb8b2
NC
11196 default:
11197 {
11198 /* These are all the types that need complex bodies allocating. */
662fb8b2 11199 void *new_body;
2bcc16b3
NC
11200 const svtype sv_type = SvTYPE(sstr);
11201 const struct body_details *const sv_type_details
11202 = bodies_by_type + sv_type;
662fb8b2 11203
93e68bfb 11204 switch (sv_type) {
662fb8b2 11205 default:
bb263b4e 11206 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
662fb8b2
NC
11207 break;
11208
662fb8b2 11209 case SVt_PVGV:
c22188b4
NC
11210 case SVt_PVIO:
11211 case SVt_PVFM:
11212 case SVt_PVHV:
11213 case SVt_PVAV:
662fb8b2 11214 case SVt_PVCV:
662fb8b2 11215 case SVt_PVLV:
5c35adbb 11216 case SVt_REGEXP:
662fb8b2 11217 case SVt_PVMG:
662fb8b2 11218 case SVt_PVNV:
662fb8b2 11219 case SVt_PVIV:
662fb8b2 11220 case SVt_PV:
d2a0f284 11221 assert(sv_type_details->body_size);
c22188b4 11222 if (sv_type_details->arena) {
d2a0f284 11223 new_body_inline(new_body, sv_type);
c22188b4 11224 new_body
b9502f15 11225 = (void*)((char*)new_body - sv_type_details->offset);
c22188b4
NC
11226 } else {
11227 new_body = new_NOARENA(sv_type_details);
11228 }
1d7c1841 11229 }
662fb8b2
NC
11230 assert(new_body);
11231 SvANY(dstr) = new_body;
11232
2bcc16b3 11233#ifndef PURIFY
b9502f15
NC
11234 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11235 ((char*)SvANY(dstr)) + sv_type_details->offset,
f32993d6 11236 sv_type_details->copy, char);
2bcc16b3
NC
11237#else
11238 Copy(((char*)SvANY(sstr)),
11239 ((char*)SvANY(dstr)),
d2a0f284 11240 sv_type_details->body_size + sv_type_details->offset, char);
2bcc16b3 11241#endif
662fb8b2 11242
f7877b28 11243 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
5bb89d25
NC
11244 && !isGV_with_GP(dstr)
11245 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
662fb8b2
NC
11246 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11247
11248 /* The Copy above means that all the source (unduplicated) pointers
11249 are now in the destination. We can check the flags and the
11250 pointers in either, but it's possible that there's less cache
11251 missing by always going for the destination.
11252 FIXME - instrument and check that assumption */
f32993d6 11253 if (sv_type >= SVt_PVMG) {
885ffcb3 11254 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
73d95100 11255 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
e736a858 11256 } else if (SvMAGIC(dstr))
662fb8b2
NC
11257 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11258 if (SvSTASH(dstr))
11259 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
1d7c1841 11260 }
662fb8b2 11261
f32993d6
NC
11262 /* The cast silences a GCC warning about unhandled types. */
11263 switch ((int)sv_type) {
662fb8b2
NC
11264 case SVt_PV:
11265 break;
11266 case SVt_PVIV:
11267 break;
11268 case SVt_PVNV:
11269 break;
11270 case SVt_PVMG:
11271 break;
5c35adbb 11272 case SVt_REGEXP:
288b8c02 11273 /* FIXME for plugins */
d2f13c59 11274 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
f708cfc1 11275 break;
662fb8b2
NC
11276 case SVt_PVLV:
11277 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11278 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11279 LvTARG(dstr) = dstr;
11280 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
daba3364 11281 LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
662fb8b2
NC
11282 else
11283 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
662fb8b2 11284 case SVt_PVGV:
cecf5685 11285 if(isGV_with_GP(sstr)) {
566771cc 11286 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
39cb70dc
NC
11287 /* Don't call sv_add_backref here as it's going to be
11288 created as part of the magic cloning of the symbol
27bca322
FC
11289 table--unless this is during a join and the stash
11290 is not actually being cloned. */
f7877b28
NC
11291 /* Danger Will Robinson - GvGP(dstr) isn't initialised
11292 at the point of this comment. */
39cb70dc 11293 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
ab95db60
DM
11294 if (param->flags & CLONEf_JOIN_IN)
11295 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
f7877b28
NC
11296 GvGP(dstr) = gp_dup(GvGP(sstr), param);
11297 (void)GpREFCNT_inc(GvGP(dstr));
11298 } else
11299 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
662fb8b2
NC
11300 break;
11301 case SVt_PVIO:
5486870f 11302 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
662fb8b2
NC
11303 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11304 /* I have no idea why fake dirp (rsfps)
11305 should be treated differently but otherwise
11306 we end up with leaks -- sky*/
11307 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
11308 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
11309 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11310 } else {
11311 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
11312 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
11313 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
100ce7e1
NC
11314 if (IoDIRP(dstr)) {
11315 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
11316 } else {
6f207bd3 11317 NOOP;
100ce7e1
NC
11318 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
11319 }
6f7e8353 11320 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
662fb8b2 11321 }
6f7e8353
NC
11322 if (IoOFP(dstr) == IoIFP(sstr))
11323 IoOFP(dstr) = IoIFP(dstr);
11324 else
11325 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
662fb8b2
NC
11326 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
11327 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
11328 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
11329 break;
11330 case SVt_PVAV:
2779b694
KB
11331 /* avoid cloning an empty array */
11332 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
662fb8b2 11333 SV **dst_ary, **src_ary;
502c6561 11334 SSize_t items = AvFILLp((const AV *)sstr) + 1;
662fb8b2 11335
502c6561
NC
11336 src_ary = AvARRAY((const AV *)sstr);
11337 Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
662fb8b2 11338 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
502c6561
NC
11339 AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11340 AvALLOC((const AV *)dstr) = dst_ary;
11341 if (AvREAL((const AV *)sstr)) {
538f2e76
NC
11342 dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11343 param);
662fb8b2
NC
11344 }
11345 else {
11346 while (items-- > 0)
11347 *dst_ary++ = sv_dup(*src_ary++, param);
11348 }
502c6561 11349 items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
662fb8b2
NC
11350 while (items-- > 0) {
11351 *dst_ary++ = &PL_sv_undef;
11352 }
bfcb3514 11353 }
662fb8b2 11354 else {
502c6561
NC
11355 AvARRAY(MUTABLE_AV(dstr)) = NULL;
11356 AvALLOC((const AV *)dstr) = (SV**)NULL;
2779b694
KB
11357 AvMAX( (const AV *)dstr) = -1;
11358 AvFILLp((const AV *)dstr) = -1;
b79f7545 11359 }
662fb8b2
NC
11360 break;
11361 case SVt_PVHV:
1d193675 11362 if (HvARRAY((const HV *)sstr)) {
7e265ef3
AL
11363 STRLEN i = 0;
11364 const bool sharekeys = !!HvSHAREKEYS(sstr);
11365 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
11366 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
11367 char *darray;
11368 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
11369 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
11370 char);
11371 HvARRAY(dstr) = (HE**)darray;
11372 while (i <= sxhv->xhv_max) {
11373 const HE * const source = HvARRAY(sstr)[i];
11374 HvARRAY(dstr)[i] = source
11375 ? he_dup(source, sharekeys, param) : 0;
11376 ++i;
11377 }
11378 if (SvOOK(sstr)) {
11379 HEK *hvname;
11380 const struct xpvhv_aux * const saux = HvAUX(sstr);
11381 struct xpvhv_aux * const daux = HvAUX(dstr);
11382 /* This flag isn't copied. */
11383 /* SvOOK_on(hv) attacks the IV flags. */
11384 SvFLAGS(dstr) |= SVf_OOK;
11385
11386 hvname = saux->xhv_name;
566771cc 11387 daux->xhv_name = hek_dup(hvname, param);
7e265ef3
AL
11388
11389 daux->xhv_riter = saux->xhv_riter;
11390 daux->xhv_eiter = saux->xhv_eiter
11391 ? he_dup(saux->xhv_eiter,
f2338a2e 11392 cBOOL(HvSHAREKEYS(sstr)), param) : 0;
b17f5ab7 11393 /* backref array needs refcnt=2; see sv_add_backref */
7e265ef3 11394 daux->xhv_backreferences =
ab95db60
DM
11395 (param->flags & CLONEf_JOIN_IN)
11396 /* when joining, we let the individual GVs and
11397 * CVs add themselves to backref as
11398 * needed. This avoids pulling in stuff
11399 * that isn't required, and simplifies the
11400 * case where stashes aren't cloned back
11401 * if they already exist in the parent
11402 * thread */
11403 ? NULL
11404 : saux->xhv_backreferences
502c6561 11405 ? MUTABLE_AV(SvREFCNT_inc(
daba3364 11406 sv_dup_inc((const SV *)saux->xhv_backreferences, param)))
86f55936 11407 : 0;
e1a479c5
BB
11408
11409 daux->xhv_mro_meta = saux->xhv_mro_meta
11410 ? mro_meta_dup(saux->xhv_mro_meta, param)
11411 : 0;
11412
7e265ef3
AL
11413 /* Record stashes for possible cloning in Perl_clone(). */
11414 if (hvname)
11415 av_push(param->stashes, dstr);
662fb8b2 11416 }
662fb8b2 11417 }
7e265ef3 11418 else
85fbaab2 11419 HvARRAY(MUTABLE_HV(dstr)) = NULL;
662fb8b2 11420 break;
662fb8b2 11421 case SVt_PVCV:
bb172083
NC
11422 if (!(param->flags & CLONEf_COPY_STACKS)) {
11423 CvDEPTH(dstr) = 0;
11424 }
4c74a7df 11425 /*FALLTHROUGH*/
bb172083 11426 case SVt_PVFM:
662fb8b2
NC
11427 /* NOTE: not refcounted */
11428 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
ab95db60
DM
11429 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
11430 Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
662fb8b2 11431 OP_REFCNT_LOCK;
d04ba589
NC
11432 if (!CvISXSUB(dstr))
11433 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
662fb8b2 11434 OP_REFCNT_UNLOCK;
cfae286e 11435 if (CvCONST(dstr) && CvISXSUB(dstr)) {
d32faaf3 11436 CvXSUBANY(dstr).any_ptr =
daba3364 11437 sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
662fb8b2
NC
11438 }
11439 /* don't dup if copying back - CvGV isn't refcounted, so the
11440 * duped GV may never be freed. A bit of a hack! DAPM */
b3f91e91 11441 SvANY(MUTABLE_CV(dstr))->xcv_gv =
cfc1e951 11442 CvCVGV_RC(dstr)
803f2748
DM
11443 ? gv_dup_inc(CvGV(sstr), param)
11444 : (param->flags & CLONEf_JOIN_IN)
11445 ? NULL
11446 : gv_dup(CvGV(sstr), param);
11447
d5b1589c 11448 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
662fb8b2
NC
11449 CvOUTSIDE(dstr) =
11450 CvWEAKOUTSIDE(sstr)
11451 ? cv_dup( CvOUTSIDE(dstr), param)
11452 : cv_dup_inc(CvOUTSIDE(dstr), param);
aed2304a 11453 if (!CvISXSUB(dstr))
662fb8b2
NC
11454 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
11455 break;
bfcb3514 11456 }
1d7c1841 11457 }
1d7c1841
GS
11458 }
11459
11460 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
11461 ++PL_sv_objcount;
11462
11463 return dstr;
d2d73c3e 11464 }
1d7c1841 11465
a09252eb
NC
11466SV *
11467Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11468{
11469 PERL_ARGS_ASSERT_SV_DUP_INC;
d08d57ef
NC
11470 return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
11471}
11472
11473SV *
11474Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
11475{
11476 SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
11477 PERL_ARGS_ASSERT_SV_DUP;
11478
04518cc3
NC
11479 /* Track every SV that (at least initially) had a reference count of 0.
11480 We need to do this by holding an actual reference to it in this array.
11481 If we attempt to cheat, turn AvREAL_off(), and store only pointers
11482 (akin to the stashes hash, and the perl stack), we come unstuck if
11483 a weak reference (or other SV legitimately SvREFCNT() == 0 for this
11484 thread) is manipulated in a CLONE method, because CLONE runs before the
11485 unreferenced array is walked to find SVs still with SvREFCNT() == 0
11486 (and fix things up by giving each a reference via the temps stack).
11487 Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
11488 then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
11489 before the walk of unreferenced happens and a reference to that is SV
11490 added to the temps stack. At which point we have the same SV considered
11491 to be in use, and free to be re-used. Not good.
11492 */
d08d57ef
NC
11493 if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
11494 assert(param->unreferenced);
04518cc3 11495 av_push(param->unreferenced, SvREFCNT_inc(dstr));
d08d57ef
NC
11496 }
11497
11498 return dstr;
a09252eb
NC
11499}
11500
645c22ef
DM
11501/* duplicate a context */
11502
1d7c1841 11503PERL_CONTEXT *
a8fc9800 11504Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
1d7c1841
GS
11505{
11506 PERL_CONTEXT *ncxs;
11507
7918f24d
NC
11508 PERL_ARGS_ASSERT_CX_DUP;
11509
1d7c1841
GS
11510 if (!cxs)
11511 return (PERL_CONTEXT*)NULL;
11512
11513 /* look for it in the table first */
11514 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
11515 if (ncxs)
11516 return ncxs;
11517
11518 /* create anew and remember what it is */
c2d565bf 11519 Newx(ncxs, max + 1, PERL_CONTEXT);
1d7c1841 11520 ptr_table_store(PL_ptr_table, cxs, ncxs);
c2d565bf 11521 Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
1d7c1841
GS
11522
11523 while (ix >= 0) {
c445ea15 11524 PERL_CONTEXT * const ncx = &ncxs[ix];
c2d565bf 11525 if (CxTYPE(ncx) == CXt_SUBST) {
1d7c1841
GS
11526 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
11527 }
11528 else {
c2d565bf 11529 switch (CxTYPE(ncx)) {
1d7c1841 11530 case CXt_SUB:
c2d565bf
NC
11531 ncx->blk_sub.cv = (ncx->blk_sub.olddepth == 0
11532 ? cv_dup_inc(ncx->blk_sub.cv, param)
11533 : cv_dup(ncx->blk_sub.cv,param));
bafb2adc 11534 ncx->blk_sub.argarray = (CxHASARGS(ncx)
c2d565bf
NC
11535 ? av_dup_inc(ncx->blk_sub.argarray,
11536 param)
7d49f689 11537 : NULL);
c2d565bf
NC
11538 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,
11539 param);
d8d97e70 11540 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
c2d565bf 11541 ncx->blk_sub.oldcomppad);
1d7c1841
GS
11542 break;
11543 case CXt_EVAL:
c2d565bf
NC
11544 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
11545 param);
11546 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
1d7c1841 11547 break;
d01136d6 11548 case CXt_LOOP_LAZYSV:
d01136d6
BS
11549 ncx->blk_loop.state_u.lazysv.end
11550 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
840fe433
NC
11551 /* We are taking advantage of av_dup_inc and sv_dup_inc
11552 actually being the same function, and order equivalance of
11553 the two unions.
11554 We can assert the later [but only at run time :-(] */
11555 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
11556 (void *) &ncx->blk_loop.state_u.lazysv.cur);
3b719c58 11557 case CXt_LOOP_FOR:
d01136d6
BS
11558 ncx->blk_loop.state_u.ary.ary
11559 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
11560 case CXt_LOOP_LAZYIV:
3b719c58 11561 case CXt_LOOP_PLAIN:
e846cb92
NC
11562 if (CxPADLOOP(ncx)) {
11563 ncx->blk_loop.oldcomppad
11564 = (PAD*)ptr_table_fetch(PL_ptr_table,
11565 ncx->blk_loop.oldcomppad);
11566 } else {
11567 ncx->blk_loop.oldcomppad
159b6efe
NC
11568 = (PAD*)gv_dup((const GV *)ncx->blk_loop.oldcomppad,
11569 param);
e846cb92 11570 }
1d7c1841
GS
11571 break;
11572 case CXt_FORMAT:
f9c764c5
NC
11573 ncx->blk_format.cv = cv_dup(ncx->blk_format.cv, param);
11574 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param);
11575 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
c2d565bf 11576 param);
1d7c1841
GS
11577 break;
11578 case CXt_BLOCK:
11579 case CXt_NULL:
11580 break;
11581 }
11582 }
11583 --ix;
11584 }
11585 return ncxs;
11586}
11587
645c22ef
DM
11588/* duplicate a stack info structure */
11589
1d7c1841 11590PERL_SI *
a8fc9800 11591Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
1d7c1841
GS
11592{
11593 PERL_SI *nsi;
11594
7918f24d
NC
11595 PERL_ARGS_ASSERT_SI_DUP;
11596
1d7c1841
GS
11597 if (!si)
11598 return (PERL_SI*)NULL;
11599
11600 /* look for it in the table first */
11601 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
11602 if (nsi)
11603 return nsi;
11604
11605 /* create anew and remember what it is */
a02a5408 11606 Newxz(nsi, 1, PERL_SI);
1d7c1841
GS
11607 ptr_table_store(PL_ptr_table, si, nsi);
11608
d2d73c3e 11609 nsi->si_stack = av_dup_inc(si->si_stack, param);
1d7c1841
GS
11610 nsi->si_cxix = si->si_cxix;
11611 nsi->si_cxmax = si->si_cxmax;
d2d73c3e 11612 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
1d7c1841 11613 nsi->si_type = si->si_type;
d2d73c3e
AB
11614 nsi->si_prev = si_dup(si->si_prev, param);
11615 nsi->si_next = si_dup(si->si_next, param);
1d7c1841
GS
11616 nsi->si_markoff = si->si_markoff;
11617
11618 return nsi;
11619}
11620
11621#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
11622#define TOPINT(ss,ix) ((ss)[ix].any_i32)
11623#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
11624#define TOPLONG(ss,ix) ((ss)[ix].any_long)
11625#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
11626#define TOPIV(ss,ix) ((ss)[ix].any_iv)
c6bf6a65
NC
11627#define POPUV(ss,ix) ((ss)[--(ix)].any_uv)
11628#define TOPUV(ss,ix) ((ss)[ix].any_uv)
38d8b13e
HS
11629#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
11630#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
1d7c1841
GS
11631#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
11632#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
11633#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
11634#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
11635#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
11636#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11637
11638/* XXXXX todo */
11639#define pv_dup_inc(p) SAVEPV(p)
11640#define pv_dup(p) SAVEPV(p)
11641#define svp_dup_inc(p,pp) any_dup(p,pp)
11642
645c22ef
DM
11643/* map any object to the new equivent - either something in the
11644 * ptr table, or something in the interpreter structure
11645 */
11646
1d7c1841 11647void *
53c1dcc0 11648Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
1d7c1841
GS
11649{
11650 void *ret;
11651
7918f24d
NC
11652 PERL_ARGS_ASSERT_ANY_DUP;
11653
1d7c1841
GS
11654 if (!v)
11655 return (void*)NULL;
11656
11657 /* look for it in the table first */
11658 ret = ptr_table_fetch(PL_ptr_table, v);
11659 if (ret)
11660 return ret;
11661
11662 /* see if it is part of the interpreter structure */
11663 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
acfe0abc 11664 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
05ec9bb3 11665 else {
1d7c1841 11666 ret = v;
05ec9bb3 11667 }
1d7c1841
GS
11668
11669 return ret;
11670}
11671
645c22ef
DM
11672/* duplicate the save stack */
11673
1d7c1841 11674ANY *
a8fc9800 11675Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
1d7c1841 11676{
53d44271 11677 dVAR;
907b3e23
DM
11678 ANY * const ss = proto_perl->Isavestack;
11679 const I32 max = proto_perl->Isavestack_max;
11680 I32 ix = proto_perl->Isavestack_ix;
1d7c1841 11681 ANY *nss;
daba3364 11682 const SV *sv;
1d193675
NC
11683 const GV *gv;
11684 const AV *av;
11685 const HV *hv;
1d7c1841
GS
11686 void* ptr;
11687 int intval;
11688 long longval;
11689 GP *gp;
11690 IV iv;
b24356f5 11691 I32 i;
c4e33207 11692 char *c = NULL;
1d7c1841 11693 void (*dptr) (void*);
acfe0abc 11694 void (*dxptr) (pTHX_ void*);
1d7c1841 11695
7918f24d
NC
11696 PERL_ARGS_ASSERT_SS_DUP;
11697
a02a5408 11698 Newxz(nss, max, ANY);
1d7c1841
GS
11699
11700 while (ix > 0) {
c6bf6a65
NC
11701 const UV uv = POPUV(ss,ix);
11702 const U8 type = (U8)uv & SAVE_MASK;
11703
11704 TOPUV(nss,ix) = uv;
b24356f5 11705 switch (type) {
cdcdfc56
NC
11706 case SAVEt_CLEARSV:
11707 break;
3e07292d 11708 case SAVEt_HELEM: /* hash element */
daba3364 11709 sv = (const SV *)POPPTR(ss,ix);
3e07292d
NC
11710 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11711 /* fall through */
1d7c1841 11712 case SAVEt_ITEM: /* normal string */
a41cc44e 11713 case SAVEt_SV: /* scalar reference */
daba3364 11714 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11715 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
11716 /* fall through */
11717 case SAVEt_FREESV:
11718 case SAVEt_MORTALIZESV:
daba3364 11719 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11720 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 11721 break;
05ec9bb3
NIS
11722 case SAVEt_SHARED_PVREF: /* char* in shared space */
11723 c = (char*)POPPTR(ss,ix);
11724 TOPPTR(nss,ix) = savesharedpv(c);
11725 ptr = POPPTR(ss,ix);
11726 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11727 break;
1d7c1841
GS
11728 case SAVEt_GENERIC_SVREF: /* generic sv */
11729 case SAVEt_SVREF: /* scalar reference */
daba3364 11730 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11731 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
11732 ptr = POPPTR(ss,ix);
11733 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11734 break;
a41cc44e 11735 case SAVEt_HV: /* hash reference */
1d7c1841 11736 case SAVEt_AV: /* array reference */
daba3364 11737 sv = (const SV *) POPPTR(ss,ix);
337d28f5 11738 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
11739 /* fall through */
11740 case SAVEt_COMPPAD:
11741 case SAVEt_NSTAB:
daba3364 11742 sv = (const SV *) POPPTR(ss,ix);
3e07292d 11743 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
11744 break;
11745 case SAVEt_INT: /* int reference */
11746 ptr = POPPTR(ss,ix);
11747 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11748 intval = (int)POPINT(ss,ix);
11749 TOPINT(nss,ix) = intval;
11750 break;
11751 case SAVEt_LONG: /* long reference */
11752 ptr = POPPTR(ss,ix);
11753 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11754 longval = (long)POPLONG(ss,ix);
11755 TOPLONG(nss,ix) = longval;
11756 break;
11757 case SAVEt_I32: /* I32 reference */
88effcc9 11758 case SAVEt_COP_ARYBASE: /* call CopARYBASE_set */
1d7c1841
GS
11759 ptr = POPPTR(ss,ix);
11760 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
1ccabee8 11761 i = POPINT(ss,ix);
1d7c1841
GS
11762 TOPINT(nss,ix) = i;
11763 break;
11764 case SAVEt_IV: /* IV reference */
11765 ptr = POPPTR(ss,ix);
11766 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11767 iv = POPIV(ss,ix);
11768 TOPIV(nss,ix) = iv;
11769 break;
a41cc44e
NC
11770 case SAVEt_HPTR: /* HV* reference */
11771 case SAVEt_APTR: /* AV* reference */
1d7c1841
GS
11772 case SAVEt_SPTR: /* SV* reference */
11773 ptr = POPPTR(ss,ix);
11774 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 11775 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11776 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
11777 break;
11778 case SAVEt_VPTR: /* random* reference */
11779 ptr = POPPTR(ss,ix);
11780 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
65504245 11781 /* Fall through */
994d373a 11782 case SAVEt_INT_SMALL:
89abef21 11783 case SAVEt_I32_SMALL:
c9441fce 11784 case SAVEt_I16: /* I16 reference */
6c61c2d4 11785 case SAVEt_I8: /* I8 reference */
65504245 11786 case SAVEt_BOOL:
1d7c1841
GS
11787 ptr = POPPTR(ss,ix);
11788 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11789 break;
b03d03b0 11790 case SAVEt_GENERIC_PVREF: /* generic char* */
1d7c1841
GS
11791 case SAVEt_PPTR: /* char* reference */
11792 ptr = POPPTR(ss,ix);
11793 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11794 c = (char*)POPPTR(ss,ix);
11795 TOPPTR(nss,ix) = pv_dup(c);
11796 break;
1d7c1841 11797 case SAVEt_GP: /* scalar reference */
b9e00b79
LR
11798 gv = (const GV *)POPPTR(ss,ix);
11799 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
1d7c1841 11800 gp = (GP*)POPPTR(ss,ix);
d2d73c3e 11801 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
1d7c1841 11802 (void)GpREFCNT_inc(gp);
bbda9cad
VP
11803 i = POPINT(ss,ix);
11804 TOPINT(nss,ix) = i;
b9e00b79 11805 break;
1d7c1841
GS
11806 case SAVEt_FREEOP:
11807 ptr = POPPTR(ss,ix);
11808 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11809 /* these are assumed to be refcounted properly */
53c1dcc0 11810 OP *o;
1d7c1841
GS
11811 switch (((OP*)ptr)->op_type) {
11812 case OP_LEAVESUB:
11813 case OP_LEAVESUBLV:
11814 case OP_LEAVEEVAL:
11815 case OP_LEAVE:
11816 case OP_SCOPE:
11817 case OP_LEAVEWRITE:
e977893f
GS
11818 TOPPTR(nss,ix) = ptr;
11819 o = (OP*)ptr;
d3c72c2a 11820 OP_REFCNT_LOCK;
594cd643 11821 (void) OpREFCNT_inc(o);
d3c72c2a 11822 OP_REFCNT_UNLOCK;
1d7c1841
GS
11823 break;
11824 default:
5f66b61c 11825 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
11826 break;
11827 }
11828 }
11829 else
5f66b61c 11830 TOPPTR(nss,ix) = NULL;
1d7c1841 11831 break;
1d7c1841 11832 case SAVEt_DELETE:
1d193675 11833 hv = (const HV *)POPPTR(ss,ix);
d2d73c3e 11834 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
35d4f826
NC
11835 i = POPINT(ss,ix);
11836 TOPINT(nss,ix) = i;
8e41545f
NC
11837 /* Fall through */
11838 case SAVEt_FREEPV:
1d7c1841
GS
11839 c = (char*)POPPTR(ss,ix);
11840 TOPPTR(nss,ix) = pv_dup_inc(c);
35d4f826 11841 break;
3e07292d 11842 case SAVEt_STACK_POS: /* Position on Perl stack */
1d7c1841
GS
11843 i = POPINT(ss,ix);
11844 TOPINT(nss,ix) = i;
11845 break;
11846 case SAVEt_DESTRUCTOR:
11847 ptr = POPPTR(ss,ix);
11848 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11849 dptr = POPDPTR(ss,ix);
8141890a
JH
11850 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
11851 any_dup(FPTR2DPTR(void *, dptr),
11852 proto_perl));
1d7c1841
GS
11853 break;
11854 case SAVEt_DESTRUCTOR_X:
11855 ptr = POPPTR(ss,ix);
11856 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11857 dxptr = POPDXPTR(ss,ix);
8141890a
JH
11858 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
11859 any_dup(FPTR2DPTR(void *, dxptr),
11860 proto_perl));
1d7c1841
GS
11861 break;
11862 case SAVEt_REGCONTEXT:
11863 case SAVEt_ALLOC:
1be36ce0 11864 ix -= uv >> SAVE_TIGHT_SHIFT;
1d7c1841 11865 break;
1d7c1841 11866 case SAVEt_AELEM: /* array element */
daba3364 11867 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 11868 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
11869 i = POPINT(ss,ix);
11870 TOPINT(nss,ix) = i;
502c6561 11871 av = (const AV *)POPPTR(ss,ix);
d2d73c3e 11872 TOPPTR(nss,ix) = av_dup_inc(av, param);
1d7c1841 11873 break;
1d7c1841
GS
11874 case SAVEt_OP:
11875 ptr = POPPTR(ss,ix);
11876 TOPPTR(nss,ix) = ptr;
11877 break;
11878 case SAVEt_HINTS:
b3ca2e83 11879 ptr = POPPTR(ss,ix);
080ac856 11880 if (ptr) {
7b6dd8c3 11881 HINTS_REFCNT_LOCK;
080ac856 11882 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
7b6dd8c3
NC
11883 HINTS_REFCNT_UNLOCK;
11884 }
cbb1fbea 11885 TOPPTR(nss,ix) = ptr;
601cee3b
NC
11886 i = POPINT(ss,ix);
11887 TOPINT(nss,ix) = i;
a8f8b6a7 11888 if (i & HINT_LOCALIZE_HH) {
1d193675 11889 hv = (const HV *)POPPTR(ss,ix);
a8f8b6a7
NC
11890 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11891 }
1d7c1841 11892 break;
09edbca0 11893 case SAVEt_PADSV_AND_MORTALIZE:
c3564e5c
GS
11894 longval = (long)POPLONG(ss,ix);
11895 TOPLONG(nss,ix) = longval;
11896 ptr = POPPTR(ss,ix);
11897 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 11898 sv = (const SV *)POPPTR(ss,ix);
09edbca0 11899 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
c3564e5c 11900 break;
8bd2680e
MHM
11901 case SAVEt_SET_SVFLAGS:
11902 i = POPINT(ss,ix);
11903 TOPINT(nss,ix) = i;
11904 i = POPINT(ss,ix);
11905 TOPINT(nss,ix) = i;
daba3364 11906 sv = (const SV *)POPPTR(ss,ix);
8bd2680e
MHM
11907 TOPPTR(nss,ix) = sv_dup(sv, param);
11908 break;
5bfb7d0e
NC
11909 case SAVEt_RE_STATE:
11910 {
11911 const struct re_save_state *const old_state
11912 = (struct re_save_state *)
11913 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11914 struct re_save_state *const new_state
11915 = (struct re_save_state *)
11916 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11917
11918 Copy(old_state, new_state, 1, struct re_save_state);
11919 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
11920
11921 new_state->re_state_bostr
11922 = pv_dup(old_state->re_state_bostr);
11923 new_state->re_state_reginput
11924 = pv_dup(old_state->re_state_reginput);
5bfb7d0e
NC
11925 new_state->re_state_regeol
11926 = pv_dup(old_state->re_state_regeol);
f0ab9afb
NC
11927 new_state->re_state_regoffs
11928 = (regexp_paren_pair*)
11929 any_dup(old_state->re_state_regoffs, proto_perl);
5bfb7d0e 11930 new_state->re_state_reglastparen
11b79775
DD
11931 = (U32*) any_dup(old_state->re_state_reglastparen,
11932 proto_perl);
5bfb7d0e 11933 new_state->re_state_reglastcloseparen
11b79775 11934 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
5bfb7d0e 11935 proto_perl);
5bfb7d0e
NC
11936 /* XXX This just has to be broken. The old save_re_context
11937 code did SAVEGENERICPV(PL_reg_start_tmp);
11938 PL_reg_start_tmp is char **.
11939 Look above to what the dup code does for
11940 SAVEt_GENERIC_PVREF
11941 It can never have worked.
11942 So this is merely a faithful copy of the exiting bug: */
11943 new_state->re_state_reg_start_tmp
11944 = (char **) pv_dup((char *)
11945 old_state->re_state_reg_start_tmp);
11946 /* I assume that it only ever "worked" because no-one called
11947 (pseudo)fork while the regexp engine had re-entered itself.
11948 */
5bfb7d0e
NC
11949#ifdef PERL_OLD_COPY_ON_WRITE
11950 new_state->re_state_nrs
11951 = sv_dup(old_state->re_state_nrs, param);
11952#endif
11953 new_state->re_state_reg_magic
11b79775
DD
11954 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
11955 proto_perl);
5bfb7d0e 11956 new_state->re_state_reg_oldcurpm
11b79775
DD
11957 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
11958 proto_perl);
5bfb7d0e 11959 new_state->re_state_reg_curpm
11b79775
DD
11960 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
11961 proto_perl);
5bfb7d0e
NC
11962 new_state->re_state_reg_oldsaved
11963 = pv_dup(old_state->re_state_reg_oldsaved);
11964 new_state->re_state_reg_poscache
11965 = pv_dup(old_state->re_state_reg_poscache);
5bfb7d0e
NC
11966 new_state->re_state_reg_starttry
11967 = pv_dup(old_state->re_state_reg_starttry);
5bfb7d0e
NC
11968 break;
11969 }
68da3b2f
NC
11970 case SAVEt_COMPILE_WARNINGS:
11971 ptr = POPPTR(ss,ix);
11972 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
7b6dd8c3 11973 break;
7c197c94
DM
11974 case SAVEt_PARSER:
11975 ptr = POPPTR(ss,ix);
456084a8 11976 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
7c197c94 11977 break;
1d7c1841 11978 default:
147bc374
NC
11979 Perl_croak(aTHX_
11980 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
1d7c1841
GS
11981 }
11982 }
11983
bd81e77b
NC
11984 return nss;
11985}
11986
11987
11988/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11989 * flag to the result. This is done for each stash before cloning starts,
11990 * so we know which stashes want their objects cloned */
11991
11992static void
f30de749 11993do_mark_cloneable_stash(pTHX_ SV *const sv)
bd81e77b 11994{
1d193675 11995 const HEK * const hvname = HvNAME_HEK((const HV *)sv);
bd81e77b 11996 if (hvname) {
85fbaab2 11997 GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
bd81e77b
NC
11998 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11999 if (cloner && GvCV(cloner)) {
12000 dSP;
12001 UV status;
12002
12003 ENTER;
12004 SAVETMPS;
12005 PUSHMARK(SP);
6e449a3a 12006 mXPUSHs(newSVhek(hvname));
bd81e77b 12007 PUTBACK;
daba3364 12008 call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
bd81e77b
NC
12009 SPAGAIN;
12010 status = POPu;
12011 PUTBACK;
12012 FREETMPS;
12013 LEAVE;
12014 if (status)
12015 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12016 }
12017 }
12018}
12019
12020
12021
12022/*
12023=for apidoc perl_clone
12024
12025Create and return a new interpreter by cloning the current one.
12026
12027perl_clone takes these flags as parameters:
12028
12029CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12030without it we only clone the data and zero the stacks,
12031with it we copy the stacks and the new perl interpreter is
12032ready to run at the exact same point as the previous one.
12033The pseudo-fork code uses COPY_STACKS while the
878090d5 12034threads->create doesn't.
bd81e77b
NC
12035
12036CLONEf_KEEP_PTR_TABLE
12037perl_clone keeps a ptr_table with the pointer of the old
12038variable as a key and the new variable as a value,
12039this allows it to check if something has been cloned and not
12040clone it again but rather just use the value and increase the
12041refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
12042the ptr_table using the function
12043C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12044reason to keep it around is if you want to dup some of your own
12045variable who are outside the graph perl scans, example of this
12046code is in threads.xs create
12047
12048CLONEf_CLONE_HOST
12049This is a win32 thing, it is ignored on unix, it tells perls
12050win32host code (which is c++) to clone itself, this is needed on
12051win32 if you want to run two threads at the same time,
12052if you just want to do some stuff in a separate perl interpreter
12053and then throw it away and return to the original one,
12054you don't need to do anything.
12055
12056=cut
12057*/
12058
12059/* XXX the above needs expanding by someone who actually understands it ! */
12060EXTERN_C PerlInterpreter *
12061perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12062
12063PerlInterpreter *
12064perl_clone(PerlInterpreter *proto_perl, UV flags)
12065{
12066 dVAR;
12067#ifdef PERL_IMPLICIT_SYS
12068
7918f24d
NC
12069 PERL_ARGS_ASSERT_PERL_CLONE;
12070
bd81e77b
NC
12071 /* perlhost.h so we need to call into it
12072 to clone the host, CPerlHost should have a c interface, sky */
12073
12074 if (flags & CLONEf_CLONE_HOST) {
12075 return perl_clone_host(proto_perl,flags);
12076 }
12077 return perl_clone_using(proto_perl, flags,
12078 proto_perl->IMem,
12079 proto_perl->IMemShared,
12080 proto_perl->IMemParse,
12081 proto_perl->IEnv,
12082 proto_perl->IStdIO,
12083 proto_perl->ILIO,
12084 proto_perl->IDir,
12085 proto_perl->ISock,
12086 proto_perl->IProc);
12087}
12088
12089PerlInterpreter *
12090perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12091 struct IPerlMem* ipM, struct IPerlMem* ipMS,
12092 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12093 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12094 struct IPerlDir* ipD, struct IPerlSock* ipS,
12095 struct IPerlProc* ipP)
12096{
12097 /* XXX many of the string copies here can be optimized if they're
12098 * constants; they need to be allocated as common memory and just
12099 * their pointers copied. */
12100
12101 IV i;
12102 CLONE_PARAMS clone_params;
5f66b61c 12103 CLONE_PARAMS* const param = &clone_params;
bd81e77b 12104
5f66b61c 12105 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
7918f24d
NC
12106
12107 PERL_ARGS_ASSERT_PERL_CLONE_USING;
bd81e77b
NC
12108#else /* !PERL_IMPLICIT_SYS */
12109 IV i;
12110 CLONE_PARAMS clone_params;
12111 CLONE_PARAMS* param = &clone_params;
5f66b61c 12112 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
7918f24d
NC
12113
12114 PERL_ARGS_ASSERT_PERL_CLONE;
b59cce4c 12115#endif /* PERL_IMPLICIT_SYS */
7918f24d 12116
bd81e77b
NC
12117 /* for each stash, determine whether its objects should be cloned */
12118 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12119 PERL_SET_THX(my_perl);
12120
b59cce4c 12121#ifdef DEBUGGING
7e337ee0 12122 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
12123 PL_op = NULL;
12124 PL_curcop = NULL;
bd81e77b
NC
12125 PL_markstack = 0;
12126 PL_scopestack = 0;
cbdd5331 12127 PL_scopestack_name = 0;
bd81e77b
NC
12128 PL_savestack = 0;
12129 PL_savestack_ix = 0;
12130 PL_savestack_max = -1;
12131 PL_sig_pending = 0;
b8328dae 12132 PL_parser = NULL;
bd81e77b 12133 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
02d9cd5e 12134# ifdef DEBUG_LEAKING_SCALARS
4149198f 12135 PL_sv_serial = (((U32)my_perl >> 2) & 0xfff) * 1000000;
02d9cd5e 12136# endif
b59cce4c 12137#else /* !DEBUGGING */
bd81e77b 12138 Zero(my_perl, 1, PerlInterpreter);
b59cce4c 12139#endif /* DEBUGGING */
742421a6
DM
12140
12141#ifdef PERL_IMPLICIT_SYS
12142 /* host pointers */
12143 PL_Mem = ipM;
12144 PL_MemShared = ipMS;
12145 PL_MemParse = ipMP;
12146 PL_Env = ipE;
12147 PL_StdIO = ipStd;
12148 PL_LIO = ipLIO;
12149 PL_Dir = ipD;
12150 PL_Sock = ipS;
12151 PL_Proc = ipP;
12152#endif /* PERL_IMPLICIT_SYS */
12153
bd81e77b 12154 param->flags = flags;
f7abe70b
NC
12155 /* Nothing in the core code uses this, but we make it available to
12156 extensions (using mg_dup). */
bd81e77b 12157 param->proto_perl = proto_perl;
f7abe70b
NC
12158 /* Likely nothing will use this, but it is initialised to be consistent
12159 with Perl_clone_params_new(). */
12160 param->proto_perl = my_perl;
d08d57ef 12161 param->unreferenced = NULL;
bd81e77b 12162
7cb608b5
NC
12163 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12164
fdda85ca 12165 PL_body_arenas = NULL;
bd81e77b
NC
12166 Zero(&PL_body_roots, 1, PL_body_roots);
12167
12168 PL_nice_chunk = NULL;
12169 PL_nice_chunk_size = 0;
12170 PL_sv_count = 0;
12171 PL_sv_objcount = 0;
a0714e2c
SS
12172 PL_sv_root = NULL;
12173 PL_sv_arenaroot = NULL;
bd81e77b
NC
12174
12175 PL_debug = proto_perl->Idebug;
12176
12177 PL_hash_seed = proto_perl->Ihash_seed;
12178 PL_rehash_seed = proto_perl->Irehash_seed;
12179
12180#ifdef USE_REENTRANT_API
12181 /* XXX: things like -Dm will segfault here in perlio, but doing
12182 * PERL_SET_CONTEXT(proto_perl);
12183 * breaks too many other things
12184 */
12185 Perl_reentrant_init(aTHX);
12186#endif
12187
12188 /* create SV map for pointer relocation */
12189 PL_ptr_table = ptr_table_new();
12190
12191 /* initialize these special pointers as early as possible */
12192 SvANY(&PL_sv_undef) = NULL;
12193 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
12194 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
12195 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
12196
12197 SvANY(&PL_sv_no) = new_XPVNV();
12198 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
12199 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12200 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 12201 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
bd81e77b
NC
12202 SvCUR_set(&PL_sv_no, 0);
12203 SvLEN_set(&PL_sv_no, 1);
12204 SvIV_set(&PL_sv_no, 0);
12205 SvNV_set(&PL_sv_no, 0);
12206 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
12207
12208 SvANY(&PL_sv_yes) = new_XPVNV();
12209 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
12210 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12211 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 12212 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
bd81e77b
NC
12213 SvCUR_set(&PL_sv_yes, 1);
12214 SvLEN_set(&PL_sv_yes, 2);
12215 SvIV_set(&PL_sv_yes, 1);
12216 SvNV_set(&PL_sv_yes, 1);
12217 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
12218
a1f97a07
DM
12219 /* dbargs array probably holds garbage */
12220 PL_dbargs = NULL;
7fa38291 12221
bd81e77b
NC
12222 /* create (a non-shared!) shared string table */
12223 PL_strtab = newHV();
12224 HvSHAREKEYS_off(PL_strtab);
12225 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
12226 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
12227
12228 PL_compiling = proto_perl->Icompiling;
12229
12230 /* These two PVs will be free'd special way so must set them same way op.c does */
12231 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
12232 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
12233
12234 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
12235 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
12236
12237 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
72dc9ed5 12238 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
c28fe1ec 12239 if (PL_compiling.cop_hints_hash) {
cbb1fbea 12240 HINTS_REFCNT_LOCK;
c28fe1ec 12241 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
cbb1fbea
NC
12242 HINTS_REFCNT_UNLOCK;
12243 }
907b3e23 12244 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
5892a4d4
NC
12245#ifdef PERL_DEBUG_READONLY_OPS
12246 PL_slabs = NULL;
12247 PL_slab_count = 0;
12248#endif
bd81e77b
NC
12249
12250 /* pseudo environmental stuff */
12251 PL_origargc = proto_perl->Iorigargc;
12252 PL_origargv = proto_perl->Iorigargv;
12253
12254 param->stashes = newAV(); /* Setup array of objects to call clone on */
842c4123
NC
12255 /* This makes no difference to the implementation, as it always pushes
12256 and shifts pointers to other SVs without changing their reference
12257 count, with the array becoming empty before it is freed. However, it
12258 makes it conceptually clear what is going on, and will avoid some
12259 work inside av.c, filling slots between AvFILL() and AvMAX() with
12260 &PL_sv_undef, and SvREFCNT_dec()ing those. */
12261 AvREAL_off(param->stashes);
bd81e77b 12262
d08d57ef
NC
12263 if (!(flags & CLONEf_COPY_STACKS)) {
12264 param->unreferenced = newAV();
d08d57ef
NC
12265 }
12266
bd81e77b
NC
12267 /* Set tainting stuff before PerlIO_debug can possibly get called */
12268 PL_tainting = proto_perl->Itainting;
12269 PL_taint_warn = proto_perl->Itaint_warn;
12270
12271#ifdef PERLIO_LAYERS
12272 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
12273 PerlIO_clone(aTHX_ proto_perl, param);
12274#endif
12275
12276 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
12277 PL_incgv = gv_dup(proto_perl->Iincgv, param);
12278 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
12279 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
12280 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
12281 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
12282
12283 /* switches */
12284 PL_minus_c = proto_perl->Iminus_c;
12285 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
12286 PL_localpatches = proto_perl->Ilocalpatches;
12287 PL_splitstr = proto_perl->Isplitstr;
bd81e77b
NC
12288 PL_minus_n = proto_perl->Iminus_n;
12289 PL_minus_p = proto_perl->Iminus_p;
12290 PL_minus_l = proto_perl->Iminus_l;
12291 PL_minus_a = proto_perl->Iminus_a;
bc9b29db 12292 PL_minus_E = proto_perl->Iminus_E;
bd81e77b
NC
12293 PL_minus_F = proto_perl->Iminus_F;
12294 PL_doswitches = proto_perl->Idoswitches;
12295 PL_dowarn = proto_perl->Idowarn;
12296 PL_doextract = proto_perl->Idoextract;
12297 PL_sawampersand = proto_perl->Isawampersand;
12298 PL_unsafe = proto_perl->Iunsafe;
12299 PL_inplace = SAVEPV(proto_perl->Iinplace);
12300 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
12301 PL_perldb = proto_perl->Iperldb;
12302 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12303 PL_exit_flags = proto_perl->Iexit_flags;
12304
12305 /* magical thingies */
12306 /* XXX time(&PL_basetime) when asked for? */
12307 PL_basetime = proto_perl->Ibasetime;
12308 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
12309
12310 PL_maxsysfd = proto_perl->Imaxsysfd;
bd81e77b
NC
12311 PL_statusvalue = proto_perl->Istatusvalue;
12312#ifdef VMS
12313 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
12314#else
12315 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12316#endif
12317 PL_encoding = sv_dup(proto_perl->Iencoding, param);
12318
76f68e9b
MHM
12319 sv_setpvs(PERL_DEBUG_PAD(0), ""); /* For regex debugging. */
12320 sv_setpvs(PERL_DEBUG_PAD(1), ""); /* ext/re needs these */
12321 sv_setpvs(PERL_DEBUG_PAD(2), ""); /* even without DEBUGGING. */
bd81e77b 12322
84da74a7 12323
f9f4320a 12324 /* RE engine related */
84da74a7
YO
12325 Zero(&PL_reg_state, 1, struct re_save_state);
12326 PL_reginterp_cnt = 0;
12327 PL_regmatch_slab = NULL;
12328
bd81e77b 12329 /* Clone the regex array */
937c6efd
NC
12330 /* ORANGE FIXME for plugins, probably in the SV dup code.
12331 newSViv(PTR2IV(CALLREGDUPE(
12332 INT2PTR(REGEXP *, SvIVX(regex)), param))))
12333 */
12334 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
bd81e77b
NC
12335 PL_regex_pad = AvARRAY(PL_regex_padav);
12336
12337 /* shortcuts to various I/O objects */
e23d9e2f 12338 PL_ofsgv = gv_dup(proto_perl->Iofsgv, param);
bd81e77b
NC
12339 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
12340 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
12341 PL_defgv = gv_dup(proto_perl->Idefgv, param);
12342 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
12343 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
12344 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
1d7c1841 12345
bd81e77b
NC
12346 /* shortcuts to regexp stuff */
12347 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
9660f481 12348
bd81e77b
NC
12349 /* shortcuts to misc objects */
12350 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
9660f481 12351
bd81e77b
NC
12352 /* shortcuts to debugging objects */
12353 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
12354 PL_DBline = gv_dup(proto_perl->IDBline, param);
12355 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
12356 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
12357 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
12358 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
9660f481 12359
bd81e77b 12360 /* symbol tables */
907b3e23
DM
12361 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
12362 PL_curstash = hv_dup(proto_perl->Icurstash, param);
bd81e77b
NC
12363 PL_debstash = hv_dup(proto_perl->Idebstash, param);
12364 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
12365 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
12366
12367 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
12368 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
12369 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
3c10abe3
AG
12370 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
12371 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
bd81e77b
NC
12372 PL_endav = av_dup_inc(proto_perl->Iendav, param);
12373 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
12374 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
12375
12376 PL_sub_generation = proto_perl->Isub_generation;
dd69841b 12377 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
bd81e77b
NC
12378
12379 /* funky return mechanisms */
12380 PL_forkprocess = proto_perl->Iforkprocess;
12381
12382 /* subprocess state */
12383 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
12384
12385 /* internal state */
12386 PL_maxo = proto_perl->Imaxo;
12387 if (proto_perl->Iop_mask)
12388 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
12389 else
bd61b366 12390 PL_op_mask = NULL;
bd81e77b
NC
12391 /* PL_asserting = proto_perl->Iasserting; */
12392
12393 /* current interpreter roots */
12394 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
d3c72c2a 12395 OP_REFCNT_LOCK;
bd81e77b 12396 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
d3c72c2a 12397 OP_REFCNT_UNLOCK;
bd81e77b
NC
12398 PL_main_start = proto_perl->Imain_start;
12399 PL_eval_root = proto_perl->Ieval_root;
12400 PL_eval_start = proto_perl->Ieval_start;
12401
12402 /* runtime control stuff */
12403 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
bd81e77b
NC
12404
12405 PL_filemode = proto_perl->Ifilemode;
12406 PL_lastfd = proto_perl->Ilastfd;
12407 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
12408 PL_Argv = NULL;
bd61b366 12409 PL_Cmd = NULL;
bd81e77b 12410 PL_gensym = proto_perl->Igensym;
bd81e77b
NC
12411 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
12412 PL_laststatval = proto_perl->Ilaststatval;
12413 PL_laststype = proto_perl->Ilaststype;
a0714e2c 12414 PL_mess_sv = NULL;
bd81e77b
NC
12415
12416 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
12417
12418 /* interpreter atexit processing */
12419 PL_exitlistlen = proto_perl->Iexitlistlen;
12420 if (PL_exitlistlen) {
12421 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12422 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9660f481 12423 }
bd81e77b
NC
12424 else
12425 PL_exitlist = (PerlExitListEntry*)NULL;
f16dd614
DM
12426
12427 PL_my_cxt_size = proto_perl->Imy_cxt_size;
4c901e72 12428 if (PL_my_cxt_size) {
f16dd614
DM
12429 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
12430 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
53d44271 12431#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 12432 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
53d44271
JH
12433 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
12434#endif
f16dd614 12435 }
53d44271 12436 else {
f16dd614 12437 PL_my_cxt_list = (void**)NULL;
53d44271 12438#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 12439 PL_my_cxt_keys = (const char**)NULL;
53d44271
JH
12440#endif
12441 }
bd81e77b
NC
12442 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
12443 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
12444 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
12445
12446 PL_profiledata = NULL;
9660f481 12447
bd81e77b 12448 PL_compcv = cv_dup(proto_perl->Icompcv, param);
9660f481 12449
bd81e77b 12450 PAD_CLONE_VARS(proto_perl, param);
9660f481 12451
bd81e77b
NC
12452#ifdef HAVE_INTERP_INTERN
12453 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
12454#endif
645c22ef 12455
bd81e77b
NC
12456 /* more statics moved here */
12457 PL_generation = proto_perl->Igeneration;
12458 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
645c22ef 12459
bd81e77b
NC
12460 PL_in_clean_objs = proto_perl->Iin_clean_objs;
12461 PL_in_clean_all = proto_perl->Iin_clean_all;
6a78b4db 12462
bd81e77b
NC
12463 PL_uid = proto_perl->Iuid;
12464 PL_euid = proto_perl->Ieuid;
12465 PL_gid = proto_perl->Igid;
12466 PL_egid = proto_perl->Iegid;
12467 PL_nomemok = proto_perl->Inomemok;
12468 PL_an = proto_perl->Ian;
12469 PL_evalseq = proto_perl->Ievalseq;
12470 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
12471 PL_origalen = proto_perl->Iorigalen;
12472#ifdef PERL_USES_PL_PIDSTATUS
12473 PL_pidstatus = newHV(); /* XXX flag for cloning? */
12474#endif
12475 PL_osname = SAVEPV(proto_perl->Iosname);
12476 PL_sighandlerp = proto_perl->Isighandlerp;
6a78b4db 12477
bd81e77b 12478 PL_runops = proto_perl->Irunops;
6a78b4db 12479
199e78b7
DM
12480 PL_parser = parser_dup(proto_perl->Iparser, param);
12481
f0c5aa00
DM
12482 /* XXX this only works if the saved cop has already been cloned */
12483 if (proto_perl->Iparser) {
12484 PL_parser->saved_curcop = (COP*)any_dup(
12485 proto_perl->Iparser->saved_curcop,
12486 proto_perl);
12487 }
12488
bd81e77b
NC
12489 PL_subline = proto_perl->Isubline;
12490 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
c43294b8 12491
bd81e77b
NC
12492#ifdef FCRYPT
12493 PL_cryptseen = proto_perl->Icryptseen;
12494#endif
1d7c1841 12495
bd81e77b 12496 PL_hints = proto_perl->Ihints;
1d7c1841 12497
bd81e77b 12498 PL_amagic_generation = proto_perl->Iamagic_generation;
d2d73c3e 12499
bd81e77b
NC
12500#ifdef USE_LOCALE_COLLATE
12501 PL_collation_ix = proto_perl->Icollation_ix;
12502 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
12503 PL_collation_standard = proto_perl->Icollation_standard;
12504 PL_collxfrm_base = proto_perl->Icollxfrm_base;
12505 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
12506#endif /* USE_LOCALE_COLLATE */
1d7c1841 12507
bd81e77b
NC
12508#ifdef USE_LOCALE_NUMERIC
12509 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
12510 PL_numeric_standard = proto_perl->Inumeric_standard;
12511 PL_numeric_local = proto_perl->Inumeric_local;
12512 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
12513#endif /* !USE_LOCALE_NUMERIC */
1d7c1841 12514
bd81e77b
NC
12515 /* utf8 character classes */
12516 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
bd81e77b
NC
12517 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
12518 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
12519 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
12520 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
12521 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
12522 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
12523 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
12524 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
12525 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
12526 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
12527 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
12528 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
37e2e78e
KW
12529 PL_utf8_X_begin = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
12530 PL_utf8_X_extend = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
12531 PL_utf8_X_prepend = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
12532 PL_utf8_X_non_hangul = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
12533 PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
12534 PL_utf8_X_LV = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
12535 PL_utf8_X_LVT = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
12536 PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
12537 PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
12538 PL_utf8_X_LV_LVT_V = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
bd81e77b
NC
12539 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
12540 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
12541 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
12542 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
12543 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
12544 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
1d7c1841 12545
bd81e77b
NC
12546 /* Did the locale setup indicate UTF-8? */
12547 PL_utf8locale = proto_perl->Iutf8locale;
12548 /* Unicode features (see perlrun/-C) */
12549 PL_unicode = proto_perl->Iunicode;
1d7c1841 12550
bd81e77b
NC
12551 /* Pre-5.8 signals control */
12552 PL_signals = proto_perl->Isignals;
1d7c1841 12553
bd81e77b
NC
12554 /* times() ticks per second */
12555 PL_clocktick = proto_perl->Iclocktick;
1d7c1841 12556
bd81e77b
NC
12557 /* Recursion stopper for PerlIO_find_layer */
12558 PL_in_load_module = proto_perl->Iin_load_module;
8df990a8 12559
bd81e77b
NC
12560 /* sort() routine */
12561 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
e5dd39fc 12562
bd81e77b
NC
12563 /* Not really needed/useful since the reenrant_retint is "volatile",
12564 * but do it for consistency's sake. */
12565 PL_reentrant_retint = proto_perl->Ireentrant_retint;
1d7c1841 12566
bd81e77b
NC
12567 /* Hooks to shared SVs and locks. */
12568 PL_sharehook = proto_perl->Isharehook;
12569 PL_lockhook = proto_perl->Ilockhook;
12570 PL_unlockhook = proto_perl->Iunlockhook;
12571 PL_threadhook = proto_perl->Ithreadhook;
eba16661 12572 PL_destroyhook = proto_perl->Idestroyhook;
92f022bb 12573 PL_signalhook = proto_perl->Isignalhook;
1d7c1841 12574
bd81e77b
NC
12575#ifdef THREADS_HAVE_PIDS
12576 PL_ppid = proto_perl->Ippid;
12577#endif
1d7c1841 12578
bd81e77b 12579 /* swatch cache */
5c284bb0 12580 PL_last_swash_hv = NULL; /* reinits on demand */
bd81e77b
NC
12581 PL_last_swash_klen = 0;
12582 PL_last_swash_key[0]= '\0';
12583 PL_last_swash_tmps = (U8*)NULL;
12584 PL_last_swash_slen = 0;
1d7c1841 12585
bd81e77b
NC
12586 PL_glob_index = proto_perl->Iglob_index;
12587 PL_srand_called = proto_perl->Isrand_called;
05ec9bb3 12588
bd81e77b
NC
12589 if (proto_perl->Ipsig_pend) {
12590 Newxz(PL_psig_pend, SIG_SIZE, int);
12591 }
12592 else {
12593 PL_psig_pend = (int*)NULL;
12594 }
05ec9bb3 12595
d525a7b2
NC
12596 if (proto_perl->Ipsig_name) {
12597 Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
12598 sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
538f2e76 12599 param);
d525a7b2 12600 PL_psig_ptr = PL_psig_name + SIG_SIZE;
bd81e77b
NC
12601 }
12602 else {
12603 PL_psig_ptr = (SV**)NULL;
12604 PL_psig_name = (SV**)NULL;
12605 }
05ec9bb3 12606
907b3e23 12607 /* intrpvar.h stuff */
1d7c1841 12608
bd81e77b
NC
12609 if (flags & CLONEf_COPY_STACKS) {
12610 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
907b3e23
DM
12611 PL_tmps_ix = proto_perl->Itmps_ix;
12612 PL_tmps_max = proto_perl->Itmps_max;
12613 PL_tmps_floor = proto_perl->Itmps_floor;
e92c6be8 12614 Newx(PL_tmps_stack, PL_tmps_max, SV*);
1d8a41fe
JD
12615 sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
12616 PL_tmps_ix+1, param);
d2d73c3e 12617
bd81e77b 12618 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
907b3e23 12619 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
bd81e77b 12620 Newxz(PL_markstack, i, I32);
907b3e23
DM
12621 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
12622 - proto_perl->Imarkstack);
12623 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
12624 - proto_perl->Imarkstack);
12625 Copy(proto_perl->Imarkstack, PL_markstack,
bd81e77b 12626 PL_markstack_ptr - PL_markstack + 1, I32);
d2d73c3e 12627
bd81e77b
NC
12628 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
12629 * NOTE: unlike the others! */
907b3e23
DM
12630 PL_scopestack_ix = proto_perl->Iscopestack_ix;
12631 PL_scopestack_max = proto_perl->Iscopestack_max;
bd81e77b 12632 Newxz(PL_scopestack, PL_scopestack_max, I32);
907b3e23 12633 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
d419787a 12634
cbdd5331
JD
12635#ifdef DEBUGGING
12636 Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
12637 Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
12638#endif
bd81e77b 12639 /* NOTE: si_dup() looks at PL_markstack */
907b3e23 12640 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
d2d73c3e 12641
bd81e77b 12642 /* PL_curstack = PL_curstackinfo->si_stack; */
907b3e23
DM
12643 PL_curstack = av_dup(proto_perl->Icurstack, param);
12644 PL_mainstack = av_dup(proto_perl->Imainstack, param);
1d7c1841 12645
bd81e77b
NC
12646 /* next PUSHs() etc. set *(PL_stack_sp+1) */
12647 PL_stack_base = AvARRAY(PL_curstack);
907b3e23
DM
12648 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
12649 - proto_perl->Istack_base);
bd81e77b 12650 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
1d7c1841 12651
bd81e77b
NC
12652 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
12653 * NOTE: unlike the others! */
907b3e23
DM
12654 PL_savestack_ix = proto_perl->Isavestack_ix;
12655 PL_savestack_max = proto_perl->Isavestack_max;
bd81e77b
NC
12656 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
12657 PL_savestack = ss_dup(proto_perl, param);
12658 }
12659 else {
12660 init_stacks();
12661 ENTER; /* perl_destruct() wants to LEAVE; */
12662 }
1d7c1841 12663
907b3e23 12664 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
bd81e77b 12665 PL_top_env = &PL_start_env;
1d7c1841 12666
907b3e23 12667 PL_op = proto_perl->Iop;
4a4c6fe3 12668
a0714e2c 12669 PL_Sv = NULL;
bd81e77b 12670 PL_Xpv = (XPV*)NULL;
24792b8d 12671 my_perl->Ina = proto_perl->Ina;
1fcf4c12 12672
907b3e23
DM
12673 PL_statbuf = proto_perl->Istatbuf;
12674 PL_statcache = proto_perl->Istatcache;
12675 PL_statgv = gv_dup(proto_perl->Istatgv, param);
12676 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
bd81e77b 12677#ifdef HAS_TIMES
907b3e23 12678 PL_timesbuf = proto_perl->Itimesbuf;
bd81e77b 12679#endif
1d7c1841 12680
907b3e23
DM
12681 PL_tainted = proto_perl->Itainted;
12682 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
12683 PL_rs = sv_dup_inc(proto_perl->Irs, param);
12684 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
907b3e23
DM
12685 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
12686 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
12687 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
12688 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
12689 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
12690
febb3a6d 12691 PL_restartjmpenv = proto_perl->Irestartjmpenv;
907b3e23
DM
12692 PL_restartop = proto_perl->Irestartop;
12693 PL_in_eval = proto_perl->Iin_eval;
12694 PL_delaymagic = proto_perl->Idelaymagic;
12695 PL_dirty = proto_perl->Idirty;
12696 PL_localizing = proto_perl->Ilocalizing;
12697
12698 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
4608196e 12699 PL_hv_fetch_ent_mh = NULL;
907b3e23 12700 PL_modcount = proto_perl->Imodcount;
5f66b61c 12701 PL_lastgotoprobe = NULL;
907b3e23 12702 PL_dumpindent = proto_perl->Idumpindent;
1d7c1841 12703
907b3e23
DM
12704 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
12705 PL_sortstash = hv_dup(proto_perl->Isortstash, param);
12706 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param);
12707 PL_secondgv = gv_dup(proto_perl->Isecondgv, param);
bd61b366 12708 PL_efloatbuf = NULL; /* reinits on demand */
bd81e77b 12709 PL_efloatsize = 0; /* reinits on demand */
d2d73c3e 12710
bd81e77b 12711 /* regex stuff */
1d7c1841 12712
bd81e77b
NC
12713 PL_screamfirst = NULL;
12714 PL_screamnext = NULL;
12715 PL_maxscream = -1; /* reinits on demand */
a0714e2c 12716 PL_lastscream = NULL;
1d7c1841 12717
1d7c1841 12718
907b3e23 12719 PL_regdummy = proto_perl->Iregdummy;
bd81e77b
NC
12720 PL_colorset = 0; /* reinits PL_colors[] */
12721 /*PL_colors[6] = {0,0,0,0,0,0};*/
1d7c1841 12722
84da74a7 12723
1d7c1841 12724
bd81e77b 12725 /* Pluggable optimizer */
907b3e23 12726 PL_peepp = proto_perl->Ipeepp;
f37b8c3f
VP
12727 /* op_free() hook */
12728 PL_opfreehook = proto_perl->Iopfreehook;
1d7c1841 12729
bd81e77b 12730 PL_stashcache = newHV();
1d7c1841 12731
b7185faf 12732 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
907b3e23 12733 proto_perl->Iwatchaddr);
b7185faf
DM
12734 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
12735 if (PL_debug && PL_watchaddr) {
12736 PerlIO_printf(Perl_debug_log,
12737 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
907b3e23 12738 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
b7185faf
DM
12739 PTR2UV(PL_watchok));
12740 }
12741
a3e6e81e 12742 PL_registered_mros = hv_dup_inc(proto_perl->Iregistered_mros, param);
1930840b 12743 PL_blockhooks = av_dup_inc(proto_perl->Iblockhooks, param);
a3e6e81e 12744
bd81e77b
NC
12745 /* Call the ->CLONE method, if it exists, for each of the stashes
12746 identified by sv_dup() above.
12747 */
12748 while(av_len(param->stashes) != -1) {
85fbaab2 12749 HV* const stash = MUTABLE_HV(av_shift(param->stashes));
bd81e77b
NC
12750 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12751 if (cloner && GvCV(cloner)) {
12752 dSP;
12753 ENTER;
12754 SAVETMPS;
12755 PUSHMARK(SP);
6e449a3a 12756 mXPUSHs(newSVhek(HvNAME_HEK(stash)));
bd81e77b 12757 PUTBACK;
daba3364 12758 call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
bd81e77b
NC
12759 FREETMPS;
12760 LEAVE;
12761 }
1d7c1841 12762 }
1d7c1841 12763
b0b93b3c
DM
12764 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12765 ptr_table_free(PL_ptr_table);
12766 PL_ptr_table = NULL;
12767 }
12768
d08d57ef 12769 if (!(flags & CLONEf_COPY_STACKS)) {
e4295668 12770 unreferenced_to_tmp_stack(param->unreferenced);
d08d57ef 12771 }
b0b93b3c 12772
bd81e77b 12773 SvREFCNT_dec(param->stashes);
1d7c1841 12774
bd81e77b
NC
12775 /* orphaned? eg threads->new inside BEGIN or use */
12776 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
b37c2d43 12777 SvREFCNT_inc_simple_void(PL_compcv);
bd81e77b
NC
12778 SAVEFREESV(PL_compcv);
12779 }
dd2155a4 12780
bd81e77b
NC
12781 return my_perl;
12782}
1d7c1841 12783
e4295668
NC
12784static void
12785S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
12786{
12787 PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
12788
12789 if (AvFILLp(unreferenced) > -1) {
12790 SV **svp = AvARRAY(unreferenced);
12791 SV **const last = svp + AvFILLp(unreferenced);
12792 SSize_t count = 0;
12793
12794 do {
04518cc3 12795 if (SvREFCNT(*svp) == 1)
e4295668
NC
12796 ++count;
12797 } while (++svp <= last);
12798
12799 EXTEND_MORTAL(count);
12800 svp = AvARRAY(unreferenced);
12801
12802 do {
04518cc3
NC
12803 if (SvREFCNT(*svp) == 1) {
12804 /* Our reference is the only one to this SV. This means that
12805 in this thread, the scalar effectively has a 0 reference.
12806 That doesn't work (cleanup never happens), so donate our
12807 reference to it onto the save stack. */
12808 PL_tmps_stack[++PL_tmps_ix] = *svp;
12809 } else {
12810 /* As an optimisation, because we are already walking the
12811 entire array, instead of above doing either
12812 SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
12813 release our reference to the scalar, so that at the end of
12814 the array owns zero references to the scalars it happens to
12815 point to. We are effectively converting the array from
12816 AvREAL() on to AvREAL() off. This saves the av_clear()
12817 (triggered by the SvREFCNT_dec(unreferenced) below) from
12818 walking the array a second time. */
12819 SvREFCNT_dec(*svp);
12820 }
12821
e4295668 12822 } while (++svp <= last);
04518cc3 12823 AvREAL_off(unreferenced);
e4295668
NC
12824 }
12825 SvREFCNT_dec(unreferenced);
12826}
12827
f7abe70b
NC
12828void
12829Perl_clone_params_del(CLONE_PARAMS *param)
12830{
12831 PerlInterpreter *const was = PERL_GET_THX;
1db366cc
NC
12832 PerlInterpreter *const to = param->new_perl;
12833 dTHXa(to);
f7abe70b
NC
12834
12835 PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
12836
1db366cc
NC
12837 if (was != to) {
12838 PERL_SET_THX(to);
12839 }
f7abe70b 12840
1db366cc 12841 SvREFCNT_dec(param->stashes);
e4295668
NC
12842 if (param->unreferenced)
12843 unreferenced_to_tmp_stack(param->unreferenced);
f7abe70b 12844
1db366cc 12845 Safefree(param);
f7abe70b 12846
1db366cc
NC
12847 if (was != to) {
12848 PERL_SET_THX(was);
f7abe70b
NC
12849 }
12850}
12851
12852CLONE_PARAMS *
12853Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
12854{
12855 /* Need to play this game, as newAV() can call safesysmalloc(), and that
12856 does a dTHX; to get the context from thread local storage.
12857 FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
12858 a version that passes in my_perl. */
12859 PerlInterpreter *const was = PERL_GET_THX;
12860 CLONE_PARAMS *param;
f7abe70b
NC
12861
12862 PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
12863
12864 if (was != to) {
12865 PERL_SET_THX(to);
12866 }
12867
12868 /* Given that we've set the context, we can do this unshared. */
12869 Newx(param, 1, CLONE_PARAMS);
12870
12871 param->flags = 0;
12872 param->proto_perl = from;
1db366cc 12873 param->new_perl = to;
f7abe70b
NC
12874 param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
12875 AvREAL_off(param->stashes);
d08d57ef 12876 param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
f7abe70b 12877
f7abe70b
NC
12878 if (was != to) {
12879 PERL_SET_THX(was);
12880 }
12881 return param;
12882}
12883
bd81e77b 12884#endif /* USE_ITHREADS */
1d7c1841 12885
bd81e77b
NC
12886/*
12887=head1 Unicode Support
1d7c1841 12888
bd81e77b 12889=for apidoc sv_recode_to_utf8
1d7c1841 12890
bd81e77b
NC
12891The encoding is assumed to be an Encode object, on entry the PV
12892of the sv is assumed to be octets in that encoding, and the sv
12893will be converted into Unicode (and UTF-8).
1d7c1841 12894
bd81e77b
NC
12895If the sv already is UTF-8 (or if it is not POK), or if the encoding
12896is not a reference, nothing is done to the sv. If the encoding is not
12897an C<Encode::XS> Encoding object, bad things will happen.
12898(See F<lib/encoding.pm> and L<Encode>).
1d7c1841 12899
bd81e77b 12900The PV of the sv is returned.
1d7c1841 12901
bd81e77b 12902=cut */
1d7c1841 12903
bd81e77b
NC
12904char *
12905Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12906{
12907 dVAR;
7918f24d
NC
12908
12909 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
12910
bd81e77b
NC
12911 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12912 SV *uni;
12913 STRLEN len;
12914 const char *s;
12915 dSP;
12916 ENTER;
12917 SAVETMPS;
12918 save_re_context();
12919 PUSHMARK(sp);
12920 EXTEND(SP, 3);
12921 XPUSHs(encoding);
12922 XPUSHs(sv);
12923/*
12924 NI-S 2002/07/09
12925 Passing sv_yes is wrong - it needs to be or'ed set of constants
12926 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12927 remove converted chars from source.
1d7c1841 12928
bd81e77b 12929 Both will default the value - let them.
1d7c1841 12930
bd81e77b
NC
12931 XPUSHs(&PL_sv_yes);
12932*/
12933 PUTBACK;
12934 call_method("decode", G_SCALAR);
12935 SPAGAIN;
12936 uni = POPs;
12937 PUTBACK;
12938 s = SvPV_const(uni, len);
12939 if (s != SvPVX_const(sv)) {
12940 SvGROW(sv, len + 1);
12941 Move(s, SvPVX(sv), len + 1, char);
12942 SvCUR_set(sv, len);
12943 }
12944 FREETMPS;
12945 LEAVE;
12946 SvUTF8_on(sv);
12947 return SvPVX(sv);
389edf32 12948 }
bd81e77b
NC
12949 return SvPOKp(sv) ? SvPVX(sv) : NULL;
12950}
1d7c1841 12951
bd81e77b
NC
12952/*
12953=for apidoc sv_cat_decode
1d7c1841 12954
bd81e77b
NC
12955The encoding is assumed to be an Encode object, the PV of the ssv is
12956assumed to be octets in that encoding and decoding the input starts
12957from the position which (PV + *offset) pointed to. The dsv will be
12958concatenated the decoded UTF-8 string from ssv. Decoding will terminate
12959when the string tstr appears in decoding output or the input ends on
12960the PV of the ssv. The value which the offset points will be modified
12961to the last input position on the ssv.
1d7c1841 12962
bd81e77b 12963Returns TRUE if the terminator was found, else returns FALSE.
1d7c1841 12964
bd81e77b
NC
12965=cut */
12966
12967bool
12968Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12969 SV *ssv, int *offset, char *tstr, int tlen)
12970{
12971 dVAR;
12972 bool ret = FALSE;
7918f24d
NC
12973
12974 PERL_ARGS_ASSERT_SV_CAT_DECODE;
12975
bd81e77b
NC
12976 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12977 SV *offsv;
12978 dSP;
12979 ENTER;
12980 SAVETMPS;
12981 save_re_context();
12982 PUSHMARK(sp);
12983 EXTEND(SP, 6);
12984 XPUSHs(encoding);
12985 XPUSHs(dsv);
12986 XPUSHs(ssv);
6e449a3a
MHM
12987 offsv = newSViv(*offset);
12988 mXPUSHs(offsv);
12989 mXPUSHp(tstr, tlen);
bd81e77b
NC
12990 PUTBACK;
12991 call_method("cat_decode", G_SCALAR);
12992 SPAGAIN;
12993 ret = SvTRUE(TOPs);
12994 *offset = SvIV(offsv);
12995 PUTBACK;
12996 FREETMPS;
12997 LEAVE;
389edf32 12998 }
bd81e77b
NC
12999 else
13000 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13001 return ret;
1d7c1841 13002
bd81e77b 13003}
1d7c1841 13004
bd81e77b
NC
13005/* ---------------------------------------------------------------------
13006 *
13007 * support functions for report_uninit()
13008 */
1d7c1841 13009
bd81e77b
NC
13010/* the maxiumum size of array or hash where we will scan looking
13011 * for the undefined element that triggered the warning */
1d7c1841 13012
bd81e77b 13013#define FUV_MAX_SEARCH_SIZE 1000
1d7c1841 13014
bd81e77b
NC
13015/* Look for an entry in the hash whose value has the same SV as val;
13016 * If so, return a mortal copy of the key. */
1d7c1841 13017
bd81e77b 13018STATIC SV*
6c1b357c 13019S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
bd81e77b
NC
13020{
13021 dVAR;
13022 register HE **array;
13023 I32 i;
6c3182a5 13024
7918f24d
NC
13025 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13026
bd81e77b
NC
13027 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13028 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
a0714e2c 13029 return NULL;
6c3182a5 13030
bd81e77b 13031 array = HvARRAY(hv);
6c3182a5 13032
bd81e77b
NC
13033 for (i=HvMAX(hv); i>0; i--) {
13034 register HE *entry;
13035 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13036 if (HeVAL(entry) != val)
13037 continue;
13038 if ( HeVAL(entry) == &PL_sv_undef ||
13039 HeVAL(entry) == &PL_sv_placeholder)
13040 continue;
13041 if (!HeKEY(entry))
a0714e2c 13042 return NULL;
bd81e77b
NC
13043 if (HeKLEN(entry) == HEf_SVKEY)
13044 return sv_mortalcopy(HeKEY_sv(entry));
a663657d 13045 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
bd81e77b
NC
13046 }
13047 }
a0714e2c 13048 return NULL;
bd81e77b 13049}
6c3182a5 13050
bd81e77b
NC
13051/* Look for an entry in the array whose value has the same SV as val;
13052 * If so, return the index, otherwise return -1. */
6c3182a5 13053
bd81e77b 13054STATIC I32
6c1b357c 13055S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
bd81e77b 13056{
97aff369 13057 dVAR;
7918f24d
NC
13058
13059 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13060
bd81e77b
NC
13061 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13062 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13063 return -1;
57c6e6d2 13064
4a021917
AL
13065 if (val != &PL_sv_undef) {
13066 SV ** const svp = AvARRAY(av);
13067 I32 i;
13068
13069 for (i=AvFILLp(av); i>=0; i--)
13070 if (svp[i] == val)
13071 return i;
bd81e77b
NC
13072 }
13073 return -1;
13074}
15a5279a 13075
bd81e77b
NC
13076/* S_varname(): return the name of a variable, optionally with a subscript.
13077 * If gv is non-zero, use the name of that global, along with gvtype (one
13078 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13079 * targ. Depending on the value of the subscript_type flag, return:
13080 */
bce260cd 13081
bd81e77b
NC
13082#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
13083#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
13084#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
13085#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
bce260cd 13086
bd81e77b 13087STATIC SV*
6c1b357c
NC
13088S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13089 const SV *const keyname, I32 aindex, int subscript_type)
bd81e77b 13090{
1d7c1841 13091
bd81e77b
NC
13092 SV * const name = sv_newmortal();
13093 if (gv) {
13094 char buffer[2];
13095 buffer[0] = gvtype;
13096 buffer[1] = 0;
1d7c1841 13097
bd81e77b 13098 /* as gv_fullname4(), but add literal '^' for $^FOO names */
66fe0623 13099
bd81e77b 13100 gv_fullname4(name, gv, buffer, 0);
1d7c1841 13101
bd81e77b
NC
13102 if ((unsigned int)SvPVX(name)[1] <= 26) {
13103 buffer[0] = '^';
13104 buffer[1] = SvPVX(name)[1] + 'A' - 1;
1d7c1841 13105
bd81e77b
NC
13106 /* Swap the 1 unprintable control character for the 2 byte pretty
13107 version - ie substr($name, 1, 1) = $buffer; */
13108 sv_insert(name, 1, 1, buffer, 2);
1d7c1841 13109 }
bd81e77b
NC
13110 }
13111 else {
289b91d9 13112 CV * const cv = find_runcv(NULL);
bd81e77b
NC
13113 SV *sv;
13114 AV *av;
1d7c1841 13115
bd81e77b 13116 if (!cv || !CvPADLIST(cv))
a0714e2c 13117 return NULL;
502c6561 13118 av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
bd81e77b 13119 sv = *av_fetch(av, targ, FALSE);
f8503592 13120 sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
bd81e77b 13121 }
1d7c1841 13122
bd81e77b 13123 if (subscript_type == FUV_SUBSCRIPT_HASH) {
561b68a9 13124 SV * const sv = newSV(0);
bd81e77b
NC
13125 *SvPVX(name) = '$';
13126 Perl_sv_catpvf(aTHX_ name, "{%s}",
13127 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13128 SvREFCNT_dec(sv);
13129 }
13130 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13131 *SvPVX(name) = '$';
13132 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13133 }
84335ee9
NC
13134 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13135 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13136 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0);
13137 }
1d7c1841 13138
bd81e77b
NC
13139 return name;
13140}
1d7c1841 13141
1d7c1841 13142
bd81e77b
NC
13143/*
13144=for apidoc find_uninit_var
1d7c1841 13145
bd81e77b
NC
13146Find the name of the undefined variable (if any) that caused the operator o
13147to issue a "Use of uninitialized value" warning.
13148If match is true, only return a name if it's value matches uninit_sv.
13149So roughly speaking, if a unary operator (such as OP_COS) generates a
13150warning, then following the direct child of the op may yield an
13151OP_PADSV or OP_GV that gives the name of the undefined variable. On the
13152other hand, with OP_ADD there are two branches to follow, so we only print
13153the variable name if we get an exact match.
1d7c1841 13154
bd81e77b 13155The name is returned as a mortal SV.
1d7c1841 13156
bd81e77b
NC
13157Assumes that PL_op is the op that originally triggered the error, and that
13158PL_comppad/PL_curpad points to the currently executing pad.
1d7c1841 13159
bd81e77b
NC
13160=cut
13161*/
1d7c1841 13162
bd81e77b 13163STATIC SV *
6c1b357c
NC
13164S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13165 bool match)
bd81e77b
NC
13166{
13167 dVAR;
13168 SV *sv;
6c1b357c
NC
13169 const GV *gv;
13170 const OP *o, *o2, *kid;
1d7c1841 13171
bd81e77b
NC
13172 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13173 uninit_sv == &PL_sv_placeholder)))
a0714e2c 13174 return NULL;
1d7c1841 13175
bd81e77b 13176 switch (obase->op_type) {
1d7c1841 13177
bd81e77b
NC
13178 case OP_RV2AV:
13179 case OP_RV2HV:
13180 case OP_PADAV:
13181 case OP_PADHV:
13182 {
13183 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13184 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13185 I32 index = 0;
a0714e2c 13186 SV *keysv = NULL;
bd81e77b 13187 int subscript_type = FUV_SUBSCRIPT_WITHIN;
1d7c1841 13188
bd81e77b
NC
13189 if (pad) { /* @lex, %lex */
13190 sv = PAD_SVl(obase->op_targ);
a0714e2c 13191 gv = NULL;
bd81e77b
NC
13192 }
13193 else {
13194 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13195 /* @global, %global */
13196 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13197 if (!gv)
13198 break;
daba3364 13199 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
bd81e77b
NC
13200 }
13201 else /* @{expr}, %{expr} */
13202 return find_uninit_var(cUNOPx(obase)->op_first,
13203 uninit_sv, match);
13204 }
1d7c1841 13205
bd81e77b
NC
13206 /* attempt to find a match within the aggregate */
13207 if (hash) {
85fbaab2 13208 keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
13209 if (keysv)
13210 subscript_type = FUV_SUBSCRIPT_HASH;
13211 }
13212 else {
502c6561 13213 index = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
13214 if (index >= 0)
13215 subscript_type = FUV_SUBSCRIPT_ARRAY;
13216 }
1d7c1841 13217
bd81e77b
NC
13218 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13219 break;
1d7c1841 13220
bd81e77b
NC
13221 return varname(gv, hash ? '%' : '@', obase->op_targ,
13222 keysv, index, subscript_type);
13223 }
1d7c1841 13224
bd81e77b
NC
13225 case OP_PADSV:
13226 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13227 break;
a0714e2c
SS
13228 return varname(NULL, '$', obase->op_targ,
13229 NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 13230
bd81e77b
NC
13231 case OP_GVSV:
13232 gv = cGVOPx_gv(obase);
13233 if (!gv || (match && GvSV(gv) != uninit_sv))
13234 break;
a0714e2c 13235 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 13236
bd81e77b
NC
13237 case OP_AELEMFAST:
13238 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
13239 if (match) {
13240 SV **svp;
502c6561 13241 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
bd81e77b
NC
13242 if (!av || SvRMAGICAL(av))
13243 break;
13244 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13245 if (!svp || *svp != uninit_sv)
13246 break;
13247 }
a0714e2c
SS
13248 return varname(NULL, '$', obase->op_targ,
13249 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13250 }
13251 else {
13252 gv = cGVOPx_gv(obase);
13253 if (!gv)
13254 break;
13255 if (match) {
13256 SV **svp;
6c1b357c 13257 AV *const av = GvAV(gv);
bd81e77b
NC
13258 if (!av || SvRMAGICAL(av))
13259 break;
13260 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13261 if (!svp || *svp != uninit_sv)
13262 break;
13263 }
13264 return varname(gv, '$', 0,
a0714e2c 13265 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13266 }
13267 break;
1d7c1841 13268
bd81e77b
NC
13269 case OP_EXISTS:
13270 o = cUNOPx(obase)->op_first;
13271 if (!o || o->op_type != OP_NULL ||
13272 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
13273 break;
13274 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
a2efc822 13275
bd81e77b
NC
13276 case OP_AELEM:
13277 case OP_HELEM:
13278 if (PL_op == obase)
13279 /* $a[uninit_expr] or $h{uninit_expr} */
13280 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
081fc587 13281
a0714e2c 13282 gv = NULL;
bd81e77b
NC
13283 o = cBINOPx(obase)->op_first;
13284 kid = cBINOPx(obase)->op_last;
8cf8f3d1 13285
bd81e77b 13286 /* get the av or hv, and optionally the gv */
a0714e2c 13287 sv = NULL;
bd81e77b
NC
13288 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
13289 sv = PAD_SV(o->op_targ);
13290 }
13291 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
13292 && cUNOPo->op_first->op_type == OP_GV)
13293 {
13294 gv = cGVOPx_gv(cUNOPo->op_first);
13295 if (!gv)
13296 break;
daba3364
NC
13297 sv = o->op_type
13298 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
bd81e77b
NC
13299 }
13300 if (!sv)
13301 break;
13302
13303 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
13304 /* index is constant */
13305 if (match) {
13306 if (SvMAGICAL(sv))
13307 break;
13308 if (obase->op_type == OP_HELEM) {
85fbaab2 13309 HE* he = hv_fetch_ent(MUTABLE_HV(sv), cSVOPx_sv(kid), 0, 0);
bd81e77b
NC
13310 if (!he || HeVAL(he) != uninit_sv)
13311 break;
13312 }
13313 else {
502c6561 13314 SV * const * const svp = av_fetch(MUTABLE_AV(sv), SvIV(cSVOPx_sv(kid)), FALSE);
bd81e77b
NC
13315 if (!svp || *svp != uninit_sv)
13316 break;
13317 }
13318 }
13319 if (obase->op_type == OP_HELEM)
13320 return varname(gv, '%', o->op_targ,
13321 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
13322 else
a0714e2c 13323 return varname(gv, '@', o->op_targ, NULL,
bd81e77b 13324 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13325 }
13326 else {
13327 /* index is an expression;
13328 * attempt to find a match within the aggregate */
13329 if (obase->op_type == OP_HELEM) {
85fbaab2 13330 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
13331 if (keysv)
13332 return varname(gv, '%', o->op_targ,
13333 keysv, 0, FUV_SUBSCRIPT_HASH);
13334 }
13335 else {
502c6561
NC
13336 const I32 index
13337 = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
13338 if (index >= 0)
13339 return varname(gv, '@', o->op_targ,
a0714e2c 13340 NULL, index, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13341 }
13342 if (match)
13343 break;
13344 return varname(gv,
13345 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
13346 ? '@' : '%',
a0714e2c 13347 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
f284b03f 13348 }
bd81e77b 13349 break;
dc507217 13350
bd81e77b
NC
13351 case OP_AASSIGN:
13352 /* only examine RHS */
13353 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
6d26897e 13354
bd81e77b
NC
13355 case OP_OPEN:
13356 o = cUNOPx(obase)->op_first;
13357 if (o->op_type == OP_PUSHMARK)
13358 o = o->op_sibling;
1d7c1841 13359
bd81e77b
NC
13360 if (!o->op_sibling) {
13361 /* one-arg version of open is highly magical */
a0ae6670 13362
bd81e77b
NC
13363 if (o->op_type == OP_GV) { /* open FOO; */
13364 gv = cGVOPx_gv(o);
13365 if (match && GvSV(gv) != uninit_sv)
13366 break;
13367 return varname(gv, '$', 0,
a0714e2c 13368 NULL, 0, FUV_SUBSCRIPT_NONE);
bd81e77b
NC
13369 }
13370 /* other possibilities not handled are:
13371 * open $x; or open my $x; should return '${*$x}'
13372 * open expr; should return '$'.expr ideally
13373 */
13374 break;
13375 }
13376 goto do_op;
ccfc67b7 13377
bd81e77b
NC
13378 /* ops where $_ may be an implicit arg */
13379 case OP_TRANS:
13380 case OP_SUBST:
13381 case OP_MATCH:
13382 if ( !(obase->op_flags & OPf_STACKED)) {
13383 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
13384 ? PAD_SVl(obase->op_targ)
13385 : DEFSV))
13386 {
13387 sv = sv_newmortal();
76f68e9b 13388 sv_setpvs(sv, "$_");
bd81e77b
NC
13389 return sv;
13390 }
13391 }
13392 goto do_op;
9f4817db 13393
bd81e77b
NC
13394 case OP_PRTF:
13395 case OP_PRINT:
3ef1310e 13396 case OP_SAY:
fa8d1836 13397 match = 1; /* print etc can return undef on defined args */
bd81e77b
NC
13398 /* skip filehandle as it can't produce 'undef' warning */
13399 o = cUNOPx(obase)->op_first;
13400 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
13401 o = o->op_sibling->op_sibling;
13402 goto do_op2;
9f4817db 13403
9f4817db 13404
50edf520 13405 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
bd81e77b 13406 case OP_RV2SV:
8b0dea50
DM
13407 case OP_CUSTOM: /* XS or custom code could trigger random warnings */
13408
13409 /* the following ops are capable of returning PL_sv_undef even for
13410 * defined arg(s) */
13411
13412 case OP_BACKTICK:
13413 case OP_PIPE_OP:
13414 case OP_FILENO:
13415 case OP_BINMODE:
13416 case OP_TIED:
13417 case OP_GETC:
13418 case OP_SYSREAD:
13419 case OP_SEND:
13420 case OP_IOCTL:
13421 case OP_SOCKET:
13422 case OP_SOCKPAIR:
13423 case OP_BIND:
13424 case OP_CONNECT:
13425 case OP_LISTEN:
13426 case OP_ACCEPT:
13427 case OP_SHUTDOWN:
13428 case OP_SSOCKOPT:
13429 case OP_GETPEERNAME:
13430 case OP_FTRREAD:
13431 case OP_FTRWRITE:
13432 case OP_FTREXEC:
13433 case OP_FTROWNED:
13434 case OP_FTEREAD:
13435 case OP_FTEWRITE:
13436 case OP_FTEEXEC:
13437 case OP_FTEOWNED:
13438 case OP_FTIS:
13439 case OP_FTZERO:
13440 case OP_FTSIZE:
13441 case OP_FTFILE:
13442 case OP_FTDIR:
13443 case OP_FTLINK:
13444 case OP_FTPIPE:
13445 case OP_FTSOCK:
13446 case OP_FTBLK:
13447 case OP_FTCHR:
13448 case OP_FTTTY:
13449 case OP_FTSUID:
13450 case OP_FTSGID:
13451 case OP_FTSVTX:
13452 case OP_FTTEXT:
13453 case OP_FTBINARY:
13454 case OP_FTMTIME:
13455 case OP_FTATIME:
13456 case OP_FTCTIME:
13457 case OP_READLINK:
13458 case OP_OPEN_DIR:
13459 case OP_READDIR:
13460 case OP_TELLDIR:
13461 case OP_SEEKDIR:
13462 case OP_REWINDDIR:
13463 case OP_CLOSEDIR:
13464 case OP_GMTIME:
13465 case OP_ALARM:
13466 case OP_SEMGET:
13467 case OP_GETLOGIN:
13468 case OP_UNDEF:
13469 case OP_SUBSTR:
13470 case OP_AEACH:
13471 case OP_EACH:
13472 case OP_SORT:
13473 case OP_CALLER:
13474 case OP_DOFILE:
fa8d1836
DM
13475 case OP_PROTOTYPE:
13476 case OP_NCMP:
13477 case OP_SMARTMATCH:
13478 case OP_UNPACK:
13479 case OP_SYSOPEN:
13480 case OP_SYSSEEK:
8b0dea50 13481 match = 1;
bd81e77b 13482 goto do_op;
9f4817db 13483
7697b7e7
DM
13484 case OP_ENTERSUB:
13485 case OP_GOTO:
a2fb3d36
DM
13486 /* XXX tmp hack: these two may call an XS sub, and currently
13487 XS subs don't have a SUB entry on the context stack, so CV and
13488 pad determination goes wrong, and BAD things happen. So, just
13489 don't try to determine the value under those circumstances.
7697b7e7
DM
13490 Need a better fix at dome point. DAPM 11/2007 */
13491 break;
13492
4f187fc9
VP
13493 case OP_FLIP:
13494 case OP_FLOP:
13495 {
13496 GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
13497 if (gv && GvSV(gv) == uninit_sv)
13498 return newSVpvs_flags("$.", SVs_TEMP);
13499 goto do_op;
13500 }
8b0dea50 13501
cc4b8646
DM
13502 case OP_POS:
13503 /* def-ness of rval pos() is independent of the def-ness of its arg */
13504 if ( !(obase->op_flags & OPf_MOD))
13505 break;
13506
bd81e77b
NC
13507 case OP_SCHOMP:
13508 case OP_CHOMP:
13509 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
84bafc02 13510 return newSVpvs_flags("${$/}", SVs_TEMP);
5f66b61c 13511 /*FALLTHROUGH*/
5d170f3a 13512
bd81e77b
NC
13513 default:
13514 do_op:
13515 if (!(obase->op_flags & OPf_KIDS))
13516 break;
13517 o = cUNOPx(obase)->op_first;
13518
13519 do_op2:
13520 if (!o)
13521 break;
f9893866 13522
bd81e77b
NC
13523 /* if all except one arg are constant, or have no side-effects,
13524 * or are optimized away, then it's unambiguous */
5f66b61c 13525 o2 = NULL;
bd81e77b 13526 for (kid=o; kid; kid = kid->op_sibling) {
e15d5972
AL
13527 if (kid) {
13528 const OPCODE type = kid->op_type;
13529 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
13530 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
13531 || (type == OP_PUSHMARK)
bd81e77b 13532 )
bd81e77b 13533 continue;
e15d5972 13534 }
bd81e77b 13535 if (o2) { /* more than one found */
5f66b61c 13536 o2 = NULL;
bd81e77b
NC
13537 break;
13538 }
13539 o2 = kid;
13540 }
13541 if (o2)
13542 return find_uninit_var(o2, uninit_sv, match);
7a5fa8a2 13543
bd81e77b
NC
13544 /* scan all args */
13545 while (o) {
13546 sv = find_uninit_var(o, uninit_sv, 1);
13547 if (sv)
13548 return sv;
13549 o = o->op_sibling;
d0063567 13550 }
bd81e77b 13551 break;
f9893866 13552 }
a0714e2c 13553 return NULL;
9f4817db
JH
13554}
13555
220e2d4e 13556
bd81e77b
NC
13557/*
13558=for apidoc report_uninit
68795e93 13559
bd81e77b 13560Print appropriate "Use of uninitialized variable" warning
220e2d4e 13561
bd81e77b
NC
13562=cut
13563*/
220e2d4e 13564
bd81e77b 13565void
b3dbd76e 13566Perl_report_uninit(pTHX_ const SV *uninit_sv)
220e2d4e 13567{
97aff369 13568 dVAR;
bd81e77b 13569 if (PL_op) {
a0714e2c 13570 SV* varname = NULL;
bd81e77b
NC
13571 if (uninit_sv) {
13572 varname = find_uninit_var(PL_op, uninit_sv,0);
13573 if (varname)
13574 sv_insert(varname, 0, 0, " ", 1);
13575 }
13576 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13577 varname ? SvPV_nolen_const(varname) : "",
13578 " in ", OP_DESC(PL_op));
220e2d4e 13579 }
a73e8557 13580 else
bd81e77b
NC
13581 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13582 "", "", "");
220e2d4e 13583}
f9893866 13584
241d1a3b
NC
13585/*
13586 * Local variables:
13587 * c-indentation-style: bsd
13588 * c-basic-offset: 4
13589 * indent-tabs-mode: t
13590 * End:
13591 *
37442d52
RGS
13592 * ex: set ts=8 sts=4 sw=4 noet:
13593 */