This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
mktables: Improve comment
[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.
9521ca61
FC
1130It croaks if the SV is already in a more complex form than requested. You
1131generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1132before calling C<sv_upgrade>, and hence does not croak. See also
1133C<svtype>.
93e68bfb 1134
bd81e77b 1135=cut
93e68bfb 1136*/
93e68bfb 1137
bd81e77b 1138void
aad570aa 1139Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
cac9b346 1140{
97aff369 1141 dVAR;
bd81e77b
NC
1142 void* old_body;
1143 void* new_body;
42d0e0b7 1144 const svtype old_type = SvTYPE(sv);
d2a0f284 1145 const struct body_details *new_type_details;
238b27b3 1146 const struct body_details *old_type_details
bd81e77b 1147 = bodies_by_type + old_type;
4df7f6af 1148 SV *referant = NULL;
cac9b346 1149
7918f24d
NC
1150 PERL_ARGS_ASSERT_SV_UPGRADE;
1151
1776cbe8
NC
1152 if (old_type == new_type)
1153 return;
1154
1155 /* This clause was purposefully added ahead of the early return above to
1156 the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1157 inference by Nick I-S that it would fix other troublesome cases. See
1158 changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1159
1160 Given that shared hash key scalars are no longer PVIV, but PV, there is
1161 no longer need to unshare so as to free up the IVX slot for its proper
1162 purpose. So it's safe to move the early return earlier. */
1163
bd81e77b
NC
1164 if (new_type != SVt_PV && SvIsCOW(sv)) {
1165 sv_force_normal_flags(sv, 0);
1166 }
cac9b346 1167
bd81e77b 1168 old_body = SvANY(sv);
de042e1d 1169
bd81e77b
NC
1170 /* Copying structures onto other structures that have been neatly zeroed
1171 has a subtle gotcha. Consider XPVMG
cac9b346 1172
bd81e77b
NC
1173 +------+------+------+------+------+-------+-------+
1174 | NV | CUR | LEN | IV | MAGIC | STASH |
1175 +------+------+------+------+------+-------+-------+
1176 0 4 8 12 16 20 24 28
645c22ef 1177
bd81e77b
NC
1178 where NVs are aligned to 8 bytes, so that sizeof that structure is
1179 actually 32 bytes long, with 4 bytes of padding at the end:
08742458 1180
bd81e77b
NC
1181 +------+------+------+------+------+-------+-------+------+
1182 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1183 +------+------+------+------+------+-------+-------+------+
1184 0 4 8 12 16 20 24 28 32
08742458 1185
bd81e77b 1186 so what happens if you allocate memory for this structure:
30f9da9e 1187
bd81e77b
NC
1188 +------+------+------+------+------+-------+-------+------+------+...
1189 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1190 +------+------+------+------+------+-------+-------+------+------+...
1191 0 4 8 12 16 20 24 28 32 36
bfc44f79 1192
bd81e77b
NC
1193 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1194 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1195 started out as zero once, but it's quite possible that it isn't. So now,
1196 rather than a nicely zeroed GP, you have it pointing somewhere random.
1197 Bugs ensue.
bfc44f79 1198
bd81e77b
NC
1199 (In fact, GP ends up pointing at a previous GP structure, because the
1200 principle cause of the padding in XPVMG getting garbage is a copy of
6c9e42f7
NC
1201 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1202 this happens to be moot because XPVGV has been re-ordered, with GP
1203 no longer after STASH)
30f9da9e 1204
bd81e77b
NC
1205 So we are careful and work out the size of used parts of all the
1206 structures. */
bfc44f79 1207
bd81e77b
NC
1208 switch (old_type) {
1209 case SVt_NULL:
1210 break;
1211 case SVt_IV:
4df7f6af
NC
1212 if (SvROK(sv)) {
1213 referant = SvRV(sv);
238b27b3
NC
1214 old_type_details = &fake_rv;
1215 if (new_type == SVt_NV)
1216 new_type = SVt_PVNV;
4df7f6af
NC
1217 } else {
1218 if (new_type < SVt_PVIV) {
1219 new_type = (new_type == SVt_NV)
1220 ? SVt_PVNV : SVt_PVIV;
1221 }
bd81e77b
NC
1222 }
1223 break;
1224 case SVt_NV:
1225 if (new_type < SVt_PVNV) {
1226 new_type = SVt_PVNV;
bd81e77b
NC
1227 }
1228 break;
bd81e77b
NC
1229 case SVt_PV:
1230 assert(new_type > SVt_PV);
1231 assert(SVt_IV < SVt_PV);
1232 assert(SVt_NV < SVt_PV);
1233 break;
1234 case SVt_PVIV:
1235 break;
1236 case SVt_PVNV:
1237 break;
1238 case SVt_PVMG:
1239 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1240 there's no way that it can be safely upgraded, because perl.c
1241 expects to Safefree(SvANY(PL_mess_sv)) */
1242 assert(sv != PL_mess_sv);
1243 /* This flag bit is used to mean other things in other scalar types.
1244 Given that it only has meaning inside the pad, it shouldn't be set
1245 on anything that can get upgraded. */
00b1698f 1246 assert(!SvPAD_TYPED(sv));
bd81e77b
NC
1247 break;
1248 default:
1249 if (old_type_details->cant_upgrade)
c81225bc
NC
1250 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1251 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
bd81e77b 1252 }
3376de98
NC
1253
1254 if (old_type > new_type)
1255 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1256 (int)old_type, (int)new_type);
1257
2fa1109b 1258 new_type_details = bodies_by_type + new_type;
645c22ef 1259
bd81e77b
NC
1260 SvFLAGS(sv) &= ~SVTYPEMASK;
1261 SvFLAGS(sv) |= new_type;
932e9ff9 1262
ab4416c0
NC
1263 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1264 the return statements above will have triggered. */
1265 assert (new_type != SVt_NULL);
bd81e77b 1266 switch (new_type) {
bd81e77b
NC
1267 case SVt_IV:
1268 assert(old_type == SVt_NULL);
1269 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1270 SvIV_set(sv, 0);
1271 return;
1272 case SVt_NV:
1273 assert(old_type == SVt_NULL);
1274 SvANY(sv) = new_XNV();
1275 SvNV_set(sv, 0);
1276 return;
bd81e77b 1277 case SVt_PVHV:
bd81e77b 1278 case SVt_PVAV:
d2a0f284 1279 assert(new_type_details->body_size);
c1ae03ae
NC
1280
1281#ifndef PURIFY
1282 assert(new_type_details->arena);
d2a0f284 1283 assert(new_type_details->arena_size);
c1ae03ae 1284 /* This points to the start of the allocated area. */
d2a0f284
JC
1285 new_body_inline(new_body, new_type);
1286 Zero(new_body, new_type_details->body_size, char);
c1ae03ae
NC
1287 new_body = ((char *)new_body) - new_type_details->offset;
1288#else
1289 /* We always allocated the full length item with PURIFY. To do this
1290 we fake things so that arena is false for all 16 types.. */
1291 new_body = new_NOARENAZ(new_type_details);
1292#endif
1293 SvANY(sv) = new_body;
1294 if (new_type == SVt_PVAV) {
1295 AvMAX(sv) = -1;
1296 AvFILLp(sv) = -1;
1297 AvREAL_only(sv);
64484faa 1298 if (old_type_details->body_size) {
ac572bf4
NC
1299 AvALLOC(sv) = 0;
1300 } else {
1301 /* It will have been zeroed when the new body was allocated.
1302 Lets not write to it, in case it confuses a write-back
1303 cache. */
1304 }
78ac7dd9
NC
1305 } else {
1306 assert(!SvOK(sv));
1307 SvOK_off(sv);
1308#ifndef NODEFAULT_SHAREKEYS
1309 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1310#endif
1311 HvMAX(sv) = 7; /* (start with 8 buckets) */
c1ae03ae 1312 }
aeb18a1e 1313
bd81e77b
NC
1314 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1315 The target created by newSVrv also is, and it can have magic.
1316 However, it never has SvPVX set.
1317 */
4df7f6af
NC
1318 if (old_type == SVt_IV) {
1319 assert(!SvROK(sv));
1320 } else if (old_type >= SVt_PV) {
bd81e77b
NC
1321 assert(SvPVX_const(sv) == 0);
1322 }
aeb18a1e 1323
bd81e77b 1324 if (old_type >= SVt_PVMG) {
e736a858 1325 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
bd81e77b 1326 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
797c7171
NC
1327 } else {
1328 sv->sv_u.svu_array = NULL; /* or svu_hash */
bd81e77b
NC
1329 }
1330 break;
93e68bfb 1331
93e68bfb 1332
b9ad13ac
NC
1333 case SVt_REGEXP:
1334 /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1335 sv_force_normal_flags(sv) is called. */
1336 SvFAKE_on(sv);
bd81e77b
NC
1337 case SVt_PVIV:
1338 /* XXX Is this still needed? Was it ever needed? Surely as there is
1339 no route from NV to PVIV, NOK can never be true */
1340 assert(!SvNOKp(sv));
1341 assert(!SvNOK(sv));
1342 case SVt_PVIO:
1343 case SVt_PVFM:
bd81e77b
NC
1344 case SVt_PVGV:
1345 case SVt_PVCV:
1346 case SVt_PVLV:
1347 case SVt_PVMG:
1348 case SVt_PVNV:
1349 case SVt_PV:
93e68bfb 1350
d2a0f284 1351 assert(new_type_details->body_size);
bd81e77b
NC
1352 /* We always allocated the full length item with PURIFY. To do this
1353 we fake things so that arena is false for all 16 types.. */
1354 if(new_type_details->arena) {
1355 /* This points to the start of the allocated area. */
d2a0f284
JC
1356 new_body_inline(new_body, new_type);
1357 Zero(new_body, new_type_details->body_size, char);
bd81e77b
NC
1358 new_body = ((char *)new_body) - new_type_details->offset;
1359 } else {
1360 new_body = new_NOARENAZ(new_type_details);
1361 }
1362 SvANY(sv) = new_body;
5e2fc214 1363
bd81e77b 1364 if (old_type_details->copy) {
f9ba3d20
NC
1365 /* There is now the potential for an upgrade from something without
1366 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1367 int offset = old_type_details->offset;
1368 int length = old_type_details->copy;
1369
1370 if (new_type_details->offset > old_type_details->offset) {
d4c19fe8 1371 const int difference
f9ba3d20
NC
1372 = new_type_details->offset - old_type_details->offset;
1373 offset += difference;
1374 length -= difference;
1375 }
1376 assert (length >= 0);
1377
1378 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1379 char);
bd81e77b
NC
1380 }
1381
1382#ifndef NV_ZERO_IS_ALLBITS_ZERO
f2524eef 1383 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
e5ce394c
NC
1384 * correct 0.0 for us. Otherwise, if the old body didn't have an
1385 * NV slot, but the new one does, then we need to initialise the
1386 * freshly created NV slot with whatever the correct bit pattern is
1387 * for 0.0 */
e22a937e
NC
1388 if (old_type_details->zero_nv && !new_type_details->zero_nv
1389 && !isGV_with_GP(sv))
bd81e77b 1390 SvNV_set(sv, 0);
82048762 1391#endif
5e2fc214 1392
85dca89a
NC
1393 if (new_type == SVt_PVIO) {
1394 IO * const io = MUTABLE_IO(sv);
d963bf01 1395 GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
85dca89a
NC
1396
1397 SvOBJECT_on(io);
1398 /* Clear the stashcache because a new IO could overrule a package
1399 name */
1400 hv_clear(PL_stashcache);
1401
85dca89a 1402 SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
f2524eef 1403 IoPAGE_LEN(sv) = 60;
85dca89a 1404 }
4df7f6af
NC
1405 if (old_type < SVt_PV) {
1406 /* referant will be NULL unless the old type was SVt_IV emulating
1407 SVt_RV */
1408 sv->sv_u.svu_rv = referant;
1409 }
bd81e77b
NC
1410 break;
1411 default:
afd78fd5
JH
1412 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1413 (unsigned long)new_type);
bd81e77b 1414 }
73171d91 1415
db93c0c4 1416 if (old_type > SVt_IV) {
bd81e77b 1417#ifdef PURIFY
beeec492 1418 safefree(old_body);
bd81e77b 1419#else
bc786448
GG
1420 /* Note that there is an assumption that all bodies of types that
1421 can be upgraded came from arenas. Only the more complex non-
1422 upgradable types are allowed to be directly malloc()ed. */
1423 assert(old_type_details->arena);
bd81e77b
NC
1424 del_body((void*)((char*)old_body + old_type_details->offset),
1425 &PL_body_roots[old_type]);
1426#endif
1427 }
1428}
73171d91 1429
bd81e77b
NC
1430/*
1431=for apidoc sv_backoff
73171d91 1432
bd81e77b
NC
1433Remove any string offset. You should normally use the C<SvOOK_off> macro
1434wrapper instead.
73171d91 1435
bd81e77b 1436=cut
73171d91
NC
1437*/
1438
bd81e77b 1439int
aad570aa 1440Perl_sv_backoff(pTHX_ register SV *const sv)
bd81e77b 1441{
69240efd 1442 STRLEN delta;
7a4bba22 1443 const char * const s = SvPVX_const(sv);
7918f24d
NC
1444
1445 PERL_ARGS_ASSERT_SV_BACKOFF;
96a5add6 1446 PERL_UNUSED_CONTEXT;
7918f24d 1447
bd81e77b
NC
1448 assert(SvOOK(sv));
1449 assert(SvTYPE(sv) != SVt_PVHV);
1450 assert(SvTYPE(sv) != SVt_PVAV);
7a4bba22 1451
69240efd
NC
1452 SvOOK_offset(sv, delta);
1453
7a4bba22
NC
1454 SvLEN_set(sv, SvLEN(sv) + delta);
1455 SvPV_set(sv, SvPVX(sv) - delta);
1456 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
bd81e77b
NC
1457 SvFLAGS(sv) &= ~SVf_OOK;
1458 return 0;
1459}
73171d91 1460
bd81e77b
NC
1461/*
1462=for apidoc sv_grow
73171d91 1463
bd81e77b
NC
1464Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1465upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1466Use the C<SvGROW> wrapper instead.
93e68bfb 1467
bd81e77b
NC
1468=cut
1469*/
93e68bfb 1470
bd81e77b 1471char *
aad570aa 1472Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
bd81e77b
NC
1473{
1474 register char *s;
93e68bfb 1475
7918f24d
NC
1476 PERL_ARGS_ASSERT_SV_GROW;
1477
5db06880
NC
1478 if (PL_madskills && newlen >= 0x100000) {
1479 PerlIO_printf(Perl_debug_log,
1480 "Allocation too large: %"UVxf"\n", (UV)newlen);
1481 }
bd81e77b
NC
1482#ifdef HAS_64K_LIMIT
1483 if (newlen >= 0x10000) {
1484 PerlIO_printf(Perl_debug_log,
1485 "Allocation too large: %"UVxf"\n", (UV)newlen);
1486 my_exit(1);
1487 }
1488#endif /* HAS_64K_LIMIT */
1489 if (SvROK(sv))
1490 sv_unref(sv);
1491 if (SvTYPE(sv) < SVt_PV) {
1492 sv_upgrade(sv, SVt_PV);
1493 s = SvPVX_mutable(sv);
1494 }
1495 else if (SvOOK(sv)) { /* pv is offset? */
1496 sv_backoff(sv);
1497 s = SvPVX_mutable(sv);
1498 if (newlen > SvLEN(sv))
1499 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1500#ifdef HAS_64K_LIMIT
1501 if (newlen >= 0x10000)
1502 newlen = 0xFFFF;
1503#endif
1504 }
1505 else
1506 s = SvPVX_mutable(sv);
aeb18a1e 1507
bd81e77b 1508 if (newlen > SvLEN(sv)) { /* need more room? */
f1200559
WH
1509 STRLEN minlen = SvCUR(sv);
1510 minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1511 if (newlen < minlen)
1512 newlen = minlen;
aedff202 1513#ifndef Perl_safesysmalloc_size
bd81e77b 1514 newlen = PERL_STRLEN_ROUNDUP(newlen);
bd81e77b 1515#endif
98653f18 1516 if (SvLEN(sv) && s) {
10edeb5d 1517 s = (char*)saferealloc(s, newlen);
bd81e77b
NC
1518 }
1519 else {
10edeb5d 1520 s = (char*)safemalloc(newlen);
bd81e77b
NC
1521 if (SvPVX_const(sv) && SvCUR(sv)) {
1522 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1523 }
1524 }
1525 SvPV_set(sv, s);
ca7c1a29 1526#ifdef Perl_safesysmalloc_size
98653f18
NC
1527 /* Do this here, do it once, do it right, and then we will never get
1528 called back into sv_grow() unless there really is some growing
1529 needed. */
ca7c1a29 1530 SvLEN_set(sv, Perl_safesysmalloc_size(s));
98653f18 1531#else
bd81e77b 1532 SvLEN_set(sv, newlen);
98653f18 1533#endif
bd81e77b
NC
1534 }
1535 return s;
1536}
aeb18a1e 1537
bd81e77b
NC
1538/*
1539=for apidoc sv_setiv
932e9ff9 1540
bd81e77b
NC
1541Copies an integer into the given SV, upgrading first if necessary.
1542Does not handle 'set' magic. See also C<sv_setiv_mg>.
463ee0b2 1543
bd81e77b
NC
1544=cut
1545*/
463ee0b2 1546
bd81e77b 1547void
aad570aa 1548Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
bd81e77b 1549{
97aff369 1550 dVAR;
7918f24d
NC
1551
1552 PERL_ARGS_ASSERT_SV_SETIV;
1553
bd81e77b
NC
1554 SV_CHECK_THINKFIRST_COW_DROP(sv);
1555 switch (SvTYPE(sv)) {
1556 case SVt_NULL:
bd81e77b 1557 case SVt_NV:
3376de98 1558 sv_upgrade(sv, SVt_IV);
bd81e77b 1559 break;
bd81e77b
NC
1560 case SVt_PV:
1561 sv_upgrade(sv, SVt_PVIV);
1562 break;
463ee0b2 1563
bd81e77b 1564 case SVt_PVGV:
6e592b3a
BM
1565 if (!isGV_with_GP(sv))
1566 break;
bd81e77b
NC
1567 case SVt_PVAV:
1568 case SVt_PVHV:
1569 case SVt_PVCV:
1570 case SVt_PVFM:
1571 case SVt_PVIO:
22e74366 1572 /* diag_listed_as: Can't coerce %s to %s in %s */
bd81e77b
NC
1573 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1574 OP_DESC(PL_op));
42d0e0b7 1575 default: NOOP;
bd81e77b
NC
1576 }
1577 (void)SvIOK_only(sv); /* validate number */
1578 SvIV_set(sv, i);
1579 SvTAINT(sv);
1580}
932e9ff9 1581
bd81e77b
NC
1582/*
1583=for apidoc sv_setiv_mg
d33b2eba 1584
bd81e77b 1585Like C<sv_setiv>, but also handles 'set' magic.
1c846c1f 1586
bd81e77b
NC
1587=cut
1588*/
d33b2eba 1589
bd81e77b 1590void
aad570aa 1591Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
bd81e77b 1592{
7918f24d
NC
1593 PERL_ARGS_ASSERT_SV_SETIV_MG;
1594
bd81e77b
NC
1595 sv_setiv(sv,i);
1596 SvSETMAGIC(sv);
1597}
727879eb 1598
bd81e77b
NC
1599/*
1600=for apidoc sv_setuv
d33b2eba 1601
bd81e77b
NC
1602Copies an unsigned integer into the given SV, upgrading first if necessary.
1603Does not handle 'set' magic. See also C<sv_setuv_mg>.
9b94d1dd 1604
bd81e77b
NC
1605=cut
1606*/
d33b2eba 1607
bd81e77b 1608void
aad570aa 1609Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
bd81e77b 1610{
7918f24d
NC
1611 PERL_ARGS_ASSERT_SV_SETUV;
1612
bd81e77b
NC
1613 /* With these two if statements:
1614 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
d33b2eba 1615
bd81e77b
NC
1616 without
1617 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1c846c1f 1618
bd81e77b
NC
1619 If you wish to remove them, please benchmark to see what the effect is
1620 */
1621 if (u <= (UV)IV_MAX) {
1622 sv_setiv(sv, (IV)u);
1623 return;
1624 }
1625 sv_setiv(sv, 0);
1626 SvIsUV_on(sv);
1627 SvUV_set(sv, u);
1628}
d33b2eba 1629
bd81e77b
NC
1630/*
1631=for apidoc sv_setuv_mg
727879eb 1632
bd81e77b 1633Like C<sv_setuv>, but also handles 'set' magic.
9b94d1dd 1634
bd81e77b
NC
1635=cut
1636*/
5e2fc214 1637
bd81e77b 1638void
aad570aa 1639Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
bd81e77b 1640{
7918f24d
NC
1641 PERL_ARGS_ASSERT_SV_SETUV_MG;
1642
bd81e77b
NC
1643 sv_setuv(sv,u);
1644 SvSETMAGIC(sv);
1645}
5e2fc214 1646
954c1994 1647/*
bd81e77b 1648=for apidoc sv_setnv
954c1994 1649
bd81e77b
NC
1650Copies a double into the given SV, upgrading first if necessary.
1651Does not handle 'set' magic. See also C<sv_setnv_mg>.
954c1994
GS
1652
1653=cut
1654*/
1655
63f97190 1656void
aad570aa 1657Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
79072805 1658{
97aff369 1659 dVAR;
7918f24d
NC
1660
1661 PERL_ARGS_ASSERT_SV_SETNV;
1662
bd81e77b
NC
1663 SV_CHECK_THINKFIRST_COW_DROP(sv);
1664 switch (SvTYPE(sv)) {
79072805 1665 case SVt_NULL:
79072805 1666 case SVt_IV:
bd81e77b 1667 sv_upgrade(sv, SVt_NV);
79072805
LW
1668 break;
1669 case SVt_PV:
79072805 1670 case SVt_PVIV:
bd81e77b 1671 sv_upgrade(sv, SVt_PVNV);
79072805 1672 break;
bd4b1eb5 1673
bd4b1eb5 1674 case SVt_PVGV:
6e592b3a
BM
1675 if (!isGV_with_GP(sv))
1676 break;
bd81e77b
NC
1677 case SVt_PVAV:
1678 case SVt_PVHV:
79072805 1679 case SVt_PVCV:
bd81e77b
NC
1680 case SVt_PVFM:
1681 case SVt_PVIO:
22e74366 1682 /* diag_listed_as: Can't coerce %s to %s in %s */
bd81e77b 1683 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
94bbb3f4 1684 OP_DESC(PL_op));
42d0e0b7 1685 default: NOOP;
2068cd4d 1686 }
bd81e77b
NC
1687 SvNV_set(sv, num);
1688 (void)SvNOK_only(sv); /* validate number */
1689 SvTAINT(sv);
79072805
LW
1690}
1691
645c22ef 1692/*
bd81e77b 1693=for apidoc sv_setnv_mg
645c22ef 1694
bd81e77b 1695Like C<sv_setnv>, but also handles 'set' magic.
645c22ef
DM
1696
1697=cut
1698*/
1699
bd81e77b 1700void
aad570aa 1701Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
79072805 1702{
7918f24d
NC
1703 PERL_ARGS_ASSERT_SV_SETNV_MG;
1704
bd81e77b
NC
1705 sv_setnv(sv,num);
1706 SvSETMAGIC(sv);
79072805
LW
1707}
1708
bd81e77b
NC
1709/* Print an "isn't numeric" warning, using a cleaned-up,
1710 * printable version of the offending string
1711 */
954c1994 1712
bd81e77b 1713STATIC void
aad570aa 1714S_not_a_number(pTHX_ SV *const sv)
79072805 1715{
97aff369 1716 dVAR;
bd81e77b
NC
1717 SV *dsv;
1718 char tmpbuf[64];
1719 const char *pv;
94463019 1720
7918f24d
NC
1721 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1722
94463019 1723 if (DO_UTF8(sv)) {
84bafc02 1724 dsv = newSVpvs_flags("", SVs_TEMP);
472394e4 1725 pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
94463019
JH
1726 } else {
1727 char *d = tmpbuf;
551405c4 1728 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
94463019
JH
1729 /* each *s can expand to 4 chars + "...\0",
1730 i.e. need room for 8 chars */
ecdeb87c 1731
00b6aa41
AL
1732 const char *s = SvPVX_const(sv);
1733 const char * const end = s + SvCUR(sv);
1734 for ( ; s < end && d < limit; s++ ) {
94463019
JH
1735 int ch = *s & 0xFF;
1736 if (ch & 128 && !isPRINT_LC(ch)) {
1737 *d++ = 'M';
1738 *d++ = '-';
1739 ch &= 127;
1740 }
1741 if (ch == '\n') {
1742 *d++ = '\\';
1743 *d++ = 'n';
1744 }
1745 else if (ch == '\r') {
1746 *d++ = '\\';
1747 *d++ = 'r';
1748 }
1749 else if (ch == '\f') {
1750 *d++ = '\\';
1751 *d++ = 'f';
1752 }
1753 else if (ch == '\\') {
1754 *d++ = '\\';
1755 *d++ = '\\';
1756 }
1757 else if (ch == '\0') {
1758 *d++ = '\\';
1759 *d++ = '0';
1760 }
1761 else if (isPRINT_LC(ch))
1762 *d++ = ch;
1763 else {
1764 *d++ = '^';
1765 *d++ = toCTRL(ch);
1766 }
1767 }
1768 if (s < end) {
1769 *d++ = '.';
1770 *d++ = '.';
1771 *d++ = '.';
1772 }
1773 *d = '\0';
1774 pv = tmpbuf;
a0d0e21e 1775 }
a0d0e21e 1776
533c011a 1777 if (PL_op)
9014280d 1778 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019
JH
1779 "Argument \"%s\" isn't numeric in %s", pv,
1780 OP_DESC(PL_op));
a0d0e21e 1781 else
9014280d 1782 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019 1783 "Argument \"%s\" isn't numeric", pv);
a0d0e21e
LW
1784}
1785
c2988b20
NC
1786/*
1787=for apidoc looks_like_number
1788
645c22ef
DM
1789Test if the content of an SV looks like a number (or is a number).
1790C<Inf> and C<Infinity> are treated as numbers (so will not issue a
f52e41ad
FC
1791non-numeric warning), even if your atof() doesn't grok them. Get-magic is
1792ignored.
c2988b20
NC
1793
1794=cut
1795*/
1796
1797I32
aad570aa 1798Perl_looks_like_number(pTHX_ SV *const sv)
c2988b20 1799{
a3b680e6 1800 register const char *sbegin;
c2988b20
NC
1801 STRLEN len;
1802
7918f24d
NC
1803 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1804
f52e41ad
FC
1805 if (SvPOK(sv) || SvPOKp(sv)) {
1806 sbegin = SvPV_nomg_const(sv, len);
c2988b20 1807 }
c2988b20 1808 else
e0ab1c0e 1809 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
c2988b20
NC
1810 return grok_number(sbegin, len, NULL);
1811}
25da4f38 1812
19f6321d
NC
1813STATIC bool
1814S_glob_2number(pTHX_ GV * const gv)
180488f8 1815{
180488f8
NC
1816 SV *const buffer = sv_newmortal();
1817
7918f24d
NC
1818 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1819
180488f8 1820 gv_efullname3(buffer, gv, "*");
180488f8 1821
675c862f
AL
1822 /* We know that all GVs stringify to something that is not-a-number,
1823 so no need to test that. */
1824 if (ckWARN(WARN_NUMERIC))
1825 not_a_number(buffer);
1826 /* We just want something true to return, so that S_sv_2iuv_common
1827 can tail call us and return true. */
19f6321d 1828 return TRUE;
675c862f
AL
1829}
1830
25da4f38
IZ
1831/* Actually, ISO C leaves conversion of UV to IV undefined, but
1832 until proven guilty, assume that things are not that bad... */
1833
645c22ef
DM
1834/*
1835 NV_PRESERVES_UV:
1836
1837 As 64 bit platforms often have an NV that doesn't preserve all bits of
28e5dec8
JH
1838 an IV (an assumption perl has been based on to date) it becomes necessary
1839 to remove the assumption that the NV always carries enough precision to
1840 recreate the IV whenever needed, and that the NV is the canonical form.
1841 Instead, IV/UV and NV need to be given equal rights. So as to not lose
645c22ef 1842 precision as a side effect of conversion (which would lead to insanity
28e5dec8
JH
1843 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1844 1) to distinguish between IV/UV/NV slots that have cached a valid
1845 conversion where precision was lost and IV/UV/NV slots that have a
1846 valid conversion which has lost no precision
645c22ef 1847 2) to ensure that if a numeric conversion to one form is requested that
28e5dec8
JH
1848 would lose precision, the precise conversion (or differently
1849 imprecise conversion) is also performed and cached, to prevent
1850 requests for different numeric formats on the same SV causing
1851 lossy conversion chains. (lossless conversion chains are perfectly
1852 acceptable (still))
1853
1854
1855 flags are used:
1856 SvIOKp is true if the IV slot contains a valid value
1857 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1858 SvNOKp is true if the NV slot contains a valid value
1859 SvNOK is true only if the NV value is accurate
1860
1861 so
645c22ef 1862 while converting from PV to NV, check to see if converting that NV to an
28e5dec8
JH
1863 IV(or UV) would lose accuracy over a direct conversion from PV to
1864 IV(or UV). If it would, cache both conversions, return NV, but mark
1865 SV as IOK NOKp (ie not NOK).
1866
645c22ef 1867 While converting from PV to IV, check to see if converting that IV to an
28e5dec8
JH
1868 NV would lose accuracy over a direct conversion from PV to NV. If it
1869 would, cache both conversions, flag similarly.
1870
1871 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1872 correctly because if IV & NV were set NV *always* overruled.
645c22ef
DM
1873 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1874 changes - now IV and NV together means that the two are interchangeable:
28e5dec8 1875 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
d460ef45 1876
645c22ef
DM
1877 The benefit of this is that operations such as pp_add know that if
1878 SvIOK is true for both left and right operands, then integer addition
1879 can be used instead of floating point (for cases where the result won't
1880 overflow). Before, floating point was always used, which could lead to
28e5dec8
JH
1881 loss of precision compared with integer addition.
1882
1883 * making IV and NV equal status should make maths accurate on 64 bit
1884 platforms
1885 * may speed up maths somewhat if pp_add and friends start to use
645c22ef 1886 integers when possible instead of fp. (Hopefully the overhead in
28e5dec8
JH
1887 looking for SvIOK and checking for overflow will not outweigh the
1888 fp to integer speedup)
1889 * will slow down integer operations (callers of SvIV) on "inaccurate"
1890 values, as the change from SvIOK to SvIOKp will cause a call into
1891 sv_2iv each time rather than a macro access direct to the IV slot
1892 * should speed up number->string conversion on integers as IV is
645c22ef 1893 favoured when IV and NV are equally accurate
28e5dec8
JH
1894
1895 ####################################################################
645c22ef
DM
1896 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1897 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1898 On the other hand, SvUOK is true iff UV.
28e5dec8
JH
1899 ####################################################################
1900
645c22ef 1901 Your mileage will vary depending your CPU's relative fp to integer
28e5dec8
JH
1902 performance ratio.
1903*/
1904
1905#ifndef NV_PRESERVES_UV
645c22ef
DM
1906# define IS_NUMBER_UNDERFLOW_IV 1
1907# define IS_NUMBER_UNDERFLOW_UV 2
1908# define IS_NUMBER_IV_AND_UV 2
1909# define IS_NUMBER_OVERFLOW_IV 4
1910# define IS_NUMBER_OVERFLOW_UV 5
1911
1912/* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
28e5dec8
JH
1913
1914/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1915STATIC int
5de3775c 1916S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
47031da6
NC
1917# ifdef DEBUGGING
1918 , I32 numtype
1919# endif
1920 )
28e5dec8 1921{
97aff369 1922 dVAR;
7918f24d
NC
1923
1924 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1925
3f7c398e 1926 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
1927 if (SvNVX(sv) < (NV)IV_MIN) {
1928 (void)SvIOKp_on(sv);
1929 (void)SvNOK_on(sv);
45977657 1930 SvIV_set(sv, IV_MIN);
28e5dec8
JH
1931 return IS_NUMBER_UNDERFLOW_IV;
1932 }
1933 if (SvNVX(sv) > (NV)UV_MAX) {
1934 (void)SvIOKp_on(sv);
1935 (void)SvNOK_on(sv);
1936 SvIsUV_on(sv);
607fa7f2 1937 SvUV_set(sv, UV_MAX);
28e5dec8
JH
1938 return IS_NUMBER_OVERFLOW_UV;
1939 }
c2988b20
NC
1940 (void)SvIOKp_on(sv);
1941 (void)SvNOK_on(sv);
1942 /* Can't use strtol etc to convert this string. (See truth table in
1943 sv_2iv */
1944 if (SvNVX(sv) <= (UV)IV_MAX) {
45977657 1945 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
1946 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1947 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1948 } else {
1949 /* Integer is imprecise. NOK, IOKp */
1950 }
1951 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1952 }
1953 SvIsUV_on(sv);
607fa7f2 1954 SvUV_set(sv, U_V(SvNVX(sv)));
c2988b20
NC
1955 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1956 if (SvUVX(sv) == UV_MAX) {
1957 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1958 possibly be preserved by NV. Hence, it must be overflow.
1959 NOK, IOKp */
1960 return IS_NUMBER_OVERFLOW_UV;
1961 }
1962 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1963 } else {
1964 /* Integer is imprecise. NOK, IOKp */
28e5dec8 1965 }
c2988b20 1966 return IS_NUMBER_OVERFLOW_IV;
28e5dec8 1967}
645c22ef
DM
1968#endif /* !NV_PRESERVES_UV*/
1969
af359546 1970STATIC bool
7918f24d
NC
1971S_sv_2iuv_common(pTHX_ SV *const sv)
1972{
97aff369 1973 dVAR;
7918f24d
NC
1974
1975 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1976
af359546 1977 if (SvNOKp(sv)) {
28e5dec8
JH
1978 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1979 * without also getting a cached IV/UV from it at the same time
1980 * (ie PV->NV conversion should detect loss of accuracy and cache
af359546
NC
1981 * IV or UV at same time to avoid this. */
1982 /* IV-over-UV optimisation - choose to cache IV if possible */
25da4f38
IZ
1983
1984 if (SvTYPE(sv) == SVt_NV)
1985 sv_upgrade(sv, SVt_PVNV);
1986
28e5dec8
JH
1987 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1988 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1989 certainly cast into the IV range at IV_MAX, whereas the correct
1990 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1991 cases go to UV */
cab190d4
JD
1992#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1993 if (Perl_isnan(SvNVX(sv))) {
1994 SvUV_set(sv, 0);
1995 SvIsUV_on(sv);
fdbe6d7c 1996 return FALSE;
cab190d4 1997 }
cab190d4 1998#endif
28e5dec8 1999 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
45977657 2000 SvIV_set(sv, I_V(SvNVX(sv)));
28e5dec8
JH
2001 if (SvNVX(sv) == (NV) SvIVX(sv)
2002#ifndef NV_PRESERVES_UV
2003 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2004 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2005 /* Don't flag it as "accurately an integer" if the number
2006 came from a (by definition imprecise) NV operation, and
2007 we're outside the range of NV integer precision */
2008#endif
2009 ) {
a43d94f2
NC
2010 if (SvNOK(sv))
2011 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2012 else {
2013 /* scalar has trailing garbage, eg "42a" */
2014 }
28e5dec8 2015 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 2016 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
28e5dec8
JH
2017 PTR2UV(sv),
2018 SvNVX(sv),
2019 SvIVX(sv)));
2020
2021 } else {
2022 /* IV not precise. No need to convert from PV, as NV
2023 conversion would already have cached IV if it detected
2024 that PV->IV would be better than PV->NV->IV
2025 flags already correct - don't set public IOK. */
2026 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 2027 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
28e5dec8
JH
2028 PTR2UV(sv),
2029 SvNVX(sv),
2030 SvIVX(sv)));
2031 }
2032 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2033 but the cast (NV)IV_MIN rounds to a the value less (more
2034 negative) than IV_MIN which happens to be equal to SvNVX ??
2035 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2036 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2037 (NV)UVX == NVX are both true, but the values differ. :-(
2038 Hopefully for 2s complement IV_MIN is something like
2039 0x8000000000000000 which will be exact. NWC */
d460ef45 2040 }
25da4f38 2041 else {
607fa7f2 2042 SvUV_set(sv, U_V(SvNVX(sv)));
28e5dec8
JH
2043 if (
2044 (SvNVX(sv) == (NV) SvUVX(sv))
2045#ifndef NV_PRESERVES_UV
2046 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2047 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2048 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2049 /* Don't flag it as "accurately an integer" if the number
2050 came from a (by definition imprecise) NV operation, and
2051 we're outside the range of NV integer precision */
2052#endif
a43d94f2 2053 && SvNOK(sv)
28e5dec8
JH
2054 )
2055 SvIOK_on(sv);
25da4f38 2056 SvIsUV_on(sv);
1c846c1f 2057 DEBUG_c(PerlIO_printf(Perl_debug_log,
57def98f 2058 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
56431972 2059 PTR2UV(sv),
57def98f
JH
2060 SvUVX(sv),
2061 SvUVX(sv)));
25da4f38 2062 }
748a9306
LW
2063 }
2064 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2065 UV value;
504618e9 2066 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
af359546 2067 /* We want to avoid a possible problem when we cache an IV/ a UV which
25da4f38 2068 may be later translated to an NV, and the resulting NV is not
c2988b20
NC
2069 the same as the direct translation of the initial string
2070 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2071 be careful to ensure that the value with the .456 is around if the
2072 NV value is requested in the future).
1c846c1f 2073
af359546 2074 This means that if we cache such an IV/a UV, we need to cache the
25da4f38 2075 NV as well. Moreover, we trade speed for space, and do not
28e5dec8 2076 cache the NV if we are sure it's not needed.
25da4f38 2077 */
16b7a9a4 2078
c2988b20
NC
2079 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2080 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2081 == IS_NUMBER_IN_UV) {
5e045b90 2082 /* It's definitely an integer, only upgrade to PVIV */
28e5dec8
JH
2083 if (SvTYPE(sv) < SVt_PVIV)
2084 sv_upgrade(sv, SVt_PVIV);
f7bbb42a 2085 (void)SvIOK_on(sv);
c2988b20
NC
2086 } else if (SvTYPE(sv) < SVt_PVNV)
2087 sv_upgrade(sv, SVt_PVNV);
28e5dec8 2088
f2524eef 2089 /* If NVs preserve UVs then we only use the UV value if we know that
c2988b20
NC
2090 we aren't going to call atof() below. If NVs don't preserve UVs
2091 then the value returned may have more precision than atof() will
2092 return, even though value isn't perfectly accurate. */
2093 if ((numtype & (IS_NUMBER_IN_UV
2094#ifdef NV_PRESERVES_UV
2095 | IS_NUMBER_NOT_INT
2096#endif
2097 )) == IS_NUMBER_IN_UV) {
2098 /* This won't turn off the public IOK flag if it was set above */
2099 (void)SvIOKp_on(sv);
2100
2101 if (!(numtype & IS_NUMBER_NEG)) {
2102 /* positive */;
2103 if (value <= (UV)IV_MAX) {
45977657 2104 SvIV_set(sv, (IV)value);
c2988b20 2105 } else {
af359546 2106 /* it didn't overflow, and it was positive. */
607fa7f2 2107 SvUV_set(sv, value);
c2988b20
NC
2108 SvIsUV_on(sv);
2109 }
2110 } else {
2111 /* 2s complement assumption */
2112 if (value <= (UV)IV_MIN) {
45977657 2113 SvIV_set(sv, -(IV)value);
c2988b20
NC
2114 } else {
2115 /* Too negative for an IV. This is a double upgrade, but
d1be9408 2116 I'm assuming it will be rare. */
c2988b20
NC
2117 if (SvTYPE(sv) < SVt_PVNV)
2118 sv_upgrade(sv, SVt_PVNV);
2119 SvNOK_on(sv);
2120 SvIOK_off(sv);
2121 SvIOKp_on(sv);
9d6ce603 2122 SvNV_set(sv, -(NV)value);
45977657 2123 SvIV_set(sv, IV_MIN);
c2988b20
NC
2124 }
2125 }
2126 }
2127 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2128 will be in the previous block to set the IV slot, and the next
2129 block to set the NV slot. So no else here. */
2130
2131 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2132 != IS_NUMBER_IN_UV) {
2133 /* It wasn't an (integer that doesn't overflow the UV). */
3f7c398e 2134 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8 2135
c2988b20
NC
2136 if (! numtype && ckWARN(WARN_NUMERIC))
2137 not_a_number(sv);
28e5dec8 2138
65202027 2139#if defined(USE_LONG_DOUBLE)
c2988b20
NC
2140 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2141 PTR2UV(sv), SvNVX(sv)));
65202027 2142#else
1779d84d 2143 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
c2988b20 2144 PTR2UV(sv), SvNVX(sv)));
65202027 2145#endif
28e5dec8 2146
28e5dec8 2147#ifdef NV_PRESERVES_UV
af359546
NC
2148 (void)SvIOKp_on(sv);
2149 (void)SvNOK_on(sv);
2150 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2151 SvIV_set(sv, I_V(SvNVX(sv)));
2152 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2153 SvIOK_on(sv);
2154 } else {
6f207bd3 2155 NOOP; /* Integer is imprecise. NOK, IOKp */
af359546
NC
2156 }
2157 /* UV will not work better than IV */
2158 } else {
2159 if (SvNVX(sv) > (NV)UV_MAX) {
2160 SvIsUV_on(sv);
2161 /* Integer is inaccurate. NOK, IOKp, is UV */
2162 SvUV_set(sv, UV_MAX);
af359546
NC
2163 } else {
2164 SvUV_set(sv, U_V(SvNVX(sv)));
2165 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2166 NV preservse UV so can do correct comparison. */
2167 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2168 SvIOK_on(sv);
af359546 2169 } else {
6f207bd3 2170 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
af359546
NC
2171 }
2172 }
4b0c9573 2173 SvIsUV_on(sv);
af359546 2174 }
28e5dec8 2175#else /* NV_PRESERVES_UV */
c2988b20
NC
2176 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2177 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
af359546 2178 /* The IV/UV slot will have been set from value returned by
c2988b20
NC
2179 grok_number above. The NV slot has just been set using
2180 Atof. */
560b0c46 2181 SvNOK_on(sv);
c2988b20
NC
2182 assert (SvIOKp(sv));
2183 } else {
2184 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2185 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2186 /* Small enough to preserve all bits. */
2187 (void)SvIOKp_on(sv);
2188 SvNOK_on(sv);
45977657 2189 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
2190 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2191 SvIOK_on(sv);
2192 /* Assumption: first non-preserved integer is < IV_MAX,
2193 this NV is in the preserved range, therefore: */
2194 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2195 < (UV)IV_MAX)) {
32fdb065 2196 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
2197 }
2198 } else {
2199 /* IN_UV NOT_INT
2200 0 0 already failed to read UV.
2201 0 1 already failed to read UV.
2202 1 0 you won't get here in this case. IV/UV
2203 slot set, public IOK, Atof() unneeded.
2204 1 1 already read UV.
2205 so there's no point in sv_2iuv_non_preserve() attempting
2206 to use atol, strtol, strtoul etc. */
47031da6 2207# ifdef DEBUGGING
40a17c4c 2208 sv_2iuv_non_preserve (sv, numtype);
47031da6
NC
2209# else
2210 sv_2iuv_non_preserve (sv);
2211# endif
c2988b20
NC
2212 }
2213 }
28e5dec8 2214#endif /* NV_PRESERVES_UV */
a43d94f2
NC
2215 /* It might be more code efficient to go through the entire logic above
2216 and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2217 gets complex and potentially buggy, so more programmer efficient
2218 to do it this way, by turning off the public flags: */
2219 if (!numtype)
2220 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
25da4f38 2221 }
af359546
NC
2222 }
2223 else {
675c862f 2224 if (isGV_with_GP(sv))
159b6efe 2225 return glob_2number(MUTABLE_GV(sv));
180488f8 2226
9a214eec 2227 if (!SvPADTMP(sv)) {
af359546
NC
2228 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2229 report_uninit(sv);
2230 }
25da4f38
IZ
2231 if (SvTYPE(sv) < SVt_IV)
2232 /* Typically the caller expects that sv_any is not NULL now. */
2233 sv_upgrade(sv, SVt_IV);
af359546
NC
2234 /* Return 0 from the caller. */
2235 return TRUE;
2236 }
2237 return FALSE;
2238}
2239
2240/*
2241=for apidoc sv_2iv_flags
2242
2243Return the integer value of an SV, doing any necessary string
2244conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2245Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2246
2247=cut
2248*/
2249
2250IV
5de3775c 2251Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
af359546 2252{
97aff369 2253 dVAR;
af359546 2254 if (!sv)
a0d0e21e 2255 return 0;
a672f009 2256 if (SvGMAGICAL(sv) || SvVALID(sv)) {
2b2b6d6d
NC
2257 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2258 the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2259 In practice they are extremely unlikely to actually get anywhere
2260 accessible by user Perl code - the only way that I'm aware of is when
2261 a constant subroutine which is used as the second argument to index.
2262 */
af359546
NC
2263 if (flags & SV_GMAGIC)
2264 mg_get(sv);
2265 if (SvIOKp(sv))
2266 return SvIVX(sv);
2267 if (SvNOKp(sv)) {
2268 return I_V(SvNVX(sv));
2269 }
71c558c3
NC
2270 if (SvPOKp(sv) && SvLEN(sv)) {
2271 UV value;
2272 const int numtype
2273 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2274
2275 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2276 == IS_NUMBER_IN_UV) {
2277 /* It's definitely an integer */
2278 if (numtype & IS_NUMBER_NEG) {
2279 if (value < (UV)IV_MIN)
2280 return -(IV)value;
2281 } else {
2282 if (value < (UV)IV_MAX)
2283 return (IV)value;
2284 }
2285 }
2286 if (!numtype) {
2287 if (ckWARN(WARN_NUMERIC))
2288 not_a_number(sv);
2289 }
2290 return I_V(Atof(SvPVX_const(sv)));
2291 }
1c7ff15e
NC
2292 if (SvROK(sv)) {
2293 goto return_rok;
af359546 2294 }
1c7ff15e
NC
2295 assert(SvTYPE(sv) >= SVt_PVMG);
2296 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2297 } else if (SvTHINKFIRST(sv)) {
af359546 2298 if (SvROK(sv)) {
1c7ff15e 2299 return_rok:
af359546 2300 if (SvAMAGIC(sv)) {
aee036bb
DM
2301 SV * tmpstr;
2302 if (flags & SV_SKIP_OVERLOAD)
2303 return 0;
31d632c3 2304 tmpstr = AMG_CALLunary(sv, numer_amg);
af359546
NC
2305 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2306 return SvIV(tmpstr);
2307 }
2308 }
2309 return PTR2IV(SvRV(sv));
2310 }
2311 if (SvIsCOW(sv)) {
2312 sv_force_normal_flags(sv, 0);
2313 }
2314 if (SvREADONLY(sv) && !SvOK(sv)) {
2315 if (ckWARN(WARN_UNINITIALIZED))
2316 report_uninit(sv);
2317 return 0;
2318 }
2319 }
2320 if (!SvIOKp(sv)) {
2321 if (S_sv_2iuv_common(aTHX_ sv))
2322 return 0;
79072805 2323 }
1d7c1841
GS
2324 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2325 PTR2UV(sv),SvIVX(sv)));
25da4f38 2326 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
79072805
LW
2327}
2328
645c22ef 2329/*
891f9566 2330=for apidoc sv_2uv_flags
645c22ef
DM
2331
2332Return the unsigned integer value of an SV, doing any necessary string
891f9566
YST
2333conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2334Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
645c22ef
DM
2335
2336=cut
2337*/
2338
ff68c719 2339UV
5de3775c 2340Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
ff68c719 2341{
97aff369 2342 dVAR;
ff68c719 2343 if (!sv)
2344 return 0;
a672f009 2345 if (SvGMAGICAL(sv) || SvVALID(sv)) {
2b2b6d6d
NC
2346 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2347 the same flag bit as SVf_IVisUV, so must not let them cache IVs. */
891f9566
YST
2348 if (flags & SV_GMAGIC)
2349 mg_get(sv);
ff68c719 2350 if (SvIOKp(sv))
2351 return SvUVX(sv);
2352 if (SvNOKp(sv))
2353 return U_V(SvNVX(sv));
71c558c3
NC
2354 if (SvPOKp(sv) && SvLEN(sv)) {
2355 UV value;
2356 const int numtype
2357 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2358
2359 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2360 == IS_NUMBER_IN_UV) {
2361 /* It's definitely an integer */
2362 if (!(numtype & IS_NUMBER_NEG))
2363 return value;
2364 }
2365 if (!numtype) {
2366 if (ckWARN(WARN_NUMERIC))
2367 not_a_number(sv);
2368 }
2369 return U_V(Atof(SvPVX_const(sv)));
2370 }
1c7ff15e
NC
2371 if (SvROK(sv)) {
2372 goto return_rok;
3fe9a6f1 2373 }
1c7ff15e
NC
2374 assert(SvTYPE(sv) >= SVt_PVMG);
2375 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2376 } else if (SvTHINKFIRST(sv)) {
ff68c719 2377 if (SvROK(sv)) {
1c7ff15e 2378 return_rok:
deb46114 2379 if (SvAMAGIC(sv)) {
aee036bb
DM
2380 SV *tmpstr;
2381 if (flags & SV_SKIP_OVERLOAD)
2382 return 0;
31d632c3 2383 tmpstr = AMG_CALLunary(sv, numer_amg);
deb46114
NC
2384 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2385 return SvUV(tmpstr);
2386 }
2387 }
2388 return PTR2UV(SvRV(sv));
ff68c719 2389 }
765f542d
NC
2390 if (SvIsCOW(sv)) {
2391 sv_force_normal_flags(sv, 0);
8a818333 2392 }
0336b60e 2393 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2394 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2395 report_uninit(sv);
ff68c719 2396 return 0;
2397 }
2398 }
af359546
NC
2399 if (!SvIOKp(sv)) {
2400 if (S_sv_2iuv_common(aTHX_ sv))
2401 return 0;
ff68c719 2402 }
25da4f38 2403
1d7c1841
GS
2404 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2405 PTR2UV(sv),SvUVX(sv)));
25da4f38 2406 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
ff68c719 2407}
2408
645c22ef 2409/*
196007d1 2410=for apidoc sv_2nv_flags
645c22ef
DM
2411
2412Return the num value of an SV, doing any necessary string or integer
39d5de13
DM
2413conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2414Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
645c22ef
DM
2415
2416=cut
2417*/
2418
65202027 2419NV
39d5de13 2420Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
79072805 2421{
97aff369 2422 dVAR;
79072805
LW
2423 if (!sv)
2424 return 0.0;
a672f009 2425 if (SvGMAGICAL(sv) || SvVALID(sv)) {
2b2b6d6d
NC
2426 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2427 the same flag bit as SVf_IVisUV, so must not let them cache NVs. */
39d5de13
DM
2428 if (flags & SV_GMAGIC)
2429 mg_get(sv);
463ee0b2
LW
2430 if (SvNOKp(sv))
2431 return SvNVX(sv);
0aa395f8 2432 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
041457d9 2433 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
504618e9 2434 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
a0d0e21e 2435 not_a_number(sv);
3f7c398e 2436 return Atof(SvPVX_const(sv));
a0d0e21e 2437 }
25da4f38 2438 if (SvIOKp(sv)) {
1c846c1f 2439 if (SvIsUV(sv))
65202027 2440 return (NV)SvUVX(sv);
25da4f38 2441 else
65202027 2442 return (NV)SvIVX(sv);
47a72cb8
NC
2443 }
2444 if (SvROK(sv)) {
2445 goto return_rok;
2446 }
2447 assert(SvTYPE(sv) >= SVt_PVMG);
2448 /* This falls through to the report_uninit near the end of the
2449 function. */
2450 } else if (SvTHINKFIRST(sv)) {
a0d0e21e 2451 if (SvROK(sv)) {
47a72cb8 2452 return_rok:
deb46114 2453 if (SvAMAGIC(sv)) {
aee036bb
DM
2454 SV *tmpstr;
2455 if (flags & SV_SKIP_OVERLOAD)
2456 return 0;
31d632c3 2457 tmpstr = AMG_CALLunary(sv, numer_amg);
deb46114
NC
2458 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2459 return SvNV(tmpstr);
2460 }
2461 }
2462 return PTR2NV(SvRV(sv));
a0d0e21e 2463 }
765f542d
NC
2464 if (SvIsCOW(sv)) {
2465 sv_force_normal_flags(sv, 0);
8a818333 2466 }
0336b60e 2467 if (SvREADONLY(sv) && !SvOK(sv)) {
599cee73 2468 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2469 report_uninit(sv);
ed6116ce
LW
2470 return 0.0;
2471 }
79072805
LW
2472 }
2473 if (SvTYPE(sv) < SVt_NV) {
7e25a7e9
NC
2474 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2475 sv_upgrade(sv, SVt_NV);
906f284f 2476#ifdef USE_LONG_DOUBLE
097ee67d 2477 DEBUG_c({
f93f4e46 2478 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2479 PerlIO_printf(Perl_debug_log,
2480 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2481 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2482 RESTORE_NUMERIC_LOCAL();
2483 });
65202027 2484#else
572bbb43 2485 DEBUG_c({
f93f4e46 2486 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2487 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
1d7c1841 2488 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2489 RESTORE_NUMERIC_LOCAL();
2490 });
572bbb43 2491#endif
79072805
LW
2492 }
2493 else if (SvTYPE(sv) < SVt_PVNV)
2494 sv_upgrade(sv, SVt_PVNV);
59d8ce62
NC
2495 if (SvNOKp(sv)) {
2496 return SvNVX(sv);
61604483 2497 }
59d8ce62 2498 if (SvIOKp(sv)) {
9d6ce603 2499 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
28e5dec8 2500#ifdef NV_PRESERVES_UV
a43d94f2
NC
2501 if (SvIOK(sv))
2502 SvNOK_on(sv);
2503 else
2504 SvNOKp_on(sv);
28e5dec8
JH
2505#else
2506 /* Only set the public NV OK flag if this NV preserves the IV */
2507 /* Check it's not 0xFFFFFFFFFFFFFFFF */
a43d94f2
NC
2508 if (SvIOK(sv) &&
2509 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
28e5dec8
JH
2510 : (SvIVX(sv) == I_V(SvNVX(sv))))
2511 SvNOK_on(sv);
2512 else
2513 SvNOKp_on(sv);
2514#endif
93a17b20 2515 }
748a9306 2516 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2517 UV value;
3f7c398e 2518 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
041457d9 2519 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
a0d0e21e 2520 not_a_number(sv);
28e5dec8 2521#ifdef NV_PRESERVES_UV
c2988b20
NC
2522 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2523 == IS_NUMBER_IN_UV) {
5e045b90 2524 /* It's definitely an integer */
9d6ce603 2525 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
c2988b20 2526 } else
3f7c398e 2527 SvNV_set(sv, Atof(SvPVX_const(sv)));
a43d94f2
NC
2528 if (numtype)
2529 SvNOK_on(sv);
2530 else
2531 SvNOKp_on(sv);
28e5dec8 2532#else
3f7c398e 2533 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2534 /* Only set the public NV OK flag if this NV preserves the value in
2535 the PV at least as well as an IV/UV would.
2536 Not sure how to do this 100% reliably. */
2537 /* if that shift count is out of range then Configure's test is
2538 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2539 UV_BITS */
2540 if (((UV)1 << NV_PRESERVES_UV_BITS) >
c2988b20 2541 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
28e5dec8 2542 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
c2988b20
NC
2543 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2544 /* Can't use strtol etc to convert this string, so don't try.
2545 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2546 SvNOK_on(sv);
2547 } else {
2548 /* value has been set. It may not be precise. */
2549 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2550 /* 2s complement assumption for (UV)IV_MIN */
2551 SvNOK_on(sv); /* Integer is too negative. */
2552 } else {
2553 SvNOKp_on(sv);
2554 SvIOKp_on(sv);
6fa402ec 2555
c2988b20 2556 if (numtype & IS_NUMBER_NEG) {
45977657 2557 SvIV_set(sv, -(IV)value);
c2988b20 2558 } else if (value <= (UV)IV_MAX) {
45977657 2559 SvIV_set(sv, (IV)value);
c2988b20 2560 } else {
607fa7f2 2561 SvUV_set(sv, value);
c2988b20
NC
2562 SvIsUV_on(sv);
2563 }
2564
2565 if (numtype & IS_NUMBER_NOT_INT) {
2566 /* I believe that even if the original PV had decimals,
2567 they are lost beyond the limit of the FP precision.
2568 However, neither is canonical, so both only get p
2569 flags. NWC, 2000/11/25 */
2570 /* Both already have p flags, so do nothing */
2571 } else {
66a1b24b 2572 const NV nv = SvNVX(sv);
c2988b20
NC
2573 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2574 if (SvIVX(sv) == I_V(nv)) {
2575 SvNOK_on(sv);
c2988b20 2576 } else {
c2988b20
NC
2577 /* It had no "." so it must be integer. */
2578 }
00b6aa41 2579 SvIOK_on(sv);
c2988b20
NC
2580 } else {
2581 /* between IV_MAX and NV(UV_MAX).
2582 Could be slightly > UV_MAX */
6fa402ec 2583
c2988b20
NC
2584 if (numtype & IS_NUMBER_NOT_INT) {
2585 /* UV and NV both imprecise. */
2586 } else {
66a1b24b 2587 const UV nv_as_uv = U_V(nv);
c2988b20
NC
2588
2589 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2590 SvNOK_on(sv);
c2988b20 2591 }
00b6aa41 2592 SvIOK_on(sv);
c2988b20
NC
2593 }
2594 }
2595 }
2596 }
2597 }
a43d94f2
NC
2598 /* It might be more code efficient to go through the entire logic above
2599 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2600 gets complex and potentially buggy, so more programmer efficient
2601 to do it this way, by turning off the public flags: */
2602 if (!numtype)
2603 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
28e5dec8 2604#endif /* NV_PRESERVES_UV */
93a17b20 2605 }
79072805 2606 else {
f7877b28 2607 if (isGV_with_GP(sv)) {
159b6efe 2608 glob_2number(MUTABLE_GV(sv));
180488f8
NC
2609 return 0.0;
2610 }
2611
9a214eec 2612 if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2613 report_uninit(sv);
7e25a7e9
NC
2614 assert (SvTYPE(sv) >= SVt_NV);
2615 /* Typically the caller expects that sv_any is not NULL now. */
2616 /* XXX Ilya implies that this is a bug in callers that assume this
2617 and ideally should be fixed. */
a0d0e21e 2618 return 0.0;
79072805 2619 }
572bbb43 2620#if defined(USE_LONG_DOUBLE)
097ee67d 2621 DEBUG_c({
f93f4e46 2622 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2623 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2624 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2625 RESTORE_NUMERIC_LOCAL();
2626 });
65202027 2627#else
572bbb43 2628 DEBUG_c({
f93f4e46 2629 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2630 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
1d7c1841 2631 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2632 RESTORE_NUMERIC_LOCAL();
2633 });
572bbb43 2634#endif
463ee0b2 2635 return SvNVX(sv);
79072805
LW
2636}
2637
800401ee
JH
2638/*
2639=for apidoc sv_2num
2640
2641Return an SV with the numeric value of the source SV, doing any necessary
a196a5fa
JH
2642reference or overload conversion. You must use the C<SvNUM(sv)> macro to
2643access this function.
800401ee
JH
2644
2645=cut
2646*/
2647
2648SV *
5de3775c 2649Perl_sv_2num(pTHX_ register SV *const sv)
800401ee 2650{
7918f24d
NC
2651 PERL_ARGS_ASSERT_SV_2NUM;
2652
b9ee0594
RGS
2653 if (!SvROK(sv))
2654 return sv;
800401ee 2655 if (SvAMAGIC(sv)) {
31d632c3 2656 SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
a02ec77a 2657 TAINT_IF(tmpsv && SvTAINTED(tmpsv));
800401ee
JH
2658 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2659 return sv_2num(tmpsv);
2660 }
2661 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2662}
2663
645c22ef
DM
2664/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2665 * UV as a string towards the end of buf, and return pointers to start and
2666 * end of it.
2667 *
2668 * We assume that buf is at least TYPE_CHARS(UV) long.
2669 */
2670
864dbfa3 2671static char *
5de3775c 2672S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
25da4f38 2673{
25da4f38 2674 char *ptr = buf + TYPE_CHARS(UV);
823a54a3 2675 char * const ebuf = ptr;
25da4f38 2676 int sign;
25da4f38 2677
7918f24d
NC
2678 PERL_ARGS_ASSERT_UIV_2BUF;
2679
25da4f38
IZ
2680 if (is_uv)
2681 sign = 0;
2682 else if (iv >= 0) {
2683 uv = iv;
2684 sign = 0;
2685 } else {
2686 uv = -iv;
2687 sign = 1;
2688 }
2689 do {
eb160463 2690 *--ptr = '0' + (char)(uv % 10);
25da4f38
IZ
2691 } while (uv /= 10);
2692 if (sign)
2693 *--ptr = '-';
2694 *peob = ebuf;
2695 return ptr;
2696}
2697
645c22ef
DM
2698/*
2699=for apidoc sv_2pv_flags
2700
ff276b08 2701Returns a pointer to the string value of an SV, and sets *lp to its length.
645c22ef
DM
2702If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2703if necessary.
2704Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2705usually end up here too.
2706
2707=cut
2708*/
2709
8d6d96c1 2710char *
5de3775c 2711Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 2712{
97aff369 2713 dVAR;
79072805 2714 register char *s;
79072805 2715
463ee0b2 2716 if (!sv) {
cdb061a3
NC
2717 if (lp)
2718 *lp = 0;
73d840c0 2719 return (char *)"";
463ee0b2 2720 }
8990e307 2721 if (SvGMAGICAL(sv)) {
8d6d96c1
HS
2722 if (flags & SV_GMAGIC)
2723 mg_get(sv);
463ee0b2 2724 if (SvPOKp(sv)) {
cdb061a3
NC
2725 if (lp)
2726 *lp = SvCUR(sv);
10516c54
NC
2727 if (flags & SV_MUTABLE_RETURN)
2728 return SvPVX_mutable(sv);
4d84ee25
NC
2729 if (flags & SV_CONST_RETURN)
2730 return (char *)SvPVX_const(sv);
463ee0b2
LW
2731 return SvPVX(sv);
2732 }
75dfc8ec
NC
2733 if (SvIOKp(sv) || SvNOKp(sv)) {
2734 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
75dfc8ec
NC
2735 STRLEN len;
2736
2737 if (SvIOKp(sv)) {
e80fed9d 2738 len = SvIsUV(sv)
d9fad198
JH
2739 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2740 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
29912d93
NC
2741 } else if(SvNVX(sv) == 0.0) {
2742 tbuf[0] = '0';
2743 tbuf[1] = 0;
2744 len = 1;
75dfc8ec 2745 } else {
e8ada2d0
NC
2746 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2747 len = strlen(tbuf);
75dfc8ec 2748 }
b5b886f0
NC
2749 assert(!SvROK(sv));
2750 {
75dfc8ec
NC
2751 dVAR;
2752
75dfc8ec
NC
2753 SvUPGRADE(sv, SVt_PV);
2754 if (lp)
2755 *lp = len;
2756 s = SvGROW_mutable(sv, len + 1);
2757 SvCUR_set(sv, len);
2758 SvPOKp_on(sv);
10edeb5d 2759 return (char*)memcpy(s, tbuf, len + 1);
75dfc8ec 2760 }
463ee0b2 2761 }
1c7ff15e
NC
2762 if (SvROK(sv)) {
2763 goto return_rok;
2764 }
2765 assert(SvTYPE(sv) >= SVt_PVMG);
2766 /* This falls through to the report_uninit near the end of the
2767 function. */
2768 } else if (SvTHINKFIRST(sv)) {
ed6116ce 2769 if (SvROK(sv)) {
1c7ff15e 2770 return_rok:
deb46114 2771 if (SvAMAGIC(sv)) {
aee036bb
DM
2772 SV *tmpstr;
2773 if (flags & SV_SKIP_OVERLOAD)
2774 return NULL;
31d632c3 2775 tmpstr = AMG_CALLunary(sv, string_amg);
a02ec77a 2776 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
deb46114
NC
2777 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2778 /* Unwrap this: */
2779 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2780 */
2781
2782 char *pv;
2783 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2784 if (flags & SV_CONST_RETURN) {
2785 pv = (char *) SvPVX_const(tmpstr);
2786 } else {
2787 pv = (flags & SV_MUTABLE_RETURN)
2788 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2789 }
2790 if (lp)
2791 *lp = SvCUR(tmpstr);
50adf7d2 2792 } else {
deb46114 2793 pv = sv_2pv_flags(tmpstr, lp, flags);
50adf7d2 2794 }
deb46114
NC
2795 if (SvUTF8(tmpstr))
2796 SvUTF8_on(sv);
2797 else
2798 SvUTF8_off(sv);
2799 return pv;
50adf7d2 2800 }
deb46114
NC
2801 }
2802 {
fafee734
NC
2803 STRLEN len;
2804 char *retval;
2805 char *buffer;
d2c6dc5e 2806 SV *const referent = SvRV(sv);
d8eae41e
NC
2807
2808 if (!referent) {
fafee734
NC
2809 len = 7;
2810 retval = buffer = savepvn("NULLREF", len);
5c35adbb 2811 } else if (SvTYPE(referent) == SVt_REGEXP) {
d2c6dc5e 2812 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
67d2d14d
AB
2813 I32 seen_evals = 0;
2814
2815 assert(re);
2816
2817 /* If the regex is UTF-8 we want the containing scalar to
2818 have an UTF-8 flag too */
2819 if (RX_UTF8(re))
2820 SvUTF8_on(sv);
2821 else
2822 SvUTF8_off(sv);
2823
2824 if ((seen_evals = RX_SEEN_EVALS(re)))
2825 PL_reginterp_cnt += seen_evals;
2826
2827 if (lp)
2828 *lp = RX_WRAPLEN(re);
2829
2830 return RX_WRAPPED(re);
d8eae41e
NC
2831 } else {
2832 const char *const typestr = sv_reftype(referent, 0);
fafee734
NC
2833 const STRLEN typelen = strlen(typestr);
2834 UV addr = PTR2UV(referent);
2835 const char *stashname = NULL;
2836 STRLEN stashnamelen = 0; /* hush, gcc */
2837 const char *buffer_end;
d8eae41e 2838
d8eae41e 2839 if (SvOBJECT(referent)) {
fafee734
NC
2840 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2841
2842 if (name) {
2843 stashname = HEK_KEY(name);
2844 stashnamelen = HEK_LEN(name);
2845
2846 if (HEK_UTF8(name)) {
2847 SvUTF8_on(sv);
2848 } else {
2849 SvUTF8_off(sv);
2850 }
2851 } else {
2852 stashname = "__ANON__";
2853 stashnamelen = 8;
2854 }
2855 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2856 + 2 * sizeof(UV) + 2 /* )\0 */;
2857 } else {
2858 len = typelen + 3 /* (0x */
2859 + 2 * sizeof(UV) + 2 /* )\0 */;
d8eae41e 2860 }
fafee734
NC
2861
2862 Newx(buffer, len, char);
2863 buffer_end = retval = buffer + len;
2864
2865 /* Working backwards */
2866 *--retval = '\0';
2867 *--retval = ')';
2868 do {
2869 *--retval = PL_hexdigit[addr & 15];
2870 } while (addr >>= 4);
2871 *--retval = 'x';
2872 *--retval = '0';
2873 *--retval = '(';
2874
2875 retval -= typelen;
2876 memcpy(retval, typestr, typelen);
2877
2878 if (stashname) {
2879 *--retval = '=';
2880 retval -= stashnamelen;
2881 memcpy(retval, stashname, stashnamelen);
2882 }
486ec47a 2883 /* retval may not necessarily have reached the start of the
fafee734
NC
2884 buffer here. */
2885 assert (retval >= buffer);
2886
2887 len = buffer_end - retval - 1; /* -1 for that \0 */
c080367d 2888 }
042dae7a 2889 if (lp)
fafee734
NC
2890 *lp = len;
2891 SAVEFREEPV(buffer);
2892 return retval;
463ee0b2 2893 }
79072805 2894 }
0336b60e 2895 if (SvREADONLY(sv) && !SvOK(sv)) {
cdb061a3
NC
2896 if (lp)
2897 *lp = 0;
9f621bb0
NC
2898 if (flags & SV_UNDEF_RETURNS_NULL)
2899 return NULL;
2900 if (ckWARN(WARN_UNINITIALIZED))
2901 report_uninit(sv);
73d840c0 2902 return (char *)"";
79072805 2903 }
79072805 2904 }
28e5dec8
JH
2905 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2906 /* I'm assuming that if both IV and NV are equally valid then
2907 converting the IV is going to be more efficient */
e1ec3a88 2908 const U32 isUIOK = SvIsUV(sv);
28e5dec8
JH
2909 char buf[TYPE_CHARS(UV)];
2910 char *ebuf, *ptr;
97a130b8 2911 STRLEN len;
28e5dec8
JH
2912
2913 if (SvTYPE(sv) < SVt_PVIV)
2914 sv_upgrade(sv, SVt_PVIV);
4ea1d550 2915 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
97a130b8 2916 len = ebuf - ptr;
5902b6a9 2917 /* inlined from sv_setpvn */
97a130b8
NC
2918 s = SvGROW_mutable(sv, len + 1);
2919 Move(ptr, s, len, char);
2920 s += len;
28e5dec8 2921 *s = '\0';
28e5dec8
JH
2922 }
2923 else if (SvNOKp(sv)) {
79072805
LW
2924 if (SvTYPE(sv) < SVt_PVNV)
2925 sv_upgrade(sv, SVt_PVNV);
29912d93
NC
2926 if (SvNVX(sv) == 0.0) {
2927 s = SvGROW_mutable(sv, 2);
2928 *s++ = '0';
2929 *s = '\0';
2930 } else {
2931 dSAVE_ERRNO;
2932 /* The +20 is pure guesswork. Configure test needed. --jhi */
2933 s = SvGROW_mutable(sv, NV_DIG + 20);
2934 /* some Xenix systems wipe out errno here */
2d4389e4 2935 Gconvert(SvNVX(sv), NV_DIG, 0, s);
29912d93
NC
2936 RESTORE_ERRNO;
2937 while (*s) s++;
bbce6d69 2938 }
79072805
LW
2939#ifdef hcx
2940 if (s[-1] == '.')
46fc3d4c 2941 *--s = '\0';
79072805
LW
2942#endif
2943 }
79072805 2944 else {
8d1c3e26
NC
2945 if (isGV_with_GP(sv)) {
2946 GV *const gv = MUTABLE_GV(sv);
8d1c3e26
NC
2947 SV *const buffer = sv_newmortal();
2948
8d1c3e26 2949 gv_efullname3(buffer, gv, "*");
8d1c3e26 2950
52a6327b
FC
2951 assert(SvPOK(buffer));
2952 if (lp) {
1809c940 2953 *lp = SvCUR(buffer);
8d1c3e26 2954 }
52a6327b
FC
2955 if ( SvUTF8(buffer) ) SvUTF8_on(sv);
2956 return SvPVX(buffer);
8d1c3e26 2957 }
180488f8 2958
cdb061a3 2959 if (lp)
00b6aa41 2960 *lp = 0;
9f621bb0
NC
2961 if (flags & SV_UNDEF_RETURNS_NULL)
2962 return NULL;
9a214eec 2963 if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
9f621bb0 2964 report_uninit(sv);
25da4f38
IZ
2965 if (SvTYPE(sv) < SVt_PV)
2966 /* Typically the caller expects that sv_any is not NULL now. */
2967 sv_upgrade(sv, SVt_PV);
73d840c0 2968 return (char *)"";
79072805 2969 }
cdb061a3 2970 {
823a54a3 2971 const STRLEN len = s - SvPVX_const(sv);
cdb061a3
NC
2972 if (lp)
2973 *lp = len;
2974 SvCUR_set(sv, len);
2975 }
79072805 2976 SvPOK_on(sv);
1d7c1841 2977 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 2978 PTR2UV(sv),SvPVX_const(sv)));
4d84ee25
NC
2979 if (flags & SV_CONST_RETURN)
2980 return (char *)SvPVX_const(sv);
10516c54
NC
2981 if (flags & SV_MUTABLE_RETURN)
2982 return SvPVX_mutable(sv);
463ee0b2
LW
2983 return SvPVX(sv);
2984}
2985
645c22ef 2986/*
6050d10e
JP
2987=for apidoc sv_copypv
2988
2989Copies a stringified representation of the source SV into the
2990destination SV. Automatically performs any necessary mg_get and
54f0641b 2991coercion of numeric values into strings. Guaranteed to preserve
2575c402 2992UTF8 flag even from overloaded objects. Similar in nature to
54f0641b
NIS
2993sv_2pv[_flags] but operates directly on an SV instead of just the
2994string. Mostly uses sv_2pv_flags to do its work, except when that
6050d10e
JP
2995would lose the UTF-8'ness of the PV.
2996
2997=cut
2998*/
2999
3000void
5de3775c 3001Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
6050d10e 3002{
446eaa42 3003 STRLEN len;
53c1dcc0 3004 const char * const s = SvPV_const(ssv,len);
7918f24d
NC
3005
3006 PERL_ARGS_ASSERT_SV_COPYPV;
3007
cb50f42d 3008 sv_setpvn(dsv,s,len);
446eaa42 3009 if (SvUTF8(ssv))
cb50f42d 3010 SvUTF8_on(dsv);
446eaa42 3011 else
cb50f42d 3012 SvUTF8_off(dsv);
6050d10e
JP
3013}
3014
3015/*
645c22ef
DM
3016=for apidoc sv_2pvbyte
3017
3018Return a pointer to the byte-encoded representation of the SV, and set *lp
1e54db1a 3019to its length. May cause the SV to be downgraded from UTF-8 as a
645c22ef
DM
3020side-effect.
3021
3022Usually accessed via the C<SvPVbyte> macro.
3023
3024=cut
3025*/
3026
7340a771 3027char *
5de3775c 3028Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3029{
7918f24d
NC
3030 PERL_ARGS_ASSERT_SV_2PVBYTE;
3031
71eb6d8c 3032 SvGETMAGIC(sv);
0875d2fe 3033 sv_utf8_downgrade(sv,0);
71eb6d8c 3034 return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
7340a771
GS
3035}
3036
645c22ef 3037/*
035cbb0e
RGS
3038=for apidoc sv_2pvutf8
3039
3040Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3041to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3042
3043Usually accessed via the C<SvPVutf8> macro.
3044
3045=cut
3046*/
645c22ef 3047
7340a771 3048char *
7bc54cea 3049Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
7340a771 3050{
7918f24d
NC
3051 PERL_ARGS_ASSERT_SV_2PVUTF8;
3052
035cbb0e
RGS
3053 sv_utf8_upgrade(sv);
3054 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771 3055}
1c846c1f 3056
7ee2227d 3057
645c22ef
DM
3058/*
3059=for apidoc sv_2bool
3060
06c841cf
FC
3061This macro is only used by sv_true() or its macro equivalent, and only if
3062the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3063It calls sv_2bool_flags with the SV_GMAGIC flag.
3064
3065=for apidoc sv_2bool_flags
3066
3067This function is only used by sv_true() and friends, and only if
3068the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
3069contain SV_GMAGIC, then it does an mg_get() first.
3070
645c22ef
DM
3071
3072=cut
3073*/
3074
463ee0b2 3075bool
06c841cf 3076Perl_sv_2bool_flags(pTHX_ register SV *const sv, const I32 flags)
463ee0b2 3077{
97aff369 3078 dVAR;
7918f24d 3079
06c841cf 3080 PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
7918f24d 3081
06c841cf 3082 if(flags & SV_GMAGIC) SvGETMAGIC(sv);
463ee0b2 3083
a0d0e21e
LW
3084 if (!SvOK(sv))
3085 return 0;
3086 if (SvROK(sv)) {
fabdb6c0 3087 if (SvAMAGIC(sv)) {
31d632c3 3088 SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
fabdb6c0 3089 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
f2338a2e 3090 return cBOOL(SvTRUE(tmpsv));
fabdb6c0
AL
3091 }
3092 return SvRV(sv) != 0;
a0d0e21e 3093 }
463ee0b2 3094 if (SvPOKp(sv)) {
53c1dcc0
AL
3095 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3096 if (Xpvtmp &&
339049b0 3097 (*sv->sv_u.svu_pv > '0' ||
11343788 3098 Xpvtmp->xpv_cur > 1 ||
339049b0 3099 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
463ee0b2
LW
3100 return 1;
3101 else
3102 return 0;
3103 }
3104 else {
3105 if (SvIOKp(sv))
3106 return SvIVX(sv) != 0;
3107 else {
3108 if (SvNOKp(sv))
3109 return SvNVX(sv) != 0.0;
180488f8 3110 else {
f7877b28 3111 if (isGV_with_GP(sv))
180488f8
NC
3112 return TRUE;
3113 else
3114 return FALSE;
3115 }
463ee0b2
LW
3116 }
3117 }
79072805
LW
3118}
3119
c461cf8f
JH
3120/*
3121=for apidoc sv_utf8_upgrade
3122
78ea37eb 3123Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3124Forces the SV to string form if it is not already.
2bbc8d55 3125Will C<mg_get> on C<sv> if appropriate.
4411f3b6 3126Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3127if the whole string is the same in UTF-8 as not.
3128Returns the number of bytes in the converted string
c461cf8f 3129
13a6c0e0
JH
3130This is not as a general purpose byte encoding to Unicode interface:
3131use the Encode extension for that.
3132
fe749c9a
KW
3133=for apidoc sv_utf8_upgrade_nomg
3134
3135Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3136
8d6d96c1
HS
3137=for apidoc sv_utf8_upgrade_flags
3138
78ea37eb 3139Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 3140Forces the SV to string form if it is not already.
8d6d96c1 3141Always sets the SvUTF8 flag to avoid future validity checks even
2bbc8d55
SP
3142if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3143will C<mg_get> on C<sv> if appropriate, else not.
3144Returns the number of bytes in the converted string
3145C<sv_utf8_upgrade> and
8d6d96c1
HS
3146C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3147
13a6c0e0
JH
3148This is not as a general purpose byte encoding to Unicode interface:
3149use the Encode extension for that.
3150
8d6d96c1 3151=cut
b3ab6785
KW
3152
3153The grow version is currently not externally documented. It adds a parameter,
3154extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3155have free after it upon return. This allows the caller to reserve extra space
3156that it intends to fill, to avoid extra grows.
3157
3158Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3159which can be used to tell this function to not first check to see if there are
3160any characters that are different in UTF-8 (variant characters) which would
3161force it to allocate a new string to sv, but to assume there are. Typically
3162this flag is used by a routine that has already parsed the string to find that
3163there are such characters, and passes this information on so that the work
3164doesn't have to be repeated.
3165
3166(One might think that the calling routine could pass in the position of the
3167first such variant, so it wouldn't have to be found again. But that is not the
3168case, because typically when the caller is likely to use this flag, it won't be
3169calling this routine unless it finds something that won't fit into a byte.
3170Otherwise it tries to not upgrade and just use bytes. But some things that
3171do fit into a byte are variants in utf8, and the caller may not have been
3172keeping track of these.)
3173
3174If the routine itself changes the string, it adds a trailing NUL. Such a NUL
3175isn't guaranteed due to having other routines do the work in some input cases,
3176or if the input is already flagged as being in utf8.
3177
3178The speed of this could perhaps be improved for many cases if someone wanted to
3179write a fast function that counts the number of variant characters in a string,
3180especially if it could return the position of the first one.
3181
8d6d96c1
HS
3182*/
3183
3184STRLEN
b3ab6785 3185Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
8d6d96c1 3186{
97aff369 3187 dVAR;
7918f24d 3188
b3ab6785 3189 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
7918f24d 3190
808c356f
RGS
3191 if (sv == &PL_sv_undef)
3192 return 0;
e0e62c2a
NIS
3193 if (!SvPOK(sv)) {
3194 STRLEN len = 0;
d52b7888
NC
3195 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3196 (void) sv_2pv_flags(sv,&len, flags);
b3ab6785
KW
3197 if (SvUTF8(sv)) {
3198 if (extra) SvGROW(sv, SvCUR(sv) + extra);
d52b7888 3199 return len;
b3ab6785 3200 }
d52b7888 3201 } else {
33fb6f35 3202 (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
d52b7888 3203 }
e0e62c2a 3204 }
4411f3b6 3205
f5cee72b 3206 if (SvUTF8(sv)) {
b3ab6785 3207 if (extra) SvGROW(sv, SvCUR(sv) + extra);
5fec3b1d 3208 return SvCUR(sv);
f5cee72b 3209 }
5fec3b1d 3210
765f542d
NC
3211 if (SvIsCOW(sv)) {
3212 sv_force_normal_flags(sv, 0);
db42d148
NIS
3213 }
3214
b3ab6785 3215 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
799ef3cb 3216 sv_recode_to_utf8(sv, PL_encoding);
b3ab6785
KW
3217 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3218 return SvCUR(sv);
3219 }
3220
4e93345f
KW
3221 if (SvCUR(sv) == 0) {
3222 if (extra) SvGROW(sv, extra);
3223 } else { /* Assume Latin-1/EBCDIC */
c4e7c712 3224 /* This function could be much more efficient if we
2bbc8d55 3225 * had a FLAG in SVs to signal if there are any variant
c4e7c712 3226 * chars in the PV. Given that there isn't such a flag
b3ab6785
KW
3227 * make the loop as fast as possible (although there are certainly ways
3228 * to speed this up, eg. through vectorization) */
3229 U8 * s = (U8 *) SvPVX_const(sv);
3230 U8 * e = (U8 *) SvEND(sv);
3231 U8 *t = s;
3232 STRLEN two_byte_count = 0;
c4e7c712 3233
b3ab6785
KW
3234 if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3235
3236 /* See if really will need to convert to utf8. We mustn't rely on our
3237 * incoming SV being well formed and having a trailing '\0', as certain
3238 * code in pp_formline can send us partially built SVs. */
3239
c4e7c712 3240 while (t < e) {
53c1dcc0 3241 const U8 ch = *t++;
b3ab6785
KW
3242 if (NATIVE_IS_INVARIANT(ch)) continue;
3243
3244 t--; /* t already incremented; re-point to first variant */
3245 two_byte_count = 1;
3246 goto must_be_utf8;
c4e7c712 3247 }
b3ab6785
KW
3248
3249 /* utf8 conversion not needed because all are invariants. Mark as
3250 * UTF-8 even if no variant - saves scanning loop */
c4e7c712 3251 SvUTF8_on(sv);
7f0bfbea 3252 if (extra) SvGROW(sv, SvCUR(sv) + extra);
b3ab6785
KW
3253 return SvCUR(sv);
3254
3255must_be_utf8:
3256
3257 /* Here, the string should be converted to utf8, either because of an
3258 * input flag (two_byte_count = 0), or because a character that
3259 * requires 2 bytes was found (two_byte_count = 1). t points either to
3260 * the beginning of the string (if we didn't examine anything), or to
3261 * the first variant. In either case, everything from s to t - 1 will
3262 * occupy only 1 byte each on output.
3263 *
3264 * There are two main ways to convert. One is to create a new string
3265 * and go through the input starting from the beginning, appending each
3266 * converted value onto the new string as we go along. It's probably
3267 * best to allocate enough space in the string for the worst possible
3268 * case rather than possibly running out of space and having to
3269 * reallocate and then copy what we've done so far. Since everything
3270 * from s to t - 1 is invariant, the destination can be initialized
3271 * with these using a fast memory copy
3272 *
3273 * The other way is to figure out exactly how big the string should be
3274 * by parsing the entire input. Then you don't have to make it big
3275 * enough to handle the worst possible case, and more importantly, if
3276 * the string you already have is large enough, you don't have to
3277 * allocate a new string, you can copy the last character in the input
3278 * string to the final position(s) that will be occupied by the
3279 * converted string and go backwards, stopping at t, since everything
3280 * before that is invariant.
3281 *
3282 * There are advantages and disadvantages to each method.
3283 *
3284 * In the first method, we can allocate a new string, do the memory
3285 * copy from the s to t - 1, and then proceed through the rest of the
3286 * string byte-by-byte.
3287 *
3288 * In the second method, we proceed through the rest of the input
3289 * string just calculating how big the converted string will be. Then
3290 * there are two cases:
3291 * 1) if the string has enough extra space to handle the converted
3292 * value. We go backwards through the string, converting until we
3293 * get to the position we are at now, and then stop. If this
3294 * position is far enough along in the string, this method is
3295 * faster than the other method. If the memory copy were the same
3296 * speed as the byte-by-byte loop, that position would be about
3297 * half-way, as at the half-way mark, parsing to the end and back
3298 * is one complete string's parse, the same amount as starting
3299 * over and going all the way through. Actually, it would be
3300 * somewhat less than half-way, as it's faster to just count bytes
3301 * than to also copy, and we don't have the overhead of allocating
3302 * a new string, changing the scalar to use it, and freeing the
3303 * existing one. But if the memory copy is fast, the break-even
3304 * point is somewhere after half way. The counting loop could be
3305 * sped up by vectorization, etc, to move the break-even point
3306 * further towards the beginning.
3307 * 2) if the string doesn't have enough space to handle the converted
3308 * value. A new string will have to be allocated, and one might
3309 * as well, given that, start from the beginning doing the first
3310 * method. We've spent extra time parsing the string and in
3311 * exchange all we've gotten is that we know precisely how big to
3312 * make the new one. Perl is more optimized for time than space,
3313 * so this case is a loser.
3314 * So what I've decided to do is not use the 2nd method unless it is
3315 * guaranteed that a new string won't have to be allocated, assuming
3316 * the worst case. I also decided not to put any more conditions on it
3317 * than this, for now. It seems likely that, since the worst case is
3318 * twice as big as the unknown portion of the string (plus 1), we won't
3319 * be guaranteed enough space, causing us to go to the first method,
3320 * unless the string is short, or the first variant character is near
3321 * the end of it. In either of these cases, it seems best to use the
3322 * 2nd method. The only circumstance I can think of where this would
3323 * be really slower is if the string had once had much more data in it
3324 * than it does now, but there is still a substantial amount in it */
3325
3326 {
3327 STRLEN invariant_head = t - s;
3328 STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3329 if (SvLEN(sv) < size) {
3330
3331 /* Here, have decided to allocate a new string */
3332
3333 U8 *dst;
3334 U8 *d;
3335
3336 Newx(dst, size, U8);
3337
3338 /* If no known invariants at the beginning of the input string,
3339 * set so starts from there. Otherwise, can use memory copy to
3340 * get up to where we are now, and then start from here */
3341
3342 if (invariant_head <= 0) {
3343 d = dst;
3344 } else {
3345 Copy(s, dst, invariant_head, char);
3346 d = dst + invariant_head;
3347 }
3348
3349 while (t < e) {
3350 const UV uv = NATIVE8_TO_UNI(*t++);
3351 if (UNI_IS_INVARIANT(uv))
3352 *d++ = (U8)UNI_TO_NATIVE(uv);
3353 else {
3354 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3355 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3356 }
3357 }
3358 *d = '\0';
3359 SvPV_free(sv); /* No longer using pre-existing string */
3360 SvPV_set(sv, (char*)dst);
3361 SvCUR_set(sv, d - dst);
3362 SvLEN_set(sv, size);
3363 } else {
3364
3365 /* Here, have decided to get the exact size of the string.
3366 * Currently this happens only when we know that there is
3367 * guaranteed enough space to fit the converted string, so
3368 * don't have to worry about growing. If two_byte_count is 0,
3369 * then t points to the first byte of the string which hasn't
3370 * been examined yet. Otherwise two_byte_count is 1, and t
3371 * points to the first byte in the string that will expand to
3372 * two. Depending on this, start examining at t or 1 after t.
3373 * */
3374
3375 U8 *d = t + two_byte_count;
3376
3377
3378 /* Count up the remaining bytes that expand to two */
3379
3380 while (d < e) {
3381 const U8 chr = *d++;
3382 if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3383 }
3384
3385 /* The string will expand by just the number of bytes that
3386 * occupy two positions. But we are one afterwards because of
3387 * the increment just above. This is the place to put the
3388 * trailing NUL, and to set the length before we decrement */
3389
3390 d += two_byte_count;
3391 SvCUR_set(sv, d - s);
3392 *d-- = '\0';
3393
3394
3395 /* Having decremented d, it points to the position to put the
3396 * very last byte of the expanded string. Go backwards through
3397 * the string, copying and expanding as we go, stopping when we
3398 * get to the part that is invariant the rest of the way down */
3399
3400 e--;
3401 while (e >= t) {
3402 const U8 ch = NATIVE8_TO_UNI(*e--);
3403 if (UNI_IS_INVARIANT(ch)) {
3404 *d-- = UNI_TO_NATIVE(ch);
3405 } else {
3406 *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3407 *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3408 }
3409 }
3410 }
75da9d4c
DM
3411
3412 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3413 /* Update pos. We do it at the end rather than during
3414 * the upgrade, to avoid slowing down the common case
3415 * (upgrade without pos) */
3416 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3417 if (mg) {
3418 I32 pos = mg->mg_len;
3419 if (pos > 0 && (U32)pos > invariant_head) {
3420 U8 *d = (U8*) SvPVX(sv) + invariant_head;
3421 STRLEN n = (U32)pos - invariant_head;
3422 while (n > 0) {
3423 if (UTF8_IS_START(*d))
3424 d++;
3425 d++;
3426 n--;
3427 }
3428 mg->mg_len = d - (U8*)SvPVX(sv);
3429 }
3430 }
3431 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3432 magic_setutf8(sv,mg); /* clear UTF8 cache */
3433 }
b3ab6785 3434 }
560a288e 3435 }
b3ab6785
KW
3436
3437 /* Mark as UTF-8 even if no variant - saves scanning loop */
3438 SvUTF8_on(sv);
4411f3b6 3439 return SvCUR(sv);
560a288e
GS
3440}
3441
c461cf8f
JH
3442/*
3443=for apidoc sv_utf8_downgrade
3444
78ea37eb 3445Attempts to convert the PV of an SV from characters to bytes.
2bbc8d55
SP
3446If the PV contains a character that cannot fit
3447in a byte, this conversion will fail;
78ea37eb 3448in this case, either returns false or, if C<fail_ok> is not
c461cf8f
JH
3449true, croaks.
3450
13a6c0e0
JH
3451This is not as a general purpose Unicode to byte encoding interface:
3452use the Encode extension for that.
3453
c461cf8f
JH
3454=cut
3455*/
3456
560a288e 3457bool
7bc54cea 3458Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
560a288e 3459{
97aff369 3460 dVAR;
7918f24d
NC
3461
3462 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3463
78ea37eb 3464 if (SvPOKp(sv) && SvUTF8(sv)) {
fa301091 3465 if (SvCUR(sv)) {
03cfe0ae 3466 U8 *s;
652088fc 3467 STRLEN len;
75da9d4c 3468 int mg_flags = SV_GMAGIC;
fa301091 3469
765f542d
NC
3470 if (SvIsCOW(sv)) {
3471 sv_force_normal_flags(sv, 0);
3472 }
75da9d4c
DM
3473 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3474 /* update pos */
3475 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3476 if (mg) {
3477 I32 pos = mg->mg_len;
3478 if (pos > 0) {
3479 sv_pos_b2u(sv, &pos);
3480 mg_flags = 0; /* sv_pos_b2u does get magic */
3481 mg->mg_len = pos;
3482 }
3483 }
3484 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3485 magic_setutf8(sv,mg); /* clear UTF8 cache */
3486
3487 }
3488 s = (U8 *) SvPV_flags(sv, len, mg_flags);
3489
03cfe0ae 3490 if (!utf8_to_bytes(s, &len)) {
fa301091
JH
3491 if (fail_ok)
3492 return FALSE;
3493 else {
3494 if (PL_op)
3495 Perl_croak(aTHX_ "Wide character in %s",
53e06cf0 3496 OP_DESC(PL_op));
fa301091
JH
3497 else
3498 Perl_croak(aTHX_ "Wide character");
3499 }
4b3603a4 3500 }
b162af07 3501 SvCUR_set(sv, len);
67e989fb 3502 }
560a288e 3503 }
ffebcc3e 3504 SvUTF8_off(sv);
560a288e
GS
3505 return TRUE;
3506}
3507
c461cf8f
JH
3508/*
3509=for apidoc sv_utf8_encode
3510
78ea37eb
TS
3511Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3512flag off so that it looks like octets again.
c461cf8f
JH
3513
3514=cut
3515*/
3516
560a288e 3517void
7bc54cea 3518Perl_sv_utf8_encode(pTHX_ register SV *const sv)
560a288e 3519{
7918f24d
NC
3520 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3521
4c94c214
NC
3522 if (SvIsCOW(sv)) {
3523 sv_force_normal_flags(sv, 0);
3524 }
3525 if (SvREADONLY(sv)) {
6ad8f254 3526 Perl_croak_no_modify(aTHX);
4c94c214 3527 }
a5f5288a 3528 (void) sv_utf8_upgrade(sv);
560a288e
GS
3529 SvUTF8_off(sv);
3530}
3531
4411f3b6
NIS
3532/*
3533=for apidoc sv_utf8_decode
3534
78ea37eb
TS
3535If the PV of the SV is an octet sequence in UTF-8
3536and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3537so that it looks like a character. If the PV contains only single-byte
694cf0d2 3538characters, the C<SvUTF8> flag stays off.
78ea37eb 3539Scans PV for validity and returns false if the PV is invalid UTF-8.
4411f3b6
NIS
3540
3541=cut
3542*/
3543
560a288e 3544bool
7bc54cea 3545Perl_sv_utf8_decode(pTHX_ register SV *const sv)
560a288e 3546{
7918f24d
NC
3547 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3548
78ea37eb 3549 if (SvPOKp(sv)) {
75da9d4c 3550 const U8 *start, *c;
93524f2b 3551 const U8 *e;
9cbac4c7 3552
645c22ef
DM
3553 /* The octets may have got themselves encoded - get them back as
3554 * bytes
3555 */
3556 if (!sv_utf8_downgrade(sv, TRUE))
560a288e
GS
3557 return FALSE;
3558
3559 /* it is actually just a matter of turning the utf8 flag on, but
3560 * we want to make sure everything inside is valid utf8 first.
3561 */
75da9d4c 3562 c = start = (const U8 *) SvPVX_const(sv);
63cd0674 3563 if (!is_utf8_string(c, SvCUR(sv)+1))
67e989fb 3564 return FALSE;
93524f2b 3565 e = (const U8 *) SvEND(sv);
511c2ff0 3566 while (c < e) {
b64e5050 3567 const U8 ch = *c++;
c4d5f83a 3568 if (!UTF8_IS_INVARIANT(ch)) {
67e989fb
JH
3569 SvUTF8_on(sv);
3570 break;
3571 }
560a288e 3572 }
75da9d4c
DM
3573 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3574 /* adjust pos to the start of a UTF8 char sequence */
3575 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3576 if (mg) {
3577 I32 pos = mg->mg_len;
3578 if (pos > 0) {
3579 for (c = start + pos; c > start; c--) {
3580 if (UTF8_IS_START(*c))
3581 break;
3582 }
3583 mg->mg_len = c - start;
3584 }
3585 }
3586 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3587 magic_setutf8(sv,mg); /* clear UTF8 cache */
3588 }
560a288e
GS
3589 }
3590 return TRUE;
3591}
3592
954c1994
GS
3593/*
3594=for apidoc sv_setsv
3595
645c22ef
DM
3596Copies the contents of the source SV C<ssv> into the destination SV
3597C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3598function if the source SV needs to be reused. Does not handle 'set' magic.
3599Loosely speaking, it performs a copy-by-value, obliterating any previous
3600content of the destination.
3601
3602You probably want to use one of the assortment of wrappers, such as
3603C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3604C<SvSetMagicSV_nosteal>.
3605
8d6d96c1
HS
3606=for apidoc sv_setsv_flags
3607
645c22ef
DM
3608Copies the contents of the source SV C<ssv> into the destination SV
3609C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3610function if the source SV needs to be reused. Does not handle 'set' magic.
3611Loosely speaking, it performs a copy-by-value, obliterating any previous
3612content of the destination.
3613If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
5fcdf167
NC
3614C<ssv> if appropriate, else not. If the C<flags> parameter has the
3615C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3616and C<sv_setsv_nomg> are implemented in terms of this function.
645c22ef
DM
3617
3618You probably want to use one of the assortment of wrappers, such as
3619C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3620C<SvSetMagicSV_nosteal>.
3621
3622This is the primary function for copying scalars, and most other
3623copy-ish functions and macros use this underneath.
8d6d96c1
HS
3624
3625=cut
3626*/
3627
5d0301b7 3628static void
7bc54cea 3629S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
5d0301b7 3630{
c8bbf675 3631 I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3e6edce2 3632 HV *old_stash = NULL;
dd69841b 3633
7918f24d
NC
3634 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3635
bec4f4b4 3636 if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
5d0301b7
NC
3637 const char * const name = GvNAME(sstr);
3638 const STRLEN len = GvNAMELEN(sstr);
0d092c36 3639 {
f7877b28
NC
3640 if (dtype >= SVt_PV) {
3641 SvPV_free(dstr);
3642 SvPV_set(dstr, 0);
3643 SvLEN_set(dstr, 0);
3644 SvCUR_set(dstr, 0);
3645 }
0d092c36 3646 SvUPGRADE(dstr, SVt_PVGV);
dedf8e73 3647 (void)SvOK_off(dstr);
2e5b91de
NC
3648 /* FIXME - why are we doing this, then turning it off and on again
3649 below? */
3650 isGV_with_GP_on(dstr);
f7877b28 3651 }
5d0301b7
NC
3652 GvSTASH(dstr) = GvSTASH(sstr);
3653 if (GvSTASH(dstr))
daba3364 3654 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
d8fdd025
BF
3655 gv_name_set(MUTABLE_GV(dstr), name, len,
3656 GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
5d0301b7
NC
3657 SvFAKE_on(dstr); /* can coerce to non-glob */
3658 }
3659
159b6efe 3660 if(GvGP(MUTABLE_GV(sstr))) {
dd69841b
BB
3661 /* If source has method cache entry, clear it */
3662 if(GvCVGEN(sstr)) {
3663 SvREFCNT_dec(GvCV(sstr));
c43ae56f 3664 GvCV_set(sstr, NULL);
dd69841b
BB
3665 GvCVGEN(sstr) = 0;
3666 }
3667 /* If source has a real method, then a method is
3668 going to change */
00169e2c
FC
3669 else if(
3670 GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3671 ) {
70cd14a1 3672 mro_changes = 1;
dd69841b
BB
3673 }
3674 }
3675
3676 /* If dest already had a real method, that's a change as well */
00169e2c
FC
3677 if(
3678 !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3679 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3680 ) {
70cd14a1 3681 mro_changes = 1;
dd69841b
BB
3682 }
3683
c8bbf675
FC
3684 /* We don’t need to check the name of the destination if it was not a
3685 glob to begin with. */
3686 if(dtype == SVt_PVGV) {
3687 const char * const name = GvNAME((const GV *)dstr);
00169e2c
FC
3688 if(
3689 strEQ(name,"ISA")
3690 /* The stash may have been detached from the symbol table, so
3691 check its name. */
3692 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
6624142a 3693 && GvAV((const GV *)sstr)
00169e2c 3694 )
c8bbf675
FC
3695 mro_changes = 2;
3696 else {
3697 const STRLEN len = GvNAMELEN(dstr);
1f656fcf
FC
3698 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3699 || (len == 1 && name[0] == ':')) {
c8bbf675
FC
3700 mro_changes = 3;
3701
3702 /* Set aside the old stash, so we can reset isa caches on
3703 its subclasses. */
bf01568a
FC
3704 if((old_stash = GvHV(dstr)))
3705 /* Make sure we do not lose it early. */
3706 SvREFCNT_inc_simple_void_NN(
3707 sv_2mortal((SV *)old_stash)
3708 );
c8bbf675
FC
3709 }
3710 }
3711 }
70cd14a1 3712
159b6efe 3713 gp_free(MUTABLE_GV(dstr));
2e5b91de 3714 isGV_with_GP_off(dstr);
5d0301b7 3715 (void)SvOK_off(dstr);
2e5b91de 3716 isGV_with_GP_on(dstr);
dedf8e73 3717 GvINTRO_off(dstr); /* one-shot flag */
c43ae56f 3718 GvGP_set(dstr, gp_ref(GvGP(sstr)));
5d0301b7
NC
3719 if (SvTAINTED(sstr))
3720 SvTAINT(dstr);
3721 if (GvIMPORTED(dstr) != GVf_IMPORTED
3722 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3723 {
3724 GvIMPORTED_on(dstr);
3725 }
3726 GvMULTI_on(dstr);
6624142a
FC
3727 if(mro_changes == 2) {
3728 MAGIC *mg;
3729 SV * const sref = (SV *)GvAV((const GV *)dstr);
3730 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3731 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3732 AV * const ary = newAV();
3733 av_push(ary, mg->mg_obj); /* takes the refcount */
3734 mg->mg_obj = (SV *)ary;
3735 }
3736 av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3737 }
3738 else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3739 mro_isa_changed_in(GvSTASH(dstr));
3740 }
c8bbf675 3741 else if(mro_changes == 3) {
d056e33c 3742 HV * const stash = GvHV(dstr);
78b79c77 3743 if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
d056e33c 3744 mro_package_moved(
35759254 3745 stash, old_stash,
afdbe55d 3746 (GV *)dstr, 0
d056e33c 3747 );
c8bbf675 3748 }
70cd14a1 3749 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
5d0301b7
NC
3750 return;
3751}
3752
b8473700 3753static void
7bc54cea 3754S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
7918f24d 3755{
b8473700
NC
3756 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3757 SV *dref = NULL;
3758 const int intro = GvINTRO(dstr);
2440974c 3759 SV **location;
3386d083 3760 U8 import_flag = 0;
27242d61
NC
3761 const U32 stype = SvTYPE(sref);
3762
7918f24d 3763 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
b8473700 3764
b8473700
NC
3765 if (intro) {
3766 GvINTRO_off(dstr); /* one-shot flag */
3767 GvLINE(dstr) = CopLINE(PL_curcop);
159b6efe 3768 GvEGV(dstr) = MUTABLE_GV(dstr);
b8473700
NC
3769 }
3770 GvMULTI_on(dstr);
27242d61 3771 switch (stype) {
b8473700 3772 case SVt_PVCV:
c43ae56f 3773 location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
27242d61
NC
3774 import_flag = GVf_IMPORTED_CV;
3775 goto common;
3776 case SVt_PVHV:
3777 location = (SV **) &GvHV(dstr);
3778 import_flag = GVf_IMPORTED_HV;
3779 goto common;
3780 case SVt_PVAV:
3781 location = (SV **) &GvAV(dstr);
3782 import_flag = GVf_IMPORTED_AV;
3783 goto common;
3784 case SVt_PVIO:
3785 location = (SV **) &GvIOp(dstr);
3786 goto common;
3787 case SVt_PVFM:
3788 location = (SV **) &GvFORM(dstr);
ef595a33 3789 goto common;
27242d61
NC
3790 default:
3791 location = &GvSV(dstr);
3792 import_flag = GVf_IMPORTED_SV;
3793 common:
b8473700 3794 if (intro) {
27242d61 3795 if (stype == SVt_PVCV) {
ea726b52 3796 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
5f2fca8a 3797 if (GvCVGEN(dstr)) {
27242d61 3798 SvREFCNT_dec(GvCV(dstr));
c43ae56f 3799 GvCV_set(dstr, NULL);
27242d61 3800 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
27242d61 3801 }
b8473700 3802 }
27242d61 3803 SAVEGENERICSV(*location);
b8473700
NC
3804 }
3805 else
27242d61 3806 dref = *location;
5f2fca8a 3807 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
ea726b52 3808 CV* const cv = MUTABLE_CV(*location);
b8473700 3809 if (cv) {
159b6efe 3810 if (!GvCVGEN((const GV *)dstr) &&
b8473700
NC
3811 (CvROOT(cv) || CvXSUB(cv)))
3812 {
3813 /* Redefining a sub - warning is mandatory if
3814 it was a const and its value changed. */
ea726b52 3815 if (CvCONST(cv) && CvCONST((const CV *)sref)
126f53f3
NC
3816 && cv_const_sv(cv)
3817 == cv_const_sv((const CV *)sref)) {
6f207bd3 3818 NOOP;
b8473700
NC
3819 /* They are 2 constant subroutines generated from
3820 the same constant. This probably means that
3821 they are really the "same" proxy subroutine
3822 instantiated in 2 places. Most likely this is
3823 when a constant is exported twice. Don't warn.
3824 */
3825 }
3826 else if (ckWARN(WARN_REDEFINE)
3827 || (CvCONST(cv)
ea726b52 3828 && (!CvCONST((const CV *)sref)
b8473700 3829 || sv_cmp(cv_const_sv(cv),
126f53f3
NC
3830 cv_const_sv((const CV *)
3831 sref))))) {
b8473700 3832 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10edeb5d
JH
3833 (const char *)
3834 (CvCONST(cv)
d0c0e7dd
FC
3835 ? "Constant subroutine %"HEKf
3836 "::%"HEKf" redefined"
3837 : "Subroutine %"HEKf"::%"HEKf
3838 " redefined"),
3839 HEKfARG(
3840 HvNAME_HEK(GvSTASH((const GV *)dstr))
3841 ),
3842 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))));
b8473700
NC
3843 }
3844 }
3845 if (!intro)
dab1c735 3846 cv_ckproto_len_flags(cv, (const GV *)dstr,
3d5f9785
FC
3847 SvPOK(sref) ? CvPROTO(sref) : NULL,
3848 SvPOK(sref) ? CvPROTOLEN(sref) : 0,
dab1c735 3849 SvPOK(sref) ? SvUTF8(sref) : 0);
b8473700 3850 }
b8473700
NC
3851 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3852 GvASSUMECV_on(dstr);
dd69841b 3853 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
b8473700 3854 }
2440974c 3855 *location = sref;
3386d083
NC
3856 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3857 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3858 GvFLAGS(dstr) |= import_flag;
b8473700 3859 }
3e79609f
FC
3860 if (stype == SVt_PVHV) {
3861 const char * const name = GvNAME((GV*)dstr);
3862 const STRLEN len = GvNAMELEN(dstr);
d056e33c 3863 if (
1f656fcf
FC
3864 (
3865 (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3866 || (len == 1 && name[0] == ':')
3867 )
78b79c77 3868 && (!dref || HvENAME_get(dref))
d056e33c
FC
3869 ) {
3870 mro_package_moved(
35759254 3871 (HV *)sref, (HV *)dref,
afdbe55d 3872 (GV *)dstr, 0
d056e33c 3873 );
3e79609f
FC
3874 }
3875 }
00169e2c 3876 else if (
a00c27eb
FC
3877 stype == SVt_PVAV && sref != dref
3878 && strEQ(GvNAME((GV*)dstr), "ISA")
00169e2c
FC
3879 /* The stash may have been detached from the symbol table, so
3880 check its name before doing anything. */
3881 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3882 ) {
6624142a 3883 MAGIC *mg;
a5dba54a
FC
3884 MAGIC * const omg = dref && SvSMAGICAL(dref)
3885 ? mg_find(dref, PERL_MAGIC_isa)
3886 : NULL;
6624142a
FC
3887 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3888 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3889 AV * const ary = newAV();
3890 av_push(ary, mg->mg_obj); /* takes the refcount */
3891 mg->mg_obj = (SV *)ary;
3892 }
a5dba54a
FC
3893 if (omg) {
3894 if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3895 SV **svp = AvARRAY((AV *)omg->mg_obj);
3896 I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3897 while (items--)
3898 av_push(
3899 (AV *)mg->mg_obj,
3900 SvREFCNT_inc_simple_NN(*svp++)
3901 );
3902 }
3903 else
3904 av_push(
3905 (AV *)mg->mg_obj,
3906 SvREFCNT_inc_simple_NN(omg->mg_obj)
3907 );
3908 }
3909 else
3910 av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
6624142a 3911 }
a5dba54a 3912 else
3e1892cc 3913 {
a5dba54a
FC
3914 sv_magic(
3915 sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3916 );
3e1892cc
FC
3917 mg = mg_find(sref, PERL_MAGIC_isa);
3918 }
a5dba54a
FC
3919 /* Since the *ISA assignment could have affected more than
3920 one stash, don’t call mro_isa_changed_in directly, but let
3e1892cc 3921 magic_clearisa do it for us, as it already has the logic for
a5dba54a 3922 dealing with globs vs arrays of globs. */
3e1892cc
FC
3923 assert(mg);
3924 Perl_magic_clearisa(aTHX_ NULL, mg);
d851b122 3925 }
b8473700
NC
3926 break;
3927 }
b37c2d43 3928 SvREFCNT_dec(dref);
b8473700
NC
3929 if (SvTAINTED(sstr))
3930 SvTAINT(dstr);
3931 return;
3932}
3933
8d6d96c1 3934void
7bc54cea 3935Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
8d6d96c1 3936{
97aff369 3937 dVAR;
8990e307
LW
3938 register U32 sflags;
3939 register int dtype;
42d0e0b7 3940 register svtype stype;
463ee0b2 3941
7918f24d
NC
3942 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3943
79072805
LW
3944 if (sstr == dstr)
3945 return;
29f4f0ab
NC
3946
3947 if (SvIS_FREED(dstr)) {
3948 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
be2597df 3949 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
29f4f0ab 3950 }
765f542d 3951 SV_CHECK_THINKFIRST_COW_DROP(dstr);
79072805 3952 if (!sstr)
3280af22 3953 sstr = &PL_sv_undef;
29f4f0ab 3954 if (SvIS_FREED(sstr)) {
6c9570dc
MHM
3955 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3956 (void*)sstr, (void*)dstr);
29f4f0ab 3957 }
8990e307
LW
3958 stype = SvTYPE(sstr);
3959 dtype = SvTYPE(dstr);
79072805 3960
52944de8 3961 (void)SvAMAGIC_off(dstr);
7a5fa8a2 3962 if ( SvVOK(dstr) )
ece467f9
JP
3963 {
3964 /* need to nuke the magic */
3965 mg_free(dstr);
ece467f9 3966 }
9e7bc3e8 3967
463ee0b2 3968 /* There's a lot of redundancy below but we're going for speed here */
79072805 3969
8990e307 3970 switch (stype) {
79072805 3971 case SVt_NULL:
aece5585 3972 undef_sstr:
13be902c 3973 if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
20408e3c
GS
3974 (void)SvOK_off(dstr);
3975 return;
3976 }
3977 break;
463ee0b2 3978 case SVt_IV:
aece5585
GA
3979 if (SvIOK(sstr)) {
3980 switch (dtype) {
3981 case SVt_NULL:
8990e307 3982 sv_upgrade(dstr, SVt_IV);
aece5585
GA
3983 break;
3984 case SVt_NV:
aece5585 3985 case SVt_PV:
a0d0e21e 3986 sv_upgrade(dstr, SVt_PVIV);
aece5585 3987 break;
010be86b 3988 case SVt_PVGV:
13be902c 3989 case SVt_PVLV:
010be86b 3990 goto end_of_first_switch;
aece5585
GA
3991 }
3992 (void)SvIOK_only(dstr);
45977657 3993 SvIV_set(dstr, SvIVX(sstr));
25da4f38
IZ
3994 if (SvIsUV(sstr))
3995 SvIsUV_on(dstr);
37c25af0
NC
3996 /* SvTAINTED can only be true if the SV has taint magic, which in
3997 turn means that the SV type is PVMG (or greater). This is the
3998 case statement for SVt_IV, so this cannot be true (whatever gcov
3999 may say). */
4000 assert(!SvTAINTED(sstr));
aece5585 4001 return;
8990e307 4002 }
4df7f6af
NC
4003 if (!SvROK(sstr))
4004 goto undef_sstr;
4005 if (dtype < SVt_PV && dtype != SVt_IV)
4006 sv_upgrade(dstr, SVt_IV);
4007 break;
aece5585 4008
463ee0b2 4009 case SVt_NV:
aece5585
GA
4010 if (SvNOK(sstr)) {
4011 switch (dtype) {
4012 case SVt_NULL:
4013 case SVt_IV:
8990e307 4014 sv_upgrade(dstr, SVt_NV);
aece5585 4015 break;
aece5585
GA
4016 case SVt_PV:
4017 case SVt_PVIV:
a0d0e21e 4018 sv_upgrade(dstr, SVt_PVNV);
aece5585 4019 break;
010be86b 4020 case SVt_PVGV:
13be902c 4021 case SVt_PVLV:
010be86b 4022 goto end_of_first_switch;
aece5585 4023 }
9d6ce603 4024 SvNV_set(dstr, SvNVX(sstr));
aece5585 4025 (void)SvNOK_only(dstr);
37c25af0
NC
4026 /* SvTAINTED can only be true if the SV has taint magic, which in
4027 turn means that the SV type is PVMG (or greater). This is the
4028 case statement for SVt_NV, so this cannot be true (whatever gcov
4029 may say). */
4030 assert(!SvTAINTED(sstr));
aece5585 4031 return;
8990e307 4032 }
aece5585
GA
4033 goto undef_sstr;
4034
fc36a67e 4035 case SVt_PVFM:
f8c7b90f 4036#ifdef PERL_OLD_COPY_ON_WRITE
d89fc664
NC
4037 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4038 if (dtype < SVt_PVIV)
4039 sv_upgrade(dstr, SVt_PVIV);
4040 break;
4041 }
4042 /* Fall through */
4043#endif
4044 case SVt_PV:
8990e307 4045 if (dtype < SVt_PV)
463ee0b2 4046 sv_upgrade(dstr, SVt_PV);
463ee0b2
LW
4047 break;
4048 case SVt_PVIV:
8990e307 4049 if (dtype < SVt_PVIV)
463ee0b2 4050 sv_upgrade(dstr, SVt_PVIV);
463ee0b2
LW
4051 break;
4052 case SVt_PVNV:
8990e307 4053 if (dtype < SVt_PVNV)
463ee0b2 4054 sv_upgrade(dstr, SVt_PVNV);
463ee0b2 4055 break;
489f7bfe 4056 default:
a3b680e6
AL
4057 {
4058 const char * const type = sv_reftype(sstr,0);
533c011a 4059 if (PL_op)
94bbb3f4 4060 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4633a7c4 4061 else
a3b680e6
AL
4062 Perl_croak(aTHX_ "Bizarre copy of %s", type);
4063 }
4633a7c4
LW
4064 break;
4065
f0826785
BM
4066 case SVt_REGEXP:
4067 if (dtype < SVt_REGEXP)
4068 sv_upgrade(dstr, SVt_REGEXP);
4069 break;
4070
cecf5685 4071 /* case SVt_BIND: */
39cb70dc 4072 case SVt_PVLV:
79072805 4073 case SVt_PVGV:
489f7bfe 4074 case SVt_PVMG:
8d6d96c1 4075 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
973f89ab 4076 mg_get(sstr);
13be902c 4077 if (SvTYPE(sstr) != stype)
973f89ab 4078 stype = SvTYPE(sstr);
5cf4b255
FC
4079 }
4080 if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
d4c19fe8 4081 glob_assign_glob(dstr, sstr, dtype);
b8c701c1 4082 return;
973f89ab 4083 }
ded42b9f 4084 if (stype == SVt_PVLV)
862a34c6 4085 SvUPGRADE(dstr, SVt_PVNV);
ded42b9f 4086 else
42d0e0b7 4087 SvUPGRADE(dstr, (svtype)stype);
79072805 4088 }
010be86b 4089 end_of_first_switch:
79072805 4090
ff920335
NC
4091 /* dstr may have been upgraded. */
4092 dtype = SvTYPE(dstr);
8990e307
LW
4093 sflags = SvFLAGS(sstr);
4094
ba2fdce6 4095 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
85324b4d
NC
4096 /* Assigning to a subroutine sets the prototype. */
4097 if (SvOK(sstr)) {
4098 STRLEN len;
4099 const char *const ptr = SvPV_const(sstr, len);
4100
4101 SvGROW(dstr, len + 1);
4102 Copy(ptr, SvPVX(dstr), len + 1, char);
4103 SvCUR_set(dstr, len);
fcddd32e 4104 SvPOK_only(dstr);
ba2fdce6 4105 SvFLAGS(dstr) |= sflags & SVf_UTF8;
74ee33f2 4106 CvAUTOLOAD_off(dstr);
85324b4d
NC
4107 } else {
4108 SvOK_off(dstr);
4109 }
ba2fdce6
NC
4110 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
4111 const char * const type = sv_reftype(dstr,0);
4112 if (PL_op)
94bbb3f4 4113 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
ba2fdce6
NC
4114 else
4115 Perl_croak(aTHX_ "Cannot copy to %s", type);
85324b4d 4116 } else if (sflags & SVf_ROK) {
13be902c 4117 if (isGV_with_GP(dstr)
785bee4f 4118 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
acaa9288
NC
4119 sstr = SvRV(sstr);
4120 if (sstr == dstr) {
4121 if (GvIMPORTED(dstr) != GVf_IMPORTED
4122 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4123 {
4124 GvIMPORTED_on(dstr);
4125 }
4126 GvMULTI_on(dstr);
4127 return;
4128 }
785bee4f
NC
4129 glob_assign_glob(dstr, sstr, dtype);
4130 return;
acaa9288
NC
4131 }
4132
8990e307 4133 if (dtype >= SVt_PV) {
13be902c 4134 if (isGV_with_GP(dstr)) {
d4c19fe8 4135 glob_assign_ref(dstr, sstr);
b8c701c1
NC
4136 return;
4137 }
3f7c398e 4138 if (SvPVX_const(dstr)) {
8bd4d4c5 4139 SvPV_free(dstr);
b162af07
SP
4140 SvLEN_set(dstr, 0);
4141 SvCUR_set(dstr, 0);
a0d0e21e 4142 }
8990e307 4143 }
a0d0e21e 4144 (void)SvOK_off(dstr);
b162af07 4145 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
96d4b0ee 4146 SvFLAGS(dstr) |= sflags & SVf_ROK;
dfd48732
NC
4147 assert(!(sflags & SVp_NOK));
4148 assert(!(sflags & SVp_IOK));
4149 assert(!(sflags & SVf_NOK));
4150 assert(!(sflags & SVf_IOK));
ed6116ce 4151 }
13be902c 4152 else if (isGV_with_GP(dstr)) {
c0c44674 4153 if (!(sflags & SVf_OK)) {
a2a5de95
NC
4154 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4155 "Undefined value assigned to typeglob");
c0c44674
NC
4156 }
4157 else {
77cb3b01 4158 GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
daba3364 4159 if (dstr != (const SV *)gv) {
3e79609f
FC
4160 const char * const name = GvNAME((const GV *)dstr);
4161 const STRLEN len = GvNAMELEN(dstr);
4162 HV *old_stash = NULL;
4163 bool reset_isa = FALSE;
1f656fcf
FC
4164 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4165 || (len == 1 && name[0] == ':')) {
3e79609f
FC
4166 /* Set aside the old stash, so we can reset isa caches
4167 on its subclasses. */
c8eb3813 4168 if((old_stash = GvHV(dstr))) {
31f1461f
FC
4169 /* Make sure we do not lose it early. */
4170 SvREFCNT_inc_simple_void_NN(
4171 sv_2mortal((SV *)old_stash)
4172 );
c8eb3813 4173 }
3e79609f
FC
4174 reset_isa = TRUE;
4175 }
4176
c0c44674 4177 if (GvGP(dstr))
159b6efe 4178 gp_free(MUTABLE_GV(dstr));
c43ae56f 4179 GvGP_set(dstr, gp_ref(GvGP(gv)));
3e79609f
FC
4180
4181 if (reset_isa) {
d056e33c
FC
4182 HV * const stash = GvHV(dstr);
4183 if(
78b79c77 4184 old_stash ? (HV *)HvENAME_get(old_stash) : stash
d056e33c
FC
4185 )
4186 mro_package_moved(
35759254 4187 stash, old_stash,
afdbe55d 4188 (GV *)dstr, 0
d056e33c 4189 );
3e79609f 4190 }
c0c44674
NC
4191 }
4192 }
4193 }
f0826785
BM
4194 else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4195 reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4196 }
8990e307 4197 else if (sflags & SVp_POK) {
765f542d 4198 bool isSwipe = 0;
79072805
LW
4199
4200 /*
4201 * Check to see if we can just swipe the string. If so, it's a
4202 * possible small lose on short strings, but a big win on long ones.
3f7c398e
SP
4203 * It might even be a win on short strings if SvPVX_const(dstr)
4204 * has to be allocated and SvPVX_const(sstr) has to be freed.
34482cd6
NC
4205 * Likewise if we can set up COW rather than doing an actual copy, we
4206 * drop to the else clause, as the swipe code and the COW setup code
4207 * have much in common.
79072805
LW
4208 */
4209
120fac95
NC
4210 /* Whichever path we take through the next code, we want this true,
4211 and doing it now facilitates the COW check. */
4212 (void)SvPOK_only(dstr);
4213
765f542d 4214 if (
34482cd6
NC
4215 /* If we're already COW then this clause is not true, and if COW
4216 is allowed then we drop down to the else and make dest COW
4217 with us. If caller hasn't said that we're allowed to COW
4218 shared hash keys then we don't do the COW setup, even if the
4219 source scalar is a shared hash key scalar. */
4220 (((flags & SV_COW_SHARED_HASH_KEYS)
4221 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4222 : 1 /* If making a COW copy is forbidden then the behaviour we
4223 desire is as if the source SV isn't actually already
4224 COW, even if it is. So we act as if the source flags
4225 are not COW, rather than actually testing them. */
4226 )
f8c7b90f 4227#ifndef PERL_OLD_COPY_ON_WRITE
34482cd6
NC
4228 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4229 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4230 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4231 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4232 but in turn, it's somewhat dead code, never expected to go
4233 live, but more kept as a placeholder on how to do it better
4234 in a newer implementation. */
4235 /* If we are COW and dstr is a suitable target then we drop down
4236 into the else and make dest a COW of us. */
b8f9541a
NC
4237 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4238#endif
4239 )
765f542d 4240 &&
765f542d
NC
4241 !(isSwipe =
4242 (sflags & SVs_TEMP) && /* slated for free anyway? */
4243 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
5fcdf167
NC
4244 (!(flags & SV_NOSTEAL)) &&
4245 /* and we're allowed to steal temps */
765f542d 4246 SvREFCNT(sstr) == 1 && /* and no other references to it? */
61e5f455 4247 SvLEN(sstr)) /* and really is a string */
f8c7b90f 4248#ifdef PERL_OLD_COPY_ON_WRITE
cb23d5b1
NC
4249 && ((flags & SV_COW_SHARED_HASH_KEYS)
4250 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4251 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4b1c7d9e 4252 && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
cb23d5b1 4253 : 1)
765f542d
NC
4254#endif
4255 ) {
4256 /* Failed the swipe test, and it's not a shared hash key either.
4257 Have to copy the string. */
4258 STRLEN len = SvCUR(sstr);
4259 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3f7c398e 4260 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
765f542d
NC
4261 SvCUR_set(dstr, len);
4262 *SvEND(dstr) = '\0';
765f542d 4263 } else {
f8c7b90f 4264 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
765f542d 4265 be true in here. */
765f542d
NC
4266 /* Either it's a shared hash key, or it's suitable for
4267 copy-on-write or we can swipe the string. */
46187eeb 4268 if (DEBUG_C_TEST) {
ed252734 4269 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
e419cbc5
NC
4270 sv_dump(sstr);
4271 sv_dump(dstr);
46187eeb 4272 }
f8c7b90f 4273#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4274 if (!isSwipe) {
765f542d
NC
4275 if ((sflags & (SVf_FAKE | SVf_READONLY))
4276 != (SVf_FAKE | SVf_READONLY)) {
4277 SvREADONLY_on(sstr);
4278 SvFAKE_on(sstr);
4279 /* Make the source SV into a loop of 1.
4280 (about to become 2) */
a29f6d03 4281 SV_COW_NEXT_SV_SET(sstr, sstr);
765f542d
NC
4282 }
4283 }
4284#endif
4285 /* Initial code is common. */
94010e71
NC
4286 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4287 SvPV_free(dstr);
79072805 4288 }
765f542d 4289
765f542d
NC
4290 if (!isSwipe) {
4291 /* making another shared SV. */
4292 STRLEN cur = SvCUR(sstr);
4293 STRLEN len = SvLEN(sstr);
f8c7b90f 4294#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4295 if (len) {
b8f9541a 4296 assert (SvTYPE(dstr) >= SVt_PVIV);
765f542d
NC
4297 /* SvIsCOW_normal */
4298 /* splice us in between source and next-after-source. */
a29f6d03
NC
4299 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4300 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4301 SvPV_set(dstr, SvPVX_mutable(sstr));
a604c751
NC
4302 } else
4303#endif
4304 {
765f542d 4305 /* SvIsCOW_shared_hash */
46187eeb
NC
4306 DEBUG_C(PerlIO_printf(Perl_debug_log,
4307 "Copy on write: Sharing hash\n"));
b8f9541a 4308
bdd68bc3 4309 assert (SvTYPE(dstr) >= SVt_PV);
765f542d 4310 SvPV_set(dstr,
d1db91c6 4311 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
bdd68bc3 4312 }
87a1ef3d
SP
4313 SvLEN_set(dstr, len);
4314 SvCUR_set(dstr, cur);
765f542d
NC
4315 SvREADONLY_on(dstr);
4316 SvFAKE_on(dstr);
765f542d
NC
4317 }
4318 else
765f542d 4319 { /* Passes the swipe test. */
78d1e721 4320 SvPV_set(dstr, SvPVX_mutable(sstr));
765f542d
NC
4321 SvLEN_set(dstr, SvLEN(sstr));
4322 SvCUR_set(dstr, SvCUR(sstr));
4323
4324 SvTEMP_off(dstr);
4325 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
6136c704 4326 SvPV_set(sstr, NULL);
765f542d
NC
4327 SvLEN_set(sstr, 0);
4328 SvCUR_set(sstr, 0);
4329 SvTEMP_off(sstr);
4330 }
4331 }
8990e307 4332 if (sflags & SVp_NOK) {
9d6ce603 4333 SvNV_set(dstr, SvNVX(sstr));
79072805 4334 }
8990e307 4335 if (sflags & SVp_IOK) {
23525414
NC
4336 SvIV_set(dstr, SvIVX(sstr));
4337 /* Must do this otherwise some other overloaded use of 0x80000000
4338 gets confused. I guess SVpbm_VALID */
2b1c7e3e 4339 if (sflags & SVf_IVisUV)
25da4f38 4340 SvIsUV_on(dstr);
79072805 4341 }
96d4b0ee 4342 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4f2da183 4343 {
b0a11fe1 4344 const MAGIC * const smg = SvVSTRING_mg(sstr);
4f2da183
NC
4345 if (smg) {
4346 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4347 smg->mg_ptr, smg->mg_len);
4348 SvRMAGICAL_on(dstr);
4349 }
7a5fa8a2 4350 }
79072805 4351 }
5d581361 4352 else if (sflags & (SVp_IOK|SVp_NOK)) {
c2468cc7 4353 (void)SvOK_off(dstr);
96d4b0ee 4354 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
5d581361
NC
4355 if (sflags & SVp_IOK) {
4356 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4357 SvIV_set(dstr, SvIVX(sstr));
4358 }
3332b3c1 4359 if (sflags & SVp_NOK) {
9d6ce603 4360 SvNV_set(dstr, SvNVX(sstr));
3332b3c1
JH
4361 }
4362 }
79072805 4363 else {
f7877b28 4364 if (isGV_with_GP(sstr)) {
159b6efe 4365 gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
180488f8 4366 }
20408e3c
GS
4367 else
4368 (void)SvOK_off(dstr);
a0d0e21e 4369 }
27c9684d
AP
4370 if (SvTAINTED(sstr))
4371 SvTAINT(dstr);
79072805
LW
4372}
4373
954c1994
GS
4374/*
4375=for apidoc sv_setsv_mg
4376
4377Like C<sv_setsv>, but also handles 'set' magic.
4378
4379=cut
4380*/
4381
79072805 4382void
7bc54cea 4383Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
ef50df4b 4384{
7918f24d
NC
4385 PERL_ARGS_ASSERT_SV_SETSV_MG;
4386
ef50df4b
GS
4387 sv_setsv(dstr,sstr);
4388 SvSETMAGIC(dstr);
4389}
4390
f8c7b90f 4391#ifdef PERL_OLD_COPY_ON_WRITE
ed252734
NC
4392SV *
4393Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4394{
4395 STRLEN cur = SvCUR(sstr);
4396 STRLEN len = SvLEN(sstr);
4397 register char *new_pv;
4398
7918f24d
NC
4399 PERL_ARGS_ASSERT_SV_SETSV_COW;
4400
ed252734
NC
4401 if (DEBUG_C_TEST) {
4402 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
6c9570dc 4403 (void*)sstr, (void*)dstr);
ed252734
NC
4404 sv_dump(sstr);
4405 if (dstr)
4406 sv_dump(dstr);
4407 }
4408
4409 if (dstr) {
4410 if (SvTHINKFIRST(dstr))
4411 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3f7c398e
SP
4412 else if (SvPVX_const(dstr))
4413 Safefree(SvPVX_const(dstr));
ed252734
NC
4414 }
4415 else
4416 new_SV(dstr);
862a34c6 4417 SvUPGRADE(dstr, SVt_PVIV);
ed252734
NC
4418
4419 assert (SvPOK(sstr));
4420 assert (SvPOKp(sstr));
4421 assert (!SvIOK(sstr));
4422 assert (!SvIOKp(sstr));
4423 assert (!SvNOK(sstr));
4424 assert (!SvNOKp(sstr));
4425
4426 if (SvIsCOW(sstr)) {
4427
4428 if (SvLEN(sstr) == 0) {
4429 /* source is a COW shared hash key. */
ed252734
NC
4430 DEBUG_C(PerlIO_printf(Perl_debug_log,
4431 "Fast copy on write: Sharing hash\n"));
d1db91c6 4432 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
ed252734
NC
4433 goto common_exit;
4434 }
4435 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4436 } else {
4437 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
862a34c6 4438 SvUPGRADE(sstr, SVt_PVIV);
ed252734
NC
4439 SvREADONLY_on(sstr);
4440 SvFAKE_on(sstr);
4441 DEBUG_C(PerlIO_printf(Perl_debug_log,
4442 "Fast copy on write: Converting sstr to COW\n"));
4443 SV_COW_NEXT_SV_SET(dstr, sstr);
4444 }
4445 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 4446 new_pv = SvPVX_mutable(sstr);
ed252734
NC
4447
4448 common_exit:
4449 SvPV_set(dstr, new_pv);
4450 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4451 if (SvUTF8(sstr))
4452 SvUTF8_on(dstr);
87a1ef3d
SP
4453 SvLEN_set(dstr, len);
4454 SvCUR_set(dstr, cur);
ed252734
NC
4455 if (DEBUG_C_TEST) {
4456 sv_dump(dstr);
4457 }
4458 return dstr;
4459}
4460#endif
4461
954c1994
GS
4462/*
4463=for apidoc sv_setpvn
4464
4465Copies a string into an SV. The C<len> parameter indicates the number of
9e09f5f2
MHM
4466bytes to be copied. If the C<ptr> argument is NULL the SV will become
4467undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
954c1994
GS
4468
4469=cut
4470*/
4471
ef50df4b 4472void
2e000ff2 4473Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
79072805 4474{
97aff369 4475 dVAR;
c6f8c383 4476 register char *dptr;
22c522df 4477
7918f24d
NC
4478 PERL_ARGS_ASSERT_SV_SETPVN;
4479
765f542d 4480 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4481 if (!ptr) {
a0d0e21e 4482 (void)SvOK_off(sv);
463ee0b2
LW
4483 return;
4484 }
22c522df
JH
4485 else {
4486 /* len is STRLEN which is unsigned, need to copy to signed */
a3b680e6 4487 const IV iv = len;
9c5ffd7c
JH
4488 if (iv < 0)
4489 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
22c522df 4490 }
862a34c6 4491 SvUPGRADE(sv, SVt_PV);
c6f8c383 4492
5902b6a9 4493 dptr = SvGROW(sv, len + 1);
c6f8c383
GA
4494 Move(ptr,dptr,len,char);
4495 dptr[len] = '\0';
79072805 4496 SvCUR_set(sv, len);
1aa99e6b 4497 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4498 SvTAINT(sv);
74ee33f2 4499 if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
79072805
LW
4500}
4501
954c1994
GS
4502/*
4503=for apidoc sv_setpvn_mg
4504
4505Like C<sv_setpvn>, but also handles 'set' magic.
4506
4507=cut
4508*/
4509
79072805 4510void
2e000ff2 4511Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
ef50df4b 4512{
7918f24d
NC
4513 PERL_ARGS_ASSERT_SV_SETPVN_MG;
4514
ef50df4b
GS
4515 sv_setpvn(sv,ptr,len);
4516 SvSETMAGIC(sv);
4517}
4518
954c1994
GS
4519/*
4520=for apidoc sv_setpv
4521
4522Copies a string into an SV. The string must be null-terminated. Does not
4523handle 'set' magic. See C<sv_setpv_mg>.
4524
4525=cut
4526*/
4527
ef50df4b 4528void
2e000ff2 4529Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4530{
97aff369 4531 dVAR;
79072805
LW
4532 register STRLEN len;
4533
7918f24d
NC
4534 PERL_ARGS_ASSERT_SV_SETPV;
4535
765f542d 4536 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 4537 if (!ptr) {
a0d0e21e 4538 (void)SvOK_off(sv);
463ee0b2
LW
4539 return;
4540 }
79072805 4541 len = strlen(ptr);
862a34c6 4542 SvUPGRADE(sv, SVt_PV);
c6f8c383 4543
79072805 4544 SvGROW(sv, len + 1);
463ee0b2 4545 Move(ptr,SvPVX(sv),len+1,char);
79072805 4546 SvCUR_set(sv, len);
1aa99e6b 4547 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4548 SvTAINT(sv);
74ee33f2 4549 if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
463ee0b2
LW
4550}
4551
954c1994
GS
4552/*
4553=for apidoc sv_setpv_mg
4554
4555Like C<sv_setpv>, but also handles 'set' magic.
4556
4557=cut
4558*/
4559
463ee0b2 4560void
2e000ff2 4561Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 4562{
7918f24d
NC
4563 PERL_ARGS_ASSERT_SV_SETPV_MG;
4564
ef50df4b
GS
4565 sv_setpv(sv,ptr);
4566 SvSETMAGIC(sv);
4567}
4568
70b71ec8
BF
4569void
4570Perl_sv_sethek(pTHX_ register SV *const sv, const HEK *const hek)
4571{
4572 dVAR;
4573
4574 PERL_ARGS_ASSERT_SV_SETHEK;
4575
4576 if (!hek) {
4577 return;
4578 }
4579
4580 if (HEK_LEN(hek) == HEf_SVKEY) {
4581 sv_setsv(sv, *(SV**)HEK_KEY(hek));
4582 return;
4583 } else {
4584 const int flags = HEK_FLAGS(hek);
4585 if (flags & HVhek_WASUTF8) {
4586 STRLEN utf8_len = HEK_LEN(hek);
4587 char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4588 sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4589 SvUTF8_on(sv);
4590 return;
4591 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
4592 sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4593 if (HEK_UTF8(hek))
4594 SvUTF8_on(sv);
b535e014 4595 else SvUTF8_off(sv);
70b71ec8
BF
4596 return;
4597 }
4598 {
5a0c33f0 4599 SvUPGRADE(sv, SVt_PV);
70b71ec8
BF
4600 sv_usepvn_flags(sv, (char *)HEK_KEY(share_hek_hek(hek)), HEK_LEN(hek), SV_HAS_TRAILING_NUL);
4601 SvLEN_set(sv, 0);
4602 SvREADONLY_on(sv);
4603 SvFAKE_on(sv);
4604 SvPOK_on(sv);
4605 if (HEK_UTF8(hek))
4606 SvUTF8_on(sv);
b535e014 4607 else SvUTF8_off(sv);
70b71ec8
BF
4608 return;
4609 }
4610 }
4611}
4612
4613
954c1994 4614/*
47518d95 4615=for apidoc sv_usepvn_flags
954c1994 4616
794a0d33
JH
4617Tells an SV to use C<ptr> to find its string value. Normally the
4618string is stored inside the SV but sv_usepvn allows the SV to use an
4619outside string. The C<ptr> should point to memory that was allocated
c1c21316
NC
4620by C<malloc>. The string length, C<len>, must be supplied. By default
4621this function will realloc (i.e. move) the memory pointed to by C<ptr>,
794a0d33
JH
4622so that pointer should not be freed or used by the programmer after
4623giving it to sv_usepvn, and neither should any pointers from "behind"
c1c21316
NC
4624that pointer (e.g. ptr + 1) be used.
4625
4626If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4627SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
cbf82dd0 4628will be skipped. (i.e. the buffer is actually at least 1 byte longer than
c1c21316 4629C<len>, and already meets the requirements for storing in C<SvPVX>)
954c1994
GS
4630
4631=cut
4632*/
4633
ef50df4b 4634void
2e000ff2 4635Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
463ee0b2 4636{
97aff369 4637 dVAR;
1936d2a7 4638 STRLEN allocate;
7918f24d
NC
4639
4640 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4641
765f542d 4642 SV_CHECK_THINKFIRST_COW_DROP(sv);
862a34c6 4643 SvUPGRADE(sv, SVt_PV);
463ee0b2 4644 if (!ptr) {
a0d0e21e 4645 (void)SvOK_off(sv);
47518d95
NC
4646 if (flags & SV_SMAGIC)
4647 SvSETMAGIC(sv);
463ee0b2
LW
4648 return;
4649 }
3f7c398e 4650 if (SvPVX_const(sv))
8bd4d4c5 4651 SvPV_free(sv);
1936d2a7 4652
0b7042f9 4653#ifdef DEBUGGING
2e90b4cd
NC
4654 if (flags & SV_HAS_TRAILING_NUL)
4655 assert(ptr[len] == '\0');
0b7042f9 4656#endif
2e90b4cd 4657
c1c21316 4658 allocate = (flags & SV_HAS_TRAILING_NUL)
5d487c26 4659 ? len + 1 :
ca7c1a29 4660#ifdef Perl_safesysmalloc_size
5d487c26
NC
4661 len + 1;
4662#else
4663 PERL_STRLEN_ROUNDUP(len + 1);
4664#endif
cbf82dd0
NC
4665 if (flags & SV_HAS_TRAILING_NUL) {
4666 /* It's long enough - do nothing.
486ec47a 4667 Specifically Perl_newCONSTSUB is relying on this. */
cbf82dd0 4668 } else {
69d25b4f 4669#ifdef DEBUGGING
69d25b4f 4670 /* Force a move to shake out bugs in callers. */
10edeb5d 4671 char *new_ptr = (char*)safemalloc(allocate);
69d25b4f
NC
4672 Copy(ptr, new_ptr, len, char);
4673 PoisonFree(ptr,len,char);
4674 Safefree(ptr);
4675 ptr = new_ptr;
69d25b4f 4676#else
10edeb5d 4677 ptr = (char*) saferealloc (ptr, allocate);
69d25b4f 4678#endif
cbf82dd0 4679 }
ca7c1a29
NC
4680#ifdef Perl_safesysmalloc_size
4681 SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5d487c26 4682#else
1936d2a7 4683 SvLEN_set(sv, allocate);
5d487c26
NC
4684#endif
4685 SvCUR_set(sv, len);
4686 SvPV_set(sv, ptr);
c1c21316 4687 if (!(flags & SV_HAS_TRAILING_NUL)) {
97a130b8 4688 ptr[len] = '\0';
c1c21316 4689 }
1aa99e6b 4690 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4691 SvTAINT(sv);
47518d95
NC
4692 if (flags & SV_SMAGIC)
4693 SvSETMAGIC(sv);
ef50df4b
GS
4694}
4695
f8c7b90f 4696#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4697/* Need to do this *after* making the SV normal, as we need the buffer
4698 pointer to remain valid until after we've copied it. If we let go too early,
4699 another thread could invalidate it by unsharing last of the same hash key
4700 (which it can do by means other than releasing copy-on-write Svs)
4701 or by changing the other copy-on-write SVs in the loop. */
4702STATIC void
5302ffd4 4703S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
765f542d 4704{
7918f24d
NC
4705 PERL_ARGS_ASSERT_SV_RELEASE_COW;
4706
5302ffd4 4707 { /* this SV was SvIsCOW_normal(sv) */
765f542d 4708 /* we need to find the SV pointing to us. */
cf5629ad 4709 SV *current = SV_COW_NEXT_SV(after);
7a5fa8a2 4710
765f542d
NC
4711 if (current == sv) {
4712 /* The SV we point to points back to us (there were only two of us
4713 in the loop.)
4714 Hence other SV is no longer copy on write either. */
4715 SvFAKE_off(after);
4716 SvREADONLY_off(after);
4717 } else {
4718 /* We need to follow the pointers around the loop. */
4719 SV *next;
4720 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4721 assert (next);
4722 current = next;
4723 /* don't loop forever if the structure is bust, and we have
4724 a pointer into a closed loop. */
4725 assert (current != after);
3f7c398e 4726 assert (SvPVX_const(current) == pvx);
765f542d
NC
4727 }
4728 /* Make the SV before us point to the SV after us. */
a29f6d03 4729 SV_COW_NEXT_SV_SET(current, after);
765f542d 4730 }
765f542d
NC
4731 }
4732}
765f542d 4733#endif
645c22ef
DM
4734/*
4735=for apidoc sv_force_normal_flags
4736
4737Undo various types of fakery on an SV: if the PV is a shared string, make
4738a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
765f542d
NC
4739an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4740we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4741then a copy-on-write scalar drops its PV buffer (if any) and becomes
4742SvPOK_off rather than making a copy. (Used where this scalar is about to be
d3050d9d 4743set to some other value.) In addition, the C<flags> parameter gets passed to
4082acab 4744C<sv_unref_flags()> when unreffing. C<sv_force_normal> calls this function
765f542d 4745with flags set to 0.
645c22ef
DM
4746
4747=cut
4748*/
4749
6fc92669 4750void
2e000ff2 4751Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
0f15f207 4752{
97aff369 4753 dVAR;
7918f24d
NC
4754
4755 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4756
f8c7b90f 4757#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 4758 if (SvREADONLY(sv)) {
765f542d 4759 if (SvFAKE(sv)) {
b64e5050 4760 const char * const pvx = SvPVX_const(sv);
a28509cc
AL
4761 const STRLEN len = SvLEN(sv);
4762 const STRLEN cur = SvCUR(sv);
5302ffd4
NC
4763 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4764 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4765 we'll fail an assertion. */
4766 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4767
46187eeb
NC
4768 if (DEBUG_C_TEST) {
4769 PerlIO_printf(Perl_debug_log,
4770 "Copy on write: Force normal %ld\n",
4771 (long) flags);
e419cbc5 4772 sv_dump(sv);
46187eeb 4773 }
765f542d
NC
4774 SvFAKE_off(sv);
4775 SvREADONLY_off(sv);
9f653bb5 4776 /* This SV doesn't own the buffer, so need to Newx() a new one: */
6136c704 4777 SvPV_set(sv, NULL);
87a1ef3d 4778 SvLEN_set(sv, 0);
765f542d
NC
4779 if (flags & SV_COW_DROP_PV) {
4780 /* OK, so we don't need to copy our buffer. */
4781 SvPOK_off(sv);
4782 } else {
4783 SvGROW(sv, cur + 1);
4784 Move(pvx,SvPVX(sv),cur,char);
87a1ef3d 4785 SvCUR_set(sv, cur);
765f542d
NC
4786 *SvEND(sv) = '\0';
4787 }
5302ffd4
NC
4788 if (len) {
4789 sv_release_COW(sv, pvx, next);
4790 } else {
4791 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4792 }
46187eeb 4793 if (DEBUG_C_TEST) {
e419cbc5 4794 sv_dump(sv);
46187eeb 4795 }
765f542d 4796 }
923e4eb5 4797 else if (IN_PERL_RUNTIME)
6ad8f254 4798 Perl_croak_no_modify(aTHX);
765f542d
NC
4799 }
4800#else
2213622d 4801 if (SvREADONLY(sv)) {
21690b72 4802 if (SvFAKE(sv) && !isGV_with_GP(sv)) {
b64e5050 4803 const char * const pvx = SvPVX_const(sv);
66a1b24b 4804 const STRLEN len = SvCUR(sv);
10bcdfd6
NC
4805 SvFAKE_off(sv);
4806 SvREADONLY_off(sv);
bd61b366 4807 SvPV_set(sv, NULL);
66a1b24b 4808 SvLEN_set(sv, 0);
1c846c1f 4809 SvGROW(sv, len + 1);
706aa1c9 4810 Move(pvx,SvPVX(sv),len,char);
1c846c1f 4811 *SvEND(sv) = '\0';
bdd68bc3 4812 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
1c846c1f 4813 }
923e4eb5 4814 else if (IN_PERL_RUNTIME)
6ad8f254 4815 Perl_croak_no_modify(aTHX);
0f15f207 4816 }
765f542d 4817#endif
2213622d 4818 if (SvROK(sv))
840a7b70 4819 sv_unref_flags(sv, flags);
13be902c 4820 else if (SvFAKE(sv) && isGV_with_GP(sv))
6fc92669 4821 sv_unglob(sv);
b9ad13ac 4822 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
486ec47a 4823 /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
b9ad13ac
NC
4824 to sv_unglob. We only need it here, so inline it. */
4825 const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4826 SV *const temp = newSV_type(new_type);
4827 void *const temp_p = SvANY(sv);
4828
4829 if (new_type == SVt_PVMG) {
4830 SvMAGIC_set(temp, SvMAGIC(sv));
4831 SvMAGIC_set(sv, NULL);
4832 SvSTASH_set(temp, SvSTASH(sv));
4833 SvSTASH_set(sv, NULL);
4834 }
4835 SvCUR_set(temp, SvCUR(sv));
4836 /* Remember that SvPVX is in the head, not the body. */
4837 if (SvLEN(temp)) {
4838 SvLEN_set(temp, SvLEN(sv));
4839 /* This signals "buffer is owned by someone else" in sv_clear,
4840 which is the least effort way to stop it freeing the buffer.
4841 */
4842 SvLEN_set(sv, SvLEN(sv)+1);
4843 } else {
4844 /* Their buffer is already owned by someone else. */
4845 SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4846 SvLEN_set(temp, SvCUR(sv)+1);
4847 }
4848
4849 /* Now swap the rest of the bodies. */
4850
4851 SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4852 SvFLAGS(sv) |= new_type;
4853 SvANY(sv) = SvANY(temp);
4854
4855 SvFLAGS(temp) &= ~(SVTYPEMASK);
4856 SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4857 SvANY(temp) = temp_p;
4858
4859 SvREFCNT_dec(temp);
4860 }
0f15f207 4861}
1c846c1f 4862
645c22ef 4863/*
954c1994
GS
4864=for apidoc sv_chop
4865
1c846c1f 4866Efficient removal of characters from the beginning of the string buffer.
954c1994
GS
4867SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4868the string buffer. The C<ptr> becomes the first character of the adjusted
645c22ef 4869string. Uses the "OOK hack".
b07bf000 4870
3f7c398e 4871Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
31869a79 4872refer to the same chunk of data.
954c1994 4873
b07bf000
CS
4874The unfortunate similarity of this function's name to that of Perl's C<chop>
4875operator is strictly coincidental. This function works from the left;
4876C<chop> works from the right.
4877
954c1994
GS
4878=cut
4879*/
4880
79072805 4881void
2e000ff2 4882Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
79072805 4883{
69240efd
NC
4884 STRLEN delta;
4885 STRLEN old_delta;
7a4bba22
NC
4886 U8 *p;
4887#ifdef DEBUGGING
7a776c5a
CS
4888 const U8 *evacp;
4889 STRLEN evacn;
7a4bba22 4890#endif
6c65d5f9 4891 STRLEN max_delta;
7a4bba22 4892
7918f24d
NC
4893 PERL_ARGS_ASSERT_SV_CHOP;
4894
a0d0e21e 4895 if (!ptr || !SvPOKp(sv))
79072805 4896 return;
3f7c398e 4897 delta = ptr - SvPVX_const(sv);
15895f8a
NC
4898 if (!delta) {
4899 /* Nothing to do. */
4900 return;
4901 }
837cb3ba 4902 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
7a776c5a 4903 if (delta > max_delta)
6c65d5f9
NC
4904 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4905 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
7a776c5a 4906 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
2213622d 4907 SV_CHECK_THINKFIRST(sv);
79072805
LW
4908
4909 if (!SvOOK(sv)) {
50483b2c 4910 if (!SvLEN(sv)) { /* make copy of shared string */
3f7c398e 4911 const char *pvx = SvPVX_const(sv);
a28509cc 4912 const STRLEN len = SvCUR(sv);
50483b2c 4913 SvGROW(sv, len + 1);
706aa1c9 4914 Move(pvx,SvPVX(sv),len,char);
50483b2c
JD
4915 *SvEND(sv) = '\0';
4916 }
7a5fa8a2 4917 SvFLAGS(sv) |= SVf_OOK;
7a4bba22
NC
4918 old_delta = 0;
4919 } else {
69240efd 4920 SvOOK_offset(sv, old_delta);
79072805 4921 }
b162af07
SP
4922 SvLEN_set(sv, SvLEN(sv) - delta);
4923 SvCUR_set(sv, SvCUR(sv) - delta);
f880fe2f 4924 SvPV_set(sv, SvPVX(sv) + delta);
7a4bba22
NC
4925
4926 p = (U8 *)SvPVX_const(sv);
4927
50af2e61 4928#ifdef DEBUGGING
7a776c5a
CS
4929 /* how many bytes were evacuated? we will fill them with sentinel
4930 bytes, except for the part holding the new offset of course. */
4931 evacn = delta;
4932 if (old_delta)
4933 evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
4934 assert(evacn);
4935 assert(evacn <= delta + old_delta);
4936 evacp = p - evacn;
7a4bba22
NC
4937#endif
4938
7a776c5a 4939 delta += old_delta;
69240efd
NC
4940 assert(delta);
4941 if (delta < 0x100) {
7a4bba22
NC
4942 *--p = (U8) delta;
4943 } else {
69240efd
NC
4944 *--p = 0;
4945 p -= sizeof(STRLEN);
4946 Copy((U8*)&delta, p, sizeof(STRLEN), U8);
7a4bba22
NC
4947 }
4948
4949#ifdef DEBUGGING
4950 /* Fill the preceding buffer with sentinals to verify that no-one is
4951 using it. */
7a776c5a 4952 while (p > evacp) {
7a4bba22
NC
4953 --p;
4954 *p = (U8)PTR2UV(p);
50af2e61
NC
4955 }
4956#endif
79072805
LW
4957}
4958
954c1994
GS
4959/*
4960=for apidoc sv_catpvn
4961
4962Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4963C<len> indicates number of bytes to copy. If the SV has the UTF-8
4964status set, then the bytes appended should be valid UTF-8.
d5ce4a7c 4965Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
954c1994 4966
8d6d96c1
HS
4967=for apidoc sv_catpvn_flags
4968
4969Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4970C<len> indicates number of bytes to copy. If the SV has the UTF-8
4971status set, then the bytes appended should be valid UTF-8.
8d6d96c1
HS
4972If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4973appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4974in terms of this function.
4975
4976=cut
4977*/
4978
4979void
2e000ff2 4980Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
8d6d96c1 4981{
97aff369 4982 dVAR;
8d6d96c1 4983 STRLEN dlen;
fabdb6c0 4984 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
8d6d96c1 4985
7918f24d 4986 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
c682ebef
FC
4987 assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
4988
4989 if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
4990 if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
7f0bfbea 4991 sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
c682ebef
FC
4992 dlen = SvCUR(dsv);
4993 }
4994 else SvGROW(dsv, dlen + slen + 1);
4995 if (sstr == dstr)
3f7c398e 4996 sstr = SvPVX_const(dsv);
c682ebef
FC
4997 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4998 SvCUR_set(dsv, SvCUR(dsv) + slen);
4999 }
5000 else {
5001 /* We inline bytes_to_utf8, to avoid an extra malloc. */
5002 const char * const send = sstr + slen;
5003 U8 *d;
5004
5005 /* Something this code does not account for, which I think is
5006 impossible; it would require the same pv to be treated as
5007 bytes *and* utf8, which would indicate a bug elsewhere. */
5008 assert(sstr != dstr);
5009
7f0bfbea 5010 SvGROW(dsv, dlen + slen * 2 + 1);
c682ebef
FC
5011 d = (U8 *)SvPVX(dsv) + dlen;
5012
5013 while (sstr < send) {
5014 const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5015 if (UNI_IS_INVARIANT(uv))
5016 *d++ = (U8)UTF_TO_NATIVE(uv);
5017 else {
5018 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5019 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5020 }
5021 }
5022 SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5023 }
8d6d96c1
HS
5024 *SvEND(dsv) = '\0';
5025 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
5026 SvTAINT(dsv);
bddd5118
NC
5027 if (flags & SV_SMAGIC)
5028 SvSETMAGIC(dsv);
79072805
LW
5029}
5030
954c1994 5031/*
954c1994
GS
5032=for apidoc sv_catsv
5033
13e8c8e3
JH
5034Concatenates the string from SV C<ssv> onto the end of the string in
5035SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
5036not 'set' magic. See C<sv_catsv_mg>.
954c1994 5037
8d6d96c1
HS
5038=for apidoc sv_catsv_flags
5039
5040Concatenates the string from SV C<ssv> onto the end of the string in
5041SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
5042bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
5043and C<sv_catsv_nomg> are implemented in terms of this function.
5044
5045=cut */
5046
ef50df4b 5047void
2e000ff2 5048Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
79072805 5049{
97aff369 5050 dVAR;
7918f24d
NC
5051
5052 PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5053
5054 if (ssv) {
00b6aa41 5055 STRLEN slen;
a9984b10 5056 const char *spv = SvPV_flags_const(ssv, slen, flags);
00b6aa41 5057 if (spv) {
bddd5118
NC
5058 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
5059 mg_get(dsv);
7f0bfbea
FC
5060 sv_catpvn_flags(dsv, spv, slen,
5061 DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
e84ff256 5062 }
560a288e 5063 }
bddd5118
NC
5064 if (flags & SV_SMAGIC)
5065 SvSETMAGIC(dsv);
79072805
LW
5066}
5067
954c1994 5068/*
954c1994
GS
5069=for apidoc sv_catpv
5070
5071Concatenates the string onto the end of the string which is in the SV.
1e54db1a
JH
5072If the SV has the UTF-8 status set, then the bytes appended should be
5073valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
954c1994 5074
d5ce4a7c 5075=cut */
954c1994 5076
ef50df4b 5077void
2b021c53 5078Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
79072805 5079{
97aff369 5080 dVAR;
79072805 5081 register STRLEN len;
463ee0b2 5082 STRLEN tlen;
748a9306 5083 char *junk;
79072805 5084
7918f24d
NC
5085 PERL_ARGS_ASSERT_SV_CATPV;
5086
0c981600 5087 if (!ptr)
79072805 5088 return;
748a9306 5089 junk = SvPV_force(sv, tlen);
0c981600 5090 len = strlen(ptr);
463ee0b2 5091 SvGROW(sv, tlen + len + 1);
0c981600 5092 if (ptr == junk)
3f7c398e 5093 ptr = SvPVX_const(sv);
0c981600 5094 Move(ptr,SvPVX(sv)+tlen,len+1,char);
b162af07 5095 SvCUR_set(sv, SvCUR(sv) + len);
d41ff1b8 5096 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 5097 SvTAINT(sv);
79072805
LW
5098}
5099
954c1994 5100/*
9dcc53ea
Z
5101=for apidoc sv_catpv_flags
5102
5103Concatenates the string onto the end of the string which is in the SV.
5104If the SV has the UTF-8 status set, then the bytes appended should
5105be valid UTF-8. If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get>
5106on the SVs if appropriate, else not.
5107
5108=cut
5109*/
5110
5111void
fe00c367 5112Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
9dcc53ea
Z
5113{
5114 PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5115 sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5116}
5117
5118/*
954c1994
GS
5119=for apidoc sv_catpv_mg
5120
5121Like C<sv_catpv>, but also handles 'set' magic.
5122
5123=cut
5124*/
5125
ef50df4b 5126void
2b021c53 5127Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
ef50df4b 5128{
7918f24d
NC
5129 PERL_ARGS_ASSERT_SV_CATPV_MG;
5130
0c981600 5131 sv_catpv(sv,ptr);
ef50df4b
GS
5132 SvSETMAGIC(sv);
5133}
5134
645c22ef
DM
5135/*
5136=for apidoc newSV
5137
561b68a9
SH
5138Creates a new SV. A non-zero C<len> parameter indicates the number of
5139bytes of preallocated string space the SV should have. An extra byte for a
5140trailing NUL is also reserved. (SvPOK is not set for the SV even if string
5141space is allocated.) The reference count for the new SV is set to 1.
5142
5143In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5144parameter, I<x>, a debug aid which allowed callers to identify themselves.
5145This aid has been superseded by a new build option, PERL_MEM_LOG (see
94c267a8 5146L<perlhacktips/PERL_MEM_LOG>). The older API is still there for use in XS
561b68a9 5147modules supporting older perls.
645c22ef
DM
5148
5149=cut
5150*/
5151
79072805 5152SV *
2b021c53 5153Perl_newSV(pTHX_ const STRLEN len)
79072805 5154{
97aff369 5155 dVAR;
79072805 5156 register SV *sv;
1c846c1f 5157
4561caa4 5158 new_SV(sv);
79072805
LW
5159 if (len) {
5160 sv_upgrade(sv, SVt_PV);
5161 SvGROW(sv, len + 1);
5162 }
5163 return sv;
5164}
954c1994 5165/*
92110913 5166=for apidoc sv_magicext
954c1994 5167
68795e93 5168Adds magic to an SV, upgrading it if necessary. Applies the
2d8d5d5a 5169supplied vtable and returns a pointer to the magic added.
92110913 5170
2d8d5d5a
SH
5171Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5172In particular, you can add magic to SvREADONLY SVs, and add more than
5173one instance of the same 'how'.
645c22ef 5174
2d8d5d5a
SH
5175If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5176stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5177special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5178to contain an C<SV*> and is stored as-is with its REFCNT incremented.
92110913 5179
2d8d5d5a 5180(This is now used as a subroutine by C<sv_magic>.)
954c1994
GS
5181
5182=cut
5183*/
92110913 5184MAGIC *
2b021c53
SS
5185Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
5186 const MGVTBL *const vtable, const char *const name, const I32 namlen)
79072805 5187{
97aff369 5188 dVAR;
79072805 5189 MAGIC* mg;
68795e93 5190
7918f24d
NC
5191 PERL_ARGS_ASSERT_SV_MAGICEXT;
5192
7a7f3e45 5193 SvUPGRADE(sv, SVt_PVMG);
a02a5408 5194 Newxz(mg, 1, MAGIC);
79072805 5195 mg->mg_moremagic = SvMAGIC(sv);
b162af07 5196 SvMAGIC_set(sv, mg);
75f9d97a 5197
05f95b08
SB
5198 /* Sometimes a magic contains a reference loop, where the sv and
5199 object refer to each other. To prevent a reference loop that
5200 would prevent such objects being freed, we look for such loops
5201 and if we find one we avoid incrementing the object refcount.
87f0b213
JH
5202
5203 Note we cannot do this to avoid self-tie loops as intervening RV must
b5ccf5f2 5204 have its REFCNT incremented to keep it in existence.
87f0b213
JH
5205
5206 */
14befaf4
DM
5207 if (!obj || obj == sv ||
5208 how == PERL_MAGIC_arylen ||
8d2f4536 5209 how == PERL_MAGIC_symtab ||
75f9d97a 5210 (SvTYPE(obj) == SVt_PVGV &&
4c4652b6
NC
5211 (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5212 || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5213 || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
75f9d97a 5214 {
8990e307 5215 mg->mg_obj = obj;
75f9d97a 5216 }
85e6fe83 5217 else {
b37c2d43 5218 mg->mg_obj = SvREFCNT_inc_simple(obj);
85e6fe83
LW
5219 mg->mg_flags |= MGf_REFCOUNTED;
5220 }
b5ccf5f2
YST
5221
5222 /* Normal self-ties simply pass a null object, and instead of
5223 using mg_obj directly, use the SvTIED_obj macro to produce a
5224 new RV as needed. For glob "self-ties", we are tieing the PVIO
5225 with an RV obj pointing to the glob containing the PVIO. In
5226 this case, to avoid a reference loop, we need to weaken the
5227 reference.
5228 */
5229
5230 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
a45c7426 5231 obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
b5ccf5f2
YST
5232 {
5233 sv_rvweaken(obj);
5234 }
5235
79072805 5236 mg->mg_type = how;
565764a8 5237 mg->mg_len = namlen;
9cbac4c7 5238 if (name) {
92110913 5239 if (namlen > 0)
1edc1566 5240 mg->mg_ptr = savepvn(name, namlen);
daba3364
NC
5241 else if (namlen == HEf_SVKEY) {
5242 /* Yes, this is casting away const. This is only for the case of
486ec47a 5243 HEf_SVKEY. I think we need to document this aberation of the
daba3364
NC
5244 constness of the API, rather than making name non-const, as
5245 that change propagating outwards a long way. */
5246 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5247 } else
92110913 5248 mg->mg_ptr = (char *) name;
9cbac4c7 5249 }
53d44271 5250 mg->mg_virtual = (MGVTBL *) vtable;
68795e93 5251
92110913
NIS
5252 mg_magical(sv);
5253 if (SvGMAGICAL(sv))
5254 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5255 return mg;
5256}
5257
5258/*
5259=for apidoc sv_magic
1c846c1f 5260
92110913
NIS
5261Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5262then adds a new magic item of type C<how> to the head of the magic list.
5263
2d8d5d5a
SH
5264See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5265handling of the C<name> and C<namlen> arguments.
5266
4509d3fb
SB
5267You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5268to add more than one instance of the same 'how'.
5269
92110913
NIS
5270=cut
5271*/
5272
5273void
2b021c53
SS
5274Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how,
5275 const char *const name, const I32 namlen)
68795e93 5276{
97aff369 5277 dVAR;
53d44271 5278 const MGVTBL *vtable;
92110913 5279 MAGIC* mg;
82ff486e 5280 unsigned int flags;
6f83ef0e 5281 unsigned int vtable_index;
92110913 5282
7918f24d
NC
5283 PERL_ARGS_ASSERT_SV_MAGIC;
5284
2f2f3ec9 5285 if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
82ff486e
NC
5286 || ((flags = PL_magic_data[how]),
5287 (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5288 > magic_vtable_max))
5289 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5290
5291 /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5292 Useful for attaching extension internal data to perl vars.
5293 Note that multiple extensions may clash if magical scalars
5294 etc holding private data from one are passed to another. */
5295
5296 vtable = (vtable_index == magic_vtable_max)
5297 ? NULL : PL_magic_vtables + vtable_index;
5298
f8c7b90f 5299#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
5300 if (SvIsCOW(sv))
5301 sv_force_normal_flags(sv, 0);
5302#endif
92110913 5303 if (SvREADONLY(sv)) {
d8084ca5
DM
5304 if (
5305 /* its okay to attach magic to shared strings; the subsequent
5306 * upgrade to PVMG will unshare the string */
5307 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5308
5309 && IN_PERL_RUNTIME
82ff486e 5310 && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
92110913
NIS
5311 )
5312 {
6ad8f254 5313 Perl_croak_no_modify(aTHX);
92110913
NIS
5314 }
5315 }
5316 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5317 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
68795e93
NIS
5318 /* sv_magic() refuses to add a magic of the same 'how' as an
5319 existing one
92110913 5320 */
2a509ed3 5321 if (how == PERL_MAGIC_taint) {
92110913 5322 mg->mg_len |= 1;
2a509ed3
NC
5323 /* Any scalar which already had taint magic on which someone
5324 (erroneously?) did SvIOK_on() or similar will now be
5325 incorrectly sporting public "OK" flags. */
5326 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5327 }
92110913
NIS
5328 return;
5329 }
5330 }
68795e93 5331
92110913 5332 /* Rest of work is done else where */
aec46f14 5333 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
68795e93 5334
92110913
NIS
5335 switch (how) {
5336 case PERL_MAGIC_taint:
5337 mg->mg_len = 1;
5338 break;
5339 case PERL_MAGIC_ext:
5340 case PERL_MAGIC_dbfile:
5341 SvRMAGICAL_on(sv);
5342 break;
5343 }
463ee0b2
LW
5344}
5345
e1463d31 5346static int
b83794c7 5347S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
463ee0b2
LW
5348{
5349 MAGIC* mg;
5350 MAGIC** mgp;
7918f24d 5351
b83794c7 5352 assert(flags <= 1);
7918f24d 5353
91bba347 5354 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
463ee0b2 5355 return 0;
064cf529 5356 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
463ee0b2 5357 for (mg = *mgp; mg; mg = *mgp) {
b83794c7
FR
5358 const MGVTBL* const virt = mg->mg_virtual;
5359 if (mg->mg_type == type && (!flags || virt == vtbl)) {
463ee0b2 5360 *mgp = mg->mg_moremagic;
b83794c7
FR
5361 if (virt && virt->svt_free)
5362 virt->svt_free(aTHX_ sv, mg);
14befaf4 5363 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
92110913 5364 if (mg->mg_len > 0)
1edc1566 5365 Safefree(mg->mg_ptr);
565764a8 5366 else if (mg->mg_len == HEf_SVKEY)
daba3364 5367 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
d2923cdd 5368 else if (mg->mg_type == PERL_MAGIC_utf8)
7e8c5dac 5369 Safefree(mg->mg_ptr);
9cbac4c7 5370 }
a0d0e21e
LW
5371 if (mg->mg_flags & MGf_REFCOUNTED)
5372 SvREFCNT_dec(mg->mg_obj);
463ee0b2
LW
5373 Safefree(mg);
5374 }
5375 else
5376 mgp = &mg->mg_moremagic;
79072805 5377 }
806e7ca7
CS
5378 if (SvMAGIC(sv)) {
5379 if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */
5380 mg_magical(sv); /* else fix the flags now */
5381 }
5382 else {
463ee0b2 5383 SvMAGICAL_off(sv);
c268c2a6 5384 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
463ee0b2 5385 }
463ee0b2 5386 return 0;
79072805
LW
5387}
5388
c461cf8f 5389/*
b83794c7
FR
5390=for apidoc sv_unmagic
5391
5392Removes all magic of type C<type> from an SV.
5393
5394=cut
5395*/
5396
5397int
5398Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5399{
5400 PERL_ARGS_ASSERT_SV_UNMAGIC;
5401 return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5402}
5403
5404/*
5405=for apidoc sv_unmagicext
5406
5407Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5408
5409=cut
5410*/
5411
5412int
5413Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5414{
5415 PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5416 return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5417}
5418
5419/*
c461cf8f
JH
5420=for apidoc sv_rvweaken
5421
645c22ef
DM
5422Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5423referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5424push a back-reference to this RV onto the array of backreferences
1e73acc8
AS
5425associated with that magic. If the RV is magical, set magic will be
5426called after the RV is cleared.
c461cf8f
JH
5427
5428=cut
5429*/
5430
810b8aa5 5431SV *
2b021c53 5432Perl_sv_rvweaken(pTHX_ SV *const sv)
810b8aa5
GS
5433{
5434 SV *tsv;
7918f24d
NC
5435
5436 PERL_ARGS_ASSERT_SV_RVWEAKEN;
5437
810b8aa5
GS
5438 if (!SvOK(sv)) /* let undefs pass */
5439 return sv;
5440 if (!SvROK(sv))
cea2e8a9 5441 Perl_croak(aTHX_ "Can't weaken a nonreference");
810b8aa5 5442 else if (SvWEAKREF(sv)) {
a2a5de95 5443 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
810b8aa5
GS
5444 return sv;
5445 }
5d4ff231 5446 else if (SvREADONLY(sv)) croak_no_modify();
810b8aa5 5447 tsv = SvRV(sv);
e15faf7d 5448 Perl_sv_add_backref(aTHX_ tsv, sv);
810b8aa5 5449 SvWEAKREF_on(sv);
1c846c1f 5450 SvREFCNT_dec(tsv);
810b8aa5
GS
5451 return sv;
5452}
5453
645c22ef
DM
5454/* Give tsv backref magic if it hasn't already got it, then push a
5455 * back-reference to sv onto the array associated with the backref magic.
5648c0ae
DM
5456 *
5457 * As an optimisation, if there's only one backref and it's not an AV,
5458 * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5459 * allocate an AV. (Whether the slot holds an AV tells us whether this is
5460 * active.)
645c22ef
DM
5461 */
5462
fd996479
DM
5463/* A discussion about the backreferences array and its refcount:
5464 *
5465 * The AV holding the backreferences is pointed to either as the mg_obj of
d5683f9a
DM
5466 * PERL_MAGIC_backref, or in the specific case of a HV, from the
5467 * xhv_backreferences field. The array is created with a refcount
09aad8f0 5468 * of 2. This means that if during global destruction the array gets
cef0c2ea
DM
5469 * picked on before its parent to have its refcount decremented by the
5470 * random zapper, it won't actually be freed, meaning it's still there for
5471 * when its parent gets freed.
5648c0ae
DM
5472 *
5473 * When the parent SV is freed, the extra ref is killed by
5474 * Perl_sv_kill_backrefs. The other ref is killed, in the case of magic,
5475 * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5476 *
5477 * When a single backref SV is stored directly, it is not reference
5478 * counted.
fd996479
DM
5479 */
5480
e15faf7d 5481void
2b021c53 5482Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
810b8aa5 5483{
97aff369 5484 dVAR;
757971c4 5485 SV **svp;
5648c0ae 5486 AV *av = NULL;
757971c4 5487 MAGIC *mg = NULL;
86f55936 5488
7918f24d
NC
5489 PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5490
5648c0ae
DM
5491 /* find slot to store array or singleton backref */
5492
86f55936 5493 if (SvTYPE(tsv) == SVt_PVHV) {
757971c4 5494 svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
86f55936 5495 } else {
757971c4
DM
5496 if (! ((mg =
5497 (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5498 {
5499 sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5500 mg = mg_find(tsv, PERL_MAGIC_backref);
86f55936 5501 }
757971c4 5502 svp = &(mg->mg_obj);
810b8aa5 5503 }
757971c4 5504
5648c0ae
DM
5505 /* create or retrieve the array */
5506
5507 if ( (!*svp && SvTYPE(sv) == SVt_PVAV)
5508 || (*svp && SvTYPE(*svp) != SVt_PVAV)
5509 ) {
5510 /* create array */
757971c4
DM
5511 av = newAV();
5512 AvREAL_off(av);
5513 SvREFCNT_inc_simple_void(av);
5514 /* av now has a refcnt of 2; see discussion above */
5648c0ae
DM
5515 if (*svp) {
5516 /* move single existing backref to the array */
5517 av_extend(av, 1);
5518 AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5519 }
5520 *svp = (SV*)av;
757971c4
DM
5521 if (mg)
5522 mg->mg_flags |= MGf_REFCOUNTED;
757971c4
DM
5523 }
5524 else
5648c0ae 5525 av = MUTABLE_AV(*svp);
757971c4 5526
5648c0ae
DM
5527 if (!av) {
5528 /* optimisation: store single backref directly in HvAUX or mg_obj */
5529 *svp = sv;
5530 return;
5531 }
5532 /* push new backref */
5533 assert(SvTYPE(av) == SVt_PVAV);
d91d49e8 5534 if (AvFILLp(av) >= AvMAX(av)) {
d91d49e8
MM
5535 av_extend(av, AvFILLp(av)+1);
5536 }
5537 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
810b8aa5
GS
5538}
5539
645c22ef
DM
5540/* delete a back-reference to ourselves from the backref magic associated
5541 * with the SV we point to.
5542 */
5543
4c74a7df
DM
5544void
5545Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
810b8aa5 5546{
97aff369 5547 dVAR;
5648c0ae 5548 SV **svp = NULL;
86f55936 5549
7918f24d
NC
5550 PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5551
d5683f9a
DM
5552 if (SvTYPE(tsv) == SVt_PVHV) {
5553 if (SvOOK(tsv))
5554 svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
86f55936 5555 }
d5683f9a 5556 else {
5648c0ae 5557 MAGIC *const mg
86f55936 5558 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5648c0ae 5559 svp = mg ? &(mg->mg_obj) : NULL;
86f55936 5560 }
41fae7a1 5561
5648c0ae 5562 if (!svp || !*svp)
cea2e8a9 5563 Perl_croak(aTHX_ "panic: del_backref");
86f55936 5564
5648c0ae 5565 if (SvTYPE(*svp) == SVt_PVAV) {
51698cb3
DM
5566#ifdef DEBUGGING
5567 int count = 1;
5568#endif
5648c0ae 5569 AV * const av = (AV*)*svp;
51698cb3 5570 SSize_t fill;
5648c0ae 5571 assert(!SvIS_FREED(av));
51698cb3
DM
5572 fill = AvFILLp(av);
5573 assert(fill > -1);
5648c0ae 5574 svp = AvARRAY(av);
51698cb3
DM
5575 /* for an SV with N weak references to it, if all those
5576 * weak refs are deleted, then sv_del_backref will be called
5577 * N times and O(N^2) compares will be done within the backref
5578 * array. To ameliorate this potential slowness, we:
5579 * 1) make sure this code is as tight as possible;
5580 * 2) when looking for SV, look for it at both the head and tail of the
5581 * array first before searching the rest, since some create/destroy
5582 * patterns will cause the backrefs to be freed in order.
5583 */
5584 if (*svp == sv) {
5585 AvARRAY(av)++;
5586 AvMAX(av)--;
5587 }
5588 else {
5589 SV **p = &svp[fill];
5590 SV *const topsv = *p;
5591 if (topsv != sv) {
5592#ifdef DEBUGGING
5593 count = 0;
5594#endif
5595 while (--p > svp) {
5596 if (*p == sv) {
5597 /* We weren't the last entry.
5598 An unordered list has this property that you
5599 can take the last element off the end to fill
5600 the hole, and it's still an unordered list :-)
5601 */
5602 *p = topsv;
5603#ifdef DEBUGGING
5604 count++;
5605#else
5606 break; /* should only be one */
254f8c6a 5607#endif
51698cb3
DM
5608 }
5609 }
6a76db8b 5610 }
6a76db8b 5611 }
51698cb3
DM
5612 assert(count ==1);
5613 AvFILLp(av) = fill-1;
6a76db8b 5614 }
5648c0ae
DM
5615 else {
5616 /* optimisation: only a single backref, stored directly */
5617 if (*svp != sv)
5618 Perl_croak(aTHX_ "panic: del_backref");
5619 *svp = NULL;
5620 }
5621
810b8aa5
GS
5622}
5623
5648c0ae 5624void
2b021c53 5625Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
86f55936 5626{
5648c0ae
DM
5627 SV **svp;
5628 SV **last;
5629 bool is_array;
86f55936 5630
7918f24d 5631 PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
86f55936 5632
5648c0ae
DM
5633 if (!av)
5634 return;
86f55936 5635
da0c0b27
DM
5636 /* after multiple passes through Perl_sv_clean_all() for a thinngy
5637 * that has badly leaked, the backref array may have gotten freed,
5638 * since we only protect it against 1 round of cleanup */
5639 if (SvIS_FREED(av)) {
5640 if (PL_in_clean_all) /* All is fair */
5641 return;
5642 Perl_croak(aTHX_
5643 "panic: magic_killbackrefs (freed backref AV/SV)");
5644 }
5645
5646
5648c0ae
DM
5647 is_array = (SvTYPE(av) == SVt_PVAV);
5648 if (is_array) {
cef0c2ea 5649 assert(!SvIS_FREED(av));
5648c0ae
DM
5650 svp = AvARRAY(av);
5651 if (svp)
5652 last = svp + AvFILLp(av);
5653 }
5654 else {
5655 /* optimisation: only a single backref, stored directly */
5656 svp = (SV**)&av;
5657 last = svp;
5658 }
5659
5660 if (svp) {
86f55936
NC
5661 while (svp <= last) {
5662 if (*svp) {
5663 SV *const referrer = *svp;
5664 if (SvWEAKREF(referrer)) {
5665 /* XXX Should we check that it hasn't changed? */
4c74a7df 5666 assert(SvROK(referrer));
86f55936
NC
5667 SvRV_set(referrer, 0);
5668 SvOK_off(referrer);
5669 SvWEAKREF_off(referrer);
1e73acc8 5670 SvSETMAGIC(referrer);
86f55936
NC
5671 } else if (SvTYPE(referrer) == SVt_PVGV ||
5672 SvTYPE(referrer) == SVt_PVLV) {
803f2748 5673 assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
86f55936
NC
5674 /* You lookin' at me? */
5675 assert(GvSTASH(referrer));
1d193675 5676 assert(GvSTASH(referrer) == (const HV *)sv);
86f55936 5677 GvSTASH(referrer) = 0;
803f2748
DM
5678 } else if (SvTYPE(referrer) == SVt_PVCV ||
5679 SvTYPE(referrer) == SVt_PVFM) {
5680 if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5681 /* You lookin' at me? */
5682 assert(CvSTASH(referrer));
5683 assert(CvSTASH(referrer) == (const HV *)sv);
c68d9564 5684 SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
803f2748
DM
5685 }
5686 else {
5687 assert(SvTYPE(sv) == SVt_PVGV);
5688 /* You lookin' at me? */
5689 assert(CvGV(referrer));
5690 assert(CvGV(referrer) == (const GV *)sv);
5691 anonymise_cv_maybe(MUTABLE_GV(sv),
5692 MUTABLE_CV(referrer));
5693 }
5694
86f55936
NC
5695 } else {
5696 Perl_croak(aTHX_
5697 "panic: magic_killbackrefs (flags=%"UVxf")",
5698 (UV)SvFLAGS(referrer));
5699 }
5700
5648c0ae
DM
5701 if (is_array)
5702 *svp = NULL;
86f55936
NC
5703 }
5704 svp++;
5705 }
5648c0ae
DM
5706 }
5707 if (is_array) {
cef0c2ea 5708 AvFILLp(av) = -1;
5648c0ae 5709 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
86f55936 5710 }
5648c0ae 5711 return;
86f55936
NC
5712}
5713
954c1994
GS
5714/*
5715=for apidoc sv_insert
5716
5717Inserts a string at the specified offset/length within the SV. Similar to
c0dd94a0 5718the Perl substr() function. Handles get magic.
954c1994 5719
c0dd94a0
VP
5720=for apidoc sv_insert_flags
5721
5722Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5723
5724=cut
5725*/
5726
5727void
5728Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5729{
97aff369 5730 dVAR;
79072805
LW
5731 register char *big;
5732 register char *mid;
5733 register char *midend;
5734 register char *bigend;
3403a50a 5735 register SSize_t i; /* better be sizeof(STRLEN) or bad things happen */
6ff81951 5736 STRLEN curlen;
1c846c1f 5737
27aecdc6 5738 PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
79072805 5739
8990e307 5740 if (!bigstr)
cea2e8a9 5741 Perl_croak(aTHX_ "Can't modify non-existent substring");
c0dd94a0 5742 SvPV_force_flags(bigstr, curlen, flags);
60fa28ff 5743 (void)SvPOK_only_UTF8(bigstr);
6ff81951
GS
5744 if (offset + len > curlen) {
5745 SvGROW(bigstr, offset+len+1);
93524f2b 5746 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6ff81951
GS
5747 SvCUR_set(bigstr, offset+len);
5748 }
79072805 5749
69b47968 5750 SvTAINT(bigstr);
79072805
LW
5751 i = littlelen - len;
5752 if (i > 0) { /* string might grow */
a0d0e21e 5753 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
79072805
LW
5754 mid = big + offset + len;
5755 midend = bigend = big + SvCUR(bigstr);
5756 bigend += i;
5757 *bigend = '\0';
5758 while (midend > mid) /* shove everything down */
5759 *--bigend = *--midend;
5760 Move(little,big+offset,littlelen,char);
b162af07 5761 SvCUR_set(bigstr, SvCUR(bigstr) + i);
79072805
LW
5762 SvSETMAGIC(bigstr);
5763 return;
5764 }
5765 else if (i == 0) {
463ee0b2 5766 Move(little,SvPVX(bigstr)+offset,len,char);
79072805
LW
5767 SvSETMAGIC(bigstr);
5768 return;
5769 }
5770
463ee0b2 5771 big = SvPVX(bigstr);
79072805
LW
5772 mid = big + offset;
5773 midend = mid + len;
5774 bigend = big + SvCUR(bigstr);
5775
5776 if (midend > bigend)
cea2e8a9 5777 Perl_croak(aTHX_ "panic: sv_insert");
79072805
LW
5778
5779 if (mid - big > bigend - midend) { /* faster to shorten from end */
5780 if (littlelen) {
5781 Move(little, mid, littlelen,char);
5782 mid += littlelen;
5783 }
5784 i = bigend - midend;
5785 if (i > 0) {
5786 Move(midend, mid, i,char);
5787 mid += i;
5788 }
5789 *mid = '\0';
5790 SvCUR_set(bigstr, mid - big);
5791 }
155aba94 5792 else if ((i = mid - big)) { /* faster from front */
79072805
LW
5793 midend -= littlelen;
5794 mid = midend;
0d3c21b0 5795 Move(big, midend - i, i, char);
79072805 5796 sv_chop(bigstr,midend-i);
79072805
LW
5797 if (littlelen)
5798 Move(little, mid, littlelen,char);
5799 }
5800 else if (littlelen) {
5801 midend -= littlelen;
5802 sv_chop(bigstr,midend);
5803 Move(little,midend,littlelen,char);
5804 }
5805 else {
5806 sv_chop(bigstr,midend);
5807 }
5808 SvSETMAGIC(bigstr);
5809}
5810
c461cf8f
JH
5811/*
5812=for apidoc sv_replace
5813
5814Make the first argument a copy of the second, then delete the original.
645c22ef
DM
5815The target SV physically takes over ownership of the body of the source SV
5816and inherits its flags; however, the target keeps any magic it owns,
5817and any magic in the source is discarded.
ff276b08 5818Note that this is a rather specialist SV copying operation; most of the
645c22ef 5819time you'll want to use C<sv_setsv> or one of its many macro front-ends.
c461cf8f
JH
5820
5821=cut
5822*/
79072805
LW
5823
5824void
af828c01 5825Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
79072805 5826{
97aff369 5827 dVAR;
a3b680e6 5828 const U32 refcnt = SvREFCNT(sv);
7918f24d
NC
5829
5830 PERL_ARGS_ASSERT_SV_REPLACE;
5831
765f542d 5832 SV_CHECK_THINKFIRST_COW_DROP(sv);
30e5c352 5833 if (SvREFCNT(nsv) != 1) {
fe13d51d
JM
5834 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5835 " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
30e5c352 5836 }
93a17b20 5837 if (SvMAGICAL(sv)) {
a0d0e21e
LW
5838 if (SvMAGICAL(nsv))
5839 mg_free(nsv);
5840 else
5841 sv_upgrade(nsv, SVt_PVMG);
b162af07 5842 SvMAGIC_set(nsv, SvMAGIC(sv));
a0d0e21e 5843 SvFLAGS(nsv) |= SvMAGICAL(sv);
93a17b20 5844 SvMAGICAL_off(sv);
b162af07 5845 SvMAGIC_set(sv, NULL);
93a17b20 5846 }
79072805
LW
5847 SvREFCNT(sv) = 0;
5848 sv_clear(sv);
477f5d66 5849 assert(!SvREFCNT(sv));
fd0854ff
DM
5850#ifdef DEBUG_LEAKING_SCALARS
5851 sv->sv_flags = nsv->sv_flags;
5852 sv->sv_any = nsv->sv_any;
5853 sv->sv_refcnt = nsv->sv_refcnt;
f34d0642 5854 sv->sv_u = nsv->sv_u;
fd0854ff 5855#else
79072805 5856 StructCopy(nsv,sv,SV);
fd0854ff 5857#endif
4df7f6af 5858 if(SvTYPE(sv) == SVt_IV) {
7b2c381c 5859 SvANY(sv)
339049b0 5860 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
7b2c381c
NC
5861 }
5862
fd0854ff 5863
f8c7b90f 5864#ifdef PERL_OLD_COPY_ON_WRITE
d3d0e6f1
NC
5865 if (SvIsCOW_normal(nsv)) {
5866 /* We need to follow the pointers around the loop to make the
5867 previous SV point to sv, rather than nsv. */
5868 SV *next;
5869 SV *current = nsv;
5870 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5871 assert(next);
5872 current = next;
3f7c398e 5873 assert(SvPVX_const(current) == SvPVX_const(nsv));
d3d0e6f1
NC
5874 }
5875 /* Make the SV before us point to the SV after us. */
5876 if (DEBUG_C_TEST) {
5877 PerlIO_printf(Perl_debug_log, "previous is\n");
5878 sv_dump(current);
a29f6d03
NC
5879 PerlIO_printf(Perl_debug_log,
5880 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
d3d0e6f1
NC
5881 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5882 }
a29f6d03 5883 SV_COW_NEXT_SV_SET(current, sv);
d3d0e6f1
NC
5884 }
5885#endif
79072805 5886 SvREFCNT(sv) = refcnt;
1edc1566 5887 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
39cf41c2 5888 SvREFCNT(nsv) = 0;
463ee0b2 5889 del_SV(nsv);
79072805
LW
5890}
5891
803f2748
DM
5892/* We're about to free a GV which has a CV that refers back to us.
5893 * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
5894 * field) */
5895
5896STATIC void
5897S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
5898{
803f2748
DM
5899 SV *gvname;
5900 GV *anongv;
5901
5902 PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
5903
5904 /* be assertive! */
5905 assert(SvREFCNT(gv) == 0);
5906 assert(isGV(gv) && isGV_with_GP(gv));
5907 assert(GvGP(gv));
5908 assert(!CvANON(cv));
5909 assert(CvGV(cv) == gv);
5910
5911 /* will the CV shortly be freed by gp_free() ? */
5912 if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
b3f91e91 5913 SvANY(cv)->xcv_gv = NULL;
803f2748
DM
5914 return;
5915 }
5916
5917 /* if not, anonymise: */
1bac5ecc
BF
5918 gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
5919 ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
5920 : newSVpvn_flags( "__ANON__", 8, 0 );
5921 sv_catpvs(gvname, "::__ANON__");
803f2748
DM
5922 anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
5923 SvREFCNT_dec(gvname);
5924
5925 CvANON_on(cv);
cfc1e951 5926 CvCVGV_RC_on(cv);
b3f91e91 5927 SvANY(cv)->xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
803f2748
DM
5928}
5929
5930
c461cf8f
JH
5931/*
5932=for apidoc sv_clear
5933
645c22ef
DM
5934Clear an SV: call any destructors, free up any memory used by the body,
5935and free the body itself. The SV's head is I<not> freed, although
5936its type is set to all 1's so that it won't inadvertently be assumed
5937to be live during global destruction etc.
5938This function should only be called when REFCNT is zero. Most of the time
5939you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5940instead.
c461cf8f
JH
5941
5942=cut
5943*/
5944
79072805 5945void
5239d5c4 5946Perl_sv_clear(pTHX_ SV *const orig_sv)
79072805 5947{
27da23d5 5948 dVAR;
dd69841b 5949 HV *stash;
5239d5c4
DM
5950 U32 type;
5951 const struct body_details *sv_type_details;
5952 SV* iter_sv = NULL;
5953 SV* next_sv = NULL;
5954 register SV *sv = orig_sv;
104d7b69 5955 STRLEN hash_index;
82bb6deb 5956
7918f24d 5957 PERL_ARGS_ASSERT_SV_CLEAR;
5239d5c4
DM
5958
5959 /* within this loop, sv is the SV currently being freed, and
5960 * iter_sv is the most recent AV or whatever that's being iterated
5961 * over to provide more SVs */
5962
5963 while (sv) {
5964
df90f6af
DM
5965 type = SvTYPE(sv);
5966
5967 assert(SvREFCNT(sv) == 0);
e4787c0c 5968 assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
df90f6af
DM
5969
5970 if (type <= SVt_IV) {
5971 /* See the comment in sv.h about the collusion between this
5972 * early return and the overloading of the NULL slots in the
5973 * size table. */
5974 if (SvROK(sv))
5975 goto free_rv;
5976 SvFLAGS(sv) &= SVf_BREAK;
5977 SvFLAGS(sv) |= SVTYPEMASK;
5978 goto free_head;
5979 }
82bb6deb 5980
683f70bd
DM
5981 assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
5982
df90f6af 5983 if (type >= SVt_PVMG) {
683f70bd
DM
5984 if (SvOBJECT(sv)) {
5985 if (!curse(sv, 1)) goto get_next_sv;
64cbf396 5986 type = SvTYPE(sv); /* destructor may have changed it */
683f70bd 5987 }
007f907e
FC
5988 /* Free back-references before magic, in case the magic calls
5989 * Perl code that has weak references to sv. */
f350200e 5990 if (type == SVt_PVHV) {
007f907e 5991 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
f350200e
DM
5992 if (SvMAGIC(sv))
5993 mg_free(sv);
5994 }
5995 else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
df90f6af 5996 SvREFCNT_dec(SvOURSTASH(sv));
007f907e
FC
5997 } else if (SvMAGIC(sv)) {
5998 /* Free back-references before other types of magic. */
5999 sv_unmagic(sv, PERL_MAGIC_backref);
df90f6af 6000 mg_free(sv);
007f907e 6001 }
df90f6af
DM
6002 if (type == SVt_PVMG && SvPAD_TYPED(sv))
6003 SvREFCNT_dec(SvSTASH(sv));
e7fab884 6004 }
df90f6af
DM
6005 switch (type) {
6006 /* case SVt_BIND: */
6007 case SVt_PVIO:
6008 if (IoIFP(sv) &&
6009 IoIFP(sv) != PerlIO_stdin() &&
6010 IoIFP(sv) != PerlIO_stdout() &&
6011 IoIFP(sv) != PerlIO_stderr() &&
6012 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6013 {
6014 io_close(MUTABLE_IO(sv), FALSE);
5239d5c4 6015 }
df90f6af
DM
6016 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6017 PerlDir_close(IoDIRP(sv));
6018 IoDIRP(sv) = (DIR*)NULL;
6019 Safefree(IoTOP_NAME(sv));
6020 Safefree(IoFMT_NAME(sv));
6021 Safefree(IoBOTTOM_NAME(sv));
6022 goto freescalar;
6023 case SVt_REGEXP:
6024 /* FIXME for plugins */
6025 pregfree2((REGEXP*) sv);
6026 goto freescalar;
6027 case SVt_PVCV:
6028 case SVt_PVFM:
6029 cv_undef(MUTABLE_CV(sv));
6030 /* If we're in a stash, we don't own a reference to it.
6031 * However it does have a back reference to us, which needs to
6032 * be cleared. */
6033 if ((stash = CvSTASH(sv)))
6034 sv_del_backref(MUTABLE_SV(stash), sv);
6035 goto freescalar;
6036 case SVt_PVHV:
6037 if (PL_last_swash_hv == (const HV *)sv) {
6038 PL_last_swash_hv = NULL;
5239d5c4 6039 }
104d7b69
DM
6040 if (HvTOTALKEYS((HV*)sv) > 0) {
6041 const char *name;
6042 /* this statement should match the one at the beginning of
6043 * hv_undef_flags() */
6044 if ( PL_phase != PERL_PHASE_DESTRUCT
6045 && (name = HvNAME((HV*)sv)))
6046 {
6047 if (PL_stashcache)
6048 (void)hv_delete(PL_stashcache, name,
e577a7ae 6049 HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
104d7b69
DM
6050 hv_name_set((HV*)sv, NULL, 0, 0);
6051 }
6052
6053 /* save old iter_sv in unused SvSTASH field */
6054 assert(!SvOBJECT(sv));
6055 SvSTASH(sv) = (HV*)iter_sv;
6056 iter_sv = sv;
6057
6058 /* XXX ideally we should save the old value of hash_index
6059 * too, but I can't think of any place to hide it. The
6060 * effect of not saving it is that for freeing hashes of
6061 * hashes, we become quadratic in scanning the HvARRAY of
6062 * the top hash looking for new entries to free; but
6063 * hopefully this will be dwarfed by the freeing of all
6064 * the nested hashes. */
6065 hash_index = 0;
6066 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6067 goto get_next_sv; /* process this new sv */
6068 }
6069 /* free empty hash */
745edda6 6070 Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
ef60ac00 6071 assert(!HvARRAY((HV*)sv));
df90f6af
DM
6072 break;
6073 case SVt_PVAV:
db93c0c4 6074 {
df90f6af
DM
6075 AV* av = MUTABLE_AV(sv);
6076 if (PL_comppad == av) {
6077 PL_comppad = NULL;
6078 PL_curpad = NULL;
6079 }
6080 if (AvREAL(av) && AvFILLp(av) > -1) {
6081 next_sv = AvARRAY(av)[AvFILLp(av)--];
6082 /* save old iter_sv in top-most slot of AV,
6083 * and pray that it doesn't get wiped in the meantime */
6084 AvARRAY(av)[AvMAX(av)] = iter_sv;
6085 iter_sv = sv;
6086 goto get_next_sv; /* process this new sv */
6087 }
6088 Safefree(AvALLOC(av));
db93c0c4 6089 }
df90f6af
DM
6090
6091 break;
6092 case SVt_PVLV:
6093 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6094 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6095 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6096 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6097 }
6098 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
6099 SvREFCNT_dec(LvTARG(sv));
6100 case SVt_PVGV:
6101 if (isGV_with_GP(sv)) {
6102 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
00169e2c 6103 && HvENAME_get(stash))
df90f6af
DM
6104 mro_method_changed_in(stash);
6105 gp_free(MUTABLE_GV(sv));
6106 if (GvNAME_HEK(sv))
6107 unshare_hek(GvNAME_HEK(sv));
6108 /* If we're in a stash, we don't own a reference to it.
6109 * However it does have a back reference to us, which
6110 * needs to be cleared. */
6111 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6112 sv_del_backref(MUTABLE_SV(stash), sv);
6113 }
6114 /* FIXME. There are probably more unreferenced pointers to SVs
6115 * in the interpreter struct that we should check and tidy in
6116 * a similar fashion to this: */
6117 if ((const GV *)sv == PL_last_in_gv)
6118 PL_last_in_gv = NULL;
6119 case SVt_PVMG:
6120 case SVt_PVNV:
6121 case SVt_PVIV:
6122 case SVt_PV:
6123 freescalar:
6124 /* Don't bother with SvOOK_off(sv); as we're only going to
6125 * free it. */
6126 if (SvOOK(sv)) {
6127 STRLEN offset;
6128 SvOOK_offset(sv, offset);
6129 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6130 /* Don't even bother with turning off the OOK flag. */
6131 }
6132 if (SvROK(sv)) {
6133 free_rv:
6134 {
6135 SV * const target = SvRV(sv);
6136 if (SvWEAKREF(sv))
6137 sv_del_backref(target, sv);
6138 else
b98b62bc 6139 next_sv = target;
5302ffd4 6140 }
df90f6af
DM
6141 }
6142#ifdef PERL_OLD_COPY_ON_WRITE
6143 else if (SvPVX_const(sv)
6144 && !(SvTYPE(sv) == SVt_PVIO
6145 && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6146 {
6147 if (SvIsCOW(sv)) {
6148 if (DEBUG_C_TEST) {
6149 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6150 sv_dump(sv);
6151 }
6152 if (SvLEN(sv)) {
6153 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6154 } else {
6155 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6156 }
5302ffd4 6157
df90f6af
DM
6158 SvFAKE_off(sv);
6159 } else if (SvLEN(sv)) {
6160 Safefree(SvPVX_const(sv));
6161 }
6162 }
765f542d 6163#else
df90f6af
DM
6164 else if (SvPVX_const(sv) && SvLEN(sv)
6165 && !(SvTYPE(sv) == SVt_PVIO
6166 && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6167 Safefree(SvPVX_mutable(sv));
6168 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
6169 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6170 SvFAKE_off(sv);
6171 }
765f542d 6172#endif
df90f6af
DM
6173 break;
6174 case SVt_NV:
6175 break;
6176 }
79072805 6177
df90f6af 6178 free_body:
5239d5c4 6179
df90f6af
DM
6180 SvFLAGS(sv) &= SVf_BREAK;
6181 SvFLAGS(sv) |= SVTYPEMASK;
893645bd 6182
df90f6af
DM
6183 sv_type_details = bodies_by_type + type;
6184 if (sv_type_details->arena) {
6185 del_body(((char *)SvANY(sv) + sv_type_details->offset),
6186 &PL_body_roots[type]);
6187 }
6188 else if (sv_type_details->body_size) {
6189 safefree(SvANY(sv));
6190 }
5239d5c4
DM
6191
6192 free_head:
6193 /* caller is responsible for freeing the head of the original sv */
6194 if (sv != orig_sv && !SvREFCNT(sv))
6195 del_SV(sv);
6196
6197 /* grab and free next sv, if any */
6198 get_next_sv:
6199 while (1) {
6200 sv = NULL;
6201 if (next_sv) {
6202 sv = next_sv;
6203 next_sv = NULL;
6204 }
6205 else if (!iter_sv) {
6206 break;
6207 } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6208 AV *const av = (AV*)iter_sv;
6209 if (AvFILLp(av) > -1) {
6210 sv = AvARRAY(av)[AvFILLp(av)--];
6211 }
6212 else { /* no more elements of current AV to free */
6213 sv = iter_sv;
6214 type = SvTYPE(sv);
6215 /* restore previous value, squirrelled away */
6216 iter_sv = AvARRAY(av)[AvMAX(av)];
6217 Safefree(AvALLOC(av));
6218 goto free_body;
6219 }
104d7b69 6220 } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6d1c68e6
FC
6221 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6222 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
7d6175ef 6223 /* no more elements of current HV to free */
104d7b69
DM
6224 sv = iter_sv;
6225 type = SvTYPE(sv);
9c80917f
DM
6226 /* Restore previous value of iter_sv, squirrelled away */
6227 assert(!SvOBJECT(sv));
6228 iter_sv = (SV*)SvSTASH(sv);
104d7b69
DM
6229
6230 /* ideally we should restore the old hash_index here,
6231 * but we don't currently save the old value */
6232 hash_index = 0;
6233
6234 /* free any remaining detritus from the hash struct */
6235 Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6236 assert(!HvARRAY((HV*)sv));
6237 goto free_body;
6238 }
5239d5c4
DM
6239 }
6240
6241 /* unrolled SvREFCNT_dec and sv_free2 follows: */
6242
6243 if (!sv)
6244 continue;
6245 if (!SvREFCNT(sv)) {
6246 sv_free(sv);
6247 continue;
6248 }
6249 if (--(SvREFCNT(sv)))
6250 continue;
df90f6af 6251#ifdef DEBUGGING
5239d5c4
DM
6252 if (SvTEMP(sv)) {
6253 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6254 "Attempt to free temp prematurely: SV 0x%"UVxf
6255 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6256 continue;
6257 }
df90f6af 6258#endif
5239d5c4
DM
6259 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6260 /* make sure SvREFCNT(sv)==0 happens very seldom */
6261 SvREFCNT(sv) = (~(U32)0)/2;
6262 continue;
6263 }
6264 break;
6265 } /* while 1 */
6266
6267 } /* while sv */
79072805
LW
6268}
6269
4155e4fe
FC
6270/* This routine curses the sv itself, not the object referenced by sv. So
6271 sv does not have to be ROK. */
6272
6273static bool
6274S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6275 dVAR;
6276
6277 PERL_ARGS_ASSERT_CURSE;
6278 assert(SvOBJECT(sv));
6279
6280 if (PL_defstash && /* Still have a symbol table? */
6281 SvDESTROYABLE(sv))
6282 {
6283 dSP;
6284 HV* stash;
6285 do {
6286 CV* destructor;
6287 stash = SvSTASH(sv);
6288 destructor = StashHANDLER(stash,DESTROY);
6289 if (destructor
6290 /* A constant subroutine can have no side effects, so
6291 don't bother calling it. */
6292 && !CvCONST(destructor)
6293 /* Don't bother calling an empty destructor */
6294 && (CvISXSUB(destructor)
6295 || (CvSTART(destructor)
6296 && (CvSTART(destructor)->op_next->op_type
6297 != OP_LEAVESUB))))
6298 {
6299 SV* const tmpref = newRV(sv);
6300 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6301 ENTER;
6302 PUSHSTACKi(PERLSI_DESTROY);
6303 EXTEND(SP, 2);
6304 PUSHMARK(SP);
6305 PUSHs(tmpref);
6306 PUTBACK;
6307 call_sv(MUTABLE_SV(destructor),
6308 G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6309 POPSTACK;
6310 SPAGAIN;
6311 LEAVE;
6312 if(SvREFCNT(tmpref) < 2) {
6313 /* tmpref is not kept alive! */
6314 SvREFCNT(sv)--;
6315 SvRV_set(tmpref, NULL);
6316 SvROK_off(tmpref);
6317 }
6318 SvREFCNT_dec(tmpref);
6319 }
6320 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6321
6322
6323 if (check_refcnt && SvREFCNT(sv)) {
6324 if (PL_in_clean_objs)
6325 Perl_croak(aTHX_
d0c0e7dd
FC
6326 "DESTROY created new reference to dead object '%"HEKf"'",
6327 HEKfARG(HvNAME_HEK(stash)));
4155e4fe
FC
6328 /* DESTROY gave object new lease on life */
6329 return FALSE;
6330 }
6331 }
6332
6333 if (SvOBJECT(sv)) {
6334 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
6335 SvOBJECT_off(sv); /* Curse the object. */
6336 if (SvTYPE(sv) != SVt_PVIO)
6337 --PL_sv_objcount;/* XXX Might want something more general */
6338 }
6339 return TRUE;
6340}
6341
645c22ef
DM
6342/*
6343=for apidoc sv_newref
6344
6345Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
6346instead.
6347
6348=cut
6349*/
6350
79072805 6351SV *
af828c01 6352Perl_sv_newref(pTHX_ SV *const sv)
79072805 6353{
96a5add6 6354 PERL_UNUSED_CONTEXT;
463ee0b2 6355 if (sv)
4db098f4 6356 (SvREFCNT(sv))++;
79072805
LW
6357 return sv;
6358}
6359
c461cf8f
JH
6360/*
6361=for apidoc sv_free
6362
645c22ef
DM
6363Decrement an SV's reference count, and if it drops to zero, call
6364C<sv_clear> to invoke destructors and free up any memory used by
6365the body; finally, deallocate the SV's head itself.
6366Normally called via a wrapper macro C<SvREFCNT_dec>.
c461cf8f
JH
6367
6368=cut
6369*/
6370
79072805 6371void
af828c01 6372Perl_sv_free(pTHX_ SV *const sv)
79072805 6373{
27da23d5 6374 dVAR;
79072805
LW
6375 if (!sv)
6376 return;
a0d0e21e
LW
6377 if (SvREFCNT(sv) == 0) {
6378 if (SvFLAGS(sv) & SVf_BREAK)
645c22ef
DM
6379 /* this SV's refcnt has been artificially decremented to
6380 * trigger cleanup */
a0d0e21e 6381 return;
3280af22 6382 if (PL_in_clean_all) /* All is fair */
1edc1566 6383 return;
d689ffdd
JP
6384 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6385 /* make sure SvREFCNT(sv)==0 happens very seldom */
6386 SvREFCNT(sv) = (~(U32)0)/2;
6387 return;
6388 }
41e4abd8 6389 if (ckWARN_d(WARN_INTERNAL)) {
41e4abd8
NC
6390#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6391 Perl_dump_sv_child(aTHX_ sv);
e4c5322d
DM
6392#else
6393 #ifdef DEBUG_LEAKING_SCALARS
bfd95973 6394 sv_dump(sv);
e4c5322d 6395 #endif
bfd95973
NC
6396#ifdef DEBUG_LEAKING_SCALARS_ABORT
6397 if (PL_warnhook == PERL_WARNHOOK_FATAL
6398 || ckDEAD(packWARN(WARN_INTERNAL))) {
6399 /* Don't let Perl_warner cause us to escape our fate: */
6400 abort();
6401 }
6402#endif
6403 /* This may not return: */
6404 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6405 "Attempt to free unreferenced scalar: SV 0x%"UVxf
6406 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
41e4abd8
NC
6407#endif
6408 }
77abb4c6
NC
6409#ifdef DEBUG_LEAKING_SCALARS_ABORT
6410 abort();
6411#endif
79072805
LW
6412 return;
6413 }
4db098f4 6414 if (--(SvREFCNT(sv)) > 0)
8990e307 6415 return;
8c4d3c90
NC
6416 Perl_sv_free2(aTHX_ sv);
6417}
6418
6419void
af828c01 6420Perl_sv_free2(pTHX_ SV *const sv)
8c4d3c90 6421{
27da23d5 6422 dVAR;
7918f24d
NC
6423
6424 PERL_ARGS_ASSERT_SV_FREE2;
6425
463ee0b2
LW
6426#ifdef DEBUGGING
6427 if (SvTEMP(sv)) {
9b387841
NC
6428 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6429 "Attempt to free temp prematurely: SV 0x%"UVxf
6430 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
79072805 6431 return;
79072805 6432 }
463ee0b2 6433#endif
d689ffdd
JP
6434 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6435 /* make sure SvREFCNT(sv)==0 happens very seldom */
6436 SvREFCNT(sv) = (~(U32)0)/2;
6437 return;
6438 }
79072805 6439 sv_clear(sv);
477f5d66
CS
6440 if (! SvREFCNT(sv))
6441 del_SV(sv);
79072805
LW
6442}
6443
954c1994
GS
6444/*
6445=for apidoc sv_len
6446
645c22ef
DM
6447Returns the length of the string in the SV. Handles magic and type
6448coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
954c1994
GS
6449
6450=cut
6451*/
6452
79072805 6453STRLEN
af828c01 6454Perl_sv_len(pTHX_ register SV *const sv)
79072805 6455{
463ee0b2 6456 STRLEN len;
79072805
LW
6457
6458 if (!sv)
6459 return 0;
6460
8990e307 6461 if (SvGMAGICAL(sv))
565764a8 6462 len = mg_length(sv);
8990e307 6463 else
4d84ee25 6464 (void)SvPV_const(sv, len);
463ee0b2 6465 return len;
79072805
LW
6466}
6467
c461cf8f
JH
6468/*
6469=for apidoc sv_len_utf8
6470
6471Returns the number of characters in the string in an SV, counting wide
1e54db1a 6472UTF-8 bytes as a single character. Handles magic and type coercion.
c461cf8f
JH
6473
6474=cut
6475*/
6476
7e8c5dac 6477/*
c05a5c57 6478 * The length is cached in PERL_MAGIC_utf8, in the mg_len field. Also the
9564a3bd
NC
6479 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6480 * (Note that the mg_len is not the length of the mg_ptr field.
6481 * This allows the cache to store the character length of the string without
6482 * needing to malloc() extra storage to attach to the mg_ptr.)
7a5fa8a2 6483 *
7e8c5dac
HS
6484 */
6485
a0ed51b3 6486STRLEN
af828c01 6487Perl_sv_len_utf8(pTHX_ register SV *const sv)
a0ed51b3 6488{
a0ed51b3
LW
6489 if (!sv)
6490 return 0;
6491
a0ed51b3 6492 if (SvGMAGICAL(sv))
b76347f2 6493 return mg_length(sv);
a0ed51b3 6494 else
b76347f2 6495 {
26346457 6496 STRLEN len;
e62f0680 6497 const U8 *s = (U8*)SvPV_const(sv, len);
7e8c5dac 6498
26346457
NC
6499 if (PL_utf8cache) {
6500 STRLEN ulen;
fe5bfecd 6501 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
26346457 6502
6ef2ab89
NC
6503 if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6504 if (mg->mg_len != -1)
6505 ulen = mg->mg_len;
6506 else {
6507 /* We can use the offset cache for a headstart.
6508 The longer value is stored in the first pair. */
6509 STRLEN *cache = (STRLEN *) mg->mg_ptr;
6510
6511 ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6512 s + len);
6513 }
6514
26346457
NC
6515 if (PL_utf8cache < 0) {
6516 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
9df83ffd 6517 assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
26346457
NC
6518 }
6519 }
6520 else {
6521 ulen = Perl_utf8_length(aTHX_ s, s + len);
ec49a12c 6522 utf8_mg_len_cache_update(sv, &mg, ulen);
cb9e20bb 6523 }
26346457 6524 return ulen;
7e8c5dac 6525 }
26346457 6526 return Perl_utf8_length(aTHX_ s, s + len);
7e8c5dac
HS
6527 }
6528}
6529
9564a3bd
NC
6530/* Walk forwards to find the byte corresponding to the passed in UTF-8
6531 offset. */
bdf30dd6 6532static STRLEN
721e86b6 6533S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
79d2d448 6534 STRLEN *const uoffset_p, bool *const at_end)
bdf30dd6
NC
6535{
6536 const U8 *s = start;
3e2d3818 6537 STRLEN uoffset = *uoffset_p;
bdf30dd6 6538
7918f24d
NC
6539 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6540
3e2d3818
NC
6541 while (s < send && uoffset) {
6542 --uoffset;
bdf30dd6 6543 s += UTF8SKIP(s);
3e2d3818 6544 }
79d2d448
NC
6545 if (s == send) {
6546 *at_end = TRUE;
6547 }
6548 else if (s > send) {
6549 *at_end = TRUE;
bdf30dd6
NC
6550 /* This is the existing behaviour. Possibly it should be a croak, as
6551 it's actually a bounds error */
6552 s = send;
6553 }
3e2d3818 6554 *uoffset_p -= uoffset;
bdf30dd6
NC
6555 return s - start;
6556}
6557
9564a3bd
NC
6558/* Given the length of the string in both bytes and UTF-8 characters, decide
6559 whether to walk forwards or backwards to find the byte corresponding to
6560 the passed in UTF-8 offset. */
c336ad0b 6561static STRLEN
721e86b6 6562S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
503752a1 6563 STRLEN uoffset, const STRLEN uend)
c336ad0b
NC
6564{
6565 STRLEN backw = uend - uoffset;
7918f24d
NC
6566
6567 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6568
c336ad0b 6569 if (uoffset < 2 * backw) {
25a8a4ef 6570 /* The assumption is that going forwards is twice the speed of going
c336ad0b
NC
6571 forward (that's where the 2 * backw comes from).
6572 (The real figure of course depends on the UTF-8 data.) */
503752a1
NC
6573 const U8 *s = start;
6574
6575 while (s < send && uoffset--)
6576 s += UTF8SKIP(s);
6577 assert (s <= send);
6578 if (s > send)
6579 s = send;
6580 return s - start;
c336ad0b
NC
6581 }
6582
6583 while (backw--) {
6584 send--;
6585 while (UTF8_IS_CONTINUATION(*send))
6586 send--;
6587 }
6588 return send - start;
6589}
6590
9564a3bd
NC
6591/* For the string representation of the given scalar, find the byte
6592 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
6593 give another position in the string, *before* the sought offset, which
6594 (which is always true, as 0, 0 is a valid pair of positions), which should
6595 help reduce the amount of linear searching.
6596 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6597 will be used to reduce the amount of linear searching. The cache will be
6598 created if necessary, and the found value offered to it for update. */
28ccbf94 6599static STRLEN
af828c01 6600S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
3e2d3818 6601 const U8 *const send, STRLEN uoffset,
7918f24d
NC
6602 STRLEN uoffset0, STRLEN boffset0)
6603{
7087a21c 6604 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
c336ad0b 6605 bool found = FALSE;
79d2d448 6606 bool at_end = FALSE;
c336ad0b 6607
7918f24d
NC
6608 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6609
75c33c12
NC
6610 assert (uoffset >= uoffset0);
6611
48f9cf71
NC
6612 if (!uoffset)
6613 return 0;
6614
f89a570b
CS
6615 if (!SvREADONLY(sv)
6616 && PL_utf8cache
6617 && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6618 (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
d8b2e1f9
NC
6619 if ((*mgp)->mg_ptr) {
6620 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6621 if (cache[0] == uoffset) {
6622 /* An exact match. */
6623 return cache[1];
6624 }
ab455f60
NC
6625 if (cache[2] == uoffset) {
6626 /* An exact match. */
6627 return cache[3];
6628 }
668af93f
NC
6629
6630 if (cache[0] < uoffset) {
d8b2e1f9
NC
6631 /* The cache already knows part of the way. */
6632 if (cache[0] > uoffset0) {
6633 /* The cache knows more than the passed in pair */
6634 uoffset0 = cache[0];
6635 boffset0 = cache[1];
6636 }
6637 if ((*mgp)->mg_len != -1) {
6638 /* And we know the end too. */
6639 boffset = boffset0
721e86b6 6640 + sv_pos_u2b_midway(start + boffset0, send,
d8b2e1f9
NC
6641 uoffset - uoffset0,
6642 (*mgp)->mg_len - uoffset0);
6643 } else {
3e2d3818 6644 uoffset -= uoffset0;
d8b2e1f9 6645 boffset = boffset0
721e86b6 6646 + sv_pos_u2b_forwards(start + boffset0,
79d2d448 6647 send, &uoffset, &at_end);
3e2d3818 6648 uoffset += uoffset0;
d8b2e1f9 6649 }
dd7c5fd3
NC
6650 }
6651 else if (cache[2] < uoffset) {
6652 /* We're between the two cache entries. */
6653 if (cache[2] > uoffset0) {
6654 /* and the cache knows more than the passed in pair */
6655 uoffset0 = cache[2];
6656 boffset0 = cache[3];
6657 }
6658
668af93f 6659 boffset = boffset0
721e86b6 6660 + sv_pos_u2b_midway(start + boffset0,
668af93f
NC
6661 start + cache[1],
6662 uoffset - uoffset0,
6663 cache[0] - uoffset0);
dd7c5fd3
NC
6664 } else {
6665 boffset = boffset0
721e86b6 6666 + sv_pos_u2b_midway(start + boffset0,
dd7c5fd3
NC
6667 start + cache[3],
6668 uoffset - uoffset0,
6669 cache[2] - uoffset0);
d8b2e1f9 6670 }
668af93f 6671 found = TRUE;
d8b2e1f9
NC
6672 }
6673 else if ((*mgp)->mg_len != -1) {
75c33c12
NC
6674 /* If we can take advantage of a passed in offset, do so. */
6675 /* In fact, offset0 is either 0, or less than offset, so don't
6676 need to worry about the other possibility. */
6677 boffset = boffset0
721e86b6 6678 + sv_pos_u2b_midway(start + boffset0, send,
75c33c12
NC
6679 uoffset - uoffset0,
6680 (*mgp)->mg_len - uoffset0);
c336ad0b
NC
6681 found = TRUE;
6682 }
28ccbf94 6683 }
c336ad0b
NC
6684
6685 if (!found || PL_utf8cache < 0) {
3e2d3818
NC
6686 STRLEN real_boffset;
6687 uoffset -= uoffset0;
6688 real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
79d2d448 6689 send, &uoffset, &at_end);
3e2d3818 6690 uoffset += uoffset0;
75c33c12 6691
9df83ffd
NC
6692 if (found && PL_utf8cache < 0)
6693 assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6694 real_boffset, sv);
c336ad0b 6695 boffset = real_boffset;
28ccbf94 6696 }
0905937d 6697
79d2d448
NC
6698 if (PL_utf8cache) {
6699 if (at_end)
6700 utf8_mg_len_cache_update(sv, mgp, uoffset);
6701 else
6702 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6703 }
28ccbf94
NC
6704 return boffset;
6705}
6706
9564a3bd
NC
6707
6708/*
d931b1be 6709=for apidoc sv_pos_u2b_flags
9564a3bd
NC
6710
6711Converts the value pointed to by offsetp from a count of UTF-8 chars from
6712the start of the string, to a count of the equivalent number of bytes; if
6713lenp is non-zero, it does the same to lenp, but this time starting from
d931b1be
NC
6714the offset, rather than from the start of the string. Handles type coercion.
6715I<flags> is passed to C<SvPV_flags>, and usually should be
6716C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
9564a3bd
NC
6717
6718=cut
6719*/
6720
6721/*
d931b1be 6722 * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
c05a5c57 6723 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
6724 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6725 *
6726 */
6727
d931b1be
NC
6728STRLEN
6729Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6730 U32 flags)
a0ed51b3 6731{
245d4a47 6732 const U8 *start;
a0ed51b3 6733 STRLEN len;
d931b1be 6734 STRLEN boffset;
a0ed51b3 6735
d931b1be 6736 PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7918f24d 6737
d931b1be 6738 start = (U8*)SvPV_flags(sv, len, flags);
7e8c5dac 6739 if (len) {
bdf30dd6 6740 const U8 * const send = start + len;
0905937d 6741 MAGIC *mg = NULL;
d931b1be 6742 boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
bdf30dd6 6743
48f9cf71
NC
6744 if (lenp
6745 && *lenp /* don't bother doing work for 0, as its bytes equivalent
6746 is 0, and *lenp is already set to that. */) {
28ccbf94 6747 /* Convert the relative offset to absolute. */
777f7c56 6748 const STRLEN uoffset2 = uoffset + *lenp;
721e86b6
AL
6749 const STRLEN boffset2
6750 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
28ccbf94 6751 uoffset, boffset) - boffset;
bdf30dd6 6752
28ccbf94 6753 *lenp = boffset2;
bdf30dd6 6754 }
d931b1be
NC
6755 } else {
6756 if (lenp)
6757 *lenp = 0;
6758 boffset = 0;
a0ed51b3 6759 }
e23c8137 6760
d931b1be 6761 return boffset;
a0ed51b3
LW
6762}
6763
777f7c56
EB
6764/*
6765=for apidoc sv_pos_u2b
6766
6767Converts the value pointed to by offsetp from a count of UTF-8 chars from
6768the start of the string, to a count of the equivalent number of bytes; if
6769lenp is non-zero, it does the same to lenp, but this time starting from
6770the offset, rather than from the start of the string. Handles magic and
6771type coercion.
6772
d931b1be
NC
6773Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6774than 2Gb.
6775
777f7c56
EB
6776=cut
6777*/
6778
6779/*
6780 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6781 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6782 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6783 *
6784 */
6785
6786/* This function is subject to size and sign problems */
6787
6788void
6789Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6790{
d931b1be
NC
6791 PERL_ARGS_ASSERT_SV_POS_U2B;
6792
777f7c56
EB
6793 if (lenp) {
6794 STRLEN ulen = (STRLEN)*lenp;
d931b1be
NC
6795 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6796 SV_GMAGIC|SV_CONST_RETURN);
777f7c56
EB
6797 *lenp = (I32)ulen;
6798 } else {
d931b1be
NC
6799 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6800 SV_GMAGIC|SV_CONST_RETURN);
777f7c56 6801 }
777f7c56
EB
6802}
6803
ec49a12c
NC
6804static void
6805S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6806 const STRLEN ulen)
6807{
6808 PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
6809 if (SvREADONLY(sv))
6810 return;
6811
6812 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6813 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6814 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
6815 }
6816 assert(*mgp);
6817
6818 (*mgp)->mg_len = ulen;
6819 /* For now, treat "overflowed" as "still unknown". See RT #72924. */
6820 if (ulen != (STRLEN) (*mgp)->mg_len)
6821 (*mgp)->mg_len = -1;
6822}
6823
9564a3bd
NC
6824/* Create and update the UTF8 magic offset cache, with the proffered utf8/
6825 byte length pairing. The (byte) length of the total SV is passed in too,
6826 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6827 may not have updated SvCUR, so we can't rely on reading it directly.
6828
6829 The proffered utf8/byte length pairing isn't used if the cache already has
6830 two pairs, and swapping either for the proffered pair would increase the
6831 RMS of the intervals between known byte offsets.
6832
6833 The cache itself consists of 4 STRLEN values
6834 0: larger UTF-8 offset
6835 1: corresponding byte offset
6836 2: smaller UTF-8 offset
6837 3: corresponding byte offset
6838
6839 Unused cache pairs have the value 0, 0.
6840 Keeping the cache "backwards" means that the invariant of
6841 cache[0] >= cache[2] is maintained even with empty slots, which means that
6842 the code that uses it doesn't need to worry if only 1 entry has actually
6843 been set to non-zero. It also makes the "position beyond the end of the
6844 cache" logic much simpler, as the first slot is always the one to start
6845 from.
645c22ef 6846*/
ec07b5e0 6847static void
ac1e9476
SS
6848S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6849 const STRLEN utf8, const STRLEN blen)
ec07b5e0
NC
6850{
6851 STRLEN *cache;
7918f24d
NC
6852
6853 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6854
ec07b5e0
NC
6855 if (SvREADONLY(sv))
6856 return;
6857
f89a570b
CS
6858 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6859 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
ec07b5e0
NC
6860 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6861 0);
6862 (*mgp)->mg_len = -1;
6863 }
6864 assert(*mgp);
6865
6866 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6867 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6868 (*mgp)->mg_ptr = (char *) cache;
6869 }
6870 assert(cache);
6871
ab8be49d
NC
6872 if (PL_utf8cache < 0 && SvPOKp(sv)) {
6873 /* SvPOKp() because it's possible that sv has string overloading, and
6874 therefore is a reference, hence SvPVX() is actually a pointer.
6875 This cures the (very real) symptoms of RT 69422, but I'm not actually
6876 sure whether we should even be caching the results of UTF-8
6877 operations on overloading, given that nothing stops overloading
6878 returning a different value every time it's called. */
ef816a78 6879 const U8 *start = (const U8 *) SvPVX_const(sv);
6448472a 6880 const STRLEN realutf8 = utf8_length(start, start + byte);
ec07b5e0 6881
9df83ffd
NC
6882 assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
6883 sv);
ec07b5e0 6884 }
ab455f60
NC
6885
6886 /* Cache is held with the later position first, to simplify the code
6887 that deals with unbounded ends. */
6888
6889 ASSERT_UTF8_CACHE(cache);
6890 if (cache[1] == 0) {
6891 /* Cache is totally empty */
6892 cache[0] = utf8;
6893 cache[1] = byte;
6894 } else if (cache[3] == 0) {
6895 if (byte > cache[1]) {
6896 /* New one is larger, so goes first. */
6897 cache[2] = cache[0];
6898 cache[3] = cache[1];
6899 cache[0] = utf8;
6900 cache[1] = byte;
6901 } else {
6902 cache[2] = utf8;
6903 cache[3] = byte;
6904 }
6905 } else {
6906#define THREEWAY_SQUARE(a,b,c,d) \
6907 ((float)((d) - (c))) * ((float)((d) - (c))) \
6908 + ((float)((c) - (b))) * ((float)((c) - (b))) \
6909 + ((float)((b) - (a))) * ((float)((b) - (a)))
6910
6911 /* Cache has 2 slots in use, and we know three potential pairs.
6912 Keep the two that give the lowest RMS distance. Do the
486ec47a 6913 calculation in bytes simply because we always know the byte
ab455f60
NC
6914 length. squareroot has the same ordering as the positive value,
6915 so don't bother with the actual square root. */
6916 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6917 if (byte > cache[1]) {
6918 /* New position is after the existing pair of pairs. */
6919 const float keep_earlier
6920 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6921 const float keep_later
6922 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6923
6924 if (keep_later < keep_earlier) {
6925 if (keep_later < existing) {
6926 cache[2] = cache[0];
6927 cache[3] = cache[1];
6928 cache[0] = utf8;
6929 cache[1] = byte;
6930 }
6931 }
6932 else {
6933 if (keep_earlier < existing) {
6934 cache[0] = utf8;
6935 cache[1] = byte;
6936 }
6937 }
6938 }
57d7fbf1
NC
6939 else if (byte > cache[3]) {
6940 /* New position is between the existing pair of pairs. */
6941 const float keep_earlier
6942 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6943 const float keep_later
6944 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6945
6946 if (keep_later < keep_earlier) {
6947 if (keep_later < existing) {
6948 cache[2] = utf8;
6949 cache[3] = byte;
6950 }
6951 }
6952 else {
6953 if (keep_earlier < existing) {
6954 cache[0] = utf8;
6955 cache[1] = byte;
6956 }
6957 }
6958 }
6959 else {
6960 /* New position is before the existing pair of pairs. */
6961 const float keep_earlier
6962 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6963 const float keep_later
6964 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6965
6966 if (keep_later < keep_earlier) {
6967 if (keep_later < existing) {
6968 cache[2] = utf8;
6969 cache[3] = byte;
6970 }
6971 }
6972 else {
6973 if (keep_earlier < existing) {
6974 cache[0] = cache[2];
6975 cache[1] = cache[3];
6976 cache[2] = utf8;
6977 cache[3] = byte;
6978 }
6979 }
6980 }
ab455f60 6981 }
0905937d 6982 ASSERT_UTF8_CACHE(cache);
ec07b5e0
NC
6983}
6984
ec07b5e0 6985/* We already know all of the way, now we may be able to walk back. The same
25a8a4ef
NC
6986 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6987 backward is half the speed of walking forward. */
ec07b5e0 6988static STRLEN
ac1e9476
SS
6989S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6990 const U8 *end, STRLEN endu)
ec07b5e0
NC
6991{
6992 const STRLEN forw = target - s;
6993 STRLEN backw = end - target;
6994
7918f24d
NC
6995 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6996
ec07b5e0 6997 if (forw < 2 * backw) {
6448472a 6998 return utf8_length(s, target);
ec07b5e0
NC
6999 }
7000
7001 while (end > target) {
7002 end--;
7003 while (UTF8_IS_CONTINUATION(*end)) {
7004 end--;
7005 }
7006 endu--;
7007 }
7008 return endu;
7009}
7010
9564a3bd
NC
7011/*
7012=for apidoc sv_pos_b2u
7013
7014Converts the value pointed to by offsetp from a count of bytes from the
7015start of the string, to a count of the equivalent number of UTF-8 chars.
7016Handles magic and type coercion.
7017
7018=cut
7019*/
7020
7021/*
7022 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
c05a5c57 7023 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
9564a3bd
NC
7024 * byte offsets.
7025 *
7026 */
a0ed51b3 7027void
ac1e9476 7028Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
a0ed51b3 7029{
83003860 7030 const U8* s;
ec07b5e0 7031 const STRLEN byte = *offsetp;
7087a21c 7032 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
ab455f60 7033 STRLEN blen;
ec07b5e0
NC
7034 MAGIC* mg = NULL;
7035 const U8* send;
a922f900 7036 bool found = FALSE;
a0ed51b3 7037
7918f24d
NC
7038 PERL_ARGS_ASSERT_SV_POS_B2U;
7039
a0ed51b3
LW
7040 if (!sv)
7041 return;
7042
ab455f60 7043 s = (const U8*)SvPV_const(sv, blen);
7e8c5dac 7044
ab455f60 7045 if (blen < byte)
ec07b5e0 7046 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7e8c5dac 7047
ec07b5e0 7048 send = s + byte;
a67d7df9 7049
f89a570b
CS
7050 if (!SvREADONLY(sv)
7051 && PL_utf8cache
7052 && SvTYPE(sv) >= SVt_PVMG
7053 && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7054 {
ffca234a 7055 if (mg->mg_ptr) {
d4c19fe8 7056 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
b9f984a5 7057 if (cache[1] == byte) {
ec07b5e0
NC
7058 /* An exact match. */
7059 *offsetp = cache[0];
ec07b5e0 7060 return;
7e8c5dac 7061 }
ab455f60
NC
7062 if (cache[3] == byte) {
7063 /* An exact match. */
7064 *offsetp = cache[2];
7065 return;
7066 }
668af93f
NC
7067
7068 if (cache[1] < byte) {
ec07b5e0 7069 /* We already know part of the way. */
b9f984a5
NC
7070 if (mg->mg_len != -1) {
7071 /* Actually, we know the end too. */
7072 len = cache[0]
7073 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
ab455f60 7074 s + blen, mg->mg_len - cache[0]);
b9f984a5 7075 } else {
6448472a 7076 len = cache[0] + utf8_length(s + cache[1], send);
b9f984a5 7077 }
7e8c5dac 7078 }
9f985e4c
NC
7079 else if (cache[3] < byte) {
7080 /* We're between the two cached pairs, so we do the calculation
7081 offset by the byte/utf-8 positions for the earlier pair,
7082 then add the utf-8 characters from the string start to
7083 there. */
7084 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7085 s + cache[1], cache[0] - cache[2])
7086 + cache[2];
7087
7088 }
7089 else { /* cache[3] > byte */
7090 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7091 cache[2]);
7e8c5dac 7092
7e8c5dac 7093 }
ec07b5e0 7094 ASSERT_UTF8_CACHE(cache);
a922f900 7095 found = TRUE;
ffca234a 7096 } else if (mg->mg_len != -1) {
ab455f60 7097 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
a922f900 7098 found = TRUE;
7e8c5dac 7099 }
a0ed51b3 7100 }
a922f900 7101 if (!found || PL_utf8cache < 0) {
6448472a 7102 const STRLEN real_len = utf8_length(s, send);
a922f900 7103
9df83ffd
NC
7104 if (found && PL_utf8cache < 0)
7105 assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
a922f900 7106 len = real_len;
ec07b5e0
NC
7107 }
7108 *offsetp = len;
7109
0d7caf4c
NC
7110 if (PL_utf8cache) {
7111 if (blen == byte)
7112 utf8_mg_len_cache_update(sv, &mg, len);
7113 else
7114 utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7115 }
a0ed51b3
LW
7116}
7117
9df83ffd
NC
7118static void
7119S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7120 STRLEN real, SV *const sv)
7121{
7122 PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7123
7124 /* As this is debugging only code, save space by keeping this test here,
7125 rather than inlining it in all the callers. */
7126 if (from_cache == real)
7127 return;
7128
7129 /* Need to turn the assertions off otherwise we may recurse infinitely
7130 while printing error messages. */
7131 SAVEI8(PL_utf8cache);
7132 PL_utf8cache = 0;
7133 Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7134 func, (UV) from_cache, (UV) real, SVfARG(sv));
7135}
7136
954c1994
GS
7137/*
7138=for apidoc sv_eq
7139
7140Returns a boolean indicating whether the strings in the two SVs are
645c22ef
DM
7141identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7142coerce its args to strings if necessary.
954c1994 7143
078504b2
FC
7144=for apidoc sv_eq_flags
7145
7146Returns a boolean indicating whether the strings in the two SVs are
7147identical. Is UTF-8 and 'use bytes' aware and coerces its args to strings
7148if necessary. If the flags include SV_GMAGIC, it handles get-magic, too.
7149
954c1994
GS
7150=cut
7151*/
7152
79072805 7153I32
31c72c81 7154Perl_sv_eq_flags(pTHX_ register SV *sv1, register SV *sv2, const U32 flags)
79072805 7155{
97aff369 7156 dVAR;
e1ec3a88 7157 const char *pv1;
463ee0b2 7158 STRLEN cur1;
e1ec3a88 7159 const char *pv2;
463ee0b2 7160 STRLEN cur2;
e01b9e88 7161 I32 eq = 0;
bd61b366 7162 char *tpv = NULL;
a0714e2c 7163 SV* svrecode = NULL;
79072805 7164
e01b9e88 7165 if (!sv1) {
79072805
LW
7166 pv1 = "";
7167 cur1 = 0;
7168 }
ced497e2
YST
7169 else {
7170 /* if pv1 and pv2 are the same, second SvPV_const call may
078504b2
FC
7171 * invalidate pv1 (if we are handling magic), so we may need to
7172 * make a copy */
7173 if (sv1 == sv2 && flags & SV_GMAGIC
7174 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
ced497e2 7175 pv1 = SvPV_const(sv1, cur1);
59cd0e26 7176 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
ced497e2 7177 }
078504b2 7178 pv1 = SvPV_flags_const(sv1, cur1, flags);
ced497e2 7179 }
79072805 7180
e01b9e88
SC
7181 if (!sv2){
7182 pv2 = "";
7183 cur2 = 0;
92d29cee 7184 }
e01b9e88 7185 else
078504b2 7186 pv2 = SvPV_flags_const(sv2, cur2, flags);
79072805 7187
cf48d248 7188 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
7189 /* Differing utf8ness.
7190 * Do not UTF8size the comparands as a side-effect. */
7191 if (PL_encoding) {
7192 if (SvUTF8(sv1)) {
553e1bcc
AT
7193 svrecode = newSVpvn(pv2, cur2);
7194 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 7195 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
7196 }
7197 else {
553e1bcc
AT
7198 svrecode = newSVpvn(pv1, cur1);
7199 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 7200 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
7201 }
7202 /* Now both are in UTF-8. */
0a1bd7ac
DM
7203 if (cur1 != cur2) {
7204 SvREFCNT_dec(svrecode);
799ef3cb 7205 return FALSE;
0a1bd7ac 7206 }
799ef3cb
JH
7207 }
7208 else {
799ef3cb 7209 if (SvUTF8(sv1)) {
fed3ba5d
NC
7210 /* sv1 is the UTF-8 one */
7211 return bytes_cmp_utf8((const U8*)pv2, cur2,
7212 (const U8*)pv1, cur1) == 0;
799ef3cb
JH
7213 }
7214 else {
fed3ba5d
NC
7215 /* sv2 is the UTF-8 one */
7216 return bytes_cmp_utf8((const U8*)pv1, cur1,
7217 (const U8*)pv2, cur2) == 0;
799ef3cb
JH
7218 }
7219 }
cf48d248
JH
7220 }
7221
7222 if (cur1 == cur2)
765f542d 7223 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
e01b9e88 7224
b37c2d43 7225 SvREFCNT_dec(svrecode);
553e1bcc
AT
7226 if (tpv)
7227 Safefree(tpv);
cf48d248 7228
e01b9e88 7229 return eq;
79072805
LW
7230}
7231
954c1994
GS
7232/*
7233=for apidoc sv_cmp
7234
7235Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
7236string in C<sv1> is less than, equal to, or greater than the string in
645c22ef
DM
7237C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
7238coerce its args to strings if necessary. See also C<sv_cmp_locale>.
954c1994 7239
078504b2
FC
7240=for apidoc sv_cmp_flags
7241
7242Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
7243string in C<sv1> is less than, equal to, or greater than the string in
7244C<sv2>. Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7245if necessary. If the flags include SV_GMAGIC, it handles get magic. See
7246also C<sv_cmp_locale_flags>.
7247
954c1994
GS
7248=cut
7249*/
7250
79072805 7251I32
ac1e9476 7252Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
79072805 7253{
078504b2
FC
7254 return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7255}
7256
7257I32
31c72c81
NC
7258Perl_sv_cmp_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7259 const U32 flags)
078504b2 7260{
97aff369 7261 dVAR;
560a288e 7262 STRLEN cur1, cur2;
e1ec3a88 7263 const char *pv1, *pv2;
bd61b366 7264 char *tpv = NULL;
cf48d248 7265 I32 cmp;
a0714e2c 7266 SV *svrecode = NULL;
560a288e 7267
e01b9e88
SC
7268 if (!sv1) {
7269 pv1 = "";
560a288e
GS
7270 cur1 = 0;
7271 }
e01b9e88 7272 else
078504b2 7273 pv1 = SvPV_flags_const(sv1, cur1, flags);
560a288e 7274
553e1bcc 7275 if (!sv2) {
e01b9e88 7276 pv2 = "";
560a288e
GS
7277 cur2 = 0;
7278 }
e01b9e88 7279 else
078504b2 7280 pv2 = SvPV_flags_const(sv2, cur2, flags);
79072805 7281
cf48d248 7282 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
7283 /* Differing utf8ness.
7284 * Do not UTF8size the comparands as a side-effect. */
cf48d248 7285 if (SvUTF8(sv1)) {
799ef3cb 7286 if (PL_encoding) {
553e1bcc
AT
7287 svrecode = newSVpvn(pv2, cur2);
7288 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 7289 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
7290 }
7291 else {
fed3ba5d
NC
7292 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7293 (const U8*)pv1, cur1);
7294 return retval ? retval < 0 ? -1 : +1 : 0;
799ef3cb 7295 }
cf48d248
JH
7296 }
7297 else {
799ef3cb 7298 if (PL_encoding) {
553e1bcc
AT
7299 svrecode = newSVpvn(pv1, cur1);
7300 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 7301 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
7302 }
7303 else {
fed3ba5d
NC
7304 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7305 (const U8*)pv2, cur2);
7306 return retval ? retval < 0 ? -1 : +1 : 0;
799ef3cb 7307 }
cf48d248
JH
7308 }
7309 }
7310
e01b9e88 7311 if (!cur1) {
cf48d248 7312 cmp = cur2 ? -1 : 0;
e01b9e88 7313 } else if (!cur2) {
cf48d248
JH
7314 cmp = 1;
7315 } else {
e1ec3a88 7316 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
e01b9e88
SC
7317
7318 if (retval) {
cf48d248 7319 cmp = retval < 0 ? -1 : 1;
e01b9e88 7320 } else if (cur1 == cur2) {
cf48d248
JH
7321 cmp = 0;
7322 } else {
7323 cmp = cur1 < cur2 ? -1 : 1;
e01b9e88 7324 }
cf48d248 7325 }
16660edb 7326
b37c2d43 7327 SvREFCNT_dec(svrecode);
553e1bcc
AT
7328 if (tpv)
7329 Safefree(tpv);
cf48d248
JH
7330
7331 return cmp;
bbce6d69 7332}
16660edb 7333
c461cf8f
JH
7334/*
7335=for apidoc sv_cmp_locale
7336
645c22ef
DM
7337Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7338'use bytes' aware, handles get magic, and will coerce its args to strings
d77cdebf 7339if necessary. See also C<sv_cmp>.
c461cf8f 7340
078504b2
FC
7341=for apidoc sv_cmp_locale_flags
7342
7343Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
7344'use bytes' aware and will coerce its args to strings if necessary. If the
7345flags contain SV_GMAGIC, it handles get magic. See also C<sv_cmp_flags>.
7346
c461cf8f
JH
7347=cut
7348*/
7349
bbce6d69 7350I32
ac1e9476 7351Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
bbce6d69 7352{
078504b2
FC
7353 return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7354}
7355
7356I32
31c72c81
NC
7357Perl_sv_cmp_locale_flags(pTHX_ register SV *const sv1, register SV *const sv2,
7358 const U32 flags)
078504b2 7359{
97aff369 7360 dVAR;
36477c24 7361#ifdef USE_LOCALE_COLLATE
16660edb 7362
bbce6d69 7363 char *pv1, *pv2;
7364 STRLEN len1, len2;
7365 I32 retval;
16660edb 7366
3280af22 7367 if (PL_collation_standard)
bbce6d69 7368 goto raw_compare;
16660edb 7369
bbce6d69 7370 len1 = 0;
078504b2 7371 pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
bbce6d69 7372 len2 = 0;
078504b2 7373 pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
16660edb 7374
bbce6d69 7375 if (!pv1 || !len1) {
7376 if (pv2 && len2)
7377 return -1;
7378 else
7379 goto raw_compare;
7380 }
7381 else {
7382 if (!pv2 || !len2)
7383 return 1;
7384 }
16660edb 7385
bbce6d69 7386 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
16660edb 7387
bbce6d69 7388 if (retval)
16660edb 7389 return retval < 0 ? -1 : 1;
7390
bbce6d69 7391 /*
7392 * When the result of collation is equality, that doesn't mean
7393 * that there are no differences -- some locales exclude some
7394 * characters from consideration. So to avoid false equalities,
7395 * we use the raw string as a tiebreaker.
7396 */
16660edb 7397
bbce6d69 7398 raw_compare:
5f66b61c 7399 /*FALLTHROUGH*/
16660edb 7400
36477c24 7401#endif /* USE_LOCALE_COLLATE */
16660edb 7402
bbce6d69 7403 return sv_cmp(sv1, sv2);
7404}
79072805 7405
645c22ef 7406
36477c24 7407#ifdef USE_LOCALE_COLLATE
645c22ef 7408
7a4c00b4 7409/*
645c22ef
DM
7410=for apidoc sv_collxfrm
7411
078504b2
FC
7412This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
7413C<sv_collxfrm_flags>.
7414
7415=for apidoc sv_collxfrm_flags
7416
7417Add Collate Transform magic to an SV if it doesn't already have it. If the
7418flags contain SV_GMAGIC, it handles get-magic.
645c22ef
DM
7419
7420Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7421scalar data of the variable, but transformed to such a format that a normal
7422memory comparison can be used to compare the data according to the locale
7423settings.
7424
7425=cut
7426*/
7427
bbce6d69 7428char *
078504b2 7429Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
bbce6d69 7430{
97aff369 7431 dVAR;
7a4c00b4 7432 MAGIC *mg;
16660edb 7433
078504b2 7434 PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7918f24d 7435
14befaf4 7436 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
3280af22 7437 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
93524f2b
NC
7438 const char *s;
7439 char *xf;
bbce6d69 7440 STRLEN len, xlen;
7441
7a4c00b4 7442 if (mg)
7443 Safefree(mg->mg_ptr);
078504b2 7444 s = SvPV_flags_const(sv, len, flags);
bbce6d69 7445 if ((xf = mem_collxfrm(s, len, &xlen))) {
7a4c00b4 7446 if (! mg) {
d83f0a82
NC
7447#ifdef PERL_OLD_COPY_ON_WRITE
7448 if (SvIsCOW(sv))
7449 sv_force_normal_flags(sv, 0);
7450#endif
7451 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7452 0, 0);
7a4c00b4 7453 assert(mg);
bbce6d69 7454 }
7a4c00b4 7455 mg->mg_ptr = xf;
565764a8 7456 mg->mg_len = xlen;
7a4c00b4 7457 }
7458 else {
ff0cee69 7459 if (mg) {
7460 mg->mg_ptr = NULL;
565764a8 7461 mg->mg_len = -1;
ff0cee69 7462 }
bbce6d69 7463 }
7464 }
7a4c00b4 7465 if (mg && mg->mg_ptr) {
565764a8 7466 *nxp = mg->mg_len;
3280af22 7467 return mg->mg_ptr + sizeof(PL_collation_ix);
bbce6d69 7468 }
7469 else {
7470 *nxp = 0;
7471 return NULL;
16660edb 7472 }
79072805
LW
7473}
7474
36477c24 7475#endif /* USE_LOCALE_COLLATE */
bbce6d69 7476
f80c2205
NC
7477static char *
7478S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7479{
7480 SV * const tsv = newSV(0);
7481 ENTER;
7482 SAVEFREESV(tsv);
7483 sv_gets(tsv, fp, 0);
7484 sv_utf8_upgrade_nomg(tsv);
7485 SvCUR_set(sv,append);
7486 sv_catsv(sv,tsv);
7487 LEAVE;
7488 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7489}
7490
7491static char *
7492S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7493{
7494 I32 bytesread;
7495 const U32 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7496 /* Grab the size of the record we're getting */
7497 char *const buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7498#ifdef VMS
7499 int fd;
7500#endif
7501
7502 /* Go yank in */
7503#ifdef VMS
7504 /* VMS wants read instead of fread, because fread doesn't respect */
7505 /* RMS record boundaries. This is not necessarily a good thing to be */
7506 /* doing, but we've got no other real choice - except avoid stdio
7507 as implementation - perhaps write a :vms layer ?
7508 */
7509 fd = PerlIO_fileno(fp);
7510 if (fd != -1) {
7511 bytesread = PerlLIO_read(fd, buffer, recsize);
7512 }
7513 else /* in-memory file from PerlIO::Scalar */
7514#endif
7515 {
7516 bytesread = PerlIO_read(fp, buffer, recsize);
7517 }
7518
7519 if (bytesread < 0)
7520 bytesread = 0;
7521 SvCUR_set(sv, bytesread + append);
7522 buffer[bytesread] = '\0';
7523 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7524}
7525
c461cf8f
JH
7526/*
7527=for apidoc sv_gets
7528
7529Get a line from the filehandle and store it into the SV, optionally
7530appending to the currently-stored string.
7531
7532=cut
7533*/
7534
79072805 7535char *
ac1e9476 7536Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
79072805 7537{
97aff369 7538 dVAR;
e1ec3a88 7539 const char *rsptr;
c07a80fd 7540 STRLEN rslen;
7541 register STDCHAR rslast;
7542 register STDCHAR *bp;
7543 register I32 cnt;
9c5ffd7c 7544 I32 i = 0;
8bfdd7d9 7545 I32 rspara = 0;
c07a80fd 7546
7918f24d
NC
7547 PERL_ARGS_ASSERT_SV_GETS;
7548
bc44a8a2
NC
7549 if (SvTHINKFIRST(sv))
7550 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
765f542d
NC
7551 /* XXX. If you make this PVIV, then copy on write can copy scalars read
7552 from <>.
7553 However, perlbench says it's slower, because the existing swipe code
7554 is faster than copy on write.
7555 Swings and roundabouts. */
862a34c6 7556 SvUPGRADE(sv, SVt_PV);
99491443 7557
ff68c719 7558 SvSCREAM_off(sv);
efd8b2ba
AE
7559
7560 if (append) {
7561 if (PerlIO_isutf8(fp)) {
7562 if (!SvUTF8(sv)) {
7563 sv_utf8_upgrade_nomg(sv);
7564 sv_pos_u2b(sv,&append,0);
7565 }
7566 } else if (SvUTF8(sv)) {
f80c2205 7567 return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
efd8b2ba
AE
7568 }
7569 }
7570
7571 SvPOK_only(sv);
05dee287
JJ
7572 if (!append) {
7573 SvCUR_set(sv,0);
7574 }
efd8b2ba
AE
7575 if (PerlIO_isutf8(fp))
7576 SvUTF8_on(sv);
c07a80fd 7577
923e4eb5 7578 if (IN_PERL_COMPILETIME) {
8bfdd7d9
HS
7579 /* we always read code in line mode */
7580 rsptr = "\n";
7581 rslen = 1;
7582 }
7583 else if (RsSNARF(PL_rs)) {
7a5fa8a2 7584 /* If it is a regular disk file use size from stat() as estimate
acbd132f
JH
7585 of amount we are going to read -- may result in mallocing
7586 more memory than we really need if the layers below reduce
7587 the size we read (e.g. CRLF or a gzip layer).
e468d35b 7588 */
e311fd51 7589 Stat_t st;
e468d35b 7590 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
f54cb97a 7591 const Off_t offset = PerlIO_tell(fp);
58f1856e 7592 if (offset != (Off_t) -1 && st.st_size + append > offset) {
e468d35b
NIS
7593 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7594 }
7595 }
c07a80fd 7596 rsptr = NULL;
7597 rslen = 0;
7598 }
3280af22 7599 else if (RsRECORD(PL_rs)) {
f80c2205 7600 return S_sv_gets_read_record(aTHX_ sv, fp, append);
5b2b9c68 7601 }
3280af22 7602 else if (RsPARA(PL_rs)) {
c07a80fd 7603 rsptr = "\n\n";
7604 rslen = 2;
8bfdd7d9 7605 rspara = 1;
c07a80fd 7606 }
7d59b7e4
NIS
7607 else {
7608 /* Get $/ i.e. PL_rs into same encoding as stream wants */
7609 if (PerlIO_isutf8(fp)) {
7610 rsptr = SvPVutf8(PL_rs, rslen);
7611 }
7612 else {
7613 if (SvUTF8(PL_rs)) {
7614 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7615 Perl_croak(aTHX_ "Wide character in $/");
7616 }
7617 }
93524f2b 7618 rsptr = SvPV_const(PL_rs, rslen);
7d59b7e4
NIS
7619 }
7620 }
7621
c07a80fd 7622 rslast = rslen ? rsptr[rslen - 1] : '\0';
7623
8bfdd7d9 7624 if (rspara) { /* have to do this both before and after */
79072805 7625 do { /* to make sure file boundaries work right */
760ac839 7626 if (PerlIO_eof(fp))
a0d0e21e 7627 return 0;
760ac839 7628 i = PerlIO_getc(fp);
79072805 7629 if (i != '\n') {
a0d0e21e
LW
7630 if (i == -1)
7631 return 0;
760ac839 7632 PerlIO_ungetc(fp,i);
79072805
LW
7633 break;
7634 }
7635 } while (i != EOF);
7636 }
c07a80fd 7637
760ac839
LW
7638 /* See if we know enough about I/O mechanism to cheat it ! */
7639
7640 /* This used to be #ifdef test - it is made run-time test for ease
1c846c1f 7641 of abstracting out stdio interface. One call should be cheap
760ac839
LW
7642 enough here - and may even be a macro allowing compile
7643 time optimization.
7644 */
7645
7646 if (PerlIO_fast_gets(fp)) {
7647
7648 /*
7649 * We're going to steal some values from the stdio struct
7650 * and put EVERYTHING in the innermost loop into registers.
7651 */
7652 register STDCHAR *ptr;
7653 STRLEN bpx;
7654 I32 shortbuffered;
7655
16660edb 7656#if defined(VMS) && defined(PERLIO_IS_STDIO)
7657 /* An ungetc()d char is handled separately from the regular
7658 * buffer, so we getc() it back out and stuff it in the buffer.
7659 */
7660 i = PerlIO_getc(fp);
7661 if (i == EOF) return 0;
7662 *(--((*fp)->_ptr)) = (unsigned char) i;
7663 (*fp)->_cnt++;
7664#endif
c07a80fd 7665
c2960299 7666 /* Here is some breathtakingly efficient cheating */
c07a80fd 7667
a20bf0c3 7668 cnt = PerlIO_get_cnt(fp); /* get count into register */
e468d35b 7669 /* make sure we have the room */
7a5fa8a2 7670 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
e468d35b 7671 /* Not room for all of it
7a5fa8a2 7672 if we are looking for a separator and room for some
e468d35b
NIS
7673 */
7674 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7a5fa8a2 7675 /* just process what we have room for */
79072805
LW
7676 shortbuffered = cnt - SvLEN(sv) + append + 1;
7677 cnt -= shortbuffered;
7678 }
7679 else {
7680 shortbuffered = 0;
bbce6d69 7681 /* remember that cnt can be negative */
eb160463 7682 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
79072805
LW
7683 }
7684 }
7a5fa8a2 7685 else
79072805 7686 shortbuffered = 0;
3f7c398e 7687 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
a20bf0c3 7688 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
16660edb 7689 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7690 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
16660edb 7691 DEBUG_P(PerlIO_printf(Perl_debug_log,
ba7abf9d 7692 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7693 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7694 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
79072805
LW
7695 for (;;) {
7696 screamer:
93a17b20 7697 if (cnt > 0) {
c07a80fd 7698 if (rslen) {
760ac839
LW
7699 while (cnt > 0) { /* this | eat */
7700 cnt--;
c07a80fd 7701 if ((*bp++ = *ptr++) == rslast) /* really | dust */
7702 goto thats_all_folks; /* screams | sed :-) */
7703 }
7704 }
7705 else {
1c846c1f
NIS
7706 Copy(ptr, bp, cnt, char); /* this | eat */
7707 bp += cnt; /* screams | dust */
c07a80fd 7708 ptr += cnt; /* louder | sed :-) */
a5f75d66 7709 cnt = 0;
0f93bb20
NC
7710 assert (!shortbuffered);
7711 goto cannot_be_shortbuffered;
93a17b20 7712 }
79072805
LW
7713 }
7714
748a9306 7715 if (shortbuffered) { /* oh well, must extend */
79072805
LW
7716 cnt = shortbuffered;
7717 shortbuffered = 0;
3f7c398e 7718 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7719 SvCUR_set(sv, bpx);
7720 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3f7c398e 7721 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
79072805
LW
7722 continue;
7723 }
7724
0f93bb20 7725 cannot_be_shortbuffered:
16660edb 7726 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841
GS
7727 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7728 PTR2UV(ptr),(long)cnt));
cc00df79 7729 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
ad9e76a8
NC
7730
7731 DEBUG_Pv(PerlIO_printf(Perl_debug_log,
1d7c1841 7732 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7733 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7734 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ad9e76a8 7735
1c846c1f 7736 /* This used to call 'filbuf' in stdio form, but as that behaves like
774d564b 7737 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7738 another abstraction. */
760ac839 7739 i = PerlIO_getc(fp); /* get more characters */
ad9e76a8
NC
7740
7741 DEBUG_Pv(PerlIO_printf(Perl_debug_log,
1d7c1841 7742 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7743 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7744 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ad9e76a8 7745
a20bf0c3
JH
7746 cnt = PerlIO_get_cnt(fp);
7747 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
16660edb 7748 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7749 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
79072805 7750
748a9306
LW
7751 if (i == EOF) /* all done for ever? */
7752 goto thats_really_all_folks;
7753
3f7c398e 7754 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
7755 SvCUR_set(sv, bpx);
7756 SvGROW(sv, bpx + cnt + 2);
3f7c398e 7757 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
c07a80fd 7758
eb160463 7759 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
79072805 7760
c07a80fd 7761 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
79072805 7762 goto thats_all_folks;
79072805
LW
7763 }
7764
7765thats_all_folks:
3f7c398e 7766 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
36477c24 7767 memNE((char*)bp - rslen, rsptr, rslen))
760ac839 7768 goto screamer; /* go back to the fray */
79072805
LW
7769thats_really_all_folks:
7770 if (shortbuffered)
7771 cnt += shortbuffered;
16660edb 7772 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7773 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
cc00df79 7774 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
16660edb 7775 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 7776 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 7777 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 7778 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
79072805 7779 *bp = '\0';
3f7c398e 7780 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
16660edb 7781 DEBUG_P(PerlIO_printf(Perl_debug_log,
fb73857a 7782 "Screamer: done, len=%ld, string=|%.*s|\n",
3f7c398e 7783 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
760ac839
LW
7784 }
7785 else
79072805 7786 {
6edd2cd5 7787 /*The big, slow, and stupid way. */
27da23d5 7788#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
cbbf8932 7789 STDCHAR *buf = NULL;
a02a5408 7790 Newx(buf, 8192, STDCHAR);
6edd2cd5 7791 assert(buf);
4d2c4e07 7792#else
6edd2cd5 7793 STDCHAR buf[8192];
4d2c4e07 7794#endif
79072805 7795
760ac839 7796screamer2:
c07a80fd 7797 if (rslen) {
00b6aa41 7798 register const STDCHAR * const bpe = buf + sizeof(buf);
760ac839 7799 bp = buf;
eb160463 7800 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
760ac839
LW
7801 ; /* keep reading */
7802 cnt = bp - buf;
c07a80fd 7803 }
7804 else {
760ac839 7805 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
486ec47a 7806 /* Accommodate broken VAXC compiler, which applies U8 cast to
16660edb 7807 * both args of ?: operator, causing EOF to change into 255
7808 */
37be0adf 7809 if (cnt > 0)
cbe9e203
JH
7810 i = (U8)buf[cnt - 1];
7811 else
37be0adf 7812 i = EOF;
c07a80fd 7813 }
79072805 7814
cbe9e203
JH
7815 if (cnt < 0)
7816 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
7817 if (append)
7818 sv_catpvn(sv, (char *) buf, cnt);
7819 else
7820 sv_setpvn(sv, (char *) buf, cnt);
c07a80fd 7821
7822 if (i != EOF && /* joy */
7823 (!rslen ||
7824 SvCUR(sv) < rslen ||
3f7c398e 7825 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
79072805
LW
7826 {
7827 append = -1;
63e4d877
CS
7828 /*
7829 * If we're reading from a TTY and we get a short read,
7830 * indicating that the user hit his EOF character, we need
7831 * to notice it now, because if we try to read from the TTY
7832 * again, the EOF condition will disappear.
7833 *
7834 * The comparison of cnt to sizeof(buf) is an optimization
7835 * that prevents unnecessary calls to feof().
7836 *
7837 * - jik 9/25/96
7838 */
bb7a0f54 7839 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
63e4d877 7840 goto screamer2;
79072805 7841 }
6edd2cd5 7842
27da23d5 7843#ifdef USE_HEAP_INSTEAD_OF_STACK
6edd2cd5
JH
7844 Safefree(buf);
7845#endif
79072805
LW
7846 }
7847
8bfdd7d9 7848 if (rspara) { /* have to do this both before and after */
c07a80fd 7849 while (i != EOF) { /* to make sure file boundaries work right */
760ac839 7850 i = PerlIO_getc(fp);
79072805 7851 if (i != '\n') {
760ac839 7852 PerlIO_ungetc(fp,i);
79072805
LW
7853 break;
7854 }
7855 }
7856 }
c07a80fd 7857
bd61b366 7858 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
79072805
LW
7859}
7860
954c1994
GS
7861/*
7862=for apidoc sv_inc
7863
645c22ef 7864Auto-increment of the value in the SV, doing string to numeric conversion
6f1401dc 7865if necessary. Handles 'get' magic and operator overloading.
954c1994
GS
7866
7867=cut
7868*/
7869
79072805 7870void
ac1e9476 7871Perl_sv_inc(pTHX_ register SV *const sv)
79072805 7872{
6f1401dc
DM
7873 if (!sv)
7874 return;
7875 SvGETMAGIC(sv);
7876 sv_inc_nomg(sv);
7877}
7878
7879/*
7880=for apidoc sv_inc_nomg
7881
7882Auto-increment of the value in the SV, doing string to numeric conversion
7883if necessary. Handles operator overloading. Skips handling 'get' magic.
7884
7885=cut
7886*/
7887
7888void
7889Perl_sv_inc_nomg(pTHX_ register SV *const sv)
7890{
97aff369 7891 dVAR;
79072805 7892 register char *d;
463ee0b2 7893 int flags;
79072805
LW
7894
7895 if (!sv)
7896 return;
ed6116ce 7897 if (SvTHINKFIRST(sv)) {
60092ce4 7898 if (SvIsCOW(sv) || isGV_with_GP(sv))
765f542d 7899 sv_force_normal_flags(sv, 0);
0f15f207 7900 if (SvREADONLY(sv)) {
923e4eb5 7901 if (IN_PERL_RUNTIME)
6ad8f254 7902 Perl_croak_no_modify(aTHX);
0f15f207 7903 }
a0d0e21e 7904 if (SvROK(sv)) {
b5be31e9 7905 IV i;
31d632c3 7906 if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
9e7bc3e8 7907 return;
56431972 7908 i = PTR2IV(SvRV(sv));
b5be31e9
SM
7909 sv_unref(sv);
7910 sv_setiv(sv, i);
a0d0e21e 7911 }
ed6116ce 7912 }
8990e307 7913 flags = SvFLAGS(sv);
28e5dec8
JH
7914 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7915 /* It's (privately or publicly) a float, but not tested as an
7916 integer, so test it to see. */
d460ef45 7917 (void) SvIV(sv);
28e5dec8
JH
7918 flags = SvFLAGS(sv);
7919 }
7920 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7921 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 7922#ifdef PERL_PRESERVE_IVUV
28e5dec8 7923 oops_its_int:
59d8ce62 7924#endif
25da4f38
IZ
7925 if (SvIsUV(sv)) {
7926 if (SvUVX(sv) == UV_MAX)
a1e868e7 7927 sv_setnv(sv, UV_MAX_P1);
25da4f38
IZ
7928 else
7929 (void)SvIOK_only_UV(sv);
607fa7f2 7930 SvUV_set(sv, SvUVX(sv) + 1);
25da4f38
IZ
7931 } else {
7932 if (SvIVX(sv) == IV_MAX)
28e5dec8 7933 sv_setuv(sv, (UV)IV_MAX + 1);
25da4f38
IZ
7934 else {
7935 (void)SvIOK_only(sv);
45977657 7936 SvIV_set(sv, SvIVX(sv) + 1);
1c846c1f 7937 }
55497cff 7938 }
79072805
LW
7939 return;
7940 }
28e5dec8 7941 if (flags & SVp_NOK) {
b88df990 7942 const NV was = SvNVX(sv);
b68c599a 7943 if (NV_OVERFLOWS_INTEGERS_AT &&
a2a5de95
NC
7944 was >= NV_OVERFLOWS_INTEGERS_AT) {
7945 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7946 "Lost precision when incrementing %" NVff " by 1",
7947 was);
b88df990 7948 }
28e5dec8 7949 (void)SvNOK_only(sv);
b68c599a 7950 SvNV_set(sv, was + 1.0);
28e5dec8
JH
7951 return;
7952 }
7953
3f7c398e 7954 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
28e5dec8 7955 if ((flags & SVTYPEMASK) < SVt_PVIV)
f5282e15 7956 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
28e5dec8 7957 (void)SvIOK_only(sv);
45977657 7958 SvIV_set(sv, 1);
79072805
LW
7959 return;
7960 }
463ee0b2 7961 d = SvPVX(sv);
79072805
LW
7962 while (isALPHA(*d)) d++;
7963 while (isDIGIT(*d)) d++;
6aff239d 7964 if (d < SvEND(sv)) {
28e5dec8 7965#ifdef PERL_PRESERVE_IVUV
d1be9408 7966 /* Got to punt this as an integer if needs be, but we don't issue
28e5dec8
JH
7967 warnings. Probably ought to make the sv_iv_please() that does
7968 the conversion if possible, and silently. */
504618e9 7969 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
7970 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7971 /* Need to try really hard to see if it's an integer.
7972 9.22337203685478e+18 is an integer.
7973 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7974 so $a="9.22337203685478e+18"; $a+0; $a++
7975 needs to be the same as $a="9.22337203685478e+18"; $a++
7976 or we go insane. */
d460ef45 7977
28e5dec8
JH
7978 (void) sv_2iv(sv);
7979 if (SvIOK(sv))
7980 goto oops_its_int;
7981
7982 /* sv_2iv *should* have made this an NV */
7983 if (flags & SVp_NOK) {
7984 (void)SvNOK_only(sv);
9d6ce603 7985 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
7986 return;
7987 }
7988 /* I don't think we can get here. Maybe I should assert this
7989 And if we do get here I suspect that sv_setnv will croak. NWC
7990 Fall through. */
7991#if defined(USE_LONG_DOUBLE)
7992 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 7993 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 7994#else
1779d84d 7995 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 7996 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
7997#endif
7998 }
7999#endif /* PERL_PRESERVE_IVUV */
3f7c398e 8000 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
79072805
LW
8001 return;
8002 }
8003 d--;
3f7c398e 8004 while (d >= SvPVX_const(sv)) {
79072805
LW
8005 if (isDIGIT(*d)) {
8006 if (++*d <= '9')
8007 return;
8008 *(d--) = '0';
8009 }
8010 else {
9d116dd7
JH
8011#ifdef EBCDIC
8012 /* MKS: The original code here died if letters weren't consecutive.
8013 * at least it didn't have to worry about non-C locales. The
8014 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
1c846c1f 8015 * arranged in order (although not consecutively) and that only
9d116dd7
JH
8016 * [A-Za-z] are accepted by isALPHA in the C locale.
8017 */
8018 if (*d != 'z' && *d != 'Z') {
8019 do { ++*d; } while (!isALPHA(*d));
8020 return;
8021 }
8022 *(d--) -= 'z' - 'a';
8023#else
79072805
LW
8024 ++*d;
8025 if (isALPHA(*d))
8026 return;
8027 *(d--) -= 'z' - 'a' + 1;
9d116dd7 8028#endif
79072805
LW
8029 }
8030 }
8031 /* oh,oh, the number grew */
8032 SvGROW(sv, SvCUR(sv) + 2);
b162af07 8033 SvCUR_set(sv, SvCUR(sv) + 1);
3f7c398e 8034 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
79072805
LW
8035 *d = d[-1];
8036 if (isDIGIT(d[1]))
8037 *d = '1';
8038 else
8039 *d = d[1];
8040}
8041
954c1994
GS
8042/*
8043=for apidoc sv_dec
8044
645c22ef 8045Auto-decrement of the value in the SV, doing string to numeric conversion
6f1401dc 8046if necessary. Handles 'get' magic and operator overloading.
954c1994
GS
8047
8048=cut
8049*/
8050
79072805 8051void
ac1e9476 8052Perl_sv_dec(pTHX_ register SV *const sv)
79072805 8053{
97aff369 8054 dVAR;
6f1401dc
DM
8055 if (!sv)
8056 return;
8057 SvGETMAGIC(sv);
8058 sv_dec_nomg(sv);
8059}
8060
8061/*
8062=for apidoc sv_dec_nomg
8063
8064Auto-decrement of the value in the SV, doing string to numeric conversion
8065if necessary. Handles operator overloading. Skips handling 'get' magic.
8066
8067=cut
8068*/
8069
8070void
8071Perl_sv_dec_nomg(pTHX_ register SV *const sv)
8072{
8073 dVAR;
463ee0b2
LW
8074 int flags;
8075
79072805
LW
8076 if (!sv)
8077 return;
ed6116ce 8078 if (SvTHINKFIRST(sv)) {
60092ce4 8079 if (SvIsCOW(sv) || isGV_with_GP(sv))
765f542d 8080 sv_force_normal_flags(sv, 0);
0f15f207 8081 if (SvREADONLY(sv)) {
923e4eb5 8082 if (IN_PERL_RUNTIME)
6ad8f254 8083 Perl_croak_no_modify(aTHX);
0f15f207 8084 }
a0d0e21e 8085 if (SvROK(sv)) {
b5be31e9 8086 IV i;
31d632c3 8087 if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9e7bc3e8 8088 return;
56431972 8089 i = PTR2IV(SvRV(sv));
b5be31e9
SM
8090 sv_unref(sv);
8091 sv_setiv(sv, i);
a0d0e21e 8092 }
ed6116ce 8093 }
28e5dec8
JH
8094 /* Unlike sv_inc we don't have to worry about string-never-numbers
8095 and keeping them magic. But we mustn't warn on punting */
8990e307 8096 flags = SvFLAGS(sv);
28e5dec8
JH
8097 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8098 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 8099#ifdef PERL_PRESERVE_IVUV
28e5dec8 8100 oops_its_int:
59d8ce62 8101#endif
25da4f38
IZ
8102 if (SvIsUV(sv)) {
8103 if (SvUVX(sv) == 0) {
8104 (void)SvIOK_only(sv);
45977657 8105 SvIV_set(sv, -1);
25da4f38
IZ
8106 }
8107 else {
8108 (void)SvIOK_only_UV(sv);
f4eee32f 8109 SvUV_set(sv, SvUVX(sv) - 1);
1c846c1f 8110 }
25da4f38 8111 } else {
b88df990
NC
8112 if (SvIVX(sv) == IV_MIN) {
8113 sv_setnv(sv, (NV)IV_MIN);
8114 goto oops_its_num;
8115 }
25da4f38
IZ
8116 else {
8117 (void)SvIOK_only(sv);
45977657 8118 SvIV_set(sv, SvIVX(sv) - 1);
1c846c1f 8119 }
55497cff 8120 }
8121 return;
8122 }
28e5dec8 8123 if (flags & SVp_NOK) {
b88df990
NC
8124 oops_its_num:
8125 {
8126 const NV was = SvNVX(sv);
b68c599a 8127 if (NV_OVERFLOWS_INTEGERS_AT &&
a2a5de95
NC
8128 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8129 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8130 "Lost precision when decrementing %" NVff " by 1",
8131 was);
b88df990
NC
8132 }
8133 (void)SvNOK_only(sv);
b68c599a 8134 SvNV_set(sv, was - 1.0);
b88df990
NC
8135 return;
8136 }
28e5dec8 8137 }
8990e307 8138 if (!(flags & SVp_POK)) {
ef088171
NC
8139 if ((flags & SVTYPEMASK) < SVt_PVIV)
8140 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8141 SvIV_set(sv, -1);
8142 (void)SvIOK_only(sv);
79072805
LW
8143 return;
8144 }
28e5dec8
JH
8145#ifdef PERL_PRESERVE_IVUV
8146 {
504618e9 8147 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
8148 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8149 /* Need to try really hard to see if it's an integer.
8150 9.22337203685478e+18 is an integer.
8151 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8152 so $a="9.22337203685478e+18"; $a+0; $a--
8153 needs to be the same as $a="9.22337203685478e+18"; $a--
8154 or we go insane. */
d460ef45 8155
28e5dec8
JH
8156 (void) sv_2iv(sv);
8157 if (SvIOK(sv))
8158 goto oops_its_int;
8159
8160 /* sv_2iv *should* have made this an NV */
8161 if (flags & SVp_NOK) {
8162 (void)SvNOK_only(sv);
9d6ce603 8163 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
8164 return;
8165 }
8166 /* I don't think we can get here. Maybe I should assert this
8167 And if we do get here I suspect that sv_setnv will croak. NWC
8168 Fall through. */
8169#if defined(USE_LONG_DOUBLE)
8170 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 8171 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 8172#else
1779d84d 8173 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 8174 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
8175#endif
8176 }
8177 }
8178#endif /* PERL_PRESERVE_IVUV */
3f7c398e 8179 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
79072805
LW
8180}
8181
81041c50
YO
8182/* this define is used to eliminate a chunk of duplicated but shared logic
8183 * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8184 * used anywhere but here - yves
8185 */
8186#define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8187 STMT_START { \
8188 EXTEND_MORTAL(1); \
8189 PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8190 } STMT_END
8191
954c1994
GS
8192/*
8193=for apidoc sv_mortalcopy
8194
645c22ef 8195Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
d4236ebc
DM
8196The new SV is marked as mortal. It will be destroyed "soon", either by an
8197explicit call to FREETMPS, or by an implicit call at places such as
8198statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
954c1994
GS
8199
8200=cut
8201*/
8202
79072805
LW
8203/* Make a string that will exist for the duration of the expression
8204 * evaluation. Actually, it may have to last longer than that, but
8205 * hopefully we won't free it until it has been assigned to a
8206 * permanent location. */
8207
8208SV *
ac1e9476 8209Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
79072805 8210{
97aff369 8211 dVAR;
463ee0b2 8212 register SV *sv;
b881518d 8213
4561caa4 8214 new_SV(sv);
79072805 8215 sv_setsv(sv,oldstr);
81041c50 8216 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307
LW
8217 SvTEMP_on(sv);
8218 return sv;
8219}
8220
954c1994
GS
8221/*
8222=for apidoc sv_newmortal
8223
645c22ef 8224Creates a new null SV which is mortal. The reference count of the SV is
d4236ebc
DM
8225set to 1. It will be destroyed "soon", either by an explicit call to
8226FREETMPS, or by an implicit call at places such as statement boundaries.
8227See also C<sv_mortalcopy> and C<sv_2mortal>.
954c1994
GS
8228
8229=cut
8230*/
8231
8990e307 8232SV *
864dbfa3 8233Perl_sv_newmortal(pTHX)
8990e307 8234{
97aff369 8235 dVAR;
8990e307
LW
8236 register SV *sv;
8237
4561caa4 8238 new_SV(sv);
8990e307 8239 SvFLAGS(sv) = SVs_TEMP;
81041c50 8240 PUSH_EXTEND_MORTAL__SV_C(sv);
79072805
LW
8241 return sv;
8242}
8243
59cd0e26
NC
8244
8245/*
8246=for apidoc newSVpvn_flags
8247
8248Creates a new SV and copies a string into it. The reference count for the
8249SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
8250string. You are responsible for ensuring that the source string is at least
8251C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
8252Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
d9f0b464 8253If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
c790c9b6
KW
8254returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
8255C<SVf_UTF8> flag will be set on the new SV.
59cd0e26
NC
8256C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8257
8258 #define newSVpvn_utf8(s, len, u) \
8259 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8260
8261=cut
8262*/
8263
8264SV *
23f13727 8265Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
59cd0e26
NC
8266{
8267 dVAR;
8268 register SV *sv;
8269
8270 /* All the flags we don't support must be zero.
8271 And we're new code so I'm going to assert this from the start. */
8272 assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8273 new_SV(sv);
8274 sv_setpvn(sv,s,len);
d21488d7
YO
8275
8276 /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
486ec47a 8277 * and do what it does ourselves here.
d21488d7
YO
8278 * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8279 * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8280 * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
486ec47a 8281 * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
d21488d7
YO
8282 */
8283
6dfeccca
GF
8284 SvFLAGS(sv) |= flags;
8285
8286 if(flags & SVs_TEMP){
81041c50 8287 PUSH_EXTEND_MORTAL__SV_C(sv);
6dfeccca
GF
8288 }
8289
8290 return sv;
59cd0e26
NC
8291}
8292
954c1994
GS
8293/*
8294=for apidoc sv_2mortal
8295
d4236ebc
DM
8296Marks an existing SV as mortal. The SV will be destroyed "soon", either
8297by an explicit call to FREETMPS, or by an implicit call at places such as
37d2ac18
NC
8298statement boundaries. SvTEMP() is turned on which means that the SV's
8299string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
8300and C<sv_mortalcopy>.
954c1994
GS
8301
8302=cut
8303*/
8304
79072805 8305SV *
23f13727 8306Perl_sv_2mortal(pTHX_ register SV *const sv)
79072805 8307{
27da23d5 8308 dVAR;
79072805 8309 if (!sv)
7a5b473e 8310 return NULL;
d689ffdd 8311 if (SvREADONLY(sv) && SvIMMORTAL(sv))
11162842 8312 return sv;
81041c50 8313 PUSH_EXTEND_MORTAL__SV_C(sv);
8990e307 8314 SvTEMP_on(sv);
79072805
LW
8315 return sv;
8316}
8317
954c1994
GS
8318/*
8319=for apidoc newSVpv
8320
8321Creates a new SV and copies a string into it. The reference count for the
8322SV is set to 1. If C<len> is zero, Perl will compute the length using
8323strlen(). For efficiency, consider using C<newSVpvn> instead.
8324
8325=cut
8326*/
8327
79072805 8328SV *
23f13727 8329Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
79072805 8330{
97aff369 8331 dVAR;
463ee0b2 8332 register SV *sv;
79072805 8333
4561caa4 8334 new_SV(sv);
ddfa59c7 8335 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
79072805
LW
8336 return sv;
8337}
8338
954c1994
GS
8339/*
8340=for apidoc newSVpvn
8341
8342Creates a new SV and copies a string into it. The reference count for the
1c846c1f 8343SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
954c1994 8344string. You are responsible for ensuring that the source string is at least
9e09f5f2 8345C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
954c1994
GS
8346
8347=cut
8348*/
8349
9da1e3b5 8350SV *
23f13727 8351Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
9da1e3b5 8352{
97aff369 8353 dVAR;
9da1e3b5
MUN
8354 register SV *sv;
8355
8356 new_SV(sv);
9da1e3b5
MUN
8357 sv_setpvn(sv,s,len);
8358 return sv;
8359}
8360
740cce10 8361/*
926f8064 8362=for apidoc newSVhek
bd08039b
NC
8363
8364Creates a new SV from the hash key structure. It will generate scalars that
5aaec2b4
NC
8365point to the shared string table where possible. Returns a new (undefined)
8366SV if the hek is NULL.
bd08039b
NC
8367
8368=cut
8369*/
8370
8371SV *
23f13727 8372Perl_newSVhek(pTHX_ const HEK *const hek)
bd08039b 8373{
97aff369 8374 dVAR;
5aaec2b4
NC
8375 if (!hek) {
8376 SV *sv;
8377
8378 new_SV(sv);
8379 return sv;
8380 }
8381
bd08039b
NC
8382 if (HEK_LEN(hek) == HEf_SVKEY) {
8383 return newSVsv(*(SV**)HEK_KEY(hek));
8384 } else {
8385 const int flags = HEK_FLAGS(hek);
8386 if (flags & HVhek_WASUTF8) {
8387 /* Trouble :-)
8388 Andreas would like keys he put in as utf8 to come back as utf8
8389 */
8390 STRLEN utf8_len = HEK_LEN(hek);
678febd7
NC
8391 SV * const sv = newSV_type(SVt_PV);
8392 char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8393 /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8394 sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
bd08039b 8395 SvUTF8_on (sv);
bd08039b 8396 return sv;
45e34800 8397 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
bd08039b
NC
8398 /* We don't have a pointer to the hv, so we have to replicate the
8399 flag into every HEK. This hv is using custom a hasing
8400 algorithm. Hence we can't return a shared string scalar, as
8401 that would contain the (wrong) hash value, and might get passed
45e34800
NC
8402 into an hv routine with a regular hash.
8403 Similarly, a hash that isn't using shared hash keys has to have
8404 the flag in every key so that we know not to try to call
b7256f66 8405 share_hek_hek on it. */
bd08039b 8406
b64e5050 8407 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
bd08039b
NC
8408 if (HEK_UTF8(hek))
8409 SvUTF8_on (sv);
8410 return sv;
8411 }
8412 /* This will be overwhelminly the most common case. */
409dfe77
NC
8413 {
8414 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8415 more efficient than sharepvn(). */
8416 SV *sv;
8417
8418 new_SV(sv);
8419 sv_upgrade(sv, SVt_PV);
8420 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8421 SvCUR_set(sv, HEK_LEN(hek));
8422 SvLEN_set(sv, 0);
8423 SvREADONLY_on(sv);
8424 SvFAKE_on(sv);
8425 SvPOK_on(sv);
8426 if (HEK_UTF8(hek))
8427 SvUTF8_on(sv);
8428 return sv;
8429 }
bd08039b
NC
8430 }
8431}
8432
1c846c1f
NIS
8433/*
8434=for apidoc newSVpvn_share
8435
3f7c398e 8436Creates a new SV with its SvPVX_const pointing to a shared string in the string
645c22ef 8437table. If the string does not already exist in the table, it is created
758fcfc1
VP
8438first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
8439value is used; otherwise the hash is computed. The string's hash can be later
8440be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
8441that as the string table is used for shared hash keys these strings will have
8442SvPVX_const == HeKEY and hash lookup will avoid string compare.
1c846c1f
NIS
8443
8444=cut
8445*/
8446
8447SV *
c3654f1a 8448Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
1c846c1f 8449{
97aff369 8450 dVAR;
1c846c1f 8451 register SV *sv;
c3654f1a 8452 bool is_utf8 = FALSE;
a51caccf
NC
8453 const char *const orig_src = src;
8454
c3654f1a 8455 if (len < 0) {
77caf834 8456 STRLEN tmplen = -len;
c3654f1a 8457 is_utf8 = TRUE;
75a54232 8458 /* See the note in hv.c:hv_fetch() --jhi */
e1ec3a88 8459 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
75a54232
JH
8460 len = tmplen;
8461 }
1c846c1f 8462 if (!hash)
5afd6d42 8463 PERL_HASH(hash, src, len);
1c846c1f 8464 new_SV(sv);
f46ee248
NC
8465 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8466 changes here, update it there too. */
bdd68bc3 8467 sv_upgrade(sv, SVt_PV);
f880fe2f 8468 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
b162af07 8469 SvCUR_set(sv, len);
b162af07 8470 SvLEN_set(sv, 0);
1c846c1f
NIS
8471 SvREADONLY_on(sv);
8472 SvFAKE_on(sv);
8473 SvPOK_on(sv);
c3654f1a
IH
8474 if (is_utf8)
8475 SvUTF8_on(sv);
a51caccf
NC
8476 if (src != orig_src)
8477 Safefree(src);
1c846c1f
NIS
8478 return sv;
8479}
8480
9dcc53ea
Z
8481/*
8482=for apidoc newSVpv_share
8483
8484Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8485string/length pair.
8486
8487=cut
8488*/
8489
8490SV *
8491Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8492{
8493 return newSVpvn_share(src, strlen(src), hash);
8494}
645c22ef 8495
cea2e8a9 8496#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
8497
8498/* pTHX_ magic can't cope with varargs, so this is a no-context
8499 * version of the main function, (which may itself be aliased to us).
8500 * Don't access this version directly.
8501 */
8502
46fc3d4c 8503SV *
23f13727 8504Perl_newSVpvf_nocontext(const char *const pat, ...)
46fc3d4c 8505{
cea2e8a9 8506 dTHX;
46fc3d4c 8507 register SV *sv;
8508 va_list args;
7918f24d
NC
8509
8510 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8511
46fc3d4c 8512 va_start(args, pat);
c5be433b 8513 sv = vnewSVpvf(pat, &args);
46fc3d4c 8514 va_end(args);
8515 return sv;
8516}
cea2e8a9 8517#endif
46fc3d4c 8518
954c1994
GS
8519/*
8520=for apidoc newSVpvf
8521
645c22ef 8522Creates a new SV and initializes it with the string formatted like
954c1994
GS
8523C<sprintf>.
8524
8525=cut
8526*/
8527
cea2e8a9 8528SV *
23f13727 8529Perl_newSVpvf(pTHX_ const char *const pat, ...)
cea2e8a9
GS
8530{
8531 register SV *sv;
8532 va_list args;
7918f24d
NC
8533
8534 PERL_ARGS_ASSERT_NEWSVPVF;
8535
cea2e8a9 8536 va_start(args, pat);
c5be433b 8537 sv = vnewSVpvf(pat, &args);
cea2e8a9
GS
8538 va_end(args);
8539 return sv;
8540}
46fc3d4c 8541
645c22ef
DM
8542/* backend for newSVpvf() and newSVpvf_nocontext() */
8543
79072805 8544SV *
23f13727 8545Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
c5be433b 8546{
97aff369 8547 dVAR;
c5be433b 8548 register SV *sv;
7918f24d
NC
8549
8550 PERL_ARGS_ASSERT_VNEWSVPVF;
8551
c5be433b 8552 new_SV(sv);
4608196e 8553 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
8554 return sv;
8555}
8556
954c1994
GS
8557/*
8558=for apidoc newSVnv
8559
8560Creates a new SV and copies a floating point value into it.
8561The reference count for the SV is set to 1.
8562
8563=cut
8564*/
8565
c5be433b 8566SV *
23f13727 8567Perl_newSVnv(pTHX_ const NV n)
79072805 8568{
97aff369 8569 dVAR;
463ee0b2 8570 register SV *sv;
79072805 8571
4561caa4 8572 new_SV(sv);
79072805
LW
8573 sv_setnv(sv,n);
8574 return sv;
8575}
8576
954c1994
GS
8577/*
8578=for apidoc newSViv
8579
8580Creates a new SV and copies an integer into it. The reference count for the
8581SV is set to 1.
8582
8583=cut
8584*/
8585
79072805 8586SV *
23f13727 8587Perl_newSViv(pTHX_ const IV i)
79072805 8588{
97aff369 8589 dVAR;
463ee0b2 8590 register SV *sv;
79072805 8591
4561caa4 8592 new_SV(sv);
79072805
LW
8593 sv_setiv(sv,i);
8594 return sv;
8595}
8596
954c1994 8597/*
1a3327fb
JH
8598=for apidoc newSVuv
8599
8600Creates a new SV and copies an unsigned integer into it.
8601The reference count for the SV is set to 1.
8602
8603=cut
8604*/
8605
8606SV *
23f13727 8607Perl_newSVuv(pTHX_ const UV u)
1a3327fb 8608{
97aff369 8609 dVAR;
1a3327fb
JH
8610 register SV *sv;
8611
8612 new_SV(sv);
8613 sv_setuv(sv,u);
8614 return sv;
8615}
8616
8617/*
b9f83d2f
NC
8618=for apidoc newSV_type
8619
c41f7ed2 8620Creates a new SV, of the type specified. The reference count for the new SV
b9f83d2f
NC
8621is set to 1.
8622
8623=cut
8624*/
8625
8626SV *
fe9845cc 8627Perl_newSV_type(pTHX_ const svtype type)
b9f83d2f
NC
8628{
8629 register SV *sv;
8630
8631 new_SV(sv);
8632 sv_upgrade(sv, type);
8633 return sv;
8634}
8635
8636/*
954c1994
GS
8637=for apidoc newRV_noinc
8638
8639Creates an RV wrapper for an SV. The reference count for the original
8640SV is B<not> incremented.
8641
8642=cut
8643*/
8644
2304df62 8645SV *
23f13727 8646Perl_newRV_noinc(pTHX_ SV *const tmpRef)
2304df62 8647{
97aff369 8648 dVAR;
4df7f6af 8649 register SV *sv = newSV_type(SVt_IV);
7918f24d
NC
8650
8651 PERL_ARGS_ASSERT_NEWRV_NOINC;
8652
76e3520e 8653 SvTEMP_off(tmpRef);
b162af07 8654 SvRV_set(sv, tmpRef);
2304df62 8655 SvROK_on(sv);
2304df62
AD
8656 return sv;
8657}
8658
ff276b08 8659/* newRV_inc is the official function name to use now.
645c22ef
DM
8660 * newRV_inc is in fact #defined to newRV in sv.h
8661 */
8662
5f05dabc 8663SV *
23f13727 8664Perl_newRV(pTHX_ SV *const sv)
5f05dabc 8665{
97aff369 8666 dVAR;
7918f24d
NC
8667
8668 PERL_ARGS_ASSERT_NEWRV;
8669
7f466ec7 8670 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
5f05dabc 8671}
5f05dabc 8672
954c1994
GS
8673/*
8674=for apidoc newSVsv
8675
8676Creates a new SV which is an exact duplicate of the original SV.
645c22ef 8677(Uses C<sv_setsv>).
954c1994
GS
8678
8679=cut
8680*/
8681
79072805 8682SV *
23f13727 8683Perl_newSVsv(pTHX_ register SV *const old)
79072805 8684{
97aff369 8685 dVAR;
463ee0b2 8686 register SV *sv;
79072805
LW
8687
8688 if (!old)
7a5b473e 8689 return NULL;
e4787c0c 8690 if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9b387841 8691 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
a0714e2c 8692 return NULL;
79072805 8693 }
4561caa4 8694 new_SV(sv);
e90aabeb
NC
8695 /* SV_GMAGIC is the default for sv_setv()
8696 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8697 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
8698 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
463ee0b2 8699 return sv;
79072805
LW
8700}
8701
645c22ef
DM
8702/*
8703=for apidoc sv_reset
8704
8705Underlying implementation for the C<reset> Perl function.
8706Note that the perl-level function is vaguely deprecated.
8707
8708=cut
8709*/
8710
79072805 8711void
23f13727 8712Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
79072805 8713{
27da23d5 8714 dVAR;
4802d5d7 8715 char todo[PERL_UCHAR_MAX+1];
79072805 8716
7918f24d
NC
8717 PERL_ARGS_ASSERT_SV_RESET;
8718
49d8d3a1
MB
8719 if (!stash)
8720 return;
8721
79072805 8722 if (!*s) { /* reset ?? searches */
daba3364 8723 MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8d2f4536 8724 if (mg) {
c2b1997a
NC
8725 const U32 count = mg->mg_len / sizeof(PMOP**);
8726 PMOP **pmp = (PMOP**) mg->mg_ptr;
8727 PMOP *const *const end = pmp + count;
8728
8729 while (pmp < end) {
c737faaf 8730#ifdef USE_ITHREADS
c2b1997a 8731 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
c737faaf 8732#else
c2b1997a 8733 (*pmp)->op_pmflags &= ~PMf_USED;
c737faaf 8734#endif
c2b1997a 8735 ++pmp;
8d2f4536 8736 }
79072805
LW
8737 }
8738 return;
8739 }
8740
8741 /* reset variables */
8742
8743 if (!HvARRAY(stash))
8744 return;
463ee0b2
LW
8745
8746 Zero(todo, 256, char);
79072805 8747 while (*s) {
b464bac0
AL
8748 I32 max;
8749 I32 i = (unsigned char)*s;
79072805
LW
8750 if (s[1] == '-') {
8751 s += 2;
8752 }
4802d5d7 8753 max = (unsigned char)*s++;
79072805 8754 for ( ; i <= max; i++) {
463ee0b2
LW
8755 todo[i] = 1;
8756 }
a0d0e21e 8757 for (i = 0; i <= (I32) HvMAX(stash); i++) {
b464bac0 8758 HE *entry;
79072805 8759 for (entry = HvARRAY(stash)[i];
9e35f4b3
GS
8760 entry;
8761 entry = HeNEXT(entry))
8762 {
b464bac0
AL
8763 register GV *gv;
8764 register SV *sv;
8765
1edc1566 8766 if (!todo[(U8)*HeKEY(entry)])
463ee0b2 8767 continue;
159b6efe 8768 gv = MUTABLE_GV(HeVAL(entry));
79072805 8769 sv = GvSV(gv);
e203899d
NC
8770 if (sv) {
8771 if (SvTHINKFIRST(sv)) {
8772 if (!SvREADONLY(sv) && SvROK(sv))
8773 sv_unref(sv);
8774 /* XXX Is this continue a bug? Why should THINKFIRST
8775 exempt us from resetting arrays and hashes? */
8776 continue;
8777 }
8778 SvOK_off(sv);
8779 if (SvTYPE(sv) >= SVt_PV) {
8780 SvCUR_set(sv, 0);
bd61b366 8781 if (SvPVX_const(sv) != NULL)
e203899d
NC
8782 *SvPVX(sv) = '\0';
8783 SvTAINT(sv);
8784 }
79072805
LW
8785 }
8786 if (GvAV(gv)) {
8787 av_clear(GvAV(gv));
8788 }
bfcb3514 8789 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
b0269e46
AB
8790#if defined(VMS)
8791 Perl_die(aTHX_ "Can't reset %%ENV on this system");
8792#else /* ! VMS */
463ee0b2 8793 hv_clear(GvHV(gv));
b0269e46
AB
8794# if defined(USE_ENVIRON_ARRAY)
8795 if (gv == PL_envgv)
8796 my_clearenv();
8797# endif /* USE_ENVIRON_ARRAY */
8798#endif /* VMS */
79072805
LW
8799 }
8800 }
8801 }
8802 }
8803}
8804
645c22ef
DM
8805/*
8806=for apidoc sv_2io
8807
8808Using various gambits, try to get an IO from an SV: the IO slot if its a
8809GV; or the recursive result if we're an RV; or the IO slot of the symbol
8810named after the PV if we're a string.
8811
8812=cut
8813*/
8814
46fc3d4c 8815IO*
23f13727 8816Perl_sv_2io(pTHX_ SV *const sv)
46fc3d4c 8817{
8818 IO* io;
8819 GV* gv;
8820
7918f24d
NC
8821 PERL_ARGS_ASSERT_SV_2IO;
8822
46fc3d4c 8823 switch (SvTYPE(sv)) {
8824 case SVt_PVIO:
a45c7426 8825 io = MUTABLE_IO(sv);
46fc3d4c 8826 break;
8827 case SVt_PVGV:
13be902c 8828 case SVt_PVLV:
6e592b3a 8829 if (isGV_with_GP(sv)) {
159b6efe 8830 gv = MUTABLE_GV(sv);
6e592b3a
BM
8831 io = GvIO(gv);
8832 if (!io)
d0c0e7dd
FC
8833 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
8834 HEKfARG(GvNAME_HEK(gv)));
6e592b3a
BM
8835 break;
8836 }
8837 /* FALL THROUGH */
46fc3d4c 8838 default:
8839 if (!SvOK(sv))
cea2e8a9 8840 Perl_croak(aTHX_ PL_no_usym, "filehandle");
46fc3d4c 8841 if (SvROK(sv))
8842 return sv_2io(SvRV(sv));
f776e3cd 8843 gv = gv_fetchsv(sv, 0, SVt_PVIO);
46fc3d4c 8844 if (gv)
8845 io = GvIO(gv);
8846 else
8847 io = 0;
8848 if (!io)
be2597df 8849 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
46fc3d4c 8850 break;
8851 }
8852 return io;
8853}
8854
645c22ef
DM
8855/*
8856=for apidoc sv_2cv
8857
8858Using various gambits, try to get a CV from an SV; in addition, try if
8859possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8e324704 8860The flags in C<lref> are passed to gv_fetchsv.
645c22ef
DM
8861
8862=cut
8863*/
8864
79072805 8865CV *
23f13727 8866Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
79072805 8867{
27da23d5 8868 dVAR;
a0714e2c 8869 GV *gv = NULL;
601f1833 8870 CV *cv = NULL;
79072805 8871
7918f24d
NC
8872 PERL_ARGS_ASSERT_SV_2CV;
8873
85dec29a
NC
8874 if (!sv) {
8875 *st = NULL;
8876 *gvp = NULL;
8877 return NULL;
8878 }
79072805 8879 switch (SvTYPE(sv)) {
79072805
LW
8880 case SVt_PVCV:
8881 *st = CvSTASH(sv);
a0714e2c 8882 *gvp = NULL;
ea726b52 8883 return MUTABLE_CV(sv);
79072805
LW
8884 case SVt_PVHV:
8885 case SVt_PVAV:
ef58ba18 8886 *st = NULL;
a0714e2c 8887 *gvp = NULL;
601f1833 8888 return NULL;
79072805 8889 default:
ff55a019 8890 SvGETMAGIC(sv);
a0d0e21e 8891 if (SvROK(sv)) {
93d7320b
DM
8892 if (SvAMAGIC(sv))
8893 sv = amagic_deref_call(sv, to_cv_amg);
8897dcaa
NC
8894 /* At this point I'd like to do SPAGAIN, but really I need to
8895 force it upon my callers. Hmmm. This is a mess... */
f5284f61 8896
62f274bf
GS
8897 sv = SvRV(sv);
8898 if (SvTYPE(sv) == SVt_PVCV) {
ea726b52 8899 cv = MUTABLE_CV(sv);
a0714e2c 8900 *gvp = NULL;
62f274bf
GS
8901 *st = CvSTASH(cv);
8902 return cv;
8903 }
6e592b3a 8904 else if(isGV_with_GP(sv))
159b6efe 8905 gv = MUTABLE_GV(sv);
62f274bf 8906 else
cea2e8a9 8907 Perl_croak(aTHX_ "Not a subroutine reference");
a0d0e21e 8908 }
6e592b3a 8909 else if (isGV_with_GP(sv)) {
159b6efe 8910 gv = MUTABLE_GV(sv);
9d0f7ed7 8911 }
ff55a019 8912 else {
77cb3b01 8913 gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
ff55a019 8914 }
79072805 8915 *gvp = gv;
ef58ba18
NC
8916 if (!gv) {
8917 *st = NULL;
601f1833 8918 return NULL;
ef58ba18 8919 }
e26df76a 8920 /* Some flags to gv_fetchsv mean don't really create the GV */
6e592b3a 8921 if (!isGV_with_GP(gv)) {
e26df76a
NC
8922 *st = NULL;
8923 return NULL;
8924 }
79072805 8925 *st = GvESTASH(gv);
9da346da 8926 if (lref & ~GV_ADDMG && !GvCVu(gv)) {
4633a7c4 8927 SV *tmpsv;
748a9306 8928 ENTER;
561b68a9 8929 tmpsv = newSV(0);
bd61b366 8930 gv_efullname3(tmpsv, gv, NULL);
f6ec51f7
GS
8931 /* XXX this is probably not what they think they're getting.
8932 * It has the same effect as "sub name;", i.e. just a forward
8933 * declaration! */
774d564b 8934 newSUB(start_subparse(FALSE, 0),
4633a7c4 8935 newSVOP(OP_CONST, 0, tmpsv),
5f66b61c 8936 NULL, NULL);
748a9306 8937 LEAVE;
8ebc5c01 8938 if (!GvCVu(gv))
35c1215d 8939 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
4052d21c 8940 SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8990e307 8941 }
8ebc5c01 8942 return GvCVu(gv);
79072805
LW
8943 }
8944}
8945
c461cf8f
JH
8946/*
8947=for apidoc sv_true
8948
8949Returns true if the SV has a true value by Perl's rules.
645c22ef
DM
8950Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8951instead use an in-line version.
c461cf8f
JH
8952
8953=cut
8954*/
8955
79072805 8956I32
23f13727 8957Perl_sv_true(pTHX_ register SV *const sv)
79072805 8958{
8990e307
LW
8959 if (!sv)
8960 return 0;
79072805 8961 if (SvPOK(sv)) {
823a54a3
AL
8962 register const XPV* const tXpv = (XPV*)SvANY(sv);
8963 if (tXpv &&
c2f1de04 8964 (tXpv->xpv_cur > 1 ||
339049b0 8965 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
79072805
LW
8966 return 1;
8967 else
8968 return 0;
8969 }
8970 else {
8971 if (SvIOK(sv))
463ee0b2 8972 return SvIVX(sv) != 0;
79072805
LW
8973 else {
8974 if (SvNOK(sv))
463ee0b2 8975 return SvNVX(sv) != 0.0;
79072805 8976 else
463ee0b2 8977 return sv_2bool(sv);
79072805
LW
8978 }
8979 }
8980}
79072805 8981
645c22ef 8982/*
c461cf8f
JH
8983=for apidoc sv_pvn_force
8984
8985Get a sensible string out of the SV somehow.
645c22ef
DM
8986A private implementation of the C<SvPV_force> macro for compilers which
8987can't cope with complex macro expressions. Always use the macro instead.
c461cf8f 8988
8d6d96c1
HS
8989=for apidoc sv_pvn_force_flags
8990
8991Get a sensible string out of the SV somehow.
8992If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8993appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8994implemented in terms of this function.
645c22ef
DM
8995You normally want to use the various wrapper macros instead: see
8996C<SvPV_force> and C<SvPV_force_nomg>
8d6d96c1
HS
8997
8998=cut
8999*/
9000
9001char *
12964ddd 9002Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8d6d96c1 9003{
97aff369 9004 dVAR;
7918f24d
NC
9005
9006 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9007
6fc92669 9008 if (SvTHINKFIRST(sv) && !SvROK(sv))
765f542d 9009 sv_force_normal_flags(sv, 0);
1c846c1f 9010
a0d0e21e 9011 if (SvPOK(sv)) {
13c5b33c
NC
9012 if (lp)
9013 *lp = SvCUR(sv);
a0d0e21e
LW
9014 }
9015 else {
a3b680e6 9016 char *s;
13c5b33c
NC
9017 STRLEN len;
9018
4d84ee25 9019 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
b64e5050 9020 const char * const ref = sv_reftype(sv,0);
4d84ee25
NC
9021 if (PL_op)
9022 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
94bbb3f4 9023 ref, OP_DESC(PL_op));
4d84ee25 9024 else
b64e5050 9025 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
4d84ee25 9026 }
1f257c95
NC
9027 if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
9028 || isGV_with_GP(sv))
22e74366 9029 /* diag_listed_as: Can't coerce %s to %s in %s */
cea2e8a9 9030 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
94bbb3f4 9031 OP_DESC(PL_op));
b64e5050 9032 s = sv_2pv_flags(sv, &len, flags);
13c5b33c
NC
9033 if (lp)
9034 *lp = len;
9035
3f7c398e 9036 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
a0d0e21e
LW
9037 if (SvROK(sv))
9038 sv_unref(sv);
862a34c6 9039 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
a0d0e21e 9040 SvGROW(sv, len + 1);
706aa1c9 9041 Move(s,SvPVX(sv),len,char);
a0d0e21e 9042 SvCUR_set(sv, len);
97a130b8 9043 SvPVX(sv)[len] = '\0';
a0d0e21e
LW
9044 }
9045 if (!SvPOK(sv)) {
9046 SvPOK_on(sv); /* validate pointer */
9047 SvTAINT(sv);
1d7c1841 9048 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 9049 PTR2UV(sv),SvPVX_const(sv)));
a0d0e21e
LW
9050 }
9051 }
4d84ee25 9052 return SvPVX_mutable(sv);
a0d0e21e
LW
9053}
9054
645c22ef 9055/*
645c22ef
DM
9056=for apidoc sv_pvbyten_force
9057
0feed65a 9058The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
645c22ef
DM
9059
9060=cut
9061*/
9062
7340a771 9063char *
12964ddd 9064Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 9065{
7918f24d
NC
9066 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9067
46ec2f14 9068 sv_pvn_force(sv,lp);
ffebcc3e 9069 sv_utf8_downgrade(sv,0);
46ec2f14
TS
9070 *lp = SvCUR(sv);
9071 return SvPVX(sv);
7340a771
GS
9072}
9073
645c22ef 9074/*
c461cf8f
JH
9075=for apidoc sv_pvutf8n_force
9076
0feed65a 9077The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
c461cf8f
JH
9078
9079=cut
9080*/
9081
7340a771 9082char *
12964ddd 9083Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
7340a771 9084{
7918f24d
NC
9085 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9086
46ec2f14 9087 sv_pvn_force(sv,lp);
560a288e 9088 sv_utf8_upgrade(sv);
46ec2f14
TS
9089 *lp = SvCUR(sv);
9090 return SvPVX(sv);
7340a771
GS
9091}
9092
c461cf8f 9093/*
cba0b539 9094=for apidoc sv_reftype
05c0d6bb 9095
cba0b539 9096Returns a string describing what the SV is a reference to.
c461cf8f
JH
9097
9098=cut
9099*/
9100
2b388283 9101const char *
cba0b539 9102Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
a0d0e21e 9103{
cba0b539 9104 PERL_ARGS_ASSERT_SV_REFTYPE;
c86bf373 9105 if (ob && SvOBJECT(sv)) {
a15456de 9106 return SvPV_nolen_const(sv_ref(NULL, sv, ob));
c86bf373 9107 }
a0d0e21e
LW
9108 else {
9109 switch (SvTYPE(sv)) {
9110 case SVt_NULL:
9111 case SVt_IV:
9112 case SVt_NV:
a0d0e21e
LW
9113 case SVt_PV:
9114 case SVt_PVIV:
9115 case SVt_PVNV:
9116 case SVt_PVMG:
1cb0ed9b 9117 if (SvVOK(sv))
cba0b539 9118 return "VSTRING";
a0d0e21e 9119 if (SvROK(sv))
cba0b539 9120 return "REF";
a0d0e21e 9121 else
cba0b539
FR
9122 return "SCALAR";
9123
9124 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
9125 /* tied lvalues should appear to be
486ec47a 9126 * scalars for backwards compatibility */
cba0b539
FR
9127 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9128 ? "SCALAR" : "LVALUE");
9129 case SVt_PVAV: return "ARRAY";
9130 case SVt_PVHV: return "HASH";
9131 case SVt_PVCV: return "CODE";
9132 case SVt_PVGV: return (char *) (isGV_with_GP(sv)
9133 ? "GLOB" : "SCALAR");
9134 case SVt_PVFM: return "FORMAT";
9135 case SVt_PVIO: return "IO";
9136 case SVt_BIND: return "BIND";
9137 case SVt_REGEXP: return "REGEXP";
9138 default: return "UNKNOWN";
a0d0e21e
LW
9139 }
9140 }
9141}
9142
954c1994 9143/*
a15456de
BF
9144=for apidoc sv_ref
9145
9146Returns a SV describing what the SV passed in is a reference to.
9147
9148=cut
9149*/
9150
9151SV *
9152Perl_sv_ref(pTHX_ register SV *dst, const SV *const sv, const int ob)
9153{
9154 PERL_ARGS_ASSERT_SV_REF;
9155
9156 if (!dst)
9157 dst = sv_newmortal();
9158
9159 if (ob && SvOBJECT(sv)) {
9160 HvNAME_get(SvSTASH(sv))
9161 ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9162 : sv_setpvn(dst, "__ANON__", 8);
9163 }
9164 else {
9165 const char * reftype = sv_reftype(sv, 0);
9166 sv_setpv(dst, reftype);
9167 }
9168 return dst;
9169}
9170
9171/*
954c1994
GS
9172=for apidoc sv_isobject
9173
9174Returns a boolean indicating whether the SV is an RV pointing to a blessed
9175object. If the SV is not an RV, or if the object is not blessed, then this
9176will return false.
9177
9178=cut
9179*/
9180
463ee0b2 9181int
864dbfa3 9182Perl_sv_isobject(pTHX_ SV *sv)
85e6fe83 9183{
68dc0745 9184 if (!sv)
9185 return 0;
5b295bef 9186 SvGETMAGIC(sv);
85e6fe83
LW
9187 if (!SvROK(sv))
9188 return 0;
daba3364 9189 sv = SvRV(sv);
85e6fe83
LW
9190 if (!SvOBJECT(sv))
9191 return 0;
9192 return 1;
9193}
9194
954c1994
GS
9195/*
9196=for apidoc sv_isa
9197
9198Returns a boolean indicating whether the SV is blessed into the specified
9199class. This does not check for subtypes; use C<sv_derived_from> to verify
9200an inheritance relationship.
9201
9202=cut
9203*/
9204
85e6fe83 9205int
12964ddd 9206Perl_sv_isa(pTHX_ SV *sv, const char *const name)
463ee0b2 9207{
bfcb3514 9208 const char *hvname;
7918f24d
NC
9209
9210 PERL_ARGS_ASSERT_SV_ISA;
9211
68dc0745 9212 if (!sv)
9213 return 0;
5b295bef 9214 SvGETMAGIC(sv);
ed6116ce 9215 if (!SvROK(sv))
463ee0b2 9216 return 0;
daba3364 9217 sv = SvRV(sv);
ed6116ce 9218 if (!SvOBJECT(sv))
463ee0b2 9219 return 0;
bfcb3514
NC
9220 hvname = HvNAME_get(SvSTASH(sv));
9221 if (!hvname)
e27ad1f2 9222 return 0;
463ee0b2 9223
bfcb3514 9224 return strEQ(hvname, name);
463ee0b2
LW
9225}
9226
954c1994
GS
9227/*
9228=for apidoc newSVrv
9229
9230Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
9231it will be upgraded to one. If C<classname> is non-null then the new SV will
9232be blessed in the specified package. The new SV is returned and its
9233reference count is 1.
9234
9235=cut
9236*/
9237
463ee0b2 9238SV*
12964ddd 9239Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
463ee0b2 9240{
97aff369 9241 dVAR;
463ee0b2
LW
9242 SV *sv;
9243
7918f24d
NC
9244 PERL_ARGS_ASSERT_NEWSVRV;
9245
4561caa4 9246 new_SV(sv);
51cf62d8 9247
765f542d 9248 SV_CHECK_THINKFIRST_COW_DROP(rv);
52944de8 9249 (void)SvAMAGIC_off(rv);
51cf62d8 9250
0199fce9 9251 if (SvTYPE(rv) >= SVt_PVMG) {
a3b680e6 9252 const U32 refcnt = SvREFCNT(rv);
0199fce9
JD
9253 SvREFCNT(rv) = 0;
9254 sv_clear(rv);
9255 SvFLAGS(rv) = 0;
9256 SvREFCNT(rv) = refcnt;
0199fce9 9257
4df7f6af 9258 sv_upgrade(rv, SVt_IV);
dc5494d2
NC
9259 } else if (SvROK(rv)) {
9260 SvREFCNT_dec(SvRV(rv));
43230e26
NC
9261 } else {
9262 prepare_SV_for_RV(rv);
0199fce9 9263 }
51cf62d8 9264
0c34ef67 9265 SvOK_off(rv);
b162af07 9266 SvRV_set(rv, sv);
ed6116ce 9267 SvROK_on(rv);
463ee0b2 9268
a0d0e21e 9269 if (classname) {
da51bb9b 9270 HV* const stash = gv_stashpv(classname, GV_ADD);
a0d0e21e
LW
9271 (void)sv_bless(rv, stash);
9272 }
9273 return sv;
9274}
9275
954c1994
GS
9276/*
9277=for apidoc sv_setref_pv
9278
9279Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
9280argument will be upgraded to an RV. That RV will be modified to point to
9281the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9282into the SV. The C<classname> argument indicates the package for the
bd61b366 9283blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 9284will have a reference count of 1, and the RV will be returned.
954c1994
GS
9285
9286Do not use with other Perl types such as HV, AV, SV, CV, because those
9287objects will become corrupted by the pointer copy process.
9288
9289Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9290
9291=cut
9292*/
9293
a0d0e21e 9294SV*
12964ddd 9295Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
a0d0e21e 9296{
97aff369 9297 dVAR;
7918f24d
NC
9298
9299 PERL_ARGS_ASSERT_SV_SETREF_PV;
9300
189b2af5 9301 if (!pv) {
3280af22 9302 sv_setsv(rv, &PL_sv_undef);
189b2af5
GS
9303 SvSETMAGIC(rv);
9304 }
a0d0e21e 9305 else
56431972 9306 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
a0d0e21e
LW
9307 return rv;
9308}
9309
954c1994
GS
9310/*
9311=for apidoc sv_setref_iv
9312
9313Copies an integer into a new SV, optionally blessing the SV. The C<rv>
9314argument will be upgraded to an RV. That RV will be modified to point to
9315the new SV. The C<classname> argument indicates the package for the
bd61b366 9316blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 9317will have a reference count of 1, and the RV will be returned.
954c1994
GS
9318
9319=cut
9320*/
9321
a0d0e21e 9322SV*
12964ddd 9323Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
a0d0e21e 9324{
7918f24d
NC
9325 PERL_ARGS_ASSERT_SV_SETREF_IV;
9326
a0d0e21e
LW
9327 sv_setiv(newSVrv(rv,classname), iv);
9328 return rv;
9329}
9330
954c1994 9331/*
e1c57cef
JH
9332=for apidoc sv_setref_uv
9333
9334Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
9335argument will be upgraded to an RV. That RV will be modified to point to
9336the new SV. The C<classname> argument indicates the package for the
bd61b366 9337blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 9338will have a reference count of 1, and the RV will be returned.
e1c57cef
JH
9339
9340=cut
9341*/
9342
9343SV*
12964ddd 9344Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
e1c57cef 9345{
7918f24d
NC
9346 PERL_ARGS_ASSERT_SV_SETREF_UV;
9347
e1c57cef
JH
9348 sv_setuv(newSVrv(rv,classname), uv);
9349 return rv;
9350}
9351
9352/*
954c1994
GS
9353=for apidoc sv_setref_nv
9354
9355Copies a double into a new SV, optionally blessing the SV. The C<rv>
9356argument will be upgraded to an RV. That RV will be modified to point to
9357the new SV. The C<classname> argument indicates the package for the
bd61b366 9358blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 9359will have a reference count of 1, and the RV will be returned.
954c1994
GS
9360
9361=cut
9362*/
9363
a0d0e21e 9364SV*
12964ddd 9365Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
a0d0e21e 9366{
7918f24d
NC
9367 PERL_ARGS_ASSERT_SV_SETREF_NV;
9368
a0d0e21e
LW
9369 sv_setnv(newSVrv(rv,classname), nv);
9370 return rv;
9371}
463ee0b2 9372
954c1994
GS
9373/*
9374=for apidoc sv_setref_pvn
9375
9376Copies a string into a new SV, optionally blessing the SV. The length of the
9377string must be specified with C<n>. The C<rv> argument will be upgraded to
9378an RV. That RV will be modified to point to the new SV. The C<classname>
9379argument indicates the package for the blessing. Set C<classname> to
bd61b366 9380C<NULL> to avoid the blessing. The new SV will have a reference count
d34c2299 9381of 1, and the RV will be returned.
954c1994
GS
9382
9383Note that C<sv_setref_pv> copies the pointer while this copies the string.
9384
9385=cut
9386*/
9387
a0d0e21e 9388SV*
12964ddd
SS
9389Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9390 const char *const pv, const STRLEN n)
a0d0e21e 9391{
7918f24d
NC
9392 PERL_ARGS_ASSERT_SV_SETREF_PVN;
9393
a0d0e21e 9394 sv_setpvn(newSVrv(rv,classname), pv, n);
463ee0b2
LW
9395 return rv;
9396}
9397
954c1994
GS
9398/*
9399=for apidoc sv_bless
9400
9401Blesses an SV into a specified package. The SV must be an RV. The package
9402must be designated by its stash (see C<gv_stashpv()>). The reference count
9403of the SV is unaffected.
9404
9405=cut
9406*/
9407
a0d0e21e 9408SV*
12964ddd 9409Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
a0d0e21e 9410{
97aff369 9411 dVAR;
76e3520e 9412 SV *tmpRef;
7918f24d
NC
9413
9414 PERL_ARGS_ASSERT_SV_BLESS;
9415
a0d0e21e 9416 if (!SvROK(sv))
cea2e8a9 9417 Perl_croak(aTHX_ "Can't bless non-reference value");
76e3520e
GS
9418 tmpRef = SvRV(sv);
9419 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
e0744413
NC
9420 if (SvIsCOW(tmpRef))
9421 sv_force_normal_flags(tmpRef, 0);
76e3520e 9422 if (SvREADONLY(tmpRef))
6ad8f254 9423 Perl_croak_no_modify(aTHX);
76e3520e
GS
9424 if (SvOBJECT(tmpRef)) {
9425 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 9426 --PL_sv_objcount;
76e3520e 9427 SvREFCNT_dec(SvSTASH(tmpRef));
2e3febc6 9428 }
a0d0e21e 9429 }
76e3520e
GS
9430 SvOBJECT_on(tmpRef);
9431 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 9432 ++PL_sv_objcount;
862a34c6 9433 SvUPGRADE(tmpRef, SVt_PVMG);
85fbaab2 9434 SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
a0d0e21e 9435
2e3febc6
CS
9436 if (Gv_AMG(stash))
9437 SvAMAGIC_on(sv);
9438 else
52944de8 9439 (void)SvAMAGIC_off(sv);
a0d0e21e 9440
1edbfb88
AB
9441 if(SvSMAGICAL(tmpRef))
9442 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9443 mg_set(tmpRef);
9444
9445
ecdeb87c 9446
a0d0e21e
LW
9447 return sv;
9448}
9449
13be902c
FC
9450/* Downgrades a PVGV to a PVMG. If it’s actually a PVLV, we leave the type
9451 * as it is after unglobbing it.
645c22ef
DM
9452 */
9453
76e3520e 9454STATIC void
89e38212 9455S_sv_unglob(pTHX_ SV *const sv)
a0d0e21e 9456{
97aff369 9457 dVAR;
850fabdf 9458 void *xpvmg;
dd69841b 9459 HV *stash;
b37c2d43 9460 SV * const temp = sv_newmortal();
850fabdf 9461
7918f24d
NC
9462 PERL_ARGS_ASSERT_SV_UNGLOB;
9463
13be902c 9464 assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
a0d0e21e 9465 SvFAKE_off(sv);
159b6efe 9466 gv_efullname3(temp, MUTABLE_GV(sv), "*");
180488f8 9467
f7877b28 9468 if (GvGP(sv)) {
159b6efe
NC
9469 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9470 && HvNAME_get(stash))
dd69841b 9471 mro_method_changed_in(stash);
159b6efe 9472 gp_free(MUTABLE_GV(sv));
f7877b28 9473 }
e826b3c7 9474 if (GvSTASH(sv)) {
daba3364 9475 sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
5c284bb0 9476 GvSTASH(sv) = NULL;
e826b3c7 9477 }
a5f75d66 9478 GvMULTI_off(sv);
acda4c6a
NC
9479 if (GvNAME_HEK(sv)) {
9480 unshare_hek(GvNAME_HEK(sv));
9481 }
2e5b91de 9482 isGV_with_GP_off(sv);
850fabdf 9483
13be902c
FC
9484 if(SvTYPE(sv) == SVt_PVGV) {
9485 /* need to keep SvANY(sv) in the right arena */
9486 xpvmg = new_XPVMG();
9487 StructCopy(SvANY(sv), xpvmg, XPVMG);
9488 del_XPVGV(SvANY(sv));
9489 SvANY(sv) = xpvmg;
850fabdf 9490
13be902c
FC
9491 SvFLAGS(sv) &= ~SVTYPEMASK;
9492 SvFLAGS(sv) |= SVt_PVMG;
9493 }
180488f8
NC
9494
9495 /* Intentionally not calling any local SET magic, as this isn't so much a
9496 set operation as merely an internal storage change. */
9497 sv_setsv_flags(sv, temp, 0);
a0d0e21e
LW
9498}
9499
954c1994 9500/*
840a7b70 9501=for apidoc sv_unref_flags
954c1994
GS
9502
9503Unsets the RV status of the SV, and decrements the reference count of
9504whatever was being referenced by the RV. This can almost be thought of
840a7b70
IZ
9505as a reversal of C<newSVrv>. The C<cflags> argument can contain
9506C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9507(otherwise the decrementing is conditional on the reference count being
9508different from one or the reference being a readonly SV).
7889fe52 9509See C<SvROK_off>.
954c1994
GS
9510
9511=cut
9512*/
9513
ed6116ce 9514void
89e38212 9515Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
ed6116ce 9516{
b64e5050 9517 SV* const target = SvRV(ref);
810b8aa5 9518
7918f24d
NC
9519 PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9520
e15faf7d
NC
9521 if (SvWEAKREF(ref)) {
9522 sv_del_backref(target, ref);
9523 SvWEAKREF_off(ref);
9524 SvRV_set(ref, NULL);
810b8aa5
GS
9525 return;
9526 }
e15faf7d
NC
9527 SvRV_set(ref, NULL);
9528 SvROK_off(ref);
9529 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
04ca4930 9530 assigned to as BEGIN {$a = \"Foo"} will fail. */
e15faf7d
NC
9531 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9532 SvREFCNT_dec(target);
840a7b70 9533 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
e15faf7d 9534 sv_2mortal(target); /* Schedule for freeing later */
ed6116ce 9535}
8990e307 9536
840a7b70 9537/*
645c22ef
DM
9538=for apidoc sv_untaint
9539
9540Untaint an SV. Use C<SvTAINTED_off> instead.
dff47061 9541
645c22ef
DM
9542=cut
9543*/
9544
bbce6d69 9545void
89e38212 9546Perl_sv_untaint(pTHX_ SV *const sv)
bbce6d69 9547{
7918f24d
NC
9548 PERL_ARGS_ASSERT_SV_UNTAINT;
9549
13f57bf8 9550 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
b64e5050 9551 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
36477c24 9552 if (mg)
565764a8 9553 mg->mg_len &= ~1;
36477c24 9554 }
bbce6d69 9555}
9556
645c22ef
DM
9557/*
9558=for apidoc sv_tainted
9559
9560Test an SV for taintedness. Use C<SvTAINTED> instead.
dff47061 9561
645c22ef
DM
9562=cut
9563*/
9564
bbce6d69 9565bool
89e38212 9566Perl_sv_tainted(pTHX_ SV *const sv)
bbce6d69 9567{
7918f24d
NC
9568 PERL_ARGS_ASSERT_SV_TAINTED;
9569
13f57bf8 9570 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
823a54a3 9571 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
2ddb8a4f 9572 if (mg && (mg->mg_len & 1) )
36477c24 9573 return TRUE;
9574 }
9575 return FALSE;
bbce6d69 9576}
9577
09540bc3
JH
9578/*
9579=for apidoc sv_setpviv
9580
9581Copies an integer into the given SV, also updating its string value.
9582Does not handle 'set' magic. See C<sv_setpviv_mg>.
9583
9584=cut
9585*/
9586
9587void
89e38212 9588Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
09540bc3
JH
9589{
9590 char buf[TYPE_CHARS(UV)];
9591 char *ebuf;
b64e5050 9592 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
09540bc3 9593
7918f24d
NC
9594 PERL_ARGS_ASSERT_SV_SETPVIV;
9595
09540bc3
JH
9596 sv_setpvn(sv, ptr, ebuf - ptr);
9597}
9598
9599/*
9600=for apidoc sv_setpviv_mg
9601
9602Like C<sv_setpviv>, but also handles 'set' magic.
9603
9604=cut
9605*/
9606
9607void
89e38212 9608Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
09540bc3 9609{
7918f24d
NC
9610 PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9611
df7eb254 9612 sv_setpviv(sv, iv);
09540bc3
JH
9613 SvSETMAGIC(sv);
9614}
9615
cea2e8a9 9616#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
9617
9618/* pTHX_ magic can't cope with varargs, so this is a no-context
9619 * version of the main function, (which may itself be aliased to us).
9620 * Don't access this version directly.
9621 */
9622
cea2e8a9 9623void
89e38212 9624Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9625{
9626 dTHX;
9627 va_list args;
7918f24d
NC
9628
9629 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9630
cea2e8a9 9631 va_start(args, pat);
c5be433b 9632 sv_vsetpvf(sv, pat, &args);
cea2e8a9
GS
9633 va_end(args);
9634}
9635
645c22ef
DM
9636/* pTHX_ magic can't cope with varargs, so this is a no-context
9637 * version of the main function, (which may itself be aliased to us).
9638 * Don't access this version directly.
9639 */
cea2e8a9
GS
9640
9641void
89e38212 9642Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9643{
9644 dTHX;
9645 va_list args;
7918f24d
NC
9646
9647 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9648
cea2e8a9 9649 va_start(args, pat);
c5be433b 9650 sv_vsetpvf_mg(sv, pat, &args);
cea2e8a9 9651 va_end(args);
cea2e8a9
GS
9652}
9653#endif
9654
954c1994
GS
9655/*
9656=for apidoc sv_setpvf
9657
bffc3d17
SH
9658Works like C<sv_catpvf> but copies the text into the SV instead of
9659appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
954c1994
GS
9660
9661=cut
9662*/
9663
46fc3d4c 9664void
89e38212 9665Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 9666{
9667 va_list args;
7918f24d
NC
9668
9669 PERL_ARGS_ASSERT_SV_SETPVF;
9670
46fc3d4c 9671 va_start(args, pat);
c5be433b 9672 sv_vsetpvf(sv, pat, &args);
46fc3d4c 9673 va_end(args);
9674}
9675
bffc3d17
SH
9676/*
9677=for apidoc sv_vsetpvf
9678
9679Works like C<sv_vcatpvf> but copies the text into the SV instead of
9680appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
9681
9682Usually used via its frontend C<sv_setpvf>.
9683
9684=cut
9685*/
645c22ef 9686
c5be433b 9687void
89e38212 9688Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9689{
7918f24d
NC
9690 PERL_ARGS_ASSERT_SV_VSETPVF;
9691
4608196e 9692 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b 9693}
ef50df4b 9694
954c1994
GS
9695/*
9696=for apidoc sv_setpvf_mg
9697
9698Like C<sv_setpvf>, but also handles 'set' magic.
9699
9700=cut
9701*/
9702
ef50df4b 9703void
89e38212 9704Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
9705{
9706 va_list args;
7918f24d
NC
9707
9708 PERL_ARGS_ASSERT_SV_SETPVF_MG;
9709
ef50df4b 9710 va_start(args, pat);
c5be433b 9711 sv_vsetpvf_mg(sv, pat, &args);
ef50df4b 9712 va_end(args);
c5be433b
GS
9713}
9714
bffc3d17
SH
9715/*
9716=for apidoc sv_vsetpvf_mg
9717
9718Like C<sv_vsetpvf>, but also handles 'set' magic.
9719
9720Usually used via its frontend C<sv_setpvf_mg>.
9721
9722=cut
9723*/
645c22ef 9724
c5be433b 9725void
89e38212 9726Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9727{
7918f24d
NC
9728 PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9729
4608196e 9730 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9731 SvSETMAGIC(sv);
9732}
9733
cea2e8a9 9734#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
9735
9736/* pTHX_ magic can't cope with varargs, so this is a no-context
9737 * version of the main function, (which may itself be aliased to us).
9738 * Don't access this version directly.
9739 */
9740
cea2e8a9 9741void
89e38212 9742Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9743{
9744 dTHX;
9745 va_list args;
7918f24d
NC
9746
9747 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9748
cea2e8a9 9749 va_start(args, pat);
c5be433b 9750 sv_vcatpvf(sv, pat, &args);
cea2e8a9
GS
9751 va_end(args);
9752}
9753
645c22ef
DM
9754/* pTHX_ magic can't cope with varargs, so this is a no-context
9755 * version of the main function, (which may itself be aliased to us).
9756 * Don't access this version directly.
9757 */
9758
cea2e8a9 9759void
89e38212 9760Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
cea2e8a9
GS
9761{
9762 dTHX;
9763 va_list args;
7918f24d
NC
9764
9765 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9766
cea2e8a9 9767 va_start(args, pat);
c5be433b 9768 sv_vcatpvf_mg(sv, pat, &args);
cea2e8a9 9769 va_end(args);
cea2e8a9
GS
9770}
9771#endif
9772
954c1994
GS
9773/*
9774=for apidoc sv_catpvf
9775
d5ce4a7c
GA
9776Processes its arguments like C<sprintf> and appends the formatted
9777output to an SV. If the appended data contains "wide" characters
9778(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9779and characters >255 formatted with %c), the original SV might get
bffc3d17 9780upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
cdd94ca7
NC
9781C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9782valid UTF-8; if the original SV was bytes, the pattern should be too.
954c1994 9783
d5ce4a7c 9784=cut */
954c1994 9785
46fc3d4c 9786void
66ceb532 9787Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
46fc3d4c 9788{
9789 va_list args;
7918f24d
NC
9790
9791 PERL_ARGS_ASSERT_SV_CATPVF;
9792
46fc3d4c 9793 va_start(args, pat);
c5be433b 9794 sv_vcatpvf(sv, pat, &args);
46fc3d4c 9795 va_end(args);
9796}
9797
bffc3d17
SH
9798/*
9799=for apidoc sv_vcatpvf
9800
9801Processes its arguments like C<vsprintf> and appends the formatted output
9802to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
9803
9804Usually used via its frontend C<sv_catpvf>.
9805
9806=cut
9807*/
645c22ef 9808
ef50df4b 9809void
66ceb532 9810Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9811{
7918f24d
NC
9812 PERL_ARGS_ASSERT_SV_VCATPVF;
9813
4608196e 9814 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
9815}
9816
954c1994
GS
9817/*
9818=for apidoc sv_catpvf_mg
9819
9820Like C<sv_catpvf>, but also handles 'set' magic.
9821
9822=cut
9823*/
9824
c5be433b 9825void
66ceb532 9826Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
ef50df4b
GS
9827{
9828 va_list args;
7918f24d
NC
9829
9830 PERL_ARGS_ASSERT_SV_CATPVF_MG;
9831
ef50df4b 9832 va_start(args, pat);
c5be433b 9833 sv_vcatpvf_mg(sv, pat, &args);
ef50df4b 9834 va_end(args);
c5be433b
GS
9835}
9836
bffc3d17
SH
9837/*
9838=for apidoc sv_vcatpvf_mg
9839
9840Like C<sv_vcatpvf>, but also handles 'set' magic.
9841
9842Usually used via its frontend C<sv_catpvf_mg>.
9843
9844=cut
9845*/
645c22ef 9846
c5be433b 9847void
66ceb532 9848Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
c5be433b 9849{
7918f24d
NC
9850 PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9851
4608196e 9852 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
9853 SvSETMAGIC(sv);
9854}
9855
954c1994
GS
9856/*
9857=for apidoc sv_vsetpvfn
9858
bffc3d17 9859Works like C<sv_vcatpvfn> but copies the text into the SV instead of
954c1994
GS
9860appending it.
9861
bffc3d17 9862Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
645c22ef 9863
954c1994
GS
9864=cut
9865*/
9866
46fc3d4c 9867void
66ceb532
SS
9868Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9869 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9870{
7918f24d
NC
9871 PERL_ARGS_ASSERT_SV_VSETPVFN;
9872
76f68e9b 9873 sv_setpvs(sv, "");
7d5ea4e7 9874 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
46fc3d4c 9875}
9876
7baa4690
HS
9877
9878/*
9879 * Warn of missing argument to sprintf, and then return a defined value
9880 * to avoid inappropriate "use of uninit" warnings [perl #71000].
9881 */
9882#define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9883STATIC SV*
81ae3cde 9884S_vcatpvfn_missing_argument(pTHX) {
7baa4690
HS
9885 if (ckWARN(WARN_MISSING)) {
9886 Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9887 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9888 }
9889 return &PL_sv_no;
9890}
9891
9892
2d00ba3b 9893STATIC I32
66ceb532 9894S_expect_number(pTHX_ char **const pattern)
211dfcf1 9895{
97aff369 9896 dVAR;
211dfcf1 9897 I32 var = 0;
7918f24d
NC
9898
9899 PERL_ARGS_ASSERT_EXPECT_NUMBER;
9900
211dfcf1
HS
9901 switch (**pattern) {
9902 case '1': case '2': case '3':
9903 case '4': case '5': case '6':
9904 case '7': case '8': case '9':
2fba7546
GA
9905 var = *(*pattern)++ - '0';
9906 while (isDIGIT(**pattern)) {
5f66b61c 9907 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
2fba7546 9908 if (tmp < var)
94bbb3f4 9909 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
2fba7546
GA
9910 var = tmp;
9911 }
211dfcf1
HS
9912 }
9913 return var;
9914}
211dfcf1 9915
c445ea15 9916STATIC char *
66ceb532 9917S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
4151a5fe 9918{
a3b680e6 9919 const int neg = nv < 0;
4151a5fe 9920 UV uv;
4151a5fe 9921
7918f24d
NC
9922 PERL_ARGS_ASSERT_F0CONVERT;
9923
4151a5fe
IZ
9924 if (neg)
9925 nv = -nv;
9926 if (nv < UV_MAX) {
b464bac0 9927 char *p = endbuf;
4151a5fe 9928 nv += 0.5;
028f8eaa 9929 uv = (UV)nv;
4151a5fe
IZ
9930 if (uv & 1 && uv == nv)
9931 uv--; /* Round to even */
9932 do {
a3b680e6 9933 const unsigned dig = uv % 10;
4151a5fe
IZ
9934 *--p = '0' + dig;
9935 } while (uv /= 10);
9936 if (neg)
9937 *--p = '-';
9938 *len = endbuf - p;
9939 return p;
9940 }
bd61b366 9941 return NULL;
4151a5fe
IZ
9942}
9943
9944
954c1994
GS
9945/*
9946=for apidoc sv_vcatpvfn
9947
9948Processes its arguments like C<vsprintf> and appends the formatted output
9949to an SV. Uses an array of SVs if the C style variable argument list is
9950missing (NULL). When running with taint checks enabled, indicates via
9951C<maybe_tainted> if results are untrustworthy (often due to the use of
9952locales).
9953
bffc3d17 9954Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
645c22ef 9955
954c1994
GS
9956=cut
9957*/
9958
8896765a
RB
9959
9960#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
9961 vecstr = (U8*)SvPV_const(vecsv,veclen);\
9962 vec_utf8 = DO_UTF8(vecsv);
9963
1ef29b0e
RGS
9964/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9965
46fc3d4c 9966void
66ceb532
SS
9967Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9968 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
46fc3d4c 9969{
97aff369 9970 dVAR;
46fc3d4c 9971 char *p;
9972 char *q;
a3b680e6 9973 const char *patend;
fc36a67e 9974 STRLEN origlen;
46fc3d4c 9975 I32 svix = 0;
27da23d5 9976 static const char nullstr[] = "(null)";
a0714e2c 9977 SV *argsv = NULL;
b464bac0
AL
9978 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
9979 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
a0714e2c 9980 SV *nsv = NULL;
4151a5fe
IZ
9981 /* Times 4: a decimal digit takes more than 3 binary digits.
9982 * NV_DIG: mantissa takes than many decimal digits.
9983 * Plus 32: Playing safe. */
9984 char ebuf[IV_DIG * 4 + NV_DIG + 32];
9985 /* large enough for "%#.#f" --chip */
9986 /* what about long double NVs? --jhi */
db79b45b 9987
7918f24d 9988 PERL_ARGS_ASSERT_SV_VCATPVFN;
53c1dcc0
AL
9989 PERL_UNUSED_ARG(maybe_tainted);
9990
46fc3d4c 9991 /* no matter what, this is a string now */
fc36a67e 9992 (void)SvPV_force(sv, origlen);
46fc3d4c 9993
8896765a 9994 /* special-case "", "%s", and "%-p" (SVf - see below) */
46fc3d4c 9995 if (patlen == 0)
9996 return;
0dbb1585 9997 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
2d03de9c
AL
9998 if (args) {
9999 const char * const s = va_arg(*args, char*);
10000 sv_catpv(sv, s ? s : nullstr);
10001 }
10002 else if (svix < svmax) {
10003 sv_catsv(sv, *svargs);
2d03de9c 10004 }
5b98cd54
VP
10005 else
10006 S_vcatpvfn_missing_argument(aTHX);
2d03de9c 10007 return;
0dbb1585 10008 }
8896765a
RB
10009 if (args && patlen == 3 && pat[0] == '%' &&
10010 pat[1] == '-' && pat[2] == 'p') {
daba3364 10011 argsv = MUTABLE_SV(va_arg(*args, void*));
8896765a 10012 sv_catsv(sv, argsv);
8896765a 10013 return;
46fc3d4c 10014 }
10015
1d917b39 10016#ifndef USE_LONG_DOUBLE
4151a5fe 10017 /* special-case "%.<number>[gf]" */
7af36d83 10018 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
4151a5fe
IZ
10019 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10020 unsigned digits = 0;
10021 const char *pp;
10022
10023 pp = pat + 2;
10024 while (*pp >= '0' && *pp <= '9')
10025 digits = 10 * digits + (*pp++ - '0');
95ea86d5
NC
10026 if (pp - pat == (int)patlen - 1 && svix < svmax) {
10027 const NV nv = SvNV(*svargs);
4151a5fe 10028 if (*pp == 'g') {
2873255c
NC
10029 /* Add check for digits != 0 because it seems that some
10030 gconverts are buggy in this case, and we don't yet have
10031 a Configure test for this. */
10032 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10033 /* 0, point, slack */
2e59c212 10034 Gconvert(nv, (int)digits, 0, ebuf);
4151a5fe
IZ
10035 sv_catpv(sv, ebuf);
10036 if (*ebuf) /* May return an empty string for digits==0 */
10037 return;
10038 }
10039 } else if (!digits) {
10040 STRLEN l;
10041
10042 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10043 sv_catpvn(sv, p, l);
10044 return;
10045 }
10046 }
10047 }
10048 }
1d917b39 10049#endif /* !USE_LONG_DOUBLE */
4151a5fe 10050
2cf2cfc6 10051 if (!args && svix < svmax && DO_UTF8(*svargs))
205f51d8 10052 has_utf8 = TRUE;
2cf2cfc6 10053
46fc3d4c 10054 patend = (char*)pat + patlen;
10055 for (p = (char*)pat; p < patend; p = q) {
10056 bool alt = FALSE;
10057 bool left = FALSE;
b22c7a20 10058 bool vectorize = FALSE;
211dfcf1 10059 bool vectorarg = FALSE;
2cf2cfc6 10060 bool vec_utf8 = FALSE;
46fc3d4c 10061 char fill = ' ';
10062 char plus = 0;
10063 char intsize = 0;
10064 STRLEN width = 0;
fc36a67e 10065 STRLEN zeros = 0;
46fc3d4c 10066 bool has_precis = FALSE;
10067 STRLEN precis = 0;
c445ea15 10068 const I32 osvix = svix;
2cf2cfc6 10069 bool is_utf8 = FALSE; /* is this item utf8? */
20f6aaab
AS
10070#ifdef HAS_LDBL_SPRINTF_BUG
10071 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8 10072 with sfio - Allen <allens@cpan.org> */
20f6aaab
AS
10073 bool fix_ldbl_sprintf_bug = FALSE;
10074#endif
205f51d8 10075
46fc3d4c 10076 char esignbuf[4];
89ebb4a3 10077 U8 utf8buf[UTF8_MAXBYTES+1];
46fc3d4c 10078 STRLEN esignlen = 0;
10079
bd61b366 10080 const char *eptr = NULL;
1d1ac7bc 10081 const char *fmtstart;
fc36a67e 10082 STRLEN elen = 0;
a0714e2c 10083 SV *vecsv = NULL;
4608196e 10084 const U8 *vecstr = NULL;
b22c7a20 10085 STRLEN veclen = 0;
934abaf1 10086 char c = 0;
46fc3d4c 10087 int i;
9c5ffd7c 10088 unsigned base = 0;
8c8eb53c
RB
10089 IV iv = 0;
10090 UV uv = 0;
9e5b023a
JH
10091 /* we need a long double target in case HAS_LONG_DOUBLE but
10092 not USE_LONG_DOUBLE
10093 */
35fff930 10094#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9e5b023a
JH
10095 long double nv;
10096#else
65202027 10097 NV nv;
9e5b023a 10098#endif
46fc3d4c 10099 STRLEN have;
10100 STRLEN need;
10101 STRLEN gap;
7af36d83 10102 const char *dotstr = ".";
b22c7a20 10103 STRLEN dotstrlen = 1;
211dfcf1 10104 I32 efix = 0; /* explicit format parameter index */
eb3fce90 10105 I32 ewix = 0; /* explicit width index */
211dfcf1
HS
10106 I32 epix = 0; /* explicit precision index */
10107 I32 evix = 0; /* explicit vector index */
eb3fce90 10108 bool asterisk = FALSE;
46fc3d4c 10109
211dfcf1 10110 /* echo everything up to the next format specification */
46fc3d4c 10111 for (q = p; q < patend && *q != '%'; ++q) ;
10112 if (q > p) {
db79b45b
JH
10113 if (has_utf8 && !pat_utf8)
10114 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
10115 else
10116 sv_catpvn(sv, p, q - p);
46fc3d4c 10117 p = q;
10118 }
10119 if (q++ >= patend)
10120 break;
10121
1d1ac7bc
MHM
10122 fmtstart = q;
10123
211dfcf1
HS
10124/*
10125 We allow format specification elements in this order:
10126 \d+\$ explicit format parameter index
10127 [-+ 0#]+ flags
a472f209 10128 v|\*(\d+\$)?v vector with optional (optionally specified) arg
f3583277 10129 0 flag (as above): repeated to allow "v02"
211dfcf1
HS
10130 \d+|\*(\d+\$)? width using optional (optionally specified) arg
10131 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10132 [hlqLV] size
8896765a
RB
10133 [%bcdefginopsuxDFOUX] format (mandatory)
10134*/
10135
10136 if (args) {
10137/*
10138 As of perl5.9.3, printf format checking is on by default.
10139 Internally, perl uses %p formats to provide an escape to
10140 some extended formatting. This block deals with those
10141 extensions: if it does not match, (char*)q is reset and
10142 the normal format processing code is used.
10143
10144 Currently defined extensions are:
10145 %p include pointer address (standard)
10146 %-p (SVf) include an SV (previously %_)
10147 %-<num>p include an SV with precision <num>
20023040 10148 %2p include a HEK
b8fa5213
FC
10149 %3p include a HEK with precision of 256
10150 %<num>p (where num != 2 or 3) reserved for future
20023040 10151 extensions
8896765a 10152
20023040 10153 Robin Barker 2005-07-14 (but modified since)
f46d31f2
RB
10154
10155 %1p (VDf) removed. RMB 2007-10-19
211dfcf1 10156*/
8896765a
RB
10157 char* r = q;
10158 bool sv = FALSE;
10159 STRLEN n = 0;
10160 if (*q == '-')
10161 sv = *q++;
c445ea15 10162 n = expect_number(&q);
8896765a
RB
10163 if (*q++ == 'p') {
10164 if (sv) { /* SVf */
10165 if (n) {
10166 precis = n;
10167 has_precis = TRUE;
10168 }
daba3364 10169 argsv = MUTABLE_SV(va_arg(*args, void*));
4ea561bc 10170 eptr = SvPV_const(argsv, elen);
8896765a
RB
10171 if (DO_UTF8(argsv))
10172 is_utf8 = TRUE;
10173 goto string;
10174 }
b8fa5213 10175 else if (n==2 || n==3) { /* HEKf */
20023040
FC
10176 HEK * const hek = va_arg(*args, HEK *);
10177 eptr = HEK_KEY(hek);
10178 elen = HEK_LEN(hek);
10179 if (HEK_UTF8(hek)) is_utf8 = TRUE;
b8fa5213
FC
10180 if (n==3) precis = 256, has_precis = TRUE;
10181 goto string;
20023040 10182 }
8896765a 10183 else if (n) {
9b387841
NC
10184 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10185 "internal %%<num>p might conflict with future printf extensions");
8896765a
RB
10186 }
10187 }
10188 q = r;
10189 }
10190
c445ea15 10191 if ( (width = expect_number(&q)) ) {
211dfcf1
HS
10192 if (*q == '$') {
10193 ++q;
10194 efix = width;
10195 } else {
10196 goto gotwidth;
10197 }
10198 }
10199
fc36a67e 10200 /* FLAGS */
10201
46fc3d4c 10202 while (*q) {
10203 switch (*q) {
10204 case ' ':
10205 case '+':
9911cee9
TS
10206 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10207 q++;
10208 else
10209 plus = *q++;
46fc3d4c 10210 continue;
10211
10212 case '-':
10213 left = TRUE;
10214 q++;
10215 continue;
10216
10217 case '0':
10218 fill = *q++;
10219 continue;
10220
10221 case '#':
10222 alt = TRUE;
10223 q++;
10224 continue;
10225
fc36a67e 10226 default:
10227 break;
10228 }
10229 break;
10230 }
46fc3d4c 10231
211dfcf1 10232 tryasterisk:
eb3fce90 10233 if (*q == '*') {
211dfcf1 10234 q++;
c445ea15 10235 if ( (ewix = expect_number(&q)) )
211dfcf1
HS
10236 if (*q++ != '$')
10237 goto unknown;
eb3fce90 10238 asterisk = TRUE;
211dfcf1
HS
10239 }
10240 if (*q == 'v') {
eb3fce90 10241 q++;
211dfcf1
HS
10242 if (vectorize)
10243 goto unknown;
9cbac4c7 10244 if ((vectorarg = asterisk)) {
211dfcf1
HS
10245 evix = ewix;
10246 ewix = 0;
10247 asterisk = FALSE;
10248 }
10249 vectorize = TRUE;
10250 goto tryasterisk;
eb3fce90
JH
10251 }
10252
211dfcf1 10253 if (!asterisk)
858a90f9 10254 {
7a5fa8a2 10255 if( *q == '0' )
f3583277 10256 fill = *q++;
c445ea15 10257 width = expect_number(&q);
858a90f9 10258 }
211dfcf1 10259
ed362004
HS
10260 if (vectorize && vectorarg) {
10261 /* vectorizing, but not with the default "." */
10262 if (args)
10263 vecsv = va_arg(*args, SV*);
10264 else if (evix) {
10265 vecsv = (evix > 0 && evix <= svmax)
10266 ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10267 } else {
10268 vecsv = svix < svmax
10269 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
211dfcf1 10270 }
ed362004
HS
10271 dotstr = SvPV_const(vecsv, dotstrlen);
10272 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10273 bad with tied or overloaded values that return UTF8. */
10274 if (DO_UTF8(vecsv))
10275 is_utf8 = TRUE;
10276 else if (has_utf8) {
10277 vecsv = sv_mortalcopy(vecsv);
10278 sv_utf8_upgrade(vecsv);
10279 dotstr = SvPV_const(vecsv, dotstrlen);
10280 is_utf8 = TRUE;
10281 }
eb3fce90 10282 }
fc36a67e 10283
eb3fce90 10284 if (asterisk) {
fc36a67e 10285 if (args)
10286 i = va_arg(*args, int);
10287 else
eb3fce90
JH
10288 i = (ewix ? ewix <= svmax : svix < svmax) ?
10289 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
fc36a67e 10290 left |= (i < 0);
10291 width = (i < 0) ? -i : i;
fc36a67e 10292 }
211dfcf1 10293 gotwidth:
fc36a67e 10294
10295 /* PRECISION */
46fc3d4c 10296
fc36a67e 10297 if (*q == '.') {
10298 q++;
10299 if (*q == '*') {
211dfcf1 10300 q++;
c445ea15 10301 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
7b8dd722
HS
10302 goto unknown;
10303 /* XXX: todo, support specified precision parameter */
10304 if (epix)
211dfcf1 10305 goto unknown;
46fc3d4c 10306 if (args)
10307 i = va_arg(*args, int);
10308 else
eb3fce90
JH
10309 i = (ewix ? ewix <= svmax : svix < svmax)
10310 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9911cee9
TS
10311 precis = i;
10312 has_precis = !(i < 0);
fc36a67e 10313 }
10314 else {
10315 precis = 0;
10316 while (isDIGIT(*q))
10317 precis = precis * 10 + (*q++ - '0');
9911cee9 10318 has_precis = TRUE;
fc36a67e 10319 }
fc36a67e 10320 }
46fc3d4c 10321
ed362004
HS
10322 if (vectorize) {
10323 if (args) {
10324 VECTORIZE_ARGS
10325 }
10326 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10327 vecsv = svargs[efix ? efix-1 : svix++];
10328 vecstr = (U8*)SvPV_const(vecsv,veclen);
10329 vec_utf8 = DO_UTF8(vecsv);
10330
10331 /* if this is a version object, we need to convert
10332 * back into v-string notation and then let the
10333 * vectorize happen normally
10334 */
10335 if (sv_derived_from(vecsv, "version")) {
10336 char *version = savesvpv(vecsv);
10337 if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10338 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
10339 "vector argument not supported with alpha versions");
10340 goto unknown;
10341 }
10342 vecsv = sv_newmortal();
10343 scan_vstring(version, version + veclen, vecsv);
10344 vecstr = (U8*)SvPV_const(vecsv, veclen);
10345 vec_utf8 = DO_UTF8(vecsv);
10346 Safefree(version);
10347 }
10348 }
10349 else {
10350 vecstr = (U8*)"";
10351 veclen = 0;
10352 }
10353 }
10354
fc36a67e 10355 /* SIZE */
46fc3d4c 10356
fc36a67e 10357 switch (*q) {
c623ac67
GS
10358#ifdef WIN32
10359 case 'I': /* Ix, I32x, and I64x */
10360# ifdef WIN64
10361 if (q[1] == '6' && q[2] == '4') {
10362 q += 3;
10363 intsize = 'q';
10364 break;
10365 }
10366# endif
10367 if (q[1] == '3' && q[2] == '2') {
10368 q += 3;
10369 break;
10370 }
10371# ifdef WIN64
10372 intsize = 'q';
10373# endif
10374 q++;
10375 break;
10376#endif
9e5b023a 10377#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
6f9bb7fd 10378 case 'L': /* Ld */
5f66b61c 10379 /*FALLTHROUGH*/
e5c81feb 10380#ifdef HAS_QUAD
6f9bb7fd 10381 case 'q': /* qd */
9e5b023a 10382#endif
6f9bb7fd
GS
10383 intsize = 'q';
10384 q++;
10385 break;
10386#endif
fc36a67e 10387 case 'l':
d5b9c847 10388 ++q;
9e5b023a 10389#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
d5b9c847 10390 if (*q == 'l') { /* lld, llf */
fc36a67e 10391 intsize = 'q';
07208e09
CS
10392 ++q;
10393 }
10394 else
fc36a67e 10395#endif
07208e09
CS
10396 intsize = 'l';
10397 break;
fc36a67e 10398 case 'h':
07208e09
CS
10399 if (*++q == 'h') { /* hhd, hhu */
10400 intsize = 'c';
10401 ++q;
10402 }
10403 else
10404 intsize = 'h';
10405 break;
fc36a67e 10406 case 'V':
07208e09
CS
10407 case 'z':
10408 case 't':
10409#if HAS_C99
10410 case 'j':
10411#endif
fc36a67e 10412 intsize = *q++;
46fc3d4c 10413 break;
10414 }
10415
fc36a67e 10416 /* CONVERSION */
10417
211dfcf1
HS
10418 if (*q == '%') {
10419 eptr = q++;
10420 elen = 1;
26372e71
GA
10421 if (vectorize) {
10422 c = '%';
10423 goto unknown;
10424 }
211dfcf1
HS
10425 goto string;
10426 }
10427
26372e71 10428 if (!vectorize && !args) {
86c51f8b
NC
10429 if (efix) {
10430 const I32 i = efix-1;
7baa4690 10431 argsv = (i >= 0 && i < svmax)
81ae3cde 10432 ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
86c51f8b
NC
10433 } else {
10434 argsv = (svix >= 0 && svix < svmax)
81ae3cde 10435 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
86c51f8b 10436 }
863811b2 10437 }
211dfcf1 10438
46fc3d4c 10439 switch (c = *q++) {
10440
10441 /* STRINGS */
10442
46fc3d4c 10443 case 'c':
26372e71
GA
10444 if (vectorize)
10445 goto unknown;
4ea561bc 10446 uv = (args) ? va_arg(*args, int) : SvIV(argsv);
1bd104fb
JH
10447 if ((uv > 255 ||
10448 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
0064a8a9 10449 && !IN_BYTES) {
dfe13c55 10450 eptr = (char*)utf8buf;
9041c2e3 10451 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
2cf2cfc6 10452 is_utf8 = TRUE;
7e2040f0
GS
10453 }
10454 else {
10455 c = (char)uv;
10456 eptr = &c;
10457 elen = 1;
a0ed51b3 10458 }
46fc3d4c 10459 goto string;
10460
46fc3d4c 10461 case 's':
26372e71
GA
10462 if (vectorize)
10463 goto unknown;
10464 if (args) {
fc36a67e 10465 eptr = va_arg(*args, char*);
c635e13b 10466 if (eptr)
10467 elen = strlen(eptr);
10468 else {
27da23d5 10469 eptr = (char *)nullstr;
c635e13b 10470 elen = sizeof nullstr - 1;
10471 }
46fc3d4c 10472 }
211dfcf1 10473 else {
4ea561bc 10474 eptr = SvPV_const(argsv, elen);
7e2040f0 10475 if (DO_UTF8(argsv)) {
c494f1f4 10476 STRLEN old_precis = precis;
a0ed51b3 10477 if (has_precis && precis < elen) {
c494f1f4 10478 STRLEN ulen = sv_len_utf8(argsv);
9ef5ed94 10479 I32 p = precis > ulen ? ulen : precis;
7e2040f0 10480 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
a0ed51b3
LW
10481 precis = p;
10482 }
10483 if (width) { /* fudge width (can't fudge elen) */
59b61096
AV
10484 if (has_precis && precis < elen)
10485 width += precis - old_precis;
10486 else
10487 width += elen - sv_len_utf8(argsv);
a0ed51b3 10488 }
2cf2cfc6 10489 is_utf8 = TRUE;
a0ed51b3
LW
10490 }
10491 }
fc36a67e 10492
46fc3d4c 10493 string:
9ef5ed94 10494 if (has_precis && precis < elen)
46fc3d4c 10495 elen = precis;
10496 break;
10497
10498 /* INTEGERS */
10499
fc36a67e 10500 case 'p':
be75b157 10501 if (alt || vectorize)
c2e66d9e 10502 goto unknown;
211dfcf1 10503 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
fc36a67e 10504 base = 16;
10505 goto integer;
10506
46fc3d4c 10507 case 'D':
29fe7a80 10508#ifdef IV_IS_QUAD
22f3ae8c 10509 intsize = 'q';
29fe7a80 10510#else
46fc3d4c 10511 intsize = 'l';
29fe7a80 10512#endif
5f66b61c 10513 /*FALLTHROUGH*/
46fc3d4c 10514 case 'd':
10515 case 'i':
8896765a
RB
10516#if vdNUMBER
10517 format_vd:
10518#endif
b22c7a20 10519 if (vectorize) {
ba210ebe 10520 STRLEN ulen;
211dfcf1
HS
10521 if (!veclen)
10522 continue;
2cf2cfc6
A
10523 if (vec_utf8)
10524 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10525 UTF8_ALLOW_ANYUV);
b22c7a20 10526 else {
e83d50c9 10527 uv = *vecstr;
b22c7a20
GS
10528 ulen = 1;
10529 }
10530 vecstr += ulen;
10531 veclen -= ulen;
e83d50c9
JP
10532 if (plus)
10533 esignbuf[esignlen++] = plus;
b22c7a20
GS
10534 }
10535 else if (args) {
46fc3d4c 10536 switch (intsize) {
07208e09 10537 case 'c': iv = (char)va_arg(*args, int); break;
46fc3d4c 10538 case 'h': iv = (short)va_arg(*args, int); break;
46fc3d4c 10539 case 'l': iv = va_arg(*args, long); break;
fc36a67e 10540 case 'V': iv = va_arg(*args, IV); break;
07208e09
CS
10541 case 'z': iv = va_arg(*args, SSize_t); break;
10542 case 't': iv = va_arg(*args, ptrdiff_t); break;
b10c0dba 10543 default: iv = va_arg(*args, int); break;
07208e09
CS
10544#if HAS_C99
10545 case 'j': iv = va_arg(*args, intmax_t); break;
10546#endif
53f65a9e 10547 case 'q':
cf2093f6 10548#ifdef HAS_QUAD
53f65a9e
HS
10549 iv = va_arg(*args, Quad_t); break;
10550#else
10551 goto unknown;
cf2093f6 10552#endif
46fc3d4c 10553 }
10554 }
10555 else {
4ea561bc 10556 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
46fc3d4c 10557 switch (intsize) {
07208e09 10558 case 'c': iv = (char)tiv; break;
b10c0dba
MHM
10559 case 'h': iv = (short)tiv; break;
10560 case 'l': iv = (long)tiv; break;
10561 case 'V':
10562 default: iv = tiv; break;
53f65a9e 10563 case 'q':
cf2093f6 10564#ifdef HAS_QUAD
53f65a9e
HS
10565 iv = (Quad_t)tiv; break;
10566#else
10567 goto unknown;
cf2093f6 10568#endif
46fc3d4c 10569 }
10570 }
e83d50c9
JP
10571 if ( !vectorize ) /* we already set uv above */
10572 {
10573 if (iv >= 0) {
10574 uv = iv;
10575 if (plus)
10576 esignbuf[esignlen++] = plus;
10577 }
10578 else {
10579 uv = -iv;
10580 esignbuf[esignlen++] = '-';
10581 }
46fc3d4c 10582 }
10583 base = 10;
10584 goto integer;
10585
fc36a67e 10586 case 'U':
29fe7a80 10587#ifdef IV_IS_QUAD
22f3ae8c 10588 intsize = 'q';
29fe7a80 10589#else
fc36a67e 10590 intsize = 'l';
29fe7a80 10591#endif
5f66b61c 10592 /*FALLTHROUGH*/
fc36a67e 10593 case 'u':
10594 base = 10;
10595 goto uns_integer;
10596
7ff06cc7 10597 case 'B':
4f19785b
WSI
10598 case 'b':
10599 base = 2;
10600 goto uns_integer;
10601
46fc3d4c 10602 case 'O':
29fe7a80 10603#ifdef IV_IS_QUAD
22f3ae8c 10604 intsize = 'q';
29fe7a80 10605#else
46fc3d4c 10606 intsize = 'l';
29fe7a80 10607#endif
5f66b61c 10608 /*FALLTHROUGH*/
46fc3d4c 10609 case 'o':
10610 base = 8;
10611 goto uns_integer;
10612
10613 case 'X':
46fc3d4c 10614 case 'x':
10615 base = 16;
46fc3d4c 10616
10617 uns_integer:
b22c7a20 10618 if (vectorize) {
ba210ebe 10619 STRLEN ulen;
b22c7a20 10620 vector:
211dfcf1
HS
10621 if (!veclen)
10622 continue;
2cf2cfc6
A
10623 if (vec_utf8)
10624 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10625 UTF8_ALLOW_ANYUV);
b22c7a20 10626 else {
a05b299f 10627 uv = *vecstr;
b22c7a20
GS
10628 ulen = 1;
10629 }
10630 vecstr += ulen;
10631 veclen -= ulen;
10632 }
10633 else if (args) {
46fc3d4c 10634 switch (intsize) {
07208e09 10635 case 'c': uv = (unsigned char)va_arg(*args, unsigned); break;
46fc3d4c 10636 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
46fc3d4c 10637 case 'l': uv = va_arg(*args, unsigned long); break;
fc36a67e 10638 case 'V': uv = va_arg(*args, UV); break;
07208e09
CS
10639 case 'z': uv = va_arg(*args, Size_t); break;
10640 case 't': uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10641#if HAS_C99
10642 case 'j': uv = va_arg(*args, uintmax_t); break;
10643#endif
b10c0dba 10644 default: uv = va_arg(*args, unsigned); break;
53f65a9e 10645 case 'q':
cf2093f6 10646#ifdef HAS_QUAD
53f65a9e
HS
10647 uv = va_arg(*args, Uquad_t); break;
10648#else
10649 goto unknown;
cf2093f6 10650#endif
46fc3d4c 10651 }
10652 }
10653 else {
4ea561bc 10654 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
46fc3d4c 10655 switch (intsize) {
07208e09 10656 case 'c': uv = (unsigned char)tuv; break;
b10c0dba
MHM
10657 case 'h': uv = (unsigned short)tuv; break;
10658 case 'l': uv = (unsigned long)tuv; break;
10659 case 'V':
10660 default: uv = tuv; break;
53f65a9e 10661 case 'q':
cf2093f6 10662#ifdef HAS_QUAD
53f65a9e
HS
10663 uv = (Uquad_t)tuv; break;
10664#else
10665 goto unknown;
cf2093f6 10666#endif
46fc3d4c 10667 }
10668 }
10669
10670 integer:
4d84ee25
NC
10671 {
10672 char *ptr = ebuf + sizeof ebuf;
1387f30c
DD
10673 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10674 zeros = 0;
10675
4d84ee25
NC
10676 switch (base) {
10677 unsigned dig;
10678 case 16:
14eb61ab 10679 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
4d84ee25
NC
10680 do {
10681 dig = uv & 15;
10682 *--ptr = p[dig];
10683 } while (uv >>= 4);
1387f30c 10684 if (tempalt) {
4d84ee25
NC
10685 esignbuf[esignlen++] = '0';
10686 esignbuf[esignlen++] = c; /* 'x' or 'X' */
10687 }
10688 break;
10689 case 8:
10690 do {
10691 dig = uv & 7;
10692 *--ptr = '0' + dig;
10693 } while (uv >>= 3);
10694 if (alt && *ptr != '0')
10695 *--ptr = '0';
10696 break;
10697 case 2:
10698 do {
10699 dig = uv & 1;
10700 *--ptr = '0' + dig;
10701 } while (uv >>= 1);
1387f30c 10702 if (tempalt) {
4d84ee25 10703 esignbuf[esignlen++] = '0';
7ff06cc7 10704 esignbuf[esignlen++] = c;
4d84ee25
NC
10705 }
10706 break;
10707 default: /* it had better be ten or less */
10708 do {
10709 dig = uv % base;
10710 *--ptr = '0' + dig;
10711 } while (uv /= base);
10712 break;
46fc3d4c 10713 }
4d84ee25
NC
10714 elen = (ebuf + sizeof ebuf) - ptr;
10715 eptr = ptr;
10716 if (has_precis) {
10717 if (precis > elen)
10718 zeros = precis - elen;
e6bb52fd
TS
10719 else if (precis == 0 && elen == 1 && *eptr == '0'
10720 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
4d84ee25 10721 elen = 0;
9911cee9
TS
10722
10723 /* a precision nullifies the 0 flag. */
10724 if (fill == '0')
10725 fill = ' ';
eda88b6d 10726 }
c10ed8b9 10727 }
46fc3d4c 10728 break;
10729
10730 /* FLOATING POINT */
10731
fc36a67e 10732 case 'F':
10733 c = 'f'; /* maybe %F isn't supported here */
5f66b61c 10734 /*FALLTHROUGH*/
46fc3d4c 10735 case 'e': case 'E':
fc36a67e 10736 case 'f':
46fc3d4c 10737 case 'g': case 'G':
26372e71
GA
10738 if (vectorize)
10739 goto unknown;
46fc3d4c 10740
10741 /* This is evil, but floating point is even more evil */
10742
9e5b023a
JH
10743 /* for SV-style calling, we can only get NV
10744 for C-style calling, we assume %f is double;
10745 for simplicity we allow any of %Lf, %llf, %qf for long double
10746 */
10747 switch (intsize) {
10748 case 'V':
10749#if defined(USE_LONG_DOUBLE)
10750 intsize = 'q';
10751#endif
10752 break;
8a2e3f14 10753/* [perl #20339] - we should accept and ignore %lf rather than die */
00e17364 10754 case 'l':
5f66b61c 10755 /*FALLTHROUGH*/
9e5b023a
JH
10756 default:
10757#if defined(USE_LONG_DOUBLE)
10758 intsize = args ? 0 : 'q';
10759#endif
10760 break;
10761 case 'q':
10762#if defined(HAS_LONG_DOUBLE)
10763 break;
10764#else
5f66b61c 10765 /*FALLTHROUGH*/
9e5b023a 10766#endif
07208e09 10767 case 'c':
9e5b023a 10768 case 'h':
07208e09
CS
10769 case 'z':
10770 case 't':
10771 case 'j':
9e5b023a
JH
10772 goto unknown;
10773 }
10774
10775 /* now we need (long double) if intsize == 'q', else (double) */
26372e71 10776 nv = (args) ?
35fff930
JH
10777#if LONG_DOUBLESIZE > DOUBLESIZE
10778 intsize == 'q' ?
205f51d8
AS
10779 va_arg(*args, long double) :
10780 va_arg(*args, double)
35fff930 10781#else
205f51d8 10782 va_arg(*args, double)
35fff930 10783#endif
4ea561bc 10784 : SvNV(argsv);
fc36a67e 10785
10786 need = 0;
3952c29a
NC
10787 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10788 else. frexp() has some unspecified behaviour for those three */
10789 if (c != 'e' && c != 'E' && (nv * 0) == 0) {
fc36a67e 10790 i = PERL_INT_MIN;
9e5b023a
JH
10791 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10792 will cast our (long double) to (double) */
73b309ea 10793 (void)Perl_frexp(nv, &i);
fc36a67e 10794 if (i == PERL_INT_MIN)
cea2e8a9 10795 Perl_die(aTHX_ "panic: frexp");
c635e13b 10796 if (i > 0)
fc36a67e 10797 need = BIT_DIGITS(i);
10798 }
10799 need += has_precis ? precis : 6; /* known default */
20f6aaab 10800
fc36a67e 10801 if (need < width)
10802 need = width;
10803
20f6aaab
AS
10804#ifdef HAS_LDBL_SPRINTF_BUG
10805 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8
AS
10806 with sfio - Allen <allens@cpan.org> */
10807
10808# ifdef DBL_MAX
10809# define MY_DBL_MAX DBL_MAX
10810# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10811# if DOUBLESIZE >= 8
10812# define MY_DBL_MAX 1.7976931348623157E+308L
10813# else
10814# define MY_DBL_MAX 3.40282347E+38L
10815# endif
10816# endif
10817
10818# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10819# define MY_DBL_MAX_BUG 1L
20f6aaab 10820# else
205f51d8 10821# define MY_DBL_MAX_BUG MY_DBL_MAX
20f6aaab 10822# endif
20f6aaab 10823
205f51d8
AS
10824# ifdef DBL_MIN
10825# define MY_DBL_MIN DBL_MIN
10826# else /* XXX guessing! -Allen */
10827# if DOUBLESIZE >= 8
10828# define MY_DBL_MIN 2.2250738585072014E-308L
10829# else
10830# define MY_DBL_MIN 1.17549435E-38L
10831# endif
10832# endif
20f6aaab 10833
205f51d8
AS
10834 if ((intsize == 'q') && (c == 'f') &&
10835 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10836 (need < DBL_DIG)) {
10837 /* it's going to be short enough that
10838 * long double precision is not needed */
10839
10840 if ((nv <= 0L) && (nv >= -0L))
10841 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10842 else {
10843 /* would use Perl_fp_class as a double-check but not
10844 * functional on IRIX - see perl.h comments */
10845
10846 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10847 /* It's within the range that a double can represent */
10848#if defined(DBL_MAX) && !defined(DBL_MIN)
10849 if ((nv >= ((long double)1/DBL_MAX)) ||
10850 (nv <= (-(long double)1/DBL_MAX)))
20f6aaab 10851#endif
205f51d8 10852 fix_ldbl_sprintf_bug = TRUE;
20f6aaab 10853 }
205f51d8
AS
10854 }
10855 if (fix_ldbl_sprintf_bug == TRUE) {
10856 double temp;
10857
10858 intsize = 0;
10859 temp = (double)nv;
10860 nv = (NV)temp;
10861 }
20f6aaab 10862 }
205f51d8
AS
10863
10864# undef MY_DBL_MAX
10865# undef MY_DBL_MAX_BUG
10866# undef MY_DBL_MIN
10867
20f6aaab
AS
10868#endif /* HAS_LDBL_SPRINTF_BUG */
10869
46fc3d4c 10870 need += 20; /* fudge factor */
80252599
GS
10871 if (PL_efloatsize < need) {
10872 Safefree(PL_efloatbuf);
10873 PL_efloatsize = need + 20; /* more fudge */
a02a5408 10874 Newx(PL_efloatbuf, PL_efloatsize, char);
7d5ea4e7 10875 PL_efloatbuf[0] = '\0';
46fc3d4c 10876 }
10877
4151a5fe
IZ
10878 if ( !(width || left || plus || alt) && fill != '0'
10879 && has_precis && intsize != 'q' ) { /* Shortcuts */
2873255c
NC
10880 /* See earlier comment about buggy Gconvert when digits,
10881 aka precis is 0 */
10882 if ( c == 'g' && precis) {
2e59c212 10883 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
4150c189
NC
10884 /* May return an empty string for digits==0 */
10885 if (*PL_efloatbuf) {
10886 elen = strlen(PL_efloatbuf);
4151a5fe 10887 goto float_converted;
4150c189 10888 }
4151a5fe
IZ
10889 } else if ( c == 'f' && !precis) {
10890 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10891 break;
10892 }
10893 }
4d84ee25
NC
10894 {
10895 char *ptr = ebuf + sizeof ebuf;
10896 *--ptr = '\0';
10897 *--ptr = c;
10898 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9e5b023a 10899#if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
4d84ee25
NC
10900 if (intsize == 'q') {
10901 /* Copy the one or more characters in a long double
10902 * format before the 'base' ([efgEFG]) character to
10903 * the format string. */
10904 static char const prifldbl[] = PERL_PRIfldbl;
10905 char const *p = prifldbl + sizeof(prifldbl) - 3;
10906 while (p >= prifldbl) { *--ptr = *p--; }
10907 }
65202027 10908#endif
4d84ee25
NC
10909 if (has_precis) {
10910 base = precis;
10911 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10912 *--ptr = '.';
10913 }
10914 if (width) {
10915 base = width;
10916 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10917 }
10918 if (fill == '0')
10919 *--ptr = fill;
10920 if (left)
10921 *--ptr = '-';
10922 if (plus)
10923 *--ptr = plus;
10924 if (alt)
10925 *--ptr = '#';
10926 *--ptr = '%';
10927
10928 /* No taint. Otherwise we are in the strange situation
10929 * where printf() taints but print($float) doesn't.
10930 * --jhi */
9e5b023a 10931#if defined(HAS_LONG_DOUBLE)
4150c189 10932 elen = ((intsize == 'q')
d9fad198
JH
10933 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10934 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9e5b023a 10935#else
4150c189 10936 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9e5b023a 10937#endif
4d84ee25 10938 }
4151a5fe 10939 float_converted:
80252599 10940 eptr = PL_efloatbuf;
46fc3d4c 10941 break;
10942
fc36a67e 10943 /* SPECIAL */
10944
10945 case 'n':
26372e71
GA
10946 if (vectorize)
10947 goto unknown;
fc36a67e 10948 i = SvCUR(sv) - origlen;
26372e71 10949 if (args) {
c635e13b 10950 switch (intsize) {
07208e09 10951 case 'c': *(va_arg(*args, char*)) = i; break;
c635e13b 10952 case 'h': *(va_arg(*args, short*)) = i; break;
10953 default: *(va_arg(*args, int*)) = i; break;
10954 case 'l': *(va_arg(*args, long*)) = i; break;
10955 case 'V': *(va_arg(*args, IV*)) = i; break;
07208e09
CS
10956 case 'z': *(va_arg(*args, SSize_t*)) = i; break;
10957 case 't': *(va_arg(*args, ptrdiff_t*)) = i; break;
10958#if HAS_C99
10959 case 'j': *(va_arg(*args, intmax_t*)) = i; break;
10960#endif
53f65a9e 10961 case 'q':
cf2093f6 10962#ifdef HAS_QUAD
53f65a9e
HS
10963 *(va_arg(*args, Quad_t*)) = i; break;
10964#else
10965 goto unknown;
cf2093f6 10966#endif
c635e13b 10967 }
fc36a67e 10968 }
9dd79c3f 10969 else
211dfcf1 10970 sv_setuv_mg(argsv, (UV)i);
fc36a67e 10971 continue; /* not "break" */
10972
10973 /* UNKNOWN */
10974
46fc3d4c 10975 default:
fc36a67e 10976 unknown:
041457d9
DM
10977 if (!args
10978 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10979 && ckWARN(WARN_PRINTF))
10980 {
c4420975 10981 SV * const msg = sv_newmortal();
35c1215d
NC
10982 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10983 (PL_op->op_type == OP_PRTF) ? "" : "s");
1d1ac7bc
MHM
10984 if (fmtstart < patend) {
10985 const char * const fmtend = q < patend ? q : patend;
10986 const char * f;
10987 sv_catpvs(msg, "\"%");
10988 for (f = fmtstart; f < fmtend; f++) {
10989 if (isPRINT(*f)) {
10990 sv_catpvn(msg, f, 1);
10991 } else {
10992 Perl_sv_catpvf(aTHX_ msg,
10993 "\\%03"UVof, (UV)*f & 0xFF);
10994 }
10995 }
10996 sv_catpvs(msg, "\"");
10997 } else {
396482e1 10998 sv_catpvs(msg, "end of string");
1d1ac7bc 10999 }
be2597df 11000 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
c635e13b 11001 }
fb73857a 11002
11003 /* output mangled stuff ... */
11004 if (c == '\0')
11005 --q;
46fc3d4c 11006 eptr = p;
11007 elen = q - p;
fb73857a 11008
11009 /* ... right here, because formatting flags should not apply */
11010 SvGROW(sv, SvCUR(sv) + elen + 1);
11011 p = SvEND(sv);
4459522c 11012 Copy(eptr, p, elen, char);
fb73857a 11013 p += elen;
11014 *p = '\0';
3f7c398e 11015 SvCUR_set(sv, p - SvPVX_const(sv));
58e33a90 11016 svix = osvix;
fb73857a 11017 continue; /* not "break" */
46fc3d4c 11018 }
11019
cc61b222
TS
11020 if (is_utf8 != has_utf8) {
11021 if (is_utf8) {
11022 if (SvCUR(sv))
11023 sv_utf8_upgrade(sv);
11024 }
11025 else {
11026 const STRLEN old_elen = elen;
59cd0e26 11027 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
cc61b222
TS
11028 sv_utf8_upgrade(nsv);
11029 eptr = SvPVX_const(nsv);
11030 elen = SvCUR(nsv);
11031
11032 if (width) { /* fudge width (can't fudge elen) */
11033 width += elen - old_elen;
11034 }
11035 is_utf8 = TRUE;
11036 }
11037 }
11038
6c94ec8b 11039 have = esignlen + zeros + elen;
ed2b91d2 11040 if (have < zeros)
f1f66076 11041 Perl_croak_nocontext("%s", PL_memory_wrap);
6c94ec8b 11042
46fc3d4c 11043 need = (have > width ? have : width);
11044 gap = need - have;
11045
d2641cbd 11046 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
f1f66076 11047 Perl_croak_nocontext("%s", PL_memory_wrap);
b22c7a20 11048 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
46fc3d4c 11049 p = SvEND(sv);
11050 if (esignlen && fill == '0') {
53c1dcc0 11051 int i;
eb160463 11052 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 11053 *p++ = esignbuf[i];
11054 }
11055 if (gap && !left) {
11056 memset(p, fill, gap);
11057 p += gap;
11058 }
11059 if (esignlen && fill != '0') {
53c1dcc0 11060 int i;
eb160463 11061 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 11062 *p++ = esignbuf[i];
11063 }
fc36a67e 11064 if (zeros) {
53c1dcc0 11065 int i;
fc36a67e 11066 for (i = zeros; i; i--)
11067 *p++ = '0';
11068 }
46fc3d4c 11069 if (elen) {
4459522c 11070 Copy(eptr, p, elen, char);
46fc3d4c 11071 p += elen;
11072 }
11073 if (gap && left) {
11074 memset(p, ' ', gap);
11075 p += gap;
11076 }
b22c7a20
GS
11077 if (vectorize) {
11078 if (veclen) {
4459522c 11079 Copy(dotstr, p, dotstrlen, char);
b22c7a20
GS
11080 p += dotstrlen;
11081 }
11082 else
11083 vectorize = FALSE; /* done iterating over vecstr */
11084 }
2cf2cfc6
A
11085 if (is_utf8)
11086 has_utf8 = TRUE;
11087 if (has_utf8)
7e2040f0 11088 SvUTF8_on(sv);
46fc3d4c 11089 *p = '\0';
3f7c398e 11090 SvCUR_set(sv, p - SvPVX_const(sv));
b22c7a20
GS
11091 if (vectorize) {
11092 esignlen = 0;
11093 goto vector;
11094 }
46fc3d4c 11095 }
3e6bd4bf 11096 SvTAINT(sv);
46fc3d4c 11097}
51371543 11098
645c22ef
DM
11099/* =========================================================================
11100
11101=head1 Cloning an interpreter
11102
11103All the macros and functions in this section are for the private use of
11104the main function, perl_clone().
11105
f2fc5c80 11106The foo_dup() functions make an exact copy of an existing foo thingy.
645c22ef
DM
11107During the course of a cloning, a hash table is used to map old addresses
11108to new addresses. The table is created and manipulated with the
11109ptr_table_* functions.
11110
11111=cut
11112
3e8320cc 11113 * =========================================================================*/
645c22ef
DM
11114
11115
1d7c1841
GS
11116#if defined(USE_ITHREADS)
11117
d4c19fe8 11118/* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
1d7c1841
GS
11119#ifndef GpREFCNT_inc
11120# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11121#endif
11122
11123
a41cc44e 11124/* Certain cases in Perl_ss_dup have been merged, by relying on the fact
3e07292d 11125 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
538f2e76
NC
11126 If this changes, please unmerge ss_dup.
11127 Likewise, sv_dup_inc_multiple() relies on this fact. */
a09252eb 11128#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup_inc(s,t))
502c6561 11129#define av_dup(s,t) MUTABLE_AV(sv_dup((const SV *)s,t))
a09252eb 11130#define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
85fbaab2 11131#define hv_dup(s,t) MUTABLE_HV(sv_dup((const SV *)s,t))
a09252eb 11132#define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
daba3364 11133#define cv_dup(s,t) MUTABLE_CV(sv_dup((const SV *)s,t))
a09252eb 11134#define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
daba3364 11135#define io_dup(s,t) MUTABLE_IO(sv_dup((const SV *)s,t))
a09252eb 11136#define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
159b6efe 11137#define gv_dup(s,t) MUTABLE_GV(sv_dup((const SV *)s,t))
a09252eb 11138#define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
6136c704
AL
11139#define SAVEPV(p) ((p) ? savepv(p) : NULL)
11140#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
8cf8f3d1 11141
199e78b7
DM
11142/* clone a parser */
11143
11144yy_parser *
66ceb532 11145Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
199e78b7
DM
11146{
11147 yy_parser *parser;
11148
7918f24d
NC
11149 PERL_ARGS_ASSERT_PARSER_DUP;
11150
199e78b7
DM
11151 if (!proto)
11152 return NULL;
11153
7c197c94
DM
11154 /* look for it in the table first */
11155 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11156 if (parser)
11157 return parser;
11158
11159 /* create anew and remember what it is */
199e78b7 11160 Newxz(parser, 1, yy_parser);
7c197c94 11161 ptr_table_store(PL_ptr_table, proto, parser);
199e78b7 11162
199e78b7
DM
11163 /* XXX these not yet duped */
11164 parser->old_parser = NULL;
11165 parser->stack = NULL;
11166 parser->ps = NULL;
11167 parser->stack_size = 0;
11168 /* XXX parser->stack->state = 0; */
11169
11170 /* XXX eventually, just Copy() most of the parser struct ? */
11171
11172 parser->lex_brackets = proto->lex_brackets;
11173 parser->lex_casemods = proto->lex_casemods;
11174 parser->lex_brackstack = savepvn(proto->lex_brackstack,
11175 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11176 parser->lex_casestack = savepvn(proto->lex_casestack,
11177 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11178 parser->lex_defer = proto->lex_defer;
11179 parser->lex_dojoin = proto->lex_dojoin;
11180 parser->lex_expect = proto->lex_expect;
11181 parser->lex_formbrack = proto->lex_formbrack;
11182 parser->lex_inpat = proto->lex_inpat;
11183 parser->lex_inwhat = proto->lex_inwhat;
11184 parser->lex_op = proto->lex_op;
11185 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
11186 parser->lex_starts = proto->lex_starts;
11187 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
11188 parser->multi_close = proto->multi_close;
11189 parser->multi_open = proto->multi_open;
11190 parser->multi_start = proto->multi_start;
670a9cb2 11191 parser->multi_end = proto->multi_end;
199e78b7
DM
11192 parser->pending_ident = proto->pending_ident;
11193 parser->preambled = proto->preambled;
11194 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
bdc0bf6f 11195 parser->linestr = sv_dup_inc(proto->linestr, param);
53a7735b
DM
11196 parser->expect = proto->expect;
11197 parser->copline = proto->copline;
f06b5848 11198 parser->last_lop_op = proto->last_lop_op;
bc177e6b 11199 parser->lex_state = proto->lex_state;
2f9285f8 11200 parser->rsfp = fp_dup(proto->rsfp, '<', param);
5486870f
DM
11201 /* rsfp_filters entries have fake IoDIRP() */
11202 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12bd6ede
DM
11203 parser->in_my = proto->in_my;
11204 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13765c85 11205 parser->error_count = proto->error_count;
bc177e6b 11206
53a7735b 11207
f06b5848
DM
11208 parser->linestr = sv_dup_inc(proto->linestr, param);
11209
11210 {
1e05feb3
AL
11211 char * const ols = SvPVX(proto->linestr);
11212 char * const ls = SvPVX(parser->linestr);
f06b5848
DM
11213
11214 parser->bufptr = ls + (proto->bufptr >= ols ?
11215 proto->bufptr - ols : 0);
11216 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
11217 proto->oldbufptr - ols : 0);
11218 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11219 proto->oldoldbufptr - ols : 0);
11220 parser->linestart = ls + (proto->linestart >= ols ?
11221 proto->linestart - ols : 0);
11222 parser->last_uni = ls + (proto->last_uni >= ols ?
11223 proto->last_uni - ols : 0);
11224 parser->last_lop = ls + (proto->last_lop >= ols ?
11225 proto->last_lop - ols : 0);
11226
11227 parser->bufend = ls + SvCUR(parser->linestr);
11228 }
199e78b7 11229
14047fc9
DM
11230 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11231
2f9285f8 11232
199e78b7
DM
11233#ifdef PERL_MAD
11234 parser->endwhite = proto->endwhite;
11235 parser->faketokens = proto->faketokens;
11236 parser->lasttoke = proto->lasttoke;
11237 parser->nextwhite = proto->nextwhite;
11238 parser->realtokenstart = proto->realtokenstart;
11239 parser->skipwhite = proto->skipwhite;
11240 parser->thisclose = proto->thisclose;
11241 parser->thismad = proto->thismad;
11242 parser->thisopen = proto->thisopen;
11243 parser->thisstuff = proto->thisstuff;
11244 parser->thistoken = proto->thistoken;
11245 parser->thiswhite = proto->thiswhite;
fb205e7a
DM
11246
11247 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11248 parser->curforce = proto->curforce;
11249#else
11250 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11251 Copy(proto->nexttype, parser->nexttype, 5, I32);
11252 parser->nexttoke = proto->nexttoke;
199e78b7 11253#endif
f0c5aa00
DM
11254
11255 /* XXX should clone saved_curcop here, but we aren't passed
11256 * proto_perl; so do it in perl_clone_using instead */
11257
199e78b7
DM
11258 return parser;
11259}
11260
d2d73c3e 11261
d2d73c3e 11262/* duplicate a file handle */
645c22ef 11263
1d7c1841 11264PerlIO *
3be3cdd6 11265Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
1d7c1841
GS
11266{
11267 PerlIO *ret;
53c1dcc0 11268
7918f24d 11269 PERL_ARGS_ASSERT_FP_DUP;
53c1dcc0 11270 PERL_UNUSED_ARG(type);
73d840c0 11271
1d7c1841
GS
11272 if (!fp)
11273 return (PerlIO*)NULL;
11274
11275 /* look for it in the table first */
11276 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11277 if (ret)
11278 return ret;
11279
11280 /* create anew and remember what it is */
ecdeb87c 11281 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
1d7c1841
GS
11282 ptr_table_store(PL_ptr_table, fp, ret);
11283 return ret;
11284}
11285
645c22ef
DM
11286/* duplicate a directory handle */
11287
1d7c1841 11288DIR *
60b22aca 11289Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
1d7c1841 11290{
11a11ecf 11291 DIR *ret;
60b22aca
JD
11292
11293#ifdef HAS_FCHDIR
11a11ecf
FC
11294 DIR *pwd;
11295 register const Direntry_t *dirent;
11296 char smallbuf[256];
11297 char *name = NULL;
11298 STRLEN len = -1;
11299 long pos;
11300#endif
11301
96a5add6 11302 PERL_UNUSED_CONTEXT;
60b22aca 11303 PERL_ARGS_ASSERT_DIRP_DUP;
11a11ecf 11304
1d7c1841
GS
11305 if (!dp)
11306 return (DIR*)NULL;
60b22aca 11307
11a11ecf
FC
11308 /* look for it in the table first */
11309 ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11310 if (ret)
11311 return ret;
11312
60b22aca
JD
11313#ifdef HAS_FCHDIR
11314
11315 PERL_UNUSED_ARG(param);
11316
11a11ecf
FC
11317 /* create anew */
11318
11319 /* open the current directory (so we can switch back) */
11320 if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11321
11322 /* chdir to our dir handle and open the present working directory */
11323 if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11324 PerlDir_close(pwd);
11325 return (DIR *)NULL;
11326 }
11327 /* Now we should have two dir handles pointing to the same dir. */
11328
11329 /* Be nice to the calling code and chdir back to where we were. */
11330 fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11331
11332 /* We have no need of the pwd handle any more. */
11333 PerlDir_close(pwd);
11334
11335#ifdef DIRNAMLEN
11336# define d_namlen(d) (d)->d_namlen
11337#else
11338# define d_namlen(d) strlen((d)->d_name)
11339#endif
11340 /* Iterate once through dp, to get the file name at the current posi-
11341 tion. Then step back. */
11342 pos = PerlDir_tell(dp);
11343 if ((dirent = PerlDir_read(dp))) {
11344 len = d_namlen(dirent);
11345 if (len <= sizeof smallbuf) name = smallbuf;
11346 else Newx(name, len, char);
11347 Move(dirent->d_name, name, len, char);
11348 }
11349 PerlDir_seek(dp, pos);
11350
11351 /* Iterate through the new dir handle, till we find a file with the
11352 right name. */
11353 if (!dirent) /* just before the end */
11354 for(;;) {
11355 pos = PerlDir_tell(ret);
11356 if (PerlDir_read(ret)) continue; /* not there yet */
11357 PerlDir_seek(ret, pos); /* step back */
11358 break;
11359 }
11360 else {
11361 const long pos0 = PerlDir_tell(ret);
11362 for(;;) {
11363 pos = PerlDir_tell(ret);
11364 if ((dirent = PerlDir_read(ret))) {
11365 if (len == d_namlen(dirent)
11366 && memEQ(name, dirent->d_name, len)) {
11367 /* found it */
11368 PerlDir_seek(ret, pos); /* step back */
11369 break;
11370 }
11371 /* else we are not there yet; keep iterating */
11372 }
11373 else { /* This is not meant to happen. The best we can do is
11374 reset the iterator to the beginning. */
11375 PerlDir_seek(ret, pos0);
11376 break;
11377 }
11378 }
11379 }
11380#undef d_namlen
11381
11382 if (name && name != smallbuf)
11383 Safefree(name);
60b22aca
JD
11384#endif
11385
11386#ifdef WIN32
11387 ret = win32_dirp_dup(dp, param);
11388#endif
11a11ecf
FC
11389
11390 /* pop it in the pointer table */
60b22aca
JD
11391 if (ret)
11392 ptr_table_store(PL_ptr_table, dp, ret);
11a11ecf
FC
11393
11394 return ret;
1d7c1841
GS
11395}
11396
ff276b08 11397/* duplicate a typeglob */
645c22ef 11398
1d7c1841 11399GP *
66ceb532 11400Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
1d7c1841
GS
11401{
11402 GP *ret;
b37c2d43 11403
7918f24d
NC
11404 PERL_ARGS_ASSERT_GP_DUP;
11405
1d7c1841
GS
11406 if (!gp)
11407 return (GP*)NULL;
11408 /* look for it in the table first */
11409 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11410 if (ret)
11411 return ret;
11412
11413 /* create anew and remember what it is */
a02a5408 11414 Newxz(ret, 1, GP);
1d7c1841
GS
11415 ptr_table_store(PL_ptr_table, gp, ret);
11416
11417 /* clone */
46d65037
NC
11418 /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11419 on Newxz() to do this for us. */
d2d73c3e
AB
11420 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
11421 ret->gp_io = io_dup_inc(gp->gp_io, param);
11422 ret->gp_form = cv_dup_inc(gp->gp_form, param);
11423 ret->gp_av = av_dup_inc(gp->gp_av, param);
11424 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
11425 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11426 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
1d7c1841 11427 ret->gp_cvgen = gp->gp_cvgen;
1d7c1841 11428 ret->gp_line = gp->gp_line;
566771cc 11429 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
1d7c1841
GS
11430 return ret;
11431}
11432
645c22ef
DM
11433/* duplicate a chain of magic */
11434
1d7c1841 11435MAGIC *
b88ec9b8 11436Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
1d7c1841 11437{
c160a186 11438 MAGIC *mgret = NULL;
0228edf6 11439 MAGIC **mgprev_p = &mgret;
7918f24d
NC
11440
11441 PERL_ARGS_ASSERT_MG_DUP;
11442
1d7c1841
GS
11443 for (; mg; mg = mg->mg_moremagic) {
11444 MAGIC *nmg;
803f2748
DM
11445
11446 if ((param->flags & CLONEf_JOIN_IN)
11447 && mg->mg_type == PERL_MAGIC_backref)
11448 /* when joining, we let the individual SVs add themselves to
11449 * backref as needed. */
11450 continue;
11451
45f7fcc8 11452 Newx(nmg, 1, MAGIC);
0228edf6
NC
11453 *mgprev_p = nmg;
11454 mgprev_p = &(nmg->mg_moremagic);
11455
45f7fcc8
NC
11456 /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11457 dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11458 from the original commit adding Perl_mg_dup() - revision 4538.
11459 Similarly there is the annotation "XXX random ptr?" next to the
11460 assignment to nmg->mg_ptr. */
11461 *nmg = *mg;
11462
288b8c02 11463 /* FIXME for plugins
45f7fcc8
NC
11464 if (nmg->mg_type == PERL_MAGIC_qr) {
11465 nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
1d7c1841 11466 }
288b8c02
NC
11467 else
11468 */
5648c0ae
DM
11469 nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11470 ? nmg->mg_type == PERL_MAGIC_backref
11471 /* The backref AV has its reference
11472 * count deliberately bumped by 1 */
11473 ? SvREFCNT_inc(av_dup_inc((const AV *)
11474 nmg->mg_obj, param))
11475 : sv_dup_inc(nmg->mg_obj, param)
11476 : sv_dup(nmg->mg_obj, param);
45f7fcc8
NC
11477
11478 if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11479 if (nmg->mg_len > 0) {
11480 nmg->mg_ptr = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11481 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11482 AMT_AMAGIC((AMT*)nmg->mg_ptr))
14befaf4 11483 {
0bcc34c2 11484 AMT * const namtp = (AMT*)nmg->mg_ptr;
538f2e76
NC
11485 sv_dup_inc_multiple((SV**)(namtp->table),
11486 (SV**)(namtp->table), NofAMmeth, param);
1d7c1841
GS
11487 }
11488 }
45f7fcc8
NC
11489 else if (nmg->mg_len == HEf_SVKEY)
11490 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
1d7c1841 11491 }
45f7fcc8 11492 if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
16c91539 11493 nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
68795e93 11494 }
1d7c1841
GS
11495 }
11496 return mgret;
11497}
11498
4674ade5
NC
11499#endif /* USE_ITHREADS */
11500
db93c0c4
NC
11501struct ptr_tbl_arena {
11502 struct ptr_tbl_arena *next;
11503 struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers. */
11504};
11505
645c22ef
DM
11506/* create a new pointer-mapping table */
11507
1d7c1841
GS
11508PTR_TBL_t *
11509Perl_ptr_table_new(pTHX)
11510{
11511 PTR_TBL_t *tbl;
96a5add6
AL
11512 PERL_UNUSED_CONTEXT;
11513
b3a120bf 11514 Newx(tbl, 1, PTR_TBL_t);
1d7c1841
GS
11515 tbl->tbl_max = 511;
11516 tbl->tbl_items = 0;
db93c0c4
NC
11517 tbl->tbl_arena = NULL;
11518 tbl->tbl_arena_next = NULL;
11519 tbl->tbl_arena_end = NULL;
a02a5408 11520 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
1d7c1841
GS
11521 return tbl;
11522}
11523
7119fd33
NC
11524#define PTR_TABLE_HASH(ptr) \
11525 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
134ca3d6 11526
645c22ef
DM
11527/* map an existing pointer using a table */
11528
7bf61b54 11529STATIC PTR_TBL_ENT_t *
1eb6e4ca 11530S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
7918f24d 11531{
1d7c1841 11532 PTR_TBL_ENT_t *tblent;
4373e329 11533 const UV hash = PTR_TABLE_HASH(sv);
7918f24d
NC
11534
11535 PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11536
1d7c1841
GS
11537 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11538 for (; tblent; tblent = tblent->next) {
11539 if (tblent->oldval == sv)
7bf61b54 11540 return tblent;
1d7c1841 11541 }
d4c19fe8 11542 return NULL;
7bf61b54
NC
11543}
11544
11545void *
1eb6e4ca 11546Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
7bf61b54 11547{
b0e6ae5b 11548 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
7918f24d
NC
11549
11550 PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
96a5add6 11551 PERL_UNUSED_CONTEXT;
7918f24d 11552
d4c19fe8 11553 return tblent ? tblent->newval : NULL;
1d7c1841
GS
11554}
11555
645c22ef
DM
11556/* add a new entry to a pointer-mapping table */
11557
1d7c1841 11558void
1eb6e4ca 11559Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
1d7c1841 11560{
0c9fdfe0 11561 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
7918f24d
NC
11562
11563 PERL_ARGS_ASSERT_PTR_TABLE_STORE;
96a5add6 11564 PERL_UNUSED_CONTEXT;
1d7c1841 11565
7bf61b54
NC
11566 if (tblent) {
11567 tblent->newval = newsv;
11568 } else {
11569 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11570
db93c0c4
NC
11571 if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11572 struct ptr_tbl_arena *new_arena;
11573
11574 Newx(new_arena, 1, struct ptr_tbl_arena);
11575 new_arena->next = tbl->tbl_arena;
11576 tbl->tbl_arena = new_arena;
11577 tbl->tbl_arena_next = new_arena->array;
11578 tbl->tbl_arena_end = new_arena->array
11579 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11580 }
11581
11582 tblent = tbl->tbl_arena_next++;
d2a0f284 11583
7bf61b54
NC
11584 tblent->oldval = oldsv;
11585 tblent->newval = newsv;
11586 tblent->next = tbl->tbl_ary[entry];
11587 tbl->tbl_ary[entry] = tblent;
11588 tbl->tbl_items++;
11589 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11590 ptr_table_split(tbl);
1d7c1841 11591 }
1d7c1841
GS
11592}
11593
645c22ef
DM
11594/* double the hash bucket size of an existing ptr table */
11595
1d7c1841 11596void
1eb6e4ca 11597Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
1d7c1841
GS
11598{
11599 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
4373e329 11600 const UV oldsize = tbl->tbl_max + 1;
1d7c1841
GS
11601 UV newsize = oldsize * 2;
11602 UV i;
7918f24d
NC
11603
11604 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
96a5add6 11605 PERL_UNUSED_CONTEXT;
1d7c1841
GS
11606
11607 Renew(ary, newsize, PTR_TBL_ENT_t*);
11608 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11609 tbl->tbl_max = --newsize;
11610 tbl->tbl_ary = ary;
11611 for (i=0; i < oldsize; i++, ary++) {
4c9d89c5
NC
11612 PTR_TBL_ENT_t **entp = ary;
11613 PTR_TBL_ENT_t *ent = *ary;
11614 PTR_TBL_ENT_t **curentp;
11615 if (!ent)
1d7c1841
GS
11616 continue;
11617 curentp = ary + oldsize;
4c9d89c5 11618 do {
134ca3d6 11619 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
1d7c1841
GS
11620 *entp = ent->next;
11621 ent->next = *curentp;
11622 *curentp = ent;
1d7c1841
GS
11623 }
11624 else
11625 entp = &ent->next;
4c9d89c5
NC
11626 ent = *entp;
11627 } while (ent);
1d7c1841
GS
11628 }
11629}
11630
645c22ef 11631/* remove all the entries from a ptr table */
5c5ade3e 11632/* Deprecated - will be removed post 5.14 */
645c22ef 11633
a0739874 11634void
1eb6e4ca 11635Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
a0739874 11636{
d5cefff9 11637 if (tbl && tbl->tbl_items) {
db93c0c4 11638 struct ptr_tbl_arena *arena = tbl->tbl_arena;
a0739874 11639
db93c0c4 11640 Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
ab1e7f95 11641
db93c0c4
NC
11642 while (arena) {
11643 struct ptr_tbl_arena *next = arena->next;
11644
11645 Safefree(arena);
11646 arena = next;
11647 };
a0739874 11648
d5cefff9 11649 tbl->tbl_items = 0;
db93c0c4
NC
11650 tbl->tbl_arena = NULL;
11651 tbl->tbl_arena_next = NULL;
11652 tbl->tbl_arena_end = NULL;
d5cefff9 11653 }
a0739874
DM
11654}
11655
645c22ef
DM
11656/* clear and free a ptr table */
11657
a0739874 11658void
1eb6e4ca 11659Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
a0739874 11660{
5c5ade3e
NC
11661 struct ptr_tbl_arena *arena;
11662
a0739874
DM
11663 if (!tbl) {
11664 return;
11665 }
5c5ade3e
NC
11666
11667 arena = tbl->tbl_arena;
11668
11669 while (arena) {
11670 struct ptr_tbl_arena *next = arena->next;
11671
11672 Safefree(arena);
11673 arena = next;
11674 }
11675
a0739874
DM
11676 Safefree(tbl->tbl_ary);
11677 Safefree(tbl);
11678}
11679
4674ade5 11680#if defined(USE_ITHREADS)
5bd07a3d 11681
83841fad 11682void
1eb6e4ca 11683Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
83841fad 11684{
7918f24d
NC
11685 PERL_ARGS_ASSERT_RVPV_DUP;
11686
83841fad 11687 if (SvROK(sstr)) {
803f2748
DM
11688 if (SvWEAKREF(sstr)) {
11689 SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11690 if (param->flags & CLONEf_JOIN_IN) {
11691 /* if joining, we add any back references individually rather
11692 * than copying the whole backref array */
11693 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11694 }
11695 }
11696 else
11697 SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
83841fad 11698 }
3f7c398e 11699 else if (SvPVX_const(sstr)) {
83841fad
NIS
11700 /* Has something there */
11701 if (SvLEN(sstr)) {
68795e93 11702 /* Normal PV - clone whole allocated space */
3f7c398e 11703 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
d3d0e6f1
NC
11704 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
11705 /* Not that normal - actually sstr is copy on write.
486ec47a 11706 But we are a true, independent SV, so: */
d3d0e6f1
NC
11707 SvREADONLY_off(dstr);
11708 SvFAKE_off(dstr);
11709 }
68795e93 11710 }
83841fad
NIS
11711 else {
11712 /* Special case - not normally malloced for some reason */
f7877b28
NC
11713 if (isGV_with_GP(sstr)) {
11714 /* Don't need to do anything here. */
11715 }
11716 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
ef10be65
NC
11717 /* A "shared" PV - clone it as "shared" PV */
11718 SvPV_set(dstr,
11719 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
11720 param)));
83841fad
NIS
11721 }
11722 else {
11723 /* Some other special case - random pointer */
d2c6dc5e 11724 SvPV_set(dstr, (char *) SvPVX_const(sstr));
d3d0e6f1 11725 }
83841fad
NIS
11726 }
11727 }
11728 else {
4608196e 11729 /* Copy the NULL */
4df7f6af 11730 SvPV_set(dstr, NULL);
83841fad
NIS
11731 }
11732}
11733
538f2e76
NC
11734/* duplicate a list of SVs. source and dest may point to the same memory. */
11735static SV **
11736S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
11737 SSize_t items, CLONE_PARAMS *const param)
11738{
11739 PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
11740
11741 while (items-- > 0) {
11742 *dest++ = sv_dup_inc(*source++, param);
11743 }
11744
11745 return dest;
11746}
11747
662fb8b2
NC
11748/* duplicate an SV of any type (including AV, HV etc) */
11749
d08d57ef
NC
11750static SV *
11751S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
1d7c1841 11752{
27da23d5 11753 dVAR;
1d7c1841
GS
11754 SV *dstr;
11755
d08d57ef 11756 PERL_ARGS_ASSERT_SV_DUP_COMMON;
7918f24d 11757
e4787c0c 11758 if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
bfd95973
NC
11759#ifdef DEBUG_LEAKING_SCALARS_ABORT
11760 abort();
11761#endif
6136c704 11762 return NULL;
bfd95973 11763 }
1d7c1841 11764 /* look for it in the table first */
daba3364 11765 dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
1d7c1841
GS
11766 if (dstr)
11767 return dstr;
11768
0405e91e
AB
11769 if(param->flags & CLONEf_JOIN_IN) {
11770 /** We are joining here so we don't want do clone
11771 something that is bad **/
eb86f8b3 11772 if (SvTYPE(sstr) == SVt_PVHV) {
9bde8eb0 11773 const HEK * const hvname = HvNAME_HEK(sstr);
96bafef9 11774 if (hvname) {
eb86f8b3 11775 /** don't clone stashes if they already exist **/
812df045
BF
11776 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
11777 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
96bafef9
DM
11778 ptr_table_store(PL_ptr_table, sstr, dstr);
11779 return dstr;
11780 }
0405e91e
AB
11781 }
11782 }
11783
1d7c1841
GS
11784 /* create anew and remember what it is */
11785 new_SV(dstr);
fd0854ff
DM
11786
11787#ifdef DEBUG_LEAKING_SCALARS
11788 dstr->sv_debug_optype = sstr->sv_debug_optype;
11789 dstr->sv_debug_line = sstr->sv_debug_line;
11790 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
cd676548 11791 dstr->sv_debug_parent = (SV*)sstr;
de61950a 11792 FREE_SV_DEBUG_FILE(dstr);
fd0854ff 11793 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
fd0854ff
DM
11794#endif
11795
1d7c1841
GS
11796 ptr_table_store(PL_ptr_table, sstr, dstr);
11797
11798 /* clone */
11799 SvFLAGS(dstr) = SvFLAGS(sstr);
11800 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
11801 SvREFCNT(dstr) = 0; /* must be before any other dups! */
11802
11803#ifdef DEBUGGING
3f7c398e 11804 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
1d7c1841 11805 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
6c9570dc 11806 (void*)PL_watch_pvx, SvPVX_const(sstr));
1d7c1841
GS
11807#endif
11808
9660f481
DM
11809 /* don't clone objects whose class has asked us not to */
11810 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
33de8e4a 11811 SvFLAGS(dstr) = 0;
9660f481
DM
11812 return dstr;
11813 }
11814
1d7c1841
GS
11815 switch (SvTYPE(sstr)) {
11816 case SVt_NULL:
11817 SvANY(dstr) = NULL;
11818 break;
11819 case SVt_IV:
339049b0 11820 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
4df7f6af
NC
11821 if(SvROK(sstr)) {
11822 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11823 } else {
11824 SvIV_set(dstr, SvIVX(sstr));
11825 }
1d7c1841
GS
11826 break;
11827 case SVt_NV:
11828 SvANY(dstr) = new_XNV();
9d6ce603 11829 SvNV_set(dstr, SvNVX(sstr));
1d7c1841 11830 break;
cecf5685 11831 /* case SVt_BIND: */
662fb8b2
NC
11832 default:
11833 {
11834 /* These are all the types that need complex bodies allocating. */
662fb8b2 11835 void *new_body;
2bcc16b3
NC
11836 const svtype sv_type = SvTYPE(sstr);
11837 const struct body_details *const sv_type_details
11838 = bodies_by_type + sv_type;
662fb8b2 11839
93e68bfb 11840 switch (sv_type) {
662fb8b2 11841 default:
bb263b4e 11842 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
662fb8b2
NC
11843 break;
11844
662fb8b2 11845 case SVt_PVGV:
c22188b4
NC
11846 case SVt_PVIO:
11847 case SVt_PVFM:
11848 case SVt_PVHV:
11849 case SVt_PVAV:
662fb8b2 11850 case SVt_PVCV:
662fb8b2 11851 case SVt_PVLV:
5c35adbb 11852 case SVt_REGEXP:
662fb8b2 11853 case SVt_PVMG:
662fb8b2 11854 case SVt_PVNV:
662fb8b2 11855 case SVt_PVIV:
662fb8b2 11856 case SVt_PV:
d2a0f284 11857 assert(sv_type_details->body_size);
c22188b4 11858 if (sv_type_details->arena) {
d2a0f284 11859 new_body_inline(new_body, sv_type);
c22188b4 11860 new_body
b9502f15 11861 = (void*)((char*)new_body - sv_type_details->offset);
c22188b4
NC
11862 } else {
11863 new_body = new_NOARENA(sv_type_details);
11864 }
1d7c1841 11865 }
662fb8b2
NC
11866 assert(new_body);
11867 SvANY(dstr) = new_body;
11868
2bcc16b3 11869#ifndef PURIFY
b9502f15
NC
11870 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11871 ((char*)SvANY(dstr)) + sv_type_details->offset,
f32993d6 11872 sv_type_details->copy, char);
2bcc16b3
NC
11873#else
11874 Copy(((char*)SvANY(sstr)),
11875 ((char*)SvANY(dstr)),
d2a0f284 11876 sv_type_details->body_size + sv_type_details->offset, char);
2bcc16b3 11877#endif
662fb8b2 11878
f7877b28 11879 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
5bb89d25
NC
11880 && !isGV_with_GP(dstr)
11881 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
662fb8b2
NC
11882 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11883
11884 /* The Copy above means that all the source (unduplicated) pointers
11885 are now in the destination. We can check the flags and the
11886 pointers in either, but it's possible that there's less cache
11887 missing by always going for the destination.
11888 FIXME - instrument and check that assumption */
f32993d6 11889 if (sv_type >= SVt_PVMG) {
885ffcb3 11890 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
73d95100 11891 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
e736a858 11892 } else if (SvMAGIC(dstr))
662fb8b2
NC
11893 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11894 if (SvSTASH(dstr))
11895 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
1d7c1841 11896 }
662fb8b2 11897
f32993d6
NC
11898 /* The cast silences a GCC warning about unhandled types. */
11899 switch ((int)sv_type) {
662fb8b2
NC
11900 case SVt_PV:
11901 break;
11902 case SVt_PVIV:
11903 break;
11904 case SVt_PVNV:
11905 break;
11906 case SVt_PVMG:
11907 break;
5c35adbb 11908 case SVt_REGEXP:
288b8c02 11909 /* FIXME for plugins */
d2f13c59 11910 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
f708cfc1 11911 break;
662fb8b2
NC
11912 case SVt_PVLV:
11913 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11914 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11915 LvTARG(dstr) = dstr;
11916 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
daba3364 11917 LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
662fb8b2
NC
11918 else
11919 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
662fb8b2 11920 case SVt_PVGV:
61e14cb4 11921 /* non-GP case already handled above */
cecf5685 11922 if(isGV_with_GP(sstr)) {
566771cc 11923 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
39cb70dc
NC
11924 /* Don't call sv_add_backref here as it's going to be
11925 created as part of the magic cloning of the symbol
27bca322
FC
11926 table--unless this is during a join and the stash
11927 is not actually being cloned. */
f7877b28
NC
11928 /* Danger Will Robinson - GvGP(dstr) isn't initialised
11929 at the point of this comment. */
39cb70dc 11930 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
ab95db60
DM
11931 if (param->flags & CLONEf_JOIN_IN)
11932 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
c43ae56f 11933 GvGP_set(dstr, gp_dup(GvGP(sstr), param));
f7877b28 11934 (void)GpREFCNT_inc(GvGP(dstr));
61e14cb4 11935 }
662fb8b2
NC
11936 break;
11937 case SVt_PVIO:
5486870f 11938 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
662fb8b2
NC
11939 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11940 /* I have no idea why fake dirp (rsfps)
11941 should be treated differently but otherwise
11942 we end up with leaks -- sky*/
11943 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
11944 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
11945 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11946 } else {
11947 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
11948 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
11949 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
100ce7e1 11950 if (IoDIRP(dstr)) {
60b22aca 11951 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr), param);
100ce7e1 11952 } else {
6f207bd3 11953 NOOP;
100ce7e1
NC
11954 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
11955 }
6f7e8353 11956 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
662fb8b2 11957 }
6f7e8353
NC
11958 if (IoOFP(dstr) == IoIFP(sstr))
11959 IoOFP(dstr) = IoIFP(dstr);
11960 else
11961 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
662fb8b2
NC
11962 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
11963 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
11964 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
11965 break;
11966 case SVt_PVAV:
2779b694
KB
11967 /* avoid cloning an empty array */
11968 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
662fb8b2 11969 SV **dst_ary, **src_ary;
502c6561 11970 SSize_t items = AvFILLp((const AV *)sstr) + 1;
662fb8b2 11971
502c6561
NC
11972 src_ary = AvARRAY((const AV *)sstr);
11973 Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
662fb8b2 11974 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
502c6561
NC
11975 AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11976 AvALLOC((const AV *)dstr) = dst_ary;
11977 if (AvREAL((const AV *)sstr)) {
538f2e76
NC
11978 dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11979 param);
662fb8b2
NC
11980 }
11981 else {
11982 while (items-- > 0)
11983 *dst_ary++ = sv_dup(*src_ary++, param);
11984 }
502c6561 11985 items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
662fb8b2
NC
11986 while (items-- > 0) {
11987 *dst_ary++ = &PL_sv_undef;
11988 }
bfcb3514 11989 }
662fb8b2 11990 else {
502c6561
NC
11991 AvARRAY(MUTABLE_AV(dstr)) = NULL;
11992 AvALLOC((const AV *)dstr) = (SV**)NULL;
2779b694
KB
11993 AvMAX( (const AV *)dstr) = -1;
11994 AvFILLp((const AV *)dstr) = -1;
b79f7545 11995 }
662fb8b2
NC
11996 break;
11997 case SVt_PVHV:
1d193675 11998 if (HvARRAY((const HV *)sstr)) {
7e265ef3
AL
11999 STRLEN i = 0;
12000 const bool sharekeys = !!HvSHAREKEYS(sstr);
12001 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12002 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12003 char *darray;
12004 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12005 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12006 char);
12007 HvARRAY(dstr) = (HE**)darray;
12008 while (i <= sxhv->xhv_max) {
12009 const HE * const source = HvARRAY(sstr)[i];
12010 HvARRAY(dstr)[i] = source
12011 ? he_dup(source, sharekeys, param) : 0;
12012 ++i;
12013 }
12014 if (SvOOK(sstr)) {
7e265ef3
AL
12015 const struct xpvhv_aux * const saux = HvAUX(sstr);
12016 struct xpvhv_aux * const daux = HvAUX(dstr);
12017 /* This flag isn't copied. */
12018 /* SvOOK_on(hv) attacks the IV flags. */
12019 SvFLAGS(dstr) |= SVf_OOK;
12020
b7247a80 12021 if (saux->xhv_name_count) {
36b0d498 12022 HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
78b79c77
FC
12023 const I32 count
12024 = saux->xhv_name_count < 0
12025 ? -saux->xhv_name_count
12026 : saux->xhv_name_count;
b7247a80
FC
12027 HEK **shekp = sname + count;
12028 HEK **dhekp;
15d9236d
NC
12029 Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12030 dhekp = daux->xhv_name_u.xhvnameu_names + count;
b7247a80
FC
12031 while (shekp-- > sname) {
12032 dhekp--;
12033 *dhekp = hek_dup(*shekp, param);
12034 }
12035 }
15d9236d
NC
12036 else {
12037 daux->xhv_name_u.xhvnameu_name
12038 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12039 param);
12040 }
b7247a80 12041 daux->xhv_name_count = saux->xhv_name_count;
7e265ef3
AL
12042
12043 daux->xhv_riter = saux->xhv_riter;
12044 daux->xhv_eiter = saux->xhv_eiter
12045 ? he_dup(saux->xhv_eiter,
f2338a2e 12046 cBOOL(HvSHAREKEYS(sstr)), param) : 0;
b17f5ab7 12047 /* backref array needs refcnt=2; see sv_add_backref */
7e265ef3 12048 daux->xhv_backreferences =
ab95db60
DM
12049 (param->flags & CLONEf_JOIN_IN)
12050 /* when joining, we let the individual GVs and
12051 * CVs add themselves to backref as
12052 * needed. This avoids pulling in stuff
12053 * that isn't required, and simplifies the
12054 * case where stashes aren't cloned back
12055 * if they already exist in the parent
12056 * thread */
12057 ? NULL
12058 : saux->xhv_backreferences
5648c0ae
DM
12059 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12060 ? MUTABLE_AV(SvREFCNT_inc(
12061 sv_dup_inc((const SV *)
12062 saux->xhv_backreferences, param)))
12063 : MUTABLE_AV(sv_dup((const SV *)
12064 saux->xhv_backreferences, param))
86f55936 12065 : 0;
e1a479c5
BB
12066
12067 daux->xhv_mro_meta = saux->xhv_mro_meta
12068 ? mro_meta_dup(saux->xhv_mro_meta, param)
12069 : 0;
12070
7e265ef3 12071 /* Record stashes for possible cloning in Perl_clone(). */
605aedcc 12072 if (HvNAME(sstr))
7e265ef3 12073 av_push(param->stashes, dstr);
662fb8b2 12074 }
662fb8b2 12075 }
7e265ef3 12076 else
85fbaab2 12077 HvARRAY(MUTABLE_HV(dstr)) = NULL;
662fb8b2 12078 break;
662fb8b2 12079 case SVt_PVCV:
bb172083
NC
12080 if (!(param->flags & CLONEf_COPY_STACKS)) {
12081 CvDEPTH(dstr) = 0;
12082 }
4c74a7df 12083 /*FALLTHROUGH*/
bb172083 12084 case SVt_PVFM:
662fb8b2 12085 /* NOTE: not refcounted */
c68d9564
Z
12086 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12087 hv_dup(CvSTASH(dstr), param);
ab95db60
DM
12088 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12089 Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
f352ce09
NC
12090 if (!CvISXSUB(dstr)) {
12091 OP_REFCNT_LOCK;
d04ba589 12092 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
f352ce09 12093 OP_REFCNT_UNLOCK;
f352ce09 12094 } else if (CvCONST(dstr)) {
d32faaf3 12095 CvXSUBANY(dstr).any_ptr =
daba3364 12096 sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
662fb8b2 12097 }
bad4ae38 12098 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
662fb8b2
NC
12099 /* don't dup if copying back - CvGV isn't refcounted, so the
12100 * duped GV may never be freed. A bit of a hack! DAPM */
b3f91e91 12101 SvANY(MUTABLE_CV(dstr))->xcv_gv =
cfc1e951 12102 CvCVGV_RC(dstr)
803f2748
DM
12103 ? gv_dup_inc(CvGV(sstr), param)
12104 : (param->flags & CLONEf_JOIN_IN)
12105 ? NULL
12106 : gv_dup(CvGV(sstr), param);
12107
d5b1589c 12108 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
662fb8b2
NC
12109 CvOUTSIDE(dstr) =
12110 CvWEAKOUTSIDE(sstr)
12111 ? cv_dup( CvOUTSIDE(dstr), param)
12112 : cv_dup_inc(CvOUTSIDE(dstr), param);
662fb8b2 12113 break;
bfcb3514 12114 }
1d7c1841 12115 }
1d7c1841
GS
12116 }
12117
12118 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12119 ++PL_sv_objcount;
12120
12121 return dstr;
d2d73c3e 12122 }
1d7c1841 12123
a09252eb
NC
12124SV *
12125Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12126{
12127 PERL_ARGS_ASSERT_SV_DUP_INC;
d08d57ef
NC
12128 return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12129}
12130
12131SV *
12132Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12133{
12134 SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12135 PERL_ARGS_ASSERT_SV_DUP;
12136
04518cc3
NC
12137 /* Track every SV that (at least initially) had a reference count of 0.
12138 We need to do this by holding an actual reference to it in this array.
12139 If we attempt to cheat, turn AvREAL_off(), and store only pointers
12140 (akin to the stashes hash, and the perl stack), we come unstuck if
12141 a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12142 thread) is manipulated in a CLONE method, because CLONE runs before the
12143 unreferenced array is walked to find SVs still with SvREFCNT() == 0
12144 (and fix things up by giving each a reference via the temps stack).
12145 Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12146 then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12147 before the walk of unreferenced happens and a reference to that is SV
12148 added to the temps stack. At which point we have the same SV considered
12149 to be in use, and free to be re-used. Not good.
12150 */
d08d57ef
NC
12151 if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12152 assert(param->unreferenced);
04518cc3 12153 av_push(param->unreferenced, SvREFCNT_inc(dstr));
d08d57ef
NC
12154 }
12155
12156 return dstr;
a09252eb
NC
12157}
12158
645c22ef
DM
12159/* duplicate a context */
12160
1d7c1841 12161PERL_CONTEXT *
a8fc9800 12162Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
1d7c1841
GS
12163{
12164 PERL_CONTEXT *ncxs;
12165
7918f24d
NC
12166 PERL_ARGS_ASSERT_CX_DUP;
12167
1d7c1841
GS
12168 if (!cxs)
12169 return (PERL_CONTEXT*)NULL;
12170
12171 /* look for it in the table first */
12172 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12173 if (ncxs)
12174 return ncxs;
12175
12176 /* create anew and remember what it is */
c2d565bf 12177 Newx(ncxs, max + 1, PERL_CONTEXT);
1d7c1841 12178 ptr_table_store(PL_ptr_table, cxs, ncxs);
c2d565bf 12179 Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
1d7c1841
GS
12180
12181 while (ix >= 0) {
c445ea15 12182 PERL_CONTEXT * const ncx = &ncxs[ix];
c2d565bf 12183 if (CxTYPE(ncx) == CXt_SUBST) {
1d7c1841
GS
12184 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12185 }
12186 else {
c2d565bf 12187 switch (CxTYPE(ncx)) {
1d7c1841 12188 case CXt_SUB:
c2d565bf
NC
12189 ncx->blk_sub.cv = (ncx->blk_sub.olddepth == 0
12190 ? cv_dup_inc(ncx->blk_sub.cv, param)
12191 : cv_dup(ncx->blk_sub.cv,param));
bafb2adc 12192 ncx->blk_sub.argarray = (CxHASARGS(ncx)
c2d565bf
NC
12193 ? av_dup_inc(ncx->blk_sub.argarray,
12194 param)
7d49f689 12195 : NULL);
c2d565bf
NC
12196 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,
12197 param);
d8d97e70 12198 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
c2d565bf 12199 ncx->blk_sub.oldcomppad);
1d7c1841
GS
12200 break;
12201 case CXt_EVAL:
c2d565bf
NC
12202 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12203 param);
12204 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
1d7c1841 12205 break;
d01136d6 12206 case CXt_LOOP_LAZYSV:
d01136d6
BS
12207 ncx->blk_loop.state_u.lazysv.end
12208 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
840fe433 12209 /* We are taking advantage of av_dup_inc and sv_dup_inc
486ec47a 12210 actually being the same function, and order equivalence of
840fe433
NC
12211 the two unions.
12212 We can assert the later [but only at run time :-(] */
12213 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12214 (void *) &ncx->blk_loop.state_u.lazysv.cur);
3b719c58 12215 case CXt_LOOP_FOR:
d01136d6
BS
12216 ncx->blk_loop.state_u.ary.ary
12217 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12218 case CXt_LOOP_LAZYIV:
3b719c58 12219 case CXt_LOOP_PLAIN:
e846cb92 12220 if (CxPADLOOP(ncx)) {
df530c37 12221 ncx->blk_loop.itervar_u.oldcomppad
e846cb92 12222 = (PAD*)ptr_table_fetch(PL_ptr_table,
df530c37 12223 ncx->blk_loop.itervar_u.oldcomppad);
e846cb92 12224 } else {
df530c37
DM
12225 ncx->blk_loop.itervar_u.gv
12226 = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12227 param);
e846cb92 12228 }
1d7c1841
GS
12229 break;
12230 case CXt_FORMAT:
f9c764c5
NC
12231 ncx->blk_format.cv = cv_dup(ncx->blk_format.cv, param);
12232 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param);
12233 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
c2d565bf 12234 param);
1d7c1841
GS
12235 break;
12236 case CXt_BLOCK:
12237 case CXt_NULL:
12238 break;
12239 }
12240 }
12241 --ix;
12242 }
12243 return ncxs;
12244}
12245
645c22ef
DM
12246/* duplicate a stack info structure */
12247
1d7c1841 12248PERL_SI *
a8fc9800 12249Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
1d7c1841
GS
12250{
12251 PERL_SI *nsi;
12252
7918f24d
NC
12253 PERL_ARGS_ASSERT_SI_DUP;
12254
1d7c1841
GS
12255 if (!si)
12256 return (PERL_SI*)NULL;
12257
12258 /* look for it in the table first */
12259 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12260 if (nsi)
12261 return nsi;
12262
12263 /* create anew and remember what it is */
a02a5408 12264 Newxz(nsi, 1, PERL_SI);
1d7c1841
GS
12265 ptr_table_store(PL_ptr_table, si, nsi);
12266
d2d73c3e 12267 nsi->si_stack = av_dup_inc(si->si_stack, param);
1d7c1841
GS
12268 nsi->si_cxix = si->si_cxix;
12269 nsi->si_cxmax = si->si_cxmax;
d2d73c3e 12270 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
1d7c1841 12271 nsi->si_type = si->si_type;
d2d73c3e
AB
12272 nsi->si_prev = si_dup(si->si_prev, param);
12273 nsi->si_next = si_dup(si->si_next, param);
1d7c1841
GS
12274 nsi->si_markoff = si->si_markoff;
12275
12276 return nsi;
12277}
12278
12279#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
12280#define TOPINT(ss,ix) ((ss)[ix].any_i32)
12281#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
12282#define TOPLONG(ss,ix) ((ss)[ix].any_long)
12283#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
12284#define TOPIV(ss,ix) ((ss)[ix].any_iv)
c6bf6a65
NC
12285#define POPUV(ss,ix) ((ss)[--(ix)].any_uv)
12286#define TOPUV(ss,ix) ((ss)[ix].any_uv)
38d8b13e
HS
12287#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
12288#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
1d7c1841
GS
12289#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
12290#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
12291#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
12292#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
12293#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12294#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12295
12296/* XXXXX todo */
12297#define pv_dup_inc(p) SAVEPV(p)
12298#define pv_dup(p) SAVEPV(p)
12299#define svp_dup_inc(p,pp) any_dup(p,pp)
12300
645c22ef
DM
12301/* map any object to the new equivent - either something in the
12302 * ptr table, or something in the interpreter structure
12303 */
12304
1d7c1841 12305void *
53c1dcc0 12306Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
1d7c1841
GS
12307{
12308 void *ret;
12309
7918f24d
NC
12310 PERL_ARGS_ASSERT_ANY_DUP;
12311
1d7c1841
GS
12312 if (!v)
12313 return (void*)NULL;
12314
12315 /* look for it in the table first */
12316 ret = ptr_table_fetch(PL_ptr_table, v);
12317 if (ret)
12318 return ret;
12319
12320 /* see if it is part of the interpreter structure */
12321 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
acfe0abc 12322 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
05ec9bb3 12323 else {
1d7c1841 12324 ret = v;
05ec9bb3 12325 }
1d7c1841
GS
12326
12327 return ret;
12328}
12329
645c22ef
DM
12330/* duplicate the save stack */
12331
1d7c1841 12332ANY *
a8fc9800 12333Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
1d7c1841 12334{
53d44271 12335 dVAR;
907b3e23
DM
12336 ANY * const ss = proto_perl->Isavestack;
12337 const I32 max = proto_perl->Isavestack_max;
12338 I32 ix = proto_perl->Isavestack_ix;
1d7c1841 12339 ANY *nss;
daba3364 12340 const SV *sv;
1d193675
NC
12341 const GV *gv;
12342 const AV *av;
12343 const HV *hv;
1d7c1841
GS
12344 void* ptr;
12345 int intval;
12346 long longval;
12347 GP *gp;
12348 IV iv;
b24356f5 12349 I32 i;
c4e33207 12350 char *c = NULL;
1d7c1841 12351 void (*dptr) (void*);
acfe0abc 12352 void (*dxptr) (pTHX_ void*);
1d7c1841 12353
7918f24d
NC
12354 PERL_ARGS_ASSERT_SS_DUP;
12355
a02a5408 12356 Newxz(nss, max, ANY);
1d7c1841
GS
12357
12358 while (ix > 0) {
c6bf6a65
NC
12359 const UV uv = POPUV(ss,ix);
12360 const U8 type = (U8)uv & SAVE_MASK;
12361
12362 TOPUV(nss,ix) = uv;
b24356f5 12363 switch (type) {
cdcdfc56
NC
12364 case SAVEt_CLEARSV:
12365 break;
3e07292d 12366 case SAVEt_HELEM: /* hash element */
daba3364 12367 sv = (const SV *)POPPTR(ss,ix);
3e07292d
NC
12368 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12369 /* fall through */
1d7c1841 12370 case SAVEt_ITEM: /* normal string */
0d1db40e 12371 case SAVEt_GVSV: /* scalar slot in GV */
a41cc44e 12372 case SAVEt_SV: /* scalar reference */
daba3364 12373 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12374 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
12375 /* fall through */
12376 case SAVEt_FREESV:
12377 case SAVEt_MORTALIZESV:
daba3364 12378 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12379 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 12380 break;
05ec9bb3
NIS
12381 case SAVEt_SHARED_PVREF: /* char* in shared space */
12382 c = (char*)POPPTR(ss,ix);
12383 TOPPTR(nss,ix) = savesharedpv(c);
12384 ptr = POPPTR(ss,ix);
12385 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12386 break;
1d7c1841
GS
12387 case SAVEt_GENERIC_SVREF: /* generic sv */
12388 case SAVEt_SVREF: /* scalar reference */
daba3364 12389 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12390 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
12391 ptr = POPPTR(ss,ix);
12392 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12393 break;
a41cc44e 12394 case SAVEt_HV: /* hash reference */
1d7c1841 12395 case SAVEt_AV: /* array reference */
daba3364 12396 sv = (const SV *) POPPTR(ss,ix);
337d28f5 12397 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
12398 /* fall through */
12399 case SAVEt_COMPPAD:
12400 case SAVEt_NSTAB:
daba3364 12401 sv = (const SV *) POPPTR(ss,ix);
3e07292d 12402 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
12403 break;
12404 case SAVEt_INT: /* int reference */
12405 ptr = POPPTR(ss,ix);
12406 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12407 intval = (int)POPINT(ss,ix);
12408 TOPINT(nss,ix) = intval;
12409 break;
12410 case SAVEt_LONG: /* long reference */
12411 ptr = POPPTR(ss,ix);
12412 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12413 longval = (long)POPLONG(ss,ix);
12414 TOPLONG(nss,ix) = longval;
12415 break;
12416 case SAVEt_I32: /* I32 reference */
1d7c1841
GS
12417 ptr = POPPTR(ss,ix);
12418 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
1ccabee8 12419 i = POPINT(ss,ix);
1d7c1841
GS
12420 TOPINT(nss,ix) = i;
12421 break;
12422 case SAVEt_IV: /* IV reference */
12423 ptr = POPPTR(ss,ix);
12424 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12425 iv = POPIV(ss,ix);
12426 TOPIV(nss,ix) = iv;
12427 break;
a41cc44e
NC
12428 case SAVEt_HPTR: /* HV* reference */
12429 case SAVEt_APTR: /* AV* reference */
1d7c1841
GS
12430 case SAVEt_SPTR: /* SV* reference */
12431 ptr = POPPTR(ss,ix);
12432 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 12433 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12434 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
12435 break;
12436 case SAVEt_VPTR: /* random* reference */
12437 ptr = POPPTR(ss,ix);
12438 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
65504245 12439 /* Fall through */
994d373a 12440 case SAVEt_INT_SMALL:
89abef21 12441 case SAVEt_I32_SMALL:
c9441fce 12442 case SAVEt_I16: /* I16 reference */
6c61c2d4 12443 case SAVEt_I8: /* I8 reference */
65504245 12444 case SAVEt_BOOL:
1d7c1841
GS
12445 ptr = POPPTR(ss,ix);
12446 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12447 break;
b03d03b0 12448 case SAVEt_GENERIC_PVREF: /* generic char* */
1d7c1841
GS
12449 case SAVEt_PPTR: /* char* reference */
12450 ptr = POPPTR(ss,ix);
12451 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12452 c = (char*)POPPTR(ss,ix);
12453 TOPPTR(nss,ix) = pv_dup(c);
12454 break;
1d7c1841
GS
12455 case SAVEt_GP: /* scalar reference */
12456 gp = (GP*)POPPTR(ss,ix);
d2d73c3e 12457 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
1d7c1841 12458 (void)GpREFCNT_inc(gp);
10507e11
FC
12459 gv = (const GV *)POPPTR(ss,ix);
12460 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
b9e00b79 12461 break;
1d7c1841
GS
12462 case SAVEt_FREEOP:
12463 ptr = POPPTR(ss,ix);
12464 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12465 /* these are assumed to be refcounted properly */
53c1dcc0 12466 OP *o;
1d7c1841
GS
12467 switch (((OP*)ptr)->op_type) {
12468 case OP_LEAVESUB:
12469 case OP_LEAVESUBLV:
12470 case OP_LEAVEEVAL:
12471 case OP_LEAVE:
12472 case OP_SCOPE:
12473 case OP_LEAVEWRITE:
e977893f
GS
12474 TOPPTR(nss,ix) = ptr;
12475 o = (OP*)ptr;
d3c72c2a 12476 OP_REFCNT_LOCK;
594cd643 12477 (void) OpREFCNT_inc(o);
d3c72c2a 12478 OP_REFCNT_UNLOCK;
1d7c1841
GS
12479 break;
12480 default:
5f66b61c 12481 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
12482 break;
12483 }
12484 }
12485 else
5f66b61c 12486 TOPPTR(nss,ix) = NULL;
1d7c1841 12487 break;
3987a177
Z
12488 case SAVEt_FREECOPHH:
12489 ptr = POPPTR(ss,ix);
12490 TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12491 break;
1d7c1841 12492 case SAVEt_DELETE:
1d193675 12493 hv = (const HV *)POPPTR(ss,ix);
d2d73c3e 12494 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
35d4f826
NC
12495 i = POPINT(ss,ix);
12496 TOPINT(nss,ix) = i;
8e41545f
NC
12497 /* Fall through */
12498 case SAVEt_FREEPV:
1d7c1841
GS
12499 c = (char*)POPPTR(ss,ix);
12500 TOPPTR(nss,ix) = pv_dup_inc(c);
35d4f826 12501 break;
3e07292d 12502 case SAVEt_STACK_POS: /* Position on Perl stack */
1d7c1841
GS
12503 i = POPINT(ss,ix);
12504 TOPINT(nss,ix) = i;
12505 break;
12506 case SAVEt_DESTRUCTOR:
12507 ptr = POPPTR(ss,ix);
12508 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
12509 dptr = POPDPTR(ss,ix);
8141890a
JH
12510 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12511 any_dup(FPTR2DPTR(void *, dptr),
12512 proto_perl));
1d7c1841
GS
12513 break;
12514 case SAVEt_DESTRUCTOR_X:
12515 ptr = POPPTR(ss,ix);
12516 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
12517 dxptr = POPDXPTR(ss,ix);
8141890a
JH
12518 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12519 any_dup(FPTR2DPTR(void *, dxptr),
12520 proto_perl));
1d7c1841
GS
12521 break;
12522 case SAVEt_REGCONTEXT:
12523 case SAVEt_ALLOC:
1be36ce0 12524 ix -= uv >> SAVE_TIGHT_SHIFT;
1d7c1841 12525 break;
1d7c1841 12526 case SAVEt_AELEM: /* array element */
daba3364 12527 sv = (const SV *)POPPTR(ss,ix);
d2d73c3e 12528 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
12529 i = POPINT(ss,ix);
12530 TOPINT(nss,ix) = i;
502c6561 12531 av = (const AV *)POPPTR(ss,ix);
d2d73c3e 12532 TOPPTR(nss,ix) = av_dup_inc(av, param);
1d7c1841 12533 break;
1d7c1841
GS
12534 case SAVEt_OP:
12535 ptr = POPPTR(ss,ix);
12536 TOPPTR(nss,ix) = ptr;
12537 break;
12538 case SAVEt_HINTS:
b3ca2e83 12539 ptr = POPPTR(ss,ix);
20439bc7 12540 ptr = cophh_copy((COPHH*)ptr);
cbb1fbea 12541 TOPPTR(nss,ix) = ptr;
601cee3b
NC
12542 i = POPINT(ss,ix);
12543 TOPINT(nss,ix) = i;
a8f8b6a7 12544 if (i & HINT_LOCALIZE_HH) {
1d193675 12545 hv = (const HV *)POPPTR(ss,ix);
a8f8b6a7
NC
12546 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12547 }
1d7c1841 12548 break;
09edbca0 12549 case SAVEt_PADSV_AND_MORTALIZE:
c3564e5c
GS
12550 longval = (long)POPLONG(ss,ix);
12551 TOPLONG(nss,ix) = longval;
12552 ptr = POPPTR(ss,ix);
12553 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
daba3364 12554 sv = (const SV *)POPPTR(ss,ix);
09edbca0 12555 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
c3564e5c 12556 break;
8bd2680e
MHM
12557 case SAVEt_SET_SVFLAGS:
12558 i = POPINT(ss,ix);
12559 TOPINT(nss,ix) = i;
12560 i = POPINT(ss,ix);
12561 TOPINT(nss,ix) = i;
daba3364 12562 sv = (const SV *)POPPTR(ss,ix);
8bd2680e
MHM
12563 TOPPTR(nss,ix) = sv_dup(sv, param);
12564 break;
5bfb7d0e
NC
12565 case SAVEt_RE_STATE:
12566 {
12567 const struct re_save_state *const old_state
12568 = (struct re_save_state *)
12569 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12570 struct re_save_state *const new_state
12571 = (struct re_save_state *)
12572 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12573
12574 Copy(old_state, new_state, 1, struct re_save_state);
12575 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12576
12577 new_state->re_state_bostr
12578 = pv_dup(old_state->re_state_bostr);
12579 new_state->re_state_reginput
12580 = pv_dup(old_state->re_state_reginput);
5bfb7d0e
NC
12581 new_state->re_state_regeol
12582 = pv_dup(old_state->re_state_regeol);
f0ab9afb
NC
12583 new_state->re_state_regoffs
12584 = (regexp_paren_pair*)
12585 any_dup(old_state->re_state_regoffs, proto_perl);
5bfb7d0e 12586 new_state->re_state_reglastparen
11b79775
DD
12587 = (U32*) any_dup(old_state->re_state_reglastparen,
12588 proto_perl);
5bfb7d0e 12589 new_state->re_state_reglastcloseparen
11b79775 12590 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
5bfb7d0e 12591 proto_perl);
5bfb7d0e
NC
12592 /* XXX This just has to be broken. The old save_re_context
12593 code did SAVEGENERICPV(PL_reg_start_tmp);
12594 PL_reg_start_tmp is char **.
12595 Look above to what the dup code does for
12596 SAVEt_GENERIC_PVREF
12597 It can never have worked.
12598 So this is merely a faithful copy of the exiting bug: */
12599 new_state->re_state_reg_start_tmp
12600 = (char **) pv_dup((char *)
12601 old_state->re_state_reg_start_tmp);
12602 /* I assume that it only ever "worked" because no-one called
12603 (pseudo)fork while the regexp engine had re-entered itself.
12604 */
5bfb7d0e
NC
12605#ifdef PERL_OLD_COPY_ON_WRITE
12606 new_state->re_state_nrs
12607 = sv_dup(old_state->re_state_nrs, param);
12608#endif
12609 new_state->re_state_reg_magic
11b79775
DD
12610 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
12611 proto_perl);
5bfb7d0e 12612 new_state->re_state_reg_oldcurpm
11b79775
DD
12613 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
12614 proto_perl);
5bfb7d0e 12615 new_state->re_state_reg_curpm
11b79775
DD
12616 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
12617 proto_perl);
5bfb7d0e
NC
12618 new_state->re_state_reg_oldsaved
12619 = pv_dup(old_state->re_state_reg_oldsaved);
12620 new_state->re_state_reg_poscache
12621 = pv_dup(old_state->re_state_reg_poscache);
5bfb7d0e
NC
12622 new_state->re_state_reg_starttry
12623 = pv_dup(old_state->re_state_reg_starttry);
5bfb7d0e
NC
12624 break;
12625 }
68da3b2f
NC
12626 case SAVEt_COMPILE_WARNINGS:
12627 ptr = POPPTR(ss,ix);
12628 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
7b6dd8c3 12629 break;
7c197c94
DM
12630 case SAVEt_PARSER:
12631 ptr = POPPTR(ss,ix);
456084a8 12632 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
7c197c94 12633 break;
1d7c1841 12634 default:
147bc374
NC
12635 Perl_croak(aTHX_
12636 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
1d7c1841
GS
12637 }
12638 }
12639
bd81e77b
NC
12640 return nss;
12641}
12642
12643
12644/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12645 * flag to the result. This is done for each stash before cloning starts,
12646 * so we know which stashes want their objects cloned */
12647
12648static void
f30de749 12649do_mark_cloneable_stash(pTHX_ SV *const sv)
bd81e77b 12650{
1d193675 12651 const HEK * const hvname = HvNAME_HEK((const HV *)sv);
bd81e77b 12652 if (hvname) {
85fbaab2 12653 GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
bd81e77b
NC
12654 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12655 if (cloner && GvCV(cloner)) {
12656 dSP;
12657 UV status;
12658
12659 ENTER;
12660 SAVETMPS;
12661 PUSHMARK(SP);
6e449a3a 12662 mXPUSHs(newSVhek(hvname));
bd81e77b 12663 PUTBACK;
daba3364 12664 call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
bd81e77b
NC
12665 SPAGAIN;
12666 status = POPu;
12667 PUTBACK;
12668 FREETMPS;
12669 LEAVE;
12670 if (status)
12671 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12672 }
12673 }
12674}
12675
12676
12677
12678/*
12679=for apidoc perl_clone
12680
12681Create and return a new interpreter by cloning the current one.
12682
12683perl_clone takes these flags as parameters:
12684
12685CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12686without it we only clone the data and zero the stacks,
12687with it we copy the stacks and the new perl interpreter is
12688ready to run at the exact same point as the previous one.
12689The pseudo-fork code uses COPY_STACKS while the
878090d5 12690threads->create doesn't.
bd81e77b
NC
12691
12692CLONEf_KEEP_PTR_TABLE
12693perl_clone keeps a ptr_table with the pointer of the old
12694variable as a key and the new variable as a value,
12695this allows it to check if something has been cloned and not
12696clone it again but rather just use the value and increase the
12697refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
12698the ptr_table using the function
12699C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
12700reason to keep it around is if you want to dup some of your own
12701variable who are outside the graph perl scans, example of this
12702code is in threads.xs create
12703
12704CLONEf_CLONE_HOST
12705This is a win32 thing, it is ignored on unix, it tells perls
12706win32host code (which is c++) to clone itself, this is needed on
12707win32 if you want to run two threads at the same time,
12708if you just want to do some stuff in a separate perl interpreter
12709and then throw it away and return to the original one,
12710you don't need to do anything.
12711
12712=cut
12713*/
12714
12715/* XXX the above needs expanding by someone who actually understands it ! */
12716EXTERN_C PerlInterpreter *
12717perl_clone_host(PerlInterpreter* proto_perl, UV flags);
12718
12719PerlInterpreter *
12720perl_clone(PerlInterpreter *proto_perl, UV flags)
12721{
12722 dVAR;
12723#ifdef PERL_IMPLICIT_SYS
12724
7918f24d
NC
12725 PERL_ARGS_ASSERT_PERL_CLONE;
12726
bd81e77b
NC
12727 /* perlhost.h so we need to call into it
12728 to clone the host, CPerlHost should have a c interface, sky */
12729
12730 if (flags & CLONEf_CLONE_HOST) {
12731 return perl_clone_host(proto_perl,flags);
12732 }
12733 return perl_clone_using(proto_perl, flags,
12734 proto_perl->IMem,
12735 proto_perl->IMemShared,
12736 proto_perl->IMemParse,
12737 proto_perl->IEnv,
12738 proto_perl->IStdIO,
12739 proto_perl->ILIO,
12740 proto_perl->IDir,
12741 proto_perl->ISock,
12742 proto_perl->IProc);
12743}
12744
12745PerlInterpreter *
12746perl_clone_using(PerlInterpreter *proto_perl, UV flags,
12747 struct IPerlMem* ipM, struct IPerlMem* ipMS,
12748 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
12749 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
12750 struct IPerlDir* ipD, struct IPerlSock* ipS,
12751 struct IPerlProc* ipP)
12752{
12753 /* XXX many of the string copies here can be optimized if they're
12754 * constants; they need to be allocated as common memory and just
12755 * their pointers copied. */
12756
12757 IV i;
12758 CLONE_PARAMS clone_params;
5f66b61c 12759 CLONE_PARAMS* const param = &clone_params;
bd81e77b 12760
5f66b61c 12761 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
7918f24d
NC
12762
12763 PERL_ARGS_ASSERT_PERL_CLONE_USING;
bd81e77b
NC
12764#else /* !PERL_IMPLICIT_SYS */
12765 IV i;
12766 CLONE_PARAMS clone_params;
12767 CLONE_PARAMS* param = &clone_params;
5f66b61c 12768 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
7918f24d
NC
12769
12770 PERL_ARGS_ASSERT_PERL_CLONE;
b59cce4c 12771#endif /* PERL_IMPLICIT_SYS */
7918f24d 12772
bd81e77b
NC
12773 /* for each stash, determine whether its objects should be cloned */
12774 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
12775 PERL_SET_THX(my_perl);
12776
b59cce4c 12777#ifdef DEBUGGING
7e337ee0 12778 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
12779 PL_op = NULL;
12780 PL_curcop = NULL;
50f626ad 12781 PL_defstash = NULL; /* may be used by perl malloc() */
bd81e77b
NC
12782 PL_markstack = 0;
12783 PL_scopestack = 0;
cbdd5331 12784 PL_scopestack_name = 0;
bd81e77b
NC
12785 PL_savestack = 0;
12786 PL_savestack_ix = 0;
12787 PL_savestack_max = -1;
12788 PL_sig_pending = 0;
b8328dae 12789 PL_parser = NULL;
bd81e77b 12790 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
02d9cd5e 12791# ifdef DEBUG_LEAKING_SCALARS
c895a371 12792 PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
02d9cd5e 12793# endif
b59cce4c 12794#else /* !DEBUGGING */
bd81e77b 12795 Zero(my_perl, 1, PerlInterpreter);
b59cce4c 12796#endif /* DEBUGGING */
742421a6
DM
12797
12798#ifdef PERL_IMPLICIT_SYS
12799 /* host pointers */
12800 PL_Mem = ipM;
12801 PL_MemShared = ipMS;
12802 PL_MemParse = ipMP;
12803 PL_Env = ipE;
12804 PL_StdIO = ipStd;
12805 PL_LIO = ipLIO;
12806 PL_Dir = ipD;
12807 PL_Sock = ipS;
12808 PL_Proc = ipP;
12809#endif /* PERL_IMPLICIT_SYS */
12810
bd81e77b 12811 param->flags = flags;
f7abe70b
NC
12812 /* Nothing in the core code uses this, but we make it available to
12813 extensions (using mg_dup). */
bd81e77b 12814 param->proto_perl = proto_perl;
f7abe70b
NC
12815 /* Likely nothing will use this, but it is initialised to be consistent
12816 with Perl_clone_params_new(). */
ec2fb142 12817 param->new_perl = my_perl;
d08d57ef 12818 param->unreferenced = NULL;
bd81e77b 12819
7cb608b5
NC
12820 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
12821
fdda85ca 12822 PL_body_arenas = NULL;
bd81e77b
NC
12823 Zero(&PL_body_roots, 1, PL_body_roots);
12824
bd81e77b
NC
12825 PL_sv_count = 0;
12826 PL_sv_objcount = 0;
a0714e2c
SS
12827 PL_sv_root = NULL;
12828 PL_sv_arenaroot = NULL;
bd81e77b
NC
12829
12830 PL_debug = proto_perl->Idebug;
12831
12832 PL_hash_seed = proto_perl->Ihash_seed;
12833 PL_rehash_seed = proto_perl->Irehash_seed;
12834
692fcd37
DM
12835 SvANY(&PL_sv_undef) = NULL;
12836 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
12837 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
12838 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
12839 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12840 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12841
12842 SvANY(&PL_sv_yes) = new_XPVNV();
12843 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
12844 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12845 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12846
12847 /* dbargs array probably holds garbage */
12848 PL_dbargs = NULL;
12849
12850 PL_compiling = proto_perl->Icompiling;
12851
12852#ifdef PERL_DEBUG_READONLY_OPS
12853 PL_slabs = NULL;
12854 PL_slab_count = 0;
12855#endif
12856
12857 /* pseudo environmental stuff */
12858 PL_origargc = proto_perl->Iorigargc;
12859 PL_origargv = proto_perl->Iorigargv;
12860
12861 /* Set tainting stuff before PerlIO_debug can possibly get called */
12862 PL_tainting = proto_perl->Itainting;
12863 PL_taint_warn = proto_perl->Itaint_warn;
12864
12865 PL_minus_c = proto_perl->Iminus_c;
12866
12867 PL_localpatches = proto_perl->Ilocalpatches;
12868 PL_splitstr = proto_perl->Isplitstr;
12869 PL_minus_n = proto_perl->Iminus_n;
12870 PL_minus_p = proto_perl->Iminus_p;
12871 PL_minus_l = proto_perl->Iminus_l;
12872 PL_minus_a = proto_perl->Iminus_a;
12873 PL_minus_E = proto_perl->Iminus_E;
12874 PL_minus_F = proto_perl->Iminus_F;
12875 PL_doswitches = proto_perl->Idoswitches;
12876 PL_dowarn = proto_perl->Idowarn;
12877 PL_sawampersand = proto_perl->Isawampersand;
12878 PL_unsafe = proto_perl->Iunsafe;
12879 PL_perldb = proto_perl->Iperldb;
12880 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12881 PL_exit_flags = proto_perl->Iexit_flags;
12882
12883 /* XXX time(&PL_basetime) when asked for? */
12884 PL_basetime = proto_perl->Ibasetime;
12885
12886 PL_maxsysfd = proto_perl->Imaxsysfd;
12887 PL_statusvalue = proto_perl->Istatusvalue;
12888#ifdef VMS
12889 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
12890#else
12891 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12892#endif
12893
12894 /* RE engine related */
12895 Zero(&PL_reg_state, 1, struct re_save_state);
12896 PL_reginterp_cnt = 0;
12897 PL_regmatch_slab = NULL;
12898
12899 PL_sub_generation = proto_perl->Isub_generation;
12900
12901 /* funky return mechanisms */
12902 PL_forkprocess = proto_perl->Iforkprocess;
12903
12904 /* internal state */
12905 PL_maxo = proto_perl->Imaxo;
12906
12907 PL_main_start = proto_perl->Imain_start;
12908 PL_eval_root = proto_perl->Ieval_root;
12909 PL_eval_start = proto_perl->Ieval_start;
12910
12911 PL_filemode = proto_perl->Ifilemode;
12912 PL_lastfd = proto_perl->Ilastfd;
12913 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
12914 PL_Argv = NULL;
12915 PL_Cmd = NULL;
12916 PL_gensym = proto_perl->Igensym;
12917
12918 PL_laststatval = proto_perl->Ilaststatval;
12919 PL_laststype = proto_perl->Ilaststype;
12920 PL_mess_sv = NULL;
12921
12922 PL_profiledata = NULL;
12923
12924 PL_generation = proto_perl->Igeneration;
12925
12926 PL_in_clean_objs = proto_perl->Iin_clean_objs;
12927 PL_in_clean_all = proto_perl->Iin_clean_all;
12928
12929 PL_uid = proto_perl->Iuid;
12930 PL_euid = proto_perl->Ieuid;
12931 PL_gid = proto_perl->Igid;
12932 PL_egid = proto_perl->Iegid;
12933 PL_nomemok = proto_perl->Inomemok;
12934 PL_an = proto_perl->Ian;
12935 PL_evalseq = proto_perl->Ievalseq;
12936 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
12937 PL_origalen = proto_perl->Iorigalen;
12938
12939 PL_sighandlerp = proto_perl->Isighandlerp;
12940
12941 PL_runops = proto_perl->Irunops;
12942
12943 PL_subline = proto_perl->Isubline;
12944
12945#ifdef FCRYPT
12946 PL_cryptseen = proto_perl->Icryptseen;
12947#endif
12948
12949 PL_hints = proto_perl->Ihints;
12950
12951 PL_amagic_generation = proto_perl->Iamagic_generation;
12952
12953#ifdef USE_LOCALE_COLLATE
12954 PL_collation_ix = proto_perl->Icollation_ix;
12955 PL_collation_standard = proto_perl->Icollation_standard;
12956 PL_collxfrm_base = proto_perl->Icollxfrm_base;
12957 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
12958#endif /* USE_LOCALE_COLLATE */
12959
12960#ifdef USE_LOCALE_NUMERIC
12961 PL_numeric_standard = proto_perl->Inumeric_standard;
12962 PL_numeric_local = proto_perl->Inumeric_local;
12963#endif /* !USE_LOCALE_NUMERIC */
12964
12965 /* Did the locale setup indicate UTF-8? */
12966 PL_utf8locale = proto_perl->Iutf8locale;
12967 /* Unicode features (see perlrun/-C) */
12968 PL_unicode = proto_perl->Iunicode;
12969
12970 /* Pre-5.8 signals control */
12971 PL_signals = proto_perl->Isignals;
12972
12973 /* times() ticks per second */
12974 PL_clocktick = proto_perl->Iclocktick;
12975
12976 /* Recursion stopper for PerlIO_find_layer */
12977 PL_in_load_module = proto_perl->Iin_load_module;
12978
12979 /* sort() routine */
12980 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
12981
12982 /* Not really needed/useful since the reenrant_retint is "volatile",
12983 * but do it for consistency's sake. */
12984 PL_reentrant_retint = proto_perl->Ireentrant_retint;
12985
12986 /* Hooks to shared SVs and locks. */
12987 PL_sharehook = proto_perl->Isharehook;
12988 PL_lockhook = proto_perl->Ilockhook;
12989 PL_unlockhook = proto_perl->Iunlockhook;
12990 PL_threadhook = proto_perl->Ithreadhook;
12991 PL_destroyhook = proto_perl->Idestroyhook;
12992 PL_signalhook = proto_perl->Isignalhook;
12993
d67594ff
FC
12994 PL_globhook = proto_perl->Iglobhook;
12995
692fcd37
DM
12996#ifdef THREADS_HAVE_PIDS
12997 PL_ppid = proto_perl->Ippid;
12998#endif
12999
13000 /* swatch cache */
13001 PL_last_swash_hv = NULL; /* reinits on demand */
13002 PL_last_swash_klen = 0;
13003 PL_last_swash_key[0]= '\0';
13004 PL_last_swash_tmps = (U8*)NULL;
13005 PL_last_swash_slen = 0;
13006
13007 PL_glob_index = proto_perl->Iglob_index;
13008 PL_srand_called = proto_perl->Isrand_called;
13009
13010 if (flags & CLONEf_COPY_STACKS) {
13011 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13012 PL_tmps_ix = proto_perl->Itmps_ix;
13013 PL_tmps_max = proto_perl->Itmps_max;
13014 PL_tmps_floor = proto_perl->Itmps_floor;
13015
13016 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13017 * NOTE: unlike the others! */
13018 PL_scopestack_ix = proto_perl->Iscopestack_ix;
13019 PL_scopestack_max = proto_perl->Iscopestack_max;
13020
13021 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13022 * NOTE: unlike the others! */
13023 PL_savestack_ix = proto_perl->Isavestack_ix;
13024 PL_savestack_max = proto_perl->Isavestack_max;
13025 }
13026
13027 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
13028 PL_top_env = &PL_start_env;
13029
13030 PL_op = proto_perl->Iop;
13031
13032 PL_Sv = NULL;
13033 PL_Xpv = (XPV*)NULL;
13034 my_perl->Ina = proto_perl->Ina;
13035
13036 PL_statbuf = proto_perl->Istatbuf;
13037 PL_statcache = proto_perl->Istatcache;
13038
13039#ifdef HAS_TIMES
13040 PL_timesbuf = proto_perl->Itimesbuf;
13041#endif
13042
13043 PL_tainted = proto_perl->Itainted;
13044 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
13045
13046 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
13047
13048 PL_restartjmpenv = proto_perl->Irestartjmpenv;
13049 PL_restartop = proto_perl->Irestartop;
13050 PL_in_eval = proto_perl->Iin_eval;
13051 PL_delaymagic = proto_perl->Idelaymagic;
13052 PL_phase = proto_perl->Iphase;
13053 PL_localizing = proto_perl->Ilocalizing;
13054
13055 PL_hv_fetch_ent_mh = NULL;
13056 PL_modcount = proto_perl->Imodcount;
13057 PL_lastgotoprobe = NULL;
13058 PL_dumpindent = proto_perl->Idumpindent;
13059
13060 PL_efloatbuf = NULL; /* reinits on demand */
13061 PL_efloatsize = 0; /* reinits on demand */
13062
13063 /* regex stuff */
13064
692fcd37
DM
13065 PL_regdummy = proto_perl->Iregdummy;
13066 PL_colorset = 0; /* reinits PL_colors[] */
13067 /*PL_colors[6] = {0,0,0,0,0,0};*/
13068
13069 /* Pluggable optimizer */
13070 PL_peepp = proto_perl->Ipeepp;
13071 PL_rpeepp = proto_perl->Irpeepp;
13072 /* op_free() hook */
13073 PL_opfreehook = proto_perl->Iopfreehook;
13074
bd81e77b
NC
13075#ifdef USE_REENTRANT_API
13076 /* XXX: things like -Dm will segfault here in perlio, but doing
13077 * PERL_SET_CONTEXT(proto_perl);
13078 * breaks too many other things
13079 */
13080 Perl_reentrant_init(aTHX);
13081#endif
13082
13083 /* create SV map for pointer relocation */
13084 PL_ptr_table = ptr_table_new();
13085
13086 /* initialize these special pointers as early as possible */
bd81e77b
NC
13087 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13088
13089 SvANY(&PL_sv_no) = new_XPVNV();
bb7a0f54 13090 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
bd81e77b
NC
13091 SvCUR_set(&PL_sv_no, 0);
13092 SvLEN_set(&PL_sv_no, 1);
13093 SvIV_set(&PL_sv_no, 0);
13094 SvNV_set(&PL_sv_no, 0);
13095 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13096
bb7a0f54 13097 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
bd81e77b
NC
13098 SvCUR_set(&PL_sv_yes, 1);
13099 SvLEN_set(&PL_sv_yes, 2);
13100 SvIV_set(&PL_sv_yes, 1);
13101 SvNV_set(&PL_sv_yes, 1);
13102 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13103
13104 /* create (a non-shared!) shared string table */
13105 PL_strtab = newHV();
13106 HvSHAREKEYS_off(PL_strtab);
13107 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13108 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13109
bd81e77b
NC
13110 /* These two PVs will be free'd special way so must set them same way op.c does */
13111 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
13112 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
13113
13114 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
13115 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13116
13117 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
72dc9ed5 13118 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
20439bc7 13119 CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
907b3e23 13120 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
bd81e77b
NC
13121
13122 param->stashes = newAV(); /* Setup array of objects to call clone on */
842c4123
NC
13123 /* This makes no difference to the implementation, as it always pushes
13124 and shifts pointers to other SVs without changing their reference
13125 count, with the array becoming empty before it is freed. However, it
13126 makes it conceptually clear what is going on, and will avoid some
13127 work inside av.c, filling slots between AvFILL() and AvMAX() with
13128 &PL_sv_undef, and SvREFCNT_dec()ing those. */
13129 AvREAL_off(param->stashes);
bd81e77b 13130
d08d57ef
NC
13131 if (!(flags & CLONEf_COPY_STACKS)) {
13132 param->unreferenced = newAV();
d08d57ef
NC
13133 }
13134
bd81e77b
NC
13135#ifdef PERLIO_LAYERS
13136 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13137 PerlIO_clone(aTHX_ proto_perl, param);
13138#endif
13139
13140 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
13141 PL_incgv = gv_dup(proto_perl->Iincgv, param);
13142 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
13143 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
13144 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
13145 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
13146
13147 /* switches */
bd81e77b 13148 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
1e8125c6 13149 PL_apiversion = sv_dup_inc(proto_perl->Iapiversion, param);
bd81e77b
NC
13150 PL_inplace = SAVEPV(proto_perl->Iinplace);
13151 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
bd81e77b
NC
13152
13153 /* magical thingies */
bd81e77b
NC
13154 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
13155
bd81e77b
NC
13156 PL_encoding = sv_dup(proto_perl->Iencoding, param);
13157
76f68e9b
MHM
13158 sv_setpvs(PERL_DEBUG_PAD(0), ""); /* For regex debugging. */
13159 sv_setpvs(PERL_DEBUG_PAD(1), ""); /* ext/re needs these */
13160 sv_setpvs(PERL_DEBUG_PAD(2), ""); /* even without DEBUGGING. */
bd81e77b 13161
84da74a7 13162
bd81e77b 13163 /* Clone the regex array */
937c6efd
NC
13164 /* ORANGE FIXME for plugins, probably in the SV dup code.
13165 newSViv(PTR2IV(CALLREGDUPE(
13166 INT2PTR(REGEXP *, SvIVX(regex)), param))))
13167 */
13168 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
bd81e77b
NC
13169 PL_regex_pad = AvARRAY(PL_regex_padav);
13170
13171 /* shortcuts to various I/O objects */
b2ea9a00 13172 PL_ofsgv = gv_dup_inc(proto_perl->Iofsgv, param);
bd81e77b
NC
13173 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
13174 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
13175 PL_defgv = gv_dup(proto_perl->Idefgv, param);
13176 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
13177 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
13178 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
1d7c1841 13179
bd81e77b
NC
13180 /* shortcuts to regexp stuff */
13181 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
9660f481 13182
bd81e77b
NC
13183 /* shortcuts to misc objects */
13184 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
9660f481 13185
bd81e77b
NC
13186 /* shortcuts to debugging objects */
13187 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
13188 PL_DBline = gv_dup(proto_perl->IDBline, param);
13189 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
13190 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
13191 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
13192 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
9660f481 13193
bd81e77b 13194 /* symbol tables */
907b3e23 13195 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
03d9f026 13196 PL_curstash = hv_dup_inc(proto_perl->Icurstash, param);
bd81e77b
NC
13197 PL_debstash = hv_dup(proto_perl->Idebstash, param);
13198 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
13199 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
13200
13201 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
13202 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
13203 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
3c10abe3
AG
13204 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
13205 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
bd81e77b
NC
13206 PL_endav = av_dup_inc(proto_perl->Iendav, param);
13207 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
13208 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
13209
dd69841b 13210 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
bd81e77b 13211
bd81e77b
NC
13212 /* subprocess state */
13213 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
13214
bd81e77b
NC
13215 if (proto_perl->Iop_mask)
13216 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13217 else
bd61b366 13218 PL_op_mask = NULL;
bd81e77b
NC
13219 /* PL_asserting = proto_perl->Iasserting; */
13220
13221 /* current interpreter roots */
13222 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
d3c72c2a 13223 OP_REFCNT_LOCK;
bd81e77b 13224 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
d3c72c2a 13225 OP_REFCNT_UNLOCK;
bd81e77b
NC
13226
13227 /* runtime control stuff */
13228 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
bd81e77b 13229
bd81e77b 13230 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
bd81e77b
NC
13231
13232 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
13233
13234 /* interpreter atexit processing */
13235 PL_exitlistlen = proto_perl->Iexitlistlen;
13236 if (PL_exitlistlen) {
13237 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13238 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9660f481 13239 }
bd81e77b
NC
13240 else
13241 PL_exitlist = (PerlExitListEntry*)NULL;
f16dd614
DM
13242
13243 PL_my_cxt_size = proto_perl->Imy_cxt_size;
4c901e72 13244 if (PL_my_cxt_size) {
f16dd614
DM
13245 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13246 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
53d44271 13247#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 13248 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
53d44271
JH
13249 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13250#endif
f16dd614 13251 }
53d44271 13252 else {
f16dd614 13253 PL_my_cxt_list = (void**)NULL;
53d44271 13254#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 13255 PL_my_cxt_keys = (const char**)NULL;
53d44271
JH
13256#endif
13257 }
bd81e77b
NC
13258 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
13259 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
13260 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
1830b3d9 13261 PL_custom_ops = hv_dup_inc(proto_perl->Icustom_ops, param);
bd81e77b 13262
bd81e77b 13263 PL_compcv = cv_dup(proto_perl->Icompcv, param);
9660f481 13264
bd81e77b 13265 PAD_CLONE_VARS(proto_perl, param);
9660f481 13266
bd81e77b
NC
13267#ifdef HAVE_INTERP_INTERN
13268 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13269#endif
645c22ef 13270
bd81e77b 13271 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
645c22ef 13272
bd81e77b
NC
13273#ifdef PERL_USES_PL_PIDSTATUS
13274 PL_pidstatus = newHV(); /* XXX flag for cloning? */
13275#endif
13276 PL_osname = SAVEPV(proto_perl->Iosname);
199e78b7
DM
13277 PL_parser = parser_dup(proto_perl->Iparser, param);
13278
f0c5aa00
DM
13279 /* XXX this only works if the saved cop has already been cloned */
13280 if (proto_perl->Iparser) {
13281 PL_parser->saved_curcop = (COP*)any_dup(
13282 proto_perl->Iparser->saved_curcop,
13283 proto_perl);
13284 }
13285
bd81e77b 13286 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
c43294b8 13287
bd81e77b 13288#ifdef USE_LOCALE_COLLATE
bd81e77b 13289 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
bd81e77b 13290#endif /* USE_LOCALE_COLLATE */
1d7c1841 13291
bd81e77b
NC
13292#ifdef USE_LOCALE_NUMERIC
13293 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
bd81e77b
NC
13294 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13295#endif /* !USE_LOCALE_NUMERIC */
1d7c1841 13296
bd81e77b
NC
13297 /* utf8 character classes */
13298 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
bd81e77b
NC
13299 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
13300 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
bd81e77b
NC
13301 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
13302 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
13303 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
13304 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
13305 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
13306 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
13307 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
13308 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
37e2e78e
KW
13309 PL_utf8_X_begin = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
13310 PL_utf8_X_extend = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13311 PL_utf8_X_prepend = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
13312 PL_utf8_X_non_hangul = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
13313 PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
13314 PL_utf8_X_LV = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
13315 PL_utf8_X_LVT = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
13316 PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
13317 PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
13318 PL_utf8_X_LV_LVT_V = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
bd81e77b
NC
13319 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13320 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13321 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13322 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13323 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
c11ff943 13324 PL_utf8_xidstart = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
b6912c02 13325 PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
bd81e77b 13326 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
c11ff943 13327 PL_utf8_xidcont = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
43056537 13328 PL_utf8_foldable = sv_dup_inc(proto_perl->Iutf8_foldable, param);
1d7c1841 13329
05ec9bb3 13330
bd81e77b
NC
13331 if (proto_perl->Ipsig_pend) {
13332 Newxz(PL_psig_pend, SIG_SIZE, int);
13333 }
13334 else {
13335 PL_psig_pend = (int*)NULL;
13336 }
05ec9bb3 13337
d525a7b2
NC
13338 if (proto_perl->Ipsig_name) {
13339 Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13340 sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
538f2e76 13341 param);
d525a7b2 13342 PL_psig_ptr = PL_psig_name + SIG_SIZE;
bd81e77b
NC
13343 }
13344 else {
13345 PL_psig_ptr = (SV**)NULL;
13346 PL_psig_name = (SV**)NULL;
13347 }
05ec9bb3 13348
bd81e77b 13349 if (flags & CLONEf_COPY_STACKS) {
e92c6be8 13350 Newx(PL_tmps_stack, PL_tmps_max, SV*);
1d8a41fe
JD
13351 sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13352 PL_tmps_ix+1, param);
d2d73c3e 13353
bd81e77b 13354 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
907b3e23 13355 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
bd81e77b 13356 Newxz(PL_markstack, i, I32);
907b3e23
DM
13357 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
13358 - proto_perl->Imarkstack);
13359 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
13360 - proto_perl->Imarkstack);
13361 Copy(proto_perl->Imarkstack, PL_markstack,
bd81e77b 13362 PL_markstack_ptr - PL_markstack + 1, I32);
d2d73c3e 13363
bd81e77b
NC
13364 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13365 * NOTE: unlike the others! */
bd81e77b 13366 Newxz(PL_scopestack, PL_scopestack_max, I32);
907b3e23 13367 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
d419787a 13368
cbdd5331
JD
13369#ifdef DEBUGGING
13370 Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13371 Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13372#endif
bd81e77b 13373 /* NOTE: si_dup() looks at PL_markstack */
907b3e23 13374 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
d2d73c3e 13375
bd81e77b 13376 /* PL_curstack = PL_curstackinfo->si_stack; */
907b3e23
DM
13377 PL_curstack = av_dup(proto_perl->Icurstack, param);
13378 PL_mainstack = av_dup(proto_perl->Imainstack, param);
1d7c1841 13379
bd81e77b
NC
13380 /* next PUSHs() etc. set *(PL_stack_sp+1) */
13381 PL_stack_base = AvARRAY(PL_curstack);
907b3e23
DM
13382 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
13383 - proto_perl->Istack_base);
bd81e77b 13384 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
1d7c1841 13385
bd81e77b
NC
13386 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13387 PL_savestack = ss_dup(proto_perl, param);
13388 }
13389 else {
13390 init_stacks();
13391 ENTER; /* perl_destruct() wants to LEAVE; */
13392 }
1d7c1841 13393
907b3e23
DM
13394 PL_statgv = gv_dup(proto_perl->Istatgv, param);
13395 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
1d7c1841 13396
907b3e23
DM
13397 PL_rs = sv_dup_inc(proto_perl->Irs, param);
13398 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
907b3e23 13399 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
907b3e23
DM
13400 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
13401 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
13402 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
13403
907b3e23 13404 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
1d7c1841 13405
907b3e23
DM
13406 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13407 PL_sortstash = hv_dup(proto_perl->Isortstash, param);
13408 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param);
13409 PL_secondgv = gv_dup(proto_perl->Isecondgv, param);
1d7c1841 13410
bd81e77b 13411 PL_stashcache = newHV();
1d7c1841 13412
b7185faf 13413 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
907b3e23 13414 proto_perl->Iwatchaddr);
b7185faf
DM
13415 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
13416 if (PL_debug && PL_watchaddr) {
13417 PerlIO_printf(Perl_debug_log,
13418 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
907b3e23 13419 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
b7185faf
DM
13420 PTR2UV(PL_watchok));
13421 }
13422
a3e6e81e 13423 PL_registered_mros = hv_dup_inc(proto_perl->Iregistered_mros, param);
1930840b 13424 PL_blockhooks = av_dup_inc(proto_perl->Iblockhooks, param);
2726813d 13425 PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
a3e6e81e 13426
bd81e77b
NC
13427 /* Call the ->CLONE method, if it exists, for each of the stashes
13428 identified by sv_dup() above.
13429 */
13430 while(av_len(param->stashes) != -1) {
85fbaab2 13431 HV* const stash = MUTABLE_HV(av_shift(param->stashes));
bd81e77b
NC
13432 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13433 if (cloner && GvCV(cloner)) {
13434 dSP;
13435 ENTER;
13436 SAVETMPS;
13437 PUSHMARK(SP);
6e449a3a 13438 mXPUSHs(newSVhek(HvNAME_HEK(stash)));
bd81e77b 13439 PUTBACK;
daba3364 13440 call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
bd81e77b
NC
13441 FREETMPS;
13442 LEAVE;
13443 }
1d7c1841 13444 }
1d7c1841 13445
b0b93b3c
DM
13446 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13447 ptr_table_free(PL_ptr_table);
13448 PL_ptr_table = NULL;
13449 }
13450
d08d57ef 13451 if (!(flags & CLONEf_COPY_STACKS)) {
e4295668 13452 unreferenced_to_tmp_stack(param->unreferenced);
d08d57ef 13453 }
b0b93b3c 13454
bd81e77b 13455 SvREFCNT_dec(param->stashes);
1d7c1841 13456
bd81e77b
NC
13457 /* orphaned? eg threads->new inside BEGIN or use */
13458 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
b37c2d43 13459 SvREFCNT_inc_simple_void(PL_compcv);
bd81e77b
NC
13460 SAVEFREESV(PL_compcv);
13461 }
dd2155a4 13462
bd81e77b
NC
13463 return my_perl;
13464}
1d7c1841 13465
e4295668
NC
13466static void
13467S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13468{
13469 PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13470
13471 if (AvFILLp(unreferenced) > -1) {
13472 SV **svp = AvARRAY(unreferenced);
13473 SV **const last = svp + AvFILLp(unreferenced);
13474 SSize_t count = 0;
13475
13476 do {
04518cc3 13477 if (SvREFCNT(*svp) == 1)
e4295668
NC
13478 ++count;
13479 } while (++svp <= last);
13480
13481 EXTEND_MORTAL(count);
13482 svp = AvARRAY(unreferenced);
13483
13484 do {
04518cc3
NC
13485 if (SvREFCNT(*svp) == 1) {
13486 /* Our reference is the only one to this SV. This means that
13487 in this thread, the scalar effectively has a 0 reference.
13488 That doesn't work (cleanup never happens), so donate our
13489 reference to it onto the save stack. */
13490 PL_tmps_stack[++PL_tmps_ix] = *svp;
13491 } else {
13492 /* As an optimisation, because we are already walking the
13493 entire array, instead of above doing either
13494 SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13495 release our reference to the scalar, so that at the end of
13496 the array owns zero references to the scalars it happens to
13497 point to. We are effectively converting the array from
13498 AvREAL() on to AvREAL() off. This saves the av_clear()
13499 (triggered by the SvREFCNT_dec(unreferenced) below) from
13500 walking the array a second time. */
13501 SvREFCNT_dec(*svp);
13502 }
13503
e4295668 13504 } while (++svp <= last);
04518cc3 13505 AvREAL_off(unreferenced);
e4295668
NC
13506 }
13507 SvREFCNT_dec(unreferenced);
13508}
13509
f7abe70b
NC
13510void
13511Perl_clone_params_del(CLONE_PARAMS *param)
13512{
90d4a638
NC
13513 /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13514 happy: */
1db366cc
NC
13515 PerlInterpreter *const to = param->new_perl;
13516 dTHXa(to);
90d4a638 13517 PerlInterpreter *const was = PERL_GET_THX;
f7abe70b
NC
13518
13519 PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13520
1db366cc
NC
13521 if (was != to) {
13522 PERL_SET_THX(to);
13523 }
f7abe70b 13524
1db366cc 13525 SvREFCNT_dec(param->stashes);
e4295668
NC
13526 if (param->unreferenced)
13527 unreferenced_to_tmp_stack(param->unreferenced);
f7abe70b 13528
1db366cc 13529 Safefree(param);
f7abe70b 13530
1db366cc
NC
13531 if (was != to) {
13532 PERL_SET_THX(was);
f7abe70b
NC
13533 }
13534}
13535
13536CLONE_PARAMS *
13537Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13538{
90d4a638 13539 dVAR;
f7abe70b
NC
13540 /* Need to play this game, as newAV() can call safesysmalloc(), and that
13541 does a dTHX; to get the context from thread local storage.
13542 FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13543 a version that passes in my_perl. */
13544 PerlInterpreter *const was = PERL_GET_THX;
13545 CLONE_PARAMS *param;
f7abe70b
NC
13546
13547 PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13548
13549 if (was != to) {
13550 PERL_SET_THX(to);
13551 }
13552
13553 /* Given that we've set the context, we can do this unshared. */
13554 Newx(param, 1, CLONE_PARAMS);
13555
13556 param->flags = 0;
13557 param->proto_perl = from;
1db366cc 13558 param->new_perl = to;
f7abe70b
NC
13559 param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13560 AvREAL_off(param->stashes);
d08d57ef 13561 param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
f7abe70b 13562
f7abe70b
NC
13563 if (was != to) {
13564 PERL_SET_THX(was);
13565 }
13566 return param;
13567}
13568
bd81e77b 13569#endif /* USE_ITHREADS */
1d7c1841 13570
bd81e77b
NC
13571/*
13572=head1 Unicode Support
1d7c1841 13573
bd81e77b 13574=for apidoc sv_recode_to_utf8
1d7c1841 13575
bd81e77b
NC
13576The encoding is assumed to be an Encode object, on entry the PV
13577of the sv is assumed to be octets in that encoding, and the sv
13578will be converted into Unicode (and UTF-8).
1d7c1841 13579
bd81e77b
NC
13580If the sv already is UTF-8 (or if it is not POK), or if the encoding
13581is not a reference, nothing is done to the sv. If the encoding is not
13582an C<Encode::XS> Encoding object, bad things will happen.
13583(See F<lib/encoding.pm> and L<Encode>).
1d7c1841 13584
bd81e77b 13585The PV of the sv is returned.
1d7c1841 13586
bd81e77b 13587=cut */
1d7c1841 13588
bd81e77b
NC
13589char *
13590Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13591{
13592 dVAR;
7918f24d
NC
13593
13594 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13595
bd81e77b
NC
13596 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13597 SV *uni;
13598 STRLEN len;
13599 const char *s;
13600 dSP;
13601 ENTER;
13602 SAVETMPS;
13603 save_re_context();
13604 PUSHMARK(sp);
13605 EXTEND(SP, 3);
13606 XPUSHs(encoding);
13607 XPUSHs(sv);
13608/*
13609 NI-S 2002/07/09
13610 Passing sv_yes is wrong - it needs to be or'ed set of constants
13611 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13612 remove converted chars from source.
1d7c1841 13613
bd81e77b 13614 Both will default the value - let them.
1d7c1841 13615
bd81e77b
NC
13616 XPUSHs(&PL_sv_yes);
13617*/
13618 PUTBACK;
13619 call_method("decode", G_SCALAR);
13620 SPAGAIN;
13621 uni = POPs;
13622 PUTBACK;
13623 s = SvPV_const(uni, len);
13624 if (s != SvPVX_const(sv)) {
13625 SvGROW(sv, len + 1);
13626 Move(s, SvPVX(sv), len + 1, char);
13627 SvCUR_set(sv, len);
13628 }
13629 FREETMPS;
13630 LEAVE;
75da9d4c
DM
13631 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13632 /* clear pos and any utf8 cache */
13633 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13634 if (mg)
13635 mg->mg_len = -1;
13636 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13637 magic_setutf8(sv,mg); /* clear UTF8 cache */
13638 }
bd81e77b
NC
13639 SvUTF8_on(sv);
13640 return SvPVX(sv);
389edf32 13641 }
bd81e77b
NC
13642 return SvPOKp(sv) ? SvPVX(sv) : NULL;
13643}
1d7c1841 13644
bd81e77b
NC
13645/*
13646=for apidoc sv_cat_decode
1d7c1841 13647
bd81e77b
NC
13648The encoding is assumed to be an Encode object, the PV of the ssv is
13649assumed to be octets in that encoding and decoding the input starts
13650from the position which (PV + *offset) pointed to. The dsv will be
13651concatenated the decoded UTF-8 string from ssv. Decoding will terminate
13652when the string tstr appears in decoding output or the input ends on
13653the PV of the ssv. The value which the offset points will be modified
13654to the last input position on the ssv.
1d7c1841 13655
bd81e77b 13656Returns TRUE if the terminator was found, else returns FALSE.
1d7c1841 13657
bd81e77b
NC
13658=cut */
13659
13660bool
13661Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13662 SV *ssv, int *offset, char *tstr, int tlen)
13663{
13664 dVAR;
13665 bool ret = FALSE;
7918f24d
NC
13666
13667 PERL_ARGS_ASSERT_SV_CAT_DECODE;
13668
bd81e77b
NC
13669 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13670 SV *offsv;
13671 dSP;
13672 ENTER;
13673 SAVETMPS;
13674 save_re_context();
13675 PUSHMARK(sp);
13676 EXTEND(SP, 6);
13677 XPUSHs(encoding);
13678 XPUSHs(dsv);
13679 XPUSHs(ssv);
6e449a3a
MHM
13680 offsv = newSViv(*offset);
13681 mXPUSHs(offsv);
13682 mXPUSHp(tstr, tlen);
bd81e77b
NC
13683 PUTBACK;
13684 call_method("cat_decode", G_SCALAR);
13685 SPAGAIN;
13686 ret = SvTRUE(TOPs);
13687 *offset = SvIV(offsv);
13688 PUTBACK;
13689 FREETMPS;
13690 LEAVE;
389edf32 13691 }
bd81e77b
NC
13692 else
13693 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
13694 return ret;
1d7c1841 13695
bd81e77b 13696}
1d7c1841 13697
bd81e77b
NC
13698/* ---------------------------------------------------------------------
13699 *
13700 * support functions for report_uninit()
13701 */
1d7c1841 13702
bd81e77b
NC
13703/* the maxiumum size of array or hash where we will scan looking
13704 * for the undefined element that triggered the warning */
1d7c1841 13705
bd81e77b 13706#define FUV_MAX_SEARCH_SIZE 1000
1d7c1841 13707
bd81e77b
NC
13708/* Look for an entry in the hash whose value has the same SV as val;
13709 * If so, return a mortal copy of the key. */
1d7c1841 13710
bd81e77b 13711STATIC SV*
6c1b357c 13712S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
bd81e77b
NC
13713{
13714 dVAR;
13715 register HE **array;
13716 I32 i;
6c3182a5 13717
7918f24d
NC
13718 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
13719
bd81e77b
NC
13720 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
13721 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
a0714e2c 13722 return NULL;
6c3182a5 13723
bd81e77b 13724 array = HvARRAY(hv);
6c3182a5 13725
bd81e77b
NC
13726 for (i=HvMAX(hv); i>0; i--) {
13727 register HE *entry;
13728 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
13729 if (HeVAL(entry) != val)
13730 continue;
13731 if ( HeVAL(entry) == &PL_sv_undef ||
13732 HeVAL(entry) == &PL_sv_placeholder)
13733 continue;
13734 if (!HeKEY(entry))
a0714e2c 13735 return NULL;
bd81e77b
NC
13736 if (HeKLEN(entry) == HEf_SVKEY)
13737 return sv_mortalcopy(HeKEY_sv(entry));
a663657d 13738 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
bd81e77b
NC
13739 }
13740 }
a0714e2c 13741 return NULL;
bd81e77b 13742}
6c3182a5 13743
bd81e77b
NC
13744/* Look for an entry in the array whose value has the same SV as val;
13745 * If so, return the index, otherwise return -1. */
6c3182a5 13746
bd81e77b 13747STATIC I32
6c1b357c 13748S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
bd81e77b 13749{
97aff369 13750 dVAR;
7918f24d
NC
13751
13752 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
13753
bd81e77b
NC
13754 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
13755 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
13756 return -1;
57c6e6d2 13757
4a021917
AL
13758 if (val != &PL_sv_undef) {
13759 SV ** const svp = AvARRAY(av);
13760 I32 i;
13761
13762 for (i=AvFILLp(av); i>=0; i--)
13763 if (svp[i] == val)
13764 return i;
bd81e77b
NC
13765 }
13766 return -1;
13767}
15a5279a 13768
bd81e77b
NC
13769/* S_varname(): return the name of a variable, optionally with a subscript.
13770 * If gv is non-zero, use the name of that global, along with gvtype (one
13771 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
13772 * targ. Depending on the value of the subscript_type flag, return:
13773 */
bce260cd 13774
bd81e77b
NC
13775#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
13776#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
13777#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
13778#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
bce260cd 13779
bd81e77b 13780STATIC SV*
6c1b357c
NC
13781S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
13782 const SV *const keyname, I32 aindex, int subscript_type)
bd81e77b 13783{
1d7c1841 13784
bd81e77b
NC
13785 SV * const name = sv_newmortal();
13786 if (gv) {
13787 char buffer[2];
13788 buffer[0] = gvtype;
13789 buffer[1] = 0;
1d7c1841 13790
bd81e77b 13791 /* as gv_fullname4(), but add literal '^' for $^FOO names */
66fe0623 13792
bd81e77b 13793 gv_fullname4(name, gv, buffer, 0);
1d7c1841 13794
bd81e77b
NC
13795 if ((unsigned int)SvPVX(name)[1] <= 26) {
13796 buffer[0] = '^';
13797 buffer[1] = SvPVX(name)[1] + 'A' - 1;
1d7c1841 13798
bd81e77b
NC
13799 /* Swap the 1 unprintable control character for the 2 byte pretty
13800 version - ie substr($name, 1, 1) = $buffer; */
13801 sv_insert(name, 1, 1, buffer, 2);
1d7c1841 13802 }
bd81e77b
NC
13803 }
13804 else {
289b91d9 13805 CV * const cv = find_runcv(NULL);
bd81e77b
NC
13806 SV *sv;
13807 AV *av;
1d7c1841 13808
bd81e77b 13809 if (!cv || !CvPADLIST(cv))
a0714e2c 13810 return NULL;
502c6561 13811 av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
bd81e77b 13812 sv = *av_fetch(av, targ, FALSE);
2a0f5ef0 13813 sv_setsv(name, sv);
bd81e77b 13814 }
1d7c1841 13815
bd81e77b 13816 if (subscript_type == FUV_SUBSCRIPT_HASH) {
561b68a9 13817 SV * const sv = newSV(0);
bd81e77b
NC
13818 *SvPVX(name) = '$';
13819 Perl_sv_catpvf(aTHX_ name, "{%s}",
13820 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
13821 SvREFCNT_dec(sv);
13822 }
13823 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
13824 *SvPVX(name) = '$';
13825 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
13826 }
84335ee9
NC
13827 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
13828 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
13829 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0);
13830 }
1d7c1841 13831
bd81e77b
NC
13832 return name;
13833}
1d7c1841 13834
1d7c1841 13835
bd81e77b
NC
13836/*
13837=for apidoc find_uninit_var
1d7c1841 13838
bd81e77b
NC
13839Find the name of the undefined variable (if any) that caused the operator o
13840to issue a "Use of uninitialized value" warning.
13841If match is true, only return a name if it's value matches uninit_sv.
13842So roughly speaking, if a unary operator (such as OP_COS) generates a
13843warning, then following the direct child of the op may yield an
13844OP_PADSV or OP_GV that gives the name of the undefined variable. On the
13845other hand, with OP_ADD there are two branches to follow, so we only print
13846the variable name if we get an exact match.
1d7c1841 13847
bd81e77b 13848The name is returned as a mortal SV.
1d7c1841 13849
bd81e77b
NC
13850Assumes that PL_op is the op that originally triggered the error, and that
13851PL_comppad/PL_curpad points to the currently executing pad.
1d7c1841 13852
bd81e77b
NC
13853=cut
13854*/
1d7c1841 13855
bd81e77b 13856STATIC SV *
6c1b357c
NC
13857S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
13858 bool match)
bd81e77b
NC
13859{
13860 dVAR;
13861 SV *sv;
6c1b357c
NC
13862 const GV *gv;
13863 const OP *o, *o2, *kid;
1d7c1841 13864
bd81e77b
NC
13865 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
13866 uninit_sv == &PL_sv_placeholder)))
a0714e2c 13867 return NULL;
1d7c1841 13868
bd81e77b 13869 switch (obase->op_type) {
1d7c1841 13870
bd81e77b
NC
13871 case OP_RV2AV:
13872 case OP_RV2HV:
13873 case OP_PADAV:
13874 case OP_PADHV:
13875 {
13876 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
13877 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
13878 I32 index = 0;
a0714e2c 13879 SV *keysv = NULL;
bd81e77b 13880 int subscript_type = FUV_SUBSCRIPT_WITHIN;
1d7c1841 13881
bd81e77b
NC
13882 if (pad) { /* @lex, %lex */
13883 sv = PAD_SVl(obase->op_targ);
a0714e2c 13884 gv = NULL;
bd81e77b
NC
13885 }
13886 else {
13887 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13888 /* @global, %global */
13889 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13890 if (!gv)
13891 break;
daba3364 13892 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
bd81e77b
NC
13893 }
13894 else /* @{expr}, %{expr} */
13895 return find_uninit_var(cUNOPx(obase)->op_first,
13896 uninit_sv, match);
13897 }
1d7c1841 13898
bd81e77b
NC
13899 /* attempt to find a match within the aggregate */
13900 if (hash) {
85fbaab2 13901 keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
13902 if (keysv)
13903 subscript_type = FUV_SUBSCRIPT_HASH;
13904 }
13905 else {
502c6561 13906 index = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
13907 if (index >= 0)
13908 subscript_type = FUV_SUBSCRIPT_ARRAY;
13909 }
1d7c1841 13910
bd81e77b
NC
13911 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
13912 break;
1d7c1841 13913
bd81e77b
NC
13914 return varname(gv, hash ? '%' : '@', obase->op_targ,
13915 keysv, index, subscript_type);
13916 }
1d7c1841 13917
c475d5dc
GG
13918 case OP_RV2SV:
13919 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
13920 /* $global */
13921 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
13922 if (!gv || !GvSTASH(gv))
13923 break;
13924 if (match && (GvSV(gv) != uninit_sv))
13925 break;
13926 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
13927 }
13928 /* ${expr} */
13929 return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
13930
bd81e77b
NC
13931 case OP_PADSV:
13932 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
13933 break;
a0714e2c
SS
13934 return varname(NULL, '$', obase->op_targ,
13935 NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 13936
bd81e77b
NC
13937 case OP_GVSV:
13938 gv = cGVOPx_gv(obase);
249534c3 13939 if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
bd81e77b 13940 break;
a0714e2c 13941 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 13942
93bad3fd
NC
13943 case OP_AELEMFAST_LEX:
13944 if (match) {
13945 SV **svp;
13946 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
13947 if (!av || SvRMAGICAL(av))
13948 break;
13949 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13950 if (!svp || *svp != uninit_sv)
13951 break;
bd81e77b 13952 }
93bad3fd
NC
13953 return varname(NULL, '$', obase->op_targ,
13954 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
13955 case OP_AELEMFAST:
13956 {
bd81e77b
NC
13957 gv = cGVOPx_gv(obase);
13958 if (!gv)
13959 break;
13960 if (match) {
13961 SV **svp;
6c1b357c 13962 AV *const av = GvAV(gv);
bd81e77b
NC
13963 if (!av || SvRMAGICAL(av))
13964 break;
13965 svp = av_fetch(av, (I32)obase->op_private, FALSE);
13966 if (!svp || *svp != uninit_sv)
13967 break;
13968 }
13969 return varname(gv, '$', 0,
a0714e2c 13970 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
13971 }
13972 break;
1d7c1841 13973
bd81e77b
NC
13974 case OP_EXISTS:
13975 o = cUNOPx(obase)->op_first;
13976 if (!o || o->op_type != OP_NULL ||
13977 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
13978 break;
13979 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
a2efc822 13980
bd81e77b
NC
13981 case OP_AELEM:
13982 case OP_HELEM:
e6c60e70
GG
13983 {
13984 bool negate = FALSE;
13985
bd81e77b
NC
13986 if (PL_op == obase)
13987 /* $a[uninit_expr] or $h{uninit_expr} */
13988 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
081fc587 13989
a0714e2c 13990 gv = NULL;
bd81e77b
NC
13991 o = cBINOPx(obase)->op_first;
13992 kid = cBINOPx(obase)->op_last;
8cf8f3d1 13993
bd81e77b 13994 /* get the av or hv, and optionally the gv */
a0714e2c 13995 sv = NULL;
bd81e77b
NC
13996 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
13997 sv = PAD_SV(o->op_targ);
13998 }
13999 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14000 && cUNOPo->op_first->op_type == OP_GV)
14001 {
14002 gv = cGVOPx_gv(cUNOPo->op_first);
14003 if (!gv)
14004 break;
daba3364
NC
14005 sv = o->op_type
14006 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
bd81e77b
NC
14007 }
14008 if (!sv)
14009 break;
14010
e6c60e70
GG
14011 if (kid && kid->op_type == OP_NEGATE) {
14012 negate = TRUE;
14013 kid = cUNOPx(kid)->op_first;
14014 }
14015
bd81e77b
NC
14016 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14017 /* index is constant */
e6c60e70
GG
14018 SV* kidsv;
14019 if (negate) {
14020 kidsv = sv_2mortal(newSVpvs("-"));
14021 sv_catsv(kidsv, cSVOPx_sv(kid));
14022 }
14023 else
14024 kidsv = cSVOPx_sv(kid);
bd81e77b
NC
14025 if (match) {
14026 if (SvMAGICAL(sv))
14027 break;
14028 if (obase->op_type == OP_HELEM) {
e6c60e70 14029 HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
bd81e77b
NC
14030 if (!he || HeVAL(he) != uninit_sv)
14031 break;
14032 }
14033 else {
e6c60e70
GG
14034 SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14035 negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14036 FALSE);
bd81e77b
NC
14037 if (!svp || *svp != uninit_sv)
14038 break;
14039 }
14040 }
14041 if (obase->op_type == OP_HELEM)
14042 return varname(gv, '%', o->op_targ,
e6c60e70 14043 kidsv, 0, FUV_SUBSCRIPT_HASH);
bd81e77b 14044 else
a0714e2c 14045 return varname(gv, '@', o->op_targ, NULL,
e6c60e70
GG
14046 negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14047 FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
14048 }
14049 else {
14050 /* index is an expression;
14051 * attempt to find a match within the aggregate */
14052 if (obase->op_type == OP_HELEM) {
85fbaab2 14053 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
bd81e77b
NC
14054 if (keysv)
14055 return varname(gv, '%', o->op_targ,
14056 keysv, 0, FUV_SUBSCRIPT_HASH);
14057 }
14058 else {
502c6561
NC
14059 const I32 index
14060 = find_array_subscript((const AV *)sv, uninit_sv);
bd81e77b
NC
14061 if (index >= 0)
14062 return varname(gv, '@', o->op_targ,
a0714e2c 14063 NULL, index, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
14064 }
14065 if (match)
14066 break;
14067 return varname(gv,
14068 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14069 ? '@' : '%',
a0714e2c 14070 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
f284b03f 14071 }
bd81e77b 14072 break;
e6c60e70 14073 }
dc507217 14074
bd81e77b
NC
14075 case OP_AASSIGN:
14076 /* only examine RHS */
14077 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
6d26897e 14078
bd81e77b
NC
14079 case OP_OPEN:
14080 o = cUNOPx(obase)->op_first;
14081 if (o->op_type == OP_PUSHMARK)
14082 o = o->op_sibling;
1d7c1841 14083
bd81e77b
NC
14084 if (!o->op_sibling) {
14085 /* one-arg version of open is highly magical */
a0ae6670 14086
bd81e77b
NC
14087 if (o->op_type == OP_GV) { /* open FOO; */
14088 gv = cGVOPx_gv(o);
14089 if (match && GvSV(gv) != uninit_sv)
14090 break;
14091 return varname(gv, '$', 0,
a0714e2c 14092 NULL, 0, FUV_SUBSCRIPT_NONE);
bd81e77b
NC
14093 }
14094 /* other possibilities not handled are:
14095 * open $x; or open my $x; should return '${*$x}'
14096 * open expr; should return '$'.expr ideally
14097 */
14098 break;
14099 }
14100 goto do_op;
ccfc67b7 14101
bd81e77b
NC
14102 /* ops where $_ may be an implicit arg */
14103 case OP_TRANS:
14104 case OP_SUBST:
14105 case OP_MATCH:
14106 if ( !(obase->op_flags & OPf_STACKED)) {
14107 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14108 ? PAD_SVl(obase->op_targ)
14109 : DEFSV))
14110 {
14111 sv = sv_newmortal();
76f68e9b 14112 sv_setpvs(sv, "$_");
bd81e77b
NC
14113 return sv;
14114 }
14115 }
14116 goto do_op;
9f4817db 14117
bd81e77b
NC
14118 case OP_PRTF:
14119 case OP_PRINT:
3ef1310e 14120 case OP_SAY:
fa8d1836 14121 match = 1; /* print etc can return undef on defined args */
bd81e77b
NC
14122 /* skip filehandle as it can't produce 'undef' warning */
14123 o = cUNOPx(obase)->op_first;
14124 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
14125 o = o->op_sibling->op_sibling;
14126 goto do_op2;
9f4817db 14127
9f4817db 14128
50edf520 14129 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
8b0dea50
DM
14130 case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14131
14132 /* the following ops are capable of returning PL_sv_undef even for
14133 * defined arg(s) */
14134
14135 case OP_BACKTICK:
14136 case OP_PIPE_OP:
14137 case OP_FILENO:
14138 case OP_BINMODE:
14139 case OP_TIED:
14140 case OP_GETC:
14141 case OP_SYSREAD:
14142 case OP_SEND:
14143 case OP_IOCTL:
14144 case OP_SOCKET:
14145 case OP_SOCKPAIR:
14146 case OP_BIND:
14147 case OP_CONNECT:
14148 case OP_LISTEN:
14149 case OP_ACCEPT:
14150 case OP_SHUTDOWN:
14151 case OP_SSOCKOPT:
14152 case OP_GETPEERNAME:
14153 case OP_FTRREAD:
14154 case OP_FTRWRITE:
14155 case OP_FTREXEC:
14156 case OP_FTROWNED:
14157 case OP_FTEREAD:
14158 case OP_FTEWRITE:
14159 case OP_FTEEXEC:
14160 case OP_FTEOWNED:
14161 case OP_FTIS:
14162 case OP_FTZERO:
14163 case OP_FTSIZE:
14164 case OP_FTFILE:
14165 case OP_FTDIR:
14166 case OP_FTLINK:
14167 case OP_FTPIPE:
14168 case OP_FTSOCK:
14169 case OP_FTBLK:
14170 case OP_FTCHR:
14171 case OP_FTTTY:
14172 case OP_FTSUID:
14173 case OP_FTSGID:
14174 case OP_FTSVTX:
14175 case OP_FTTEXT:
14176 case OP_FTBINARY:
14177 case OP_FTMTIME:
14178 case OP_FTATIME:
14179 case OP_FTCTIME:
14180 case OP_READLINK:
14181 case OP_OPEN_DIR:
14182 case OP_READDIR:
14183 case OP_TELLDIR:
14184 case OP_SEEKDIR:
14185 case OP_REWINDDIR:
14186 case OP_CLOSEDIR:
14187 case OP_GMTIME:
14188 case OP_ALARM:
14189 case OP_SEMGET:
14190 case OP_GETLOGIN:
14191 case OP_UNDEF:
14192 case OP_SUBSTR:
14193 case OP_AEACH:
14194 case OP_EACH:
14195 case OP_SORT:
14196 case OP_CALLER:
14197 case OP_DOFILE:
fa8d1836
DM
14198 case OP_PROTOTYPE:
14199 case OP_NCMP:
14200 case OP_SMARTMATCH:
14201 case OP_UNPACK:
14202 case OP_SYSOPEN:
14203 case OP_SYSSEEK:
8b0dea50 14204 match = 1;
bd81e77b 14205 goto do_op;
9f4817db 14206
7697b7e7
DM
14207 case OP_ENTERSUB:
14208 case OP_GOTO:
a2fb3d36
DM
14209 /* XXX tmp hack: these two may call an XS sub, and currently
14210 XS subs don't have a SUB entry on the context stack, so CV and
14211 pad determination goes wrong, and BAD things happen. So, just
14212 don't try to determine the value under those circumstances.
7697b7e7
DM
14213 Need a better fix at dome point. DAPM 11/2007 */
14214 break;
14215
4f187fc9
VP
14216 case OP_FLIP:
14217 case OP_FLOP:
14218 {
14219 GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14220 if (gv && GvSV(gv) == uninit_sv)
14221 return newSVpvs_flags("$.", SVs_TEMP);
14222 goto do_op;
14223 }
8b0dea50 14224
cc4b8646
DM
14225 case OP_POS:
14226 /* def-ness of rval pos() is independent of the def-ness of its arg */
14227 if ( !(obase->op_flags & OPf_MOD))
14228 break;
14229
bd81e77b
NC
14230 case OP_SCHOMP:
14231 case OP_CHOMP:
14232 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
84bafc02 14233 return newSVpvs_flags("${$/}", SVs_TEMP);
5f66b61c 14234 /*FALLTHROUGH*/
5d170f3a 14235
bd81e77b
NC
14236 default:
14237 do_op:
14238 if (!(obase->op_flags & OPf_KIDS))
14239 break;
14240 o = cUNOPx(obase)->op_first;
14241
14242 do_op2:
14243 if (!o)
14244 break;
f9893866 14245
bd81e77b
NC
14246 /* if all except one arg are constant, or have no side-effects,
14247 * or are optimized away, then it's unambiguous */
5f66b61c 14248 o2 = NULL;
bd81e77b 14249 for (kid=o; kid; kid = kid->op_sibling) {
e15d5972
AL
14250 if (kid) {
14251 const OPCODE type = kid->op_type;
14252 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14253 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
14254 || (type == OP_PUSHMARK)
6d1f0892
FC
14255 || (
14256 /* @$a and %$a, but not @a or %a */
14257 (type == OP_RV2AV || type == OP_RV2HV)
14258 && cUNOPx(kid)->op_first
14259 && cUNOPx(kid)->op_first->op_type != OP_GV
14260 )
bd81e77b 14261 )
bd81e77b 14262 continue;
e15d5972 14263 }
bd81e77b 14264 if (o2) { /* more than one found */
5f66b61c 14265 o2 = NULL;
bd81e77b
NC
14266 break;
14267 }
14268 o2 = kid;
14269 }
14270 if (o2)
14271 return find_uninit_var(o2, uninit_sv, match);
7a5fa8a2 14272
bd81e77b
NC
14273 /* scan all args */
14274 while (o) {
14275 sv = find_uninit_var(o, uninit_sv, 1);
14276 if (sv)
14277 return sv;
14278 o = o->op_sibling;
d0063567 14279 }
bd81e77b 14280 break;
f9893866 14281 }
a0714e2c 14282 return NULL;
9f4817db
JH
14283}
14284
220e2d4e 14285
bd81e77b
NC
14286/*
14287=for apidoc report_uninit
68795e93 14288
bd81e77b 14289Print appropriate "Use of uninitialized variable" warning
220e2d4e 14290
bd81e77b
NC
14291=cut
14292*/
220e2d4e 14293
bd81e77b 14294void
b3dbd76e 14295Perl_report_uninit(pTHX_ const SV *uninit_sv)
220e2d4e 14296{
97aff369 14297 dVAR;
bd81e77b 14298 if (PL_op) {
a0714e2c 14299 SV* varname = NULL;
1aa032b2 14300 if (uninit_sv && PL_curpad) {
bd81e77b
NC
14301 varname = find_uninit_var(PL_op, uninit_sv,0);
14302 if (varname)
14303 sv_insert(varname, 0, 0, " ", 1);
14304 }
dff6b275 14305 /* diag_listed_as: Use of uninitialized value%s */
fef7e7a0
BF
14306 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14307 SVfARG(varname ? varname : &PL_sv_no),
bd81e77b 14308 " in ", OP_DESC(PL_op));
220e2d4e 14309 }
a73e8557 14310 else
bd81e77b
NC
14311 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14312 "", "", "");
220e2d4e 14313}
f9893866 14314
241d1a3b
NC
14315/*
14316 * Local variables:
14317 * c-indentation-style: bsd
14318 * c-basic-offset: 4
14319 * indent-tabs-mode: t
14320 * End:
14321 *
37442d52
RGS
14322 * ex: set ts=8 sts=4 sw=4 noet:
14323 */