This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
gv.c: Added gv_fetchmethod_(sv|pv|pvn)_flags.
[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
07208e09 35#ifndef HAS_C99
4b2d6671 36# if __STDC_VERSION__ >= 199901L && !defined(VMS)
07208e09
CS
37# define HAS_C99 1
38# endif
39#endif
40#if HAS_C99
41# include <stdint.h>
42#endif
43
51371543 44#define FCALL *f
2c5424a7 45
2f8ed50e
OS
46#ifdef __Lynx__
47/* Missing proto on LynxOS */
48 char *gconvert(double, int, int, char *);
49#endif
50
e23c8137 51#ifdef PERL_UTF8_CACHE_ASSERT
ab455f60 52/* if adding more checks watch out for the following tests:
e23c8137
JH
53 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54 * lib/utf8.t lib/Unicode/Collate/t/index.t
55 * --jhi
56 */
6f207bd3 57# define ASSERT_UTF8_CACHE(cache) \
ab455f60
NC
58 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59 assert((cache)[2] <= (cache)[3]); \
60 assert((cache)[3] <= (cache)[1]);} \
61 } STMT_END
e23c8137 62#else
6f207bd3 63# define ASSERT_UTF8_CACHE(cache) NOOP
e23c8137
JH
64#endif
65
f8c7b90f 66#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 67#define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
607fa7f2 68#define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
b5ccf5f2 69/* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
765f542d 70 on-write. */
765f542d 71#endif
645c22ef
DM
72
73/* ============================================================================
74
75=head1 Allocation and deallocation of SVs.
76
d2a0f284
JC
77An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
78sv, av, hv...) contains type and reference count information, and for
79many types, a pointer to the body (struct xrv, xpv, xpviv...), which
80contains fields specific to each type. Some types store all they need
81in the head, so don't have a body.
82
486ec47a 83In all but the most memory-paranoid configurations (ex: PURIFY), heads
d2a0f284
JC
84and bodies are allocated out of arenas, which by default are
85approximately 4K chunks of memory parcelled up into N heads or bodies.
93e68bfb
JC
86Sv-bodies are allocated by their sv-type, guaranteeing size
87consistency needed to allocate safely from arrays.
88
d2a0f284
JC
89For SV-heads, the first slot in each arena is reserved, and holds a
90link to the next arena, some flags, and a note of the number of slots.
91Snaked through each arena chain is a linked list of free items; when
92this becomes empty, an extra arena is allocated and divided up into N
93items which are threaded into the free list.
94
95SV-bodies are similar, but they use arena-sets by default, which
96separate the link and info from the arena itself, and reclaim the 1st
97slot in the arena. SV-bodies are further described later.
645c22ef
DM
98
99The following global variables are associated with arenas:
100
101 PL_sv_arenaroot pointer to list of SV arenas
102 PL_sv_root pointer to list of free SV structures
103
d2a0f284
JC
104 PL_body_arenas head of linked-list of body arenas
105 PL_body_roots[] array of pointers to list of free bodies of svtype
106 arrays are indexed by the svtype needed
93e68bfb 107
d2a0f284
JC
108A few special SV heads are not allocated from an arena, but are
109instead directly created in the interpreter structure, eg PL_sv_undef.
93e68bfb
JC
110The size of arenas can be changed from the default by setting
111PERL_ARENA_SIZE appropriately at compile time.
645c22ef
DM
112
113The SV arena serves the secondary purpose of allowing still-live SVs
114to be located and destroyed during final cleanup.
115
116At the lowest level, the macros new_SV() and del_SV() grab and free
117an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
118to return the SV to the free list with error checking.) new_SV() calls
119more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
120SVs in the free list have their SvTYPE field set to all ones.
121
ff276b08 122At the time of very final cleanup, sv_free_arenas() is called from
645c22ef 123perl_destruct() to physically free all the arenas allocated since the
6a93a7e5 124start of the interpreter.
645c22ef 125
645c22ef
DM
126The function visit() scans the SV arenas list, and calls a specified
127function for each SV it finds which is still live - ie which has an SvTYPE
128other than all 1's, and a non-zero SvREFCNT. visit() is used by the
129following functions (specified as [function that calls visit()] / [function
130called by visit() for each SV]):
131
132 sv_report_used() / do_report_used()
f2524eef 133 dump all remaining SVs (debugging aid)
645c22ef 134
e4487e9b
DM
135 sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
136 do_clean_named_io_objs()
645c22ef 137 Attempt to free all objects pointed to by RVs,
c3b19b5c 138 and try to do the same for all objects indirectly
645c22ef
DM
139 referenced by typeglobs too. Called once from
140 perl_destruct(), prior to calling sv_clean_all()
141 below.
142
143 sv_clean_all() / do_clean_all()
144 SvREFCNT_dec(sv) each remaining SV, possibly
145 triggering an sv_free(). It also sets the
146 SVf_BREAK flag on the SV to indicate that the
147 refcnt has been artificially lowered, and thus
148 stopping sv_free() from giving spurious warnings
149 about SVs which unexpectedly have a refcnt
150 of zero. called repeatedly from perl_destruct()
151 until there are no SVs left.
152
93e68bfb 153=head2 Arena allocator API Summary
645c22ef
DM
154
155Private API to rest of sv.c
156
157 new_SV(), del_SV(),
158
df0f0429 159 new_XPVNV(), del_XPVGV(),
645c22ef
DM
160 etc
161
162Public API:
163
8cf8f3d1 164 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
645c22ef 165
645c22ef
DM
166=cut
167
3e8320cc 168 * ========================================================================= */
645c22ef 169
4561caa4
CS
170/*
171 * "A time to plant, and a time to uproot what was planted..."
172 */
173
d7a2c63c
MHM
174#ifdef PERL_MEM_LOG
175# define MEM_LOG_NEW_SV(sv, file, line, func) \
176 Perl_mem_log_new_sv(sv, file, line, func)
177# define MEM_LOG_DEL_SV(sv, file, line, func) \
178 Perl_mem_log_del_sv(sv, file, line, func)
179#else
180# define MEM_LOG_NEW_SV(sv, file, line, func) NOOP
181# define MEM_LOG_DEL_SV(sv, file, line, func) NOOP
182#endif
183
fd0854ff 184#ifdef DEBUG_LEAKING_SCALARS
22162ca8 185# define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
d7a2c63c
MHM
186# define DEBUG_SV_SERIAL(sv) \
187 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n", \
188 PTR2UV(sv), (long)(sv)->sv_debug_serial))
fd0854ff
DM
189#else
190# define FREE_SV_DEBUG_FILE(sv)
d7a2c63c 191# define DEBUG_SV_SERIAL(sv) NOOP
fd0854ff
DM
192#endif
193
48614a46
NC
194#ifdef PERL_POISON
195# define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
daba3364 196# define SvARENA_CHAIN_SET(sv,val) (sv)->sv_u.svu_rv = MUTABLE_SV((val))
48614a46
NC
197/* Whilst I'd love to do this, it seems that things like to check on
198 unreferenced scalars
7e337ee0 199# define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
48614a46 200*/
7e337ee0
JH
201# define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
202 PoisonNew(&SvREFCNT(sv), 1, U32)
48614a46
NC
203#else
204# define SvARENA_CHAIN(sv) SvANY(sv)
3eef1deb 205# define SvARENA_CHAIN_SET(sv,val) SvANY(sv) = (void *)(val)
48614a46
NC
206# define POSION_SV_HEAD(sv)
207#endif
208
990198f0
DM
209/* Mark an SV head as unused, and add to free list.
210 *
211 * If SVf_BREAK is set, skip adding it to the free list, as this SV had
212 * its refcount artificially decremented during global destruction, so
213 * there may be dangling pointers to it. The last thing we want in that
214 * case is for it to be reused. */
215
053fc874
GS
216#define plant_SV(p) \
217 STMT_START { \
990198f0 218 const U32 old_flags = SvFLAGS(p); \
d7a2c63c
MHM
219 MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__); \
220 DEBUG_SV_SERIAL(p); \
fd0854ff 221 FREE_SV_DEBUG_FILE(p); \
48614a46 222 POSION_SV_HEAD(p); \
053fc874 223 SvFLAGS(p) = SVTYPEMASK; \
990198f0 224 if (!(old_flags & SVf_BREAK)) { \
3eef1deb 225 SvARENA_CHAIN_SET(p, PL_sv_root); \
990198f0
DM
226 PL_sv_root = (p); \
227 } \
053fc874
GS
228 --PL_sv_count; \
229 } STMT_END
a0d0e21e 230
053fc874
GS
231#define uproot_SV(p) \
232 STMT_START { \
233 (p) = PL_sv_root; \
daba3364 234 PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p)); \
053fc874
GS
235 ++PL_sv_count; \
236 } STMT_END
237
645c22ef 238
cac9b346
NC
239/* make some more SVs by adding another arena */
240
cac9b346
NC
241STATIC SV*
242S_more_sv(pTHX)
243{
97aff369 244 dVAR;
cac9b346 245 SV* sv;
9a87bd09
NC
246 char *chunk; /* must use New here to match call to */
247 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
248 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
cac9b346
NC
249 uproot_SV(sv);
250 return sv;
251}
252
645c22ef
DM
253/* new_SV(): return a new, empty SV head */
254
eba0f806
DM
255#ifdef DEBUG_LEAKING_SCALARS
256/* provide a real function for a debugger to play with */
257STATIC SV*
d7a2c63c 258S_new_SV(pTHX_ const char *file, int line, const char *func)
eba0f806
DM
259{
260 SV* sv;
261
eba0f806
DM
262 if (PL_sv_root)
263 uproot_SV(sv);
264 else
cac9b346 265 sv = S_more_sv(aTHX);
eba0f806
DM
266 SvANY(sv) = 0;
267 SvREFCNT(sv) = 1;
268 SvFLAGS(sv) = 0;
fd0854ff 269 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
e385c3bf
DM
270 sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
271 ? PL_parser->copline
272 : PL_curcop
f24aceb1
DM
273 ? CopLINE(PL_curcop)
274 : 0
e385c3bf 275 );
fd0854ff 276 sv->sv_debug_inpad = 0;
cd676548 277 sv->sv_debug_parent = NULL;
fd0854ff 278 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
d7a2c63c
MHM
279
280 sv->sv_debug_serial = PL_sv_serial++;
281
282 MEM_LOG_NEW_SV(sv, file, line, func);
283 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
284 PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
285
eba0f806
DM
286 return sv;
287}
d7a2c63c 288# define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
eba0f806
DM
289
290#else
291# define new_SV(p) \
053fc874 292 STMT_START { \
053fc874
GS
293 if (PL_sv_root) \
294 uproot_SV(p); \
295 else \
cac9b346 296 (p) = S_more_sv(aTHX); \
053fc874
GS
297 SvANY(p) = 0; \
298 SvREFCNT(p) = 1; \
299 SvFLAGS(p) = 0; \
d7a2c63c 300 MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__); \
053fc874 301 } STMT_END
eba0f806 302#endif
463ee0b2 303
645c22ef
DM
304
305/* del_SV(): return an empty SV head to the free list */
306
a0d0e21e 307#ifdef DEBUGGING
4561caa4 308
053fc874
GS
309#define del_SV(p) \
310 STMT_START { \
aea4f609 311 if (DEBUG_D_TEST) \
053fc874
GS
312 del_sv(p); \
313 else \
314 plant_SV(p); \
053fc874 315 } STMT_END
a0d0e21e 316
76e3520e 317STATIC void
cea2e8a9 318S_del_sv(pTHX_ SV *p)
463ee0b2 319{
97aff369 320 dVAR;
7918f24d
NC
321
322 PERL_ARGS_ASSERT_DEL_SV;
323
aea4f609 324 if (DEBUG_D_TEST) {
4633a7c4 325 SV* sva;
a3b680e6 326 bool ok = 0;
daba3364 327 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
53c1dcc0
AL
328 const SV * const sv = sva + 1;
329 const SV * const svend = &sva[SvREFCNT(sva)];
c0ff570e 330 if (p >= sv && p < svend) {
a0d0e21e 331 ok = 1;
c0ff570e
NC
332 break;
333 }
a0d0e21e
LW
334 }
335 if (!ok) {
9b387841
NC
336 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
337 "Attempt to free non-arena SV: 0x%"UVxf
338 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
a0d0e21e
LW
339 return;
340 }
341 }
4561caa4 342 plant_SV(p);
463ee0b2 343}
a0d0e21e 344
4561caa4
CS
345#else /* ! DEBUGGING */
346
347#define del_SV(p) plant_SV(p)
348
349#endif /* DEBUGGING */
463ee0b2 350
645c22ef
DM
351
352/*
ccfc67b7
JH
353=head1 SV Manipulation Functions
354
645c22ef
DM
355=for apidoc sv_add_arena
356
357Given a chunk of memory, link it to the head of the list of arenas,
358and split it into a list of free SVs.
359
360=cut
361*/
362
d2bd4e7f
NC
363static void
364S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
463ee0b2 365{
97aff369 366 dVAR;
daba3364 367 SV *const sva = MUTABLE_SV(ptr);
463ee0b2
LW
368 register SV* sv;
369 register SV* svend;
4633a7c4 370
7918f24d
NC
371 PERL_ARGS_ASSERT_SV_ADD_ARENA;
372
4633a7c4 373 /* The first SV in an arena isn't an SV. */
3280af22 374 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
4633a7c4
LW
375 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
376 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
377
3280af22
NIS
378 PL_sv_arenaroot = sva;
379 PL_sv_root = sva + 1;
4633a7c4
LW
380
381 svend = &sva[SvREFCNT(sva) - 1];
382 sv = sva + 1;
463ee0b2 383 while (sv < svend) {
3eef1deb 384 SvARENA_CHAIN_SET(sv, (sv + 1));
03e36789 385#ifdef DEBUGGING
978b032e 386 SvREFCNT(sv) = 0;
03e36789 387#endif
4b69cbe3 388 /* Must always set typemask because it's always checked in on cleanup
03e36789 389 when the arenas are walked looking for objects. */
8990e307 390 SvFLAGS(sv) = SVTYPEMASK;
463ee0b2
LW
391 sv++;
392 }
3eef1deb 393 SvARENA_CHAIN_SET(sv, 0);
03e36789
NC
394#ifdef DEBUGGING
395 SvREFCNT(sv) = 0;
396#endif
4633a7c4
LW
397 SvFLAGS(sv) = SVTYPEMASK;
398}
399
055972dc
DM
400/* visit(): call the named function for each non-free SV in the arenas
401 * whose flags field matches the flags/mask args. */
645c22ef 402
5226ed68 403STATIC I32
de37a194 404S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
8990e307 405{
97aff369 406 dVAR;
4633a7c4 407 SV* sva;
5226ed68 408 I32 visited = 0;
8990e307 409
7918f24d
NC
410 PERL_ARGS_ASSERT_VISIT;
411
daba3364 412 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
53c1dcc0 413 register const SV * const svend = &sva[SvREFCNT(sva)];
a3b680e6 414 register SV* sv;
4561caa4 415 for (sv = sva + 1; sv < svend; ++sv) {
e4787c0c 416 if (SvTYPE(sv) != (svtype)SVTYPEMASK
055972dc
DM
417 && (sv->sv_flags & mask) == flags
418 && SvREFCNT(sv))
419 {
acfe0abc 420 (FCALL)(aTHX_ sv);
5226ed68
JH
421 ++visited;
422 }
8990e307
LW
423 }
424 }
5226ed68 425 return visited;
8990e307
LW
426}
427
758a08c3
JH
428#ifdef DEBUGGING
429
645c22ef
DM
430/* called by sv_report_used() for each live SV */
431
432static void
5fa45a31 433do_report_used(pTHX_ SV *const sv)
645c22ef 434{
e4787c0c 435 if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
645c22ef
DM
436 PerlIO_printf(Perl_debug_log, "****\n");
437 sv_dump(sv);
438 }
439}
758a08c3 440#endif
645c22ef
DM
441
442/*
443=for apidoc sv_report_used
444
445Dump the contents of all SVs not yet freed. (Debugging aid).
446
447=cut
448*/
449
8990e307 450void
864dbfa3 451Perl_sv_report_used(pTHX)
4561caa4 452{
ff270d3a 453#ifdef DEBUGGING
055972dc 454 visit(do_report_used, 0, 0);
96a5add6
AL
455#else
456 PERL_UNUSED_CONTEXT;
ff270d3a 457#endif
4561caa4
CS
458}
459
645c22ef
DM
460/* called by sv_clean_objs() for each live SV */
461
462static void
de37a194 463do_clean_objs(pTHX_ SV *const ref)
645c22ef 464{
97aff369 465 dVAR;
ea724faa
NC
466 assert (SvROK(ref));
467 {
823a54a3
AL
468 SV * const target = SvRV(ref);
469 if (SvOBJECT(target)) {
470 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
471 if (SvWEAKREF(ref)) {
472 sv_del_backref(target, ref);
473 SvWEAKREF_off(ref);
474 SvRV_set(ref, NULL);
475 } else {
476 SvROK_off(ref);
477 SvRV_set(ref, NULL);
478 SvREFCNT_dec(target);
479 }
645c22ef
DM
480 }
481 }
482
483 /* XXX Might want to check arrays, etc. */
484}
485
645c22ef 486
e4487e9b
DM
487/* clear any slots in a GV which hold objects - except IO;
488 * called by sv_clean_objs() for each live GV */
489
645c22ef 490static void
f30de749 491do_clean_named_objs(pTHX_ SV *const sv)
645c22ef 492{
97aff369 493 dVAR;
57ef47cc 494 SV *obj;
ea724faa 495 assert(SvTYPE(sv) == SVt_PVGV);
d011219a 496 assert(isGV_with_GP(sv));
57ef47cc
DM
497 if (!GvGP(sv))
498 return;
499
500 /* freeing GP entries may indirectly free the current GV;
501 * hold onto it while we mess with the GP slots */
502 SvREFCNT_inc(sv);
503
504 if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505 DEBUG_D((PerlIO_printf(Perl_debug_log,
506 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507 GvSV(sv) = NULL;
508 SvREFCNT_dec(obj);
509 }
510 if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511 DEBUG_D((PerlIO_printf(Perl_debug_log,
512 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513 GvAV(sv) = NULL;
514 SvREFCNT_dec(obj);
515 }
516 if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517 DEBUG_D((PerlIO_printf(Perl_debug_log,
518 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519 GvHV(sv) = NULL;
520 SvREFCNT_dec(obj);
521 }
522 if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523 DEBUG_D((PerlIO_printf(Perl_debug_log,
524 "Cleaning named glob CV object:\n "), sv_dump(obj)));
c43ae56f 525 GvCV_set(sv, NULL);
57ef47cc
DM
526 SvREFCNT_dec(obj);
527 }
e4487e9b
DM
528 SvREFCNT_dec(sv); /* undo the inc above */
529}
530
68b590d9 531/* clear any IO slots in a GV which hold objects (except stderr, defout);
e4487e9b
DM
532 * called by sv_clean_objs() for each live GV */
533
534static void
535do_clean_named_io_objs(pTHX_ SV *const sv)
536{
537 dVAR;
538 SV *obj;
539 assert(SvTYPE(sv) == SVt_PVGV);
540 assert(isGV_with_GP(sv));
68b590d9 541 if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
e4487e9b
DM
542 return;
543
544 SvREFCNT_inc(sv);
57ef47cc
DM
545 if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546 DEBUG_D((PerlIO_printf(Perl_debug_log,
547 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548 GvIOp(sv) = NULL;
549 SvREFCNT_dec(obj);
645c22ef 550 }
57ef47cc 551 SvREFCNT_dec(sv); /* undo the inc above */
645c22ef 552}
645c22ef 553
4155e4fe
FC
554/* Void wrapper to pass to visit() */
555static void
556do_curse(pTHX_ SV * const sv) {
c2910e6c
FC
557 if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558 || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
4155e4fe
FC
559 return;
560 (void)curse(sv, 0);
561}
562
645c22ef
DM
563/*
564=for apidoc sv_clean_objs
565
566Attempt to destroy all objects not yet freed
567
568=cut
569*/
570
4561caa4 571void
864dbfa3 572Perl_sv_clean_objs(pTHX)
4561caa4 573{
97aff369 574 dVAR;
68b590d9 575 GV *olddef, *olderr;
3280af22 576 PL_in_clean_objs = TRUE;
055972dc 577 visit(do_clean_objs, SVf_ROK, SVf_ROK);
e4487e9b
DM
578 /* Some barnacles may yet remain, clinging to typeglobs.
579 * Run the non-IO destructors first: they may want to output
580 * error messages, close files etc */
d011219a 581 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
e4487e9b 582 visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
4155e4fe
FC
583 /* And if there are some very tenacious barnacles clinging to arrays,
584 closures, or what have you.... */
585 visit(do_curse, SVs_OBJECT, SVs_OBJECT);
68b590d9
DM
586 olddef = PL_defoutgv;
587 PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588 if (olddef && isGV_with_GP(olddef))
589 do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590 olderr = PL_stderrgv;
591 PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592 if (olderr && isGV_with_GP(olderr))
593 do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594 SvREFCNT_dec(olddef);
3280af22 595 PL_in_clean_objs = FALSE;
4561caa4
CS
596}
597
645c22ef
DM
598/* called by sv_clean_all() for each live SV */
599
600static void
de37a194 601do_clean_all(pTHX_ SV *const sv)
645c22ef 602{
97aff369 603 dVAR;
daba3364 604 if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
cddfcddc 605 /* don't clean pid table and strtab */
d17ea597 606 return;
cddfcddc 607 }
645c22ef
DM
608 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609 SvFLAGS(sv) |= SVf_BREAK;
610 SvREFCNT_dec(sv);
611}
612
613/*
614=for apidoc sv_clean_all
615
616Decrement the refcnt of each remaining SV, possibly triggering a
617cleanup. This function may have to be called multiple times to free
ff276b08 618SVs which are in complex self-referential hierarchies.
645c22ef
DM
619
620=cut
621*/
622
5226ed68 623I32
864dbfa3 624Perl_sv_clean_all(pTHX)
8990e307 625{
97aff369 626 dVAR;
5226ed68 627 I32 cleaned;
3280af22 628 PL_in_clean_all = TRUE;
055972dc 629 cleaned = visit(do_clean_all, 0,0);
5226ed68 630 return cleaned;
8990e307 631}
463ee0b2 632
5e258f8c
JC
633/*
634 ARENASETS: a meta-arena implementation which separates arena-info
635 into struct arena_set, which contains an array of struct
636 arena_descs, each holding info for a single arena. By separating
637 the meta-info from the arena, we recover the 1st slot, formerly
638 borrowed for list management. The arena_set is about the size of an
39244528 639 arena, avoiding the needless malloc overhead of a naive linked-list.
5e258f8c
JC
640
641 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642 memory in the last arena-set (1/2 on average). In trade, we get
643 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
d2a0f284 644 smaller types). The recovery of the wasted space allows use of
e15dad31
JC
645 small arenas for large, rare body types, by changing array* fields
646 in body_details_by_type[] below.
5e258f8c 647*/
5e258f8c 648struct arena_desc {
398c677b
NC
649 char *arena; /* the raw storage, allocated aligned */
650 size_t size; /* its size ~4k typ */
e5973ed5 651 svtype utype; /* bodytype stored in arena */
5e258f8c
JC
652};
653
e6148039
NC
654struct arena_set;
655
656/* Get the maximum number of elements in set[] such that struct arena_set
e15dad31 657 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
e6148039
NC
658 therefore likely to be 1 aligned memory page. */
659
660#define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661 - 2 * sizeof(int)) / sizeof (struct arena_desc))
5e258f8c
JC
662
663struct arena_set {
664 struct arena_set* next;
0a848332
NC
665 unsigned int set_size; /* ie ARENAS_PER_SET */
666 unsigned int curr; /* index of next available arena-desc */
5e258f8c
JC
667 struct arena_desc set[ARENAS_PER_SET];
668};
669
645c22ef
DM
670/*
671=for apidoc sv_free_arenas
672
673Deallocate the memory used by all arenas. Note that all the individual SV
674heads and bodies within the arenas must already have been freed.
675
676=cut
677*/
4633a7c4 678void
864dbfa3 679Perl_sv_free_arenas(pTHX)
4633a7c4 680{
97aff369 681 dVAR;
4633a7c4
LW
682 SV* sva;
683 SV* svanext;
0a848332 684 unsigned int i;
4633a7c4
LW
685
686 /* Free arenas here, but be careful about fake ones. (We assume
687 contiguity of the fake ones with the corresponding real ones.) */
688
3280af22 689 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
daba3364 690 svanext = MUTABLE_SV(SvANY(sva));
4633a7c4 691 while (svanext && SvFAKE(svanext))
daba3364 692 svanext = MUTABLE_SV(SvANY(svanext));
4633a7c4
LW
693
694 if (!SvFAKE(sva))
1df70142 695 Safefree(sva);
4633a7c4 696 }
93e68bfb 697
5e258f8c 698 {
0a848332
NC
699 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701 while (aroot) {
702 struct arena_set *current = aroot;
703 i = aroot->curr;
704 while (i--) {
5e258f8c
JC
705 assert(aroot->set[i].arena);
706 Safefree(aroot->set[i].arena);
707 }
0a848332
NC
708 aroot = aroot->next;
709 Safefree(current);
5e258f8c
JC
710 }
711 }
dc8220bf 712 PL_body_arenas = 0;
fdda85ca 713
0a848332
NC
714 i = PERL_ARENA_ROOTS_SIZE;
715 while (i--)
93e68bfb 716 PL_body_roots[i] = 0;
93e68bfb 717
3280af22
NIS
718 PL_sv_arenaroot = 0;
719 PL_sv_root = 0;
4633a7c4
LW
720}
721
bd81e77b
NC
722/*
723 Here are mid-level routines that manage the allocation of bodies out
724 of the various arenas. There are 5 kinds of arenas:
29489e7c 725
bd81e77b
NC
726 1. SV-head arenas, which are discussed and handled above
727 2. regular body arenas
728 3. arenas for reduced-size bodies
729 4. Hash-Entry arenas
29489e7c 730
bd81e77b
NC
731 Arena types 2 & 3 are chained by body-type off an array of
732 arena-root pointers, which is indexed by svtype. Some of the
733 larger/less used body types are malloced singly, since a large
734 unused block of them is wasteful. Also, several svtypes dont have
735 bodies; the data fits into the sv-head itself. The arena-root
736 pointer thus has a few unused root-pointers (which may be hijacked
737 later for arena types 4,5)
29489e7c 738
bd81e77b
NC
739 3 differs from 2 as an optimization; some body types have several
740 unused fields in the front of the structure (which are kept in-place
741 for consistency). These bodies can be allocated in smaller chunks,
742 because the leading fields arent accessed. Pointers to such bodies
743 are decremented to point at the unused 'ghost' memory, knowing that
744 the pointers are used with offsets to the real memory.
29489e7c 745
d2a0f284
JC
746
747=head1 SV-Body Allocation
748
749Allocation of SV-bodies is similar to SV-heads, differing as follows;
750the allocation mechanism is used for many body types, so is somewhat
751more complicated, it uses arena-sets, and has no need for still-live
752SV detection.
753
754At the outermost level, (new|del)_X*V macros return bodies of the
755appropriate type. These macros call either (new|del)_body_type or
756(new|del)_body_allocated macro pairs, depending on specifics of the
757type. Most body types use the former pair, the latter pair is used to
758allocate body types with "ghost fields".
759
760"ghost fields" are fields that are unused in certain types, and
69ba284b 761consequently don't need to actually exist. They are declared because
d2a0f284
JC
762they're part of a "base type", which allows use of functions as
763methods. The simplest examples are AVs and HVs, 2 aggregate types
764which don't use the fields which support SCALAR semantics.
765
69ba284b 766For these types, the arenas are carved up into appropriately sized
d2a0f284
JC
767chunks, we thus avoid wasted memory for those unaccessed members.
768When bodies are allocated, we adjust the pointer back in memory by the
69ba284b 769size of the part not allocated, so it's as if we allocated the full
d2a0f284
JC
770structure. (But things will all go boom if you write to the part that
771is "not there", because you'll be overwriting the last members of the
772preceding structure in memory.)
773
69ba284b
NC
774We calculate the correction using the STRUCT_OFFSET macro on the first
775member present. If the allocated structure is smaller (no initial NV
776actually allocated) then the net effect is to subtract the size of the NV
777from the pointer, to return a new pointer as if an initial NV were actually
778allocated. (We were using structures named *_allocated for this, but
779this turned out to be a subtle bug, because a structure without an NV
780could have a lower alignment constraint, but the compiler is allowed to
781optimised accesses based on the alignment constraint of the actual pointer
782to the full structure, for example, using a single 64 bit load instruction
783because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
d2a0f284
JC
784
785This is the same trick as was used for NV and IV bodies. Ironically it
786doesn't need to be used for NV bodies any more, because NV is now at
787the start of the structure. IV bodies don't need it either, because
788they are no longer allocated.
789
790In turn, the new_body_* allocators call S_new_body(), which invokes
791new_body_inline macro, which takes a lock, and takes a body off the
1e30fcd5 792linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
d2a0f284
JC
793necessary to refresh an empty list. Then the lock is released, and
794the body is returned.
795
99816f8d 796Perl_more_bodies allocates a new arena, and carves it up into an array of N
d2a0f284
JC
797bodies, which it strings into a linked list. It looks up arena-size
798and body-size from the body_details table described below, thus
799supporting the multiple body-types.
800
801If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802the (new|del)_X*V macros are mapped directly to malloc/free.
803
d2a0f284
JC
804For each sv-type, struct body_details bodies_by_type[] carries
805parameters which control these aspects of SV handling:
806
807Arena_size determines whether arenas are used for this body type, and if
808so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
809zero, forcing individual mallocs and frees.
810
811Body_size determines how big a body is, and therefore how many fit into
812each arena. Offset carries the body-pointer adjustment needed for
69ba284b 813"ghost fields", and is used in *_allocated macros.
d2a0f284
JC
814
815But its main purpose is to parameterize info needed in
816Perl_sv_upgrade(). The info here dramatically simplifies the function
69ba284b 817vs the implementation in 5.8.8, making it table-driven. All fields
d2a0f284
JC
818are used for this, except for arena_size.
819
820For the sv-types that have no bodies, arenas are not used, so those
821PL_body_roots[sv_type] are unused, and can be overloaded. In
822something of a special case, SVt_NULL is borrowed for HE arenas;
c6f8b1d0 823PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
d2a0f284 824bodies_by_type[SVt_NULL] slot is not used, as the table is not
c6f8b1d0 825available in hv.c.
d2a0f284 826
29489e7c
DM
827*/
828
bd81e77b 829struct body_details {
0fb58b32 830 U8 body_size; /* Size to allocate */
10666ae3 831 U8 copy; /* Size of structure to copy (may be shorter) */
0fb58b32 832 U8 offset;
10666ae3
NC
833 unsigned int type : 4; /* We have space for a sanity check. */
834 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
835 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
836 unsigned int arena : 1; /* Allocated from an arena */
837 size_t arena_size; /* Size of arena to allocate */
bd81e77b 838};
29489e7c 839
bd81e77b
NC
840#define HADNV FALSE
841#define NONV TRUE
29489e7c 842
d2a0f284 843
bd81e77b
NC
844#ifdef PURIFY
845/* With -DPURFIY we allocate everything directly, and don't use arenas.
846 This seems a rather elegant way to simplify some of the code below. */
847#define HASARENA FALSE
848#else
849#define HASARENA TRUE
850#endif
851#define NOARENA FALSE
29489e7c 852
d2a0f284
JC
853/* Size the arenas to exactly fit a given number of bodies. A count
854 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855 simplifying the default. If count > 0, the arena is sized to fit
856 only that many bodies, allowing arenas to be used for large, rare
857 bodies (XPVFM, XPVIO) without undue waste. The arena size is
858 limited by PERL_ARENA_SIZE, so we can safely oversize the
859 declarations.
860 */
95db5f15
MB
861#define FIT_ARENA0(body_size) \
862 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863#define FIT_ARENAn(count,body_size) \
864 ( count * body_size <= PERL_ARENA_SIZE) \
865 ? count * body_size \
866 : FIT_ARENA0 (body_size)
867#define FIT_ARENA(count,body_size) \
868 count \
869 ? FIT_ARENAn (count, body_size) \
870 : FIT_ARENA0 (body_size)
d2a0f284 871
bd81e77b
NC
872/* Calculate the length to copy. Specifically work out the length less any
873 final padding the compiler needed to add. See the comment in sv_upgrade
874 for why copying the padding proved to be a bug. */
29489e7c 875
bd81e77b
NC
876#define copy_length(type, last_member) \
877 STRUCT_OFFSET(type, last_member) \
daba3364 878 + sizeof (((type*)SvANY((const SV *)0))->last_member)
29489e7c 879
bd81e77b 880static const struct body_details bodies_by_type[] = {
829cd18a
NC
881 /* HEs use this offset for their arena. */
882 { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
d2a0f284 883
1cb9cd50 884 /* The bind placeholder pretends to be an RV for now.
c6f8b1d0 885 Also it's marked as "can't upgrade" to stop anyone using it before it's
1cb9cd50
NC
886 implemented. */
887 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
888
db93c0c4
NC
889 /* IVs are in the head, so the allocation size is 0. */
890 { 0,
d2a0f284 891 sizeof(IV), /* This is used to copy out the IV body. */
10666ae3 892 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
db93c0c4 893 NOARENA /* IVS don't need an arena */, 0
d2a0f284
JC
894 },
895
6e128786
NC
896 { sizeof(NV), sizeof(NV),
897 STRUCT_OFFSET(XPVNV, xnv_u),
898 SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
d2a0f284 899
bc337e5c 900 { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
889d28b2
NC
901 copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
902 + STRUCT_OFFSET(XPV, xpv_cur),
69ba284b 903 SVt_PV, FALSE, NONV, HASARENA,
889d28b2 904 FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
d2a0f284 905
bc337e5c 906 { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
889d28b2
NC
907 copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
908 + STRUCT_OFFSET(XPV, xpv_cur),
909 SVt_PVIV, FALSE, NONV, HASARENA,
910 FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
d2a0f284 911
bc337e5c 912 { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
889d28b2
NC
913 copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
914 + STRUCT_OFFSET(XPV, xpv_cur),
915 SVt_PVNV, FALSE, HADNV, HASARENA,
916 FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
d2a0f284 917
6e128786 918 { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
d2a0f284 919 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
4df7f6af 920
601dfd0a
NC
921 { sizeof(regexp),
922 sizeof(regexp),
923 0,
08e44740 924 SVt_REGEXP, FALSE, NONV, HASARENA,
eaeb1e7f 925 FIT_ARENA(0, sizeof(regexp))
5c35adbb 926 },
4df7f6af 927
10666ae3 928 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
d2a0f284
JC
929 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
930
10666ae3 931 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
d2a0f284
JC
932 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
933
601dfd0a 934 { sizeof(XPVAV),
4f7003f5 935 copy_length(XPVAV, xav_alloc),
601dfd0a 936 0,
69ba284b 937 SVt_PVAV, TRUE, NONV, HASARENA,
601dfd0a 938 FIT_ARENA(0, sizeof(XPVAV)) },
d2a0f284 939
601dfd0a 940 { sizeof(XPVHV),
359164a0 941 copy_length(XPVHV, xhv_max),
601dfd0a 942 0,
69ba284b 943 SVt_PVHV, TRUE, NONV, HASARENA,
601dfd0a 944 FIT_ARENA(0, sizeof(XPVHV)) },
d2a0f284 945
601dfd0a
NC
946 { sizeof(XPVCV),
947 sizeof(XPVCV),
948 0,
69ba284b 949 SVt_PVCV, TRUE, NONV, HASARENA,
601dfd0a 950 FIT_ARENA(0, sizeof(XPVCV)) },
69ba284b 951
601dfd0a
NC
952 { sizeof(XPVFM),
953 sizeof(XPVFM),
954 0,
69ba284b 955 SVt_PVFM, TRUE, NONV, NOARENA,
601dfd0a 956 FIT_ARENA(20, sizeof(XPVFM)) },
d2a0f284 957
601dfd0a
NC
958 { sizeof(XPVIO),
959 sizeof(XPVIO),
960 0,
b6f60916 961 SVt_PVIO, TRUE, NONV, HASARENA,
601dfd0a 962 FIT_ARENA(24, sizeof(XPVIO)) },
bd81e77b 963};
29489e7c 964
bd81e77b 965#define new_body_allocated(sv_type) \
d2a0f284 966 (void *)((char *)S_new_body(aTHX_ sv_type) \
bd81e77b 967 - bodies_by_type[sv_type].offset)
29489e7c 968
26359cfa
NC
969/* return a thing to the free list */
970
971#define del_body(thing, root) \
972 STMT_START { \
973 void ** const thing_copy = (void **)thing; \
974 *thing_copy = *root; \
975 *root = (void*)thing_copy; \
976 } STMT_END
29489e7c 977
bd81e77b 978#ifdef PURIFY
29489e7c 979
beeec492
NC
980#define new_XNV() safemalloc(sizeof(XPVNV))
981#define new_XPVNV() safemalloc(sizeof(XPVNV))
982#define new_XPVMG() safemalloc(sizeof(XPVMG))
29489e7c 983
beeec492 984#define del_XPVGV(p) safefree(p)
29489e7c 985
bd81e77b 986#else /* !PURIFY */
29489e7c 987
65ac1738 988#define new_XNV() new_body_allocated(SVt_NV)
65ac1738 989#define new_XPVNV() new_body_allocated(SVt_PVNV)
65ac1738 990#define new_XPVMG() new_body_allocated(SVt_PVMG)
645c22ef 991
26359cfa
NC
992#define del_XPVGV(p) del_body(p + bodies_by_type[SVt_PVGV].offset, \
993 &PL_body_roots[SVt_PVGV])
1d7c1841 994
bd81e77b 995#endif /* PURIFY */
93e68bfb 996
bd81e77b 997/* no arena for you! */
93e68bfb 998
bd81e77b 999#define new_NOARENA(details) \
beeec492 1000 safemalloc((details)->body_size + (details)->offset)
bd81e77b 1001#define new_NOARENAZ(details) \
beeec492 1002 safecalloc((details)->body_size + (details)->offset, 1)
d2a0f284 1003
1e30fcd5
NC
1004void *
1005Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1006 const size_t arena_size)
d2a0f284
JC
1007{
1008 dVAR;
1009 void ** const root = &PL_body_roots[sv_type];
99816f8d
NC
1010 struct arena_desc *adesc;
1011 struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1012 unsigned int curr;
d2a0f284
JC
1013 char *start;
1014 const char *end;
02982131 1015 const size_t good_arena_size = Perl_malloc_good_size(arena_size);
0b2d3faa 1016#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
23e9d66c
NC
1017 static bool done_sanity_check;
1018
0b2d3faa
JH
1019 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1020 * variables like done_sanity_check. */
10666ae3 1021 if (!done_sanity_check) {
ea471437 1022 unsigned int i = SVt_LAST;
10666ae3
NC
1023
1024 done_sanity_check = TRUE;
1025
1026 while (i--)
1027 assert (bodies_by_type[i].type == i);
1028 }
1029#endif
1030
02982131 1031 assert(arena_size);
23e9d66c 1032
99816f8d
NC
1033 /* may need new arena-set to hold new arena */
1034 if (!aroot || aroot->curr >= aroot->set_size) {
1035 struct arena_set *newroot;
1036 Newxz(newroot, 1, struct arena_set);
1037 newroot->set_size = ARENAS_PER_SET;
1038 newroot->next = aroot;
1039 aroot = newroot;
1040 PL_body_arenas = (void *) newroot;
1041 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1042 }
1043
1044 /* ok, now have arena-set with at least 1 empty/available arena-desc */
1045 curr = aroot->curr++;
1046 adesc = &(aroot->set[curr]);
1047 assert(!adesc->arena);
1048
1049 Newx(adesc->arena, good_arena_size, char);
1050 adesc->size = good_arena_size;
1051 adesc->utype = sv_type;
1052 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n",
1053 curr, (void*)adesc->arena, (UV)good_arena_size));
1054
1055 start = (char *) adesc->arena;
d2a0f284 1056
29657bb6
NC
1057 /* Get the address of the byte after the end of the last body we can fit.
1058 Remember, this is integer division: */
02982131 1059 end = start + good_arena_size / body_size * body_size;
d2a0f284 1060
486ec47a 1061 /* computed count doesn't reflect the 1st slot reservation */
d8fca402
NC
1062#if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1063 DEBUG_m(PerlIO_printf(Perl_debug_log,
1064 "arena %p end %p arena-size %d (from %d) type %d "
1065 "size %d ct %d\n",
02982131
NC
1066 (void*)start, (void*)end, (int)good_arena_size,
1067 (int)arena_size, sv_type, (int)body_size,
1068 (int)good_arena_size / (int)body_size));
d8fca402 1069#else
d2a0f284
JC
1070 DEBUG_m(PerlIO_printf(Perl_debug_log,
1071 "arena %p end %p arena-size %d type %d size %d ct %d\n",
6c9570dc 1072 (void*)start, (void*)end,
02982131
NC
1073 (int)arena_size, sv_type, (int)body_size,
1074 (int)good_arena_size / (int)body_size));
d8fca402 1075#endif
d2a0f284
JC
1076 *root = (void *)start;
1077
29657bb6
NC
1078 while (1) {
1079 /* Where the next body would start: */
d2a0f284 1080 char * const next = start + body_size;
29657bb6
NC
1081
1082 if (next >= end) {
1083 /* This is the last body: */
1084 assert(next == end);
1085
1086 *(void **)start = 0;
1087 return *root;
1088 }
1089
d2a0f284
JC
1090 *(void**) start = (void *)next;
1091 start = next;
1092 }
d2a0f284
JC
1093}
1094
1095/* grab a new thing from the free list, allocating more if necessary.
1096 The inline version is used for speed in hot routines, and the
1097 function using it serves the rest (unless PURIFY).
1098*/
1099#define new_body_inline(xpv, sv_type) \
1100 STMT_START { \
1101 void ** const r3wt = &PL_body_roots[sv_type]; \
11b79775 1102 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1e30fcd5 1103 ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
02982131
NC
1104 bodies_by_type[sv_type].body_size,\
1105 bodies_by_type[sv_type].arena_size)); \
d2a0f284 1106 *(r3wt) = *(void**)(xpv); \
d2a0f284
JC
1107 } STMT_END
1108
1109#ifndef PURIFY
1110
1111STATIC void *
de37a194 1112S_new_body(pTHX_ const svtype sv_type)
d2a0f284
JC
1113{
1114 dVAR;
1115 void *xpv;
1116 new_body_inline(xpv, sv_type);
1117 return xpv;
1118}
1119
1120#endif
93e68bfb 1121
238b27b3
NC
1122static const struct body_details fake_rv =
1123 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1124
bd81e77b
NC
1125/*
1126=for apidoc sv_upgrade
93e68bfb 1127
bd81e77b
NC
1128Upgrade an SV to a more complex form. Generally adds a new body type to the
1129SV, then copies across as much information as possible from the old body.
1130You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
93e68bfb 1131
bd81e77b 1132=cut
93e68bfb 1133*/
93e68bfb 1134
bd81e77b 1135void
aad570aa 1136Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
cac9b346 1137{
97aff369 1138 dVAR;
bd81e77b
NC
1139 void* old_body;
1140 void* new_body;
42d0e0b7 1141 const svtype old_type = SvTYPE(sv);
d2a0f284 1142 const struct body_details *new_type_details;
238b27b3 1143 const struct body_details *old_type_details
bd81e77b 1144 = bodies_by_type + old_type;
4df7f6af 1145 SV *referant = NULL;
cac9b346 1146
7918f24d
NC
1147 PERL_ARGS_ASSERT_SV_UPGRADE;
1148
1776cbe8
NC
1149 if (old_type == new_type)
1150 return;
1151
1152 /* This clause was purposefully added ahead of the early return above to
1153 the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1154 inference by Nick I-S that it would fix other troublesome cases. See
1155 changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1156
1157 Given that shared hash key scalars are no longer PVIV, but PV, there is
1158 no longer need to unshare so as to free up the IVX slot for its proper
1159 purpose. So it's safe to move the early return earlier. */
1160
bd81e77b
NC
1161 if (new_type != SVt_PV && SvIsCOW(sv)) {
1162 sv_force_normal_flags(sv, 0);
1163 }
cac9b346 1164
bd81e77b 1165 old_body = SvANY(sv);
de042e1d 1166
bd81e77b
NC
1167 /* Copying structures onto other structures that have been neatly zeroed
1168 has a subtle gotcha. Consider XPVMG
cac9b346 1169
bd81e77b
NC
1170 +------+------+------+------+------+-------+-------+
1171 | NV | CUR | LEN | IV | MAGIC | STASH |
1172 +------+------+------+------+------+-------+-------+
1173 0 4 8 12 16 20 24 28
645c22ef 1174
bd81e77b
NC
1175 where NVs are aligned to 8 bytes, so that sizeof that structure is
1176 actually 32 bytes long, with 4 bytes of padding at the end:
08742458 1177
bd81e77b
NC
1178 +------+------+------+------+------+-------+-------+------+
1179 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1180 +------+------+------+------+------+-------+-------+------+
1181 0 4 8 12 16 20 24 28 32
08742458 1182
bd81e77b 1183 so what happens if you allocate memory for this structure:
30f9da9e 1184
bd81e77b
NC
1185 +------+------+------+------+------+-------+-------+------+------+...
1186 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1187 +------+------+------+------+------+-------+-------+------+------+...
1188 0 4 8 12 16 20 24 28 32 36
bfc44f79 1189
bd81e77b
NC
1190 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1191 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1192 started out as zero once, but it's quite possible that it isn't. So now,
1193 rather than a nicely zeroed GP, you have it pointing somewhere random.
1194 Bugs ensue.
bfc44f79 1195
bd81e77b
NC
1196 (In fact, GP ends up pointing at a previous GP structure, because the
1197 principle cause of the padding in XPVMG getting garbage is a copy of
6c9e42f7
NC
1198 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1199 this happens to be moot because XPVGV has been re-ordered, with GP
1200 no longer after STASH)
30f9da9e 1201
bd81e77b
NC
1202 So we are careful and work out the size of used parts of all the
1203 structures. */
bfc44f79 1204
bd81e77b
NC
1205 switch (old_type) {
1206 case SVt_NULL:
1207 break;
1208 case SVt_IV:
4df7f6af
NC
1209 if (SvROK(sv)) {
1210 referant = SvRV(sv);
238b27b3
NC
1211 old_type_details = &fake_rv;
1212 if (new_type == SVt_NV)
1213 new_type = SVt_PVNV;
4df7f6af
NC
1214 } else {
1215 if (new_type < SVt_PVIV) {
1216 new_type = (new_type == SVt_NV)
1217 ? SVt_PVNV : SVt_PVIV;
1218 }
bd81e77b
NC
1219 }
1220 break;
1221 case SVt_NV:
1222 if (new_type < SVt_PVNV) {
1223 new_type = SVt_PVNV;
bd81e77b
NC
1224 }
1225 break;
bd81e77b
NC
1226 case SVt_PV:
1227 assert(new_type > SVt_PV);
1228 assert(SVt_IV < SVt_PV);
1229 assert(SVt_NV < SVt_PV);
1230 break;
1231 case SVt_PVIV:
1232 break;
1233 case SVt_PVNV:
1234 break;
1235 case SVt_PVMG:
1236 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1237 there's no way that it can be safely upgraded, because perl.c
1238 expects to Safefree(SvANY(PL_mess_sv)) */
1239 assert(sv != PL_mess_sv);
1240 /* This flag bit is used to mean other things in other scalar types.
1241 Given that it only has meaning inside the pad, it shouldn't be set
1242 on anything that can get upgraded. */
00b1698f 1243 assert(!SvPAD_TYPED(sv));
bd81e77b
NC
1244 break;
1245 default:
1246 if (old_type_details->cant_upgrade)
c81225bc
NC
1247 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1248 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
bd81e77b 1249 }
3376de98
NC
1250
1251 if (old_type > new_type)
1252 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1253 (int)old_type, (int)new_type);
1254
2fa1109b 1255 new_type_details = bodies_by_type + new_type;
645c22ef 1256
bd81e77b
NC
1257 SvFLAGS(sv) &= ~SVTYPEMASK;
1258 SvFLAGS(sv) |= new_type;
932e9ff9 1259
ab4416c0
NC
1260 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1261 the return statements above will have triggered. */
1262 assert (new_type != SVt_NULL);
bd81e77b 1263 switch (new_type) {
bd81e77b
NC
1264 case SVt_IV:
1265 assert(old_type == SVt_NULL);
1266 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1267 SvIV_set(sv, 0);
1268 return;
1269 case SVt_NV:
1270 assert(old_type == SVt_NULL);
1271 SvANY(sv) = new_XNV();
1272 SvNV_set(sv, 0);
1273 return;
bd81e77b 1274 case SVt_PVHV:
bd81e77b 1275 case SVt_PVAV:
d2a0f284 1276 assert(new_type_details->body_size);
c1ae03ae
NC
1277
1278#ifndef PURIFY
1279 assert(new_type_details->arena);
d2a0f284 1280 assert(new_type_details->arena_size);
c1ae03ae 1281 /* This points to the start of the allocated area. */
d2a0f284
JC
1282 new_body_inline(new_body, new_type);
1283 Zero(new_body, new_type_details->body_size, char);
c1ae03ae
NC
1284 new_body = ((char *)new_body) - new_type_details->offset;
1285#else
1286 /* We always allocated the full length item with PURIFY. To do this
1287 we fake things so that arena is false for all 16 types.. */
1288 new_body = new_NOARENAZ(new_type_details);
1289#endif
1290 SvANY(sv) = new_body;
1291 if (new_type == SVt_PVAV) {
1292 AvMAX(sv) = -1;
1293 AvFILLp(sv) = -1;
1294 AvREAL_only(sv);
64484faa 1295 if (old_type_details->body_size) {
ac572bf4
NC
1296 AvALLOC(sv) = 0;
1297 } else {
1298 /* It will have been zeroed when the new body was allocated.
1299 Lets not write to it, in case it confuses a write-back
1300 cache. */
1301 }
78ac7dd9
NC
1302 } else {
1303 assert(!SvOK(sv));
1304 SvOK_off(sv);
1305#ifndef NODEFAULT_SHAREKEYS
1306 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1307#endif
1308 HvMAX(sv) = 7; /* (start with 8 buckets) */
c1ae03ae 1309 }
aeb18a1e 1310
bd81e77b
NC
1311 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1312 The target created by newSVrv also is, and it can have magic.
1313 However, it never has SvPVX set.
1314 */
4df7f6af
NC
1315 if (old_type == SVt_IV) {
1316 assert(!SvROK(sv));
1317 } else if (old_type >= SVt_PV) {
bd81e77b
NC
1318 assert(SvPVX_const(sv) == 0);
1319 }
aeb18a1e 1320
bd81e77b 1321 if (old_type >= SVt_PVMG) {
e736a858 1322 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
bd81e77b 1323 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
797c7171
NC
1324 } else {
1325 sv->sv_u.svu_array = NULL; /* or svu_hash */
bd81e77b
NC
1326 }
1327 break;
93e68bfb 1328
93e68bfb 1329
b9ad13ac
NC
1330 case SVt_REGEXP:
1331 /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1332 sv_force_normal_flags(sv) is called. */
1333 SvFAKE_on(sv);
bd81e77b
NC
1334 case SVt_PVIV:
1335 /* XXX Is this still needed? Was it ever needed? Surely as there is
1336 no route from NV to PVIV, NOK can never be true */
1337 assert(!SvNOKp(sv));
1338 assert(!SvNOK(sv));
1339 case SVt_PVIO:
1340 case SVt_PVFM:
bd81e77b
NC
1341 case SVt_PVGV:
1342 case SVt_PVCV:
1343 case SVt_PVLV:
1344 case SVt_PVMG:
1345 case SVt_PVNV:
1346 case SVt_PV:
93e68bfb 1347
d2a0f284 1348 assert(new_type_details->body_size);
bd81e77b
NC
1349 /* We always allocated the full length item with PURIFY. To do this
1350 we fake things so that arena is false for all 16 types.. */
1351 if(new_type_details->arena) {
1352 /* This points to the start of the allocated area. */
d2a0f284
JC
1353 new_body_inline(new_body, new_type);
1354 Zero(new_body, new_type_details->body_size, char);
bd81e77b
NC
1355 new_body = ((char *)new_body) - new_type_details->offset;
1356 } else {
1357 new_body = new_NOARENAZ(new_type_details);
1358 }
1359 SvANY(sv) = new_body;
5e2fc214 1360
bd81e77b 1361 if (old_type_details->copy) {
f9ba3d20
NC
1362 /* There is now the potential for an upgrade from something without
1363 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1364 int offset = old_type_details->offset;
1365 int length = old_type_details->copy;
1366
1367 if (new_type_details->offset > old_type_details->offset) {
d4c19fe8 1368 const int difference
f9ba3d20
NC
1369 = new_type_details->offset - old_type_details->offset;
1370 offset += difference;
1371 length -= difference;
1372 }
1373 assert (length >= 0);
1374
1375 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1376 char);
bd81e77b
NC
1377 }
1378
1379#ifndef NV_ZERO_IS_ALLBITS_ZERO
f2524eef 1380 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
e5ce394c
NC
1381 * correct 0.0 for us. Otherwise, if the old body didn't have an
1382 * NV slot, but the new one does, then we need to initialise the
1383 * freshly created NV slot with whatever the correct bit pattern is
1384 * for 0.0 */
e22a937e
NC
1385 if (old_type_details->zero_nv && !new_type_details->zero_nv
1386 && !isGV_with_GP(sv))
bd81e77b 1387 SvNV_set(sv, 0);
82048762 1388#endif
5e2fc214 1389
85dca89a
NC
1390 if (new_type == SVt_PVIO) {
1391 IO * const io = MUTABLE_IO(sv);
d963bf01 1392 GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
85dca89a
NC
1393
1394 SvOBJECT_on(io);
1395 /* Clear the stashcache because a new IO could overrule a package
1396 name */
1397 hv_clear(PL_stashcache);
1398
85dca89a 1399 SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
f2524eef 1400 IoPAGE_LEN(sv) = 60;
85dca89a 1401 }
4df7f6af
NC
1402 if (old_type < SVt_PV) {
1403 /* referant will be NULL unless the old type was SVt_IV emulating
1404 SVt_RV */
1405 sv->sv_u.svu_rv = referant;
1406 }
bd81e77b
NC
1407 break;
1408 default:
afd78fd5
JH
1409 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1410 (unsigned long)new_type);
bd81e77b 1411 }
73171d91 1412
db93c0c4 1413 if (old_type > SVt_IV) {
bd81e77b 1414#ifdef PURIFY
beeec492 1415 safefree(old_body);
bd81e77b 1416#else
bc786448
GG
1417 /* Note that there is an assumption that all bodies of types that
1418 can be upgraded came from arenas. Only the more complex non-
1419 upgradable types are allowed to be directly malloc()ed. */
1420 assert(old_type_details->arena);
bd81e77b
NC
1421 del_body((void*)((char*)old_body + old_type_details->offset),
1422 &PL_body_roots[old_type]);
1423#endif
1424 }
1425}
73171d91 1426
bd81e77b
NC
1427/*
1428=for apidoc sv_backoff
73171d91 1429
bd81e77b
NC
1430Remove any string offset. You should normally use the C<SvOOK_off> macro
1431wrapper instead.
73171d91 1432
bd81e77b 1433=cut
73171d91
NC
1434*/
1435
bd81e77b 1436int
aad570aa 1437Perl_sv_backoff(pTHX_ register SV *const sv)
bd81e77b 1438{
69240efd 1439 STRLEN delta;
7a4bba22 1440 const char * const s = SvPVX_const(sv);
7918f24d
NC
1441
1442 PERL_ARGS_ASSERT_SV_BACKOFF;
96a5add6 1443 PERL_UNUSED_CONTEXT;
7918f24d 1444
bd81e77b
NC
1445 assert(SvOOK(sv));
1446 assert(SvTYPE(sv) != SVt_PVHV);
1447 assert(SvTYPE(sv) != SVt_PVAV);
7a4bba22 1448
69240efd
NC
1449 SvOOK_offset(sv, delta);
1450
7a4bba22
NC
1451 SvLEN_set(sv, SvLEN(sv) + delta);
1452 SvPV_set(sv, SvPVX(sv) - delta);
1453 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
bd81e77b
NC
1454 SvFLAGS(sv) &= ~SVf_OOK;
1455 return 0;
1456}
73171d91 1457
bd81e77b
NC
1458/*
1459=for apidoc sv_grow
73171d91 1460
bd81e77b
NC
1461Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1462upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1463Use the C<SvGROW> wrapper instead.
93e68bfb 1464
bd81e77b
NC
1465=cut
1466*/
93e68bfb 1467
bd81e77b 1468char *
aad570aa 1469Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
bd81e77b
NC
1470{
1471 register char *s;
93e68bfb 1472
7918f24d
NC
1473 PERL_ARGS_ASSERT_SV_GROW;
1474
5db06880
NC
1475 if (PL_madskills && newlen >= 0x100000) {
1476 PerlIO_printf(Perl_debug_log,
1477 "Allocation too large: %"UVxf"\n", (UV)newlen);
1478 }
bd81e77b
NC
1479#ifdef HAS_64K_LIMIT
1480 if (newlen >= 0x10000) {
1481 PerlIO_printf(Perl_debug_log,
1482 "Allocation too large: %"UVxf"\n", (UV)newlen);
1483 my_exit(1);
1484 }
1485#endif /* HAS_64K_LIMIT */
1486 if (SvROK(sv))
1487 sv_unref(sv);
1488 if (SvTYPE(sv) < SVt_PV) {
1489 sv_upgrade(sv, SVt_PV);
1490 s = SvPVX_mutable(sv);
1491 }
1492 else if (SvOOK(sv)) { /* pv is offset? */
1493 sv_backoff(sv);
1494 s = SvPVX_mutable(sv);
1495 if (newlen > SvLEN(sv))
1496 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1497#ifdef HAS_64K_LIMIT
1498 if (newlen >= 0x10000)
1499 newlen = 0xFFFF;
1500#endif
1501 }
1502 else
1503 s = SvPVX_mutable(sv);
aeb18a1e 1504
bd81e77b 1505 if (newlen > SvLEN(sv)) { /* need more room? */
f1200559
WH
1506 STRLEN minlen = SvCUR(sv);
1507 minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1508 if (newlen < minlen)
1509 newlen = minlen;
aedff202 1510#ifndef Perl_safesysmalloc_size
bd81e77b 1511 newlen = PERL_STRLEN_ROUNDUP(newlen);
bd81e77b 1512#endif
98653f18 1513 if (SvLEN(sv) && s) {
10edeb5d 1514 s = (char*)saferealloc(s, newlen);
bd81e77b
NC
1515 }
1516 else {
10edeb5d 1517 s = (char*)safemalloc(newlen);
bd81e77b
NC
1518 if (SvPVX_const(sv) && SvCUR(sv)) {
1519 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1520 }
1521 }
1522 SvPV_set(sv, s);
ca7c1a29 1523#ifdef Perl_safesysmalloc_size
98653f18
NC
1524 /* Do this here, do it once, do it right, and then we will never get
1525 called back into sv_grow() unless there really is some growing
1526 needed. */
ca7c1a29 1527 SvLEN_set(sv, Perl_safesysmalloc_size(s));
98653f18 1528#else
bd81e77b 1529 SvLEN_set(sv, newlen);
98653f18 1530#endif
bd81e77b
NC
1531 }
1532 return s;
1533}
aeb18a1e 1534
bd81e77b
NC
1535/*
1536=for apidoc sv_setiv
932e9ff9 1537
bd81e77b
NC
1538Copies an integer into the given SV, upgrading first if necessary.
1539Does not handle 'set' magic. See also C<sv_setiv_mg>.
463ee0b2 1540
bd81e77b
NC
1541=cut
1542*/
463ee0b2 1543
bd81e77b 1544void
aad570aa 1545Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
bd81e77b 1546{
97aff369 1547 dVAR;
7918f24d
NC
1548
1549 PERL_ARGS_ASSERT_SV_SETIV;
1550
bd81e77b
NC
1551 SV_CHECK_THINKFIRST_COW_DROP(sv);
1552 switch (SvTYPE(sv)) {
1553 case SVt_NULL:
bd81e77b 1554 case SVt_NV:
3376de98 1555 sv_upgrade(sv, SVt_IV);
bd81e77b 1556 break;
bd81e77b
NC
1557 case SVt_PV:
1558 sv_upgrade(sv, SVt_PVIV);
1559 break;
463ee0b2 1560
bd81e77b 1561 case SVt_PVGV:
6e592b3a
BM
1562 if (!isGV_with_GP(sv))
1563 break;
bd81e77b
NC
1564 case SVt_PVAV:
1565 case SVt_PVHV:
1566 case SVt_PVCV:
1567 case SVt_PVFM:
1568 case SVt_PVIO:
22e74366 1569 /* diag_listed_as: Can't coerce %s to %s in %s */
bd81e77b
NC
1570 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1571 OP_DESC(PL_op));
42d0e0b7 1572 default: NOOP;
bd81e77b
NC
1573 }
1574 (void)SvIOK_only(sv); /* validate number */
1575 SvIV_set(sv, i);
1576 SvTAINT(sv);
1577}
932e9ff9 1578
bd81e77b
NC
1579/*
1580=for apidoc sv_setiv_mg
d33b2eba 1581
bd81e77b 1582Like C<sv_setiv>, but also handles 'set' magic.
1c846c1f 1583
bd81e77b
NC
1584=cut
1585*/
d33b2eba 1586
bd81e77b 1587void
aad570aa 1588Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
bd81e77b 1589{
7918f24d
NC
1590 PERL_ARGS_ASSERT_SV_SETIV_MG;
1591
bd81e77b
NC
1592 sv_setiv(sv,i);
1593 SvSETMAGIC(sv);
1594}
727879eb 1595
bd81e77b
NC
1596/*
1597=for apidoc sv_setuv
d33b2eba 1598
bd81e77b
NC
1599Copies an unsigned integer into the given SV, upgrading first if necessary.
1600Does not handle 'set' magic. See also C<sv_setuv_mg>.
9b94d1dd 1601
bd81e77b
NC
1602=cut
1603*/
d33b2eba 1604
bd81e77b 1605void
aad570aa 1606Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
bd81e77b 1607{
7918f24d
NC
1608 PERL_ARGS_ASSERT_SV_SETUV;
1609
bd81e77b
NC
1610 /* With these two if statements:
1611 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
d33b2eba 1612
bd81e77b
NC
1613 without
1614 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1c846c1f 1615
bd81e77b
NC
1616 If you wish to remove them, please benchmark to see what the effect is
1617 */
1618 if (u <= (UV)IV_MAX) {
1619 sv_setiv(sv, (IV)u);
1620 return;
1621 }
1622 sv_setiv(sv, 0);
1623 SvIsUV_on(sv);
1624 SvUV_set(sv, u);
1625}
d33b2eba 1626
bd81e77b
NC
1627/*
1628=for apidoc sv_setuv_mg
727879eb 1629
bd81e77b 1630Like C<sv_setuv>, but also handles 'set' magic.
9b94d1dd 1631
bd81e77b
NC
1632=cut
1633*/
5e2fc214 1634
bd81e77b 1635void
aad570aa 1636Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
bd81e77b 1637{
7918f24d
NC
1638 PERL_ARGS_ASSERT_SV_SETUV_MG;
1639
bd81e77b
NC
1640 sv_setuv(sv,u);
1641 SvSETMAGIC(sv);
1642}
5e2fc214 1643
954c1994 1644/*
bd81e77b 1645=for apidoc sv_setnv
954c1994 1646
bd81e77b
NC
1647Copies a double into the given SV, upgrading first if necessary.
1648Does not handle 'set' magic. See also C<sv_setnv_mg>.
954c1994
GS
1649
1650=cut
1651*/
1652
63f97190 1653void
aad570aa 1654Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
79072805 1655{
97aff369 1656 dVAR;
7918f24d
NC
1657
1658 PERL_ARGS_ASSERT_SV_SETNV;
1659
bd81e77b
NC
1660 SV_CHECK_THINKFIRST_COW_DROP(sv);
1661 switch (SvTYPE(sv)) {
79072805 1662 case SVt_NULL:
79072805 1663 case SVt_IV:
bd81e77b 1664 sv_upgrade(sv, SVt_NV);
79072805
LW
1665 break;
1666 case SVt_PV:
79072805 1667 case SVt_PVIV:
bd81e77b 1668 sv_upgrade(sv, SVt_PVNV);
79072805 1669 break;
bd4b1eb5 1670
bd4b1eb5 1671 case SVt_PVGV:
6e592b3a
BM
1672 if (!isGV_with_GP(sv))
1673 break;
bd81e77b
NC
1674 case SVt_PVAV:
1675 case SVt_PVHV:
79072805 1676 case SVt_PVCV:
bd81e77b
NC
1677 case SVt_PVFM:
1678 case SVt_PVIO:
22e74366 1679 /* diag_listed_as: Can't coerce %s to %s in %s */
bd81e77b 1680 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
94bbb3f4 1681 OP_DESC(PL_op));
42d0e0b7 1682 default: NOOP;
2068cd4d 1683 }
bd81e77b
NC
1684 SvNV_set(sv, num);
1685 (void)SvNOK_only(sv); /* validate number */
1686 SvTAINT(sv);
79072805
LW
1687}
1688
645c22ef 1689/*
bd81e77b 1690=for apidoc sv_setnv_mg
645c22ef 1691
bd81e77b 1692Like C<sv_setnv>, but also handles 'set' magic.
645c22ef
DM
1693
1694=cut
1695*/
1696
bd81e77b 1697void
aad570aa 1698Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
79072805 1699{
7918f24d
NC
1700 PERL_ARGS_ASSERT_SV_SETNV_MG;
1701
bd81e77b
NC
1702 sv_setnv(sv,num);
1703 SvSETMAGIC(sv);
79072805
LW
1704}
1705
bd81e77b
NC
1706/* Print an "isn't numeric" warning, using a cleaned-up,
1707 * printable version of the offending string
1708 */
954c1994 1709
bd81e77b 1710STATIC void
aad570aa 1711S_not_a_number(pTHX_ SV *const sv)
79072805 1712{
97aff369 1713 dVAR;
bd81e77b
NC
1714 SV *dsv;
1715 char tmpbuf[64];
1716 const char *pv;
94463019 1717
7918f24d
NC
1718 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1719
94463019 1720 if (DO_UTF8(sv)) {
84bafc02 1721 dsv = newSVpvs_flags("", SVs_TEMP);
94463019
JH
1722 pv = sv_uni_display(dsv, sv, 10, 0);
1723 } else {
1724 char *d = tmpbuf;
551405c4 1725 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
94463019
JH
1726 /* each *s can expand to 4 chars + "...\0",
1727 i.e. need room for 8 chars */
ecdeb87c 1728
00b6aa41
AL
1729 const char *s = SvPVX_const(sv);
1730 const char * const end = s + SvCUR(sv);
1731 for ( ; s < end && d < limit; s++ ) {
94463019
JH
1732 int ch = *s & 0xFF;
1733 if (ch & 128 && !isPRINT_LC(ch)) {
1734 *d++ = 'M';
1735 *d++ = '-';
1736 ch &= 127;
1737 }
1738 if (ch == '\n') {
1739 *d++ = '\\';
1740 *d++ = 'n';
1741 }
1742 else if (ch == '\r') {
1743 *d++ = '\\';
1744 *d++ = 'r';
1745 }
1746 else if (ch == '\f') {
1747 *d++ = '\\';
1748 *d++ = 'f';
1749 }
1750 else if (ch == '\\') {
1751 *d++ = '\\';
1752 *d++ = '\\';
1753 }
1754 else if (ch == '\0') {
1755 *d++ = '\\';
1756 *d++ = '0';
1757 }
1758 else if (isPRINT_LC(ch))
1759 *d++ = ch;
1760 else {
1761 *d++ = '^';
1762 *d++ = toCTRL(ch);
1763 }
1764 }
1765 if (s < end) {
1766 *d++ = '.';
1767 *d++ = '.';
1768 *d++ = '.';
1769 }
1770 *d = '\0';
1771 pv = tmpbuf;
a0d0e21e 1772 }
a0d0e21e 1773
533c011a 1774 if (PL_op)
9014280d 1775 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019
JH
1776 "Argument \"%s\" isn't numeric in %s", pv,
1777 OP_DESC(PL_op));
a0d0e21e 1778 else
9014280d 1779 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019 1780 "Argument \"%s\" isn't numeric", pv);
a0d0e21e
LW
1781}
1782
c2988b20
NC
1783/*
1784=for apidoc looks_like_number
1785
645c22ef
DM
1786Test if the content of an SV looks like a number (or is a number).
1787C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1788non-numeric warning), even if your atof() doesn't grok them.
c2988b20
NC
1789
1790=cut
1791*/
1792
1793I32
aad570aa 1794Perl_looks_like_number(pTHX_ SV *const sv)
c2988b20 1795{
a3b680e6 1796 register const char *sbegin;
c2988b20
NC
1797 STRLEN len;
1798
7918f24d
NC
1799 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1800
c2988b20 1801 if (SvPOK(sv)) {
3f7c398e 1802 sbegin = SvPVX_const(sv);
c2988b20
NC
1803 len = SvCUR(sv);
1804 }
1805 else if (SvPOKp(sv))
83003860 1806 sbegin = SvPV_const(sv, len);
c2988b20 1807 else
e0ab1c0e 1808 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
c2988b20
NC
1809 return grok_number(sbegin, len, NULL);
1810}
25da4f38 1811
19f6321d
NC
1812STATIC bool
1813S_glob_2number(pTHX_ GV * const gv)
180488f8
NC
1814{
1815 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1816 SV *const buffer = sv_newmortal();
1817
7918f24d
NC
1818 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1819
180488f8
NC
1820 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1821 is on. */
1822 SvFAKE_off(gv);
1823 gv_efullname3(buffer, gv, "*");
1824 SvFLAGS(gv) |= wasfake;
1825
675c862f
AL
1826 /* We know that all GVs stringify to something that is not-a-number,
1827 so no need to test that. */
1828 if (ckWARN(WARN_NUMERIC))
1829 not_a_number(buffer);
1830 /* We just want something true to return, so that S_sv_2iuv_common
1831 can tail call us and return true. */
19f6321d 1832 return TRUE;
675c862f
AL
1833}
1834
25da4f38
IZ
1835/* Actually, ISO C leaves conversion of UV to IV undefined, but
1836 until proven guilty, assume that things are not that bad... */
1837
645c22ef
DM
1838/*
1839 NV_PRESERVES_UV:
1840
1841 As 64 bit platforms often have an NV that doesn't preserve all bits of
28e5dec8
JH
1842 an IV (an assumption perl has been based on to date) it becomes necessary
1843 to remove the assumption that the NV always carries enough precision to
1844 recreate the IV whenever needed, and that the NV is the canonical form.
1845 Instead, IV/UV and NV need to be given equal rights. So as to not lose
645c22ef 1846 precision as a side effect of conversion (which would lead to insanity
28e5dec8
JH
1847 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1848 1) to distinguish between IV/UV/NV slots that have cached a valid
1849 conversion where precision was lost and IV/UV/NV slots that have a
1850 valid conversion which has lost no precision
645c22ef 1851 2) to ensure that if a numeric conversion to one form is requested that
28e5dec8
JH
1852 would lose precision, the precise conversion (or differently
1853 imprecise conversion) is also performed and cached, to prevent
1854 requests for different numeric formats on the same SV causing
1855 lossy conversion chains. (lossless conversion chains are perfectly
1856 acceptable (still))
1857
1858
1859 flags are used:
1860 SvIOKp is true if the IV slot contains a valid value
1861 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1862 SvNOKp is true if the NV slot contains a valid value
1863 SvNOK is true only if the NV value is accurate
1864
1865 so
645c22ef 1866 while converting from PV to NV, check to see if converting that NV to an
28e5dec8
JH
1867 IV(or UV) would lose accuracy over a direct conversion from PV to
1868 IV(or UV). If it would, cache both conversions, return NV, but mark
1869 SV as IOK NOKp (ie not NOK).
1870
645c22ef 1871 While converting from PV to IV, check to see if converting that IV to an
28e5dec8
JH
1872 NV would lose accuracy over a direct conversion from PV to NV. If it
1873 would, cache both conversions, flag similarly.
1874
1875 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1876 correctly because if IV & NV were set NV *always* overruled.
645c22ef
DM
1877 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1878 changes - now IV and NV together means that the two are interchangeable:
28e5dec8 1879 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
d460ef45 1880
645c22ef
DM
1881 The benefit of this is that operations such as pp_add know that if
1882 SvIOK is true for both left and right operands, then integer addition
1883 can be used instead of floating point (for cases where the result won't
1884 overflow). Before, floating point was always used, which could lead to
28e5dec8
JH
1885 loss of precision compared with integer addition.
1886
1887 * making IV and NV equal status should make maths accurate on 64 bit
1888 platforms
1889 * may speed up maths somewhat if pp_add and friends start to use
645c22ef 1890 integers when possible instead of fp. (Hopefully the overhead in
28e5dec8
JH
1891 looking for SvIOK and checking for overflow will not outweigh the
1892 fp to integer speedup)
1893 * will slow down integer operations (callers of SvIV) on "inaccurate"
1894 values, as the change from SvIOK to SvIOKp will cause a call into
1895 sv_2iv each time rather than a macro access direct to the IV slot
1896 * should speed up number->string conversion on integers as IV is
645c22ef 1897 favoured when IV and NV are equally accurate
28e5dec8
JH
1898
1899 ####################################################################
645c22ef
DM
1900 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1901 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1902 On the other hand, SvUOK is true iff UV.
28e5dec8
JH
1903 ####################################################################
1904
645c22ef 1905 Your mileage will vary depending your CPU's relative fp to integer
28e5dec8
JH
1906 performance ratio.
1907*/
1908
1909#ifndef NV_PRESERVES_UV
645c22ef
DM
1910# define IS_NUMBER_UNDERFLOW_IV 1
1911# define IS_NUMBER_UNDERFLOW_UV 2
1912# define IS_NUMBER_IV_AND_UV 2
1913# define IS_NUMBER_OVERFLOW_IV 4
1914# define IS_NUMBER_OVERFLOW_UV 5
1915
1916/* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
28e5dec8
JH
1917
1918/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1919STATIC int
5de3775c 1920S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
47031da6
NC
1921# ifdef DEBUGGING
1922 , I32 numtype
1923# endif
1924 )
28e5dec8 1925{
97aff369 1926 dVAR;
7918f24d
NC
1927
1928 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1929
3f7c398e 1930 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
1931 if (SvNVX(sv) < (NV)IV_MIN) {
1932 (void)SvIOKp_on(sv);
1933 (void)SvNOK_on(sv);
45977657 1934 SvIV_set(sv, IV_MIN);
28e5dec8
JH
1935 return IS_NUMBER_UNDERFLOW_IV;
1936 }
1937 if (SvNVX(sv) > (NV)UV_MAX) {
1938 (void)SvIOKp_on(sv);
1939 (void)SvNOK_on(sv);
1940 SvIsUV_on(sv);
607fa7f2 1941 SvUV_set(sv, UV_MAX);
28e5dec8
JH
1942 return IS_NUMBER_OVERFLOW_UV;
1943 }
c2988b20
NC
1944 (void)SvIOKp_on(sv);
1945 (void)SvNOK_on(sv);
1946 /* Can't use strtol etc to convert this string. (See truth table in
1947 sv_2iv */
1948 if (SvNVX(sv) <= (UV)IV_MAX) {
45977657 1949 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
1950 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1951 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1952 } else {
1953 /* Integer is imprecise. NOK, IOKp */
1954 }
1955 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1956 }
1957 SvIsUV_on(sv);
607fa7f2 1958 SvUV_set(sv, U_V(SvNVX(sv)));
c2988b20
NC
1959 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1960 if (SvUVX(sv) == UV_MAX) {
1961 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1962 possibly be preserved by NV. Hence, it must be overflow.
1963 NOK, IOKp */
1964 return IS_NUMBER_OVERFLOW_UV;
1965 }
1966 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1967 } else {
1968 /* Integer is imprecise. NOK, IOKp */
28e5dec8 1969 }
c2988b20 1970 return IS_NUMBER_OVERFLOW_IV;
28e5dec8 1971}
645c22ef
DM
1972#endif /* !NV_PRESERVES_UV*/
1973
af359546 1974STATIC bool
7918f24d
NC
1975S_sv_2iuv_common(pTHX_ SV *const sv)
1976{
97aff369 1977 dVAR;
7918f24d
NC
1978
1979 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1980
af359546 1981 if (SvNOKp(sv)) {
28e5dec8
JH
1982 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1983 * without also getting a cached IV/UV from it at the same time
1984 * (ie PV->NV conversion should detect loss of accuracy and cache
af359546
NC
1985 * IV or UV at same time to avoid this. */
1986 /* IV-over-UV optimisation - choose to cache IV if possible */
25da4f38
IZ
1987
1988 if (SvTYPE(sv) == SVt_NV)
1989 sv_upgrade(sv, SVt_PVNV);
1990
28e5dec8
JH
1991 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1992 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1993 certainly cast into the IV range at IV_MAX, whereas the correct
1994 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1995 cases go to UV */
cab190d4
JD
1996#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1997 if (Perl_isnan(SvNVX(sv))) {
1998 SvUV_set(sv, 0);
1999 SvIsUV_on(sv);
fdbe6d7c 2000 return FALSE;
cab190d4 2001 }
cab190d4 2002#endif
28e5dec8 2003 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
45977657 2004 SvIV_set(sv, I_V(SvNVX(sv)));
28e5dec8
JH
2005 if (SvNVX(sv) == (NV) SvIVX(sv)
2006#ifndef NV_PRESERVES_UV
2007 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2008 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2009 /* Don't flag it as "accurately an integer" if the number
2010 came from a (by definition imprecise) NV operation, and
2011 we're outside the range of NV integer precision */
2012#endif
2013 ) {
a43d94f2
NC
2014 if (SvNOK(sv))
2015 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2016 else {
2017 /* scalar has trailing garbage, eg "42a" */
2018 }
28e5dec8 2019 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 2020 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
28e5dec8
JH
2021 PTR2UV(sv),
2022 SvNVX(sv),
2023 SvIVX(sv)));
2024
2025 } else {
2026 /* IV not precise. No need to convert from PV, as NV
2027 conversion would already have cached IV if it detected
2028 that PV->IV would be better than PV->NV->IV
2029 flags already correct - don't set public IOK. */
2030 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 2031 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
28e5dec8
JH
2032 PTR2UV(sv),
2033 SvNVX(sv),
2034 SvIVX(sv)));
2035 }
2036 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2037 but the cast (NV)IV_MIN rounds to a the value less (more
2038 negative) than IV_MIN which happens to be equal to SvNVX ??
2039 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2040 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2041 (NV)UVX == NVX are both true, but the values differ. :-(
2042 Hopefully for 2s complement IV_MIN is something like
2043 0x8000000000000000 which will be exact. NWC */
d460ef45 2044 }
25da4f38 2045 else {
607fa7f2 2046 SvUV_set(sv, U_V(SvNVX(sv)));
28e5dec8
JH
2047 if (
2048 (SvNVX(sv) == (NV) SvUVX(sv))
2049#ifndef NV_PRESERVES_UV
2050 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2051 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2052 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2053 /* Don't flag it as "accurately an integer" if the number
2054 came from a (by definition imprecise) NV operation, and
2055 we're outside the range of NV integer precision */
2056#endif
a43d94f2 2057 && SvNOK(sv)
28e5dec8
JH
2058 )
2059 SvIOK_on(sv);
25da4f38 2060 SvIsUV_on(sv);
1c846c1f 2061 DEBUG_c(PerlIO_printf(Perl_debug_log,
57def98f 2062 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
56431972 2063 PTR2UV(sv),
57def98f
JH
2064 SvUVX(sv),
2065 SvUVX(sv)));
25da4f38 2066 }
748a9306
LW
2067 }
2068 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2069 UV value;
504618e9 2070 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
af359546 2071 /* We want to avoid a possible problem when we cache an IV/ a UV which
25da4f38 2072 may be later translated to an NV, and the resulting NV is not
c2988b20
NC
2073 the same as the direct translation of the initial string
2074 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2075 be careful to ensure that the value with the .456 is around if the
2076 NV value is requested in the future).
1c846c1f 2077
af359546 2078 This means that if we cache such an IV/a UV, we need to cache the
25da4f38 2079 NV as well. Moreover, we trade speed for space, and do not
28e5dec8 2080 cache the NV if we are sure it's not needed.
25da4f38 2081 */
16b7a9a4 2082
c2988b20
NC
2083 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2084 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2085 == IS_NUMBER_IN_UV) {
5e045b90 2086 /* It's definitely an integer, only upgrade to PVIV */
28e5dec8
JH
2087 if (SvTYPE(sv) < SVt_PVIV)
2088 sv_upgrade(sv, SVt_PVIV);
f7bbb42a 2089 (void)SvIOK_on(sv);
c2988b20
NC
2090 } else if (SvTYPE(sv) < SVt_PVNV)
2091 sv_upgrade(sv, SVt_PVNV);
28e5dec8 2092
f2524eef 2093 /* If NVs preserve UVs then we only use the UV value if we know that
c2988b20
NC
2094 we aren't going to call atof() below. If NVs don't preserve UVs
2095 then the value returned may have more precision than atof() will
2096 return, even though value isn't perfectly accurate. */
2097 if ((numtype & (IS_NUMBER_IN_UV
2098#ifdef NV_PRESERVES_UV
2099 | IS_NUMBER_NOT_INT
2100#endif
2101 )) == IS_NUMBER_IN_UV) {
2102 /* This won't turn off the public IOK flag if it was set above */
2103 (void)SvIOKp_on(sv);
2104
2105 if (!(numtype & IS_NUMBER_NEG)) {
2106 /* positive */;
2107 if (value <= (UV)IV_MAX) {
45977657 2108 SvIV_set(sv, (IV)value);
c2988b20 2109 } else {
af359546 2110 /* it didn't overflow, and it was positive. */
607fa7f2 2111 SvUV_set(sv, value);
c2988b20
NC
2112 SvIsUV_on(sv);
2113 }
2114 } else {
2115 /* 2s complement assumption */
2116 if (value <= (UV)IV_MIN) {
45977657 2117 SvIV_set(sv, -(IV)value);
c2988b20
NC
2118 } else {
2119 /* Too negative for an IV. This is a double upgrade, but
d1be9408 2120 I'm assuming it will be rare. */
c2988b20
NC
2121 if (SvTYPE(sv) < SVt_PVNV)
2122 sv_upgrade(sv, SVt_PVNV);
2123 SvNOK_on(sv);
2124 SvIOK_off(sv);
2125 SvIOKp_on(sv);
9d6ce603 2126 SvNV_set(sv, -(NV)value);
45977657 2127 SvIV_set(sv, IV_MIN);
c2988b20
NC
2128 }
2129 }
2130 }
2131 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2132 will be in the previous block to set the IV slot, and the next
2133 block to set the NV slot. So no else here. */
2134
2135 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2136 != IS_NUMBER_IN_UV) {
2137 /* It wasn't an (integer that doesn't overflow the UV). */
3f7c398e 2138 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8 2139
c2988b20
NC
2140 if (! numtype && ckWARN(WARN_NUMERIC))
2141 not_a_number(sv);
28e5dec8 2142
65202027 2143#if defined(USE_LONG_DOUBLE)
c2988b20
NC
2144 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2145 PTR2UV(sv), SvNVX(sv)));
65202027 2146#else
1779d84d 2147 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
c2988b20 2148 PTR2UV(sv), SvNVX(sv)));
65202027 2149#endif
28e5dec8 2150
28e5dec8 2151#ifdef NV_PRESERVES_UV
af359546
NC
2152 (void)SvIOKp_on(sv);
2153 (void)SvNOK_on(sv);
2154 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2155 SvIV_set(sv, I_V(SvNVX(sv)));
2156 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2157 SvIOK_on(sv);
2158 } else {
6f207bd3 2159 NOOP; /* Integer is imprecise. NOK, IOKp */
af359546
NC
2160 }
2161 /* UV will not work better than IV */
2162 } else {
2163 if (SvNVX(sv) > (NV)UV_MAX) {
2164 SvIsUV_on(sv);
2165 /* Integer is inaccurate. NOK, IOKp, is UV */
2166 SvUV_set(sv, UV_MAX);
af359546
NC
2167 } else {
2168 SvUV_set(sv, U_V(SvNVX(sv)));
2169 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2170 NV preservse UV so can do correct comparison. */
2171 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2172 SvIOK_on(sv);
af359546 2173 } else {
6f207bd3 2174 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
af359546
NC
2175 }
2176 }
4b0c9573 2177 SvIsUV_on(sv);
af359546 2178 }
28e5dec8 2179#else /* NV_PRESERVES_UV */
c2988b20
NC
2180 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2181 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
af359546 2182 /* The IV/UV slot will have been set from value returned by
c2988b20
NC
2183 grok_number above. The NV slot has just been set using
2184 Atof. */
560b0c46 2185 SvNOK_on(sv);
c2988b20
NC
2186 assert (SvIOKp(sv));
2187 } else {
2188 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2189 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2190 /* Small enough to preserve all bits. */
2191 (void)SvIOKp_on(sv);
2192 SvNOK_on(sv);
45977657 2193 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
2194 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2195 SvIOK_on(sv);
2196 /* Assumption: first non-preserved integer is < IV_MAX,
2197 this NV is in the preserved range, therefore: */
2198 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2199 < (UV)IV_MAX)) {
32fdb065 2200 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
2201 }
2202 } else {
2203 /* IN_UV NOT_INT
2204 0 0 already failed to read UV.
2205 0 1 already failed to read UV.
2206 1 0 you won't get here in this case. IV/UV
2207 slot set, public IOK, Atof() unneeded.
2208 1 1 already read UV.
2209 so there's no point in sv_2iuv_non_preserve() attempting
2210 to use atol, strtol, strtoul etc. */
47031da6 2211# ifdef DEBUGGING
40a17c4c 2212 sv_2iuv_non_preserve (sv, numtype);
47031da6
NC
2213# else
2214 sv_2iuv_non_preserve (sv);
2215# endif
c2988b20
NC
2216 }
2217 }
28e5dec8 2218#endif /* NV_PRESERVES_UV */
a43d94f2
NC
2219 /* It might be more code efficient to go through the entire logic above
2220 and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2221 gets complex and potentially buggy, so more programmer efficient
2222 to do it this way, by turning off the public flags: */
2223 if (!numtype)
2224 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
25da4f38 2225 }
af359546
NC
2226 }
2227 else {
675c862f 2228 if (isGV_with_GP(sv))
159b6efe 2229 return glob_2number(MUTABLE_GV(sv));
180488f8 2230
af359546
NC
2231 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2232 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2233 report_uninit(sv);
2234 }
25da4f38
IZ
2235 if (SvTYPE(sv) < SVt_IV)
2236 /* Typically the caller expects that sv_any is not NULL now. */
2237 sv_upgrade(sv, SVt_IV);
af359546
NC
2238 /* Return 0 from the caller. */
2239 return TRUE;
2240 }
2241 return FALSE;
2242}
2243
2244/*
2245=for apidoc sv_2iv_flags
2246
2247Return the integer value of an SV, doing any necessary string
2248conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2249Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2250
2251=cut
2252*/
2253
2254IV
5de3775c 2255Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
af359546 2256{
97aff369 2257 dVAR;
af359546 2258 if (!sv)
a0d0e21e 2259 return 0;
a672f009 2260 if (SvGMAGICAL(sv) || SvVALID(sv)) {
2b2b6d6d
NC
2261 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2262 the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2263 In practice they are extremely unlikely to actually get anywhere
2264 accessible by user Perl code - the only way that I'm aware of is when
2265 a constant subroutine which is used as the second argument to index.
2266 */
af359546
NC
2267 if (flags & SV_GMAGIC)
2268 mg_get(sv);
2269 if (SvIOKp(sv))
2270 return SvIVX(sv);
2271 if (SvNOKp(sv)) {
2272 return I_V(SvNVX(sv));
2273 }
71c558c3
NC
2274 if (SvPOKp(sv) && SvLEN(sv)) {
2275 UV value;
2276 const int numtype
2277 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2278
2279 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2280 == IS_NUMBER_IN_UV) {
2281 /* It's definitely an integer */
2282 if (numtype & IS_NUMBER_NEG) {
2283 if (value < (UV)IV_MIN)
2284 return -(IV)value;
2285 } else {
2286 if (value < (UV)IV_MAX)
2287 return (IV)value;
2288 }
2289 }
2290 if (!numtype) {
2291 if (ckWARN(WARN_NUMERIC))
2292 not_a_number(sv);
2293 }
2294 return I_V(Atof(SvPVX_const(sv)));
2295 }
1c7ff15e
NC
2296 if (SvROK(sv)) {
2297 goto return_rok;
af359546 2298 }
1c7ff15e
NC
2299 assert(SvTYPE(sv) >= SVt_PVMG);
2300 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2301 } else if (SvTHINKFIRST(sv)) {
af359546 2302 if (SvROK(sv)) {
1c7ff15e 2303 return_rok:
af359546 2304 if (SvAMAGIC(sv)) {
aee036bb
DM
2305 SV * tmpstr;
2306 if (flags & SV_SKIP_OVERLOAD)
2307 return 0;
31d632c3 2308 tmpstr = AMG_CALLunary(sv, numer_amg);
af359546
NC
2309 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2310 return SvIV(tmpstr);
2311 }
2312 }
2313 return PTR2IV(SvRV(sv));
2314 }
2315 if (SvIsCOW(sv)) {
2316 sv_force_normal_flags(sv, 0);
2317 }
2318 if (SvREADONLY(sv) && !SvOK(sv)) {
2319 if (ckWARN(WARN_UNINITIALIZED))
2320 report_uninit(sv);
2321 return 0;
2322 }
2323 }
2324 if (!SvIOKp(sv)) {
2325 if (S_sv_2iuv_common(aTHX_ sv))
2326 return 0;
79072805 2327 }
1d7c1841
GS
2328 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2329 PTR2UV(sv),SvIVX(sv)));
25da4f38 2330 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
79072805
LW
2331}
2332
645c22ef 2333/*
891f9566 2334=for apidoc sv_2uv_flags
645c22ef
DM
2335
2336Return the unsigned integer value of an SV, doing any necessary string
891f9566
YST
2337conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2338Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
645c22ef
DM
2339
2340=cut
2341*/
2342
ff68c719 2343UV
5de3775c 2344Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
ff68c719 2345{
97aff369 2346 dVAR;
ff68c719 2347 if (!sv)
2348 return 0;
a672f009 2349 if (SvGMAGICAL(sv) || SvVALID(sv)) {
2b2b6d6d
NC
2350 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2351 the same flag bit as SVf_IVisUV, so must not let them cache IVs. */
891f9566
YST
2352 if (flags & SV_GMAGIC)
2353 mg_get(sv);
ff68c719 2354 if (SvIOKp(sv))
2355 return SvUVX(sv);
2356 if (SvNOKp(sv))
2357 return U_V(SvNVX(sv));
71c558c3
NC
2358 if (SvPOKp(sv) && SvLEN(sv)) {
2359 UV value;
2360 const int numtype
2361 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2362
2363 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2364 == IS_NUMBER_IN_UV) {
2365 /* It's definitely an integer */
2366 if (!(numtype & IS_NUMBER_NEG))
2367 return value;
2368 }
2369 if (!numtype) {
2370 if (ckWARN(WARN_NUMERIC))
2371 not_a_number(sv);
2372 }
2373 return U_V(Atof(SvPVX_const(sv)));
2374 }
1c7ff15e
NC
2375 if (SvROK(sv)) {
2376 goto return_rok;
3fe9a6f1 2377 }
1c7ff15e
NC
2378 assert(SvTYPE(sv) >= SVt_PVMG);
2379 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2380 } else if (SvTHINKFIRST(sv)) {
ff68c719 2381 if (SvROK(sv)) {
1c7ff15e 2382 return_rok:
deb46114 2383 if (SvAMAGIC(sv)) {
aee036bb
DM
2384 SV *tmpstr;
2385 if (flags & SV_SKIP_OVERLOAD)
2386 return 0;
31d632c3 2387 tmpstr = AMG_CALLunary(sv, numer_amg);
deb46114
NC
2388 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2389 return SvUV(tmpstr);
2390 }
2391 }
2392 return PTR2UV(SvRV(sv));
ff68c719 2393 }
765f542d
NC
2394 if (SvIsCOW(sv)) {
2395 sv_force_normal_flags(sv, 0);
8a818333 2396 }
0336b60e 2397 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2398 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2399 report_uninit(sv);
ff68c719 2400 return 0;
2401 }
2402 }
af359546
NC
2403 if (!SvIOKp(sv)) {
2404 if (S_sv_2iuv_common(aTHX_ sv))
2405 return 0;
ff68c719 2406 }
25da4f38 2407
1d7c1841
GS
2408 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2409 PTR2UV(sv),SvUVX(sv)));
25da4f38 2410 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
ff68c719 2411}
2412
645c22ef 2413/*
196007d1 2414=for apidoc sv_2nv_flags
645c22ef
DM
2415
2416Return the num value of an SV, doing any necessary string or integer
39d5de13
DM
2417conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2418Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
645c22ef
DM
2419
2420=cut
2421*/
2422
65202027 2423NV
39d5de13 2424Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
79072805 2425{
97aff369 2426 dVAR;
79072805
LW
2427 if (!sv)
2428 return 0.0;
a672f009 2429 if (SvGMAGICAL(sv) || SvVALID(sv)) {
2b2b6d6d
NC
2430 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2431 the same flag bit as SVf_IVisUV, so must not let them cache NVs. */
39d5de13
DM
2432 if (flags & SV_GMAGIC)
2433 mg_get(sv);
463ee0b2
LW
2434 if (SvNOKp(sv))
2435 return SvNVX(sv);
0aa395f8 2436 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
041457d9 2437 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
504618e9 2438 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
a0d0e21e 2439 not_a_number(sv);
3f7c398e 2440 return Atof(SvPVX_const(sv));
a0d0e21e 2441 }
25da4f38 2442 if (SvIOKp(sv)) {
1c846c1f 2443 if (SvIsUV(sv))
65202027 2444 return (NV)SvUVX(sv);
25da4f38 2445 else
65202027 2446 return (NV)SvIVX(sv);
47a72cb8
NC
2447 }
2448 if (SvROK(sv)) {
2449 goto return_rok;
2450 }
2451 assert(SvTYPE(sv) >= SVt_PVMG);
2452 /* This falls through to the report_uninit near the end of the
2453 function. */
2454 } else if (SvTHINKFIRST(sv)) {
a0d0e21e 2455 if (SvROK(sv)) {
47a72cb8 2456 return_rok:
deb46114 2457 if (SvAMAGIC(sv)) {
aee036bb
DM
2458 SV *tmpstr;
2459 if (flags & SV_SKIP_OVERLOAD)
2460 return 0;
31d632c3 2461 tmpstr = AMG_CALLunary(sv, numer_amg);
deb46114
NC
2462 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2463 return SvNV(tmpstr);
2464 }
2465 }
2466 return PTR2NV(SvRV(sv));
a0d0e21e 2467 }
765f542d
NC
2468 if (SvIsCOW(sv)) {
2469 sv_force_normal_flags(sv, 0);
8a818333 2470 }
0336b60e 2471 if (SvREADONLY(sv) && !SvOK(sv)) {
599cee73 2472 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2473 report_uninit(sv);
ed6116ce
LW
2474 return 0.0;
2475 }
79072805
LW
2476 }
2477 if (SvTYPE(sv) < SVt_NV) {
7e25a7e9
NC
2478 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2479 sv_upgrade(sv, SVt_NV);
906f284f 2480#ifdef USE_LONG_DOUBLE
097ee67d 2481 DEBUG_c({
f93f4e46 2482 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2483 PerlIO_printf(Perl_debug_log,
2484 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2485 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2486 RESTORE_NUMERIC_LOCAL();
2487 });
65202027 2488#else
572bbb43 2489 DEBUG_c({
f93f4e46 2490 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2491 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
1d7c1841 2492 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2493 RESTORE_NUMERIC_LOCAL();
2494 });
572bbb43 2495#endif
79072805
LW
2496 }
2497 else if (SvTYPE(sv) < SVt_PVNV)
2498 sv_upgrade(sv, SVt_PVNV);
59d8ce62
NC
2499 if (SvNOKp(sv)) {
2500 return SvNVX(sv);
61604483 2501 }
59d8ce62 2502 if (SvIOKp(sv)) {
9d6ce603 2503 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
28e5dec8 2504#ifdef NV_PRESERVES_UV
a43d94f2
NC
2505 if (SvIOK(sv))
2506 SvNOK_on(sv);
2507 else
2508 SvNOKp_on(sv);
28e5dec8
JH
2509#else
2510 /* Only set the public NV OK flag if this NV preserves the IV */
2511 /* Check it's not 0xFFFFFFFFFFFFFFFF */
a43d94f2
NC
2512 if (SvIOK(sv) &&
2513 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
28e5dec8
JH
2514 : (SvIVX(sv) == I_V(SvNVX(sv))))
2515 SvNOK_on(sv);
2516 else
2517 SvNOKp_on(sv);
2518#endif
93a17b20 2519 }
748a9306 2520 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2521 UV value;
3f7c398e 2522 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
041457d9 2523 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
a0d0e21e 2524 not_a_number(sv);
28e5dec8 2525#ifdef NV_PRESERVES_UV
c2988b20
NC
2526 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2527 == IS_NUMBER_IN_UV) {
5e045b90 2528 /* It's definitely an integer */
9d6ce603 2529 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
c2988b20 2530 } else
3f7c398e 2531 SvNV_set(sv, Atof(SvPVX_const(sv)));
a43d94f2
NC
2532 if (numtype)
2533 SvNOK_on(sv);
2534 else
2535 SvNOKp_on(sv);
28e5dec8 2536#else
3f7c398e 2537 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2538 /* Only set the public NV OK flag if this NV preserves the value in
2539 the PV at least as well as an IV/UV would.
2540 Not sure how to do this 100% reliably. */
2541 /* if that shift count is out of range then Configure's test is
2542 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2543 UV_BITS */
2544 if (((UV)1 << NV_PRESERVES_UV_BITS) >
c2988b20 2545 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
28e5dec8 2546 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
c2988b20
NC
2547 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2548 /* Can't use strtol etc to convert this string, so don't try.
2549 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2550 SvNOK_on(sv);
2551 } else {
2552 /* value has been set. It may not be precise. */
2553 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2554 /* 2s complement assumption for (UV)IV_MIN */
2555 SvNOK_on(sv); /* Integer is too negative. */
2556 } else {
2557 SvNOKp_on(sv);
2558 SvIOKp_on(sv);
6fa402ec 2559
c2988b20 2560 if (numtype & IS_NUMBER_NEG) {
45977657 2561 SvIV_set(sv, -(IV)value);
c2988b20 2562 } else if (value <= (UV)IV_MAX) {
45977657 2563 SvIV_set(sv, (IV)value);
c2988b20 2564 } else {
607fa7f2 2565 SvUV_set(sv, value);
c2988b20
NC
2566 SvIsUV_on(sv);
2567 }
2568
2569 if (numtype & IS_NUMBER_NOT_INT) {
2570 /* I believe that even if the original PV had decimals,
2571 they are lost beyond the limit of the FP precision.
2572 However, neither is canonical, so both only get p
2573 flags. NWC, 2000/11/25 */
2574 /* Both already have p flags, so do nothing */
2575 } else {
66a1b24b 2576 const NV nv = SvNVX(sv);
c2988b20
NC
2577 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2578 if (SvIVX(sv) == I_V(nv)) {
2579 SvNOK_on(sv);
c2988b20 2580 } else {
c2988b20
NC
2581 /* It had no "." so it must be integer. */
2582 }
00b6aa41 2583 SvIOK_on(sv);
c2988b20
NC
2584 } else {
2585 /* between IV_MAX and NV(UV_MAX).
2586 Could be slightly > UV_MAX */
6fa402ec 2587
c2988b20
NC
2588 if (numtype & IS_NUMBER_NOT_INT) {
2589 /* UV and NV both imprecise. */
2590 } else {
66a1b24b 2591 const UV nv_as_uv = U_V(nv);
c2988b20
NC
2592
2593 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2594 SvNOK_on(sv);
c2988b20 2595 }
00b6aa41 2596 SvIOK_on(sv);
c2988b20
NC
2597 }
2598 }
2599 }
2600 }
2601 }
a43d94f2
NC
2602 /* It might be more code efficient to go through the entire logic above
2603 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2604 gets complex and potentially buggy, so more programmer efficient
2605 to do it this way, by turning off the public flags: */
2606 if (!numtype)
2607 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
28e5dec8 2608#endif /* NV_PRESERVES_UV */
93a17b20 2609 }
79072805 2610 else {
f7877b28 2611 if (isGV_with_GP(sv)) {
159b6efe 2612 glob_2number(MUTABLE_GV(sv));
180488f8
NC
2613 return 0.0;
2614 }
2615
041457d9 2616 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2617 report_uninit(sv);
7e25a7e9
NC
2618 assert (SvTYPE(sv) >= SVt_NV);
2619 /* Typically the caller expects that sv_any is not NULL now. */
2620 /* XXX Ilya implies that this is a bug in callers that assume this
2621 and ideally should be fixed. */
a0d0e21e 2622 return 0.0;
79072805 2623 }
572bbb43 2624#if defined(USE_LONG_DOUBLE)
097ee67d 2625 DEBUG_c({
f93f4e46 2626 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2627 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2628 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2629 RESTORE_NUMERIC_LOCAL();
2630 });
65202027 2631#else
572bbb43 2632 DEBUG_c({
f93f4e46 2633 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2634 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
1d7c1841 2635 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2636 RESTORE_NUMERIC_LOCAL();
2637 });
572bbb43 2638#endif
463ee0b2 2639 return SvNVX(sv);
79072805
LW
2640}
2641
800401ee
JH
2642/*
2643=for apidoc sv_2num
2644
2645Return an SV with the numeric value of the source SV, doing any necessary
a196a5fa
JH
2646reference or overload conversion. You must use the C<SvNUM(sv)> macro to
2647access this function.
800401ee
JH
2648
2649=cut
2650*/
2651
2652SV *
5de3775c 2653Perl_sv_2num(pTHX_ register SV *const sv)
800401ee 2654{
7918f24d
NC
2655 PERL_ARGS_ASSERT_SV_2NUM;
2656
b9ee0594
RGS
2657 if (!SvROK(sv))
2658 return sv;
800401ee 2659 if (SvAMAGIC(sv)) {
31d632c3 2660 SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
a02ec77a 2661 TAINT_IF(tmpsv && SvTAINTED(tmpsv));
800401ee
JH
2662 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2663 return sv_2num(tmpsv);
2664 }
2665 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2666}
2667
645c22ef
DM
2668/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2669 * UV as a string towards the end of buf, and return pointers to start and
2670 * end of it.
2671 *
2672 * We assume that buf is at least TYPE_CHARS(UV) long.
2673 */
2674
864dbfa3 2675static char *
5de3775c 2676S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
25da4f38 2677{
25da4f38 2678 char *ptr = buf + TYPE_CHARS(UV);
823a54a3 2679 char * const ebuf = ptr;
25da4f38 2680 int sign;
25da4f38 2681
7918f24d
NC
2682 PERL_ARGS_ASSERT_UIV_2BUF;
2683
25da4f38
IZ
2684 if (is_uv)
2685 sign = 0;
2686 else if (iv >= 0) {
2687 uv = iv;
2688 sign = 0;
2689 } else {
2690 uv = -iv;
2691 sign = 1;
2692 }
2693 do {
eb160463 2694 *--ptr = '0' + (char)(uv % 10);
25da4f38
IZ
2695 } while (uv /= 10);
2696 if (sign)
2697 *--ptr = '-';
2698 *peob = ebuf;
2699 return ptr;
2700}
2701
645c22ef
DM
2702/*
2703=for apidoc sv_2pv_flags
2704
ff276b08 2705Returns a pointer to the string value of an SV, and sets *lp to its length.
645c22ef
DM
2706If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2707if necessary.
2708Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2709usually end up here too.
2710
2711=cut
2712*/
2713
8d6d96c1 2714char *
5de3775c 2715Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 2716{
97aff369 2717 dVAR;
79072805 2718 register char *s;
79072805 2719
463ee0b2 2720 if (!sv) {
cdb061a3
NC
2721 if (lp)
2722 *lp = 0;
73d840c0 2723 return (char *)"";
463ee0b2 2724 }
8990e307 2725 if (SvGMAGICAL(sv)) {
8d6d96c1
HS
2726 if (flags & SV_GMAGIC)
2727 mg_get(sv);
463ee0b2 2728 if (SvPOKp(sv)) {
cdb061a3
NC
2729 if (lp)
2730 *lp = SvCUR(sv);
10516c54
NC
2731 if (flags & SV_MUTABLE_RETURN)
2732 return SvPVX_mutable(sv);
4d84ee25
NC
2733 if (flags & SV_CONST_RETURN)
2734 return (char *)SvPVX_const(sv);
463ee0b2
LW
2735 return SvPVX(sv);
2736 }
75dfc8ec
NC
2737 if (SvIOKp(sv) || SvNOKp(sv)) {
2738 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
75dfc8ec
NC
2739 STRLEN len;
2740
2741 if (SvIOKp(sv)) {
e80fed9d 2742 len = SvIsUV(sv)
d9fad198
JH
2743 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2744 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
29912d93
NC
2745 } else if(SvNVX(sv) == 0.0) {
2746 tbuf[0] = '0';
2747 tbuf[1] = 0;
2748 len = 1;
75dfc8ec 2749 } else {
e8ada2d0
NC
2750 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2751 len = strlen(tbuf);
75dfc8ec 2752 }
b5b886f0
NC
2753 assert(!SvROK(sv));
2754 {
75dfc8ec
NC
2755 dVAR;
2756
75dfc8ec
NC
2757 SvUPGRADE(sv, SVt_PV);
2758 if (lp)
2759 *lp = len;
2760 s = SvGROW_mutable(sv, len + 1);
2761 SvCUR_set(sv, len);
2762 SvPOKp_on(sv);
10edeb5d 2763 return (char*)memcpy(s, tbuf, len + 1);
75dfc8ec 2764 }
463ee0b2 2765 }
1c7ff15e
NC
2766 if (SvROK(sv)) {
2767 goto return_rok;
2768 }
2769 assert(SvTYPE(sv) >= SVt_PVMG);
2770 /* This falls through to the report_uninit near the end of the
2771 function. */
2772 } else if (SvTHINKFIRST(sv)) {
ed6116ce 2773 if (SvROK(sv)) {
1c7ff15e 2774 return_rok:
deb46114 2775 if (SvAMAGIC(sv)) {
aee036bb
DM
2776 SV *tmpstr;
2777 if (flags & SV_SKIP_OVERLOAD)
2778 return NULL;
31d632c3 2779 tmpstr = AMG_CALLunary(sv, string_amg);
a02ec77a 2780 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
deb46114
NC
2781 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2782 /* Unwrap this: */
2783 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2784 */
2785
2786 char *pv;
2787 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2788 if (flags & SV_CONST_RETURN) {
2789 pv = (char *) SvPVX_const(tmpstr);
2790 } else {
2791 pv = (flags & SV_MUTABLE_RETURN)
2792 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2793 }
2794 if (lp)
2795 *lp = SvCUR(tmpstr);
50adf7d2 2796 } else {
deb46114 2797 pv = sv_2pv_flags(tmpstr, lp, flags);
50adf7d2 2798 }
deb46114
NC
2799 if (SvUTF8(tmpstr))
2800 SvUTF8_on(sv);
2801 else
2802 SvUTF8_off(sv);
2803 return pv;
50adf7d2 2804 }
deb46114
NC
2805 }
2806 {
fafee734
NC
2807 STRLEN len;
2808 char *retval;
2809 char *buffer;
d2c6dc5e 2810 SV *const referent = SvRV(sv);
d8eae41e
NC
2811
2812 if (!referent) {
fafee734
NC
2813 len = 7;
2814 retval = buffer = savepvn("NULLREF", len);
5c35adbb 2815 } else if (SvTYPE(referent) == SVt_REGEXP) {
d2c6dc5e 2816 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
67d2d14d
AB
2817 I32 seen_evals = 0;
2818
2819 assert(re);
2820
2821 /* If the regex is UTF-8 we want the containing scalar to
2822 have an UTF-8 flag too */
2823 if (RX_UTF8(re))
2824 SvUTF8_on(sv);
2825 else
2826 SvUTF8_off(sv);
2827
2828 if ((seen_evals = RX_SEEN_EVALS(re)))
2829 PL_reginterp_cnt += seen_evals;
2830
2831 if (lp)
2832 *lp = RX_WRAPLEN(re);
2833
2834 return RX_WRAPPED(re);
d8eae41e
NC
2835 } else {
2836 const char *const typestr = sv_reftype(referent, 0);
fafee734
NC
2837 const STRLEN typelen = strlen(typestr);
2838 UV addr = PTR2UV(referent);
2839 const char *stashname = NULL;
2840 STRLEN stashnamelen = 0; /* hush, gcc */
2841 const char *buffer_end;
d8eae41e 2842
d8eae41e 2843 if (SvOBJECT(referent)) {
fafee734
NC
2844 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2845
2846 if (name) {
2847 stashname = HEK_KEY(name);
2848 stashnamelen = HEK_LEN(name);
2849
2850 if (HEK_UTF8(name)) {
2851 SvUTF8_on(sv);
2852 } else {
2853 SvUTF8_off(sv);
2854 }
2855 } else {
2856 stashname = "__ANON__";
2857 stashnamelen = 8;
2858 }
2859 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2860 + 2 * sizeof(UV) + 2 /* )\0 */;
2861 } else {
2862 len = typelen + 3 /* (0x */
2863 + 2 * sizeof(UV) + 2 /* )\0 */;
d8eae41e 2864 }
fafee734
NC
2865
2866 Newx(buffer, len, char);
2867 buffer_end = retval = buffer + len;
2868
2869 /* Working backwards */
2870 *--retval = '\0';
2871 *--retval = ')';
2872 do {
2873 *--retval = PL_hexdigit[addr & 15];
2874 } while (addr >>= 4);
2875 *--retval = 'x';
2876 *--retval = '0';
2877 *--retval = '(';
2878
2879 retval -= typelen;
2880 memcpy(retval, typestr, typelen);
2881
2882 if (stashname) {
2883 *--retval = '=';
2884 retval -= stashnamelen;
2885 memcpy(retval, stashname, stashnamelen);
2886 }
486ec47a 2887 /* retval may not necessarily have reached the start of the
fafee734
NC
2888 buffer here. */
2889 assert (retval >= buffer);
2890
2891 len = buffer_end - retval - 1; /* -1 for that \0 */
c080367d 2892 }
042dae7a 2893 if (lp)
fafee734
NC
2894 *lp = len;
2895 SAVEFREEPV(buffer);
2896 return retval;
463ee0b2 2897 }
79072805 2898 }
0336b60e 2899 if (SvREADONLY(sv) && !SvOK(sv)) {
cdb061a3
NC
2900 if (lp)
2901 *lp = 0;
9f621bb0
NC
2902 if (flags & SV_UNDEF_RETURNS_NULL)
2903 return NULL;
2904 if (ckWARN(WARN_UNINITIALIZED))
2905 report_uninit(sv);
73d840c0 2906 return (char *)"";
79072805 2907 }
79072805 2908 }
28e5dec8
JH
2909 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2910 /* I'm assuming that if both IV and NV are equally valid then
2911 converting the IV is going to be more efficient */
e1ec3a88 2912 const U32 isUIOK = SvIsUV(sv);
28e5dec8
JH
2913 char buf[TYPE_CHARS(UV)];
2914 char *ebuf, *ptr;
97a130b8 2915 STRLEN len;
28e5dec8
JH
2916
2917 if (SvTYPE(sv) < SVt_PVIV)
2918 sv_upgrade(sv, SVt_PVIV);
4ea1d550 2919 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
97a130b8 2920 len = ebuf - ptr;
5902b6a9 2921 /* inlined from sv_setpvn */
97a130b8
NC
2922 s = SvGROW_mutable(sv, len + 1);
2923 Move(ptr, s, len, char);
2924 s += len;
28e5dec8 2925 *s = '\0';
28e5dec8
JH
2926 }
2927 else if (SvNOKp(sv)) {
79072805
LW
2928 if (SvTYPE(sv) < SVt_PVNV)
2929 sv_upgrade(sv, SVt_PVNV);
29912d93
NC
2930 if (SvNVX(sv) == 0.0) {
2931 s = SvGROW_mutable(sv, 2);
2932 *s++ = '0';
2933 *s = '\0';
2934 } else {
2935 dSAVE_ERRNO;
2936 /* The +20 is pure guesswork. Configure test needed. --jhi */
2937 s = SvGROW_mutable(sv, NV_DIG + 20);
2938 /* some Xenix systems wipe out errno here */
2d4389e4 2939 Gconvert(SvNVX(sv), NV_DIG, 0, s);
29912d93
NC
2940 RESTORE_ERRNO;
2941 while (*s) s++;
bbce6d69 2942 }
79072805
LW
2943#ifdef hcx
2944 if (s[-1] == '.')
46fc3d4c 2945 *--s = '\0';
79072805
LW
2946#endif
2947 }
79072805 2948 else {
8d1c3e26
NC
2949 if (isGV_with_GP(sv)) {
2950 GV *const gv = MUTABLE_GV(sv);
2951 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2952 SV *const buffer = sv_newmortal();
2953
2954 /* FAKE globs can get coerced, so need to turn this off temporarily
2955 if it is on. */
2956 SvFAKE_off(gv);
2957 gv_efullname3(buffer, gv, "*");
2958 SvFLAGS(gv) |= wasfake;
2959
1809c940
DM
2960 if (SvPOK(buffer)) {
2961 if (lp) {
2962 *lp = SvCUR(buffer);
2963 }
2964 return SvPVX(buffer);
2965 }
2966 else {
2967 if (lp)
2968 *lp = 0;
2969 return (char *)"";
8d1c3e26 2970 }
8d1c3e26 2971 }
180488f8 2972
cdb061a3 2973 if (lp)
00b6aa41 2974 *lp = 0;
9f621bb0
NC
2975 if (flags & SV_UNDEF_RETURNS_NULL)
2976 return NULL;
2977 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2978 report_uninit(sv);
25da4f38
IZ
2979 if (SvTYPE(sv) < SVt_PV)
2980 /* Typically the caller expects that sv_any is not NULL now. */
2981 sv_upgrade(sv, SVt_PV);
73d840c0 2982 return (char *)"";
79072805 2983 }
cdb061a3 2984 {
823a54a3 2985 const STRLEN len = s - SvPVX_const(sv);
cdb061a3
NC
2986 if (lp)
2987 *lp = len;
2988 SvCUR_set(sv, len);
2989 }
79072805 2990 SvPOK_on(sv);
1d7c1841 2991 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 2992 PTR2UV(sv),SvPVX_const(sv)));
4d84ee25
NC
2993 if (flags & SV_CONST_RETURN)
2994 return (char *)SvPVX_const(sv);
10516c54
NC
2995 if (flags & SV_MUTABLE_RETURN)
2996 return SvPVX_mutable(sv);
463ee0b2
LW
2997 return SvPVX(sv);
2998}
2999
645c22ef 3000/*
6050d10e
JP
3001=for apidoc sv_copypv
3002
3003Copies a stringified representation of the source SV into the
3004destination SV. Automatically performs any necessary mg_get and
54f0641b 3005coercion of numeric values into strings. Guaranteed to preserve
2575c402 3006UTF8 flag even from overloaded objects. Similar in nature to
54f0641b
NIS
3007sv_2pv[_flags] but operates directly on an SV instead of just the
3008string. Mostly uses sv_2pv_flags to do its work, except when that
6050d10e
JP
3009would lose the UTF-8'ness of the PV.
3010
3011=cut
3012*/
3013
3014void
5de3775c 3015Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
6050d10e 3016{
446eaa42 3017 STRLEN len;
53c1dcc0 3018 const char * const s = SvPV_const(ssv,len);
7918f24d
NC
3019
3020 PERL_ARGS_ASSERT_SV_COPYPV;
3021
cb50f42d 3022 sv_setpvn(dsv,s,len);
446eaa42 3023 if (SvUTF8(ssv))
cb50f42d 3024 SvUTF8_on(dsv);
446eaa42 3025 else
cb50f42d 3026 SvUTF8_off(dsv);
6050d10e
JP
3027}
3028
3029/*
645c22ef
DM
3030=for apidoc sv_2pvbyte
3031
3032Return a pointer to the byte-encoded representation of the SV, and set *lp
1e54db1a 3033to its length. May cause the SV to be downgraded from UTF-8 as a
645c22ef
DM
3034side-effect.
3035
3036Usually accessed via the C<SvPVbyte> macro.
3037
3038=cut
3039*/
3040
7340a771 3041char *
5de3775c 3042Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3043{
7918f24d
NC
3044 PERL_ARGS_ASSERT_SV_2PVBYTE;
3045
71eb6d8c 3046 SvGETMAGIC(sv);
0875d2fe 3047 sv_utf8_downgrade(sv,0);
71eb6d8c 3048 return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
7340a771
GS
3049}
3050
645c22ef 3051/*
035cbb0e
RGS
3052=for apidoc sv_2pvutf8
3053
3054Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3055to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3056
3057Usually accessed via the C<SvPVutf8> macro.
3058
3059=cut
3060*/
645c22ef 3061
7340a771 3062char *
7bc54cea 3063Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3064{
7918f24d
NC
3065 PERL_ARGS_ASSERT_SV_2PVUTF8;
3066
035cbb0e
RGS
3067 sv_utf8_upgrade(sv);
3068 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771 3069}
1c846c1f 3070
7ee2227d 3071
645c22ef
DM
3072/*
3073=for apidoc sv_2bool
3074
06c841cf
FC
3075This macro is only used by sv_true() or its macro equivalent, and only if
3076the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3077It calls sv_2bool_flags with the SV_GMAGIC flag.
3078
3079=for apidoc sv_2bool_flags
3080
3081This function is only used by sv_true() and friends, and only if
3082the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
3083contain SV_GMAGIC, then it does an mg_get() first.
3084
645c22ef
DM
3085
3086=cut
3087*/
3088
463ee0b2 3089bool
06c841cf 3090Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
463ee0b2 3091{
97aff369 3092 dVAR;
7918f24d 3093
06c841cf 3094 PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
7918f24d 3095
06c841cf 3096 if(flags & SV_GMAGIC) SvGETMAGIC(sv);
463ee0b2 3097
a0d0e21e
LW
3098 if (!SvOK(sv))
3099 return 0;
3100 if (SvROK(sv)) {
fabdb6c0 3101 if (SvAMAGIC(sv)) {
31d632c3 3102 SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
fabdb6c0 3103 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
f2338a2e 3104 return cBOOL(SvTRUE(tmpsv));
fabdb6c0
AL
3105 }
3106 return SvRV(sv) != 0;
a0d0e21e 3107 }
463ee0b2 3108 if (SvPOKp(sv)) {
53c1dcc0
AL
3109 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3110 if (Xpvtmp &&
339049b0 3111 (*sv->sv_u.svu_pv > '0' ||
11343788 3112 Xpvtmp->xpv_cur > 1 ||
339049b0 3113 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
463ee0b2
LW
3114 return 1;
3115 else
3116 return 0;
3117 }
3118 else {
3119 if (SvIOKp(sv))
3120 return SvIVX(sv) != 0;
3121 else {
3122 if (SvNOKp(sv))
3123 return SvNVX(sv) != 0.0;
180488f8 3124 else {
f7877b28 3125 if (isGV_with_GP(sv))
180488f8
NC
3126 return TRUE;
3127 else
3128 return FALSE;
3129 }
463ee0b2
LW
3130 }
3131 }
79072805
LW
3132}
3133
c461cf8f
JH
3134/*
3135=for apidoc sv_utf8_upgrade
3136
78ea37eb 3137Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3138Forces the SV to string form if it is not already.
2bbc8d55 3139Will C<mg_get> on C<sv> if appropriate.
4411f3b6 3140Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3141if the whole string is the same in UTF-8 as not.
3142Returns the number of bytes in the converted string
c461cf8f 3143
13a6c0e0
JH
3144This is not as a general purpose byte encoding to Unicode interface:
3145use the Encode extension for that.
3146
fe749c9a
KW
3147=for apidoc sv_utf8_upgrade_nomg
3148
3149Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3150
8d6d96c1
HS
3151=for apidoc sv_utf8_upgrade_flags
3152
78ea37eb 3153Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3154Forces the SV to string form if it is not already.
8d6d96c1 3155Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3156if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3157will C<mg_get> on C<sv> if appropriate, else not.
3158Returns the number of bytes in the converted string
3159C<sv_utf8_upgrade> and
8d6d96c1
HS
3160C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3161
13a6c0e0
JH
3162This is not as a general purpose byte encoding to Unicode interface:
3163use the Encode extension for that.
3164
8d6d96c1 3165=cut
b3ab6785
KW
3166
3167The grow version is currently not externally documented. It adds a parameter,
3168extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3169have free after it upon return. This allows the caller to reserve extra space
3170that it intends to fill, to avoid extra grows.
3171
3172Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3173which can be used to tell this function to not first check to see if there are
3174any characters that are different in UTF-8 (variant characters) which would
3175force it to allocate a new string to sv, but to assume there are. Typically
3176this flag is used by a routine that has already parsed the string to find that
3177there are such characters, and passes this information on so that the work
3178doesn't have to be repeated.
3179
3180(One might think that the calling routine could pass in the position of the
3181first such variant, so it wouldn't have to be found again. But that is not the
3182case, because typically when the caller is likely to use this flag, it won't be
3183calling this routine unless it finds something that won't fit into a byte.
3184Otherwise it tries to not upgrade and just use bytes. But some things that
3185do fit into a byte are variants in utf8, and the caller may not have been
3186keeping track of these.)
3187
3188If the routine itself changes the string, it adds a trailing NUL. Such a NUL
3189isn't guaranteed due to having other routines do the work in some input cases,
3190or if the input is already flagged as being in utf8.
3191
3192The speed of this could perhaps be improved for many cases if someone wanted to
3193write a fast function that counts the number of variant characters in a string,
3194especially if it could return the position of the first one.
3195
8d6d96c1
HS
3196*/
3197
3198STRLEN
b3ab6785 3199Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
8d6d96c1 3200{
97aff369 3201 dVAR;
7918f24d 3202
b3ab6785 3203 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
7918f24d 3204
808c356f
RGS
3205 if (sv == &PL_sv_undef)
3206 return 0;
e0e62c2a
NIS
3207 if (!SvPOK(sv)) {
3208 STRLEN len = 0;
d52b7888
NC
3209 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3210 (void) sv_2pv_flags(sv,&len, flags);
b3ab6785
KW
3211 if (SvUTF8(sv)) {
3212 if (extra) SvGROW(sv, SvCUR(sv) + extra);
d52b7888 3213 return len;
b3ab6785 3214 }
d52b7888 3215 } else {
33fb6f35 3216 (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
d52b7888 3217 }
e0e62c2a 3218 }
4411f3b6 3219
f5cee72b 3220 if (SvUTF8(sv)) {
b3ab6785 3221 if (extra) SvGROW(sv, SvCUR(sv) + extra);
5fec3b1d 3222 return SvCUR(sv);
f5cee72b 3223 }
5fec3b1d 3224
765f542d
NC
3225 if (SvIsCOW(sv)) {
3226 sv_force_normal_flags(sv, 0);
db42d148
NIS
3227 }
3228
b3ab6785 3229 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
799ef3cb 3230 sv_recode_to_utf8(sv, PL_encoding);
b3ab6785
KW
3231 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3232 return SvCUR(sv);
3233 }
3234
4e93345f
KW
3235 if (SvCUR(sv) == 0) {
3236 if (extra) SvGROW(sv, extra);
3237 } else { /* Assume Latin-1/EBCDIC */
c4e7c712 3238 /* This function could be much more efficient if we
2bbc8d55 3239 * had a FLAG in SVs to signal if there are any variant
c4e7c712 3240 * chars in the PV. Given that there isn't such a flag
b3ab6785
KW
3241 * make the loop as fast as possible (although there are certainly ways
3242 * to speed this up, eg. through vectorization) */
3243 U8 * s = (U8 *) SvPVX_const(sv);
3244 U8 * e = (U8 *) SvEND(sv);
3245 U8 *t = s;
3246 STRLEN two_byte_count = 0;
c4e7c712 3247
b3ab6785
KW
3248 if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3249
3250 /* See if really will need to convert to utf8. We mustn't rely on our
3251 * incoming SV being well formed and having a trailing '\0', as certain
3252 * code in pp_formline can send us partially built SVs. */
3253
c4e7c712 3254 while (t < e) {
53c1dcc0 3255 const U8 ch = *t++;
b3ab6785
KW
3256 if (NATIVE_IS_INVARIANT(ch)) continue;
3257
3258 t--; /* t already incremented; re-point to first variant */
3259 two_byte_count = 1;
3260 goto must_be_utf8;
c4e7c712 3261 }
b3ab6785
KW
3262
3263 /* utf8 conversion not needed because all are invariants. Mark as
3264 * UTF-8 even if no variant - saves scanning loop */
c4e7c712 3265 SvUTF8_on(sv);
b3ab6785
KW
3266 return SvCUR(sv);
3267
3268must_be_utf8:
3269
3270 /* Here, the string should be converted to utf8, either because of an
3271 * input flag (two_byte_count = 0), or because a character that
3272 * requires 2 bytes was found (two_byte_count = 1). t points either to
3273 * the beginning of the string (if we didn't examine anything), or to
3274 * the first variant. In either case, everything from s to t - 1 will
3275 * occupy only 1 byte each on output.
3276 *
3277 * There are two main ways to convert. One is to create a new string
3278 * and go through the input starting from the beginning, appending each
3279 * converted value onto the new string as we go along. It's probably
3280 * best to allocate enough space in the string for the worst possible
3281 * case rather than possibly running out of space and having to
3282 * reallocate and then copy what we've done so far. Since everything
3283 * from s to t - 1 is invariant, the destination can be initialized
3284 * with these using a fast memory copy
3285 *
3286 * The other way is to figure out exactly how big the string should be
3287 * by parsing the entire input. Then you don't have to make it big
3288 * enough to handle the worst possible case, and more importantly, if
3289 * the string you already have is large enough, you don't have to
3290 * allocate a new string, you can copy the last character in the input
3291 * string to the final position(s) that will be occupied by the
3292 * converted string and go backwards, stopping at t, since everything
3293 * before that is invariant.
3294 *
3295 * There are advantages and disadvantages to each method.
3296 *
3297 * In the first method, we can allocate a new string, do the memory
3298 * copy from the s to t - 1, and then proceed through the rest of the
3299 * string byte-by-byte.
3300 *
3301 * In the second method, we proceed through the rest of the input
3302 * string just calculating how big the converted string will be. Then
3303 * there are two cases:
3304 * 1) if the string has enough extra space to handle the converted
3305 * value. We go backwards through the string, converting until we
3306 * get to the position we are at now, and then stop. If this
3307 * position is far enough along in the string, this method is
3308 * faster than the other method. If the memory copy were the same
3309 * speed as the byte-by-byte loop, that position would be about
3310 * half-way, as at the half-way mark, parsing to the end and back
3311 * is one complete string's parse, the same amount as starting
3312 * over and going all the way through. Actually, it would be
3313 * somewhat less than half-way, as it's faster to just count bytes
3314 * than to also copy, and we don't have the overhead of allocating
3315 * a new string, changing the scalar to use it, and freeing the
3316 * existing one. But if the memory copy is fast, the break-even
3317 * point is somewhere after half way. The counting loop could be
3318 * sped up by vectorization, etc, to move the break-even point
3319 * further towards the beginning.
3320 * 2) if the string doesn't have enough space to handle the converted
3321 * value. A new string will have to be allocated, and one might
3322 * as well, given that, start from the beginning doing the first
3323 * method. We've spent extra time parsing the string and in
3324 * exchange all we've gotten is that we know precisely how big to
3325 * make the new one. Perl is more optimized for time than space,
3326 * so this case is a loser.
3327 * So what I've decided to do is not use the 2nd method unless it is
3328 * guaranteed that a new string won't have to be allocated, assuming
3329 * the worst case. I also decided not to put any more conditions on it
3330 * than this, for now. It seems likely that, since the worst case is
3331 * twice as big as the unknown portion of the string (plus 1), we won't
3332 * be guaranteed enough space, causing us to go to the first method,
3333 * unless the string is short, or the first variant character is near
3334 * the end of it. In either of these cases, it seems best to use the
3335 * 2nd method. The only circumstance I can think of where this would
3336 * be really slower is if the string had once had much more data in it
3337 * than it does now, but there is still a substantial amount in it */
3338
3339 {
3340 STRLEN invariant_head = t - s;
3341 STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3342 if (SvLEN(sv) < size) {
3343
3344 /* Here, have decided to allocate a new string */
3345
3346 U8 *dst;
3347 U8 *d;
3348
3349 Newx(dst, size, U8);
3350
3351 /* If no known invariants at the beginning of the input string,
3352 * set so starts from there. Otherwise, can use memory copy to
3353 * get up to where we are now, and then start from here */
3354
3355 if (invariant_head <= 0) {
3356 d = dst;
3357 } else {
3358 Copy(s, dst, invariant_head, char);
3359 d = dst + invariant_head;
3360 }
3361
3362 while (t < e) {
3363 const UV uv = NATIVE8_TO_UNI(*t++);
3364 if (UNI_IS_INVARIANT(uv))
3365 *d++ = (U8)UNI_TO_NATIVE(uv);
3366 else {
3367 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3368 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3369 }
3370 }
3371 *d = '\0';
3372 SvPV_free(sv); /* No longer using pre-existing string */
3373 SvPV_set(sv, (char*)dst);
3374 SvCUR_set(sv, d - dst);
3375 SvLEN_set(sv, size);
3376 } else {
3377
3378 /* Here, have decided to get the exact size of the string.
3379 * Currently this happens only when we know that there is
3380 * guaranteed enough space to fit the converted string, so
3381 * don't have to worry about growing. If two_byte_count is 0,
3382 * then t points to the first byte of the string which hasn't
3383 * been examined yet. Otherwise two_byte_count is 1, and t
3384 * points to the first byte in the string that will expand to
3385 * two. Depending on this, start examining at t or 1 after t.
3386 * */
3387
3388 U8 *d = t + two_byte_count;
3389
3390
3391 /* Count up the remaining bytes that expand to two */
3392
3393 while (d < e) {
3394 const U8 chr = *d++;
3395 if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3396 }
3397
3398 /* The string will expand by just the number of bytes that
3399 * occupy two positions. But we are one afterwards because of
3400 * the increment just above. This is the place to put the
3401 * trailing NUL, and to set the length before we decrement */
3402
3403 d += two_byte_count;
3404 SvCUR_set(sv, d - s);
3405 *d-- = '\0';
3406
3407
3408 /* Having decremented d, it points to the position to put the
3409 * very last byte of the expanded string. Go backwards through
3410 * the string, copying and expanding as we go, stopping when we
3411 * get to the part that is invariant the rest of the way down */
3412
3413 e--;
3414 while (e >= t) {
3415 const U8 ch = NATIVE8_TO_UNI(*e--);
3416 if (UNI_IS_INVARIANT(ch)) {
3417 *d-- = UNI_TO_NATIVE(ch);
3418 } else {
3419 *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3420 *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3421 }
3422 }
3423 }
75da9d4c
DM
3424
3425 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3426 /* Update pos. We do it at the end rather than during
3427 * the upgrade, to avoid slowing down the common case
3428 * (upgrade without pos) */
3429 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3430 if (mg) {
3431 I32 pos = mg->mg_len;
3432 if (pos > 0 && (U32)pos > invariant_head) {
3433 U8 *d = (U8*) SvPVX(sv) + invariant_head;
3434 STRLEN n = (U32)pos - invariant_head;
3435 while (n > 0) {
3436 if (UTF8_IS_START(*d))
3437 d++;
3438 d++;
3439 n--;
3440 }
3441 mg->mg_len = d - (U8*)SvPVX(sv);
3442 }
3443 }
3444 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3445 magic_setutf8(sv,mg); /* clear UTF8 cache */
3446 }
b3ab6785 3447 }
560a288e 3448 }
b3ab6785
KW
3449
3450 /* Mark as UTF-8 even if no variant - saves scanning loop */
3451 SvUTF8_on(sv);
4411f3b6 3452 return SvCUR(sv);
560a288e
GS
3453}
3454
c461cf8f
JH
3455/*
3456=for apidoc sv_utf8_downgrade
3457
78ea37eb 3458Attempts to convert the PV of an SV from characters to bytes.
2bbc8d55
SP
3459If the PV contains a character that cannot fit
3460in a byte, this conversion will fail;
78ea37eb 3461in this case, either returns false or, if C<fail_ok> is not
c461cf8f
JH
3462true, croaks.
3463
13a6c0e0
JH
3464This is not as a general purpose Unicode to byte encoding interface:
3465use the Encode extension for that.
3466
c461cf8f
JH
3467=cut
3468*/
3469
560a288e 3470bool
7bc54cea 3471Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
560a288e 3472{
97aff369 3473 dVAR;
7918f24d
NC
3474
3475 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3476
78ea37eb 3477 if (SvPOKp(sv) && SvUTF8(sv)) {
fa301091 3478 if (SvCUR(sv)) {
03cfe0ae 3479 U8 *s;
652088fc 3480 STRLEN len;
75da9d4c 3481 int mg_flags = SV_GMAGIC;
fa301091 3482
765f542d
NC
3483 if (SvIsCOW(sv)) {
3484 sv_force_normal_flags(sv, 0);
3485 }
75da9d4c
DM
3486 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3487 /* update pos */
3488 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3489 if (mg) {
3490 I32 pos = mg->mg_len;
3491 if (pos > 0) {
3492 sv_pos_b2u(sv, &pos);
3493 mg_flags = 0; /* sv_pos_b2u does get magic */
3494 mg->mg_len = pos;
3495 }
3496 }
3497 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3498 magic_setutf8(sv,mg); /* clear UTF8 cache */
3499
3500 }
3501 s = (U8 *) SvPV_flags(sv, len, mg_flags);
3502
03cfe0ae 3503 if (!utf8_to_bytes(s, &len)) {
fa301091
JH
3504 if (fail_ok)
3505 return FALSE;
3506 else {
3507 if (PL_op)
3508 Perl_croak(aTHX_ "Wide character in %s",
53e06cf0 3509 OP_DESC(PL_op));
fa301091
JH
3510 else
3511 Perl_croak(aTHX_ "Wide character");
3512 }
4b3603a4 3513 }
b162af07 3514 SvCUR_set(sv, len);
67e989fb 3515 }
560a288e 3516 }
ffebcc3e 3517 SvUTF8_off(sv);
560a288e
GS
3518 return TRUE;
3519}
3520
c461cf8f
JH
3521/*
3522=for apidoc sv_utf8_encode
3523
78ea37eb
TS
3524Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3525flag off so that it looks like octets again.
c461cf8f
JH
3526
3527=cut
3528*/
3529
560a288e 3530void
7bc54cea 3531Perl_sv_utf8_encode(pTHX_ register SV *const sv)
560a288e 3532{
7918f24d
NC
3533 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3534
4c94c214
NC
3535 if (SvIsCOW(sv)) {
3536 sv_force_normal_flags(sv, 0);
3537 }
3538 if (SvREADONLY(sv)) {
6ad8f254 3539 Perl_croak_no_modify(aTHX);
4c94c214 3540 }
a5f5288a 3541 (void) sv_utf8_upgrade(sv);
560a288e
GS
3542 SvUTF8_off(sv);
3543}
3544
4411f3b6
NIS
3545/*
3546=for apidoc sv_utf8_decode
3547
78ea37eb
TS
3548If the PV of the SV is an octet sequence in UTF-8
3549and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3550so that it looks like a character. If the PV contains only single-byte
694cf0d2 3551characters, the C<SvUTF8> flag stays off.
78ea37eb 3552Scans PV for validity and returns false if the PV is invalid UTF-8.
4411f3b6
NIS
3553
3554=cut
3555*/
3556
560a288e 3557bool
7bc54cea 3558Perl_sv_utf8_decode(pTHX_ register SV *const sv)
560a288e 3559{
7918f24d
NC
3560 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3561
78ea37eb 3562 if (SvPOKp(sv)) {
75da9d4c 3563 const U8 *start, *c;
93524f2b 3564 const U8 *e;
9cbac4c7 3565
645c22ef
DM
3566 /* The octets may have got themselves encoded - get them back as
3567 * bytes
3568 */
3569 if (!sv_utf8_downgrade(sv, TRUE))
560a288e
GS
3570 return FALSE;
3571
3572 /* it is actually just a matter of turning the utf8 flag on, but
3573 * we want to make sure everything inside is valid utf8 first.
3574 */
75da9d4c 3575 c = start = (const U8 *) SvPVX_const(sv);
63cd0674 3576 if (!is_utf8_string(c, SvCUR(sv)+1))
67e989fb 3577 return FALSE;
93524f2b 3578 e = (const U8 *) SvEND(sv);
511c2ff0 3579 while (c < e) {
b64e5050 3580 const U8 ch = *c++;
c4d5f83a 3581 if (!UTF8_IS_INVARIANT(ch)) {
67e989fb
JH
3582 SvUTF8_on(sv);
3583 break;
3584 }
560a288e 3585 }
75da9d4c
DM
3586 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3587 /* adjust pos to the start of a UTF8 char sequence */
3588 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3589 if (mg) {
3590 I32 pos = mg->mg_len;
3591 if (pos > 0) {
3592 for (c = start + pos; c > start; c--) {
3593 if (UTF8_IS_START(*c))
3594 break;
3595 }
3596 mg->mg_len = c - start;
3597 }
3598 }
3599 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3600 magic_setutf8(sv,mg); /* clear UTF8 cache */
3601 }
560a288e
GS
3602 }
3603 return TRUE;
3604}
3605
954c1994
GS
3606/*
3607=for apidoc sv_setsv
3608
645c22ef
DM
3609Copies the contents of the source SV C<ssv> into the destination SV
3610C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3611function if the source SV needs to be reused. Does not handle 'set' magic.
3612Loosely speaking, it performs a copy-by-value, obliterating any previous
3613content of the destination.
3614
3615You probably want to use one of the assortment of wrappers, such as
3616C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3617C<SvSetMagicSV_nosteal>.
3618
8d6d96c1
HS
3619=for apidoc sv_setsv_flags
3620
645c22ef
DM
3621Copies the contents of the source SV C<ssv> into the destination SV
3622C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3623function if the source SV needs to be reused. Does not handle 'set' magic.
3624Loosely speaking, it performs a copy-by-value, obliterating any previous
3625content of the destination.
3626If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
5fcdf167
NC
3627C<ssv> if appropriate, else not. If the C<flags> parameter has the
3628C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3629and C<sv_setsv_nomg> are implemented in terms of this function.
645c22ef
DM
3630
3631You probably want to use one of the assortment of wrappers, such as
3632C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3633C<SvSetMagicSV_nosteal>.
3634
3635This is the primary function for copying scalars, and most other
3636copy-ish functions and macros use this underneath.
8d6d96c1
HS
3637
3638=cut
3639*/
3640
5d0301b7 3641static void
7bc54cea 3642S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
5d0301b7 3643{
c8bbf675 3644 I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3e6edce2 3645 HV *old_stash = NULL;
dd69841b 3646
7918f24d
NC
3647 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3648
bec4f4b4 3649 if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
5d0301b7
NC
3650 const char * const name = GvNAME(sstr);
3651 const STRLEN len = GvNAMELEN(sstr);
0d092c36 3652 {
f7877b28
NC
3653 if (dtype >= SVt_PV) {
3654 SvPV_free(dstr);
3655 SvPV_set(dstr, 0);
3656 SvLEN_set(dstr, 0);
3657 SvCUR_set(dstr, 0);
3658 }
0d092c36 3659 SvUPGRADE(dstr, SVt_PVGV);
dedf8e73 3660 (void)SvOK_off(dstr);
2e5b91de
NC
3661 /* FIXME - why are we doing this, then turning it off and on again
3662 below? */
3663 isGV_with_GP_on(dstr);
f7877b28 3664 }
5d0301b7
NC
3665 GvSTASH(dstr) = GvSTASH(sstr);
3666 if (GvSTASH(dstr))
daba3364 3667 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
159b6efe 3668 gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
5d0301b7
NC
3669 SvFAKE_on(dstr); /* can coerce to non-glob */
3670 }
3671
159b6efe 3672 if(GvGP(MUTABLE_GV(sstr))) {
dd69841b
BB
3673 /* If source has method cache entry, clear it */
3674 if(GvCVGEN(sstr)) {
3675 SvREFCNT_dec(GvCV(sstr));
c43ae56f 3676 GvCV_set(sstr, NULL);
dd69841b
BB
3677 GvCVGEN(sstr) = 0;
3678 }
3679 /* If source has a real method, then a method is
3680 going to change */
00169e2c
FC
3681 else if(
3682 GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3683 ) {
70cd14a1 3684 mro_changes = 1;
dd69841b
BB
3685 }
3686 }
3687
3688 /* If dest already had a real method, that's a change as well */
00169e2c
FC
3689 if(
3690 !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3691 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3692 ) {
70cd14a1 3693 mro_changes = 1;
dd69841b
BB
3694 }
3695
c8bbf675
FC
3696 /* We don’t need to check the name of the destination if it was not a
3697 glob to begin with. */
3698 if(dtype == SVt_PVGV) {
3699 const char * const name = GvNAME((const GV *)dstr);
00169e2c
FC
3700 if(
3701 strEQ(name,"ISA")
3702 /* The stash may have been detached from the symbol table, so
3703 check its name. */
3704 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
6624142a 3705 && GvAV((const GV *)sstr)
00169e2c 3706 )
c8bbf675
FC
3707 mro_changes = 2;
3708 else {
3709 const STRLEN len = GvNAMELEN(dstr);
1f656fcf
FC
3710 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3711 || (len == 1 && name[0] == ':')) {
c8bbf675
FC
3712 mro_changes = 3;
3713
3714 /* Set aside the old stash, so we can reset isa caches on
3715 its subclasses. */
bf01568a
FC
3716 if((old_stash = GvHV(dstr)))
3717 /* Make sure we do not lose it early. */
3718 SvREFCNT_inc_simple_void_NN(
3719 sv_2mortal((SV *)old_stash)
3720 );
c8bbf675
FC
3721 }
3722 }
3723 }
70cd14a1 3724
159b6efe 3725 gp_free(MUTABLE_GV(dstr));
2e5b91de 3726 isGV_with_GP_off(dstr);
5d0301b7 3727 (void)SvOK_off(dstr);
2e5b91de 3728 isGV_with_GP_on(dstr);
dedf8e73 3729 GvINTRO_off(dstr); /* one-shot flag */
c43ae56f 3730 GvGP_set(dstr, gp_ref(GvGP(sstr)));
5d0301b7
NC
3731 if (SvTAINTED(sstr))
3732 SvTAINT(dstr);
3733 if (GvIMPORTED(dstr) != GVf_IMPORTED
3734 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3735 {
3736 GvIMPORTED_on(dstr);
3737 }
3738 GvMULTI_on(dstr);
6624142a
FC
3739 if(mro_changes == 2) {
3740 MAGIC *mg;
3741 SV * const sref = (SV *)GvAV((const GV *)dstr);
3742 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3743 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3744 AV * const ary = newAV();
3745 av_push(ary, mg->mg_obj); /* takes the refcount */
3746 mg->mg_obj = (SV *)ary;
3747 }
3748 av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3749 }
3750 else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3751 mro_isa_changed_in(GvSTASH(dstr));
3752 }
c8bbf675 3753 else if(mro_changes == 3) {
d056e33c 3754 HV * const stash = GvHV(dstr);
78b79c77 3755 if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
d056e33c 3756 mro_package_moved(
35759254 3757 stash, old_stash,
afdbe55d 3758 (GV *)dstr, 0
d056e33c 3759 );
c8bbf675 3760 }
70cd14a1 3761 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
5d0301b7
NC
3762 return;
3763}
3764
b8473700 3765static void
7bc54cea 3766S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
7918f24d 3767{
b8473700
NC
3768 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3769 SV *dref = NULL;
3770 const int intro = GvINTRO(dstr);
2440974c 3771 SV **location;
3386d083 3772 U8 import_flag = 0;
27242d61
NC
3773 const U32 stype = SvTYPE(sref);
3774
7918f24d 3775 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
b8473700 3776
b8473700
NC
3777 if (intro) {
3778 GvINTRO_off(dstr); /* one-shot flag */
3779 GvLINE(dstr) = CopLINE(PL_curcop);
159b6efe 3780 GvEGV(dstr) = MUTABLE_GV(dstr);
b8473700
NC
3781 }
3782 GvMULTI_on(dstr);
27242d61 3783 switch (stype) {
b8473700 3784 case SVt_PVCV:
c43ae56f 3785 location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
27242d61
NC
3786 import_flag = GVf_IMPORTED_CV;
3787 goto common;
3788 case SVt_PVHV:
3789 location = (SV **) &GvHV(dstr);
3790 import_flag = GVf_IMPORTED_HV;
3791 goto common;
3792 case SVt_PVAV:
3793 location = (SV **) &GvAV(dstr);
3794 import_flag = GVf_IMPORTED_AV;
3795 goto common;
3796 case SVt_PVIO:
3797 location = (SV **) &GvIOp(dstr);
3798 goto common;
3799 case SVt_PVFM:
3800 location = (SV **) &GvFORM(dstr);
ef595a33 3801 goto common;
27242d61
NC
3802 default:
3803 location = &GvSV(dstr);
3804 import_flag = GVf_IMPORTED_SV;
3805 common:
b8473700 3806 if (intro) {
27242d61 3807 if (stype == SVt_PVCV) {
ea726b52 3808 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
5f2fca8a 3809 if (GvCVGEN(dstr)) {
27242d61 3810 SvREFCNT_dec(GvCV(dstr));
c43ae56f 3811 GvCV_set(dstr, NULL);
27242d61 3812 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
27242d61 3813 }
b8473700 3814 }
27242d61 3815 SAVEGENERICSV(*location);
b8473700
NC
3816 }
3817 else
27242d61 3818 dref = *location;
5f2fca8a 3819 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
ea726b52 3820 CV* const cv = MUTABLE_CV(*location);
b8473700 3821 if (cv) {
159b6efe 3822 if (!GvCVGEN((const GV *)dstr) &&
b8473700
NC
3823 (CvROOT(cv) || CvXSUB(cv)))
3824 {
3825 /* Redefining a sub - warning is mandatory if
3826 it was a const and its value changed. */
ea726b52 3827 if (CvCONST(cv) && CvCONST((const CV *)sref)
126f53f3
NC
3828 && cv_const_sv(cv)
3829 == cv_const_sv((const CV *)sref)) {
6f207bd3 3830 NOOP;
b8473700
NC
3831 /* They are 2 constant subroutines generated from
3832 the same constant. This probably means that
3833 they are really the "same" proxy subroutine
3834 instantiated in 2 places. Most likely this is
3835 when a constant is exported twice. Don't warn.
3836 */
3837 }
3838 else if (ckWARN(WARN_REDEFINE)
3839 || (CvCONST(cv)
ea726b52 3840 && (!CvCONST((const CV *)sref)
b8473700 3841 || sv_cmp(cv_const_sv(cv),
126f53f3
NC
3842 cv_const_sv((const CV *)
3843 sref))))) {
b8473700 3844 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10edeb5d
JH
3845 (const char *)
3846 (CvCONST(cv)
3847 ? "Constant subroutine %s::%s redefined"
3848 : "Subroutine %s::%s redefined"),
159b6efe
NC
3849 HvNAME_get(GvSTASH((const GV *)dstr)),
3850 GvENAME(MUTABLE_GV(dstr)));
b8473700
NC
3851 }
3852 }
3853 if (!intro)
159b6efe 3854 cv_ckproto_len(cv, (const GV *)dstr,
cbf82dd0
NC
3855 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3856 SvPOK(sref) ? SvCUR(sref) : 0);
b8473700 3857 }
b8473700
NC
3858 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3859 GvASSUMECV_on(dstr);
dd69841b 3860 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
b8473700 3861 }
2440974c 3862 *location = sref;
3386d083
NC
3863 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3864 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3865 GvFLAGS(dstr) |= import_flag;
b8473700 3866 }
3e79609f
FC
3867 if (stype == SVt_PVHV) {
3868 const char * const name = GvNAME((GV*)dstr);
3869 const STRLEN len = GvNAMELEN(dstr);
d056e33c 3870 if (
1f656fcf
FC
3871 (
3872 (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3873 || (len == 1 && name[0] == ':')
3874 )
78b79c77 3875 && (!dref || HvENAME_get(dref))
d056e33c
FC
3876 ) {
3877 mro_package_moved(
35759254 3878 (HV *)sref, (HV *)dref,
afdbe55d 3879 (GV *)dstr, 0
d056e33c 3880 );
3e79609f
FC
3881 }
3882 }
00169e2c 3883 else if (
a00c27eb
FC
3884 stype == SVt_PVAV && sref != dref
3885 && strEQ(GvNAME((GV*)dstr), "ISA")
00169e2c
FC
3886 /* The stash may have been detached from the symbol table, so
3887 check its name before doing anything. */
3888 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3889 ) {
6624142a 3890 MAGIC *mg;
a5dba54a
FC
3891 MAGIC * const omg = dref && SvSMAGICAL(dref)
3892 ? mg_find(dref, PERL_MAGIC_isa)
3893 : NULL;
6624142a
FC
3894 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3895 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3896 AV * const ary = newAV();
3897 av_push(ary, mg->mg_obj); /* takes the refcount */
3898 mg->mg_obj = (SV *)ary;
3899 }
a5dba54a
FC
3900 if (omg) {
3901 if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3902 SV **svp = AvARRAY((AV *)omg->mg_obj);
3903 I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3904 while (items--)
3905 av_push(
3906 (AV *)mg->mg_obj,
3907 SvREFCNT_inc_simple_NN(*svp++)
3908 );
3909 }
3910 else
3911 av_push(
3912 (AV *)mg->mg_obj,
3913 SvREFCNT_inc_simple_NN(omg->mg_obj)
3914 );
3915 }
3916 else
3917 av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
6624142a 3918 }
a5dba54a 3919 else
3e1892cc 3920 {
a5dba54a
FC
3921 sv_magic(
3922 sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3923 );
3e1892cc
FC
3924 mg = mg_find(sref, PERL_MAGIC_isa);
3925 }
a5dba54a
FC
3926 /* Since the *ISA assignment could have affected more than
3927 one stash, don’t call mro_isa_changed_in directly, but let
3e1892cc 3928 magic_clearisa do it for us, as it already has the logic for
a5dba54a 3929 dealing with globs vs arrays of globs. */
3e1892cc
FC
3930 assert(mg);
3931 Perl_magic_clearisa(aTHX_ NULL, mg);
d851b122 3932 }
b8473700
NC
3933 break;
3934 }
b37c2d43 3935 SvREFCNT_dec(dref);
b8473700
NC
3936 if (SvTAINTED(sstr))
3937 SvTAINT(dstr);
3938 return;
3939}
3940
8d6d96c1 3941void
7bc54cea 3942Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
8d6d96c1 3943{
97aff369 3944 dVAR;
8990e307
LW
3945 register U32 sflags;
3946 register int dtype;
42d0e0b7 3947 register svtype stype;
463ee0b2 3948
7918f24d
NC
3949 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3950
79072805
LW
3951 if (sstr == dstr)
3952 return;
29f4f0ab
NC
3953
3954 if (SvIS_FREED(dstr)) {
3955 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
be2597df 3956 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
29f4f0ab 3957 }
765f542d 3958 SV_CHECK_THINKFIRST_COW_DROP(dstr);
79072805 3959 if (!sstr)
3280af22 3960 sstr = &PL_sv_undef;
29f4f0ab 3961 if (SvIS_FREED(sstr)) {
6c9570dc
MHM
3962 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3963 (void*)sstr, (void*)dstr);
29f4f0ab 3964 }
8990e307
LW
3965 stype = SvTYPE(sstr);
3966 dtype = SvTYPE(dstr);
79072805 3967
52944de8 3968 (void)SvAMAGIC_off(dstr);
7a5fa8a2 3969 if ( SvVOK(dstr) )
ece467f9
JP
3970 {
3971 /* need to nuke the magic */
3972 mg_free(dstr);
ece467f9 3973 }
9e7bc3e8 3974
463ee0b2 3975 /* There's a lot of redundancy below but we're going for speed here */
79072805 3976
8990e307 3977 switch (stype) {
79072805 3978 case SVt_NULL:
aece5585 3979 undef_sstr:
13be902c 3980 if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
20408e3c
GS
3981 (void)SvOK_off(dstr);
3982 return;
3983 }
3984 break;
463ee0b2 3985 case SVt_IV:
aece5585
GA
3986 if (SvIOK(sstr)) {
3987 switch (dtype) {
3988 case SVt_NULL:
8990e307 3989 sv_upgrade(dstr, SVt_IV);
aece5585
GA
3990 break;
3991 case SVt_NV:
aece5585 3992 case SVt_PV:
a0d0e21e 3993 sv_upgrade(dstr, SVt_PVIV);
aece5585 3994 break;
010be86b 3995 case SVt_PVGV:
13be902c 3996 case SVt_PVLV:
010be86b 3997 goto end_of_first_switch;
aece5585
GA
3998 }
3999 (void)SvIOK_only(dstr);
45977657 4000 SvIV_set(dstr, SvIVX(sstr));
25da4f38
IZ
4001 if (SvIsUV(sstr))
4002 SvIsUV_on(dstr);
37c25af0
NC
4003 /* SvTAINTED can only be true if the SV has taint magic, which in
4004 turn means that the SV type is PVMG (or greater). This is the
4005 case statement for SVt_IV, so this cannot be true (whatever gcov
4006 may say). */
4007 assert(!SvTAINTED(sstr));
aece5585 4008 return;
8990e307 4009 }
4df7f6af
NC
4010 if (!SvROK(sstr))
4011 goto undef_sstr;
4012 if (dtype < SVt_PV && dtype != SVt_IV)
4013 sv_upgrade(dstr, SVt_IV);
4014 break;
aece5585 4015
463ee0b2 4016 case SVt_NV:
aece5585
GA
4017 if (SvNOK(sstr)) {
4018 switch (dtype) {
4019 case SVt_NULL:
4020 case SVt_IV:
8990e307 4021 sv_upgrade(dstr, SVt_NV);
aece5585 4022 break;
aece5585
GA
4023 case SVt_PV:
4024 case SVt_PVIV:
a0d0e21e 4025 sv_upgrade(dstr, SVt_PVNV);
aece5585 4026 break;
010be86b 4027 case SVt_PVGV:
13be902c 4028 case SVt_PVLV:
010be86b 4029 goto end_of_first_switch;
aece5585 4030 }
9d6ce603 4031 SvNV_set(dstr, SvNVX(sstr));
aece5585 4032 (void)SvNOK_only(dstr);
37c25af0
NC
4033 /* SvTAINTED can only be true if the SV has taint magic, which in
4034 turn means that the SV type is PVMG (or greater). This is the
4035 case statement for SVt_NV, so this cannot be true (whatever gcov
4036 may say). */
4037 assert(!SvTAINTED(sstr));
aece5585 4038 return;
8990e307 4039 }
aece5585
GA
4040 goto undef_sstr;
4041
fc36a67e 4042 case SVt_PVFM:
f8c7b90f 4043#ifdef PERL_OLD_COPY_ON_WRITE
d89fc664
NC
4044 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4045 if (dtype < SVt_PVIV)
4046 sv_upgrade(dstr, SVt_PVIV);
4047 break;
4048 }
4049 /* Fall through */
4050#endif
4051 case SVt_PV:
8990e307 4052 if (dtype < SVt_PV)
463ee0b2 4053 sv_upgrade(dstr, SVt_PV);
463ee0b2
LW
4054 break;
4055 case SVt_PVIV:
8990e307 4056 if (dtype < SVt_PVIV)
463ee0b2 4057 sv_upgrade(dstr, SVt_PVIV);
463ee0b2
LW
4058 break;
4059 case SVt_PVNV:
8990e307 4060 if (dtype < SVt_PVNV)
463ee0b2 4061 sv_upgrade(dstr, SVt_PVNV);
463ee0b2 4062 break;
489f7bfe 4063 default:
a3b680e6
AL
4064 {
4065 const char * const type = sv_reftype(sstr,0);
533c011a 4066 if (PL_op)
94bbb3f4 4067 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4633a7c4 4068 else
a3b680e6
AL
4069 Perl_croak(aTHX_ "Bizarre copy of %s", type);
4070 }
4633a7c4
LW
4071 break;
4072
f0826785
BM
4073 case SVt_REGEXP:
4074 if (dtype < SVt_REGEXP)
4075 sv_upgrade(dstr, SVt_REGEXP);
4076 break;
4077
cecf5685 4078 /* case SVt_BIND: */
39cb70dc 4079 case SVt_PVLV:
79072805 4080 case SVt_PVGV:
489f7bfe 4081 case SVt_PVMG:
8d6d96c1 4082 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
973f89ab 4083 mg_get(sstr);
13be902c 4084 if (SvTYPE(sstr) != stype)
973f89ab 4085 stype = SvTYPE(sstr);
5cf4b255
FC
4086 }
4087 if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
d4c19fe8 4088 glob_assign_glob(dstr, sstr, dtype);
b8c701c1 4089 return;
973f89ab 4090 }
ded42b9f 4091 if (stype == SVt_PVLV)
862a34c6 4092 SvUPGRADE(dstr, SVt_PVNV);
ded42b9f 4093 else
42d0e0b7 4094 SvUPGRADE(dstr, (svtype)stype);
79072805 4095 }
010be86b 4096 end_of_first_switch:
79072805 4097
ff920335
NC
4098 /* dstr may have been upgraded. */
4099 dtype = SvTYPE(dstr);
8990e307
LW
4100 sflags = SvFLAGS(sstr);
4101
ba2fdce6 4102 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
85324b4d
NC
4103 /* Assigning to a subroutine sets the prototype. */
4104 if (SvOK(sstr)) {
4105 STRLEN len;
4106 const char *const ptr = SvPV_const(sstr, len);
4107
4108 SvGROW(dstr, len + 1);
4109 Copy(ptr, SvPVX(dstr), len + 1, char);
4110 SvCUR_set(dstr, len);
fcddd32e 4111 SvPOK_only(dstr);
ba2fdce6 4112 SvFLAGS(dstr) |= sflags & SVf_UTF8;
85324b4d
NC
4113 } else {
4114 SvOK_off(dstr);
4115 }
ba2fdce6
NC
4116 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4117 const char * const type = sv_reftype(dstr,0);
4118 if (PL_op)
94bbb3f4 4119 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
ba2fdce6
NC
4120 else
4121 Perl_croak(aTHX_ "Cannot copy to %s", type);
85324b4d 4122 } else if (sflags & SVf_ROK) {
13be902c 4123 if (isGV_with_GP(dstr)
785bee4f 4124 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
acaa9288
NC
4125 sstr = SvRV(sstr);
4126 if (sstr == dstr) {
4127 if (GvIMPORTED(dstr) != GVf_IMPORTED
4128 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4129 {
4130 GvIMPORTED_on(dstr);
4131 }
4132 GvMULTI_on(dstr);
4133 return;
4134 }
785bee4f
NC
4135 glob_assign_glob(dstr, sstr, dtype);
4136 return;
acaa9288
NC
4137 }
4138
8990e307 4139 if (dtype >= SVt_PV) {
13be902c 4140 if (isGV_with_GP(dstr)) {
d4c19fe8 4141 glob_assign_ref(dstr, sstr);
b8c701c1
NC
4142 return;
4143 }
3f7c398e 4144 if (SvPVX_const(dstr)) {
8bd4d4c5 4145 SvPV_free(dstr);
b162af07
SP
4146 SvLEN_set(dstr, 0);
4147 SvCUR_set(dstr, 0);
a0d0e21e 4148 }
8990e307 4149 }
a0d0e21e 4150 (void)SvOK_off(dstr);
b162af07 4151 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
96d4b0ee 4152 SvFLAGS(dstr) |= sflags & SVf_ROK;
dfd48732
NC
4153 assert(!(sflags & SVp_NOK));
4154 assert(!(sflags & SVp_IOK));
4155 assert(!(sflags & SVf_NOK));
4156 assert(!(sflags & SVf_IOK));
ed6116ce 4157 }
13be902c 4158 else if (isGV_with_GP(dstr)) {
c0c44674 4159 if (!(sflags & SVf_OK)) {
a2a5de95
NC
4160 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4161 "Undefined value assigned to typeglob");
c0c44674
NC
4162 }
4163 else {
77cb3b01 4164 GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
daba3364 4165 if (dstr != (const SV *)gv) {
3e79609f
FC
4166 const char * const name = GvNAME((const GV *)dstr);
4167 const STRLEN len = GvNAMELEN(dstr);
4168 HV *old_stash = NULL;
4169 bool reset_isa = FALSE;
1f656fcf
FC
4170 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4171 || (len == 1 && name[0] == ':')) {
3e79609f
FC
4172 /* Set aside the old stash, so we can reset isa caches
4173 on its subclasses. */
c8eb3813 4174 if((old_stash = GvHV(dstr))) {
31f1461f
FC
4175 /* Make sure we do not lose it early. */
4176 SvREFCNT_inc_simple_void_NN(
4177 sv_2mortal((SV *)old_stash)
4178 );
c8eb3813 4179 }
3e79609f
FC
4180 reset_isa = TRUE;
4181 }
4182
c0c44674 4183 if (GvGP(dstr))
159b6efe 4184 gp_free(MUTABLE_GV(dstr));
c43ae56f 4185 GvGP_set(dstr, gp_ref(GvGP(gv)));
3e79609f
FC
4186
4187 if (reset_isa) {
d056e33c
FC
4188 HV * const stash = GvHV(dstr);
4189 if(
78b79c77 4190 old_stash ? (HV *)HvENAME_get(old_stash) : stash
d056e33c
FC
4191 )
4192 mro_package_moved(
35759254 4193 stash, old_stash,
afdbe55d 4194 (GV *)dstr, 0
d056e33c 4195 );
3e79609f 4196 }
c0c44674
NC
4197 }
4198 }
4199 }
f0826785
BM
4200 else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4201 reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4202 }
8990e307 4203 else if (sflags & SVp_POK) {
765f542d 4204 bool isSwipe = 0;
79072805
LW
4205
4206 /*
4207 * Check to see if we can just swipe the string. If so, it's a
4208 * possible small lose on short strings, but a big win on long ones.
3f7c398e
SP
4209 * It might even be a win on short strings if SvPVX_const(dstr)
4210 * has to be allocated and SvPVX_const(sstr) has to be freed.
34482cd6
NC
4211 * Likewise if we can set up COW rather than doing an actual copy, we
4212 * drop to the else clause, as the swipe code and the COW setup code
4213 * have much in common.
79072805
LW
4214 */
4215
120fac95
NC
4216 /* Whichever path we take through the next code, we want this true,
4217 and doing it now facilitates the COW check. */
4218 (void)SvPOK_only(dstr);
4219
765f542d 4220 if (
34482cd6
NC
4221 /* If we're already COW then this clause is not true, and if COW
4222 is allowed then we drop down to the else and make dest COW
4223 with us. If caller hasn't said that we're allowed to COW
4224 shared hash keys then we don't do the COW setup, even if the
4225 source scalar is a shared hash key scalar. */
4226 (((flags & SV_COW_SHARED_HASH_KEYS)
4227 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4228 : 1 /* If making a COW copy is forbidden then the behaviour we
4229 desire is as if the source SV isn't actually already
4230 COW, even if it is. So we act as if the source flags
4231 are not COW, rather than actually testing them. */
4232 )
f8c7b90f 4233#ifndef PERL_OLD_COPY_ON_WRITE
34482cd6
NC
4234 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4235 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4236 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4237 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4238 but in turn, it's somewhat dead code, never expected to go
4239 live, but more kept as a placeholder on how to do it better
4240 in a newer implementation. */
4241 /* If we are COW and dstr is a suitable target then we drop down
4242 into the else and make dest a COW of us. */
b8f9541a
NC
4243 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4244#endif
4245 )
765f542d 4246 &&
765f542d
NC
4247 !(isSwipe =
4248 (sflags & SVs_TEMP) && /* slated for free anyway? */
4249 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
5fcdf167
NC
4250 (!(flags & SV_NOSTEAL)) &&
4251 /* and we're allowed to steal temps */
765f542d 4252 SvREFCNT(sstr) == 1 && /* and no other references to it? */
61e5f455 4253 SvLEN(sstr)) /* and really is a string */
f8c7b90f 4254#ifdef PERL_OLD_COPY_ON_WRITE
cb23d5b1
NC
4255 && ((flags & SV_COW_SHARED_HASH_KEYS)
4256 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4257 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4b1c7d9e 4258 && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
cb23d5b1 4259 : 1)
765f542d
NC
4260#endif
4261 ) {
4262 /* Failed the swipe test, and it's not a shared hash key either.
4263 Have to copy the string. */
4264 STRLEN len = SvCUR(sstr);
4265 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3f7c398e 4266 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
765f542d
NC
4267 SvCUR_set(dstr, len);
4268 *SvEND(dstr) = '\0';
765f542d 4269 } else {
f8c7b90f 4270 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
765f542d 4271 be true in here. */
765f542d
NC
4272 /* Either it's a shared hash key, or it's suitable for
4273 copy-on-write or we can swipe the string. */
46187eeb 4274 if (DEBUG_C_TEST) {
ed252734 4275 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
e419cbc5
NC
4276 sv_dump(sstr);
4277 sv_dump(dstr);
46187eeb 4278 }
f8c7b90f 4279#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4280 if (!isSwipe) {
765f542d
NC
4281 if ((sflags & (SVf_FAKE | SVf_READONLY))
4282 != (SVf_FAKE | SVf_READONLY)) {
4283 SvREADONLY_on(sstr);
4284 SvFAKE_on(sstr);
4285 /* Make the source SV into a loop of 1.
4286 (about to become 2) */
a29f6d03 4287 SV_COW_NEXT_SV_SET(sstr, sstr);
765f542d
NC
4288 }
4289 }
4290#endif
4291 /* Initial code is common. */
94010e71
NC
4292 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4293 SvPV_free(dstr);
79072805 4294 }
765f542d 4295
765f542d
NC
4296 if (!isSwipe) {
4297 /* making another shared SV. */
4298 STRLEN cur = SvCUR(sstr);
4299 STRLEN len = SvLEN(sstr);
f8c7b90f 4300#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4301 if (len) {
b8f9541a 4302 assert (SvTYPE(dstr) >= SVt_PVIV);
765f542d
NC
4303 /* SvIsCOW_normal */
4304 /* splice us in between source and next-after-source. */
a29f6d03
NC
4305 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4306 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4307 SvPV_set(dstr, SvPVX_mutable(sstr));
a604c751
NC
4308 } else
4309#endif
4310 {
765f542d 4311 /* SvIsCOW_shared_hash */
46187eeb
NC
4312 DEBUG_C(PerlIO_printf(Perl_debug_log,
4313 "Copy on write: Sharing hash\n"));
b8f9541a 4314
bdd68bc3 4315 assert (SvTYPE(dstr) >= SVt_PV);
765f542d 4316 SvPV_set(dstr,
d1db91c6 4317 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
bdd68bc3 4318 }
87a1ef3d
SP
4319 SvLEN_set(dstr, len);
4320 SvCUR_set(dstr, cur);
765f542d
NC
4321 SvREADONLY_on(dstr);
4322 SvFAKE_on(dstr);
765f542d
NC
4323 }
4324 else
765f542d 4325 { /* Passes the swipe test. */
78d1e721 4326 SvPV_set(dstr, SvPVX_mutable(sstr));
765f542d
NC
4327 SvLEN_set(dstr, SvLEN(sstr));
4328 SvCUR_set(dstr, SvCUR(sstr));
4329
4330 SvTEMP_off(dstr);
4331 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
6136c704 4332 SvPV_set(sstr, NULL);
765f542d
NC
4333 SvLEN_set(sstr, 0);
4334 SvCUR_set(sstr, 0);
4335 SvTEMP_off(sstr);
4336 }
4337 }
8990e307 4338 if (sflags & SVp_NOK) {
9d6ce603 4339 SvNV_set(dstr, SvNVX(sstr));
79072805 4340 }
8990e307 4341 if (sflags & SVp_IOK) {
23525414
NC
4342 SvIV_set(dstr, SvIVX(sstr));
4343 /* Must do this otherwise some other overloaded use of 0x80000000
4344 gets confused. I guess SVpbm_VALID */
2b1c7e3e 4345 if (sflags & SVf_IVisUV)
25da4f38 4346 SvIsUV_on(dstr);
79072805 4347 }
96d4b0ee 4348 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4f2da183 4349 {
b0a11fe1 4350 const MAGIC * const smg = SvVSTRING_mg(sstr);
4f2da183
NC
4351 if (smg) {
4352 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4353 smg->mg_ptr, smg->mg_len);
4354 SvRMAGICAL_on(dstr);
4355 }
7a5fa8a2 4356 }
79072805 4357 }
5d581361 4358 else if (sflags & (SVp_IOK|SVp_NOK)) {
c2468cc7 4359 (void)SvOK_off(dstr);
96d4b0ee 4360 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
5d581361
NC
4361 if (sflags & SVp_IOK) {
4362 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4363 SvIV_set(dstr, SvIVX(sstr));
4364 }
3332b3c1 4365 if (sflags & SVp_NOK) {
9d6ce603 4366 SvNV_set(dstr, SvNVX(sstr));
3332b3c1
JH
4367 }
4368 }
79072805 4369 else {
f7877b28 4370 if (isGV_with_GP(sstr)) {
180488f8
NC
4371 /* This stringification rule for globs is spread in 3 places.
4372 This feels bad. FIXME. */
4373 const U32 wasfake = sflags & SVf_FAKE;
4374
4375 /* FAKE globs can get coerced, so need to turn this off
4376 temporarily if it is on. */
4377 SvFAKE_off(sstr);
159b6efe 4378 gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
180488f8
NC
4379 SvFLAGS(sstr) |= wasfake;
4380 }
20408e3c
GS
4381 else
4382 (void)SvOK_off(dstr);
a0d0e21e 4383 }
27c9684d
AP
4384 if (SvTAINTED(sstr))
4385 SvTAINT(dstr);
79072805
LW
4386}
4387
954c1994
GS
4388/*
4389=for apidoc sv_setsv_mg
4390
4391Like C<sv_setsv>, but also handles 'set' magic.
4392
4393=cut
4394*/
4395
79072805 4396void
7bc54cea 4397Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
ef50df4b 4398{
7918f24d
NC
4399 PERL_ARGS_ASSERT_SV_SETSV_MG;
4400
ef50df4b
GS
4401 sv_setsv(dstr,sstr);
4402 SvSETMAGIC(dstr);
4403}
4404
f8c7b90f 4405#ifdef PERL_OLD_COPY_ON_WRITE
ed252734
NC
4406SV *
4407Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4408{
4409 STRLEN cur = SvCUR(sstr);
4410 STRLEN len = SvLEN(sstr);
4411 register char *new_pv;
4412
7918f24d
NC
4413 PERL_ARGS_ASSERT_SV_SETSV_COW;
4414
ed252734
NC
4415 if (DEBUG_C_TEST) {
4416 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
6c9570dc 4417 (void*)sstr, (void*)dstr);
ed252734
NC
4418 sv_dump(sstr);
4419 if (dstr)
4420 sv_dump(dstr);
4421 }
4422
4423 if (dstr) {
4424 if (SvTHINKFIRST(dstr))
4425 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3f7c398e
SP
4426 else if (SvPVX_const(dstr))
4427 Safefree(SvPVX_const(dstr));
ed252734
NC
4428 }
4429 else
4430 new_SV(dstr);
862a34c6 4431 SvUPGRADE(dstr, SVt_PVIV);
ed252734
NC
4432
4433 assert (SvPOK(sstr));
4434 assert (SvPOKp(sstr));
4435 assert (!SvIOK(sstr));
4436 assert (!SvIOKp(sstr));
4437 assert (!SvNOK(sstr));
4438 assert (!SvNOKp(sstr));
4439
4440 if (SvIsCOW(sstr)) {
4441
4442 if (SvLEN(sstr) == 0) {
4443 /* source is a COW shared hash key. */
ed252734
NC
4444 DEBUG_C(PerlIO_printf(Perl_debug_log,
4445 "Fast copy on write: Sharing hash\n"));
d1db91c6 4446 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
ed252734
NC
4447 goto common_exit;
4448 }
4449 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4450 } else {
4451 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
862a34c6 4452 SvUPGRADE(sstr, SVt_PVIV);
ed252734
NC
4453 SvREADONLY_on(sstr);
4454 SvFAKE_on(sstr);
4455 DEBUG_C(PerlIO_printf(Perl_debug_log,
4456 "Fast copy on write: Converting sstr to COW\n"));
4457 SV_COW_NEXT_SV_SET(dstr, sstr);
4458 }
4459 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4460 new_pv = SvPVX_mutable(sstr);
ed252734
NC
4461
4462 common_exit:
4463 SvPV_set(dstr, new_pv);
4464 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4465 if (SvUTF8(sstr))
4466 SvUTF8_on(dstr);
87a1ef3d
SP
4467 SvLEN_set(dstr, len);
4468 SvCUR_set(dstr, cur);
ed252734
NC
4469 if (DEBUG_C_TEST) {
4470 sv_dump(dstr);
4471 }
4472 return dstr;
4473}
4474#endif
4475
954c1994
GS
4476/*
4477=for apidoc sv_setpvn
4478
4479Copies a string into an SV. The C<len> parameter indicates the number of
9e09f5f2
MHM
4480bytes to be copied. If the C<ptr> argument is NULL the SV will become
4481undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
954c1994
GS
4482
4483=cut
4484*/
4485
ef50df4b 4486void
2e000ff2 4487Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
79072805 4488{
97aff369 4489 dVAR;
c6f8c383 4490 register char *dptr;
22c522df 4491
7918f24d
NC
4492 PERL_ARGS_ASSERT_SV_SETPVN;
4493
765f542d 4494 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4495 if (!ptr) {
a0d0e21e 4496 (void)SvOK_off(sv);
463ee0b2
LW
4497 return;
4498 }
22c522df
JH
4499 else {
4500 /* len is STRLEN which is unsigned, need to copy to signed */
a3b680e6 4501 const IV iv = len;
9c5ffd7c
JH
4502 if (iv < 0)
4503 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
22c522df 4504 }
862a34c6 4505 SvUPGRADE(sv, SVt_PV);
c6f8c383 4506
5902b6a9 4507 dptr = SvGROW(sv, len + 1);
c6f8c383
GA
4508 Move(ptr,dptr,len,char);
4509 dptr[len] = '\0';
79072805 4510 SvCUR_set(sv, len);
1aa99e6b 4511 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4512 SvTAINT(sv);
79072805
LW
4513}
4514
954c1994
GS
4515/*
4516=for apidoc sv_setpvn_mg
4517
4518Like C<sv_setpvn>, but also handles 'set' magic.
4519
4520=cut
4521*/
4522
79072805 4523void
2e000ff2 4524Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
ef50df4b 4525{
7918f24d
NC
4526 PERL_ARGS_ASSERT_SV_SETPVN_MG;
4527
ef50df4b
GS
4528 sv_setpvn(sv,ptr,len);
4529 SvSETMAGIC(sv);
4530}
4531
954c1994
GS
4532/*
4533=for apidoc sv_setpv
4534
4535Copies a string into an SV. The string must be null-terminated. Does not
4536handle 'set' magic. See C<sv_setpv_mg>.
4537
4538=cut
4539*/
4540
ef50df4b 4541void
2e000ff2 4542Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4543{
97aff369 4544 dVAR;
79072805
LW
4545 register STRLEN len;
4546
7918f24d
NC
4547 PERL_ARGS_ASSERT_SV_SETPV;
4548
765f542d 4549 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4550 if (!ptr) {
a0d0e21e 4551 (void)SvOK_off(sv);
463ee0b2
LW
4552 return;
4553 }
79072805 4554 len = strlen(ptr);
862a34c6 4555 SvUPGRADE(sv, SVt_PV);
c6f8c383 4556
79072805 4557 SvGROW(sv, len + 1);
463ee0b2 4558 Move(ptr,SvPVX(sv),len+1,char);
79072805 4559 SvCUR_set(sv, len);
1aa99e6b 4560 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2
LW
4561 SvTAINT(sv);
4562}
4563
954c1994
GS
4564/*
4565=for apidoc sv_setpv_mg
4566
4567Like C<sv_setpv>, but also handles 'set' magic.
4568
4569=cut
4570*/
4571
463ee0b2 4572void
2e000ff2 4573Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 4574{
7918f24d
NC
4575 PERL_ARGS_ASSERT_SV_SETPV_MG;
4576
ef50df4b
GS
4577 sv_setpv(sv,ptr);
4578 SvSETMAGIC(sv);
4579}
4580
954c1994 4581/*
47518d95 4582=for apidoc sv_usepvn_flags
954c1994 4583
794a0d33
JH
4584Tells an SV to use C<ptr> to find its string value. Normally the
4585string is stored inside the SV but sv_usepvn allows the SV to use an
4586outside string. The C<ptr> should point to memory that was allocated
c1c21316
NC
4587by C<malloc>. The string length, C<len>, must be supplied. By default
4588this function will realloc (i.e. move) the memory pointed to by C<ptr>,
794a0d33
JH
4589so that pointer should not be freed or used by the programmer after
4590giving it to sv_usepvn, and neither should any pointers from "behind"
c1c21316
NC
4591that pointer (e.g. ptr + 1) be used.
4592
4593If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4594SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
cbf82dd0 4595will be skipped. (i.e. the buffer is actually at least 1 byte longer than
c1c21316 4596C<len>, and already meets the requirements for storing in C<SvPVX>)
954c1994
GS
4597
4598=cut
4599*/
4600
ef50df4b 4601void
2e000ff2 4602Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
463ee0b2 4603{
97aff369 4604 dVAR;
1936d2a7 4605 STRLEN allocate;
7918f24d
NC
4606
4607 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4608
765f542d 4609 SV_CHECK_THINKFIRST_COW_DROP(sv);
862a34c6 4610 SvUPGRADE(sv, SVt_PV);
463ee0b2 4611 if (!ptr) {
a0d0e21e 4612 (void)SvOK_off(sv);
47518d95
NC
4613 if (flags & SV_SMAGIC)
4614 SvSETMAGIC(sv);
463ee0b2
LW
4615 return;
4616 }
3f7c398e 4617 if (SvPVX_const(sv))
8bd4d4c5 4618 SvPV_free(sv);
1936d2a7 4619
0b7042f9 4620#ifdef DEBUGGING
2e90b4cd
NC
4621 if (flags & SV_HAS_TRAILING_NUL)
4622 assert(ptr[len] == '\0');
0b7042f9 4623#endif
2e90b4cd 4624
c1c21316 4625 allocate = (flags & SV_HAS_TRAILING_NUL)
5d487c26 4626 ? len + 1 :
ca7c1a29 4627#ifdef Perl_safesysmalloc_size
5d487c26
NC
4628 len + 1;
4629#else
4630 PERL_STRLEN_ROUNDUP(len + 1);
4631#endif
cbf82dd0
NC
4632 if (flags & SV_HAS_TRAILING_NUL) {
4633 /* It's long enough - do nothing.
486ec47a 4634 Specifically Perl_newCONSTSUB is relying on this. */
cbf82dd0 4635 } else {
69d25b4f 4636#ifdef DEBUGGING
69d25b4f 4637 /* Force a move to shake out bugs in callers. */
10edeb5d 4638 char *new_ptr = (char*)safemalloc(allocate);
69d25b4f
NC
4639 Copy(ptr, new_ptr, len, char);
4640 PoisonFree(ptr,len,char);
4641 Safefree(ptr);
4642 ptr = new_ptr;
69d25b4f 4643#else
10edeb5d 4644 ptr = (char*) saferealloc (ptr, allocate);
69d25b4f 4645#endif
cbf82dd0 4646 }
ca7c1a29
NC
4647#ifdef Perl_safesysmalloc_size
4648 SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5d487c26 4649#else
1936d2a7 4650 SvLEN_set(sv, allocate);
5d487c26
NC
4651#endif
4652 SvCUR_set(sv, len);
4653 SvPV_set(sv, ptr);
c1c21316 4654 if (!(flags & SV_HAS_TRAILING_NUL)) {
97a130b8 4655 ptr[len] = '\0';
c1c21316 4656 }
1aa99e6b 4657 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4658 SvTAINT(sv);
47518d95
NC
4659 if (flags & SV_SMAGIC)
4660 SvSETMAGIC(sv);
ef50df4b
GS
4661}
4662
f8c7b90f 4663#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4664/* Need to do this *after* making the SV normal, as we need the buffer
4665 pointer to remain valid until after we've copied it. If we let go too early,
4666 another thread could invalidate it by unsharing last of the same hash key
4667 (which it can do by means other than releasing copy-on-write Svs)
4668 or by changing the other copy-on-write SVs in the loop. */
4669STATIC void
5302ffd4 4670S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
765f542d 4671{
7918f24d
NC
4672 PERL_ARGS_ASSERT_SV_RELEASE_COW;
4673
5302ffd4 4674 { /* this SV was SvIsCOW_normal(sv) */
765f542d 4675 /* we need to find the SV pointing to us. */
cf5629ad 4676 SV *current = SV_COW_NEXT_SV(after);
7a5fa8a2 4677
765f542d
NC
4678 if (current == sv) {
4679 /* The SV we point to points back to us (there were only two of us
4680 in the loop.)
4681 Hence other SV is no longer copy on write either. */
4682 SvFAKE_off(after);
4683 SvREADONLY_off(after);
4684 } else {
4685 /* We need to follow the pointers around the loop. */
4686 SV *next;
4687 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4688 assert (next);
4689 current = next;
4690 /* don't loop forever if the structure is bust, and we have
4691 a pointer into a closed loop. */
4692 assert (current != after);
3f7c398e 4693 assert (SvPVX_const(current) == pvx);
765f542d
NC
4694 }
4695 /* Make the SV before us point to the SV after us. */
a29f6d03 4696 SV_COW_NEXT_SV_SET(current, after);
765f542d 4697 }
765f542d
NC
4698 }
4699}
765f542d 4700#endif
645c22ef
DM
4701/*
4702=for apidoc sv_force_normal_flags
4703
4704Undo various types of fakery on an SV: if the PV is a shared string, make
4705a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
765f542d
NC
4706an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4707we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4708then a copy-on-write scalar drops its PV buffer (if any) and becomes
4709SvPOK_off rather than making a copy. (Used where this scalar is about to be
d3050d9d 4710set to some other value.) In addition, the C<flags> parameter gets passed to
4082acab 4711C<sv_unref_flags()> when unreffing. C<sv_force_normal> calls this function
765f542d 4712with flags set to 0.
645c22ef
DM
4713
4714=cut
4715*/
4716
6fc92669 4717void
2e000ff2 4718Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
0f15f207 4719{
97aff369 4720 dVAR;
7918f24d
NC
4721
4722 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4723
f8c7b90f 4724#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4725 if (SvREADONLY(sv)) {
765f542d 4726 if (SvFAKE(sv)) {
b64e5050 4727 const char * const pvx = SvPVX_const(sv);
a28509cc
AL
4728 const STRLEN len = SvLEN(sv);
4729 const STRLEN cur = SvCUR(sv);
5302ffd4
NC
4730 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4731 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4732 we'll fail an assertion. */
4733 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4734
46187eeb
NC
4735 if (DEBUG_C_TEST) {
4736 PerlIO_printf(Perl_debug_log,
4737 "Copy on write: Force normal %ld\n",
4738 (long) flags);
e419cbc5 4739 sv_dump(sv);
46187eeb 4740 }
765f542d
NC
4741 SvFAKE_off(sv);
4742 SvREADONLY_off(sv);
9f653bb5 4743 /* This SV doesn't own the buffer, so need to Newx() a new one: */
6136c704 4744 SvPV_set(sv, NULL);
87a1ef3d 4745 SvLEN_set(sv, 0);
765f542d
NC
4746 if (flags & SV_COW_DROP_PV) {
4747 /* OK, so we don't need to copy our buffer. */
4748 SvPOK_off(sv);
4749 } else {
4750 SvGROW(sv, cur + 1);
4751 Move(pvx,SvPVX(sv),cur,char);
87a1ef3d 4752 SvCUR_set(sv, cur);
765f542d
NC
4753 *SvEND(sv) = '\0';
4754 }
5302ffd4
NC
4755 if (len) {
4756 sv_release_COW(sv, pvx, next);
4757 } else {
4758 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4759 }
46187eeb 4760 if (DEBUG_C_TEST) {
e419cbc5 4761 sv_dump(sv);
46187eeb 4762 }
765f542d 4763 }
923e4eb5 4764 else if (IN_PERL_RUNTIME)
6ad8f254 4765 Perl_croak_no_modify(aTHX);
765f542d
NC
4766 }
4767#else
2213622d 4768 if (SvREADONLY(sv)) {
21690b72 4769 if (SvFAKE(sv) && !isGV_with_GP(sv)) {
b64e5050 4770 const char * const pvx = SvPVX_const(sv);
66a1b24b 4771 const STRLEN len = SvCUR(sv);
10bcdfd6
NC
4772 SvFAKE_off(sv);
4773 SvREADONLY_off(sv);
bd61b366 4774 SvPV_set(sv, NULL);
66a1b24b 4775 SvLEN_set(sv, 0);
1c846c1f 4776 SvGROW(sv, len + 1);
706aa1c9 4777 Move(pvx,SvPVX(sv),len,char);
1c846c1f 4778 *SvEND(sv) = '\0';
bdd68bc3 4779 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
1c846c1f 4780 }
923e4eb5 4781 else if (IN_PERL_RUNTIME)
6ad8f254 4782 Perl_croak_no_modify(aTHX);
0f15f207 4783 }
765f542d 4784#endif
2213622d 4785 if (SvROK(sv))
840a7b70 4786 sv_unref_flags(sv, flags);
13be902c 4787 else if (SvFAKE(sv) && isGV_with_GP(sv))
6fc92669 4788 sv_unglob(sv);
b9ad13ac 4789 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
486ec47a 4790 /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
b9ad13ac
NC
4791 to sv_unglob. We only need it here, so inline it. */
4792 const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4793 SV *const temp = newSV_type(new_type);
4794 void *const temp_p = SvANY(sv);
4795
4796 if (new_type == SVt_PVMG) {
4797 SvMAGIC_set(temp, SvMAGIC(sv));
4798 SvMAGIC_set(sv, NULL);
4799 SvSTASH_set(temp, SvSTASH(sv));
4800 SvSTASH_set(sv, NULL);
4801 }
4802 SvCUR_set(temp, SvCUR(sv));
4803 /* Remember that SvPVX is in the head, not the body. */
4804 if (SvLEN(temp)) {
4805 SvLEN_set(temp, SvLEN(sv));
4806 /* This signals "buffer is owned by someone else" in sv_clear,
4807 which is the least effort way to stop it freeing the buffer.
4808 */
4809 SvLEN_set(sv, SvLEN(sv)+1);
4810 } else {
4811 /* Their buffer is already owned by someone else. */
4812 SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4813 SvLEN_set(temp, SvCUR(sv)+1);
4814 }
4815
4816 /* Now swap the rest of the bodies. */
4817
4818 SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4819 SvFLAGS(sv) |= new_type;
4820 SvANY(sv) = SvANY(temp);
4821
4822 SvFLAGS(temp) &= ~(SVTYPEMASK);
4823 SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4824 SvANY(temp) = temp_p;
4825
4826 SvREFCNT_dec(temp);
4827 }
0f15f207 4828}
1c846c1f 4829
645c22ef 4830/*
954c1994
GS
4831=for apidoc sv_chop
4832
1c846c1f 4833Efficient removal of characters from the beginning of the string buffer.
954c1994
GS
4834SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4835the string buffer. The C<ptr> becomes the first character of the adjusted
645c22ef 4836string. Uses the "OOK hack".
3f7c398e 4837Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
31869a79 4838refer to the same chunk of data.
954c1994
GS
4839
4840=cut
4841*/
4842
79072805 4843void
2e000ff2 4844Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4845{
69240efd
NC
4846 STRLEN delta;
4847 STRLEN old_delta;
7a4bba22
NC
4848 U8 *p;
4849#ifdef DEBUGGING
4850 const U8 *real_start;
4851#endif
6c65d5f9 4852 STRLEN max_delta;
7a4bba22 4853
7918f24d
NC
4854 PERL_ARGS_ASSERT_SV_CHOP;
4855
a0d0e21e 4856 if (!ptr || !SvPOKp(sv))
79072805 4857 return;
3f7c398e 4858 delta = ptr - SvPVX_const(sv);
15895f8a
NC
4859 if (!delta) {
4860 /* Nothing to do. */
4861 return;
4862 }
6c65d5f9
NC
4863 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4864 nothing uses the value of ptr any more. */
837cb3ba 4865 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
6c65d5f9
NC
4866 if (ptr <= SvPVX_const(sv))
4867 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4868 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
2213622d 4869 SV_CHECK_THINKFIRST(sv);
6c65d5f9
NC
4870 if (delta > max_delta)
4871 Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4872 SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4873 SvPVX_const(sv) + max_delta);
79072805
LW
4874
4875 if (!SvOOK(sv)) {
50483b2c 4876 if (!SvLEN(sv)) { /* make copy of shared string */
3f7c398e 4877 const char *pvx = SvPVX_const(sv);
a28509cc 4878 const STRLEN len = SvCUR(sv);
50483b2c 4879 SvGROW(sv, len + 1);
706aa1c9 4880 Move(pvx,SvPVX(sv),len,char);
50483b2c
JD
4881 *SvEND(sv) = '\0';
4882 }
7a5fa8a2 4883 SvFLAGS(sv) |= SVf_OOK;
7a4bba22
NC
4884 old_delta = 0;
4885 } else {
69240efd 4886 SvOOK_offset(sv, old_delta);
79072805 4887 }
b162af07
SP
4888 SvLEN_set(sv, SvLEN(sv) - delta);
4889 SvCUR_set(sv, SvCUR(sv) - delta);
f880fe2f 4890 SvPV_set(sv, SvPVX(sv) + delta);
7a4bba22
NC
4891
4892 p = (U8 *)SvPVX_const(sv);
4893
4894 delta += old_delta;
4895
50af2e61 4896#ifdef DEBUGGING
7a4bba22
NC
4897 real_start = p - delta;
4898#endif
4899
69240efd
NC
4900 assert(delta);
4901 if (delta < 0x100) {
7a4bba22
NC
4902 *--p = (U8) delta;
4903 } else {
69240efd
NC
4904 *--p = 0;
4905 p -= sizeof(STRLEN);
4906 Copy((U8*)&delta, p, sizeof(STRLEN), U8);
7a4bba22
NC
4907 }
4908
4909#ifdef DEBUGGING
4910 /* Fill the preceding buffer with sentinals to verify that no-one is
4911 using it. */
4912 while (p > real_start) {
4913 --p;
4914 *p = (U8)PTR2UV(p);
50af2e61
NC
4915 }
4916#endif
79072805
LW
4917}
4918
954c1994
GS
4919/*
4920=for apidoc sv_catpvn
4921
4922Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4923C<len> indicates number of bytes to copy. If the SV has the UTF-8
4924status set, then the bytes appended should be valid UTF-8.
d5ce4a7c 4925Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
954c1994 4926
8d6d96c1
HS
4927=for apidoc sv_catpvn_flags
4928
4929Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4930C<len> indicates number of bytes to copy. If the SV has the UTF-8
4931status set, then the bytes appended should be valid UTF-8.
8d6d96c1
HS
4932If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4933appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4934in terms of this function.
4935
4936=cut
4937*/
4938
4939void
2e000ff2 4940Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
8d6d96c1 4941{
97aff369 4942 dVAR;
8d6d96c1 4943 STRLEN dlen;
fabdb6c0 4944 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
8d6d96c1 4945
7918f24d
NC
4946 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4947
8d6d96c1
HS
4948 SvGROW(dsv, dlen + slen + 1);
4949 if (sstr == dstr)
3f7c398e 4950 sstr = SvPVX_const(dsv);
8d6d96c1 4951 Move(sstr, SvPVX(dsv) + dlen, slen, char);
b162af07 4952 SvCUR_set(dsv, SvCUR(dsv) + slen);
8d6d96c1
HS
4953 *SvEND(dsv) = '\0';
4954 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4955 SvTAINT(dsv);
bddd5118
NC
4956 if (flags & SV_SMAGIC)
4957 SvSETMAGIC(dsv);
79072805
LW
4958}
4959
954c1994 4960/*
954c1994
GS
4961=for apidoc sv_catsv
4962
13e8c8e3
JH
4963Concatenates the string from SV C<ssv> onto the end of the string in
4964SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4965not 'set' magic. See C<sv_catsv_mg>.
954c1994 4966
8d6d96c1
HS
4967=for apidoc sv_catsv_flags
4968
4969Concatenates the string from SV C<ssv> onto the end of the string in
4970SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4971bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4972and C<sv_catsv_nomg> are implemented in terms of this function.
4973
4974=cut */
4975
ef50df4b 4976void
2e000ff2 4977Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
79072805 4978{
97aff369 4979 dVAR;
7918f24d
NC
4980
4981 PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4982
4983 if (ssv) {
00b6aa41 4984 STRLEN slen;
a9984b10 4985 const char *spv = SvPV_flags_const(ssv, slen, flags);
00b6aa41 4986 if (spv) {
bddd5118
NC
4987 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4988 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4989 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4990 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4991 dsv->sv_flags doesn't have that bit set.
4fd84b44 4992 Andy Dougherty 12 Oct 2001
bddd5118
NC
4993 */
4994 const I32 sutf8 = DO_UTF8(ssv);
4995 I32 dutf8;
13e8c8e3 4996
bddd5118
NC
4997 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4998 mg_get(dsv);
4999 dutf8 = DO_UTF8(dsv);
8d6d96c1 5000
bddd5118
NC
5001 if (dutf8 != sutf8) {
5002 if (dutf8) {
5003 /* Not modifying source SV, so taking a temporary copy. */
59cd0e26 5004 SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
13e8c8e3 5005
bddd5118
NC
5006 sv_utf8_upgrade(csv);
5007 spv = SvPV_const(csv, slen);
5008 }
5009 else
7bf79863
KW
5010 /* Leave enough space for the cat that's about to happen */
5011 sv_utf8_upgrade_flags_grow(dsv, 0, slen);
13e8c8e3 5012 }
bddd5118 5013 sv_catpvn_nomg(dsv, spv, slen);
e84ff256 5014 }
560a288e 5015 }
bddd5118
NC
5016 if (flags & SV_SMAGIC)
5017 SvSETMAGIC(dsv);
79072805
LW
5018}
5019
954c1994 5020/*
954c1994
GS
5021=for apidoc sv_catpv
5022
5023Concatenates the string onto the end of the string which is in the SV.
1e54db1a
JH
5024If the SV has the UTF-8 status set, then the bytes appended should be
5025valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
954c1994 5026
d5ce4a7c 5027=cut */
954c1994 5028
ef50df4b 5029void
2b021c53 5030Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
79072805 5031{
97aff369 5032 dVAR;
79072805 5033 register STRLEN len;
463ee0b2 5034 STRLEN tlen;
748a9306 5035 char *junk;
79072805 5036
7918f24d
NC
5037 PERL_ARGS_ASSERT_SV_CATPV;
5038
0c981600 5039 if (!ptr)
79072805 5040 return;
748a9306 5041 junk = SvPV_force(sv, tlen);
0c981600 5042 len = strlen(ptr);
463ee0b2 5043 SvGROW(sv, tlen + len + 1);
0c981600 5044 if (ptr == junk)
3f7c398e 5045 ptr = SvPVX_const(sv);
0c981600 5046 Move(ptr,SvPVX(sv)+tlen,len+1,char);
b162af07 5047 SvCUR_set(sv, SvCUR(sv) + len);
d41ff1b8 5048 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 5049 SvTAINT(sv);
79072805
LW
5050}
5051
954c1994 5052/*
9dcc53ea
Z
5053=for apidoc sv_catpv_flags
5054
5055Concatenates the string onto the end of the string which is in the SV.
5056If the SV has the UTF-8 status set, then the bytes appended should
5057be valid UTF-8. If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get>
5058on the SVs if appropriate, else not.
5059
5060=cut
5061*/
5062
5063void
fe00c367 5064Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
9dcc53ea
Z
5065{
5066 PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5067 sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5068}
5069
5070/*
954c1994
GS
5071=for apidoc sv_catpv_mg
5072
5073Like C<sv_catpv>, but also handles 'set' magic.
5074
5075=cut
5076*/
5077
ef50df4b 5078void
2b021c53 5079Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 5080{
7918f24d
NC
5081 PERL_ARGS_ASSERT_SV_CATPV_MG;
5082
0c981600 5083 sv_catpv(sv,ptr);
ef50df4b
GS
5084 SvSETMAGIC(sv);
5085}
5086
645c22ef
DM
5087/*
5088=for apidoc newSV
5089
561b68a9
SH
5090Creates a new SV. A non-zero C<len> parameter indicates the number of
5091bytes of preallocated string space the SV should have. An extra byte for a
5092trailing NUL is also reserved. (SvPOK is not set for the SV even if string
5093space is allocated.) The reference count for the new SV is set to 1.
5094
5095In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5096parameter, I<x>, a debug aid which allowed callers to identify themselves.
5097This aid has been superseded by a new build option, PERL_MEM_LOG (see
94c267a8 5098L<perlhacktips/PERL_MEM_LOG>). The older API is still there for use in XS
561b68a9 5099modules supporting older perls.
645c22ef
DM
5100
5101=cut
5102*/
5103
79072805 5104SV *
2b021c53 5105Perl_newSV(pTHX_ const STRLEN len)
79072805 5106{
97aff369 5107 dVAR;
79072805 5108 register SV *sv;
1c846c1f 5109
4561caa4 5110 new_SV(sv);
79072805
LW
5111 if (len) {
5112 sv_upgrade(sv, SVt_PV);
5113 SvGROW(sv, len + 1);
5114 }
5115 return sv;
5116}
954c1994 5117/*
92110913 5118=for apidoc sv_magicext
954c1994 5119
68795e93 5120Adds magic to an SV, upgrading it if necessary. Applies the
2d8d5d5a 5121supplied vtable and returns a pointer to the magic added.
92110913 5122
2d8d5d5a
SH
5123Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5124In particular, you can add magic to SvREADONLY SVs, and add more than
5125one instance of the same 'how'.
645c22ef 5126
2d8d5d5a
SH
5127If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5128stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5129special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5130to contain an C<SV*> and is stored as-is with its REFCNT incremented.
92110913 5131
2d8d5d5a 5132(This is now used as a subroutine by C<sv_magic>.)
954c1994
GS
5133
5134=cut
5135*/
92110913 5136MAGIC *
2b021c53
SS
5137Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
5138 const MGVTBL *const vtable, const char *const name, const I32 namlen)
79072805 5139{
97aff369 5140 dVAR;
79072805 5141 MAGIC* mg;
68795e93 5142
7918f24d
NC
5143 PERL_ARGS_ASSERT_SV_MAGICEXT;
5144
7a7f3e45 5145 SvUPGRADE(sv, SVt_PVMG);
a02a5408 5146 Newxz(mg, 1, MAGIC);
79072805 5147 mg->mg_moremagic = SvMAGIC(sv);
b162af07 5148 SvMAGIC_set(sv, mg);
75f9d97a 5149
05f95b08
SB
5150 /* Sometimes a magic contains a reference loop, where the sv and
5151 object refer to each other. To prevent a reference loop that
5152 would prevent such objects being freed, we look for such loops
5153 and if we find one we avoid incrementing the object refcount.
87f0b213
JH
5154
5155 Note we cannot do this to avoid self-tie loops as intervening RV must
b5ccf5f2 5156 have its REFCNT incremented to keep it in existence.
87f0b213
JH
5157
5158 */
14befaf4
DM
5159 if (!obj || obj == sv ||
5160 how == PERL_MAGIC_arylen ||
8d2f4536 5161 how == PERL_MAGIC_symtab ||
75f9d97a 5162 (SvTYPE(obj) == SVt_PVGV &&
4c4652b6
NC
5163 (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5164 || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5165 || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
75f9d97a 5166 {
8990e307 5167 mg->mg_obj = obj;
75f9d97a 5168 }
85e6fe83 5169 else {
b37c2d43 5170 mg->mg_obj = SvREFCNT_inc_simple(obj);
85e6fe83
LW
5171 mg->mg_flags |= MGf_REFCOUNTED;
5172 }
b5ccf5f2
YST
5173
5174 /* Normal self-ties simply pass a null object, and instead of
5175 using mg_obj directly, use the SvTIED_obj macro to produce a
5176 new RV as needed. For glob "self-ties", we are tieing the PVIO
5177 with an RV obj pointing to the glob containing the PVIO. In
5178 this case, to avoid a reference loop, we need to weaken the
5179 reference.
5180 */
5181
5182 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
a45c7426 5183 obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
b5ccf5f2
YST
5184 {
5185 sv_rvweaken(obj);
5186 }
5187
79072805 5188 mg->mg_type = how;
565764a8 5189 mg->mg_len = namlen;
9cbac4c7 5190 if (name) {
92110913 5191 if (namlen > 0)
1edc1566 5192 mg->mg_ptr = savepvn(name, namlen);
daba3364
NC
5193 else if (namlen == HEf_SVKEY) {
5194 /* Yes, this is casting away const. This is only for the case of
486ec47a 5195 HEf_SVKEY. I think we need to document this aberation of the
daba3364
NC
5196 constness of the API, rather than making name non-const, as
5197 that change propagating outwards a long way. */
5198 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5199 } else
92110913 5200 mg->mg_ptr = (char *) name;
9cbac4c7 5201 }
53d44271 5202 mg->mg_virtual = (MGVTBL *) vtable;
68795e93 5203
92110913
NIS
5204 mg_magical(sv);
5205 if (SvGMAGICAL(sv))
5206 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5207 return mg;
5208}
5209
5210/*
5211=for apidoc sv_magic
1c846c1f 5212
92110913
NIS
5213Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5214then adds a new magic item of type C<how> to the head of the magic list.
5215
2d8d5d5a
SH
5216See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5217handling of the C<name> and C<namlen> arguments.
5218
4509d3fb
SB
5219You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5220to add more than one instance of the same 'how'.
5221
92110913
NIS
5222=cut
5223*/
5224
5225void
2b021c53
SS
5226Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how,
5227 const char *const name, const I32 namlen)
68795e93 5228{
97aff369 5229 dVAR;
53d44271 5230 const MGVTBL *vtable;
92110913 5231 MAGIC* mg;
82ff486e 5232 unsigned int flags;
6f83ef0e 5233 unsigned int vtable_index;
92110913 5234
7918f24d
NC
5235 PERL_ARGS_ASSERT_SV_MAGIC;
5236
2f2f3ec9 5237 if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
82ff486e
NC
5238 || ((flags = PL_magic_data[how]),
5239 (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5240 > magic_vtable_max))
5241 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5242
5243 /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5244 Useful for attaching extension internal data to perl vars.
5245 Note that multiple extensions may clash if magical scalars
5246 etc holding private data from one are passed to another. */
5247
5248 vtable = (vtable_index == magic_vtable_max)
5249 ? NULL : PL_magic_vtables + vtable_index;
5250
f8c7b90f 5251#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
5252 if (SvIsCOW(sv))
5253 sv_force_normal_flags(sv, 0);
5254#endif
92110913 5255 if (SvREADONLY(sv)) {
d8084ca5
DM
5256 if (
5257 /* its okay to attach magic to shared strings; the subsequent
5258 * upgrade to PVMG will unshare the string */
5259 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5260
5261 && IN_PERL_RUNTIME
82ff486e 5262 && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
92110913
NIS
5263 )
5264 {
6ad8f254 5265 Perl_croak_no_modify(aTHX);
92110913
NIS
5266 }
5267 }
5268 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5269 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
68795e93
NIS
5270 /* sv_magic() refuses to add a magic of the same 'how' as an
5271 existing one
92110913 5272 */
2a509ed3 5273 if (how == PERL_MAGIC_taint) {
92110913 5274 mg->mg_len |= 1;
2a509ed3
NC
5275 /* Any scalar which already had taint magic on which someone
5276 (erroneously?) did SvIOK_on() or similar will now be
5277 incorrectly sporting public "OK" flags. */
5278 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5279 }
92110913
NIS
5280 return;
5281 }
5282 }
68795e93 5283
92110913 5284 /* Rest of work is done else where */
aec46f14 5285 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
68795e93 5286
92110913
NIS
5287 switch (how) {
5288 case PERL_MAGIC_taint:
5289 mg->mg_len = 1;
5290 break;
5291 case PERL_MAGIC_ext:
5292 case PERL_MAGIC_dbfile:
5293 SvRMAGICAL_on(sv);
5294 break;
5295 }
463ee0b2
LW
5296}
5297
e1463d31 5298static int
b83794c7 5299S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
463ee0b2
LW
5300{
5301 MAGIC* mg;
5302 MAGIC** mgp;
7918f24d 5303
b83794c7 5304 assert(flags <= 1);
7918f24d 5305
91bba347 5306 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
463ee0b2 5307 return 0;
064cf529 5308 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
463ee0b2 5309 for (mg = *mgp; mg; mg = *mgp) {
b83794c7
FR
5310 const MGVTBL* const virt = mg->mg_virtual;
5311 if (mg->mg_type == type && (!flags || virt == vtbl)) {
463ee0b2 5312 *mgp = mg->mg_moremagic;
b83794c7
FR
5313 if (virt && virt->svt_free)
5314 virt->svt_free(aTHX_ sv, mg);
14befaf4 5315 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
92110913 5316 if (mg->mg_len > 0)
1edc1566 5317 Safefree(mg->mg_ptr);
565764a8 5318 else if (mg->mg_len == HEf_SVKEY)
daba3364 5319 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
d2923cdd 5320 else if (mg->mg_type == PERL_MAGIC_utf8)
7e8c5dac 5321 Safefree(mg->mg_ptr);
9cbac4c7 5322 }
a0d0e21e
LW
5323 if (mg->mg_flags & MGf_REFCOUNTED)
5324 SvREFCNT_dec(mg->mg_obj);
463ee0b2
LW
5325 Safefree(mg);
5326 }
5327 else
5328 mgp = &mg->mg_moremagic;
79072805 5329 }
806e7ca7
CS
5330 if (SvMAGIC(sv)) {
5331 if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */
5332 mg_magical(sv); /* else fix the flags now */
5333 }
5334 else {
463ee0b2 5335 SvMAGICAL_off(sv);
c268c2a6 5336 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
463ee0b2 5337 }
463ee0b2 5338 return 0;
79072805
LW
5339}
5340
c461cf8f 5341/*
b83794c7
FR
5342=for apidoc sv_unmagic
5343
5344Removes all magic of type C<type> from an SV.
5345
5346=cut
5347*/
5348
5349int
5350Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5351{
5352 PERL_ARGS_ASSERT_SV_UNMAGIC;
5353 return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5354}
5355
5356/*
5357=for apidoc sv_unmagicext
5358
5359Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5360
5361=cut
5362*/
5363
5364int
5365Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5366{
5367 PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5368 return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5369}
5370
5371/*
c461cf8f
JH
5372=for apidoc sv_rvweaken
5373
645c22ef
DM
5374Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5375referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5376push a back-reference to this RV onto the array of backreferences
1e73acc8
AS
5377associated with that magic. If the RV is magical, set magic will be
5378called after the RV is cleared.
c461cf8f
JH
5379
5380=cut
5381*/
5382
810b8aa5 5383SV *
2b021c53 5384Perl_sv_rvweaken(pTHX_ SV *const sv)
810b8aa5
GS
5385{
5386 SV *tsv;
7918f24d
NC
5387
5388 PERL_ARGS_ASSERT_SV_RVWEAKEN;
5389
810b8aa5
GS
5390 if (!SvOK(sv)) /* let undefs pass */
5391 return sv;
5392 if (!SvROK(sv))
cea2e8a9 5393 Perl_croak(aTHX_ "Can't weaken a nonreference");
810b8aa5 5394 else if (SvWEAKREF(sv)) {
a2a5de95 5395 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
810b8aa5
GS
5396 return sv;
5397 }
5d4ff231 5398 else if (SvREADONLY(sv)) croak_no_modify();
810b8aa5 5399 tsv = SvRV(sv);
e15faf7d 5400 Perl_sv_add_backref(aTHX_ tsv, sv);
810b8aa5 5401 SvWEAKREF_on(sv);
1c846c1f 5402 SvREFCNT_dec(tsv);
810b8aa5
GS
5403 return sv;
5404}
5405
645c22ef
DM
5406/* Give tsv backref magic if it hasn't already got it, then push a
5407 * back-reference to sv onto the array associated with the backref magic.
5648c0ae
DM
5408 *
5409 * As an optimisation, if there's only one backref and it's not an AV,
5410 * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5411 * allocate an AV. (Whether the slot holds an AV tells us whether this is
5412 * active.)
645c22ef
DM
5413 */
5414
fd996479
DM
5415/* A discussion about the backreferences array and its refcount:
5416 *
5417 * The AV holding the backreferences is pointed to either as the mg_obj of
d5683f9a
DM
5418 * PERL_MAGIC_backref, or in the specific case of a HV, from the
5419 * xhv_backreferences field. The array is created with a refcount
09aad8f0 5420 * of 2. This means that if during global destruction the array gets
cef0c2ea
DM
5421 * picked on before its parent to have its refcount decremented by the
5422 * random zapper, it won't actually be freed, meaning it's still there for
5423 * when its parent gets freed.
5648c0ae
DM
5424 *
5425 * When the parent SV is freed, the extra ref is killed by
5426 * Perl_sv_kill_backrefs. The other ref is killed, in the case of magic,
5427 * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5428 *
5429 * When a single backref SV is stored directly, it is not reference
5430 * counted.
fd996479
DM
5431 */
5432
e15faf7d 5433void
2b021c53 5434Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
810b8aa5 5435{
97aff369 5436 dVAR;
757971c4 5437 SV **svp;
5648c0ae 5438 AV *av = NULL;
757971c4 5439 MAGIC *mg = NULL;
86f55936 5440
7918f24d
NC
5441 PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5442
5648c0ae
DM
5443 /* find slot to store array or singleton backref */
5444
86f55936 5445 if (SvTYPE(tsv) == SVt_PVHV) {
757971c4 5446 svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
86f55936 5447 } else {
757971c4
DM
5448 if (! ((mg =
5449 (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5450 {
5451 sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5452 mg = mg_find(tsv, PERL_MAGIC_backref);
86f55936 5453 }
757971c4 5454 svp = &(mg->mg_obj);
810b8aa5 5455 }
757971c4 5456
5648c0ae
DM
5457 /* create or retrieve the array */
5458
5459 if ( (!*svp && SvTYPE(sv) == SVt_PVAV)
5460 || (*svp && SvTYPE(*svp) != SVt_PVAV)
5461 ) {
5462 /* create array */
757971c4
DM
5463 av = newAV();
5464 AvREAL_off(av);
5465 SvREFCNT_inc_simple_void(av);
5466 /* av now has a refcnt of 2; see discussion above */
5648c0ae
DM
5467 if (*svp) {
5468 /* move single existing backref to the array */
5469 av_extend(av, 1);
5470 AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5471 }
5472 *svp = (SV*)av;
757971c4
DM
5473 if (mg)
5474 mg->mg_flags |= MGf_REFCOUNTED;
757971c4
DM
5475 }
5476 else
5648c0ae 5477 av = MUTABLE_AV(*svp);
757971c4 5478
5648c0ae
DM
5479 if (!av) {
5480 /* optimisation: store single backref directly in HvAUX or mg_obj */
5481 *svp = sv;
5482 return;
5483 }
5484 /* push new backref */
5485 assert(SvTYPE(av) == SVt_PVAV);
d91d49e8 5486 if (AvFILLp(av) >= AvMAX(av)) {
d91d49e8
MM
5487 av_extend(av, AvFILLp(av)+1);
5488 }
5489 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
810b8aa5
GS
5490}
5491
645c22ef
DM
5492/* delete a back-reference to ourselves from the backref magic associated
5493 * with the SV we point to.
5494 */
5495
4c74a7df
DM
5496void
5497Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
810b8aa5 5498{
97aff369 5499 dVAR;
5648c0ae 5500 SV **svp = NULL;
86f55936 5501
7918f24d
NC
5502 PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5503
d5683f9a
DM
5504 if (SvTYPE(tsv) == SVt_PVHV) {
5505 if (SvOOK(tsv))
5506 svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
86f55936 5507 }
d5683f9a 5508 else {
5648c0ae 5509 MAGIC *const mg
86f55936 5510 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5648c0ae 5511 svp = mg ? &(mg->mg_obj) : NULL;
86f55936 5512 }
41fae7a1 5513
5648c0ae 5514 if (!svp || !*svp)
cea2e8a9 5515 Perl_croak(aTHX_ "panic: del_backref");
86f55936 5516
5648c0ae 5517 if (SvTYPE(*svp) == SVt_PVAV) {
51698cb3
DM
5518#ifdef DEBUGGING
5519 int count = 1;
5520#endif
5648c0ae 5521 AV * const av = (AV*)*svp;
51698cb3 5522 SSize_t fill;
5648c0ae 5523 assert(!SvIS_FREED(av));
51698cb3
DM
5524 fill = AvFILLp(av);
5525 assert(fill > -1);
5648c0ae 5526 svp = AvARRAY(av);
51698cb3
DM
5527 /* for an SV with N weak references to it, if all those
5528 * weak refs are deleted, then sv_del_backref will be called
5529 * N times and O(N^2) compares will be done within the backref
5530 * array. To ameliorate this potential slowness, we:
5531 * 1) make sure this code is as tight as possible;
5532 * 2) when looking for SV, look for it at both the head and tail of the
5533 * array first before searching the rest, since some create/destroy
5534 * patterns will cause the backrefs to be freed in order.
5535 */
5536 if (*svp == sv) {
5537 AvARRAY(av)++;
5538 AvMAX(av)--;
5539 }
5540 else {
5541 SV **p = &svp[fill];
5542 SV *const topsv = *p;
5543 if (topsv != sv) {
5544#ifdef DEBUGGING
5545 count = 0;
5546#endif
5547 while (--p > svp) {
5548 if (*p == sv) {
5549 /* We weren't the last entry.
5550 An unordered list has this property that you
5551 can take the last element off the end to fill
5552 the hole, and it's still an unordered list :-)
5553 */
5554 *p = topsv;
5555#ifdef DEBUGGING
5556 count++;
5557#else
5558 break; /* should only be one */
254f8c6a 5559#endif
51698cb3
DM
5560 }
5561 }
6a76db8b 5562 }
6a76db8b 5563 }
51698cb3
DM
5564 assert(count ==1);
5565 AvFILLp(av) = fill-1;
6a76db8b 5566 }
5648c0ae
DM
5567 else {
5568 /* optimisation: only a single backref, stored directly */
5569 if (*svp != sv)
5570 Perl_croak(aTHX_ "panic: del_backref");
5571 *svp = NULL;
5572 }
5573
810b8aa5
GS
5574}
5575
5648c0ae 5576void
2b021c53 5577Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
86f55936 5578{
5648c0ae
DM
5579 SV **svp;
5580 SV **last;
5581 bool is_array;
86f55936 5582
7918f24d 5583 PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
86f55936 5584
5648c0ae
DM
5585 if (!av)
5586 return;
86f55936 5587
da0c0b27
DM
5588 /* after multiple passes through Perl_sv_clean_all() for a thinngy
5589 * that has badly leaked, the backref array may have gotten freed,
5590 * since we only protect it against 1 round of cleanup */
5591 if (SvIS_FREED(av)) {
5592 if (PL_in_clean_all) /* All is fair */
5593 return;
5594 Perl_croak(aTHX_
5595 "panic: magic_killbackrefs (freed backref AV/SV)");
5596 }
5597
5598
5648c0ae
DM
5599 is_array = (SvTYPE(av) == SVt_PVAV);
5600 if (is_array) {
cef0c2ea 5601 assert(!SvIS_FREED(av));
5648c0ae
DM
5602 svp = AvARRAY(av);
5603 if (svp)
5604 last = svp + AvFILLp(av);
5605 }
5606 else {
5607 /* optimisation: only a single backref, stored directly */
5608 svp = (SV**)&av;
5609 last = svp;
5610 }
5611
5612 if (svp) {
86f55936
NC
5613 while (svp <= last) {
5614 if (*svp) {
5615 SV *const referrer = *svp;
5616 if (SvWEAKREF(referrer)) {
5617 /* XXX Should we check that it hasn't changed? */
4c74a7df 5618 assert(SvROK(referrer));
86f55936
NC
5619 SvRV_set(referrer, 0);
5620 SvOK_off(referrer);
5621 SvWEAKREF_off(referrer);
1e73acc8 5622 SvSETMAGIC(referrer);
86f55936
NC
5623 } else if (SvTYPE(referrer) == SVt_PVGV ||
5624 SvTYPE(referrer) == SVt_PVLV) {
803f2748 5625 assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
86f55936
NC
5626 /* You lookin' at me? */
5627 assert(GvSTASH(referrer));
1d193675 5628 assert(GvSTASH(referrer) == (const HV *)sv);
86f55936 5629 GvSTASH(referrer) = 0;
803f2748
DM
5630 } else if (SvTYPE(referrer) == SVt_PVCV ||
5631 SvTYPE(referrer) == SVt_PVFM) {
5632 if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5633 /* You lookin' at me? */
5634 assert(CvSTASH(referrer));
5635 assert(CvSTASH(referrer) == (const HV *)sv);
c68d9564 5636 SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
803f2748
DM
5637 }
5638 else {
5639 assert(SvTYPE(sv) == SVt_PVGV);
5640 /* You lookin' at me? */
5641 assert(CvGV(referrer));
5642 assert(CvGV(referrer) == (const GV *)sv);
5643 anonymise_cv_maybe(MUTABLE_GV(sv),
5644 MUTABLE_CV(referrer));
5645 }
5646
86f55936
NC
5647 } else {
5648 Perl_croak(aTHX_
5649 "panic: magic_killbackrefs (flags=%"UVxf")",
5650 (UV)SvFLAGS(referrer));
5651 }
5652
5648c0ae
DM
5653 if (is_array)
5654 *svp = NULL;
86f55936
NC
5655 }
5656 svp++;
5657 }
5648c0ae
DM
5658 }
5659 if (is_array) {
cef0c2ea 5660 AvFILLp(av) = -1;
5648c0ae 5661 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
86f55936 5662 }
5648c0ae 5663 return;
86f55936
NC
5664}
5665
954c1994
GS
5666/*
5667=for apidoc sv_insert
5668
5669Inserts a string at the specified offset/length within the SV. Similar to
c0dd94a0 5670the Perl substr() function. Handles get magic.
954c1994 5671
c0dd94a0
VP
5672=for apidoc sv_insert_flags
5673
5674Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5675
5676=cut
5677*/
5678
5679void
5680Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5681{
97aff369 5682 dVAR;
79072805
LW
5683 register char *big;
5684 register char *mid;
5685 register char *midend;
5686 register char *bigend;
5687 register I32 i;
6ff81951 5688 STRLEN curlen;
1c846c1f 5689
27aecdc6 5690 PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
79072805 5691
8990e307 5692 if (!bigstr)
cea2e8a9 5693 Perl_croak(aTHX_ "Can't modify non-existent substring");
c0dd94a0 5694 SvPV_force_flags(bigstr, curlen, flags);
60fa28ff 5695 (void)SvPOK_only_UTF8(bigstr);
6ff81951
GS
5696 if (offset + len > curlen) {
5697 SvGROW(bigstr, offset+len+1);
93524f2b 5698 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6ff81951
GS
5699 SvCUR_set(bigstr, offset+len);
5700 }
79072805 5701
69b47968 5702 SvTAINT(bigstr);
79072805
LW
5703 i = littlelen - len;
5704 if (i > 0) { /* string might grow */
a0d0e21e 5705 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
79072805
LW
5706 mid = big + offset + len;
5707 midend = bigend = big + SvCUR(bigstr);
5708 bigend += i;
5709 *bigend = '\0';
5710 while (midend > mid) /* shove everything down */
5711 *--bigend = *--midend;
5712 Move(little,big+offset,littlelen,char);
b162af07 5713 SvCUR_set(bigstr, SvCUR(bigstr) + i);
79072805
LW
5714 SvSETMAGIC(bigstr);
5715 return;
5716 }
5717 else if (i == 0) {
463ee0b2 5718 Move(little,SvPVX(bigstr)+offset,len,char);
79072805
LW
5719 SvSETMAGIC(bigstr);
5720 return;
5721 }
5722
463ee0b2 5723 big = SvPVX(bigstr);
79072805
LW
5724 mid = big + offset;
5725 midend = mid + len;
5726 bigend = big + SvCUR(bigstr);
5727
5728 if (midend > bigend)
cea2e8a9 5729 Perl_croak(aTHX_ "panic: sv_insert");
79072805
LW
5730
5731 if (mid - big > bigend - midend) { /* faster to shorten from end */
5732 if (littlelen) {
5733 Move(little, mid, littlelen,char);
5734 mid += littlelen;
5735 }
5736 i = bigend - midend;
5737 if (i > 0) {
5738 Move(midend, mid, i,char);
5739 mid += i;
5740 }
5741 *mid = '\0';
5742 SvCUR_set(bigstr, mid - big);
5743 }
155aba94 5744 else if ((i = mid - big)) { /* faster from front */
79072805
LW
5745 midend -= littlelen;
5746 mid = midend;
0d3c21b0 5747 Move(big, midend - i, i, char);
79072805 5748 sv_chop(bigstr,midend-i);
79072805
LW
5749 if (littlelen)
5750 Move(little, mid, littlelen,char);
5751 }
5752 else if (littlelen) {
5753 midend -= littlelen;
5754 sv_chop(bigstr,midend);
5755 Move(little,midend,littlelen,char);
5756 }
5757 else {
5758 sv_chop(bigstr,midend);
5759 }
5760 SvSETMAGIC(bigstr);
5761}
5762
c461cf8f
JH
5763/*
5764=for apidoc sv_replace
5765
5766Make the first argument a copy of the second, then delete the original.
645c22ef
DM
5767The target SV physically takes over ownership of the body of the source SV
5768and inherits its flags; however, the target keeps any magic it owns,
5769and any magic in the source is discarded.
ff276b08 5770Note that this is a rather specialist SV copying operation; most of the
645c22ef 5771time you'll want to use C<sv_setsv> or one of its many macro front-ends.
c461cf8f
JH
5772
5773=cut
5774*/
79072805
LW
5775
5776void
af828c01 5777Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
79072805 5778{
97aff369 5779 dVAR;
a3b680e6 5780 const U32 refcnt = SvREFCNT(sv);
7918f24d
NC
5781
5782 PERL_ARGS_ASSERT_SV_REPLACE;
5783
765f542d 5784 SV_CHECK_THINKFIRST_COW_DROP(sv);
30e5c352 5785 if (SvREFCNT(nsv) != 1) {
fe13d51d
JM
5786 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5787 " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
30e5c352 5788 }
93a17b20 5789 if (SvMAGICAL(sv)) {
a0d0e21e
LW
5790 if (SvMAGICAL(nsv))
5791 mg_free(nsv);
5792 else
5793 sv_upgrade(nsv, SVt_PVMG);
b162af07 5794 SvMAGIC_set(nsv, SvMAGIC(sv));
a0d0e21e 5795 SvFLAGS(nsv) |= SvMAGICAL(sv);
93a17b20 5796 SvMAGICAL_off(sv);
b162af07 5797 SvMAGIC_set(sv, NULL);
93a17b20 5798 }
79072805
LW
5799 SvREFCNT(sv) = 0;
5800 sv_clear(sv);
477f5d66 5801 assert(!SvREFCNT(sv));
fd0854ff
DM
5802#ifdef DEBUG_LEAKING_SCALARS
5803 sv->sv_flags = nsv->sv_flags;
5804 sv->sv_any = nsv->sv_any;
5805 sv->sv_refcnt = nsv->sv_refcnt;
f34d0642 5806 sv->sv_u = nsv->sv_u;
fd0854ff 5807#else
79072805 5808 StructCopy(nsv,sv,SV);
fd0854ff 5809#endif
4df7f6af 5810 if(SvTYPE(sv) == SVt_IV) {
7b2c381c 5811 SvANY(sv)
339049b0 5812 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
7b2c381c
NC
5813 }
5814
fd0854ff 5815
f8c7b90f 5816#ifdef PERL_OLD_COPY_ON_WRITE
d3d0e6f1
NC
5817 if (SvIsCOW_normal(nsv)) {
5818 /* We need to follow the pointers around the loop to make the
5819 previous SV point to sv, rather than nsv. */
5820 SV *next;
5821 SV *current = nsv;
5822 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5823 assert(next);
5824 current = next;
3f7c398e 5825 assert(SvPVX_const(current) == SvPVX_const(nsv));
d3d0e6f1
NC
5826 }
5827 /* Make the SV before us point to the SV after us. */
5828 if (DEBUG_C_TEST) {
5829 PerlIO_printf(Perl_debug_log, "previous is\n");
5830 sv_dump(current);
a29f6d03
NC
5831 PerlIO_printf(Perl_debug_log,
5832 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
d3d0e6f1
NC
5833 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5834 }
a29f6d03 5835 SV_COW_NEXT_SV_SET(current, sv);
d3d0e6f1
NC
5836 }
5837#endif
79072805 5838 SvREFCNT(sv) = refcnt;
1edc1566 5839 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
39cf41c2 5840 SvREFCNT(nsv) = 0;
463ee0b2 5841 del_SV(nsv);
79072805
LW
5842}
5843
803f2748
DM
5844/* We're about to free a GV which has a CV that refers back to us.
5845 * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5846 * field) */
5847
5848STATIC void
5849S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5850{
5851 char *stash;
5852 SV *gvname;
5853 GV *anongv;
5854
5855 PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5856
5857 /* be assertive! */
5858 assert(SvREFCNT(gv) == 0);
5859 assert(isGV(gv) && isGV_with_GP(gv));
5860 assert(GvGP(gv));
5861 assert(!CvANON(cv));
5862 assert(CvGV(cv) == gv);
5863
5864 /* will the CV shortly be freed by gp_free() ? */
5865 if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
b3f91e91 5866 SvANY(cv)->xcv_gv = NULL;
803f2748
DM
5867 return;
5868 }
5869
5870 /* if not, anonymise: */
57f45d7b
FC
5871 stash = GvSTASH(gv) && HvNAME(GvSTASH(gv))
5872 ? HvENAME(GvSTASH(gv)) : NULL;
803f2748
DM
5873 gvname = Perl_newSVpvf(aTHX_ "%s::__ANON__",
5874 stash ? stash : "__ANON__");
5875 anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5876 SvREFCNT_dec(gvname);
5877
5878 CvANON_on(cv);
cfc1e951 5879 CvCVGV_RC_on(cv);
b3f91e91 5880 SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
803f2748
DM
5881}
5882
5883
c461cf8f
JH
5884/*
5885=for apidoc sv_clear
5886
645c22ef
DM
5887Clear an SV: call any destructors, free up any memory used by the body,
5888and free the body itself. The SV's head is I<not> freed, although
5889its type is set to all 1's so that it won't inadvertently be assumed
5890to be live during global destruction etc.
5891This function should only be called when REFCNT is zero. Most of the time
5892you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5893instead.
c461cf8f
JH
5894
5895=cut
5896*/
5897
79072805 5898void
5239d5c4 5899Perl_sv_clear(pTHX_ SV *const orig_sv)
79072805 5900{
27da23d5 5901 dVAR;
dd69841b 5902 HV *stash;
5239d5c4
DM
5903 U32 type;
5904 const struct body_details *sv_type_details;
5905 SV* iter_sv = NULL;
5906 SV* next_sv = NULL;
5907 register SV *sv = orig_sv;
104d7b69 5908 STRLEN hash_index;
82bb6deb 5909
7918f24d 5910 PERL_ARGS_ASSERT_SV_CLEAR;
5239d5c4
DM
5911
5912 /* within this loop, sv is the SV currently being freed, and
5913 * iter_sv is the most recent AV or whatever that's being iterated
5914 * over to provide more SVs */
5915
5916 while (sv) {
5917
df90f6af
DM
5918 type = SvTYPE(sv);
5919
5920 assert(SvREFCNT(sv) == 0);
e4787c0c 5921 assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
df90f6af
DM
5922
5923 if (type <= SVt_IV) {
5924 /* See the comment in sv.h about the collusion between this
5925 * early return and the overloading of the NULL slots in the
5926 * size table. */
5927 if (SvROK(sv))
5928 goto free_rv;
5929 SvFLAGS(sv) &= SVf_BREAK;
5930 SvFLAGS(sv) |= SVTYPEMASK;
5931 goto free_head;
5932 }
82bb6deb 5933
683f70bd
DM
5934 assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
5935
df90f6af 5936 if (type >= SVt_PVMG) {
683f70bd
DM
5937 if (SvOBJECT(sv)) {
5938 if (!curse(sv, 1)) goto get_next_sv;
64cbf396 5939 type = SvTYPE(sv); /* destructor may have changed it */
683f70bd 5940 }
007f907e
FC
5941 /* Free back-references before magic, in case the magic calls
5942 * Perl code that has weak references to sv. */
f350200e 5943 if (type == SVt_PVHV) {
007f907e 5944 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
f350200e
DM
5945 if (SvMAGIC(sv))
5946 mg_free(sv);
5947 }
5948 else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
df90f6af 5949 SvREFCNT_dec(SvOURSTASH(sv));
007f907e
FC
5950 } else if (SvMAGIC(sv)) {
5951 /* Free back-references before other types of magic. */
5952 sv_unmagic(sv, PERL_MAGIC_backref);
df90f6af 5953 mg_free(sv);
007f907e 5954 }
df90f6af
DM
5955 if (type == SVt_PVMG && SvPAD_TYPED(sv))
5956 SvREFCNT_dec(SvSTASH(sv));
e7fab884 5957 }
df90f6af
DM
5958 switch (type) {
5959 /* case SVt_BIND: */
5960 case SVt_PVIO:
5961 if (IoIFP(sv) &&
5962 IoIFP(sv) != PerlIO_stdin() &&
5963 IoIFP(sv) != PerlIO_stdout() &&
5964 IoIFP(sv) != PerlIO_stderr() &&
5965 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5966 {
5967 io_close(MUTABLE_IO(sv), FALSE);
5239d5c4 5968 }
df90f6af
DM
5969 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5970 PerlDir_close(IoDIRP(sv));
5971 IoDIRP(sv) = (DIR*)NULL;
5972 Safefree(IoTOP_NAME(sv));
5973 Safefree(IoFMT_NAME(sv));
5974 Safefree(IoBOTTOM_NAME(sv));
5975 goto freescalar;
5976 case SVt_REGEXP:
5977 /* FIXME for plugins */
5978 pregfree2((REGEXP*) sv);
5979 goto freescalar;
5980 case SVt_PVCV:
5981 case SVt_PVFM:
5982 cv_undef(MUTABLE_CV(sv));
5983 /* If we're in a stash, we don't own a reference to it.
5984 * However it does have a back reference to us, which needs to
5985 * be cleared. */
5986 if ((stash = CvSTASH(sv)))
5987 sv_del_backref(MUTABLE_SV(stash), sv);
5988 goto freescalar;
5989 case SVt_PVHV:
5990 if (PL_last_swash_hv == (const HV *)sv) {
5991 PL_last_swash_hv = NULL;
5239d5c4 5992 }
104d7b69
DM
5993 if (HvTOTALKEYS((HV*)sv) > 0) {
5994 const char *name;
5995 /* this statement should match the one at the beginning of
5996 * hv_undef_flags() */
5997 if ( PL_phase != PERL_PHASE_DESTRUCT
5998 && (name = HvNAME((HV*)sv)))
5999 {
6000 if (PL_stashcache)
6001 (void)hv_delete(PL_stashcache, name,
6002 HvNAMELEN_get((HV*)sv), G_DISCARD);
6003 hv_name_set((HV*)sv, NULL, 0, 0);
6004 }
6005
6006 /* save old iter_sv in unused SvSTASH field */
6007 assert(!SvOBJECT(sv));
6008 SvSTASH(sv) = (HV*)iter_sv;
6009 iter_sv = sv;
6010
6011 /* XXX ideally we should save the old value of hash_index
6012 * too, but I can't think of any place to hide it. The
6013 * effect of not saving it is that for freeing hashes of
6014 * hashes, we become quadratic in scanning the HvARRAY of
6015 * the top hash looking for new entries to free; but
6016 * hopefully this will be dwarfed by the freeing of all
6017 * the nested hashes. */
6018 hash_index = 0;
6019 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6020 goto get_next_sv; /* process this new sv */
6021 }
6022 /* free empty hash */
745edda6 6023 Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
ef60ac00 6024 assert(!HvARRAY((HV*)sv));
df90f6af
DM
6025 break;
6026 case SVt_PVAV:
db93c0c4 6027 {
df90f6af
DM
6028 AV* av = MUTABLE_AV(sv);
6029 if (PL_comppad == av) {
6030 PL_comppad = NULL;
6031 PL_curpad = NULL;
6032 }
6033 if (AvREAL(av) && AvFILLp(av) > -1) {
6034 next_sv = AvARRAY(av)[AvFILLp(av)--];
6035 /* save old iter_sv in top-most slot of AV,
6036 * and pray that it doesn't get wiped in the meantime */
6037 AvARRAY(av)[AvMAX(av)] = iter_sv;
6038 iter_sv = sv;
6039 goto get_next_sv; /* process this new sv */
6040 }
6041 Safefree(AvALLOC(av));
db93c0c4 6042 }
df90f6af
DM
6043
6044 break;
6045 case SVt_PVLV:
6046 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6047 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6048 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6049 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6050 }
6051 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
6052 SvREFCNT_dec(LvTARG(sv));
6053 case SVt_PVGV:
6054 if (isGV_with_GP(sv)) {
6055 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
00169e2c 6056 && HvENAME_get(stash))
df90f6af
DM
6057 mro_method_changed_in(stash);
6058 gp_free(MUTABLE_GV(sv));
6059 if (GvNAME_HEK(sv))
6060 unshare_hek(GvNAME_HEK(sv));
6061 /* If we're in a stash, we don't own a reference to it.
6062 * However it does have a back reference to us, which
6063 * needs to be cleared. */
6064 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6065 sv_del_backref(MUTABLE_SV(stash), sv);
6066 }
6067 /* FIXME. There are probably more unreferenced pointers to SVs
6068 * in the interpreter struct that we should check and tidy in
6069 * a similar fashion to this: */
6070 if ((const GV *)sv == PL_last_in_gv)
6071 PL_last_in_gv = NULL;
6072 case SVt_PVMG:
6073 case SVt_PVNV:
6074 case SVt_PVIV:
6075 case SVt_PV:
6076 freescalar:
6077 /* Don't bother with SvOOK_off(sv); as we're only going to
6078 * free it. */
6079 if (SvOOK(sv)) {
6080 STRLEN offset;
6081 SvOOK_offset(sv, offset);
6082 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6083 /* Don't even bother with turning off the OOK flag. */
6084 }
6085 if (SvROK(sv)) {
6086 free_rv:
6087 {
6088 SV * const target = SvRV(sv);
6089 if (SvWEAKREF(sv))
6090 sv_del_backref(target, sv);
6091 else
b98b62bc 6092 next_sv = target;
5302ffd4 6093 }
df90f6af
DM
6094 }
6095#ifdef PERL_OLD_COPY_ON_WRITE
6096 else if (SvPVX_const(sv)
6097 && !(SvTYPE(sv) == SVt_PVIO
6098 && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6099 {
6100 if (SvIsCOW(sv)) {
6101 if (DEBUG_C_TEST) {
6102 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6103 sv_dump(sv);
6104 }
6105 if (SvLEN(sv)) {
6106 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6107 } else {
6108 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6109 }
5302ffd4 6110
df90f6af
DM
6111 SvFAKE_off(sv);
6112 } else if (SvLEN(sv)) {
6113 Safefree(SvPVX_const(sv));
6114 }
6115 }
765f542d 6116#else
df90f6af
DM
6117 else if (SvPVX_const(sv) && SvLEN(sv)
6118 && !(SvTYPE(sv) == SVt_PVIO
6119 && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6120 Safefree(SvPVX_mutable(sv));
6121 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
6122 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6123 SvFAKE_off(sv);
6124 }
765f542d 6125#endif
df90f6af
DM
6126 break;
6127 case SVt_NV:
6128 break;
6129 }
79072805 6130
df90f6af 6131 free_body:
5239d5c4 6132
df90f6af
DM
6133 SvFLAGS(sv) &= SVf_BREAK;
6134 SvFLAGS(sv) |= SVTYPEMASK;
893645bd 6135
df90f6af
DM
6136 sv_type_details = bodies_by_type + type;
6137 if (sv_type_details->arena) {
6138 del_body(((char *)SvANY(sv) + sv_type_details->offset),
6139 &PL_body_roots[type]);
6140 }
6141 else if (sv_type_details->body_size) {
6142 safefree(SvANY(sv));
6143 }
5239d5c4
DM
6144
6145 free_head:
6146 /* caller is responsible for freeing the head of the original sv */
6147 if (sv != orig_sv && !SvREFCNT(sv))
6148 del_SV(sv);
6149
6150 /* grab and free next sv, if any */
6151 get_next_sv:
6152 while (1) {
6153 sv = NULL;
6154 if (next_sv) {
6155 sv = next_sv;
6156 next_sv = NULL;
6157 }
6158 else if (!iter_sv) {
6159 break;
6160 } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6161 AV *const av = (AV*)iter_sv;
6162 if (AvFILLp(av) > -1) {
6163 sv = AvARRAY(av)[AvFILLp(av)--];
6164 }
6165 else { /* no more elements of current AV to free */
6166 sv = iter_sv;
6167 type = SvTYPE(sv);
6168 /* restore previous value, squirrelled away */
6169 iter_sv = AvARRAY(av)[AvMAX(av)];
6170 Safefree(AvALLOC(av));
6171 goto free_body;
6172 }
104d7b69 6173 } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6d1c68e6
FC
6174 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6175 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
7d6175ef 6176 /* no more elements of current HV to free */
104d7b69
DM
6177 sv = iter_sv;
6178 type = SvTYPE(sv);
9c80917f
DM
6179 /* Restore previous value of iter_sv, squirrelled away */
6180 assert(!SvOBJECT(sv));
6181 iter_sv = (SV*)SvSTASH(sv);
104d7b69
DM
6182
6183 /* ideally we should restore the old hash_index here,
6184 * but we don't currently save the old value */
6185 hash_index = 0;
6186
6187 /* free any remaining detritus from the hash struct */
6188 Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6189 assert(!HvARRAY((HV*)sv));
6190 goto free_body;
6191 }
5239d5c4
DM
6192 }
6193
6194 /* unrolled SvREFCNT_dec and sv_free2 follows: */
6195
6196 if (!sv)
6197 continue;
6198 if (!SvREFCNT(sv)) {
6199 sv_free(sv);
6200 continue;
6201 }
6202 if (--(SvREFCNT(sv)))
6203 continue;
df90f6af 6204#ifdef DEBUGGING
5239d5c4
DM
6205 if (SvTEMP(sv)) {
6206 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6207 "Attempt to free temp prematurely: SV 0x%"UVxf
6208 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6209 continue;
6210 }
df90f6af 6211#endif
5239d5c4
DM
6212 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6213 /* make sure SvREFCNT(sv)==0 happens very seldom */
6214 SvREFCNT(sv) = (~(U32)0)/2;
6215 continue;
6216 }
6217 break;
6218 } /* while 1 */
6219
6220 } /* while sv */
79072805
LW
6221}
6222
4155e4fe
FC
6223/* This routine curses the sv itself, not the object referenced by sv. So
6224 sv does not have to be ROK. */
6225
6226static bool
6227S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6228 dVAR;
6229
6230 PERL_ARGS_ASSERT_CURSE;
6231 assert(SvOBJECT(sv));
6232
6233 if (PL_defstash && /* Still have a symbol table? */
6234 SvDESTROYABLE(sv))
6235 {
6236 dSP;
6237 HV* stash;
6238 do {
6239 CV* destructor;
6240 stash = SvSTASH(sv);
6241 destructor = StashHANDLER(stash,DESTROY);
6242 if (destructor
6243 /* A constant subroutine can have no side effects, so
6244 don't bother calling it. */
6245 && !CvCONST(destructor)
6246 /* Don't bother calling an empty destructor */
6247 && (CvISXSUB(destructor)
6248 || (CvSTART(destructor)
6249 && (CvSTART(destructor)->op_next->op_type
6250 != OP_LEAVESUB))))
6251 {
6252 SV* const tmpref = newRV(sv);
6253 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6254 ENTER;
6255 PUSHSTACKi(PERLSI_DESTROY);
6256 EXTEND(SP, 2);
6257 PUSHMARK(SP);
6258 PUSHs(tmpref);
6259 PUTBACK;
6260 call_sv(MUTABLE_SV(destructor),
6261 G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6262 POPSTACK;
6263 SPAGAIN;
6264 LEAVE;
6265 if(SvREFCNT(tmpref) < 2) {
6266 /* tmpref is not kept alive! */
6267 SvREFCNT(sv)--;
6268 SvRV_set(tmpref, NULL);
6269 SvROK_off(tmpref);
6270 }
6271 SvREFCNT_dec(tmpref);
6272 }
6273 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6274
6275
6276 if (check_refcnt && SvREFCNT(sv)) {
6277 if (PL_in_clean_objs)
6278 Perl_croak(aTHX_
6279 "DESTROY created new reference to dead object '%s'",
6280 HvNAME_get(stash));
6281 /* DESTROY gave object new lease on life */
6282 return FALSE;
6283 }
6284 }
6285
6286 if (SvOBJECT(sv)) {
6287 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6288 SvOBJECT_off(sv); /* Curse the object. */
6289 if (SvTYPE(sv) != SVt_PVIO)
6290 --PL_sv_objcount;/* XXX Might want something more general */
6291 }
6292 return TRUE;
6293}
6294
645c22ef
DM
6295/*
6296=for apidoc sv_newref
6297
6298Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
6299instead.
6300
6301=cut
6302*/
6303
79072805 6304SV *
af828c01 6305Perl_sv_newref(pTHX_ SV *const sv)
79072805 6306{
96a5add6 6307 PERL_UNUSED_CONTEXT;
463ee0b2 6308 if (sv)
4db098f4 6309 (SvREFCNT(sv))++;
79072805
LW
6310 return sv;
6311}
6312
c461cf8f
JH
6313/*
6314=for apidoc sv_free
6315
645c22ef
DM
6316Decrement an SV's reference count, and if it drops to zero, call
6317C<sv_clear> to invoke destructors and free up any memory used by
6318the body; finally, deallocate the SV's head itself.
6319Normally called via a wrapper macro C<SvREFCNT_dec>.
c461cf8f
JH
6320
6321=cut
6322*/
6323
79072805 6324void
af828c01 6325Perl_sv_free(pTHX_ SV *const sv)
79072805 6326{
27da23d5 6327 dVAR;
79072805
LW
6328 if (!sv)
6329 return;
a0d0e21e
LW
6330 if (SvREFCNT(sv) == 0) {
6331 if (SvFLAGS(sv) & SVf_BREAK)
645c22ef
DM
6332 /* this SV's refcnt has been artificially decremented to
6333 * trigger cleanup */
a0d0e21e 6334 return;
3280af22 6335 if (PL_in_clean_all) /* All is fair */
1edc1566 6336 return;
d689ffdd
JP
6337 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6338 /* make sure SvREFCNT(sv)==0 happens very seldom */
6339 SvREFCNT(sv) = (~(U32)0)/2;
6340 return;
6341 }
41e4abd8 6342 if (ckWARN_d(WARN_INTERNAL)) {
41e4abd8
NC
6343#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6344 Perl_dump_sv_child(aTHX_ sv);
e4c5322d
DM
6345#else
6346 #ifdef DEBUG_LEAKING_SCALARS
bfd95973 6347 sv_dump(sv);
e4c5322d 6348 #endif
bfd95973
NC
6349#ifdef DEBUG_LEAKING_SCALARS_ABORT
6350 if (PL_warnhook == PERL_WARNHOOK_FATAL
6351 || ckDEAD(packWARN(WARN_INTERNAL))) {
6352 /* Don't let Perl_warner cause us to escape our fate: */
6353 abort();
6354 }
6355#endif
6356 /* This may not return: */
6357 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6358 "Attempt to free unreferenced scalar: SV 0x%"UVxf
6359 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
41e4abd8
NC
6360#endif
6361 }
77abb4c6
NC
6362#ifdef DEBUG_LEAKING_SCALARS_ABORT
6363 abort();
6364#endif
79072805
LW
6365 return;
6366 }
4db098f4 6367 if (--(SvREFCNT(sv)) > 0)
8990e307 6368 return;
8c4d3c90
NC
6369 Perl_sv_free2(aTHX_ sv);
6370}
6371
6372void
af828c01 6373Perl_sv_free2(pTHX_ SV *const sv)
8c4d3c90 6374{
27da23d5 6375 dVAR;
7918f24d
NC
6376
6377 PERL_ARGS_ASSERT_SV_FREE2;
6378
463ee0b2
LW
6379#ifdef DEBUGGING
6380 if (SvTEMP(sv)) {
9b387841
NC
6381 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6382 "Attempt to free temp prematurely: SV 0x%"UVxf
6383 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
79072805 6384 return;
79072805 6385 }
463ee0b2 6386#endif
d689ffdd
JP
6387 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6388 /* make sure SvREFCNT(sv)==0 happens very seldom */
6389 SvREFCNT(sv) = (~(U32)0)/2;
6390 return;
6391 }
79072805 6392 sv_clear(sv);
477f5d66
CS
6393 if (! SvREFCNT(sv))
6394 del_SV(sv);
79072805
LW
6395}
6396
954c1994
GS
6397/*
6398=for apidoc sv_len
6399
645c22ef
DM
6400Returns the length of the string in the SV. Handles magic and type
6401coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
954c1994
GS
6402
6403=cut
6404*/
6405
79072805 6406STRLEN
af828c01 6407Perl_sv_len(pTHX_ register SV *const sv)
79072805 6408{
463ee0b2 6409 STRLEN len;
79072805
LW
6410
6411 if (!sv)
6412 return 0;
6413
8990e307 6414 if (SvGMAGICAL(sv))
565764a8 6415 len = mg_length(sv);
8990e307 6416 else
4d84ee25 6417 (void)SvPV_const(sv, len);
463ee0b2 6418 return len;
79072805
LW
6419}
6420
c461cf8f
JH
6421/*
6422=for apidoc sv_len_utf8
6423
6424Returns the number of characters in the string in an SV, counting wide
1e54db1a 6425UTF-8 bytes as a single character. Handles magic and type coercion.
c461cf8f
JH
6426
6427=cut
6428*/
6429
7e8c5dac 6430/*
c05a5c57 6431 * The length is cached in PERL_MAGIC_utf8, in the mg_len field. Also the
9564a3bd
NC
6432 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6433 * (Note that the mg_len is not the length of the mg_ptr field.
6434 * This allows the cache to store the character length of the string without
6435 * needing to malloc() extra storage to attach to the mg_ptr.)
7a5fa8a2 6436 *
7e8c5dac
HS
6437 */
6438
a0ed51b3 6439STRLEN
af828c01 6440Perl_sv_len_utf8(pTHX_ register SV *const sv)
a0ed51b3 6441{
a0ed51b3
LW
6442 if (!sv)
6443 return 0;
6444
a0ed51b3 6445 if (SvGMAGICAL(sv))
b76347f2 6446 return mg_length(sv);
a0ed51b3 6447 else
b76347f2 6448 {
26346457 6449 STRLEN len;
e62f0680 6450 const U8 *s = (U8*)SvPV_const(sv, len);
7e8c5dac 6451
26346457
NC
6452 if (PL_utf8cache) {
6453 STRLEN ulen;
fe5bfecd 6454 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
26346457 6455
6ef2ab89
NC
6456 if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6457 if (mg->mg_len != -1)
6458 ulen = mg->mg_len;
6459 else {
6460 /* We can use the offset cache for a headstart.
6461 The longer value is stored in the first pair. */
6462 STRLEN *cache = (STRLEN *) mg->mg_ptr;
6463
6464 ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6465 s + len);
6466 }
6467
26346457
NC
6468 if (PL_utf8cache < 0) {
6469 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
9df83ffd 6470 assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
26346457
NC
6471 }
6472 }
6473 else {
6474 ulen = Perl_utf8_length(aTHX_ s, s + len);
ec49a12c 6475 utf8_mg_len_cache_update(sv, &mg, ulen);
cb9e20bb 6476 }
26346457 6477 return ulen;
7e8c5dac 6478 }
26346457 6479 return Perl_utf8_length(aTHX_ s, s + len);
7e8c5dac
HS
6480 }
6481}
6482
9564a3bd
NC
6483/* Walk forwards to find the byte corresponding to the passed in UTF-8
6484 offset. */
bdf30dd6 6485static STRLEN
721e86b6 6486S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
79d2d448 6487 STRLEN *const uoffset_p, bool *const at_end)
bdf30dd6
NC
6488{
6489 const U8 *s = start;
3e2d3818 6490 STRLEN uoffset = *uoffset_p;
bdf30dd6 6491
7918f24d
NC
6492 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6493
3e2d3818
NC
6494 while (s < send && uoffset) {
6495 --uoffset;
bdf30dd6 6496 s += UTF8SKIP(s);
3e2d3818 6497 }
79d2d448
NC
6498 if (s == send) {
6499 *at_end = TRUE;
6500 }
6501 else if (s > send) {
6502 *at_end = TRUE;
bdf30dd6
NC
6503 /* This is the existing behaviour. Possibly it should be a croak, as
6504 it's actually a bounds error */
6505 s = send;
6506 }
3e2d3818 6507 *uoffset_p -= uoffset;
bdf30dd6
NC
6508 return s - start;
6509}
6510
9564a3bd
NC
6511/* Given the length of the string in both bytes and UTF-8 characters, decide
6512 whether to walk forwards or backwards to find the byte corresponding to
6513 the passed in UTF-8 offset. */
c336ad0b 6514static STRLEN
721e86b6 6515S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
503752a1 6516 STRLEN uoffset, const STRLEN uend)
c336ad0b
NC
6517{
6518 STRLEN backw = uend - uoffset;
7918f24d
NC
6519
6520 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6521
c336ad0b 6522 if (uoffset < 2 * backw) {
25a8a4ef 6523 /* The assumption is that going forwards is twice the speed of going
c336ad0b
NC
6524 forward (that's where the 2 * backw comes from).
6525 (The real figure of course depends on the UTF-8 data.) */
503752a1
NC
6526 const U8 *s = start;
6527
6528 while (s < send && uoffset--)
6529 s += UTF8SKIP(s);
6530 assert (s <= send);
6531 if (s > send)
6532 s = send;
6533 return s - start;
c336ad0b
NC
6534 }
6535
6536 while (backw--) {
6537 send--;
6538 while (UTF8_IS_CONTINUATION(*send))
6539 send--;
6540 }
6541 return send - start;
6542}
6543
9564a3bd
NC
6544/* For the string representation of the given scalar, find the byte
6545 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
6546 give another position in the string, *before* the sought offset, which
6547 (which is always true, as 0, 0 is a valid pair of positions), which should
6548 help reduce the amount of linear searching.
6549 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6550 will be used to reduce the amount of linear searching. The cache will be
6551 created if necessary, and the found value offered to it for update. */
28ccbf94 6552static STRLEN
af828c01 6553S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
3e2d3818 6554 const U8 *const send, STRLEN uoffset,
7918f24d
NC
6555 STRLEN uoffset0, STRLEN boffset0)
6556{
7087a21c 6557 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
c336ad0b 6558 bool found = FALSE;
79d2d448 6559 bool at_end = FALSE;
c336ad0b 6560
7918f24d
NC
6561 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6562
75c33c12
NC
6563 assert (uoffset >= uoffset0);
6564
48f9cf71
NC
6565 if (!uoffset)
6566 return 0;
6567
f89a570b
CS
6568 if (!SvREADONLY(sv)
6569 && PL_utf8cache
6570 && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6571 (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
d8b2e1f9
NC
6572 if ((*mgp)->mg_ptr) {
6573 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6574 if (cache[0] == uoffset) {
6575 /* An exact match. */
6576 return cache[1];
6577 }
ab455f60
NC
6578 if (cache[2] == uoffset) {
6579 /* An exact match. */
6580 return cache[3];
6581 }
668af93f
NC
6582
6583 if (cache[0] < uoffset) {
d8b2e1f9
NC
6584 /* The cache already knows part of the way. */
6585 if (cache[0] > uoffset0) {
6586 /* The cache knows more than the passed in pair */
6587 uoffset0 = cache[0];
6588 boffset0 = cache[1];
6589 }
6590 if ((*mgp)->mg_len != -1) {
6591 /* And we know the end too. */
6592 boffset = boffset0
721e86b6 6593 + sv_pos_u2b_midway(start + boffset0, send,
d8b2e1f9
NC
6594 uoffset - uoffset0,
6595 (*mgp)->mg_len - uoffset0);
6596 } else {
3e2d3818 6597 uoffset -= uoffset0;
d8b2e1f9 6598 boffset = boffset0
721e86b6 6599 + sv_pos_u2b_forwards(start + boffset0,
79d2d448 6600 send, &uoffset, &at_end);
3e2d3818 6601 uoffset += uoffset0;
d8b2e1f9 6602 }
dd7c5fd3
NC
6603 }
6604 else if (cache[2] < uoffset) {
6605 /* We're between the two cache entries. */
6606 if (cache[2] > uoffset0) {
6607 /* and the cache knows more than the passed in pair */
6608 uoffset0 = cache[2];
6609 boffset0 = cache[3];
6610 }
6611
668af93f 6612 boffset = boffset0
721e86b6 6613 + sv_pos_u2b_midway(start + boffset0,
668af93f
NC
6614 start + cache[1],
6615 uoffset - uoffset0,
6616 cache[0] - uoffset0);
dd7c5fd3
NC
6617 } else {
6618 boffset = boffset0
721e86b6 6619 + sv_pos_u2b_midway(start + boffset0,
dd7c5fd3
NC
6620 start + cache[3],
6621 uoffset - uoffset0,
6622 cache[2] - uoffset0);
d8b2e1f9 6623 }
668af93f 6624 found = TRUE;
d8b2e1f9
NC
6625 }
6626 else if ((*mgp)->mg_len != -1) {
75c33c12
NC
6627 /* If we can take advantage of a passed in offset, do so. */
6628 /* In fact, offset0 is either 0, or less than offset, so don't
6629 need to worry about the other possibility. */
6630 boffset = boffset0
721e86b6 6631 + sv_pos_u2b_midway(start + boffset0, send,
75c33c12
NC
6632 uoffset - uoffset0,
6633 (*mgp)->mg_len - uoffset0);
c336ad0b
NC
6634 found = TRUE;
6635 }
28ccbf94 6636 }
c336ad0b
NC
6637
6638 if (!found || PL_utf8cache < 0) {
3e2d3818
NC
6639 STRLEN real_boffset;
6640 uoffset -= uoffset0;
6641 real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
79d2d448 6642 send, &uoffset, &at_end);
3e2d3818 6643 uoffset += uoffset0;
75c33c12 6644
9df83ffd
NC
6645 if (found && PL_utf8cache < 0)
6646 assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6647 real_boffset, sv);
c336ad0b 6648 boffset = real_boffset;
28ccbf94 6649 }
0905937d 6650
79d2d448
NC
6651 if (PL_utf8cache) {
6652 if (at_end)
6653 utf8_mg_len_cache_update(sv, mgp, uoffset);
6654 else
6655 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6656 }
28ccbf94
NC
6657 return boffset;
6658}
6659
9564a3bd
NC
6660
6661/*
d931b1be 6662=for apidoc sv_pos_u2b_flags
9564a3bd
NC
6663
6664Converts the value pointed to by offsetp from a count of UTF-8 chars from
6665the start of the string, to a count of the equivalent number of bytes; if
6666lenp is non-zero, it does the same to lenp, but this time starting from
d931b1be
NC
6667the offset, rather than from the start of the string. Handles type coercion.
6668I<flags> is passed to C<SvPV_flags>, and usually should be
6669C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
9564a3bd
NC
6670
6671=cut
6672*/
6673
6674/*
d931b1be 6675 * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
c05a5c57 6676 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
6677 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6678 *
6679 */
6680
d931b1be
NC
6681STRLEN
6682Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6683 U32 flags)
a0ed51b3 6684{
245d4a47 6685 const U8 *start;
a0ed51b3 6686 STRLEN len;
d931b1be 6687 STRLEN boffset;
a0ed51b3 6688
d931b1be 6689 PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7918f24d 6690
d931b1be 6691 start = (U8*)SvPV_flags(sv, len, flags);
7e8c5dac 6692 if (len) {
bdf30dd6 6693 const U8 * const send = start + len;
0905937d 6694 MAGIC *mg = NULL;
d931b1be 6695 boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
bdf30dd6 6696
48f9cf71
NC
6697 if (lenp
6698 && *lenp /* don't bother doing work for 0, as its bytes equivalent
6699 is 0, and *lenp is already set to that. */) {
28ccbf94 6700 /* Convert the relative offset to absolute. */
777f7c56 6701 const STRLEN uoffset2 = uoffset + *lenp;
721e86b6
AL
6702 const STRLEN boffset2
6703 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
28ccbf94 6704 uoffset, boffset) - boffset;
bdf30dd6 6705
28ccbf94 6706 *lenp = boffset2;
bdf30dd6 6707 }
d931b1be
NC
6708 } else {
6709 if (lenp)
6710 *lenp = 0;
6711 boffset = 0;
a0ed51b3 6712 }
e23c8137 6713
d931b1be 6714 return boffset;
a0ed51b3
LW
6715}
6716
777f7c56
EB
6717/*
6718=for apidoc sv_pos_u2b
6719
6720Converts the value pointed to by offsetp from a count of UTF-8 chars from
6721the start of the string, to a count of the equivalent number of bytes; if
6722lenp is non-zero, it does the same to lenp, but this time starting from
6723the offset, rather than from the start of the string. Handles magic and
6724type coercion.
6725
d931b1be
NC
6726Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6727than 2Gb.
6728
777f7c56
EB
6729=cut
6730*/
6731
6732/*
6733 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6734 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6735 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6736 *
6737 */
6738
6739/* This function is subject to size and sign problems */
6740
6741void
6742Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6743{
d931b1be
NC
6744 PERL_ARGS_ASSERT_SV_POS_U2B;
6745
777f7c56
EB
6746 if (lenp) {
6747 STRLEN ulen = (STRLEN)*lenp;
d931b1be
NC
6748 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6749 SV_GMAGIC|SV_CONST_RETURN);
777f7c56
EB
6750 *lenp = (I32)ulen;
6751 } else {
d931b1be
NC
6752 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6753 SV_GMAGIC|SV_CONST_RETURN);
777f7c56 6754 }
777f7c56
EB
6755}
6756
ec49a12c
NC
6757static void
6758S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6759 const STRLEN ulen)
6760{
6761 PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6762 if (SvREADONLY(sv))
6763 return;
6764
6765 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6766 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6767 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6768 }
6769 assert(*mgp);
6770
6771 (*mgp)->mg_len = ulen;
6772 /* For now, treat "overflowed" as "still unknown". See RT #72924. */
6773 if (ulen != (STRLEN) (*mgp)->mg_len)
6774 (*mgp)->mg_len = -1;
6775}
6776
9564a3bd
NC
6777/* Create and update the UTF8 magic offset cache, with the proffered utf8/
6778 byte length pairing. The (byte) length of the total SV is passed in too,
6779 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6780 may not have updated SvCUR, so we can't rely on reading it directly.
6781
6782 The proffered utf8/byte length pairing isn't used if the cache already has
6783 two pairs, and swapping either for the proffered pair would increase the
6784 RMS of the intervals between known byte offsets.
6785
6786 The cache itself consists of 4 STRLEN values
6787 0: larger UTF-8 offset
6788 1: corresponding byte offset
6789 2: smaller UTF-8 offset
6790 3: corresponding byte offset
6791
6792 Unused cache pairs have the value 0, 0.
6793 Keeping the cache "backwards" means that the invariant of
6794 cache[0] >= cache[2] is maintained even with empty slots, which means that
6795 the code that uses it doesn't need to worry if only 1 entry has actually
6796 been set to non-zero. It also makes the "position beyond the end of the
6797 cache" logic much simpler, as the first slot is always the one to start
6798 from.
645c22ef 6799*/
ec07b5e0 6800static void
ac1e9476
SS
6801S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6802 const STRLEN utf8, const STRLEN blen)
ec07b5e0
NC
6803{
6804 STRLEN *cache;
7918f24d
NC
6805
6806 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6807
ec07b5e0
NC
6808 if (SvREADONLY(sv))
6809 return;
6810
f89a570b
CS
6811 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6812 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
ec07b5e0
NC
6813 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6814 0);
6815 (*mgp)->mg_len = -1;
6816 }
6817 assert(*mgp);
6818
6819 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6820 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6821 (*mgp)->mg_ptr = (char *) cache;
6822 }
6823 assert(cache);
6824
ab8be49d
NC
6825 if (PL_utf8cache < 0 && SvPOKp(sv)) {
6826 /* SvPOKp() because it's possible that sv has string overloading, and
6827 therefore is a reference, hence SvPVX() is actually a pointer.
6828 This cures the (very real) symptoms of RT 69422, but I'm not actually
6829 sure whether we should even be caching the results of UTF-8
6830 operations on overloading, given that nothing stops overloading
6831 returning a different value every time it's called. */
ef816a78 6832 const U8 *start = (const U8 *) SvPVX_const(sv);
6448472a 6833 const STRLEN realutf8 = utf8_length(start, start + byte);
ec07b5e0 6834
9df83ffd
NC
6835 assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6836 sv);
ec07b5e0 6837 }
ab455f60
NC
6838
6839 /* Cache is held with the later position first, to simplify the code
6840 that deals with unbounded ends. */
6841
6842 ASSERT_UTF8_CACHE(cache);
6843 if (cache[1] == 0) {
6844 /* Cache is totally empty */
6845 cache[0] = utf8;
6846 cache[1] = byte;
6847 } else if (cache[3] == 0) {
6848 if (byte > cache[1]) {
6849 /* New one is larger, so goes first. */
6850 cache[2] = cache[0];
6851 cache[3] = cache[1];
6852 cache[0] = utf8;
6853 cache[1] = byte;
6854 } else {
6855 cache[2] = utf8;
6856 cache[3] = byte;
6857 }
6858 } else {
6859#define THREEWAY_SQUARE(a,b,c,d) \
6860 ((float)((d) - (c))) * ((float)((d) - (c))) \
6861 + ((float)((c) - (b))) * ((float)((c) - (b))) \
6862 + ((float)((b) - (a))) * ((float)((b) - (a)))
6863
6864 /* Cache has 2 slots in use, and we know three potential pairs.
6865 Keep the two that give the lowest RMS distance. Do the
486ec47a 6866 calculation in bytes simply because we always know the byte
ab455f60
NC
6867 length. squareroot has the same ordering as the positive value,
6868 so don't bother with the actual square root. */
6869 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6870 if (byte > cache[1]) {
6871 /* New position is after the existing pair of pairs. */
6872 const float keep_earlier
6873 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6874 const float keep_later
6875 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6876
6877 if (keep_later < keep_earlier) {
6878 if (keep_later < existing) {
6879 cache[2] = cache[0];
6880 cache[3] = cache[1];
6881 cache[0] = utf8;
6882 cache[1] = byte;
6883 }
6884 }
6885 else {
6886 if (keep_earlier < existing) {
6887 cache[0] = utf8;
6888 cache[1] = byte;
6889 }
6890 }
6891 }
57d7fbf1
NC
6892 else if (byte > cache[3]) {
6893 /* New position is between the existing pair of pairs. */
6894 const float keep_earlier
6895 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6896 const float keep_later
6897 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6898
6899 if (keep_later < keep_earlier) {
6900 if (keep_later < existing) {
6901 cache[2] = utf8;
6902 cache[3] = byte;
6903 }
6904 }
6905 else {
6906 if (keep_earlier < existing) {
6907 cache[0] = utf8;
6908 cache[1] = byte;
6909 }
6910 }
6911 }
6912 else {
6913 /* New position is before the existing pair of pairs. */
6914 const float keep_earlier
6915 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6916 const float keep_later
6917 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6918
6919 if (keep_later < keep_earlier) {
6920 if (keep_later < existing) {
6921 cache[2] = utf8;
6922 cache[3] = byte;
6923 }
6924 }
6925 else {
6926 if (keep_earlier < existing) {
6927 cache[0] = cache[2];
6928 cache[1] = cache[3];
6929 cache[2] = utf8;
6930 cache[3] = byte;
6931 }
6932 }
6933 }
ab455f60 6934 }
0905937d 6935 ASSERT_UTF8_CACHE(cache);
ec07b5e0
NC
6936}
6937
ec07b5e0 6938/* We already know all of the way, now we may be able to walk back. The same
25a8a4ef
NC
6939 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6940 backward is half the speed of walking forward. */
ec07b5e0 6941static STRLEN
ac1e9476
SS
6942S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6943 const U8 *end, STRLEN endu)
ec07b5e0
NC
6944{
6945 const STRLEN forw = target - s;
6946 STRLEN backw = end - target;
6947
7918f24d
NC
6948 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6949
ec07b5e0 6950 if (forw < 2 * backw) {
6448472a 6951 return utf8_length(s, target);
ec07b5e0
NC
6952 }
6953
6954 while (end > target) {
6955 end--;
6956 while (UTF8_IS_CONTINUATION(*end)) {
6957 end--;
6958 }
6959 endu--;
6960 }
6961 return endu;
6962}
6963
9564a3bd
NC
6964/*
6965=for apidoc sv_pos_b2u
6966
6967Converts the value pointed to by offsetp from a count of bytes from the
6968start of the string, to a count of the equivalent number of UTF-8 chars.
6969Handles magic and type coercion.
6970
6971=cut
6972*/
6973
6974/*
6975 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
c05a5c57 6976 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
6977 * byte offsets.
6978 *
6979 */
a0ed51b3 6980void
ac1e9476 6981Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
a0ed51b3 6982{
83003860 6983 const U8* s;
ec07b5e0 6984 const STRLEN byte = *offsetp;
7087a21c 6985 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
ab455f60 6986 STRLEN blen;
ec07b5e0
NC
6987 MAGIC* mg = NULL;
6988 const U8* send;
a922f900 6989 bool found = FALSE;
a0ed51b3 6990
7918f24d
NC
6991 PERL_ARGS_ASSERT_SV_POS_B2U;
6992
a0ed51b3
LW
6993 if (!sv)
6994 return;
6995
ab455f60 6996 s = (const U8*)SvPV_const(sv, blen);
7e8c5dac 6997
ab455f60 6998 if (blen < byte)
ec07b5e0 6999 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7e8c5dac 7000
ec07b5e0 7001 send = s + byte;
a67d7df9 7002
f89a570b
CS
7003 if (!SvREADONLY(sv)
7004 && PL_utf8cache
7005 && SvTYPE(sv) >= SVt_PVMG
7006 && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7007 {
ffca234a 7008 if (mg->mg_ptr) {
d4c19fe8 7009 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
b9f984a5 7010 if (cache[1] == byte) {
ec07b5e0
NC
7011 /* An exact match. */
7012 *offsetp = cache[0];
ec07b5e0 7013 return;
7e8c5dac 7014 }
ab455f60
NC
7015 if (cache[3] == byte) {
7016 /* An exact match. */
7017 *offsetp = cache[2];
7018 return;
7019 }
668af93f
NC
7020
7021 if (cache[1] < byte) {
ec07b5e0 7022 /* We already know part of the way. */
b9f984a5
NC
7023 if (mg->mg_len != -1) {
7024 /* Actually, we know the end too. */
7025 len = cache[0]
7026 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
ab455f60 7027 s + blen, mg->mg_len - cache[0]);
b9f984a5 7028 } else {
6448472a 7029 len = cache[0] + utf8_length(s + cache[1], send);
b9f984a5 7030 }
7e8c5dac 7031 }
9f985e4c
NC
7032 else if (cache[3] < byte) {
7033 /* We're between the two cached pairs, so we do the calculation
7034 offset by the byte/utf-8 positions for the earlier pair,
7035 then add the utf-8 characters from the string start to
7036 there. */
7037 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7038 s + cache[1], cache[0] - cache[2])
7039 + cache[2];
7040
7041 }
7042 else { /* cache[3] > byte */
7043 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7044 cache[2]);
7e8c5dac 7045
7e8c5dac 7046 }
ec07b5e0 7047 ASSERT_UTF8_CACHE(cache);
a922f900 7048 found = TRUE;
ffca234a 7049 } else if (mg->mg_len != -1) {
ab455f60 7050 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
a922f900 7051 found = TRUE;
7e8c5dac 7052 }
a0ed51b3 7053 }
a922f900 7054 if (!found || PL_utf8cache < 0) {
6448472a 7055 const STRLEN real_len = utf8_length(s, send);
a922f900 7056
9df83ffd
NC
7057 if (found && PL_utf8cache < 0)
7058 assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
a922f900 7059 len = real_len;
ec07b5e0
NC
7060 }
7061 *offsetp = len;
7062
0d7caf4c
NC
7063 if (PL_utf8cache) {
7064 if (blen == byte)
7065 utf8_mg_len_cache_update(sv, &mg, len);
7066 else
7067 utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7068 }
a0ed51b3
LW
7069}
7070
9df83ffd
NC
7071static void
7072S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7073 STRLEN real, SV *const sv)
7074{
7075 PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7076
7077 /* As this is debugging only code, save space by keeping this test here,
7078 rather than inlining it in all the callers. */
7079 if (from_cache == real)
7080 return;
7081
7082 /* Need to turn the assertions off otherwise we may recurse infinitely
7083 while printing error messages. */
7084 SAVEI8(PL_utf8cache);
7085 PL_utf8cache = 0;
7086 Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7087 func, (UV) from_cache, (UV) real, SVfARG(sv));
7088}
7089
954c1994
GS
7090/*
7091=for apidoc sv_eq
7092
7093Returns a boolean indicating whether the strings in the two SVs are
645c22ef
DM
7094identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7095coerce its args to strings if necessary.
954c1994 7096
078504b2
FC
7097=for apidoc sv_eq_flags
7098
7099Returns a boolean indicating whether the strings in the two SVs are
7100identical. Is UTF-8 and 'use bytes' aware and coerces its args to strings
7101if necessary. If the flags include SV_GMAGIC, it handles get-magic, too.
7102
954c1994
GS
7103=cut
7104*/
7105
79072805 7106I32
31c72c81 7107Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
79072805 7108{
97aff369 7109 dVAR;
e1ec3a88 7110 const char *pv1;
463ee0b2 7111 STRLEN cur1;
e1ec3a88 7112 const char *pv2;
463ee0b2 7113 STRLEN cur2;
e01b9e88 7114 I32 eq = 0;
bd61b366 7115 char *tpv = NULL;
a0714e2c 7116 SV* svrecode = NULL;
79072805 7117
e01b9e88 7118 if (!sv1) {
79072805
LW
7119 pv1 = "";
7120 cur1 = 0;
7121 }
ced497e2
YST
7122 else {
7123 /* if pv1 and pv2 are the same, second SvPV_const call may
078504b2
FC
7124 * invalidate pv1 (if we are handling magic), so we may need to
7125 * make a copy */
7126 if (sv1 == sv2 && flags & SV_GMAGIC
7127 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
ced497e2 7128 pv1 = SvPV_const(sv1, cur1);
59cd0e26 7129 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
ced497e2 7130 }
078504b2 7131 pv1 = SvPV_flags_const(sv1, cur1, flags);
ced497e2 7132 }
79072805 7133
e01b9e88
SC
7134 if (!sv2){
7135 pv2 = "";
7136 cur2 = 0;
92d29cee 7137 }
e01b9e88 7138 else
078504b2 7139 pv2 = SvPV_flags_const(sv2, cur2, flags);
79072805 7140
cf48d248 7141 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
7142 /* Differing utf8ness.
7143 * Do not UTF8size the comparands as a side-effect. */
7144 if (PL_encoding) {
7145 if (SvUTF8(sv1)) {
553e1bcc
AT
7146 svrecode = newSVpvn(pv2, cur2);
7147 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 7148 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
7149 }
7150 else {
553e1bcc
AT
7151 svrecode = newSVpvn(pv1, cur1);
7152 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 7153 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
7154 }
7155 /* Now both are in UTF-8. */
0a1bd7ac
DM
7156 if (cur1 != cur2) {
7157 SvREFCNT_dec(svrecode);
799ef3cb 7158 return FALSE;
0a1bd7ac 7159 }
799ef3cb
JH
7160 }
7161 else {
799ef3cb 7162 if (SvUTF8(sv1)) {
fed3ba5d
NC
7163 /* sv1 is the UTF-8 one */
7164 return bytes_cmp_utf8((const U8*)pv2, cur2,
7165 (const U8*)pv1, cur1) == 0;
799ef3cb
JH
7166 }
7167 else {
fed3ba5d
NC
7168 /* sv2 is the UTF-8 one */
7169 return bytes_cmp_utf8((const U8*)pv1, cur1,
7170 (const U8*)pv2, cur2) == 0;
799ef3cb
JH
7171 }
7172 }
cf48d248
JH
7173 }
7174
7175 if (cur1 == cur2)
765f542d 7176 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
e01b9e88 7177
b37c2d43 7178 SvREFCNT_dec(svrecode);
553e1bcc
AT
7179 if (tpv)
7180 Safefree(tpv);
cf48d248 7181
e01b9e88 7182 return eq;
79072805
LW
7183}
7184
954c1994
GS
7185/*
7186=for apidoc sv_cmp
7187
7188Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
7189string in C<sv1> is less than, equal to, or greater than the string in
645c22ef
DM
7190C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7191coerce its args to strings if necessary. See also C<sv_cmp_locale>.
954c1994 7192
078504b2
FC
7193=for apidoc sv_cmp_flags
7194
7195Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
7196string in C<sv1> is less than, equal to, or greater than the string in
7197C<sv2>. Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7198if necessary. If the flags include SV_GMAGIC, it handles get magic. See
7199also C<sv_cmp_locale_flags>.
7200
954c1994
GS
7201=cut
7202*/
7203
79072805 7204I32
ac1e9476 7205Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
79072805 7206{
078504b2
FC
7207 return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7208}
7209
7210I32
31c72c81
NC
7211Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7212 const U32 flags)
078504b2 7213{
97aff369 7214 dVAR;
560a288e 7215 STRLEN cur1, cur2;
e1ec3a88 7216 const char *pv1, *pv2;
bd61b366 7217 char *tpv = NULL;
cf48d248 7218 I32 cmp;
a0714e2c 7219 SV *svrecode = NULL;
560a288e 7220
e01b9e88
SC
7221 if (!sv1) {
7222 pv1 = "";
560a288e
GS
7223 cur1 = 0;
7224 }
e01b9e88 7225 else
078504b2 7226 pv1 = SvPV_flags_const(sv1, cur1, flags);
560a288e 7227
553e1bcc 7228 if (!sv2) {
e01b9e88 7229 pv2 = "";
560a288e
GS
7230 cur2 = 0;
7231 }
e01b9e88 7232 else
078504b2 7233 pv2 = SvPV_flags_const(sv2, cur2, flags);
79072805 7234
cf48d248 7235 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
7236 /* Differing utf8ness.
7237 * Do not UTF8size the comparands as a side-effect. */
cf48d248 7238 if (SvUTF8(sv1)) {
799ef3cb 7239 if (PL_encoding) {
553e1bcc
AT
7240 svrecode = newSVpvn(pv2, cur2);
7241 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 7242 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
7243 }
7244 else {
fed3ba5d
NC
7245 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7246 (const U8*)pv1, cur1);
7247 return retval ? retval < 0 ? -1 : +1 : 0;
799ef3cb 7248 }
cf48d248
JH
7249 }
7250 else {
799ef3cb 7251 if (PL_encoding) {
553e1bcc
AT
7252 svrecode = newSVpvn(pv1, cur1);
7253 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 7254 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
7255 }
7256 else {
fed3ba5d
NC
7257 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7258 (const U8*)pv2, cur2);
7259 return retval ? retval < 0 ? -1 : +1 : 0;
799ef3cb 7260 }
cf48d248
JH
7261 }
7262 }
7263
e01b9e88 7264 if (!cur1) {
cf48d248 7265 cmp = cur2 ? -1 : 0;
e01b9e88 7266 } else if (!cur2) {
cf48d248
JH
7267 cmp = 1;
7268 } else {
e1ec3a88 7269 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
e01b9e88
SC
7270
7271 if (retval) {
cf48d248 7272 cmp = retval < 0 ? -1 : 1;
e01b9e88 7273 } else if (cur1 == cur2) {
cf48d248
JH
7274 cmp = 0;
7275 } else {
7276 cmp = cur1 < cur2 ? -1 : 1;
e01b9e88 7277 }
cf48d248 7278 }
16660edb 7279
b37c2d43 7280 SvREFCNT_dec(svrecode);
553e1bcc
AT
7281 if (tpv)
7282 Safefree(tpv);
cf48d248
JH
7283
7284 return cmp;
bbce6d69 7285}
16660edb 7286
c461cf8f
JH
7287/*
7288=for apidoc sv_cmp_locale
7289
645c22ef
DM
7290Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7291'use bytes' aware, handles get magic, and will coerce its args to strings
d77cdebf 7292if necessary. See also C<sv_cmp>.
c461cf8f 7293
078504b2
FC
7294=for apidoc sv_cmp_locale_flags
7295
7296Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7297'use bytes' aware and will coerce its args to strings if necessary. If the
7298flags contain SV_GMAGIC, it handles get magic. See also C<sv_cmp_flags>.
7299
c461cf8f
JH
7300=cut
7301*/
7302
bbce6d69 7303I32
ac1e9476 7304Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
bbce6d69 7305{
078504b2
FC
7306 return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7307}
7308
7309I32
31c72c81
NC
7310Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7311 const U32 flags)
078504b2 7312{
97aff369 7313 dVAR;
36477c24 7314#ifdef USE_LOCALE_COLLATE
16660edb 7315
bbce6d69 7316 char *pv1, *pv2;
7317 STRLEN len1, len2;
7318 I32 retval;
16660edb 7319
3280af22 7320 if (PL_collation_standard)
bbce6d69 7321 goto raw_compare;
16660edb 7322
bbce6d69 7323 len1 = 0;
078504b2 7324 pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
bbce6d69 7325 len2 = 0;
078504b2 7326 pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
16660edb 7327
bbce6d69 7328 if (!pv1 || !len1) {
7329 if (pv2 && len2)
7330 return -1;
7331 else
7332 goto raw_compare;
7333 }
7334 else {
7335 if (!pv2 || !len2)
7336 return 1;
7337 }
16660edb 7338
bbce6d69 7339 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
16660edb 7340
bbce6d69 7341 if (retval)
16660edb 7342 return retval < 0 ? -1 : 1;
7343
bbce6d69 7344 /*
7345 * When the result of collation is equality, that doesn't mean
7346 * that there are no differences -- some locales exclude some
7347 * characters from consideration. So to avoid false equalities,
7348 * we use the raw string as a tiebreaker.
7349 */
16660edb 7350
bbce6d69 7351 raw_compare:
5f66b61c 7352 /*FALLTHROUGH*/
16660edb 7353
36477c24 7354#endif /* USE_LOCALE_COLLATE */
16660edb 7355
bbce6d69 7356 return sv_cmp(sv1, sv2);
7357}
79072805 7358
645c22ef 7359
36477c24 7360#ifdef USE_LOCALE_COLLATE
645c22ef 7361
7a4c00b4 7362/*
645c22ef
DM
7363=for apidoc sv_collxfrm
7364
078504b2
FC
7365This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
7366C<sv_collxfrm_flags>.
7367
7368=for apidoc sv_collxfrm_flags
7369
7370Add Collate Transform magic to an SV if it doesn't already have it. If the
7371flags contain SV_GMAGIC, it handles get-magic.
645c22ef
DM
7372
7373Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7374scalar data of the variable, but transformed to such a format that a normal
7375memory comparison can be used to compare the data according to the locale
7376settings.
7377
7378=cut
7379*/
7380
bbce6d69 7381char *
078504b2 7382Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
bbce6d69 7383{
97aff369 7384 dVAR;
7a4c00b4 7385 MAGIC *mg;
16660edb 7386
078504b2 7387 PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7918f24d 7388
14befaf4 7389 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
3280af22 7390 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
93524f2b
NC
7391 const char *s;
7392 char *xf;
bbce6d69 7393 STRLEN len, xlen;
7394
7a4c00b4 7395 if (mg)
7396 Safefree(mg->mg_ptr);
078504b2 7397 s = SvPV_flags_const(sv, len, flags);
bbce6d69 7398 if ((xf = mem_collxfrm(s, len, &xlen))) {
7a4c00b4 7399 if (! mg) {
d83f0a82
NC
7400#ifdef PERL_OLD_COPY_ON_WRITE
7401 if (SvIsCOW(sv))
7402 sv_force_normal_flags(sv, 0);
7403#endif
7404 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7405 0, 0);
7a4c00b4 7406 assert(mg);
bbce6d69 7407 }
7a4c00b4 7408 mg->mg_ptr = xf;
565764a8 7409 mg->mg_len = xlen;
7a4c00b4 7410 }
7411 else {
ff0cee69 7412 if (mg) {
7413 mg->mg_ptr = NULL;
565764a8 7414 mg->mg_len = -1;
ff0cee69 7415 }
bbce6d69 7416 }
7417 }
7a4c00b4 7418 if (mg && mg->mg_ptr) {
565764a8 7419 *nxp = mg->mg_len;
3280af22 7420 return mg->mg_ptr + sizeof(PL_collation_ix);
bbce6d69 7421 }
7422 else {
7423 *nxp = 0;
7424 return NULL;
16660edb 7425 }
79072805
LW
7426}
7427
36477c24 7428#endif /* USE_LOCALE_COLLATE */
bbce6d69 7429
f80c2205
NC
7430static char *
7431S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7432{
7433 SV * const tsv = newSV(0);
7434 ENTER;
7435 SAVEFREESV(tsv);
7436 sv_gets(tsv, fp, 0);
7437 sv_utf8_upgrade_nomg(tsv);
7438 SvCUR_set(sv,append);
7439 sv_catsv(sv,tsv);
7440 LEAVE;
7441 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7442}
7443
7444static char *
7445S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7446{
7447 I32 bytesread;
7448 const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7449 /* Grab the size of the record we're getting */
7450 char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7451#ifdef VMS
7452 int fd;
7453#endif
7454
7455 /* Go yank in */
7456#ifdef VMS
7457 /* VMS wants read instead of fread, because fread doesn't respect */
7458 /* RMS record boundaries. This is not necessarily a good thing to be */
7459 /* doing, but we've got no other real choice - except avoid stdio
7460 as implementation - perhaps write a :vms layer ?
7461 */
7462 fd = PerlIO_fileno(fp);
7463 if (fd != -1) {
7464 bytesread = PerlLIO_read(fd, buffer, recsize);
7465 }
7466 else /* in-memory file from PerlIO::Scalar */
7467#endif
7468 {
7469 bytesread = PerlIO_read(fp, buffer, recsize);
7470 }
7471
7472 if (bytesread < 0)
7473 bytesread = 0;
7474 SvCUR_set(sv, bytesread + append);
7475 buffer[bytesread] = '\0';
7476 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7477}
7478
c461cf8f
JH
7479/*
7480=for apidoc sv_gets
7481
7482Get a line from the filehandle and store it into the SV, optionally
7483appending to the currently-stored string.
7484
7485=cut
7486*/
7487
79072805 7488char *
ac1e9476 7489Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
79072805 7490{
97aff369 7491 dVAR;
e1ec3a88 7492 const char *rsptr;
c07a80fd 7493 STRLEN rslen;
7494 register STDCHAR rslast;
7495 register STDCHAR *bp;
7496 register I32 cnt;
9c5ffd7c 7497 I32 i = 0;
8bfdd7d9 7498 I32 rspara = 0;
c07a80fd 7499
7918f24d
NC
7500 PERL_ARGS_ASSERT_SV_GETS;
7501
bc44a8a2
NC
7502 if (SvTHINKFIRST(sv))
7503 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
765f542d
NC
7504 /* XXX. If you make this PVIV, then copy on write can copy scalars read
7505 from <>.
7506 However, perlbench says it's slower, because the existing swipe code
7507 is faster than copy on write.
7508 Swings and roundabouts. */
862a34c6 7509 SvUPGRADE(sv, SVt_PV);
99491443 7510
ff68c719 7511 SvSCREAM_off(sv);
efd8b2ba
AE
7512
7513 if (append) {
7514 if (PerlIO_isutf8(fp)) {
7515 if (!SvUTF8(sv)) {
7516 sv_utf8_upgrade_nomg(sv);
7517 sv_pos_u2b(sv,&append,0);
7518 }
7519 } else if (SvUTF8(sv)) {
f80c2205 7520 return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
efd8b2ba
AE
7521 }
7522 }
7523
7524 SvPOK_only(sv);
05dee287
JJ
7525 if (!append) {
7526 SvCUR_set(sv,0);
7527 }
efd8b2ba
AE
7528 if (PerlIO_isutf8(fp))
7529 SvUTF8_on(sv);
c07a80fd 7530
923e4eb5 7531 if (IN_PERL_COMPILETIME) {
8bfdd7d9
HS
7532 /* we always read code in line mode */
7533 rsptr = "\n";
7534 rslen = 1;
7535 }
7536 else if (RsSNARF(PL_rs)) {
7a5fa8a2 7537 /* If it is a regular disk file use size from stat() as estimate
acbd132f
JH
7538 of amount we are going to read -- may result in mallocing
7539 more memory than we really need if the layers below reduce
7540 the size we read (e.g. CRLF or a gzip layer).
e468d35b 7541 */
e311fd51 7542 Stat_t st;
e468d35b 7543 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
f54cb97a 7544 const Off_t offset = PerlIO_tell(fp);
58f1856e 7545 if (offset != (Off_t) -1 && st.st_size + append > offset) {
e468d35b
NIS
7546 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7547 }
7548 }
c07a80fd 7549 rsptr = NULL;
7550 rslen = 0;
7551 }
3280af22 7552 else if (RsRECORD(PL_rs)) {
f80c2205 7553 return S_sv_gets_read_record(aTHX_ sv, fp, append);
5b2b9c68 7554 }
3280af22 7555 else if (RsPARA(PL_rs)) {
c07a80fd 7556 rsptr = "\n\n";
7557 rslen = 2;
8bfdd7d9 7558 rspara = 1;
c07a80fd 7559 }
7d59b7e4
NIS
7560 else {
7561 /* Get $/ i.e. PL_rs into same encoding as stream wants */
7562 if (PerlIO_isutf8(fp)) {
7563 rsptr = SvPVutf8(PL_rs, rslen);
7564 }
7565 else {
7566 if (SvUTF8(PL_rs)) {
7567 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7568 Perl_croak(aTHX_ "Wide character in $/");
7569 }
7570 }
93524f2b 7571 rsptr = SvPV_const(PL_rs, rslen);
7d59b7e4
NIS
7572 }
7573 }
7574
c07a80fd 7575 rslast = rslen ? rsptr[rslen - 1] : '\0';
7576
8bfdd7d9 7577 if (rspara) { /* have to do this both before and after */
79072805 7578 do { /* to make sure file boundaries work right */
760ac839 7579 if (PerlIO_eof(fp))
a0d0e21e 7580 return 0;
760ac839 7581 i = PerlIO_getc(fp);
79072805 7582 if (i != '\n') {
a0d0e21e
LW
7583 if (i == -1)
7584 return 0;
760ac839 7585 PerlIO_ungetc(fp,i);
79072805
LW
7586 break;
7587 }
7588 } while (i != EOF);
7589 }
c07a80fd 7590
760ac839
LW
7591 /* See if we know enough about I/O mechanism to cheat it ! */
7592
7593 /* This used to be #ifdef test - it is made run-time test for ease
1c846c1f 7594 of abstracting out stdio interface. One call should be cheap
760ac839
LW
7595 enough here - and may even be a macro allowing compile
7596 time optimization.
7597 */
7598
7599 if (PerlIO_fast_gets(fp)) {
7600
7601 /*
7602 * We're going to steal some values from the stdio struct
7603 * and put EVERYTHING in the innermost loop into registers.
7604 */
7605 register STDCHAR *ptr;
7606 STRLEN bpx;
7607 I32 shortbuffered;
7608
16660edb 7609#if defined(VMS) && defined(PERLIO_IS_STDIO)
7610 /* An ungetc()d char is handled separately from the regular
7611 * buffer, so we getc() it back out and stuff it in the buffer.
7612 */
7613 i = PerlIO_getc(fp);
7614 if (i == EOF) return 0;
7615 *(--((*fp)->_ptr)) = (unsigned char) i;
7616 (*fp)->_cnt++;
7617#endif
c07a80fd 7618
c2960299 7619 /* Here is some breathtakingly efficient cheating */
c07a80fd 7620
a20bf0c3 7621 cnt = PerlIO_get_cnt(fp); /* get count into register */
e468d35b 7622 /* make sure we have the room */
7a5fa8a2 7623 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
e468d35b 7624 /* Not room for all of it
7a5fa8a2 7625 if we are looking for a separator and room for some
e468d35b
NIS
7626 */
7627 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7a5fa8a2 7628 /* just process what we have room for */
79072805
LW
7629 shortbuffered = cnt - SvLEN(sv) + append + 1;
7630 cnt -= shortbuffered;
7631 }
7632 else {
7633 shortbuffered = 0;
bbce6d69 7634 /* remember that cnt can be negative */
eb160463 7635 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
79072805
LW
7636 }
7637 }
7a5fa8a2 7638 else
79072805 7639 shortbuffered = 0;
3f7c398e 7640 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
a20bf0c3 7641 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
16660edb 7642 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7643 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
16660edb 7644 DEBUG_P(PerlIO_printf(Perl_debug_log,
ba7abf9d 7645 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7646 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7647 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
79072805
LW
7648 for (;;) {
7649 screamer:
93a17b20 7650 if (cnt > 0) {
c07a80fd 7651 if (rslen) {
760ac839
LW
7652 while (cnt > 0) { /* this | eat */
7653 cnt--;
c07a80fd 7654 if ((*bp++ = *ptr++) == rslast) /* really | dust */
7655 goto thats_all_folks; /* screams | sed :-) */
7656 }
7657 }
7658 else {
1c846c1f
NIS
7659 Copy(ptr, bp, cnt, char); /* this | eat */
7660 bp += cnt; /* screams | dust */
c07a80fd 7661 ptr += cnt; /* louder | sed :-) */
a5f75d66 7662 cnt = 0;
0f93bb20
NC
7663 assert (!shortbuffered);
7664 goto cannot_be_shortbuffered;
93a17b20 7665 }
79072805
LW
7666 }
7667
748a9306 7668 if (shortbuffered) { /* oh well, must extend */
79072805
LW
7669 cnt = shortbuffered;
7670 shortbuffered = 0;
3f7c398e 7671 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7672 SvCUR_set(sv, bpx);
7673 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3f7c398e 7674 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
79072805
LW
7675 continue;
7676 }
7677
0f93bb20 7678 cannot_be_shortbuffered:
16660edb 7679 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841
GS
7680 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7681 PTR2UV(ptr),(long)cnt));
cc00df79 7682 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
ad9e76a8
NC
7683
7684 DEBUG_Pv(PerlIO_printf(Perl_debug_log,
1d7c1841 7685 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7686 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7687 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ad9e76a8 7688
1c846c1f 7689 /* This used to call 'filbuf' in stdio form, but as that behaves like
774d564b 7690 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7691 another abstraction. */
760ac839 7692 i = PerlIO_getc(fp); /* get more characters */
ad9e76a8
NC
7693
7694 DEBUG_Pv(PerlIO_printf(Perl_debug_log,
1d7c1841 7695 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7696 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7697 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ad9e76a8 7698
a20bf0c3
JH
7699 cnt = PerlIO_get_cnt(fp);
7700 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
16660edb 7701 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7702 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
79072805 7703
748a9306
LW
7704 if (i == EOF) /* all done for ever? */
7705 goto thats_really_all_folks;
7706
3f7c398e 7707 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7708 SvCUR_set(sv, bpx);
7709 SvGROW(sv, bpx + cnt + 2);
3f7c398e 7710 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
c07a80fd 7711
eb160463 7712 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
79072805 7713
c07a80fd 7714 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
79072805 7715 goto thats_all_folks;
79072805
LW
7716 }
7717
7718thats_all_folks:
3f7c398e 7719 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
36477c24 7720 memNE((char*)bp - rslen, rsptr, rslen))
760ac839 7721 goto screamer; /* go back to the fray */
79072805
LW
7722thats_really_all_folks:
7723 if (shortbuffered)
7724 cnt += shortbuffered;
16660edb 7725 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7726 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
cc00df79 7727 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
16660edb 7728 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7729 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7730 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7731 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
79072805 7732 *bp = '\0';
3f7c398e 7733 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
16660edb 7734 DEBUG_P(PerlIO_printf(Perl_debug_log,
fb73857a 7735 "Screamer: done, len=%ld, string=|%.*s|\n",
3f7c398e 7736 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
760ac839
LW
7737 }
7738 else
79072805 7739 {
6edd2cd5 7740 /*The big, slow, and stupid way. */
27da23d5 7741#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
cbbf8932 7742 STDCHAR *buf = NULL;
a02a5408 7743 Newx(buf, 8192, STDCHAR);
6edd2cd5 7744 assert(buf);
4d2c4e07 7745#else
6edd2cd5 7746 STDCHAR buf[8192];
4d2c4e07 7747#endif
79072805 7748
760ac839 7749screamer2:
c07a80fd 7750 if (rslen) {
00b6aa41 7751 register const STDCHAR * const bpe = buf + sizeof(buf);
760ac839 7752 bp = buf;
eb160463 7753 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
760ac839
LW
7754 ; /* keep reading */
7755 cnt = bp - buf;
c07a80fd 7756 }
7757 else {
760ac839 7758 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
486ec47a 7759 /* Accommodate broken VAXC compiler, which applies U8 cast to
16660edb 7760 * both args of ?: operator, causing EOF to change into 255
7761 */
37be0adf 7762 if (cnt > 0)
cbe9e203
JH
7763 i = (U8)buf[cnt - 1];
7764 else
37be0adf 7765 i = EOF;
c07a80fd 7766 }
79072805 7767
cbe9e203
JH
7768 if (cnt < 0)
7769 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
7770 if (append)
7771 sv_catpvn(sv, (char *) buf, cnt);
7772 else
7773 sv_setpvn(sv, (char *) buf, cnt);
c07a80fd 7774
7775 if (i != EOF && /* joy */
7776 (!rslen ||
7777 SvCUR(sv) < rslen ||
3f7c398e 7778 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
79072805
LW
7779 {
7780 append = -1;
63e4d877
CS
7781 /*
7782 * If we're reading from a TTY and we get a short read,
7783 * indicating that the user hit his EOF character, we need
7784 * to notice it now, because if we try to read from the TTY
7785 * again, the EOF condition will disappear.
7786 *
7787 * The comparison of cnt to sizeof(buf) is an optimization
7788 * that prevents unnecessary calls to feof().
7789 *
7790 * - jik 9/25/96
7791 */
bb7a0f54 7792 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
63e4d877 7793 goto screamer2;
79072805 7794 }
6edd2cd5 7795
27da23d5 7796#ifdef USE_HEAP_INSTEAD_OF_STACK
6edd2cd5
JH
7797 Safefree(buf);
7798#endif
79072805
LW
7799 }
7800
8bfdd7d9 7801 if (rspara) { /* have to do this both before and after */
c07a80fd 7802 while (i != EOF) { /* to make sure file boundaries work right */
760ac839 7803 i = PerlIO_getc(fp);
79072805 7804 if (i != '\n') {
760ac839 7805 PerlIO_ungetc(fp,i);
79072805
LW
7806 break;
7807 }
7808 }
7809 }
c07a80fd 7810
bd61b366 7811 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
79072805
LW
7812}
7813
954c1994
GS
7814/*
7815=for apidoc sv_inc
7816
645c22ef 7817Auto-increment of the value in the SV, doing string to numeric conversion
6f1401dc 7818if necessary. Handles 'get' magic and operator overloading.
954c1994
GS
7819
7820=cut
7821*/
7822
79072805 7823void
ac1e9476 7824Perl_sv_inc(pTHX_ register SV *const sv)
79072805 7825{
6f1401dc
DM
7826 if (!sv)
7827 return;
7828 SvGETMAGIC(sv);
7829 sv_inc_nomg(sv);
7830}
7831
7832/*
7833=for apidoc sv_inc_nomg
7834
7835Auto-increment of the value in the SV, doing string to numeric conversion
7836if necessary. Handles operator overloading. Skips handling 'get' magic.
7837
7838=cut
7839*/
7840
7841void
7842Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7843{
97aff369 7844 dVAR;
79072805 7845 register char *d;
463ee0b2 7846 int flags;
79072805
LW
7847
7848 if (!sv)
7849 return;
ed6116ce 7850 if (SvTHINKFIRST(sv)) {
60092ce4 7851 if (SvIsCOW(sv) || isGV_with_GP(sv))
765f542d 7852 sv_force_normal_flags(sv, 0);
0f15f207 7853 if (SvREADONLY(sv)) {
923e4eb5 7854 if (IN_PERL_RUNTIME)
6ad8f254 7855 Perl_croak_no_modify(aTHX);
0f15f207 7856 }
a0d0e21e 7857 if (SvROK(sv)) {
b5be31e9 7858 IV i;
31d632c3 7859 if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
9e7bc3e8 7860 return;
56431972 7861 i = PTR2IV(SvRV(sv));
b5be31e9
SM
7862 sv_unref(sv);
7863 sv_setiv(sv, i);
a0d0e21e 7864 }
ed6116ce 7865 }
8990e307 7866 flags = SvFLAGS(sv);
28e5dec8
JH
7867 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7868 /* It's (privately or publicly) a float, but not tested as an
7869 integer, so test it to see. */
d460ef45 7870 (void) SvIV(sv);
28e5dec8
JH
7871 flags = SvFLAGS(sv);
7872 }
7873 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7874 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 7875#ifdef PERL_PRESERVE_IVUV
28e5dec8 7876 oops_its_int:
59d8ce62 7877#endif
25da4f38
IZ
7878 if (SvIsUV(sv)) {
7879 if (SvUVX(sv) == UV_MAX)
a1e868e7 7880 sv_setnv(sv, UV_MAX_P1);
25da4f38
IZ
7881 else
7882 (void)SvIOK_only_UV(sv);
607fa7f2 7883 SvUV_set(sv, SvUVX(sv) + 1);
25da4f38
IZ
7884 } else {
7885 if (SvIVX(sv) == IV_MAX)
28e5dec8 7886 sv_setuv(sv, (UV)IV_MAX + 1);
25da4f38
IZ
7887 else {
7888 (void)SvIOK_only(sv);
45977657 7889 SvIV_set(sv, SvIVX(sv) + 1);
1c846c1f 7890 }
55497cff 7891 }
79072805
LW
7892 return;
7893 }
28e5dec8 7894 if (flags & SVp_NOK) {
b88df990 7895 const NV was = SvNVX(sv);
b68c599a 7896 if (NV_OVERFLOWS_INTEGERS_AT &&
a2a5de95
NC
7897 was >= NV_OVERFLOWS_INTEGERS_AT) {
7898 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7899 "Lost precision when incrementing %" NVff " by 1",
7900 was);
b88df990 7901 }
28e5dec8 7902 (void)SvNOK_only(sv);
b68c599a 7903 SvNV_set(sv, was + 1.0);
28e5dec8
JH
7904 return;
7905 }
7906
3f7c398e 7907 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
28e5dec8 7908 if ((flags & SVTYPEMASK) < SVt_PVIV)
f5282e15 7909 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
28e5dec8 7910 (void)SvIOK_only(sv);
45977657 7911 SvIV_set(sv, 1);
79072805
LW
7912 return;
7913 }
463ee0b2 7914 d = SvPVX(sv);
79072805
LW
7915 while (isALPHA(*d)) d++;
7916 while (isDIGIT(*d)) d++;
6aff239d 7917 if (d < SvEND(sv)) {
28e5dec8 7918#ifdef PERL_PRESERVE_IVUV
d1be9408 7919 /* Got to punt this as an integer if needs be, but we don't issue
28e5dec8
JH
7920 warnings. Probably ought to make the sv_iv_please() that does
7921 the conversion if possible, and silently. */
504618e9 7922 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
7923 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7924 /* Need to try really hard to see if it's an integer.
7925 9.22337203685478e+18 is an integer.
7926 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7927 so $a="9.22337203685478e+18"; $a+0; $a++
7928 needs to be the same as $a="9.22337203685478e+18"; $a++
7929 or we go insane. */
d460ef45 7930
28e5dec8
JH
7931 (void) sv_2iv(sv);
7932 if (SvIOK(sv))
7933 goto oops_its_int;
7934
7935 /* sv_2iv *should* have made this an NV */
7936 if (flags & SVp_NOK) {
7937 (void)SvNOK_only(sv);
9d6ce603 7938 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
7939 return;
7940 }
7941 /* I don't think we can get here. Maybe I should assert this
7942 And if we do get here I suspect that sv_setnv will croak. NWC
7943 Fall through. */
7944#if defined(USE_LONG_DOUBLE)
7945 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 7946 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 7947#else
1779d84d 7948 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 7949 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
7950#endif
7951 }
7952#endif /* PERL_PRESERVE_IVUV */
3f7c398e 7953 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
79072805
LW
7954 return;
7955 }
7956 d--;
3f7c398e 7957 while (d >= SvPVX_const(sv)) {
79072805
LW
7958 if (isDIGIT(*d)) {
7959 if (++*d <= '9')
7960 return;
7961 *(d--) = '0';
7962 }
7963 else {
9d116dd7
JH
7964#ifdef EBCDIC
7965 /* MKS: The original code here died if letters weren't consecutive.
7966 * at least it didn't have to worry about non-C locales. The
7967 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
1c846c1f 7968 * arranged in order (although not consecutively) and that only
9d116dd7
JH
7969 * [A-Za-z] are accepted by isALPHA in the C locale.
7970 */
7971 if (*d != 'z' && *d != 'Z') {
7972 do { ++*d; } while (!isALPHA(*d));
7973 return;
7974 }
7975 *(d--) -= 'z' - 'a';
7976#else
79072805
LW
7977 ++*d;
7978 if (isALPHA(*d))
7979 return;
7980 *(d--) -= 'z' - 'a' + 1;
9d116dd7 7981#endif
79072805
LW
7982 }
7983 }
7984 /* oh,oh, the number grew */
7985 SvGROW(sv, SvCUR(sv) + 2);
b162af07 7986 SvCUR_set(sv, SvCUR(sv) + 1);
3f7c398e 7987 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
79072805
LW
7988 *d = d[-1];
7989 if (isDIGIT(d[1]))
7990 *d = '1';
7991 else
7992 *d = d[1];
7993}
7994
954c1994
GS
7995/*
7996=for apidoc sv_dec
7997
645c22ef 7998Auto-decrement of the value in the SV, doing string to numeric conversion
6f1401dc 7999if necessary. Handles 'get' magic and operator overloading.
954c1994
GS
8000
8001=cut
8002*/
8003
79072805 8004void
ac1e9476 8005Perl_sv_dec(pTHX_ register SV *const sv)
79072805 8006{
97aff369 8007 dVAR;
6f1401dc
DM
8008 if (!sv)
8009 return;
8010 SvGETMAGIC(sv);
8011 sv_dec_nomg(sv);
8012}
8013
8014/*
8015=for apidoc sv_dec_nomg
8016
8017Auto-decrement of the value in the SV, doing string to numeric conversion
8018if necessary. Handles operator overloading. Skips handling 'get' magic.
8019
8020=cut
8021*/
8022
8023void
8024Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8025{
8026 dVAR;
463ee0b2
LW
8027 int flags;
8028
79072805
LW
8029 if (!sv)
8030 return;
ed6116ce 8031 if (SvTHINKFIRST(sv)) {
60092ce4 8032 if (SvIsCOW(sv) || isGV_with_GP(sv))
765f542d 8033 sv_force_normal_flags(sv, 0);
0f15f207 8034 if (SvREADONLY(sv)) {
923e4eb5 8035 if (IN_PERL_RUNTIME)
6ad8f254 8036 Perl_croak_no_modify(aTHX);
0f15f207 8037 }
a0d0e21e 8038 if (SvROK(sv)) {
b5be31e9 8039 IV i;
31d632c3 8040 if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9e7bc3e8 8041 return;
56431972 8042 i = PTR2IV(SvRV(sv));
b5be31e9
SM
8043 sv_unref(sv);
8044 sv_setiv(sv, i);
a0d0e21e 8045 }
ed6116ce 8046 }
28e5dec8
JH
8047 /* Unlike sv_inc we don't have to worry about string-never-numbers
8048 and keeping them magic. But we mustn't warn on punting */
8990e307 8049 flags = SvFLAGS(sv);
28e5dec8
JH
8050 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8051 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 8052#ifdef PERL_PRESERVE_IVUV
28e5dec8 8053 oops_its_int:
59d8ce62 8054#endif
25da4f38
IZ
8055 if (SvIsUV(sv)) {
8056 if (SvUVX(sv) == 0) {
8057 (void)SvIOK_only(sv);
45977657 8058 SvIV_set(sv, -1);
25da4f38
IZ
8059 }
8060 else {
8061 (void)SvIOK_only_UV(sv);
f4eee32f 8062 SvUV_set(sv, SvUVX(sv) - 1);
1c846c1f 8063 }
25da4f38 8064 } else {
b88df990
NC
8065 if (SvIVX(sv) == IV_MIN) {
8066 sv_setnv(sv, (NV)IV_MIN);
8067 goto oops_its_num;
8068 }
25da4f38
IZ
8069 else {
8070 (void)SvIOK_only(sv);
45977657 8071 SvIV_set(sv, SvIVX(sv) - 1);
1c846c1f 8072 }
55497cff 8073 }
8074 return;
8075 }
28e5dec8 8076 if (flags & SVp_NOK) {
b88df990
NC
8077 oops_its_num:
8078 {
8079 const NV was = SvNVX(sv);
b68c599a 8080 if (NV_OVERFLOWS_INTEGERS_AT &&
a2a5de95
NC
8081 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8082 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8083 "Lost precision when decrementing %" NVff " by 1",
8084 was);
b88df990
NC
8085 }
8086 (void)SvNOK_only(sv);
b68c599a 8087 SvNV_set(sv, was - 1.0);
b88df990
NC
8088 return;
8089 }
28e5dec8 8090 }
8990e307 8091 if (!(flags & SVp_POK)) {
ef088171
NC
8092 if ((flags & SVTYPEMASK) < SVt_PVIV)
8093 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8094 SvIV_set(sv, -1);
8095 (void)SvIOK_only(sv);
79072805
LW
8096 return;
8097 }
28e5dec8
JH
8098#ifdef PERL_PRESERVE_IVUV
8099 {
504618e9 8100 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
8101 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8102 /* Need to try really hard to see if it's an integer.
8103 9.22337203685478e+18 is an integer.
8104 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8105 so $a="9.22337203685478e+18"; $a+0; $a--
8106 needs to be the same as $a="9.22337203685478e+18"; $a--
8107 or we go insane. */
d460ef45 8108
28e5dec8
JH
8109 (void) sv_2iv(sv);
8110 if (SvIOK(sv))
8111 goto oops_its_int;
8112
8113 /* sv_2iv *should* have made this an NV */
8114 if (flags & SVp_NOK) {
8115 (void)SvNOK_only(sv);
9d6ce603 8116 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
8117 return;
8118 }
8119 /* I don't think we can get here. Maybe I should assert this
8120 And if we do get here I suspect that sv_setnv will croak. NWC
8121 Fall through. */
8122#if defined(USE_LONG_DOUBLE)
8123 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 8124 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 8125#else
1779d84d 8126 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 8127 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
8128#endif
8129 }
8130 }
8131#endif /* PERL_PRESERVE_IVUV */
3f7c398e 8132 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
79072805
LW
8133}
8134
81041c50
YO
8135/* this define is used to eliminate a chunk of duplicated but shared logic
8136 * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8137 * used anywhere but here - yves
8138 */
8139#define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8140 STMT_START { \
8141 EXTEND_MORTAL(1); \
8142 PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8143 } STMT_END
8144
954c1994
GS
8145/*
8146=for apidoc sv_mortalcopy
8147
645c22ef 8148Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
d4236ebc
DM
8149The new SV is marked as mortal. It will be destroyed "soon", either by an
8150explicit call to FREETMPS, or by an implicit call at places such as
8151statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
954c1994
GS
8152
8153=cut
8154*/
8155
79072805
LW
8156/* Make a string that will exist for the duration of the expression
8157 * evaluation. Actually, it may have to last longer than that, but
8158 * hopefully we won't free it until it has been assigned to a
8159 * permanent location. */
8160
8161SV *
ac1e9476 8162Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
79072805 8163{
97aff369 8164 dVAR;
463ee0b2 8165 register SV *sv;
b881518d 8166
4561caa4 8167 new_SV(sv);
79072805 8168 sv_setsv(sv,oldstr);
81041c50 8169 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307
LW
8170 SvTEMP_on(sv);
8171 return sv;
8172}
8173
954c1994
GS
8174/*
8175=for apidoc sv_newmortal
8176
645c22ef 8177Creates a new null SV which is mortal. The reference count of the SV is
d4236ebc
DM
8178set to 1. It will be destroyed "soon", either by an explicit call to
8179FREETMPS, or by an implicit call at places such as statement boundaries.
8180See also C<sv_mortalcopy> and C<sv_2mortal>.
954c1994
GS
8181
8182=cut
8183*/
8184
8990e307 8185SV *
864dbfa3 8186Perl_sv_newmortal(pTHX)
8990e307 8187{
97aff369 8188 dVAR;
8990e307
LW
8189 register SV *sv;
8190
4561caa4 8191 new_SV(sv);
8990e307 8192 SvFLAGS(sv) = SVs_TEMP;
81041c50 8193 PUSH_EXTEND_MORTAL__SV_C(sv);
79072805
LW
8194 return sv;
8195}
8196
59cd0e26
NC
8197
8198/*
8199=for apidoc newSVpvn_flags
8200
8201Creates a new SV and copies a string into it. The reference count for the
8202SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
8203string. You are responsible for ensuring that the source string is at least
8204C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
8205Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
d9f0b464 8206If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
c790c9b6
KW
8207returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
8208C<SVf_UTF8> flag will be set on the new SV.
59cd0e26
NC
8209C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8210
8211 #define newSVpvn_utf8(s, len, u) \
8212 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8213
8214=cut
8215*/
8216
8217SV *
23f13727 8218Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
59cd0e26
NC
8219{
8220 dVAR;
8221 register SV *sv;
8222
8223 /* All the flags we don't support must be zero.
8224 And we're new code so I'm going to assert this from the start. */
8225 assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8226 new_SV(sv);
8227 sv_setpvn(sv,s,len);
d21488d7
YO
8228
8229 /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
486ec47a 8230 * and do what it does ourselves here.
d21488d7
YO
8231 * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8232 * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8233 * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
486ec47a 8234 * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
d21488d7
YO
8235 */
8236
6dfeccca
GF
8237 SvFLAGS(sv) |= flags;
8238
8239 if(flags & SVs_TEMP){
81041c50 8240 PUSH_EXTEND_MORTAL__SV_C(sv);
6dfeccca
GF
8241 }
8242
8243 return sv;
59cd0e26
NC
8244}
8245
954c1994
GS
8246/*
8247=for apidoc sv_2mortal
8248
d4236ebc
DM
8249Marks an existing SV as mortal. The SV will be destroyed "soon", either
8250by an explicit call to FREETMPS, or by an implicit call at places such as
37d2ac18
NC
8251statement boundaries. SvTEMP() is turned on which means that the SV's
8252string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
8253and C<sv_mortalcopy>.
954c1994
GS
8254
8255=cut
8256*/
8257
79072805 8258SV *
23f13727 8259Perl_sv_2mortal(pTHX_ register SV *const sv)
79072805 8260{
27da23d5 8261 dVAR;
79072805 8262 if (!sv)
7a5b473e 8263 return NULL;
d689ffdd 8264 if (SvREADONLY(sv) && SvIMMORTAL(sv))
11162842 8265 return sv;
81041c50 8266 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307 8267 SvTEMP_on(sv);
79072805
LW
8268 return sv;
8269}
8270
954c1994
GS
8271/*
8272=for apidoc newSVpv
8273
8274Creates a new SV and copies a string into it. The reference count for the
8275SV is set to 1. If C<len> is zero, Perl will compute the length using
8276strlen(). For efficiency, consider using C<newSVpvn> instead.
8277
8278=cut
8279*/
8280
79072805 8281SV *
23f13727 8282Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
79072805 8283{
97aff369 8284 dVAR;
463ee0b2 8285 register SV *sv;
79072805 8286
4561caa4 8287 new_SV(sv);
ddfa59c7 8288 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
79072805
LW
8289 return sv;
8290}
8291
954c1994
GS
8292/*
8293=for apidoc newSVpvn
8294
8295Creates a new SV and copies a string into it. The reference count for the
1c846c1f 8296SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
954c1994 8297string. You are responsible for ensuring that the source string is at least
9e09f5f2 8298C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
954c1994
GS
8299
8300=cut
8301*/
8302
9da1e3b5 8303SV *
23f13727 8304Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
9da1e3b5 8305{
97aff369 8306 dVAR;
9da1e3b5
MUN
8307 register SV *sv;
8308
8309 new_SV(sv);
9da1e3b5
MUN
8310 sv_setpvn(sv,s,len);
8311 return sv;
8312}
8313
740cce10 8314/*
926f8064 8315=for apidoc newSVhek
bd08039b
NC
8316
8317Creates a new SV from the hash key structure. It will generate scalars that
5aaec2b4
NC
8318point to the shared string table where possible. Returns a new (undefined)
8319SV if the hek is NULL.
bd08039b
NC
8320
8321=cut
8322*/
8323
8324SV *
23f13727 8325Perl_newSVhek(pTHX_ const HEK *const hek)
bd08039b 8326{
97aff369 8327 dVAR;
5aaec2b4
NC
8328 if (!hek) {
8329 SV *sv;
8330
8331 new_SV(sv);
8332 return sv;
8333 }
8334
bd08039b
NC
8335 if (HEK_LEN(hek) == HEf_SVKEY) {
8336 return newSVsv(*(SV**)HEK_KEY(hek));
8337 } else {
8338 const int flags = HEK_FLAGS(hek);
8339 if (flags & HVhek_WASUTF8) {
8340 /* Trouble :-)
8341 Andreas would like keys he put in as utf8 to come back as utf8
8342 */
8343 STRLEN utf8_len = HEK_LEN(hek);
678febd7
NC
8344 SV * const sv = newSV_type(SVt_PV);
8345 char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8346 /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8347 sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
bd08039b 8348 SvUTF8_on (sv);
bd08039b 8349 return sv;
45e34800 8350 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
bd08039b
NC
8351 /* We don't have a pointer to the hv, so we have to replicate the
8352 flag into every HEK. This hv is using custom a hasing
8353 algorithm. Hence we can't return a shared string scalar, as
8354 that would contain the (wrong) hash value, and might get passed
45e34800
NC
8355 into an hv routine with a regular hash.
8356 Similarly, a hash that isn't using shared hash keys has to have
8357 the flag in every key so that we know not to try to call
b7256f66 8358 share_hek_hek on it. */
bd08039b 8359
b64e5050 8360 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
bd08039b
NC
8361 if (HEK_UTF8(hek))
8362 SvUTF8_on (sv);
8363 return sv;
8364 }
8365 /* This will be overwhelminly the most common case. */
409dfe77
NC
8366 {
8367 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8368 more efficient than sharepvn(). */
8369 SV *sv;
8370
8371 new_SV(sv);
8372 sv_upgrade(sv, SVt_PV);
8373 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8374 SvCUR_set(sv, HEK_LEN(hek));
8375 SvLEN_set(sv, 0);
8376 SvREADONLY_on(sv);
8377 SvFAKE_on(sv);
8378 SvPOK_on(sv);
8379 if (HEK_UTF8(hek))
8380 SvUTF8_on(sv);
8381 return sv;
8382 }
bd08039b
NC
8383 }
8384}
8385
1c846c1f
NIS
8386/*
8387=for apidoc newSVpvn_share
8388
3f7c398e 8389Creates a new SV with its SvPVX_const pointing to a shared string in the string
645c22ef 8390table. If the string does not already exist in the table, it is created
758fcfc1
VP
8391first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
8392value is used; otherwise the hash is computed. The string's hash can be later
8393be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
8394that as the string table is used for shared hash keys these strings will have
8395SvPVX_const == HeKEY and hash lookup will avoid string compare.
1c846c1f
NIS
8396
8397=cut
8398*/
8399
8400SV *
c3654f1a 8401Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
1c846c1f 8402{
97aff369 8403 dVAR;
1c846c1f 8404 register SV *sv;
c3654f1a 8405 bool is_utf8 = FALSE;
a51caccf
NC
8406 const char *const orig_src = src;
8407
c3654f1a 8408 if (len < 0) {
77caf834 8409 STRLEN tmplen = -len;
c3654f1a 8410 is_utf8 = TRUE;
75a54232 8411 /* See the note in hv.c:hv_fetch() --jhi */
e1ec3a88 8412 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
75a54232
JH
8413 len = tmplen;
8414 }
1c846c1f 8415 if (!hash)
5afd6d42 8416 PERL_HASH(hash, src, len);
1c846c1f 8417 new_SV(sv);
f46ee248
NC
8418 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8419 changes here, update it there too. */
bdd68bc3 8420 sv_upgrade(sv, SVt_PV);
f880fe2f 8421 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
b162af07 8422 SvCUR_set(sv, len);
b162af07 8423 SvLEN_set(sv, 0);
1c846c1f
NIS
8424 SvREADONLY_on(sv);
8425 SvFAKE_on(sv);
8426 SvPOK_on(sv);
c3654f1a
IH
8427 if (is_utf8)
8428 SvUTF8_on(sv);
a51caccf
NC
8429 if (src != orig_src)
8430 Safefree(src);
1c846c1f
NIS
8431 return sv;
8432}
8433
9dcc53ea
Z
8434/*
8435=for apidoc newSVpv_share
8436
8437Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8438string/length pair.
8439
8440=cut
8441*/
8442
8443SV *
8444Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8445{
8446 return newSVpvn_share(src, strlen(src), hash);
8447}
645c22ef 8448
cea2e8a9 8449#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
8450
8451/* pTHX_ magic can't cope with varargs, so this is a no-context
8452 * version of the main function, (which may itself be aliased to us).
8453 * Don't access this version directly.
8454 */
8455
46fc3d4c 8456SV *
23f13727 8457Perl_newSVpvf_nocontext(const char *const pat, ...)
46fc3d4c 8458{
cea2e8a9 8459 dTHX;
46fc3d4c 8460 register SV *sv;
8461 va_list args;
7918f24d
NC
8462
8463 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8464
46fc3d4c 8465 va_start(args, pat);
c5be433b 8466 sv = vnewSVpvf(pat, &args);
46fc3d4c 8467 va_end(args);
8468 return sv;
8469}
cea2e8a9 8470#endif
46fc3d4c 8471
954c1994
GS
8472/*
8473=for apidoc newSVpvf
8474
645c22ef 8475Creates a new SV and initializes it with the string formatted like
954c1994
GS
8476C<sprintf>.
8477
8478=cut
8479*/
8480
cea2e8a9 8481SV *
23f13727 8482Perl_newSVpvf(pTHX_ const char *const pat, ...)
cea2e8a9
GS
8483{
8484 register SV *sv;
8485 va_list args;
7918f24d
NC
8486
8487 PERL_ARGS_ASSERT_NEWSVPVF;
8488
cea2e8a9 8489 va_start(args, pat);
c5be433b 8490 sv = vnewSVpvf(pat, &args);
cea2e8a9
GS
8491 va_end(args);
8492 return sv;
8493}
46fc3d4c 8494
645c22ef
DM
8495/* backend for newSVpvf() and newSVpvf_nocontext() */
8496
79072805 8497SV *
23f13727 8498Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
c5be433b 8499{
97aff369 8500 dVAR;
c5be433b 8501 register SV *sv;
7918f24d
NC
8502
8503 PERL_ARGS_ASSERT_VNEWSVPVF;
8504
c5be433b 8505 new_SV(sv);
4608196e 8506 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
8507 return sv;
8508}
8509
954c1994
GS
8510/*
8511=for apidoc newSVnv
8512
8513Creates a new SV and copies a floating point value into it.
8514The reference count for the SV is set to 1.
8515
8516=cut
8517*/
8518
c5be433b 8519SV *
23f13727 8520Perl_newSVnv(pTHX_ const NV n)
79072805 8521{
97aff369 8522 dVAR;
463ee0b2 8523 register SV *sv;
79072805 8524
4561caa4 8525 new_SV(sv);
79072805
LW
8526 sv_setnv(sv,n);
8527 return sv;
8528}
8529
954c1994
GS
8530/*
8531=for apidoc newSViv
8532
8533Creates a new SV and copies an integer into it. The reference count for the
8534SV is set to 1.
8535
8536=cut
8537*/
8538
79072805 8539SV *
23f13727 8540Perl_newSViv(pTHX_ const IV i)
79072805 8541{
97aff369 8542 dVAR;
463ee0b2 8543 register SV *sv;
79072805 8544
4561caa4 8545 new_SV(sv);
79072805
LW
8546 sv_setiv(sv,i);
8547 return sv;
8548}
8549
954c1994 8550/*
1a3327fb
JH
8551=for apidoc newSVuv
8552
8553Creates a new SV and copies an unsigned integer into it.
8554The reference count for the SV is set to 1.
8555
8556=cut
8557*/
8558
8559SV *
23f13727 8560Perl_newSVuv(pTHX_ const UV u)
1a3327fb 8561{
97aff369 8562 dVAR;
1a3327fb
JH
8563 register SV *sv;
8564
8565 new_SV(sv);
8566 sv_setuv(sv,u);
8567 return sv;
8568}
8569
8570/*
b9f83d2f
NC
8571=for apidoc newSV_type
8572
c41f7ed2 8573Creates a new SV, of the type specified. The reference count for the new SV
b9f83d2f
NC
8574is set to 1.
8575
8576=cut
8577*/
8578
8579SV *
fe9845cc 8580Perl_newSV_type(pTHX_ const svtype type)
b9f83d2f
NC
8581{
8582 register SV *sv;
8583
8584 new_SV(sv);
8585 sv_upgrade(sv, type);
8586 return sv;
8587}
8588
8589/*
954c1994
GS
8590=for apidoc newRV_noinc
8591
8592Creates an RV wrapper for an SV. The reference count for the original
8593SV is B<not> incremented.
8594
8595=cut
8596*/
8597
2304df62 8598SV *
23f13727 8599Perl_newRV_noinc(pTHX_ SV *const tmpRef)
2304df62 8600{
97aff369 8601 dVAR;
4df7f6af 8602 register SV *sv = newSV_type(SVt_IV);
7918f24d
NC
8603
8604 PERL_ARGS_ASSERT_NEWRV_NOINC;
8605
76e3520e 8606 SvTEMP_off(tmpRef);
b162af07 8607 SvRV_set(sv, tmpRef);
2304df62 8608 SvROK_on(sv);
2304df62
AD
8609 return sv;
8610}
8611
ff276b08 8612/* newRV_inc is the official function name to use now.
645c22ef
DM
8613 * newRV_inc is in fact #defined to newRV in sv.h
8614 */
8615
5f05dabc 8616SV *
23f13727 8617Perl_newRV(pTHX_ SV *const sv)
5f05dabc 8618{
97aff369 8619 dVAR;
7918f24d
NC
8620
8621 PERL_ARGS_ASSERT_NEWRV;
8622
7f466ec7 8623 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
5f05dabc 8624}
5f05dabc 8625
954c1994
GS
8626/*
8627=for apidoc newSVsv
8628
8629Creates a new SV which is an exact duplicate of the original SV.
645c22ef 8630(Uses C<sv_setsv>).
954c1994
GS
8631
8632=cut
8633*/
8634
79072805 8635SV *
23f13727 8636Perl_newSVsv(pTHX_ register SV *const old)
79072805 8637{
97aff369 8638 dVAR;
463ee0b2 8639 register SV *sv;
79072805
LW
8640
8641 if (!old)
7a5b473e 8642 return NULL;
e4787c0c 8643 if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9b387841 8644 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
a0714e2c 8645 return NULL;
79072805 8646 }
4561caa4 8647 new_SV(sv);
e90aabeb
NC
8648 /* SV_GMAGIC is the default for sv_setv()
8649 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8650 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
8651 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
463ee0b2 8652 return sv;
79072805
LW
8653}
8654
645c22ef
DM
8655/*
8656=for apidoc sv_reset
8657
8658Underlying implementation for the C<reset> Perl function.
8659Note that the perl-level function is vaguely deprecated.
8660
8661=cut
8662*/
8663
79072805 8664void
23f13727 8665Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
79072805 8666{
27da23d5 8667 dVAR;
4802d5d7 8668 char todo[PERL_UCHAR_MAX+1];
79072805 8669
7918f24d
NC
8670 PERL_ARGS_ASSERT_SV_RESET;
8671
49d8d3a1
MB
8672 if (!stash)
8673 return;
8674
79072805 8675 if (!*s) { /* reset ?? searches */
daba3364 8676 MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8d2f4536 8677 if (mg) {
c2b1997a
NC
8678 const U32 count = mg->mg_len / sizeof(PMOP**);
8679 PMOP **pmp = (PMOP**) mg->mg_ptr;
8680 PMOP *const *const end = pmp + count;
8681
8682 while (pmp < end) {
c737faaf 8683#ifdef USE_ITHREADS
c2b1997a 8684 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
c737faaf 8685#else
c2b1997a 8686 (*pmp)->op_pmflags &= ~PMf_USED;
c737faaf 8687#endif
c2b1997a 8688 ++pmp;
8d2f4536 8689 }
79072805
LW
8690 }
8691 return;
8692 }
8693
8694 /* reset variables */
8695
8696 if (!HvARRAY(stash))
8697 return;
463ee0b2
LW
8698
8699 Zero(todo, 256, char);
79072805 8700 while (*s) {
b464bac0
AL
8701 I32 max;
8702 I32 i = (unsigned char)*s;
79072805
LW
8703 if (s[1] == '-') {
8704 s += 2;
8705 }
4802d5d7 8706 max = (unsigned char)*s++;
79072805 8707 for ( ; i <= max; i++) {
463ee0b2
LW
8708 todo[i] = 1;
8709 }
a0d0e21e 8710 for (i = 0; i <= (I32) HvMAX(stash); i++) {
b464bac0 8711 HE *entry;
79072805 8712 for (entry = HvARRAY(stash)[i];
9e35f4b3
GS
8713 entry;
8714 entry = HeNEXT(entry))
8715 {
b464bac0
AL
8716 register GV *gv;
8717 register SV *sv;
8718
1edc1566 8719 if (!todo[(U8)*HeKEY(entry)])
463ee0b2 8720 continue;
159b6efe 8721 gv = MUTABLE_GV(HeVAL(entry));
79072805 8722 sv = GvSV(gv);
e203899d
NC
8723 if (sv) {
8724 if (SvTHINKFIRST(sv)) {
8725 if (!SvREADONLY(sv) && SvROK(sv))
8726 sv_unref(sv);
8727 /* XXX Is this continue a bug? Why should THINKFIRST
8728 exempt us from resetting arrays and hashes? */
8729 continue;
8730 }
8731 SvOK_off(sv);
8732 if (SvTYPE(sv) >= SVt_PV) {
8733 SvCUR_set(sv, 0);
bd61b366 8734 if (SvPVX_const(sv) != NULL)
e203899d
NC
8735 *SvPVX(sv) = '\0';
8736 SvTAINT(sv);
8737 }
79072805
LW
8738 }
8739 if (GvAV(gv)) {
8740 av_clear(GvAV(gv));
8741 }
bfcb3514 8742 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
b0269e46
AB
8743#if defined(VMS)
8744 Perl_die(aTHX_ "Can't reset %%ENV on this system");
8745#else /* ! VMS */
463ee0b2 8746 hv_clear(GvHV(gv));
b0269e46
AB
8747# if defined(USE_ENVIRON_ARRAY)
8748 if (gv == PL_envgv)
8749 my_clearenv();
8750# endif /* USE_ENVIRON_ARRAY */
8751#endif /* VMS */
79072805
LW
8752 }
8753 }
8754 }
8755 }
8756}
8757
645c22ef
DM
8758/*
8759=for apidoc sv_2io
8760
8761Using various gambits, try to get an IO from an SV: the IO slot if its a
8762GV; or the recursive result if we're an RV; or the IO slot of the symbol
8763named after the PV if we're a string.
8764
8765=cut
8766*/
8767
46fc3d4c 8768IO*
23f13727 8769Perl_sv_2io(pTHX_ SV *const sv)
46fc3d4c 8770{
8771 IO* io;
8772 GV* gv;
8773
7918f24d
NC
8774 PERL_ARGS_ASSERT_SV_2IO;
8775
46fc3d4c 8776 switch (SvTYPE(sv)) {
8777 case SVt_PVIO:
a45c7426 8778 io = MUTABLE_IO(sv);
46fc3d4c 8779 break;
8780 case SVt_PVGV:
13be902c 8781 case SVt_PVLV:
6e592b3a 8782 if (isGV_with_GP(sv)) {
159b6efe 8783 gv = MUTABLE_GV(sv);
6e592b3a
BM
8784 io = GvIO(gv);
8785 if (!io)
8786 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8787 break;
8788 }
8789 /* FALL THROUGH */
46fc3d4c 8790 default:
8791 if (!SvOK(sv))
cea2e8a9 8792 Perl_croak(aTHX_ PL_no_usym, "filehandle");
46fc3d4c 8793 if (SvROK(sv))
8794 return sv_2io(SvRV(sv));
f776e3cd 8795 gv = gv_fetchsv(sv, 0, SVt_PVIO);
46fc3d4c 8796 if (gv)
8797 io = GvIO(gv);
8798 else
8799 io = 0;
8800 if (!io)
be2597df 8801 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
46fc3d4c 8802 break;
8803 }
8804 return io;
8805}
8806
645c22ef
DM
8807/*
8808=for apidoc sv_2cv
8809
8810Using various gambits, try to get a CV from an SV; in addition, try if
8811possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8e324704 8812The flags in C<lref> are passed to gv_fetchsv.
645c22ef
DM
8813
8814=cut
8815*/
8816
79072805 8817CV *
23f13727 8818Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
79072805 8819{
27da23d5 8820 dVAR;
a0714e2c 8821 GV *gv = NULL;
601f1833 8822 CV *cv = NULL;
79072805 8823
7918f24d
NC
8824 PERL_ARGS_ASSERT_SV_2CV;
8825
85dec29a
NC
8826 if (!sv) {
8827 *st = NULL;
8828 *gvp = NULL;
8829 return NULL;
8830 }
79072805 8831 switch (SvTYPE(sv)) {
79072805
LW
8832 case SVt_PVCV:
8833 *st = CvSTASH(sv);
a0714e2c 8834 *gvp = NULL;
ea726b52 8835 return MUTABLE_CV(sv);
79072805
LW
8836 case SVt_PVHV:
8837 case SVt_PVAV:
ef58ba18 8838 *st = NULL;
a0714e2c 8839 *gvp = NULL;
601f1833 8840 return NULL;
79072805 8841 default:
ff55a019 8842 SvGETMAGIC(sv);
a0d0e21e 8843 if (SvROK(sv)) {
93d7320b
DM
8844 if (SvAMAGIC(sv))
8845 sv = amagic_deref_call(sv, to_cv_amg);
8897dcaa
NC
8846 /* At this point I'd like to do SPAGAIN, but really I need to
8847 force it upon my callers. Hmmm. This is a mess... */
f5284f61 8848
62f274bf
GS
8849 sv = SvRV(sv);
8850 if (SvTYPE(sv) == SVt_PVCV) {
ea726b52 8851 cv = MUTABLE_CV(sv);
a0714e2c 8852 *gvp = NULL;
62f274bf
GS
8853 *st = CvSTASH(cv);
8854 return cv;
8855 }
6e592b3a 8856 else if(isGV_with_GP(sv))
159b6efe 8857 gv = MUTABLE_GV(sv);
62f274bf 8858 else
cea2e8a9 8859 Perl_croak(aTHX_ "Not a subroutine reference");
a0d0e21e 8860 }
6e592b3a 8861 else if (isGV_with_GP(sv)) {
159b6efe 8862 gv = MUTABLE_GV(sv);
9d0f7ed7 8863 }
ff55a019 8864 else {
77cb3b01 8865 gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
ff55a019 8866 }
79072805 8867 *gvp = gv;
ef58ba18
NC
8868 if (!gv) {
8869 *st = NULL;
601f1833 8870 return NULL;
ef58ba18 8871 }
e26df76a 8872 /* Some flags to gv_fetchsv mean don't really create the GV */
6e592b3a 8873 if (!isGV_with_GP(gv)) {
e26df76a
NC
8874 *st = NULL;
8875 return NULL;
8876 }
79072805 8877 *st = GvESTASH(gv);
9da346da 8878 if (lref & ~GV_ADDMG && !GvCVu(gv)) {
4633a7c4 8879 SV *tmpsv;
748a9306 8880 ENTER;
561b68a9 8881 tmpsv = newSV(0);
bd61b366 8882 gv_efullname3(tmpsv, gv, NULL);
f6ec51f7
GS
8883 /* XXX this is probably not what they think they're getting.
8884 * It has the same effect as "sub name;", i.e. just a forward
8885 * declaration! */
774d564b 8886 newSUB(start_subparse(FALSE, 0),
4633a7c4 8887 newSVOP(OP_CONST, 0, tmpsv),
5f66b61c 8888 NULL, NULL);
748a9306 8889 LEAVE;
8ebc5c01 8890 if (!GvCVu(gv))
35c1215d 8891 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
4052d21c 8892 SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8990e307 8893 }
8ebc5c01 8894 return GvCVu(gv);
79072805
LW
8895 }
8896}
8897
c461cf8f
JH
8898/*
8899=for apidoc sv_true
8900
8901Returns true if the SV has a true value by Perl's rules.
645c22ef
DM
8902Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8903instead use an in-line version.
c461cf8f
JH
8904
8905=cut
8906*/
8907
79072805 8908I32
23f13727 8909Perl_sv_true(pTHX_ register SV *const sv)
79072805 8910{
8990e307
LW
8911 if (!sv)
8912 return 0;
79072805 8913 if (SvPOK(sv)) {
823a54a3
AL
8914 register const XPV* const tXpv = (XPV*)SvANY(sv);
8915 if (tXpv &&
c2f1de04 8916 (tXpv->xpv_cur > 1 ||
339049b0 8917 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
79072805
LW
8918 return 1;
8919 else
8920 return 0;
8921 }
8922 else {
8923 if (SvIOK(sv))
463ee0b2 8924 return SvIVX(sv) != 0;
79072805
LW
8925 else {
8926 if (SvNOK(sv))
463ee0b2 8927 return SvNVX(sv) != 0.0;
79072805 8928 else
463ee0b2 8929 return sv_2bool(sv);
79072805
LW
8930 }
8931 }
8932}
79072805 8933
645c22ef 8934/*
c461cf8f
JH
8935=for apidoc sv_pvn_force
8936
8937Get a sensible string out of the SV somehow.
645c22ef
DM
8938A private implementation of the C<SvPV_force> macro for compilers which
8939can't cope with complex macro expressions. Always use the macro instead.
c461cf8f 8940
8d6d96c1
HS
8941=for apidoc sv_pvn_force_flags
8942
8943Get a sensible string out of the SV somehow.
8944If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8945appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8946implemented in terms of this function.
645c22ef
DM
8947You normally want to use the various wrapper macros instead: see
8948C<SvPV_force> and C<SvPV_force_nomg>
8d6d96c1
HS
8949
8950=cut
8951*/
8952
8953char *
12964ddd 8954Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 8955{
97aff369 8956 dVAR;
7918f24d
NC
8957
8958 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8959
6fc92669 8960 if (SvTHINKFIRST(sv) && !SvROK(sv))
765f542d 8961 sv_force_normal_flags(sv, 0);
1c846c1f 8962
a0d0e21e 8963 if (SvPOK(sv)) {
13c5b33c
NC
8964 if (lp)
8965 *lp = SvCUR(sv);
a0d0e21e
LW
8966 }
8967 else {
a3b680e6 8968 char *s;
13c5b33c
NC
8969 STRLEN len;
8970
4d84ee25 8971 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
b64e5050 8972 const char * const ref = sv_reftype(sv,0);
4d84ee25
NC
8973 if (PL_op)
8974 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
94bbb3f4 8975 ref, OP_DESC(PL_op));
4d84ee25 8976 else
b64e5050 8977 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
4d84ee25 8978 }
1f257c95
NC
8979 if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8980 || isGV_with_GP(sv))
22e74366 8981 /* diag_listed_as: Can't coerce %s to %s in %s */
cea2e8a9 8982 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
94bbb3f4 8983 OP_DESC(PL_op));
b64e5050 8984 s = sv_2pv_flags(sv, &len, flags);
13c5b33c
NC
8985 if (lp)
8986 *lp = len;
8987
3f7c398e 8988 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
a0d0e21e
LW
8989 if (SvROK(sv))
8990 sv_unref(sv);
862a34c6 8991 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
a0d0e21e 8992 SvGROW(sv, len + 1);
706aa1c9 8993 Move(s,SvPVX(sv),len,char);
a0d0e21e 8994 SvCUR_set(sv, len);
97a130b8 8995 SvPVX(sv)[len] = '\0';
a0d0e21e
LW
8996 }
8997 if (!SvPOK(sv)) {
8998 SvPOK_on(sv); /* validate pointer */
8999 SvTAINT(sv);
1d7c1841 9000 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 9001 PTR2UV(sv),SvPVX_const(sv)));
a0d0e21e
LW
9002 }
9003 }
4d84ee25 9004 return SvPVX_mutable(sv);
a0d0e21e
LW
9005}
9006
645c22ef 9007/*
645c22ef
DM
9008=for apidoc sv_pvbyten_force
9009
0feed65a 9010The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
645c22ef
DM
9011
9012=cut
9013*/
9014
7340a771 9015char *
12964ddd 9016Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 9017{
7918f24d
NC
9018 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9019
46ec2f14 9020 sv_pvn_force(sv,lp);
ffebcc3e 9021 sv_utf8_downgrade(sv,0);
46ec2f14
TS
9022 *lp = SvCUR(sv);
9023 return SvPVX(sv);
7340a771
GS
9024}
9025
645c22ef 9026/*
c461cf8f
JH
9027=for apidoc sv_pvutf8n_force
9028
0feed65a 9029The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
c461cf8f
JH
9030
9031=cut
9032*/
9033
7340a771 9034char *
12964ddd 9035Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 9036{
7918f24d
NC
9037 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9038
46ec2f14 9039 sv_pvn_force(sv,lp);
560a288e 9040 sv_utf8_upgrade(sv);
46ec2f14
TS
9041 *lp = SvCUR(sv);
9042 return SvPVX(sv);
7340a771
GS
9043}
9044
c461cf8f 9045/*
cba0b539 9046=for apidoc sv_reftype
05c0d6bb 9047
cba0b539 9048Returns a string describing what the SV is a reference to.
c461cf8f
JH
9049
9050=cut
9051*/
9052
2b388283 9053const char *
cba0b539 9054Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
a0d0e21e 9055{
cba0b539 9056 PERL_ARGS_ASSERT_SV_REFTYPE;
7918f24d 9057
cba0b539 9058 /* The fact that I don't need to downcast to char * everywhere, only in ?:
07409e01 9059 inside return suggests a const propagation bug in g++. */
c86bf373 9060 if (ob && SvOBJECT(sv)) {
1b6737cc 9061 char * const name = HvNAME_get(SvSTASH(sv));
cba0b539 9062 return name ? name : (char *) "__ANON__";
c86bf373 9063 }
a0d0e21e
LW
9064 else {
9065 switch (SvTYPE(sv)) {
9066 case SVt_NULL:
9067 case SVt_IV:
9068 case SVt_NV:
a0d0e21e
LW
9069 case SVt_PV:
9070 case SVt_PVIV:
9071 case SVt_PVNV:
9072 case SVt_PVMG:
1cb0ed9b 9073 if (SvVOK(sv))
cba0b539 9074 return "VSTRING";
a0d0e21e 9075 if (SvROK(sv))
cba0b539 9076 return "REF";
a0d0e21e 9077 else
cba0b539
FR
9078 return "SCALAR";
9079
9080 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
9081 /* tied lvalues should appear to be
486ec47a 9082 * scalars for backwards compatibility */
cba0b539
FR
9083 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9084 ? "SCALAR" : "LVALUE");
9085 case SVt_PVAV: return "ARRAY";
9086 case SVt_PVHV: return "HASH";
9087 case SVt_PVCV: return "CODE";
9088 case SVt_PVGV: return (char *) (isGV_with_GP(sv)
9089 ? "GLOB" : "SCALAR");
9090 case SVt_PVFM: return "FORMAT";
9091 case SVt_PVIO: return "IO";
9092 case SVt_BIND: return "BIND";
9093 case SVt_REGEXP: return "REGEXP";
9094 default: return "UNKNOWN";
a0d0e21e
LW
9095 }
9096 }
9097}
9098
954c1994
GS
9099/*
9100=for apidoc sv_isobject
9101
9102Returns a boolean indicating whether the SV is an RV pointing to a blessed
9103object. If the SV is not an RV, or if the object is not blessed, then this
9104will return false.
9105
9106=cut
9107*/
9108
463ee0b2 9109int
864dbfa3 9110Perl_sv_isobject(pTHX_ SV *sv)
85e6fe83 9111{
68dc0745 9112 if (!sv)
9113 return 0;
5b295bef 9114 SvGETMAGIC(sv);
85e6fe83
LW
9115 if (!SvROK(sv))
9116 return 0;
daba3364 9117 sv = SvRV(sv);
85e6fe83
LW
9118 if (!SvOBJECT(sv))
9119 return 0;
9120 return 1;
9121}
9122
954c1994
GS
9123/*
9124=for apidoc sv_isa
9125
9126Returns a boolean indicating whether the SV is blessed into the specified
9127class. This does not check for subtypes; use C<sv_derived_from> to verify
9128an inheritance relationship.
9129
9130=cut
9131*/
9132
85e6fe83 9133int
12964ddd 9134Perl_sv_isa(pTHX_ SV *sv, const char *const name)
463ee0b2 9135{
bfcb3514 9136 const char *hvname;
7918f24d
NC
9137
9138 PERL_ARGS_ASSERT_SV_ISA;
9139
68dc0745 9140 if (!sv)
9141 return 0;
5b295bef 9142 SvGETMAGIC(sv);
ed6116ce 9143 if (!SvROK(sv))
463ee0b2 9144 return 0;
daba3364 9145 sv = SvRV(sv);
ed6116ce 9146 if (!SvOBJECT(sv))
463ee0b2 9147 return 0;
bfcb3514
NC
9148 hvname = HvNAME_get(SvSTASH(sv));
9149 if (!hvname)
e27ad1f2 9150 return 0;
463ee0b2 9151
bfcb3514 9152 return strEQ(hvname, name);
463ee0b2
LW
9153}
9154
954c1994
GS
9155/*
9156=for apidoc newSVrv
9157
9158Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
9159it will be upgraded to one. If C<classname> is non-null then the new SV will
9160be blessed in the specified package. The new SV is returned and its
9161reference count is 1.
9162
9163=cut
9164*/
9165
463ee0b2 9166SV*
12964ddd 9167Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
463ee0b2 9168{
97aff369 9169 dVAR;
463ee0b2
LW
9170 SV *sv;
9171
7918f24d
NC
9172 PERL_ARGS_ASSERT_NEWSVRV;
9173
4561caa4 9174 new_SV(sv);
51cf62d8 9175
765f542d 9176 SV_CHECK_THINKFIRST_COW_DROP(rv);
52944de8 9177 (void)SvAMAGIC_off(rv);
51cf62d8 9178
0199fce9 9179 if (SvTYPE(rv) >= SVt_PVMG) {
a3b680e6 9180 const U32 refcnt = SvREFCNT(rv);
0199fce9
JD
9181 SvREFCNT(rv) = 0;
9182 sv_clear(rv);
9183 SvFLAGS(rv) = 0;
9184 SvREFCNT(rv) = refcnt;
0199fce9 9185
4df7f6af 9186 sv_upgrade(rv, SVt_IV);
dc5494d2
NC
9187 } else if (SvROK(rv)) {
9188 SvREFCNT_dec(SvRV(rv));
43230e26
NC
9189 } else {
9190 prepare_SV_for_RV(rv);
0199fce9 9191 }
51cf62d8 9192
0c34ef67 9193 SvOK_off(rv);
b162af07 9194 SvRV_set(rv, sv);
ed6116ce 9195 SvROK_on(rv);
463ee0b2 9196
a0d0e21e 9197 if (classname) {
da51bb9b 9198 HV* const stash = gv_stashpv(classname, GV_ADD);
a0d0e21e
LW
9199 (void)sv_bless(rv, stash);
9200 }
9201 return sv;
9202}
9203
954c1994
GS
9204/*
9205=for apidoc sv_setref_pv
9206
9207Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
9208argument will be upgraded to an RV. That RV will be modified to point to
9209the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9210into the SV. The C<classname> argument indicates the package for the
bd61b366 9211blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 9212will have a reference count of 1, and the RV will be returned.
954c1994
GS
9213
9214Do not use with other Perl types such as HV, AV, SV, CV, because those
9215objects will become corrupted by the pointer copy process.
9216
9217Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9218
9219=cut
9220*/
9221
a0d0e21e 9222SV*
12964ddd 9223Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
a0d0e21e 9224{
97aff369 9225 dVAR;
7918f24d
NC
9226
9227 PERL_ARGS_ASSERT_SV_SETREF_PV;
9228
189b2af5 9229 if (!pv) {
3280af22 9230 sv_setsv(rv, &PL_sv_undef);
189b2af5
GS
9231 SvSETMAGIC(rv);
9232 }
a0d0e21e 9233 else
56431972 9234 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
a0d0e21e
LW
9235 return rv;
9236}
9237
954c1994
GS
9238/*
9239=for apidoc sv_setref_iv
9240
9241Copies an integer into a new SV, optionally blessing the SV. The C<rv>
9242argument will be upgraded to an RV. That RV will be modified to point to
9243the new SV. The C<classname> argument indicates the package for the
bd61b366 9244blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 9245will have a reference count of 1, and the RV will be returned.
954c1994
GS
9246
9247=cut
9248*/
9249
a0d0e21e 9250SV*
12964ddd 9251Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
a0d0e21e 9252{
7918f24d
NC
9253 PERL_ARGS_ASSERT_SV_SETREF_IV;
9254
a0d0e21e
LW
9255 sv_setiv(newSVrv(rv,classname), iv);
9256 return rv;
9257}
9258
954c1994 9259/*
e1c57cef
JH
9260=for apidoc sv_setref_uv
9261
9262Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
9263argument will be upgraded to an RV. That RV will be modified to point to
9264the new SV. The C<classname> argument indicates the package for the
bd61b366 9265blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 9266will have a reference count of 1, and the RV will be returned.
e1c57cef
JH
9267
9268=cut
9269*/
9270
9271SV*
12964ddd 9272Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
e1c57cef 9273{
7918f24d
NC
9274 PERL_ARGS_ASSERT_SV_SETREF_UV;
9275
e1c57cef
JH
9276 sv_setuv(newSVrv(rv,classname), uv);
9277 return rv;
9278}
9279
9280/*
954c1994
GS
9281=for apidoc sv_setref_nv
9282
9283Copies a double into a new SV, optionally blessing the SV. The C<rv>
9284argument will be upgraded to an RV. That RV will be modified to point to
9285the new SV. The C<classname> argument indicates the package for the
bd61b366 9286blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 9287will have a reference count of 1, and the RV will be returned.
954c1994
GS
9288
9289=cut
9290*/
9291
a0d0e21e 9292SV*
12964ddd 9293Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
a0d0e21e 9294{
7918f24d
NC
9295 PERL_ARGS_ASSERT_SV_SETREF_NV;
9296
a0d0e21e
LW
9297 sv_setnv(newSVrv(rv,classname), nv);
9298 return rv;
9299}
463ee0b2 9300
954c1994
GS
9301/*
9302=for apidoc sv_setref_pvn
9303
9304Copies a string into a new SV, optionally blessing the SV. The length of the
9305string must be specified with C<n>. The C<rv> argument will be upgraded to
9306an RV. That RV will be modified to point to the new SV. The C<classname>
9307argument indicates the package for the blessing. Set C<classname> to
bd61b366 9308C<NULL> to avoid the blessing. The new SV will have a reference count
d34c2299 9309of 1, and the RV will be returned.
954c1994
GS
9310
9311Note that C<sv_setref_pv> copies the pointer while this copies the string.
9312
9313=cut
9314*/
9315
a0d0e21e 9316SV*
12964ddd
SS
9317Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9318 const char *const pv, const STRLEN n)
a0d0e21e 9319{
7918f24d
NC
9320 PERL_ARGS_ASSERT_SV_SETREF_PVN;
9321
a0d0e21e 9322 sv_setpvn(newSVrv(rv,classname), pv, n);
463ee0b2
LW
9323 return rv;
9324}
9325
954c1994
GS
9326/*
9327=for apidoc sv_bless
9328
9329Blesses an SV into a specified package. The SV must be an RV. The package
9330must be designated by its stash (see C<gv_stashpv()>). The reference count
9331of the SV is unaffected.
9332
9333=cut
9334*/
9335
a0d0e21e 9336SV*
12964ddd 9337Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
a0d0e21e 9338{
97aff369 9339 dVAR;
76e3520e 9340 SV *tmpRef;
7918f24d
NC
9341
9342 PERL_ARGS_ASSERT_SV_BLESS;
9343
a0d0e21e 9344 if (!SvROK(sv))
cea2e8a9 9345 Perl_croak(aTHX_ "Can't bless non-reference value");
76e3520e
GS
9346 tmpRef = SvRV(sv);
9347 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
e0744413
NC
9348 if (SvIsCOW(tmpRef))
9349 sv_force_normal_flags(tmpRef, 0);
76e3520e 9350 if (SvREADONLY(tmpRef))
6ad8f254 9351 Perl_croak_no_modify(aTHX);
76e3520e
GS
9352 if (SvOBJECT(tmpRef)) {
9353 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 9354 --PL_sv_objcount;
76e3520e 9355 SvREFCNT_dec(SvSTASH(tmpRef));
2e3febc6 9356 }
a0d0e21e 9357 }
76e3520e
GS
9358 SvOBJECT_on(tmpRef);
9359 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 9360 ++PL_sv_objcount;
862a34c6 9361 SvUPGRADE(tmpRef, SVt_PVMG);
85fbaab2 9362 SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
a0d0e21e 9363
2e3febc6
CS
9364 if (Gv_AMG(stash))
9365 SvAMAGIC_on(sv);
9366 else
52944de8 9367 (void)SvAMAGIC_off(sv);
a0d0e21e 9368
1edbfb88
AB
9369 if(SvSMAGICAL(tmpRef))
9370 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9371 mg_set(tmpRef);
9372
9373
ecdeb87c 9374
a0d0e21e
LW
9375 return sv;
9376}
9377
13be902c
FC
9378/* Downgrades a PVGV to a PVMG. If it’s actually a PVLV, we leave the type
9379 * as it is after unglobbing it.
645c22ef
DM
9380 */
9381
76e3520e 9382STATIC void
89e38212 9383S_sv_unglob(pTHX_ SV *const sv)
a0d0e21e 9384{
97aff369 9385 dVAR;
850fabdf 9386 void *xpvmg;
dd69841b 9387 HV *stash;
b37c2d43 9388 SV * const temp = sv_newmortal();
850fabdf 9389
7918f24d
NC
9390 PERL_ARGS_ASSERT_SV_UNGLOB;
9391
13be902c 9392 assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
a0d0e21e 9393 SvFAKE_off(sv);
159b6efe 9394 gv_efullname3(temp, MUTABLE_GV(sv), "*");
180488f8 9395
f7877b28 9396 if (GvGP(sv)) {
159b6efe
NC
9397 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9398 && HvNAME_get(stash))
dd69841b 9399 mro_method_changed_in(stash);
159b6efe 9400 gp_free(MUTABLE_GV(sv));
f7877b28 9401 }
e826b3c7 9402 if (GvSTASH(sv)) {
daba3364 9403 sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
5c284bb0 9404 GvSTASH(sv) = NULL;
e826b3c7 9405 }
a5f75d66 9406 GvMULTI_off(sv);
acda4c6a
NC
9407 if (GvNAME_HEK(sv)) {
9408 unshare_hek(GvNAME_HEK(sv));
9409 }
2e5b91de 9410 isGV_with_GP_off(sv);
850fabdf 9411
13be902c
FC
9412 if(SvTYPE(sv) == SVt_PVGV) {
9413 /* need to keep SvANY(sv) in the right arena */
9414 xpvmg = new_XPVMG();
9415 StructCopy(SvANY(sv), xpvmg, XPVMG);
9416 del_XPVGV(SvANY(sv));
9417 SvANY(sv) = xpvmg;
850fabdf 9418
13be902c
FC
9419 SvFLAGS(sv) &= ~SVTYPEMASK;
9420 SvFLAGS(sv) |= SVt_PVMG;
9421 }
180488f8
NC
9422
9423 /* Intentionally not calling any local SET magic, as this isn't so much a
9424 set operation as merely an internal storage change. */
9425 sv_setsv_flags(sv, temp, 0);
a0d0e21e
LW
9426}
9427
954c1994 9428/*
840a7b70 9429=for apidoc sv_unref_flags
954c1994
GS
9430
9431Unsets the RV status of the SV, and decrements the reference count of
9432whatever was being referenced by the RV. This can almost be thought of
840a7b70
IZ
9433as a reversal of C<newSVrv>. The C<cflags> argument can contain
9434C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9435(otherwise the decrementing is conditional on the reference count being
9436different from one or the reference being a readonly SV).
7889fe52 9437See C<SvROK_off>.
954c1994
GS
9438
9439=cut
9440*/
9441
ed6116ce 9442void
89e38212 9443Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
ed6116ce 9444{
b64e5050 9445 SV* const target = SvRV(ref);
810b8aa5 9446
7918f24d
NC
9447 PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9448
e15faf7d
NC
9449 if (SvWEAKREF(ref)) {
9450 sv_del_backref(target, ref);
9451 SvWEAKREF_off(ref);
9452 SvRV_set(ref, NULL);
810b8aa5
GS
9453 return;
9454 }
e15faf7d
NC
9455 SvRV_set(ref, NULL);
9456 SvROK_off(ref);
9457 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
04ca4930 9458 assigned to as BEGIN {$a = \"Foo"} will fail. */
e15faf7d
NC
9459 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9460 SvREFCNT_dec(target);
840a7b70 9461 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
e15faf7d 9462 sv_2mortal(target); /* Schedule for freeing later */
ed6116ce 9463}
8990e307 9464
840a7b70 9465/*
645c22ef
DM
9466=for apidoc sv_untaint
9467
9468Untaint an SV. Use C<SvTAINTED_off> instead.
dff47061 9469
645c22ef
DM
9470=cut
9471*/
9472
bbce6d69 9473void
89e38212 9474Perl_sv_untaint(pTHX_ SV *const sv)
bbce6d69 9475{
7918f24d
NC
9476 PERL_ARGS_ASSERT_SV_UNTAINT;
9477
13f57bf8 9478 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
b64e5050 9479 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
36477c24 9480 if (mg)
565764a8 9481 mg->mg_len &= ~1;
36477c24 9482 }
bbce6d69 9483}
9484
645c22ef
DM
9485/*
9486=for apidoc sv_tainted
9487
9488Test an SV for taintedness. Use C<SvTAINTED> instead.
dff47061 9489
645c22ef
DM
9490=cut
9491*/
9492
bbce6d69 9493bool
89e38212 9494Perl_sv_tainted(pTHX_ SV *const sv)
bbce6d69 9495{
7918f24d
NC
9496 PERL_ARGS_ASSERT_SV_TAINTED;
9497
13f57bf8 9498 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
823a54a3 9499 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
2ddb8a4f 9500 if (mg && (mg->mg_len & 1) )
36477c24 9501 return TRUE;
9502 }
9503 return FALSE;
bbce6d69 9504}
9505
09540bc3
JH
9506/*
9507=for apidoc sv_setpviv
9508
9509Copies an integer into the given SV, also updating its string value.
9510Does not handle 'set' magic. See C<sv_setpviv_mg>.
9511
9512=cut
9513*/
9514
9515void
89e38212 9516Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
09540bc3
JH
9517{
9518 char buf[TYPE_CHARS(UV)];
9519 char *ebuf;
b64e5050 9520 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
09540bc3 9521
7918f24d
NC
9522 PERL_ARGS_ASSERT_SV_SETPVIV;
9523
09540bc3
JH
9524 sv_setpvn(sv, ptr, ebuf - ptr);
9525}
9526
9527/*
9528=for apidoc sv_setpviv_mg
9529
9530Like C<sv_setpviv>, but also handles 'set' magic.
9531
9532=cut
9533*/
9534
9535void
89e38212 9536Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
09540bc3 9537{
7918f24d
NC
9538 PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9539
df7eb254 9540 sv_setpviv(sv, iv);
09540bc3
JH
9541 SvSETMAGIC(sv);
9542}
9543
cea2e8a9 9544#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
9545
9546/* pTHX_ magic can't cope with varargs, so this is a no-context
9547 * version of the main function, (which may itself be aliased to us).
9548 * Don't access this version directly.
9549 */
9550
cea2e8a9 9551void
89e38212 9552Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9553{
9554 dTHX;
9555 va_list args;
7918f24d
NC
9556
9557 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9558
cea2e8a9 9559 va_start(args, pat);
c5be433b 9560 sv_vsetpvf(sv, pat, &args);
cea2e8a9
GS
9561 va_end(args);
9562}
9563
645c22ef
DM
9564/* pTHX_ magic can't cope with varargs, so this is a no-context
9565 * version of the main function, (which may itself be aliased to us).
9566 * Don't access this version directly.
9567 */
cea2e8a9
GS
9568
9569void
89e38212 9570Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9571{
9572 dTHX;
9573 va_list args;
7918f24d
NC
9574
9575 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9576
cea2e8a9 9577 va_start(args, pat);
c5be433b 9578 sv_vsetpvf_mg(sv, pat, &args);
cea2e8a9 9579 va_end(args);
cea2e8a9
GS
9580}
9581#endif
9582
954c1994
GS
9583/*
9584=for apidoc sv_setpvf
9585
bffc3d17
SH
9586Works like C<sv_catpvf> but copies the text into the SV instead of
9587appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
954c1994
GS
9588
9589=cut
9590*/
9591
46fc3d4c 9592void
89e38212 9593Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 9594{
9595 va_list args;
7918f24d
NC
9596
9597 PERL_ARGS_ASSERT_SV_SETPVF;
9598
46fc3d4c 9599 va_start(args, pat);
c5be433b 9600 sv_vsetpvf(sv, pat, &args);
46fc3d4c 9601 va_end(args);
9602}
9603
bffc3d17
SH
9604/*
9605=for apidoc sv_vsetpvf
9606
9607Works like C<sv_vcatpvf> but copies the text into the SV instead of
9608appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
9609
9610Usually used via its frontend C<sv_setpvf>.
9611
9612=cut
9613*/
645c22ef 9614
c5be433b 9615void
89e38212 9616Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9617{
7918f24d
NC
9618 PERL_ARGS_ASSERT_SV_VSETPVF;
9619
4608196e 9620 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b 9621}
ef50df4b 9622
954c1994
GS
9623/*
9624=for apidoc sv_setpvf_mg
9625
9626Like C<sv_setpvf>, but also handles 'set' magic.
9627
9628=cut
9629*/
9630
ef50df4b 9631void
89e38212 9632Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
9633{
9634 va_list args;
7918f24d
NC
9635
9636 PERL_ARGS_ASSERT_SV_SETPVF_MG;
9637
ef50df4b 9638 va_start(args, pat);
c5be433b 9639 sv_vsetpvf_mg(sv, pat, &args);
ef50df4b 9640 va_end(args);
c5be433b
GS
9641}
9642
bffc3d17
SH
9643/*
9644=for apidoc sv_vsetpvf_mg
9645
9646Like C<sv_vsetpvf>, but also handles 'set' magic.
9647
9648Usually used via its frontend C<sv_setpvf_mg>.
9649
9650=cut
9651*/
645c22ef 9652
c5be433b 9653void
89e38212 9654Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9655{
7918f24d
NC
9656 PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9657
4608196e 9658 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9659 SvSETMAGIC(sv);
9660}
9661
cea2e8a9 9662#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
9663
9664/* pTHX_ magic can't cope with varargs, so this is a no-context
9665 * version of the main function, (which may itself be aliased to us).
9666 * Don't access this version directly.
9667 */
9668
cea2e8a9 9669void
89e38212 9670Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9671{
9672 dTHX;
9673 va_list args;
7918f24d
NC
9674
9675 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9676
cea2e8a9 9677 va_start(args, pat);
c5be433b 9678 sv_vcatpvf(sv, pat, &args);
cea2e8a9
GS
9679 va_end(args);
9680}
9681
645c22ef
DM
9682/* pTHX_ magic can't cope with varargs, so this is a no-context
9683 * version of the main function, (which may itself be aliased to us).
9684 * Don't access this version directly.
9685 */
9686
cea2e8a9 9687void
89e38212 9688Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9689{
9690 dTHX;
9691 va_list args;
7918f24d
NC
9692
9693 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9694
cea2e8a9 9695 va_start(args, pat);
c5be433b 9696 sv_vcatpvf_mg(sv, pat, &args);
cea2e8a9 9697 va_end(args);
cea2e8a9
GS
9698}
9699#endif
9700
954c1994
GS
9701/*
9702=for apidoc sv_catpvf
9703
d5ce4a7c
GA
9704Processes its arguments like C<sprintf> and appends the formatted
9705output to an SV. If the appended data contains "wide" characters
9706(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9707and characters >255 formatted with %c), the original SV might get
bffc3d17 9708upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
cdd94ca7
NC
9709C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9710valid UTF-8; if the original SV was bytes, the pattern should be too.
954c1994 9711
d5ce4a7c 9712=cut */
954c1994 9713
46fc3d4c 9714void
66ceb532 9715Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 9716{
9717 va_list args;
7918f24d
NC
9718
9719 PERL_ARGS_ASSERT_SV_CATPVF;
9720
46fc3d4c 9721 va_start(args, pat);
c5be433b 9722 sv_vcatpvf(sv, pat, &args);
46fc3d4c 9723 va_end(args);
9724}
9725
bffc3d17
SH
9726/*
9727=for apidoc sv_vcatpvf
9728
9729Processes its arguments like C<vsprintf> and appends the formatted output
9730to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
9731
9732Usually used via its frontend C<sv_catpvf>.
9733
9734=cut
9735*/
645c22ef 9736
ef50df4b 9737void
66ceb532 9738Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9739{
7918f24d
NC
9740 PERL_ARGS_ASSERT_SV_VCATPVF;
9741
4608196e 9742 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
9743}
9744
954c1994
GS
9745/*
9746=for apidoc sv_catpvf_mg
9747
9748Like C<sv_catpvf>, but also handles 'set' magic.
9749
9750=cut
9751*/
9752
c5be433b 9753void
66ceb532 9754Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
9755{
9756 va_list args;
7918f24d
NC
9757
9758 PERL_ARGS_ASSERT_SV_CATPVF_MG;
9759
ef50df4b 9760 va_start(args, pat);
c5be433b 9761 sv_vcatpvf_mg(sv, pat, &args);
ef50df4b 9762 va_end(args);
c5be433b
GS
9763}
9764
bffc3d17
SH
9765/*
9766=for apidoc sv_vcatpvf_mg
9767
9768Like C<sv_vcatpvf>, but also handles 'set' magic.
9769
9770Usually used via its frontend C<sv_catpvf_mg>.
9771
9772=cut
9773*/
645c22ef 9774
c5be433b 9775void
66ceb532 9776Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9777{
7918f24d
NC
9778 PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9779
4608196e 9780 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9781 SvSETMAGIC(sv);
9782}
9783
954c1994
GS
9784/*
9785=for apidoc sv_vsetpvfn
9786
bffc3d17 9787Works like C<sv_vcatpvfn> but copies the text into the SV instead of
954c1994
GS
9788appending it.
9789
bffc3d17 9790Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
645c22ef 9791
954c1994
GS
9792=cut
9793*/
9794
46fc3d4c 9795void
66ceb532
SS
9796Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9797 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9798{
7918f24d
NC
9799 PERL_ARGS_ASSERT_SV_VSETPVFN;
9800
76f68e9b 9801 sv_setpvs(sv, "");
7d5ea4e7 9802 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
46fc3d4c 9803}
9804
7baa4690
HS
9805
9806/*
9807 * Warn of missing argument to sprintf, and then return a defined value
9808 * to avoid inappropriate "use of uninit" warnings [perl #71000].
9809 */
9810#define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9811STATIC SV*
81ae3cde 9812S_vcatpvfn_missing_argument(pTHX) {
7baa4690
HS
9813 if (ckWARN(WARN_MISSING)) {
9814 Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9815 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9816 }
9817 return &PL_sv_no;
9818}
9819
9820
2d00ba3b 9821STATIC I32
66ceb532 9822S_expect_number(pTHX_ char **const pattern)
211dfcf1 9823{
97aff369 9824 dVAR;
211dfcf1 9825 I32 var = 0;
7918f24d
NC
9826
9827 PERL_ARGS_ASSERT_EXPECT_NUMBER;
9828
211dfcf1
HS
9829 switch (**pattern) {
9830 case '1': case '2': case '3':
9831 case '4': case '5': case '6':
9832 case '7': case '8': case '9':
2fba7546
GA
9833 var = *(*pattern)++ - '0';
9834 while (isDIGIT(**pattern)) {
5f66b61c 9835 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
2fba7546 9836 if (tmp < var)
94bbb3f4 9837 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
2fba7546
GA
9838 var = tmp;
9839 }
211dfcf1
HS
9840 }
9841 return var;
9842}
211dfcf1 9843
c445ea15 9844STATIC char *
66ceb532 9845S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
4151a5fe 9846{
a3b680e6 9847 const int neg = nv < 0;
4151a5fe 9848 UV uv;
4151a5fe 9849
7918f24d
NC
9850 PERL_ARGS_ASSERT_F0CONVERT;
9851
4151a5fe
IZ
9852 if (neg)
9853 nv = -nv;
9854 if (nv < UV_MAX) {
b464bac0 9855 char *p = endbuf;
4151a5fe 9856 nv += 0.5;
028f8eaa 9857 uv = (UV)nv;
4151a5fe
IZ
9858 if (uv & 1 && uv == nv)
9859 uv--; /* Round to even */
9860 do {
a3b680e6 9861 const unsigned dig = uv % 10;
4151a5fe
IZ
9862 *--p = '0' + dig;
9863 } while (uv /= 10);
9864 if (neg)
9865 *--p = '-';
9866 *len = endbuf - p;
9867 return p;
9868 }
bd61b366 9869 return NULL;
4151a5fe
IZ
9870}
9871
9872
954c1994
GS
9873/*
9874=for apidoc sv_vcatpvfn
9875
9876Processes its arguments like C<vsprintf> and appends the formatted output
9877to an SV. Uses an array of SVs if the C style variable argument list is
9878missing (NULL). When running with taint checks enabled, indicates via
9879C<maybe_tainted> if results are untrustworthy (often due to the use of
9880locales).
9881
bffc3d17 9882Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
645c22ef 9883
954c1994
GS
9884=cut
9885*/
9886
8896765a
RB
9887
9888#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
9889 vecstr = (U8*)SvPV_const(vecsv,veclen);\
9890 vec_utf8 = DO_UTF8(vecsv);
9891
1ef29b0e
RGS
9892/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9893
46fc3d4c 9894void
66ceb532
SS
9895Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9896 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9897{
97aff369 9898 dVAR;
46fc3d4c 9899 char *p;
9900 char *q;
a3b680e6 9901 const char *patend;
fc36a67e 9902 STRLEN origlen;
46fc3d4c 9903 I32 svix = 0;
27da23d5 9904 static const char nullstr[] = "(null)";
a0714e2c 9905 SV *argsv = NULL;
b464bac0
AL
9906 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
9907 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
a0714e2c 9908 SV *nsv = NULL;
4151a5fe
IZ
9909 /* Times 4: a decimal digit takes more than 3 binary digits.
9910 * NV_DIG: mantissa takes than many decimal digits.
9911 * Plus 32: Playing safe. */
9912 char ebuf[IV_DIG * 4 + NV_DIG + 32];
9913 /* large enough for "%#.#f" --chip */
9914 /* what about long double NVs? --jhi */
db79b45b 9915
7918f24d 9916 PERL_ARGS_ASSERT_SV_VCATPVFN;
53c1dcc0
AL
9917 PERL_UNUSED_ARG(maybe_tainted);
9918
46fc3d4c 9919 /* no matter what, this is a string now */
fc36a67e 9920 (void)SvPV_force(sv, origlen);
46fc3d4c 9921
8896765a 9922 /* special-case "", "%s", and "%-p" (SVf - see below) */
46fc3d4c 9923 if (patlen == 0)
9924 return;
0dbb1585 9925 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
2d03de9c
AL
9926 if (args) {
9927 const char * const s = va_arg(*args, char*);
9928 sv_catpv(sv, s ? s : nullstr);
9929 }
9930 else if (svix < svmax) {
9931 sv_catsv(sv, *svargs);
2d03de9c 9932 }
5b98cd54
VP
9933 else
9934 S_vcatpvfn_missing_argument(aTHX);
2d03de9c 9935 return;
0dbb1585 9936 }
8896765a
RB
9937 if (args && patlen == 3 && pat[0] == '%' &&
9938 pat[1] == '-' && pat[2] == 'p') {
daba3364 9939 argsv = MUTABLE_SV(va_arg(*args, void*));
8896765a 9940 sv_catsv(sv, argsv);
8896765a 9941 return;
46fc3d4c 9942 }
9943
1d917b39 9944#ifndef USE_LONG_DOUBLE
4151a5fe 9945 /* special-case "%.<number>[gf]" */
7af36d83 9946 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
4151a5fe
IZ
9947 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9948 unsigned digits = 0;
9949 const char *pp;
9950
9951 pp = pat + 2;
9952 while (*pp >= '0' && *pp <= '9')
9953 digits = 10 * digits + (*pp++ - '0');
95ea86d5
NC
9954 if (pp - pat == (int)patlen - 1 && svix < svmax) {
9955 const NV nv = SvNV(*svargs);
4151a5fe 9956 if (*pp == 'g') {
2873255c
NC
9957 /* Add check for digits != 0 because it seems that some
9958 gconverts are buggy in this case, and we don't yet have
9959 a Configure test for this. */
9960 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9961 /* 0, point, slack */
2e59c212 9962 Gconvert(nv, (int)digits, 0, ebuf);
4151a5fe
IZ
9963 sv_catpv(sv, ebuf);
9964 if (*ebuf) /* May return an empty string for digits==0 */
9965 return;
9966 }
9967 } else if (!digits) {
9968 STRLEN l;
9969
9970 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9971 sv_catpvn(sv, p, l);
9972 return;
9973 }
9974 }
9975 }
9976 }
1d917b39 9977#endif /* !USE_LONG_DOUBLE */
4151a5fe 9978
2cf2cfc6 9979 if (!args && svix < svmax && DO_UTF8(*svargs))
205f51d8 9980 has_utf8 = TRUE;
2cf2cfc6 9981
46fc3d4c 9982 patend = (char*)pat + patlen;
9983 for (p = (char*)pat; p < patend; p = q) {
9984 bool alt = FALSE;
9985 bool left = FALSE;
b22c7a20 9986 bool vectorize = FALSE;
211dfcf1 9987 bool vectorarg = FALSE;
2cf2cfc6 9988 bool vec_utf8 = FALSE;
46fc3d4c 9989 char fill = ' ';
9990 char plus = 0;
9991 char intsize = 0;
9992 STRLEN width = 0;
fc36a67e 9993 STRLEN zeros = 0;
46fc3d4c 9994 bool has_precis = FALSE;
9995 STRLEN precis = 0;
c445ea15 9996 const I32 osvix = svix;
2cf2cfc6 9997 bool is_utf8 = FALSE; /* is this item utf8? */
20f6aaab
AS
9998#ifdef HAS_LDBL_SPRINTF_BUG
9999 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8 10000 with sfio - Allen <allens@cpan.org> */
20f6aaab
AS
10001 bool fix_ldbl_sprintf_bug = FALSE;
10002#endif
205f51d8 10003
46fc3d4c 10004 char esignbuf[4];
89ebb4a3 10005 U8 utf8buf[UTF8_MAXBYTES+1];
46fc3d4c 10006 STRLEN esignlen = 0;
10007
bd61b366 10008 const char *eptr = NULL;
1d1ac7bc 10009 const char *fmtstart;
fc36a67e 10010 STRLEN elen = 0;
a0714e2c 10011 SV *vecsv = NULL;
4608196e 10012 const U8 *vecstr = NULL;
b22c7a20 10013 STRLEN veclen = 0;
934abaf1 10014 char c = 0;
46fc3d4c 10015 int i;
9c5ffd7c 10016 unsigned base = 0;
8c8eb53c
RB
10017 IV iv = 0;
10018 UV uv = 0;
9e5b023a
JH
10019 /* we need a long double target in case HAS_LONG_DOUBLE but
10020 not USE_LONG_DOUBLE
10021 */
35fff930 10022#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9e5b023a
JH
10023 long double nv;
10024#else
65202027 10025 NV nv;
9e5b023a 10026#endif
46fc3d4c 10027 STRLEN have;
10028 STRLEN need;
10029 STRLEN gap;
7af36d83 10030 const char *dotstr = ".";
b22c7a20 10031 STRLEN dotstrlen = 1;
211dfcf1 10032 I32 efix = 0; /* explicit format parameter index */
eb3fce90 10033 I32 ewix = 0; /* explicit width index */
211dfcf1
HS
10034 I32 epix = 0; /* explicit precision index */
10035 I32 evix = 0; /* explicit vector index */
eb3fce90 10036 bool asterisk = FALSE;
46fc3d4c 10037
211dfcf1 10038 /* echo everything up to the next format specification */
46fc3d4c 10039 for (q = p; q < patend && *q != '%'; ++q) ;
10040 if (q > p) {
db79b45b
JH
10041 if (has_utf8 && !pat_utf8)
10042 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
10043 else
10044 sv_catpvn(sv, p, q - p);
46fc3d4c 10045 p = q;
10046 }
10047 if (q++ >= patend)
10048 break;
10049
1d1ac7bc
MHM
10050 fmtstart = q;
10051
211dfcf1
HS
10052/*
10053 We allow format specification elements in this order:
10054 \d+\$ explicit format parameter index
10055 [-+ 0#]+ flags
a472f209 10056 v|\*(\d+\$)?v vector with optional (optionally specified) arg
f3583277 10057 0 flag (as above): repeated to allow "v02"
211dfcf1
HS
10058 \d+|\*(\d+\$)? width using optional (optionally specified) arg
10059 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10060 [hlqLV] size
8896765a
RB
10061 [%bcdefginopsuxDFOUX] format (mandatory)
10062*/
10063
10064 if (args) {
10065/*
10066 As of perl5.9.3, printf format checking is on by default.
10067 Internally, perl uses %p formats to provide an escape to
10068 some extended formatting. This block deals with those
10069 extensions: if it does not match, (char*)q is reset and
10070 the normal format processing code is used.
10071
10072 Currently defined extensions are:
10073 %p include pointer address (standard)
10074 %-p (SVf) include an SV (previously %_)
10075 %-<num>p include an SV with precision <num>
8896765a
RB
10076 %<num>p reserved for future extensions
10077
10078 Robin Barker 2005-07-14
f46d31f2
RB
10079
10080 %1p (VDf) removed. RMB 2007-10-19
211dfcf1 10081*/
8896765a
RB
10082 char* r = q;
10083 bool sv = FALSE;
10084 STRLEN n = 0;
10085 if (*q == '-')
10086 sv = *q++;
c445ea15 10087 n = expect_number(&q);
8896765a
RB
10088 if (*q++ == 'p') {
10089 if (sv) { /* SVf */
10090 if (n) {
10091 precis = n;
10092 has_precis = TRUE;
10093 }
daba3364 10094 argsv = MUTABLE_SV(va_arg(*args, void*));
4ea561bc 10095 eptr = SvPV_const(argsv, elen);
8896765a
RB
10096 if (DO_UTF8(argsv))
10097 is_utf8 = TRUE;
10098 goto string;
10099 }
8896765a 10100 else if (n) {
9b387841
NC
10101 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10102 "internal %%<num>p might conflict with future printf extensions");
8896765a
RB
10103 }
10104 }
10105 q = r;
10106 }
10107
c445ea15 10108 if ( (width = expect_number(&q)) ) {
211dfcf1
HS
10109 if (*q == '$') {
10110 ++q;
10111 efix = width;
10112 } else {
10113 goto gotwidth;
10114 }
10115 }
10116
fc36a67e 10117 /* FLAGS */
10118
46fc3d4c 10119 while (*q) {
10120 switch (*q) {
10121 case ' ':
10122 case '+':
9911cee9
TS
10123 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10124 q++;
10125 else
10126 plus = *q++;
46fc3d4c 10127 continue;
10128
10129 case '-':
10130 left = TRUE;
10131 q++;
10132 continue;
10133
10134 case '0':
10135 fill = *q++;
10136 continue;
10137
10138 case '#':
10139 alt = TRUE;
10140 q++;
10141 continue;
10142
fc36a67e 10143 default:
10144 break;
10145 }
10146 break;
10147 }
46fc3d4c 10148
211dfcf1 10149 tryasterisk:
eb3fce90 10150 if (*q == '*') {
211dfcf1 10151 q++;
c445ea15 10152 if ( (ewix = expect_number(&q)) )
211dfcf1
HS
10153 if (*q++ != '$')
10154 goto unknown;
eb3fce90 10155 asterisk = TRUE;
211dfcf1
HS
10156 }
10157 if (*q == 'v') {
eb3fce90 10158 q++;
211dfcf1
HS
10159 if (vectorize)
10160 goto unknown;
9cbac4c7 10161 if ((vectorarg = asterisk)) {
211dfcf1
HS
10162 evix = ewix;
10163 ewix = 0;
10164 asterisk = FALSE;
10165 }
10166 vectorize = TRUE;
10167 goto tryasterisk;
eb3fce90
JH
10168 }
10169
211dfcf1 10170 if (!asterisk)
858a90f9 10171 {
7a5fa8a2 10172 if( *q == '0' )
f3583277 10173 fill = *q++;
c445ea15 10174 width = expect_number(&q);
858a90f9 10175 }
211dfcf1 10176
ed362004
HS
10177 if (vectorize && vectorarg) {
10178 /* vectorizing, but not with the default "." */
10179 if (args)
10180 vecsv = va_arg(*args, SV*);
10181 else if (evix) {
10182 vecsv = (evix > 0 && evix <= svmax)
10183 ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10184 } else {
10185 vecsv = svix < svmax
10186 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
211dfcf1 10187 }
ed362004
HS
10188 dotstr = SvPV_const(vecsv, dotstrlen);
10189 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10190 bad with tied or overloaded values that return UTF8. */
10191 if (DO_UTF8(vecsv))
10192 is_utf8 = TRUE;
10193 else if (has_utf8) {
10194 vecsv = sv_mortalcopy(vecsv);
10195 sv_utf8_upgrade(vecsv);
10196 dotstr = SvPV_const(vecsv, dotstrlen);
10197 is_utf8 = TRUE;
10198 }
eb3fce90 10199 }
fc36a67e 10200
eb3fce90 10201 if (asterisk) {
fc36a67e 10202 if (args)
10203 i = va_arg(*args, int);
10204 else
eb3fce90
JH
10205 i = (ewix ? ewix <= svmax : svix < svmax) ?
10206 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
fc36a67e 10207 left |= (i < 0);
10208 width = (i < 0) ? -i : i;
fc36a67e 10209 }
211dfcf1 10210 gotwidth:
fc36a67e 10211
10212 /* PRECISION */
46fc3d4c 10213
fc36a67e 10214 if (*q == '.') {
10215 q++;
10216 if (*q == '*') {
211dfcf1 10217 q++;
c445ea15 10218 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
7b8dd722
HS
10219 goto unknown;
10220 /* XXX: todo, support specified precision parameter */
10221 if (epix)
211dfcf1 10222 goto unknown;
46fc3d4c 10223 if (args)
10224 i = va_arg(*args, int);
10225 else
eb3fce90
JH
10226 i = (ewix ? ewix <= svmax : svix < svmax)
10227 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9911cee9
TS
10228 precis = i;
10229 has_precis = !(i < 0);
fc36a67e 10230 }
10231 else {
10232 precis = 0;
10233 while (isDIGIT(*q))
10234 precis = precis * 10 + (*q++ - '0');
9911cee9 10235 has_precis = TRUE;
fc36a67e 10236 }
fc36a67e 10237 }
46fc3d4c 10238
ed362004
HS
10239 if (vectorize) {
10240 if (args) {
10241 VECTORIZE_ARGS
10242 }
10243 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10244 vecsv = svargs[efix ? efix-1 : svix++];
10245 vecstr = (U8*)SvPV_const(vecsv,veclen);
10246 vec_utf8 = DO_UTF8(vecsv);
10247
10248 /* if this is a version object, we need to convert
10249 * back into v-string notation and then let the
10250 * vectorize happen normally
10251 */
10252 if (sv_derived_from(vecsv, "version")) {
10253 char *version = savesvpv(vecsv);
10254 if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10255 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10256 "vector argument not supported with alpha versions");
10257 goto unknown;
10258 }
10259 vecsv = sv_newmortal();
10260 scan_vstring(version, version + veclen, vecsv);
10261 vecstr = (U8*)SvPV_const(vecsv, veclen);
10262 vec_utf8 = DO_UTF8(vecsv);
10263 Safefree(version);
10264 }
10265 }
10266 else {
10267 vecstr = (U8*)"";
10268 veclen = 0;
10269 }
10270 }
10271
fc36a67e 10272 /* SIZE */
46fc3d4c 10273
fc36a67e 10274 switch (*q) {
c623ac67
GS
10275#ifdef WIN32
10276 case 'I': /* Ix, I32x, and I64x */
10277# ifdef WIN64
10278 if (q[1] == '6' && q[2] == '4') {
10279 q += 3;
10280 intsize = 'q';
10281 break;
10282 }
10283# endif
10284 if (q[1] == '3' && q[2] == '2') {
10285 q += 3;
10286 break;
10287 }
10288# ifdef WIN64
10289 intsize = 'q';
10290# endif
10291 q++;
10292 break;
10293#endif
9e5b023a 10294#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
6f9bb7fd 10295 case 'L': /* Ld */
5f66b61c 10296 /*FALLTHROUGH*/
e5c81feb 10297#ifdef HAS_QUAD
6f9bb7fd 10298 case 'q': /* qd */
9e5b023a 10299#endif
6f9bb7fd
GS
10300 intsize = 'q';
10301 q++;
10302 break;
10303#endif
fc36a67e 10304 case 'l':
d5b9c847 10305 ++q;
9e5b023a 10306#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
d5b9c847 10307 if (*q == 'l') { /* lld, llf */
fc36a67e 10308 intsize = 'q';
07208e09
CS
10309 ++q;
10310 }
10311 else
fc36a67e 10312#endif
07208e09
CS
10313 intsize = 'l';
10314 break;
fc36a67e 10315 case 'h':
07208e09
CS
10316 if (*++q == 'h') { /* hhd, hhu */
10317 intsize = 'c';
10318 ++q;
10319 }
10320 else
10321 intsize = 'h';
10322 break;
fc36a67e 10323 case 'V':
07208e09
CS
10324 case 'z':
10325 case 't':
10326#if HAS_C99
10327 case 'j':
10328#endif
fc36a67e 10329 intsize = *q++;
46fc3d4c 10330 break;
10331 }
10332
fc36a67e 10333 /* CONVERSION */
10334
211dfcf1
HS
10335 if (*q == '%') {
10336 eptr = q++;
10337 elen = 1;
26372e71
GA
10338 if (vectorize) {
10339 c = '%';
10340 goto unknown;
10341 }
211dfcf1
HS
10342 goto string;
10343 }
10344
26372e71 10345 if (!vectorize && !args) {
86c51f8b
NC
10346 if (efix) {
10347 const I32 i = efix-1;
7baa4690 10348 argsv = (i >= 0 && i < svmax)
81ae3cde 10349 ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
86c51f8b
NC
10350 } else {
10351 argsv = (svix >= 0 && svix < svmax)
81ae3cde 10352 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
86c51f8b 10353 }
863811b2 10354 }
211dfcf1 10355
46fc3d4c 10356 switch (c = *q++) {
10357
10358 /* STRINGS */
10359
46fc3d4c 10360 case 'c':
26372e71
GA
10361 if (vectorize)
10362 goto unknown;
4ea561bc 10363 uv = (args) ? va_arg(*args, int) : SvIV(argsv);
1bd104fb
JH
10364 if ((uv > 255 ||
10365 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
0064a8a9 10366 && !IN_BYTES) {
dfe13c55 10367 eptr = (char*)utf8buf;
9041c2e3 10368 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
2cf2cfc6 10369 is_utf8 = TRUE;
7e2040f0
GS
10370 }
10371 else {
10372 c = (char)uv;
10373 eptr = &c;
10374 elen = 1;
a0ed51b3 10375 }
46fc3d4c 10376 goto string;
10377
46fc3d4c 10378 case 's':
26372e71
GA
10379 if (vectorize)
10380 goto unknown;
10381 if (args) {
fc36a67e 10382 eptr = va_arg(*args, char*);
c635e13b 10383 if (eptr)
10384 elen = strlen(eptr);
10385 else {
27da23d5 10386 eptr = (char *)nullstr;
c635e13b 10387 elen = sizeof nullstr - 1;
10388 }
46fc3d4c 10389 }
211dfcf1 10390 else {
4ea561bc 10391 eptr = SvPV_const(argsv, elen);
7e2040f0 10392 if (DO_UTF8(argsv)) {
c494f1f4 10393 STRLEN old_precis = precis;
a0ed51b3 10394 if (has_precis && precis < elen) {
c494f1f4 10395 STRLEN ulen = sv_len_utf8(argsv);
9ef5ed94 10396 I32 p = precis > ulen ? ulen : precis;
7e2040f0 10397 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
a0ed51b3
LW
10398 precis = p;
10399 }
10400 if (width) { /* fudge width (can't fudge elen) */
59b61096
AV
10401 if (has_precis && precis < elen)
10402 width += precis - old_precis;
10403 else
10404 width += elen - sv_len_utf8(argsv);
a0ed51b3 10405 }
2cf2cfc6 10406 is_utf8 = TRUE;
a0ed51b3
LW
10407 }
10408 }
fc36a67e 10409
46fc3d4c 10410 string:
9ef5ed94 10411 if (has_precis && precis < elen)
46fc3d4c 10412 elen = precis;
10413 break;
10414
10415 /* INTEGERS */
10416
fc36a67e 10417 case 'p':
be75b157 10418 if (alt || vectorize)
c2e66d9e 10419 goto unknown;
211dfcf1 10420 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
fc36a67e 10421 base = 16;
10422 goto integer;
10423
46fc3d4c 10424 case 'D':
29fe7a80 10425#ifdef IV_IS_QUAD
22f3ae8c 10426 intsize = 'q';
29fe7a80 10427#else
46fc3d4c 10428 intsize = 'l';
29fe7a80 10429#endif
5f66b61c 10430 /*FALLTHROUGH*/
46fc3d4c 10431 case 'd':
10432 case 'i':
8896765a
RB
10433#if vdNUMBER
10434 format_vd:
10435#endif
b22c7a20 10436 if (vectorize) {
ba210ebe 10437 STRLEN ulen;
211dfcf1
HS
10438 if (!veclen)
10439 continue;
2cf2cfc6
A
10440 if (vec_utf8)
10441 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10442 UTF8_ALLOW_ANYUV);
b22c7a20 10443 else {
e83d50c9 10444 uv = *vecstr;
b22c7a20
GS
10445 ulen = 1;
10446 }
10447 vecstr += ulen;
10448 veclen -= ulen;
e83d50c9
JP
10449 if (plus)
10450 esignbuf[esignlen++] = plus;
b22c7a20
GS
10451 }
10452 else if (args) {
46fc3d4c 10453 switch (intsize) {
07208e09 10454 case 'c': iv = (char)va_arg(*args, int); break;
46fc3d4c 10455 case 'h': iv = (short)va_arg(*args, int); break;
46fc3d4c 10456 case 'l': iv = va_arg(*args, long); break;
fc36a67e 10457 case 'V': iv = va_arg(*args, IV); break;
07208e09
CS
10458 case 'z': iv = va_arg(*args, SSize_t); break;
10459 case 't': iv = va_arg(*args, ptrdiff_t); break;
b10c0dba 10460 default: iv = va_arg(*args, int); break;
07208e09
CS
10461#if HAS_C99
10462 case 'j': iv = va_arg(*args, intmax_t); break;
10463#endif
53f65a9e 10464 case 'q':
cf2093f6 10465#ifdef HAS_QUAD
53f65a9e
HS
10466 iv = va_arg(*args, Quad_t); break;
10467#else
10468 goto unknown;
cf2093f6 10469#endif
46fc3d4c 10470 }
10471 }
10472 else {
4ea561bc 10473 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
46fc3d4c 10474 switch (intsize) {
07208e09 10475 case 'c': iv = (char)tiv; break;
b10c0dba
MHM
10476 case 'h': iv = (short)tiv; break;
10477 case 'l': iv = (long)tiv; break;
10478 case 'V':
10479 default: iv = tiv; break;
53f65a9e 10480 case 'q':
cf2093f6 10481#ifdef HAS_QUAD
53f65a9e
HS
10482 iv = (Quad_t)tiv; break;
10483#else
10484 goto unknown;
cf2093f6 10485#endif
46fc3d4c 10486 }
10487 }
e83d50c9
JP
10488 if ( !vectorize ) /* we already set uv above */
10489 {
10490 if (iv >= 0) {
10491 uv = iv;
10492 if (plus)
10493 esignbuf[esignlen++] = plus;
10494 }
10495 else {
10496 uv = -iv;
10497 esignbuf[esignlen++] = '-';
10498 }
46fc3d4c 10499 }
10500 base = 10;
10501 goto integer;
10502
fc36a67e 10503 case 'U':
29fe7a80 10504#ifdef IV_IS_QUAD
22f3ae8c 10505 intsize = 'q';
29fe7a80 10506#else
fc36a67e 10507 intsize = 'l';
29fe7a80 10508#endif
5f66b61c 10509 /*FALLTHROUGH*/
fc36a67e 10510 case 'u':
10511 base = 10;
10512 goto uns_integer;
10513
7ff06cc7 10514 case 'B':
4f19785b
WSI
10515 case 'b':
10516 base = 2;
10517 goto uns_integer;
10518
46fc3d4c 10519 case 'O':
29fe7a80 10520#ifdef IV_IS_QUAD
22f3ae8c 10521 intsize = 'q';
29fe7a80 10522#else
46fc3d4c 10523 intsize = 'l';
29fe7a80 10524#endif
5f66b61c 10525 /*FALLTHROUGH*/
46fc3d4c 10526 case 'o':
10527 base = 8;
10528 goto uns_integer;
10529
10530 case 'X':
46fc3d4c 10531 case 'x':
10532 base = 16;
46fc3d4c 10533
10534 uns_integer:
b22c7a20 10535 if (vectorize) {
ba210ebe 10536 STRLEN ulen;
b22c7a20 10537 vector:
211dfcf1
HS
10538 if (!veclen)
10539 continue;
2cf2cfc6
A
10540 if (vec_utf8)
10541 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10542 UTF8_ALLOW_ANYUV);
b22c7a20 10543 else {
a05b299f 10544 uv = *vecstr;
b22c7a20
GS
10545 ulen = 1;
10546 }
10547 vecstr += ulen;
10548 veclen -= ulen;
10549 }
10550 else if (args) {
46fc3d4c 10551 switch (intsize) {
07208e09 10552 case 'c': uv = (unsigned char)va_arg(*args, unsigned); break;
46fc3d4c 10553 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
46fc3d4c 10554 case 'l': uv = va_arg(*args, unsigned long); break;
fc36a67e 10555 case 'V': uv = va_arg(*args, UV); break;
07208e09
CS
10556 case 'z': uv = va_arg(*args, Size_t); break;
10557 case 't': uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10558#if HAS_C99
10559 case 'j': uv = va_arg(*args, uintmax_t); break;
10560#endif
b10c0dba 10561 default: uv = va_arg(*args, unsigned); break;
53f65a9e 10562 case 'q':
cf2093f6 10563#ifdef HAS_QUAD
53f65a9e
HS
10564 uv = va_arg(*args, Uquad_t); break;
10565#else
10566 goto unknown;
cf2093f6 10567#endif
46fc3d4c 10568 }
10569 }
10570 else {
4ea561bc 10571 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
46fc3d4c 10572 switch (intsize) {
07208e09 10573 case 'c': uv = (unsigned char)tuv; break;
b10c0dba
MHM
10574 case 'h': uv = (unsigned short)tuv; break;
10575 case 'l': uv = (unsigned long)tuv; break;
10576 case 'V':
10577 default: uv = tuv; break;
53f65a9e 10578 case 'q':
cf2093f6 10579#ifdef HAS_QUAD
53f65a9e
HS
10580 uv = (Uquad_t)tuv; break;
10581#else
10582 goto unknown;
cf2093f6 10583#endif
46fc3d4c 10584 }
10585 }
10586
10587 integer:
4d84ee25
NC
10588 {
10589 char *ptr = ebuf + sizeof ebuf;
1387f30c
DD
10590 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10591 zeros = 0;
10592
4d84ee25
NC
10593 switch (base) {
10594 unsigned dig;
10595 case 16:
14eb61ab 10596 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
4d84ee25
NC
10597 do {
10598 dig = uv & 15;
10599 *--ptr = p[dig];
10600 } while (uv >>= 4);
1387f30c 10601 if (tempalt) {
4d84ee25
NC
10602 esignbuf[esignlen++] = '0';
10603 esignbuf[esignlen++] = c; /* 'x' or 'X' */
10604 }
10605 break;
10606 case 8:
10607 do {
10608 dig = uv & 7;
10609 *--ptr = '0' + dig;
10610 } while (uv >>= 3);
10611 if (alt && *ptr != '0')
10612 *--ptr = '0';
10613 break;
10614 case 2:
10615 do {
10616 dig = uv & 1;
10617 *--ptr = '0' + dig;
10618 } while (uv >>= 1);
1387f30c 10619 if (tempalt) {
4d84ee25 10620 esignbuf[esignlen++] = '0';
7ff06cc7 10621 esignbuf[esignlen++] = c;
4d84ee25
NC
10622 }
10623 break;
10624 default: /* it had better be ten or less */
10625 do {
10626 dig = uv % base;
10627 *--ptr = '0' + dig;
10628 } while (uv /= base);
10629 break;
46fc3d4c 10630 }
4d84ee25
NC
10631 elen = (ebuf + sizeof ebuf) - ptr;
10632 eptr = ptr;
10633 if (has_precis) {
10634 if (precis > elen)
10635 zeros = precis - elen;
e6bb52fd
TS
10636 else if (precis == 0 && elen == 1 && *eptr == '0'
10637 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
4d84ee25 10638 elen = 0;
9911cee9
TS
10639
10640 /* a precision nullifies the 0 flag. */
10641 if (fill == '0')
10642 fill = ' ';
eda88b6d 10643 }
c10ed8b9 10644 }
46fc3d4c 10645 break;
10646
10647 /* FLOATING POINT */
10648
fc36a67e 10649 case 'F':
10650 c = 'f'; /* maybe %F isn't supported here */
5f66b61c 10651 /*FALLTHROUGH*/
46fc3d4c 10652 case 'e': case 'E':
fc36a67e 10653 case 'f':
46fc3d4c 10654 case 'g': case 'G':
26372e71
GA
10655 if (vectorize)
10656 goto unknown;
46fc3d4c 10657
10658 /* This is evil, but floating point is even more evil */
10659
9e5b023a
JH
10660 /* for SV-style calling, we can only get NV
10661 for C-style calling, we assume %f is double;
10662 for simplicity we allow any of %Lf, %llf, %qf for long double
10663 */
10664 switch (intsize) {
10665 case 'V':
10666#if defined(USE_LONG_DOUBLE)
10667 intsize = 'q';
10668#endif
10669 break;
8a2e3f14 10670/* [perl #20339] - we should accept and ignore %lf rather than die */
00e17364 10671 case 'l':
5f66b61c 10672 /*FALLTHROUGH*/
9e5b023a
JH
10673 default:
10674#if defined(USE_LONG_DOUBLE)
10675 intsize = args ? 0 : 'q';
10676#endif
10677 break;
10678 case 'q':
10679#if defined(HAS_LONG_DOUBLE)
10680 break;
10681#else
5f66b61c 10682 /*FALLTHROUGH*/
9e5b023a 10683#endif
07208e09 10684 case 'c':
9e5b023a 10685 case 'h':
07208e09
CS
10686 case 'z':
10687 case 't':
10688 case 'j':
9e5b023a
JH
10689 goto unknown;
10690 }
10691
10692 /* now we need (long double) if intsize == 'q', else (double) */
26372e71 10693 nv = (args) ?
35fff930
JH
10694#if LONG_DOUBLESIZE > DOUBLESIZE
10695 intsize == 'q' ?
205f51d8
AS
10696 va_arg(*args, long double) :
10697 va_arg(*args, double)
35fff930 10698#else
205f51d8 10699 va_arg(*args, double)
35fff930 10700#endif
4ea561bc 10701 : SvNV(argsv);
fc36a67e 10702
10703 need = 0;
3952c29a
NC
10704 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10705 else. frexp() has some unspecified behaviour for those three */
10706 if (c != 'e' && c != 'E' && (nv * 0) == 0) {
fc36a67e 10707 i = PERL_INT_MIN;
9e5b023a
JH
10708 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10709 will cast our (long double) to (double) */
73b309ea 10710 (void)Perl_frexp(nv, &i);
fc36a67e 10711 if (i == PERL_INT_MIN)
cea2e8a9 10712 Perl_die(aTHX_ "panic: frexp");
c635e13b 10713 if (i > 0)
fc36a67e 10714 need = BIT_DIGITS(i);
10715 }
10716 need += has_precis ? precis : 6; /* known default */
20f6aaab 10717
fc36a67e 10718 if (need < width)
10719 need = width;
10720
20f6aaab
AS
10721#ifdef HAS_LDBL_SPRINTF_BUG
10722 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8
AS
10723 with sfio - Allen <allens@cpan.org> */
10724
10725# ifdef DBL_MAX
10726# define MY_DBL_MAX DBL_MAX
10727# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10728# if DOUBLESIZE >= 8
10729# define MY_DBL_MAX 1.7976931348623157E+308L
10730# else
10731# define MY_DBL_MAX 3.40282347E+38L
10732# endif
10733# endif
10734
10735# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10736# define MY_DBL_MAX_BUG 1L
20f6aaab 10737# else
205f51d8 10738# define MY_DBL_MAX_BUG MY_DBL_MAX
20f6aaab 10739# endif
20f6aaab 10740
205f51d8
AS
10741# ifdef DBL_MIN
10742# define MY_DBL_MIN DBL_MIN
10743# else /* XXX guessing! -Allen */
10744# if DOUBLESIZE >= 8
10745# define MY_DBL_MIN 2.2250738585072014E-308L
10746# else
10747# define MY_DBL_MIN 1.17549435E-38L
10748# endif
10749# endif
20f6aaab 10750
205f51d8
AS
10751 if ((intsize == 'q') && (c == 'f') &&
10752 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10753 (need < DBL_DIG)) {
10754 /* it's going to be short enough that
10755 * long double precision is not needed */
10756
10757 if ((nv <= 0L) && (nv >= -0L))
10758 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10759 else {
10760 /* would use Perl_fp_class as a double-check but not
10761 * functional on IRIX - see perl.h comments */
10762
10763 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10764 /* It's within the range that a double can represent */
10765#if defined(DBL_MAX) && !defined(DBL_MIN)
10766 if ((nv >= ((long double)1/DBL_MAX)) ||
10767 (nv <= (-(long double)1/DBL_MAX)))
20f6aaab 10768#endif
205f51d8 10769 fix_ldbl_sprintf_bug = TRUE;
20f6aaab 10770 }
205f51d8
AS
10771 }
10772 if (fix_ldbl_sprintf_bug == TRUE) {
10773 double temp;
10774
10775 intsize = 0;
10776 temp = (double)nv;
10777 nv = (NV)temp;
10778 }
20f6aaab 10779 }
205f51d8
AS
10780
10781# undef MY_DBL_MAX
10782# undef MY_DBL_MAX_BUG
10783# undef MY_DBL_MIN
10784
20f6aaab
AS
10785#endif /* HAS_LDBL_SPRINTF_BUG */
10786
46fc3d4c 10787 need += 20; /* fudge factor */
80252599
GS
10788 if (PL_efloatsize < need) {
10789 Safefree(PL_efloatbuf);
10790 PL_efloatsize = need + 20; /* more fudge */
a02a5408 10791 Newx(PL_efloatbuf, PL_efloatsize, char);
7d5ea4e7 10792 PL_efloatbuf[0] = '\0';
46fc3d4c 10793 }
10794
4151a5fe
IZ
10795 if ( !(width || left || plus || alt) && fill != '0'
10796 && has_precis && intsize != 'q' ) { /* Shortcuts */
2873255c
NC
10797 /* See earlier comment about buggy Gconvert when digits,
10798 aka precis is 0 */
10799 if ( c == 'g' && precis) {
2e59c212 10800 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
4150c189
NC
10801 /* May return an empty string for digits==0 */
10802 if (*PL_efloatbuf) {
10803 elen = strlen(PL_efloatbuf);
4151a5fe 10804 goto float_converted;
4150c189 10805 }
4151a5fe
IZ
10806 } else if ( c == 'f' && !precis) {
10807 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10808 break;
10809 }
10810 }
4d84ee25
NC
10811 {
10812 char *ptr = ebuf + sizeof ebuf;
10813 *--ptr = '\0';
10814 *--ptr = c;
10815 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9e5b023a 10816#if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
4d84ee25
NC
10817 if (intsize == 'q') {
10818 /* Copy the one or more characters in a long double
10819 * format before the 'base' ([efgEFG]) character to
10820 * the format string. */
10821 static char const prifldbl[] = PERL_PRIfldbl;
10822 char const *p = prifldbl + sizeof(prifldbl) - 3;
10823 while (p >= prifldbl) { *--ptr = *p--; }
10824 }
65202027 10825#endif
4d84ee25
NC
10826 if (has_precis) {
10827 base = precis;
10828 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10829 *--ptr = '.';
10830 }
10831 if (width) {
10832 base = width;
10833 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10834 }
10835 if (fill == '0')
10836 *--ptr = fill;
10837 if (left)
10838 *--ptr = '-';
10839 if (plus)
10840 *--ptr = plus;
10841 if (alt)
10842 *--ptr = '#';
10843 *--ptr = '%';
10844
10845 /* No taint. Otherwise we are in the strange situation
10846 * where printf() taints but print($float) doesn't.
10847 * --jhi */
9e5b023a 10848#if defined(HAS_LONG_DOUBLE)
4150c189 10849 elen = ((intsize == 'q')
d9fad198
JH
10850 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10851 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9e5b023a 10852#else
4150c189 10853 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9e5b023a 10854#endif
4d84ee25 10855 }
4151a5fe 10856 float_converted:
80252599 10857 eptr = PL_efloatbuf;
46fc3d4c 10858 break;
10859
fc36a67e 10860 /* SPECIAL */
10861
10862 case 'n':
26372e71
GA
10863 if (vectorize)
10864 goto unknown;
fc36a67e 10865 i = SvCUR(sv) - origlen;
26372e71 10866 if (args) {
c635e13b 10867 switch (intsize) {
07208e09 10868 case 'c': *(va_arg(*args, char*)) = i; break;
c635e13b 10869 case 'h': *(va_arg(*args, short*)) = i; break;
10870 default: *(va_arg(*args, int*)) = i; break;
10871 case 'l': *(va_arg(*args, long*)) = i; break;
10872 case 'V': *(va_arg(*args, IV*)) = i; break;
07208e09
CS
10873 case 'z': *(va_arg(*args, SSize_t*)) = i; break;
10874 case 't': *(va_arg(*args, ptrdiff_t*)) = i; break;
10875#if HAS_C99
10876 case 'j': *(va_arg(*args, intmax_t*)) = i; break;
10877#endif
53f65a9e 10878 case 'q':
cf2093f6 10879#ifdef HAS_QUAD
53f65a9e
HS
10880 *(va_arg(*args, Quad_t*)) = i; break;
10881#else
10882 goto unknown;
cf2093f6 10883#endif
c635e13b 10884 }
fc36a67e 10885 }
9dd79c3f 10886 else
211dfcf1 10887 sv_setuv_mg(argsv, (UV)i);
fc36a67e 10888 continue; /* not "break" */
10889
10890 /* UNKNOWN */
10891
46fc3d4c 10892 default:
fc36a67e 10893 unknown:
041457d9
DM
10894 if (!args
10895 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10896 && ckWARN(WARN_PRINTF))
10897 {
c4420975 10898 SV * const msg = sv_newmortal();
35c1215d
NC
10899 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10900 (PL_op->op_type == OP_PRTF) ? "" : "s");
1d1ac7bc
MHM
10901 if (fmtstart < patend) {
10902 const char * const fmtend = q < patend ? q : patend;
10903 const char * f;
10904 sv_catpvs(msg, "\"%");
10905 for (f = fmtstart; f < fmtend; f++) {
10906 if (isPRINT(*f)) {
10907 sv_catpvn(msg, f, 1);
10908 } else {
10909 Perl_sv_catpvf(aTHX_ msg,
10910 "\\%03"UVof, (UV)*f & 0xFF);
10911 }
10912 }
10913 sv_catpvs(msg, "\"");
10914 } else {
396482e1 10915 sv_catpvs(msg, "end of string");
1d1ac7bc 10916 }
be2597df 10917 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
c635e13b 10918 }
fb73857a 10919
10920 /* output mangled stuff ... */
10921 if (c == '\0')
10922 --q;
46fc3d4c 10923 eptr = p;
10924 elen = q - p;
fb73857a 10925
10926 /* ... right here, because formatting flags should not apply */
10927 SvGROW(sv, SvCUR(sv) + elen + 1);
10928 p = SvEND(sv);
4459522c 10929 Copy(eptr, p, elen, char);
fb73857a 10930 p += elen;
10931 *p = '\0';
3f7c398e 10932 SvCUR_set(sv, p - SvPVX_const(sv));
58e33a90 10933 svix = osvix;
fb73857a 10934 continue; /* not "break" */
46fc3d4c 10935 }
10936
cc61b222
TS
10937 if (is_utf8 != has_utf8) {
10938 if (is_utf8) {
10939 if (SvCUR(sv))
10940 sv_utf8_upgrade(sv);
10941 }
10942 else {
10943 const STRLEN old_elen = elen;
59cd0e26 10944 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
cc61b222
TS
10945 sv_utf8_upgrade(nsv);
10946 eptr = SvPVX_const(nsv);
10947 elen = SvCUR(nsv);
10948
10949 if (width) { /* fudge width (can't fudge elen) */
10950 width += elen - old_elen;
10951 }
10952 is_utf8 = TRUE;
10953 }
10954 }
10955
6c94ec8b 10956 have = esignlen + zeros + elen;
ed2b91d2 10957 if (have < zeros)
f1f66076 10958 Perl_croak_nocontext("%s", PL_memory_wrap);
6c94ec8b 10959
46fc3d4c 10960 need = (have > width ? have : width);
10961 gap = need - have;
10962
d2641cbd 10963 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
f1f66076 10964 Perl_croak_nocontext("%s", PL_memory_wrap);
b22c7a20 10965 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
46fc3d4c 10966 p = SvEND(sv);
10967 if (esignlen && fill == '0') {
53c1dcc0 10968 int i;
eb160463 10969 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 10970 *p++ = esignbuf[i];
10971 }
10972 if (gap && !left) {
10973 memset(p, fill, gap);
10974 p += gap;
10975 }
10976 if (esignlen && fill != '0') {
53c1dcc0 10977 int i;
eb160463 10978 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 10979 *p++ = esignbuf[i];
10980 }
fc36a67e 10981 if (zeros) {
53c1dcc0 10982 int i;
fc36a67e 10983 for (i = zeros; i; i--)
10984 *p++ = '0';
10985 }
46fc3d4c 10986 if (elen) {
4459522c 10987 Copy(eptr, p, elen, char);
46fc3d4c 10988 p += elen;
10989 }
10990 if (gap && left) {
10991 memset(p, ' ', gap);
10992 p += gap;
10993 }
b22c7a20
GS
10994 if (vectorize) {
10995 if (veclen) {
4459522c 10996 Copy(dotstr, p, dotstrlen, char);
b22c7a20
GS
10997 p += dotstrlen;
10998 }
10999 else
11000 vectorize = FALSE; /* done iterating over vecstr */
11001 }
2cf2cfc6
A
11002 if (is_utf8)
11003 has_utf8 = TRUE;
11004 if (has_utf8)
7e2040f0 11005 SvUTF8_on(sv);
46fc3d4c 11006 *p = '\0';
3f7c398e 11007 SvCUR_set(sv, p - SvPVX_const(sv));
b22c7a20
GS
11008 if (vectorize) {
11009 esignlen = 0;
11010 goto vector;
11011 }
46fc3d4c 11012 }
3e6bd4bf 11013 SvTAINT(sv);
46fc3d4c 11014}
51371543 11015
645c22ef
DM
11016/* =========================================================================
11017
11018=head1 Cloning an interpreter
11019
11020All the macros and functions in this section are for the private use of
11021the main function, perl_clone().
11022
f2fc5c80 11023The foo_dup() functions make an exact copy of an existing foo thingy.
645c22ef
DM
11024During the course of a cloning, a hash table is used to map old addresses
11025to new addresses. The table is created and manipulated with the
11026ptr_table_* functions.
11027
11028=cut
11029
3e8320cc 11030 * =========================================================================*/
645c22ef
DM
11031
11032
1d7c1841
GS
11033#if defined(USE_ITHREADS)
11034
d4c19fe8 11035/* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
1d7c1841
GS
11036#ifndef GpREFCNT_inc
11037# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11038#endif
11039
11040
a41cc44e 11041/* Certain cases in Perl_ss_dup have been merged, by relying on the fact
3e07292d 11042 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
538f2e76
NC
11043 If this changes, please unmerge ss_dup.
11044 Likewise, sv_dup_inc_multiple() relies on this fact. */
a09252eb 11045#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup_inc(s,t))
502c6561 11046#define av_dup(s,t) MUTABLE_AV(sv_dup((const SV *)s,t))
a09252eb 11047#define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
85fbaab2 11048#define hv_dup(s,t) MUTABLE_HV(sv_dup((const SV *)s,t))
a09252eb 11049#define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
daba3364 11050#define cv_dup(s,t) MUTABLE_CV(sv_dup((const SV *)s,t))
a09252eb 11051#define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
daba3364 11052#define io_dup(s,t) MUTABLE_IO(sv_dup((const SV *)s,t))
a09252eb 11053#define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
159b6efe 11054#define gv_dup(s,t) MUTABLE_GV(sv_dup((const SV *)s,t))
a09252eb 11055#define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
6136c704
AL
11056#define SAVEPV(p) ((p) ? savepv(p) : NULL)
11057#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
8cf8f3d1 11058
199e78b7
DM
11059/* clone a parser */
11060
11061yy_parser *
66ceb532 11062Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
199e78b7
DM
11063{
11064 yy_parser *parser;
11065
7918f24d
NC
11066 PERL_ARGS_ASSERT_PARSER_DUP;
11067
199e78b7
DM
11068 if (!proto)
11069 return NULL;
11070
7c197c94
DM
11071 /* look for it in the table first */
11072 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11073 if (parser)
11074 return parser;
11075
11076 /* create anew and remember what it is */
199e78b7 11077 Newxz(parser, 1, yy_parser);
7c197c94 11078 ptr_table_store(PL_ptr_table, proto, parser);
199e78b7 11079
199e78b7
DM
11080 /* XXX these not yet duped */
11081 parser->old_parser = NULL;
11082 parser->stack = NULL;
11083 parser->ps = NULL;
11084 parser->stack_size = 0;
11085 /* XXX parser->stack->state = 0; */
11086
11087 /* XXX eventually, just Copy() most of the parser struct ? */
11088
11089 parser->lex_brackets = proto->lex_brackets;
11090 parser->lex_casemods = proto->lex_casemods;
11091 parser->lex_brackstack = savepvn(proto->lex_brackstack,
11092 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11093 parser->lex_casestack = savepvn(proto->lex_casestack,
11094 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11095 parser->lex_defer = proto->lex_defer;
11096 parser->lex_dojoin = proto->lex_dojoin;
11097 parser->lex_expect = proto->lex_expect;
11098 parser->lex_formbrack = proto->lex_formbrack;
11099 parser->lex_inpat = proto->lex_inpat;
11100 parser->lex_inwhat = proto->lex_inwhat;
11101 parser->lex_op = proto->lex_op;
11102 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
11103 parser->lex_starts = proto->lex_starts;
11104 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
11105 parser->multi_close = proto->multi_close;
11106 parser->multi_open = proto->multi_open;
11107 parser->multi_start = proto->multi_start;
670a9cb2 11108 parser->multi_end = proto->multi_end;
199e78b7
DM
11109 parser->pending_ident = proto->pending_ident;
11110 parser->preambled = proto->preambled;
11111 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
bdc0bf6f 11112 parser->linestr = sv_dup_inc(proto->linestr, param);
53a7735b
DM
11113 parser->expect = proto->expect;
11114 parser->copline = proto->copline;
f06b5848 11115 parser->last_lop_op = proto->last_lop_op;
bc177e6b 11116 parser->lex_state = proto->lex_state;
2f9285f8 11117 parser->rsfp = fp_dup(proto->rsfp, '<', param);
5486870f
DM
11118 /* rsfp_filters entries have fake IoDIRP() */
11119 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12bd6ede
DM
11120 parser->in_my = proto->in_my;
11121 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13765c85 11122 parser->error_count = proto->error_count;
bc177e6b 11123
53a7735b 11124
f06b5848
DM
11125 parser->linestr = sv_dup_inc(proto->linestr, param);
11126
11127 {
1e05feb3
AL
11128 char * const ols = SvPVX(proto->linestr);
11129 char * const ls = SvPVX(parser->linestr);
f06b5848
DM
11130
11131 parser->bufptr = ls + (proto->bufptr >= ols ?
11132 proto->bufptr - ols : 0);
11133 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
11134 proto->oldbufptr - ols : 0);
11135 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11136 proto->oldoldbufptr - ols : 0);
11137 parser->linestart = ls + (proto->linestart >= ols ?
11138 proto->linestart - ols : 0);
11139 parser->last_uni = ls + (proto->last_uni >= ols ?
11140 proto->last_uni - ols : 0);
11141 parser->last_lop = ls + (proto->last_lop >= ols ?
11142 proto->last_lop - ols : 0);
11143
11144 parser->bufend = ls + SvCUR(parser->linestr);
11145 }
199e78b7 11146
14047fc9
DM
11147 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11148
2f9285f8 11149
199e78b7
DM
11150#ifdef PERL_MAD
11151 parser->endwhite = proto->endwhite;
11152 parser->faketokens = proto->faketokens;
11153 parser->lasttoke = proto->lasttoke;
11154 parser->nextwhite = proto->nextwhite;
11155 parser->realtokenstart = proto->realtokenstart;
11156 parser->skipwhite = proto->skipwhite;
11157 parser->thisclose = proto->thisclose;
11158 parser->thismad = proto->thismad;
11159 parser->thisopen = proto->thisopen;
11160 parser->thisstuff = proto->thisstuff;
11161 parser->thistoken = proto->thistoken;
11162 parser->thiswhite = proto->thiswhite;
fb205e7a
DM
11163
11164 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11165 parser->curforce = proto->curforce;
11166#else
11167 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11168 Copy(proto->nexttype, parser->nexttype, 5, I32);
11169 parser->nexttoke = proto->nexttoke;
199e78b7 11170#endif
f0c5aa00
DM
11171
11172 /* XXX should clone saved_curcop here, but we aren't passed
11173 * proto_perl; so do it in perl_clone_using instead */
11174
199e78b7
DM
11175 return parser;
11176}
11177
d2d73c3e 11178
d2d73c3e 11179/* duplicate a file handle */
645c22ef 11180
1d7c1841 11181PerlIO *
3be3cdd6 11182Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
1d7c1841
GS
11183{
11184 PerlIO *ret;
53c1dcc0 11185
7918f24d 11186 PERL_ARGS_ASSERT_FP_DUP;
53c1dcc0 11187 PERL_UNUSED_ARG(type);
73d840c0 11188
1d7c1841
GS
11189 if (!fp)
11190 return (PerlIO*)NULL;
11191
11192 /* look for it in the table first */
11193 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11194 if (ret)
11195 return ret;
11196
11197 /* create anew and remember what it is */
ecdeb87c 11198 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
1d7c1841
GS
11199 ptr_table_store(PL_ptr_table, fp, ret);
11200 return ret;
11201}
11202
645c22ef
DM
11203/* duplicate a directory handle */
11204
1d7c1841 11205DIR *
60b22aca 11206Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
1d7c1841 11207{
11a11ecf 11208 DIR *ret;
60b22aca
JD
11209
11210#ifdef HAS_FCHDIR
11a11ecf
FC
11211 DIR *pwd;
11212 register const Direntry_t *dirent;
11213 char smallbuf[256];
11214 char *name = NULL;
11215 STRLEN len = -1;
11216 long pos;
11217#endif
11218
96a5add6 11219 PERL_UNUSED_CONTEXT;
60b22aca 11220 PERL_ARGS_ASSERT_DIRP_DUP;
11a11ecf 11221
1d7c1841
GS
11222 if (!dp)
11223 return (DIR*)NULL;
60b22aca 11224
11a11ecf
FC
11225 /* look for it in the table first */
11226 ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11227 if (ret)
11228 return ret;
11229
60b22aca
JD
11230#ifdef HAS_FCHDIR
11231
11232 PERL_UNUSED_ARG(param);
11233
11a11ecf
FC
11234 /* create anew */
11235
11236 /* open the current directory (so we can switch back) */
11237 if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11238
11239 /* chdir to our dir handle and open the present working directory */
11240 if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11241 PerlDir_close(pwd);
11242 return (DIR *)NULL;
11243 }
11244 /* Now we should have two dir handles pointing to the same dir. */
11245
11246 /* Be nice to the calling code and chdir back to where we were. */
11247 fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11248
11249 /* We have no need of the pwd handle any more. */
11250 PerlDir_close(pwd);
11251
11252#ifdef DIRNAMLEN
11253# define d_namlen(d) (d)->d_namlen
11254#else
11255# define d_namlen(d) strlen((d)->d_name)
11256#endif
11257 /* Iterate once through dp, to get the file name at the current posi-
11258 tion. Then step back. */
11259 pos = PerlDir_tell(dp);
11260 if ((dirent = PerlDir_read(dp))) {
11261 len = d_namlen(dirent);
11262 if (len <= sizeof smallbuf) name = smallbuf;
11263 else Newx(name, len, char);
11264 Move(dirent->d_name, name, len, char);
11265 }
11266 PerlDir_seek(dp, pos);
11267
11268 /* Iterate through the new dir handle, till we find a file with the
11269 right name. */
11270 if (!dirent) /* just before the end */
11271 for(;;) {
11272 pos = PerlDir_tell(ret);
11273 if (PerlDir_read(ret)) continue; /* not there yet */
11274 PerlDir_seek(ret, pos); /* step back */
11275 break;
11276 }
11277 else {
11278 const long pos0 = PerlDir_tell(ret);
11279 for(;;) {
11280 pos = PerlDir_tell(ret);
11281 if ((dirent = PerlDir_read(ret))) {
11282 if (len == d_namlen(dirent)
11283 && memEQ(name, dirent->d_name, len)) {
11284 /* found it */
11285 PerlDir_seek(ret, pos); /* step back */
11286 break;
11287 }
11288 /* else we are not there yet; keep iterating */
11289 }
11290 else { /* This is not meant to happen. The best we can do is
11291 reset the iterator to the beginning. */
11292 PerlDir_seek(ret, pos0);
11293 break;
11294 }
11295 }
11296 }
11297#undef d_namlen
11298
11299 if (name && name != smallbuf)
11300 Safefree(name);
60b22aca
JD
11301#endif
11302
11303#ifdef WIN32
11304 ret = win32_dirp_dup(dp, param);
11305#endif
11a11ecf
FC
11306
11307 /* pop it in the pointer table */
60b22aca
JD
11308 if (ret)
11309 ptr_table_store(PL_ptr_table, dp, ret);
11a11ecf
FC
11310
11311 return ret;
1d7c1841
GS
11312}
11313
ff276b08 11314/* duplicate a typeglob */
645c22ef 11315
1d7c1841 11316GP *
66ceb532 11317Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
1d7c1841
GS
11318{
11319 GP *ret;
b37c2d43 11320
7918f24d
NC
11321 PERL_ARGS_ASSERT_GP_DUP;
11322
1d7c1841
GS
11323 if (!gp)
11324 return (GP*)NULL;
11325 /* look for it in the table first */
11326 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11327 if (ret)
11328 return ret;
11329
11330 /* create anew and remember what it is */
a02a5408 11331 Newxz(ret, 1, GP);
1d7c1841
GS
11332 ptr_table_store(PL_ptr_table, gp, ret);
11333
11334 /* clone */
46d65037
NC
11335 /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11336 on Newxz() to do this for us. */
d2d73c3e
AB
11337 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
11338 ret->gp_io = io_dup_inc(gp->gp_io, param);
11339 ret->gp_form = cv_dup_inc(gp->gp_form, param);
11340 ret->gp_av = av_dup_inc(gp->gp_av, param);
11341 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
11342 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11343 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
1d7c1841 11344 ret->gp_cvgen = gp->gp_cvgen;
1d7c1841 11345 ret->gp_line = gp->gp_line;
566771cc 11346 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
1d7c1841
GS
11347 return ret;
11348}
11349
645c22ef
DM
11350/* duplicate a chain of magic */
11351
1d7c1841 11352MAGIC *
b88ec9b8 11353Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
1d7c1841 11354{
c160a186 11355 MAGIC *mgret = NULL;
0228edf6 11356 MAGIC **mgprev_p = &mgret;
7918f24d
NC
11357
11358 PERL_ARGS_ASSERT_MG_DUP;
11359
1d7c1841
GS
11360 for (; mg; mg = mg->mg_moremagic) {
11361 MAGIC *nmg;
803f2748
DM
11362
11363 if ((param->flags & CLONEf_JOIN_IN)
11364 && mg->mg_type == PERL_MAGIC_backref)
11365 /* when joining, we let the individual SVs add themselves to
11366 * backref as needed. */
11367 continue;
11368
45f7fcc8 11369 Newx(nmg, 1, MAGIC);
0228edf6
NC
11370 *mgprev_p = nmg;
11371 mgprev_p = &(nmg->mg_moremagic);
11372
45f7fcc8
NC
11373 /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11374 dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11375 from the original commit adding Perl_mg_dup() - revision 4538.
11376 Similarly there is the annotation "XXX random ptr?" next to the
11377 assignment to nmg->mg_ptr. */
11378 *nmg = *mg;
11379
288b8c02 11380 /* FIXME for plugins
45f7fcc8
NC
11381 if (nmg->mg_type == PERL_MAGIC_qr) {
11382 nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
1d7c1841 11383 }
288b8c02
NC
11384 else
11385 */
5648c0ae
DM
11386 nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11387 ? nmg->mg_type == PERL_MAGIC_backref
11388 /* The backref AV has its reference
11389 * count deliberately bumped by 1 */
11390 ? SvREFCNT_inc(av_dup_inc((const AV *)
11391 nmg->mg_obj, param))
11392 : sv_dup_inc(nmg->mg_obj, param)
11393 : sv_dup(nmg->mg_obj, param);
45f7fcc8
NC
11394
11395 if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11396 if (nmg->mg_len > 0) {
11397 nmg->mg_ptr = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11398 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11399 AMT_AMAGIC((AMT*)nmg->mg_ptr))
14befaf4 11400 {
0bcc34c2 11401 AMT * const namtp = (AMT*)nmg->mg_ptr;
538f2e76
NC
11402 sv_dup_inc_multiple((SV**)(namtp->table),
11403 (SV**)(namtp->table), NofAMmeth, param);
1d7c1841
GS
11404 }
11405 }
45f7fcc8
NC
11406 else if (nmg->mg_len == HEf_SVKEY)
11407 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
1d7c1841 11408 }
45f7fcc8 11409 if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
16c91539 11410 nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
68795e93 11411 }
1d7c1841
GS
11412 }
11413 return mgret;
11414}
11415
4674ade5
NC
11416#endif /* USE_ITHREADS */
11417
db93c0c4
NC
11418struct ptr_tbl_arena {
11419 struct ptr_tbl_arena *next;
11420 struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers. */
11421};
11422
645c22ef
DM
11423/* create a new pointer-mapping table */
11424
1d7c1841
GS
11425PTR_TBL_t *
11426Perl_ptr_table_new(pTHX)
11427{
11428 PTR_TBL_t *tbl;
96a5add6
AL
11429 PERL_UNUSED_CONTEXT;
11430
b3a120bf 11431 Newx(tbl, 1, PTR_TBL_t);
1d7c1841
GS
11432 tbl->tbl_max = 511;
11433 tbl->tbl_items = 0;
db93c0c4
NC
11434 tbl->tbl_arena = NULL;
11435 tbl->tbl_arena_next = NULL;
11436 tbl->tbl_arena_end = NULL;
a02a5408 11437 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
1d7c1841
GS
11438 return tbl;
11439}
11440
7119fd33
NC
11441#define PTR_TABLE_HASH(ptr) \
11442 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
134ca3d6 11443
645c22ef
DM
11444/* map an existing pointer using a table */
11445
7bf61b54 11446STATIC PTR_TBL_ENT_t *
1eb6e4ca 11447S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
7918f24d 11448{
1d7c1841 11449 PTR_TBL_ENT_t *tblent;
4373e329 11450 const UV hash = PTR_TABLE_HASH(sv);
7918f24d
NC
11451
11452 PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11453
1d7c1841
GS
11454 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11455 for (; tblent; tblent = tblent->next) {
11456 if (tblent->oldval == sv)
7bf61b54 11457 return tblent;
1d7c1841 11458 }
d4c19fe8 11459 return NULL;
7bf61b54
NC
11460}
11461
11462void *
1eb6e4ca 11463Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
7bf61b54 11464{
b0e6ae5b 11465 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
7918f24d
NC
11466
11467 PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
96a5add6 11468 PERL_UNUSED_CONTEXT;
7918f24d 11469
d4c19fe8 11470 return tblent ? tblent->newval : NULL;
1d7c1841
GS
11471}
11472
645c22ef
DM
11473/* add a new entry to a pointer-mapping table */
11474
1d7c1841 11475void
1eb6e4ca 11476Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
1d7c1841 11477{
0c9fdfe0 11478 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
7918f24d
NC
11479
11480 PERL_ARGS_ASSERT_PTR_TABLE_STORE;
96a5add6 11481 PERL_UNUSED_CONTEXT;
1d7c1841 11482
7bf61b54
NC
11483 if (tblent) {
11484 tblent->newval = newsv;
11485 } else {
11486 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11487
db93c0c4
NC
11488 if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11489 struct ptr_tbl_arena *new_arena;
11490
11491 Newx(new_arena, 1, struct ptr_tbl_arena);
11492 new_arena->next = tbl->tbl_arena;
11493 tbl->tbl_arena = new_arena;
11494 tbl->tbl_arena_next = new_arena->array;
11495 tbl->tbl_arena_end = new_arena->array
11496 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11497 }
11498
11499 tblent = tbl->tbl_arena_next++;
d2a0f284 11500
7bf61b54
NC
11501 tblent->oldval = oldsv;
11502 tblent->newval = newsv;
11503 tblent->next = tbl->tbl_ary[entry];
11504 tbl->tbl_ary[entry] = tblent;
11505 tbl->tbl_items++;
11506 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11507 ptr_table_split(tbl);
1d7c1841 11508 }
1d7c1841
GS
11509}
11510
645c22ef
DM
11511/* double the hash bucket size of an existing ptr table */
11512
1d7c1841 11513void
1eb6e4ca 11514Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
1d7c1841
GS
11515{
11516 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
4373e329 11517 const UV oldsize = tbl->tbl_max + 1;
1d7c1841
GS
11518 UV newsize = oldsize * 2;
11519 UV i;
7918f24d
NC
11520
11521 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
96a5add6 11522 PERL_UNUSED_CONTEXT;
1d7c1841
GS
11523
11524 Renew(ary, newsize, PTR_TBL_ENT_t*);
11525 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11526 tbl->tbl_max = --newsize;
11527 tbl->tbl_ary = ary;
11528 for (i=0; i < oldsize; i++, ary++) {
4c9d89c5
NC
11529 PTR_TBL_ENT_t **entp = ary;
11530 PTR_TBL_ENT_t *ent = *ary;
11531 PTR_TBL_ENT_t **curentp;
11532 if (!ent)
1d7c1841
GS
11533 continue;
11534 curentp = ary + oldsize;
4c9d89c5 11535 do {
134ca3d6 11536 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
1d7c1841
GS
11537 *entp = ent->next;
11538 ent->next = *curentp;
11539 *curentp = ent;
1d7c1841
GS
11540 }
11541 else
11542 entp = &ent->next;
4c9d89c5
NC
11543 ent = *entp;
11544 } while (ent);
1d7c1841
GS
11545 }
11546}
11547
645c22ef 11548/* remove all the entries from a ptr table */
5c5ade3e 11549/* Deprecated - will be removed post 5.14 */
645c22ef 11550
a0739874 11551void
1eb6e4ca 11552Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
a0739874 11553{
d5cefff9 11554 if (tbl && tbl->tbl_items) {
db93c0c4 11555 struct ptr_tbl_arena *arena = tbl->tbl_arena;
a0739874 11556
db93c0c4 11557 Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
ab1e7f95 11558
db93c0c4
NC
11559 while (arena) {
11560 struct ptr_tbl_arena *next = arena->next;
11561
11562 Safefree(arena);
11563 arena = next;
11564 };
a0739874 11565
d5cefff9 11566 tbl->tbl_items = 0;
db93c0c4
NC
11567 tbl->tbl_arena = NULL;
11568 tbl->tbl_arena_next = NULL;
11569 tbl->tbl_arena_end = NULL;
d5cefff9 11570 }
a0739874
DM
11571}
11572
645c22ef
DM
11573/* clear and free a ptr table */
11574
a0739874 11575void
1eb6e4ca 11576Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
a0739874 11577{
5c5ade3e
NC
11578 struct ptr_tbl_arena *arena;
11579
a0739874
DM
11580 if (!tbl) {
11581 return;
11582 }
5c5ade3e
NC
11583
11584 arena = tbl->tbl_arena;
11585
11586 while (arena) {
11587 struct ptr_tbl_arena *next = arena->next;
11588
11589 Safefree(arena);
11590 arena = next;
11591 }
11592
a0739874
DM
11593 Safefree(tbl->tbl_ary);
11594 Safefree(tbl);
11595}
11596
4674ade5 11597#if defined(USE_ITHREADS)
5bd07a3d 11598
83841fad 11599void
1eb6e4ca 11600Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
83841fad 11601{
7918f24d
NC
11602 PERL_ARGS_ASSERT_RVPV_DUP;
11603
83841fad 11604 if (SvROK(sstr)) {
803f2748
DM
11605 if (SvWEAKREF(sstr)) {
11606 SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11607 if (param->flags & CLONEf_JOIN_IN) {
11608 /* if joining, we add any back references individually rather
11609 * than copying the whole backref array */
11610 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11611 }
11612 }
11613 else
11614 SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
83841fad 11615 }
3f7c398e 11616 else if (SvPVX_const(sstr)) {
83841fad
NIS
11617 /* Has something there */
11618 if (SvLEN(sstr)) {
68795e93 11619 /* Normal PV - clone whole allocated space */
3f7c398e 11620 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
d3d0e6f1
NC
11621 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11622 /* Not that normal - actually sstr is copy on write.
486ec47a 11623 But we are a true, independent SV, so: */
d3d0e6f1
NC
11624 SvREADONLY_off(dstr);
11625 SvFAKE_off(dstr);
11626 }
68795e93 11627 }
83841fad
NIS
11628 else {
11629 /* Special case - not normally malloced for some reason */
f7877b28
NC
11630 if (isGV_with_GP(sstr)) {
11631 /* Don't need to do anything here. */
11632 }
11633 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
ef10be65
NC
11634 /* A "shared" PV - clone it as "shared" PV */
11635 SvPV_set(dstr,
11636 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11637 param)));
83841fad
NIS
11638 }
11639 else {
11640 /* Some other special case - random pointer */
d2c6dc5e 11641 SvPV_set(dstr, (char *) SvPVX_const(sstr));
d3d0e6f1 11642 }
83841fad
NIS
11643 }
11644 }
11645 else {
4608196e 11646 /* Copy the NULL */
4df7f6af 11647 SvPV_set(dstr, NULL);
83841fad
NIS
11648 }
11649}
11650
538f2e76
NC
11651/* duplicate a list of SVs. source and dest may point to the same memory. */
11652static SV **
11653S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11654 SSize_t items, CLONE_PARAMS *const param)
11655{
11656 PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11657
11658 while (items-- > 0) {
11659 *dest++ = sv_dup_inc(*source++, param);
11660 }
11661
11662 return dest;
11663}
11664
662fb8b2
NC
11665/* duplicate an SV of any type (including AV, HV etc) */
11666
d08d57ef
NC
11667static SV *
11668S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
1d7c1841 11669{
27da23d5 11670 dVAR;
1d7c1841
GS
11671 SV *dstr;
11672
d08d57ef 11673 PERL_ARGS_ASSERT_SV_DUP_COMMON;
7918f24d 11674
e4787c0c 11675 if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
bfd95973
NC
11676#ifdef DEBUG_LEAKING_SCALARS_ABORT
11677 abort();
11678#endif
6136c704 11679 return NULL;
bfd95973 11680 }
1d7c1841 11681 /* look for it in the table first */
daba3364 11682 dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
1d7c1841
GS
11683 if (dstr)
11684 return dstr;
11685
0405e91e
AB
11686 if(param->flags & CLONEf_JOIN_IN) {
11687 /** We are joining here so we don't want do clone
11688 something that is bad **/
eb86f8b3 11689 if (SvTYPE(sstr) == SVt_PVHV) {
9bde8eb0 11690 const HEK * const hvname = HvNAME_HEK(sstr);
96bafef9 11691 if (hvname) {
eb86f8b3 11692 /** don't clone stashes if they already exist **/
96bafef9
DM
11693 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
11694 ptr_table_store(PL_ptr_table, sstr, dstr);
11695 return dstr;
11696 }
0405e91e
AB
11697 }
11698 }
11699
1d7c1841
GS
11700 /* create anew and remember what it is */
11701 new_SV(dstr);
fd0854ff
DM
11702
11703#ifdef DEBUG_LEAKING_SCALARS
11704 dstr->sv_debug_optype = sstr->sv_debug_optype;
11705 dstr->sv_debug_line = sstr->sv_debug_line;
11706 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
cd676548 11707 dstr->sv_debug_parent = (SV*)sstr;
de61950a 11708 FREE_SV_DEBUG_FILE(dstr);
fd0854ff 11709 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
fd0854ff
DM
11710#endif
11711
1d7c1841
GS
11712 ptr_table_store(PL_ptr_table, sstr, dstr);
11713
11714 /* clone */
11715 SvFLAGS(dstr) = SvFLAGS(sstr);
11716 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
11717 SvREFCNT(dstr) = 0; /* must be before any other dups! */
11718
11719#ifdef DEBUGGING
3f7c398e 11720 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
1d7c1841 11721 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
6c9570dc 11722 (void*)PL_watch_pvx, SvPVX_const(sstr));
1d7c1841
GS
11723#endif
11724
9660f481
DM
11725 /* don't clone objects whose class has asked us not to */
11726 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
33de8e4a 11727 SvFLAGS(dstr) = 0;
9660f481
DM
11728 return dstr;
11729 }
11730
1d7c1841
GS
11731 switch (SvTYPE(sstr)) {
11732 case SVt_NULL:
11733 SvANY(dstr) = NULL;
11734 break;
11735 case SVt_IV:
339049b0 11736 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
4df7f6af
NC
11737 if(SvROK(sstr)) {
11738 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11739 } else {
11740 SvIV_set(dstr, SvIVX(sstr));
11741 }
1d7c1841
GS
11742 break;
11743 case SVt_NV:
11744 SvANY(dstr) = new_XNV();
9d6ce603 11745 SvNV_set(dstr, SvNVX(sstr));
1d7c1841 11746 break;
cecf5685 11747 /* case SVt_BIND: */
662fb8b2
NC
11748 default:
11749 {
11750 /* These are all the types that need complex bodies allocating. */
662fb8b2 11751 void *new_body;
2bcc16b3
NC
11752 const svtype sv_type = SvTYPE(sstr);
11753 const struct body_details *const sv_type_details
11754 = bodies_by_type + sv_type;
662fb8b2 11755
93e68bfb 11756 switch (sv_type) {
662fb8b2 11757 default:
bb263b4e 11758 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
662fb8b2
NC
11759 break;
11760
662fb8b2 11761 case SVt_PVGV:
c22188b4
NC
11762 case SVt_PVIO:
11763 case SVt_PVFM:
11764 case SVt_PVHV:
11765 case SVt_PVAV:
662fb8b2 11766 case SVt_PVCV:
662fb8b2 11767 case SVt_PVLV:
5c35adbb 11768 case SVt_REGEXP:
662fb8b2 11769 case SVt_PVMG:
662fb8b2 11770 case SVt_PVNV:
662fb8b2 11771 case SVt_PVIV:
662fb8b2 11772 case SVt_PV:
d2a0f284 11773 assert(sv_type_details->body_size);
c22188b4 11774 if (sv_type_details->arena) {
d2a0f284 11775 new_body_inline(new_body, sv_type);
c22188b4 11776 new_body
b9502f15 11777 = (void*)((char*)new_body - sv_type_details->offset);
c22188b4
NC
11778 } else {
11779 new_body = new_NOARENA(sv_type_details);
11780 }
1d7c1841 11781 }
662fb8b2
NC
11782 assert(new_body);
11783 SvANY(dstr) = new_body;
11784
2bcc16b3 11785#ifndef PURIFY
b9502f15
NC
11786 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11787 ((char*)SvANY(dstr)) + sv_type_details->offset,
f32993d6 11788 sv_type_details->copy, char);
2bcc16b3
NC
11789#else
11790 Copy(((char*)SvANY(sstr)),
11791 ((char*)SvANY(dstr)),
d2a0f284 11792 sv_type_details->body_size + sv_type_details->offset, char);
2bcc16b3 11793#endif
662fb8b2 11794
f7877b28 11795 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
5bb89d25
NC
11796 && !isGV_with_GP(dstr)
11797 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
662fb8b2
NC
11798 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11799
11800 /* The Copy above means that all the source (unduplicated) pointers
11801 are now in the destination. We can check the flags and the
11802 pointers in either, but it's possible that there's less cache
11803 missing by always going for the destination.
11804 FIXME - instrument and check that assumption */
f32993d6 11805 if (sv_type >= SVt_PVMG) {
885ffcb3 11806 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
73d95100 11807 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
e736a858 11808 } else if (SvMAGIC(dstr))
662fb8b2
NC
11809 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11810 if (SvSTASH(dstr))
11811 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
1d7c1841 11812 }
662fb8b2 11813
f32993d6
NC
11814 /* The cast silences a GCC warning about unhandled types. */
11815 switch ((int)sv_type) {
662fb8b2
NC
11816 case SVt_PV:
11817 break;
11818 case SVt_PVIV:
11819 break;
11820 case SVt_PVNV:
11821 break;
11822 case SVt_PVMG:
11823 break;
5c35adbb 11824 case SVt_REGEXP:
288b8c02 11825 /* FIXME for plugins */
d2f13c59 11826 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
f708cfc1 11827 break;
662fb8b2
NC
11828 case SVt_PVLV:
11829 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11830 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11831 LvTARG(dstr) = dstr;
11832 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
daba3364 11833 LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
662fb8b2
NC
11834 else
11835 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
662fb8b2 11836 case SVt_PVGV:
61e14cb4 11837 /* non-GP case already handled above */
cecf5685 11838 if(isGV_with_GP(sstr)) {
566771cc 11839 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
39cb70dc
NC
11840 /* Don't call sv_add_backref here as it's going to be
11841 created as part of the magic cloning of the symbol
27bca322
FC
11842 table--unless this is during a join and the stash
11843 is not actually being cloned. */
f7877b28
NC
11844 /* Danger Will Robinson - GvGP(dstr) isn't initialised
11845 at the point of this comment. */
39cb70dc 11846 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
ab95db60
DM
11847 if (param->flags & CLONEf_JOIN_IN)
11848 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
c43ae56f 11849 GvGP_set(dstr, gp_dup(GvGP(sstr), param));
f7877b28 11850 (void)GpREFCNT_inc(GvGP(dstr));
61e14cb4 11851 }
662fb8b2
NC
11852 break;
11853 case SVt_PVIO:
5486870f 11854 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
662fb8b2
NC
11855 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11856 /* I have no idea why fake dirp (rsfps)
11857 should be treated differently but otherwise
11858 we end up with leaks -- sky*/
11859 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
11860 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
11861 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11862 } else {
11863 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
11864 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
11865 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
100ce7e1 11866 if (IoDIRP(dstr)) {
60b22aca 11867 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr), param);
100ce7e1 11868 } else {
6f207bd3 11869 NOOP;
100ce7e1
NC
11870 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
11871 }
6f7e8353 11872 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
662fb8b2 11873 }
6f7e8353
NC
11874 if (IoOFP(dstr) == IoIFP(sstr))
11875 IoOFP(dstr) = IoIFP(dstr);
11876 else
11877 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
662fb8b2
NC
11878 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
11879 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
11880 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
11881 break;
11882 case SVt_PVAV:
2779b694
KB
11883 /* avoid cloning an empty array */
11884 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
662fb8b2 11885 SV **dst_ary, **src_ary;
502c6561 11886 SSize_t items = AvFILLp((const AV *)sstr) + 1;
662fb8b2 11887
502c6561
NC
11888 src_ary = AvARRAY((const AV *)sstr);
11889 Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
662fb8b2 11890 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
502c6561
NC
11891 AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11892 AvALLOC((const AV *)dstr) = dst_ary;
11893 if (AvREAL((const AV *)sstr)) {
538f2e76
NC
11894 dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11895 param);
662fb8b2
NC
11896 }
11897 else {
11898 while (items-- > 0)
11899 *dst_ary++ = sv_dup(*src_ary++, param);
11900 }
502c6561 11901 items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
662fb8b2
NC
11902 while (items-- > 0) {
11903 *dst_ary++ = &PL_sv_undef;
11904 }
bfcb3514 11905 }
662fb8b2 11906 else {
502c6561
NC
11907 AvARRAY(MUTABLE_AV(dstr)) = NULL;
11908 AvALLOC((const AV *)dstr) = (SV**)NULL;
2779b694
KB
11909 AvMAX( (const AV *)dstr) = -1;
11910 AvFILLp((const AV *)dstr) = -1;
b79f7545 11911 }
662fb8b2
NC
11912 break;
11913 case SVt_PVHV:
1d193675 11914 if (HvARRAY((const HV *)sstr)) {
7e265ef3
AL
11915 STRLEN i = 0;
11916 const bool sharekeys = !!HvSHAREKEYS(sstr);
11917 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
11918 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
11919 char *darray;
11920 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
11921 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
11922 char);
11923 HvARRAY(dstr) = (HE**)darray;
11924 while (i <= sxhv->xhv_max) {
11925 const HE * const source = HvARRAY(sstr)[i];
11926 HvARRAY(dstr)[i] = source
11927 ? he_dup(source, sharekeys, param) : 0;
11928 ++i;
11929 }
11930 if (SvOOK(sstr)) {
7e265ef3
AL
11931 const struct xpvhv_aux * const saux = HvAUX(sstr);
11932 struct xpvhv_aux * const daux = HvAUX(dstr);
11933 /* This flag isn't copied. */
11934 /* SvOOK_on(hv) attacks the IV flags. */
11935 SvFLAGS(dstr) |= SVf_OOK;
11936
b7247a80 11937 if (saux->xhv_name_count) {
36b0d498 11938 HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
78b79c77
FC
11939 const I32 count
11940 = saux->xhv_name_count < 0
11941 ? -saux->xhv_name_count
11942 : saux->xhv_name_count;
b7247a80
FC
11943 HEK **shekp = sname + count;
11944 HEK **dhekp;
15d9236d
NC
11945 Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
11946 dhekp = daux->xhv_name_u.xhvnameu_names + count;
b7247a80
FC
11947 while (shekp-- > sname) {
11948 dhekp--;
11949 *dhekp = hek_dup(*shekp, param);
11950 }
11951 }
15d9236d
NC
11952 else {
11953 daux->xhv_name_u.xhvnameu_name
11954 = hek_dup(saux->xhv_name_u.xhvnameu_name,
11955 param);
11956 }
b7247a80 11957 daux->xhv_name_count = saux->xhv_name_count;
7e265ef3
AL
11958
11959 daux->xhv_riter = saux->xhv_riter;
11960 daux->xhv_eiter = saux->xhv_eiter
11961 ? he_dup(saux->xhv_eiter,
f2338a2e 11962 cBOOL(HvSHAREKEYS(sstr)), param) : 0;
b17f5ab7 11963 /* backref array needs refcnt=2; see sv_add_backref */
7e265ef3 11964 daux->xhv_backreferences =
ab95db60
DM
11965 (param->flags & CLONEf_JOIN_IN)
11966 /* when joining, we let the individual GVs and
11967 * CVs add themselves to backref as
11968 * needed. This avoids pulling in stuff
11969 * that isn't required, and simplifies the
11970 * case where stashes aren't cloned back
11971 * if they already exist in the parent
11972 * thread */
11973 ? NULL
11974 : saux->xhv_backreferences
5648c0ae
DM
11975 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
11976 ? MUTABLE_AV(SvREFCNT_inc(
11977 sv_dup_inc((const SV *)
11978 saux->xhv_backreferences, param)))
11979 : MUTABLE_AV(sv_dup((const SV *)
11980 saux->xhv_backreferences, param))
86f55936 11981 : 0;
e1a479c5
BB
11982
11983 daux->xhv_mro_meta = saux->xhv_mro_meta
11984 ? mro_meta_dup(saux->xhv_mro_meta, param)
11985 : 0;
11986
7e265ef3 11987 /* Record stashes for possible cloning in Perl_clone(). */
605aedcc 11988 if (HvNAME(sstr))
7e265ef3 11989 av_push(param->stashes, dstr);
662fb8b2 11990 }
662fb8b2 11991 }
7e265ef3 11992 else
85fbaab2 11993 HvARRAY(MUTABLE_HV(dstr)) = NULL;
662fb8b2 11994 break;
662fb8b2 11995 case SVt_PVCV:
bb172083
NC
11996 if (!(param->flags & CLONEf_COPY_STACKS)) {
11997 CvDEPTH(dstr) = 0;
11998 }
4c74a7df 11999 /*FALLTHROUGH*/
bb172083 12000 case SVt_PVFM:
662fb8b2 12001 /* NOTE: not refcounted */
c68d9564
Z
12002 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12003 hv_dup(CvSTASH(dstr), param);
ab95db60
DM
12004 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12005 Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
f352ce09
NC
12006 if (!CvISXSUB(dstr)) {
12007 OP_REFCNT_LOCK;
d04ba589 12008 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
f352ce09 12009 OP_REFCNT_UNLOCK;
f352ce09 12010 } else if (CvCONST(dstr)) {
d32faaf3 12011 CvXSUBANY(dstr).any_ptr =
daba3364 12012 sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
662fb8b2 12013 }
bad4ae38 12014 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
662fb8b2
NC
12015 /* don't dup if copying back - CvGV isn't refcounted, so the
12016 * duped GV may never be freed. A bit of a hack! DAPM */
b3f91e91 12017 SvANY(MUTABLE_CV(dstr))->xcv_gv =
cfc1e951 12018 CvCVGV_RC(dstr)
803f2748
DM
12019 ? gv_dup_inc(CvGV(sstr), param)
12020 : (param->flags & CLONEf_JOIN_IN)
12021 ? NULL
12022 : gv_dup(CvGV(sstr), param);
12023
d5b1589c 12024 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
662fb8b2
NC
12025 CvOUTSIDE(dstr) =
12026 CvWEAKOUTSIDE(sstr)
12027 ? cv_dup( CvOUTSIDE(dstr), param)
12028 : cv_dup_inc(CvOUTSIDE(dstr), param);
662fb8b2 12029 break;
bfcb3514 12030 }
1d7c1841 12031 }
1d7c1841
GS
12032 }
12033
12034 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12035 ++PL_sv_objcount;
12036
12037 return dstr;
d2d73c3e 12038 }
1d7c1841 12039
a09252eb
NC
12040SV *
12041Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12042{
12043 PERL_ARGS_ASSERT_SV_DUP_INC;
d08d57ef
NC
12044 return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12045}
12046
12047SV *
12048Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12049{
12050 SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12051 PERL_ARGS_ASSERT_SV_DUP;
12052
04518cc3
NC
12053 /* Track every SV that (at least initially) had a reference count of 0.
12054 We need to do this by holding an actual reference to it in this array.
12055 If we attempt to cheat, turn AvREAL_off(), and store only pointers
12056 (akin to the stashes hash, and the perl stack), we come unstuck if
12057 a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12058 thread) is manipulated in a CLONE method, because CLONE runs before the
12059 unreferenced array is walked to find SVs still with SvREFCNT() == 0
12060 (and fix things up by giving each a reference via the temps stack).
12061 Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12062 then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12063 before the walk of unreferenced happens and a reference to that is SV
12064 added to the temps stack. At which point we have the same SV considered
12065 to be in use, and free to be re-used. Not good.
12066 */
d08d57ef
NC
12067 if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12068 assert(param->unreferenced);
04518cc3 12069 av_push(param->unreferenced, SvREFCNT_inc(dstr));
d08d57ef
NC
12070 }
12071
12072 return dstr;
a09252eb
NC
12073}
12074
645c22ef
DM
12075/* duplicate a context */
12076
1d7c1841 12077PERL_CONTEXT *
a8fc9800 12078Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
1d7c1841
GS
12079{
12080 PERL_CONTEXT *ncxs;
12081
7918f24d
NC
12082 PERL_ARGS_ASSERT_CX_DUP;
12083
1d7c1841
GS
12084 if (!cxs)
12085 return (PERL_CONTEXT*)NULL;
12086
12087 /* look for it in the table first */
12088 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12089 if (ncxs)
12090 return ncxs;
12091
12092 /* create anew and remember what it is */
c2d565bf 12093 Newx(ncxs, max + 1, PERL_CONTEXT);
1d7c1841 12094 ptr_table_store(PL_ptr_table, cxs, ncxs);
c2d565bf 12095 Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
1d7c1841
GS
12096
12097 while (ix >= 0) {
c445ea15 12098 PERL_CONTEXT * const ncx = &ncxs[ix];
c2d565bf 12099 if (CxTYPE(ncx) == CXt_SUBST) {
1d7c1841
GS
12100 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12101 }
12102 else {
c2d565bf 12103 switch (CxTYPE(ncx)) {
1d7c1841 12104 case CXt_SUB:
c2d565bf
NC
12105 ncx->blk_sub.cv = (ncx->blk_sub.olddepth == 0
12106 ? cv_dup_inc(ncx->blk_sub.cv, param)
12107 : cv_dup(ncx->blk_sub.cv,param));
bafb2adc 12108 ncx->blk_sub.argarray = (CxHASARGS(ncx)
c2d565bf
NC
12109 ? av_dup_inc(ncx->blk_sub.argarray,
12110 param)
7d49f689 12111 : NULL);
c2d565bf
NC
12112 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,
12113 param);
d8d97e70 12114 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
c2d565bf 12115 ncx->blk_sub.oldcomppad);
1d7c1841
GS
12116 break;
12117 case CXt_EVAL:
c2d565bf
NC
12118 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12119 param);
12120 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
1d7c1841 12121 break;
d01136d6 12122 case CXt_LOOP_LAZYSV:
d01136d6
BS
12123 ncx->blk_loop.state_u.lazysv.end
12124 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
840fe433 12125 /* We are taking advantage of av_dup_inc and sv_dup_inc
486ec47a 12126 actually being the same function, and order equivalence of
840fe433
NC
12127 the two unions.
12128 We can assert the later [but only at run time :-(] */
12129 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12130 (void *) &ncx->blk_loop.state_u.lazysv.cur);
3b719c58 12131 case CXt_LOOP_FOR:
d01136d6
BS
12132 ncx->blk_loop.state_u.ary.ary
12133 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12134 case CXt_LOOP_LAZYIV:
3b719c58 12135 case CXt_LOOP_PLAIN:
e846cb92 12136 if (CxPADLOOP(ncx)) {
df530c37 12137 ncx->blk_loop.itervar_u.oldcomppad
e846cb92 12138 = (PAD*)ptr_table_fetch(PL_ptr_table,
df530c37 12139 ncx->blk_loop.itervar_u.oldcomppad);
e846cb92 12140 } else {
df530c37
DM
12141 ncx->blk_loop.itervar_u.gv
12142 = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12143 param);
e846cb92 12144 }
1d7c1841
GS
12145 break;
12146 case CXt_FORMAT:
f9c764c5
NC
12147 ncx->blk_format.cv = cv_dup(ncx->blk_format.cv, param);
12148 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param);
12149 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
c2d565bf 12150 param);
1d7c1841
GS
12151 break;
12152 case CXt_BLOCK:
12153 case CXt_NULL:
12154 break;
12155 }
12156 }
12157 --ix;
12158 }
12159 return ncxs;
12160}
12161
645c22ef
DM
12162/* duplicate a stack info structure */
12163
1d7c1841 12164PERL_SI *
a8fc9800 12165Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
1d7c1841
GS
12166{
12167 PERL_SI *nsi;
12168
7918f24d
NC
12169 PERL_ARGS_ASSERT_SI_DUP;
12170
1d7c1841
GS
12171 if (!si)
12172 return (PERL_SI*)NULL;
12173
12174 /* look for it in the table first */
12175 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12176 if (nsi)
12177 return nsi;
12178
12179 /* create anew and remember what it is */
a02a5408 12180 Newxz(nsi, 1, PERL_SI);
1d7c1841
GS
12181 ptr_table_store(PL_ptr_table, si, nsi);
12182
d2d73c3e 12183 nsi->si_stack = av_dup_inc(si->si_stack, param);
1d7c1841
GS
12184 nsi->si_cxix = si->si_cxix;
12185 nsi->si_cxmax = si->si_cxmax;
d2d73c3e 12186 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
1d7c1841 12187 nsi->si_type = si->si_type;
d2d73c3e
AB
12188 nsi->si_prev = si_dup(si->si_prev, param);
12189 nsi->si_next = si_dup(si->si_next, param);
1d7c1841
GS
12190 nsi->si_markoff = si->si_markoff;
12191
12192 return nsi;
12193}
12194
12195#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
12196#define TOPINT(ss,ix) ((ss)[ix].any_i32)
12197#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
12198#define TOPLONG(ss,ix) ((ss)[ix].any_long)
12199#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
12200#define TOPIV(ss,ix) ((ss)[ix].any_iv)
c6bf6a65
NC
12201#define POPUV(ss,ix) ((ss)[--(ix)].any_uv)
12202#define TOPUV(ss,ix) ((ss)[ix].any_uv)
38d8b13e
HS
12203#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
12204#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
1d7c1841
GS
12205#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
12206#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
12207#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
12208#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
12209#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12210#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12211
12212/* XXXXX todo */
12213#define pv_dup_inc(p) SAVEPV(p)
12214#define pv_dup(p) SAVEPV(p)
12215#define svp_dup_inc(p,pp) any_dup(p,pp)
12216
645c22ef
DM
12217/* map any object to the new equivent - either something in the
12218 * ptr table, or something in the interpreter structure
12219 */
12220
1d7c1841 12221void *
53c1dcc0 12222Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
1d7c1841
GS
12223{
12224 void *ret;
12225
7918f24d
NC
12226 PERL_ARGS_ASSERT_ANY_DUP;
12227
1d7c1841
GS
12228 if (!v)
12229 return (void*)NULL;
12230
12231 /* look for it in the table first */
12232 ret = ptr_table_fetch(PL_ptr_table, v);
12233 if (ret)
12234 return ret;
12235
12236 /* see if it is part of the interpreter structure */
12237 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
acfe0abc 12238 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
05ec9bb3 12239 else {
1d7c1841 12240 ret = v;
05ec9bb3 12241 }
1d7c1841
GS
12242
12243 return ret;
12244}
12245
645c22ef
DM
12246/* duplicate the save stack */
12247
1d7c1841 12248ANY *
a8fc9800 12249Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
1d7c1841 12250{
53d44271 12251 dVAR;
907b3e23
DM
12252 ANY * const ss = proto_perl->Isavestack;
12253 const I32 max = proto_perl->Isavestack_max;
12254 I32 ix = proto_perl->Isavestack_ix;
1d7c1841 12255 ANY *nss;
daba3364 12256 const SV *sv;
1d193675
NC
12257 const GV *gv;
12258 const AV *av;
12259 const HV *hv;
1d7c1841
GS
12260 void* ptr;
12261 int intval;
12262 long longval;
12263 GP *gp;
12264 IV iv;
b24356f5 12265 I32 i;
c4e33207 12266 char *c = NULL;
1d7c1841 12267 void (*dptr) (void*);
acfe0abc 12268 void (*dxptr) (pTHX_ void*);
1d7c1841 12269
7918f24d
NC
12270 PERL_ARGS_ASSERT_SS_DUP;
12271
a02a5408 12272 Newxz(nss, max, ANY);
1d7c1841
GS
12273
12274 while (ix > 0) {
c6bf6a65
NC
12275 const UV uv = POPUV(ss,ix);
12276 const U8 type = (U8)uv & SAVE_MASK;
12277
12278 TOPUV(nss,ix) = uv;
b24356f5 12279 switch (type) {
cdcdfc56
NC
12280 case SAVEt_CLEARSV:
12281 break;
3e07292d 12282 case SAVEt_HELEM: /* hash element */
daba3364 12283 sv = (const SV *)POPPTR(ss,ix);
3e07292d
NC
12284 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12285 /* fall through */
1d7c1841 12286 case SAVEt_ITEM: /* normal string */
0d1db40e 12287 case SAVEt_GVSV: /* scalar slot in GV */
a41cc44e 12288 case SAVEt_SV: /* scalar reference */
daba3364 12289 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12290 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
12291 /* fall through */
12292 case SAVEt_FREESV:
12293 case SAVEt_MORTALIZESV:
daba3364 12294 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12295 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 12296 break;
05ec9bb3
NIS
12297 case SAVEt_SHARED_PVREF: /* char* in shared space */
12298 c = (char*)POPPTR(ss,ix);
12299 TOPPTR(nss,ix) = savesharedpv(c);
12300 ptr = POPPTR(ss,ix);
12301 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12302 break;
1d7c1841
GS
12303 case SAVEt_GENERIC_SVREF: /* generic sv */
12304 case SAVEt_SVREF: /* scalar reference */
daba3364 12305 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12306 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
12307 ptr = POPPTR(ss,ix);
12308 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12309 break;
a41cc44e 12310 case SAVEt_HV: /* hash reference */
1d7c1841 12311 case SAVEt_AV: /* array reference */
daba3364 12312 sv = (const SV *) POPPTR(ss,ix);
337d28f5 12313 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
12314 /* fall through */
12315 case SAVEt_COMPPAD:
12316 case SAVEt_NSTAB:
daba3364 12317 sv = (const SV *) POPPTR(ss,ix);
3e07292d 12318 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
12319 break;
12320 case SAVEt_INT: /* int reference */
12321 ptr = POPPTR(ss,ix);
12322 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12323 intval = (int)POPINT(ss,ix);
12324 TOPINT(nss,ix) = intval;
12325 break;
12326 case SAVEt_LONG: /* long reference */
12327 ptr = POPPTR(ss,ix);
12328 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12329 longval = (long)POPLONG(ss,ix);
12330 TOPLONG(nss,ix) = longval;
12331 break;
12332 case SAVEt_I32: /* I32 reference */
1d7c1841
GS
12333 ptr = POPPTR(ss,ix);
12334 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
1ccabee8 12335 i = POPINT(ss,ix);
1d7c1841
GS
12336 TOPINT(nss,ix) = i;
12337 break;
12338 case SAVEt_IV: /* IV reference */
12339 ptr = POPPTR(ss,ix);
12340 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12341 iv = POPIV(ss,ix);
12342 TOPIV(nss,ix) = iv;
12343 break;
a41cc44e
NC
12344 case SAVEt_HPTR: /* HV* reference */
12345 case SAVEt_APTR: /* AV* reference */
1d7c1841
GS
12346 case SAVEt_SPTR: /* SV* reference */
12347 ptr = POPPTR(ss,ix);
12348 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 12349 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12350 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
12351 break;
12352 case SAVEt_VPTR: /* random* reference */
12353 ptr = POPPTR(ss,ix);
12354 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
65504245 12355 /* Fall through */
994d373a 12356 case SAVEt_INT_SMALL:
89abef21 12357 case SAVEt_I32_SMALL:
c9441fce 12358 case SAVEt_I16: /* I16 reference */
6c61c2d4 12359 case SAVEt_I8: /* I8 reference */
65504245 12360 case SAVEt_BOOL:
1d7c1841
GS
12361 ptr = POPPTR(ss,ix);
12362 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12363 break;
b03d03b0 12364 case SAVEt_GENERIC_PVREF: /* generic char* */
1d7c1841
GS
12365 case SAVEt_PPTR: /* char* reference */
12366 ptr = POPPTR(ss,ix);
12367 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12368 c = (char*)POPPTR(ss,ix);
12369 TOPPTR(nss,ix) = pv_dup(c);
12370 break;
1d7c1841
GS
12371 case SAVEt_GP: /* scalar reference */
12372 gp = (GP*)POPPTR(ss,ix);
d2d73c3e 12373 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
1d7c1841 12374 (void)GpREFCNT_inc(gp);
10507e11
FC
12375 gv = (const GV *)POPPTR(ss,ix);
12376 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
b9e00b79 12377 break;
1d7c1841
GS
12378 case SAVEt_FREEOP:
12379 ptr = POPPTR(ss,ix);
12380 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12381 /* these are assumed to be refcounted properly */
53c1dcc0 12382 OP *o;
1d7c1841
GS
12383 switch (((OP*)ptr)->op_type) {
12384 case OP_LEAVESUB:
12385 case OP_LEAVESUBLV:
12386 case OP_LEAVEEVAL:
12387 case OP_LEAVE:
12388 case OP_SCOPE:
12389 case OP_LEAVEWRITE:
e977893f
GS
12390 TOPPTR(nss,ix) = ptr;
12391 o = (OP*)ptr;
d3c72c2a 12392 OP_REFCNT_LOCK;
594cd643 12393 (void) OpREFCNT_inc(o);
d3c72c2a 12394 OP_REFCNT_UNLOCK;
1d7c1841
GS
12395 break;
12396 default:
5f66b61c 12397 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
12398 break;
12399 }
12400 }
12401 else
5f66b61c 12402 TOPPTR(nss,ix) = NULL;
1d7c1841 12403 break;
3987a177
Z
12404 case SAVEt_FREECOPHH:
12405 ptr = POPPTR(ss,ix);
12406 TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12407 break;
1d7c1841 12408 case SAVEt_DELETE:
1d193675 12409 hv = (const HV *)POPPTR(ss,ix);
d2d73c3e 12410 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
35d4f826
NC
12411 i = POPINT(ss,ix);
12412 TOPINT(nss,ix) = i;
8e41545f
NC
12413 /* Fall through */
12414 case SAVEt_FREEPV:
1d7c1841
GS
12415 c = (char*)POPPTR(ss,ix);
12416 TOPPTR(nss,ix) = pv_dup_inc(c);
35d4f826 12417 break;
3e07292d 12418 case SAVEt_STACK_POS: /* Position on Perl stack */
1d7c1841
GS
12419 i = POPINT(ss,ix);
12420 TOPINT(nss,ix) = i;
12421 break;
12422 case SAVEt_DESTRUCTOR:
12423 ptr = POPPTR(ss,ix);
12424 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
12425 dptr = POPDPTR(ss,ix);
8141890a
JH
12426 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12427 any_dup(FPTR2DPTR(void *, dptr),
12428 proto_perl));
1d7c1841
GS
12429 break;
12430 case SAVEt_DESTRUCTOR_X:
12431 ptr = POPPTR(ss,ix);
12432 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
12433 dxptr = POPDXPTR(ss,ix);
8141890a
JH
12434 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12435 any_dup(FPTR2DPTR(void *, dxptr),
12436 proto_perl));
1d7c1841
GS
12437 break;
12438 case SAVEt_REGCONTEXT:
12439 case SAVEt_ALLOC:
1be36ce0 12440 ix -= uv >> SAVE_TIGHT_SHIFT;
1d7c1841 12441 break;
1d7c1841 12442 case SAVEt_AELEM: /* array element */
daba3364 12443 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12444 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
12445 i = POPINT(ss,ix);
12446 TOPINT(nss,ix) = i;
502c6561 12447 av = (const AV *)POPPTR(ss,ix);
d2d73c3e 12448 TOPPTR(nss,ix) = av_dup_inc(av, param);
1d7c1841 12449 break;
1d7c1841
GS
12450 case SAVEt_OP:
12451 ptr = POPPTR(ss,ix);
12452 TOPPTR(nss,ix) = ptr;
12453 break;
12454 case SAVEt_HINTS:
b3ca2e83 12455 ptr = POPPTR(ss,ix);
20439bc7 12456 ptr = cophh_copy((COPHH*)ptr);
cbb1fbea 12457 TOPPTR(nss,ix) = ptr;
601cee3b
NC
12458 i = POPINT(ss,ix);
12459 TOPINT(nss,ix) = i;
a8f8b6a7 12460 if (i & HINT_LOCALIZE_HH) {
1d193675 12461 hv = (const HV *)POPPTR(ss,ix);
a8f8b6a7
NC
12462 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12463 }
1d7c1841 12464 break;
09edbca0 12465 case SAVEt_PADSV_AND_MORTALIZE:
c3564e5c
GS
12466 longval = (long)POPLONG(ss,ix);
12467 TOPLONG(nss,ix) = longval;
12468 ptr = POPPTR(ss,ix);
12469 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 12470 sv = (const SV *)POPPTR(ss,ix);
09edbca0 12471 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
c3564e5c 12472 break;
8bd2680e
MHM
12473 case SAVEt_SET_SVFLAGS:
12474 i = POPINT(ss,ix);
12475 TOPINT(nss,ix) = i;
12476 i = POPINT(ss,ix);
12477 TOPINT(nss,ix) = i;
daba3364 12478 sv = (const SV *)POPPTR(ss,ix);
8bd2680e
MHM
12479 TOPPTR(nss,ix) = sv_dup(sv, param);
12480 break;
5bfb7d0e
NC
12481 case SAVEt_RE_STATE:
12482 {
12483 const struct re_save_state *const old_state
12484 = (struct re_save_state *)
12485 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12486 struct re_save_state *const new_state
12487 = (struct re_save_state *)
12488 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12489
12490 Copy(old_state, new_state, 1, struct re_save_state);
12491 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12492
12493 new_state->re_state_bostr
12494 = pv_dup(old_state->re_state_bostr);
12495 new_state->re_state_reginput
12496 = pv_dup(old_state->re_state_reginput);
5bfb7d0e
NC
12497 new_state->re_state_regeol
12498 = pv_dup(old_state->re_state_regeol);
f0ab9afb
NC
12499 new_state->re_state_regoffs
12500 = (regexp_paren_pair*)
12501 any_dup(old_state->re_state_regoffs, proto_perl);
5bfb7d0e 12502 new_state->re_state_reglastparen
11b79775
DD
12503 = (U32*) any_dup(old_state->re_state_reglastparen,
12504 proto_perl);
5bfb7d0e 12505 new_state->re_state_reglastcloseparen
11b79775 12506 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
5bfb7d0e 12507 proto_perl);
5bfb7d0e
NC
12508 /* XXX This just has to be broken. The old save_re_context
12509 code did SAVEGENERICPV(PL_reg_start_tmp);
12510 PL_reg_start_tmp is char **.
12511 Look above to what the dup code does for
12512 SAVEt_GENERIC_PVREF
12513 It can never have worked.
12514 So this is merely a faithful copy of the exiting bug: */
12515 new_state->re_state_reg_start_tmp
12516 = (char **) pv_dup((char *)
12517 old_state->re_state_reg_start_tmp);
12518 /* I assume that it only ever "worked" because no-one called
12519 (pseudo)fork while the regexp engine had re-entered itself.
12520 */
5bfb7d0e
NC
12521#ifdef PERL_OLD_COPY_ON_WRITE
12522 new_state->re_state_nrs
12523 = sv_dup(old_state->re_state_nrs, param);
12524#endif
12525 new_state->re_state_reg_magic
11b79775
DD
12526 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
12527 proto_perl);
5bfb7d0e 12528 new_state->re_state_reg_oldcurpm
11b79775
DD
12529 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
12530 proto_perl);
5bfb7d0e 12531 new_state->re_state_reg_curpm
11b79775
DD
12532 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
12533 proto_perl);
5bfb7d0e
NC
12534 new_state->re_state_reg_oldsaved
12535 = pv_dup(old_state->re_state_reg_oldsaved);
12536 new_state->re_state_reg_poscache
12537 = pv_dup(old_state->re_state_reg_poscache);
5bfb7d0e
NC
12538 new_state->re_state_reg_starttry
12539 = pv_dup(old_state->re_state_reg_starttry);
5bfb7d0e
NC
12540 break;
12541 }
68da3b2f
NC
12542 case SAVEt_COMPILE_WARNINGS:
12543 ptr = POPPTR(ss,ix);
12544 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
7b6dd8c3 12545 break;
7c197c94
DM
12546 case SAVEt_PARSER:
12547 ptr = POPPTR(ss,ix);
456084a8 12548 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
7c197c94 12549 break;
1d7c1841 12550 default:
147bc374
NC
12551 Perl_croak(aTHX_
12552 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
1d7c1841
GS
12553 }
12554 }
12555
bd81e77b
NC
12556 return nss;
12557}
12558
12559
12560/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12561 * flag to the result. This is done for each stash before cloning starts,
12562 * so we know which stashes want their objects cloned */
12563
12564static void
f30de749 12565do_mark_cloneable_stash(pTHX_ SV *const sv)
bd81e77b 12566{
1d193675 12567 const HEK * const hvname = HvNAME_HEK((const HV *)sv);
bd81e77b 12568 if (hvname) {
85fbaab2 12569 GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
bd81e77b
NC
12570 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12571 if (cloner && GvCV(cloner)) {
12572 dSP;
12573 UV status;
12574
12575 ENTER;
12576 SAVETMPS;
12577 PUSHMARK(SP);
6e449a3a 12578 mXPUSHs(newSVhek(hvname));
bd81e77b 12579 PUTBACK;
daba3364 12580 call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
bd81e77b
NC
12581 SPAGAIN;
12582 status = POPu;
12583 PUTBACK;
12584 FREETMPS;
12585 LEAVE;
12586 if (status)
12587 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12588 }
12589 }
12590}
12591
12592
12593
12594/*
12595=for apidoc perl_clone
12596
12597Create and return a new interpreter by cloning the current one.
12598
12599perl_clone takes these flags as parameters:
12600
12601CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12602without it we only clone the data and zero the stacks,
12603with it we copy the stacks and the new perl interpreter is
12604ready to run at the exact same point as the previous one.
12605The pseudo-fork code uses COPY_STACKS while the
878090d5 12606threads->create doesn't.
bd81e77b
NC
12607
12608CLONEf_KEEP_PTR_TABLE
12609perl_clone keeps a ptr_table with the pointer of the old
12610variable as a key and the new variable as a value,
12611this allows it to check if something has been cloned and not
12612clone it again but rather just use the value and increase the
12613refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
12614the ptr_table using the function
12615C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12616reason to keep it around is if you want to dup some of your own
12617variable who are outside the graph perl scans, example of this
12618code is in threads.xs create
12619
12620CLONEf_CLONE_HOST
12621This is a win32 thing, it is ignored on unix, it tells perls
12622win32host code (which is c++) to clone itself, this is needed on
12623win32 if you want to run two threads at the same time,
12624if you just want to do some stuff in a separate perl interpreter
12625and then throw it away and return to the original one,
12626you don't need to do anything.
12627
12628=cut
12629*/
12630
12631/* XXX the above needs expanding by someone who actually understands it ! */
12632EXTERN_C PerlInterpreter *
12633perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12634
12635PerlInterpreter *
12636perl_clone(PerlInterpreter *proto_perl, UV flags)
12637{
12638 dVAR;
12639#ifdef PERL_IMPLICIT_SYS
12640
7918f24d
NC
12641 PERL_ARGS_ASSERT_PERL_CLONE;
12642
bd81e77b
NC
12643 /* perlhost.h so we need to call into it
12644 to clone the host, CPerlHost should have a c interface, sky */
12645
12646 if (flags & CLONEf_CLONE_HOST) {
12647 return perl_clone_host(proto_perl,flags);
12648 }
12649 return perl_clone_using(proto_perl, flags,
12650 proto_perl->IMem,
12651 proto_perl->IMemShared,
12652 proto_perl->IMemParse,
12653 proto_perl->IEnv,
12654 proto_perl->IStdIO,
12655 proto_perl->ILIO,
12656 proto_perl->IDir,
12657 proto_perl->ISock,
12658 proto_perl->IProc);
12659}
12660
12661PerlInterpreter *
12662perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12663 struct IPerlMem* ipM, struct IPerlMem* ipMS,
12664 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12665 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12666 struct IPerlDir* ipD, struct IPerlSock* ipS,
12667 struct IPerlProc* ipP)
12668{
12669 /* XXX many of the string copies here can be optimized if they're
12670 * constants; they need to be allocated as common memory and just
12671 * their pointers copied. */
12672
12673 IV i;
12674 CLONE_PARAMS clone_params;
5f66b61c 12675 CLONE_PARAMS* const param = &clone_params;
bd81e77b 12676
5f66b61c 12677 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
7918f24d
NC
12678
12679 PERL_ARGS_ASSERT_PERL_CLONE_USING;
bd81e77b
NC
12680#else /* !PERL_IMPLICIT_SYS */
12681 IV i;
12682 CLONE_PARAMS clone_params;
12683 CLONE_PARAMS* param = &clone_params;
5f66b61c 12684 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
7918f24d
NC
12685
12686 PERL_ARGS_ASSERT_PERL_CLONE;
b59cce4c 12687#endif /* PERL_IMPLICIT_SYS */
7918f24d 12688
bd81e77b
NC
12689 /* for each stash, determine whether its objects should be cloned */
12690 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12691 PERL_SET_THX(my_perl);
12692
b59cce4c 12693#ifdef DEBUGGING
7e337ee0 12694 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
12695 PL_op = NULL;
12696 PL_curcop = NULL;
50f626ad 12697 PL_defstash = NULL; /* may be used by perl malloc() */
bd81e77b
NC
12698 PL_markstack = 0;
12699 PL_scopestack = 0;
cbdd5331 12700 PL_scopestack_name = 0;
bd81e77b
NC
12701 PL_savestack = 0;
12702 PL_savestack_ix = 0;
12703 PL_savestack_max = -1;
12704 PL_sig_pending = 0;
b8328dae 12705 PL_parser = NULL;
bd81e77b 12706 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
02d9cd5e 12707# ifdef DEBUG_LEAKING_SCALARS
c895a371 12708 PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
02d9cd5e 12709# endif
b59cce4c 12710#else /* !DEBUGGING */
bd81e77b 12711 Zero(my_perl, 1, PerlInterpreter);
b59cce4c 12712#endif /* DEBUGGING */
742421a6
DM
12713
12714#ifdef PERL_IMPLICIT_SYS
12715 /* host pointers */
12716 PL_Mem = ipM;
12717 PL_MemShared = ipMS;
12718 PL_MemParse = ipMP;
12719 PL_Env = ipE;
12720 PL_StdIO = ipStd;
12721 PL_LIO = ipLIO;
12722 PL_Dir = ipD;
12723 PL_Sock = ipS;
12724 PL_Proc = ipP;
12725#endif /* PERL_IMPLICIT_SYS */
12726
bd81e77b 12727 param->flags = flags;
f7abe70b
NC
12728 /* Nothing in the core code uses this, but we make it available to
12729 extensions (using mg_dup). */
bd81e77b 12730 param->proto_perl = proto_perl;
f7abe70b
NC
12731 /* Likely nothing will use this, but it is initialised to be consistent
12732 with Perl_clone_params_new(). */
ec2fb142 12733 param->new_perl = my_perl;
d08d57ef 12734 param->unreferenced = NULL;
bd81e77b 12735
7cb608b5
NC
12736 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12737
fdda85ca 12738 PL_body_arenas = NULL;
bd81e77b
NC
12739 Zero(&PL_body_roots, 1, PL_body_roots);
12740
bd81e77b
NC
12741 PL_sv_count = 0;
12742 PL_sv_objcount = 0;
a0714e2c
SS
12743 PL_sv_root = NULL;
12744 PL_sv_arenaroot = NULL;
bd81e77b
NC
12745
12746 PL_debug = proto_perl->Idebug;
12747
12748 PL_hash_seed = proto_perl->Ihash_seed;
12749 PL_rehash_seed = proto_perl->Irehash_seed;
12750
692fcd37
DM
12751 SvANY(&PL_sv_undef) = NULL;
12752 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
12753 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
12754 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
12755 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12756 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12757
12758 SvANY(&PL_sv_yes) = new_XPVNV();
12759 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
12760 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12761 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12762
12763 /* dbargs array probably holds garbage */
12764 PL_dbargs = NULL;
12765
12766 PL_compiling = proto_perl->Icompiling;
12767
12768#ifdef PERL_DEBUG_READONLY_OPS
12769 PL_slabs = NULL;
12770 PL_slab_count = 0;
12771#endif
12772
12773 /* pseudo environmental stuff */
12774 PL_origargc = proto_perl->Iorigargc;
12775 PL_origargv = proto_perl->Iorigargv;
12776
12777 /* Set tainting stuff before PerlIO_debug can possibly get called */
12778 PL_tainting = proto_perl->Itainting;
12779 PL_taint_warn = proto_perl->Itaint_warn;
12780
12781 PL_minus_c = proto_perl->Iminus_c;
12782
12783 PL_localpatches = proto_perl->Ilocalpatches;
12784 PL_splitstr = proto_perl->Isplitstr;
12785 PL_minus_n = proto_perl->Iminus_n;
12786 PL_minus_p = proto_perl->Iminus_p;
12787 PL_minus_l = proto_perl->Iminus_l;
12788 PL_minus_a = proto_perl->Iminus_a;
12789 PL_minus_E = proto_perl->Iminus_E;
12790 PL_minus_F = proto_perl->Iminus_F;
12791 PL_doswitches = proto_perl->Idoswitches;
12792 PL_dowarn = proto_perl->Idowarn;
12793 PL_sawampersand = proto_perl->Isawampersand;
12794 PL_unsafe = proto_perl->Iunsafe;
12795 PL_perldb = proto_perl->Iperldb;
12796 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12797 PL_exit_flags = proto_perl->Iexit_flags;
12798
12799 /* XXX time(&PL_basetime) when asked for? */
12800 PL_basetime = proto_perl->Ibasetime;
12801
12802 PL_maxsysfd = proto_perl->Imaxsysfd;
12803 PL_statusvalue = proto_perl->Istatusvalue;
12804#ifdef VMS
12805 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
12806#else
12807 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12808#endif
12809
12810 /* RE engine related */
12811 Zero(&PL_reg_state, 1, struct re_save_state);
12812 PL_reginterp_cnt = 0;
12813 PL_regmatch_slab = NULL;
12814
12815 PL_sub_generation = proto_perl->Isub_generation;
12816
12817 /* funky return mechanisms */
12818 PL_forkprocess = proto_perl->Iforkprocess;
12819
12820 /* internal state */
12821 PL_maxo = proto_perl->Imaxo;
12822
12823 PL_main_start = proto_perl->Imain_start;
12824 PL_eval_root = proto_perl->Ieval_root;
12825 PL_eval_start = proto_perl->Ieval_start;
12826
12827 PL_filemode = proto_perl->Ifilemode;
12828 PL_lastfd = proto_perl->Ilastfd;
12829 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
12830 PL_Argv = NULL;
12831 PL_Cmd = NULL;
12832 PL_gensym = proto_perl->Igensym;
12833
12834 PL_laststatval = proto_perl->Ilaststatval;
12835 PL_laststype = proto_perl->Ilaststype;
12836 PL_mess_sv = NULL;
12837
12838 PL_profiledata = NULL;
12839
12840 PL_generation = proto_perl->Igeneration;
12841
12842 PL_in_clean_objs = proto_perl->Iin_clean_objs;
12843 PL_in_clean_all = proto_perl->Iin_clean_all;
12844
12845 PL_uid = proto_perl->Iuid;
12846 PL_euid = proto_perl->Ieuid;
12847 PL_gid = proto_perl->Igid;
12848 PL_egid = proto_perl->Iegid;
12849 PL_nomemok = proto_perl->Inomemok;
12850 PL_an = proto_perl->Ian;
12851 PL_evalseq = proto_perl->Ievalseq;
12852 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
12853 PL_origalen = proto_perl->Iorigalen;
12854
12855 PL_sighandlerp = proto_perl->Isighandlerp;
12856
12857 PL_runops = proto_perl->Irunops;
12858
12859 PL_subline = proto_perl->Isubline;
12860
12861#ifdef FCRYPT
12862 PL_cryptseen = proto_perl->Icryptseen;
12863#endif
12864
12865 PL_hints = proto_perl->Ihints;
12866
12867 PL_amagic_generation = proto_perl->Iamagic_generation;
12868
12869#ifdef USE_LOCALE_COLLATE
12870 PL_collation_ix = proto_perl->Icollation_ix;
12871 PL_collation_standard = proto_perl->Icollation_standard;
12872 PL_collxfrm_base = proto_perl->Icollxfrm_base;
12873 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
12874#endif /* USE_LOCALE_COLLATE */
12875
12876#ifdef USE_LOCALE_NUMERIC
12877 PL_numeric_standard = proto_perl->Inumeric_standard;
12878 PL_numeric_local = proto_perl->Inumeric_local;
12879#endif /* !USE_LOCALE_NUMERIC */
12880
12881 /* Did the locale setup indicate UTF-8? */
12882 PL_utf8locale = proto_perl->Iutf8locale;
12883 /* Unicode features (see perlrun/-C) */
12884 PL_unicode = proto_perl->Iunicode;
12885
12886 /* Pre-5.8 signals control */
12887 PL_signals = proto_perl->Isignals;
12888
12889 /* times() ticks per second */
12890 PL_clocktick = proto_perl->Iclocktick;
12891
12892 /* Recursion stopper for PerlIO_find_layer */
12893 PL_in_load_module = proto_perl->Iin_load_module;
12894
12895 /* sort() routine */
12896 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
12897
12898 /* Not really needed/useful since the reenrant_retint is "volatile",
12899 * but do it for consistency's sake. */
12900 PL_reentrant_retint = proto_perl->Ireentrant_retint;
12901
12902 /* Hooks to shared SVs and locks. */
12903 PL_sharehook = proto_perl->Isharehook;
12904 PL_lockhook = proto_perl->Ilockhook;
12905 PL_unlockhook = proto_perl->Iunlockhook;
12906 PL_threadhook = proto_perl->Ithreadhook;
12907 PL_destroyhook = proto_perl->Idestroyhook;
12908 PL_signalhook = proto_perl->Isignalhook;
12909
12910#ifdef THREADS_HAVE_PIDS
12911 PL_ppid = proto_perl->Ippid;
12912#endif
12913
12914 /* swatch cache */
12915 PL_last_swash_hv = NULL; /* reinits on demand */
12916 PL_last_swash_klen = 0;
12917 PL_last_swash_key[0]= '\0';
12918 PL_last_swash_tmps = (U8*)NULL;
12919 PL_last_swash_slen = 0;
12920
12921 PL_glob_index = proto_perl->Iglob_index;
12922 PL_srand_called = proto_perl->Isrand_called;
12923
12924 if (flags & CLONEf_COPY_STACKS) {
12925 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
12926 PL_tmps_ix = proto_perl->Itmps_ix;
12927 PL_tmps_max = proto_perl->Itmps_max;
12928 PL_tmps_floor = proto_perl->Itmps_floor;
12929
12930 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
12931 * NOTE: unlike the others! */
12932 PL_scopestack_ix = proto_perl->Iscopestack_ix;
12933 PL_scopestack_max = proto_perl->Iscopestack_max;
12934
12935 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
12936 * NOTE: unlike the others! */
12937 PL_savestack_ix = proto_perl->Isavestack_ix;
12938 PL_savestack_max = proto_perl->Isavestack_max;
12939 }
12940
12941 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
12942 PL_top_env = &PL_start_env;
12943
12944 PL_op = proto_perl->Iop;
12945
12946 PL_Sv = NULL;
12947 PL_Xpv = (XPV*)NULL;
12948 my_perl->Ina = proto_perl->Ina;
12949
12950 PL_statbuf = proto_perl->Istatbuf;
12951 PL_statcache = proto_perl->Istatcache;
12952
12953#ifdef HAS_TIMES
12954 PL_timesbuf = proto_perl->Itimesbuf;
12955#endif
12956
12957 PL_tainted = proto_perl->Itainted;
12958 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
12959
12960 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
12961
12962 PL_restartjmpenv = proto_perl->Irestartjmpenv;
12963 PL_restartop = proto_perl->Irestartop;
12964 PL_in_eval = proto_perl->Iin_eval;
12965 PL_delaymagic = proto_perl->Idelaymagic;
12966 PL_phase = proto_perl->Iphase;
12967 PL_localizing = proto_perl->Ilocalizing;
12968
12969 PL_hv_fetch_ent_mh = NULL;
12970 PL_modcount = proto_perl->Imodcount;
12971 PL_lastgotoprobe = NULL;
12972 PL_dumpindent = proto_perl->Idumpindent;
12973
12974 PL_efloatbuf = NULL; /* reinits on demand */
12975 PL_efloatsize = 0; /* reinits on demand */
12976
12977 /* regex stuff */
12978
692fcd37
DM
12979 PL_regdummy = proto_perl->Iregdummy;
12980 PL_colorset = 0; /* reinits PL_colors[] */
12981 /*PL_colors[6] = {0,0,0,0,0,0};*/
12982
12983 /* Pluggable optimizer */
12984 PL_peepp = proto_perl->Ipeepp;
12985 PL_rpeepp = proto_perl->Irpeepp;
12986 /* op_free() hook */
12987 PL_opfreehook = proto_perl->Iopfreehook;
12988
bd81e77b
NC
12989#ifdef USE_REENTRANT_API
12990 /* XXX: things like -Dm will segfault here in perlio, but doing
12991 * PERL_SET_CONTEXT(proto_perl);
12992 * breaks too many other things
12993 */
12994 Perl_reentrant_init(aTHX);
12995#endif
12996
12997 /* create SV map for pointer relocation */
12998 PL_ptr_table = ptr_table_new();
12999
13000 /* initialize these special pointers as early as possible */
bd81e77b
NC
13001 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13002
13003 SvANY(&PL_sv_no) = new_XPVNV();
bb7a0f54 13004 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
bd81e77b
NC
13005 SvCUR_set(&PL_sv_no, 0);
13006 SvLEN_set(&PL_sv_no, 1);
13007 SvIV_set(&PL_sv_no, 0);
13008 SvNV_set(&PL_sv_no, 0);
13009 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13010
bb7a0f54 13011 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
bd81e77b
NC
13012 SvCUR_set(&PL_sv_yes, 1);
13013 SvLEN_set(&PL_sv_yes, 2);
13014 SvIV_set(&PL_sv_yes, 1);
13015 SvNV_set(&PL_sv_yes, 1);
13016 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13017
13018 /* create (a non-shared!) shared string table */
13019 PL_strtab = newHV();
13020 HvSHAREKEYS_off(PL_strtab);
13021 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13022 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13023
bd81e77b
NC
13024 /* These two PVs will be free'd special way so must set them same way op.c does */
13025 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
13026 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
13027
13028 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
13029 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13030
13031 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
72dc9ed5 13032 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
20439bc7 13033 CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
907b3e23 13034 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
bd81e77b
NC
13035
13036 param->stashes = newAV(); /* Setup array of objects to call clone on */
842c4123
NC
13037 /* This makes no difference to the implementation, as it always pushes
13038 and shifts pointers to other SVs without changing their reference
13039 count, with the array becoming empty before it is freed. However, it
13040 makes it conceptually clear what is going on, and will avoid some
13041 work inside av.c, filling slots between AvFILL() and AvMAX() with
13042 &PL_sv_undef, and SvREFCNT_dec()ing those. */
13043 AvREAL_off(param->stashes);
bd81e77b 13044
d08d57ef
NC
13045 if (!(flags & CLONEf_COPY_STACKS)) {
13046 param->unreferenced = newAV();
d08d57ef
NC
13047 }
13048
bd81e77b
NC
13049#ifdef PERLIO_LAYERS
13050 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13051 PerlIO_clone(aTHX_ proto_perl, param);
13052#endif
13053
13054 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
13055 PL_incgv = gv_dup(proto_perl->Iincgv, param);
13056 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
13057 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
13058 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
13059 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
13060
13061 /* switches */
bd81e77b 13062 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
1e8125c6 13063 PL_apiversion = sv_dup_inc(proto_perl->Iapiversion, param);
bd81e77b
NC
13064 PL_inplace = SAVEPV(proto_perl->Iinplace);
13065 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
bd81e77b
NC
13066
13067 /* magical thingies */
bd81e77b
NC
13068 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
13069
bd81e77b
NC
13070 PL_encoding = sv_dup(proto_perl->Iencoding, param);
13071
76f68e9b
MHM
13072 sv_setpvs(PERL_DEBUG_PAD(0), ""); /* For regex debugging. */
13073 sv_setpvs(PERL_DEBUG_PAD(1), ""); /* ext/re needs these */
13074 sv_setpvs(PERL_DEBUG_PAD(2), ""); /* even without DEBUGGING. */
bd81e77b 13075
84da74a7 13076
bd81e77b 13077 /* Clone the regex array */
937c6efd
NC
13078 /* ORANGE FIXME for plugins, probably in the SV dup code.
13079 newSViv(PTR2IV(CALLREGDUPE(
13080 INT2PTR(REGEXP *, SvIVX(regex)), param))))
13081 */
13082 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
bd81e77b
NC
13083 PL_regex_pad = AvARRAY(PL_regex_padav);
13084
13085 /* shortcuts to various I/O objects */
b2ea9a00 13086 PL_ofsgv = gv_dup_inc(proto_perl->Iofsgv, param);
bd81e77b
NC
13087 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
13088 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
13089 PL_defgv = gv_dup(proto_perl->Idefgv, param);
13090 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
13091 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
13092 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
1d7c1841 13093
bd81e77b
NC
13094 /* shortcuts to regexp stuff */
13095 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
9660f481 13096
bd81e77b
NC
13097 /* shortcuts to misc objects */
13098 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
9660f481 13099
bd81e77b
NC
13100 /* shortcuts to debugging objects */
13101 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
13102 PL_DBline = gv_dup(proto_perl->IDBline, param);
13103 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
13104 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
13105 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
13106 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
9660f481 13107
bd81e77b 13108 /* symbol tables */
907b3e23
DM
13109 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
13110 PL_curstash = hv_dup(proto_perl->Icurstash, param);
bd81e77b
NC
13111 PL_debstash = hv_dup(proto_perl->Idebstash, param);
13112 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
13113 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
13114
13115 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
13116 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
13117 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
3c10abe3
AG
13118 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
13119 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
bd81e77b
NC
13120 PL_endav = av_dup_inc(proto_perl->Iendav, param);
13121 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
13122 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
13123
dd69841b 13124 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
bd81e77b 13125
bd81e77b
NC
13126 /* subprocess state */
13127 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
13128
bd81e77b
NC
13129 if (proto_perl->Iop_mask)
13130 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13131 else
bd61b366 13132 PL_op_mask = NULL;
bd81e77b
NC
13133 /* PL_asserting = proto_perl->Iasserting; */
13134
13135 /* current interpreter roots */
13136 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
d3c72c2a 13137 OP_REFCNT_LOCK;
bd81e77b 13138 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
d3c72c2a 13139 OP_REFCNT_UNLOCK;
bd81e77b
NC
13140
13141 /* runtime control stuff */
13142 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
bd81e77b 13143
bd81e77b 13144 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
bd81e77b
NC
13145
13146 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
13147
13148 /* interpreter atexit processing */
13149 PL_exitlistlen = proto_perl->Iexitlistlen;
13150 if (PL_exitlistlen) {
13151 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13152 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9660f481 13153 }
bd81e77b
NC
13154 else
13155 PL_exitlist = (PerlExitListEntry*)NULL;
f16dd614
DM
13156
13157 PL_my_cxt_size = proto_perl->Imy_cxt_size;
4c901e72 13158 if (PL_my_cxt_size) {
f16dd614
DM
13159 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13160 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
53d44271 13161#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 13162 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
53d44271
JH
13163 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13164#endif
f16dd614 13165 }
53d44271 13166 else {
f16dd614 13167 PL_my_cxt_list = (void**)NULL;
53d44271 13168#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 13169 PL_my_cxt_keys = (const char**)NULL;
53d44271
JH
13170#endif
13171 }
bd81e77b
NC
13172 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
13173 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
13174 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
1830b3d9 13175 PL_custom_ops = hv_dup_inc(proto_perl->Icustom_ops, param);
bd81e77b 13176
bd81e77b 13177 PL_compcv = cv_dup(proto_perl->Icompcv, param);
9660f481 13178
bd81e77b 13179 PAD_CLONE_VARS(proto_perl, param);
9660f481 13180
bd81e77b
NC
13181#ifdef HAVE_INTERP_INTERN
13182 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13183#endif
645c22ef 13184
bd81e77b 13185 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
645c22ef 13186
bd81e77b
NC
13187#ifdef PERL_USES_PL_PIDSTATUS
13188 PL_pidstatus = newHV(); /* XXX flag for cloning? */
13189#endif
13190 PL_osname = SAVEPV(proto_perl->Iosname);
199e78b7
DM
13191 PL_parser = parser_dup(proto_perl->Iparser, param);
13192
f0c5aa00
DM
13193 /* XXX this only works if the saved cop has already been cloned */
13194 if (proto_perl->Iparser) {
13195 PL_parser->saved_curcop = (COP*)any_dup(
13196 proto_perl->Iparser->saved_curcop,
13197 proto_perl);
13198 }
13199
bd81e77b 13200 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
c43294b8 13201
bd81e77b 13202#ifdef USE_LOCALE_COLLATE
bd81e77b 13203 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
bd81e77b 13204#endif /* USE_LOCALE_COLLATE */
1d7c1841 13205
bd81e77b
NC
13206#ifdef USE_LOCALE_NUMERIC
13207 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
bd81e77b
NC
13208 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13209#endif /* !USE_LOCALE_NUMERIC */
1d7c1841 13210
bd81e77b
NC
13211 /* utf8 character classes */
13212 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
bd81e77b
NC
13213 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13214 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
bd81e77b
NC
13215 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
13216 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
13217 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
13218 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
13219 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
13220 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
13221 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13222 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
37e2e78e
KW
13223 PL_utf8_X_begin = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
13224 PL_utf8_X_extend = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13225 PL_utf8_X_prepend = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
13226 PL_utf8_X_non_hangul = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
13227 PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
13228 PL_utf8_X_LV = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
13229 PL_utf8_X_LVT = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13230 PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
13231 PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
13232 PL_utf8_X_LV_LVT_V = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
bd81e77b
NC
13233 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13234 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13235 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13236 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13237 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
c11ff943 13238 PL_utf8_xidstart = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
b6912c02 13239 PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
bd81e77b 13240 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
c11ff943 13241 PL_utf8_xidcont = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
43056537 13242 PL_utf8_foldable = sv_dup_inc(proto_perl->Iutf8_foldable, param);
1d7c1841 13243
05ec9bb3 13244
bd81e77b
NC
13245 if (proto_perl->Ipsig_pend) {
13246 Newxz(PL_psig_pend, SIG_SIZE, int);
13247 }
13248 else {
13249 PL_psig_pend = (int*)NULL;
13250 }
05ec9bb3 13251
d525a7b2
NC
13252 if (proto_perl->Ipsig_name) {
13253 Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13254 sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
538f2e76 13255 param);
d525a7b2 13256 PL_psig_ptr = PL_psig_name + SIG_SIZE;
bd81e77b
NC
13257 }
13258 else {
13259 PL_psig_ptr = (SV**)NULL;
13260 PL_psig_name = (SV**)NULL;
13261 }
05ec9bb3 13262
bd81e77b 13263 if (flags & CLONEf_COPY_STACKS) {
e92c6be8 13264 Newx(PL_tmps_stack, PL_tmps_max, SV*);
1d8a41fe
JD
13265 sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13266 PL_tmps_ix+1, param);
d2d73c3e 13267
bd81e77b 13268 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
907b3e23 13269 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
bd81e77b 13270 Newxz(PL_markstack, i, I32);
907b3e23
DM
13271 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
13272 - proto_perl->Imarkstack);
13273 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
13274 - proto_perl->Imarkstack);
13275 Copy(proto_perl->Imarkstack, PL_markstack,
bd81e77b 13276 PL_markstack_ptr - PL_markstack + 1, I32);
d2d73c3e 13277
bd81e77b
NC
13278 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13279 * NOTE: unlike the others! */
bd81e77b 13280 Newxz(PL_scopestack, PL_scopestack_max, I32);
907b3e23 13281 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
d419787a 13282
cbdd5331
JD
13283#ifdef DEBUGGING
13284 Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13285 Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13286#endif
bd81e77b 13287 /* NOTE: si_dup() looks at PL_markstack */
907b3e23 13288 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
d2d73c3e 13289
bd81e77b 13290 /* PL_curstack = PL_curstackinfo->si_stack; */
907b3e23
DM
13291 PL_curstack = av_dup(proto_perl->Icurstack, param);
13292 PL_mainstack = av_dup(proto_perl->Imainstack, param);
1d7c1841 13293
bd81e77b
NC
13294 /* next PUSHs() etc. set *(PL_stack_sp+1) */
13295 PL_stack_base = AvARRAY(PL_curstack);
907b3e23
DM
13296 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
13297 - proto_perl->Istack_base);
bd81e77b 13298 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
1d7c1841 13299
bd81e77b
NC
13300 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13301 PL_savestack = ss_dup(proto_perl, param);
13302 }
13303 else {
13304 init_stacks();
13305 ENTER; /* perl_destruct() wants to LEAVE; */
13306 }
1d7c1841 13307
907b3e23
DM
13308 PL_statgv = gv_dup(proto_perl->Istatgv, param);
13309 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
1d7c1841 13310
907b3e23
DM
13311 PL_rs = sv_dup_inc(proto_perl->Irs, param);
13312 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
907b3e23 13313 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
907b3e23
DM
13314 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
13315 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
13316 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
13317
907b3e23 13318 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
1d7c1841 13319
907b3e23
DM
13320 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13321 PL_sortstash = hv_dup(proto_perl->Isortstash, param);
13322 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param);
13323 PL_secondgv = gv_dup(proto_perl->Isecondgv, param);
1d7c1841 13324
bd81e77b 13325 PL_stashcache = newHV();
1d7c1841 13326
b7185faf 13327 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
907b3e23 13328 proto_perl->Iwatchaddr);
b7185faf
DM
13329 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
13330 if (PL_debug && PL_watchaddr) {
13331 PerlIO_printf(Perl_debug_log,
13332 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
907b3e23 13333 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
b7185faf
DM
13334 PTR2UV(PL_watchok));
13335 }
13336
a3e6e81e 13337 PL_registered_mros = hv_dup_inc(proto_perl->Iregistered_mros, param);
1930840b 13338 PL_blockhooks = av_dup_inc(proto_perl->Iblockhooks, param);
2726813d 13339 PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
a3e6e81e 13340
bd81e77b
NC
13341 /* Call the ->CLONE method, if it exists, for each of the stashes
13342 identified by sv_dup() above.
13343 */
13344 while(av_len(param->stashes) != -1) {
85fbaab2 13345 HV* const stash = MUTABLE_HV(av_shift(param->stashes));
bd81e77b
NC
13346 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13347 if (cloner && GvCV(cloner)) {
13348 dSP;
13349 ENTER;
13350 SAVETMPS;
13351 PUSHMARK(SP);
6e449a3a 13352 mXPUSHs(newSVhek(HvNAME_HEK(stash)));
bd81e77b 13353 PUTBACK;
daba3364 13354 call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
bd81e77b
NC
13355 FREETMPS;
13356 LEAVE;
13357 }
1d7c1841 13358 }
1d7c1841 13359
b0b93b3c
DM
13360 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13361 ptr_table_free(PL_ptr_table);
13362 PL_ptr_table = NULL;
13363 }
13364
d08d57ef 13365 if (!(flags & CLONEf_COPY_STACKS)) {
e4295668 13366 unreferenced_to_tmp_stack(param->unreferenced);
d08d57ef 13367 }
b0b93b3c 13368
bd81e77b 13369 SvREFCNT_dec(param->stashes);
1d7c1841 13370
bd81e77b
NC
13371 /* orphaned? eg threads->new inside BEGIN or use */
13372 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
b37c2d43 13373 SvREFCNT_inc_simple_void(PL_compcv);
bd81e77b
NC
13374 SAVEFREESV(PL_compcv);
13375 }
dd2155a4 13376
bd81e77b
NC
13377 return my_perl;
13378}
1d7c1841 13379
e4295668
NC
13380static void
13381S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13382{
13383 PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13384
13385 if (AvFILLp(unreferenced) > -1) {
13386 SV **svp = AvARRAY(unreferenced);
13387 SV **const last = svp + AvFILLp(unreferenced);
13388 SSize_t count = 0;
13389
13390 do {
04518cc3 13391 if (SvREFCNT(*svp) == 1)
e4295668
NC
13392 ++count;
13393 } while (++svp <= last);
13394
13395 EXTEND_MORTAL(count);
13396 svp = AvARRAY(unreferenced);
13397
13398 do {
04518cc3
NC
13399 if (SvREFCNT(*svp) == 1) {
13400 /* Our reference is the only one to this SV. This means that
13401 in this thread, the scalar effectively has a 0 reference.
13402 That doesn't work (cleanup never happens), so donate our
13403 reference to it onto the save stack. */
13404 PL_tmps_stack[++PL_tmps_ix] = *svp;
13405 } else {
13406 /* As an optimisation, because we are already walking the
13407 entire array, instead of above doing either
13408 SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13409 release our reference to the scalar, so that at the end of
13410 the array owns zero references to the scalars it happens to
13411 point to. We are effectively converting the array from
13412 AvREAL() on to AvREAL() off. This saves the av_clear()
13413 (triggered by the SvREFCNT_dec(unreferenced) below) from
13414 walking the array a second time. */
13415 SvREFCNT_dec(*svp);
13416 }
13417
e4295668 13418 } while (++svp <= last);
04518cc3 13419 AvREAL_off(unreferenced);
e4295668
NC
13420 }
13421 SvREFCNT_dec(unreferenced);
13422}
13423
f7abe70b
NC
13424void
13425Perl_clone_params_del(CLONE_PARAMS *param)
13426{
90d4a638
NC
13427 /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13428 happy: */
1db366cc
NC
13429 PerlInterpreter *const to = param->new_perl;
13430 dTHXa(to);
90d4a638 13431 PerlInterpreter *const was = PERL_GET_THX;
f7abe70b
NC
13432
13433 PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13434
1db366cc
NC
13435 if (was != to) {
13436 PERL_SET_THX(to);
13437 }
f7abe70b 13438
1db366cc 13439 SvREFCNT_dec(param->stashes);
e4295668
NC
13440 if (param->unreferenced)
13441 unreferenced_to_tmp_stack(param->unreferenced);
f7abe70b 13442
1db366cc 13443 Safefree(param);
f7abe70b 13444
1db366cc
NC
13445 if (was != to) {
13446 PERL_SET_THX(was);
f7abe70b
NC
13447 }
13448}
13449
13450CLONE_PARAMS *
13451Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13452{
90d4a638 13453 dVAR;
f7abe70b
NC
13454 /* Need to play this game, as newAV() can call safesysmalloc(), and that
13455 does a dTHX; to get the context from thread local storage.
13456 FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13457 a version that passes in my_perl. */
13458 PerlInterpreter *const was = PERL_GET_THX;
13459 CLONE_PARAMS *param;
f7abe70b
NC
13460
13461 PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13462
13463 if (was != to) {
13464 PERL_SET_THX(to);
13465 }
13466
13467 /* Given that we've set the context, we can do this unshared. */
13468 Newx(param, 1, CLONE_PARAMS);
13469
13470 param->flags = 0;
13471 param->proto_perl = from;
1db366cc 13472 param->new_perl = to;
f7abe70b
NC
13473 param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13474 AvREAL_off(param->stashes);
d08d57ef 13475 param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
f7abe70b 13476
f7abe70b
NC
13477 if (was != to) {
13478 PERL_SET_THX(was);
13479 }
13480 return param;
13481}
13482
bd81e77b 13483#endif /* USE_ITHREADS */
1d7c1841 13484
bd81e77b
NC
13485/*
13486=head1 Unicode Support
1d7c1841 13487
bd81e77b 13488=for apidoc sv_recode_to_utf8
1d7c1841 13489
bd81e77b
NC
13490The encoding is assumed to be an Encode object, on entry the PV
13491of the sv is assumed to be octets in that encoding, and the sv
13492will be converted into Unicode (and UTF-8).
1d7c1841 13493
bd81e77b
NC
13494If the sv already is UTF-8 (or if it is not POK), or if the encoding
13495is not a reference, nothing is done to the sv. If the encoding is not
13496an C<Encode::XS> Encoding object, bad things will happen.
13497(See F<lib/encoding.pm> and L<Encode>).
1d7c1841 13498
bd81e77b 13499The PV of the sv is returned.
1d7c1841 13500
bd81e77b 13501=cut */
1d7c1841 13502
bd81e77b
NC
13503char *
13504Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13505{
13506 dVAR;
7918f24d
NC
13507
13508 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13509
bd81e77b
NC
13510 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13511 SV *uni;
13512 STRLEN len;
13513 const char *s;
13514 dSP;
13515 ENTER;
13516 SAVETMPS;
13517 save_re_context();
13518 PUSHMARK(sp);
13519 EXTEND(SP, 3);
13520 XPUSHs(encoding);
13521 XPUSHs(sv);
13522/*
13523 NI-S 2002/07/09
13524 Passing sv_yes is wrong - it needs to be or'ed set of constants
13525 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13526 remove converted chars from source.
1d7c1841 13527
bd81e77b 13528 Both will default the value - let them.
1d7c1841 13529
bd81e77b
NC
13530 XPUSHs(&PL_sv_yes);
13531*/
13532 PUTBACK;
13533 call_method("decode", G_SCALAR);
13534 SPAGAIN;
13535 uni = POPs;
13536 PUTBACK;
13537 s = SvPV_const(uni, len);
13538 if (s != SvPVX_const(sv)) {
13539 SvGROW(sv, len + 1);
13540 Move(s, SvPVX(sv), len + 1, char);
13541 SvCUR_set(sv, len);
13542 }
13543 FREETMPS;
13544 LEAVE;
75da9d4c
DM
13545 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13546 /* clear pos and any utf8 cache */
13547 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13548 if (mg)
13549 mg->mg_len = -1;
13550 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13551 magic_setutf8(sv,mg); /* clear UTF8 cache */
13552 }
bd81e77b
NC
13553 SvUTF8_on(sv);
13554 return SvPVX(sv);
389edf32 13555 }
bd81e77b
NC
13556 return SvPOKp(sv) ? SvPVX(sv) : NULL;
13557}
1d7c1841 13558
bd81e77b
NC
13559/*
13560=for apidoc sv_cat_decode
1d7c1841 13561
bd81e77b
NC
13562The encoding is assumed to be an Encode object, the PV of the ssv is
13563assumed to be octets in that encoding and decoding the input starts
13564from the position which (PV + *offset) pointed to. The dsv will be
13565concatenated the decoded UTF-8 string from ssv. Decoding will terminate
13566when the string tstr appears in decoding output or the input ends on
13567the PV of the ssv. The value which the offset points will be modified
13568to the last input position on the ssv.
1d7c1841 13569
bd81e77b 13570Returns TRUE if the terminator was found, else returns FALSE.
1d7c1841 13571
bd81e77b
NC
13572=cut */
13573
13574bool
13575Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13576 SV *ssv, int *offset, char *tstr, int tlen)
13577{
13578 dVAR;
13579 bool ret = FALSE;
7918f24d
NC
13580
13581 PERL_ARGS_ASSERT_SV_CAT_DECODE;
13582
bd81e77b
NC
13583 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13584 SV *offsv;
13585 dSP;
13586 ENTER;
13587 SAVETMPS;
13588 save_re_context();
13589 PUSHMARK(sp);
13590 EXTEND(SP, 6);
13591 XPUSHs(encoding);
13592 XPUSHs(dsv);
13593 XPUSHs(ssv);
6e449a3a
MHM
13594 offsv = newSViv(*offset);
13595 mXPUSHs(offsv);
13596 mXPUSHp(tstr, tlen);
bd81e77b
NC
13597 PUTBACK;
13598 call_method("cat_decode", G_SCALAR);
13599 SPAGAIN;
13600 ret = SvTRUE(TOPs);
13601 *offset = SvIV(offsv);
13602 PUTBACK;
13603 FREETMPS;
13604 LEAVE;
389edf32 13605 }
bd81e77b
NC
13606 else
13607 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13608 return ret;
1d7c1841 13609
bd81e77b 13610}
1d7c1841 13611
bd81e77b
NC
13612/* ---------------------------------------------------------------------
13613 *
13614 * support functions for report_uninit()
13615 */
1d7c1841 13616
bd81e77b
NC
13617/* the maxiumum size of array or hash where we will scan looking
13618 * for the undefined element that triggered the warning */
1d7c1841 13619
bd81e77b 13620#define FUV_MAX_SEARCH_SIZE 1000
1d7c1841 13621
bd81e77b
NC
13622/* Look for an entry in the hash whose value has the same SV as val;
13623 * If so, return a mortal copy of the key. */
1d7c1841 13624
bd81e77b 13625STATIC SV*
6c1b357c 13626S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
bd81e77b
NC
13627{
13628 dVAR;
13629 register HE **array;
13630 I32 i;
6c3182a5 13631
7918f24d
NC
13632 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13633
bd81e77b
NC
13634 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13635 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
a0714e2c 13636 return NULL;
6c3182a5 13637
bd81e77b 13638 array = HvARRAY(hv);
6c3182a5 13639
bd81e77b
NC
13640 for (i=HvMAX(hv); i>0; i--) {
13641 register HE *entry;
13642 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13643 if (HeVAL(entry) != val)
13644 continue;
13645 if ( HeVAL(entry) == &PL_sv_undef ||
13646 HeVAL(entry) == &PL_sv_placeholder)
13647 continue;
13648 if (!HeKEY(entry))
a0714e2c 13649 return NULL;
bd81e77b
NC
13650 if (HeKLEN(entry) == HEf_SVKEY)
13651 return sv_mortalcopy(HeKEY_sv(entry));
a663657d 13652 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
bd81e77b
NC
13653 }
13654 }
a0714e2c 13655 return NULL;
bd81e77b 13656}
6c3182a5 13657
bd81e77b
NC
13658/* Look for an entry in the array whose value has the same SV as val;
13659 * If so, return the index, otherwise return -1. */
6c3182a5 13660
bd81e77b 13661STATIC I32
6c1b357c 13662S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
bd81e77b 13663{
97aff369 13664 dVAR;
7918f24d
NC
13665
13666 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13667
bd81e77b
NC
13668 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13669 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13670 return -1;
57c6e6d2 13671
4a021917
AL
13672 if (val != &PL_sv_undef) {
13673 SV ** const svp = AvARRAY(av);
13674 I32 i;
13675
13676 for (i=AvFILLp(av); i>=0; i--)
13677 if (svp[i] == val)
13678 return i;
bd81e77b
NC
13679 }
13680 return -1;
13681}
15a5279a 13682
bd81e77b
NC
13683/* S_varname(): return the name of a variable, optionally with a subscript.
13684 * If gv is non-zero, use the name of that global, along with gvtype (one
13685 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13686 * targ. Depending on the value of the subscript_type flag, return:
13687 */
bce260cd 13688
bd81e77b
NC
13689#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
13690#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
13691#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
13692#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
bce260cd 13693
bd81e77b 13694STATIC SV*
6c1b357c
NC
13695S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13696 const SV *const keyname, I32 aindex, int subscript_type)
bd81e77b 13697{
1d7c1841 13698
bd81e77b
NC
13699 SV * const name = sv_newmortal();
13700 if (gv) {
13701 char buffer[2];
13702 buffer[0] = gvtype;
13703 buffer[1] = 0;
1d7c1841 13704
bd81e77b 13705 /* as gv_fullname4(), but add literal '^' for $^FOO names */
66fe0623 13706
bd81e77b 13707 gv_fullname4(name, gv, buffer, 0);
1d7c1841 13708
bd81e77b
NC
13709 if ((unsigned int)SvPVX(name)[1] <= 26) {
13710 buffer[0] = '^';
13711 buffer[1] = SvPVX(name)[1] + 'A' - 1;
1d7c1841 13712
bd81e77b
NC
13713 /* Swap the 1 unprintable control character for the 2 byte pretty
13714 version - ie substr($name, 1, 1) = $buffer; */
13715 sv_insert(name, 1, 1, buffer, 2);
1d7c1841 13716 }
bd81e77b
NC
13717 }
13718 else {
289b91d9 13719 CV * const cv = find_runcv(NULL);
bd81e77b
NC
13720 SV *sv;
13721 AV *av;
1d7c1841 13722
bd81e77b 13723 if (!cv || !CvPADLIST(cv))
a0714e2c 13724 return NULL;
502c6561 13725 av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
bd81e77b 13726 sv = *av_fetch(av, targ, FALSE);
f8503592 13727 sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
bd81e77b 13728 }
1d7c1841 13729
bd81e77b 13730 if (subscript_type == FUV_SUBSCRIPT_HASH) {
561b68a9 13731 SV * const sv = newSV(0);
bd81e77b
NC
13732 *SvPVX(name) = '$';
13733 Perl_sv_catpvf(aTHX_ name, "{%s}",
13734 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13735 SvREFCNT_dec(sv);
13736 }
13737 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13738 *SvPVX(name) = '$';
13739 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13740 }
84335ee9
NC
13741 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13742 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13743 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0);
13744 }
1d7c1841 13745
bd81e77b
NC
13746 return name;
13747}
1d7c1841 13748
1d7c1841 13749
bd81e77b
NC
13750/*
13751=for apidoc find_uninit_var
1d7c1841 13752
bd81e77b
NC
13753Find the name of the undefined variable (if any) that caused the operator o
13754to issue a "Use of uninitialized value" warning.
13755If match is true, only return a name if it's value matches uninit_sv.
13756So roughly speaking, if a unary operator (such as OP_COS) generates a
13757warning, then following the direct child of the op may yield an
13758OP_PADSV or OP_GV that gives the name of the undefined variable. On the
13759other hand, with OP_ADD there are two branches to follow, so we only print
13760the variable name if we get an exact match.
1d7c1841 13761
bd81e77b 13762The name is returned as a mortal SV.
1d7c1841 13763
bd81e77b
NC
13764Assumes that PL_op is the op that originally triggered the error, and that
13765PL_comppad/PL_curpad points to the currently executing pad.
1d7c1841 13766
bd81e77b
NC
13767=cut
13768*/
1d7c1841 13769
bd81e77b 13770STATIC SV *
6c1b357c
NC
13771S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13772 bool match)
bd81e77b
NC
13773{
13774 dVAR;
13775 SV *sv;
6c1b357c
NC
13776 const GV *gv;
13777 const OP *o, *o2, *kid;
1d7c1841 13778
bd81e77b
NC
13779 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13780 uninit_sv == &PL_sv_placeholder)))
a0714e2c 13781 return NULL;
1d7c1841 13782
bd81e77b 13783 switch (obase->op_type) {
1d7c1841 13784
bd81e77b
NC
13785 case OP_RV2AV:
13786 case OP_RV2HV:
13787 case OP_PADAV:
13788 case OP_PADHV:
13789 {
13790 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13791 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13792 I32 index = 0;
a0714e2c 13793 SV *keysv = NULL;
bd81e77b 13794 int subscript_type = FUV_SUBSCRIPT_WITHIN;
1d7c1841 13795
bd81e77b
NC
13796 if (pad) { /* @lex, %lex */
13797 sv = PAD_SVl(obase->op_targ);
a0714e2c 13798 gv = NULL;
bd81e77b
NC
13799 }
13800 else {
13801 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13802 /* @global, %global */
13803 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13804 if (!gv)
13805 break;
daba3364 13806 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
bd81e77b
NC
13807 }
13808 else /* @{expr}, %{expr} */
13809 return find_uninit_var(cUNOPx(obase)->op_first,
13810 uninit_sv, match);
13811 }
1d7c1841 13812
bd81e77b
NC
13813 /* attempt to find a match within the aggregate */
13814 if (hash) {
85fbaab2 13815 keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
13816 if (keysv)
13817 subscript_type = FUV_SUBSCRIPT_HASH;
13818 }
13819 else {
502c6561 13820 index = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
13821 if (index >= 0)
13822 subscript_type = FUV_SUBSCRIPT_ARRAY;
13823 }
1d7c1841 13824
bd81e77b
NC
13825 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13826 break;
1d7c1841 13827
bd81e77b
NC
13828 return varname(gv, hash ? '%' : '@', obase->op_targ,
13829 keysv, index, subscript_type);
13830 }
1d7c1841 13831
c475d5dc
GG
13832 case OP_RV2SV:
13833 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13834 /* $global */
13835 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13836 if (!gv || !GvSTASH(gv))
13837 break;
13838 if (match && (GvSV(gv) != uninit_sv))
13839 break;
13840 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13841 }
13842 /* ${expr} */
13843 return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
13844
bd81e77b
NC
13845 case OP_PADSV:
13846 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13847 break;
a0714e2c
SS
13848 return varname(NULL, '$', obase->op_targ,
13849 NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 13850
bd81e77b
NC
13851 case OP_GVSV:
13852 gv = cGVOPx_gv(obase);
249534c3 13853 if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
bd81e77b 13854 break;
a0714e2c 13855 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 13856
93bad3fd
NC
13857 case OP_AELEMFAST_LEX:
13858 if (match) {
13859 SV **svp;
13860 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
13861 if (!av || SvRMAGICAL(av))
13862 break;
13863 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13864 if (!svp || *svp != uninit_sv)
13865 break;
bd81e77b 13866 }
93bad3fd
NC
13867 return varname(NULL, '$', obase->op_targ,
13868 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13869 case OP_AELEMFAST:
13870 {
bd81e77b
NC
13871 gv = cGVOPx_gv(obase);
13872 if (!gv)
13873 break;
13874 if (match) {
13875 SV **svp;
6c1b357c 13876 AV *const av = GvAV(gv);
bd81e77b
NC
13877 if (!av || SvRMAGICAL(av))
13878 break;
13879 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13880 if (!svp || *svp != uninit_sv)
13881 break;
13882 }
13883 return varname(gv, '$', 0,
a0714e2c 13884 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13885 }
13886 break;
1d7c1841 13887
bd81e77b
NC
13888 case OP_EXISTS:
13889 o = cUNOPx(obase)->op_first;
13890 if (!o || o->op_type != OP_NULL ||
13891 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
13892 break;
13893 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
a2efc822 13894
bd81e77b
NC
13895 case OP_AELEM:
13896 case OP_HELEM:
e6c60e70
GG
13897 {
13898 bool negate = FALSE;
13899
bd81e77b
NC
13900 if (PL_op == obase)
13901 /* $a[uninit_expr] or $h{uninit_expr} */
13902 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
081fc587 13903
a0714e2c 13904 gv = NULL;
bd81e77b
NC
13905 o = cBINOPx(obase)->op_first;
13906 kid = cBINOPx(obase)->op_last;
8cf8f3d1 13907
bd81e77b 13908 /* get the av or hv, and optionally the gv */
a0714e2c 13909 sv = NULL;
bd81e77b
NC
13910 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
13911 sv = PAD_SV(o->op_targ);
13912 }
13913 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
13914 && cUNOPo->op_first->op_type == OP_GV)
13915 {
13916 gv = cGVOPx_gv(cUNOPo->op_first);
13917 if (!gv)
13918 break;
daba3364
NC
13919 sv = o->op_type
13920 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
bd81e77b
NC
13921 }
13922 if (!sv)
13923 break;
13924
e6c60e70
GG
13925 if (kid && kid->op_type == OP_NEGATE) {
13926 negate = TRUE;
13927 kid = cUNOPx(kid)->op_first;
13928 }
13929
bd81e77b
NC
13930 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
13931 /* index is constant */
e6c60e70
GG
13932 SV* kidsv;
13933 if (negate) {
13934 kidsv = sv_2mortal(newSVpvs("-"));
13935 sv_catsv(kidsv, cSVOPx_sv(kid));
13936 }
13937 else
13938 kidsv = cSVOPx_sv(kid);
bd81e77b
NC
13939 if (match) {
13940 if (SvMAGICAL(sv))
13941 break;
13942 if (obase->op_type == OP_HELEM) {
e6c60e70 13943 HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
bd81e77b
NC
13944 if (!he || HeVAL(he) != uninit_sv)
13945 break;
13946 }
13947 else {
e6c60e70
GG
13948 SV * const * const svp = av_fetch(MUTABLE_AV(sv),
13949 negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
13950 FALSE);
bd81e77b
NC
13951 if (!svp || *svp != uninit_sv)
13952 break;
13953 }
13954 }
13955 if (obase->op_type == OP_HELEM)
13956 return varname(gv, '%', o->op_targ,
e6c60e70 13957 kidsv, 0, FUV_SUBSCRIPT_HASH);
bd81e77b 13958 else
a0714e2c 13959 return varname(gv, '@', o->op_targ, NULL,
e6c60e70
GG
13960 negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
13961 FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13962 }
13963 else {
13964 /* index is an expression;
13965 * attempt to find a match within the aggregate */
13966 if (obase->op_type == OP_HELEM) {
85fbaab2 13967 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
13968 if (keysv)
13969 return varname(gv, '%', o->op_targ,
13970 keysv, 0, FUV_SUBSCRIPT_HASH);
13971 }
13972 else {
502c6561
NC
13973 const I32 index
13974 = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
13975 if (index >= 0)
13976 return varname(gv, '@', o->op_targ,
a0714e2c 13977 NULL, index, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13978 }
13979 if (match)
13980 break;
13981 return varname(gv,
13982 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
13983 ? '@' : '%',
a0714e2c 13984 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
f284b03f 13985 }
bd81e77b 13986 break;
e6c60e70 13987 }
dc507217 13988
bd81e77b
NC
13989 case OP_AASSIGN:
13990 /* only examine RHS */
13991 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
6d26897e 13992
bd81e77b
NC
13993 case OP_OPEN:
13994 o = cUNOPx(obase)->op_first;
13995 if (o->op_type == OP_PUSHMARK)
13996 o = o->op_sibling;
1d7c1841 13997
bd81e77b
NC
13998 if (!o->op_sibling) {
13999 /* one-arg version of open is highly magical */
a0ae6670 14000
bd81e77b
NC
14001 if (o->op_type == OP_GV) { /* open FOO; */
14002 gv = cGVOPx_gv(o);
14003 if (match && GvSV(gv) != uninit_sv)
14004 break;
14005 return varname(gv, '$', 0,
a0714e2c 14006 NULL, 0, FUV_SUBSCRIPT_NONE);
bd81e77b
NC
14007 }
14008 /* other possibilities not handled are:
14009 * open $x; or open my $x; should return '${*$x}'
14010 * open expr; should return '$'.expr ideally
14011 */
14012 break;
14013 }
14014 goto do_op;
ccfc67b7 14015
bd81e77b
NC
14016 /* ops where $_ may be an implicit arg */
14017 case OP_TRANS:
14018 case OP_SUBST:
14019 case OP_MATCH:
14020 if ( !(obase->op_flags & OPf_STACKED)) {
14021 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14022 ? PAD_SVl(obase->op_targ)
14023 : DEFSV))
14024 {
14025 sv = sv_newmortal();
76f68e9b 14026 sv_setpvs(sv, "$_");
bd81e77b
NC
14027 return sv;
14028 }
14029 }
14030 goto do_op;
9f4817db 14031
bd81e77b
NC
14032 case OP_PRTF:
14033 case OP_PRINT:
3ef1310e 14034 case OP_SAY:
fa8d1836 14035 match = 1; /* print etc can return undef on defined args */
bd81e77b
NC
14036 /* skip filehandle as it can't produce 'undef' warning */
14037 o = cUNOPx(obase)->op_first;
14038 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
14039 o = o->op_sibling->op_sibling;
14040 goto do_op2;
9f4817db 14041
9f4817db 14042
50edf520 14043 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
8b0dea50
DM
14044 case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14045
14046 /* the following ops are capable of returning PL_sv_undef even for
14047 * defined arg(s) */
14048
14049 case OP_BACKTICK:
14050 case OP_PIPE_OP:
14051 case OP_FILENO:
14052 case OP_BINMODE:
14053 case OP_TIED:
14054 case OP_GETC:
14055 case OP_SYSREAD:
14056 case OP_SEND:
14057 case OP_IOCTL:
14058 case OP_SOCKET:
14059 case OP_SOCKPAIR:
14060 case OP_BIND:
14061 case OP_CONNECT:
14062 case OP_LISTEN:
14063 case OP_ACCEPT:
14064 case OP_SHUTDOWN:
14065 case OP_SSOCKOPT:
14066 case OP_GETPEERNAME:
14067 case OP_FTRREAD:
14068 case OP_FTRWRITE:
14069 case OP_FTREXEC:
14070 case OP_FTROWNED:
14071 case OP_FTEREAD:
14072 case OP_FTEWRITE:
14073 case OP_FTEEXEC:
14074 case OP_FTEOWNED:
14075 case OP_FTIS:
14076 case OP_FTZERO:
14077 case OP_FTSIZE:
14078 case OP_FTFILE:
14079 case OP_FTDIR:
14080 case OP_FTLINK:
14081 case OP_FTPIPE:
14082 case OP_FTSOCK:
14083 case OP_FTBLK:
14084 case OP_FTCHR:
14085 case OP_FTTTY:
14086 case OP_FTSUID:
14087 case OP_FTSGID:
14088 case OP_FTSVTX:
14089 case OP_FTTEXT:
14090 case OP_FTBINARY:
14091 case OP_FTMTIME:
14092 case OP_FTATIME:
14093 case OP_FTCTIME:
14094 case OP_READLINK:
14095 case OP_OPEN_DIR:
14096 case OP_READDIR:
14097 case OP_TELLDIR:
14098 case OP_SEEKDIR:
14099 case OP_REWINDDIR:
14100 case OP_CLOSEDIR:
14101 case OP_GMTIME:
14102 case OP_ALARM:
14103 case OP_SEMGET:
14104 case OP_GETLOGIN:
14105 case OP_UNDEF:
14106 case OP_SUBSTR:
14107 case OP_AEACH:
14108 case OP_EACH:
14109 case OP_SORT:
14110 case OP_CALLER:
14111 case OP_DOFILE:
fa8d1836
DM
14112 case OP_PROTOTYPE:
14113 case OP_NCMP:
14114 case OP_SMARTMATCH:
14115 case OP_UNPACK:
14116 case OP_SYSOPEN:
14117 case OP_SYSSEEK:
8b0dea50 14118 match = 1;
bd81e77b 14119 goto do_op;
9f4817db 14120
7697b7e7
DM
14121 case OP_ENTERSUB:
14122 case OP_GOTO:
a2fb3d36
DM
14123 /* XXX tmp hack: these two may call an XS sub, and currently
14124 XS subs don't have a SUB entry on the context stack, so CV and
14125 pad determination goes wrong, and BAD things happen. So, just
14126 don't try to determine the value under those circumstances.
7697b7e7
DM
14127 Need a better fix at dome point. DAPM 11/2007 */
14128 break;
14129
4f187fc9
VP
14130 case OP_FLIP:
14131 case OP_FLOP:
14132 {
14133 GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14134 if (gv && GvSV(gv) == uninit_sv)
14135 return newSVpvs_flags("$.", SVs_TEMP);
14136 goto do_op;
14137 }
8b0dea50 14138
cc4b8646
DM
14139 case OP_POS:
14140 /* def-ness of rval pos() is independent of the def-ness of its arg */
14141 if ( !(obase->op_flags & OPf_MOD))
14142 break;
14143
bd81e77b
NC
14144 case OP_SCHOMP:
14145 case OP_CHOMP:
14146 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
84bafc02 14147 return newSVpvs_flags("${$/}", SVs_TEMP);
5f66b61c 14148 /*FALLTHROUGH*/
5d170f3a 14149
bd81e77b
NC
14150 default:
14151 do_op:
14152 if (!(obase->op_flags & OPf_KIDS))
14153 break;
14154 o = cUNOPx(obase)->op_first;
14155
14156 do_op2:
14157 if (!o)
14158 break;
f9893866 14159
bd81e77b
NC
14160 /* if all except one arg are constant, or have no side-effects,
14161 * or are optimized away, then it's unambiguous */
5f66b61c 14162 o2 = NULL;
bd81e77b 14163 for (kid=o; kid; kid = kid->op_sibling) {
e15d5972
AL
14164 if (kid) {
14165 const OPCODE type = kid->op_type;
14166 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14167 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
14168 || (type == OP_PUSHMARK)
6d1f0892
FC
14169 || (
14170 /* @$a and %$a, but not @a or %a */
14171 (type == OP_RV2AV || type == OP_RV2HV)
14172 && cUNOPx(kid)->op_first
14173 && cUNOPx(kid)->op_first->op_type != OP_GV
14174 )
bd81e77b 14175 )
bd81e77b 14176 continue;
e15d5972 14177 }
bd81e77b 14178 if (o2) { /* more than one found */
5f66b61c 14179 o2 = NULL;
bd81e77b
NC
14180 break;
14181 }
14182 o2 = kid;
14183 }
14184 if (o2)
14185 return find_uninit_var(o2, uninit_sv, match);
7a5fa8a2 14186
bd81e77b
NC
14187 /* scan all args */
14188 while (o) {
14189 sv = find_uninit_var(o, uninit_sv, 1);
14190 if (sv)
14191 return sv;
14192 o = o->op_sibling;
d0063567 14193 }
bd81e77b 14194 break;
f9893866 14195 }
a0714e2c 14196 return NULL;
9f4817db
JH
14197}
14198
220e2d4e 14199
bd81e77b
NC
14200/*
14201=for apidoc report_uninit
68795e93 14202
bd81e77b 14203Print appropriate "Use of uninitialized variable" warning
220e2d4e 14204
bd81e77b
NC
14205=cut
14206*/
220e2d4e 14207
bd81e77b 14208void
b3dbd76e 14209Perl_report_uninit(pTHX_ const SV *uninit_sv)
220e2d4e 14210{
97aff369 14211 dVAR;
bd81e77b 14212 if (PL_op) {
a0714e2c 14213 SV* varname = NULL;
bd81e77b
NC
14214 if (uninit_sv) {
14215 varname = find_uninit_var(PL_op, uninit_sv,0);
14216 if (varname)
14217 sv_insert(varname, 0, 0, " ", 1);
14218 }
14219 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14220 varname ? SvPV_nolen_const(varname) : "",
14221 " in ", OP_DESC(PL_op));
220e2d4e 14222 }
a73e8557 14223 else
bd81e77b
NC
14224 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14225 "", "", "");
220e2d4e 14226}
f9893866 14227
241d1a3b
NC
14228/*
14229 * Local variables:
14230 * c-indentation-style: bsd
14231 * c-basic-offset: 4
14232 * indent-tabs-mode: t
14233 * End:
14234 *
37442d52
RGS
14235 * ex: set ts=8 sts=4 sw=4 noet:
14236 */