This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Take advantage of uoffset >= uoffset0, to simplify some logic.
[perl5.git] / sv.c
CommitLineData
a0d0e21e 1/* sv.c
79072805 2 *
4bb101f2 3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
b94e2f88 4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
79072805
LW
5 *
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
8 *
a0d0e21e 9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
645c22ef
DM
10 *
11 *
5e045b90
AMS
12 * This file contains the code that creates, manipulates and destroys
13 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14 * structure of an SV, so their creation and destruction is handled
15 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16 * level functions (eg. substr, split, join) for each of the types are
17 * in the pp*.c files.
79072805
LW
18 */
19
20#include "EXTERN.h"
864dbfa3 21#define PERL_IN_SV_C
79072805 22#include "perl.h"
d2f185dc 23#include "regcomp.h"
79072805 24
51371543 25#define FCALL *f
2c5424a7 26
2f8ed50e
OS
27#ifdef __Lynx__
28/* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
30#endif
31
e23c8137
JH
32#ifdef PERL_UTF8_CACHE_ASSERT
33/* The cache element 0 is the Unicode offset;
34 * the cache element 1 is the byte offset of the element 0;
35 * the cache element 2 is the Unicode length of the substring;
36 * the cache element 3 is the byte length of the substring;
37 * The checking of the substring side would be good
38 * but substr() has enough code paths to make my head spin;
39 * if adding more checks watch out for the following tests:
40 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
41 * lib/utf8.t lib/Unicode/Collate/t/index.t
42 * --jhi
43 */
44#define ASSERT_UTF8_CACHE(cache) \
bb7bbd9c 45 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
e23c8137
JH
46#else
47#define ASSERT_UTF8_CACHE(cache) NOOP
48#endif
49
f8c7b90f 50#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 51#define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
607fa7f2 52#define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
b5ccf5f2 53/* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
765f542d 54 on-write. */
765f542d 55#endif
645c22ef
DM
56
57/* ============================================================================
58
59=head1 Allocation and deallocation of SVs.
60
d2a0f284
JC
61An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
62sv, av, hv...) contains type and reference count information, and for
63many types, a pointer to the body (struct xrv, xpv, xpviv...), which
64contains fields specific to each type. Some types store all they need
65in the head, so don't have a body.
66
67In all but the most memory-paranoid configuations (ex: PURIFY), heads
68and bodies are allocated out of arenas, which by default are
69approximately 4K chunks of memory parcelled up into N heads or bodies.
93e68bfb
JC
70Sv-bodies are allocated by their sv-type, guaranteeing size
71consistency needed to allocate safely from arrays.
72
d2a0f284
JC
73For SV-heads, the first slot in each arena is reserved, and holds a
74link to the next arena, some flags, and a note of the number of slots.
75Snaked through each arena chain is a linked list of free items; when
76this becomes empty, an extra arena is allocated and divided up into N
77items which are threaded into the free list.
78
79SV-bodies are similar, but they use arena-sets by default, which
80separate the link and info from the arena itself, and reclaim the 1st
81slot in the arena. SV-bodies are further described later.
645c22ef
DM
82
83The following global variables are associated with arenas:
84
85 PL_sv_arenaroot pointer to list of SV arenas
86 PL_sv_root pointer to list of free SV structures
87
d2a0f284
JC
88 PL_body_arenas head of linked-list of body arenas
89 PL_body_roots[] array of pointers to list of free bodies of svtype
90 arrays are indexed by the svtype needed
93e68bfb 91
d2a0f284
JC
92A few special SV heads are not allocated from an arena, but are
93instead directly created in the interpreter structure, eg PL_sv_undef.
93e68bfb
JC
94The size of arenas can be changed from the default by setting
95PERL_ARENA_SIZE appropriately at compile time.
645c22ef
DM
96
97The SV arena serves the secondary purpose of allowing still-live SVs
98to be located and destroyed during final cleanup.
99
100At the lowest level, the macros new_SV() and del_SV() grab and free
101an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
102to return the SV to the free list with error checking.) new_SV() calls
103more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
104SVs in the free list have their SvTYPE field set to all ones.
105
ff276b08 106At the time of very final cleanup, sv_free_arenas() is called from
645c22ef 107perl_destruct() to physically free all the arenas allocated since the
6a93a7e5 108start of the interpreter.
645c22ef
DM
109
110Manipulation of any of the PL_*root pointers is protected by enclosing
111LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
112if threads are enabled.
113
114The function visit() scans the SV arenas list, and calls a specified
115function for each SV it finds which is still live - ie which has an SvTYPE
116other than all 1's, and a non-zero SvREFCNT. visit() is used by the
117following functions (specified as [function that calls visit()] / [function
118called by visit() for each SV]):
119
120 sv_report_used() / do_report_used()
f2524eef 121 dump all remaining SVs (debugging aid)
645c22ef
DM
122
123 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
124 Attempt to free all objects pointed to by RVs,
125 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
126 try to do the same for all objects indirectly
127 referenced by typeglobs too. Called once from
128 perl_destruct(), prior to calling sv_clean_all()
129 below.
130
131 sv_clean_all() / do_clean_all()
132 SvREFCNT_dec(sv) each remaining SV, possibly
133 triggering an sv_free(). It also sets the
134 SVf_BREAK flag on the SV to indicate that the
135 refcnt has been artificially lowered, and thus
136 stopping sv_free() from giving spurious warnings
137 about SVs which unexpectedly have a refcnt
138 of zero. called repeatedly from perl_destruct()
139 until there are no SVs left.
140
93e68bfb 141=head2 Arena allocator API Summary
645c22ef
DM
142
143Private API to rest of sv.c
144
145 new_SV(), del_SV(),
146
147 new_XIV(), del_XIV(),
148 new_XNV(), del_XNV(),
149 etc
150
151Public API:
152
8cf8f3d1 153 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
645c22ef 154
645c22ef
DM
155=cut
156
157============================================================================ */
158
4561caa4
CS
159/*
160 * "A time to plant, and a time to uproot what was planted..."
161 */
162
77354fb4
NC
163/*
164 * nice_chunk and nice_chunk size need to be set
165 * and queried under the protection of sv_mutex
166 */
167void
168Perl_offer_nice_chunk(pTHX_ void *chunk, U32 chunk_size)
169{
97aff369 170 dVAR;
77354fb4
NC
171 void *new_chunk;
172 U32 new_chunk_size;
173 LOCK_SV_MUTEX;
174 new_chunk = (void *)(chunk);
175 new_chunk_size = (chunk_size);
176 if (new_chunk_size > PL_nice_chunk_size) {
177 Safefree(PL_nice_chunk);
178 PL_nice_chunk = (char *) new_chunk;
179 PL_nice_chunk_size = new_chunk_size;
180 } else {
181 Safefree(chunk);
182 }
183 UNLOCK_SV_MUTEX;
184}
cac9b346 185
fd0854ff 186#ifdef DEBUG_LEAKING_SCALARS
22162ca8 187# define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
fd0854ff
DM
188#else
189# define FREE_SV_DEBUG_FILE(sv)
190#endif
191
48614a46
NC
192#ifdef PERL_POISON
193# define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
194/* Whilst I'd love to do this, it seems that things like to check on
195 unreferenced scalars
196# define POSION_SV_HEAD(sv) Poison(sv, 1, struct STRUCT_SV)
197*/
198# define POSION_SV_HEAD(sv) Poison(&SvANY(sv), 1, void *), \
199 Poison(&SvREFCNT(sv), 1, U32)
200#else
201# define SvARENA_CHAIN(sv) SvANY(sv)
202# define POSION_SV_HEAD(sv)
203#endif
204
053fc874
GS
205#define plant_SV(p) \
206 STMT_START { \
fd0854ff 207 FREE_SV_DEBUG_FILE(p); \
48614a46
NC
208 POSION_SV_HEAD(p); \
209 SvARENA_CHAIN(p) = (void *)PL_sv_root; \
053fc874
GS
210 SvFLAGS(p) = SVTYPEMASK; \
211 PL_sv_root = (p); \
212 --PL_sv_count; \
213 } STMT_END
a0d0e21e 214
fba3b22e 215/* sv_mutex must be held while calling uproot_SV() */
053fc874
GS
216#define uproot_SV(p) \
217 STMT_START { \
218 (p) = PL_sv_root; \
bb7bbd9c 219 PL_sv_root = (SV*)SvARENA_CHAIN(p); \
053fc874
GS
220 ++PL_sv_count; \
221 } STMT_END
222
645c22ef 223
cac9b346
NC
224/* make some more SVs by adding another arena */
225
226/* sv_mutex must be held while calling more_sv() */
227STATIC SV*
228S_more_sv(pTHX)
229{
97aff369 230 dVAR;
cac9b346
NC
231 SV* sv;
232
233 if (PL_nice_chunk) {
234 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
bd61b366 235 PL_nice_chunk = NULL;
cac9b346
NC
236 PL_nice_chunk_size = 0;
237 }
238 else {
239 char *chunk; /* must use New here to match call to */
d2a0f284 240 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
2e7ed132 241 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
cac9b346
NC
242 }
243 uproot_SV(sv);
244 return sv;
245}
246
645c22ef
DM
247/* new_SV(): return a new, empty SV head */
248
eba0f806
DM
249#ifdef DEBUG_LEAKING_SCALARS
250/* provide a real function for a debugger to play with */
251STATIC SV*
252S_new_SV(pTHX)
253{
254 SV* sv;
255
256 LOCK_SV_MUTEX;
257 if (PL_sv_root)
258 uproot_SV(sv);
259 else
cac9b346 260 sv = S_more_sv(aTHX);
eba0f806
DM
261 UNLOCK_SV_MUTEX;
262 SvANY(sv) = 0;
263 SvREFCNT(sv) = 1;
264 SvFLAGS(sv) = 0;
fd0854ff
DM
265 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
266 sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
267 (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
268 sv->sv_debug_inpad = 0;
269 sv->sv_debug_cloned = 0;
fd0854ff 270 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
fd0854ff 271
eba0f806
DM
272 return sv;
273}
274# define new_SV(p) (p)=S_new_SV(aTHX)
275
276#else
277# define new_SV(p) \
053fc874
GS
278 STMT_START { \
279 LOCK_SV_MUTEX; \
280 if (PL_sv_root) \
281 uproot_SV(p); \
282 else \
cac9b346 283 (p) = S_more_sv(aTHX); \
053fc874
GS
284 UNLOCK_SV_MUTEX; \
285 SvANY(p) = 0; \
286 SvREFCNT(p) = 1; \
287 SvFLAGS(p) = 0; \
288 } STMT_END
eba0f806 289#endif
463ee0b2 290
645c22ef
DM
291
292/* del_SV(): return an empty SV head to the free list */
293
a0d0e21e 294#ifdef DEBUGGING
4561caa4 295
053fc874
GS
296#define del_SV(p) \
297 STMT_START { \
298 LOCK_SV_MUTEX; \
aea4f609 299 if (DEBUG_D_TEST) \
053fc874
GS
300 del_sv(p); \
301 else \
302 plant_SV(p); \
303 UNLOCK_SV_MUTEX; \
304 } STMT_END
a0d0e21e 305
76e3520e 306STATIC void
cea2e8a9 307S_del_sv(pTHX_ SV *p)
463ee0b2 308{
97aff369 309 dVAR;
aea4f609 310 if (DEBUG_D_TEST) {
4633a7c4 311 SV* sva;
a3b680e6 312 bool ok = 0;
3280af22 313 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
53c1dcc0
AL
314 const SV * const sv = sva + 1;
315 const SV * const svend = &sva[SvREFCNT(sva)];
c0ff570e 316 if (p >= sv && p < svend) {
a0d0e21e 317 ok = 1;
c0ff570e
NC
318 break;
319 }
a0d0e21e
LW
320 }
321 if (!ok) {
0453d815 322 if (ckWARN_d(WARN_INTERNAL))
9014280d 323 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc
SB
324 "Attempt to free non-arena SV: 0x%"UVxf
325 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
a0d0e21e
LW
326 return;
327 }
328 }
4561caa4 329 plant_SV(p);
463ee0b2 330}
a0d0e21e 331
4561caa4
CS
332#else /* ! DEBUGGING */
333
334#define del_SV(p) plant_SV(p)
335
336#endif /* DEBUGGING */
463ee0b2 337
645c22ef
DM
338
339/*
ccfc67b7
JH
340=head1 SV Manipulation Functions
341
645c22ef
DM
342=for apidoc sv_add_arena
343
344Given a chunk of memory, link it to the head of the list of arenas,
345and split it into a list of free SVs.
346
347=cut
348*/
349
4633a7c4 350void
864dbfa3 351Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
463ee0b2 352{
97aff369 353 dVAR;
0bd48802 354 SV* const sva = (SV*)ptr;
463ee0b2
LW
355 register SV* sv;
356 register SV* svend;
4633a7c4
LW
357
358 /* The first SV in an arena isn't an SV. */
3280af22 359 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
4633a7c4
LW
360 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
361 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
362
3280af22
NIS
363 PL_sv_arenaroot = sva;
364 PL_sv_root = sva + 1;
4633a7c4
LW
365
366 svend = &sva[SvREFCNT(sva) - 1];
367 sv = sva + 1;
463ee0b2 368 while (sv < svend) {
48614a46 369 SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
03e36789 370#ifdef DEBUGGING
978b032e 371 SvREFCNT(sv) = 0;
03e36789
NC
372#endif
373 /* Must always set typemask because it's awlays checked in on cleanup
374 when the arenas are walked looking for objects. */
8990e307 375 SvFLAGS(sv) = SVTYPEMASK;
463ee0b2
LW
376 sv++;
377 }
48614a46 378 SvARENA_CHAIN(sv) = 0;
03e36789
NC
379#ifdef DEBUGGING
380 SvREFCNT(sv) = 0;
381#endif
4633a7c4
LW
382 SvFLAGS(sv) = SVTYPEMASK;
383}
384
055972dc
DM
385/* visit(): call the named function for each non-free SV in the arenas
386 * whose flags field matches the flags/mask args. */
645c22ef 387
5226ed68 388STATIC I32
055972dc 389S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
8990e307 390{
97aff369 391 dVAR;
4633a7c4 392 SV* sva;
5226ed68 393 I32 visited = 0;
8990e307 394
3280af22 395 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
53c1dcc0 396 register const SV * const svend = &sva[SvREFCNT(sva)];
a3b680e6 397 register SV* sv;
4561caa4 398 for (sv = sva + 1; sv < svend; ++sv) {
055972dc
DM
399 if (SvTYPE(sv) != SVTYPEMASK
400 && (sv->sv_flags & mask) == flags
401 && SvREFCNT(sv))
402 {
acfe0abc 403 (FCALL)(aTHX_ sv);
5226ed68
JH
404 ++visited;
405 }
8990e307
LW
406 }
407 }
5226ed68 408 return visited;
8990e307
LW
409}
410
758a08c3
JH
411#ifdef DEBUGGING
412
645c22ef
DM
413/* called by sv_report_used() for each live SV */
414
415static void
acfe0abc 416do_report_used(pTHX_ SV *sv)
645c22ef
DM
417{
418 if (SvTYPE(sv) != SVTYPEMASK) {
419 PerlIO_printf(Perl_debug_log, "****\n");
420 sv_dump(sv);
421 }
422}
758a08c3 423#endif
645c22ef
DM
424
425/*
426=for apidoc sv_report_used
427
428Dump the contents of all SVs not yet freed. (Debugging aid).
429
430=cut
431*/
432
8990e307 433void
864dbfa3 434Perl_sv_report_used(pTHX)
4561caa4 435{
ff270d3a 436#ifdef DEBUGGING
055972dc 437 visit(do_report_used, 0, 0);
96a5add6
AL
438#else
439 PERL_UNUSED_CONTEXT;
ff270d3a 440#endif
4561caa4
CS
441}
442
645c22ef
DM
443/* called by sv_clean_objs() for each live SV */
444
445static void
e15faf7d 446do_clean_objs(pTHX_ SV *ref)
645c22ef 447{
97aff369 448 dVAR;
823a54a3
AL
449 if (SvROK(ref)) {
450 SV * const target = SvRV(ref);
451 if (SvOBJECT(target)) {
452 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
453 if (SvWEAKREF(ref)) {
454 sv_del_backref(target, ref);
455 SvWEAKREF_off(ref);
456 SvRV_set(ref, NULL);
457 } else {
458 SvROK_off(ref);
459 SvRV_set(ref, NULL);
460 SvREFCNT_dec(target);
461 }
645c22ef
DM
462 }
463 }
464
465 /* XXX Might want to check arrays, etc. */
466}
467
468/* called by sv_clean_objs() for each live SV */
469
470#ifndef DISABLE_DESTRUCTOR_KLUDGE
471static void
acfe0abc 472do_clean_named_objs(pTHX_ SV *sv)
645c22ef 473{
97aff369 474 dVAR;
f7877b28 475 if (SvTYPE(sv) == SVt_PVGV && isGV_with_GP(sv) && GvGP(sv)) {
c69033f2
NC
476 if ((
477#ifdef PERL_DONT_CREATE_GVSV
478 GvSV(sv) &&
479#endif
480 SvOBJECT(GvSV(sv))) ||
645c22ef
DM
481 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
482 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
483 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
484 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
485 {
486 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
ec5f3c78 487 SvFLAGS(sv) |= SVf_BREAK;
645c22ef
DM
488 SvREFCNT_dec(sv);
489 }
490 }
491}
492#endif
493
494/*
495=for apidoc sv_clean_objs
496
497Attempt to destroy all objects not yet freed
498
499=cut
500*/
501
4561caa4 502void
864dbfa3 503Perl_sv_clean_objs(pTHX)
4561caa4 504{
97aff369 505 dVAR;
3280af22 506 PL_in_clean_objs = TRUE;
055972dc 507 visit(do_clean_objs, SVf_ROK, SVf_ROK);
4561caa4 508#ifndef DISABLE_DESTRUCTOR_KLUDGE
2d0f3c12 509 /* some barnacles may yet remain, clinging to typeglobs */
055972dc 510 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
4561caa4 511#endif
3280af22 512 PL_in_clean_objs = FALSE;
4561caa4
CS
513}
514
645c22ef
DM
515/* called by sv_clean_all() for each live SV */
516
517static void
acfe0abc 518do_clean_all(pTHX_ SV *sv)
645c22ef 519{
97aff369 520 dVAR;
645c22ef
DM
521 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
522 SvFLAGS(sv) |= SVf_BREAK;
0e705b3b 523 if (PL_comppad == (AV*)sv) {
7d49f689 524 PL_comppad = NULL;
4608196e 525 PL_curpad = NULL;
0e705b3b 526 }
645c22ef
DM
527 SvREFCNT_dec(sv);
528}
529
530/*
531=for apidoc sv_clean_all
532
533Decrement the refcnt of each remaining SV, possibly triggering a
534cleanup. This function may have to be called multiple times to free
ff276b08 535SVs which are in complex self-referential hierarchies.
645c22ef
DM
536
537=cut
538*/
539
5226ed68 540I32
864dbfa3 541Perl_sv_clean_all(pTHX)
8990e307 542{
97aff369 543 dVAR;
5226ed68 544 I32 cleaned;
3280af22 545 PL_in_clean_all = TRUE;
055972dc 546 cleaned = visit(do_clean_all, 0,0);
3280af22 547 PL_in_clean_all = FALSE;
5226ed68 548 return cleaned;
8990e307 549}
463ee0b2 550
5e258f8c
JC
551/*
552 ARENASETS: a meta-arena implementation which separates arena-info
553 into struct arena_set, which contains an array of struct
554 arena_descs, each holding info for a single arena. By separating
555 the meta-info from the arena, we recover the 1st slot, formerly
556 borrowed for list management. The arena_set is about the size of an
557 arena, avoiding the needless malloc overhead of a naive linked-list
558
559 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
560 memory in the last arena-set (1/2 on average). In trade, we get
561 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
d2a0f284
JC
562 smaller types). The recovery of the wasted space allows use of
563 small arenas for large, rare body types,
5e258f8c 564*/
5e258f8c 565struct arena_desc {
398c677b
NC
566 char *arena; /* the raw storage, allocated aligned */
567 size_t size; /* its size ~4k typ */
568 int unit_type; /* useful for arena audits */
5e258f8c
JC
569 /* info for sv-heads (eventually)
570 int count, flags;
571 */
572};
573
e6148039
NC
574struct arena_set;
575
576/* Get the maximum number of elements in set[] such that struct arena_set
577 will fit within PERL_ARENA_SIZE, which is probabably just under 4K, and
578 therefore likely to be 1 aligned memory page. */
579
580#define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
581 - 2 * sizeof(int)) / sizeof (struct arena_desc))
5e258f8c
JC
582
583struct arena_set {
584 struct arena_set* next;
585 int set_size; /* ie ARENAS_PER_SET */
586 int curr; /* index of next available arena-desc */
587 struct arena_desc set[ARENAS_PER_SET];
588};
589
645c22ef
DM
590/*
591=for apidoc sv_free_arenas
592
593Deallocate the memory used by all arenas. Note that all the individual SV
594heads and bodies within the arenas must already have been freed.
595
596=cut
597*/
4633a7c4 598void
864dbfa3 599Perl_sv_free_arenas(pTHX)
4633a7c4 600{
97aff369 601 dVAR;
4633a7c4
LW
602 SV* sva;
603 SV* svanext;
93e68bfb 604 int i;
4633a7c4
LW
605
606 /* Free arenas here, but be careful about fake ones. (We assume
607 contiguity of the fake ones with the corresponding real ones.) */
608
3280af22 609 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
4633a7c4
LW
610 svanext = (SV*) SvANY(sva);
611 while (svanext && SvFAKE(svanext))
612 svanext = (SV*) SvANY(svanext);
613
614 if (!SvFAKE(sva))
1df70142 615 Safefree(sva);
4633a7c4 616 }
93e68bfb 617
5e258f8c
JC
618 {
619 struct arena_set *next, *aroot = (struct arena_set*) PL_body_arenas;
620
621 for (; aroot; aroot = next) {
96a5add6 622 const int max = aroot->curr;
5e258f8c
JC
623 for (i=0; i<max; i++) {
624 assert(aroot->set[i].arena);
625 Safefree(aroot->set[i].arena);
626 }
627 next = aroot->next;
628 Safefree(aroot);
629 }
630 }
dc8220bf 631 PL_body_arenas = 0;
fdda85ca 632
232d1c15 633 for (i=0; i<PERL_ARENA_ROOTS_SIZE; i++)
93e68bfb 634 PL_body_roots[i] = 0;
93e68bfb 635
43c5f42d 636 Safefree(PL_nice_chunk);
bd61b366 637 PL_nice_chunk = NULL;
3280af22
NIS
638 PL_nice_chunk_size = 0;
639 PL_sv_arenaroot = 0;
640 PL_sv_root = 0;
4633a7c4
LW
641}
642
bd81e77b
NC
643/*
644 Here are mid-level routines that manage the allocation of bodies out
645 of the various arenas. There are 5 kinds of arenas:
29489e7c 646
bd81e77b
NC
647 1. SV-head arenas, which are discussed and handled above
648 2. regular body arenas
649 3. arenas for reduced-size bodies
650 4. Hash-Entry arenas
651 5. pte arenas (thread related)
29489e7c 652
bd81e77b
NC
653 Arena types 2 & 3 are chained by body-type off an array of
654 arena-root pointers, which is indexed by svtype. Some of the
655 larger/less used body types are malloced singly, since a large
656 unused block of them is wasteful. Also, several svtypes dont have
657 bodies; the data fits into the sv-head itself. The arena-root
658 pointer thus has a few unused root-pointers (which may be hijacked
659 later for arena types 4,5)
29489e7c 660
bd81e77b
NC
661 3 differs from 2 as an optimization; some body types have several
662 unused fields in the front of the structure (which are kept in-place
663 for consistency). These bodies can be allocated in smaller chunks,
664 because the leading fields arent accessed. Pointers to such bodies
665 are decremented to point at the unused 'ghost' memory, knowing that
666 the pointers are used with offsets to the real memory.
29489e7c 667
bd81e77b
NC
668 HE, HEK arenas are managed separately, with separate code, but may
669 be merge-able later..
670
671 PTE arenas are not sv-bodies, but they share these mid-level
672 mechanics, so are considered here. The new mid-level mechanics rely
673 on the sv_type of the body being allocated, so we just reserve one
674 of the unused body-slots for PTEs, then use it in those (2) PTE
675 contexts below (line ~10k)
676*/
677
bd26d9a3 678/* get_arena(size): this creates custom-sized arenas
5e258f8c
JC
679 TBD: export properly for hv.c: S_more_he().
680*/
681void*
682Perl_get_arena(pTHX_ int arena_size)
683{
5e258f8c 684 struct arena_desc* adesc;
476a1e16 685 struct arena_set *newroot, **aroot = (struct arena_set**) &PL_body_arenas;
5e258f8c
JC
686 int curr;
687
476a1e16
JC
688 /* shouldnt need this
689 if (!arena_size) arena_size = PERL_ARENA_SIZE;
690 */
5e258f8c
JC
691
692 /* may need new arena-set to hold new arena */
476a1e16 693 if (!*aroot || (*aroot)->curr >= (*aroot)->set_size) {
5e258f8c
JC
694 Newxz(newroot, 1, struct arena_set);
695 newroot->set_size = ARENAS_PER_SET;
476a1e16
JC
696 newroot->next = *aroot;
697 *aroot = newroot;
698 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", *aroot));
5e258f8c
JC
699 }
700
701 /* ok, now have arena-set with at least 1 empty/available arena-desc */
476a1e16
JC
702 curr = (*aroot)->curr++;
703 adesc = &((*aroot)->set[curr]);
5e258f8c
JC
704 assert(!adesc->arena);
705
5e258f8c
JC
706 Newxz(adesc->arena, arena_size, char);
707 adesc->size = arena_size;
d2a0f284
JC
708 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %d\n",
709 curr, adesc->arena, arena_size));
5e258f8c
JC
710
711 return adesc->arena;
5e258f8c
JC
712}
713
53c1dcc0 714
bd81e77b 715/* return a thing to the free list */
29489e7c 716
bd81e77b
NC
717#define del_body(thing, root) \
718 STMT_START { \
00b6aa41 719 void ** const thing_copy = (void **)thing;\
bd81e77b
NC
720 LOCK_SV_MUTEX; \
721 *thing_copy = *root; \
722 *root = (void*)thing_copy; \
723 UNLOCK_SV_MUTEX; \
724 } STMT_END
29489e7c 725
bd81e77b 726/*
d2a0f284
JC
727
728=head1 SV-Body Allocation
729
730Allocation of SV-bodies is similar to SV-heads, differing as follows;
731the allocation mechanism is used for many body types, so is somewhat
732more complicated, it uses arena-sets, and has no need for still-live
733SV detection.
734
735At the outermost level, (new|del)_X*V macros return bodies of the
736appropriate type. These macros call either (new|del)_body_type or
737(new|del)_body_allocated macro pairs, depending on specifics of the
738type. Most body types use the former pair, the latter pair is used to
739allocate body types with "ghost fields".
740
741"ghost fields" are fields that are unused in certain types, and
742consequently dont need to actually exist. They are declared because
743they're part of a "base type", which allows use of functions as
744methods. The simplest examples are AVs and HVs, 2 aggregate types
745which don't use the fields which support SCALAR semantics.
746
747For these types, the arenas are carved up into *_allocated size
748chunks, we thus avoid wasted memory for those unaccessed members.
749When bodies are allocated, we adjust the pointer back in memory by the
750size of the bit not allocated, so it's as if we allocated the full
751structure. (But things will all go boom if you write to the part that
752is "not there", because you'll be overwriting the last members of the
753preceding structure in memory.)
754
755We calculate the correction using the STRUCT_OFFSET macro. For
756example, if xpv_allocated is the same structure as XPV then the two
757OFFSETs sum to zero, and the pointer is unchanged. If the allocated
758structure is smaller (no initial NV actually allocated) then the net
759effect is to subtract the size of the NV from the pointer, to return a
760new pointer as if an initial NV were actually allocated.
761
762This is the same trick as was used for NV and IV bodies. Ironically it
763doesn't need to be used for NV bodies any more, because NV is now at
764the start of the structure. IV bodies don't need it either, because
765they are no longer allocated.
766
767In turn, the new_body_* allocators call S_new_body(), which invokes
768new_body_inline macro, which takes a lock, and takes a body off the
769linked list at PL_body_roots[sv_type], calling S_more_bodies() if
770necessary to refresh an empty list. Then the lock is released, and
771the body is returned.
772
773S_more_bodies calls get_arena(), and carves it up into an array of N
774bodies, which it strings into a linked list. It looks up arena-size
775and body-size from the body_details table described below, thus
776supporting the multiple body-types.
777
778If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
779the (new|del)_X*V macros are mapped directly to malloc/free.
780
781*/
782
783/*
784
785For each sv-type, struct body_details bodies_by_type[] carries
786parameters which control these aspects of SV handling:
787
788Arena_size determines whether arenas are used for this body type, and if
789so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
790zero, forcing individual mallocs and frees.
791
792Body_size determines how big a body is, and therefore how many fit into
793each arena. Offset carries the body-pointer adjustment needed for
794*_allocated body types, and is used in *_allocated macros.
795
796But its main purpose is to parameterize info needed in
797Perl_sv_upgrade(). The info here dramatically simplifies the function
798vs the implementation in 5.8.7, making it table-driven. All fields
799are used for this, except for arena_size.
800
801For the sv-types that have no bodies, arenas are not used, so those
802PL_body_roots[sv_type] are unused, and can be overloaded. In
803something of a special case, SVt_NULL is borrowed for HE arenas;
804PL_body_roots[SVt_NULL] is filled by S_more_he, but the
805bodies_by_type[SVt_NULL] slot is not used, as the table is not
806available in hv.c,
807
808PTEs also use arenas, but are never seen in Perl_sv_upgrade.
809Nonetheless, they get their own slot in bodies_by_type[SVt_NULL], so
810they can just use the same allocation semantics. At first, PTEs were
811also overloaded to a non-body sv-type, but this yielded hard-to-find
812malloc bugs, so was simplified by claiming a new slot. This choice
813has no consequence at this time.
814
29489e7c
DM
815*/
816
bd81e77b 817struct body_details {
0fb58b32 818 U8 body_size; /* Size to allocate */
10666ae3 819 U8 copy; /* Size of structure to copy (may be shorter) */
0fb58b32 820 U8 offset;
10666ae3
NC
821 unsigned int type : 4; /* We have space for a sanity check. */
822 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
823 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
824 unsigned int arena : 1; /* Allocated from an arena */
825 size_t arena_size; /* Size of arena to allocate */
bd81e77b 826};
29489e7c 827
bd81e77b
NC
828#define HADNV FALSE
829#define NONV TRUE
29489e7c 830
d2a0f284 831
bd81e77b
NC
832#ifdef PURIFY
833/* With -DPURFIY we allocate everything directly, and don't use arenas.
834 This seems a rather elegant way to simplify some of the code below. */
835#define HASARENA FALSE
836#else
837#define HASARENA TRUE
838#endif
839#define NOARENA FALSE
29489e7c 840
d2a0f284
JC
841/* Size the arenas to exactly fit a given number of bodies. A count
842 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
843 simplifying the default. If count > 0, the arena is sized to fit
844 only that many bodies, allowing arenas to be used for large, rare
845 bodies (XPVFM, XPVIO) without undue waste. The arena size is
846 limited by PERL_ARENA_SIZE, so we can safely oversize the
847 declarations.
848 */
95db5f15
MB
849#define FIT_ARENA0(body_size) \
850 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
851#define FIT_ARENAn(count,body_size) \
852 ( count * body_size <= PERL_ARENA_SIZE) \
853 ? count * body_size \
854 : FIT_ARENA0 (body_size)
855#define FIT_ARENA(count,body_size) \
856 count \
857 ? FIT_ARENAn (count, body_size) \
858 : FIT_ARENA0 (body_size)
d2a0f284 859
bd81e77b 860/* A macro to work out the offset needed to subtract from a pointer to (say)
29489e7c 861
bd81e77b
NC
862typedef struct {
863 STRLEN xpv_cur;
864 STRLEN xpv_len;
865} xpv_allocated;
29489e7c 866
bd81e77b 867to make its members accessible via a pointer to (say)
29489e7c 868
bd81e77b
NC
869struct xpv {
870 NV xnv_nv;
871 STRLEN xpv_cur;
872 STRLEN xpv_len;
873};
29489e7c 874
bd81e77b 875*/
29489e7c 876
bd81e77b
NC
877#define relative_STRUCT_OFFSET(longer, shorter, member) \
878 (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
29489e7c 879
bd81e77b
NC
880/* Calculate the length to copy. Specifically work out the length less any
881 final padding the compiler needed to add. See the comment in sv_upgrade
882 for why copying the padding proved to be a bug. */
29489e7c 883
bd81e77b
NC
884#define copy_length(type, last_member) \
885 STRUCT_OFFSET(type, last_member) \
886 + sizeof (((type*)SvANY((SV*)0))->last_member)
29489e7c 887
bd81e77b 888static const struct body_details bodies_by_type[] = {
10666ae3
NC
889 { sizeof(HE), 0, 0, SVt_NULL,
890 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
d2a0f284
JC
891
892 /* IVs are in the head, so the allocation size is 0.
893 However, the slot is overloaded for PTEs. */
894 { sizeof(struct ptr_tbl_ent), /* This is used for PTEs. */
895 sizeof(IV), /* This is used to copy out the IV body. */
10666ae3 896 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
d2a0f284
JC
897 NOARENA /* IVS don't need an arena */,
898 /* But PTEs need to know the size of their arena */
899 FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
900 },
901
bd81e77b 902 /* 8 bytes on most ILP32 with IEEE doubles */
10666ae3 903 { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
d2a0f284
JC
904 FIT_ARENA(0, sizeof(NV)) },
905
906 /* RVs are in the head now. */
10666ae3 907 { 0, 0, 0, SVt_RV, FALSE, NONV, NOARENA, 0 },
d2a0f284 908
bd81e77b 909 /* 8 bytes on most ILP32 with IEEE doubles */
d2a0f284
JC
910 { sizeof(xpv_allocated),
911 copy_length(XPV, xpv_len)
912 - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
913 + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
10666ae3 914 SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) },
d2a0f284 915
bd81e77b 916 /* 12 */
d2a0f284
JC
917 { sizeof(xpviv_allocated),
918 copy_length(XPVIV, xiv_u)
919 - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
920 + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
10666ae3 921 SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) },
d2a0f284 922
bd81e77b 923 /* 20 */
10666ae3 924 { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
d2a0f284
JC
925 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
926
bd81e77b 927 /* 28 */
10666ae3 928 { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
d2a0f284
JC
929 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
930
bd81e77b 931 /* 36 */
10666ae3 932 { sizeof(XPVBM), sizeof(XPVBM), 0, SVt_PVBM, TRUE, HADNV,
d2a0f284
JC
933 HASARENA, FIT_ARENA(0, sizeof(XPVBM)) },
934
bd81e77b 935 /* 48 */
10666ae3 936 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
d2a0f284
JC
937 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
938
bd81e77b 939 /* 64 */
10666ae3 940 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
d2a0f284
JC
941 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
942
943 { sizeof(xpvav_allocated),
944 copy_length(XPVAV, xmg_stash)
945 - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
946 + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
10666ae3 947 SVt_PVAV, TRUE, HADNV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) },
d2a0f284
JC
948
949 { sizeof(xpvhv_allocated),
950 copy_length(XPVHV, xmg_stash)
951 - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
952 + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
10666ae3 953 SVt_PVHV, TRUE, HADNV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) },
d2a0f284 954
c84c4652 955 /* 56 */
4115f141 956 { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated),
c84c4652 957 + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur),
10666ae3 958 SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) },
d2a0f284 959
4115f141 960 { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated),
3038937b 961 + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur),
10666ae3 962 SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) },
d2a0f284
JC
963
964 /* XPVIO is 84 bytes, fits 48x */
10666ae3 965 { sizeof(XPVIO), sizeof(XPVIO), 0, SVt_PVIO, TRUE, HADNV,
d2a0f284 966 HASARENA, FIT_ARENA(24, sizeof(XPVIO)) },
bd81e77b 967};
29489e7c 968
d2a0f284
JC
969#define new_body_type(sv_type) \
970 (void *)((char *)S_new_body(aTHX_ sv_type))
29489e7c 971
bd81e77b
NC
972#define del_body_type(p, sv_type) \
973 del_body(p, &PL_body_roots[sv_type])
29489e7c 974
29489e7c 975
bd81e77b 976#define new_body_allocated(sv_type) \
d2a0f284 977 (void *)((char *)S_new_body(aTHX_ sv_type) \
bd81e77b 978 - bodies_by_type[sv_type].offset)
29489e7c 979
bd81e77b
NC
980#define del_body_allocated(p, sv_type) \
981 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
29489e7c 982
29489e7c 983
bd81e77b
NC
984#define my_safemalloc(s) (void*)safemalloc(s)
985#define my_safecalloc(s) (void*)safecalloc(s, 1)
986#define my_safefree(p) safefree((char*)p)
29489e7c 987
bd81e77b 988#ifdef PURIFY
29489e7c 989
bd81e77b
NC
990#define new_XNV() my_safemalloc(sizeof(XPVNV))
991#define del_XNV(p) my_safefree(p)
29489e7c 992
bd81e77b
NC
993#define new_XPVNV() my_safemalloc(sizeof(XPVNV))
994#define del_XPVNV(p) my_safefree(p)
29489e7c 995
bd81e77b
NC
996#define new_XPVAV() my_safemalloc(sizeof(XPVAV))
997#define del_XPVAV(p) my_safefree(p)
29489e7c 998
bd81e77b
NC
999#define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1000#define del_XPVHV(p) my_safefree(p)
29489e7c 1001
bd81e77b
NC
1002#define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1003#define del_XPVMG(p) my_safefree(p)
29489e7c 1004
bd81e77b
NC
1005#define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1006#define del_XPVGV(p) my_safefree(p)
29489e7c 1007
bd81e77b 1008#else /* !PURIFY */
29489e7c 1009
bd81e77b
NC
1010#define new_XNV() new_body_type(SVt_NV)
1011#define del_XNV(p) del_body_type(p, SVt_NV)
29489e7c 1012
bd81e77b
NC
1013#define new_XPVNV() new_body_type(SVt_PVNV)
1014#define del_XPVNV(p) del_body_type(p, SVt_PVNV)
29489e7c 1015
bd81e77b
NC
1016#define new_XPVAV() new_body_allocated(SVt_PVAV)
1017#define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
645c22ef 1018
bd81e77b
NC
1019#define new_XPVHV() new_body_allocated(SVt_PVHV)
1020#define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
645c22ef 1021
bd81e77b
NC
1022#define new_XPVMG() new_body_type(SVt_PVMG)
1023#define del_XPVMG(p) del_body_type(p, SVt_PVMG)
645c22ef 1024
bd81e77b
NC
1025#define new_XPVGV() new_body_type(SVt_PVGV)
1026#define del_XPVGV(p) del_body_type(p, SVt_PVGV)
1d7c1841 1027
bd81e77b 1028#endif /* PURIFY */
93e68bfb 1029
bd81e77b 1030/* no arena for you! */
93e68bfb 1031
bd81e77b 1032#define new_NOARENA(details) \
d2a0f284 1033 my_safemalloc((details)->body_size + (details)->offset)
bd81e77b 1034#define new_NOARENAZ(details) \
d2a0f284
JC
1035 my_safecalloc((details)->body_size + (details)->offset)
1036
10666ae3
NC
1037#ifdef DEBUGGING
1038static bool done_sanity_check;
1039#endif
1040
d2a0f284
JC
1041STATIC void *
1042S_more_bodies (pTHX_ svtype sv_type)
1043{
1044 dVAR;
1045 void ** const root = &PL_body_roots[sv_type];
96a5add6 1046 const struct body_details * const bdp = &bodies_by_type[sv_type];
d2a0f284
JC
1047 const size_t body_size = bdp->body_size;
1048 char *start;
1049 const char *end;
1050
1051 assert(bdp->arena_size);
10666ae3
NC
1052
1053#ifdef DEBUGGING
1054 if (!done_sanity_check) {
ea471437 1055 unsigned int i = SVt_LAST;
10666ae3
NC
1056
1057 done_sanity_check = TRUE;
1058
1059 while (i--)
1060 assert (bodies_by_type[i].type == i);
1061 }
1062#endif
1063
d2a0f284
JC
1064 start = (char*) Perl_get_arena(aTHX_ bdp->arena_size);
1065
1066 end = start + bdp->arena_size - body_size;
1067
d2a0f284
JC
1068 /* computed count doesnt reflect the 1st slot reservation */
1069 DEBUG_m(PerlIO_printf(Perl_debug_log,
1070 "arena %p end %p arena-size %d type %d size %d ct %d\n",
1071 start, end, bdp->arena_size, sv_type, body_size,
1072 bdp->arena_size / body_size));
d2a0f284
JC
1073
1074 *root = (void *)start;
1075
1076 while (start < end) {
1077 char * const next = start + body_size;
1078 *(void**) start = (void *)next;
1079 start = next;
1080 }
1081 *(void **)start = 0;
1082
1083 return *root;
1084}
1085
1086/* grab a new thing from the free list, allocating more if necessary.
1087 The inline version is used for speed in hot routines, and the
1088 function using it serves the rest (unless PURIFY).
1089*/
1090#define new_body_inline(xpv, sv_type) \
1091 STMT_START { \
1092 void ** const r3wt = &PL_body_roots[sv_type]; \
1093 LOCK_SV_MUTEX; \
1094 xpv = *((void **)(r3wt)) \
1095 ? *((void **)(r3wt)) : S_more_bodies(aTHX_ sv_type); \
1096 *(r3wt) = *(void**)(xpv); \
1097 UNLOCK_SV_MUTEX; \
1098 } STMT_END
1099
1100#ifndef PURIFY
1101
1102STATIC void *
1103S_new_body(pTHX_ svtype sv_type)
1104{
1105 dVAR;
1106 void *xpv;
1107 new_body_inline(xpv, sv_type);
1108 return xpv;
1109}
1110
1111#endif
93e68bfb 1112
bd81e77b
NC
1113/*
1114=for apidoc sv_upgrade
93e68bfb 1115
bd81e77b
NC
1116Upgrade an SV to a more complex form. Generally adds a new body type to the
1117SV, then copies across as much information as possible from the old body.
1118You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
93e68bfb 1119
bd81e77b 1120=cut
93e68bfb 1121*/
93e68bfb 1122
bd81e77b
NC
1123void
1124Perl_sv_upgrade(pTHX_ register SV *sv, U32 new_type)
cac9b346 1125{
97aff369 1126 dVAR;
bd81e77b
NC
1127 void* old_body;
1128 void* new_body;
1129 const U32 old_type = SvTYPE(sv);
d2a0f284 1130 const struct body_details *new_type_details;
bd81e77b
NC
1131 const struct body_details *const old_type_details
1132 = bodies_by_type + old_type;
cac9b346 1133
bd81e77b
NC
1134 if (new_type != SVt_PV && SvIsCOW(sv)) {
1135 sv_force_normal_flags(sv, 0);
1136 }
cac9b346 1137
bd81e77b
NC
1138 if (old_type == new_type)
1139 return;
cac9b346 1140
bd81e77b
NC
1141 if (old_type > new_type)
1142 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1143 (int)old_type, (int)new_type);
cac9b346 1144
cac9b346 1145
bd81e77b 1146 old_body = SvANY(sv);
de042e1d 1147
bd81e77b
NC
1148 /* Copying structures onto other structures that have been neatly zeroed
1149 has a subtle gotcha. Consider XPVMG
cac9b346 1150
bd81e77b
NC
1151 +------+------+------+------+------+-------+-------+
1152 | NV | CUR | LEN | IV | MAGIC | STASH |
1153 +------+------+------+------+------+-------+-------+
1154 0 4 8 12 16 20 24 28
645c22ef 1155
bd81e77b
NC
1156 where NVs are aligned to 8 bytes, so that sizeof that structure is
1157 actually 32 bytes long, with 4 bytes of padding at the end:
08742458 1158
bd81e77b
NC
1159 +------+------+------+------+------+-------+-------+------+
1160 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1161 +------+------+------+------+------+-------+-------+------+
1162 0 4 8 12 16 20 24 28 32
08742458 1163
bd81e77b 1164 so what happens if you allocate memory for this structure:
30f9da9e 1165
bd81e77b
NC
1166 +------+------+------+------+------+-------+-------+------+------+...
1167 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1168 +------+------+------+------+------+-------+-------+------+------+...
1169 0 4 8 12 16 20 24 28 32 36
bfc44f79 1170
bd81e77b
NC
1171 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1172 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1173 started out as zero once, but it's quite possible that it isn't. So now,
1174 rather than a nicely zeroed GP, you have it pointing somewhere random.
1175 Bugs ensue.
bfc44f79 1176
bd81e77b
NC
1177 (In fact, GP ends up pointing at a previous GP structure, because the
1178 principle cause of the padding in XPVMG getting garbage is a copy of
1179 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob)
30f9da9e 1180
bd81e77b
NC
1181 So we are careful and work out the size of used parts of all the
1182 structures. */
bfc44f79 1183
bd81e77b
NC
1184 switch (old_type) {
1185 case SVt_NULL:
1186 break;
1187 case SVt_IV:
1188 if (new_type < SVt_PVIV) {
1189 new_type = (new_type == SVt_NV)
1190 ? SVt_PVNV : SVt_PVIV;
bd81e77b
NC
1191 }
1192 break;
1193 case SVt_NV:
1194 if (new_type < SVt_PVNV) {
1195 new_type = SVt_PVNV;
bd81e77b
NC
1196 }
1197 break;
1198 case SVt_RV:
1199 break;
1200 case SVt_PV:
1201 assert(new_type > SVt_PV);
1202 assert(SVt_IV < SVt_PV);
1203 assert(SVt_NV < SVt_PV);
1204 break;
1205 case SVt_PVIV:
1206 break;
1207 case SVt_PVNV:
1208 break;
1209 case SVt_PVMG:
1210 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1211 there's no way that it can be safely upgraded, because perl.c
1212 expects to Safefree(SvANY(PL_mess_sv)) */
1213 assert(sv != PL_mess_sv);
1214 /* This flag bit is used to mean other things in other scalar types.
1215 Given that it only has meaning inside the pad, it shouldn't be set
1216 on anything that can get upgraded. */
00b1698f 1217 assert(!SvPAD_TYPED(sv));
bd81e77b
NC
1218 break;
1219 default:
1220 if (old_type_details->cant_upgrade)
c81225bc
NC
1221 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1222 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
bd81e77b 1223 }
2fa1109b 1224 new_type_details = bodies_by_type + new_type;
645c22ef 1225
bd81e77b
NC
1226 SvFLAGS(sv) &= ~SVTYPEMASK;
1227 SvFLAGS(sv) |= new_type;
932e9ff9 1228
ab4416c0
NC
1229 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1230 the return statements above will have triggered. */
1231 assert (new_type != SVt_NULL);
bd81e77b 1232 switch (new_type) {
bd81e77b
NC
1233 case SVt_IV:
1234 assert(old_type == SVt_NULL);
1235 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1236 SvIV_set(sv, 0);
1237 return;
1238 case SVt_NV:
1239 assert(old_type == SVt_NULL);
1240 SvANY(sv) = new_XNV();
1241 SvNV_set(sv, 0);
1242 return;
1243 case SVt_RV:
1244 assert(old_type == SVt_NULL);
1245 SvANY(sv) = &sv->sv_u.svu_rv;
1246 SvRV_set(sv, 0);
1247 return;
1248 case SVt_PVHV:
bd81e77b 1249 case SVt_PVAV:
d2a0f284 1250 assert(new_type_details->body_size);
c1ae03ae
NC
1251
1252#ifndef PURIFY
1253 assert(new_type_details->arena);
d2a0f284 1254 assert(new_type_details->arena_size);
c1ae03ae 1255 /* This points to the start of the allocated area. */
d2a0f284
JC
1256 new_body_inline(new_body, new_type);
1257 Zero(new_body, new_type_details->body_size, char);
c1ae03ae
NC
1258 new_body = ((char *)new_body) - new_type_details->offset;
1259#else
1260 /* We always allocated the full length item with PURIFY. To do this
1261 we fake things so that arena is false for all 16 types.. */
1262 new_body = new_NOARENAZ(new_type_details);
1263#endif
1264 SvANY(sv) = new_body;
1265 if (new_type == SVt_PVAV) {
1266 AvMAX(sv) = -1;
1267 AvFILLp(sv) = -1;
1268 AvREAL_only(sv);
1269 }
aeb18a1e 1270
bd81e77b
NC
1271 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1272 The target created by newSVrv also is, and it can have magic.
1273 However, it never has SvPVX set.
1274 */
1275 if (old_type >= SVt_RV) {
1276 assert(SvPVX_const(sv) == 0);
1277 }
aeb18a1e 1278
bd81e77b
NC
1279 /* Could put this in the else clause below, as PVMG must have SvPVX
1280 0 already (the assertion above) */
6136c704 1281 SvPV_set(sv, NULL);
93e68bfb 1282
bd81e77b 1283 if (old_type >= SVt_PVMG) {
e736a858 1284 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
bd81e77b 1285 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
bd81e77b
NC
1286 }
1287 break;
93e68bfb 1288
93e68bfb 1289
bd81e77b
NC
1290 case SVt_PVIV:
1291 /* XXX Is this still needed? Was it ever needed? Surely as there is
1292 no route from NV to PVIV, NOK can never be true */
1293 assert(!SvNOKp(sv));
1294 assert(!SvNOK(sv));
1295 case SVt_PVIO:
1296 case SVt_PVFM:
1297 case SVt_PVBM:
1298 case SVt_PVGV:
1299 case SVt_PVCV:
1300 case SVt_PVLV:
1301 case SVt_PVMG:
1302 case SVt_PVNV:
1303 case SVt_PV:
93e68bfb 1304
d2a0f284 1305 assert(new_type_details->body_size);
bd81e77b
NC
1306 /* We always allocated the full length item with PURIFY. To do this
1307 we fake things so that arena is false for all 16 types.. */
1308 if(new_type_details->arena) {
1309 /* This points to the start of the allocated area. */
d2a0f284
JC
1310 new_body_inline(new_body, new_type);
1311 Zero(new_body, new_type_details->body_size, char);
bd81e77b
NC
1312 new_body = ((char *)new_body) - new_type_details->offset;
1313 } else {
1314 new_body = new_NOARENAZ(new_type_details);
1315 }
1316 SvANY(sv) = new_body;
5e2fc214 1317
bd81e77b 1318 if (old_type_details->copy) {
f9ba3d20
NC
1319 /* There is now the potential for an upgrade from something without
1320 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1321 int offset = old_type_details->offset;
1322 int length = old_type_details->copy;
1323
1324 if (new_type_details->offset > old_type_details->offset) {
1325 int difference
1326 = new_type_details->offset - old_type_details->offset;
1327 offset += difference;
1328 length -= difference;
1329 }
1330 assert (length >= 0);
1331
1332 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1333 char);
bd81e77b
NC
1334 }
1335
1336#ifndef NV_ZERO_IS_ALLBITS_ZERO
f2524eef 1337 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
e5ce394c
NC
1338 * correct 0.0 for us. Otherwise, if the old body didn't have an
1339 * NV slot, but the new one does, then we need to initialise the
1340 * freshly created NV slot with whatever the correct bit pattern is
1341 * for 0.0 */
1342 if (old_type_details->zero_nv && !new_type_details->zero_nv)
bd81e77b 1343 SvNV_set(sv, 0);
82048762 1344#endif
5e2fc214 1345
bd81e77b 1346 if (new_type == SVt_PVIO)
f2524eef 1347 IoPAGE_LEN(sv) = 60;
bd81e77b 1348 if (old_type < SVt_RV)
6136c704 1349 SvPV_set(sv, NULL);
bd81e77b
NC
1350 break;
1351 default:
afd78fd5
JH
1352 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1353 (unsigned long)new_type);
bd81e77b 1354 }
73171d91 1355
d2a0f284
JC
1356 if (old_type_details->arena) {
1357 /* If there was an old body, then we need to free it.
1358 Note that there is an assumption that all bodies of types that
1359 can be upgraded came from arenas. Only the more complex non-
1360 upgradable types are allowed to be directly malloc()ed. */
bd81e77b
NC
1361#ifdef PURIFY
1362 my_safefree(old_body);
1363#else
1364 del_body((void*)((char*)old_body + old_type_details->offset),
1365 &PL_body_roots[old_type]);
1366#endif
1367 }
1368}
73171d91 1369
bd81e77b
NC
1370/*
1371=for apidoc sv_backoff
73171d91 1372
bd81e77b
NC
1373Remove any string offset. You should normally use the C<SvOOK_off> macro
1374wrapper instead.
73171d91 1375
bd81e77b 1376=cut
73171d91
NC
1377*/
1378
bd81e77b
NC
1379int
1380Perl_sv_backoff(pTHX_ register SV *sv)
1381{
96a5add6 1382 PERL_UNUSED_CONTEXT;
bd81e77b
NC
1383 assert(SvOOK(sv));
1384 assert(SvTYPE(sv) != SVt_PVHV);
1385 assert(SvTYPE(sv) != SVt_PVAV);
1386 if (SvIVX(sv)) {
1387 const char * const s = SvPVX_const(sv);
1388 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1389 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1390 SvIV_set(sv, 0);
1391 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1392 }
1393 SvFLAGS(sv) &= ~SVf_OOK;
1394 return 0;
1395}
73171d91 1396
bd81e77b
NC
1397/*
1398=for apidoc sv_grow
73171d91 1399
bd81e77b
NC
1400Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1401upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1402Use the C<SvGROW> wrapper instead.
93e68bfb 1403
bd81e77b
NC
1404=cut
1405*/
93e68bfb 1406
bd81e77b
NC
1407char *
1408Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1409{
1410 register char *s;
93e68bfb 1411
5db06880
NC
1412 if (PL_madskills && newlen >= 0x100000) {
1413 PerlIO_printf(Perl_debug_log,
1414 "Allocation too large: %"UVxf"\n", (UV)newlen);
1415 }
bd81e77b
NC
1416#ifdef HAS_64K_LIMIT
1417 if (newlen >= 0x10000) {
1418 PerlIO_printf(Perl_debug_log,
1419 "Allocation too large: %"UVxf"\n", (UV)newlen);
1420 my_exit(1);
1421 }
1422#endif /* HAS_64K_LIMIT */
1423 if (SvROK(sv))
1424 sv_unref(sv);
1425 if (SvTYPE(sv) < SVt_PV) {
1426 sv_upgrade(sv, SVt_PV);
1427 s = SvPVX_mutable(sv);
1428 }
1429 else if (SvOOK(sv)) { /* pv is offset? */
1430 sv_backoff(sv);
1431 s = SvPVX_mutable(sv);
1432 if (newlen > SvLEN(sv))
1433 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1434#ifdef HAS_64K_LIMIT
1435 if (newlen >= 0x10000)
1436 newlen = 0xFFFF;
1437#endif
1438 }
1439 else
1440 s = SvPVX_mutable(sv);
aeb18a1e 1441
bd81e77b
NC
1442 if (newlen > SvLEN(sv)) { /* need more room? */
1443 newlen = PERL_STRLEN_ROUNDUP(newlen);
1444 if (SvLEN(sv) && s) {
1445#ifdef MYMALLOC
1446 const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1447 if (newlen <= l) {
1448 SvLEN_set(sv, l);
1449 return s;
1450 } else
1451#endif
1452 s = saferealloc(s, newlen);
1453 }
1454 else {
1455 s = safemalloc(newlen);
1456 if (SvPVX_const(sv) && SvCUR(sv)) {
1457 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1458 }
1459 }
1460 SvPV_set(sv, s);
1461 SvLEN_set(sv, newlen);
1462 }
1463 return s;
1464}
aeb18a1e 1465
bd81e77b
NC
1466/*
1467=for apidoc sv_setiv
932e9ff9 1468
bd81e77b
NC
1469Copies an integer into the given SV, upgrading first if necessary.
1470Does not handle 'set' magic. See also C<sv_setiv_mg>.
463ee0b2 1471
bd81e77b
NC
1472=cut
1473*/
463ee0b2 1474
bd81e77b
NC
1475void
1476Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1477{
97aff369 1478 dVAR;
bd81e77b
NC
1479 SV_CHECK_THINKFIRST_COW_DROP(sv);
1480 switch (SvTYPE(sv)) {
1481 case SVt_NULL:
1482 sv_upgrade(sv, SVt_IV);
1483 break;
1484 case SVt_NV:
1485 sv_upgrade(sv, SVt_PVNV);
1486 break;
1487 case SVt_RV:
1488 case SVt_PV:
1489 sv_upgrade(sv, SVt_PVIV);
1490 break;
463ee0b2 1491
bd81e77b
NC
1492 case SVt_PVGV:
1493 case SVt_PVAV:
1494 case SVt_PVHV:
1495 case SVt_PVCV:
1496 case SVt_PVFM:
1497 case SVt_PVIO:
1498 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1499 OP_DESC(PL_op));
1500 }
1501 (void)SvIOK_only(sv); /* validate number */
1502 SvIV_set(sv, i);
1503 SvTAINT(sv);
1504}
932e9ff9 1505
bd81e77b
NC
1506/*
1507=for apidoc sv_setiv_mg
d33b2eba 1508
bd81e77b 1509Like C<sv_setiv>, but also handles 'set' magic.
1c846c1f 1510
bd81e77b
NC
1511=cut
1512*/
d33b2eba 1513
bd81e77b
NC
1514void
1515Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1516{
1517 sv_setiv(sv,i);
1518 SvSETMAGIC(sv);
1519}
727879eb 1520
bd81e77b
NC
1521/*
1522=for apidoc sv_setuv
d33b2eba 1523
bd81e77b
NC
1524Copies an unsigned integer into the given SV, upgrading first if necessary.
1525Does not handle 'set' magic. See also C<sv_setuv_mg>.
9b94d1dd 1526
bd81e77b
NC
1527=cut
1528*/
d33b2eba 1529
bd81e77b
NC
1530void
1531Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1532{
1533 /* With these two if statements:
1534 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
d33b2eba 1535
bd81e77b
NC
1536 without
1537 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1c846c1f 1538
bd81e77b
NC
1539 If you wish to remove them, please benchmark to see what the effect is
1540 */
1541 if (u <= (UV)IV_MAX) {
1542 sv_setiv(sv, (IV)u);
1543 return;
1544 }
1545 sv_setiv(sv, 0);
1546 SvIsUV_on(sv);
1547 SvUV_set(sv, u);
1548}
d33b2eba 1549
bd81e77b
NC
1550/*
1551=for apidoc sv_setuv_mg
727879eb 1552
bd81e77b 1553Like C<sv_setuv>, but also handles 'set' magic.
9b94d1dd 1554
bd81e77b
NC
1555=cut
1556*/
5e2fc214 1557
bd81e77b
NC
1558void
1559Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1560{
1561 sv_setiv(sv, 0);
1562 SvIsUV_on(sv);
1563 sv_setuv(sv,u);
1564 SvSETMAGIC(sv);
1565}
5e2fc214 1566
954c1994 1567/*
bd81e77b 1568=for apidoc sv_setnv
954c1994 1569
bd81e77b
NC
1570Copies a double into the given SV, upgrading first if necessary.
1571Does not handle 'set' magic. See also C<sv_setnv_mg>.
954c1994
GS
1572
1573=cut
1574*/
1575
63f97190 1576void
bd81e77b 1577Perl_sv_setnv(pTHX_ register SV *sv, NV num)
79072805 1578{
97aff369 1579 dVAR;
bd81e77b
NC
1580 SV_CHECK_THINKFIRST_COW_DROP(sv);
1581 switch (SvTYPE(sv)) {
79072805 1582 case SVt_NULL:
79072805 1583 case SVt_IV:
bd81e77b 1584 sv_upgrade(sv, SVt_NV);
79072805 1585 break;
ed6116ce 1586 case SVt_RV:
79072805 1587 case SVt_PV:
79072805 1588 case SVt_PVIV:
bd81e77b 1589 sv_upgrade(sv, SVt_PVNV);
79072805 1590 break;
bd4b1eb5 1591
bd4b1eb5 1592 case SVt_PVGV:
bd81e77b
NC
1593 case SVt_PVAV:
1594 case SVt_PVHV:
79072805 1595 case SVt_PVCV:
bd81e77b
NC
1596 case SVt_PVFM:
1597 case SVt_PVIO:
1598 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1599 OP_NAME(PL_op));
2068cd4d 1600 }
bd81e77b
NC
1601 SvNV_set(sv, num);
1602 (void)SvNOK_only(sv); /* validate number */
1603 SvTAINT(sv);
79072805
LW
1604}
1605
645c22ef 1606/*
bd81e77b 1607=for apidoc sv_setnv_mg
645c22ef 1608
bd81e77b 1609Like C<sv_setnv>, but also handles 'set' magic.
645c22ef
DM
1610
1611=cut
1612*/
1613
bd81e77b
NC
1614void
1615Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
79072805 1616{
bd81e77b
NC
1617 sv_setnv(sv,num);
1618 SvSETMAGIC(sv);
79072805
LW
1619}
1620
bd81e77b
NC
1621/* Print an "isn't numeric" warning, using a cleaned-up,
1622 * printable version of the offending string
1623 */
954c1994 1624
bd81e77b
NC
1625STATIC void
1626S_not_a_number(pTHX_ SV *sv)
79072805 1627{
97aff369 1628 dVAR;
bd81e77b
NC
1629 SV *dsv;
1630 char tmpbuf[64];
1631 const char *pv;
94463019
JH
1632
1633 if (DO_UTF8(sv)) {
396482e1 1634 dsv = sv_2mortal(newSVpvs(""));
94463019
JH
1635 pv = sv_uni_display(dsv, sv, 10, 0);
1636 } else {
1637 char *d = tmpbuf;
551405c4 1638 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
94463019
JH
1639 /* each *s can expand to 4 chars + "...\0",
1640 i.e. need room for 8 chars */
ecdeb87c 1641
00b6aa41
AL
1642 const char *s = SvPVX_const(sv);
1643 const char * const end = s + SvCUR(sv);
1644 for ( ; s < end && d < limit; s++ ) {
94463019
JH
1645 int ch = *s & 0xFF;
1646 if (ch & 128 && !isPRINT_LC(ch)) {
1647 *d++ = 'M';
1648 *d++ = '-';
1649 ch &= 127;
1650 }
1651 if (ch == '\n') {
1652 *d++ = '\\';
1653 *d++ = 'n';
1654 }
1655 else if (ch == '\r') {
1656 *d++ = '\\';
1657 *d++ = 'r';
1658 }
1659 else if (ch == '\f') {
1660 *d++ = '\\';
1661 *d++ = 'f';
1662 }
1663 else if (ch == '\\') {
1664 *d++ = '\\';
1665 *d++ = '\\';
1666 }
1667 else if (ch == '\0') {
1668 *d++ = '\\';
1669 *d++ = '0';
1670 }
1671 else if (isPRINT_LC(ch))
1672 *d++ = ch;
1673 else {
1674 *d++ = '^';
1675 *d++ = toCTRL(ch);
1676 }
1677 }
1678 if (s < end) {
1679 *d++ = '.';
1680 *d++ = '.';
1681 *d++ = '.';
1682 }
1683 *d = '\0';
1684 pv = tmpbuf;
a0d0e21e 1685 }
a0d0e21e 1686
533c011a 1687 if (PL_op)
9014280d 1688 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019
JH
1689 "Argument \"%s\" isn't numeric in %s", pv,
1690 OP_DESC(PL_op));
a0d0e21e 1691 else
9014280d 1692 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019 1693 "Argument \"%s\" isn't numeric", pv);
a0d0e21e
LW
1694}
1695
c2988b20
NC
1696/*
1697=for apidoc looks_like_number
1698
645c22ef
DM
1699Test if the content of an SV looks like a number (or is a number).
1700C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1701non-numeric warning), even if your atof() doesn't grok them.
c2988b20
NC
1702
1703=cut
1704*/
1705
1706I32
1707Perl_looks_like_number(pTHX_ SV *sv)
1708{
a3b680e6 1709 register const char *sbegin;
c2988b20
NC
1710 STRLEN len;
1711
1712 if (SvPOK(sv)) {
3f7c398e 1713 sbegin = SvPVX_const(sv);
c2988b20
NC
1714 len = SvCUR(sv);
1715 }
1716 else if (SvPOKp(sv))
83003860 1717 sbegin = SvPV_const(sv, len);
c2988b20 1718 else
e0ab1c0e 1719 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
c2988b20
NC
1720 return grok_number(sbegin, len, NULL);
1721}
25da4f38 1722
180488f8
NC
1723STATIC char *
1724S_glob_2inpuv(pTHX_ GV *gv, STRLEN *len, bool want_number)
1725{
1726 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1727 SV *const buffer = sv_newmortal();
1728
1729 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1730 is on. */
1731 SvFAKE_off(gv);
1732 gv_efullname3(buffer, gv, "*");
1733 SvFLAGS(gv) |= wasfake;
1734
1735 if (want_number) {
1736 /* We know that all GVs stringify to something that is not-a-number,
1737 so no need to test that. */
1738 if (ckWARN(WARN_NUMERIC))
1739 not_a_number(buffer);
1740 /* We just want something true to return, so that S_sv_2iuv_common
1741 can tail call us and return true. */
1742 return (char *) 1;
1743 } else {
1744 return SvPV(buffer, *len);
1745 }
1746}
1747
25da4f38
IZ
1748/* Actually, ISO C leaves conversion of UV to IV undefined, but
1749 until proven guilty, assume that things are not that bad... */
1750
645c22ef
DM
1751/*
1752 NV_PRESERVES_UV:
1753
1754 As 64 bit platforms often have an NV that doesn't preserve all bits of
28e5dec8
JH
1755 an IV (an assumption perl has been based on to date) it becomes necessary
1756 to remove the assumption that the NV always carries enough precision to
1757 recreate the IV whenever needed, and that the NV is the canonical form.
1758 Instead, IV/UV and NV need to be given equal rights. So as to not lose
645c22ef 1759 precision as a side effect of conversion (which would lead to insanity
28e5dec8
JH
1760 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1761 1) to distinguish between IV/UV/NV slots that have cached a valid
1762 conversion where precision was lost and IV/UV/NV slots that have a
1763 valid conversion which has lost no precision
645c22ef 1764 2) to ensure that if a numeric conversion to one form is requested that
28e5dec8
JH
1765 would lose precision, the precise conversion (or differently
1766 imprecise conversion) is also performed and cached, to prevent
1767 requests for different numeric formats on the same SV causing
1768 lossy conversion chains. (lossless conversion chains are perfectly
1769 acceptable (still))
1770
1771
1772 flags are used:
1773 SvIOKp is true if the IV slot contains a valid value
1774 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1775 SvNOKp is true if the NV slot contains a valid value
1776 SvNOK is true only if the NV value is accurate
1777
1778 so
645c22ef 1779 while converting from PV to NV, check to see if converting that NV to an
28e5dec8
JH
1780 IV(or UV) would lose accuracy over a direct conversion from PV to
1781 IV(or UV). If it would, cache both conversions, return NV, but mark
1782 SV as IOK NOKp (ie not NOK).
1783
645c22ef 1784 While converting from PV to IV, check to see if converting that IV to an
28e5dec8
JH
1785 NV would lose accuracy over a direct conversion from PV to NV. If it
1786 would, cache both conversions, flag similarly.
1787
1788 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1789 correctly because if IV & NV were set NV *always* overruled.
645c22ef
DM
1790 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1791 changes - now IV and NV together means that the two are interchangeable:
28e5dec8 1792 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
d460ef45 1793
645c22ef
DM
1794 The benefit of this is that operations such as pp_add know that if
1795 SvIOK is true for both left and right operands, then integer addition
1796 can be used instead of floating point (for cases where the result won't
1797 overflow). Before, floating point was always used, which could lead to
28e5dec8
JH
1798 loss of precision compared with integer addition.
1799
1800 * making IV and NV equal status should make maths accurate on 64 bit
1801 platforms
1802 * may speed up maths somewhat if pp_add and friends start to use
645c22ef 1803 integers when possible instead of fp. (Hopefully the overhead in
28e5dec8
JH
1804 looking for SvIOK and checking for overflow will not outweigh the
1805 fp to integer speedup)
1806 * will slow down integer operations (callers of SvIV) on "inaccurate"
1807 values, as the change from SvIOK to SvIOKp will cause a call into
1808 sv_2iv each time rather than a macro access direct to the IV slot
1809 * should speed up number->string conversion on integers as IV is
645c22ef 1810 favoured when IV and NV are equally accurate
28e5dec8
JH
1811
1812 ####################################################################
645c22ef
DM
1813 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1814 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1815 On the other hand, SvUOK is true iff UV.
28e5dec8
JH
1816 ####################################################################
1817
645c22ef 1818 Your mileage will vary depending your CPU's relative fp to integer
28e5dec8
JH
1819 performance ratio.
1820*/
1821
1822#ifndef NV_PRESERVES_UV
645c22ef
DM
1823# define IS_NUMBER_UNDERFLOW_IV 1
1824# define IS_NUMBER_UNDERFLOW_UV 2
1825# define IS_NUMBER_IV_AND_UV 2
1826# define IS_NUMBER_OVERFLOW_IV 4
1827# define IS_NUMBER_OVERFLOW_UV 5
1828
1829/* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
28e5dec8
JH
1830
1831/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1832STATIC int
645c22ef 1833S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
28e5dec8 1834{
97aff369 1835 dVAR;
3f7c398e 1836 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
1837 if (SvNVX(sv) < (NV)IV_MIN) {
1838 (void)SvIOKp_on(sv);
1839 (void)SvNOK_on(sv);
45977657 1840 SvIV_set(sv, IV_MIN);
28e5dec8
JH
1841 return IS_NUMBER_UNDERFLOW_IV;
1842 }
1843 if (SvNVX(sv) > (NV)UV_MAX) {
1844 (void)SvIOKp_on(sv);
1845 (void)SvNOK_on(sv);
1846 SvIsUV_on(sv);
607fa7f2 1847 SvUV_set(sv, UV_MAX);
28e5dec8
JH
1848 return IS_NUMBER_OVERFLOW_UV;
1849 }
c2988b20
NC
1850 (void)SvIOKp_on(sv);
1851 (void)SvNOK_on(sv);
1852 /* Can't use strtol etc to convert this string. (See truth table in
1853 sv_2iv */
1854 if (SvNVX(sv) <= (UV)IV_MAX) {
45977657 1855 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
1856 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1857 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1858 } else {
1859 /* Integer is imprecise. NOK, IOKp */
1860 }
1861 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1862 }
1863 SvIsUV_on(sv);
607fa7f2 1864 SvUV_set(sv, U_V(SvNVX(sv)));
c2988b20
NC
1865 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1866 if (SvUVX(sv) == UV_MAX) {
1867 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1868 possibly be preserved by NV. Hence, it must be overflow.
1869 NOK, IOKp */
1870 return IS_NUMBER_OVERFLOW_UV;
1871 }
1872 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1873 } else {
1874 /* Integer is imprecise. NOK, IOKp */
28e5dec8 1875 }
c2988b20 1876 return IS_NUMBER_OVERFLOW_IV;
28e5dec8 1877}
645c22ef
DM
1878#endif /* !NV_PRESERVES_UV*/
1879
af359546
NC
1880STATIC bool
1881S_sv_2iuv_common(pTHX_ SV *sv) {
97aff369 1882 dVAR;
af359546 1883 if (SvNOKp(sv)) {
28e5dec8
JH
1884 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1885 * without also getting a cached IV/UV from it at the same time
1886 * (ie PV->NV conversion should detect loss of accuracy and cache
af359546
NC
1887 * IV or UV at same time to avoid this. */
1888 /* IV-over-UV optimisation - choose to cache IV if possible */
25da4f38
IZ
1889
1890 if (SvTYPE(sv) == SVt_NV)
1891 sv_upgrade(sv, SVt_PVNV);
1892
28e5dec8
JH
1893 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1894 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1895 certainly cast into the IV range at IV_MAX, whereas the correct
1896 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1897 cases go to UV */
1898 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
45977657 1899 SvIV_set(sv, I_V(SvNVX(sv)));
28e5dec8
JH
1900 if (SvNVX(sv) == (NV) SvIVX(sv)
1901#ifndef NV_PRESERVES_UV
1902 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1903 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1904 /* Don't flag it as "accurately an integer" if the number
1905 came from a (by definition imprecise) NV operation, and
1906 we're outside the range of NV integer precision */
1907#endif
1908 ) {
1909 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1910 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 1911 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
28e5dec8
JH
1912 PTR2UV(sv),
1913 SvNVX(sv),
1914 SvIVX(sv)));
1915
1916 } else {
1917 /* IV not precise. No need to convert from PV, as NV
1918 conversion would already have cached IV if it detected
1919 that PV->IV would be better than PV->NV->IV
1920 flags already correct - don't set public IOK. */
1921 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 1922 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
28e5dec8
JH
1923 PTR2UV(sv),
1924 SvNVX(sv),
1925 SvIVX(sv)));
1926 }
1927 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1928 but the cast (NV)IV_MIN rounds to a the value less (more
1929 negative) than IV_MIN which happens to be equal to SvNVX ??
1930 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1931 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1932 (NV)UVX == NVX are both true, but the values differ. :-(
1933 Hopefully for 2s complement IV_MIN is something like
1934 0x8000000000000000 which will be exact. NWC */
d460ef45 1935 }
25da4f38 1936 else {
607fa7f2 1937 SvUV_set(sv, U_V(SvNVX(sv)));
28e5dec8
JH
1938 if (
1939 (SvNVX(sv) == (NV) SvUVX(sv))
1940#ifndef NV_PRESERVES_UV
1941 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1942 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1943 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1944 /* Don't flag it as "accurately an integer" if the number
1945 came from a (by definition imprecise) NV operation, and
1946 we're outside the range of NV integer precision */
1947#endif
1948 )
1949 SvIOK_on(sv);
25da4f38 1950 SvIsUV_on(sv);
1c846c1f 1951 DEBUG_c(PerlIO_printf(Perl_debug_log,
57def98f 1952 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
56431972 1953 PTR2UV(sv),
57def98f
JH
1954 SvUVX(sv),
1955 SvUVX(sv)));
25da4f38 1956 }
748a9306
LW
1957 }
1958 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 1959 UV value;
504618e9 1960 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
af359546 1961 /* We want to avoid a possible problem when we cache an IV/ a UV which
25da4f38 1962 may be later translated to an NV, and the resulting NV is not
c2988b20
NC
1963 the same as the direct translation of the initial string
1964 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
1965 be careful to ensure that the value with the .456 is around if the
1966 NV value is requested in the future).
1c846c1f 1967
af359546 1968 This means that if we cache such an IV/a UV, we need to cache the
25da4f38 1969 NV as well. Moreover, we trade speed for space, and do not
28e5dec8 1970 cache the NV if we are sure it's not needed.
25da4f38 1971 */
16b7a9a4 1972
c2988b20
NC
1973 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
1974 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1975 == IS_NUMBER_IN_UV) {
5e045b90 1976 /* It's definitely an integer, only upgrade to PVIV */
28e5dec8
JH
1977 if (SvTYPE(sv) < SVt_PVIV)
1978 sv_upgrade(sv, SVt_PVIV);
f7bbb42a 1979 (void)SvIOK_on(sv);
c2988b20
NC
1980 } else if (SvTYPE(sv) < SVt_PVNV)
1981 sv_upgrade(sv, SVt_PVNV);
28e5dec8 1982
f2524eef 1983 /* If NVs preserve UVs then we only use the UV value if we know that
c2988b20
NC
1984 we aren't going to call atof() below. If NVs don't preserve UVs
1985 then the value returned may have more precision than atof() will
1986 return, even though value isn't perfectly accurate. */
1987 if ((numtype & (IS_NUMBER_IN_UV
1988#ifdef NV_PRESERVES_UV
1989 | IS_NUMBER_NOT_INT
1990#endif
1991 )) == IS_NUMBER_IN_UV) {
1992 /* This won't turn off the public IOK flag if it was set above */
1993 (void)SvIOKp_on(sv);
1994
1995 if (!(numtype & IS_NUMBER_NEG)) {
1996 /* positive */;
1997 if (value <= (UV)IV_MAX) {
45977657 1998 SvIV_set(sv, (IV)value);
c2988b20 1999 } else {
af359546 2000 /* it didn't overflow, and it was positive. */
607fa7f2 2001 SvUV_set(sv, value);
c2988b20
NC
2002 SvIsUV_on(sv);
2003 }
2004 } else {
2005 /* 2s complement assumption */
2006 if (value <= (UV)IV_MIN) {
45977657 2007 SvIV_set(sv, -(IV)value);
c2988b20
NC
2008 } else {
2009 /* Too negative for an IV. This is a double upgrade, but
d1be9408 2010 I'm assuming it will be rare. */
c2988b20
NC
2011 if (SvTYPE(sv) < SVt_PVNV)
2012 sv_upgrade(sv, SVt_PVNV);
2013 SvNOK_on(sv);
2014 SvIOK_off(sv);
2015 SvIOKp_on(sv);
9d6ce603 2016 SvNV_set(sv, -(NV)value);
45977657 2017 SvIV_set(sv, IV_MIN);
c2988b20
NC
2018 }
2019 }
2020 }
2021 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2022 will be in the previous block to set the IV slot, and the next
2023 block to set the NV slot. So no else here. */
2024
2025 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2026 != IS_NUMBER_IN_UV) {
2027 /* It wasn't an (integer that doesn't overflow the UV). */
3f7c398e 2028 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8 2029
c2988b20
NC
2030 if (! numtype && ckWARN(WARN_NUMERIC))
2031 not_a_number(sv);
28e5dec8 2032
65202027 2033#if defined(USE_LONG_DOUBLE)
c2988b20
NC
2034 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2035 PTR2UV(sv), SvNVX(sv)));
65202027 2036#else
1779d84d 2037 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
c2988b20 2038 PTR2UV(sv), SvNVX(sv)));
65202027 2039#endif
28e5dec8 2040
28e5dec8 2041#ifdef NV_PRESERVES_UV
af359546
NC
2042 (void)SvIOKp_on(sv);
2043 (void)SvNOK_on(sv);
2044 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2045 SvIV_set(sv, I_V(SvNVX(sv)));
2046 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2047 SvIOK_on(sv);
2048 } else {
bb263b4e 2049 /*EMPTY*/; /* Integer is imprecise. NOK, IOKp */
af359546
NC
2050 }
2051 /* UV will not work better than IV */
2052 } else {
2053 if (SvNVX(sv) > (NV)UV_MAX) {
2054 SvIsUV_on(sv);
2055 /* Integer is inaccurate. NOK, IOKp, is UV */
2056 SvUV_set(sv, UV_MAX);
af359546
NC
2057 } else {
2058 SvUV_set(sv, U_V(SvNVX(sv)));
2059 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2060 NV preservse UV so can do correct comparison. */
2061 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2062 SvIOK_on(sv);
af359546 2063 } else {
bb263b4e 2064 /*EMPTY*/; /* Integer is imprecise. NOK, IOKp, is UV */
af359546
NC
2065 }
2066 }
4b0c9573 2067 SvIsUV_on(sv);
af359546 2068 }
28e5dec8 2069#else /* NV_PRESERVES_UV */
c2988b20
NC
2070 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2071 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
af359546 2072 /* The IV/UV slot will have been set from value returned by
c2988b20
NC
2073 grok_number above. The NV slot has just been set using
2074 Atof. */
560b0c46 2075 SvNOK_on(sv);
c2988b20
NC
2076 assert (SvIOKp(sv));
2077 } else {
2078 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2079 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2080 /* Small enough to preserve all bits. */
2081 (void)SvIOKp_on(sv);
2082 SvNOK_on(sv);
45977657 2083 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
2084 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2085 SvIOK_on(sv);
2086 /* Assumption: first non-preserved integer is < IV_MAX,
2087 this NV is in the preserved range, therefore: */
2088 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2089 < (UV)IV_MAX)) {
32fdb065 2090 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
2091 }
2092 } else {
2093 /* IN_UV NOT_INT
2094 0 0 already failed to read UV.
2095 0 1 already failed to read UV.
2096 1 0 you won't get here in this case. IV/UV
2097 slot set, public IOK, Atof() unneeded.
2098 1 1 already read UV.
2099 so there's no point in sv_2iuv_non_preserve() attempting
2100 to use atol, strtol, strtoul etc. */
40a17c4c 2101 sv_2iuv_non_preserve (sv, numtype);
c2988b20
NC
2102 }
2103 }
28e5dec8 2104#endif /* NV_PRESERVES_UV */
25da4f38 2105 }
af359546
NC
2106 }
2107 else {
f7877b28 2108 if (isGV_with_GP(sv)) {
b21a80ce 2109 return (bool)PTR2IV(glob_2inpuv((GV *)sv, NULL, TRUE));
180488f8 2110 }
180488f8 2111
af359546
NC
2112 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2113 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2114 report_uninit(sv);
2115 }
25da4f38
IZ
2116 if (SvTYPE(sv) < SVt_IV)
2117 /* Typically the caller expects that sv_any is not NULL now. */
2118 sv_upgrade(sv, SVt_IV);
af359546
NC
2119 /* Return 0 from the caller. */
2120 return TRUE;
2121 }
2122 return FALSE;
2123}
2124
2125/*
2126=for apidoc sv_2iv_flags
2127
2128Return the integer value of an SV, doing any necessary string
2129conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2130Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2131
2132=cut
2133*/
2134
2135IV
2136Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2137{
97aff369 2138 dVAR;
af359546 2139 if (!sv)
a0d0e21e 2140 return 0;
af359546
NC
2141 if (SvGMAGICAL(sv)) {
2142 if (flags & SV_GMAGIC)
2143 mg_get(sv);
2144 if (SvIOKp(sv))
2145 return SvIVX(sv);
2146 if (SvNOKp(sv)) {
2147 return I_V(SvNVX(sv));
2148 }
71c558c3
NC
2149 if (SvPOKp(sv) && SvLEN(sv)) {
2150 UV value;
2151 const int numtype
2152 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2153
2154 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2155 == IS_NUMBER_IN_UV) {
2156 /* It's definitely an integer */
2157 if (numtype & IS_NUMBER_NEG) {
2158 if (value < (UV)IV_MIN)
2159 return -(IV)value;
2160 } else {
2161 if (value < (UV)IV_MAX)
2162 return (IV)value;
2163 }
2164 }
2165 if (!numtype) {
2166 if (ckWARN(WARN_NUMERIC))
2167 not_a_number(sv);
2168 }
2169 return I_V(Atof(SvPVX_const(sv)));
2170 }
1c7ff15e
NC
2171 if (SvROK(sv)) {
2172 goto return_rok;
af359546 2173 }
1c7ff15e
NC
2174 assert(SvTYPE(sv) >= SVt_PVMG);
2175 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2176 } else if (SvTHINKFIRST(sv)) {
af359546 2177 if (SvROK(sv)) {
1c7ff15e 2178 return_rok:
af359546
NC
2179 if (SvAMAGIC(sv)) {
2180 SV * const tmpstr=AMG_CALLun(sv,numer);
2181 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2182 return SvIV(tmpstr);
2183 }
2184 }
2185 return PTR2IV(SvRV(sv));
2186 }
2187 if (SvIsCOW(sv)) {
2188 sv_force_normal_flags(sv, 0);
2189 }
2190 if (SvREADONLY(sv) && !SvOK(sv)) {
2191 if (ckWARN(WARN_UNINITIALIZED))
2192 report_uninit(sv);
2193 return 0;
2194 }
2195 }
2196 if (!SvIOKp(sv)) {
2197 if (S_sv_2iuv_common(aTHX_ sv))
2198 return 0;
79072805 2199 }
1d7c1841
GS
2200 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2201 PTR2UV(sv),SvIVX(sv)));
25da4f38 2202 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
79072805
LW
2203}
2204
645c22ef 2205/*
891f9566 2206=for apidoc sv_2uv_flags
645c22ef
DM
2207
2208Return the unsigned integer value of an SV, doing any necessary string
891f9566
YST
2209conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2210Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
645c22ef
DM
2211
2212=cut
2213*/
2214
ff68c719 2215UV
891f9566 2216Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
ff68c719 2217{
97aff369 2218 dVAR;
ff68c719 2219 if (!sv)
2220 return 0;
2221 if (SvGMAGICAL(sv)) {
891f9566
YST
2222 if (flags & SV_GMAGIC)
2223 mg_get(sv);
ff68c719 2224 if (SvIOKp(sv))
2225 return SvUVX(sv);
2226 if (SvNOKp(sv))
2227 return U_V(SvNVX(sv));
71c558c3
NC
2228 if (SvPOKp(sv) && SvLEN(sv)) {
2229 UV value;
2230 const int numtype
2231 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2232
2233 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2234 == IS_NUMBER_IN_UV) {
2235 /* It's definitely an integer */
2236 if (!(numtype & IS_NUMBER_NEG))
2237 return value;
2238 }
2239 if (!numtype) {
2240 if (ckWARN(WARN_NUMERIC))
2241 not_a_number(sv);
2242 }
2243 return U_V(Atof(SvPVX_const(sv)));
2244 }
1c7ff15e
NC
2245 if (SvROK(sv)) {
2246 goto return_rok;
3fe9a6f1 2247 }
1c7ff15e
NC
2248 assert(SvTYPE(sv) >= SVt_PVMG);
2249 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2250 } else if (SvTHINKFIRST(sv)) {
ff68c719 2251 if (SvROK(sv)) {
1c7ff15e 2252 return_rok:
deb46114
NC
2253 if (SvAMAGIC(sv)) {
2254 SV *const tmpstr = AMG_CALLun(sv,numer);
2255 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2256 return SvUV(tmpstr);
2257 }
2258 }
2259 return PTR2UV(SvRV(sv));
ff68c719 2260 }
765f542d
NC
2261 if (SvIsCOW(sv)) {
2262 sv_force_normal_flags(sv, 0);
8a818333 2263 }
0336b60e 2264 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2265 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2266 report_uninit(sv);
ff68c719 2267 return 0;
2268 }
2269 }
af359546
NC
2270 if (!SvIOKp(sv)) {
2271 if (S_sv_2iuv_common(aTHX_ sv))
2272 return 0;
ff68c719 2273 }
25da4f38 2274
1d7c1841
GS
2275 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2276 PTR2UV(sv),SvUVX(sv)));
25da4f38 2277 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
ff68c719 2278}
2279
645c22ef
DM
2280/*
2281=for apidoc sv_2nv
2282
2283Return the num value of an SV, doing any necessary string or integer
2284conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2285macros.
2286
2287=cut
2288*/
2289
65202027 2290NV
864dbfa3 2291Perl_sv_2nv(pTHX_ register SV *sv)
79072805 2292{
97aff369 2293 dVAR;
79072805
LW
2294 if (!sv)
2295 return 0.0;
8990e307 2296 if (SvGMAGICAL(sv)) {
463ee0b2
LW
2297 mg_get(sv);
2298 if (SvNOKp(sv))
2299 return SvNVX(sv);
0aa395f8 2300 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
041457d9 2301 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
504618e9 2302 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
a0d0e21e 2303 not_a_number(sv);
3f7c398e 2304 return Atof(SvPVX_const(sv));
a0d0e21e 2305 }
25da4f38 2306 if (SvIOKp(sv)) {
1c846c1f 2307 if (SvIsUV(sv))
65202027 2308 return (NV)SvUVX(sv);
25da4f38 2309 else
65202027 2310 return (NV)SvIVX(sv);
47a72cb8
NC
2311 }
2312 if (SvROK(sv)) {
2313 goto return_rok;
2314 }
2315 assert(SvTYPE(sv) >= SVt_PVMG);
2316 /* This falls through to the report_uninit near the end of the
2317 function. */
2318 } else if (SvTHINKFIRST(sv)) {
a0d0e21e 2319 if (SvROK(sv)) {
47a72cb8 2320 return_rok:
deb46114
NC
2321 if (SvAMAGIC(sv)) {
2322 SV *const tmpstr = AMG_CALLun(sv,numer);
2323 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2324 return SvNV(tmpstr);
2325 }
2326 }
2327 return PTR2NV(SvRV(sv));
a0d0e21e 2328 }
765f542d
NC
2329 if (SvIsCOW(sv)) {
2330 sv_force_normal_flags(sv, 0);
8a818333 2331 }
0336b60e 2332 if (SvREADONLY(sv) && !SvOK(sv)) {
599cee73 2333 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2334 report_uninit(sv);
ed6116ce
LW
2335 return 0.0;
2336 }
79072805
LW
2337 }
2338 if (SvTYPE(sv) < SVt_NV) {
7e25a7e9
NC
2339 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2340 sv_upgrade(sv, SVt_NV);
906f284f 2341#ifdef USE_LONG_DOUBLE
097ee67d 2342 DEBUG_c({
f93f4e46 2343 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2344 PerlIO_printf(Perl_debug_log,
2345 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2346 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2347 RESTORE_NUMERIC_LOCAL();
2348 });
65202027 2349#else
572bbb43 2350 DEBUG_c({
f93f4e46 2351 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2352 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
1d7c1841 2353 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2354 RESTORE_NUMERIC_LOCAL();
2355 });
572bbb43 2356#endif
79072805
LW
2357 }
2358 else if (SvTYPE(sv) < SVt_PVNV)
2359 sv_upgrade(sv, SVt_PVNV);
59d8ce62
NC
2360 if (SvNOKp(sv)) {
2361 return SvNVX(sv);
61604483 2362 }
59d8ce62 2363 if (SvIOKp(sv)) {
9d6ce603 2364 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
28e5dec8
JH
2365#ifdef NV_PRESERVES_UV
2366 SvNOK_on(sv);
2367#else
2368 /* Only set the public NV OK flag if this NV preserves the IV */
2369 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2370 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2371 : (SvIVX(sv) == I_V(SvNVX(sv))))
2372 SvNOK_on(sv);
2373 else
2374 SvNOKp_on(sv);
2375#endif
93a17b20 2376 }
748a9306 2377 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2378 UV value;
3f7c398e 2379 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
041457d9 2380 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
a0d0e21e 2381 not_a_number(sv);
28e5dec8 2382#ifdef NV_PRESERVES_UV
c2988b20
NC
2383 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2384 == IS_NUMBER_IN_UV) {
5e045b90 2385 /* It's definitely an integer */
9d6ce603 2386 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
c2988b20 2387 } else
3f7c398e 2388 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2389 SvNOK_on(sv);
2390#else
3f7c398e 2391 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2392 /* Only set the public NV OK flag if this NV preserves the value in
2393 the PV at least as well as an IV/UV would.
2394 Not sure how to do this 100% reliably. */
2395 /* if that shift count is out of range then Configure's test is
2396 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2397 UV_BITS */
2398 if (((UV)1 << NV_PRESERVES_UV_BITS) >
c2988b20 2399 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
28e5dec8 2400 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
c2988b20
NC
2401 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2402 /* Can't use strtol etc to convert this string, so don't try.
2403 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2404 SvNOK_on(sv);
2405 } else {
2406 /* value has been set. It may not be precise. */
2407 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2408 /* 2s complement assumption for (UV)IV_MIN */
2409 SvNOK_on(sv); /* Integer is too negative. */
2410 } else {
2411 SvNOKp_on(sv);
2412 SvIOKp_on(sv);
6fa402ec 2413
c2988b20 2414 if (numtype & IS_NUMBER_NEG) {
45977657 2415 SvIV_set(sv, -(IV)value);
c2988b20 2416 } else if (value <= (UV)IV_MAX) {
45977657 2417 SvIV_set(sv, (IV)value);
c2988b20 2418 } else {
607fa7f2 2419 SvUV_set(sv, value);
c2988b20
NC
2420 SvIsUV_on(sv);
2421 }
2422
2423 if (numtype & IS_NUMBER_NOT_INT) {
2424 /* I believe that even if the original PV had decimals,
2425 they are lost beyond the limit of the FP precision.
2426 However, neither is canonical, so both only get p
2427 flags. NWC, 2000/11/25 */
2428 /* Both already have p flags, so do nothing */
2429 } else {
66a1b24b 2430 const NV nv = SvNVX(sv);
c2988b20
NC
2431 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2432 if (SvIVX(sv) == I_V(nv)) {
2433 SvNOK_on(sv);
c2988b20 2434 } else {
c2988b20
NC
2435 /* It had no "." so it must be integer. */
2436 }
00b6aa41 2437 SvIOK_on(sv);
c2988b20
NC
2438 } else {
2439 /* between IV_MAX and NV(UV_MAX).
2440 Could be slightly > UV_MAX */
6fa402ec 2441
c2988b20
NC
2442 if (numtype & IS_NUMBER_NOT_INT) {
2443 /* UV and NV both imprecise. */
2444 } else {
66a1b24b 2445 const UV nv_as_uv = U_V(nv);
c2988b20
NC
2446
2447 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2448 SvNOK_on(sv);
c2988b20 2449 }
00b6aa41 2450 SvIOK_on(sv);
c2988b20
NC
2451 }
2452 }
2453 }
2454 }
2455 }
28e5dec8 2456#endif /* NV_PRESERVES_UV */
93a17b20 2457 }
79072805 2458 else {
f7877b28 2459 if (isGV_with_GP(sv)) {
180488f8
NC
2460 glob_2inpuv((GV *)sv, NULL, TRUE);
2461 return 0.0;
2462 }
2463
041457d9 2464 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2465 report_uninit(sv);
7e25a7e9
NC
2466 assert (SvTYPE(sv) >= SVt_NV);
2467 /* Typically the caller expects that sv_any is not NULL now. */
2468 /* XXX Ilya implies that this is a bug in callers that assume this
2469 and ideally should be fixed. */
a0d0e21e 2470 return 0.0;
79072805 2471 }
572bbb43 2472#if defined(USE_LONG_DOUBLE)
097ee67d 2473 DEBUG_c({
f93f4e46 2474 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2475 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2476 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2477 RESTORE_NUMERIC_LOCAL();
2478 });
65202027 2479#else
572bbb43 2480 DEBUG_c({
f93f4e46 2481 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2482 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
1d7c1841 2483 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2484 RESTORE_NUMERIC_LOCAL();
2485 });
572bbb43 2486#endif
463ee0b2 2487 return SvNVX(sv);
79072805
LW
2488}
2489
645c22ef
DM
2490/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2491 * UV as a string towards the end of buf, and return pointers to start and
2492 * end of it.
2493 *
2494 * We assume that buf is at least TYPE_CHARS(UV) long.
2495 */
2496
864dbfa3 2497static char *
aec46f14 2498S_uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
25da4f38 2499{
25da4f38 2500 char *ptr = buf + TYPE_CHARS(UV);
823a54a3 2501 char * const ebuf = ptr;
25da4f38 2502 int sign;
25da4f38
IZ
2503
2504 if (is_uv)
2505 sign = 0;
2506 else if (iv >= 0) {
2507 uv = iv;
2508 sign = 0;
2509 } else {
2510 uv = -iv;
2511 sign = 1;
2512 }
2513 do {
eb160463 2514 *--ptr = '0' + (char)(uv % 10);
25da4f38
IZ
2515 } while (uv /= 10);
2516 if (sign)
2517 *--ptr = '-';
2518 *peob = ebuf;
2519 return ptr;
2520}
2521
9af30d34
NC
2522/* stringify_regexp(): private routine for use by sv_2pv_flags(): converts
2523 * a regexp to its stringified form.
2524 */
2525
2526static char *
2527S_stringify_regexp(pTHX_ SV *sv, MAGIC *mg, STRLEN *lp) {
97aff369 2528 dVAR;
00b6aa41 2529 const regexp * const re = (regexp *)mg->mg_obj;
9af30d34
NC
2530
2531 if (!mg->mg_ptr) {
2532 const char *fptr = "msix";
2533 char reflags[6];
2534 char ch;
2535 int left = 0;
2536 int right = 4;
00b6aa41 2537 bool need_newline = 0;
9af30d34
NC
2538 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
2539
2540 while((ch = *fptr++)) {
2541 if(reganch & 1) {
2542 reflags[left++] = ch;
2543 }
2544 else {
2545 reflags[right--] = ch;
2546 }
2547 reganch >>= 1;
2548 }
2549 if(left != 4) {
2550 reflags[left] = '-';
2551 left = 5;
2552 }
2553
2554 mg->mg_len = re->prelen + 4 + left;
2555 /*
2556 * If /x was used, we have to worry about a regex ending with a
2557 * comment later being embedded within another regex. If so, we don't
2558 * want this regex's "commentization" to leak out to the right part of
2559 * the enclosing regex, we must cap it with a newline.
2560 *
2561 * So, if /x was used, we scan backwards from the end of the regex. If
2562 * we find a '#' before we find a newline, we need to add a newline
2563 * ourself. If we find a '\n' first (or if we don't find '#' or '\n'),
2564 * we don't need to add anything. -jfriedl
2565 */
2566 if (PMf_EXTENDED & re->reganch) {
2567 const char *endptr = re->precomp + re->prelen;
2568 while (endptr >= re->precomp) {
2569 const char c = *(endptr--);
2570 if (c == '\n')
2571 break; /* don't need another */
2572 if (c == '#') {
2573 /* we end while in a comment, so we need a newline */
2574 mg->mg_len++; /* save space for it */
2575 need_newline = 1; /* note to add it */
2576 break;
2577 }
2578 }
2579 }
2580
2581 Newx(mg->mg_ptr, mg->mg_len + 1 + left, char);
2582 mg->mg_ptr[0] = '(';
2583 mg->mg_ptr[1] = '?';
2584 Copy(reflags, mg->mg_ptr+2, left, char);
2585 *(mg->mg_ptr+left+2) = ':';
2586 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2587 if (need_newline)
2588 mg->mg_ptr[mg->mg_len - 2] = '\n';
2589 mg->mg_ptr[mg->mg_len - 1] = ')';
2590 mg->mg_ptr[mg->mg_len] = 0;
2591 }
2592 PL_reginterp_cnt += re->program[0].next_off;
2593
2594 if (re->reganch & ROPT_UTF8)
2595 SvUTF8_on(sv);
2596 else
2597 SvUTF8_off(sv);
2598 if (lp)
2599 *lp = mg->mg_len;
2600 return mg->mg_ptr;
2601}
2602
645c22ef
DM
2603/*
2604=for apidoc sv_2pv_flags
2605
ff276b08 2606Returns a pointer to the string value of an SV, and sets *lp to its length.
645c22ef
DM
2607If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2608if necessary.
2609Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2610usually end up here too.
2611
2612=cut
2613*/
2614
8d6d96c1
HS
2615char *
2616Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2617{
97aff369 2618 dVAR;
79072805 2619 register char *s;
79072805 2620
463ee0b2 2621 if (!sv) {
cdb061a3
NC
2622 if (lp)
2623 *lp = 0;
73d840c0 2624 return (char *)"";
463ee0b2 2625 }
8990e307 2626 if (SvGMAGICAL(sv)) {
8d6d96c1
HS
2627 if (flags & SV_GMAGIC)
2628 mg_get(sv);
463ee0b2 2629 if (SvPOKp(sv)) {
cdb061a3
NC
2630 if (lp)
2631 *lp = SvCUR(sv);
10516c54
NC
2632 if (flags & SV_MUTABLE_RETURN)
2633 return SvPVX_mutable(sv);
4d84ee25
NC
2634 if (flags & SV_CONST_RETURN)
2635 return (char *)SvPVX_const(sv);
463ee0b2
LW
2636 return SvPVX(sv);
2637 }
75dfc8ec
NC
2638 if (SvIOKp(sv) || SvNOKp(sv)) {
2639 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
75dfc8ec
NC
2640 STRLEN len;
2641
2642 if (SvIOKp(sv)) {
e8ada2d0
NC
2643 len = SvIsUV(sv) ? my_sprintf(tbuf,"%"UVuf, (UV)SvUVX(sv))
2644 : my_sprintf(tbuf,"%"IVdf, (IV)SvIVX(sv));
75dfc8ec 2645 } else {
e8ada2d0
NC
2646 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2647 len = strlen(tbuf);
75dfc8ec 2648 }
b5b886f0
NC
2649 assert(!SvROK(sv));
2650 {
75dfc8ec
NC
2651 dVAR;
2652
2653#ifdef FIXNEGATIVEZERO
e8ada2d0
NC
2654 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2655 tbuf[0] = '0';
2656 tbuf[1] = 0;
75dfc8ec
NC
2657 len = 1;
2658 }
2659#endif
2660 SvUPGRADE(sv, SVt_PV);
2661 if (lp)
2662 *lp = len;
2663 s = SvGROW_mutable(sv, len + 1);
2664 SvCUR_set(sv, len);
2665 SvPOKp_on(sv);
e8ada2d0 2666 return memcpy(s, tbuf, len + 1);
75dfc8ec 2667 }
463ee0b2 2668 }
1c7ff15e
NC
2669 if (SvROK(sv)) {
2670 goto return_rok;
2671 }
2672 assert(SvTYPE(sv) >= SVt_PVMG);
2673 /* This falls through to the report_uninit near the end of the
2674 function. */
2675 } else if (SvTHINKFIRST(sv)) {
ed6116ce 2676 if (SvROK(sv)) {
1c7ff15e 2677 return_rok:
deb46114
NC
2678 if (SvAMAGIC(sv)) {
2679 SV *const tmpstr = AMG_CALLun(sv,string);
2680 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2681 /* Unwrap this: */
2682 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2683 */
2684
2685 char *pv;
2686 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2687 if (flags & SV_CONST_RETURN) {
2688 pv = (char *) SvPVX_const(tmpstr);
2689 } else {
2690 pv = (flags & SV_MUTABLE_RETURN)
2691 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2692 }
2693 if (lp)
2694 *lp = SvCUR(tmpstr);
50adf7d2 2695 } else {
deb46114 2696 pv = sv_2pv_flags(tmpstr, lp, flags);
50adf7d2 2697 }
deb46114
NC
2698 if (SvUTF8(tmpstr))
2699 SvUTF8_on(sv);
2700 else
2701 SvUTF8_off(sv);
2702 return pv;
50adf7d2 2703 }
deb46114
NC
2704 }
2705 {
75dfc8ec 2706 SV *tsv;
f9277f47 2707 MAGIC *mg;
d8eae41e
NC
2708 const SV *const referent = (SV*)SvRV(sv);
2709
2710 if (!referent) {
396482e1 2711 tsv = sv_2mortal(newSVpvs("NULLREF"));
042dae7a
NC
2712 } else if (SvTYPE(referent) == SVt_PVMG
2713 && ((SvFLAGS(referent) &
2714 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2715 == (SVs_OBJECT|SVs_SMG))
2716 && (mg = mg_find(referent, PERL_MAGIC_qr))) {
c445ea15 2717 return stringify_regexp(sv, mg, lp);
d8eae41e
NC
2718 } else {
2719 const char *const typestr = sv_reftype(referent, 0);
2720
2721 tsv = sv_newmortal();
2722 if (SvOBJECT(referent)) {
2723 const char *const name = HvNAME_get(SvSTASH(referent));
2724 Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
2725 name ? name : "__ANON__" , typestr,
2726 PTR2UV(referent));
2727 }
2728 else
2729 Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr,
2730 PTR2UV(referent));
c080367d 2731 }
042dae7a
NC
2732 if (lp)
2733 *lp = SvCUR(tsv);
2734 return SvPVX(tsv);
463ee0b2 2735 }
79072805 2736 }
0336b60e 2737 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2738 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2739 report_uninit(sv);
cdb061a3
NC
2740 if (lp)
2741 *lp = 0;
73d840c0 2742 return (char *)"";
79072805 2743 }
79072805 2744 }
28e5dec8
JH
2745 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2746 /* I'm assuming that if both IV and NV are equally valid then
2747 converting the IV is going to be more efficient */
e1ec3a88
AL
2748 const U32 isIOK = SvIOK(sv);
2749 const U32 isUIOK = SvIsUV(sv);
28e5dec8
JH
2750 char buf[TYPE_CHARS(UV)];
2751 char *ebuf, *ptr;
2752
2753 if (SvTYPE(sv) < SVt_PVIV)
2754 sv_upgrade(sv, SVt_PVIV);
4ea1d550 2755 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
5902b6a9
NC
2756 /* inlined from sv_setpvn */
2757 SvGROW_mutable(sv, (STRLEN)(ebuf - ptr + 1));
4d84ee25 2758 Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
28e5dec8
JH
2759 SvCUR_set(sv, ebuf - ptr);
2760 s = SvEND(sv);
2761 *s = '\0';
2762 if (isIOK)
2763 SvIOK_on(sv);
2764 else
2765 SvIOKp_on(sv);
2766 if (isUIOK)
2767 SvIsUV_on(sv);
2768 }
2769 else if (SvNOKp(sv)) {
c81271c3 2770 const int olderrno = errno;
79072805
LW
2771 if (SvTYPE(sv) < SVt_PVNV)
2772 sv_upgrade(sv, SVt_PVNV);
1c846c1f 2773 /* The +20 is pure guesswork. Configure test needed. --jhi */
5902b6a9 2774 s = SvGROW_mutable(sv, NV_DIG + 20);
c81271c3 2775 /* some Xenix systems wipe out errno here */
79072805 2776#ifdef apollo
463ee0b2 2777 if (SvNVX(sv) == 0.0)
79072805
LW
2778 (void)strcpy(s,"0");
2779 else
2780#endif /*apollo*/
bbce6d69 2781 {
2d4389e4 2782 Gconvert(SvNVX(sv), NV_DIG, 0, s);
bbce6d69 2783 }
79072805 2784 errno = olderrno;
a0d0e21e
LW
2785#ifdef FIXNEGATIVEZERO
2786 if (*s == '-' && s[1] == '0' && !s[2])
2787 strcpy(s,"0");
2788#endif
79072805
LW
2789 while (*s) s++;
2790#ifdef hcx
2791 if (s[-1] == '.')
46fc3d4c 2792 *--s = '\0';
79072805
LW
2793#endif
2794 }
79072805 2795 else {
f7877b28 2796 if (isGV_with_GP(sv)) {
180488f8
NC
2797 return glob_2inpuv((GV *)sv, lp, FALSE);
2798 }
2799
041457d9 2800 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2801 report_uninit(sv);
cdb061a3 2802 if (lp)
00b6aa41 2803 *lp = 0;
25da4f38
IZ
2804 if (SvTYPE(sv) < SVt_PV)
2805 /* Typically the caller expects that sv_any is not NULL now. */
2806 sv_upgrade(sv, SVt_PV);
73d840c0 2807 return (char *)"";
79072805 2808 }
cdb061a3 2809 {
823a54a3 2810 const STRLEN len = s - SvPVX_const(sv);
cdb061a3
NC
2811 if (lp)
2812 *lp = len;
2813 SvCUR_set(sv, len);
2814 }
79072805 2815 SvPOK_on(sv);
1d7c1841 2816 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 2817 PTR2UV(sv),SvPVX_const(sv)));
4d84ee25
NC
2818 if (flags & SV_CONST_RETURN)
2819 return (char *)SvPVX_const(sv);
10516c54
NC
2820 if (flags & SV_MUTABLE_RETURN)
2821 return SvPVX_mutable(sv);
463ee0b2
LW
2822 return SvPVX(sv);
2823}
2824
645c22ef 2825/*
6050d10e
JP
2826=for apidoc sv_copypv
2827
2828Copies a stringified representation of the source SV into the
2829destination SV. Automatically performs any necessary mg_get and
54f0641b 2830coercion of numeric values into strings. Guaranteed to preserve
6050d10e 2831UTF-8 flag even from overloaded objects. Similar in nature to
54f0641b
NIS
2832sv_2pv[_flags] but operates directly on an SV instead of just the
2833string. Mostly uses sv_2pv_flags to do its work, except when that
6050d10e
JP
2834would lose the UTF-8'ness of the PV.
2835
2836=cut
2837*/
2838
2839void
2840Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
2841{
446eaa42 2842 STRLEN len;
53c1dcc0 2843 const char * const s = SvPV_const(ssv,len);
cb50f42d 2844 sv_setpvn(dsv,s,len);
446eaa42 2845 if (SvUTF8(ssv))
cb50f42d 2846 SvUTF8_on(dsv);
446eaa42 2847 else
cb50f42d 2848 SvUTF8_off(dsv);
6050d10e
JP
2849}
2850
2851/*
645c22ef
DM
2852=for apidoc sv_2pvbyte
2853
2854Return a pointer to the byte-encoded representation of the SV, and set *lp
1e54db1a 2855to its length. May cause the SV to be downgraded from UTF-8 as a
645c22ef
DM
2856side-effect.
2857
2858Usually accessed via the C<SvPVbyte> macro.
2859
2860=cut
2861*/
2862
7340a771
GS
2863char *
2864Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2865{
0875d2fe 2866 sv_utf8_downgrade(sv,0);
97972285 2867 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771
GS
2868}
2869
645c22ef 2870/*
035cbb0e
RGS
2871=for apidoc sv_2pvutf8
2872
2873Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
2874to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
2875
2876Usually accessed via the C<SvPVutf8> macro.
2877
2878=cut
2879*/
645c22ef 2880
7340a771
GS
2881char *
2882Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2883{
035cbb0e
RGS
2884 sv_utf8_upgrade(sv);
2885 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771 2886}
1c846c1f 2887
7ee2227d 2888
645c22ef
DM
2889/*
2890=for apidoc sv_2bool
2891
2892This function is only called on magical items, and is only used by
8cf8f3d1 2893sv_true() or its macro equivalent.
645c22ef
DM
2894
2895=cut
2896*/
2897
463ee0b2 2898bool
864dbfa3 2899Perl_sv_2bool(pTHX_ register SV *sv)
463ee0b2 2900{
97aff369 2901 dVAR;
5b295bef 2902 SvGETMAGIC(sv);
463ee0b2 2903
a0d0e21e
LW
2904 if (!SvOK(sv))
2905 return 0;
2906 if (SvROK(sv)) {
fabdb6c0
AL
2907 if (SvAMAGIC(sv)) {
2908 SV * const tmpsv = AMG_CALLun(sv,bool_);
2909 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2910 return (bool)SvTRUE(tmpsv);
2911 }
2912 return SvRV(sv) != 0;
a0d0e21e 2913 }
463ee0b2 2914 if (SvPOKp(sv)) {
53c1dcc0
AL
2915 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
2916 if (Xpvtmp &&
339049b0 2917 (*sv->sv_u.svu_pv > '0' ||
11343788 2918 Xpvtmp->xpv_cur > 1 ||
339049b0 2919 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
463ee0b2
LW
2920 return 1;
2921 else
2922 return 0;
2923 }
2924 else {
2925 if (SvIOKp(sv))
2926 return SvIVX(sv) != 0;
2927 else {
2928 if (SvNOKp(sv))
2929 return SvNVX(sv) != 0.0;
180488f8 2930 else {
f7877b28 2931 if (isGV_with_GP(sv))
180488f8
NC
2932 return TRUE;
2933 else
2934 return FALSE;
2935 }
463ee0b2
LW
2936 }
2937 }
79072805
LW
2938}
2939
c461cf8f
JH
2940/*
2941=for apidoc sv_utf8_upgrade
2942
78ea37eb 2943Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 2944Forces the SV to string form if it is not already.
4411f3b6
NIS
2945Always sets the SvUTF8 flag to avoid future validity checks even
2946if all the bytes have hibit clear.
c461cf8f 2947
13a6c0e0
JH
2948This is not as a general purpose byte encoding to Unicode interface:
2949use the Encode extension for that.
2950
8d6d96c1
HS
2951=for apidoc sv_utf8_upgrade_flags
2952
78ea37eb 2953Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 2954Forces the SV to string form if it is not already.
8d6d96c1
HS
2955Always sets the SvUTF8 flag to avoid future validity checks even
2956if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
2957will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
2958C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
2959
13a6c0e0
JH
2960This is not as a general purpose byte encoding to Unicode interface:
2961use the Encode extension for that.
2962
8d6d96c1
HS
2963=cut
2964*/
2965
2966STRLEN
2967Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
2968{
97aff369 2969 dVAR;
808c356f
RGS
2970 if (sv == &PL_sv_undef)
2971 return 0;
e0e62c2a
NIS
2972 if (!SvPOK(sv)) {
2973 STRLEN len = 0;
d52b7888
NC
2974 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
2975 (void) sv_2pv_flags(sv,&len, flags);
2976 if (SvUTF8(sv))
2977 return len;
2978 } else {
2979 (void) SvPV_force(sv,len);
2980 }
e0e62c2a 2981 }
4411f3b6 2982
f5cee72b 2983 if (SvUTF8(sv)) {
5fec3b1d 2984 return SvCUR(sv);
f5cee72b 2985 }
5fec3b1d 2986
765f542d
NC
2987 if (SvIsCOW(sv)) {
2988 sv_force_normal_flags(sv, 0);
db42d148
NIS
2989 }
2990
88632417 2991 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
799ef3cb 2992 sv_recode_to_utf8(sv, PL_encoding);
9f4817db 2993 else { /* Assume Latin-1/EBCDIC */
c4e7c712
NC
2994 /* This function could be much more efficient if we
2995 * had a FLAG in SVs to signal if there are any hibit
2996 * chars in the PV. Given that there isn't such a flag
2997 * make the loop as fast as possible. */
00b6aa41 2998 const U8 * const s = (U8 *) SvPVX_const(sv);
c4420975 2999 const U8 * const e = (U8 *) SvEND(sv);
93524f2b 3000 const U8 *t = s;
c4e7c712
NC
3001
3002 while (t < e) {
53c1dcc0 3003 const U8 ch = *t++;
00b6aa41
AL
3004 /* Check for hi bit */
3005 if (!NATIVE_IS_INVARIANT(ch)) {
3006 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3007 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
3008
3009 SvPV_free(sv); /* No longer using what was there before. */
3010 SvPV_set(sv, (char*)recoded);
3011 SvCUR_set(sv, len - 1);
3012 SvLEN_set(sv, len); /* No longer know the real size. */
c4e7c712 3013 break;
00b6aa41 3014 }
c4e7c712
NC
3015 }
3016 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3017 SvUTF8_on(sv);
560a288e 3018 }
4411f3b6 3019 return SvCUR(sv);
560a288e
GS
3020}
3021
c461cf8f
JH
3022/*
3023=for apidoc sv_utf8_downgrade
3024
78ea37eb
TS
3025Attempts to convert the PV of an SV from characters to bytes.
3026If the PV contains a character beyond byte, this conversion will fail;
3027in this case, either returns false or, if C<fail_ok> is not
c461cf8f
JH
3028true, croaks.
3029
13a6c0e0
JH
3030This is not as a general purpose Unicode to byte encoding interface:
3031use the Encode extension for that.
3032
c461cf8f
JH
3033=cut
3034*/
3035
560a288e
GS
3036bool
3037Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3038{
97aff369 3039 dVAR;
78ea37eb 3040 if (SvPOKp(sv) && SvUTF8(sv)) {
fa301091 3041 if (SvCUR(sv)) {
03cfe0ae 3042 U8 *s;
652088fc 3043 STRLEN len;
fa301091 3044
765f542d
NC
3045 if (SvIsCOW(sv)) {
3046 sv_force_normal_flags(sv, 0);
3047 }
03cfe0ae
NIS
3048 s = (U8 *) SvPV(sv, len);
3049 if (!utf8_to_bytes(s, &len)) {
fa301091
JH
3050 if (fail_ok)
3051 return FALSE;
3052 else {
3053 if (PL_op)
3054 Perl_croak(aTHX_ "Wide character in %s",
53e06cf0 3055 OP_DESC(PL_op));
fa301091
JH
3056 else
3057 Perl_croak(aTHX_ "Wide character");
3058 }
4b3603a4 3059 }
b162af07 3060 SvCUR_set(sv, len);
67e989fb 3061 }
560a288e 3062 }
ffebcc3e 3063 SvUTF8_off(sv);
560a288e
GS
3064 return TRUE;
3065}
3066
c461cf8f
JH
3067/*
3068=for apidoc sv_utf8_encode
3069
78ea37eb
TS
3070Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3071flag off so that it looks like octets again.
c461cf8f
JH
3072
3073=cut
3074*/
3075
560a288e
GS
3076void
3077Perl_sv_utf8_encode(pTHX_ register SV *sv)
3078{
4411f3b6 3079 (void) sv_utf8_upgrade(sv);
4c94c214
NC
3080 if (SvIsCOW(sv)) {
3081 sv_force_normal_flags(sv, 0);
3082 }
3083 if (SvREADONLY(sv)) {
3084 Perl_croak(aTHX_ PL_no_modify);
3085 }
560a288e
GS
3086 SvUTF8_off(sv);
3087}
3088
4411f3b6
NIS
3089/*
3090=for apidoc sv_utf8_decode
3091
78ea37eb
TS
3092If the PV of the SV is an octet sequence in UTF-8
3093and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3094so that it looks like a character. If the PV contains only single-byte
3095characters, the C<SvUTF8> flag stays being off.
3096Scans PV for validity and returns false if the PV is invalid UTF-8.
4411f3b6
NIS
3097
3098=cut
3099*/
3100
560a288e
GS
3101bool
3102Perl_sv_utf8_decode(pTHX_ register SV *sv)
3103{
78ea37eb 3104 if (SvPOKp(sv)) {
93524f2b
NC
3105 const U8 *c;
3106 const U8 *e;
9cbac4c7 3107
645c22ef
DM
3108 /* The octets may have got themselves encoded - get them back as
3109 * bytes
3110 */
3111 if (!sv_utf8_downgrade(sv, TRUE))
560a288e
GS
3112 return FALSE;
3113
3114 /* it is actually just a matter of turning the utf8 flag on, but
3115 * we want to make sure everything inside is valid utf8 first.
3116 */
93524f2b 3117 c = (const U8 *) SvPVX_const(sv);
63cd0674 3118 if (!is_utf8_string(c, SvCUR(sv)+1))
67e989fb 3119 return FALSE;
93524f2b 3120 e = (const U8 *) SvEND(sv);
511c2ff0 3121 while (c < e) {
b64e5050 3122 const U8 ch = *c++;
c4d5f83a 3123 if (!UTF8_IS_INVARIANT(ch)) {
67e989fb
JH
3124 SvUTF8_on(sv);
3125 break;
3126 }
560a288e 3127 }
560a288e
GS
3128 }
3129 return TRUE;
3130}
3131
954c1994
GS
3132/*
3133=for apidoc sv_setsv
3134
645c22ef
DM
3135Copies the contents of the source SV C<ssv> into the destination SV
3136C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3137function if the source SV needs to be reused. Does not handle 'set' magic.
3138Loosely speaking, it performs a copy-by-value, obliterating any previous
3139content of the destination.
3140
3141You probably want to use one of the assortment of wrappers, such as
3142C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3143C<SvSetMagicSV_nosteal>.
3144
8d6d96c1
HS
3145=for apidoc sv_setsv_flags
3146
645c22ef
DM
3147Copies the contents of the source SV C<ssv> into the destination SV
3148C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3149function if the source SV needs to be reused. Does not handle 'set' magic.
3150Loosely speaking, it performs a copy-by-value, obliterating any previous
3151content of the destination.
3152If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
5fcdf167
NC
3153C<ssv> if appropriate, else not. If the C<flags> parameter has the
3154C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3155and C<sv_setsv_nomg> are implemented in terms of this function.
645c22ef
DM
3156
3157You probably want to use one of the assortment of wrappers, such as
3158C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3159C<SvSetMagicSV_nosteal>.
3160
3161This is the primary function for copying scalars, and most other
3162copy-ish functions and macros use this underneath.
8d6d96c1
HS
3163
3164=cut
3165*/
3166
5d0301b7 3167static void
2eb42952 3168S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype)
5d0301b7
NC
3169{
3170 if (dtype != SVt_PVGV) {
3171 const char * const name = GvNAME(sstr);
3172 const STRLEN len = GvNAMELEN(sstr);
3173 /* don't upgrade SVt_PVLV: it can hold a glob */
f7877b28
NC
3174 if (dtype != SVt_PVLV) {
3175 if (dtype >= SVt_PV) {
3176 SvPV_free(dstr);
3177 SvPV_set(dstr, 0);
3178 SvLEN_set(dstr, 0);
3179 SvCUR_set(dstr, 0);
3180 }
5d0301b7 3181 sv_upgrade(dstr, SVt_PVGV);
dedf8e73
NC
3182 (void)SvOK_off(dstr);
3183 SvSCREAM_on(dstr);
f7877b28 3184 }
5d0301b7
NC
3185 GvSTASH(dstr) = GvSTASH(sstr);
3186 if (GvSTASH(dstr))
3187 Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
ae8cc45f 3188 gv_name_set((GV *)dstr, name, len, GV_ADD);
5d0301b7
NC
3189 SvFAKE_on(dstr); /* can coerce to non-glob */
3190 }
3191
3192#ifdef GV_UNIQUE_CHECK
3193 if (GvUNIQUE((GV*)dstr)) {
3194 Perl_croak(aTHX_ PL_no_modify);
3195 }
3196#endif
3197
f7877b28
NC
3198 gp_free((GV*)dstr);
3199 SvSCREAM_off(dstr);
5d0301b7 3200 (void)SvOK_off(dstr);
f7877b28 3201 SvSCREAM_on(dstr);
dedf8e73 3202 GvINTRO_off(dstr); /* one-shot flag */
5d0301b7
NC
3203 GvGP(dstr) = gp_ref(GvGP(sstr));
3204 if (SvTAINTED(sstr))
3205 SvTAINT(dstr);
3206 if (GvIMPORTED(dstr) != GVf_IMPORTED
3207 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3208 {
3209 GvIMPORTED_on(dstr);
3210 }
3211 GvMULTI_on(dstr);
3212 return;
3213}
3214
b8473700 3215static void
2eb42952 3216S_glob_assign_ref(pTHX_ SV *dstr, SV *sstr) {
b8473700
NC
3217 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3218 SV *dref = NULL;
3219 const int intro = GvINTRO(dstr);
2440974c 3220 SV **location;
3386d083 3221 U8 import_flag = 0;
27242d61
NC
3222 const U32 stype = SvTYPE(sref);
3223
b8473700
NC
3224
3225#ifdef GV_UNIQUE_CHECK
3226 if (GvUNIQUE((GV*)dstr)) {
3227 Perl_croak(aTHX_ PL_no_modify);
3228 }
3229#endif
3230
3231 if (intro) {
3232 GvINTRO_off(dstr); /* one-shot flag */
3233 GvLINE(dstr) = CopLINE(PL_curcop);
3234 GvEGV(dstr) = (GV*)dstr;
3235 }
3236 GvMULTI_on(dstr);
27242d61 3237 switch (stype) {
b8473700 3238 case SVt_PVCV:
27242d61
NC
3239 location = (SV **) &GvCV(dstr);
3240 import_flag = GVf_IMPORTED_CV;
3241 goto common;
3242 case SVt_PVHV:
3243 location = (SV **) &GvHV(dstr);
3244 import_flag = GVf_IMPORTED_HV;
3245 goto common;
3246 case SVt_PVAV:
3247 location = (SV **) &GvAV(dstr);
3248 import_flag = GVf_IMPORTED_AV;
3249 goto common;
3250 case SVt_PVIO:
3251 location = (SV **) &GvIOp(dstr);
3252 goto common;
3253 case SVt_PVFM:
3254 location = (SV **) &GvFORM(dstr);
3255 default:
3256 location = &GvSV(dstr);
3257 import_flag = GVf_IMPORTED_SV;
3258 common:
b8473700 3259 if (intro) {
27242d61
NC
3260 if (stype == SVt_PVCV) {
3261 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3262 SvREFCNT_dec(GvCV(dstr));
3263 GvCV(dstr) = NULL;
3264 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3265 PL_sub_generation++;
3266 }
b8473700 3267 }
27242d61 3268 SAVEGENERICSV(*location);
b8473700
NC
3269 }
3270 else
27242d61
NC
3271 dref = *location;
3272 if (stype == SVt_PVCV && *location != sref) {
3273 CV* const cv = (CV*)*location;
b8473700
NC
3274 if (cv) {
3275 if (!GvCVGEN((GV*)dstr) &&
3276 (CvROOT(cv) || CvXSUB(cv)))
3277 {
3278 /* Redefining a sub - warning is mandatory if
3279 it was a const and its value changed. */
3280 if (CvCONST(cv) && CvCONST((CV*)sref)
3281 && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
bb263b4e 3282 /*EMPTY*/
b8473700
NC
3283 /* They are 2 constant subroutines generated from
3284 the same constant. This probably means that
3285 they are really the "same" proxy subroutine
3286 instantiated in 2 places. Most likely this is
3287 when a constant is exported twice. Don't warn.
3288 */
3289 }
3290 else if (ckWARN(WARN_REDEFINE)
3291 || (CvCONST(cv)
3292 && (!CvCONST((CV*)sref)
3293 || sv_cmp(cv_const_sv(cv),
3294 cv_const_sv((CV*)sref))))) {
3295 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3296 CvCONST(cv)
3297 ? "Constant subroutine %s::%s redefined"
3298 : "Subroutine %s::%s redefined",
3299 HvNAME_get(GvSTASH((GV*)dstr)),
3300 GvENAME((GV*)dstr));
3301 }
3302 }
3303 if (!intro)
3304 cv_ckproto(cv, (GV*)dstr,
bd61b366 3305 SvPOK(sref) ? SvPVX_const(sref) : NULL);
b8473700 3306 }
b8473700
NC
3307 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3308 GvASSUMECV_on(dstr);
3309 PL_sub_generation++;
3310 }
2440974c 3311 *location = sref;
3386d083
NC
3312 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3313 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3314 GvFLAGS(dstr) |= import_flag;
b8473700
NC
3315 }
3316 break;
3317 }
b37c2d43 3318 SvREFCNT_dec(dref);
b8473700
NC
3319 if (SvTAINTED(sstr))
3320 SvTAINT(dstr);
3321 return;
3322}
3323
8d6d96c1
HS
3324void
3325Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3326{
97aff369 3327 dVAR;
8990e307
LW
3328 register U32 sflags;
3329 register int dtype;
3330 register int stype;
463ee0b2 3331
79072805
LW
3332 if (sstr == dstr)
3333 return;
765f542d 3334 SV_CHECK_THINKFIRST_COW_DROP(dstr);
79072805 3335 if (!sstr)
3280af22 3336 sstr = &PL_sv_undef;
8990e307
LW
3337 stype = SvTYPE(sstr);
3338 dtype = SvTYPE(dstr);
79072805 3339
a0d0e21e 3340 SvAMAGIC_off(dstr);
7a5fa8a2 3341 if ( SvVOK(dstr) )
ece467f9
JP
3342 {
3343 /* need to nuke the magic */
3344 mg_free(dstr);
3345 SvRMAGICAL_off(dstr);
3346 }
9e7bc3e8 3347
463ee0b2 3348 /* There's a lot of redundancy below but we're going for speed here */
79072805 3349
8990e307 3350 switch (stype) {
79072805 3351 case SVt_NULL:
aece5585 3352 undef_sstr:
20408e3c
GS
3353 if (dtype != SVt_PVGV) {
3354 (void)SvOK_off(dstr);
3355 return;
3356 }
3357 break;
463ee0b2 3358 case SVt_IV:
aece5585
GA
3359 if (SvIOK(sstr)) {
3360 switch (dtype) {
3361 case SVt_NULL:
8990e307 3362 sv_upgrade(dstr, SVt_IV);
aece5585
GA
3363 break;
3364 case SVt_NV:
aece5585
GA
3365 case SVt_RV:
3366 case SVt_PV:
a0d0e21e 3367 sv_upgrade(dstr, SVt_PVIV);
aece5585
GA
3368 break;
3369 }
3370 (void)SvIOK_only(dstr);
45977657 3371 SvIV_set(dstr, SvIVX(sstr));
25da4f38
IZ
3372 if (SvIsUV(sstr))
3373 SvIsUV_on(dstr);
37c25af0
NC
3374 /* SvTAINTED can only be true if the SV has taint magic, which in
3375 turn means that the SV type is PVMG (or greater). This is the
3376 case statement for SVt_IV, so this cannot be true (whatever gcov
3377 may say). */
3378 assert(!SvTAINTED(sstr));
aece5585 3379 return;
8990e307 3380 }
aece5585
GA
3381 goto undef_sstr;
3382
463ee0b2 3383 case SVt_NV:
aece5585
GA
3384 if (SvNOK(sstr)) {
3385 switch (dtype) {
3386 case SVt_NULL:
3387 case SVt_IV:
8990e307 3388 sv_upgrade(dstr, SVt_NV);
aece5585
GA
3389 break;
3390 case SVt_RV:
3391 case SVt_PV:
3392 case SVt_PVIV:
a0d0e21e 3393 sv_upgrade(dstr, SVt_PVNV);
aece5585
GA
3394 break;
3395 }
9d6ce603 3396 SvNV_set(dstr, SvNVX(sstr));
aece5585 3397 (void)SvNOK_only(dstr);
37c25af0
NC
3398 /* SvTAINTED can only be true if the SV has taint magic, which in
3399 turn means that the SV type is PVMG (or greater). This is the
3400 case statement for SVt_NV, so this cannot be true (whatever gcov
3401 may say). */
3402 assert(!SvTAINTED(sstr));
aece5585 3403 return;
8990e307 3404 }
aece5585
GA
3405 goto undef_sstr;
3406
ed6116ce 3407 case SVt_RV:
8990e307 3408 if (dtype < SVt_RV)
ed6116ce 3409 sv_upgrade(dstr, SVt_RV);
ed6116ce 3410 break;
fc36a67e 3411 case SVt_PVFM:
f8c7b90f 3412#ifdef PERL_OLD_COPY_ON_WRITE
d89fc664
NC
3413 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3414 if (dtype < SVt_PVIV)
3415 sv_upgrade(dstr, SVt_PVIV);
3416 break;
3417 }
3418 /* Fall through */
3419#endif
3420 case SVt_PV:
8990e307 3421 if (dtype < SVt_PV)
463ee0b2 3422 sv_upgrade(dstr, SVt_PV);
463ee0b2
LW
3423 break;
3424 case SVt_PVIV:
8990e307 3425 if (dtype < SVt_PVIV)
463ee0b2 3426 sv_upgrade(dstr, SVt_PVIV);
463ee0b2
LW
3427 break;
3428 case SVt_PVNV:
8990e307 3429 if (dtype < SVt_PVNV)
463ee0b2 3430 sv_upgrade(dstr, SVt_PVNV);
463ee0b2 3431 break;
489f7bfe 3432 default:
a3b680e6
AL
3433 {
3434 const char * const type = sv_reftype(sstr,0);
533c011a 3435 if (PL_op)
a3b680e6 3436 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
4633a7c4 3437 else
a3b680e6
AL
3438 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3439 }
4633a7c4
LW
3440 break;
3441
79072805 3442 case SVt_PVGV:
8990e307 3443 if (dtype <= SVt_PVGV) {
2eb42952 3444 S_glob_assign_glob(aTHX_ dstr, sstr, dtype);
b8c701c1 3445 return;
79072805 3446 }
5f66b61c 3447 /*FALLTHROUGH*/
79072805 3448
489f7bfe
NC
3449 case SVt_PVMG:
3450 case SVt_PVLV:
3451 case SVt_PVBM:
8d6d96c1 3452 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
973f89ab 3453 mg_get(sstr);
eb160463 3454 if ((int)SvTYPE(sstr) != stype) {
973f89ab 3455 stype = SvTYPE(sstr);
b8c701c1 3456 if (stype == SVt_PVGV && dtype <= SVt_PVGV) {
2eb42952 3457 S_glob_assign_glob(aTHX_ dstr, sstr, dtype);
b8c701c1
NC
3458 return;
3459 }
973f89ab
CS
3460 }
3461 }
ded42b9f 3462 if (stype == SVt_PVLV)
862a34c6 3463 SvUPGRADE(dstr, SVt_PVNV);
ded42b9f 3464 else
862a34c6 3465 SvUPGRADE(dstr, (U32)stype);
79072805
LW
3466 }
3467
ff920335
NC
3468 /* dstr may have been upgraded. */
3469 dtype = SvTYPE(dstr);
8990e307
LW
3470 sflags = SvFLAGS(sstr);
3471
3472 if (sflags & SVf_ROK) {
acaa9288
NC
3473 if (dtype == SVt_PVGV &&
3474 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3475 sstr = SvRV(sstr);
3476 if (sstr == dstr) {
3477 if (GvIMPORTED(dstr) != GVf_IMPORTED
3478 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3479 {
3480 GvIMPORTED_on(dstr);
3481 }
3482 GvMULTI_on(dstr);
3483 return;
3484 }
2eb42952 3485 S_glob_assign_glob(aTHX_ dstr, sstr, dtype);
acaa9288
NC
3486 return;
3487 }
3488
8990e307 3489 if (dtype >= SVt_PV) {
b8c701c1 3490 if (dtype == SVt_PVGV) {
2eb42952 3491 S_glob_assign_ref(aTHX_ dstr, sstr);
b8c701c1
NC
3492 return;
3493 }
3f7c398e 3494 if (SvPVX_const(dstr)) {
8bd4d4c5 3495 SvPV_free(dstr);
b162af07
SP
3496 SvLEN_set(dstr, 0);
3497 SvCUR_set(dstr, 0);
a0d0e21e 3498 }
8990e307 3499 }
a0d0e21e 3500 (void)SvOK_off(dstr);
b162af07 3501 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
dfd48732
NC
3502 SvFLAGS(dstr) |= sflags & (SVf_ROK|SVf_AMAGIC);
3503 assert(!(sflags & SVp_NOK));
3504 assert(!(sflags & SVp_IOK));
3505 assert(!(sflags & SVf_NOK));
3506 assert(!(sflags & SVf_IOK));
ed6116ce 3507 }
c0c44674
NC
3508 else if (dtype == SVt_PVGV) {
3509 if (!(sflags & SVf_OK)) {
3510 if (ckWARN(WARN_MISC))
3511 Perl_warner(aTHX_ packWARN(WARN_MISC),
3512 "Undefined value assigned to typeglob");
3513 }
3514 else {
3515 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
3516 if (dstr != (SV*)gv) {
3517 if (GvGP(dstr))
3518 gp_free((GV*)dstr);
3519 GvGP(dstr) = gp_ref(GvGP(gv));
3520 }
3521 }
3522 }
8990e307 3523 else if (sflags & SVp_POK) {
765f542d 3524 bool isSwipe = 0;
79072805
LW
3525
3526 /*
3527 * Check to see if we can just swipe the string. If so, it's a
3528 * possible small lose on short strings, but a big win on long ones.
3f7c398e
SP
3529 * It might even be a win on short strings if SvPVX_const(dstr)
3530 * has to be allocated and SvPVX_const(sstr) has to be freed.
79072805
LW
3531 */
3532
120fac95
NC
3533 /* Whichever path we take through the next code, we want this true,
3534 and doing it now facilitates the COW check. */
3535 (void)SvPOK_only(dstr);
3536
765f542d 3537 if (
b8f9541a
NC
3538 /* We're not already COW */
3539 ((sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
f8c7b90f 3540#ifndef PERL_OLD_COPY_ON_WRITE
b8f9541a
NC
3541 /* or we are, but dstr isn't a suitable target. */
3542 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3543#endif
3544 )
765f542d 3545 &&
765f542d
NC
3546 !(isSwipe =
3547 (sflags & SVs_TEMP) && /* slated for free anyway? */
3548 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
5fcdf167
NC
3549 (!(flags & SV_NOSTEAL)) &&
3550 /* and we're allowed to steal temps */
765f542d
NC
3551 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3552 SvLEN(sstr) && /* and really is a string */
645c22ef 3553 /* and won't be needed again, potentially */
765f542d 3554 !(PL_op && PL_op->op_type == OP_AASSIGN))
f8c7b90f 3555#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 3556 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
120fac95 3557 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
765f542d
NC
3558 && SvTYPE(sstr) >= SVt_PVIV)
3559#endif
3560 ) {
3561 /* Failed the swipe test, and it's not a shared hash key either.
3562 Have to copy the string. */
3563 STRLEN len = SvCUR(sstr);
3564 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3f7c398e 3565 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
765f542d
NC
3566 SvCUR_set(dstr, len);
3567 *SvEND(dstr) = '\0';
765f542d 3568 } else {
f8c7b90f 3569 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
765f542d 3570 be true in here. */
765f542d
NC
3571 /* Either it's a shared hash key, or it's suitable for
3572 copy-on-write or we can swipe the string. */
46187eeb 3573 if (DEBUG_C_TEST) {
ed252734 3574 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
e419cbc5
NC
3575 sv_dump(sstr);
3576 sv_dump(dstr);
46187eeb 3577 }
f8c7b90f 3578#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
3579 if (!isSwipe) {
3580 /* I believe I should acquire a global SV mutex if
3581 it's a COW sv (not a shared hash key) to stop
3582 it going un copy-on-write.
3583 If the source SV has gone un copy on write between up there
3584 and down here, then (assert() that) it is of the correct
3585 form to make it copy on write again */
3586 if ((sflags & (SVf_FAKE | SVf_READONLY))
3587 != (SVf_FAKE | SVf_READONLY)) {
3588 SvREADONLY_on(sstr);
3589 SvFAKE_on(sstr);
3590 /* Make the source SV into a loop of 1.
3591 (about to become 2) */
a29f6d03 3592 SV_COW_NEXT_SV_SET(sstr, sstr);
765f542d
NC
3593 }
3594 }
3595#endif
3596 /* Initial code is common. */
94010e71
NC
3597 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
3598 SvPV_free(dstr);
79072805 3599 }
765f542d 3600
765f542d
NC
3601 if (!isSwipe) {
3602 /* making another shared SV. */
3603 STRLEN cur = SvCUR(sstr);
3604 STRLEN len = SvLEN(sstr);
f8c7b90f 3605#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 3606 if (len) {
b8f9541a 3607 assert (SvTYPE(dstr) >= SVt_PVIV);
765f542d
NC
3608 /* SvIsCOW_normal */
3609 /* splice us in between source and next-after-source. */
a29f6d03
NC
3610 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3611 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 3612 SvPV_set(dstr, SvPVX_mutable(sstr));
a604c751
NC
3613 } else
3614#endif
3615 {
765f542d 3616 /* SvIsCOW_shared_hash */
46187eeb
NC
3617 DEBUG_C(PerlIO_printf(Perl_debug_log,
3618 "Copy on write: Sharing hash\n"));
b8f9541a 3619
bdd68bc3 3620 assert (SvTYPE(dstr) >= SVt_PV);
765f542d 3621 SvPV_set(dstr,
d1db91c6 3622 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
bdd68bc3 3623 }
87a1ef3d
SP
3624 SvLEN_set(dstr, len);
3625 SvCUR_set(dstr, cur);
765f542d
NC
3626 SvREADONLY_on(dstr);
3627 SvFAKE_on(dstr);
3628 /* Relesase a global SV mutex. */
3629 }
3630 else
765f542d 3631 { /* Passes the swipe test. */
78d1e721 3632 SvPV_set(dstr, SvPVX_mutable(sstr));
765f542d
NC
3633 SvLEN_set(dstr, SvLEN(sstr));
3634 SvCUR_set(dstr, SvCUR(sstr));
3635
3636 SvTEMP_off(dstr);
3637 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
6136c704 3638 SvPV_set(sstr, NULL);
765f542d
NC
3639 SvLEN_set(sstr, 0);
3640 SvCUR_set(sstr, 0);
3641 SvTEMP_off(sstr);
3642 }
3643 }
8990e307 3644 if (sflags & SVp_NOK) {
9d6ce603 3645 SvNV_set(dstr, SvNVX(sstr));
79072805 3646 }
8990e307 3647 if (sflags & SVp_IOK) {
23525414
NC
3648 SvRELEASE_IVX(dstr);
3649 SvIV_set(dstr, SvIVX(sstr));
3650 /* Must do this otherwise some other overloaded use of 0x80000000
3651 gets confused. I guess SVpbm_VALID */
2b1c7e3e 3652 if (sflags & SVf_IVisUV)
25da4f38 3653 SvIsUV_on(dstr);
79072805 3654 }
dd2eae66
NC
3655 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8
3656 |SVf_AMAGIC);
4f2da183
NC
3657 {
3658 const MAGIC * const smg = SvVOK(sstr);
3659 if (smg) {
3660 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3661 smg->mg_ptr, smg->mg_len);
3662 SvRMAGICAL_on(dstr);
3663 }
7a5fa8a2 3664 }
79072805 3665 }
5d581361 3666 else if (sflags & (SVp_IOK|SVp_NOK)) {
c2468cc7 3667 (void)SvOK_off(dstr);
dd2eae66
NC
3668 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK
3669 |SVf_AMAGIC);
5d581361
NC
3670 if (sflags & SVp_IOK) {
3671 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3672 SvIV_set(dstr, SvIVX(sstr));
3673 }
3332b3c1 3674 if (sflags & SVp_NOK) {
9d6ce603 3675 SvNV_set(dstr, SvNVX(sstr));
3332b3c1
JH
3676 }
3677 }
79072805 3678 else {
f7877b28 3679 if (isGV_with_GP(sstr)) {
180488f8
NC
3680 /* This stringification rule for globs is spread in 3 places.
3681 This feels bad. FIXME. */
3682 const U32 wasfake = sflags & SVf_FAKE;
3683
3684 /* FAKE globs can get coerced, so need to turn this off
3685 temporarily if it is on. */
3686 SvFAKE_off(sstr);
3687 gv_efullname3(dstr, (GV *)sstr, "*");
3688 SvFLAGS(sstr) |= wasfake;
dd2eae66 3689 SvFLAGS(dstr) |= sflags & SVf_AMAGIC;
180488f8 3690 }
20408e3c
GS
3691 else
3692 (void)SvOK_off(dstr);
a0d0e21e 3693 }
27c9684d
AP
3694 if (SvTAINTED(sstr))
3695 SvTAINT(dstr);
79072805
LW
3696}
3697
954c1994
GS
3698/*
3699=for apidoc sv_setsv_mg
3700
3701Like C<sv_setsv>, but also handles 'set' magic.
3702
3703=cut
3704*/
3705
79072805 3706void
864dbfa3 3707Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
ef50df4b
GS
3708{
3709 sv_setsv(dstr,sstr);
3710 SvSETMAGIC(dstr);
3711}
3712
f8c7b90f 3713#ifdef PERL_OLD_COPY_ON_WRITE
ed252734
NC
3714SV *
3715Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3716{
3717 STRLEN cur = SvCUR(sstr);
3718 STRLEN len = SvLEN(sstr);
3719 register char *new_pv;
3720
3721 if (DEBUG_C_TEST) {
3722 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
3723 sstr, dstr);
3724 sv_dump(sstr);
3725 if (dstr)
3726 sv_dump(dstr);
3727 }
3728
3729 if (dstr) {
3730 if (SvTHINKFIRST(dstr))
3731 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3f7c398e
SP
3732 else if (SvPVX_const(dstr))
3733 Safefree(SvPVX_const(dstr));
ed252734
NC
3734 }
3735 else
3736 new_SV(dstr);
862a34c6 3737 SvUPGRADE(dstr, SVt_PVIV);
ed252734
NC
3738
3739 assert (SvPOK(sstr));
3740 assert (SvPOKp(sstr));
3741 assert (!SvIOK(sstr));
3742 assert (!SvIOKp(sstr));
3743 assert (!SvNOK(sstr));
3744 assert (!SvNOKp(sstr));
3745
3746 if (SvIsCOW(sstr)) {
3747
3748 if (SvLEN(sstr) == 0) {
3749 /* source is a COW shared hash key. */
ed252734
NC
3750 DEBUG_C(PerlIO_printf(Perl_debug_log,
3751 "Fast copy on write: Sharing hash\n"));
d1db91c6 3752 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
ed252734
NC
3753 goto common_exit;
3754 }
3755 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3756 } else {
3757 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
862a34c6 3758 SvUPGRADE(sstr, SVt_PVIV);
ed252734
NC
3759 SvREADONLY_on(sstr);
3760 SvFAKE_on(sstr);
3761 DEBUG_C(PerlIO_printf(Perl_debug_log,
3762 "Fast copy on write: Converting sstr to COW\n"));
3763 SV_COW_NEXT_SV_SET(dstr, sstr);
3764 }
3765 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 3766 new_pv = SvPVX_mutable(sstr);
ed252734
NC
3767
3768 common_exit:
3769 SvPV_set(dstr, new_pv);
3770 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
3771 if (SvUTF8(sstr))
3772 SvUTF8_on(dstr);
87a1ef3d
SP
3773 SvLEN_set(dstr, len);
3774 SvCUR_set(dstr, cur);
ed252734
NC
3775 if (DEBUG_C_TEST) {
3776 sv_dump(dstr);
3777 }
3778 return dstr;
3779}
3780#endif
3781
954c1994
GS
3782/*
3783=for apidoc sv_setpvn
3784
3785Copies a string into an SV. The C<len> parameter indicates the number of
9e09f5f2
MHM
3786bytes to be copied. If the C<ptr> argument is NULL the SV will become
3787undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
954c1994
GS
3788
3789=cut
3790*/
3791
ef50df4b 3792void
864dbfa3 3793Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
79072805 3794{
97aff369 3795 dVAR;
c6f8c383 3796 register char *dptr;
22c522df 3797
765f542d 3798 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 3799 if (!ptr) {
a0d0e21e 3800 (void)SvOK_off(sv);
463ee0b2
LW
3801 return;
3802 }
22c522df
JH
3803 else {
3804 /* len is STRLEN which is unsigned, need to copy to signed */
a3b680e6 3805 const IV iv = len;
9c5ffd7c
JH
3806 if (iv < 0)
3807 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
22c522df 3808 }
862a34c6 3809 SvUPGRADE(sv, SVt_PV);
c6f8c383 3810
5902b6a9 3811 dptr = SvGROW(sv, len + 1);
c6f8c383
GA
3812 Move(ptr,dptr,len,char);
3813 dptr[len] = '\0';
79072805 3814 SvCUR_set(sv, len);
1aa99e6b 3815 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 3816 SvTAINT(sv);
79072805
LW
3817}
3818
954c1994
GS
3819/*
3820=for apidoc sv_setpvn_mg
3821
3822Like C<sv_setpvn>, but also handles 'set' magic.
3823
3824=cut
3825*/
3826
79072805 3827void
864dbfa3 3828Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
ef50df4b
GS
3829{
3830 sv_setpvn(sv,ptr,len);
3831 SvSETMAGIC(sv);
3832}
3833
954c1994
GS
3834/*
3835=for apidoc sv_setpv
3836
3837Copies a string into an SV. The string must be null-terminated. Does not
3838handle 'set' magic. See C<sv_setpv_mg>.
3839
3840=cut
3841*/
3842
ef50df4b 3843void
864dbfa3 3844Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
79072805 3845{
97aff369 3846 dVAR;
79072805
LW
3847 register STRLEN len;
3848
765f542d 3849 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 3850 if (!ptr) {
a0d0e21e 3851 (void)SvOK_off(sv);
463ee0b2
LW
3852 return;
3853 }
79072805 3854 len = strlen(ptr);
862a34c6 3855 SvUPGRADE(sv, SVt_PV);
c6f8c383 3856
79072805 3857 SvGROW(sv, len + 1);
463ee0b2 3858 Move(ptr,SvPVX(sv),len+1,char);
79072805 3859 SvCUR_set(sv, len);
1aa99e6b 3860 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2
LW
3861 SvTAINT(sv);
3862}
3863
954c1994
GS
3864/*
3865=for apidoc sv_setpv_mg
3866
3867Like C<sv_setpv>, but also handles 'set' magic.
3868
3869=cut
3870*/
3871
463ee0b2 3872void
864dbfa3 3873Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
ef50df4b
GS
3874{
3875 sv_setpv(sv,ptr);
3876 SvSETMAGIC(sv);
3877}
3878
954c1994
GS
3879/*
3880=for apidoc sv_usepvn
3881
3882Tells an SV to use C<ptr> to find its string value. Normally the string is
1c846c1f 3883stored inside the SV but sv_usepvn allows the SV to use an outside string.
954c1994
GS
3884The C<ptr> should point to memory that was allocated by C<malloc>. The
3885string length, C<len>, must be supplied. This function will realloc the
3886memory pointed to by C<ptr>, so that pointer should not be freed or used by
3887the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3888See C<sv_usepvn_mg>.
3889
3890=cut
3891*/
3892
ef50df4b 3893void
864dbfa3 3894Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
463ee0b2 3895{
97aff369 3896 dVAR;
1936d2a7 3897 STRLEN allocate;
765f542d 3898 SV_CHECK_THINKFIRST_COW_DROP(sv);
862a34c6 3899 SvUPGRADE(sv, SVt_PV);
463ee0b2 3900 if (!ptr) {
a0d0e21e 3901 (void)SvOK_off(sv);
463ee0b2
LW
3902 return;
3903 }
3f7c398e 3904 if (SvPVX_const(sv))
8bd4d4c5 3905 SvPV_free(sv);
1936d2a7
NC
3906
3907 allocate = PERL_STRLEN_ROUNDUP(len + 1);
7a9b70e9 3908 ptr = saferealloc (ptr, allocate);
f880fe2f 3909 SvPV_set(sv, ptr);
463ee0b2 3910 SvCUR_set(sv, len);
1936d2a7 3911 SvLEN_set(sv, allocate);
463ee0b2 3912 *SvEND(sv) = '\0';
1aa99e6b 3913 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 3914 SvTAINT(sv);
79072805
LW
3915}
3916
954c1994
GS
3917/*
3918=for apidoc sv_usepvn_mg
3919
3920Like C<sv_usepvn>, but also handles 'set' magic.
3921
3922=cut
3923*/
3924
ef50df4b 3925void
864dbfa3 3926Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
ef50df4b 3927{
51c1089b 3928 sv_usepvn(sv,ptr,len);
ef50df4b
GS
3929 SvSETMAGIC(sv);
3930}
3931
f8c7b90f 3932#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
3933/* Need to do this *after* making the SV normal, as we need the buffer
3934 pointer to remain valid until after we've copied it. If we let go too early,
3935 another thread could invalidate it by unsharing last of the same hash key
3936 (which it can do by means other than releasing copy-on-write Svs)
3937 or by changing the other copy-on-write SVs in the loop. */
3938STATIC void
bdd68bc3 3939S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, STRLEN len, SV *after)
765f542d
NC
3940{
3941 if (len) { /* this SV was SvIsCOW_normal(sv) */
3942 /* we need to find the SV pointing to us. */
cf5629ad 3943 SV *current = SV_COW_NEXT_SV(after);
7a5fa8a2 3944
765f542d
NC
3945 if (current == sv) {
3946 /* The SV we point to points back to us (there were only two of us
3947 in the loop.)
3948 Hence other SV is no longer copy on write either. */
3949 SvFAKE_off(after);
3950 SvREADONLY_off(after);
3951 } else {
3952 /* We need to follow the pointers around the loop. */
3953 SV *next;
3954 while ((next = SV_COW_NEXT_SV(current)) != sv) {
3955 assert (next);
3956 current = next;
3957 /* don't loop forever if the structure is bust, and we have
3958 a pointer into a closed loop. */
3959 assert (current != after);
3f7c398e 3960 assert (SvPVX_const(current) == pvx);
765f542d
NC
3961 }
3962 /* Make the SV before us point to the SV after us. */
a29f6d03 3963 SV_COW_NEXT_SV_SET(current, after);
765f542d
NC
3964 }
3965 } else {
bdd68bc3 3966 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
765f542d
NC
3967 }
3968}
3969
3970int
3971Perl_sv_release_IVX(pTHX_ register SV *sv)
3972{
3973 if (SvIsCOW(sv))
3974 sv_force_normal_flags(sv, 0);
0c34ef67
MHM
3975 SvOOK_off(sv);
3976 return 0;
765f542d
NC
3977}
3978#endif
645c22ef
DM
3979/*
3980=for apidoc sv_force_normal_flags
3981
3982Undo various types of fakery on an SV: if the PV is a shared string, make
3983a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
765f542d
NC
3984an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
3985we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
3986then a copy-on-write scalar drops its PV buffer (if any) and becomes
3987SvPOK_off rather than making a copy. (Used where this scalar is about to be
d3050d9d 3988set to some other value.) In addition, the C<flags> parameter gets passed to
765f542d
NC
3989C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
3990with flags set to 0.
645c22ef
DM
3991
3992=cut
3993*/
3994
6fc92669 3995void
840a7b70 3996Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
0f15f207 3997{
97aff369 3998 dVAR;
f8c7b90f 3999#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4000 if (SvREADONLY(sv)) {
4001 /* At this point I believe I should acquire a global SV mutex. */
4002 if (SvFAKE(sv)) {
b64e5050 4003 const char * const pvx = SvPVX_const(sv);
a28509cc
AL
4004 const STRLEN len = SvLEN(sv);
4005 const STRLEN cur = SvCUR(sv);
a28509cc 4006 SV * const next = SV_COW_NEXT_SV(sv); /* next COW sv in the loop. */
46187eeb
NC
4007 if (DEBUG_C_TEST) {
4008 PerlIO_printf(Perl_debug_log,
4009 "Copy on write: Force normal %ld\n",
4010 (long) flags);
e419cbc5 4011 sv_dump(sv);
46187eeb 4012 }
765f542d
NC
4013 SvFAKE_off(sv);
4014 SvREADONLY_off(sv);
9f653bb5 4015 /* This SV doesn't own the buffer, so need to Newx() a new one: */
6136c704 4016 SvPV_set(sv, NULL);
87a1ef3d 4017 SvLEN_set(sv, 0);
765f542d
NC
4018 if (flags & SV_COW_DROP_PV) {
4019 /* OK, so we don't need to copy our buffer. */
4020 SvPOK_off(sv);
4021 } else {
4022 SvGROW(sv, cur + 1);
4023 Move(pvx,SvPVX(sv),cur,char);
87a1ef3d 4024 SvCUR_set(sv, cur);
765f542d
NC
4025 *SvEND(sv) = '\0';
4026 }
bdd68bc3 4027 sv_release_COW(sv, pvx, len, next);
46187eeb 4028 if (DEBUG_C_TEST) {
e419cbc5 4029 sv_dump(sv);
46187eeb 4030 }
765f542d 4031 }
923e4eb5 4032 else if (IN_PERL_RUNTIME)
765f542d
NC
4033 Perl_croak(aTHX_ PL_no_modify);
4034 /* At this point I believe that I can drop the global SV mutex. */
4035 }
4036#else
2213622d 4037 if (SvREADONLY(sv)) {
1c846c1f 4038 if (SvFAKE(sv)) {
b64e5050 4039 const char * const pvx = SvPVX_const(sv);
66a1b24b 4040 const STRLEN len = SvCUR(sv);
10bcdfd6
NC
4041 SvFAKE_off(sv);
4042 SvREADONLY_off(sv);
bd61b366 4043 SvPV_set(sv, NULL);
66a1b24b 4044 SvLEN_set(sv, 0);
1c846c1f 4045 SvGROW(sv, len + 1);
706aa1c9 4046 Move(pvx,SvPVX(sv),len,char);
1c846c1f 4047 *SvEND(sv) = '\0';
bdd68bc3 4048 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
1c846c1f 4049 }
923e4eb5 4050 else if (IN_PERL_RUNTIME)
cea2e8a9 4051 Perl_croak(aTHX_ PL_no_modify);
0f15f207 4052 }
765f542d 4053#endif
2213622d 4054 if (SvROK(sv))
840a7b70 4055 sv_unref_flags(sv, flags);
6fc92669
GS
4056 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4057 sv_unglob(sv);
0f15f207 4058}
1c846c1f 4059
645c22ef 4060/*
954c1994
GS
4061=for apidoc sv_chop
4062
1c846c1f 4063Efficient removal of characters from the beginning of the string buffer.
954c1994
GS
4064SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4065the string buffer. The C<ptr> becomes the first character of the adjusted
645c22ef 4066string. Uses the "OOK hack".
3f7c398e 4067Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
31869a79 4068refer to the same chunk of data.
954c1994
GS
4069
4070=cut
4071*/
4072
79072805 4073void
f54cb97a 4074Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
79072805
LW
4075{
4076 register STRLEN delta;
a0d0e21e 4077 if (!ptr || !SvPOKp(sv))
79072805 4078 return;
3f7c398e 4079 delta = ptr - SvPVX_const(sv);
2213622d 4080 SV_CHECK_THINKFIRST(sv);
79072805
LW
4081 if (SvTYPE(sv) < SVt_PVIV)
4082 sv_upgrade(sv,SVt_PVIV);
4083
4084 if (!SvOOK(sv)) {
50483b2c 4085 if (!SvLEN(sv)) { /* make copy of shared string */
3f7c398e 4086 const char *pvx = SvPVX_const(sv);
a28509cc 4087 const STRLEN len = SvCUR(sv);
50483b2c 4088 SvGROW(sv, len + 1);
706aa1c9 4089 Move(pvx,SvPVX(sv),len,char);
50483b2c
JD
4090 *SvEND(sv) = '\0';
4091 }
45977657 4092 SvIV_set(sv, 0);
a4bfb290
AB
4093 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4094 and we do that anyway inside the SvNIOK_off
4095 */
7a5fa8a2 4096 SvFLAGS(sv) |= SVf_OOK;
79072805 4097 }
a4bfb290 4098 SvNIOK_off(sv);
b162af07
SP
4099 SvLEN_set(sv, SvLEN(sv) - delta);
4100 SvCUR_set(sv, SvCUR(sv) - delta);
f880fe2f 4101 SvPV_set(sv, SvPVX(sv) + delta);
45977657 4102 SvIV_set(sv, SvIVX(sv) + delta);
79072805
LW
4103}
4104
954c1994
GS
4105/*
4106=for apidoc sv_catpvn
4107
4108Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4109C<len> indicates number of bytes to copy. If the SV has the UTF-8
4110status set, then the bytes appended should be valid UTF-8.
d5ce4a7c 4111Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
954c1994 4112
8d6d96c1
HS
4113=for apidoc sv_catpvn_flags
4114
4115Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4116C<len> indicates number of bytes to copy. If the SV has the UTF-8
4117status set, then the bytes appended should be valid UTF-8.
8d6d96c1
HS
4118If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4119appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4120in terms of this function.
4121
4122=cut
4123*/
4124
4125void
4126Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4127{
97aff369 4128 dVAR;
8d6d96c1 4129 STRLEN dlen;
fabdb6c0 4130 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
8d6d96c1 4131
8d6d96c1
HS
4132 SvGROW(dsv, dlen + slen + 1);
4133 if (sstr == dstr)
3f7c398e 4134 sstr = SvPVX_const(dsv);
8d6d96c1 4135 Move(sstr, SvPVX(dsv) + dlen, slen, char);
b162af07 4136 SvCUR_set(dsv, SvCUR(dsv) + slen);
8d6d96c1
HS
4137 *SvEND(dsv) = '\0';
4138 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4139 SvTAINT(dsv);
bddd5118
NC
4140 if (flags & SV_SMAGIC)
4141 SvSETMAGIC(dsv);
79072805
LW
4142}
4143
954c1994 4144/*
954c1994
GS
4145=for apidoc sv_catsv
4146
13e8c8e3
JH
4147Concatenates the string from SV C<ssv> onto the end of the string in
4148SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4149not 'set' magic. See C<sv_catsv_mg>.
954c1994 4150
8d6d96c1
HS
4151=for apidoc sv_catsv_flags
4152
4153Concatenates the string from SV C<ssv> onto the end of the string in
4154SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4155bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4156and C<sv_catsv_nomg> are implemented in terms of this function.
4157
4158=cut */
4159
ef50df4b 4160void
8d6d96c1 4161Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
79072805 4162{
97aff369 4163 dVAR;
bddd5118 4164 if (ssv) {
00b6aa41
AL
4165 STRLEN slen;
4166 const char *spv = SvPV_const(ssv, slen);
4167 if (spv) {
bddd5118
NC
4168 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4169 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4170 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4171 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4172 dsv->sv_flags doesn't have that bit set.
4fd84b44 4173 Andy Dougherty 12 Oct 2001
bddd5118
NC
4174 */
4175 const I32 sutf8 = DO_UTF8(ssv);
4176 I32 dutf8;
13e8c8e3 4177
bddd5118
NC
4178 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4179 mg_get(dsv);
4180 dutf8 = DO_UTF8(dsv);
8d6d96c1 4181
bddd5118
NC
4182 if (dutf8 != sutf8) {
4183 if (dutf8) {
4184 /* Not modifying source SV, so taking a temporary copy. */
00b6aa41 4185 SV* const csv = sv_2mortal(newSVpvn(spv, slen));
13e8c8e3 4186
bddd5118
NC
4187 sv_utf8_upgrade(csv);
4188 spv = SvPV_const(csv, slen);
4189 }
4190 else
4191 sv_utf8_upgrade_nomg(dsv);
13e8c8e3 4192 }
bddd5118 4193 sv_catpvn_nomg(dsv, spv, slen);
e84ff256 4194 }
560a288e 4195 }
bddd5118
NC
4196 if (flags & SV_SMAGIC)
4197 SvSETMAGIC(dsv);
79072805
LW
4198}
4199
954c1994 4200/*
954c1994
GS
4201=for apidoc sv_catpv
4202
4203Concatenates the string onto the end of the string which is in the SV.
1e54db1a
JH
4204If the SV has the UTF-8 status set, then the bytes appended should be
4205valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
954c1994 4206
d5ce4a7c 4207=cut */
954c1994 4208
ef50df4b 4209void
0c981600 4210Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
79072805 4211{
97aff369 4212 dVAR;
79072805 4213 register STRLEN len;
463ee0b2 4214 STRLEN tlen;
748a9306 4215 char *junk;
79072805 4216
0c981600 4217 if (!ptr)
79072805 4218 return;
748a9306 4219 junk = SvPV_force(sv, tlen);
0c981600 4220 len = strlen(ptr);
463ee0b2 4221 SvGROW(sv, tlen + len + 1);
0c981600 4222 if (ptr == junk)
3f7c398e 4223 ptr = SvPVX_const(sv);
0c981600 4224 Move(ptr,SvPVX(sv)+tlen,len+1,char);
b162af07 4225 SvCUR_set(sv, SvCUR(sv) + len);
d41ff1b8 4226 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4227 SvTAINT(sv);
79072805
LW
4228}
4229
954c1994
GS
4230/*
4231=for apidoc sv_catpv_mg
4232
4233Like C<sv_catpv>, but also handles 'set' magic.
4234
4235=cut
4236*/
4237
ef50df4b 4238void
0c981600 4239Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
ef50df4b 4240{
0c981600 4241 sv_catpv(sv,ptr);
ef50df4b
GS
4242 SvSETMAGIC(sv);
4243}
4244
645c22ef
DM
4245/*
4246=for apidoc newSV
4247
561b68a9
SH
4248Creates a new SV. A non-zero C<len> parameter indicates the number of
4249bytes of preallocated string space the SV should have. An extra byte for a
4250trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4251space is allocated.) The reference count for the new SV is set to 1.
4252
4253In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4254parameter, I<x>, a debug aid which allowed callers to identify themselves.
4255This aid has been superseded by a new build option, PERL_MEM_LOG (see
4256L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4257modules supporting older perls.
645c22ef
DM
4258
4259=cut
4260*/
4261
79072805 4262SV *
864dbfa3 4263Perl_newSV(pTHX_ STRLEN len)
79072805 4264{
97aff369 4265 dVAR;
79072805 4266 register SV *sv;
1c846c1f 4267
4561caa4 4268 new_SV(sv);
79072805
LW
4269 if (len) {
4270 sv_upgrade(sv, SVt_PV);
4271 SvGROW(sv, len + 1);
4272 }
4273 return sv;
4274}
954c1994 4275/*
92110913 4276=for apidoc sv_magicext
954c1994 4277
68795e93 4278Adds magic to an SV, upgrading it if necessary. Applies the
2d8d5d5a 4279supplied vtable and returns a pointer to the magic added.
92110913 4280
2d8d5d5a
SH
4281Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4282In particular, you can add magic to SvREADONLY SVs, and add more than
4283one instance of the same 'how'.
645c22ef 4284
2d8d5d5a
SH
4285If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4286stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4287special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4288to contain an C<SV*> and is stored as-is with its REFCNT incremented.
92110913 4289
2d8d5d5a 4290(This is now used as a subroutine by C<sv_magic>.)
954c1994
GS
4291
4292=cut
4293*/
92110913 4294MAGIC *
92e67595 4295Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
92110913 4296 const char* name, I32 namlen)
79072805 4297{
97aff369 4298 dVAR;
79072805 4299 MAGIC* mg;
68795e93 4300
92110913 4301 if (SvTYPE(sv) < SVt_PVMG) {
862a34c6 4302 SvUPGRADE(sv, SVt_PVMG);
463ee0b2 4303 }
a02a5408 4304 Newxz(mg, 1, MAGIC);
79072805 4305 mg->mg_moremagic = SvMAGIC(sv);
b162af07 4306 SvMAGIC_set(sv, mg);
75f9d97a 4307
05f95b08
SB
4308 /* Sometimes a magic contains a reference loop, where the sv and
4309 object refer to each other. To prevent a reference loop that
4310 would prevent such objects being freed, we look for such loops
4311 and if we find one we avoid incrementing the object refcount.
87f0b213
JH
4312
4313 Note we cannot do this to avoid self-tie loops as intervening RV must
b5ccf5f2 4314 have its REFCNT incremented to keep it in existence.
87f0b213
JH
4315
4316 */
14befaf4
DM
4317 if (!obj || obj == sv ||
4318 how == PERL_MAGIC_arylen ||
4319 how == PERL_MAGIC_qr ||
8d2f4536 4320 how == PERL_MAGIC_symtab ||
75f9d97a
JH
4321 (SvTYPE(obj) == SVt_PVGV &&
4322 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4323 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
2628be26 4324 GvFORM(obj) == (CV*)sv)))
75f9d97a 4325 {
8990e307 4326 mg->mg_obj = obj;
75f9d97a 4327 }
85e6fe83 4328 else {
b37c2d43 4329 mg->mg_obj = SvREFCNT_inc_simple(obj);
85e6fe83
LW
4330 mg->mg_flags |= MGf_REFCOUNTED;
4331 }
b5ccf5f2
YST
4332
4333 /* Normal self-ties simply pass a null object, and instead of
4334 using mg_obj directly, use the SvTIED_obj macro to produce a
4335 new RV as needed. For glob "self-ties", we are tieing the PVIO
4336 with an RV obj pointing to the glob containing the PVIO. In
4337 this case, to avoid a reference loop, we need to weaken the
4338 reference.
4339 */
4340
4341 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4342 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4343 {
4344 sv_rvweaken(obj);
4345 }
4346
79072805 4347 mg->mg_type = how;
565764a8 4348 mg->mg_len = namlen;
9cbac4c7 4349 if (name) {
92110913 4350 if (namlen > 0)
1edc1566 4351 mg->mg_ptr = savepvn(name, namlen);
c6ee37c5 4352 else if (namlen == HEf_SVKEY)
b37c2d43 4353 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV*)name);
68795e93 4354 else
92110913 4355 mg->mg_ptr = (char *) name;
9cbac4c7 4356 }
92110913 4357 mg->mg_virtual = vtable;
68795e93 4358
92110913
NIS
4359 mg_magical(sv);
4360 if (SvGMAGICAL(sv))
4361 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4362 return mg;
4363}
4364
4365/*
4366=for apidoc sv_magic
1c846c1f 4367
92110913
NIS
4368Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4369then adds a new magic item of type C<how> to the head of the magic list.
4370
2d8d5d5a
SH
4371See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4372handling of the C<name> and C<namlen> arguments.
4373
4509d3fb
SB
4374You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4375to add more than one instance of the same 'how'.
4376
92110913
NIS
4377=cut
4378*/
4379
4380void
4381Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
68795e93 4382{
97aff369 4383 dVAR;
92e67595 4384 MGVTBL *vtable;
92110913 4385 MAGIC* mg;
92110913 4386
f8c7b90f 4387#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4388 if (SvIsCOW(sv))
4389 sv_force_normal_flags(sv, 0);
4390#endif
92110913 4391 if (SvREADONLY(sv)) {
d8084ca5
DM
4392 if (
4393 /* its okay to attach magic to shared strings; the subsequent
4394 * upgrade to PVMG will unshare the string */
4395 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4396
4397 && IN_PERL_RUNTIME
92110913
NIS
4398 && how != PERL_MAGIC_regex_global
4399 && how != PERL_MAGIC_bm
4400 && how != PERL_MAGIC_fm
4401 && how != PERL_MAGIC_sv
e6469971 4402 && how != PERL_MAGIC_backref
92110913
NIS
4403 )
4404 {
4405 Perl_croak(aTHX_ PL_no_modify);
4406 }
4407 }
4408 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4409 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
68795e93
NIS
4410 /* sv_magic() refuses to add a magic of the same 'how' as an
4411 existing one
92110913 4412 */
2a509ed3 4413 if (how == PERL_MAGIC_taint) {
92110913 4414 mg->mg_len |= 1;
2a509ed3
NC
4415 /* Any scalar which already had taint magic on which someone
4416 (erroneously?) did SvIOK_on() or similar will now be
4417 incorrectly sporting public "OK" flags. */
4418 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4419 }
92110913
NIS
4420 return;
4421 }
4422 }
68795e93 4423
79072805 4424 switch (how) {
14befaf4 4425 case PERL_MAGIC_sv:
92110913 4426 vtable = &PL_vtbl_sv;
79072805 4427 break;
14befaf4 4428 case PERL_MAGIC_overload:
92110913 4429 vtable = &PL_vtbl_amagic;
a0d0e21e 4430 break;
14befaf4 4431 case PERL_MAGIC_overload_elem:
92110913 4432 vtable = &PL_vtbl_amagicelem;
a0d0e21e 4433 break;
14befaf4 4434 case PERL_MAGIC_overload_table:
92110913 4435 vtable = &PL_vtbl_ovrld;
a0d0e21e 4436 break;
14befaf4 4437 case PERL_MAGIC_bm:
92110913 4438 vtable = &PL_vtbl_bm;
79072805 4439 break;
14befaf4 4440 case PERL_MAGIC_regdata:
92110913 4441 vtable = &PL_vtbl_regdata;
6cef1e77 4442 break;
14befaf4 4443 case PERL_MAGIC_regdatum:
92110913 4444 vtable = &PL_vtbl_regdatum;
6cef1e77 4445 break;
14befaf4 4446 case PERL_MAGIC_env:
92110913 4447 vtable = &PL_vtbl_env;
79072805 4448 break;
14befaf4 4449 case PERL_MAGIC_fm:
92110913 4450 vtable = &PL_vtbl_fm;
55497cff 4451 break;
14befaf4 4452 case PERL_MAGIC_envelem:
92110913 4453 vtable = &PL_vtbl_envelem;
79072805 4454 break;
14befaf4 4455 case PERL_MAGIC_regex_global:
92110913 4456 vtable = &PL_vtbl_mglob;
93a17b20 4457 break;
14befaf4 4458 case PERL_MAGIC_isa:
92110913 4459 vtable = &PL_vtbl_isa;
463ee0b2 4460 break;
14befaf4 4461 case PERL_MAGIC_isaelem:
92110913 4462 vtable = &PL_vtbl_isaelem;
463ee0b2 4463 break;
14befaf4 4464 case PERL_MAGIC_nkeys:
92110913 4465 vtable = &PL_vtbl_nkeys;
16660edb 4466 break;
14befaf4 4467 case PERL_MAGIC_dbfile:
aec46f14 4468 vtable = NULL;
93a17b20 4469 break;
14befaf4 4470 case PERL_MAGIC_dbline:
92110913 4471 vtable = &PL_vtbl_dbline;
79072805 4472 break;
36477c24 4473#ifdef USE_LOCALE_COLLATE
14befaf4 4474 case PERL_MAGIC_collxfrm:
92110913 4475 vtable = &PL_vtbl_collxfrm;
bbce6d69 4476 break;
36477c24 4477#endif /* USE_LOCALE_COLLATE */
14befaf4 4478 case PERL_MAGIC_tied:
92110913 4479 vtable = &PL_vtbl_pack;
463ee0b2 4480 break;
14befaf4
DM
4481 case PERL_MAGIC_tiedelem:
4482 case PERL_MAGIC_tiedscalar:
92110913 4483 vtable = &PL_vtbl_packelem;
463ee0b2 4484 break;
14befaf4 4485 case PERL_MAGIC_qr:
92110913 4486 vtable = &PL_vtbl_regexp;
c277df42 4487 break;
14befaf4 4488 case PERL_MAGIC_sig:
92110913 4489 vtable = &PL_vtbl_sig;
79072805 4490 break;
14befaf4 4491 case PERL_MAGIC_sigelem:
92110913 4492 vtable = &PL_vtbl_sigelem;
79072805 4493 break;
14befaf4 4494 case PERL_MAGIC_taint:
92110913 4495 vtable = &PL_vtbl_taint;
463ee0b2 4496 break;
14befaf4 4497 case PERL_MAGIC_uvar:
92110913 4498 vtable = &PL_vtbl_uvar;
79072805 4499 break;
14befaf4 4500 case PERL_MAGIC_vec:
92110913 4501 vtable = &PL_vtbl_vec;
79072805 4502 break;
a3874608 4503 case PERL_MAGIC_arylen_p:
bfcb3514 4504 case PERL_MAGIC_rhash:
8d2f4536 4505 case PERL_MAGIC_symtab:
ece467f9 4506 case PERL_MAGIC_vstring:
aec46f14 4507 vtable = NULL;
ece467f9 4508 break;
7e8c5dac
HS
4509 case PERL_MAGIC_utf8:
4510 vtable = &PL_vtbl_utf8;
4511 break;
14befaf4 4512 case PERL_MAGIC_substr:
92110913 4513 vtable = &PL_vtbl_substr;
79072805 4514 break;
14befaf4 4515 case PERL_MAGIC_defelem:
92110913 4516 vtable = &PL_vtbl_defelem;
5f05dabc 4517 break;
14befaf4 4518 case PERL_MAGIC_arylen:
92110913 4519 vtable = &PL_vtbl_arylen;
79072805 4520 break;
14befaf4 4521 case PERL_MAGIC_pos:
92110913 4522 vtable = &PL_vtbl_pos;
a0d0e21e 4523 break;
14befaf4 4524 case PERL_MAGIC_backref:
92110913 4525 vtable = &PL_vtbl_backref;
810b8aa5 4526 break;
14befaf4
DM
4527 case PERL_MAGIC_ext:
4528 /* Reserved for use by extensions not perl internals. */
4633a7c4
LW
4529 /* Useful for attaching extension internal data to perl vars. */
4530 /* Note that multiple extensions may clash if magical scalars */
4531 /* etc holding private data from one are passed to another. */
aec46f14 4532 vtable = NULL;
a0d0e21e 4533 break;
79072805 4534 default:
14befaf4 4535 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
463ee0b2 4536 }
68795e93 4537
92110913 4538 /* Rest of work is done else where */
aec46f14 4539 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
68795e93 4540
92110913
NIS
4541 switch (how) {
4542 case PERL_MAGIC_taint:
4543 mg->mg_len = 1;
4544 break;
4545 case PERL_MAGIC_ext:
4546 case PERL_MAGIC_dbfile:
4547 SvRMAGICAL_on(sv);
4548 break;
4549 }
463ee0b2
LW
4550}
4551
c461cf8f
JH
4552/*
4553=for apidoc sv_unmagic
4554
645c22ef 4555Removes all magic of type C<type> from an SV.
c461cf8f
JH
4556
4557=cut
4558*/
4559
463ee0b2 4560int
864dbfa3 4561Perl_sv_unmagic(pTHX_ SV *sv, int type)
463ee0b2
LW
4562{
4563 MAGIC* mg;
4564 MAGIC** mgp;
91bba347 4565 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
463ee0b2 4566 return 0;
064cf529 4567 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
463ee0b2
LW
4568 for (mg = *mgp; mg; mg = *mgp) {
4569 if (mg->mg_type == type) {
e1ec3a88 4570 const MGVTBL* const vtbl = mg->mg_virtual;
463ee0b2 4571 *mgp = mg->mg_moremagic;
1d7c1841 4572 if (vtbl && vtbl->svt_free)
fc0dc3b3 4573 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
14befaf4 4574 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
92110913 4575 if (mg->mg_len > 0)
1edc1566 4576 Safefree(mg->mg_ptr);
565764a8 4577 else if (mg->mg_len == HEf_SVKEY)
1edc1566 4578 SvREFCNT_dec((SV*)mg->mg_ptr);
d2923cdd 4579 else if (mg->mg_type == PERL_MAGIC_utf8)
7e8c5dac 4580 Safefree(mg->mg_ptr);
9cbac4c7 4581 }
a0d0e21e
LW
4582 if (mg->mg_flags & MGf_REFCOUNTED)
4583 SvREFCNT_dec(mg->mg_obj);
463ee0b2
LW
4584 Safefree(mg);
4585 }
4586 else
4587 mgp = &mg->mg_moremagic;
79072805 4588 }
91bba347 4589 if (!SvMAGIC(sv)) {
463ee0b2 4590 SvMAGICAL_off(sv);
c268c2a6 4591 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
86f55936 4592 SvMAGIC_set(sv, NULL);
463ee0b2
LW
4593 }
4594
4595 return 0;
79072805
LW
4596}
4597
c461cf8f
JH
4598/*
4599=for apidoc sv_rvweaken
4600
645c22ef
DM
4601Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4602referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4603push a back-reference to this RV onto the array of backreferences
4604associated with that magic.
c461cf8f
JH
4605
4606=cut
4607*/
4608
810b8aa5 4609SV *
864dbfa3 4610Perl_sv_rvweaken(pTHX_ SV *sv)
810b8aa5
GS
4611{
4612 SV *tsv;
4613 if (!SvOK(sv)) /* let undefs pass */
4614 return sv;
4615 if (!SvROK(sv))
cea2e8a9 4616 Perl_croak(aTHX_ "Can't weaken a nonreference");
810b8aa5 4617 else if (SvWEAKREF(sv)) {
810b8aa5 4618 if (ckWARN(WARN_MISC))
9014280d 4619 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
810b8aa5
GS
4620 return sv;
4621 }
4622 tsv = SvRV(sv);
e15faf7d 4623 Perl_sv_add_backref(aTHX_ tsv, sv);
810b8aa5 4624 SvWEAKREF_on(sv);
1c846c1f 4625 SvREFCNT_dec(tsv);
810b8aa5
GS
4626 return sv;
4627}
4628
645c22ef
DM
4629/* Give tsv backref magic if it hasn't already got it, then push a
4630 * back-reference to sv onto the array associated with the backref magic.
4631 */
4632
e15faf7d
NC
4633void
4634Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
810b8aa5 4635{
97aff369 4636 dVAR;
810b8aa5 4637 AV *av;
86f55936
NC
4638
4639 if (SvTYPE(tsv) == SVt_PVHV) {
4640 AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4641
4642 av = *avp;
4643 if (!av) {
4644 /* There is no AV in the offical place - try a fixup. */
4645 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
4646
4647 if (mg) {
4648 /* Aha. They've got it stowed in magic. Bring it back. */
4649 av = (AV*)mg->mg_obj;
4650 /* Stop mg_free decreasing the refernce count. */
4651 mg->mg_obj = NULL;
4652 /* Stop mg_free even calling the destructor, given that
4653 there's no AV to free up. */
4654 mg->mg_virtual = 0;
4655 sv_unmagic(tsv, PERL_MAGIC_backref);
4656 } else {
4657 av = newAV();
4658 AvREAL_off(av);
b37c2d43 4659 SvREFCNT_inc_simple_void(av);
86f55936
NC
4660 }
4661 *avp = av;
4662 }
4663 } else {
4664 const MAGIC *const mg
4665 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4666 if (mg)
4667 av = (AV*)mg->mg_obj;
4668 else {
4669 av = newAV();
4670 AvREAL_off(av);
4671 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4672 /* av now has a refcnt of 2, which avoids it getting freed
4673 * before us during global cleanup. The extra ref is removed
4674 * by magic_killbackrefs() when tsv is being freed */
4675 }
810b8aa5 4676 }
d91d49e8 4677 if (AvFILLp(av) >= AvMAX(av)) {
d91d49e8
MM
4678 av_extend(av, AvFILLp(av)+1);
4679 }
4680 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
810b8aa5
GS
4681}
4682
645c22ef
DM
4683/* delete a back-reference to ourselves from the backref magic associated
4684 * with the SV we point to.
4685 */
4686
1c846c1f 4687STATIC void
e15faf7d 4688S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
810b8aa5 4689{
97aff369 4690 dVAR;
86f55936 4691 AV *av = NULL;
810b8aa5
GS
4692 SV **svp;
4693 I32 i;
86f55936
NC
4694
4695 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
4696 av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
5b285ea4
NC
4697 /* We mustn't attempt to "fix up" the hash here by moving the
4698 backreference array back to the hv_aux structure, as that is stored
4699 in the main HvARRAY(), and hfreentries assumes that no-one
4700 reallocates HvARRAY() while it is running. */
86f55936
NC
4701 }
4702 if (!av) {
4703 const MAGIC *const mg
4704 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4705 if (mg)
4706 av = (AV *)mg->mg_obj;
4707 }
4708 if (!av) {
e15faf7d
NC
4709 if (PL_in_clean_all)
4710 return;
cea2e8a9 4711 Perl_croak(aTHX_ "panic: del_backref");
86f55936
NC
4712 }
4713
4714 if (SvIS_FREED(av))
4715 return;
4716
810b8aa5 4717 svp = AvARRAY(av);
6a76db8b
NC
4718 /* We shouldn't be in here more than once, but for paranoia reasons lets
4719 not assume this. */
4720 for (i = AvFILLp(av); i >= 0; i--) {
4721 if (svp[i] == sv) {
4722 const SSize_t fill = AvFILLp(av);
4723 if (i != fill) {
4724 /* We weren't the last entry.
4725 An unordered list has this property that you can take the
4726 last element off the end to fill the hole, and it's still
4727 an unordered list :-)
4728 */
4729 svp[i] = svp[fill];
4730 }
a0714e2c 4731 svp[fill] = NULL;
6a76db8b
NC
4732 AvFILLp(av) = fill - 1;
4733 }
4734 }
810b8aa5
GS
4735}
4736
86f55936
NC
4737int
4738Perl_sv_kill_backrefs(pTHX_ SV *sv, AV *av)
4739{
4740 SV **svp = AvARRAY(av);
4741
4742 PERL_UNUSED_ARG(sv);
4743
4744 /* Not sure why the av can get freed ahead of its sv, but somehow it does
4745 in ext/B/t/bytecode.t test 15 (involving print <DATA>) */
4746 if (svp && !SvIS_FREED(av)) {
4747 SV *const *const last = svp + AvFILLp(av);
4748
4749 while (svp <= last) {
4750 if (*svp) {
4751 SV *const referrer = *svp;
4752 if (SvWEAKREF(referrer)) {
4753 /* XXX Should we check that it hasn't changed? */
4754 SvRV_set(referrer, 0);
4755 SvOK_off(referrer);
4756 SvWEAKREF_off(referrer);
4757 } else if (SvTYPE(referrer) == SVt_PVGV ||
4758 SvTYPE(referrer) == SVt_PVLV) {
4759 /* You lookin' at me? */
4760 assert(GvSTASH(referrer));
4761 assert(GvSTASH(referrer) == (HV*)sv);
4762 GvSTASH(referrer) = 0;
4763 } else {
4764 Perl_croak(aTHX_
4765 "panic: magic_killbackrefs (flags=%"UVxf")",
4766 (UV)SvFLAGS(referrer));
4767 }
4768
a0714e2c 4769 *svp = NULL;
86f55936
NC
4770 }
4771 svp++;
4772 }
4773 }
4774 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
4775 return 0;
4776}
4777
954c1994
GS
4778/*
4779=for apidoc sv_insert
4780
4781Inserts a string at the specified offset/length within the SV. Similar to
4782the Perl substr() function.
4783
4784=cut
4785*/
4786
79072805 4787void
e1ec3a88 4788Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
79072805 4789{
97aff369 4790 dVAR;
79072805
LW
4791 register char *big;
4792 register char *mid;
4793 register char *midend;
4794 register char *bigend;
4795 register I32 i;
6ff81951 4796 STRLEN curlen;
1c846c1f 4797
79072805 4798
8990e307 4799 if (!bigstr)
cea2e8a9 4800 Perl_croak(aTHX_ "Can't modify non-existent substring");
6ff81951 4801 SvPV_force(bigstr, curlen);
60fa28ff 4802 (void)SvPOK_only_UTF8(bigstr);
6ff81951
GS
4803 if (offset + len > curlen) {
4804 SvGROW(bigstr, offset+len+1);
93524f2b 4805 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6ff81951
GS
4806 SvCUR_set(bigstr, offset+len);
4807 }
79072805 4808
69b47968 4809 SvTAINT(bigstr);
79072805
LW
4810 i = littlelen - len;
4811 if (i > 0) { /* string might grow */
a0d0e21e 4812 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
79072805
LW
4813 mid = big + offset + len;
4814 midend = bigend = big + SvCUR(bigstr);
4815 bigend += i;
4816 *bigend = '\0';
4817 while (midend > mid) /* shove everything down */
4818 *--bigend = *--midend;
4819 Move(little,big+offset,littlelen,char);
b162af07 4820 SvCUR_set(bigstr, SvCUR(bigstr) + i);
79072805
LW
4821 SvSETMAGIC(bigstr);
4822 return;
4823 }
4824 else if (i == 0) {
463ee0b2 4825 Move(little,SvPVX(bigstr)+offset,len,char);
79072805
LW
4826 SvSETMAGIC(bigstr);
4827 return;
4828 }
4829
463ee0b2 4830 big = SvPVX(bigstr);
79072805
LW
4831 mid = big + offset;
4832 midend = mid + len;
4833 bigend = big + SvCUR(bigstr);
4834
4835 if (midend > bigend)
cea2e8a9 4836 Perl_croak(aTHX_ "panic: sv_insert");
79072805
LW
4837
4838 if (mid - big > bigend - midend) { /* faster to shorten from end */
4839 if (littlelen) {
4840 Move(little, mid, littlelen,char);
4841 mid += littlelen;
4842 }
4843 i = bigend - midend;
4844 if (i > 0) {
4845 Move(midend, mid, i,char);
4846 mid += i;
4847 }
4848 *mid = '\0';
4849 SvCUR_set(bigstr, mid - big);
4850 }
155aba94 4851 else if ((i = mid - big)) { /* faster from front */
79072805
LW
4852 midend -= littlelen;
4853 mid = midend;
4854 sv_chop(bigstr,midend-i);
4855 big += i;
4856 while (i--)
4857 *--midend = *--big;
4858 if (littlelen)
4859 Move(little, mid, littlelen,char);
4860 }
4861 else if (littlelen) {
4862 midend -= littlelen;
4863 sv_chop(bigstr,midend);
4864 Move(little,midend,littlelen,char);
4865 }
4866 else {
4867 sv_chop(bigstr,midend);
4868 }
4869 SvSETMAGIC(bigstr);
4870}
4871
c461cf8f
JH
4872/*
4873=for apidoc sv_replace
4874
4875Make the first argument a copy of the second, then delete the original.
645c22ef
DM
4876The target SV physically takes over ownership of the body of the source SV
4877and inherits its flags; however, the target keeps any magic it owns,
4878and any magic in the source is discarded.
ff276b08 4879Note that this is a rather specialist SV copying operation; most of the
645c22ef 4880time you'll want to use C<sv_setsv> or one of its many macro front-ends.
c461cf8f
JH
4881
4882=cut
4883*/
79072805
LW
4884
4885void
864dbfa3 4886Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
79072805 4887{
97aff369 4888 dVAR;
a3b680e6 4889 const U32 refcnt = SvREFCNT(sv);
765f542d 4890 SV_CHECK_THINKFIRST_COW_DROP(sv);
30e5c352 4891 if (SvREFCNT(nsv) != 1) {
7437becc 4892 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
30e5c352
NC
4893 UVuf " != 1)", (UV) SvREFCNT(nsv));
4894 }
93a17b20 4895 if (SvMAGICAL(sv)) {
a0d0e21e
LW
4896 if (SvMAGICAL(nsv))
4897 mg_free(nsv);
4898 else
4899 sv_upgrade(nsv, SVt_PVMG);
b162af07 4900 SvMAGIC_set(nsv, SvMAGIC(sv));
a0d0e21e 4901 SvFLAGS(nsv) |= SvMAGICAL(sv);
93a17b20 4902 SvMAGICAL_off(sv);
b162af07 4903 SvMAGIC_set(sv, NULL);
93a17b20 4904 }
79072805
LW
4905 SvREFCNT(sv) = 0;
4906 sv_clear(sv);
477f5d66 4907 assert(!SvREFCNT(sv));
fd0854ff
DM
4908#ifdef DEBUG_LEAKING_SCALARS
4909 sv->sv_flags = nsv->sv_flags;
4910 sv->sv_any = nsv->sv_any;
4911 sv->sv_refcnt = nsv->sv_refcnt;
f34d0642 4912 sv->sv_u = nsv->sv_u;
fd0854ff 4913#else
79072805 4914 StructCopy(nsv,sv,SV);
fd0854ff 4915#endif
7b2c381c
NC
4916 /* Currently could join these into one piece of pointer arithmetic, but
4917 it would be unclear. */
4918 if(SvTYPE(sv) == SVt_IV)
4919 SvANY(sv)
339049b0 4920 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
7b2c381c 4921 else if (SvTYPE(sv) == SVt_RV) {
339049b0 4922 SvANY(sv) = &sv->sv_u.svu_rv;
7b2c381c
NC
4923 }
4924
fd0854ff 4925
f8c7b90f 4926#ifdef PERL_OLD_COPY_ON_WRITE
d3d0e6f1
NC
4927 if (SvIsCOW_normal(nsv)) {
4928 /* We need to follow the pointers around the loop to make the
4929 previous SV point to sv, rather than nsv. */
4930 SV *next;
4931 SV *current = nsv;
4932 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
4933 assert(next);
4934 current = next;
3f7c398e 4935 assert(SvPVX_const(current) == SvPVX_const(nsv));
d3d0e6f1
NC
4936 }
4937 /* Make the SV before us point to the SV after us. */
4938 if (DEBUG_C_TEST) {
4939 PerlIO_printf(Perl_debug_log, "previous is\n");
4940 sv_dump(current);
a29f6d03
NC
4941 PerlIO_printf(Perl_debug_log,
4942 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
d3d0e6f1
NC
4943 (UV) SV_COW_NEXT_SV(current), (UV) sv);
4944 }
a29f6d03 4945 SV_COW_NEXT_SV_SET(current, sv);
d3d0e6f1
NC
4946 }
4947#endif
79072805 4948 SvREFCNT(sv) = refcnt;
1edc1566 4949 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
39cf41c2 4950 SvREFCNT(nsv) = 0;
463ee0b2 4951 del_SV(nsv);
79072805
LW
4952}
4953
c461cf8f
JH
4954/*
4955=for apidoc sv_clear
4956
645c22ef
DM
4957Clear an SV: call any destructors, free up any memory used by the body,
4958and free the body itself. The SV's head is I<not> freed, although
4959its type is set to all 1's so that it won't inadvertently be assumed
4960to be live during global destruction etc.
4961This function should only be called when REFCNT is zero. Most of the time
4962you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
4963instead.
c461cf8f
JH
4964
4965=cut
4966*/
4967
79072805 4968void
864dbfa3 4969Perl_sv_clear(pTHX_ register SV *sv)
79072805 4970{
27da23d5 4971 dVAR;
82bb6deb 4972 const U32 type = SvTYPE(sv);
8edfc514
NC
4973 const struct body_details *const sv_type_details
4974 = bodies_by_type + type;
82bb6deb 4975
79072805
LW
4976 assert(sv);
4977 assert(SvREFCNT(sv) == 0);
4978
d2a0f284
JC
4979 if (type <= SVt_IV) {
4980 /* See the comment in sv.h about the collusion between this early
4981 return and the overloading of the NULL and IV slots in the size
4982 table. */
82bb6deb 4983 return;
d2a0f284 4984 }
82bb6deb 4985
ed6116ce 4986 if (SvOBJECT(sv)) {
3280af22 4987 if (PL_defstash) { /* Still have a symbol table? */
39644a26 4988 dSP;
893645bd 4989 HV* stash;
d460ef45 4990 do {
b464bac0 4991 CV* destructor;
4e8e7886 4992 stash = SvSTASH(sv);
32251b26 4993 destructor = StashHANDLER(stash,DESTROY);
4e8e7886 4994 if (destructor) {
1b6737cc 4995 SV* const tmpref = newRV(sv);
5cc433a6 4996 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
4e8e7886 4997 ENTER;
e788e7d3 4998 PUSHSTACKi(PERLSI_DESTROY);
4e8e7886
GS
4999 EXTEND(SP, 2);
5000 PUSHMARK(SP);
5cc433a6 5001 PUSHs(tmpref);
4e8e7886 5002 PUTBACK;
44389ee9 5003 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7a5fa8a2
NIS
5004
5005
d3acc0f7 5006 POPSTACK;
3095d977 5007 SPAGAIN;
4e8e7886 5008 LEAVE;
5cc433a6
AB
5009 if(SvREFCNT(tmpref) < 2) {
5010 /* tmpref is not kept alive! */
5011 SvREFCNT(sv)--;
b162af07 5012 SvRV_set(tmpref, NULL);
5cc433a6
AB
5013 SvROK_off(tmpref);
5014 }
5015 SvREFCNT_dec(tmpref);
4e8e7886
GS
5016 }
5017 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
8ebc5c01 5018
6f44e0a4
JP
5019
5020 if (SvREFCNT(sv)) {
5021 if (PL_in_clean_objs)
cea2e8a9 5022 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
bfcb3514 5023 HvNAME_get(stash));
6f44e0a4
JP
5024 /* DESTROY gave object new lease on life */
5025 return;
5026 }
a0d0e21e 5027 }
4e8e7886 5028
a0d0e21e 5029 if (SvOBJECT(sv)) {
4e8e7886 5030 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
a0d0e21e 5031 SvOBJECT_off(sv); /* Curse the object. */
82bb6deb 5032 if (type != SVt_PVIO)
3280af22 5033 --PL_sv_objcount; /* XXX Might want something more general */
a0d0e21e 5034 }
463ee0b2 5035 }
82bb6deb 5036 if (type >= SVt_PVMG) {
e736a858
NC
5037 HV *ourstash;
5038 if ((type == SVt_PVMG || type == SVt_PVGV) &&
5039 (ourstash = OURSTASH(sv))) {
5040 SvREFCNT_dec(ourstash);
5041 } else if (SvMAGIC(sv))
524189f1 5042 mg_free(sv);
00b1698f 5043 if (type == SVt_PVMG && SvPAD_TYPED(sv))
524189f1
JH
5044 SvREFCNT_dec(SvSTASH(sv));
5045 }
82bb6deb 5046 switch (type) {
8990e307 5047 case SVt_PVIO:
df0bd2f4
GS
5048 if (IoIFP(sv) &&
5049 IoIFP(sv) != PerlIO_stdin() &&
5f05dabc 5050 IoIFP(sv) != PerlIO_stdout() &&
5051 IoIFP(sv) != PerlIO_stderr())
93578b34 5052 {
f2b5be74 5053 io_close((IO*)sv, FALSE);
93578b34 5054 }
1d7c1841 5055 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
1236053a 5056 PerlDir_close(IoDIRP(sv));
1d7c1841 5057 IoDIRP(sv) = (DIR*)NULL;
8990e307
LW
5058 Safefree(IoTOP_NAME(sv));
5059 Safefree(IoFMT_NAME(sv));
5060 Safefree(IoBOTTOM_NAME(sv));
82bb6deb 5061 goto freescalar;
79072805 5062 case SVt_PVBM:
a0d0e21e 5063 goto freescalar;
79072805 5064 case SVt_PVCV:
748a9306 5065 case SVt_PVFM:
85e6fe83 5066 cv_undef((CV*)sv);
a0d0e21e 5067 goto freescalar;
79072805 5068 case SVt_PVHV:
86f55936 5069 Perl_hv_kill_backrefs(aTHX_ (HV*)sv);
85e6fe83 5070 hv_undef((HV*)sv);
a0d0e21e 5071 break;
79072805 5072 case SVt_PVAV:
85e6fe83 5073 av_undef((AV*)sv);
a0d0e21e 5074 break;
02270b4e 5075 case SVt_PVLV:
dd28f7bb
DM
5076 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5077 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5078 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5079 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5080 }
5081 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5082 SvREFCNT_dec(LvTARG(sv));
02270b4e 5083 goto freescalar;
a0d0e21e 5084 case SVt_PVGV:
1edc1566 5085 gp_free((GV*)sv);
acda4c6a
NC
5086 if (GvNAME_HEK(sv)) {
5087 unshare_hek(GvNAME_HEK(sv));
5088 }
893645bd
NC
5089 /* If we're in a stash, we don't own a reference to it. However it does
5090 have a back reference to us, which needs to be cleared. */
5091 if (GvSTASH(sv))
5092 sv_del_backref((SV*)GvSTASH(sv), sv);
79072805 5093 case SVt_PVMG:
79072805
LW
5094 case SVt_PVNV:
5095 case SVt_PVIV:
a0d0e21e 5096 freescalar:
5228ca4e
NC
5097 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5098 if (SvOOK(sv)) {
93524f2b 5099 SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv));
5228ca4e
NC
5100 /* Don't even bother with turning off the OOK flag. */
5101 }
79072805 5102 case SVt_PV:
a0d0e21e 5103 case SVt_RV:
810b8aa5 5104 if (SvROK(sv)) {
b37c2d43 5105 SV * const target = SvRV(sv);
810b8aa5 5106 if (SvWEAKREF(sv))
e15faf7d 5107 sv_del_backref(target, sv);
810b8aa5 5108 else
e15faf7d 5109 SvREFCNT_dec(target);
810b8aa5 5110 }
f8c7b90f 5111#ifdef PERL_OLD_COPY_ON_WRITE
3f7c398e 5112 else if (SvPVX_const(sv)) {
765f542d
NC
5113 if (SvIsCOW(sv)) {
5114 /* I believe I need to grab the global SV mutex here and
5115 then recheck the COW status. */
46187eeb
NC
5116 if (DEBUG_C_TEST) {
5117 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
e419cbc5 5118 sv_dump(sv);
46187eeb 5119 }
bdd68bc3
NC
5120 sv_release_COW(sv, SvPVX_const(sv), SvLEN(sv),
5121 SV_COW_NEXT_SV(sv));
765f542d
NC
5122 /* And drop it here. */
5123 SvFAKE_off(sv);
5124 } else if (SvLEN(sv)) {
3f7c398e 5125 Safefree(SvPVX_const(sv));
765f542d
NC
5126 }
5127 }
5128#else
3f7c398e 5129 else if (SvPVX_const(sv) && SvLEN(sv))
94010e71 5130 Safefree(SvPVX_mutable(sv));
3f7c398e 5131 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
bdd68bc3 5132 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
1c846c1f
NIS
5133 SvFAKE_off(sv);
5134 }
765f542d 5135#endif
79072805
LW
5136 break;
5137 case SVt_NV:
79072805
LW
5138 break;
5139 }
5140
893645bd
NC
5141 SvFLAGS(sv) &= SVf_BREAK;
5142 SvFLAGS(sv) |= SVTYPEMASK;
5143
8edfc514 5144 if (sv_type_details->arena) {
b9502f15 5145 del_body(((char *)SvANY(sv) + sv_type_details->offset),
8edfc514
NC
5146 &PL_body_roots[type]);
5147 }
d2a0f284 5148 else if (sv_type_details->body_size) {
8edfc514
NC
5149 my_safefree(SvANY(sv));
5150 }
79072805
LW
5151}
5152
645c22ef
DM
5153/*
5154=for apidoc sv_newref
5155
5156Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5157instead.
5158
5159=cut
5160*/
5161
79072805 5162SV *
864dbfa3 5163Perl_sv_newref(pTHX_ SV *sv)
79072805 5164{
96a5add6 5165 PERL_UNUSED_CONTEXT;
463ee0b2 5166 if (sv)
4db098f4 5167 (SvREFCNT(sv))++;
79072805
LW
5168 return sv;
5169}
5170
c461cf8f
JH
5171/*
5172=for apidoc sv_free
5173
645c22ef
DM
5174Decrement an SV's reference count, and if it drops to zero, call
5175C<sv_clear> to invoke destructors and free up any memory used by
5176the body; finally, deallocate the SV's head itself.
5177Normally called via a wrapper macro C<SvREFCNT_dec>.
c461cf8f
JH
5178
5179=cut
5180*/
5181
79072805 5182void
864dbfa3 5183Perl_sv_free(pTHX_ SV *sv)
79072805 5184{
27da23d5 5185 dVAR;
79072805
LW
5186 if (!sv)
5187 return;
a0d0e21e
LW
5188 if (SvREFCNT(sv) == 0) {
5189 if (SvFLAGS(sv) & SVf_BREAK)
645c22ef
DM
5190 /* this SV's refcnt has been artificially decremented to
5191 * trigger cleanup */
a0d0e21e 5192 return;
3280af22 5193 if (PL_in_clean_all) /* All is fair */
1edc1566 5194 return;
d689ffdd
JP
5195 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5196 /* make sure SvREFCNT(sv)==0 happens very seldom */
5197 SvREFCNT(sv) = (~(U32)0)/2;
5198 return;
5199 }
41e4abd8 5200 if (ckWARN_d(WARN_INTERNAL)) {
d5dede04 5201 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc
SB
5202 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5203 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
41e4abd8
NC
5204#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5205 Perl_dump_sv_child(aTHX_ sv);
5206#endif
5207 }
79072805
LW
5208 return;
5209 }
4db098f4 5210 if (--(SvREFCNT(sv)) > 0)
8990e307 5211 return;
8c4d3c90
NC
5212 Perl_sv_free2(aTHX_ sv);
5213}
5214
5215void
5216Perl_sv_free2(pTHX_ SV *sv)
5217{
27da23d5 5218 dVAR;
463ee0b2
LW
5219#ifdef DEBUGGING
5220 if (SvTEMP(sv)) {
0453d815 5221 if (ckWARN_d(WARN_DEBUGGING))
9014280d 5222 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
472d47bc
SB
5223 "Attempt to free temp prematurely: SV 0x%"UVxf
5224 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
79072805 5225 return;
79072805 5226 }
463ee0b2 5227#endif
d689ffdd
JP
5228 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5229 /* make sure SvREFCNT(sv)==0 happens very seldom */
5230 SvREFCNT(sv) = (~(U32)0)/2;
5231 return;
5232 }
79072805 5233 sv_clear(sv);
477f5d66
CS
5234 if (! SvREFCNT(sv))
5235 del_SV(sv);
79072805
LW
5236}
5237
954c1994
GS
5238/*
5239=for apidoc sv_len
5240
645c22ef
DM
5241Returns the length of the string in the SV. Handles magic and type
5242coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
954c1994
GS
5243
5244=cut
5245*/
5246
79072805 5247STRLEN
864dbfa3 5248Perl_sv_len(pTHX_ register SV *sv)
79072805 5249{
463ee0b2 5250 STRLEN len;
79072805
LW
5251
5252 if (!sv)
5253 return 0;
5254
8990e307 5255 if (SvGMAGICAL(sv))
565764a8 5256 len = mg_length(sv);
8990e307 5257 else
4d84ee25 5258 (void)SvPV_const(sv, len);
463ee0b2 5259 return len;
79072805
LW
5260}
5261
c461cf8f
JH
5262/*
5263=for apidoc sv_len_utf8
5264
5265Returns the number of characters in the string in an SV, counting wide
1e54db1a 5266UTF-8 bytes as a single character. Handles magic and type coercion.
c461cf8f
JH
5267
5268=cut
5269*/
5270
7e8c5dac
HS
5271/*
5272 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
5273 * mg_ptr is used, by sv_pos_u2b(), see the comments of S_utf8_mg_pos_init().
5274 * (Note that the mg_len is not the length of the mg_ptr field.)
7a5fa8a2 5275 *
7e8c5dac
HS
5276 */
5277
a0ed51b3 5278STRLEN
864dbfa3 5279Perl_sv_len_utf8(pTHX_ register SV *sv)
a0ed51b3 5280{
a0ed51b3
LW
5281 if (!sv)
5282 return 0;
5283
a0ed51b3 5284 if (SvGMAGICAL(sv))
b76347f2 5285 return mg_length(sv);
a0ed51b3 5286 else
b76347f2 5287 {
26346457 5288 STRLEN len;
e62f0680 5289 const U8 *s = (U8*)SvPV_const(sv, len);
7e8c5dac 5290
26346457
NC
5291 if (PL_utf8cache) {
5292 STRLEN ulen;
5293 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
5294
5295 if (mg && mg->mg_len != -1) {
5296 ulen = mg->mg_len;
5297 if (PL_utf8cache < 0) {
5298 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
5299 if (real != ulen) {
5300 /* Need to turn the assertions off otherwise we may
5301 recurse infinitely while printing error messages.
5302 */
5303 SAVEI8(PL_utf8cache);
5304 PL_utf8cache = 0;
5305 Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVf
ec07b5e0 5306 " real %"UVf" for %"SVf,
26346457
NC
5307 (UV) ulen, (UV) real, sv);
5308 }
5309 }
5310 }
5311 else {
5312 ulen = Perl_utf8_length(aTHX_ s, s + len);
5313 if (!SvREADONLY(sv)) {
5314 if (!mg) {
5315 mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
5316 &PL_vtbl_utf8, 0, 0);
5317 }
cb9e20bb 5318 assert(mg);
26346457 5319 mg->mg_len = ulen;
cb9e20bb 5320 }
cb9e20bb 5321 }
26346457 5322 return ulen;
7e8c5dac 5323 }
26346457 5324 return Perl_utf8_length(aTHX_ s, s + len);
7e8c5dac
HS
5325 }
5326}
5327
5328/* S_utf8_mg_pos_init() is used to initialize the mg_ptr field of
5329 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5330 * between UTF-8 and byte offsets. There are two (substr offset and substr
5331 * length, the i offset, PERL_MAGIC_UTF8_CACHESIZE) times two (UTF-8 offset
5332 * and byte offset) cache positions.
5333 *
5334 * The mg_len field is used by sv_len_utf8(), see its comments.
5335 * Note that the mg_len is not the length of the mg_ptr field.
5336 *
5337 */
5338STATIC bool
245d4a47
NC
5339S_utf8_mg_pos_init(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i,
5340 I32 offsetp, const U8 *s, const U8 *start)
7e8c5dac 5341{
7a5fa8a2 5342 bool found = FALSE;
7e8c5dac
HS
5343
5344 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
45f47268 5345 if (!*mgp) {
27da23d5 5346 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0, 0);
45f47268
NC
5347 (*mgp)->mg_len = -1;
5348 }
7e8c5dac 5349 assert(*mgp);
b76347f2 5350
7e8c5dac
HS
5351 if ((*mgp)->mg_ptr)
5352 *cachep = (STRLEN *) (*mgp)->mg_ptr;
5353 else {
a02a5408 5354 Newxz(*cachep, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7e8c5dac
HS
5355 (*mgp)->mg_ptr = (char *) *cachep;
5356 }
5357 assert(*cachep);
5358
a3b680e6 5359 (*cachep)[i] = offsetp;
7e8c5dac
HS
5360 (*cachep)[i+1] = s - start;
5361 found = TRUE;
a0ed51b3 5362 }
7e8c5dac
HS
5363
5364 return found;
a0ed51b3
LW
5365}
5366
645c22ef 5367/*
7e8c5dac
HS
5368 * S_utf8_mg_pos() is used to query and update mg_ptr field of
5369 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5370 * between UTF-8 and byte offsets. See also the comments of
5371 * S_utf8_mg_pos_init().
5372 *
5373 */
5374STATIC bool
245d4a47 5375S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I32 uoff, const U8 **sp, const U8 *start, const U8 *send)
7e8c5dac
HS
5376{
5377 bool found = FALSE;
5378
5379 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5380 if (!*mgp)
5381 *mgp = mg_find(sv, PERL_MAGIC_utf8);
5382 if (*mgp && (*mgp)->mg_ptr) {
5383 *cachep = (STRLEN *) (*mgp)->mg_ptr;
e23c8137 5384 ASSERT_UTF8_CACHE(*cachep);
667208dd 5385 if ((*cachep)[i] == (STRLEN)uoff) /* An exact match. */
7a5fa8a2 5386 found = TRUE;
7e8c5dac
HS
5387 else { /* We will skip to the right spot. */
5388 STRLEN forw = 0;
5389 STRLEN backw = 0;
a3b680e6 5390 const U8* p = NULL;
7e8c5dac
HS
5391
5392 /* The assumption is that going backward is half
5393 * the speed of going forward (that's where the
5394 * 2 * backw in the below comes from). (The real
5395 * figure of course depends on the UTF-8 data.) */
5396
667208dd 5397 if ((*cachep)[i] > (STRLEN)uoff) {
7e8c5dac 5398 forw = uoff;
667208dd 5399 backw = (*cachep)[i] - (STRLEN)uoff;
7e8c5dac
HS
5400
5401 if (forw < 2 * backw)
5402 p = start;
5403 else
5404 p = start + (*cachep)[i+1];
5405 }
5406 /* Try this only for the substr offset (i == 0),
5407 * not for the substr length (i == 2). */
5408 else if (i == 0) { /* (*cachep)[i] < uoff */
a3b680e6 5409 const STRLEN ulen = sv_len_utf8(sv);
7e8c5dac 5410
667208dd
JH
5411 if ((STRLEN)uoff < ulen) {
5412 forw = (STRLEN)uoff - (*cachep)[i];
5413 backw = ulen - (STRLEN)uoff;
7e8c5dac
HS
5414
5415 if (forw < 2 * backw)
5416 p = start + (*cachep)[i+1];
5417 else
5418 p = send;
5419 }
5420
5421 /* If the string is not long enough for uoff,
5422 * we could extend it, but not at this low a level. */
5423 }
5424
5425 if (p) {
5426 if (forw < 2 * backw) {
5427 while (forw--)
5428 p += UTF8SKIP(p);
5429 }
5430 else {
5431 while (backw--) {
5432 p--;
5433 while (UTF8_IS_CONTINUATION(*p))
5434 p--;
5435 }
5436 }
5437
5438 /* Update the cache. */
667208dd 5439 (*cachep)[i] = (STRLEN)uoff;
7e8c5dac 5440 (*cachep)[i+1] = p - start;
8f78557a
AE
5441
5442 /* Drop the stale "length" cache */
5443 if (i == 0) {
5444 (*cachep)[2] = 0;
5445 (*cachep)[3] = 0;
5446 }
7a5fa8a2 5447
7e8c5dac
HS
5448 found = TRUE;
5449 }
5450 }
5451 if (found) { /* Setup the return values. */
5452 *offsetp = (*cachep)[i+1];
5453 *sp = start + *offsetp;
5454 if (*sp >= send) {
5455 *sp = send;
5456 *offsetp = send - start;
5457 }
5458 else if (*sp < start) {
5459 *sp = start;
5460 *offsetp = 0;
5461 }
5462 }
5463 }
e23c8137
JH
5464#ifdef PERL_UTF8_CACHE_ASSERT
5465 if (found) {
45f47268 5466 const U8 *s = start;
e23c8137
JH
5467 I32 n = uoff;
5468
5469 while (n-- && s < send)
5470 s += UTF8SKIP(s);
5471
5472 if (i == 0) {
5473 assert(*offsetp == s - start);
5474 assert((*cachep)[0] == (STRLEN)uoff);
5475 assert((*cachep)[1] == *offsetp);
5476 }
5477 ASSERT_UTF8_CACHE(*cachep);
5478 }
5479#endif
7e8c5dac 5480 }
e23c8137 5481
7e8c5dac
HS
5482 return found;
5483}
7a5fa8a2 5484
7e8c5dac 5485/*
645c22ef
DM
5486=for apidoc sv_pos_u2b
5487
1e54db1a 5488Converts the value pointed to by offsetp from a count of UTF-8 chars from
645c22ef
DM
5489the start of the string, to a count of the equivalent number of bytes; if
5490lenp is non-zero, it does the same to lenp, but this time starting from
5491the offset, rather than from the start of the string. Handles magic and
5492type coercion.
5493
5494=cut
5495*/
5496
7e8c5dac
HS
5497/*
5498 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5499 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5500 * byte offsets. See also the comments of S_utf8_mg_pos().
5501 *
5502 */
5503
bdf30dd6
NC
5504static STRLEN
5505S_sv_pos_u2b_forwards(pTHX_ const U8 *const start, const U8 *const send,
5506 STRLEN uoffset)
5507{
5508 const U8 *s = start;
5509
5510 while (s < send && uoffset--)
5511 s += UTF8SKIP(s);
5512 if (s > send) {
5513 /* This is the existing behaviour. Possibly it should be a croak, as
5514 it's actually a bounds error */
5515 s = send;
5516 }
5517 return s - start;
5518}
5519
c336ad0b
NC
5520
5521static STRLEN
5522S_sv_pos_u2b_midway(pTHX_ const U8 *const start, const U8 *send,
5523 STRLEN uoffset, STRLEN uend)
5524{
5525 STRLEN backw = uend - uoffset;
5526 if (uoffset < 2 * backw) {
5527 /* The assumption is that going fowards is twice the speed of going
5528 forward (that's where the 2 * backw comes from).
5529 (The real figure of course depends on the UTF-8 data.) */
5530 return S_sv_pos_u2b_forwards(aTHX_ start, send, uoffset);
5531 }
5532
5533 while (backw--) {
5534 send--;
5535 while (UTF8_IS_CONTINUATION(*send))
5536 send--;
5537 }
5538 return send - start;
5539}
5540
28ccbf94
NC
5541static STRLEN
5542S_sv_pos_u2b_cached(pTHX_ SV *sv, MAGIC **mgp, const U8 *const start,
5543 const U8 *const send, STRLEN uoffset,
5544 STRLEN uoffset0, STRLEN boffset0) {
5545 STRLEN boffset;
c336ad0b
NC
5546 bool found = FALSE;
5547
75c33c12
NC
5548 assert (uoffset >= uoffset0);
5549
c336ad0b
NC
5550 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
5551 && (*mgp = mg_find(sv, PERL_MAGIC_utf8))) {
5552 if ((*mgp)->mg_len != -1) {
75c33c12
NC
5553 /* If we can take advantage of a passed in offset, do so. */
5554 /* In fact, offset0 is either 0, or less than offset, so don't
5555 need to worry about the other possibility. */
5556 boffset = boffset0
5557 + S_sv_pos_u2b_midway(aTHX_ start + boffset0, send,
5558 uoffset - uoffset0,
5559 (*mgp)->mg_len - uoffset0);
c336ad0b
NC
5560 found = TRUE;
5561 }
28ccbf94 5562 }
c336ad0b
NC
5563
5564 if (!found || PL_utf8cache < 0) {
75c33c12
NC
5565 const STRLEN real_boffset
5566 = boffset0 + S_sv_pos_u2b_forwards(aTHX_ start + boffset0,
5567 send, uoffset - uoffset0);
5568
c336ad0b
NC
5569 if (found && PL_utf8cache < 0) {
5570 if (real_boffset != boffset) {
5571 /* Need to turn the assertions off otherwise we may recurse
5572 infinitely while printing error messages. */
5573 SAVEI8(PL_utf8cache);
5574 PL_utf8cache = 0;
5575 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVf
5576 " real %"UVf" for %"SVf,
5577 (UV) boffset, (UV) real_boffset, sv);
5578 }
5579 }
5580 boffset = real_boffset;
28ccbf94
NC
5581 }
5582 return boffset;
5583}
5584
a0ed51b3 5585void
864dbfa3 5586Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
a0ed51b3 5587{
245d4a47 5588 const U8 *start;
a0ed51b3
LW
5589 STRLEN len;
5590
5591 if (!sv)
5592 return;
5593
245d4a47 5594 start = (U8*)SvPV_const(sv, len);
7e8c5dac 5595 if (len) {
bdf30dd6
NC
5596 STRLEN uoffset = (STRLEN) *offsetp;
5597 const U8 * const send = start + len;
28ccbf94
NC
5598 MAGIC *mg;
5599 STRLEN boffset = S_sv_pos_u2b_cached(aTHX_ sv, &mg, start, send,
5600 uoffset, 0, 0);
bdf30dd6
NC
5601
5602 *offsetp = (I32) boffset;
5603
5604 if (lenp) {
28ccbf94
NC
5605 /* Convert the relative offset to absolute. */
5606 STRLEN uoffset2 = uoffset + (STRLEN) *lenp;
5607 STRLEN boffset2
5608 = S_sv_pos_u2b_cached(aTHX_ sv, &mg, start, send, uoffset2,
5609 uoffset, boffset) - boffset;
bdf30dd6 5610
28ccbf94 5611 *lenp = boffset2;
bdf30dd6 5612 }
7e8c5dac
HS
5613 }
5614 else {
5615 *offsetp = 0;
5616 if (lenp)
5617 *lenp = 0;
a0ed51b3 5618 }
e23c8137 5619
a0ed51b3
LW
5620 return;
5621}
5622
645c22ef
DM
5623/*
5624=for apidoc sv_pos_b2u
5625
5626Converts the value pointed to by offsetp from a count of bytes from the
1e54db1a 5627start of the string, to a count of the equivalent number of UTF-8 chars.
645c22ef
DM
5628Handles magic and type coercion.
5629
5630=cut
5631*/
5632
7e8c5dac
HS
5633/*
5634 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
5635 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5636 * byte offsets. See also the comments of S_utf8_mg_pos().
5637 *
5638 */
5639
ec07b5e0
NC
5640
5641static STRLEN
5642S_sv_pos_b2u_forwards(pTHX_ const U8 *s, const U8 *const target);
5643
5644static void
5645S_utf8_mg_pos_cache_update(pTHX_ SV *sv, MAGIC **mgp, STRLEN byte, STRLEN utf8)
5646{
5647 STRLEN *cache;
5648 if (SvREADONLY(sv))
5649 return;
5650
5651 if (!*mgp) {
5652 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
5653 0);
5654 (*mgp)->mg_len = -1;
5655 }
5656 assert(*mgp);
5657
5658 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
5659 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5660 (*mgp)->mg_ptr = (char *) cache;
5661 }
5662 assert(cache);
5663
5664 if (PL_utf8cache < 0) {
ef816a78 5665 const U8 *start = (const U8 *) SvPVX_const(sv);
ec07b5e0
NC
5666 const STRLEN realutf8
5667 = S_sv_pos_b2u_forwards(aTHX_ start, start + byte);
5668
5669 if (realutf8 != utf8) {
5670 /* Need to turn the assertions off otherwise we may recurse
5671 infinitely while printing error messages. */
5672 SAVEI8(PL_utf8cache);
5673 PL_utf8cache = 0;
5674 Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVf
5675 " real %"UVf" for %"SVf, (UV) utf8, (UV) realutf8, sv);
5676 }
5677 }
5678 cache[0] = utf8;
5679 cache[1] = byte;
5680 /* Drop the stale "length" cache */
5681 cache[2] = 0;
5682 cache[3] = 0;
5683}
5684
5685/* If we don't know the character offset of the end of a region, our only
5686 option is to walk forwards to the target byte offset. */
5687static STRLEN
5688S_sv_pos_b2u_forwards(pTHX_ const U8 *s, const U8 *const target)
5689{
5690 STRLEN len = 0;
5691 while (s < target) {
5692 STRLEN n = 1;
5693
5694 /* Call utf8n_to_uvchr() to validate the sequence
5695 * (unless a simple non-UTF character) */
5696 if (!UTF8_IS_INVARIANT(*s))
5697 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
5698 if (n > 0) {
5699 s += n;
5700 len++;
5701 }
5702 else
5703 break;
5704 }
5705 return len;
5706}
5707
5708/* We already know all of the way, now we may be able to walk back. The same
5709 assumption is made as in S_utf8_mg_pos(), namely that walking backward is
5710 twice slower than walking forward. */
5711static STRLEN
5712S_sv_pos_b2u_midway(pTHX_ const U8 *s, const U8 *const target, const U8 *end,
5713 STRLEN endu)
5714{
5715 const STRLEN forw = target - s;
5716 STRLEN backw = end - target;
5717
5718 if (forw < 2 * backw) {
5719 return S_sv_pos_b2u_forwards(aTHX_ s, target);
5720 }
5721
5722 while (end > target) {
5723 end--;
5724 while (UTF8_IS_CONTINUATION(*end)) {
5725 end--;
5726 }
5727 endu--;
5728 }
5729 return endu;
5730}
5731
a0ed51b3 5732void
7e8c5dac 5733Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
a0ed51b3 5734{
83003860 5735 const U8* s;
ec07b5e0 5736 const STRLEN byte = *offsetp;
a0ed51b3 5737 STRLEN len;
ec07b5e0
NC
5738 MAGIC* mg = NULL;
5739 const U8* send;
a0ed51b3
LW
5740
5741 if (!sv)
5742 return;
5743
83003860 5744 s = (const U8*)SvPV_const(sv, len);
7e8c5dac 5745
b9f984a5 5746 if (len < byte)
ec07b5e0 5747 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7e8c5dac 5748
ec07b5e0 5749 send = s + byte;
a67d7df9 5750
ffca234a
NC
5751 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
5752 && (mg = mg_find(sv, PERL_MAGIC_utf8))) {
5753 if (mg->mg_ptr) {
ec07b5e0 5754 STRLEN *cache = (STRLEN *) mg->mg_ptr;
b9f984a5 5755 if (cache[1] == byte) {
ec07b5e0
NC
5756 /* An exact match. */
5757 *offsetp = cache[0];
a67d7df9 5758
ec07b5e0 5759 return;
7e8c5dac 5760 }
b9f984a5 5761 else if (cache[1] < byte) {
ec07b5e0 5762 /* We already know part of the way. */
b9f984a5
NC
5763 if (mg->mg_len != -1) {
5764 /* Actually, we know the end too. */
5765 len = cache[0]
5766 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
5767 s + len, mg->mg_len - cache[0]);
5768 } else {
5769 len = cache[0]
5770 + S_sv_pos_b2u_forwards(aTHX_ s + cache[1], send);
5771 }
7e8c5dac 5772 }
ec07b5e0
NC
5773 else { /* cache[1] > byte */
5774 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[1],
5775 cache[0]);
7e8c5dac 5776
7e8c5dac 5777 }
ec07b5e0
NC
5778 ASSERT_UTF8_CACHE(cache);
5779 if (PL_utf8cache < 0) {
5780 const STRLEN reallen = S_sv_pos_b2u_forwards(aTHX_ s, send);
5781
5782 if (len != reallen) {
5783 /* Need to turn the assertions off otherwise we may recurse
5784 infinitely while printing error messages. */
5785 SAVEI8(PL_utf8cache);
5786 PL_utf8cache = 0;
5787 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVf
5788 " real %"UVf" for %"SVf,
5789 (UV) len, (UV) reallen, sv);
5790 }
7e8c5dac 5791 }
ffca234a
NC
5792 } else if (mg->mg_len != -1) {
5793 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + len, mg->mg_len);
ec07b5e0
NC
5794 } else {
5795 len = S_sv_pos_b2u_forwards(aTHX_ s, send);
7e8c5dac 5796 }
a0ed51b3 5797 }
ec07b5e0
NC
5798 else {
5799 len = S_sv_pos_b2u_forwards(aTHX_ s, send);
5800 }
5801 *offsetp = len;
5802
5803 S_utf8_mg_pos_cache_update(aTHX_ sv, &mg, byte, len);
a0ed51b3
LW
5804}
5805
954c1994
GS
5806/*
5807=for apidoc sv_eq
5808
5809Returns a boolean indicating whether the strings in the two SVs are
645c22ef
DM
5810identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5811coerce its args to strings if necessary.
954c1994
GS
5812
5813=cut
5814*/
5815
79072805 5816I32
e01b9e88 5817Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
79072805 5818{
97aff369 5819 dVAR;
e1ec3a88 5820 const char *pv1;
463ee0b2 5821 STRLEN cur1;
e1ec3a88 5822 const char *pv2;
463ee0b2 5823 STRLEN cur2;
e01b9e88 5824 I32 eq = 0;
bd61b366 5825 char *tpv = NULL;
a0714e2c 5826 SV* svrecode = NULL;
79072805 5827
e01b9e88 5828 if (!sv1) {
79072805
LW
5829 pv1 = "";
5830 cur1 = 0;
5831 }
463ee0b2 5832 else
4d84ee25 5833 pv1 = SvPV_const(sv1, cur1);
79072805 5834
e01b9e88
SC
5835 if (!sv2){
5836 pv2 = "";
5837 cur2 = 0;
92d29cee 5838 }
e01b9e88 5839 else
4d84ee25 5840 pv2 = SvPV_const(sv2, cur2);
79072805 5841
cf48d248 5842 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
5843 /* Differing utf8ness.
5844 * Do not UTF8size the comparands as a side-effect. */
5845 if (PL_encoding) {
5846 if (SvUTF8(sv1)) {
553e1bcc
AT
5847 svrecode = newSVpvn(pv2, cur2);
5848 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 5849 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
5850 }
5851 else {
553e1bcc
AT
5852 svrecode = newSVpvn(pv1, cur1);
5853 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 5854 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
5855 }
5856 /* Now both are in UTF-8. */
0a1bd7ac
DM
5857 if (cur1 != cur2) {
5858 SvREFCNT_dec(svrecode);
799ef3cb 5859 return FALSE;
0a1bd7ac 5860 }
799ef3cb
JH
5861 }
5862 else {
5863 bool is_utf8 = TRUE;
5864
5865 if (SvUTF8(sv1)) {
5866 /* sv1 is the UTF-8 one,
5867 * if is equal it must be downgrade-able */
9d4ba2ae 5868 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
799ef3cb
JH
5869 &cur1, &is_utf8);
5870 if (pv != pv1)
553e1bcc 5871 pv1 = tpv = pv;
799ef3cb
JH
5872 }
5873 else {
5874 /* sv2 is the UTF-8 one,
5875 * if is equal it must be downgrade-able */
9d4ba2ae 5876 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
799ef3cb
JH
5877 &cur2, &is_utf8);
5878 if (pv != pv2)
553e1bcc 5879 pv2 = tpv = pv;
799ef3cb
JH
5880 }
5881 if (is_utf8) {
5882 /* Downgrade not possible - cannot be eq */
bf694877 5883 assert (tpv == 0);
799ef3cb
JH
5884 return FALSE;
5885 }
5886 }
cf48d248
JH
5887 }
5888
5889 if (cur1 == cur2)
765f542d 5890 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
e01b9e88 5891
b37c2d43 5892 SvREFCNT_dec(svrecode);
553e1bcc
AT
5893 if (tpv)
5894 Safefree(tpv);
cf48d248 5895
e01b9e88 5896 return eq;
79072805
LW
5897}
5898
954c1994
GS
5899/*
5900=for apidoc sv_cmp
5901
5902Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
5903string in C<sv1> is less than, equal to, or greater than the string in
645c22ef
DM
5904C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5905coerce its args to strings if necessary. See also C<sv_cmp_locale>.
954c1994
GS
5906
5907=cut
5908*/
5909
79072805 5910I32
e01b9e88 5911Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
79072805 5912{
97aff369 5913 dVAR;
560a288e 5914 STRLEN cur1, cur2;
e1ec3a88 5915 const char *pv1, *pv2;
bd61b366 5916 char *tpv = NULL;
cf48d248 5917 I32 cmp;
a0714e2c 5918 SV *svrecode = NULL;
560a288e 5919
e01b9e88
SC
5920 if (!sv1) {
5921 pv1 = "";
560a288e
GS
5922 cur1 = 0;
5923 }
e01b9e88 5924 else
4d84ee25 5925 pv1 = SvPV_const(sv1, cur1);
560a288e 5926
553e1bcc 5927 if (!sv2) {
e01b9e88 5928 pv2 = "";
560a288e
GS
5929 cur2 = 0;
5930 }
e01b9e88 5931 else
4d84ee25 5932 pv2 = SvPV_const(sv2, cur2);
79072805 5933
cf48d248 5934 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
5935 /* Differing utf8ness.
5936 * Do not UTF8size the comparands as a side-effect. */
cf48d248 5937 if (SvUTF8(sv1)) {
799ef3cb 5938 if (PL_encoding) {
553e1bcc
AT
5939 svrecode = newSVpvn(pv2, cur2);
5940 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 5941 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
5942 }
5943 else {
e1ec3a88 5944 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
799ef3cb 5945 }
cf48d248
JH
5946 }
5947 else {
799ef3cb 5948 if (PL_encoding) {
553e1bcc
AT
5949 svrecode = newSVpvn(pv1, cur1);
5950 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 5951 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
5952 }
5953 else {
e1ec3a88 5954 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
799ef3cb 5955 }
cf48d248
JH
5956 }
5957 }
5958
e01b9e88 5959 if (!cur1) {
cf48d248 5960 cmp = cur2 ? -1 : 0;
e01b9e88 5961 } else if (!cur2) {
cf48d248
JH
5962 cmp = 1;
5963 } else {
e1ec3a88 5964 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
e01b9e88
SC
5965
5966 if (retval) {
cf48d248 5967 cmp = retval < 0 ? -1 : 1;
e01b9e88 5968 } else if (cur1 == cur2) {
cf48d248
JH
5969 cmp = 0;
5970 } else {
5971 cmp = cur1 < cur2 ? -1 : 1;
e01b9e88 5972 }
cf48d248 5973 }
16660edb 5974
b37c2d43 5975 SvREFCNT_dec(svrecode);
553e1bcc
AT
5976 if (tpv)
5977 Safefree(tpv);
cf48d248
JH
5978
5979 return cmp;
bbce6d69 5980}
16660edb 5981
c461cf8f
JH
5982/*
5983=for apidoc sv_cmp_locale
5984
645c22ef
DM
5985Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
5986'use bytes' aware, handles get magic, and will coerce its args to strings
5987if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
c461cf8f
JH
5988
5989=cut
5990*/
5991
bbce6d69 5992I32
864dbfa3 5993Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
bbce6d69 5994{
97aff369 5995 dVAR;
36477c24 5996#ifdef USE_LOCALE_COLLATE
16660edb 5997
bbce6d69 5998 char *pv1, *pv2;
5999 STRLEN len1, len2;
6000 I32 retval;
16660edb 6001
3280af22 6002 if (PL_collation_standard)
bbce6d69 6003 goto raw_compare;
16660edb 6004
bbce6d69 6005 len1 = 0;
8ac85365 6006 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
bbce6d69 6007 len2 = 0;
8ac85365 6008 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
16660edb 6009
bbce6d69 6010 if (!pv1 || !len1) {
6011 if (pv2 && len2)
6012 return -1;
6013 else
6014 goto raw_compare;
6015 }
6016 else {
6017 if (!pv2 || !len2)
6018 return 1;
6019 }
16660edb 6020
bbce6d69 6021 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
16660edb 6022
bbce6d69 6023 if (retval)
16660edb 6024 return retval < 0 ? -1 : 1;
6025
bbce6d69 6026 /*
6027 * When the result of collation is equality, that doesn't mean
6028 * that there are no differences -- some locales exclude some
6029 * characters from consideration. So to avoid false equalities,
6030 * we use the raw string as a tiebreaker.
6031 */
16660edb 6032
bbce6d69 6033 raw_compare:
5f66b61c 6034 /*FALLTHROUGH*/
16660edb 6035
36477c24 6036#endif /* USE_LOCALE_COLLATE */
16660edb 6037
bbce6d69 6038 return sv_cmp(sv1, sv2);
6039}
79072805 6040
645c22ef 6041
36477c24 6042#ifdef USE_LOCALE_COLLATE
645c22ef 6043
7a4c00b4 6044/*
645c22ef
DM
6045=for apidoc sv_collxfrm
6046
6047Add Collate Transform magic to an SV if it doesn't already have it.
6048
6049Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6050scalar data of the variable, but transformed to such a format that a normal
6051memory comparison can be used to compare the data according to the locale
6052settings.
6053
6054=cut
6055*/
6056
bbce6d69 6057char *
864dbfa3 6058Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
bbce6d69 6059{
97aff369 6060 dVAR;
7a4c00b4 6061 MAGIC *mg;
16660edb 6062
14befaf4 6063 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
3280af22 6064 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
93524f2b
NC
6065 const char *s;
6066 char *xf;
bbce6d69 6067 STRLEN len, xlen;
6068
7a4c00b4 6069 if (mg)
6070 Safefree(mg->mg_ptr);
93524f2b 6071 s = SvPV_const(sv, len);
bbce6d69 6072 if ((xf = mem_collxfrm(s, len, &xlen))) {
ff0cee69 6073 if (SvREADONLY(sv)) {
6074 SAVEFREEPV(xf);
6075 *nxp = xlen;
3280af22 6076 return xf + sizeof(PL_collation_ix);
ff0cee69 6077 }
7a4c00b4 6078 if (! mg) {
d83f0a82
NC
6079#ifdef PERL_OLD_COPY_ON_WRITE
6080 if (SvIsCOW(sv))
6081 sv_force_normal_flags(sv, 0);
6082#endif
6083 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6084 0, 0);
7a4c00b4 6085 assert(mg);
bbce6d69 6086 }
7a4c00b4 6087 mg->mg_ptr = xf;
565764a8 6088 mg->mg_len = xlen;
7a4c00b4 6089 }
6090 else {
ff0cee69 6091 if (mg) {
6092 mg->mg_ptr = NULL;
565764a8 6093 mg->mg_len = -1;
ff0cee69 6094 }
bbce6d69 6095 }
6096 }
7a4c00b4 6097 if (mg && mg->mg_ptr) {
565764a8 6098 *nxp = mg->mg_len;
3280af22 6099 return mg->mg_ptr + sizeof(PL_collation_ix);
bbce6d69 6100 }
6101 else {
6102 *nxp = 0;
6103 return NULL;
16660edb 6104 }
79072805
LW
6105}
6106
36477c24 6107#endif /* USE_LOCALE_COLLATE */
bbce6d69 6108
c461cf8f
JH
6109/*
6110=for apidoc sv_gets
6111
6112Get a line from the filehandle and store it into the SV, optionally
6113appending to the currently-stored string.
6114
6115=cut
6116*/
6117
79072805 6118char *
864dbfa3 6119Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
79072805 6120{
97aff369 6121 dVAR;
e1ec3a88 6122 const char *rsptr;
c07a80fd 6123 STRLEN rslen;
6124 register STDCHAR rslast;
6125 register STDCHAR *bp;
6126 register I32 cnt;
9c5ffd7c 6127 I32 i = 0;
8bfdd7d9 6128 I32 rspara = 0;
e311fd51 6129 I32 recsize;
c07a80fd 6130
bc44a8a2
NC
6131 if (SvTHINKFIRST(sv))
6132 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
765f542d
NC
6133 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6134 from <>.
6135 However, perlbench says it's slower, because the existing swipe code
6136 is faster than copy on write.
6137 Swings and roundabouts. */
862a34c6 6138 SvUPGRADE(sv, SVt_PV);
99491443 6139
ff68c719 6140 SvSCREAM_off(sv);
efd8b2ba
AE
6141
6142 if (append) {
6143 if (PerlIO_isutf8(fp)) {
6144 if (!SvUTF8(sv)) {
6145 sv_utf8_upgrade_nomg(sv);
6146 sv_pos_u2b(sv,&append,0);
6147 }
6148 } else if (SvUTF8(sv)) {
561b68a9 6149 SV * const tsv = newSV(0);
efd8b2ba
AE
6150 sv_gets(tsv, fp, 0);
6151 sv_utf8_upgrade_nomg(tsv);
6152 SvCUR_set(sv,append);
6153 sv_catsv(sv,tsv);
6154 sv_free(tsv);
6155 goto return_string_or_null;
6156 }
6157 }
6158
6159 SvPOK_only(sv);
6160 if (PerlIO_isutf8(fp))
6161 SvUTF8_on(sv);
c07a80fd 6162
923e4eb5 6163 if (IN_PERL_COMPILETIME) {
8bfdd7d9
HS
6164 /* we always read code in line mode */
6165 rsptr = "\n";
6166 rslen = 1;
6167 }
6168 else if (RsSNARF(PL_rs)) {
7a5fa8a2
NIS
6169 /* If it is a regular disk file use size from stat() as estimate
6170 of amount we are going to read - may result in malloc-ing
6171 more memory than we realy need if layers bellow reduce
e468d35b
NIS
6172 size we read (e.g. CRLF or a gzip layer)
6173 */
e311fd51 6174 Stat_t st;
e468d35b 6175 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
f54cb97a 6176 const Off_t offset = PerlIO_tell(fp);
58f1856e 6177 if (offset != (Off_t) -1 && st.st_size + append > offset) {
e468d35b
NIS
6178 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6179 }
6180 }
c07a80fd 6181 rsptr = NULL;
6182 rslen = 0;
6183 }
3280af22 6184 else if (RsRECORD(PL_rs)) {
e311fd51 6185 I32 bytesread;
5b2b9c68
HM
6186 char *buffer;
6187
6188 /* Grab the size of the record we're getting */
3280af22 6189 recsize = SvIV(SvRV(PL_rs));
e311fd51 6190 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
5b2b9c68
HM
6191 /* Go yank in */
6192#ifdef VMS
6193 /* VMS wants read instead of fread, because fread doesn't respect */
6194 /* RMS record boundaries. This is not necessarily a good thing to be */
e468d35b
NIS
6195 /* doing, but we've got no other real choice - except avoid stdio
6196 as implementation - perhaps write a :vms layer ?
6197 */
5b2b9c68
HM
6198 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6199#else
6200 bytesread = PerlIO_read(fp, buffer, recsize);
6201#endif
27e6ca2d
AE
6202 if (bytesread < 0)
6203 bytesread = 0;
e311fd51 6204 SvCUR_set(sv, bytesread += append);
e670df4e 6205 buffer[bytesread] = '\0';
efd8b2ba 6206 goto return_string_or_null;
5b2b9c68 6207 }
3280af22 6208 else if (RsPARA(PL_rs)) {
c07a80fd 6209 rsptr = "\n\n";
6210 rslen = 2;
8bfdd7d9 6211 rspara = 1;
c07a80fd 6212 }
7d59b7e4
NIS
6213 else {
6214 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6215 if (PerlIO_isutf8(fp)) {
6216 rsptr = SvPVutf8(PL_rs, rslen);
6217 }
6218 else {
6219 if (SvUTF8(PL_rs)) {
6220 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6221 Perl_croak(aTHX_ "Wide character in $/");
6222 }
6223 }
93524f2b 6224 rsptr = SvPV_const(PL_rs, rslen);
7d59b7e4
NIS
6225 }
6226 }
6227
c07a80fd 6228 rslast = rslen ? rsptr[rslen - 1] : '\0';
6229
8bfdd7d9 6230 if (rspara) { /* have to do this both before and after */
79072805 6231 do { /* to make sure file boundaries work right */
760ac839 6232 if (PerlIO_eof(fp))
a0d0e21e 6233 return 0;
760ac839 6234 i = PerlIO_getc(fp);
79072805 6235 if (i != '\n') {
a0d0e21e
LW
6236 if (i == -1)
6237 return 0;
760ac839 6238 PerlIO_ungetc(fp,i);
79072805
LW
6239 break;
6240 }
6241 } while (i != EOF);
6242 }
c07a80fd 6243
760ac839
LW
6244 /* See if we know enough about I/O mechanism to cheat it ! */
6245
6246 /* This used to be #ifdef test - it is made run-time test for ease
1c846c1f 6247 of abstracting out stdio interface. One call should be cheap
760ac839
LW
6248 enough here - and may even be a macro allowing compile
6249 time optimization.
6250 */
6251
6252 if (PerlIO_fast_gets(fp)) {
6253
6254 /*
6255 * We're going to steal some values from the stdio struct
6256 * and put EVERYTHING in the innermost loop into registers.
6257 */
6258 register STDCHAR *ptr;
6259 STRLEN bpx;
6260 I32 shortbuffered;
6261
16660edb 6262#if defined(VMS) && defined(PERLIO_IS_STDIO)
6263 /* An ungetc()d char is handled separately from the regular
6264 * buffer, so we getc() it back out and stuff it in the buffer.
6265 */
6266 i = PerlIO_getc(fp);
6267 if (i == EOF) return 0;
6268 *(--((*fp)->_ptr)) = (unsigned char) i;
6269 (*fp)->_cnt++;
6270#endif
c07a80fd 6271
c2960299 6272 /* Here is some breathtakingly efficient cheating */
c07a80fd 6273
a20bf0c3 6274 cnt = PerlIO_get_cnt(fp); /* get count into register */
e468d35b 6275 /* make sure we have the room */
7a5fa8a2 6276 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
e468d35b 6277 /* Not room for all of it
7a5fa8a2 6278 if we are looking for a separator and room for some
e468d35b
NIS
6279 */
6280 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7a5fa8a2 6281 /* just process what we have room for */
79072805
LW
6282 shortbuffered = cnt - SvLEN(sv) + append + 1;
6283 cnt -= shortbuffered;
6284 }
6285 else {
6286 shortbuffered = 0;
bbce6d69 6287 /* remember that cnt can be negative */
eb160463 6288 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
79072805
LW
6289 }
6290 }
7a5fa8a2 6291 else
79072805 6292 shortbuffered = 0;
3f7c398e 6293 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
a20bf0c3 6294 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
16660edb 6295 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6296 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
16660edb 6297 DEBUG_P(PerlIO_printf(Perl_debug_log,
ba7abf9d 6298 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6299 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6300 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
79072805
LW
6301 for (;;) {
6302 screamer:
93a17b20 6303 if (cnt > 0) {
c07a80fd 6304 if (rslen) {
760ac839
LW
6305 while (cnt > 0) { /* this | eat */
6306 cnt--;
c07a80fd 6307 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6308 goto thats_all_folks; /* screams | sed :-) */
6309 }
6310 }
6311 else {
1c846c1f
NIS
6312 Copy(ptr, bp, cnt, char); /* this | eat */
6313 bp += cnt; /* screams | dust */
c07a80fd 6314 ptr += cnt; /* louder | sed :-) */
a5f75d66 6315 cnt = 0;
93a17b20 6316 }
79072805
LW
6317 }
6318
748a9306 6319 if (shortbuffered) { /* oh well, must extend */
79072805
LW
6320 cnt = shortbuffered;
6321 shortbuffered = 0;
3f7c398e 6322 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
6323 SvCUR_set(sv, bpx);
6324 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3f7c398e 6325 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
79072805
LW
6326 continue;
6327 }
6328
16660edb 6329 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841
GS
6330 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6331 PTR2UV(ptr),(long)cnt));
cc00df79 6332 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
ba7abf9d 6333#if 0
16660edb 6334 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6335 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6336 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6337 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 6338#endif
1c846c1f 6339 /* This used to call 'filbuf' in stdio form, but as that behaves like
774d564b 6340 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6341 another abstraction. */
760ac839 6342 i = PerlIO_getc(fp); /* get more characters */
ba7abf9d 6343#if 0
16660edb 6344 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6345 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6346 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6347 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 6348#endif
a20bf0c3
JH
6349 cnt = PerlIO_get_cnt(fp);
6350 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
16660edb 6351 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6352 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
79072805 6353
748a9306
LW
6354 if (i == EOF) /* all done for ever? */
6355 goto thats_really_all_folks;
6356
3f7c398e 6357 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
6358 SvCUR_set(sv, bpx);
6359 SvGROW(sv, bpx + cnt + 2);
3f7c398e 6360 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
c07a80fd 6361
eb160463 6362 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
79072805 6363
c07a80fd 6364 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
79072805 6365 goto thats_all_folks;
79072805
LW
6366 }
6367
6368thats_all_folks:
3f7c398e 6369 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
36477c24 6370 memNE((char*)bp - rslen, rsptr, rslen))
760ac839 6371 goto screamer; /* go back to the fray */
79072805
LW
6372thats_really_all_folks:
6373 if (shortbuffered)
6374 cnt += shortbuffered;
16660edb 6375 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6376 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
cc00df79 6377 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
16660edb 6378 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6379 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6380 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6381 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
79072805 6382 *bp = '\0';
3f7c398e 6383 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
16660edb 6384 DEBUG_P(PerlIO_printf(Perl_debug_log,
fb73857a 6385 "Screamer: done, len=%ld, string=|%.*s|\n",
3f7c398e 6386 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
760ac839
LW
6387 }
6388 else
79072805 6389 {
6edd2cd5 6390 /*The big, slow, and stupid way. */
27da23d5 6391#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
cbbf8932 6392 STDCHAR *buf = NULL;
a02a5408 6393 Newx(buf, 8192, STDCHAR);
6edd2cd5 6394 assert(buf);
4d2c4e07 6395#else
6edd2cd5 6396 STDCHAR buf[8192];
4d2c4e07 6397#endif
79072805 6398
760ac839 6399screamer2:
c07a80fd 6400 if (rslen) {
00b6aa41 6401 register const STDCHAR * const bpe = buf + sizeof(buf);
760ac839 6402 bp = buf;
eb160463 6403 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
760ac839
LW
6404 ; /* keep reading */
6405 cnt = bp - buf;
c07a80fd 6406 }
6407 else {
760ac839 6408 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
16660edb 6409 /* Accomodate broken VAXC compiler, which applies U8 cast to
6410 * both args of ?: operator, causing EOF to change into 255
6411 */
37be0adf 6412 if (cnt > 0)
cbe9e203
JH
6413 i = (U8)buf[cnt - 1];
6414 else
37be0adf 6415 i = EOF;
c07a80fd 6416 }
79072805 6417
cbe9e203
JH
6418 if (cnt < 0)
6419 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6420 if (append)
6421 sv_catpvn(sv, (char *) buf, cnt);
6422 else
6423 sv_setpvn(sv, (char *) buf, cnt);
c07a80fd 6424
6425 if (i != EOF && /* joy */
6426 (!rslen ||
6427 SvCUR(sv) < rslen ||
3f7c398e 6428 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
79072805
LW
6429 {
6430 append = -1;
63e4d877
CS
6431 /*
6432 * If we're reading from a TTY and we get a short read,
6433 * indicating that the user hit his EOF character, we need
6434 * to notice it now, because if we try to read from the TTY
6435 * again, the EOF condition will disappear.
6436 *
6437 * The comparison of cnt to sizeof(buf) is an optimization
6438 * that prevents unnecessary calls to feof().
6439 *
6440 * - jik 9/25/96
6441 */
6442 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
6443 goto screamer2;
79072805 6444 }
6edd2cd5 6445
27da23d5 6446#ifdef USE_HEAP_INSTEAD_OF_STACK
6edd2cd5
JH
6447 Safefree(buf);
6448#endif
79072805
LW
6449 }
6450
8bfdd7d9 6451 if (rspara) { /* have to do this both before and after */
c07a80fd 6452 while (i != EOF) { /* to make sure file boundaries work right */
760ac839 6453 i = PerlIO_getc(fp);
79072805 6454 if (i != '\n') {
760ac839 6455 PerlIO_ungetc(fp,i);
79072805
LW
6456 break;
6457 }
6458 }
6459 }
c07a80fd 6460
efd8b2ba 6461return_string_or_null:
bd61b366 6462 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
79072805
LW
6463}
6464
954c1994
GS
6465/*
6466=for apidoc sv_inc
6467
645c22ef
DM
6468Auto-increment of the value in the SV, doing string to numeric conversion
6469if necessary. Handles 'get' magic.
954c1994
GS
6470
6471=cut
6472*/
6473
79072805 6474void
864dbfa3 6475Perl_sv_inc(pTHX_ register SV *sv)
79072805 6476{
97aff369 6477 dVAR;
79072805 6478 register char *d;
463ee0b2 6479 int flags;
79072805
LW
6480
6481 if (!sv)
6482 return;
5b295bef 6483 SvGETMAGIC(sv);
ed6116ce 6484 if (SvTHINKFIRST(sv)) {
765f542d
NC
6485 if (SvIsCOW(sv))
6486 sv_force_normal_flags(sv, 0);
0f15f207 6487 if (SvREADONLY(sv)) {
923e4eb5 6488 if (IN_PERL_RUNTIME)
cea2e8a9 6489 Perl_croak(aTHX_ PL_no_modify);
0f15f207 6490 }
a0d0e21e 6491 if (SvROK(sv)) {
b5be31e9 6492 IV i;
9e7bc3e8
JD
6493 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6494 return;
56431972 6495 i = PTR2IV(SvRV(sv));
b5be31e9
SM
6496 sv_unref(sv);
6497 sv_setiv(sv, i);
a0d0e21e 6498 }
ed6116ce 6499 }
8990e307 6500 flags = SvFLAGS(sv);
28e5dec8
JH
6501 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6502 /* It's (privately or publicly) a float, but not tested as an
6503 integer, so test it to see. */
d460ef45 6504 (void) SvIV(sv);
28e5dec8
JH
6505 flags = SvFLAGS(sv);
6506 }
6507 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6508 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 6509#ifdef PERL_PRESERVE_IVUV
28e5dec8 6510 oops_its_int:
59d8ce62 6511#endif
25da4f38
IZ
6512 if (SvIsUV(sv)) {
6513 if (SvUVX(sv) == UV_MAX)
a1e868e7 6514 sv_setnv(sv, UV_MAX_P1);
25da4f38
IZ
6515 else
6516 (void)SvIOK_only_UV(sv);
607fa7f2 6517 SvUV_set(sv, SvUVX(sv) + 1);
25da4f38
IZ
6518 } else {
6519 if (SvIVX(sv) == IV_MAX)
28e5dec8 6520 sv_setuv(sv, (UV)IV_MAX + 1);
25da4f38
IZ
6521 else {
6522 (void)SvIOK_only(sv);
45977657 6523 SvIV_set(sv, SvIVX(sv) + 1);
1c846c1f 6524 }
55497cff 6525 }
79072805
LW
6526 return;
6527 }
28e5dec8
JH
6528 if (flags & SVp_NOK) {
6529 (void)SvNOK_only(sv);
9d6ce603 6530 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
6531 return;
6532 }
6533
3f7c398e 6534 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
28e5dec8 6535 if ((flags & SVTYPEMASK) < SVt_PVIV)
f5282e15 6536 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
28e5dec8 6537 (void)SvIOK_only(sv);
45977657 6538 SvIV_set(sv, 1);
79072805
LW
6539 return;
6540 }
463ee0b2 6541 d = SvPVX(sv);
79072805
LW
6542 while (isALPHA(*d)) d++;
6543 while (isDIGIT(*d)) d++;
6544 if (*d) {
28e5dec8 6545#ifdef PERL_PRESERVE_IVUV
d1be9408 6546 /* Got to punt this as an integer if needs be, but we don't issue
28e5dec8
JH
6547 warnings. Probably ought to make the sv_iv_please() that does
6548 the conversion if possible, and silently. */
504618e9 6549 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
6550 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6551 /* Need to try really hard to see if it's an integer.
6552 9.22337203685478e+18 is an integer.
6553 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6554 so $a="9.22337203685478e+18"; $a+0; $a++
6555 needs to be the same as $a="9.22337203685478e+18"; $a++
6556 or we go insane. */
d460ef45 6557
28e5dec8
JH
6558 (void) sv_2iv(sv);
6559 if (SvIOK(sv))
6560 goto oops_its_int;
6561
6562 /* sv_2iv *should* have made this an NV */
6563 if (flags & SVp_NOK) {
6564 (void)SvNOK_only(sv);
9d6ce603 6565 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
6566 return;
6567 }
6568 /* I don't think we can get here. Maybe I should assert this
6569 And if we do get here I suspect that sv_setnv will croak. NWC
6570 Fall through. */
6571#if defined(USE_LONG_DOUBLE)
6572 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 6573 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 6574#else
1779d84d 6575 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 6576 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
6577#endif
6578 }
6579#endif /* PERL_PRESERVE_IVUV */
3f7c398e 6580 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
79072805
LW
6581 return;
6582 }
6583 d--;
3f7c398e 6584 while (d >= SvPVX_const(sv)) {
79072805
LW
6585 if (isDIGIT(*d)) {
6586 if (++*d <= '9')
6587 return;
6588 *(d--) = '0';
6589 }
6590 else {
9d116dd7
JH
6591#ifdef EBCDIC
6592 /* MKS: The original code here died if letters weren't consecutive.
6593 * at least it didn't have to worry about non-C locales. The
6594 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
1c846c1f 6595 * arranged in order (although not consecutively) and that only
9d116dd7
JH
6596 * [A-Za-z] are accepted by isALPHA in the C locale.
6597 */
6598 if (*d != 'z' && *d != 'Z') {
6599 do { ++*d; } while (!isALPHA(*d));
6600 return;
6601 }
6602 *(d--) -= 'z' - 'a';
6603#else
79072805
LW
6604 ++*d;
6605 if (isALPHA(*d))
6606 return;
6607 *(d--) -= 'z' - 'a' + 1;
9d116dd7 6608#endif
79072805
LW
6609 }
6610 }
6611 /* oh,oh, the number grew */
6612 SvGROW(sv, SvCUR(sv) + 2);
b162af07 6613 SvCUR_set(sv, SvCUR(sv) + 1);
3f7c398e 6614 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
79072805
LW
6615 *d = d[-1];
6616 if (isDIGIT(d[1]))
6617 *d = '1';
6618 else
6619 *d = d[1];
6620}
6621
954c1994
GS
6622/*
6623=for apidoc sv_dec
6624
645c22ef
DM
6625Auto-decrement of the value in the SV, doing string to numeric conversion
6626if necessary. Handles 'get' magic.
954c1994
GS
6627
6628=cut
6629*/
6630
79072805 6631void
864dbfa3 6632Perl_sv_dec(pTHX_ register SV *sv)
79072805 6633{
97aff369 6634 dVAR;
463ee0b2
LW
6635 int flags;
6636
79072805
LW
6637 if (!sv)
6638 return;
5b295bef 6639 SvGETMAGIC(sv);
ed6116ce 6640 if (SvTHINKFIRST(sv)) {
765f542d
NC
6641 if (SvIsCOW(sv))
6642 sv_force_normal_flags(sv, 0);
0f15f207 6643 if (SvREADONLY(sv)) {
923e4eb5 6644 if (IN_PERL_RUNTIME)
cea2e8a9 6645 Perl_croak(aTHX_ PL_no_modify);
0f15f207 6646 }
a0d0e21e 6647 if (SvROK(sv)) {
b5be31e9 6648 IV i;
9e7bc3e8
JD
6649 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6650 return;
56431972 6651 i = PTR2IV(SvRV(sv));
b5be31e9
SM
6652 sv_unref(sv);
6653 sv_setiv(sv, i);
a0d0e21e 6654 }
ed6116ce 6655 }
28e5dec8
JH
6656 /* Unlike sv_inc we don't have to worry about string-never-numbers
6657 and keeping them magic. But we mustn't warn on punting */
8990e307 6658 flags = SvFLAGS(sv);
28e5dec8
JH
6659 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6660 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 6661#ifdef PERL_PRESERVE_IVUV
28e5dec8 6662 oops_its_int:
59d8ce62 6663#endif
25da4f38
IZ
6664 if (SvIsUV(sv)) {
6665 if (SvUVX(sv) == 0) {
6666 (void)SvIOK_only(sv);
45977657 6667 SvIV_set(sv, -1);
25da4f38
IZ
6668 }
6669 else {
6670 (void)SvIOK_only_UV(sv);
f4eee32f 6671 SvUV_set(sv, SvUVX(sv) - 1);
1c846c1f 6672 }
25da4f38
IZ
6673 } else {
6674 if (SvIVX(sv) == IV_MIN)
65202027 6675 sv_setnv(sv, (NV)IV_MIN - 1.0);
25da4f38
IZ
6676 else {
6677 (void)SvIOK_only(sv);
45977657 6678 SvIV_set(sv, SvIVX(sv) - 1);
1c846c1f 6679 }
55497cff 6680 }
6681 return;
6682 }
28e5dec8 6683 if (flags & SVp_NOK) {
9d6ce603 6684 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
6685 (void)SvNOK_only(sv);
6686 return;
6687 }
8990e307 6688 if (!(flags & SVp_POK)) {
ef088171
NC
6689 if ((flags & SVTYPEMASK) < SVt_PVIV)
6690 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
6691 SvIV_set(sv, -1);
6692 (void)SvIOK_only(sv);
79072805
LW
6693 return;
6694 }
28e5dec8
JH
6695#ifdef PERL_PRESERVE_IVUV
6696 {
504618e9 6697 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
6698 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6699 /* Need to try really hard to see if it's an integer.
6700 9.22337203685478e+18 is an integer.
6701 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6702 so $a="9.22337203685478e+18"; $a+0; $a--
6703 needs to be the same as $a="9.22337203685478e+18"; $a--
6704 or we go insane. */
d460ef45 6705
28e5dec8
JH
6706 (void) sv_2iv(sv);
6707 if (SvIOK(sv))
6708 goto oops_its_int;
6709
6710 /* sv_2iv *should* have made this an NV */
6711 if (flags & SVp_NOK) {
6712 (void)SvNOK_only(sv);
9d6ce603 6713 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
6714 return;
6715 }
6716 /* I don't think we can get here. Maybe I should assert this
6717 And if we do get here I suspect that sv_setnv will croak. NWC
6718 Fall through. */
6719#if defined(USE_LONG_DOUBLE)
6720 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 6721 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 6722#else
1779d84d 6723 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 6724 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
6725#endif
6726 }
6727 }
6728#endif /* PERL_PRESERVE_IVUV */
3f7c398e 6729 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
79072805
LW
6730}
6731
954c1994
GS
6732/*
6733=for apidoc sv_mortalcopy
6734
645c22ef 6735Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
d4236ebc
DM
6736The new SV is marked as mortal. It will be destroyed "soon", either by an
6737explicit call to FREETMPS, or by an implicit call at places such as
6738statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
954c1994
GS
6739
6740=cut
6741*/
6742
79072805
LW
6743/* Make a string that will exist for the duration of the expression
6744 * evaluation. Actually, it may have to last longer than that, but
6745 * hopefully we won't free it until it has been assigned to a
6746 * permanent location. */
6747
6748SV *
864dbfa3 6749Perl_sv_mortalcopy(pTHX_ SV *oldstr)
79072805 6750{
97aff369 6751 dVAR;
463ee0b2 6752 register SV *sv;
b881518d 6753
4561caa4 6754 new_SV(sv);
79072805 6755 sv_setsv(sv,oldstr);
677b06e3
GS
6756 EXTEND_MORTAL(1);
6757 PL_tmps_stack[++PL_tmps_ix] = sv;
8990e307
LW
6758 SvTEMP_on(sv);
6759 return sv;
6760}
6761
954c1994
GS
6762/*
6763=for apidoc sv_newmortal
6764
645c22ef 6765Creates a new null SV which is mortal. The reference count of the SV is
d4236ebc
DM
6766set to 1. It will be destroyed "soon", either by an explicit call to
6767FREETMPS, or by an implicit call at places such as statement boundaries.
6768See also C<sv_mortalcopy> and C<sv_2mortal>.
954c1994
GS
6769
6770=cut
6771*/
6772
8990e307 6773SV *
864dbfa3 6774Perl_sv_newmortal(pTHX)
8990e307 6775{
97aff369 6776 dVAR;
8990e307
LW
6777 register SV *sv;
6778
4561caa4 6779 new_SV(sv);
8990e307 6780 SvFLAGS(sv) = SVs_TEMP;
677b06e3
GS
6781 EXTEND_MORTAL(1);
6782 PL_tmps_stack[++PL_tmps_ix] = sv;
79072805
LW
6783 return sv;
6784}
6785
954c1994
GS
6786/*
6787=for apidoc sv_2mortal
6788
d4236ebc
DM
6789Marks an existing SV as mortal. The SV will be destroyed "soon", either
6790by an explicit call to FREETMPS, or by an implicit call at places such as
37d2ac18
NC
6791statement boundaries. SvTEMP() is turned on which means that the SV's
6792string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
6793and C<sv_mortalcopy>.
954c1994
GS
6794
6795=cut
6796*/
6797
79072805 6798SV *
864dbfa3 6799Perl_sv_2mortal(pTHX_ register SV *sv)
79072805 6800{
27da23d5 6801 dVAR;
79072805 6802 if (!sv)
7a5b473e 6803 return NULL;
d689ffdd 6804 if (SvREADONLY(sv) && SvIMMORTAL(sv))
11162842 6805 return sv;
677b06e3
GS
6806 EXTEND_MORTAL(1);
6807 PL_tmps_stack[++PL_tmps_ix] = sv;
8990e307 6808 SvTEMP_on(sv);
79072805
LW
6809 return sv;
6810}
6811
954c1994
GS
6812/*
6813=for apidoc newSVpv
6814
6815Creates a new SV and copies a string into it. The reference count for the
6816SV is set to 1. If C<len> is zero, Perl will compute the length using
6817strlen(). For efficiency, consider using C<newSVpvn> instead.
6818
6819=cut
6820*/
6821
79072805 6822SV *
864dbfa3 6823Perl_newSVpv(pTHX_ const char *s, STRLEN len)
79072805 6824{
97aff369 6825 dVAR;
463ee0b2 6826 register SV *sv;
79072805 6827
4561caa4 6828 new_SV(sv);
616d8c9c 6829 sv_setpvn(sv,s,len ? len : strlen(s));
79072805
LW
6830 return sv;
6831}
6832
954c1994
GS
6833/*
6834=for apidoc newSVpvn
6835
6836Creates a new SV and copies a string into it. The reference count for the
1c846c1f 6837SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
954c1994 6838string. You are responsible for ensuring that the source string is at least
9e09f5f2 6839C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
954c1994
GS
6840
6841=cut
6842*/
6843
9da1e3b5 6844SV *
864dbfa3 6845Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
9da1e3b5 6846{
97aff369 6847 dVAR;
9da1e3b5
MUN
6848 register SV *sv;
6849
6850 new_SV(sv);
9da1e3b5
MUN
6851 sv_setpvn(sv,s,len);
6852 return sv;
6853}
6854
bd08039b
NC
6855
6856/*
926f8064 6857=for apidoc newSVhek
bd08039b
NC
6858
6859Creates a new SV from the hash key structure. It will generate scalars that
5aaec2b4
NC
6860point to the shared string table where possible. Returns a new (undefined)
6861SV if the hek is NULL.
bd08039b
NC
6862
6863=cut
6864*/
6865
6866SV *
c1b02ed8 6867Perl_newSVhek(pTHX_ const HEK *hek)
bd08039b 6868{
97aff369 6869 dVAR;
5aaec2b4
NC
6870 if (!hek) {
6871 SV *sv;
6872
6873 new_SV(sv);
6874 return sv;
6875 }
6876
bd08039b
NC
6877 if (HEK_LEN(hek) == HEf_SVKEY) {
6878 return newSVsv(*(SV**)HEK_KEY(hek));
6879 } else {
6880 const int flags = HEK_FLAGS(hek);
6881 if (flags & HVhek_WASUTF8) {
6882 /* Trouble :-)
6883 Andreas would like keys he put in as utf8 to come back as utf8
6884 */
6885 STRLEN utf8_len = HEK_LEN(hek);
b64e5050
AL
6886 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
6887 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
bd08039b
NC
6888
6889 SvUTF8_on (sv);
6890 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
6891 return sv;
6892 } else if (flags & HVhek_REHASH) {
6893 /* We don't have a pointer to the hv, so we have to replicate the
6894 flag into every HEK. This hv is using custom a hasing
6895 algorithm. Hence we can't return a shared string scalar, as
6896 that would contain the (wrong) hash value, and might get passed
6897 into an hv routine with a regular hash */
6898
b64e5050 6899 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
bd08039b
NC
6900 if (HEK_UTF8(hek))
6901 SvUTF8_on (sv);
6902 return sv;
6903 }
6904 /* This will be overwhelminly the most common case. */
6905 return newSVpvn_share(HEK_KEY(hek),
6906 (HEK_UTF8(hek) ? -HEK_LEN(hek) : HEK_LEN(hek)),
6907 HEK_HASH(hek));
6908 }
6909}
6910
1c846c1f
NIS
6911/*
6912=for apidoc newSVpvn_share
6913
3f7c398e 6914Creates a new SV with its SvPVX_const pointing to a shared string in the string
645c22ef
DM
6915table. If the string does not already exist in the table, it is created
6916first. Turns on READONLY and FAKE. The string's hash is stored in the UV
6917slot of the SV; if the C<hash> parameter is non-zero, that value is used;
6918otherwise the hash is computed. The idea here is that as the string table
3f7c398e 6919is used for shared hash keys these strings will have SvPVX_const == HeKEY and
645c22ef 6920hash lookup will avoid string compare.
1c846c1f
NIS
6921
6922=cut
6923*/
6924
6925SV *
c3654f1a 6926Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
1c846c1f 6927{
97aff369 6928 dVAR;
1c846c1f 6929 register SV *sv;
c3654f1a
IH
6930 bool is_utf8 = FALSE;
6931 if (len < 0) {
77caf834 6932 STRLEN tmplen = -len;
c3654f1a 6933 is_utf8 = TRUE;
75a54232 6934 /* See the note in hv.c:hv_fetch() --jhi */
e1ec3a88 6935 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
75a54232
JH
6936 len = tmplen;
6937 }
1c846c1f 6938 if (!hash)
5afd6d42 6939 PERL_HASH(hash, src, len);
1c846c1f 6940 new_SV(sv);
bdd68bc3 6941 sv_upgrade(sv, SVt_PV);
f880fe2f 6942 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
b162af07 6943 SvCUR_set(sv, len);
b162af07 6944 SvLEN_set(sv, 0);
1c846c1f
NIS
6945 SvREADONLY_on(sv);
6946 SvFAKE_on(sv);
6947 SvPOK_on(sv);
c3654f1a
IH
6948 if (is_utf8)
6949 SvUTF8_on(sv);
1c846c1f
NIS
6950 return sv;
6951}
6952
645c22ef 6953
cea2e8a9 6954#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
6955
6956/* pTHX_ magic can't cope with varargs, so this is a no-context
6957 * version of the main function, (which may itself be aliased to us).
6958 * Don't access this version directly.
6959 */
6960
46fc3d4c 6961SV *
cea2e8a9 6962Perl_newSVpvf_nocontext(const char* pat, ...)
46fc3d4c 6963{
cea2e8a9 6964 dTHX;
46fc3d4c 6965 register SV *sv;
6966 va_list args;
46fc3d4c 6967 va_start(args, pat);
c5be433b 6968 sv = vnewSVpvf(pat, &args);
46fc3d4c 6969 va_end(args);
6970 return sv;
6971}
cea2e8a9 6972#endif
46fc3d4c 6973
954c1994
GS
6974/*
6975=for apidoc newSVpvf
6976
645c22ef 6977Creates a new SV and initializes it with the string formatted like
954c1994
GS
6978C<sprintf>.
6979
6980=cut
6981*/
6982
cea2e8a9
GS
6983SV *
6984Perl_newSVpvf(pTHX_ const char* pat, ...)
6985{
6986 register SV *sv;
6987 va_list args;
cea2e8a9 6988 va_start(args, pat);
c5be433b 6989 sv = vnewSVpvf(pat, &args);
cea2e8a9
GS
6990 va_end(args);
6991 return sv;
6992}
46fc3d4c 6993
645c22ef
DM
6994/* backend for newSVpvf() and newSVpvf_nocontext() */
6995
79072805 6996SV *
c5be433b
GS
6997Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
6998{
97aff369 6999 dVAR;
c5be433b
GS
7000 register SV *sv;
7001 new_SV(sv);
4608196e 7002 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
7003 return sv;
7004}
7005
954c1994
GS
7006/*
7007=for apidoc newSVnv
7008
7009Creates a new SV and copies a floating point value into it.
7010The reference count for the SV is set to 1.
7011
7012=cut
7013*/
7014
c5be433b 7015SV *
65202027 7016Perl_newSVnv(pTHX_ NV n)
79072805 7017{
97aff369 7018 dVAR;
463ee0b2 7019 register SV *sv;
79072805 7020
4561caa4 7021 new_SV(sv);
79072805
LW
7022 sv_setnv(sv,n);
7023 return sv;
7024}
7025
954c1994
GS
7026/*
7027=for apidoc newSViv
7028
7029Creates a new SV and copies an integer into it. The reference count for the
7030SV is set to 1.
7031
7032=cut
7033*/
7034
79072805 7035SV *
864dbfa3 7036Perl_newSViv(pTHX_ IV i)
79072805 7037{
97aff369 7038 dVAR;
463ee0b2 7039 register SV *sv;
79072805 7040
4561caa4 7041 new_SV(sv);
79072805
LW
7042 sv_setiv(sv,i);
7043 return sv;
7044}
7045
954c1994 7046/*
1a3327fb
JH
7047=for apidoc newSVuv
7048
7049Creates a new SV and copies an unsigned integer into it.
7050The reference count for the SV is set to 1.
7051
7052=cut
7053*/
7054
7055SV *
7056Perl_newSVuv(pTHX_ UV u)
7057{
97aff369 7058 dVAR;
1a3327fb
JH
7059 register SV *sv;
7060
7061 new_SV(sv);
7062 sv_setuv(sv,u);
7063 return sv;
7064}
7065
7066/*
954c1994
GS
7067=for apidoc newRV_noinc
7068
7069Creates an RV wrapper for an SV. The reference count for the original
7070SV is B<not> incremented.
7071
7072=cut
7073*/
7074
2304df62 7075SV *
864dbfa3 7076Perl_newRV_noinc(pTHX_ SV *tmpRef)
2304df62 7077{
97aff369 7078 dVAR;
2304df62
AD
7079 register SV *sv;
7080
4561caa4 7081 new_SV(sv);
2304df62 7082 sv_upgrade(sv, SVt_RV);
76e3520e 7083 SvTEMP_off(tmpRef);
b162af07 7084 SvRV_set(sv, tmpRef);
2304df62 7085 SvROK_on(sv);
2304df62
AD
7086 return sv;
7087}
7088
ff276b08 7089/* newRV_inc is the official function name to use now.
645c22ef
DM
7090 * newRV_inc is in fact #defined to newRV in sv.h
7091 */
7092
5f05dabc 7093SV *
7f466ec7 7094Perl_newRV(pTHX_ SV *sv)
5f05dabc 7095{
97aff369 7096 dVAR;
7f466ec7 7097 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
5f05dabc 7098}
5f05dabc 7099
954c1994
GS
7100/*
7101=for apidoc newSVsv
7102
7103Creates a new SV which is an exact duplicate of the original SV.
645c22ef 7104(Uses C<sv_setsv>).
954c1994
GS
7105
7106=cut
7107*/
7108
79072805 7109SV *
864dbfa3 7110Perl_newSVsv(pTHX_ register SV *old)
79072805 7111{
97aff369 7112 dVAR;
463ee0b2 7113 register SV *sv;
79072805
LW
7114
7115 if (!old)
7a5b473e 7116 return NULL;
8990e307 7117 if (SvTYPE(old) == SVTYPEMASK) {
0453d815 7118 if (ckWARN_d(WARN_INTERNAL))
9014280d 7119 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
a0714e2c 7120 return NULL;
79072805 7121 }
4561caa4 7122 new_SV(sv);
e90aabeb
NC
7123 /* SV_GMAGIC is the default for sv_setv()
7124 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7125 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7126 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
463ee0b2 7127 return sv;
79072805
LW
7128}
7129
645c22ef
DM
7130/*
7131=for apidoc sv_reset
7132
7133Underlying implementation for the C<reset> Perl function.
7134Note that the perl-level function is vaguely deprecated.
7135
7136=cut
7137*/
7138
79072805 7139void
e1ec3a88 7140Perl_sv_reset(pTHX_ register const char *s, HV *stash)
79072805 7141{
27da23d5 7142 dVAR;
4802d5d7 7143 char todo[PERL_UCHAR_MAX+1];
79072805 7144
49d8d3a1
MB
7145 if (!stash)
7146 return;
7147
79072805 7148 if (!*s) { /* reset ?? searches */
aec46f14 7149 MAGIC * const mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
8d2f4536
NC
7150 if (mg) {
7151 PMOP *pm = (PMOP *) mg->mg_obj;
7152 while (pm) {
7153 pm->op_pmdynflags &= ~PMdf_USED;
7154 pm = pm->op_pmnext;
7155 }
79072805
LW
7156 }
7157 return;
7158 }
7159
7160 /* reset variables */
7161
7162 if (!HvARRAY(stash))
7163 return;
463ee0b2
LW
7164
7165 Zero(todo, 256, char);
79072805 7166 while (*s) {
b464bac0
AL
7167 I32 max;
7168 I32 i = (unsigned char)*s;
79072805
LW
7169 if (s[1] == '-') {
7170 s += 2;
7171 }
4802d5d7 7172 max = (unsigned char)*s++;
79072805 7173 for ( ; i <= max; i++) {
463ee0b2
LW
7174 todo[i] = 1;
7175 }
a0d0e21e 7176 for (i = 0; i <= (I32) HvMAX(stash); i++) {
b464bac0 7177 HE *entry;
79072805 7178 for (entry = HvARRAY(stash)[i];
9e35f4b3
GS
7179 entry;
7180 entry = HeNEXT(entry))
7181 {
b464bac0
AL
7182 register GV *gv;
7183 register SV *sv;
7184
1edc1566 7185 if (!todo[(U8)*HeKEY(entry)])
463ee0b2 7186 continue;
1edc1566 7187 gv = (GV*)HeVAL(entry);
79072805 7188 sv = GvSV(gv);
e203899d
NC
7189 if (sv) {
7190 if (SvTHINKFIRST(sv)) {
7191 if (!SvREADONLY(sv) && SvROK(sv))
7192 sv_unref(sv);
7193 /* XXX Is this continue a bug? Why should THINKFIRST
7194 exempt us from resetting arrays and hashes? */
7195 continue;
7196 }
7197 SvOK_off(sv);
7198 if (SvTYPE(sv) >= SVt_PV) {
7199 SvCUR_set(sv, 0);
bd61b366 7200 if (SvPVX_const(sv) != NULL)
e203899d
NC
7201 *SvPVX(sv) = '\0';
7202 SvTAINT(sv);
7203 }
79072805
LW
7204 }
7205 if (GvAV(gv)) {
7206 av_clear(GvAV(gv));
7207 }
bfcb3514 7208 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
b0269e46
AB
7209#if defined(VMS)
7210 Perl_die(aTHX_ "Can't reset %%ENV on this system");
7211#else /* ! VMS */
463ee0b2 7212 hv_clear(GvHV(gv));
b0269e46
AB
7213# if defined(USE_ENVIRON_ARRAY)
7214 if (gv == PL_envgv)
7215 my_clearenv();
7216# endif /* USE_ENVIRON_ARRAY */
7217#endif /* VMS */
79072805
LW
7218 }
7219 }
7220 }
7221 }
7222}
7223
645c22ef
DM
7224/*
7225=for apidoc sv_2io
7226
7227Using various gambits, try to get an IO from an SV: the IO slot if its a
7228GV; or the recursive result if we're an RV; or the IO slot of the symbol
7229named after the PV if we're a string.
7230
7231=cut
7232*/
7233
46fc3d4c 7234IO*
864dbfa3 7235Perl_sv_2io(pTHX_ SV *sv)
46fc3d4c 7236{
7237 IO* io;
7238 GV* gv;
7239
7240 switch (SvTYPE(sv)) {
7241 case SVt_PVIO:
7242 io = (IO*)sv;
7243 break;
7244 case SVt_PVGV:
7245 gv = (GV*)sv;
7246 io = GvIO(gv);
7247 if (!io)
cea2e8a9 7248 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
46fc3d4c 7249 break;
7250 default:
7251 if (!SvOK(sv))
cea2e8a9 7252 Perl_croak(aTHX_ PL_no_usym, "filehandle");
46fc3d4c 7253 if (SvROK(sv))
7254 return sv_2io(SvRV(sv));
f776e3cd 7255 gv = gv_fetchsv(sv, 0, SVt_PVIO);
46fc3d4c 7256 if (gv)
7257 io = GvIO(gv);
7258 else
7259 io = 0;
7260 if (!io)
35c1215d 7261 Perl_croak(aTHX_ "Bad filehandle: %"SVf, sv);
46fc3d4c 7262 break;
7263 }
7264 return io;
7265}
7266
645c22ef
DM
7267/*
7268=for apidoc sv_2cv
7269
7270Using various gambits, try to get a CV from an SV; in addition, try if
7271possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
f2c0649b 7272The flags in C<lref> are passed to sv_fetchsv.
645c22ef
DM
7273
7274=cut
7275*/
7276
79072805 7277CV *
864dbfa3 7278Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
79072805 7279{
27da23d5 7280 dVAR;
a0714e2c 7281 GV *gv = NULL;
601f1833 7282 CV *cv = NULL;
79072805 7283
85dec29a
NC
7284 if (!sv) {
7285 *st = NULL;
7286 *gvp = NULL;
7287 return NULL;
7288 }
79072805 7289 switch (SvTYPE(sv)) {
79072805
LW
7290 case SVt_PVCV:
7291 *st = CvSTASH(sv);
a0714e2c 7292 *gvp = NULL;
79072805
LW
7293 return (CV*)sv;
7294 case SVt_PVHV:
7295 case SVt_PVAV:
ef58ba18 7296 *st = NULL;
a0714e2c 7297 *gvp = NULL;
601f1833 7298 return NULL;
8990e307
LW
7299 case SVt_PVGV:
7300 gv = (GV*)sv;
a0d0e21e 7301 *gvp = gv;
8990e307
LW
7302 *st = GvESTASH(gv);
7303 goto fix_gv;
7304
79072805 7305 default:
5b295bef 7306 SvGETMAGIC(sv);
a0d0e21e 7307 if (SvROK(sv)) {
823a54a3 7308 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
f5284f61
IZ
7309 tryAMAGICunDEREF(to_cv);
7310
62f274bf
GS
7311 sv = SvRV(sv);
7312 if (SvTYPE(sv) == SVt_PVCV) {
7313 cv = (CV*)sv;
a0714e2c 7314 *gvp = NULL;
62f274bf
GS
7315 *st = CvSTASH(cv);
7316 return cv;
7317 }
7318 else if(isGV(sv))
7319 gv = (GV*)sv;
7320 else
cea2e8a9 7321 Perl_croak(aTHX_ "Not a subroutine reference");
a0d0e21e 7322 }
62f274bf 7323 else if (isGV(sv))
79072805
LW
7324 gv = (GV*)sv;
7325 else
7a5fd60d 7326 gv = gv_fetchsv(sv, lref, SVt_PVCV);
79072805 7327 *gvp = gv;
ef58ba18
NC
7328 if (!gv) {
7329 *st = NULL;
601f1833 7330 return NULL;
ef58ba18 7331 }
e26df76a
NC
7332 /* Some flags to gv_fetchsv mean don't really create the GV */
7333 if (SvTYPE(gv) != SVt_PVGV) {
7334 *st = NULL;
7335 return NULL;
7336 }
79072805 7337 *st = GvESTASH(gv);
8990e307 7338 fix_gv:
8ebc5c01 7339 if (lref && !GvCVu(gv)) {
4633a7c4 7340 SV *tmpsv;
748a9306 7341 ENTER;
561b68a9 7342 tmpsv = newSV(0);
bd61b366 7343 gv_efullname3(tmpsv, gv, NULL);
f6ec51f7
GS
7344 /* XXX this is probably not what they think they're getting.
7345 * It has the same effect as "sub name;", i.e. just a forward
7346 * declaration! */
774d564b 7347 newSUB(start_subparse(FALSE, 0),
4633a7c4 7348 newSVOP(OP_CONST, 0, tmpsv),
5f66b61c 7349 NULL, NULL);
748a9306 7350 LEAVE;
8ebc5c01 7351 if (!GvCVu(gv))
35c1215d
NC
7352 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7353 sv);
8990e307 7354 }
8ebc5c01 7355 return GvCVu(gv);
79072805
LW
7356 }
7357}
7358
c461cf8f
JH
7359/*
7360=for apidoc sv_true
7361
7362Returns true if the SV has a true value by Perl's rules.
645c22ef
DM
7363Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7364instead use an in-line version.
c461cf8f
JH
7365
7366=cut
7367*/
7368
79072805 7369I32
864dbfa3 7370Perl_sv_true(pTHX_ register SV *sv)
79072805 7371{
8990e307
LW
7372 if (!sv)
7373 return 0;
79072805 7374 if (SvPOK(sv)) {
823a54a3
AL
7375 register const XPV* const tXpv = (XPV*)SvANY(sv);
7376 if (tXpv &&
c2f1de04 7377 (tXpv->xpv_cur > 1 ||
339049b0 7378 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
79072805
LW
7379 return 1;
7380 else
7381 return 0;
7382 }
7383 else {
7384 if (SvIOK(sv))
463ee0b2 7385 return SvIVX(sv) != 0;
79072805
LW
7386 else {
7387 if (SvNOK(sv))
463ee0b2 7388 return SvNVX(sv) != 0.0;
79072805 7389 else
463ee0b2 7390 return sv_2bool(sv);
79072805
LW
7391 }
7392 }
7393}
79072805 7394
645c22ef 7395/*
c461cf8f
JH
7396=for apidoc sv_pvn_force
7397
7398Get a sensible string out of the SV somehow.
645c22ef
DM
7399A private implementation of the C<SvPV_force> macro for compilers which
7400can't cope with complex macro expressions. Always use the macro instead.
c461cf8f 7401
8d6d96c1
HS
7402=for apidoc sv_pvn_force_flags
7403
7404Get a sensible string out of the SV somehow.
7405If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7406appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7407implemented in terms of this function.
645c22ef
DM
7408You normally want to use the various wrapper macros instead: see
7409C<SvPV_force> and C<SvPV_force_nomg>
8d6d96c1
HS
7410
7411=cut
7412*/
7413
7414char *
7415Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7416{
97aff369 7417 dVAR;
6fc92669 7418 if (SvTHINKFIRST(sv) && !SvROK(sv))
765f542d 7419 sv_force_normal_flags(sv, 0);
1c846c1f 7420
a0d0e21e 7421 if (SvPOK(sv)) {
13c5b33c
NC
7422 if (lp)
7423 *lp = SvCUR(sv);
a0d0e21e
LW
7424 }
7425 else {
a3b680e6 7426 char *s;
13c5b33c
NC
7427 STRLEN len;
7428
4d84ee25 7429 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
b64e5050 7430 const char * const ref = sv_reftype(sv,0);
4d84ee25
NC
7431 if (PL_op)
7432 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
b64e5050 7433 ref, OP_NAME(PL_op));
4d84ee25 7434 else
b64e5050 7435 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
4d84ee25 7436 }
b64e5050 7437 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
cea2e8a9 7438 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
53e06cf0 7439 OP_NAME(PL_op));
b64e5050 7440 s = sv_2pv_flags(sv, &len, flags);
13c5b33c
NC
7441 if (lp)
7442 *lp = len;
7443
3f7c398e 7444 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
a0d0e21e
LW
7445 if (SvROK(sv))
7446 sv_unref(sv);
862a34c6 7447 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
a0d0e21e 7448 SvGROW(sv, len + 1);
706aa1c9 7449 Move(s,SvPVX(sv),len,char);
a0d0e21e
LW
7450 SvCUR_set(sv, len);
7451 *SvEND(sv) = '\0';
7452 }
7453 if (!SvPOK(sv)) {
7454 SvPOK_on(sv); /* validate pointer */
7455 SvTAINT(sv);
1d7c1841 7456 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 7457 PTR2UV(sv),SvPVX_const(sv)));
a0d0e21e
LW
7458 }
7459 }
4d84ee25 7460 return SvPVX_mutable(sv);
a0d0e21e
LW
7461}
7462
645c22ef 7463/*
645c22ef
DM
7464=for apidoc sv_pvbyten_force
7465
0feed65a 7466The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
645c22ef
DM
7467
7468=cut
7469*/
7470
7340a771
GS
7471char *
7472Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
7473{
46ec2f14 7474 sv_pvn_force(sv,lp);
ffebcc3e 7475 sv_utf8_downgrade(sv,0);
46ec2f14
TS
7476 *lp = SvCUR(sv);
7477 return SvPVX(sv);
7340a771
GS
7478}
7479
645c22ef 7480/*
c461cf8f
JH
7481=for apidoc sv_pvutf8n_force
7482
0feed65a 7483The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
c461cf8f
JH
7484
7485=cut
7486*/
7487
7340a771
GS
7488char *
7489Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
7490{
46ec2f14 7491 sv_pvn_force(sv,lp);
560a288e 7492 sv_utf8_upgrade(sv);
46ec2f14
TS
7493 *lp = SvCUR(sv);
7494 return SvPVX(sv);
7340a771
GS
7495}
7496
c461cf8f
JH
7497/*
7498=for apidoc sv_reftype
7499
7500Returns a string describing what the SV is a reference to.
7501
7502=cut
7503*/
7504
1cb0ed9b 7505char *
bfed75c6 7506Perl_sv_reftype(pTHX_ const SV *sv, int ob)
a0d0e21e 7507{
07409e01
NC
7508 /* The fact that I don't need to downcast to char * everywhere, only in ?:
7509 inside return suggests a const propagation bug in g++. */
c86bf373 7510 if (ob && SvOBJECT(sv)) {
1b6737cc 7511 char * const name = HvNAME_get(SvSTASH(sv));
07409e01 7512 return name ? name : (char *) "__ANON__";
c86bf373 7513 }
a0d0e21e
LW
7514 else {
7515 switch (SvTYPE(sv)) {
7516 case SVt_NULL:
7517 case SVt_IV:
7518 case SVt_NV:
7519 case SVt_RV:
7520 case SVt_PV:
7521 case SVt_PVIV:
7522 case SVt_PVNV:
7523 case SVt_PVMG:
7524 case SVt_PVBM:
1cb0ed9b 7525 if (SvVOK(sv))
439cb1c4 7526 return "VSTRING";
a0d0e21e
LW
7527 if (SvROK(sv))
7528 return "REF";
7529 else
7530 return "SCALAR";
1cb0ed9b 7531
07409e01 7532 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
be65207d
DM
7533 /* tied lvalues should appear to be
7534 * scalars for backwards compatitbility */
7535 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
07409e01 7536 ? "SCALAR" : "LVALUE");
a0d0e21e
LW
7537 case SVt_PVAV: return "ARRAY";
7538 case SVt_PVHV: return "HASH";
7539 case SVt_PVCV: return "CODE";
7540 case SVt_PVGV: return "GLOB";
1d2dff63 7541 case SVt_PVFM: return "FORMAT";
27f9d8f3 7542 case SVt_PVIO: return "IO";
a0d0e21e
LW
7543 default: return "UNKNOWN";
7544 }
7545 }
7546}
7547
954c1994
GS
7548/*
7549=for apidoc sv_isobject
7550
7551Returns a boolean indicating whether the SV is an RV pointing to a blessed
7552object. If the SV is not an RV, or if the object is not blessed, then this
7553will return false.
7554
7555=cut
7556*/
7557
463ee0b2 7558int
864dbfa3 7559Perl_sv_isobject(pTHX_ SV *sv)
85e6fe83 7560{
68dc0745 7561 if (!sv)
7562 return 0;
5b295bef 7563 SvGETMAGIC(sv);
85e6fe83
LW
7564 if (!SvROK(sv))
7565 return 0;
7566 sv = (SV*)SvRV(sv);
7567 if (!SvOBJECT(sv))
7568 return 0;
7569 return 1;
7570}
7571
954c1994
GS
7572/*
7573=for apidoc sv_isa
7574
7575Returns a boolean indicating whether the SV is blessed into the specified
7576class. This does not check for subtypes; use C<sv_derived_from> to verify
7577an inheritance relationship.
7578
7579=cut
7580*/
7581
85e6fe83 7582int
864dbfa3 7583Perl_sv_isa(pTHX_ SV *sv, const char *name)
463ee0b2 7584{
bfcb3514 7585 const char *hvname;
68dc0745 7586 if (!sv)
7587 return 0;
5b295bef 7588 SvGETMAGIC(sv);
ed6116ce 7589 if (!SvROK(sv))
463ee0b2 7590 return 0;
ed6116ce
LW
7591 sv = (SV*)SvRV(sv);
7592 if (!SvOBJECT(sv))
463ee0b2 7593 return 0;
bfcb3514
NC
7594 hvname = HvNAME_get(SvSTASH(sv));
7595 if (!hvname)
e27ad1f2 7596 return 0;
463ee0b2 7597
bfcb3514 7598 return strEQ(hvname, name);
463ee0b2
LW
7599}
7600
954c1994
GS
7601/*
7602=for apidoc newSVrv
7603
7604Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
7605it will be upgraded to one. If C<classname> is non-null then the new SV will
7606be blessed in the specified package. The new SV is returned and its
7607reference count is 1.
7608
7609=cut
7610*/
7611
463ee0b2 7612SV*
864dbfa3 7613Perl_newSVrv(pTHX_ SV *rv, const char *classname)
463ee0b2 7614{
97aff369 7615 dVAR;
463ee0b2
LW
7616 SV *sv;
7617
4561caa4 7618 new_SV(sv);
51cf62d8 7619
765f542d 7620 SV_CHECK_THINKFIRST_COW_DROP(rv);
51cf62d8 7621 SvAMAGIC_off(rv);
51cf62d8 7622
0199fce9 7623 if (SvTYPE(rv) >= SVt_PVMG) {
a3b680e6 7624 const U32 refcnt = SvREFCNT(rv);
0199fce9
JD
7625 SvREFCNT(rv) = 0;
7626 sv_clear(rv);
7627 SvFLAGS(rv) = 0;
7628 SvREFCNT(rv) = refcnt;
7629 }
7630
51cf62d8 7631 if (SvTYPE(rv) < SVt_RV)
0199fce9
JD
7632 sv_upgrade(rv, SVt_RV);
7633 else if (SvTYPE(rv) > SVt_RV) {
8bd4d4c5 7634 SvPV_free(rv);
0199fce9
JD
7635 SvCUR_set(rv, 0);
7636 SvLEN_set(rv, 0);
7637 }
51cf62d8 7638
0c34ef67 7639 SvOK_off(rv);
b162af07 7640 SvRV_set(rv, sv);
ed6116ce 7641 SvROK_on(rv);
463ee0b2 7642
a0d0e21e 7643 if (classname) {
1b6737cc 7644 HV* const stash = gv_stashpv(classname, TRUE);
a0d0e21e
LW
7645 (void)sv_bless(rv, stash);
7646 }
7647 return sv;
7648}
7649
954c1994
GS
7650/*
7651=for apidoc sv_setref_pv
7652
7653Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
7654argument will be upgraded to an RV. That RV will be modified to point to
7655the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7656into the SV. The C<classname> argument indicates the package for the
bd61b366 7657blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7658will have a reference count of 1, and the RV will be returned.
954c1994
GS
7659
7660Do not use with other Perl types such as HV, AV, SV, CV, because those
7661objects will become corrupted by the pointer copy process.
7662
7663Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7664
7665=cut
7666*/
7667
a0d0e21e 7668SV*
864dbfa3 7669Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
a0d0e21e 7670{
97aff369 7671 dVAR;
189b2af5 7672 if (!pv) {
3280af22 7673 sv_setsv(rv, &PL_sv_undef);
189b2af5
GS
7674 SvSETMAGIC(rv);
7675 }
a0d0e21e 7676 else
56431972 7677 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
a0d0e21e
LW
7678 return rv;
7679}
7680
954c1994
GS
7681/*
7682=for apidoc sv_setref_iv
7683
7684Copies an integer into a new SV, optionally blessing the SV. The C<rv>
7685argument will be upgraded to an RV. That RV will be modified to point to
7686the new SV. The C<classname> argument indicates the package for the
bd61b366 7687blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7688will have a reference count of 1, and the RV will be returned.
954c1994
GS
7689
7690=cut
7691*/
7692
a0d0e21e 7693SV*
864dbfa3 7694Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
a0d0e21e
LW
7695{
7696 sv_setiv(newSVrv(rv,classname), iv);
7697 return rv;
7698}
7699
954c1994 7700/*
e1c57cef
JH
7701=for apidoc sv_setref_uv
7702
7703Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
7704argument will be upgraded to an RV. That RV will be modified to point to
7705the new SV. The C<classname> argument indicates the package for the
bd61b366 7706blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7707will have a reference count of 1, and the RV will be returned.
e1c57cef
JH
7708
7709=cut
7710*/
7711
7712SV*
7713Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7714{
7715 sv_setuv(newSVrv(rv,classname), uv);
7716 return rv;
7717}
7718
7719/*
954c1994
GS
7720=for apidoc sv_setref_nv
7721
7722Copies a double into a new SV, optionally blessing the SV. The C<rv>
7723argument will be upgraded to an RV. That RV will be modified to point to
7724the new SV. The C<classname> argument indicates the package for the
bd61b366 7725blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7726will have a reference count of 1, and the RV will be returned.
954c1994
GS
7727
7728=cut
7729*/
7730
a0d0e21e 7731SV*
65202027 7732Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
a0d0e21e
LW
7733{
7734 sv_setnv(newSVrv(rv,classname), nv);
7735 return rv;
7736}
463ee0b2 7737
954c1994
GS
7738/*
7739=for apidoc sv_setref_pvn
7740
7741Copies a string into a new SV, optionally blessing the SV. The length of the
7742string must be specified with C<n>. The C<rv> argument will be upgraded to
7743an RV. That RV will be modified to point to the new SV. The C<classname>
7744argument indicates the package for the blessing. Set C<classname> to
bd61b366 7745C<NULL> to avoid the blessing. The new SV will have a reference count
d34c2299 7746of 1, and the RV will be returned.
954c1994
GS
7747
7748Note that C<sv_setref_pv> copies the pointer while this copies the string.
7749
7750=cut
7751*/
7752
a0d0e21e 7753SV*
1b6737cc 7754Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, const char *pv, STRLEN n)
a0d0e21e
LW
7755{
7756 sv_setpvn(newSVrv(rv,classname), pv, n);
463ee0b2
LW
7757 return rv;
7758}
7759
954c1994
GS
7760/*
7761=for apidoc sv_bless
7762
7763Blesses an SV into a specified package. The SV must be an RV. The package
7764must be designated by its stash (see C<gv_stashpv()>). The reference count
7765of the SV is unaffected.
7766
7767=cut
7768*/
7769
a0d0e21e 7770SV*
864dbfa3 7771Perl_sv_bless(pTHX_ SV *sv, HV *stash)
a0d0e21e 7772{
97aff369 7773 dVAR;
76e3520e 7774 SV *tmpRef;
a0d0e21e 7775 if (!SvROK(sv))
cea2e8a9 7776 Perl_croak(aTHX_ "Can't bless non-reference value");
76e3520e
GS
7777 tmpRef = SvRV(sv);
7778 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
7779 if (SvREADONLY(tmpRef))
cea2e8a9 7780 Perl_croak(aTHX_ PL_no_modify);
76e3520e
GS
7781 if (SvOBJECT(tmpRef)) {
7782 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 7783 --PL_sv_objcount;
76e3520e 7784 SvREFCNT_dec(SvSTASH(tmpRef));
2e3febc6 7785 }
a0d0e21e 7786 }
76e3520e
GS
7787 SvOBJECT_on(tmpRef);
7788 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 7789 ++PL_sv_objcount;
862a34c6 7790 SvUPGRADE(tmpRef, SVt_PVMG);
b37c2d43 7791 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc_simple(stash));
a0d0e21e 7792
2e3febc6
CS
7793 if (Gv_AMG(stash))
7794 SvAMAGIC_on(sv);
7795 else
7796 SvAMAGIC_off(sv);
a0d0e21e 7797
1edbfb88
AB
7798 if(SvSMAGICAL(tmpRef))
7799 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
7800 mg_set(tmpRef);
7801
7802
ecdeb87c 7803
a0d0e21e
LW
7804 return sv;
7805}
7806
645c22ef 7807/* Downgrades a PVGV to a PVMG.
645c22ef
DM
7808 */
7809
76e3520e 7810STATIC void
cea2e8a9 7811S_sv_unglob(pTHX_ SV *sv)
a0d0e21e 7812{
97aff369 7813 dVAR;
850fabdf 7814 void *xpvmg;
b37c2d43 7815 SV * const temp = sv_newmortal();
850fabdf 7816
a0d0e21e
LW
7817 assert(SvTYPE(sv) == SVt_PVGV);
7818 SvFAKE_off(sv);
180488f8
NC
7819 gv_efullname3(temp, (GV *) sv, "*");
7820
f7877b28 7821 if (GvGP(sv)) {
1edc1566 7822 gp_free((GV*)sv);
f7877b28 7823 }
e826b3c7 7824 if (GvSTASH(sv)) {
e15faf7d 7825 sv_del_backref((SV*)GvSTASH(sv), sv);
5c284bb0 7826 GvSTASH(sv) = NULL;
e826b3c7 7827 }
a5f75d66 7828 GvMULTI_off(sv);
acda4c6a
NC
7829 if (GvNAME_HEK(sv)) {
7830 unshare_hek(GvNAME_HEK(sv));
7831 }
dedf8e73 7832 SvSCREAM_off(sv);
850fabdf
GS
7833
7834 /* need to keep SvANY(sv) in the right arena */
7835 xpvmg = new_XPVMG();
7836 StructCopy(SvANY(sv), xpvmg, XPVMG);
7837 del_XPVGV(SvANY(sv));
7838 SvANY(sv) = xpvmg;
7839
a0d0e21e
LW
7840 SvFLAGS(sv) &= ~SVTYPEMASK;
7841 SvFLAGS(sv) |= SVt_PVMG;
180488f8
NC
7842
7843 /* Intentionally not calling any local SET magic, as this isn't so much a
7844 set operation as merely an internal storage change. */
7845 sv_setsv_flags(sv, temp, 0);
a0d0e21e
LW
7846}
7847
954c1994 7848/*
840a7b70 7849=for apidoc sv_unref_flags
954c1994
GS
7850
7851Unsets the RV status of the SV, and decrements the reference count of
7852whatever was being referenced by the RV. This can almost be thought of
840a7b70
IZ
7853as a reversal of C<newSVrv>. The C<cflags> argument can contain
7854C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
7855(otherwise the decrementing is conditional on the reference count being
7856different from one or the reference being a readonly SV).
7889fe52 7857See C<SvROK_off>.
954c1994
GS
7858
7859=cut
7860*/
7861
ed6116ce 7862void
e15faf7d 7863Perl_sv_unref_flags(pTHX_ SV *ref, U32 flags)
ed6116ce 7864{
b64e5050 7865 SV* const target = SvRV(ref);
810b8aa5 7866
e15faf7d
NC
7867 if (SvWEAKREF(ref)) {
7868 sv_del_backref(target, ref);
7869 SvWEAKREF_off(ref);
7870 SvRV_set(ref, NULL);
810b8aa5
GS
7871 return;
7872 }
e15faf7d
NC
7873 SvRV_set(ref, NULL);
7874 SvROK_off(ref);
7875 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
04ca4930 7876 assigned to as BEGIN {$a = \"Foo"} will fail. */
e15faf7d
NC
7877 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
7878 SvREFCNT_dec(target);
840a7b70 7879 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
e15faf7d 7880 sv_2mortal(target); /* Schedule for freeing later */
ed6116ce 7881}
8990e307 7882
840a7b70 7883/*
645c22ef
DM
7884=for apidoc sv_untaint
7885
7886Untaint an SV. Use C<SvTAINTED_off> instead.
7887=cut
7888*/
7889
bbce6d69 7890void
864dbfa3 7891Perl_sv_untaint(pTHX_ SV *sv)
bbce6d69 7892{
13f57bf8 7893 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
b64e5050 7894 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
36477c24 7895 if (mg)
565764a8 7896 mg->mg_len &= ~1;
36477c24 7897 }
bbce6d69 7898}
7899
645c22ef
DM
7900/*
7901=for apidoc sv_tainted
7902
7903Test an SV for taintedness. Use C<SvTAINTED> instead.
7904=cut
7905*/
7906
bbce6d69 7907bool
864dbfa3 7908Perl_sv_tainted(pTHX_ SV *sv)
bbce6d69 7909{
13f57bf8 7910 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
823a54a3 7911 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
2ddb8a4f 7912 if (mg && (mg->mg_len & 1) )
36477c24 7913 return TRUE;
7914 }
7915 return FALSE;
bbce6d69 7916}
7917
09540bc3
JH
7918/*
7919=for apidoc sv_setpviv
7920
7921Copies an integer into the given SV, also updating its string value.
7922Does not handle 'set' magic. See C<sv_setpviv_mg>.
7923
7924=cut
7925*/
7926
7927void
7928Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
7929{
7930 char buf[TYPE_CHARS(UV)];
7931 char *ebuf;
b64e5050 7932 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
09540bc3
JH
7933
7934 sv_setpvn(sv, ptr, ebuf - ptr);
7935}
7936
7937/*
7938=for apidoc sv_setpviv_mg
7939
7940Like C<sv_setpviv>, but also handles 'set' magic.
7941
7942=cut
7943*/
7944
7945void
7946Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
7947{
df7eb254 7948 sv_setpviv(sv, iv);
09540bc3
JH
7949 SvSETMAGIC(sv);
7950}
7951
cea2e8a9 7952#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
7953
7954/* pTHX_ magic can't cope with varargs, so this is a no-context
7955 * version of the main function, (which may itself be aliased to us).
7956 * Don't access this version directly.
7957 */
7958
cea2e8a9
GS
7959void
7960Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
7961{
7962 dTHX;
7963 va_list args;
7964 va_start(args, pat);
c5be433b 7965 sv_vsetpvf(sv, pat, &args);
cea2e8a9
GS
7966 va_end(args);
7967}
7968
645c22ef
DM
7969/* pTHX_ magic can't cope with varargs, so this is a no-context
7970 * version of the main function, (which may itself be aliased to us).
7971 * Don't access this version directly.
7972 */
cea2e8a9
GS
7973
7974void
7975Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
7976{
7977 dTHX;
7978 va_list args;
7979 va_start(args, pat);
c5be433b 7980 sv_vsetpvf_mg(sv, pat, &args);
cea2e8a9 7981 va_end(args);
cea2e8a9
GS
7982}
7983#endif
7984
954c1994
GS
7985/*
7986=for apidoc sv_setpvf
7987
bffc3d17
SH
7988Works like C<sv_catpvf> but copies the text into the SV instead of
7989appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
954c1994
GS
7990
7991=cut
7992*/
7993
46fc3d4c 7994void
864dbfa3 7995Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
46fc3d4c 7996{
7997 va_list args;
46fc3d4c 7998 va_start(args, pat);
c5be433b 7999 sv_vsetpvf(sv, pat, &args);
46fc3d4c 8000 va_end(args);
8001}
8002
bffc3d17
SH
8003/*
8004=for apidoc sv_vsetpvf
8005
8006Works like C<sv_vcatpvf> but copies the text into the SV instead of
8007appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8008
8009Usually used via its frontend C<sv_setpvf>.
8010
8011=cut
8012*/
645c22ef 8013
c5be433b
GS
8014void
8015Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8016{
4608196e 8017 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b 8018}
ef50df4b 8019
954c1994
GS
8020/*
8021=for apidoc sv_setpvf_mg
8022
8023Like C<sv_setpvf>, but also handles 'set' magic.
8024
8025=cut
8026*/
8027
ef50df4b 8028void
864dbfa3 8029Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
ef50df4b
GS
8030{
8031 va_list args;
ef50df4b 8032 va_start(args, pat);
c5be433b 8033 sv_vsetpvf_mg(sv, pat, &args);
ef50df4b 8034 va_end(args);
c5be433b
GS
8035}
8036
bffc3d17
SH
8037/*
8038=for apidoc sv_vsetpvf_mg
8039
8040Like C<sv_vsetpvf>, but also handles 'set' magic.
8041
8042Usually used via its frontend C<sv_setpvf_mg>.
8043
8044=cut
8045*/
645c22ef 8046
c5be433b
GS
8047void
8048Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8049{
4608196e 8050 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
8051 SvSETMAGIC(sv);
8052}
8053
cea2e8a9 8054#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
8055
8056/* pTHX_ magic can't cope with varargs, so this is a no-context
8057 * version of the main function, (which may itself be aliased to us).
8058 * Don't access this version directly.
8059 */
8060
cea2e8a9
GS
8061void
8062Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8063{
8064 dTHX;
8065 va_list args;
8066 va_start(args, pat);
c5be433b 8067 sv_vcatpvf(sv, pat, &args);
cea2e8a9
GS
8068 va_end(args);
8069}
8070
645c22ef
DM
8071/* pTHX_ magic can't cope with varargs, so this is a no-context
8072 * version of the main function, (which may itself be aliased to us).
8073 * Don't access this version directly.
8074 */
8075
cea2e8a9
GS
8076void
8077Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8078{
8079 dTHX;
8080 va_list args;
8081 va_start(args, pat);
c5be433b 8082 sv_vcatpvf_mg(sv, pat, &args);
cea2e8a9 8083 va_end(args);
cea2e8a9
GS
8084}
8085#endif
8086
954c1994
GS
8087/*
8088=for apidoc sv_catpvf
8089
d5ce4a7c
GA
8090Processes its arguments like C<sprintf> and appends the formatted
8091output to an SV. If the appended data contains "wide" characters
8092(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8093and characters >255 formatted with %c), the original SV might get
bffc3d17 8094upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
cdd94ca7
NC
8095C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8096valid UTF-8; if the original SV was bytes, the pattern should be too.
954c1994 8097
d5ce4a7c 8098=cut */
954c1994 8099
46fc3d4c 8100void
864dbfa3 8101Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
46fc3d4c 8102{
8103 va_list args;
46fc3d4c 8104 va_start(args, pat);
c5be433b 8105 sv_vcatpvf(sv, pat, &args);
46fc3d4c 8106 va_end(args);
8107}
8108
bffc3d17
SH
8109/*
8110=for apidoc sv_vcatpvf
8111
8112Processes its arguments like C<vsprintf> and appends the formatted output
8113to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
8114
8115Usually used via its frontend C<sv_catpvf>.
8116
8117=cut
8118*/
645c22ef 8119
ef50df4b 8120void
c5be433b
GS
8121Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8122{
4608196e 8123 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
8124}
8125
954c1994
GS
8126/*
8127=for apidoc sv_catpvf_mg
8128
8129Like C<sv_catpvf>, but also handles 'set' magic.
8130
8131=cut
8132*/
8133
c5be433b 8134void
864dbfa3 8135Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
ef50df4b
GS
8136{
8137 va_list args;
ef50df4b 8138 va_start(args, pat);
c5be433b 8139 sv_vcatpvf_mg(sv, pat, &args);
ef50df4b 8140 va_end(args);
c5be433b
GS
8141}
8142
bffc3d17
SH
8143/*
8144=for apidoc sv_vcatpvf_mg
8145
8146Like C<sv_vcatpvf>, but also handles 'set' magic.
8147
8148Usually used via its frontend C<sv_catpvf_mg>.
8149
8150=cut
8151*/
645c22ef 8152
c5be433b
GS
8153void
8154Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8155{
4608196e 8156 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
8157 SvSETMAGIC(sv);
8158}
8159
954c1994
GS
8160/*
8161=for apidoc sv_vsetpvfn
8162
bffc3d17 8163Works like C<sv_vcatpvfn> but copies the text into the SV instead of
954c1994
GS
8164appending it.
8165
bffc3d17 8166Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
645c22ef 8167
954c1994
GS
8168=cut
8169*/
8170
46fc3d4c 8171void
7d5ea4e7 8172Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
46fc3d4c 8173{
8174 sv_setpvn(sv, "", 0);
7d5ea4e7 8175 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
46fc3d4c 8176}
8177
2d00ba3b 8178STATIC I32
9dd79c3f 8179S_expect_number(pTHX_ char** pattern)
211dfcf1 8180{
97aff369 8181 dVAR;
211dfcf1
HS
8182 I32 var = 0;
8183 switch (**pattern) {
8184 case '1': case '2': case '3':
8185 case '4': case '5': case '6':
8186 case '7': case '8': case '9':
2fba7546
GA
8187 var = *(*pattern)++ - '0';
8188 while (isDIGIT(**pattern)) {
5f66b61c 8189 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
2fba7546
GA
8190 if (tmp < var)
8191 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_NAME(PL_op) : "sv_vcatpvfn"));
8192 var = tmp;
8193 }
211dfcf1
HS
8194 }
8195 return var;
8196}
211dfcf1 8197
c445ea15
AL
8198STATIC char *
8199S_F0convert(NV nv, char *endbuf, STRLEN *len)
4151a5fe 8200{
a3b680e6 8201 const int neg = nv < 0;
4151a5fe 8202 UV uv;
4151a5fe
IZ
8203
8204 if (neg)
8205 nv = -nv;
8206 if (nv < UV_MAX) {
b464bac0 8207 char *p = endbuf;
4151a5fe 8208 nv += 0.5;
028f8eaa 8209 uv = (UV)nv;
4151a5fe
IZ
8210 if (uv & 1 && uv == nv)
8211 uv--; /* Round to even */
8212 do {
a3b680e6 8213 const unsigned dig = uv % 10;
4151a5fe
IZ
8214 *--p = '0' + dig;
8215 } while (uv /= 10);
8216 if (neg)
8217 *--p = '-';
8218 *len = endbuf - p;
8219 return p;
8220 }
bd61b366 8221 return NULL;
4151a5fe
IZ
8222}
8223
8224
954c1994
GS
8225/*
8226=for apidoc sv_vcatpvfn
8227
8228Processes its arguments like C<vsprintf> and appends the formatted output
8229to an SV. Uses an array of SVs if the C style variable argument list is
8230missing (NULL). When running with taint checks enabled, indicates via
8231C<maybe_tainted> if results are untrustworthy (often due to the use of
8232locales).
8233
bffc3d17 8234Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
645c22ef 8235
954c1994
GS
8236=cut
8237*/
8238
8896765a
RB
8239
8240#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
8241 vecstr = (U8*)SvPV_const(vecsv,veclen);\
8242 vec_utf8 = DO_UTF8(vecsv);
8243
1ef29b0e
RGS
8244/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8245
46fc3d4c 8246void
7d5ea4e7 8247Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
46fc3d4c 8248{
97aff369 8249 dVAR;
46fc3d4c 8250 char *p;
8251 char *q;
a3b680e6 8252 const char *patend;
fc36a67e 8253 STRLEN origlen;
46fc3d4c 8254 I32 svix = 0;
27da23d5 8255 static const char nullstr[] = "(null)";
a0714e2c 8256 SV *argsv = NULL;
b464bac0
AL
8257 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
8258 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
a0714e2c 8259 SV *nsv = NULL;
4151a5fe
IZ
8260 /* Times 4: a decimal digit takes more than 3 binary digits.
8261 * NV_DIG: mantissa takes than many decimal digits.
8262 * Plus 32: Playing safe. */
8263 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8264 /* large enough for "%#.#f" --chip */
8265 /* what about long double NVs? --jhi */
db79b45b 8266
53c1dcc0
AL
8267 PERL_UNUSED_ARG(maybe_tainted);
8268
46fc3d4c 8269 /* no matter what, this is a string now */
fc36a67e 8270 (void)SvPV_force(sv, origlen);
46fc3d4c 8271
8896765a 8272 /* special-case "", "%s", and "%-p" (SVf - see below) */
46fc3d4c 8273 if (patlen == 0)
8274 return;
0dbb1585 8275 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
2d03de9c
AL
8276 if (args) {
8277 const char * const s = va_arg(*args, char*);
8278 sv_catpv(sv, s ? s : nullstr);
8279 }
8280 else if (svix < svmax) {
8281 sv_catsv(sv, *svargs);
2d03de9c
AL
8282 }
8283 return;
0dbb1585 8284 }
8896765a
RB
8285 if (args && patlen == 3 && pat[0] == '%' &&
8286 pat[1] == '-' && pat[2] == 'p') {
8287 argsv = va_arg(*args, SV*);
8288 sv_catsv(sv, argsv);
8896765a 8289 return;
46fc3d4c 8290 }
8291
1d917b39 8292#ifndef USE_LONG_DOUBLE
4151a5fe 8293 /* special-case "%.<number>[gf]" */
7af36d83 8294 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
4151a5fe
IZ
8295 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8296 unsigned digits = 0;
8297 const char *pp;
8298
8299 pp = pat + 2;
8300 while (*pp >= '0' && *pp <= '9')
8301 digits = 10 * digits + (*pp++ - '0');
028f8eaa 8302 if (pp - pat == (int)patlen - 1) {
4151a5fe
IZ
8303 NV nv;
8304
7af36d83 8305 if (svix < svmax)
4151a5fe
IZ
8306 nv = SvNV(*svargs);
8307 else
8308 return;
8309 if (*pp == 'g') {
2873255c
NC
8310 /* Add check for digits != 0 because it seems that some
8311 gconverts are buggy in this case, and we don't yet have
8312 a Configure test for this. */
8313 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8314 /* 0, point, slack */
2e59c212 8315 Gconvert(nv, (int)digits, 0, ebuf);
4151a5fe
IZ
8316 sv_catpv(sv, ebuf);
8317 if (*ebuf) /* May return an empty string for digits==0 */
8318 return;
8319 }
8320 } else if (!digits) {
8321 STRLEN l;
8322
8323 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8324 sv_catpvn(sv, p, l);
8325 return;
8326 }
8327 }
8328 }
8329 }
1d917b39 8330#endif /* !USE_LONG_DOUBLE */
4151a5fe 8331
2cf2cfc6 8332 if (!args && svix < svmax && DO_UTF8(*svargs))
205f51d8 8333 has_utf8 = TRUE;
2cf2cfc6 8334
46fc3d4c 8335 patend = (char*)pat + patlen;
8336 for (p = (char*)pat; p < patend; p = q) {
8337 bool alt = FALSE;
8338 bool left = FALSE;
b22c7a20 8339 bool vectorize = FALSE;
211dfcf1 8340 bool vectorarg = FALSE;
2cf2cfc6 8341 bool vec_utf8 = FALSE;
46fc3d4c 8342 char fill = ' ';
8343 char plus = 0;
8344 char intsize = 0;
8345 STRLEN width = 0;
fc36a67e 8346 STRLEN zeros = 0;
46fc3d4c 8347 bool has_precis = FALSE;
8348 STRLEN precis = 0;
c445ea15 8349 const I32 osvix = svix;
2cf2cfc6 8350 bool is_utf8 = FALSE; /* is this item utf8? */
20f6aaab
AS
8351#ifdef HAS_LDBL_SPRINTF_BUG
8352 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8 8353 with sfio - Allen <allens@cpan.org> */
20f6aaab
AS
8354 bool fix_ldbl_sprintf_bug = FALSE;
8355#endif
205f51d8 8356
46fc3d4c 8357 char esignbuf[4];
89ebb4a3 8358 U8 utf8buf[UTF8_MAXBYTES+1];
46fc3d4c 8359 STRLEN esignlen = 0;
8360
bd61b366 8361 const char *eptr = NULL;
fc36a67e 8362 STRLEN elen = 0;
a0714e2c 8363 SV *vecsv = NULL;
4608196e 8364 const U8 *vecstr = NULL;
b22c7a20 8365 STRLEN veclen = 0;
934abaf1 8366 char c = 0;
46fc3d4c 8367 int i;
9c5ffd7c 8368 unsigned base = 0;
8c8eb53c
RB
8369 IV iv = 0;
8370 UV uv = 0;
9e5b023a
JH
8371 /* we need a long double target in case HAS_LONG_DOUBLE but
8372 not USE_LONG_DOUBLE
8373 */
35fff930 8374#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9e5b023a
JH
8375 long double nv;
8376#else
65202027 8377 NV nv;
9e5b023a 8378#endif
46fc3d4c 8379 STRLEN have;
8380 STRLEN need;
8381 STRLEN gap;
7af36d83 8382 const char *dotstr = ".";
b22c7a20 8383 STRLEN dotstrlen = 1;
211dfcf1 8384 I32 efix = 0; /* explicit format parameter index */
eb3fce90 8385 I32 ewix = 0; /* explicit width index */
211dfcf1
HS
8386 I32 epix = 0; /* explicit precision index */
8387 I32 evix = 0; /* explicit vector index */
eb3fce90 8388 bool asterisk = FALSE;
46fc3d4c 8389
211dfcf1 8390 /* echo everything up to the next format specification */
46fc3d4c 8391 for (q = p; q < patend && *q != '%'; ++q) ;
8392 if (q > p) {
db79b45b
JH
8393 if (has_utf8 && !pat_utf8)
8394 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
8395 else
8396 sv_catpvn(sv, p, q - p);
46fc3d4c 8397 p = q;
8398 }
8399 if (q++ >= patend)
8400 break;
8401
211dfcf1
HS
8402/*
8403 We allow format specification elements in this order:
8404 \d+\$ explicit format parameter index
8405 [-+ 0#]+ flags
a472f209 8406 v|\*(\d+\$)?v vector with optional (optionally specified) arg
f3583277 8407 0 flag (as above): repeated to allow "v02"
211dfcf1
HS
8408 \d+|\*(\d+\$)? width using optional (optionally specified) arg
8409 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
8410 [hlqLV] size
8896765a
RB
8411 [%bcdefginopsuxDFOUX] format (mandatory)
8412*/
8413
8414 if (args) {
8415/*
8416 As of perl5.9.3, printf format checking is on by default.
8417 Internally, perl uses %p formats to provide an escape to
8418 some extended formatting. This block deals with those
8419 extensions: if it does not match, (char*)q is reset and
8420 the normal format processing code is used.
8421
8422 Currently defined extensions are:
8423 %p include pointer address (standard)
8424 %-p (SVf) include an SV (previously %_)
8425 %-<num>p include an SV with precision <num>
8426 %1p (VDf) include a v-string (as %vd)
8427 %<num>p reserved for future extensions
8428
8429 Robin Barker 2005-07-14
211dfcf1 8430*/
8896765a
RB
8431 char* r = q;
8432 bool sv = FALSE;
8433 STRLEN n = 0;
8434 if (*q == '-')
8435 sv = *q++;
c445ea15 8436 n = expect_number(&q);
8896765a
RB
8437 if (*q++ == 'p') {
8438 if (sv) { /* SVf */
8439 if (n) {
8440 precis = n;
8441 has_precis = TRUE;
8442 }
8443 argsv = va_arg(*args, SV*);
8444 eptr = SvPVx_const(argsv, elen);
8445 if (DO_UTF8(argsv))
8446 is_utf8 = TRUE;
8447 goto string;
8448 }
8449#if vdNUMBER
8450 else if (n == vdNUMBER) { /* VDf */
8451 vectorize = TRUE;
8452 VECTORIZE_ARGS
8453 goto format_vd;
8454 }
8455#endif
8456 else if (n) {
8457 if (ckWARN_d(WARN_INTERNAL))
8458 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8459 "internal %%<num>p might conflict with future printf extensions");
8460 }
8461 }
8462 q = r;
8463 }
8464
c445ea15 8465 if ( (width = expect_number(&q)) ) {
211dfcf1
HS
8466 if (*q == '$') {
8467 ++q;
8468 efix = width;
8469 } else {
8470 goto gotwidth;
8471 }
8472 }
8473
fc36a67e 8474 /* FLAGS */
8475
46fc3d4c 8476 while (*q) {
8477 switch (*q) {
8478 case ' ':
8479 case '+':
8480 plus = *q++;
8481 continue;
8482
8483 case '-':
8484 left = TRUE;
8485 q++;
8486 continue;
8487
8488 case '0':
8489 fill = *q++;
8490 continue;
8491
8492 case '#':
8493 alt = TRUE;
8494 q++;
8495 continue;
8496
fc36a67e 8497 default:
8498 break;
8499 }
8500 break;
8501 }
46fc3d4c 8502
211dfcf1 8503 tryasterisk:
eb3fce90 8504 if (*q == '*') {
211dfcf1 8505 q++;
c445ea15 8506 if ( (ewix = expect_number(&q)) )
211dfcf1
HS
8507 if (*q++ != '$')
8508 goto unknown;
eb3fce90 8509 asterisk = TRUE;
211dfcf1
HS
8510 }
8511 if (*q == 'v') {
eb3fce90 8512 q++;
211dfcf1
HS
8513 if (vectorize)
8514 goto unknown;
9cbac4c7 8515 if ((vectorarg = asterisk)) {
211dfcf1
HS
8516 evix = ewix;
8517 ewix = 0;
8518 asterisk = FALSE;
8519 }
8520 vectorize = TRUE;
8521 goto tryasterisk;
eb3fce90
JH
8522 }
8523
211dfcf1 8524 if (!asterisk)
858a90f9 8525 {
7a5fa8a2 8526 if( *q == '0' )
f3583277 8527 fill = *q++;
c445ea15 8528 width = expect_number(&q);
858a90f9 8529 }
211dfcf1
HS
8530
8531 if (vectorize) {
8532 if (vectorarg) {
8533 if (args)
8534 vecsv = va_arg(*args, SV*);
7ad96abb
NC
8535 else if (evix) {
8536 vecsv = (evix > 0 && evix <= svmax)
8537 ? svargs[evix-1] : &PL_sv_undef;
8538 } else {
8539 vecsv = svix < svmax ? svargs[svix++] : &PL_sv_undef;
8540 }
245d4a47 8541 dotstr = SvPV_const(vecsv, dotstrlen);
640283f5
NC
8542 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
8543 bad with tied or overloaded values that return UTF8. */
211dfcf1 8544 if (DO_UTF8(vecsv))
2cf2cfc6 8545 is_utf8 = TRUE;
640283f5
NC
8546 else if (has_utf8) {
8547 vecsv = sv_mortalcopy(vecsv);
8548 sv_utf8_upgrade(vecsv);
8549 dotstr = SvPV_const(vecsv, dotstrlen);
8550 is_utf8 = TRUE;
8551 }
211dfcf1
HS
8552 }
8553 if (args) {
8896765a 8554 VECTORIZE_ARGS
eb3fce90 8555 }
7ad96abb 8556 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
211dfcf1 8557 vecsv = svargs[efix ? efix-1 : svix++];
245d4a47 8558 vecstr = (U8*)SvPV_const(vecsv,veclen);
2cf2cfc6 8559 vec_utf8 = DO_UTF8(vecsv);
96b8f7ce
JP
8560
8561 /* if this is a version object, we need to convert
8562 * back into v-string notation and then let the
8563 * vectorize happen normally
d7aa5382 8564 */
96b8f7ce
JP
8565 if (sv_derived_from(vecsv, "version")) {
8566 char *version = savesvpv(vecsv);
34ba6322
SP
8567 if ( hv_exists((HV*)SvRV(vecsv), "alpha", 5 ) ) {
8568 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8569 "vector argument not supported with alpha versions");
8570 goto unknown;
8571 }
96b8f7ce
JP
8572 vecsv = sv_newmortal();
8573 /* scan_vstring is expected to be called during
8574 * tokenization, so we need to fake up the end
8575 * of the buffer for it
8576 */
8577 PL_bufend = version + veclen;
8578 scan_vstring(version, vecsv);
8579 vecstr = (U8*)SvPV_const(vecsv, veclen);
8580 vec_utf8 = DO_UTF8(vecsv);
8581 Safefree(version);
d7aa5382 8582 }
211dfcf1
HS
8583 }
8584 else {
8585 vecstr = (U8*)"";
8586 veclen = 0;
8587 }
eb3fce90 8588 }
fc36a67e 8589
eb3fce90 8590 if (asterisk) {
fc36a67e 8591 if (args)
8592 i = va_arg(*args, int);
8593 else
eb3fce90
JH
8594 i = (ewix ? ewix <= svmax : svix < svmax) ?
8595 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
fc36a67e 8596 left |= (i < 0);
8597 width = (i < 0) ? -i : i;
fc36a67e 8598 }
211dfcf1 8599 gotwidth:
fc36a67e 8600
8601 /* PRECISION */
46fc3d4c 8602
fc36a67e 8603 if (*q == '.') {
8604 q++;
8605 if (*q == '*') {
211dfcf1 8606 q++;
c445ea15 8607 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
7b8dd722
HS
8608 goto unknown;
8609 /* XXX: todo, support specified precision parameter */
8610 if (epix)
211dfcf1 8611 goto unknown;
46fc3d4c 8612 if (args)
8613 i = va_arg(*args, int);
8614 else
eb3fce90
JH
8615 i = (ewix ? ewix <= svmax : svix < svmax)
8616 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
fc36a67e 8617 precis = (i < 0) ? 0 : i;
fc36a67e 8618 }
8619 else {
8620 precis = 0;
8621 while (isDIGIT(*q))
8622 precis = precis * 10 + (*q++ - '0');
8623 }
8624 has_precis = TRUE;
8625 }
46fc3d4c 8626
fc36a67e 8627 /* SIZE */
46fc3d4c 8628
fc36a67e 8629 switch (*q) {
c623ac67
GS
8630#ifdef WIN32
8631 case 'I': /* Ix, I32x, and I64x */
8632# ifdef WIN64
8633 if (q[1] == '6' && q[2] == '4') {
8634 q += 3;
8635 intsize = 'q';
8636 break;
8637 }
8638# endif
8639 if (q[1] == '3' && q[2] == '2') {
8640 q += 3;
8641 break;
8642 }
8643# ifdef WIN64
8644 intsize = 'q';
8645# endif
8646 q++;
8647 break;
8648#endif
9e5b023a 8649#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
6f9bb7fd 8650 case 'L': /* Ld */
5f66b61c 8651 /*FALLTHROUGH*/
e5c81feb 8652#ifdef HAS_QUAD
6f9bb7fd 8653 case 'q': /* qd */
9e5b023a 8654#endif
6f9bb7fd
GS
8655 intsize = 'q';
8656 q++;
8657 break;
8658#endif
fc36a67e 8659 case 'l':
9e5b023a 8660#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
205f51d8 8661 if (*(q + 1) == 'l') { /* lld, llf */
fc36a67e 8662 intsize = 'q';
8663 q += 2;
46fc3d4c 8664 break;
cf2093f6 8665 }
fc36a67e 8666#endif
5f66b61c 8667 /*FALLTHROUGH*/
fc36a67e 8668 case 'h':
5f66b61c 8669 /*FALLTHROUGH*/
fc36a67e 8670 case 'V':
8671 intsize = *q++;
46fc3d4c 8672 break;
8673 }
8674
fc36a67e 8675 /* CONVERSION */
8676
211dfcf1
HS
8677 if (*q == '%') {
8678 eptr = q++;
8679 elen = 1;
26372e71
GA
8680 if (vectorize) {
8681 c = '%';
8682 goto unknown;
8683 }
211dfcf1
HS
8684 goto string;
8685 }
8686
26372e71 8687 if (!vectorize && !args) {
86c51f8b
NC
8688 if (efix) {
8689 const I32 i = efix-1;
8690 argsv = (i >= 0 && i < svmax) ? svargs[i] : &PL_sv_undef;
8691 } else {
8692 argsv = (svix >= 0 && svix < svmax)
8693 ? svargs[svix++] : &PL_sv_undef;
8694 }
863811b2 8695 }
211dfcf1 8696
46fc3d4c 8697 switch (c = *q++) {
8698
8699 /* STRINGS */
8700
46fc3d4c 8701 case 'c':
26372e71
GA
8702 if (vectorize)
8703 goto unknown;
8704 uv = (args) ? va_arg(*args, int) : SvIVx(argsv);
1bd104fb
JH
8705 if ((uv > 255 ||
8706 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
0064a8a9 8707 && !IN_BYTES) {
dfe13c55 8708 eptr = (char*)utf8buf;
9041c2e3 8709 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
2cf2cfc6 8710 is_utf8 = TRUE;
7e2040f0
GS
8711 }
8712 else {
8713 c = (char)uv;
8714 eptr = &c;
8715 elen = 1;
a0ed51b3 8716 }
46fc3d4c 8717 goto string;
8718
46fc3d4c 8719 case 's':
26372e71
GA
8720 if (vectorize)
8721 goto unknown;
8722 if (args) {
fc36a67e 8723 eptr = va_arg(*args, char*);
c635e13b 8724 if (eptr)
1d7c1841
GS
8725#ifdef MACOS_TRADITIONAL
8726 /* On MacOS, %#s format is used for Pascal strings */
8727 if (alt)
8728 elen = *eptr++;
8729 else
8730#endif
c635e13b 8731 elen = strlen(eptr);
8732 else {
27da23d5 8733 eptr = (char *)nullstr;
c635e13b 8734 elen = sizeof nullstr - 1;
8735 }
46fc3d4c 8736 }
211dfcf1 8737 else {
4d84ee25 8738 eptr = SvPVx_const(argsv, elen);
7e2040f0 8739 if (DO_UTF8(argsv)) {
a0ed51b3
LW
8740 if (has_precis && precis < elen) {
8741 I32 p = precis;
7e2040f0 8742 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
a0ed51b3
LW
8743 precis = p;
8744 }
8745 if (width) { /* fudge width (can't fudge elen) */
7e2040f0 8746 width += elen - sv_len_utf8(argsv);
a0ed51b3 8747 }
2cf2cfc6 8748 is_utf8 = TRUE;
a0ed51b3
LW
8749 }
8750 }
fc36a67e 8751
46fc3d4c 8752 string:
8753 if (has_precis && elen > precis)
8754 elen = precis;
8755 break;
8756
8757 /* INTEGERS */
8758
fc36a67e 8759 case 'p':
be75b157 8760 if (alt || vectorize)
c2e66d9e 8761 goto unknown;
211dfcf1 8762 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
fc36a67e 8763 base = 16;
8764 goto integer;
8765
46fc3d4c 8766 case 'D':
29fe7a80 8767#ifdef IV_IS_QUAD
22f3ae8c 8768 intsize = 'q';
29fe7a80 8769#else
46fc3d4c 8770 intsize = 'l';
29fe7a80 8771#endif
5f66b61c 8772 /*FALLTHROUGH*/
46fc3d4c 8773 case 'd':
8774 case 'i':
8896765a
RB
8775#if vdNUMBER
8776 format_vd:
8777#endif
b22c7a20 8778 if (vectorize) {
ba210ebe 8779 STRLEN ulen;
211dfcf1
HS
8780 if (!veclen)
8781 continue;
2cf2cfc6
A
8782 if (vec_utf8)
8783 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8784 UTF8_ALLOW_ANYUV);
b22c7a20 8785 else {
e83d50c9 8786 uv = *vecstr;
b22c7a20
GS
8787 ulen = 1;
8788 }
8789 vecstr += ulen;
8790 veclen -= ulen;
e83d50c9
JP
8791 if (plus)
8792 esignbuf[esignlen++] = plus;
b22c7a20
GS
8793 }
8794 else if (args) {
46fc3d4c 8795 switch (intsize) {
8796 case 'h': iv = (short)va_arg(*args, int); break;
46fc3d4c 8797 case 'l': iv = va_arg(*args, long); break;
fc36a67e 8798 case 'V': iv = va_arg(*args, IV); break;
b10c0dba 8799 default: iv = va_arg(*args, int); break;
cf2093f6
JH
8800#ifdef HAS_QUAD
8801 case 'q': iv = va_arg(*args, Quad_t); break;
8802#endif
46fc3d4c 8803 }
8804 }
8805 else {
b10c0dba 8806 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
46fc3d4c 8807 switch (intsize) {
b10c0dba
MHM
8808 case 'h': iv = (short)tiv; break;
8809 case 'l': iv = (long)tiv; break;
8810 case 'V':
8811 default: iv = tiv; break;
cf2093f6 8812#ifdef HAS_QUAD
b10c0dba 8813 case 'q': iv = (Quad_t)tiv; break;
cf2093f6 8814#endif
46fc3d4c 8815 }
8816 }
e83d50c9
JP
8817 if ( !vectorize ) /* we already set uv above */
8818 {
8819 if (iv >= 0) {
8820 uv = iv;
8821 if (plus)
8822 esignbuf[esignlen++] = plus;
8823 }
8824 else {
8825 uv = -iv;
8826 esignbuf[esignlen++] = '-';
8827 }
46fc3d4c 8828 }
8829 base = 10;
8830 goto integer;
8831
fc36a67e 8832 case 'U':
29fe7a80 8833#ifdef IV_IS_QUAD
22f3ae8c 8834 intsize = 'q';
29fe7a80 8835#else
fc36a67e 8836 intsize = 'l';
29fe7a80 8837#endif
5f66b61c 8838 /*FALLTHROUGH*/
fc36a67e 8839 case 'u':
8840 base = 10;
8841 goto uns_integer;
8842
4f19785b
WSI
8843 case 'b':
8844 base = 2;
8845 goto uns_integer;
8846
46fc3d4c 8847 case 'O':
29fe7a80 8848#ifdef IV_IS_QUAD
22f3ae8c 8849 intsize = 'q';
29fe7a80 8850#else
46fc3d4c 8851 intsize = 'l';
29fe7a80 8852#endif
5f66b61c 8853 /*FALLTHROUGH*/
46fc3d4c 8854 case 'o':
8855 base = 8;
8856 goto uns_integer;
8857
8858 case 'X':
46fc3d4c 8859 case 'x':
8860 base = 16;
46fc3d4c 8861
8862 uns_integer:
b22c7a20 8863 if (vectorize) {
ba210ebe 8864 STRLEN ulen;
b22c7a20 8865 vector:
211dfcf1
HS
8866 if (!veclen)
8867 continue;
2cf2cfc6
A
8868 if (vec_utf8)
8869 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8870 UTF8_ALLOW_ANYUV);
b22c7a20 8871 else {
a05b299f 8872 uv = *vecstr;
b22c7a20
GS
8873 ulen = 1;
8874 }
8875 vecstr += ulen;
8876 veclen -= ulen;
8877 }
8878 else if (args) {
46fc3d4c 8879 switch (intsize) {
8880 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
46fc3d4c 8881 case 'l': uv = va_arg(*args, unsigned long); break;
fc36a67e 8882 case 'V': uv = va_arg(*args, UV); break;
b10c0dba 8883 default: uv = va_arg(*args, unsigned); break;
cf2093f6 8884#ifdef HAS_QUAD
9e3321a5 8885 case 'q': uv = va_arg(*args, Uquad_t); break;
cf2093f6 8886#endif
46fc3d4c 8887 }
8888 }
8889 else {
b10c0dba 8890 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
46fc3d4c 8891 switch (intsize) {
b10c0dba
MHM
8892 case 'h': uv = (unsigned short)tuv; break;
8893 case 'l': uv = (unsigned long)tuv; break;
8894 case 'V':
8895 default: uv = tuv; break;
cf2093f6 8896#ifdef HAS_QUAD
b10c0dba 8897 case 'q': uv = (Uquad_t)tuv; break;
cf2093f6 8898#endif
46fc3d4c 8899 }
8900 }
8901
8902 integer:
4d84ee25
NC
8903 {
8904 char *ptr = ebuf + sizeof ebuf;
8905 switch (base) {
8906 unsigned dig;
8907 case 16:
8908 if (!uv)
8909 alt = FALSE;
8910 p = (char*)((c == 'X')
8911 ? "0123456789ABCDEF" : "0123456789abcdef");
8912 do {
8913 dig = uv & 15;
8914 *--ptr = p[dig];
8915 } while (uv >>= 4);
8916 if (alt) {
8917 esignbuf[esignlen++] = '0';
8918 esignbuf[esignlen++] = c; /* 'x' or 'X' */
8919 }
8920 break;
8921 case 8:
8922 do {
8923 dig = uv & 7;
8924 *--ptr = '0' + dig;
8925 } while (uv >>= 3);
8926 if (alt && *ptr != '0')
8927 *--ptr = '0';
8928 break;
8929 case 2:
ed2b91d2
GA
8930 if (!uv)
8931 alt = FALSE;
4d84ee25
NC
8932 do {
8933 dig = uv & 1;
8934 *--ptr = '0' + dig;
8935 } while (uv >>= 1);
8936 if (alt) {
8937 esignbuf[esignlen++] = '0';
8938 esignbuf[esignlen++] = 'b';
8939 }
8940 break;
8941 default: /* it had better be ten or less */
8942 do {
8943 dig = uv % base;
8944 *--ptr = '0' + dig;
8945 } while (uv /= base);
8946 break;
46fc3d4c 8947 }
4d84ee25
NC
8948 elen = (ebuf + sizeof ebuf) - ptr;
8949 eptr = ptr;
8950 if (has_precis) {
8951 if (precis > elen)
8952 zeros = precis - elen;
8953 else if (precis == 0 && elen == 1 && *eptr == '0')
8954 elen = 0;
eda88b6d 8955 }
c10ed8b9 8956 }
46fc3d4c 8957 break;
8958
8959 /* FLOATING POINT */
8960
fc36a67e 8961 case 'F':
8962 c = 'f'; /* maybe %F isn't supported here */
5f66b61c 8963 /*FALLTHROUGH*/
46fc3d4c 8964 case 'e': case 'E':
fc36a67e 8965 case 'f':
46fc3d4c 8966 case 'g': case 'G':
26372e71
GA
8967 if (vectorize)
8968 goto unknown;
46fc3d4c 8969
8970 /* This is evil, but floating point is even more evil */
8971
9e5b023a
JH
8972 /* for SV-style calling, we can only get NV
8973 for C-style calling, we assume %f is double;
8974 for simplicity we allow any of %Lf, %llf, %qf for long double
8975 */
8976 switch (intsize) {
8977 case 'V':
8978#if defined(USE_LONG_DOUBLE)
8979 intsize = 'q';
8980#endif
8981 break;
8a2e3f14 8982/* [perl #20339] - we should accept and ignore %lf rather than die */
00e17364 8983 case 'l':
5f66b61c 8984 /*FALLTHROUGH*/
9e5b023a
JH
8985 default:
8986#if defined(USE_LONG_DOUBLE)
8987 intsize = args ? 0 : 'q';
8988#endif
8989 break;
8990 case 'q':
8991#if defined(HAS_LONG_DOUBLE)
8992 break;
8993#else
5f66b61c 8994 /*FALLTHROUGH*/
9e5b023a
JH
8995#endif
8996 case 'h':
9e5b023a
JH
8997 goto unknown;
8998 }
8999
9000 /* now we need (long double) if intsize == 'q', else (double) */
26372e71 9001 nv = (args) ?
35fff930
JH
9002#if LONG_DOUBLESIZE > DOUBLESIZE
9003 intsize == 'q' ?
205f51d8
AS
9004 va_arg(*args, long double) :
9005 va_arg(*args, double)
35fff930 9006#else
205f51d8 9007 va_arg(*args, double)
35fff930 9008#endif
9e5b023a 9009 : SvNVx(argsv);
fc36a67e 9010
9011 need = 0;
9012 if (c != 'e' && c != 'E') {
9013 i = PERL_INT_MIN;
9e5b023a
JH
9014 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9015 will cast our (long double) to (double) */
73b309ea 9016 (void)Perl_frexp(nv, &i);
fc36a67e 9017 if (i == PERL_INT_MIN)
cea2e8a9 9018 Perl_die(aTHX_ "panic: frexp");
c635e13b 9019 if (i > 0)
fc36a67e 9020 need = BIT_DIGITS(i);
9021 }
9022 need += has_precis ? precis : 6; /* known default */
20f6aaab 9023
fc36a67e 9024 if (need < width)
9025 need = width;
9026
20f6aaab
AS
9027#ifdef HAS_LDBL_SPRINTF_BUG
9028 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8
AS
9029 with sfio - Allen <allens@cpan.org> */
9030
9031# ifdef DBL_MAX
9032# define MY_DBL_MAX DBL_MAX
9033# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9034# if DOUBLESIZE >= 8
9035# define MY_DBL_MAX 1.7976931348623157E+308L
9036# else
9037# define MY_DBL_MAX 3.40282347E+38L
9038# endif
9039# endif
9040
9041# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9042# define MY_DBL_MAX_BUG 1L
20f6aaab 9043# else
205f51d8 9044# define MY_DBL_MAX_BUG MY_DBL_MAX
20f6aaab 9045# endif
20f6aaab 9046
205f51d8
AS
9047# ifdef DBL_MIN
9048# define MY_DBL_MIN DBL_MIN
9049# else /* XXX guessing! -Allen */
9050# if DOUBLESIZE >= 8
9051# define MY_DBL_MIN 2.2250738585072014E-308L
9052# else
9053# define MY_DBL_MIN 1.17549435E-38L
9054# endif
9055# endif
20f6aaab 9056
205f51d8
AS
9057 if ((intsize == 'q') && (c == 'f') &&
9058 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9059 (need < DBL_DIG)) {
9060 /* it's going to be short enough that
9061 * long double precision is not needed */
9062
9063 if ((nv <= 0L) && (nv >= -0L))
9064 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9065 else {
9066 /* would use Perl_fp_class as a double-check but not
9067 * functional on IRIX - see perl.h comments */
9068
9069 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9070 /* It's within the range that a double can represent */
9071#if defined(DBL_MAX) && !defined(DBL_MIN)
9072 if ((nv >= ((long double)1/DBL_MAX)) ||
9073 (nv <= (-(long double)1/DBL_MAX)))
20f6aaab 9074#endif
205f51d8 9075 fix_ldbl_sprintf_bug = TRUE;
20f6aaab 9076 }
205f51d8
AS
9077 }
9078 if (fix_ldbl_sprintf_bug == TRUE) {
9079 double temp;
9080
9081 intsize = 0;
9082 temp = (double)nv;
9083 nv = (NV)temp;
9084 }
20f6aaab 9085 }
205f51d8
AS
9086
9087# undef MY_DBL_MAX
9088# undef MY_DBL_MAX_BUG
9089# undef MY_DBL_MIN
9090
20f6aaab
AS
9091#endif /* HAS_LDBL_SPRINTF_BUG */
9092
46fc3d4c 9093 need += 20; /* fudge factor */
80252599
GS
9094 if (PL_efloatsize < need) {
9095 Safefree(PL_efloatbuf);
9096 PL_efloatsize = need + 20; /* more fudge */
a02a5408 9097 Newx(PL_efloatbuf, PL_efloatsize, char);
7d5ea4e7 9098 PL_efloatbuf[0] = '\0';
46fc3d4c 9099 }
9100
4151a5fe
IZ
9101 if ( !(width || left || plus || alt) && fill != '0'
9102 && has_precis && intsize != 'q' ) { /* Shortcuts */
2873255c
NC
9103 /* See earlier comment about buggy Gconvert when digits,
9104 aka precis is 0 */
9105 if ( c == 'g' && precis) {
2e59c212 9106 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
4150c189
NC
9107 /* May return an empty string for digits==0 */
9108 if (*PL_efloatbuf) {
9109 elen = strlen(PL_efloatbuf);
4151a5fe 9110 goto float_converted;
4150c189 9111 }
4151a5fe
IZ
9112 } else if ( c == 'f' && !precis) {
9113 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9114 break;
9115 }
9116 }
4d84ee25
NC
9117 {
9118 char *ptr = ebuf + sizeof ebuf;
9119 *--ptr = '\0';
9120 *--ptr = c;
9121 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9e5b023a 9122#if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
4d84ee25
NC
9123 if (intsize == 'q') {
9124 /* Copy the one or more characters in a long double
9125 * format before the 'base' ([efgEFG]) character to
9126 * the format string. */
9127 static char const prifldbl[] = PERL_PRIfldbl;
9128 char const *p = prifldbl + sizeof(prifldbl) - 3;
9129 while (p >= prifldbl) { *--ptr = *p--; }
9130 }
65202027 9131#endif
4d84ee25
NC
9132 if (has_precis) {
9133 base = precis;
9134 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9135 *--ptr = '.';
9136 }
9137 if (width) {
9138 base = width;
9139 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9140 }
9141 if (fill == '0')
9142 *--ptr = fill;
9143 if (left)
9144 *--ptr = '-';
9145 if (plus)
9146 *--ptr = plus;
9147 if (alt)
9148 *--ptr = '#';
9149 *--ptr = '%';
9150
9151 /* No taint. Otherwise we are in the strange situation
9152 * where printf() taints but print($float) doesn't.
9153 * --jhi */
9e5b023a 9154#if defined(HAS_LONG_DOUBLE)
4150c189
NC
9155 elen = ((intsize == 'q')
9156 ? my_sprintf(PL_efloatbuf, ptr, nv)
9157 : my_sprintf(PL_efloatbuf, ptr, (double)nv));
9e5b023a 9158#else
4150c189 9159 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9e5b023a 9160#endif
4d84ee25 9161 }
4151a5fe 9162 float_converted:
80252599 9163 eptr = PL_efloatbuf;
46fc3d4c 9164 break;
9165
fc36a67e 9166 /* SPECIAL */
9167
9168 case 'n':
26372e71
GA
9169 if (vectorize)
9170 goto unknown;
fc36a67e 9171 i = SvCUR(sv) - origlen;
26372e71 9172 if (args) {
c635e13b 9173 switch (intsize) {
9174 case 'h': *(va_arg(*args, short*)) = i; break;
9175 default: *(va_arg(*args, int*)) = i; break;
9176 case 'l': *(va_arg(*args, long*)) = i; break;
9177 case 'V': *(va_arg(*args, IV*)) = i; break;
cf2093f6
JH
9178#ifdef HAS_QUAD
9179 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9180#endif
c635e13b 9181 }
fc36a67e 9182 }
9dd79c3f 9183 else
211dfcf1 9184 sv_setuv_mg(argsv, (UV)i);
fc36a67e 9185 continue; /* not "break" */
9186
9187 /* UNKNOWN */
9188
46fc3d4c 9189 default:
fc36a67e 9190 unknown:
041457d9
DM
9191 if (!args
9192 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
9193 && ckWARN(WARN_PRINTF))
9194 {
c4420975 9195 SV * const msg = sv_newmortal();
35c1215d
NC
9196 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9197 (PL_op->op_type == OP_PRTF) ? "" : "s");
0f4b6630 9198 if (c) {
0f4b6630 9199 if (isPRINT(c))
1c846c1f 9200 Perl_sv_catpvf(aTHX_ msg,
0f4b6630
JH
9201 "\"%%%c\"", c & 0xFF);
9202 else
9203 Perl_sv_catpvf(aTHX_ msg,
57def98f 9204 "\"%%\\%03"UVof"\"",
0f4b6630 9205 (UV)c & 0xFF);
0f4b6630 9206 } else
396482e1 9207 sv_catpvs(msg, "end of string");
9014280d 9208 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, msg); /* yes, this is reentrant */
c635e13b 9209 }
fb73857a 9210
9211 /* output mangled stuff ... */
9212 if (c == '\0')
9213 --q;
46fc3d4c 9214 eptr = p;
9215 elen = q - p;
fb73857a 9216
9217 /* ... right here, because formatting flags should not apply */
9218 SvGROW(sv, SvCUR(sv) + elen + 1);
9219 p = SvEND(sv);
4459522c 9220 Copy(eptr, p, elen, char);
fb73857a 9221 p += elen;
9222 *p = '\0';
3f7c398e 9223 SvCUR_set(sv, p - SvPVX_const(sv));
58e33a90 9224 svix = osvix;
fb73857a 9225 continue; /* not "break" */
46fc3d4c 9226 }
9227
6c94ec8b
HS
9228 /* calculate width before utf8_upgrade changes it */
9229 have = esignlen + zeros + elen;
ed2b91d2
GA
9230 if (have < zeros)
9231 Perl_croak_nocontext(PL_memory_wrap);
6c94ec8b 9232
d2876be5
JH
9233 if (is_utf8 != has_utf8) {
9234 if (is_utf8) {
9235 if (SvCUR(sv))
9236 sv_utf8_upgrade(sv);
9237 }
9238 else {
53c1dcc0 9239 SV * const nsv = sv_2mortal(newSVpvn(eptr, elen));
d2876be5 9240 sv_utf8_upgrade(nsv);
93524f2b 9241 eptr = SvPVX_const(nsv);
d2876be5
JH
9242 elen = SvCUR(nsv);
9243 }
9244 SvGROW(sv, SvCUR(sv) + elen + 1);
9245 p = SvEND(sv);
9246 *p = '\0';
9247 }
6af65485 9248
46fc3d4c 9249 need = (have > width ? have : width);
9250 gap = need - have;
9251
d2641cbd
PC
9252 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
9253 Perl_croak_nocontext(PL_memory_wrap);
b22c7a20 9254 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
46fc3d4c 9255 p = SvEND(sv);
9256 if (esignlen && fill == '0') {
53c1dcc0 9257 int i;
eb160463 9258 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 9259 *p++ = esignbuf[i];
9260 }
9261 if (gap && !left) {
9262 memset(p, fill, gap);
9263 p += gap;
9264 }
9265 if (esignlen && fill != '0') {
53c1dcc0 9266 int i;
eb160463 9267 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 9268 *p++ = esignbuf[i];
9269 }
fc36a67e 9270 if (zeros) {
53c1dcc0 9271 int i;
fc36a67e 9272 for (i = zeros; i; i--)
9273 *p++ = '0';
9274 }
46fc3d4c 9275 if (elen) {
4459522c 9276 Copy(eptr, p, elen, char);
46fc3d4c 9277 p += elen;
9278 }
9279 if (gap && left) {
9280 memset(p, ' ', gap);
9281 p += gap;
9282 }
b22c7a20
GS
9283 if (vectorize) {
9284 if (veclen) {
4459522c 9285 Copy(dotstr, p, dotstrlen, char);
b22c7a20
GS
9286 p += dotstrlen;
9287 }
9288 else
9289 vectorize = FALSE; /* done iterating over vecstr */
9290 }
2cf2cfc6
A
9291 if (is_utf8)
9292 has_utf8 = TRUE;
9293 if (has_utf8)
7e2040f0 9294 SvUTF8_on(sv);
46fc3d4c 9295 *p = '\0';
3f7c398e 9296 SvCUR_set(sv, p - SvPVX_const(sv));
b22c7a20
GS
9297 if (vectorize) {
9298 esignlen = 0;
9299 goto vector;
9300 }
46fc3d4c 9301 }
9302}
51371543 9303
645c22ef
DM
9304/* =========================================================================
9305
9306=head1 Cloning an interpreter
9307
9308All the macros and functions in this section are for the private use of
9309the main function, perl_clone().
9310
9311The foo_dup() functions make an exact copy of an existing foo thinngy.
9312During the course of a cloning, a hash table is used to map old addresses
9313to new addresses. The table is created and manipulated with the
9314ptr_table_* functions.
9315
9316=cut
9317
9318============================================================================*/
9319
9320
1d7c1841
GS
9321#if defined(USE_ITHREADS)
9322
1d7c1841
GS
9323#ifndef GpREFCNT_inc
9324# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9325#endif
9326
9327
d2d73c3e 9328#define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
7f466ec7 9329#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup(s,t))
d2d73c3e
AB
9330#define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
9331#define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9332#define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
9333#define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9334#define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
9335#define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9336#define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
9337#define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9338#define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
9339#define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
6136c704
AL
9340#define SAVEPV(p) ((p) ? savepv(p) : NULL)
9341#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
8cf8f3d1 9342
d2d73c3e 9343
d2f185dc
AMS
9344/* Duplicate a regexp. Required reading: pregcomp() and pregfree() in
9345 regcomp.c. AMS 20010712 */
645c22ef 9346
1d7c1841 9347REGEXP *
53c1dcc0 9348Perl_re_dup(pTHX_ const REGEXP *r, CLONE_PARAMS *param)
1d7c1841 9349{
27da23d5 9350 dVAR;
d2f185dc
AMS
9351 REGEXP *ret;
9352 int i, len, npar;
9353 struct reg_substr_datum *s;
9354
9355 if (!r)
9356 return (REGEXP *)NULL;
9357
9358 if ((ret = (REGEXP *)ptr_table_fetch(PL_ptr_table, r)))
9359 return ret;
9360
9361 len = r->offsets[0];
9362 npar = r->nparens+1;
9363
a02a5408 9364 Newxc(ret, sizeof(regexp) + (len+1)*sizeof(regnode), char, regexp);
d2f185dc
AMS
9365 Copy(r->program, ret->program, len+1, regnode);
9366
a02a5408 9367 Newx(ret->startp, npar, I32);
d2f185dc 9368 Copy(r->startp, ret->startp, npar, I32);
a02a5408 9369 Newx(ret->endp, npar, I32);
d2f185dc
AMS
9370 Copy(r->startp, ret->startp, npar, I32);
9371
a02a5408 9372 Newx(ret->substrs, 1, struct reg_substr_data);
d2f185dc
AMS
9373 for (s = ret->substrs->data, i = 0; i < 3; i++, s++) {
9374 s->min_offset = r->substrs->data[i].min_offset;
9375 s->max_offset = r->substrs->data[i].max_offset;
9376 s->substr = sv_dup_inc(r->substrs->data[i].substr, param);
33b8afdf 9377 s->utf8_substr = sv_dup_inc(r->substrs->data[i].utf8_substr, param);
d2f185dc
AMS
9378 }
9379
70612e96 9380 ret->regstclass = NULL;
d2f185dc
AMS
9381 if (r->data) {
9382 struct reg_data *d;
e1ec3a88 9383 const int count = r->data->count;
53c1dcc0 9384 int i;
d2f185dc 9385
a02a5408 9386 Newxc(d, sizeof(struct reg_data) + count*sizeof(void *),
d2f185dc 9387 char, struct reg_data);
a02a5408 9388 Newx(d->what, count, U8);
d2f185dc
AMS
9389
9390 d->count = count;
9391 for (i = 0; i < count; i++) {
9392 d->what[i] = r->data->what[i];
9393 switch (d->what[i]) {
a3621e74
YO
9394 /* legal options are one of: sfpont
9395 see also regcomp.h and pregfree() */
d2f185dc
AMS
9396 case 's':
9397 d->data[i] = sv_dup_inc((SV *)r->data->data[i], param);
9398 break;
9399 case 'p':
9400 d->data[i] = av_dup_inc((AV *)r->data->data[i], param);
9401 break;
9402 case 'f':
9403 /* This is cheating. */
a02a5408 9404 Newx(d->data[i], 1, struct regnode_charclass_class);
d2f185dc
AMS
9405 StructCopy(r->data->data[i], d->data[i],
9406 struct regnode_charclass_class);
70612e96 9407 ret->regstclass = (regnode*)d->data[i];
d2f185dc
AMS
9408 break;
9409 case 'o':
33773810
AMS
9410 /* Compiled op trees are readonly, and can thus be
9411 shared without duplication. */
b34c0dd4 9412 OP_REFCNT_LOCK;
9b978d73 9413 d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
b34c0dd4 9414 OP_REFCNT_UNLOCK;
9b978d73 9415 break;
d2f185dc
AMS
9416 case 'n':
9417 d->data[i] = r->data->data[i];
9418 break;
a3621e74
YO
9419 case 't':
9420 d->data[i] = r->data->data[i];
9421 OP_REFCNT_LOCK;
9422 ((reg_trie_data*)d->data[i])->refcount++;
9423 OP_REFCNT_UNLOCK;
9424 break;
9425 default:
9426 Perl_croak(aTHX_ "panic: re_dup unknown data code '%c'", r->data->what[i]);
d2f185dc
AMS
9427 }
9428 }
9429
9430 ret->data = d;
9431 }
9432 else
9433 ret->data = NULL;
9434
a02a5408 9435 Newx(ret->offsets, 2*len+1, U32);
d2f185dc
AMS
9436 Copy(r->offsets, ret->offsets, 2*len+1, U32);
9437
e01c5899 9438 ret->precomp = SAVEPVN(r->precomp, r->prelen);
d2f185dc
AMS
9439 ret->refcnt = r->refcnt;
9440 ret->minlen = r->minlen;
9441 ret->prelen = r->prelen;
9442 ret->nparens = r->nparens;
9443 ret->lastparen = r->lastparen;
9444 ret->lastcloseparen = r->lastcloseparen;
9445 ret->reganch = r->reganch;
9446
70612e96
RG
9447 ret->sublen = r->sublen;
9448
9449 if (RX_MATCH_COPIED(ret))
e01c5899 9450 ret->subbeg = SAVEPVN(r->subbeg, r->sublen);
70612e96 9451 else
bd61b366 9452 ret->subbeg = NULL;
f8c7b90f 9453#ifdef PERL_OLD_COPY_ON_WRITE
a0714e2c 9454 ret->saved_copy = NULL;
9a26048b 9455#endif
70612e96 9456
d2f185dc
AMS
9457 ptr_table_store(PL_ptr_table, r, ret);
9458 return ret;
1d7c1841
GS
9459}
9460
d2d73c3e 9461/* duplicate a file handle */
645c22ef 9462
1d7c1841 9463PerlIO *
a8fc9800 9464Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
1d7c1841
GS
9465{
9466 PerlIO *ret;
53c1dcc0
AL
9467
9468 PERL_UNUSED_ARG(type);
73d840c0 9469
1d7c1841
GS
9470 if (!fp)
9471 return (PerlIO*)NULL;
9472
9473 /* look for it in the table first */
9474 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
9475 if (ret)
9476 return ret;
9477
9478 /* create anew and remember what it is */
ecdeb87c 9479 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
1d7c1841
GS
9480 ptr_table_store(PL_ptr_table, fp, ret);
9481 return ret;
9482}
9483
645c22ef
DM
9484/* duplicate a directory handle */
9485
1d7c1841
GS
9486DIR *
9487Perl_dirp_dup(pTHX_ DIR *dp)
9488{
96a5add6 9489 PERL_UNUSED_CONTEXT;
1d7c1841
GS
9490 if (!dp)
9491 return (DIR*)NULL;
9492 /* XXX TODO */
9493 return dp;
9494}
9495
ff276b08 9496/* duplicate a typeglob */
645c22ef 9497
1d7c1841 9498GP *
a8fc9800 9499Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
1d7c1841
GS
9500{
9501 GP *ret;
b37c2d43 9502
1d7c1841
GS
9503 if (!gp)
9504 return (GP*)NULL;
9505 /* look for it in the table first */
9506 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
9507 if (ret)
9508 return ret;
9509
9510 /* create anew and remember what it is */
a02a5408 9511 Newxz(ret, 1, GP);
1d7c1841
GS
9512 ptr_table_store(PL_ptr_table, gp, ret);
9513
9514 /* clone */
9515 ret->gp_refcnt = 0; /* must be before any other dups! */
d2d73c3e
AB
9516 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
9517 ret->gp_io = io_dup_inc(gp->gp_io, param);
9518 ret->gp_form = cv_dup_inc(gp->gp_form, param);
9519 ret->gp_av = av_dup_inc(gp->gp_av, param);
9520 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
9521 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
9522 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
1d7c1841 9523 ret->gp_cvgen = gp->gp_cvgen;
1d7c1841
GS
9524 ret->gp_line = gp->gp_line;
9525 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
9526 return ret;
9527}
9528
645c22ef
DM
9529/* duplicate a chain of magic */
9530
1d7c1841 9531MAGIC *
a8fc9800 9532Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
1d7c1841 9533{
cb359b41
JH
9534 MAGIC *mgprev = (MAGIC*)NULL;
9535 MAGIC *mgret;
1d7c1841
GS
9536 if (!mg)
9537 return (MAGIC*)NULL;
9538 /* look for it in the table first */
9539 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
9540 if (mgret)
9541 return mgret;
9542
9543 for (; mg; mg = mg->mg_moremagic) {
9544 MAGIC *nmg;
a02a5408 9545 Newxz(nmg, 1, MAGIC);
cb359b41 9546 if (mgprev)
1d7c1841 9547 mgprev->mg_moremagic = nmg;
cb359b41
JH
9548 else
9549 mgret = nmg;
1d7c1841
GS
9550 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
9551 nmg->mg_private = mg->mg_private;
9552 nmg->mg_type = mg->mg_type;
9553 nmg->mg_flags = mg->mg_flags;
14befaf4 9554 if (mg->mg_type == PERL_MAGIC_qr) {
d2f185dc 9555 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj, param);
1d7c1841 9556 }
05bd4103 9557 else if(mg->mg_type == PERL_MAGIC_backref) {
d7cbc7b5
NC
9558 /* The backref AV has its reference count deliberately bumped by
9559 1. */
9560 nmg->mg_obj = SvREFCNT_inc(av_dup_inc((AV*) mg->mg_obj, param));
05bd4103 9561 }
8d2f4536
NC
9562 else if (mg->mg_type == PERL_MAGIC_symtab) {
9563 nmg->mg_obj = mg->mg_obj;
9564 }
1d7c1841
GS
9565 else {
9566 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
d2d73c3e
AB
9567 ? sv_dup_inc(mg->mg_obj, param)
9568 : sv_dup(mg->mg_obj, param);
1d7c1841
GS
9569 }
9570 nmg->mg_len = mg->mg_len;
9571 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
14befaf4 9572 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
68795e93 9573 if (mg->mg_len > 0) {
1d7c1841 9574 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
14befaf4
DM
9575 if (mg->mg_type == PERL_MAGIC_overload_table &&
9576 AMT_AMAGIC((AMT*)mg->mg_ptr))
9577 {
c445ea15 9578 const AMT * const amtp = (AMT*)mg->mg_ptr;
0bcc34c2 9579 AMT * const namtp = (AMT*)nmg->mg_ptr;
1d7c1841
GS
9580 I32 i;
9581 for (i = 1; i < NofAMmeth; i++) {
d2d73c3e 9582 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
1d7c1841
GS
9583 }
9584 }
9585 }
9586 else if (mg->mg_len == HEf_SVKEY)
d2d73c3e 9587 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
1d7c1841 9588 }
68795e93
NIS
9589 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
9590 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
9591 }
1d7c1841
GS
9592 mgprev = nmg;
9593 }
9594 return mgret;
9595}
9596
645c22ef
DM
9597/* create a new pointer-mapping table */
9598
1d7c1841
GS
9599PTR_TBL_t *
9600Perl_ptr_table_new(pTHX)
9601{
9602 PTR_TBL_t *tbl;
96a5add6
AL
9603 PERL_UNUSED_CONTEXT;
9604
a02a5408 9605 Newxz(tbl, 1, PTR_TBL_t);
1d7c1841
GS
9606 tbl->tbl_max = 511;
9607 tbl->tbl_items = 0;
a02a5408 9608 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
1d7c1841
GS
9609 return tbl;
9610}
9611
7119fd33
NC
9612#define PTR_TABLE_HASH(ptr) \
9613 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
134ca3d6 9614
93e68bfb
JC
9615/*
9616 we use the PTE_SVSLOT 'reservation' made above, both here (in the
9617 following define) and at call to new_body_inline made below in
9618 Perl_ptr_table_store()
9619 */
9620
9621#define del_pte(p) del_body_type(p, PTE_SVSLOT)
32e691d0 9622
645c22ef
DM
9623/* map an existing pointer using a table */
9624
7bf61b54 9625STATIC PTR_TBL_ENT_t *
b0e6ae5b 9626S_ptr_table_find(PTR_TBL_t *tbl, const void *sv) {
1d7c1841 9627 PTR_TBL_ENT_t *tblent;
4373e329 9628 const UV hash = PTR_TABLE_HASH(sv);
1d7c1841
GS
9629 assert(tbl);
9630 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
9631 for (; tblent; tblent = tblent->next) {
9632 if (tblent->oldval == sv)
7bf61b54 9633 return tblent;
1d7c1841 9634 }
7bf61b54
NC
9635 return 0;
9636}
9637
9638void *
9639Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, const void *sv)
9640{
b0e6ae5b 9641 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
96a5add6 9642 PERL_UNUSED_CONTEXT;
7bf61b54 9643 return tblent ? tblent->newval : (void *) 0;
1d7c1841
GS
9644}
9645
645c22ef
DM
9646/* add a new entry to a pointer-mapping table */
9647
1d7c1841 9648void
44f8325f 9649Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, const void *oldsv, void *newsv)
1d7c1841 9650{
0c9fdfe0 9651 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
96a5add6 9652 PERL_UNUSED_CONTEXT;
1d7c1841 9653
7bf61b54
NC
9654 if (tblent) {
9655 tblent->newval = newsv;
9656 } else {
9657 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
9658
d2a0f284
JC
9659 new_body_inline(tblent, PTE_SVSLOT);
9660
7bf61b54
NC
9661 tblent->oldval = oldsv;
9662 tblent->newval = newsv;
9663 tblent->next = tbl->tbl_ary[entry];
9664 tbl->tbl_ary[entry] = tblent;
9665 tbl->tbl_items++;
9666 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
9667 ptr_table_split(tbl);
1d7c1841 9668 }
1d7c1841
GS
9669}
9670
645c22ef
DM
9671/* double the hash bucket size of an existing ptr table */
9672
1d7c1841
GS
9673void
9674Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
9675{
9676 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
4373e329 9677 const UV oldsize = tbl->tbl_max + 1;
1d7c1841
GS
9678 UV newsize = oldsize * 2;
9679 UV i;
96a5add6 9680 PERL_UNUSED_CONTEXT;
1d7c1841
GS
9681
9682 Renew(ary, newsize, PTR_TBL_ENT_t*);
9683 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
9684 tbl->tbl_max = --newsize;
9685 tbl->tbl_ary = ary;
9686 for (i=0; i < oldsize; i++, ary++) {
9687 PTR_TBL_ENT_t **curentp, **entp, *ent;
9688 if (!*ary)
9689 continue;
9690 curentp = ary + oldsize;
9691 for (entp = ary, ent = *ary; ent; ent = *entp) {
134ca3d6 9692 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
1d7c1841
GS
9693 *entp = ent->next;
9694 ent->next = *curentp;
9695 *curentp = ent;
9696 continue;
9697 }
9698 else
9699 entp = &ent->next;
9700 }
9701 }
9702}
9703
645c22ef
DM
9704/* remove all the entries from a ptr table */
9705
a0739874
DM
9706void
9707Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
9708{
d5cefff9 9709 if (tbl && tbl->tbl_items) {
c445ea15 9710 register PTR_TBL_ENT_t * const * const array = tbl->tbl_ary;
d5cefff9 9711 UV riter = tbl->tbl_max;
a0739874 9712
d5cefff9
NC
9713 do {
9714 PTR_TBL_ENT_t *entry = array[riter];
ab1e7f95 9715
d5cefff9 9716 while (entry) {
00b6aa41 9717 PTR_TBL_ENT_t * const oentry = entry;
d5cefff9
NC
9718 entry = entry->next;
9719 del_pte(oentry);
9720 }
9721 } while (riter--);
a0739874 9722
d5cefff9
NC
9723 tbl->tbl_items = 0;
9724 }
a0739874
DM
9725}
9726
645c22ef
DM
9727/* clear and free a ptr table */
9728
a0739874
DM
9729void
9730Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
9731{
9732 if (!tbl) {
9733 return;
9734 }
9735 ptr_table_clear(tbl);
9736 Safefree(tbl->tbl_ary);
9737 Safefree(tbl);
9738}
9739
5bd07a3d 9740
83841fad 9741void
eb86f8b3 9742Perl_rvpv_dup(pTHX_ SV *dstr, const SV *sstr, CLONE_PARAMS* param)
83841fad
NIS
9743{
9744 if (SvROK(sstr)) {
b162af07
SP
9745 SvRV_set(dstr, SvWEAKREF(sstr)
9746 ? sv_dup(SvRV(sstr), param)
9747 : sv_dup_inc(SvRV(sstr), param));
f880fe2f 9748
83841fad 9749 }
3f7c398e 9750 else if (SvPVX_const(sstr)) {
83841fad
NIS
9751 /* Has something there */
9752 if (SvLEN(sstr)) {
68795e93 9753 /* Normal PV - clone whole allocated space */
3f7c398e 9754 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
d3d0e6f1
NC
9755 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
9756 /* Not that normal - actually sstr is copy on write.
9757 But we are a true, independant SV, so: */
9758 SvREADONLY_off(dstr);
9759 SvFAKE_off(dstr);
9760 }
68795e93 9761 }
83841fad
NIS
9762 else {
9763 /* Special case - not normally malloced for some reason */
f7877b28
NC
9764 if (isGV_with_GP(sstr)) {
9765 /* Don't need to do anything here. */
9766 }
9767 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
ef10be65
NC
9768 /* A "shared" PV - clone it as "shared" PV */
9769 SvPV_set(dstr,
9770 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
9771 param)));
83841fad
NIS
9772 }
9773 else {
9774 /* Some other special case - random pointer */
f880fe2f 9775 SvPV_set(dstr, SvPVX(sstr));
d3d0e6f1 9776 }
83841fad
NIS
9777 }
9778 }
9779 else {
4608196e 9780 /* Copy the NULL */
f880fe2f 9781 if (SvTYPE(dstr) == SVt_RV)
b162af07 9782 SvRV_set(dstr, NULL);
f880fe2f 9783 else
6136c704 9784 SvPV_set(dstr, NULL);
83841fad
NIS
9785 }
9786}
9787
662fb8b2
NC
9788/* duplicate an SV of any type (including AV, HV etc) */
9789
1d7c1841 9790SV *
eb86f8b3 9791Perl_sv_dup(pTHX_ const SV *sstr, CLONE_PARAMS* param)
1d7c1841 9792{
27da23d5 9793 dVAR;
1d7c1841
GS
9794 SV *dstr;
9795
9796 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
6136c704 9797 return NULL;
1d7c1841
GS
9798 /* look for it in the table first */
9799 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
9800 if (dstr)
9801 return dstr;
9802
0405e91e
AB
9803 if(param->flags & CLONEf_JOIN_IN) {
9804 /** We are joining here so we don't want do clone
9805 something that is bad **/
eb86f8b3
AL
9806 if (SvTYPE(sstr) == SVt_PVHV) {
9807 const char * const hvname = HvNAME_get(sstr);
9808 if (hvname)
9809 /** don't clone stashes if they already exist **/
9810 return (SV*)gv_stashpv(hvname,0);
0405e91e
AB
9811 }
9812 }
9813
1d7c1841
GS
9814 /* create anew and remember what it is */
9815 new_SV(dstr);
fd0854ff
DM
9816
9817#ifdef DEBUG_LEAKING_SCALARS
9818 dstr->sv_debug_optype = sstr->sv_debug_optype;
9819 dstr->sv_debug_line = sstr->sv_debug_line;
9820 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
9821 dstr->sv_debug_cloned = 1;
fd0854ff 9822 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
fd0854ff
DM
9823#endif
9824
1d7c1841
GS
9825 ptr_table_store(PL_ptr_table, sstr, dstr);
9826
9827 /* clone */
9828 SvFLAGS(dstr) = SvFLAGS(sstr);
9829 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
9830 SvREFCNT(dstr) = 0; /* must be before any other dups! */
9831
9832#ifdef DEBUGGING
3f7c398e 9833 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
1d7c1841 9834 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
3f7c398e 9835 PL_watch_pvx, SvPVX_const(sstr));
1d7c1841
GS
9836#endif
9837
9660f481
DM
9838 /* don't clone objects whose class has asked us not to */
9839 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
9840 SvFLAGS(dstr) &= ~SVTYPEMASK;
9841 SvOBJECT_off(dstr);
9842 return dstr;
9843 }
9844
1d7c1841
GS
9845 switch (SvTYPE(sstr)) {
9846 case SVt_NULL:
9847 SvANY(dstr) = NULL;
9848 break;
9849 case SVt_IV:
339049b0 9850 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
45977657 9851 SvIV_set(dstr, SvIVX(sstr));
1d7c1841
GS
9852 break;
9853 case SVt_NV:
9854 SvANY(dstr) = new_XNV();
9d6ce603 9855 SvNV_set(dstr, SvNVX(sstr));
1d7c1841
GS
9856 break;
9857 case SVt_RV:
339049b0 9858 SvANY(dstr) = &(dstr->sv_u.svu_rv);
83841fad 9859 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
1d7c1841 9860 break;
662fb8b2
NC
9861 default:
9862 {
9863 /* These are all the types that need complex bodies allocating. */
662fb8b2 9864 void *new_body;
2bcc16b3
NC
9865 const svtype sv_type = SvTYPE(sstr);
9866 const struct body_details *const sv_type_details
9867 = bodies_by_type + sv_type;
662fb8b2 9868
93e68bfb 9869 switch (sv_type) {
662fb8b2 9870 default:
bb263b4e 9871 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
662fb8b2
NC
9872 break;
9873
662fb8b2
NC
9874 case SVt_PVGV:
9875 if (GvUNIQUE((GV*)sstr)) {
bb263b4e 9876 /*EMPTY*/; /* Do sharing here, and fall through */
662fb8b2 9877 }
c22188b4
NC
9878 case SVt_PVIO:
9879 case SVt_PVFM:
9880 case SVt_PVHV:
9881 case SVt_PVAV:
93e68bfb 9882 case SVt_PVBM:
662fb8b2 9883 case SVt_PVCV:
662fb8b2 9884 case SVt_PVLV:
662fb8b2 9885 case SVt_PVMG:
662fb8b2 9886 case SVt_PVNV:
662fb8b2 9887 case SVt_PVIV:
662fb8b2 9888 case SVt_PV:
d2a0f284 9889 assert(sv_type_details->body_size);
c22188b4 9890 if (sv_type_details->arena) {
d2a0f284 9891 new_body_inline(new_body, sv_type);
c22188b4 9892 new_body
b9502f15 9893 = (void*)((char*)new_body - sv_type_details->offset);
c22188b4
NC
9894 } else {
9895 new_body = new_NOARENA(sv_type_details);
9896 }
1d7c1841 9897 }
662fb8b2
NC
9898 assert(new_body);
9899 SvANY(dstr) = new_body;
9900
2bcc16b3 9901#ifndef PURIFY
b9502f15
NC
9902 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
9903 ((char*)SvANY(dstr)) + sv_type_details->offset,
f32993d6 9904 sv_type_details->copy, char);
2bcc16b3
NC
9905#else
9906 Copy(((char*)SvANY(sstr)),
9907 ((char*)SvANY(dstr)),
d2a0f284 9908 sv_type_details->body_size + sv_type_details->offset, char);
2bcc16b3 9909#endif
662fb8b2 9910
f7877b28
NC
9911 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
9912 && !isGV_with_GP(dstr))
662fb8b2
NC
9913 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9914
9915 /* The Copy above means that all the source (unduplicated) pointers
9916 are now in the destination. We can check the flags and the
9917 pointers in either, but it's possible that there's less cache
9918 missing by always going for the destination.
9919 FIXME - instrument and check that assumption */
f32993d6 9920 if (sv_type >= SVt_PVMG) {
e736a858 9921 HV *ourstash;
2892acdb 9922 if ((sv_type == SVt_PVMG) && (ourstash = OURSTASH(dstr))) {
e736a858
NC
9923 OURSTASH_set(dstr, hv_dup_inc(ourstash, param));
9924 } else if (SvMAGIC(dstr))
662fb8b2
NC
9925 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
9926 if (SvSTASH(dstr))
9927 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
1d7c1841 9928 }
662fb8b2 9929
f32993d6
NC
9930 /* The cast silences a GCC warning about unhandled types. */
9931 switch ((int)sv_type) {
662fb8b2
NC
9932 case SVt_PV:
9933 break;
9934 case SVt_PVIV:
9935 break;
9936 case SVt_PVNV:
9937 break;
9938 case SVt_PVMG:
9939 break;
9940 case SVt_PVBM:
9941 break;
9942 case SVt_PVLV:
9943 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
9944 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
9945 LvTARG(dstr) = dstr;
9946 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
9947 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(dstr), 0, param);
9948 else
9949 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
9950 break;
9951 case SVt_PVGV:
acda4c6a
NC
9952 if (GvNAME_HEK(dstr))
9953 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
f5c1e807 9954
e15faf7d
NC
9955 /* Don't call sv_add_backref here as it's going to be created
9956 as part of the magic cloning of the symbol table. */
f7877b28
NC
9957 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
9958 if(isGV_with_GP(sstr)) {
9959 /* Danger Will Robinson - GvGP(dstr) isn't initialised
9960 at the point of this comment. */
9961 GvGP(dstr) = gp_dup(GvGP(sstr), param);
9962 (void)GpREFCNT_inc(GvGP(dstr));
9963 } else
9964 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
662fb8b2
NC
9965 break;
9966 case SVt_PVIO:
9967 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
9968 if (IoOFP(dstr) == IoIFP(sstr))
9969 IoOFP(dstr) = IoIFP(dstr);
9970 else
9971 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
9972 /* PL_rsfp_filters entries have fake IoDIRP() */
662fb8b2
NC
9973 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
9974 /* I have no idea why fake dirp (rsfps)
9975 should be treated differently but otherwise
9976 we end up with leaks -- sky*/
9977 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
9978 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
9979 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
9980 } else {
9981 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
9982 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
9983 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
100ce7e1
NC
9984 if (IoDIRP(dstr)) {
9985 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
9986 } else {
bb263b4e 9987 /*EMPTY*/;
100ce7e1
NC
9988 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
9989 }
662fb8b2
NC
9990 }
9991 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
9992 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
9993 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
9994 break;
9995 case SVt_PVAV:
9996 if (AvARRAY((AV*)sstr)) {
9997 SV **dst_ary, **src_ary;
9998 SSize_t items = AvFILLp((AV*)sstr) + 1;
9999
10000 src_ary = AvARRAY((AV*)sstr);
a02a5408 10001 Newxz(dst_ary, AvMAX((AV*)sstr)+1, SV*);
662fb8b2
NC
10002 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10003 SvPV_set(dstr, (char*)dst_ary);
10004 AvALLOC((AV*)dstr) = dst_ary;
10005 if (AvREAL((AV*)sstr)) {
10006 while (items-- > 0)
10007 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10008 }
10009 else {
10010 while (items-- > 0)
10011 *dst_ary++ = sv_dup(*src_ary++, param);
10012 }
10013 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10014 while (items-- > 0) {
10015 *dst_ary++ = &PL_sv_undef;
10016 }
bfcb3514 10017 }
662fb8b2 10018 else {
bd61b366 10019 SvPV_set(dstr, NULL);
662fb8b2 10020 AvALLOC((AV*)dstr) = (SV**)NULL;
b79f7545 10021 }
662fb8b2
NC
10022 break;
10023 case SVt_PVHV:
10024 {
cbbf8932 10025 HEK *hvname = NULL;
662fb8b2
NC
10026
10027 if (HvARRAY((HV*)sstr)) {
10028 STRLEN i = 0;
10029 const bool sharekeys = !!HvSHAREKEYS(sstr);
10030 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
10031 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
10032 char *darray;
a02a5408 10033 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
662fb8b2
NC
10034 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
10035 char);
10036 HvARRAY(dstr) = (HE**)darray;
10037 while (i <= sxhv->xhv_max) {
5c4138a0 10038 const HE *source = HvARRAY(sstr)[i];
662fb8b2
NC
10039 HvARRAY(dstr)[i] = source
10040 ? he_dup(source, sharekeys, param) : 0;
10041 ++i;
10042 }
10043 if (SvOOK(sstr)) {
00b6aa41
AL
10044 struct xpvhv_aux * const saux = HvAUX(sstr);
10045 struct xpvhv_aux * const daux = HvAUX(dstr);
662fb8b2
NC
10046 /* This flag isn't copied. */
10047 /* SvOOK_on(hv) attacks the IV flags. */
10048 SvFLAGS(dstr) |= SVf_OOK;
10049
10050 hvname = saux->xhv_name;
dd690478
NC
10051 daux->xhv_name
10052 = hvname ? hek_dup(hvname, param) : hvname;
662fb8b2
NC
10053
10054 daux->xhv_riter = saux->xhv_riter;
10055 daux->xhv_eiter = saux->xhv_eiter
dd690478
NC
10056 ? he_dup(saux->xhv_eiter,
10057 (bool)!!HvSHAREKEYS(sstr), param) : 0;
86f55936
NC
10058 daux->xhv_backreferences = saux->xhv_backreferences
10059 ? (AV*) SvREFCNT_inc(
10060 sv_dup((SV*)saux->
10061 xhv_backreferences,
10062 param))
10063 : 0;
662fb8b2
NC
10064 }
10065 }
10066 else {
bd61b366 10067 SvPV_set(dstr, NULL);
662fb8b2
NC
10068 }
10069 /* Record stashes for possible cloning in Perl_clone(). */
10070 if(hvname)
10071 av_push(param->stashes, dstr);
10072 }
10073 break;
662fb8b2 10074 case SVt_PVCV:
bb172083
NC
10075 if (!(param->flags & CLONEf_COPY_STACKS)) {
10076 CvDEPTH(dstr) = 0;
10077 }
10078 case SVt_PVFM:
662fb8b2
NC
10079 /* NOTE: not refcounted */
10080 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
10081 OP_REFCNT_LOCK;
d04ba589
NC
10082 if (!CvISXSUB(dstr))
10083 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
662fb8b2 10084 OP_REFCNT_UNLOCK;
cfae286e 10085 if (CvCONST(dstr) && CvISXSUB(dstr)) {
662fb8b2
NC
10086 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(dstr)) ?
10087 SvREFCNT_inc(CvXSUBANY(dstr).any_ptr) :
10088 sv_dup_inc((SV *)CvXSUBANY(dstr).any_ptr, param);
10089 }
10090 /* don't dup if copying back - CvGV isn't refcounted, so the
10091 * duped GV may never be freed. A bit of a hack! DAPM */
10092 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
a0714e2c 10093 NULL : gv_dup(CvGV(dstr), param) ;
662fb8b2
NC
10094 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10095 CvOUTSIDE(dstr) =
10096 CvWEAKOUTSIDE(sstr)
10097 ? cv_dup( CvOUTSIDE(dstr), param)
10098 : cv_dup_inc(CvOUTSIDE(dstr), param);
aed2304a 10099 if (!CvISXSUB(dstr))
662fb8b2
NC
10100 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
10101 break;
bfcb3514 10102 }
1d7c1841 10103 }
1d7c1841
GS
10104 }
10105
10106 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10107 ++PL_sv_objcount;
10108
10109 return dstr;
d2d73c3e 10110 }
1d7c1841 10111
645c22ef
DM
10112/* duplicate a context */
10113
1d7c1841 10114PERL_CONTEXT *
a8fc9800 10115Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
1d7c1841
GS
10116{
10117 PERL_CONTEXT *ncxs;
10118
10119 if (!cxs)
10120 return (PERL_CONTEXT*)NULL;
10121
10122 /* look for it in the table first */
10123 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10124 if (ncxs)
10125 return ncxs;
10126
10127 /* create anew and remember what it is */
a02a5408 10128 Newxz(ncxs, max + 1, PERL_CONTEXT);
1d7c1841
GS
10129 ptr_table_store(PL_ptr_table, cxs, ncxs);
10130
10131 while (ix >= 0) {
c445ea15
AL
10132 PERL_CONTEXT * const cx = &cxs[ix];
10133 PERL_CONTEXT * const ncx = &ncxs[ix];
1d7c1841
GS
10134 ncx->cx_type = cx->cx_type;
10135 if (CxTYPE(cx) == CXt_SUBST) {
10136 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10137 }
10138 else {
10139 ncx->blk_oldsp = cx->blk_oldsp;
10140 ncx->blk_oldcop = cx->blk_oldcop;
1d7c1841
GS
10141 ncx->blk_oldmarksp = cx->blk_oldmarksp;
10142 ncx->blk_oldscopesp = cx->blk_oldscopesp;
10143 ncx->blk_oldpm = cx->blk_oldpm;
10144 ncx->blk_gimme = cx->blk_gimme;
10145 switch (CxTYPE(cx)) {
10146 case CXt_SUB:
10147 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
d2d73c3e
AB
10148 ? cv_dup_inc(cx->blk_sub.cv, param)
10149 : cv_dup(cx->blk_sub.cv,param));
1d7c1841 10150 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
d2d73c3e 10151 ? av_dup_inc(cx->blk_sub.argarray, param)
7d49f689 10152 : NULL);
d2d73c3e 10153 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
1d7c1841
GS
10154 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
10155 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10156 ncx->blk_sub.lval = cx->blk_sub.lval;
f39bc417 10157 ncx->blk_sub.retop = cx->blk_sub.retop;
1d7c1841
GS
10158 break;
10159 case CXt_EVAL:
10160 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
10161 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
b47cad08 10162 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
1d7c1841 10163 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
d2d73c3e 10164 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
f39bc417 10165 ncx->blk_eval.retop = cx->blk_eval.retop;
1d7c1841
GS
10166 break;
10167 case CXt_LOOP:
10168 ncx->blk_loop.label = cx->blk_loop.label;
10169 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
10170 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
10171 ncx->blk_loop.next_op = cx->blk_loop.next_op;
10172 ncx->blk_loop.last_op = cx->blk_loop.last_op;
10173 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
10174 ? cx->blk_loop.iterdata
d2d73c3e 10175 : gv_dup((GV*)cx->blk_loop.iterdata, param));
f3548bdc
DM
10176 ncx->blk_loop.oldcomppad
10177 = (PAD*)ptr_table_fetch(PL_ptr_table,
10178 cx->blk_loop.oldcomppad);
d2d73c3e
AB
10179 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
10180 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
10181 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
1d7c1841
GS
10182 ncx->blk_loop.iterix = cx->blk_loop.iterix;
10183 ncx->blk_loop.itermax = cx->blk_loop.itermax;
10184 break;
10185 case CXt_FORMAT:
d2d73c3e
AB
10186 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
10187 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
10188 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
1d7c1841 10189 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
f39bc417 10190 ncx->blk_sub.retop = cx->blk_sub.retop;
1d7c1841
GS
10191 break;
10192 case CXt_BLOCK:
10193 case CXt_NULL:
10194 break;
10195 }
10196 }
10197 --ix;
10198 }
10199 return ncxs;
10200}
10201
645c22ef
DM
10202/* duplicate a stack info structure */
10203
1d7c1841 10204PERL_SI *
a8fc9800 10205Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
1d7c1841
GS
10206{
10207 PERL_SI *nsi;
10208
10209 if (!si)
10210 return (PERL_SI*)NULL;
10211
10212 /* look for it in the table first */
10213 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10214 if (nsi)
10215 return nsi;
10216
10217 /* create anew and remember what it is */
a02a5408 10218 Newxz(nsi, 1, PERL_SI);
1d7c1841
GS
10219 ptr_table_store(PL_ptr_table, si, nsi);
10220
d2d73c3e 10221 nsi->si_stack = av_dup_inc(si->si_stack, param);
1d7c1841
GS
10222 nsi->si_cxix = si->si_cxix;
10223 nsi->si_cxmax = si->si_cxmax;
d2d73c3e 10224 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
1d7c1841 10225 nsi->si_type = si->si_type;
d2d73c3e
AB
10226 nsi->si_prev = si_dup(si->si_prev, param);
10227 nsi->si_next = si_dup(si->si_next, param);
1d7c1841
GS
10228 nsi->si_markoff = si->si_markoff;
10229
10230 return nsi;
10231}
10232
10233#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10234#define TOPINT(ss,ix) ((ss)[ix].any_i32)
10235#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10236#define TOPLONG(ss,ix) ((ss)[ix].any_long)
10237#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10238#define TOPIV(ss,ix) ((ss)[ix].any_iv)
38d8b13e
HS
10239#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10240#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
1d7c1841
GS
10241#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10242#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10243#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10244#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
10245#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10246#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
10247
10248/* XXXXX todo */
10249#define pv_dup_inc(p) SAVEPV(p)
10250#define pv_dup(p) SAVEPV(p)
10251#define svp_dup_inc(p,pp) any_dup(p,pp)
10252
645c22ef
DM
10253/* map any object to the new equivent - either something in the
10254 * ptr table, or something in the interpreter structure
10255 */
10256
1d7c1841 10257void *
53c1dcc0 10258Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
1d7c1841
GS
10259{
10260 void *ret;
10261
10262 if (!v)
10263 return (void*)NULL;
10264
10265 /* look for it in the table first */
10266 ret = ptr_table_fetch(PL_ptr_table, v);
10267 if (ret)
10268 return ret;
10269
10270 /* see if it is part of the interpreter structure */
10271 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
acfe0abc 10272 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
05ec9bb3 10273 else {
1d7c1841 10274 ret = v;
05ec9bb3 10275 }
1d7c1841
GS
10276
10277 return ret;
10278}
10279
645c22ef
DM
10280/* duplicate the save stack */
10281
1d7c1841 10282ANY *
a8fc9800 10283Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
1d7c1841 10284{
53c1dcc0
AL
10285 ANY * const ss = proto_perl->Tsavestack;
10286 const I32 max = proto_perl->Tsavestack_max;
10287 I32 ix = proto_perl->Tsavestack_ix;
1d7c1841
GS
10288 ANY *nss;
10289 SV *sv;
10290 GV *gv;
10291 AV *av;
10292 HV *hv;
10293 void* ptr;
10294 int intval;
10295 long longval;
10296 GP *gp;
10297 IV iv;
c4e33207 10298 char *c = NULL;
1d7c1841 10299 void (*dptr) (void*);
acfe0abc 10300 void (*dxptr) (pTHX_ void*);
1d7c1841 10301
a02a5408 10302 Newxz(nss, max, ANY);
1d7c1841
GS
10303
10304 while (ix > 0) {
b464bac0 10305 I32 i = POPINT(ss,ix);
1d7c1841
GS
10306 TOPINT(nss,ix) = i;
10307 switch (i) {
10308 case SAVEt_ITEM: /* normal string */
10309 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10310 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 10311 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10312 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
10313 break;
10314 case SAVEt_SV: /* scalar reference */
10315 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10316 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 10317 gv = (GV*)POPPTR(ss,ix);
d2d73c3e 10318 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
1d7c1841 10319 break;
f4dd75d9
GS
10320 case SAVEt_GENERIC_PVREF: /* generic char* */
10321 c = (char*)POPPTR(ss,ix);
10322 TOPPTR(nss,ix) = pv_dup(c);
10323 ptr = POPPTR(ss,ix);
10324 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10325 break;
05ec9bb3
NIS
10326 case SAVEt_SHARED_PVREF: /* char* in shared space */
10327 c = (char*)POPPTR(ss,ix);
10328 TOPPTR(nss,ix) = savesharedpv(c);
10329 ptr = POPPTR(ss,ix);
10330 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10331 break;
1d7c1841
GS
10332 case SAVEt_GENERIC_SVREF: /* generic sv */
10333 case SAVEt_SVREF: /* scalar reference */
10334 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10335 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
10336 ptr = POPPTR(ss,ix);
10337 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
10338 break;
10339 case SAVEt_AV: /* array reference */
10340 av = (AV*)POPPTR(ss,ix);
d2d73c3e 10341 TOPPTR(nss,ix) = av_dup_inc(av, param);
1d7c1841 10342 gv = (GV*)POPPTR(ss,ix);
d2d73c3e 10343 TOPPTR(nss,ix) = gv_dup(gv, param);
1d7c1841
GS
10344 break;
10345 case SAVEt_HV: /* hash reference */
10346 hv = (HV*)POPPTR(ss,ix);
d2d73c3e 10347 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
1d7c1841 10348 gv = (GV*)POPPTR(ss,ix);
d2d73c3e 10349 TOPPTR(nss,ix) = gv_dup(gv, param);
1d7c1841
GS
10350 break;
10351 case SAVEt_INT: /* int reference */
10352 ptr = POPPTR(ss,ix);
10353 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10354 intval = (int)POPINT(ss,ix);
10355 TOPINT(nss,ix) = intval;
10356 break;
10357 case SAVEt_LONG: /* long reference */
10358 ptr = POPPTR(ss,ix);
10359 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10360 longval = (long)POPLONG(ss,ix);
10361 TOPLONG(nss,ix) = longval;
10362 break;
10363 case SAVEt_I32: /* I32 reference */
10364 case SAVEt_I16: /* I16 reference */
10365 case SAVEt_I8: /* I8 reference */
10366 ptr = POPPTR(ss,ix);
10367 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10368 i = POPINT(ss,ix);
10369 TOPINT(nss,ix) = i;
10370 break;
10371 case SAVEt_IV: /* IV reference */
10372 ptr = POPPTR(ss,ix);
10373 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10374 iv = POPIV(ss,ix);
10375 TOPIV(nss,ix) = iv;
10376 break;
10377 case SAVEt_SPTR: /* SV* reference */
10378 ptr = POPPTR(ss,ix);
10379 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10380 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10381 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
10382 break;
10383 case SAVEt_VPTR: /* random* reference */
10384 ptr = POPPTR(ss,ix);
10385 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10386 ptr = POPPTR(ss,ix);
10387 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10388 break;
10389 case SAVEt_PPTR: /* char* reference */
10390 ptr = POPPTR(ss,ix);
10391 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10392 c = (char*)POPPTR(ss,ix);
10393 TOPPTR(nss,ix) = pv_dup(c);
10394 break;
10395 case SAVEt_HPTR: /* HV* reference */
10396 ptr = POPPTR(ss,ix);
10397 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10398 hv = (HV*)POPPTR(ss,ix);
d2d73c3e 10399 TOPPTR(nss,ix) = hv_dup(hv, param);
1d7c1841
GS
10400 break;
10401 case SAVEt_APTR: /* AV* reference */
10402 ptr = POPPTR(ss,ix);
10403 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10404 av = (AV*)POPPTR(ss,ix);
d2d73c3e 10405 TOPPTR(nss,ix) = av_dup(av, param);
1d7c1841
GS
10406 break;
10407 case SAVEt_NSTAB:
10408 gv = (GV*)POPPTR(ss,ix);
d2d73c3e 10409 TOPPTR(nss,ix) = gv_dup(gv, param);
1d7c1841
GS
10410 break;
10411 case SAVEt_GP: /* scalar reference */
10412 gp = (GP*)POPPTR(ss,ix);
d2d73c3e 10413 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
1d7c1841
GS
10414 (void)GpREFCNT_inc(gp);
10415 gv = (GV*)POPPTR(ss,ix);
2ed3c8fc 10416 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
1d7c1841
GS
10417 c = (char*)POPPTR(ss,ix);
10418 TOPPTR(nss,ix) = pv_dup(c);
10419 iv = POPIV(ss,ix);
10420 TOPIV(nss,ix) = iv;
10421 iv = POPIV(ss,ix);
10422 TOPIV(nss,ix) = iv;
10423 break;
10424 case SAVEt_FREESV:
26d9b02f 10425 case SAVEt_MORTALIZESV:
1d7c1841 10426 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10427 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
10428 break;
10429 case SAVEt_FREEOP:
10430 ptr = POPPTR(ss,ix);
10431 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
10432 /* these are assumed to be refcounted properly */
53c1dcc0 10433 OP *o;
1d7c1841
GS
10434 switch (((OP*)ptr)->op_type) {
10435 case OP_LEAVESUB:
10436 case OP_LEAVESUBLV:
10437 case OP_LEAVEEVAL:
10438 case OP_LEAVE:
10439 case OP_SCOPE:
10440 case OP_LEAVEWRITE:
e977893f
GS
10441 TOPPTR(nss,ix) = ptr;
10442 o = (OP*)ptr;
10443 OpREFCNT_inc(o);
1d7c1841
GS
10444 break;
10445 default:
5f66b61c 10446 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
10447 break;
10448 }
10449 }
10450 else
5f66b61c 10451 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
10452 break;
10453 case SAVEt_FREEPV:
10454 c = (char*)POPPTR(ss,ix);
10455 TOPPTR(nss,ix) = pv_dup_inc(c);
10456 break;
10457 case SAVEt_CLEARSV:
10458 longval = POPLONG(ss,ix);
10459 TOPLONG(nss,ix) = longval;
10460 break;
10461 case SAVEt_DELETE:
10462 hv = (HV*)POPPTR(ss,ix);
d2d73c3e 10463 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
1d7c1841
GS
10464 c = (char*)POPPTR(ss,ix);
10465 TOPPTR(nss,ix) = pv_dup_inc(c);
10466 i = POPINT(ss,ix);
10467 TOPINT(nss,ix) = i;
10468 break;
10469 case SAVEt_DESTRUCTOR:
10470 ptr = POPPTR(ss,ix);
10471 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10472 dptr = POPDPTR(ss,ix);
8141890a
JH
10473 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
10474 any_dup(FPTR2DPTR(void *, dptr),
10475 proto_perl));
1d7c1841
GS
10476 break;
10477 case SAVEt_DESTRUCTOR_X:
10478 ptr = POPPTR(ss,ix);
10479 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10480 dxptr = POPDXPTR(ss,ix);
8141890a
JH
10481 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
10482 any_dup(FPTR2DPTR(void *, dxptr),
10483 proto_perl));
1d7c1841
GS
10484 break;
10485 case SAVEt_REGCONTEXT:
10486 case SAVEt_ALLOC:
10487 i = POPINT(ss,ix);
10488 TOPINT(nss,ix) = i;
10489 ix -= i;
10490 break;
10491 case SAVEt_STACK_POS: /* Position on Perl stack */
10492 i = POPINT(ss,ix);
10493 TOPINT(nss,ix) = i;
10494 break;
10495 case SAVEt_AELEM: /* array element */
10496 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10497 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
10498 i = POPINT(ss,ix);
10499 TOPINT(nss,ix) = i;
10500 av = (AV*)POPPTR(ss,ix);
d2d73c3e 10501 TOPPTR(nss,ix) = av_dup_inc(av, param);
1d7c1841
GS
10502 break;
10503 case SAVEt_HELEM: /* hash element */
10504 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10505 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 10506 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10507 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 10508 hv = (HV*)POPPTR(ss,ix);
d2d73c3e 10509 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
1d7c1841
GS
10510 break;
10511 case SAVEt_OP:
10512 ptr = POPPTR(ss,ix);
10513 TOPPTR(nss,ix) = ptr;
10514 break;
10515 case SAVEt_HINTS:
10516 i = POPINT(ss,ix);
10517 TOPINT(nss,ix) = i;
10518 break;
c4410b1b
GS
10519 case SAVEt_COMPPAD:
10520 av = (AV*)POPPTR(ss,ix);
58ed4fbe 10521 TOPPTR(nss,ix) = av_dup(av, param);
c4410b1b 10522 break;
c3564e5c
GS
10523 case SAVEt_PADSV:
10524 longval = (long)POPLONG(ss,ix);
10525 TOPLONG(nss,ix) = longval;
10526 ptr = POPPTR(ss,ix);
10527 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10528 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10529 TOPPTR(nss,ix) = sv_dup(sv, param);
c3564e5c 10530 break;
a1bb4754 10531 case SAVEt_BOOL:
38d8b13e 10532 ptr = POPPTR(ss,ix);
b9609c01 10533 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
38d8b13e 10534 longval = (long)POPBOOL(ss,ix);
b9609c01 10535 TOPBOOL(nss,ix) = (bool)longval;
a1bb4754 10536 break;
8bd2680e
MHM
10537 case SAVEt_SET_SVFLAGS:
10538 i = POPINT(ss,ix);
10539 TOPINT(nss,ix) = i;
10540 i = POPINT(ss,ix);
10541 TOPINT(nss,ix) = i;
10542 sv = (SV*)POPPTR(ss,ix);
10543 TOPPTR(nss,ix) = sv_dup(sv, param);
10544 break;
1d7c1841
GS
10545 default:
10546 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
10547 }
10548 }
10549
bd81e77b
NC
10550 return nss;
10551}
10552
10553
10554/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
10555 * flag to the result. This is done for each stash before cloning starts,
10556 * so we know which stashes want their objects cloned */
10557
10558static void
10559do_mark_cloneable_stash(pTHX_ SV *sv)
10560{
10561 const HEK * const hvname = HvNAME_HEK((HV*)sv);
10562 if (hvname) {
10563 GV* const cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
10564 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
10565 if (cloner && GvCV(cloner)) {
10566 dSP;
10567 UV status;
10568
10569 ENTER;
10570 SAVETMPS;
10571 PUSHMARK(SP);
10572 XPUSHs(sv_2mortal(newSVhek(hvname)));
10573 PUTBACK;
10574 call_sv((SV*)GvCV(cloner), G_SCALAR);
10575 SPAGAIN;
10576 status = POPu;
10577 PUTBACK;
10578 FREETMPS;
10579 LEAVE;
10580 if (status)
10581 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
10582 }
10583 }
10584}
10585
10586
10587
10588/*
10589=for apidoc perl_clone
10590
10591Create and return a new interpreter by cloning the current one.
10592
10593perl_clone takes these flags as parameters:
10594
10595CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
10596without it we only clone the data and zero the stacks,
10597with it we copy the stacks and the new perl interpreter is
10598ready to run at the exact same point as the previous one.
10599The pseudo-fork code uses COPY_STACKS while the
10600threads->new doesn't.
10601
10602CLONEf_KEEP_PTR_TABLE
10603perl_clone keeps a ptr_table with the pointer of the old
10604variable as a key and the new variable as a value,
10605this allows it to check if something has been cloned and not
10606clone it again but rather just use the value and increase the
10607refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
10608the ptr_table using the function
10609C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
10610reason to keep it around is if you want to dup some of your own
10611variable who are outside the graph perl scans, example of this
10612code is in threads.xs create
10613
10614CLONEf_CLONE_HOST
10615This is a win32 thing, it is ignored on unix, it tells perls
10616win32host code (which is c++) to clone itself, this is needed on
10617win32 if you want to run two threads at the same time,
10618if you just want to do some stuff in a separate perl interpreter
10619and then throw it away and return to the original one,
10620you don't need to do anything.
10621
10622=cut
10623*/
10624
10625/* XXX the above needs expanding by someone who actually understands it ! */
10626EXTERN_C PerlInterpreter *
10627perl_clone_host(PerlInterpreter* proto_perl, UV flags);
10628
10629PerlInterpreter *
10630perl_clone(PerlInterpreter *proto_perl, UV flags)
10631{
10632 dVAR;
10633#ifdef PERL_IMPLICIT_SYS
10634
10635 /* perlhost.h so we need to call into it
10636 to clone the host, CPerlHost should have a c interface, sky */
10637
10638 if (flags & CLONEf_CLONE_HOST) {
10639 return perl_clone_host(proto_perl,flags);
10640 }
10641 return perl_clone_using(proto_perl, flags,
10642 proto_perl->IMem,
10643 proto_perl->IMemShared,
10644 proto_perl->IMemParse,
10645 proto_perl->IEnv,
10646 proto_perl->IStdIO,
10647 proto_perl->ILIO,
10648 proto_perl->IDir,
10649 proto_perl->ISock,
10650 proto_perl->IProc);
10651}
10652
10653PerlInterpreter *
10654perl_clone_using(PerlInterpreter *proto_perl, UV flags,
10655 struct IPerlMem* ipM, struct IPerlMem* ipMS,
10656 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
10657 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
10658 struct IPerlDir* ipD, struct IPerlSock* ipS,
10659 struct IPerlProc* ipP)
10660{
10661 /* XXX many of the string copies here can be optimized if they're
10662 * constants; they need to be allocated as common memory and just
10663 * their pointers copied. */
10664
10665 IV i;
10666 CLONE_PARAMS clone_params;
5f66b61c 10667 CLONE_PARAMS* const param = &clone_params;
bd81e77b 10668
5f66b61c 10669 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
bd81e77b
NC
10670 /* for each stash, determine whether its objects should be cloned */
10671 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10672 PERL_SET_THX(my_perl);
10673
10674# ifdef DEBUGGING
10675 Poison(my_perl, 1, PerlInterpreter);
5f66b61c
AL
10676 PL_op = NULL;
10677 PL_curcop = NULL;
bd81e77b
NC
10678 PL_markstack = 0;
10679 PL_scopestack = 0;
10680 PL_savestack = 0;
10681 PL_savestack_ix = 0;
10682 PL_savestack_max = -1;
10683 PL_sig_pending = 0;
10684 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10685# else /* !DEBUGGING */
10686 Zero(my_perl, 1, PerlInterpreter);
10687# endif /* DEBUGGING */
10688
10689 /* host pointers */
10690 PL_Mem = ipM;
10691 PL_MemShared = ipMS;
10692 PL_MemParse = ipMP;
10693 PL_Env = ipE;
10694 PL_StdIO = ipStd;
10695 PL_LIO = ipLIO;
10696 PL_Dir = ipD;
10697 PL_Sock = ipS;
10698 PL_Proc = ipP;
10699#else /* !PERL_IMPLICIT_SYS */
10700 IV i;
10701 CLONE_PARAMS clone_params;
10702 CLONE_PARAMS* param = &clone_params;
5f66b61c 10703 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
bd81e77b
NC
10704 /* for each stash, determine whether its objects should be cloned */
10705 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10706 PERL_SET_THX(my_perl);
10707
10708# ifdef DEBUGGING
10709 Poison(my_perl, 1, PerlInterpreter);
5f66b61c
AL
10710 PL_op = NULL;
10711 PL_curcop = NULL;
bd81e77b
NC
10712 PL_markstack = 0;
10713 PL_scopestack = 0;
10714 PL_savestack = 0;
10715 PL_savestack_ix = 0;
10716 PL_savestack_max = -1;
10717 PL_sig_pending = 0;
10718 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10719# else /* !DEBUGGING */
10720 Zero(my_perl, 1, PerlInterpreter);
10721# endif /* DEBUGGING */
10722#endif /* PERL_IMPLICIT_SYS */
10723 param->flags = flags;
10724 param->proto_perl = proto_perl;
10725
7cb608b5
NC
10726 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
10727
fdda85ca 10728 PL_body_arenas = NULL;
bd81e77b
NC
10729 Zero(&PL_body_roots, 1, PL_body_roots);
10730
10731 PL_nice_chunk = NULL;
10732 PL_nice_chunk_size = 0;
10733 PL_sv_count = 0;
10734 PL_sv_objcount = 0;
a0714e2c
SS
10735 PL_sv_root = NULL;
10736 PL_sv_arenaroot = NULL;
bd81e77b
NC
10737
10738 PL_debug = proto_perl->Idebug;
10739
10740 PL_hash_seed = proto_perl->Ihash_seed;
10741 PL_rehash_seed = proto_perl->Irehash_seed;
10742
10743#ifdef USE_REENTRANT_API
10744 /* XXX: things like -Dm will segfault here in perlio, but doing
10745 * PERL_SET_CONTEXT(proto_perl);
10746 * breaks too many other things
10747 */
10748 Perl_reentrant_init(aTHX);
10749#endif
10750
10751 /* create SV map for pointer relocation */
10752 PL_ptr_table = ptr_table_new();
10753
10754 /* initialize these special pointers as early as possible */
10755 SvANY(&PL_sv_undef) = NULL;
10756 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
10757 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
10758 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
10759
10760 SvANY(&PL_sv_no) = new_XPVNV();
10761 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
10762 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10763 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
10764 SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
10765 SvCUR_set(&PL_sv_no, 0);
10766 SvLEN_set(&PL_sv_no, 1);
10767 SvIV_set(&PL_sv_no, 0);
10768 SvNV_set(&PL_sv_no, 0);
10769 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
10770
10771 SvANY(&PL_sv_yes) = new_XPVNV();
10772 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
10773 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10774 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
10775 SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
10776 SvCUR_set(&PL_sv_yes, 1);
10777 SvLEN_set(&PL_sv_yes, 2);
10778 SvIV_set(&PL_sv_yes, 1);
10779 SvNV_set(&PL_sv_yes, 1);
10780 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
10781
10782 /* create (a non-shared!) shared string table */
10783 PL_strtab = newHV();
10784 HvSHAREKEYS_off(PL_strtab);
10785 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
10786 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
10787
10788 PL_compiling = proto_perl->Icompiling;
10789
10790 /* These two PVs will be free'd special way so must set them same way op.c does */
10791 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
10792 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
10793
10794 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
10795 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
10796
10797 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
10798 if (!specialWARN(PL_compiling.cop_warnings))
10799 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings, param);
10800 if (!specialCopIO(PL_compiling.cop_io))
10801 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io, param);
10802 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
10803
10804 /* pseudo environmental stuff */
10805 PL_origargc = proto_perl->Iorigargc;
10806 PL_origargv = proto_perl->Iorigargv;
10807
10808 param->stashes = newAV(); /* Setup array of objects to call clone on */
10809
10810 /* Set tainting stuff before PerlIO_debug can possibly get called */
10811 PL_tainting = proto_perl->Itainting;
10812 PL_taint_warn = proto_perl->Itaint_warn;
10813
10814#ifdef PERLIO_LAYERS
10815 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
10816 PerlIO_clone(aTHX_ proto_perl, param);
10817#endif
10818
10819 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
10820 PL_incgv = gv_dup(proto_perl->Iincgv, param);
10821 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
10822 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
10823 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
10824 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
10825
10826 /* switches */
10827 PL_minus_c = proto_perl->Iminus_c;
10828 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
10829 PL_localpatches = proto_perl->Ilocalpatches;
10830 PL_splitstr = proto_perl->Isplitstr;
10831 PL_preprocess = proto_perl->Ipreprocess;
10832 PL_minus_n = proto_perl->Iminus_n;
10833 PL_minus_p = proto_perl->Iminus_p;
10834 PL_minus_l = proto_perl->Iminus_l;
10835 PL_minus_a = proto_perl->Iminus_a;
bc9b29db 10836 PL_minus_E = proto_perl->Iminus_E;
bd81e77b
NC
10837 PL_minus_F = proto_perl->Iminus_F;
10838 PL_doswitches = proto_perl->Idoswitches;
10839 PL_dowarn = proto_perl->Idowarn;
10840 PL_doextract = proto_perl->Idoextract;
10841 PL_sawampersand = proto_perl->Isawampersand;
10842 PL_unsafe = proto_perl->Iunsafe;
10843 PL_inplace = SAVEPV(proto_perl->Iinplace);
10844 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
10845 PL_perldb = proto_perl->Iperldb;
10846 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
10847 PL_exit_flags = proto_perl->Iexit_flags;
10848
10849 /* magical thingies */
10850 /* XXX time(&PL_basetime) when asked for? */
10851 PL_basetime = proto_perl->Ibasetime;
10852 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
10853
10854 PL_maxsysfd = proto_perl->Imaxsysfd;
10855 PL_multiline = proto_perl->Imultiline;
10856 PL_statusvalue = proto_perl->Istatusvalue;
10857#ifdef VMS
10858 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
10859#else
10860 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
10861#endif
10862 PL_encoding = sv_dup(proto_perl->Iencoding, param);
10863
10864 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
10865 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
10866 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
10867
10868 /* Clone the regex array */
10869 PL_regex_padav = newAV();
10870 {
10871 const I32 len = av_len((AV*)proto_perl->Iregex_padav);
7a5b473e 10872 SV* const * const regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
bd81e77b 10873 IV i;
7f466ec7 10874 av_push(PL_regex_padav, sv_dup_inc_NN(regexen[0],param));
bd81e77b 10875 for(i = 1; i <= len; i++) {
7a5b473e
AL
10876 const SV * const regex = regexen[i];
10877 SV * const sv =
10878 SvREPADTMP(regex)
10879 ? sv_dup_inc(regex, param)
10880 : SvREFCNT_inc(
10881 newSViv(PTR2IV(re_dup(
10882 INT2PTR(REGEXP *, SvIVX(regex)), param))))
10883 ;
10884 av_push(PL_regex_padav, sv);
bd81e77b
NC
10885 }
10886 }
10887 PL_regex_pad = AvARRAY(PL_regex_padav);
10888
10889 /* shortcuts to various I/O objects */
10890 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
10891 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
10892 PL_defgv = gv_dup(proto_perl->Idefgv, param);
10893 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
10894 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
10895 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
1d7c1841 10896
bd81e77b
NC
10897 /* shortcuts to regexp stuff */
10898 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
9660f481 10899
bd81e77b
NC
10900 /* shortcuts to misc objects */
10901 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
9660f481 10902
bd81e77b
NC
10903 /* shortcuts to debugging objects */
10904 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
10905 PL_DBline = gv_dup(proto_perl->IDBline, param);
10906 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
10907 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
10908 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
10909 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
10910 PL_DBassertion = sv_dup(proto_perl->IDBassertion, param);
10911 PL_lineary = av_dup(proto_perl->Ilineary, param);
10912 PL_dbargs = av_dup(proto_perl->Idbargs, param);
9660f481 10913
bd81e77b
NC
10914 /* symbol tables */
10915 PL_defstash = hv_dup_inc(proto_perl->Tdefstash, param);
10916 PL_curstash = hv_dup(proto_perl->Tcurstash, param);
10917 PL_debstash = hv_dup(proto_perl->Idebstash, param);
10918 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
10919 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
10920
10921 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
10922 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
10923 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
10924 PL_endav = av_dup_inc(proto_perl->Iendav, param);
10925 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
10926 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
10927
10928 PL_sub_generation = proto_perl->Isub_generation;
10929
10930 /* funky return mechanisms */
10931 PL_forkprocess = proto_perl->Iforkprocess;
10932
10933 /* subprocess state */
10934 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
10935
10936 /* internal state */
10937 PL_maxo = proto_perl->Imaxo;
10938 if (proto_perl->Iop_mask)
10939 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
10940 else
bd61b366 10941 PL_op_mask = NULL;
bd81e77b
NC
10942 /* PL_asserting = proto_perl->Iasserting; */
10943
10944 /* current interpreter roots */
10945 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
10946 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
10947 PL_main_start = proto_perl->Imain_start;
10948 PL_eval_root = proto_perl->Ieval_root;
10949 PL_eval_start = proto_perl->Ieval_start;
10950
10951 /* runtime control stuff */
10952 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
10953 PL_copline = proto_perl->Icopline;
10954
10955 PL_filemode = proto_perl->Ifilemode;
10956 PL_lastfd = proto_perl->Ilastfd;
10957 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
10958 PL_Argv = NULL;
bd61b366 10959 PL_Cmd = NULL;
bd81e77b
NC
10960 PL_gensym = proto_perl->Igensym;
10961 PL_preambled = proto_perl->Ipreambled;
10962 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
10963 PL_laststatval = proto_perl->Ilaststatval;
10964 PL_laststype = proto_perl->Ilaststype;
a0714e2c 10965 PL_mess_sv = NULL;
bd81e77b
NC
10966
10967 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
10968
10969 /* interpreter atexit processing */
10970 PL_exitlistlen = proto_perl->Iexitlistlen;
10971 if (PL_exitlistlen) {
10972 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
10973 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9660f481 10974 }
bd81e77b
NC
10975 else
10976 PL_exitlist = (PerlExitListEntry*)NULL;
f16dd614
DM
10977
10978 PL_my_cxt_size = proto_perl->Imy_cxt_size;
4c901e72 10979 if (PL_my_cxt_size) {
f16dd614
DM
10980 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
10981 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
10982 }
10983 else
10984 PL_my_cxt_list = (void**)NULL;
bd81e77b
NC
10985 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
10986 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
10987 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
10988
10989 PL_profiledata = NULL;
10990 PL_rsfp = fp_dup(proto_perl->Irsfp, '<', param);
10991 /* PL_rsfp_filters entries have fake IoDIRP() */
10992 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters, param);
9660f481 10993
bd81e77b 10994 PL_compcv = cv_dup(proto_perl->Icompcv, param);
9660f481 10995
bd81e77b 10996 PAD_CLONE_VARS(proto_perl, param);
9660f481 10997
bd81e77b
NC
10998#ifdef HAVE_INTERP_INTERN
10999 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11000#endif
645c22ef 11001
bd81e77b
NC
11002 /* more statics moved here */
11003 PL_generation = proto_perl->Igeneration;
11004 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
645c22ef 11005
bd81e77b
NC
11006 PL_in_clean_objs = proto_perl->Iin_clean_objs;
11007 PL_in_clean_all = proto_perl->Iin_clean_all;
6a78b4db 11008
bd81e77b
NC
11009 PL_uid = proto_perl->Iuid;
11010 PL_euid = proto_perl->Ieuid;
11011 PL_gid = proto_perl->Igid;
11012 PL_egid = proto_perl->Iegid;
11013 PL_nomemok = proto_perl->Inomemok;
11014 PL_an = proto_perl->Ian;
11015 PL_evalseq = proto_perl->Ievalseq;
11016 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11017 PL_origalen = proto_perl->Iorigalen;
11018#ifdef PERL_USES_PL_PIDSTATUS
11019 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11020#endif
11021 PL_osname = SAVEPV(proto_perl->Iosname);
11022 PL_sighandlerp = proto_perl->Isighandlerp;
6a78b4db 11023
bd81e77b 11024 PL_runops = proto_perl->Irunops;
6a78b4db 11025
bd81e77b 11026 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
6a78b4db 11027
bd81e77b
NC
11028#ifdef CSH
11029 PL_cshlen = proto_perl->Icshlen;
11030 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
11031#endif
645c22ef 11032
bd81e77b
NC
11033 PL_lex_state = proto_perl->Ilex_state;
11034 PL_lex_defer = proto_perl->Ilex_defer;
11035 PL_lex_expect = proto_perl->Ilex_expect;
11036 PL_lex_formbrack = proto_perl->Ilex_formbrack;
11037 PL_lex_dojoin = proto_perl->Ilex_dojoin;
11038 PL_lex_starts = proto_perl->Ilex_starts;
11039 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff, param);
11040 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl, param);
11041 PL_lex_op = proto_perl->Ilex_op;
11042 PL_lex_inpat = proto_perl->Ilex_inpat;
11043 PL_lex_inwhat = proto_perl->Ilex_inwhat;
11044 PL_lex_brackets = proto_perl->Ilex_brackets;
11045 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
11046 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
11047 PL_lex_casemods = proto_perl->Ilex_casemods;
11048 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
11049 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
645c22ef 11050
5db06880
NC
11051#ifdef PERL_MAD
11052 Copy(proto_perl->Inexttoke, PL_nexttoke, 5, NEXTTOKE);
11053 PL_lasttoke = proto_perl->Ilasttoke;
5336380d
NC
11054 PL_realtokenstart = proto_perl->Irealtokenstart;
11055 PL_faketokens = proto_perl->Ifaketokens;
11056 PL_thismad = proto_perl->Ithismad;
11057 PL_thistoken = proto_perl->Ithistoken;
11058 PL_thisopen = proto_perl->Ithisopen;
11059 PL_thisstuff = proto_perl->Ithisstuff;
11060 PL_thisclose = proto_perl->Ithisclose;
11061 PL_thiswhite = proto_perl->Ithiswhite;
11062 PL_nextwhite = proto_perl->Inextwhite;
11063 PL_skipwhite = proto_perl->Iskipwhite;
11064 PL_endwhite = proto_perl->Iendwhite;
11065 PL_curforce = proto_perl->Icurforce;
5db06880 11066#else
bd81e77b
NC
11067 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
11068 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
11069 PL_nexttoke = proto_perl->Inexttoke;
5db06880 11070#endif
c43294b8 11071
bd81e77b
NC
11072 /* XXX This is probably masking the deeper issue of why
11073 * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case:
11074 * http://archive.develooper.com/perl5-porters%40perl.org/msg83298.html
11075 * (A little debugging with a watchpoint on it may help.)
11076 */
11077 if (SvANY(proto_perl->Ilinestr)) {
11078 PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param);
11079 i = proto_perl->Ibufptr - SvPVX_const(proto_perl->Ilinestr);
11080 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11081 i = proto_perl->Ioldbufptr - SvPVX_const(proto_perl->Ilinestr);
11082 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11083 i = proto_perl->Ioldoldbufptr - SvPVX_const(proto_perl->Ilinestr);
11084 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11085 i = proto_perl->Ilinestart - SvPVX_const(proto_perl->Ilinestr);
11086 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11087 }
11088 else {
561b68a9 11089 PL_linestr = newSV(79);
bd81e77b
NC
11090 sv_upgrade(PL_linestr,SVt_PVIV);
11091 sv_setpvn(PL_linestr,"",0);
11092 PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
11093 }
11094 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
11095 PL_pending_ident = proto_perl->Ipending_ident;
11096 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
11097
11098 PL_expect = proto_perl->Iexpect;
11099
11100 PL_multi_start = proto_perl->Imulti_start;
11101 PL_multi_end = proto_perl->Imulti_end;
11102 PL_multi_open = proto_perl->Imulti_open;
11103 PL_multi_close = proto_perl->Imulti_close;
11104
11105 PL_error_count = proto_perl->Ierror_count;
11106 PL_subline = proto_perl->Isubline;
11107 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
c43294b8 11108
bd81e77b
NC
11109 /* XXX See comment on SvANY(proto_perl->Ilinestr) above */
11110 if (SvANY(proto_perl->Ilinestr)) {
11111 i = proto_perl->Ilast_uni - SvPVX_const(proto_perl->Ilinestr);
11112 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11113 i = proto_perl->Ilast_lop - SvPVX_const(proto_perl->Ilinestr);
11114 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11115 PL_last_lop_op = proto_perl->Ilast_lop_op;
11116 }
11117 else {
11118 PL_last_uni = SvPVX(PL_linestr);
11119 PL_last_lop = SvPVX(PL_linestr);
11120 PL_last_lop_op = 0;
11121 }
11122 PL_in_my = proto_perl->Iin_my;
11123 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash, param);
11124#ifdef FCRYPT
11125 PL_cryptseen = proto_perl->Icryptseen;
11126#endif
1d7c1841 11127
bd81e77b 11128 PL_hints = proto_perl->Ihints;
1d7c1841 11129
bd81e77b 11130 PL_amagic_generation = proto_perl->Iamagic_generation;
d2d73c3e 11131
bd81e77b
NC
11132#ifdef USE_LOCALE_COLLATE
11133 PL_collation_ix = proto_perl->Icollation_ix;
11134 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11135 PL_collation_standard = proto_perl->Icollation_standard;
11136 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11137 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11138#endif /* USE_LOCALE_COLLATE */
1d7c1841 11139
bd81e77b
NC
11140#ifdef USE_LOCALE_NUMERIC
11141 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11142 PL_numeric_standard = proto_perl->Inumeric_standard;
11143 PL_numeric_local = proto_perl->Inumeric_local;
11144 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11145#endif /* !USE_LOCALE_NUMERIC */
1d7c1841 11146
bd81e77b
NC
11147 /* utf8 character classes */
11148 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11149 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11150 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11151 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11152 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11153 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11154 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11155 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11156 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11157 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11158 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11159 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11160 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11161 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11162 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11163 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11164 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11165 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11166 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11167 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
1d7c1841 11168
bd81e77b
NC
11169 /* Did the locale setup indicate UTF-8? */
11170 PL_utf8locale = proto_perl->Iutf8locale;
11171 /* Unicode features (see perlrun/-C) */
11172 PL_unicode = proto_perl->Iunicode;
1d7c1841 11173
bd81e77b
NC
11174 /* Pre-5.8 signals control */
11175 PL_signals = proto_perl->Isignals;
1d7c1841 11176
bd81e77b
NC
11177 /* times() ticks per second */
11178 PL_clocktick = proto_perl->Iclocktick;
1d7c1841 11179
bd81e77b
NC
11180 /* Recursion stopper for PerlIO_find_layer */
11181 PL_in_load_module = proto_perl->Iin_load_module;
8df990a8 11182
bd81e77b
NC
11183 /* sort() routine */
11184 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
e5dd39fc 11185
bd81e77b
NC
11186 /* Not really needed/useful since the reenrant_retint is "volatile",
11187 * but do it for consistency's sake. */
11188 PL_reentrant_retint = proto_perl->Ireentrant_retint;
1d7c1841 11189
bd81e77b
NC
11190 /* Hooks to shared SVs and locks. */
11191 PL_sharehook = proto_perl->Isharehook;
11192 PL_lockhook = proto_perl->Ilockhook;
11193 PL_unlockhook = proto_perl->Iunlockhook;
11194 PL_threadhook = proto_perl->Ithreadhook;
1d7c1841 11195
bd81e77b
NC
11196 PL_runops_std = proto_perl->Irunops_std;
11197 PL_runops_dbg = proto_perl->Irunops_dbg;
1d7c1841 11198
bd81e77b
NC
11199#ifdef THREADS_HAVE_PIDS
11200 PL_ppid = proto_perl->Ippid;
11201#endif
1d7c1841 11202
bd81e77b 11203 /* swatch cache */
5c284bb0 11204 PL_last_swash_hv = NULL; /* reinits on demand */
bd81e77b
NC
11205 PL_last_swash_klen = 0;
11206 PL_last_swash_key[0]= '\0';
11207 PL_last_swash_tmps = (U8*)NULL;
11208 PL_last_swash_slen = 0;
1d7c1841 11209
bd81e77b
NC
11210 PL_glob_index = proto_perl->Iglob_index;
11211 PL_srand_called = proto_perl->Isrand_called;
11212 PL_uudmap['M'] = 0; /* reinits on demand */
bd61b366 11213 PL_bitcount = NULL; /* reinits on demand */
05ec9bb3 11214
bd81e77b
NC
11215 if (proto_perl->Ipsig_pend) {
11216 Newxz(PL_psig_pend, SIG_SIZE, int);
11217 }
11218 else {
11219 PL_psig_pend = (int*)NULL;
11220 }
05ec9bb3 11221
bd81e77b
NC
11222 if (proto_perl->Ipsig_ptr) {
11223 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
11224 Newxz(PL_psig_name, SIG_SIZE, SV*);
11225 for (i = 1; i < SIG_SIZE; i++) {
11226 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11227 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11228 }
11229 }
11230 else {
11231 PL_psig_ptr = (SV**)NULL;
11232 PL_psig_name = (SV**)NULL;
11233 }
05ec9bb3 11234
bd81e77b 11235 /* thrdvar.h stuff */
1d7c1841 11236
bd81e77b
NC
11237 if (flags & CLONEf_COPY_STACKS) {
11238 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11239 PL_tmps_ix = proto_perl->Ttmps_ix;
11240 PL_tmps_max = proto_perl->Ttmps_max;
11241 PL_tmps_floor = proto_perl->Ttmps_floor;
11242 Newxz(PL_tmps_stack, PL_tmps_max, SV*);
11243 i = 0;
11244 while (i <= PL_tmps_ix) {
11245 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
11246 ++i;
11247 }
d2d73c3e 11248
bd81e77b
NC
11249 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11250 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
11251 Newxz(PL_markstack, i, I32);
11252 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
11253 - proto_perl->Tmarkstack);
11254 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
11255 - proto_perl->Tmarkstack);
11256 Copy(proto_perl->Tmarkstack, PL_markstack,
11257 PL_markstack_ptr - PL_markstack + 1, I32);
d2d73c3e 11258
bd81e77b
NC
11259 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11260 * NOTE: unlike the others! */
11261 PL_scopestack_ix = proto_perl->Tscopestack_ix;
11262 PL_scopestack_max = proto_perl->Tscopestack_max;
11263 Newxz(PL_scopestack, PL_scopestack_max, I32);
11264 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
d419787a 11265
bd81e77b
NC
11266 /* NOTE: si_dup() looks at PL_markstack */
11267 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo, param);
d2d73c3e 11268
bd81e77b
NC
11269 /* PL_curstack = PL_curstackinfo->si_stack; */
11270 PL_curstack = av_dup(proto_perl->Tcurstack, param);
11271 PL_mainstack = av_dup(proto_perl->Tmainstack, param);
1d7c1841 11272
bd81e77b
NC
11273 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11274 PL_stack_base = AvARRAY(PL_curstack);
11275 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
11276 - proto_perl->Tstack_base);
11277 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
1d7c1841 11278
bd81e77b
NC
11279 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11280 * NOTE: unlike the others! */
11281 PL_savestack_ix = proto_perl->Tsavestack_ix;
11282 PL_savestack_max = proto_perl->Tsavestack_max;
11283 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
11284 PL_savestack = ss_dup(proto_perl, param);
11285 }
11286 else {
11287 init_stacks();
11288 ENTER; /* perl_destruct() wants to LEAVE; */
34394ecd
DM
11289
11290 /* although we're not duplicating the tmps stack, we should still
11291 * add entries for any SVs on the tmps stack that got cloned by a
11292 * non-refcount means (eg a temp in @_); otherwise they will be
11293 * orphaned
11294 */
11295 for (i = 0; i<= proto_perl->Ttmps_ix; i++) {
6136c704 11296 SV * const nsv = (SV*)ptr_table_fetch(PL_ptr_table,
34394ecd
DM
11297 proto_perl->Ttmps_stack[i]);
11298 if (nsv && !SvREFCNT(nsv)) {
11299 EXTEND_MORTAL(1);
b37c2d43 11300 PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple(nsv);
34394ecd
DM
11301 }
11302 }
bd81e77b 11303 }
1d7c1841 11304
bd81e77b
NC
11305 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
11306 PL_top_env = &PL_start_env;
1d7c1841 11307
bd81e77b 11308 PL_op = proto_perl->Top;
4a4c6fe3 11309
a0714e2c 11310 PL_Sv = NULL;
bd81e77b
NC
11311 PL_Xpv = (XPV*)NULL;
11312 PL_na = proto_perl->Tna;
1fcf4c12 11313
bd81e77b
NC
11314 PL_statbuf = proto_perl->Tstatbuf;
11315 PL_statcache = proto_perl->Tstatcache;
11316 PL_statgv = gv_dup(proto_perl->Tstatgv, param);
11317 PL_statname = sv_dup_inc(proto_perl->Tstatname, param);
11318#ifdef HAS_TIMES
11319 PL_timesbuf = proto_perl->Ttimesbuf;
11320#endif
1d7c1841 11321
bd81e77b
NC
11322 PL_tainted = proto_perl->Ttainted;
11323 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
11324 PL_rs = sv_dup_inc(proto_perl->Trs, param);
11325 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv, param);
11326 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv, param);
11327 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv, param);
11328 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
11329 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget, param);
11330 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget, param);
11331 PL_formtarget = sv_dup(proto_perl->Tformtarget, param);
1d7c1841 11332
bd81e77b
NC
11333 PL_restartop = proto_perl->Trestartop;
11334 PL_in_eval = proto_perl->Tin_eval;
11335 PL_delaymagic = proto_perl->Tdelaymagic;
11336 PL_dirty = proto_perl->Tdirty;
11337 PL_localizing = proto_perl->Tlocalizing;
1d7c1841 11338
bd81e77b 11339 PL_errors = sv_dup_inc(proto_perl->Terrors, param);
4608196e 11340 PL_hv_fetch_ent_mh = NULL;
bd81e77b 11341 PL_modcount = proto_perl->Tmodcount;
5f66b61c 11342 PL_lastgotoprobe = NULL;
bd81e77b 11343 PL_dumpindent = proto_perl->Tdumpindent;
1d7c1841 11344
bd81e77b
NC
11345 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
11346 PL_sortstash = hv_dup(proto_perl->Tsortstash, param);
11347 PL_firstgv = gv_dup(proto_perl->Tfirstgv, param);
11348 PL_secondgv = gv_dup(proto_perl->Tsecondgv, param);
bd61b366 11349 PL_efloatbuf = NULL; /* reinits on demand */
bd81e77b 11350 PL_efloatsize = 0; /* reinits on demand */
d2d73c3e 11351
bd81e77b 11352 /* regex stuff */
1d7c1841 11353
bd81e77b
NC
11354 PL_screamfirst = NULL;
11355 PL_screamnext = NULL;
11356 PL_maxscream = -1; /* reinits on demand */
a0714e2c 11357 PL_lastscream = NULL;
1d7c1841 11358
bd81e77b 11359 PL_watchaddr = NULL;
bd61b366 11360 PL_watchok = NULL;
1d7c1841 11361
bd81e77b 11362 PL_regdummy = proto_perl->Tregdummy;
bd61b366 11363 PL_regprecomp = NULL;
bd81e77b
NC
11364 PL_regnpar = 0;
11365 PL_regsize = 0;
11366 PL_colorset = 0; /* reinits PL_colors[] */
11367 /*PL_colors[6] = {0,0,0,0,0,0};*/
bd61b366
SS
11368 PL_reginput = NULL;
11369 PL_regbol = NULL;
11370 PL_regeol = NULL;
bd81e77b
NC
11371 PL_regstartp = (I32*)NULL;
11372 PL_regendp = (I32*)NULL;
11373 PL_reglastparen = (U32*)NULL;
11374 PL_reglastcloseparen = (U32*)NULL;
bd61b366 11375 PL_regtill = NULL;
bd81e77b
NC
11376 PL_reg_start_tmp = (char**)NULL;
11377 PL_reg_start_tmpl = 0;
11378 PL_regdata = (struct reg_data*)NULL;
bd61b366 11379 PL_bostr = NULL;
bd81e77b
NC
11380 PL_reg_flags = 0;
11381 PL_reg_eval_set = 0;
11382 PL_regnarrate = 0;
11383 PL_regprogram = (regnode*)NULL;
11384 PL_regindent = 0;
11385 PL_regcc = (CURCUR*)NULL;
11386 PL_reg_call_cc = (struct re_cc_state*)NULL;
11387 PL_reg_re = (regexp*)NULL;
bd61b366 11388 PL_reg_ganch = NULL;
a0714e2c 11389 PL_reg_sv = NULL;
bd81e77b
NC
11390 PL_reg_match_utf8 = FALSE;
11391 PL_reg_magic = (MAGIC*)NULL;
11392 PL_reg_oldpos = 0;
11393 PL_reg_oldcurpm = (PMOP*)NULL;
11394 PL_reg_curpm = (PMOP*)NULL;
bd61b366 11395 PL_reg_oldsaved = NULL;
bd81e77b
NC
11396 PL_reg_oldsavedlen = 0;
11397#ifdef PERL_OLD_COPY_ON_WRITE
a0714e2c 11398 PL_nrs = NULL;
bd81e77b
NC
11399#endif
11400 PL_reg_maxiter = 0;
11401 PL_reg_leftiter = 0;
bd61b366 11402 PL_reg_poscache = NULL;
bd81e77b 11403 PL_reg_poscache_size= 0;
1d7c1841 11404
bd81e77b
NC
11405 /* RE engine - function pointers */
11406 PL_regcompp = proto_perl->Tregcompp;
11407 PL_regexecp = proto_perl->Tregexecp;
11408 PL_regint_start = proto_perl->Tregint_start;
11409 PL_regint_string = proto_perl->Tregint_string;
11410 PL_regfree = proto_perl->Tregfree;
1d7c1841 11411
bd81e77b
NC
11412 PL_reginterp_cnt = 0;
11413 PL_reg_starttry = 0;
1d7c1841 11414
bd81e77b
NC
11415 /* Pluggable optimizer */
11416 PL_peepp = proto_perl->Tpeepp;
1d7c1841 11417
bd81e77b 11418 PL_stashcache = newHV();
1d7c1841 11419
bd81e77b
NC
11420 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
11421 ptr_table_free(PL_ptr_table);
11422 PL_ptr_table = NULL;
11423 }
1d7c1841 11424
bd81e77b
NC
11425 /* Call the ->CLONE method, if it exists, for each of the stashes
11426 identified by sv_dup() above.
11427 */
11428 while(av_len(param->stashes) != -1) {
11429 HV* const stash = (HV*) av_shift(param->stashes);
11430 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
11431 if (cloner && GvCV(cloner)) {
11432 dSP;
11433 ENTER;
11434 SAVETMPS;
11435 PUSHMARK(SP);
11436 XPUSHs(sv_2mortal(newSVhek(HvNAME_HEK(stash))));
11437 PUTBACK;
11438 call_sv((SV*)GvCV(cloner), G_DISCARD);
11439 FREETMPS;
11440 LEAVE;
11441 }
1d7c1841 11442 }
1d7c1841 11443
bd81e77b 11444 SvREFCNT_dec(param->stashes);
1d7c1841 11445
bd81e77b
NC
11446 /* orphaned? eg threads->new inside BEGIN or use */
11447 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
b37c2d43 11448 SvREFCNT_inc_simple_void(PL_compcv);
bd81e77b
NC
11449 SAVEFREESV(PL_compcv);
11450 }
dd2155a4 11451
bd81e77b
NC
11452 return my_perl;
11453}
1d7c1841 11454
bd81e77b 11455#endif /* USE_ITHREADS */
1d7c1841 11456
bd81e77b
NC
11457/*
11458=head1 Unicode Support
1d7c1841 11459
bd81e77b 11460=for apidoc sv_recode_to_utf8
1d7c1841 11461
bd81e77b
NC
11462The encoding is assumed to be an Encode object, on entry the PV
11463of the sv is assumed to be octets in that encoding, and the sv
11464will be converted into Unicode (and UTF-8).
1d7c1841 11465
bd81e77b
NC
11466If the sv already is UTF-8 (or if it is not POK), or if the encoding
11467is not a reference, nothing is done to the sv. If the encoding is not
11468an C<Encode::XS> Encoding object, bad things will happen.
11469(See F<lib/encoding.pm> and L<Encode>).
1d7c1841 11470
bd81e77b 11471The PV of the sv is returned.
1d7c1841 11472
bd81e77b 11473=cut */
1d7c1841 11474
bd81e77b
NC
11475char *
11476Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
11477{
11478 dVAR;
11479 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
11480 SV *uni;
11481 STRLEN len;
11482 const char *s;
11483 dSP;
11484 ENTER;
11485 SAVETMPS;
11486 save_re_context();
11487 PUSHMARK(sp);
11488 EXTEND(SP, 3);
11489 XPUSHs(encoding);
11490 XPUSHs(sv);
11491/*
11492 NI-S 2002/07/09
11493 Passing sv_yes is wrong - it needs to be or'ed set of constants
11494 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
11495 remove converted chars from source.
1d7c1841 11496
bd81e77b 11497 Both will default the value - let them.
1d7c1841 11498
bd81e77b
NC
11499 XPUSHs(&PL_sv_yes);
11500*/
11501 PUTBACK;
11502 call_method("decode", G_SCALAR);
11503 SPAGAIN;
11504 uni = POPs;
11505 PUTBACK;
11506 s = SvPV_const(uni, len);
11507 if (s != SvPVX_const(sv)) {
11508 SvGROW(sv, len + 1);
11509 Move(s, SvPVX(sv), len + 1, char);
11510 SvCUR_set(sv, len);
11511 }
11512 FREETMPS;
11513 LEAVE;
11514 SvUTF8_on(sv);
11515 return SvPVX(sv);
389edf32 11516 }
bd81e77b
NC
11517 return SvPOKp(sv) ? SvPVX(sv) : NULL;
11518}
1d7c1841 11519
bd81e77b
NC
11520/*
11521=for apidoc sv_cat_decode
1d7c1841 11522
bd81e77b
NC
11523The encoding is assumed to be an Encode object, the PV of the ssv is
11524assumed to be octets in that encoding and decoding the input starts
11525from the position which (PV + *offset) pointed to. The dsv will be
11526concatenated the decoded UTF-8 string from ssv. Decoding will terminate
11527when the string tstr appears in decoding output or the input ends on
11528the PV of the ssv. The value which the offset points will be modified
11529to the last input position on the ssv.
1d7c1841 11530
bd81e77b 11531Returns TRUE if the terminator was found, else returns FALSE.
1d7c1841 11532
bd81e77b
NC
11533=cut */
11534
11535bool
11536Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
11537 SV *ssv, int *offset, char *tstr, int tlen)
11538{
11539 dVAR;
11540 bool ret = FALSE;
11541 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
11542 SV *offsv;
11543 dSP;
11544 ENTER;
11545 SAVETMPS;
11546 save_re_context();
11547 PUSHMARK(sp);
11548 EXTEND(SP, 6);
11549 XPUSHs(encoding);
11550 XPUSHs(dsv);
11551 XPUSHs(ssv);
11552 XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
11553 XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
11554 PUTBACK;
11555 call_method("cat_decode", G_SCALAR);
11556 SPAGAIN;
11557 ret = SvTRUE(TOPs);
11558 *offset = SvIV(offsv);
11559 PUTBACK;
11560 FREETMPS;
11561 LEAVE;
389edf32 11562 }
bd81e77b
NC
11563 else
11564 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
11565 return ret;
1d7c1841 11566
bd81e77b 11567}
1d7c1841 11568
bd81e77b
NC
11569/* ---------------------------------------------------------------------
11570 *
11571 * support functions for report_uninit()
11572 */
1d7c1841 11573
bd81e77b
NC
11574/* the maxiumum size of array or hash where we will scan looking
11575 * for the undefined element that triggered the warning */
1d7c1841 11576
bd81e77b 11577#define FUV_MAX_SEARCH_SIZE 1000
1d7c1841 11578
bd81e77b
NC
11579/* Look for an entry in the hash whose value has the same SV as val;
11580 * If so, return a mortal copy of the key. */
1d7c1841 11581
bd81e77b
NC
11582STATIC SV*
11583S_find_hash_subscript(pTHX_ HV *hv, SV* val)
11584{
11585 dVAR;
11586 register HE **array;
11587 I32 i;
6c3182a5 11588
bd81e77b
NC
11589 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
11590 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
a0714e2c 11591 return NULL;
6c3182a5 11592
bd81e77b 11593 array = HvARRAY(hv);
6c3182a5 11594
bd81e77b
NC
11595 for (i=HvMAX(hv); i>0; i--) {
11596 register HE *entry;
11597 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
11598 if (HeVAL(entry) != val)
11599 continue;
11600 if ( HeVAL(entry) == &PL_sv_undef ||
11601 HeVAL(entry) == &PL_sv_placeholder)
11602 continue;
11603 if (!HeKEY(entry))
a0714e2c 11604 return NULL;
bd81e77b
NC
11605 if (HeKLEN(entry) == HEf_SVKEY)
11606 return sv_mortalcopy(HeKEY_sv(entry));
11607 return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
11608 }
11609 }
a0714e2c 11610 return NULL;
bd81e77b 11611}
6c3182a5 11612
bd81e77b
NC
11613/* Look for an entry in the array whose value has the same SV as val;
11614 * If so, return the index, otherwise return -1. */
6c3182a5 11615
bd81e77b
NC
11616STATIC I32
11617S_find_array_subscript(pTHX_ AV *av, SV* val)
11618{
97aff369 11619 dVAR;
bd81e77b
NC
11620 SV** svp;
11621 I32 i;
11622 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
11623 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
11624 return -1;
57c6e6d2 11625
bd81e77b
NC
11626 svp = AvARRAY(av);
11627 for (i=AvFILLp(av); i>=0; i--) {
11628 if (svp[i] == val && svp[i] != &PL_sv_undef)
11629 return i;
11630 }
11631 return -1;
11632}
15a5279a 11633
bd81e77b
NC
11634/* S_varname(): return the name of a variable, optionally with a subscript.
11635 * If gv is non-zero, use the name of that global, along with gvtype (one
11636 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
11637 * targ. Depending on the value of the subscript_type flag, return:
11638 */
bce260cd 11639
bd81e77b
NC
11640#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
11641#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
11642#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
11643#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
bce260cd 11644
bd81e77b
NC
11645STATIC SV*
11646S_varname(pTHX_ GV *gv, const char gvtype, PADOFFSET targ,
11647 SV* keyname, I32 aindex, int subscript_type)
11648{
1d7c1841 11649
bd81e77b
NC
11650 SV * const name = sv_newmortal();
11651 if (gv) {
11652 char buffer[2];
11653 buffer[0] = gvtype;
11654 buffer[1] = 0;
1d7c1841 11655
bd81e77b 11656 /* as gv_fullname4(), but add literal '^' for $^FOO names */
66fe0623 11657
bd81e77b 11658 gv_fullname4(name, gv, buffer, 0);
1d7c1841 11659
bd81e77b
NC
11660 if ((unsigned int)SvPVX(name)[1] <= 26) {
11661 buffer[0] = '^';
11662 buffer[1] = SvPVX(name)[1] + 'A' - 1;
1d7c1841 11663
bd81e77b
NC
11664 /* Swap the 1 unprintable control character for the 2 byte pretty
11665 version - ie substr($name, 1, 1) = $buffer; */
11666 sv_insert(name, 1, 1, buffer, 2);
1d7c1841 11667 }
bd81e77b
NC
11668 }
11669 else {
11670 U32 unused;
11671 CV * const cv = find_runcv(&unused);
11672 SV *sv;
11673 AV *av;
1d7c1841 11674
bd81e77b 11675 if (!cv || !CvPADLIST(cv))
a0714e2c 11676 return NULL;
bd81e77b
NC
11677 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
11678 sv = *av_fetch(av, targ, FALSE);
11679 /* SvLEN in a pad name is not to be trusted */
11680 sv_setpv(name, SvPV_nolen_const(sv));
11681 }
1d7c1841 11682
bd81e77b 11683 if (subscript_type == FUV_SUBSCRIPT_HASH) {
561b68a9 11684 SV * const sv = newSV(0);
bd81e77b
NC
11685 *SvPVX(name) = '$';
11686 Perl_sv_catpvf(aTHX_ name, "{%s}",
11687 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
11688 SvREFCNT_dec(sv);
11689 }
11690 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
11691 *SvPVX(name) = '$';
11692 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
11693 }
11694 else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
89529cee 11695 Perl_sv_insert(aTHX_ name, 0, 0, STR_WITH_LEN("within "));
1d7c1841 11696
bd81e77b
NC
11697 return name;
11698}
1d7c1841 11699
1d7c1841 11700
bd81e77b
NC
11701/*
11702=for apidoc find_uninit_var
1d7c1841 11703
bd81e77b
NC
11704Find the name of the undefined variable (if any) that caused the operator o
11705to issue a "Use of uninitialized value" warning.
11706If match is true, only return a name if it's value matches uninit_sv.
11707So roughly speaking, if a unary operator (such as OP_COS) generates a
11708warning, then following the direct child of the op may yield an
11709OP_PADSV or OP_GV that gives the name of the undefined variable. On the
11710other hand, with OP_ADD there are two branches to follow, so we only print
11711the variable name if we get an exact match.
1d7c1841 11712
bd81e77b 11713The name is returned as a mortal SV.
1d7c1841 11714
bd81e77b
NC
11715Assumes that PL_op is the op that originally triggered the error, and that
11716PL_comppad/PL_curpad points to the currently executing pad.
1d7c1841 11717
bd81e77b
NC
11718=cut
11719*/
1d7c1841 11720
bd81e77b
NC
11721STATIC SV *
11722S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
11723{
11724 dVAR;
11725 SV *sv;
11726 AV *av;
11727 GV *gv;
11728 OP *o, *o2, *kid;
1d7c1841 11729
bd81e77b
NC
11730 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
11731 uninit_sv == &PL_sv_placeholder)))
a0714e2c 11732 return NULL;
1d7c1841 11733
bd81e77b 11734 switch (obase->op_type) {
1d7c1841 11735
bd81e77b
NC
11736 case OP_RV2AV:
11737 case OP_RV2HV:
11738 case OP_PADAV:
11739 case OP_PADHV:
11740 {
11741 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
11742 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
11743 I32 index = 0;
a0714e2c 11744 SV *keysv = NULL;
bd81e77b 11745 int subscript_type = FUV_SUBSCRIPT_WITHIN;
1d7c1841 11746
bd81e77b
NC
11747 if (pad) { /* @lex, %lex */
11748 sv = PAD_SVl(obase->op_targ);
a0714e2c 11749 gv = NULL;
bd81e77b
NC
11750 }
11751 else {
11752 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
11753 /* @global, %global */
11754 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
11755 if (!gv)
11756 break;
11757 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
11758 }
11759 else /* @{expr}, %{expr} */
11760 return find_uninit_var(cUNOPx(obase)->op_first,
11761 uninit_sv, match);
11762 }
1d7c1841 11763
bd81e77b
NC
11764 /* attempt to find a match within the aggregate */
11765 if (hash) {
11766 keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
11767 if (keysv)
11768 subscript_type = FUV_SUBSCRIPT_HASH;
11769 }
11770 else {
11771 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
11772 if (index >= 0)
11773 subscript_type = FUV_SUBSCRIPT_ARRAY;
11774 }
1d7c1841 11775
bd81e77b
NC
11776 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
11777 break;
1d7c1841 11778
bd81e77b
NC
11779 return varname(gv, hash ? '%' : '@', obase->op_targ,
11780 keysv, index, subscript_type);
11781 }
1d7c1841 11782
bd81e77b
NC
11783 case OP_PADSV:
11784 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
11785 break;
a0714e2c
SS
11786 return varname(NULL, '$', obase->op_targ,
11787 NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 11788
bd81e77b
NC
11789 case OP_GVSV:
11790 gv = cGVOPx_gv(obase);
11791 if (!gv || (match && GvSV(gv) != uninit_sv))
11792 break;
a0714e2c 11793 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 11794
bd81e77b
NC
11795 case OP_AELEMFAST:
11796 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
11797 if (match) {
11798 SV **svp;
11799 av = (AV*)PAD_SV(obase->op_targ);
11800 if (!av || SvRMAGICAL(av))
11801 break;
11802 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11803 if (!svp || *svp != uninit_sv)
11804 break;
11805 }
a0714e2c
SS
11806 return varname(NULL, '$', obase->op_targ,
11807 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11808 }
11809 else {
11810 gv = cGVOPx_gv(obase);
11811 if (!gv)
11812 break;
11813 if (match) {
11814 SV **svp;
11815 av = GvAV(gv);
11816 if (!av || SvRMAGICAL(av))
11817 break;
11818 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11819 if (!svp || *svp != uninit_sv)
11820 break;
11821 }
11822 return varname(gv, '$', 0,
a0714e2c 11823 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11824 }
11825 break;
1d7c1841 11826
bd81e77b
NC
11827 case OP_EXISTS:
11828 o = cUNOPx(obase)->op_first;
11829 if (!o || o->op_type != OP_NULL ||
11830 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
11831 break;
11832 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
a2efc822 11833
bd81e77b
NC
11834 case OP_AELEM:
11835 case OP_HELEM:
11836 if (PL_op == obase)
11837 /* $a[uninit_expr] or $h{uninit_expr} */
11838 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
081fc587 11839
a0714e2c 11840 gv = NULL;
bd81e77b
NC
11841 o = cBINOPx(obase)->op_first;
11842 kid = cBINOPx(obase)->op_last;
8cf8f3d1 11843
bd81e77b 11844 /* get the av or hv, and optionally the gv */
a0714e2c 11845 sv = NULL;
bd81e77b
NC
11846 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
11847 sv = PAD_SV(o->op_targ);
11848 }
11849 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
11850 && cUNOPo->op_first->op_type == OP_GV)
11851 {
11852 gv = cGVOPx_gv(cUNOPo->op_first);
11853 if (!gv)
11854 break;
11855 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
11856 }
11857 if (!sv)
11858 break;
11859
11860 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
11861 /* index is constant */
11862 if (match) {
11863 if (SvMAGICAL(sv))
11864 break;
11865 if (obase->op_type == OP_HELEM) {
11866 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
11867 if (!he || HeVAL(he) != uninit_sv)
11868 break;
11869 }
11870 else {
00b6aa41 11871 SV * const * const svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
bd81e77b
NC
11872 if (!svp || *svp != uninit_sv)
11873 break;
11874 }
11875 }
11876 if (obase->op_type == OP_HELEM)
11877 return varname(gv, '%', o->op_targ,
11878 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
11879 else
a0714e2c 11880 return varname(gv, '@', o->op_targ, NULL,
bd81e77b 11881 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11882 }
11883 else {
11884 /* index is an expression;
11885 * attempt to find a match within the aggregate */
11886 if (obase->op_type == OP_HELEM) {
11887 SV * const keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
11888 if (keysv)
11889 return varname(gv, '%', o->op_targ,
11890 keysv, 0, FUV_SUBSCRIPT_HASH);
11891 }
11892 else {
11893 const I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
11894 if (index >= 0)
11895 return varname(gv, '@', o->op_targ,
a0714e2c 11896 NULL, index, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11897 }
11898 if (match)
11899 break;
11900 return varname(gv,
11901 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
11902 ? '@' : '%',
a0714e2c 11903 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
f284b03f 11904 }
bd81e77b 11905 break;
dc507217 11906
bd81e77b
NC
11907 case OP_AASSIGN:
11908 /* only examine RHS */
11909 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
6d26897e 11910
bd81e77b
NC
11911 case OP_OPEN:
11912 o = cUNOPx(obase)->op_first;
11913 if (o->op_type == OP_PUSHMARK)
11914 o = o->op_sibling;
1d7c1841 11915
bd81e77b
NC
11916 if (!o->op_sibling) {
11917 /* one-arg version of open is highly magical */
a0ae6670 11918
bd81e77b
NC
11919 if (o->op_type == OP_GV) { /* open FOO; */
11920 gv = cGVOPx_gv(o);
11921 if (match && GvSV(gv) != uninit_sv)
11922 break;
11923 return varname(gv, '$', 0,
a0714e2c 11924 NULL, 0, FUV_SUBSCRIPT_NONE);
bd81e77b
NC
11925 }
11926 /* other possibilities not handled are:
11927 * open $x; or open my $x; should return '${*$x}'
11928 * open expr; should return '$'.expr ideally
11929 */
11930 break;
11931 }
11932 goto do_op;
ccfc67b7 11933
bd81e77b
NC
11934 /* ops where $_ may be an implicit arg */
11935 case OP_TRANS:
11936 case OP_SUBST:
11937 case OP_MATCH:
11938 if ( !(obase->op_flags & OPf_STACKED)) {
11939 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
11940 ? PAD_SVl(obase->op_targ)
11941 : DEFSV))
11942 {
11943 sv = sv_newmortal();
11944 sv_setpvn(sv, "$_", 2);
11945 return sv;
11946 }
11947 }
11948 goto do_op;
9f4817db 11949
bd81e77b
NC
11950 case OP_PRTF:
11951 case OP_PRINT:
11952 /* skip filehandle as it can't produce 'undef' warning */
11953 o = cUNOPx(obase)->op_first;
11954 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
11955 o = o->op_sibling->op_sibling;
11956 goto do_op2;
9f4817db 11957
9f4817db 11958
bd81e77b
NC
11959 case OP_RV2SV:
11960 case OP_CUSTOM:
11961 case OP_ENTERSUB:
11962 match = 1; /* XS or custom code could trigger random warnings */
11963 goto do_op;
9f4817db 11964
bd81e77b
NC
11965 case OP_SCHOMP:
11966 case OP_CHOMP:
11967 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
396482e1 11968 return sv_2mortal(newSVpvs("${$/}"));
5f66b61c 11969 /*FALLTHROUGH*/
5d170f3a 11970
bd81e77b
NC
11971 default:
11972 do_op:
11973 if (!(obase->op_flags & OPf_KIDS))
11974 break;
11975 o = cUNOPx(obase)->op_first;
11976
11977 do_op2:
11978 if (!o)
11979 break;
f9893866 11980
bd81e77b
NC
11981 /* if all except one arg are constant, or have no side-effects,
11982 * or are optimized away, then it's unambiguous */
5f66b61c 11983 o2 = NULL;
bd81e77b
NC
11984 for (kid=o; kid; kid = kid->op_sibling) {
11985 if (kid &&
11986 ( (kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid)))
11987 || (kid->op_type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
11988 || (kid->op_type == OP_PUSHMARK)
11989 )
11990 )
11991 continue;
11992 if (o2) { /* more than one found */
5f66b61c 11993 o2 = NULL;
bd81e77b
NC
11994 break;
11995 }
11996 o2 = kid;
11997 }
11998 if (o2)
11999 return find_uninit_var(o2, uninit_sv, match);
7a5fa8a2 12000
bd81e77b
NC
12001 /* scan all args */
12002 while (o) {
12003 sv = find_uninit_var(o, uninit_sv, 1);
12004 if (sv)
12005 return sv;
12006 o = o->op_sibling;
d0063567 12007 }
bd81e77b 12008 break;
f9893866 12009 }
a0714e2c 12010 return NULL;
9f4817db
JH
12011}
12012
220e2d4e 12013
bd81e77b
NC
12014/*
12015=for apidoc report_uninit
68795e93 12016
bd81e77b 12017Print appropriate "Use of uninitialized variable" warning
220e2d4e 12018
bd81e77b
NC
12019=cut
12020*/
220e2d4e 12021
bd81e77b
NC
12022void
12023Perl_report_uninit(pTHX_ SV* uninit_sv)
220e2d4e 12024{
97aff369 12025 dVAR;
bd81e77b 12026 if (PL_op) {
a0714e2c 12027 SV* varname = NULL;
bd81e77b
NC
12028 if (uninit_sv) {
12029 varname = find_uninit_var(PL_op, uninit_sv,0);
12030 if (varname)
12031 sv_insert(varname, 0, 0, " ", 1);
12032 }
12033 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12034 varname ? SvPV_nolen_const(varname) : "",
12035 " in ", OP_DESC(PL_op));
220e2d4e 12036 }
a73e8557 12037 else
bd81e77b
NC
12038 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12039 "", "", "");
220e2d4e 12040}
f9893866 12041
241d1a3b
NC
12042/*
12043 * Local variables:
12044 * c-indentation-style: bsd
12045 * c-basic-offset: 4
12046 * indent-tabs-mode: t
12047 * End:
12048 *
37442d52
RGS
12049 * ex: set ts=8 sts=4 sw=4 noet:
12050 */