This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Allow any *DBM_File to work for DynaLoader testing
[perl5.git] / sv.c
CommitLineData
a0d0e21e 1/* sv.c
79072805 2 *
4bb101f2 3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
7272f7c1 4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 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 32#ifdef PERL_UTF8_CACHE_ASSERT
ab455f60 33/* if adding more checks watch out for the following tests:
e23c8137
JH
34 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
35 * lib/utf8.t lib/Unicode/Collate/t/index.t
36 * --jhi
37 */
6f207bd3 38# define ASSERT_UTF8_CACHE(cache) \
ab455f60
NC
39 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
40 assert((cache)[2] <= (cache)[3]); \
41 assert((cache)[3] <= (cache)[1]);} \
42 } STMT_END
e23c8137 43#else
6f207bd3 44# define ASSERT_UTF8_CACHE(cache) NOOP
e23c8137
JH
45#endif
46
f8c7b90f 47#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 48#define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
607fa7f2 49#define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
b5ccf5f2 50/* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
765f542d 51 on-write. */
765f542d 52#endif
645c22ef
DM
53
54/* ============================================================================
55
56=head1 Allocation and deallocation of SVs.
57
d2a0f284
JC
58An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
59sv, av, hv...) contains type and reference count information, and for
60many types, a pointer to the body (struct xrv, xpv, xpviv...), which
61contains fields specific to each type. Some types store all they need
62in the head, so don't have a body.
63
64In all but the most memory-paranoid configuations (ex: PURIFY), heads
65and bodies are allocated out of arenas, which by default are
66approximately 4K chunks of memory parcelled up into N heads or bodies.
93e68bfb
JC
67Sv-bodies are allocated by their sv-type, guaranteeing size
68consistency needed to allocate safely from arrays.
69
d2a0f284
JC
70For SV-heads, the first slot in each arena is reserved, and holds a
71link to the next arena, some flags, and a note of the number of slots.
72Snaked through each arena chain is a linked list of free items; when
73this becomes empty, an extra arena is allocated and divided up into N
74items which are threaded into the free list.
75
76SV-bodies are similar, but they use arena-sets by default, which
77separate the link and info from the arena itself, and reclaim the 1st
78slot in the arena. SV-bodies are further described later.
645c22ef
DM
79
80The following global variables are associated with arenas:
81
82 PL_sv_arenaroot pointer to list of SV arenas
83 PL_sv_root pointer to list of free SV structures
84
d2a0f284
JC
85 PL_body_arenas head of linked-list of body arenas
86 PL_body_roots[] array of pointers to list of free bodies of svtype
87 arrays are indexed by the svtype needed
93e68bfb 88
d2a0f284
JC
89A few special SV heads are not allocated from an arena, but are
90instead directly created in the interpreter structure, eg PL_sv_undef.
93e68bfb
JC
91The size of arenas can be changed from the default by setting
92PERL_ARENA_SIZE appropriately at compile time.
645c22ef
DM
93
94The SV arena serves the secondary purpose of allowing still-live SVs
95to be located and destroyed during final cleanup.
96
97At the lowest level, the macros new_SV() and del_SV() grab and free
98an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
99to return the SV to the free list with error checking.) new_SV() calls
100more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
101SVs in the free list have their SvTYPE field set to all ones.
102
ff276b08 103At the time of very final cleanup, sv_free_arenas() is called from
645c22ef 104perl_destruct() to physically free all the arenas allocated since the
6a93a7e5 105start of the interpreter.
645c22ef 106
645c22ef
DM
107The function visit() scans the SV arenas list, and calls a specified
108function for each SV it finds which is still live - ie which has an SvTYPE
109other than all 1's, and a non-zero SvREFCNT. visit() is used by the
110following functions (specified as [function that calls visit()] / [function
111called by visit() for each SV]):
112
113 sv_report_used() / do_report_used()
f2524eef 114 dump all remaining SVs (debugging aid)
645c22ef
DM
115
116 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
117 Attempt to free all objects pointed to by RVs,
118 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
119 try to do the same for all objects indirectly
120 referenced by typeglobs too. Called once from
121 perl_destruct(), prior to calling sv_clean_all()
122 below.
123
124 sv_clean_all() / do_clean_all()
125 SvREFCNT_dec(sv) each remaining SV, possibly
126 triggering an sv_free(). It also sets the
127 SVf_BREAK flag on the SV to indicate that the
128 refcnt has been artificially lowered, and thus
129 stopping sv_free() from giving spurious warnings
130 about SVs which unexpectedly have a refcnt
131 of zero. called repeatedly from perl_destruct()
132 until there are no SVs left.
133
93e68bfb 134=head2 Arena allocator API Summary
645c22ef
DM
135
136Private API to rest of sv.c
137
138 new_SV(), del_SV(),
139
140 new_XIV(), del_XIV(),
141 new_XNV(), del_XNV(),
142 etc
143
144Public API:
145
8cf8f3d1 146 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
645c22ef 147
645c22ef
DM
148=cut
149
150============================================================================ */
151
4561caa4
CS
152/*
153 * "A time to plant, and a time to uproot what was planted..."
154 */
155
77354fb4
NC
156void
157Perl_offer_nice_chunk(pTHX_ void *chunk, U32 chunk_size)
158{
97aff369 159 dVAR;
77354fb4
NC
160 void *new_chunk;
161 U32 new_chunk_size;
77354fb4
NC
162 new_chunk = (void *)(chunk);
163 new_chunk_size = (chunk_size);
164 if (new_chunk_size > PL_nice_chunk_size) {
165 Safefree(PL_nice_chunk);
166 PL_nice_chunk = (char *) new_chunk;
167 PL_nice_chunk_size = new_chunk_size;
168 } else {
169 Safefree(chunk);
170 }
77354fb4 171}
cac9b346 172
fd0854ff 173#ifdef DEBUG_LEAKING_SCALARS
22162ca8 174# define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
fd0854ff
DM
175#else
176# define FREE_SV_DEBUG_FILE(sv)
177#endif
178
48614a46
NC
179#ifdef PERL_POISON
180# define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
181/* Whilst I'd love to do this, it seems that things like to check on
182 unreferenced scalars
7e337ee0 183# define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
48614a46 184*/
7e337ee0
JH
185# define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
186 PoisonNew(&SvREFCNT(sv), 1, U32)
48614a46
NC
187#else
188# define SvARENA_CHAIN(sv) SvANY(sv)
189# define POSION_SV_HEAD(sv)
190#endif
191
053fc874
GS
192#define plant_SV(p) \
193 STMT_START { \
fd0854ff 194 FREE_SV_DEBUG_FILE(p); \
48614a46
NC
195 POSION_SV_HEAD(p); \
196 SvARENA_CHAIN(p) = (void *)PL_sv_root; \
053fc874
GS
197 SvFLAGS(p) = SVTYPEMASK; \
198 PL_sv_root = (p); \
199 --PL_sv_count; \
200 } STMT_END
a0d0e21e 201
053fc874
GS
202#define uproot_SV(p) \
203 STMT_START { \
204 (p) = PL_sv_root; \
bb7bbd9c 205 PL_sv_root = (SV*)SvARENA_CHAIN(p); \
053fc874
GS
206 ++PL_sv_count; \
207 } STMT_END
208
645c22ef 209
cac9b346
NC
210/* make some more SVs by adding another arena */
211
cac9b346
NC
212STATIC SV*
213S_more_sv(pTHX)
214{
97aff369 215 dVAR;
cac9b346
NC
216 SV* sv;
217
218 if (PL_nice_chunk) {
219 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
bd61b366 220 PL_nice_chunk = NULL;
cac9b346
NC
221 PL_nice_chunk_size = 0;
222 }
223 else {
224 char *chunk; /* must use New here to match call to */
d2a0f284 225 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
2e7ed132 226 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
cac9b346
NC
227 }
228 uproot_SV(sv);
229 return sv;
230}
231
645c22ef
DM
232/* new_SV(): return a new, empty SV head */
233
eba0f806
DM
234#ifdef DEBUG_LEAKING_SCALARS
235/* provide a real function for a debugger to play with */
236STATIC SV*
237S_new_SV(pTHX)
238{
239 SV* sv;
240
eba0f806
DM
241 if (PL_sv_root)
242 uproot_SV(sv);
243 else
cac9b346 244 sv = S_more_sv(aTHX);
eba0f806
DM
245 SvANY(sv) = 0;
246 SvREFCNT(sv) = 1;
247 SvFLAGS(sv) = 0;
fd0854ff
DM
248 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
249 sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
250 (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
251 sv->sv_debug_inpad = 0;
252 sv->sv_debug_cloned = 0;
fd0854ff 253 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
fd0854ff 254
eba0f806
DM
255 return sv;
256}
257# define new_SV(p) (p)=S_new_SV(aTHX)
258
259#else
260# define new_SV(p) \
053fc874 261 STMT_START { \
053fc874
GS
262 if (PL_sv_root) \
263 uproot_SV(p); \
264 else \
cac9b346 265 (p) = S_more_sv(aTHX); \
053fc874
GS
266 SvANY(p) = 0; \
267 SvREFCNT(p) = 1; \
268 SvFLAGS(p) = 0; \
269 } STMT_END
eba0f806 270#endif
463ee0b2 271
645c22ef
DM
272
273/* del_SV(): return an empty SV head to the free list */
274
a0d0e21e 275#ifdef DEBUGGING
4561caa4 276
053fc874
GS
277#define del_SV(p) \
278 STMT_START { \
aea4f609 279 if (DEBUG_D_TEST) \
053fc874
GS
280 del_sv(p); \
281 else \
282 plant_SV(p); \
053fc874 283 } STMT_END
a0d0e21e 284
76e3520e 285STATIC void
cea2e8a9 286S_del_sv(pTHX_ SV *p)
463ee0b2 287{
97aff369 288 dVAR;
aea4f609 289 if (DEBUG_D_TEST) {
4633a7c4 290 SV* sva;
a3b680e6 291 bool ok = 0;
3280af22 292 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
53c1dcc0
AL
293 const SV * const sv = sva + 1;
294 const SV * const svend = &sva[SvREFCNT(sva)];
c0ff570e 295 if (p >= sv && p < svend) {
a0d0e21e 296 ok = 1;
c0ff570e
NC
297 break;
298 }
a0d0e21e
LW
299 }
300 if (!ok) {
0453d815 301 if (ckWARN_d(WARN_INTERNAL))
9014280d 302 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc
SB
303 "Attempt to free non-arena SV: 0x%"UVxf
304 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
a0d0e21e
LW
305 return;
306 }
307 }
4561caa4 308 plant_SV(p);
463ee0b2 309}
a0d0e21e 310
4561caa4
CS
311#else /* ! DEBUGGING */
312
313#define del_SV(p) plant_SV(p)
314
315#endif /* DEBUGGING */
463ee0b2 316
645c22ef
DM
317
318/*
ccfc67b7
JH
319=head1 SV Manipulation Functions
320
645c22ef
DM
321=for apidoc sv_add_arena
322
323Given a chunk of memory, link it to the head of the list of arenas,
324and split it into a list of free SVs.
325
326=cut
327*/
328
4633a7c4 329void
864dbfa3 330Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
463ee0b2 331{
97aff369 332 dVAR;
0bd48802 333 SV* const sva = (SV*)ptr;
463ee0b2
LW
334 register SV* sv;
335 register SV* svend;
4633a7c4
LW
336
337 /* The first SV in an arena isn't an SV. */
3280af22 338 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
4633a7c4
LW
339 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
340 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
341
3280af22
NIS
342 PL_sv_arenaroot = sva;
343 PL_sv_root = sva + 1;
4633a7c4
LW
344
345 svend = &sva[SvREFCNT(sva) - 1];
346 sv = sva + 1;
463ee0b2 347 while (sv < svend) {
48614a46 348 SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
03e36789 349#ifdef DEBUGGING
978b032e 350 SvREFCNT(sv) = 0;
03e36789
NC
351#endif
352 /* Must always set typemask because it's awlays checked in on cleanup
353 when the arenas are walked looking for objects. */
8990e307 354 SvFLAGS(sv) = SVTYPEMASK;
463ee0b2
LW
355 sv++;
356 }
48614a46 357 SvARENA_CHAIN(sv) = 0;
03e36789
NC
358#ifdef DEBUGGING
359 SvREFCNT(sv) = 0;
360#endif
4633a7c4
LW
361 SvFLAGS(sv) = SVTYPEMASK;
362}
363
055972dc
DM
364/* visit(): call the named function for each non-free SV in the arenas
365 * whose flags field matches the flags/mask args. */
645c22ef 366
5226ed68 367STATIC I32
055972dc 368S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
8990e307 369{
97aff369 370 dVAR;
4633a7c4 371 SV* sva;
5226ed68 372 I32 visited = 0;
8990e307 373
3280af22 374 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
53c1dcc0 375 register const SV * const svend = &sva[SvREFCNT(sva)];
a3b680e6 376 register SV* sv;
4561caa4 377 for (sv = sva + 1; sv < svend; ++sv) {
055972dc
DM
378 if (SvTYPE(sv) != SVTYPEMASK
379 && (sv->sv_flags & mask) == flags
380 && SvREFCNT(sv))
381 {
acfe0abc 382 (FCALL)(aTHX_ sv);
5226ed68
JH
383 ++visited;
384 }
8990e307
LW
385 }
386 }
5226ed68 387 return visited;
8990e307
LW
388}
389
758a08c3
JH
390#ifdef DEBUGGING
391
645c22ef
DM
392/* called by sv_report_used() for each live SV */
393
394static void
acfe0abc 395do_report_used(pTHX_ SV *sv)
645c22ef
DM
396{
397 if (SvTYPE(sv) != SVTYPEMASK) {
398 PerlIO_printf(Perl_debug_log, "****\n");
399 sv_dump(sv);
400 }
401}
758a08c3 402#endif
645c22ef
DM
403
404/*
405=for apidoc sv_report_used
406
407Dump the contents of all SVs not yet freed. (Debugging aid).
408
409=cut
410*/
411
8990e307 412void
864dbfa3 413Perl_sv_report_used(pTHX)
4561caa4 414{
ff270d3a 415#ifdef DEBUGGING
055972dc 416 visit(do_report_used, 0, 0);
96a5add6
AL
417#else
418 PERL_UNUSED_CONTEXT;
ff270d3a 419#endif
4561caa4
CS
420}
421
645c22ef
DM
422/* called by sv_clean_objs() for each live SV */
423
424static void
e15faf7d 425do_clean_objs(pTHX_ SV *ref)
645c22ef 426{
97aff369 427 dVAR;
ea724faa
NC
428 assert (SvROK(ref));
429 {
823a54a3
AL
430 SV * const target = SvRV(ref);
431 if (SvOBJECT(target)) {
432 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
433 if (SvWEAKREF(ref)) {
434 sv_del_backref(target, ref);
435 SvWEAKREF_off(ref);
436 SvRV_set(ref, NULL);
437 } else {
438 SvROK_off(ref);
439 SvRV_set(ref, NULL);
440 SvREFCNT_dec(target);
441 }
645c22ef
DM
442 }
443 }
444
445 /* XXX Might want to check arrays, etc. */
446}
447
448/* called by sv_clean_objs() for each live SV */
449
450#ifndef DISABLE_DESTRUCTOR_KLUDGE
451static void
acfe0abc 452do_clean_named_objs(pTHX_ SV *sv)
645c22ef 453{
97aff369 454 dVAR;
ea724faa 455 assert(SvTYPE(sv) == SVt_PVGV);
d011219a
NC
456 assert(isGV_with_GP(sv));
457 if (GvGP(sv)) {
c69033f2
NC
458 if ((
459#ifdef PERL_DONT_CREATE_GVSV
460 GvSV(sv) &&
461#endif
462 SvOBJECT(GvSV(sv))) ||
645c22ef
DM
463 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
464 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
465 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
466 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
467 {
468 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
ec5f3c78 469 SvFLAGS(sv) |= SVf_BREAK;
645c22ef
DM
470 SvREFCNT_dec(sv);
471 }
472 }
473}
474#endif
475
476/*
477=for apidoc sv_clean_objs
478
479Attempt to destroy all objects not yet freed
480
481=cut
482*/
483
4561caa4 484void
864dbfa3 485Perl_sv_clean_objs(pTHX)
4561caa4 486{
97aff369 487 dVAR;
3280af22 488 PL_in_clean_objs = TRUE;
055972dc 489 visit(do_clean_objs, SVf_ROK, SVf_ROK);
4561caa4 490#ifndef DISABLE_DESTRUCTOR_KLUDGE
2d0f3c12 491 /* some barnacles may yet remain, clinging to typeglobs */
d011219a 492 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
4561caa4 493#endif
3280af22 494 PL_in_clean_objs = FALSE;
4561caa4
CS
495}
496
645c22ef
DM
497/* called by sv_clean_all() for each live SV */
498
499static void
acfe0abc 500do_clean_all(pTHX_ SV *sv)
645c22ef 501{
97aff369 502 dVAR;
645c22ef
DM
503 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
504 SvFLAGS(sv) |= SVf_BREAK;
0e705b3b 505 if (PL_comppad == (AV*)sv) {
7d49f689 506 PL_comppad = NULL;
4608196e 507 PL_curpad = NULL;
0e705b3b 508 }
645c22ef
DM
509 SvREFCNT_dec(sv);
510}
511
512/*
513=for apidoc sv_clean_all
514
515Decrement the refcnt of each remaining SV, possibly triggering a
516cleanup. This function may have to be called multiple times to free
ff276b08 517SVs which are in complex self-referential hierarchies.
645c22ef
DM
518
519=cut
520*/
521
5226ed68 522I32
864dbfa3 523Perl_sv_clean_all(pTHX)
8990e307 524{
97aff369 525 dVAR;
5226ed68 526 I32 cleaned;
3280af22 527 PL_in_clean_all = TRUE;
055972dc 528 cleaned = visit(do_clean_all, 0,0);
3280af22 529 PL_in_clean_all = FALSE;
5226ed68 530 return cleaned;
8990e307 531}
463ee0b2 532
5e258f8c
JC
533/*
534 ARENASETS: a meta-arena implementation which separates arena-info
535 into struct arena_set, which contains an array of struct
536 arena_descs, each holding info for a single arena. By separating
537 the meta-info from the arena, we recover the 1st slot, formerly
538 borrowed for list management. The arena_set is about the size of an
39244528 539 arena, avoiding the needless malloc overhead of a naive linked-list.
5e258f8c
JC
540
541 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
542 memory in the last arena-set (1/2 on average). In trade, we get
543 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
d2a0f284
JC
544 smaller types). The recovery of the wasted space allows use of
545 small arenas for large, rare body types,
5e258f8c 546*/
5e258f8c 547struct arena_desc {
398c677b
NC
548 char *arena; /* the raw storage, allocated aligned */
549 size_t size; /* its size ~4k typ */
0a848332 550 U32 misc; /* type, and in future other things. */
5e258f8c
JC
551};
552
e6148039
NC
553struct arena_set;
554
555/* Get the maximum number of elements in set[] such that struct arena_set
556 will fit within PERL_ARENA_SIZE, which is probabably just under 4K, and
557 therefore likely to be 1 aligned memory page. */
558
559#define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
560 - 2 * sizeof(int)) / sizeof (struct arena_desc))
5e258f8c
JC
561
562struct arena_set {
563 struct arena_set* next;
0a848332
NC
564 unsigned int set_size; /* ie ARENAS_PER_SET */
565 unsigned int curr; /* index of next available arena-desc */
5e258f8c
JC
566 struct arena_desc set[ARENAS_PER_SET];
567};
568
645c22ef
DM
569/*
570=for apidoc sv_free_arenas
571
572Deallocate the memory used by all arenas. Note that all the individual SV
573heads and bodies within the arenas must already have been freed.
574
575=cut
576*/
4633a7c4 577void
864dbfa3 578Perl_sv_free_arenas(pTHX)
4633a7c4 579{
97aff369 580 dVAR;
4633a7c4
LW
581 SV* sva;
582 SV* svanext;
0a848332 583 unsigned int i;
4633a7c4
LW
584
585 /* Free arenas here, but be careful about fake ones. (We assume
586 contiguity of the fake ones with the corresponding real ones.) */
587
3280af22 588 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
4633a7c4
LW
589 svanext = (SV*) SvANY(sva);
590 while (svanext && SvFAKE(svanext))
591 svanext = (SV*) SvANY(svanext);
592
593 if (!SvFAKE(sva))
1df70142 594 Safefree(sva);
4633a7c4 595 }
93e68bfb 596
5e258f8c 597 {
0a848332
NC
598 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
599
600 while (aroot) {
601 struct arena_set *current = aroot;
602 i = aroot->curr;
603 while (i--) {
5e258f8c
JC
604 assert(aroot->set[i].arena);
605 Safefree(aroot->set[i].arena);
606 }
0a848332
NC
607 aroot = aroot->next;
608 Safefree(current);
5e258f8c
JC
609 }
610 }
dc8220bf 611 PL_body_arenas = 0;
fdda85ca 612
0a848332
NC
613 i = PERL_ARENA_ROOTS_SIZE;
614 while (i--)
93e68bfb 615 PL_body_roots[i] = 0;
93e68bfb 616
43c5f42d 617 Safefree(PL_nice_chunk);
bd61b366 618 PL_nice_chunk = NULL;
3280af22
NIS
619 PL_nice_chunk_size = 0;
620 PL_sv_arenaroot = 0;
621 PL_sv_root = 0;
4633a7c4
LW
622}
623
bd81e77b
NC
624/*
625 Here are mid-level routines that manage the allocation of bodies out
626 of the various arenas. There are 5 kinds of arenas:
29489e7c 627
bd81e77b
NC
628 1. SV-head arenas, which are discussed and handled above
629 2. regular body arenas
630 3. arenas for reduced-size bodies
631 4. Hash-Entry arenas
632 5. pte arenas (thread related)
29489e7c 633
bd81e77b
NC
634 Arena types 2 & 3 are chained by body-type off an array of
635 arena-root pointers, which is indexed by svtype. Some of the
636 larger/less used body types are malloced singly, since a large
637 unused block of them is wasteful. Also, several svtypes dont have
638 bodies; the data fits into the sv-head itself. The arena-root
639 pointer thus has a few unused root-pointers (which may be hijacked
640 later for arena types 4,5)
29489e7c 641
bd81e77b
NC
642 3 differs from 2 as an optimization; some body types have several
643 unused fields in the front of the structure (which are kept in-place
644 for consistency). These bodies can be allocated in smaller chunks,
645 because the leading fields arent accessed. Pointers to such bodies
646 are decremented to point at the unused 'ghost' memory, knowing that
647 the pointers are used with offsets to the real memory.
29489e7c 648
bd81e77b
NC
649 HE, HEK arenas are managed separately, with separate code, but may
650 be merge-able later..
651
652 PTE arenas are not sv-bodies, but they share these mid-level
653 mechanics, so are considered here. The new mid-level mechanics rely
654 on the sv_type of the body being allocated, so we just reserve one
655 of the unused body-slots for PTEs, then use it in those (2) PTE
656 contexts below (line ~10k)
657*/
658
bd26d9a3 659/* get_arena(size): this creates custom-sized arenas
5e258f8c
JC
660 TBD: export properly for hv.c: S_more_he().
661*/
662void*
0a848332 663Perl_get_arena(pTHX_ size_t arena_size, U32 misc)
5e258f8c 664{
7a89be66 665 dVAR;
5e258f8c 666 struct arena_desc* adesc;
39244528 667 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
0a848332 668 unsigned int curr;
5e258f8c 669
476a1e16
JC
670 /* shouldnt need this
671 if (!arena_size) arena_size = PERL_ARENA_SIZE;
672 */
5e258f8c
JC
673
674 /* may need new arena-set to hold new arena */
39244528
NC
675 if (!aroot || aroot->curr >= aroot->set_size) {
676 struct arena_set *newroot;
5e258f8c
JC
677 Newxz(newroot, 1, struct arena_set);
678 newroot->set_size = ARENAS_PER_SET;
39244528
NC
679 newroot->next = aroot;
680 aroot = newroot;
681 PL_body_arenas = (void *) newroot;
52944de8 682 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
5e258f8c
JC
683 }
684
685 /* ok, now have arena-set with at least 1 empty/available arena-desc */
39244528
NC
686 curr = aroot->curr++;
687 adesc = &(aroot->set[curr]);
5e258f8c
JC
688 assert(!adesc->arena);
689
89086707 690 Newx(adesc->arena, arena_size, char);
5e258f8c 691 adesc->size = arena_size;
0a848332 692 adesc->misc = misc;
d2a0f284 693 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %d\n",
6c9570dc 694 curr, (void*)adesc->arena, arena_size));
5e258f8c
JC
695
696 return adesc->arena;
5e258f8c
JC
697}
698
53c1dcc0 699
bd81e77b 700/* return a thing to the free list */
29489e7c 701
bd81e77b
NC
702#define del_body(thing, root) \
703 STMT_START { \
00b6aa41 704 void ** const thing_copy = (void **)thing;\
bd81e77b
NC
705 *thing_copy = *root; \
706 *root = (void*)thing_copy; \
bd81e77b 707 } STMT_END
29489e7c 708
bd81e77b 709/*
d2a0f284
JC
710
711=head1 SV-Body Allocation
712
713Allocation of SV-bodies is similar to SV-heads, differing as follows;
714the allocation mechanism is used for many body types, so is somewhat
715more complicated, it uses arena-sets, and has no need for still-live
716SV detection.
717
718At the outermost level, (new|del)_X*V macros return bodies of the
719appropriate type. These macros call either (new|del)_body_type or
720(new|del)_body_allocated macro pairs, depending on specifics of the
721type. Most body types use the former pair, the latter pair is used to
722allocate body types with "ghost fields".
723
724"ghost fields" are fields that are unused in certain types, and
725consequently dont need to actually exist. They are declared because
726they're part of a "base type", which allows use of functions as
727methods. The simplest examples are AVs and HVs, 2 aggregate types
728which don't use the fields which support SCALAR semantics.
729
730For these types, the arenas are carved up into *_allocated size
731chunks, we thus avoid wasted memory for those unaccessed members.
732When bodies are allocated, we adjust the pointer back in memory by the
733size of the bit not allocated, so it's as if we allocated the full
734structure. (But things will all go boom if you write to the part that
735is "not there", because you'll be overwriting the last members of the
736preceding structure in memory.)
737
738We calculate the correction using the STRUCT_OFFSET macro. For
739example, if xpv_allocated is the same structure as XPV then the two
740OFFSETs sum to zero, and the pointer is unchanged. If the allocated
741structure is smaller (no initial NV actually allocated) then the net
742effect is to subtract the size of the NV from the pointer, to return a
743new pointer as if an initial NV were actually allocated.
744
745This is the same trick as was used for NV and IV bodies. Ironically it
746doesn't need to be used for NV bodies any more, because NV is now at
747the start of the structure. IV bodies don't need it either, because
748they are no longer allocated.
749
750In turn, the new_body_* allocators call S_new_body(), which invokes
751new_body_inline macro, which takes a lock, and takes a body off the
752linked list at PL_body_roots[sv_type], calling S_more_bodies() if
753necessary to refresh an empty list. Then the lock is released, and
754the body is returned.
755
756S_more_bodies calls get_arena(), and carves it up into an array of N
757bodies, which it strings into a linked list. It looks up arena-size
758and body-size from the body_details table described below, thus
759supporting the multiple body-types.
760
761If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
762the (new|del)_X*V macros are mapped directly to malloc/free.
763
764*/
765
766/*
767
768For each sv-type, struct body_details bodies_by_type[] carries
769parameters which control these aspects of SV handling:
770
771Arena_size determines whether arenas are used for this body type, and if
772so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
773zero, forcing individual mallocs and frees.
774
775Body_size determines how big a body is, and therefore how many fit into
776each arena. Offset carries the body-pointer adjustment needed for
777*_allocated body types, and is used in *_allocated macros.
778
779But its main purpose is to parameterize info needed in
780Perl_sv_upgrade(). The info here dramatically simplifies the function
781vs the implementation in 5.8.7, making it table-driven. All fields
782are used for this, except for arena_size.
783
784For the sv-types that have no bodies, arenas are not used, so those
785PL_body_roots[sv_type] are unused, and can be overloaded. In
786something of a special case, SVt_NULL is borrowed for HE arenas;
787PL_body_roots[SVt_NULL] is filled by S_more_he, but the
788bodies_by_type[SVt_NULL] slot is not used, as the table is not
789available in hv.c,
790
791PTEs also use arenas, but are never seen in Perl_sv_upgrade.
792Nonetheless, they get their own slot in bodies_by_type[SVt_NULL], so
793they can just use the same allocation semantics. At first, PTEs were
794also overloaded to a non-body sv-type, but this yielded hard-to-find
795malloc bugs, so was simplified by claiming a new slot. This choice
796has no consequence at this time.
797
29489e7c
DM
798*/
799
bd81e77b 800struct body_details {
0fb58b32 801 U8 body_size; /* Size to allocate */
10666ae3 802 U8 copy; /* Size of structure to copy (may be shorter) */
0fb58b32 803 U8 offset;
10666ae3
NC
804 unsigned int type : 4; /* We have space for a sanity check. */
805 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
806 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
807 unsigned int arena : 1; /* Allocated from an arena */
808 size_t arena_size; /* Size of arena to allocate */
bd81e77b 809};
29489e7c 810
bd81e77b
NC
811#define HADNV FALSE
812#define NONV TRUE
29489e7c 813
d2a0f284 814
bd81e77b
NC
815#ifdef PURIFY
816/* With -DPURFIY we allocate everything directly, and don't use arenas.
817 This seems a rather elegant way to simplify some of the code below. */
818#define HASARENA FALSE
819#else
820#define HASARENA TRUE
821#endif
822#define NOARENA FALSE
29489e7c 823
d2a0f284
JC
824/* Size the arenas to exactly fit a given number of bodies. A count
825 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
826 simplifying the default. If count > 0, the arena is sized to fit
827 only that many bodies, allowing arenas to be used for large, rare
828 bodies (XPVFM, XPVIO) without undue waste. The arena size is
829 limited by PERL_ARENA_SIZE, so we can safely oversize the
830 declarations.
831 */
95db5f15
MB
832#define FIT_ARENA0(body_size) \
833 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
834#define FIT_ARENAn(count,body_size) \
835 ( count * body_size <= PERL_ARENA_SIZE) \
836 ? count * body_size \
837 : FIT_ARENA0 (body_size)
838#define FIT_ARENA(count,body_size) \
839 count \
840 ? FIT_ARENAn (count, body_size) \
841 : FIT_ARENA0 (body_size)
d2a0f284 842
bd81e77b 843/* A macro to work out the offset needed to subtract from a pointer to (say)
29489e7c 844
bd81e77b
NC
845typedef struct {
846 STRLEN xpv_cur;
847 STRLEN xpv_len;
848} xpv_allocated;
29489e7c 849
bd81e77b 850to make its members accessible via a pointer to (say)
29489e7c 851
bd81e77b
NC
852struct xpv {
853 NV xnv_nv;
854 STRLEN xpv_cur;
855 STRLEN xpv_len;
856};
29489e7c 857
bd81e77b 858*/
29489e7c 859
bd81e77b
NC
860#define relative_STRUCT_OFFSET(longer, shorter, member) \
861 (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
29489e7c 862
bd81e77b
NC
863/* Calculate the length to copy. Specifically work out the length less any
864 final padding the compiler needed to add. See the comment in sv_upgrade
865 for why copying the padding proved to be a bug. */
29489e7c 866
bd81e77b
NC
867#define copy_length(type, last_member) \
868 STRUCT_OFFSET(type, last_member) \
869 + sizeof (((type*)SvANY((SV*)0))->last_member)
29489e7c 870
bd81e77b 871static const struct body_details bodies_by_type[] = {
10666ae3
NC
872 { sizeof(HE), 0, 0, SVt_NULL,
873 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
d2a0f284 874
1cb9cd50
NC
875 /* The bind placeholder pretends to be an RV for now.
876 Also it's marked as "can't upgrade" top stop anyone using it before it's
877 implemented. */
878 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
879
d2a0f284
JC
880 /* IVs are in the head, so the allocation size is 0.
881 However, the slot is overloaded for PTEs. */
882 { sizeof(struct ptr_tbl_ent), /* This is used for PTEs. */
883 sizeof(IV), /* This is used to copy out the IV body. */
10666ae3 884 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
d2a0f284
JC
885 NOARENA /* IVS don't need an arena */,
886 /* But PTEs need to know the size of their arena */
887 FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
888 },
889
bd81e77b 890 /* 8 bytes on most ILP32 with IEEE doubles */
10666ae3 891 { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
d2a0f284
JC
892 FIT_ARENA(0, sizeof(NV)) },
893
894 /* RVs are in the head now. */
10666ae3 895 { 0, 0, 0, SVt_RV, FALSE, NONV, NOARENA, 0 },
d2a0f284 896
bd81e77b 897 /* 8 bytes on most ILP32 with IEEE doubles */
d2a0f284
JC
898 { sizeof(xpv_allocated),
899 copy_length(XPV, xpv_len)
900 - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
901 + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
10666ae3 902 SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) },
d2a0f284 903
bd81e77b 904 /* 12 */
d2a0f284
JC
905 { sizeof(xpviv_allocated),
906 copy_length(XPVIV, xiv_u)
907 - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
908 + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
10666ae3 909 SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) },
d2a0f284 910
bd81e77b 911 /* 20 */
10666ae3 912 { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
d2a0f284
JC
913 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
914
bd81e77b 915 /* 28 */
10666ae3 916 { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
d2a0f284
JC
917 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
918
bd81e77b 919 /* 48 */
10666ae3 920 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
d2a0f284
JC
921 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
922
bd81e77b 923 /* 64 */
10666ae3 924 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
d2a0f284
JC
925 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
926
927 { sizeof(xpvav_allocated),
928 copy_length(XPVAV, xmg_stash)
929 - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
930 + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
9c59bb28 931 SVt_PVAV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) },
d2a0f284
JC
932
933 { sizeof(xpvhv_allocated),
934 copy_length(XPVHV, xmg_stash)
935 - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
936 + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
9c59bb28 937 SVt_PVHV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) },
d2a0f284 938
c84c4652 939 /* 56 */
4115f141 940 { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated),
c84c4652 941 + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur),
10666ae3 942 SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) },
d2a0f284 943
4115f141 944 { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated),
3038937b 945 + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur),
10666ae3 946 SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) },
d2a0f284
JC
947
948 /* XPVIO is 84 bytes, fits 48x */
10666ae3 949 { sizeof(XPVIO), sizeof(XPVIO), 0, SVt_PVIO, TRUE, HADNV,
d2a0f284 950 HASARENA, FIT_ARENA(24, sizeof(XPVIO)) },
bd81e77b 951};
29489e7c 952
d2a0f284
JC
953#define new_body_type(sv_type) \
954 (void *)((char *)S_new_body(aTHX_ sv_type))
29489e7c 955
bd81e77b
NC
956#define del_body_type(p, sv_type) \
957 del_body(p, &PL_body_roots[sv_type])
29489e7c 958
29489e7c 959
bd81e77b 960#define new_body_allocated(sv_type) \
d2a0f284 961 (void *)((char *)S_new_body(aTHX_ sv_type) \
bd81e77b 962 - bodies_by_type[sv_type].offset)
29489e7c 963
bd81e77b
NC
964#define del_body_allocated(p, sv_type) \
965 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
29489e7c 966
29489e7c 967
bd81e77b
NC
968#define my_safemalloc(s) (void*)safemalloc(s)
969#define my_safecalloc(s) (void*)safecalloc(s, 1)
970#define my_safefree(p) safefree((char*)p)
29489e7c 971
bd81e77b 972#ifdef PURIFY
29489e7c 973
bd81e77b
NC
974#define new_XNV() my_safemalloc(sizeof(XPVNV))
975#define del_XNV(p) my_safefree(p)
29489e7c 976
bd81e77b
NC
977#define new_XPVNV() my_safemalloc(sizeof(XPVNV))
978#define del_XPVNV(p) my_safefree(p)
29489e7c 979
bd81e77b
NC
980#define new_XPVAV() my_safemalloc(sizeof(XPVAV))
981#define del_XPVAV(p) my_safefree(p)
29489e7c 982
bd81e77b
NC
983#define new_XPVHV() my_safemalloc(sizeof(XPVHV))
984#define del_XPVHV(p) my_safefree(p)
29489e7c 985
bd81e77b
NC
986#define new_XPVMG() my_safemalloc(sizeof(XPVMG))
987#define del_XPVMG(p) my_safefree(p)
29489e7c 988
bd81e77b
NC
989#define new_XPVGV() my_safemalloc(sizeof(XPVGV))
990#define del_XPVGV(p) my_safefree(p)
29489e7c 991
bd81e77b 992#else /* !PURIFY */
29489e7c 993
bd81e77b
NC
994#define new_XNV() new_body_type(SVt_NV)
995#define del_XNV(p) del_body_type(p, SVt_NV)
29489e7c 996
bd81e77b
NC
997#define new_XPVNV() new_body_type(SVt_PVNV)
998#define del_XPVNV(p) del_body_type(p, SVt_PVNV)
29489e7c 999
bd81e77b
NC
1000#define new_XPVAV() new_body_allocated(SVt_PVAV)
1001#define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
645c22ef 1002
bd81e77b
NC
1003#define new_XPVHV() new_body_allocated(SVt_PVHV)
1004#define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
645c22ef 1005
bd81e77b
NC
1006#define new_XPVMG() new_body_type(SVt_PVMG)
1007#define del_XPVMG(p) del_body_type(p, SVt_PVMG)
645c22ef 1008
bd81e77b
NC
1009#define new_XPVGV() new_body_type(SVt_PVGV)
1010#define del_XPVGV(p) del_body_type(p, SVt_PVGV)
1d7c1841 1011
bd81e77b 1012#endif /* PURIFY */
93e68bfb 1013
bd81e77b 1014/* no arena for you! */
93e68bfb 1015
bd81e77b 1016#define new_NOARENA(details) \
d2a0f284 1017 my_safemalloc((details)->body_size + (details)->offset)
bd81e77b 1018#define new_NOARENAZ(details) \
d2a0f284
JC
1019 my_safecalloc((details)->body_size + (details)->offset)
1020
1021STATIC void *
1022S_more_bodies (pTHX_ svtype sv_type)
1023{
1024 dVAR;
1025 void ** const root = &PL_body_roots[sv_type];
96a5add6 1026 const struct body_details * const bdp = &bodies_by_type[sv_type];
d2a0f284
JC
1027 const size_t body_size = bdp->body_size;
1028 char *start;
1029 const char *end;
0b2d3faa 1030#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
23e9d66c
NC
1031 static bool done_sanity_check;
1032
0b2d3faa
JH
1033 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1034 * variables like done_sanity_check. */
10666ae3 1035 if (!done_sanity_check) {
ea471437 1036 unsigned int i = SVt_LAST;
10666ae3
NC
1037
1038 done_sanity_check = TRUE;
1039
1040 while (i--)
1041 assert (bodies_by_type[i].type == i);
1042 }
1043#endif
1044
23e9d66c
NC
1045 assert(bdp->arena_size);
1046
0a848332 1047 start = (char*) Perl_get_arena(aTHX_ bdp->arena_size, sv_type);
d2a0f284
JC
1048
1049 end = start + bdp->arena_size - body_size;
1050
d2a0f284
JC
1051 /* computed count doesnt reflect the 1st slot reservation */
1052 DEBUG_m(PerlIO_printf(Perl_debug_log,
1053 "arena %p end %p arena-size %d type %d size %d ct %d\n",
6c9570dc 1054 (void*)start, (void*)end,
0e84aef4
JH
1055 (int)bdp->arena_size, sv_type, (int)body_size,
1056 (int)bdp->arena_size / (int)body_size));
d2a0f284
JC
1057
1058 *root = (void *)start;
1059
1060 while (start < end) {
1061 char * const next = start + body_size;
1062 *(void**) start = (void *)next;
1063 start = next;
1064 }
1065 *(void **)start = 0;
1066
1067 return *root;
1068}
1069
1070/* grab a new thing from the free list, allocating more if necessary.
1071 The inline version is used for speed in hot routines, and the
1072 function using it serves the rest (unless PURIFY).
1073*/
1074#define new_body_inline(xpv, sv_type) \
1075 STMT_START { \
1076 void ** const r3wt = &PL_body_roots[sv_type]; \
11b79775
DD
1077 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1078 ? *((void **)(r3wt)) : more_bodies(sv_type)); \
d2a0f284 1079 *(r3wt) = *(void**)(xpv); \
d2a0f284
JC
1080 } STMT_END
1081
1082#ifndef PURIFY
1083
1084STATIC void *
1085S_new_body(pTHX_ svtype sv_type)
1086{
1087 dVAR;
1088 void *xpv;
1089 new_body_inline(xpv, sv_type);
1090 return xpv;
1091}
1092
1093#endif
93e68bfb 1094
bd81e77b
NC
1095/*
1096=for apidoc sv_upgrade
93e68bfb 1097
bd81e77b
NC
1098Upgrade an SV to a more complex form. Generally adds a new body type to the
1099SV, then copies across as much information as possible from the old body.
1100You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
93e68bfb 1101
bd81e77b 1102=cut
93e68bfb 1103*/
93e68bfb 1104
bd81e77b 1105void
42d0e0b7 1106Perl_sv_upgrade(pTHX_ register SV *sv, svtype new_type)
cac9b346 1107{
97aff369 1108 dVAR;
bd81e77b
NC
1109 void* old_body;
1110 void* new_body;
42d0e0b7 1111 const svtype old_type = SvTYPE(sv);
d2a0f284 1112 const struct body_details *new_type_details;
bd81e77b
NC
1113 const struct body_details *const old_type_details
1114 = bodies_by_type + old_type;
cac9b346 1115
bd81e77b
NC
1116 if (new_type != SVt_PV && SvIsCOW(sv)) {
1117 sv_force_normal_flags(sv, 0);
1118 }
cac9b346 1119
bd81e77b
NC
1120 if (old_type == new_type)
1121 return;
cac9b346 1122
bd81e77b
NC
1123 if (old_type > new_type)
1124 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1125 (int)old_type, (int)new_type);
cac9b346 1126
cac9b346 1127
bd81e77b 1128 old_body = SvANY(sv);
de042e1d 1129
bd81e77b
NC
1130 /* Copying structures onto other structures that have been neatly zeroed
1131 has a subtle gotcha. Consider XPVMG
cac9b346 1132
bd81e77b
NC
1133 +------+------+------+------+------+-------+-------+
1134 | NV | CUR | LEN | IV | MAGIC | STASH |
1135 +------+------+------+------+------+-------+-------+
1136 0 4 8 12 16 20 24 28
645c22ef 1137
bd81e77b
NC
1138 where NVs are aligned to 8 bytes, so that sizeof that structure is
1139 actually 32 bytes long, with 4 bytes of padding at the end:
08742458 1140
bd81e77b
NC
1141 +------+------+------+------+------+-------+-------+------+
1142 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1143 +------+------+------+------+------+-------+-------+------+
1144 0 4 8 12 16 20 24 28 32
08742458 1145
bd81e77b 1146 so what happens if you allocate memory for this structure:
30f9da9e 1147
bd81e77b
NC
1148 +------+------+------+------+------+-------+-------+------+------+...
1149 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1150 +------+------+------+------+------+-------+-------+------+------+...
1151 0 4 8 12 16 20 24 28 32 36
bfc44f79 1152
bd81e77b
NC
1153 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1154 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1155 started out as zero once, but it's quite possible that it isn't. So now,
1156 rather than a nicely zeroed GP, you have it pointing somewhere random.
1157 Bugs ensue.
bfc44f79 1158
bd81e77b
NC
1159 (In fact, GP ends up pointing at a previous GP structure, because the
1160 principle cause of the padding in XPVMG getting garbage is a copy of
6c9e42f7
NC
1161 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1162 this happens to be moot because XPVGV has been re-ordered, with GP
1163 no longer after STASH)
30f9da9e 1164
bd81e77b
NC
1165 So we are careful and work out the size of used parts of all the
1166 structures. */
bfc44f79 1167
bd81e77b
NC
1168 switch (old_type) {
1169 case SVt_NULL:
1170 break;
1171 case SVt_IV:
1172 if (new_type < SVt_PVIV) {
1173 new_type = (new_type == SVt_NV)
1174 ? SVt_PVNV : SVt_PVIV;
bd81e77b
NC
1175 }
1176 break;
1177 case SVt_NV:
1178 if (new_type < SVt_PVNV) {
1179 new_type = SVt_PVNV;
bd81e77b
NC
1180 }
1181 break;
1182 case SVt_RV:
1183 break;
1184 case SVt_PV:
1185 assert(new_type > SVt_PV);
1186 assert(SVt_IV < SVt_PV);
1187 assert(SVt_NV < SVt_PV);
1188 break;
1189 case SVt_PVIV:
1190 break;
1191 case SVt_PVNV:
1192 break;
1193 case SVt_PVMG:
1194 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1195 there's no way that it can be safely upgraded, because perl.c
1196 expects to Safefree(SvANY(PL_mess_sv)) */
1197 assert(sv != PL_mess_sv);
1198 /* This flag bit is used to mean other things in other scalar types.
1199 Given that it only has meaning inside the pad, it shouldn't be set
1200 on anything that can get upgraded. */
00b1698f 1201 assert(!SvPAD_TYPED(sv));
bd81e77b
NC
1202 break;
1203 default:
1204 if (old_type_details->cant_upgrade)
c81225bc
NC
1205 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1206 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
bd81e77b 1207 }
2fa1109b 1208 new_type_details = bodies_by_type + new_type;
645c22ef 1209
bd81e77b
NC
1210 SvFLAGS(sv) &= ~SVTYPEMASK;
1211 SvFLAGS(sv) |= new_type;
932e9ff9 1212
ab4416c0
NC
1213 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1214 the return statements above will have triggered. */
1215 assert (new_type != SVt_NULL);
bd81e77b 1216 switch (new_type) {
bd81e77b
NC
1217 case SVt_IV:
1218 assert(old_type == SVt_NULL);
1219 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1220 SvIV_set(sv, 0);
1221 return;
1222 case SVt_NV:
1223 assert(old_type == SVt_NULL);
1224 SvANY(sv) = new_XNV();
1225 SvNV_set(sv, 0);
1226 return;
1227 case SVt_RV:
1228 assert(old_type == SVt_NULL);
1229 SvANY(sv) = &sv->sv_u.svu_rv;
1230 SvRV_set(sv, 0);
1231 return;
1232 case SVt_PVHV:
bd81e77b 1233 case SVt_PVAV:
d2a0f284 1234 assert(new_type_details->body_size);
c1ae03ae
NC
1235
1236#ifndef PURIFY
1237 assert(new_type_details->arena);
d2a0f284 1238 assert(new_type_details->arena_size);
c1ae03ae 1239 /* This points to the start of the allocated area. */
d2a0f284
JC
1240 new_body_inline(new_body, new_type);
1241 Zero(new_body, new_type_details->body_size, char);
c1ae03ae
NC
1242 new_body = ((char *)new_body) - new_type_details->offset;
1243#else
1244 /* We always allocated the full length item with PURIFY. To do this
1245 we fake things so that arena is false for all 16 types.. */
1246 new_body = new_NOARENAZ(new_type_details);
1247#endif
1248 SvANY(sv) = new_body;
1249 if (new_type == SVt_PVAV) {
1250 AvMAX(sv) = -1;
1251 AvFILLp(sv) = -1;
1252 AvREAL_only(sv);
1253 }
aeb18a1e 1254
bd81e77b
NC
1255 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1256 The target created by newSVrv also is, and it can have magic.
1257 However, it never has SvPVX set.
1258 */
1259 if (old_type >= SVt_RV) {
1260 assert(SvPVX_const(sv) == 0);
1261 }
aeb18a1e 1262
bd81e77b 1263 if (old_type >= SVt_PVMG) {
e736a858 1264 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
bd81e77b 1265 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
797c7171
NC
1266 } else {
1267 sv->sv_u.svu_array = NULL; /* or svu_hash */
bd81e77b
NC
1268 }
1269 break;
93e68bfb 1270
93e68bfb 1271
bd81e77b
NC
1272 case SVt_PVIV:
1273 /* XXX Is this still needed? Was it ever needed? Surely as there is
1274 no route from NV to PVIV, NOK can never be true */
1275 assert(!SvNOKp(sv));
1276 assert(!SvNOK(sv));
1277 case SVt_PVIO:
1278 case SVt_PVFM:
bd81e77b
NC
1279 case SVt_PVGV:
1280 case SVt_PVCV:
1281 case SVt_PVLV:
1282 case SVt_PVMG:
1283 case SVt_PVNV:
1284 case SVt_PV:
93e68bfb 1285
d2a0f284 1286 assert(new_type_details->body_size);
bd81e77b
NC
1287 /* We always allocated the full length item with PURIFY. To do this
1288 we fake things so that arena is false for all 16 types.. */
1289 if(new_type_details->arena) {
1290 /* This points to the start of the allocated area. */
d2a0f284
JC
1291 new_body_inline(new_body, new_type);
1292 Zero(new_body, new_type_details->body_size, char);
bd81e77b
NC
1293 new_body = ((char *)new_body) - new_type_details->offset;
1294 } else {
1295 new_body = new_NOARENAZ(new_type_details);
1296 }
1297 SvANY(sv) = new_body;
5e2fc214 1298
bd81e77b 1299 if (old_type_details->copy) {
f9ba3d20
NC
1300 /* There is now the potential for an upgrade from something without
1301 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1302 int offset = old_type_details->offset;
1303 int length = old_type_details->copy;
1304
1305 if (new_type_details->offset > old_type_details->offset) {
d4c19fe8 1306 const int difference
f9ba3d20
NC
1307 = new_type_details->offset - old_type_details->offset;
1308 offset += difference;
1309 length -= difference;
1310 }
1311 assert (length >= 0);
1312
1313 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1314 char);
bd81e77b
NC
1315 }
1316
1317#ifndef NV_ZERO_IS_ALLBITS_ZERO
f2524eef 1318 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
e5ce394c
NC
1319 * correct 0.0 for us. Otherwise, if the old body didn't have an
1320 * NV slot, but the new one does, then we need to initialise the
1321 * freshly created NV slot with whatever the correct bit pattern is
1322 * for 0.0 */
e22a937e
NC
1323 if (old_type_details->zero_nv && !new_type_details->zero_nv
1324 && !isGV_with_GP(sv))
bd81e77b 1325 SvNV_set(sv, 0);
82048762 1326#endif
5e2fc214 1327
bd81e77b 1328 if (new_type == SVt_PVIO)
f2524eef 1329 IoPAGE_LEN(sv) = 60;
bd81e77b 1330 if (old_type < SVt_RV)
6136c704 1331 SvPV_set(sv, NULL);
bd81e77b
NC
1332 break;
1333 default:
afd78fd5
JH
1334 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1335 (unsigned long)new_type);
bd81e77b 1336 }
73171d91 1337
d2a0f284
JC
1338 if (old_type_details->arena) {
1339 /* If there was an old body, then we need to free it.
1340 Note that there is an assumption that all bodies of types that
1341 can be upgraded came from arenas. Only the more complex non-
1342 upgradable types are allowed to be directly malloc()ed. */
bd81e77b
NC
1343#ifdef PURIFY
1344 my_safefree(old_body);
1345#else
1346 del_body((void*)((char*)old_body + old_type_details->offset),
1347 &PL_body_roots[old_type]);
1348#endif
1349 }
1350}
73171d91 1351
bd81e77b
NC
1352/*
1353=for apidoc sv_backoff
73171d91 1354
bd81e77b
NC
1355Remove any string offset. You should normally use the C<SvOOK_off> macro
1356wrapper instead.
73171d91 1357
bd81e77b 1358=cut
73171d91
NC
1359*/
1360
bd81e77b
NC
1361int
1362Perl_sv_backoff(pTHX_ register SV *sv)
1363{
96a5add6 1364 PERL_UNUSED_CONTEXT;
bd81e77b
NC
1365 assert(SvOOK(sv));
1366 assert(SvTYPE(sv) != SVt_PVHV);
1367 assert(SvTYPE(sv) != SVt_PVAV);
1368 if (SvIVX(sv)) {
1369 const char * const s = SvPVX_const(sv);
1370 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1371 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1372 SvIV_set(sv, 0);
1373 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1374 }
1375 SvFLAGS(sv) &= ~SVf_OOK;
1376 return 0;
1377}
73171d91 1378
bd81e77b
NC
1379/*
1380=for apidoc sv_grow
73171d91 1381
bd81e77b
NC
1382Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1383upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1384Use the C<SvGROW> wrapper instead.
93e68bfb 1385
bd81e77b
NC
1386=cut
1387*/
93e68bfb 1388
bd81e77b
NC
1389char *
1390Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1391{
1392 register char *s;
93e68bfb 1393
5db06880
NC
1394 if (PL_madskills && newlen >= 0x100000) {
1395 PerlIO_printf(Perl_debug_log,
1396 "Allocation too large: %"UVxf"\n", (UV)newlen);
1397 }
bd81e77b
NC
1398#ifdef HAS_64K_LIMIT
1399 if (newlen >= 0x10000) {
1400 PerlIO_printf(Perl_debug_log,
1401 "Allocation too large: %"UVxf"\n", (UV)newlen);
1402 my_exit(1);
1403 }
1404#endif /* HAS_64K_LIMIT */
1405 if (SvROK(sv))
1406 sv_unref(sv);
1407 if (SvTYPE(sv) < SVt_PV) {
1408 sv_upgrade(sv, SVt_PV);
1409 s = SvPVX_mutable(sv);
1410 }
1411 else if (SvOOK(sv)) { /* pv is offset? */
1412 sv_backoff(sv);
1413 s = SvPVX_mutable(sv);
1414 if (newlen > SvLEN(sv))
1415 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1416#ifdef HAS_64K_LIMIT
1417 if (newlen >= 0x10000)
1418 newlen = 0xFFFF;
1419#endif
1420 }
1421 else
1422 s = SvPVX_mutable(sv);
aeb18a1e 1423
bd81e77b
NC
1424 if (newlen > SvLEN(sv)) { /* need more room? */
1425 newlen = PERL_STRLEN_ROUNDUP(newlen);
1426 if (SvLEN(sv) && s) {
1427#ifdef MYMALLOC
1428 const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1429 if (newlen <= l) {
1430 SvLEN_set(sv, l);
1431 return s;
1432 } else
1433#endif
10edeb5d 1434 s = (char*)saferealloc(s, newlen);
bd81e77b
NC
1435 }
1436 else {
10edeb5d 1437 s = (char*)safemalloc(newlen);
bd81e77b
NC
1438 if (SvPVX_const(sv) && SvCUR(sv)) {
1439 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1440 }
1441 }
1442 SvPV_set(sv, s);
1443 SvLEN_set(sv, newlen);
1444 }
1445 return s;
1446}
aeb18a1e 1447
bd81e77b
NC
1448/*
1449=for apidoc sv_setiv
932e9ff9 1450
bd81e77b
NC
1451Copies an integer into the given SV, upgrading first if necessary.
1452Does not handle 'set' magic. See also C<sv_setiv_mg>.
463ee0b2 1453
bd81e77b
NC
1454=cut
1455*/
463ee0b2 1456
bd81e77b
NC
1457void
1458Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1459{
97aff369 1460 dVAR;
bd81e77b
NC
1461 SV_CHECK_THINKFIRST_COW_DROP(sv);
1462 switch (SvTYPE(sv)) {
1463 case SVt_NULL:
1464 sv_upgrade(sv, SVt_IV);
1465 break;
1466 case SVt_NV:
1467 sv_upgrade(sv, SVt_PVNV);
1468 break;
1469 case SVt_RV:
1470 case SVt_PV:
1471 sv_upgrade(sv, SVt_PVIV);
1472 break;
463ee0b2 1473
bd81e77b
NC
1474 case SVt_PVGV:
1475 case SVt_PVAV:
1476 case SVt_PVHV:
1477 case SVt_PVCV:
1478 case SVt_PVFM:
1479 case SVt_PVIO:
1480 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1481 OP_DESC(PL_op));
42d0e0b7 1482 default: NOOP;
bd81e77b
NC
1483 }
1484 (void)SvIOK_only(sv); /* validate number */
1485 SvIV_set(sv, i);
1486 SvTAINT(sv);
1487}
932e9ff9 1488
bd81e77b
NC
1489/*
1490=for apidoc sv_setiv_mg
d33b2eba 1491
bd81e77b 1492Like C<sv_setiv>, but also handles 'set' magic.
1c846c1f 1493
bd81e77b
NC
1494=cut
1495*/
d33b2eba 1496
bd81e77b
NC
1497void
1498Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1499{
1500 sv_setiv(sv,i);
1501 SvSETMAGIC(sv);
1502}
727879eb 1503
bd81e77b
NC
1504/*
1505=for apidoc sv_setuv
d33b2eba 1506
bd81e77b
NC
1507Copies an unsigned integer into the given SV, upgrading first if necessary.
1508Does not handle 'set' magic. See also C<sv_setuv_mg>.
9b94d1dd 1509
bd81e77b
NC
1510=cut
1511*/
d33b2eba 1512
bd81e77b
NC
1513void
1514Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1515{
1516 /* With these two if statements:
1517 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
d33b2eba 1518
bd81e77b
NC
1519 without
1520 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1c846c1f 1521
bd81e77b
NC
1522 If you wish to remove them, please benchmark to see what the effect is
1523 */
1524 if (u <= (UV)IV_MAX) {
1525 sv_setiv(sv, (IV)u);
1526 return;
1527 }
1528 sv_setiv(sv, 0);
1529 SvIsUV_on(sv);
1530 SvUV_set(sv, u);
1531}
d33b2eba 1532
bd81e77b
NC
1533/*
1534=for apidoc sv_setuv_mg
727879eb 1535
bd81e77b 1536Like C<sv_setuv>, but also handles 'set' magic.
9b94d1dd 1537
bd81e77b
NC
1538=cut
1539*/
5e2fc214 1540
bd81e77b
NC
1541void
1542Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1543{
bd81e77b
NC
1544 sv_setuv(sv,u);
1545 SvSETMAGIC(sv);
1546}
5e2fc214 1547
954c1994 1548/*
bd81e77b 1549=for apidoc sv_setnv
954c1994 1550
bd81e77b
NC
1551Copies a double into the given SV, upgrading first if necessary.
1552Does not handle 'set' magic. See also C<sv_setnv_mg>.
954c1994
GS
1553
1554=cut
1555*/
1556
63f97190 1557void
bd81e77b 1558Perl_sv_setnv(pTHX_ register SV *sv, NV num)
79072805 1559{
97aff369 1560 dVAR;
bd81e77b
NC
1561 SV_CHECK_THINKFIRST_COW_DROP(sv);
1562 switch (SvTYPE(sv)) {
79072805 1563 case SVt_NULL:
79072805 1564 case SVt_IV:
bd81e77b 1565 sv_upgrade(sv, SVt_NV);
79072805 1566 break;
ed6116ce 1567 case SVt_RV:
79072805 1568 case SVt_PV:
79072805 1569 case SVt_PVIV:
bd81e77b 1570 sv_upgrade(sv, SVt_PVNV);
79072805 1571 break;
bd4b1eb5 1572
bd4b1eb5 1573 case SVt_PVGV:
bd81e77b
NC
1574 case SVt_PVAV:
1575 case SVt_PVHV:
79072805 1576 case SVt_PVCV:
bd81e77b
NC
1577 case SVt_PVFM:
1578 case SVt_PVIO:
1579 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1580 OP_NAME(PL_op));
42d0e0b7 1581 default: NOOP;
2068cd4d 1582 }
bd81e77b
NC
1583 SvNV_set(sv, num);
1584 (void)SvNOK_only(sv); /* validate number */
1585 SvTAINT(sv);
79072805
LW
1586}
1587
645c22ef 1588/*
bd81e77b 1589=for apidoc sv_setnv_mg
645c22ef 1590
bd81e77b 1591Like C<sv_setnv>, but also handles 'set' magic.
645c22ef
DM
1592
1593=cut
1594*/
1595
bd81e77b
NC
1596void
1597Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
79072805 1598{
bd81e77b
NC
1599 sv_setnv(sv,num);
1600 SvSETMAGIC(sv);
79072805
LW
1601}
1602
bd81e77b
NC
1603/* Print an "isn't numeric" warning, using a cleaned-up,
1604 * printable version of the offending string
1605 */
954c1994 1606
bd81e77b
NC
1607STATIC void
1608S_not_a_number(pTHX_ SV *sv)
79072805 1609{
97aff369 1610 dVAR;
bd81e77b
NC
1611 SV *dsv;
1612 char tmpbuf[64];
1613 const char *pv;
94463019
JH
1614
1615 if (DO_UTF8(sv)) {
396482e1 1616 dsv = sv_2mortal(newSVpvs(""));
94463019
JH
1617 pv = sv_uni_display(dsv, sv, 10, 0);
1618 } else {
1619 char *d = tmpbuf;
551405c4 1620 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
94463019
JH
1621 /* each *s can expand to 4 chars + "...\0",
1622 i.e. need room for 8 chars */
ecdeb87c 1623
00b6aa41
AL
1624 const char *s = SvPVX_const(sv);
1625 const char * const end = s + SvCUR(sv);
1626 for ( ; s < end && d < limit; s++ ) {
94463019
JH
1627 int ch = *s & 0xFF;
1628 if (ch & 128 && !isPRINT_LC(ch)) {
1629 *d++ = 'M';
1630 *d++ = '-';
1631 ch &= 127;
1632 }
1633 if (ch == '\n') {
1634 *d++ = '\\';
1635 *d++ = 'n';
1636 }
1637 else if (ch == '\r') {
1638 *d++ = '\\';
1639 *d++ = 'r';
1640 }
1641 else if (ch == '\f') {
1642 *d++ = '\\';
1643 *d++ = 'f';
1644 }
1645 else if (ch == '\\') {
1646 *d++ = '\\';
1647 *d++ = '\\';
1648 }
1649 else if (ch == '\0') {
1650 *d++ = '\\';
1651 *d++ = '0';
1652 }
1653 else if (isPRINT_LC(ch))
1654 *d++ = ch;
1655 else {
1656 *d++ = '^';
1657 *d++ = toCTRL(ch);
1658 }
1659 }
1660 if (s < end) {
1661 *d++ = '.';
1662 *d++ = '.';
1663 *d++ = '.';
1664 }
1665 *d = '\0';
1666 pv = tmpbuf;
a0d0e21e 1667 }
a0d0e21e 1668
533c011a 1669 if (PL_op)
9014280d 1670 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019
JH
1671 "Argument \"%s\" isn't numeric in %s", pv,
1672 OP_DESC(PL_op));
a0d0e21e 1673 else
9014280d 1674 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019 1675 "Argument \"%s\" isn't numeric", pv);
a0d0e21e
LW
1676}
1677
c2988b20
NC
1678/*
1679=for apidoc looks_like_number
1680
645c22ef
DM
1681Test if the content of an SV looks like a number (or is a number).
1682C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1683non-numeric warning), even if your atof() doesn't grok them.
c2988b20
NC
1684
1685=cut
1686*/
1687
1688I32
1689Perl_looks_like_number(pTHX_ SV *sv)
1690{
a3b680e6 1691 register const char *sbegin;
c2988b20
NC
1692 STRLEN len;
1693
1694 if (SvPOK(sv)) {
3f7c398e 1695 sbegin = SvPVX_const(sv);
c2988b20
NC
1696 len = SvCUR(sv);
1697 }
1698 else if (SvPOKp(sv))
83003860 1699 sbegin = SvPV_const(sv, len);
c2988b20 1700 else
e0ab1c0e 1701 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
c2988b20
NC
1702 return grok_number(sbegin, len, NULL);
1703}
25da4f38 1704
19f6321d
NC
1705STATIC bool
1706S_glob_2number(pTHX_ GV * const gv)
180488f8
NC
1707{
1708 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1709 SV *const buffer = sv_newmortal();
1710
1711 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1712 is on. */
1713 SvFAKE_off(gv);
1714 gv_efullname3(buffer, gv, "*");
1715 SvFLAGS(gv) |= wasfake;
1716
675c862f
AL
1717 /* We know that all GVs stringify to something that is not-a-number,
1718 so no need to test that. */
1719 if (ckWARN(WARN_NUMERIC))
1720 not_a_number(buffer);
1721 /* We just want something true to return, so that S_sv_2iuv_common
1722 can tail call us and return true. */
19f6321d 1723 return TRUE;
675c862f
AL
1724}
1725
1726STATIC char *
19f6321d 1727S_glob_2pv(pTHX_ GV * const gv, STRLEN * const len)
675c862f
AL
1728{
1729 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1730 SV *const buffer = sv_newmortal();
1731
1732 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1733 is on. */
1734 SvFAKE_off(gv);
1735 gv_efullname3(buffer, gv, "*");
1736 SvFLAGS(gv) |= wasfake;
1737
1738 assert(SvPOK(buffer));
a6d61a6c
NC
1739 if (len) {
1740 *len = SvCUR(buffer);
1741 }
675c862f 1742 return SvPVX(buffer);
180488f8
NC
1743}
1744
25da4f38
IZ
1745/* Actually, ISO C leaves conversion of UV to IV undefined, but
1746 until proven guilty, assume that things are not that bad... */
1747
645c22ef
DM
1748/*
1749 NV_PRESERVES_UV:
1750
1751 As 64 bit platforms often have an NV that doesn't preserve all bits of
28e5dec8
JH
1752 an IV (an assumption perl has been based on to date) it becomes necessary
1753 to remove the assumption that the NV always carries enough precision to
1754 recreate the IV whenever needed, and that the NV is the canonical form.
1755 Instead, IV/UV and NV need to be given equal rights. So as to not lose
645c22ef 1756 precision as a side effect of conversion (which would lead to insanity
28e5dec8
JH
1757 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1758 1) to distinguish between IV/UV/NV slots that have cached a valid
1759 conversion where precision was lost and IV/UV/NV slots that have a
1760 valid conversion which has lost no precision
645c22ef 1761 2) to ensure that if a numeric conversion to one form is requested that
28e5dec8
JH
1762 would lose precision, the precise conversion (or differently
1763 imprecise conversion) is also performed and cached, to prevent
1764 requests for different numeric formats on the same SV causing
1765 lossy conversion chains. (lossless conversion chains are perfectly
1766 acceptable (still))
1767
1768
1769 flags are used:
1770 SvIOKp is true if the IV slot contains a valid value
1771 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1772 SvNOKp is true if the NV slot contains a valid value
1773 SvNOK is true only if the NV value is accurate
1774
1775 so
645c22ef 1776 while converting from PV to NV, check to see if converting that NV to an
28e5dec8
JH
1777 IV(or UV) would lose accuracy over a direct conversion from PV to
1778 IV(or UV). If it would, cache both conversions, return NV, but mark
1779 SV as IOK NOKp (ie not NOK).
1780
645c22ef 1781 While converting from PV to IV, check to see if converting that IV to an
28e5dec8
JH
1782 NV would lose accuracy over a direct conversion from PV to NV. If it
1783 would, cache both conversions, flag similarly.
1784
1785 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1786 correctly because if IV & NV were set NV *always* overruled.
645c22ef
DM
1787 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1788 changes - now IV and NV together means that the two are interchangeable:
28e5dec8 1789 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
d460ef45 1790
645c22ef
DM
1791 The benefit of this is that operations such as pp_add know that if
1792 SvIOK is true for both left and right operands, then integer addition
1793 can be used instead of floating point (for cases where the result won't
1794 overflow). Before, floating point was always used, which could lead to
28e5dec8
JH
1795 loss of precision compared with integer addition.
1796
1797 * making IV and NV equal status should make maths accurate on 64 bit
1798 platforms
1799 * may speed up maths somewhat if pp_add and friends start to use
645c22ef 1800 integers when possible instead of fp. (Hopefully the overhead in
28e5dec8
JH
1801 looking for SvIOK and checking for overflow will not outweigh the
1802 fp to integer speedup)
1803 * will slow down integer operations (callers of SvIV) on "inaccurate"
1804 values, as the change from SvIOK to SvIOKp will cause a call into
1805 sv_2iv each time rather than a macro access direct to the IV slot
1806 * should speed up number->string conversion on integers as IV is
645c22ef 1807 favoured when IV and NV are equally accurate
28e5dec8
JH
1808
1809 ####################################################################
645c22ef
DM
1810 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1811 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1812 On the other hand, SvUOK is true iff UV.
28e5dec8
JH
1813 ####################################################################
1814
645c22ef 1815 Your mileage will vary depending your CPU's relative fp to integer
28e5dec8
JH
1816 performance ratio.
1817*/
1818
1819#ifndef NV_PRESERVES_UV
645c22ef
DM
1820# define IS_NUMBER_UNDERFLOW_IV 1
1821# define IS_NUMBER_UNDERFLOW_UV 2
1822# define IS_NUMBER_IV_AND_UV 2
1823# define IS_NUMBER_OVERFLOW_IV 4
1824# define IS_NUMBER_OVERFLOW_UV 5
1825
1826/* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
28e5dec8
JH
1827
1828/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1829STATIC int
645c22ef 1830S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
28e5dec8 1831{
97aff369 1832 dVAR;
b57a0404 1833 PERL_UNUSED_ARG(numtype); /* Used only under DEBUGGING? */
3f7c398e 1834 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
1835 if (SvNVX(sv) < (NV)IV_MIN) {
1836 (void)SvIOKp_on(sv);
1837 (void)SvNOK_on(sv);
45977657 1838 SvIV_set(sv, IV_MIN);
28e5dec8
JH
1839 return IS_NUMBER_UNDERFLOW_IV;
1840 }
1841 if (SvNVX(sv) > (NV)UV_MAX) {
1842 (void)SvIOKp_on(sv);
1843 (void)SvNOK_on(sv);
1844 SvIsUV_on(sv);
607fa7f2 1845 SvUV_set(sv, UV_MAX);
28e5dec8
JH
1846 return IS_NUMBER_OVERFLOW_UV;
1847 }
c2988b20
NC
1848 (void)SvIOKp_on(sv);
1849 (void)SvNOK_on(sv);
1850 /* Can't use strtol etc to convert this string. (See truth table in
1851 sv_2iv */
1852 if (SvNVX(sv) <= (UV)IV_MAX) {
45977657 1853 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
1854 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1855 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1856 } else {
1857 /* Integer is imprecise. NOK, IOKp */
1858 }
1859 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1860 }
1861 SvIsUV_on(sv);
607fa7f2 1862 SvUV_set(sv, U_V(SvNVX(sv)));
c2988b20
NC
1863 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1864 if (SvUVX(sv) == UV_MAX) {
1865 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1866 possibly be preserved by NV. Hence, it must be overflow.
1867 NOK, IOKp */
1868 return IS_NUMBER_OVERFLOW_UV;
1869 }
1870 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1871 } else {
1872 /* Integer is imprecise. NOK, IOKp */
28e5dec8 1873 }
c2988b20 1874 return IS_NUMBER_OVERFLOW_IV;
28e5dec8 1875}
645c22ef
DM
1876#endif /* !NV_PRESERVES_UV*/
1877
af359546
NC
1878STATIC bool
1879S_sv_2iuv_common(pTHX_ SV *sv) {
97aff369 1880 dVAR;
af359546 1881 if (SvNOKp(sv)) {
28e5dec8
JH
1882 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1883 * without also getting a cached IV/UV from it at the same time
1884 * (ie PV->NV conversion should detect loss of accuracy and cache
af359546
NC
1885 * IV or UV at same time to avoid this. */
1886 /* IV-over-UV optimisation - choose to cache IV if possible */
25da4f38
IZ
1887
1888 if (SvTYPE(sv) == SVt_NV)
1889 sv_upgrade(sv, SVt_PVNV);
1890
28e5dec8
JH
1891 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1892 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1893 certainly cast into the IV range at IV_MAX, whereas the correct
1894 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1895 cases go to UV */
cab190d4
JD
1896#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1897 if (Perl_isnan(SvNVX(sv))) {
1898 SvUV_set(sv, 0);
1899 SvIsUV_on(sv);
fdbe6d7c 1900 return FALSE;
cab190d4 1901 }
cab190d4 1902#endif
28e5dec8 1903 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
45977657 1904 SvIV_set(sv, I_V(SvNVX(sv)));
28e5dec8
JH
1905 if (SvNVX(sv) == (NV) SvIVX(sv)
1906#ifndef NV_PRESERVES_UV
1907 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1908 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1909 /* Don't flag it as "accurately an integer" if the number
1910 came from a (by definition imprecise) NV operation, and
1911 we're outside the range of NV integer precision */
1912#endif
1913 ) {
1914 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1915 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 1916 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
28e5dec8
JH
1917 PTR2UV(sv),
1918 SvNVX(sv),
1919 SvIVX(sv)));
1920
1921 } else {
1922 /* IV not precise. No need to convert from PV, as NV
1923 conversion would already have cached IV if it detected
1924 that PV->IV would be better than PV->NV->IV
1925 flags already correct - don't set public IOK. */
1926 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 1927 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
28e5dec8
JH
1928 PTR2UV(sv),
1929 SvNVX(sv),
1930 SvIVX(sv)));
1931 }
1932 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1933 but the cast (NV)IV_MIN rounds to a the value less (more
1934 negative) than IV_MIN which happens to be equal to SvNVX ??
1935 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1936 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1937 (NV)UVX == NVX are both true, but the values differ. :-(
1938 Hopefully for 2s complement IV_MIN is something like
1939 0x8000000000000000 which will be exact. NWC */
d460ef45 1940 }
25da4f38 1941 else {
607fa7f2 1942 SvUV_set(sv, U_V(SvNVX(sv)));
28e5dec8
JH
1943 if (
1944 (SvNVX(sv) == (NV) SvUVX(sv))
1945#ifndef NV_PRESERVES_UV
1946 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1947 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1948 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1949 /* Don't flag it as "accurately an integer" if the number
1950 came from a (by definition imprecise) NV operation, and
1951 we're outside the range of NV integer precision */
1952#endif
1953 )
1954 SvIOK_on(sv);
25da4f38 1955 SvIsUV_on(sv);
1c846c1f 1956 DEBUG_c(PerlIO_printf(Perl_debug_log,
57def98f 1957 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
56431972 1958 PTR2UV(sv),
57def98f
JH
1959 SvUVX(sv),
1960 SvUVX(sv)));
25da4f38 1961 }
748a9306
LW
1962 }
1963 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 1964 UV value;
504618e9 1965 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
af359546 1966 /* We want to avoid a possible problem when we cache an IV/ a UV which
25da4f38 1967 may be later translated to an NV, and the resulting NV is not
c2988b20
NC
1968 the same as the direct translation of the initial string
1969 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
1970 be careful to ensure that the value with the .456 is around if the
1971 NV value is requested in the future).
1c846c1f 1972
af359546 1973 This means that if we cache such an IV/a UV, we need to cache the
25da4f38 1974 NV as well. Moreover, we trade speed for space, and do not
28e5dec8 1975 cache the NV if we are sure it's not needed.
25da4f38 1976 */
16b7a9a4 1977
c2988b20
NC
1978 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
1979 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1980 == IS_NUMBER_IN_UV) {
5e045b90 1981 /* It's definitely an integer, only upgrade to PVIV */
28e5dec8
JH
1982 if (SvTYPE(sv) < SVt_PVIV)
1983 sv_upgrade(sv, SVt_PVIV);
f7bbb42a 1984 (void)SvIOK_on(sv);
c2988b20
NC
1985 } else if (SvTYPE(sv) < SVt_PVNV)
1986 sv_upgrade(sv, SVt_PVNV);
28e5dec8 1987
f2524eef 1988 /* If NVs preserve UVs then we only use the UV value if we know that
c2988b20
NC
1989 we aren't going to call atof() below. If NVs don't preserve UVs
1990 then the value returned may have more precision than atof() will
1991 return, even though value isn't perfectly accurate. */
1992 if ((numtype & (IS_NUMBER_IN_UV
1993#ifdef NV_PRESERVES_UV
1994 | IS_NUMBER_NOT_INT
1995#endif
1996 )) == IS_NUMBER_IN_UV) {
1997 /* This won't turn off the public IOK flag if it was set above */
1998 (void)SvIOKp_on(sv);
1999
2000 if (!(numtype & IS_NUMBER_NEG)) {
2001 /* positive */;
2002 if (value <= (UV)IV_MAX) {
45977657 2003 SvIV_set(sv, (IV)value);
c2988b20 2004 } else {
af359546 2005 /* it didn't overflow, and it was positive. */
607fa7f2 2006 SvUV_set(sv, value);
c2988b20
NC
2007 SvIsUV_on(sv);
2008 }
2009 } else {
2010 /* 2s complement assumption */
2011 if (value <= (UV)IV_MIN) {
45977657 2012 SvIV_set(sv, -(IV)value);
c2988b20
NC
2013 } else {
2014 /* Too negative for an IV. This is a double upgrade, but
d1be9408 2015 I'm assuming it will be rare. */
c2988b20
NC
2016 if (SvTYPE(sv) < SVt_PVNV)
2017 sv_upgrade(sv, SVt_PVNV);
2018 SvNOK_on(sv);
2019 SvIOK_off(sv);
2020 SvIOKp_on(sv);
9d6ce603 2021 SvNV_set(sv, -(NV)value);
45977657 2022 SvIV_set(sv, IV_MIN);
c2988b20
NC
2023 }
2024 }
2025 }
2026 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2027 will be in the previous block to set the IV slot, and the next
2028 block to set the NV slot. So no else here. */
2029
2030 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2031 != IS_NUMBER_IN_UV) {
2032 /* It wasn't an (integer that doesn't overflow the UV). */
3f7c398e 2033 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8 2034
c2988b20
NC
2035 if (! numtype && ckWARN(WARN_NUMERIC))
2036 not_a_number(sv);
28e5dec8 2037
65202027 2038#if defined(USE_LONG_DOUBLE)
c2988b20
NC
2039 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2040 PTR2UV(sv), SvNVX(sv)));
65202027 2041#else
1779d84d 2042 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
c2988b20 2043 PTR2UV(sv), SvNVX(sv)));
65202027 2044#endif
28e5dec8 2045
28e5dec8 2046#ifdef NV_PRESERVES_UV
af359546
NC
2047 (void)SvIOKp_on(sv);
2048 (void)SvNOK_on(sv);
2049 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2050 SvIV_set(sv, I_V(SvNVX(sv)));
2051 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2052 SvIOK_on(sv);
2053 } else {
6f207bd3 2054 NOOP; /* Integer is imprecise. NOK, IOKp */
af359546
NC
2055 }
2056 /* UV will not work better than IV */
2057 } else {
2058 if (SvNVX(sv) > (NV)UV_MAX) {
2059 SvIsUV_on(sv);
2060 /* Integer is inaccurate. NOK, IOKp, is UV */
2061 SvUV_set(sv, UV_MAX);
af359546
NC
2062 } else {
2063 SvUV_set(sv, U_V(SvNVX(sv)));
2064 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2065 NV preservse UV so can do correct comparison. */
2066 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2067 SvIOK_on(sv);
af359546 2068 } else {
6f207bd3 2069 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
af359546
NC
2070 }
2071 }
4b0c9573 2072 SvIsUV_on(sv);
af359546 2073 }
28e5dec8 2074#else /* NV_PRESERVES_UV */
c2988b20
NC
2075 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2076 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
af359546 2077 /* The IV/UV slot will have been set from value returned by
c2988b20
NC
2078 grok_number above. The NV slot has just been set using
2079 Atof. */
560b0c46 2080 SvNOK_on(sv);
c2988b20
NC
2081 assert (SvIOKp(sv));
2082 } else {
2083 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2084 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2085 /* Small enough to preserve all bits. */
2086 (void)SvIOKp_on(sv);
2087 SvNOK_on(sv);
45977657 2088 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
2089 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2090 SvIOK_on(sv);
2091 /* Assumption: first non-preserved integer is < IV_MAX,
2092 this NV is in the preserved range, therefore: */
2093 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2094 < (UV)IV_MAX)) {
32fdb065 2095 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
2096 }
2097 } else {
2098 /* IN_UV NOT_INT
2099 0 0 already failed to read UV.
2100 0 1 already failed to read UV.
2101 1 0 you won't get here in this case. IV/UV
2102 slot set, public IOK, Atof() unneeded.
2103 1 1 already read UV.
2104 so there's no point in sv_2iuv_non_preserve() attempting
2105 to use atol, strtol, strtoul etc. */
40a17c4c 2106 sv_2iuv_non_preserve (sv, numtype);
c2988b20
NC
2107 }
2108 }
28e5dec8 2109#endif /* NV_PRESERVES_UV */
25da4f38 2110 }
af359546
NC
2111 }
2112 else {
675c862f 2113 if (isGV_with_GP(sv))
a0933d07 2114 return glob_2number((GV *)sv);
180488f8 2115
af359546
NC
2116 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2117 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2118 report_uninit(sv);
2119 }
25da4f38
IZ
2120 if (SvTYPE(sv) < SVt_IV)
2121 /* Typically the caller expects that sv_any is not NULL now. */
2122 sv_upgrade(sv, SVt_IV);
af359546
NC
2123 /* Return 0 from the caller. */
2124 return TRUE;
2125 }
2126 return FALSE;
2127}
2128
2129/*
2130=for apidoc sv_2iv_flags
2131
2132Return the integer value of an SV, doing any necessary string
2133conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2134Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2135
2136=cut
2137*/
2138
2139IV
2140Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2141{
97aff369 2142 dVAR;
af359546 2143 if (!sv)
a0d0e21e 2144 return 0;
cecf5685
NC
2145 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2146 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e
NC
2147 cache IVs just in case. In practice it seems that they never
2148 actually anywhere accessible by user Perl code, let alone get used
2149 in anything other than a string context. */
af359546
NC
2150 if (flags & SV_GMAGIC)
2151 mg_get(sv);
2152 if (SvIOKp(sv))
2153 return SvIVX(sv);
2154 if (SvNOKp(sv)) {
2155 return I_V(SvNVX(sv));
2156 }
71c558c3
NC
2157 if (SvPOKp(sv) && SvLEN(sv)) {
2158 UV value;
2159 const int numtype
2160 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2161
2162 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2163 == IS_NUMBER_IN_UV) {
2164 /* It's definitely an integer */
2165 if (numtype & IS_NUMBER_NEG) {
2166 if (value < (UV)IV_MIN)
2167 return -(IV)value;
2168 } else {
2169 if (value < (UV)IV_MAX)
2170 return (IV)value;
2171 }
2172 }
2173 if (!numtype) {
2174 if (ckWARN(WARN_NUMERIC))
2175 not_a_number(sv);
2176 }
2177 return I_V(Atof(SvPVX_const(sv)));
2178 }
1c7ff15e
NC
2179 if (SvROK(sv)) {
2180 goto return_rok;
af359546 2181 }
1c7ff15e
NC
2182 assert(SvTYPE(sv) >= SVt_PVMG);
2183 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2184 } else if (SvTHINKFIRST(sv)) {
af359546 2185 if (SvROK(sv)) {
1c7ff15e 2186 return_rok:
af359546
NC
2187 if (SvAMAGIC(sv)) {
2188 SV * const tmpstr=AMG_CALLun(sv,numer);
2189 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2190 return SvIV(tmpstr);
2191 }
2192 }
2193 return PTR2IV(SvRV(sv));
2194 }
2195 if (SvIsCOW(sv)) {
2196 sv_force_normal_flags(sv, 0);
2197 }
2198 if (SvREADONLY(sv) && !SvOK(sv)) {
2199 if (ckWARN(WARN_UNINITIALIZED))
2200 report_uninit(sv);
2201 return 0;
2202 }
2203 }
2204 if (!SvIOKp(sv)) {
2205 if (S_sv_2iuv_common(aTHX_ sv))
2206 return 0;
79072805 2207 }
1d7c1841
GS
2208 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2209 PTR2UV(sv),SvIVX(sv)));
25da4f38 2210 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
79072805
LW
2211}
2212
645c22ef 2213/*
891f9566 2214=for apidoc sv_2uv_flags
645c22ef
DM
2215
2216Return the unsigned integer value of an SV, doing any necessary string
891f9566
YST
2217conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2218Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
645c22ef
DM
2219
2220=cut
2221*/
2222
ff68c719 2223UV
891f9566 2224Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
ff68c719 2225{
97aff369 2226 dVAR;
ff68c719 2227 if (!sv)
2228 return 0;
cecf5685
NC
2229 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2230 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e 2231 cache IVs just in case. */
891f9566
YST
2232 if (flags & SV_GMAGIC)
2233 mg_get(sv);
ff68c719 2234 if (SvIOKp(sv))
2235 return SvUVX(sv);
2236 if (SvNOKp(sv))
2237 return U_V(SvNVX(sv));
71c558c3
NC
2238 if (SvPOKp(sv) && SvLEN(sv)) {
2239 UV value;
2240 const int numtype
2241 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2242
2243 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2244 == IS_NUMBER_IN_UV) {
2245 /* It's definitely an integer */
2246 if (!(numtype & IS_NUMBER_NEG))
2247 return value;
2248 }
2249 if (!numtype) {
2250 if (ckWARN(WARN_NUMERIC))
2251 not_a_number(sv);
2252 }
2253 return U_V(Atof(SvPVX_const(sv)));
2254 }
1c7ff15e
NC
2255 if (SvROK(sv)) {
2256 goto return_rok;
3fe9a6f1 2257 }
1c7ff15e
NC
2258 assert(SvTYPE(sv) >= SVt_PVMG);
2259 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2260 } else if (SvTHINKFIRST(sv)) {
ff68c719 2261 if (SvROK(sv)) {
1c7ff15e 2262 return_rok:
deb46114
NC
2263 if (SvAMAGIC(sv)) {
2264 SV *const tmpstr = AMG_CALLun(sv,numer);
2265 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2266 return SvUV(tmpstr);
2267 }
2268 }
2269 return PTR2UV(SvRV(sv));
ff68c719 2270 }
765f542d
NC
2271 if (SvIsCOW(sv)) {
2272 sv_force_normal_flags(sv, 0);
8a818333 2273 }
0336b60e 2274 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2275 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2276 report_uninit(sv);
ff68c719 2277 return 0;
2278 }
2279 }
af359546
NC
2280 if (!SvIOKp(sv)) {
2281 if (S_sv_2iuv_common(aTHX_ sv))
2282 return 0;
ff68c719 2283 }
25da4f38 2284
1d7c1841
GS
2285 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2286 PTR2UV(sv),SvUVX(sv)));
25da4f38 2287 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
ff68c719 2288}
2289
645c22ef
DM
2290/*
2291=for apidoc sv_2nv
2292
2293Return the num value of an SV, doing any necessary string or integer
2294conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2295macros.
2296
2297=cut
2298*/
2299
65202027 2300NV
864dbfa3 2301Perl_sv_2nv(pTHX_ register SV *sv)
79072805 2302{
97aff369 2303 dVAR;
79072805
LW
2304 if (!sv)
2305 return 0.0;
cecf5685
NC
2306 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2307 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
50caf62e 2308 cache IVs just in case. */
463ee0b2
LW
2309 mg_get(sv);
2310 if (SvNOKp(sv))
2311 return SvNVX(sv);
0aa395f8 2312 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
041457d9 2313 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
504618e9 2314 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
a0d0e21e 2315 not_a_number(sv);
3f7c398e 2316 return Atof(SvPVX_const(sv));
a0d0e21e 2317 }
25da4f38 2318 if (SvIOKp(sv)) {
1c846c1f 2319 if (SvIsUV(sv))
65202027 2320 return (NV)SvUVX(sv);
25da4f38 2321 else
65202027 2322 return (NV)SvIVX(sv);
47a72cb8
NC
2323 }
2324 if (SvROK(sv)) {
2325 goto return_rok;
2326 }
2327 assert(SvTYPE(sv) >= SVt_PVMG);
2328 /* This falls through to the report_uninit near the end of the
2329 function. */
2330 } else if (SvTHINKFIRST(sv)) {
a0d0e21e 2331 if (SvROK(sv)) {
47a72cb8 2332 return_rok:
deb46114
NC
2333 if (SvAMAGIC(sv)) {
2334 SV *const tmpstr = AMG_CALLun(sv,numer);
2335 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2336 return SvNV(tmpstr);
2337 }
2338 }
2339 return PTR2NV(SvRV(sv));
a0d0e21e 2340 }
765f542d
NC
2341 if (SvIsCOW(sv)) {
2342 sv_force_normal_flags(sv, 0);
8a818333 2343 }
0336b60e 2344 if (SvREADONLY(sv) && !SvOK(sv)) {
599cee73 2345 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2346 report_uninit(sv);
ed6116ce
LW
2347 return 0.0;
2348 }
79072805
LW
2349 }
2350 if (SvTYPE(sv) < SVt_NV) {
7e25a7e9
NC
2351 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2352 sv_upgrade(sv, SVt_NV);
906f284f 2353#ifdef USE_LONG_DOUBLE
097ee67d 2354 DEBUG_c({
f93f4e46 2355 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2356 PerlIO_printf(Perl_debug_log,
2357 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2358 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2359 RESTORE_NUMERIC_LOCAL();
2360 });
65202027 2361#else
572bbb43 2362 DEBUG_c({
f93f4e46 2363 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2364 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
1d7c1841 2365 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2366 RESTORE_NUMERIC_LOCAL();
2367 });
572bbb43 2368#endif
79072805
LW
2369 }
2370 else if (SvTYPE(sv) < SVt_PVNV)
2371 sv_upgrade(sv, SVt_PVNV);
59d8ce62
NC
2372 if (SvNOKp(sv)) {
2373 return SvNVX(sv);
61604483 2374 }
59d8ce62 2375 if (SvIOKp(sv)) {
9d6ce603 2376 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
28e5dec8
JH
2377#ifdef NV_PRESERVES_UV
2378 SvNOK_on(sv);
2379#else
2380 /* Only set the public NV OK flag if this NV preserves the IV */
2381 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2382 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2383 : (SvIVX(sv) == I_V(SvNVX(sv))))
2384 SvNOK_on(sv);
2385 else
2386 SvNOKp_on(sv);
2387#endif
93a17b20 2388 }
748a9306 2389 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2390 UV value;
3f7c398e 2391 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
041457d9 2392 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
a0d0e21e 2393 not_a_number(sv);
28e5dec8 2394#ifdef NV_PRESERVES_UV
c2988b20
NC
2395 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2396 == IS_NUMBER_IN_UV) {
5e045b90 2397 /* It's definitely an integer */
9d6ce603 2398 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
c2988b20 2399 } else
3f7c398e 2400 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2401 SvNOK_on(sv);
2402#else
3f7c398e 2403 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2404 /* Only set the public NV OK flag if this NV preserves the value in
2405 the PV at least as well as an IV/UV would.
2406 Not sure how to do this 100% reliably. */
2407 /* if that shift count is out of range then Configure's test is
2408 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2409 UV_BITS */
2410 if (((UV)1 << NV_PRESERVES_UV_BITS) >
c2988b20 2411 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
28e5dec8 2412 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
c2988b20
NC
2413 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2414 /* Can't use strtol etc to convert this string, so don't try.
2415 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2416 SvNOK_on(sv);
2417 } else {
2418 /* value has been set. It may not be precise. */
2419 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2420 /* 2s complement assumption for (UV)IV_MIN */
2421 SvNOK_on(sv); /* Integer is too negative. */
2422 } else {
2423 SvNOKp_on(sv);
2424 SvIOKp_on(sv);
6fa402ec 2425
c2988b20 2426 if (numtype & IS_NUMBER_NEG) {
45977657 2427 SvIV_set(sv, -(IV)value);
c2988b20 2428 } else if (value <= (UV)IV_MAX) {
45977657 2429 SvIV_set(sv, (IV)value);
c2988b20 2430 } else {
607fa7f2 2431 SvUV_set(sv, value);
c2988b20
NC
2432 SvIsUV_on(sv);
2433 }
2434
2435 if (numtype & IS_NUMBER_NOT_INT) {
2436 /* I believe that even if the original PV had decimals,
2437 they are lost beyond the limit of the FP precision.
2438 However, neither is canonical, so both only get p
2439 flags. NWC, 2000/11/25 */
2440 /* Both already have p flags, so do nothing */
2441 } else {
66a1b24b 2442 const NV nv = SvNVX(sv);
c2988b20
NC
2443 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2444 if (SvIVX(sv) == I_V(nv)) {
2445 SvNOK_on(sv);
c2988b20 2446 } else {
c2988b20
NC
2447 /* It had no "." so it must be integer. */
2448 }
00b6aa41 2449 SvIOK_on(sv);
c2988b20
NC
2450 } else {
2451 /* between IV_MAX and NV(UV_MAX).
2452 Could be slightly > UV_MAX */
6fa402ec 2453
c2988b20
NC
2454 if (numtype & IS_NUMBER_NOT_INT) {
2455 /* UV and NV both imprecise. */
2456 } else {
66a1b24b 2457 const UV nv_as_uv = U_V(nv);
c2988b20
NC
2458
2459 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2460 SvNOK_on(sv);
c2988b20 2461 }
00b6aa41 2462 SvIOK_on(sv);
c2988b20
NC
2463 }
2464 }
2465 }
2466 }
2467 }
28e5dec8 2468#endif /* NV_PRESERVES_UV */
93a17b20 2469 }
79072805 2470 else {
f7877b28 2471 if (isGV_with_GP(sv)) {
19f6321d 2472 glob_2number((GV *)sv);
180488f8
NC
2473 return 0.0;
2474 }
2475
041457d9 2476 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2477 report_uninit(sv);
7e25a7e9
NC
2478 assert (SvTYPE(sv) >= SVt_NV);
2479 /* Typically the caller expects that sv_any is not NULL now. */
2480 /* XXX Ilya implies that this is a bug in callers that assume this
2481 and ideally should be fixed. */
a0d0e21e 2482 return 0.0;
79072805 2483 }
572bbb43 2484#if defined(USE_LONG_DOUBLE)
097ee67d 2485 DEBUG_c({
f93f4e46 2486 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2487 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2488 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2489 RESTORE_NUMERIC_LOCAL();
2490 });
65202027 2491#else
572bbb43 2492 DEBUG_c({
f93f4e46 2493 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2494 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
1d7c1841 2495 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2496 RESTORE_NUMERIC_LOCAL();
2497 });
572bbb43 2498#endif
463ee0b2 2499 return SvNVX(sv);
79072805
LW
2500}
2501
645c22ef
DM
2502/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2503 * UV as a string towards the end of buf, and return pointers to start and
2504 * end of it.
2505 *
2506 * We assume that buf is at least TYPE_CHARS(UV) long.
2507 */
2508
864dbfa3 2509static char *
aec46f14 2510S_uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
25da4f38 2511{
25da4f38 2512 char *ptr = buf + TYPE_CHARS(UV);
823a54a3 2513 char * const ebuf = ptr;
25da4f38 2514 int sign;
25da4f38
IZ
2515
2516 if (is_uv)
2517 sign = 0;
2518 else if (iv >= 0) {
2519 uv = iv;
2520 sign = 0;
2521 } else {
2522 uv = -iv;
2523 sign = 1;
2524 }
2525 do {
eb160463 2526 *--ptr = '0' + (char)(uv % 10);
25da4f38
IZ
2527 } while (uv /= 10);
2528 if (sign)
2529 *--ptr = '-';
2530 *peob = ebuf;
2531 return ptr;
2532}
2533
645c22ef
DM
2534/*
2535=for apidoc sv_2pv_flags
2536
ff276b08 2537Returns a pointer to the string value of an SV, and sets *lp to its length.
645c22ef
DM
2538If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2539if necessary.
2540Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2541usually end up here too.
2542
2543=cut
2544*/
2545
8d6d96c1
HS
2546char *
2547Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2548{
97aff369 2549 dVAR;
79072805 2550 register char *s;
79072805 2551
463ee0b2 2552 if (!sv) {
cdb061a3
NC
2553 if (lp)
2554 *lp = 0;
73d840c0 2555 return (char *)"";
463ee0b2 2556 }
8990e307 2557 if (SvGMAGICAL(sv)) {
8d6d96c1
HS
2558 if (flags & SV_GMAGIC)
2559 mg_get(sv);
463ee0b2 2560 if (SvPOKp(sv)) {
cdb061a3
NC
2561 if (lp)
2562 *lp = SvCUR(sv);
10516c54
NC
2563 if (flags & SV_MUTABLE_RETURN)
2564 return SvPVX_mutable(sv);
4d84ee25
NC
2565 if (flags & SV_CONST_RETURN)
2566 return (char *)SvPVX_const(sv);
463ee0b2
LW
2567 return SvPVX(sv);
2568 }
75dfc8ec
NC
2569 if (SvIOKp(sv) || SvNOKp(sv)) {
2570 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
75dfc8ec
NC
2571 STRLEN len;
2572
2573 if (SvIOKp(sv)) {
e80fed9d 2574 len = SvIsUV(sv)
d9fad198
JH
2575 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2576 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
75dfc8ec 2577 } else {
e8ada2d0
NC
2578 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2579 len = strlen(tbuf);
75dfc8ec 2580 }
b5b886f0
NC
2581 assert(!SvROK(sv));
2582 {
75dfc8ec
NC
2583 dVAR;
2584
2585#ifdef FIXNEGATIVEZERO
e8ada2d0
NC
2586 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2587 tbuf[0] = '0';
2588 tbuf[1] = 0;
75dfc8ec
NC
2589 len = 1;
2590 }
2591#endif
2592 SvUPGRADE(sv, SVt_PV);
2593 if (lp)
2594 *lp = len;
2595 s = SvGROW_mutable(sv, len + 1);
2596 SvCUR_set(sv, len);
2597 SvPOKp_on(sv);
10edeb5d 2598 return (char*)memcpy(s, tbuf, len + 1);
75dfc8ec 2599 }
463ee0b2 2600 }
1c7ff15e
NC
2601 if (SvROK(sv)) {
2602 goto return_rok;
2603 }
2604 assert(SvTYPE(sv) >= SVt_PVMG);
2605 /* This falls through to the report_uninit near the end of the
2606 function. */
2607 } else if (SvTHINKFIRST(sv)) {
ed6116ce 2608 if (SvROK(sv)) {
1c7ff15e 2609 return_rok:
deb46114
NC
2610 if (SvAMAGIC(sv)) {
2611 SV *const tmpstr = AMG_CALLun(sv,string);
2612 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2613 /* Unwrap this: */
2614 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2615 */
2616
2617 char *pv;
2618 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2619 if (flags & SV_CONST_RETURN) {
2620 pv = (char *) SvPVX_const(tmpstr);
2621 } else {
2622 pv = (flags & SV_MUTABLE_RETURN)
2623 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2624 }
2625 if (lp)
2626 *lp = SvCUR(tmpstr);
50adf7d2 2627 } else {
deb46114 2628 pv = sv_2pv_flags(tmpstr, lp, flags);
50adf7d2 2629 }
deb46114
NC
2630 if (SvUTF8(tmpstr))
2631 SvUTF8_on(sv);
2632 else
2633 SvUTF8_off(sv);
2634 return pv;
50adf7d2 2635 }
deb46114
NC
2636 }
2637 {
fafee734
NC
2638 STRLEN len;
2639 char *retval;
2640 char *buffer;
f9277f47 2641 MAGIC *mg;
d8eae41e
NC
2642 const SV *const referent = (SV*)SvRV(sv);
2643
2644 if (!referent) {
fafee734
NC
2645 len = 7;
2646 retval = buffer = savepvn("NULLREF", len);
042dae7a
NC
2647 } else if (SvTYPE(referent) == SVt_PVMG
2648 && ((SvFLAGS(referent) &
2649 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2650 == (SVs_OBJECT|SVs_SMG))
de8c5301
YO
2651 && (mg = mg_find(referent, PERL_MAGIC_qr)))
2652 {
2653 char *str = NULL;
2654 I32 haseval = 0;
60df1e07 2655 U32 flags = 0;
de8c5301
YO
2656 (str) = CALLREG_AS_STR(mg,lp,&flags,&haseval);
2657 if (flags & 1)
2658 SvUTF8_on(sv);
2659 else
2660 SvUTF8_off(sv);
2661 PL_reginterp_cnt += haseval;
2662 return str;
d8eae41e
NC
2663 } else {
2664 const char *const typestr = sv_reftype(referent, 0);
fafee734
NC
2665 const STRLEN typelen = strlen(typestr);
2666 UV addr = PTR2UV(referent);
2667 const char *stashname = NULL;
2668 STRLEN stashnamelen = 0; /* hush, gcc */
2669 const char *buffer_end;
d8eae41e 2670
d8eae41e 2671 if (SvOBJECT(referent)) {
fafee734
NC
2672 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2673
2674 if (name) {
2675 stashname = HEK_KEY(name);
2676 stashnamelen = HEK_LEN(name);
2677
2678 if (HEK_UTF8(name)) {
2679 SvUTF8_on(sv);
2680 } else {
2681 SvUTF8_off(sv);
2682 }
2683 } else {
2684 stashname = "__ANON__";
2685 stashnamelen = 8;
2686 }
2687 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2688 + 2 * sizeof(UV) + 2 /* )\0 */;
2689 } else {
2690 len = typelen + 3 /* (0x */
2691 + 2 * sizeof(UV) + 2 /* )\0 */;
d8eae41e 2692 }
fafee734
NC
2693
2694 Newx(buffer, len, char);
2695 buffer_end = retval = buffer + len;
2696
2697 /* Working backwards */
2698 *--retval = '\0';
2699 *--retval = ')';
2700 do {
2701 *--retval = PL_hexdigit[addr & 15];
2702 } while (addr >>= 4);
2703 *--retval = 'x';
2704 *--retval = '0';
2705 *--retval = '(';
2706
2707 retval -= typelen;
2708 memcpy(retval, typestr, typelen);
2709
2710 if (stashname) {
2711 *--retval = '=';
2712 retval -= stashnamelen;
2713 memcpy(retval, stashname, stashnamelen);
2714 }
2715 /* retval may not neccesarily have reached the start of the
2716 buffer here. */
2717 assert (retval >= buffer);
2718
2719 len = buffer_end - retval - 1; /* -1 for that \0 */
c080367d 2720 }
042dae7a 2721 if (lp)
fafee734
NC
2722 *lp = len;
2723 SAVEFREEPV(buffer);
2724 return retval;
463ee0b2 2725 }
79072805 2726 }
0336b60e 2727 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2728 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2729 report_uninit(sv);
cdb061a3
NC
2730 if (lp)
2731 *lp = 0;
73d840c0 2732 return (char *)"";
79072805 2733 }
79072805 2734 }
28e5dec8
JH
2735 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2736 /* I'm assuming that if both IV and NV are equally valid then
2737 converting the IV is going to be more efficient */
e1ec3a88 2738 const U32 isUIOK = SvIsUV(sv);
28e5dec8
JH
2739 char buf[TYPE_CHARS(UV)];
2740 char *ebuf, *ptr;
2741
2742 if (SvTYPE(sv) < SVt_PVIV)
2743 sv_upgrade(sv, SVt_PVIV);
4ea1d550 2744 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
5902b6a9
NC
2745 /* inlined from sv_setpvn */
2746 SvGROW_mutable(sv, (STRLEN)(ebuf - ptr + 1));
4d84ee25 2747 Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
28e5dec8
JH
2748 SvCUR_set(sv, ebuf - ptr);
2749 s = SvEND(sv);
2750 *s = '\0';
28e5dec8
JH
2751 }
2752 else if (SvNOKp(sv)) {
c81271c3 2753 const int olderrno = errno;
79072805
LW
2754 if (SvTYPE(sv) < SVt_PVNV)
2755 sv_upgrade(sv, SVt_PVNV);
1c846c1f 2756 /* The +20 is pure guesswork. Configure test needed. --jhi */
5902b6a9 2757 s = SvGROW_mutable(sv, NV_DIG + 20);
c81271c3 2758 /* some Xenix systems wipe out errno here */
79072805 2759#ifdef apollo
463ee0b2 2760 if (SvNVX(sv) == 0.0)
d1307786 2761 my_strlcpy(s, "0", SvLEN(sv));
79072805
LW
2762 else
2763#endif /*apollo*/
bbce6d69 2764 {
2d4389e4 2765 Gconvert(SvNVX(sv), NV_DIG, 0, s);
bbce6d69 2766 }
79072805 2767 errno = olderrno;
a0d0e21e
LW
2768#ifdef FIXNEGATIVEZERO
2769 if (*s == '-' && s[1] == '0' && !s[2])
d1307786 2770 my_strlcpy(s, "0", SvLEN(s));
a0d0e21e 2771#endif
79072805
LW
2772 while (*s) s++;
2773#ifdef hcx
2774 if (s[-1] == '.')
46fc3d4c 2775 *--s = '\0';
79072805
LW
2776#endif
2777 }
79072805 2778 else {
675c862f 2779 if (isGV_with_GP(sv))
19f6321d 2780 return glob_2pv((GV *)sv, lp);
180488f8 2781
041457d9 2782 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2783 report_uninit(sv);
cdb061a3 2784 if (lp)
00b6aa41 2785 *lp = 0;
25da4f38
IZ
2786 if (SvTYPE(sv) < SVt_PV)
2787 /* Typically the caller expects that sv_any is not NULL now. */
2788 sv_upgrade(sv, SVt_PV);
73d840c0 2789 return (char *)"";
79072805 2790 }
cdb061a3 2791 {
823a54a3 2792 const STRLEN len = s - SvPVX_const(sv);
cdb061a3
NC
2793 if (lp)
2794 *lp = len;
2795 SvCUR_set(sv, len);
2796 }
79072805 2797 SvPOK_on(sv);
1d7c1841 2798 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 2799 PTR2UV(sv),SvPVX_const(sv)));
4d84ee25
NC
2800 if (flags & SV_CONST_RETURN)
2801 return (char *)SvPVX_const(sv);
10516c54
NC
2802 if (flags & SV_MUTABLE_RETURN)
2803 return SvPVX_mutable(sv);
463ee0b2
LW
2804 return SvPVX(sv);
2805}
2806
645c22ef 2807/*
6050d10e
JP
2808=for apidoc sv_copypv
2809
2810Copies a stringified representation of the source SV into the
2811destination SV. Automatically performs any necessary mg_get and
54f0641b 2812coercion of numeric values into strings. Guaranteed to preserve
2575c402 2813UTF8 flag even from overloaded objects. Similar in nature to
54f0641b
NIS
2814sv_2pv[_flags] but operates directly on an SV instead of just the
2815string. Mostly uses sv_2pv_flags to do its work, except when that
6050d10e
JP
2816would lose the UTF-8'ness of the PV.
2817
2818=cut
2819*/
2820
2821void
2822Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
2823{
446eaa42 2824 STRLEN len;
53c1dcc0 2825 const char * const s = SvPV_const(ssv,len);
cb50f42d 2826 sv_setpvn(dsv,s,len);
446eaa42 2827 if (SvUTF8(ssv))
cb50f42d 2828 SvUTF8_on(dsv);
446eaa42 2829 else
cb50f42d 2830 SvUTF8_off(dsv);
6050d10e
JP
2831}
2832
2833/*
645c22ef
DM
2834=for apidoc sv_2pvbyte
2835
2836Return a pointer to the byte-encoded representation of the SV, and set *lp
1e54db1a 2837to its length. May cause the SV to be downgraded from UTF-8 as a
645c22ef
DM
2838side-effect.
2839
2840Usually accessed via the C<SvPVbyte> macro.
2841
2842=cut
2843*/
2844
7340a771
GS
2845char *
2846Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2847{
0875d2fe 2848 sv_utf8_downgrade(sv,0);
97972285 2849 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771
GS
2850}
2851
645c22ef 2852/*
035cbb0e
RGS
2853=for apidoc sv_2pvutf8
2854
2855Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
2856to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
2857
2858Usually accessed via the C<SvPVutf8> macro.
2859
2860=cut
2861*/
645c22ef 2862
7340a771
GS
2863char *
2864Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2865{
035cbb0e
RGS
2866 sv_utf8_upgrade(sv);
2867 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771 2868}
1c846c1f 2869
7ee2227d 2870
645c22ef
DM
2871/*
2872=for apidoc sv_2bool
2873
2874This function is only called on magical items, and is only used by
8cf8f3d1 2875sv_true() or its macro equivalent.
645c22ef
DM
2876
2877=cut
2878*/
2879
463ee0b2 2880bool
864dbfa3 2881Perl_sv_2bool(pTHX_ register SV *sv)
463ee0b2 2882{
97aff369 2883 dVAR;
5b295bef 2884 SvGETMAGIC(sv);
463ee0b2 2885
a0d0e21e
LW
2886 if (!SvOK(sv))
2887 return 0;
2888 if (SvROK(sv)) {
fabdb6c0
AL
2889 if (SvAMAGIC(sv)) {
2890 SV * const tmpsv = AMG_CALLun(sv,bool_);
2891 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2892 return (bool)SvTRUE(tmpsv);
2893 }
2894 return SvRV(sv) != 0;
a0d0e21e 2895 }
463ee0b2 2896 if (SvPOKp(sv)) {
53c1dcc0
AL
2897 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
2898 if (Xpvtmp &&
339049b0 2899 (*sv->sv_u.svu_pv > '0' ||
11343788 2900 Xpvtmp->xpv_cur > 1 ||
339049b0 2901 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
463ee0b2
LW
2902 return 1;
2903 else
2904 return 0;
2905 }
2906 else {
2907 if (SvIOKp(sv))
2908 return SvIVX(sv) != 0;
2909 else {
2910 if (SvNOKp(sv))
2911 return SvNVX(sv) != 0.0;
180488f8 2912 else {
f7877b28 2913 if (isGV_with_GP(sv))
180488f8
NC
2914 return TRUE;
2915 else
2916 return FALSE;
2917 }
463ee0b2
LW
2918 }
2919 }
79072805
LW
2920}
2921
c461cf8f
JH
2922/*
2923=for apidoc sv_utf8_upgrade
2924
78ea37eb 2925Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 2926Forces the SV to string form if it is not already.
4411f3b6
NIS
2927Always sets the SvUTF8 flag to avoid future validity checks even
2928if all the bytes have hibit clear.
c461cf8f 2929
13a6c0e0
JH
2930This is not as a general purpose byte encoding to Unicode interface:
2931use the Encode extension for that.
2932
8d6d96c1
HS
2933=for apidoc sv_utf8_upgrade_flags
2934
78ea37eb 2935Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 2936Forces the SV to string form if it is not already.
8d6d96c1
HS
2937Always sets the SvUTF8 flag to avoid future validity checks even
2938if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
2939will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
2940C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
2941
13a6c0e0
JH
2942This is not as a general purpose byte encoding to Unicode interface:
2943use the Encode extension for that.
2944
8d6d96c1
HS
2945=cut
2946*/
2947
2948STRLEN
2949Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
2950{
97aff369 2951 dVAR;
808c356f
RGS
2952 if (sv == &PL_sv_undef)
2953 return 0;
e0e62c2a
NIS
2954 if (!SvPOK(sv)) {
2955 STRLEN len = 0;
d52b7888
NC
2956 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
2957 (void) sv_2pv_flags(sv,&len, flags);
2958 if (SvUTF8(sv))
2959 return len;
2960 } else {
2961 (void) SvPV_force(sv,len);
2962 }
e0e62c2a 2963 }
4411f3b6 2964
f5cee72b 2965 if (SvUTF8(sv)) {
5fec3b1d 2966 return SvCUR(sv);
f5cee72b 2967 }
5fec3b1d 2968
765f542d
NC
2969 if (SvIsCOW(sv)) {
2970 sv_force_normal_flags(sv, 0);
db42d148
NIS
2971 }
2972
88632417 2973 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
799ef3cb 2974 sv_recode_to_utf8(sv, PL_encoding);
9f4817db 2975 else { /* Assume Latin-1/EBCDIC */
c4e7c712
NC
2976 /* This function could be much more efficient if we
2977 * had a FLAG in SVs to signal if there are any hibit
2978 * chars in the PV. Given that there isn't such a flag
2979 * make the loop as fast as possible. */
00b6aa41 2980 const U8 * const s = (U8 *) SvPVX_const(sv);
c4420975 2981 const U8 * const e = (U8 *) SvEND(sv);
93524f2b 2982 const U8 *t = s;
c4e7c712
NC
2983
2984 while (t < e) {
53c1dcc0 2985 const U8 ch = *t++;
00b6aa41
AL
2986 /* Check for hi bit */
2987 if (!NATIVE_IS_INVARIANT(ch)) {
2988 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
2989 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
2990
2991 SvPV_free(sv); /* No longer using what was there before. */
2992 SvPV_set(sv, (char*)recoded);
2993 SvCUR_set(sv, len - 1);
2994 SvLEN_set(sv, len); /* No longer know the real size. */
c4e7c712 2995 break;
00b6aa41 2996 }
c4e7c712
NC
2997 }
2998 /* Mark as UTF-8 even if no hibit - saves scanning loop */
2999 SvUTF8_on(sv);
560a288e 3000 }
4411f3b6 3001 return SvCUR(sv);
560a288e
GS
3002}
3003
c461cf8f
JH
3004/*
3005=for apidoc sv_utf8_downgrade
3006
78ea37eb
TS
3007Attempts to convert the PV of an SV from characters to bytes.
3008If the PV contains a character beyond byte, this conversion will fail;
3009in this case, either returns false or, if C<fail_ok> is not
c461cf8f
JH
3010true, croaks.
3011
13a6c0e0
JH
3012This is not as a general purpose Unicode to byte encoding interface:
3013use the Encode extension for that.
3014
c461cf8f
JH
3015=cut
3016*/
3017
560a288e
GS
3018bool
3019Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3020{
97aff369 3021 dVAR;
78ea37eb 3022 if (SvPOKp(sv) && SvUTF8(sv)) {
fa301091 3023 if (SvCUR(sv)) {
03cfe0ae 3024 U8 *s;
652088fc 3025 STRLEN len;
fa301091 3026
765f542d
NC
3027 if (SvIsCOW(sv)) {
3028 sv_force_normal_flags(sv, 0);
3029 }
03cfe0ae
NIS
3030 s = (U8 *) SvPV(sv, len);
3031 if (!utf8_to_bytes(s, &len)) {
fa301091
JH
3032 if (fail_ok)
3033 return FALSE;
3034 else {
3035 if (PL_op)
3036 Perl_croak(aTHX_ "Wide character in %s",
53e06cf0 3037 OP_DESC(PL_op));
fa301091
JH
3038 else
3039 Perl_croak(aTHX_ "Wide character");
3040 }
4b3603a4 3041 }
b162af07 3042 SvCUR_set(sv, len);
67e989fb 3043 }
560a288e 3044 }
ffebcc3e 3045 SvUTF8_off(sv);
560a288e
GS
3046 return TRUE;
3047}
3048
c461cf8f
JH
3049/*
3050=for apidoc sv_utf8_encode
3051
78ea37eb
TS
3052Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3053flag off so that it looks like octets again.
c461cf8f
JH
3054
3055=cut
3056*/
3057
560a288e
GS
3058void
3059Perl_sv_utf8_encode(pTHX_ register SV *sv)
3060{
4c94c214
NC
3061 if (SvIsCOW(sv)) {
3062 sv_force_normal_flags(sv, 0);
3063 }
3064 if (SvREADONLY(sv)) {
3065 Perl_croak(aTHX_ PL_no_modify);
3066 }
a5f5288a 3067 (void) sv_utf8_upgrade(sv);
560a288e
GS
3068 SvUTF8_off(sv);
3069}
3070
4411f3b6
NIS
3071/*
3072=for apidoc sv_utf8_decode
3073
78ea37eb
TS
3074If the PV of the SV is an octet sequence in UTF-8
3075and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3076so that it looks like a character. If the PV contains only single-byte
3077characters, the C<SvUTF8> flag stays being off.
3078Scans PV for validity and returns false if the PV is invalid UTF-8.
4411f3b6
NIS
3079
3080=cut
3081*/
3082
560a288e
GS
3083bool
3084Perl_sv_utf8_decode(pTHX_ register SV *sv)
3085{
78ea37eb 3086 if (SvPOKp(sv)) {
93524f2b
NC
3087 const U8 *c;
3088 const U8 *e;
9cbac4c7 3089
645c22ef
DM
3090 /* The octets may have got themselves encoded - get them back as
3091 * bytes
3092 */
3093 if (!sv_utf8_downgrade(sv, TRUE))
560a288e
GS
3094 return FALSE;
3095
3096 /* it is actually just a matter of turning the utf8 flag on, but
3097 * we want to make sure everything inside is valid utf8 first.
3098 */
93524f2b 3099 c = (const U8 *) SvPVX_const(sv);
63cd0674 3100 if (!is_utf8_string(c, SvCUR(sv)+1))
67e989fb 3101 return FALSE;
93524f2b 3102 e = (const U8 *) SvEND(sv);
511c2ff0 3103 while (c < e) {
b64e5050 3104 const U8 ch = *c++;
c4d5f83a 3105 if (!UTF8_IS_INVARIANT(ch)) {
67e989fb
JH
3106 SvUTF8_on(sv);
3107 break;
3108 }
560a288e 3109 }
560a288e
GS
3110 }
3111 return TRUE;
3112}
3113
954c1994
GS
3114/*
3115=for apidoc sv_setsv
3116
645c22ef
DM
3117Copies the contents of the source SV C<ssv> into the destination SV
3118C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3119function if the source SV needs to be reused. Does not handle 'set' magic.
3120Loosely speaking, it performs a copy-by-value, obliterating any previous
3121content of the destination.
3122
3123You probably want to use one of the assortment of wrappers, such as
3124C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3125C<SvSetMagicSV_nosteal>.
3126
8d6d96c1
HS
3127=for apidoc sv_setsv_flags
3128
645c22ef
DM
3129Copies the contents of the source SV C<ssv> into the destination SV
3130C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3131function if the source SV needs to be reused. Does not handle 'set' magic.
3132Loosely speaking, it performs a copy-by-value, obliterating any previous
3133content of the destination.
3134If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
5fcdf167
NC
3135C<ssv> if appropriate, else not. If the C<flags> parameter has the
3136C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3137and C<sv_setsv_nomg> are implemented in terms of this function.
645c22ef
DM
3138
3139You probably want to use one of the assortment of wrappers, such as
3140C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3141C<SvSetMagicSV_nosteal>.
3142
3143This is the primary function for copying scalars, and most other
3144copy-ish functions and macros use this underneath.
8d6d96c1
HS
3145
3146=cut
3147*/
3148
5d0301b7 3149static void
2eb42952 3150S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype)
5d0301b7
NC
3151{
3152 if (dtype != SVt_PVGV) {
3153 const char * const name = GvNAME(sstr);
3154 const STRLEN len = GvNAMELEN(sstr);
0d092c36 3155 {
f7877b28
NC
3156 if (dtype >= SVt_PV) {
3157 SvPV_free(dstr);
3158 SvPV_set(dstr, 0);
3159 SvLEN_set(dstr, 0);
3160 SvCUR_set(dstr, 0);
3161 }
0d092c36 3162 SvUPGRADE(dstr, SVt_PVGV);
dedf8e73 3163 (void)SvOK_off(dstr);
2e5b91de
NC
3164 /* FIXME - why are we doing this, then turning it off and on again
3165 below? */
3166 isGV_with_GP_on(dstr);
f7877b28 3167 }
5d0301b7
NC
3168 GvSTASH(dstr) = GvSTASH(sstr);
3169 if (GvSTASH(dstr))
3170 Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
ae8cc45f 3171 gv_name_set((GV *)dstr, name, len, GV_ADD);
5d0301b7
NC
3172 SvFAKE_on(dstr); /* can coerce to non-glob */
3173 }
3174
3175#ifdef GV_UNIQUE_CHECK
3176 if (GvUNIQUE((GV*)dstr)) {
3177 Perl_croak(aTHX_ PL_no_modify);
3178 }
3179#endif
3180
f7877b28 3181 gp_free((GV*)dstr);
2e5b91de 3182 isGV_with_GP_off(dstr);
5d0301b7 3183 (void)SvOK_off(dstr);
2e5b91de 3184 isGV_with_GP_on(dstr);
dedf8e73 3185 GvINTRO_off(dstr); /* one-shot flag */
5d0301b7
NC
3186 GvGP(dstr) = gp_ref(GvGP(sstr));
3187 if (SvTAINTED(sstr))
3188 SvTAINT(dstr);
3189 if (GvIMPORTED(dstr) != GVf_IMPORTED
3190 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3191 {
3192 GvIMPORTED_on(dstr);
3193 }
3194 GvMULTI_on(dstr);
3195 return;
3196}
3197
b8473700 3198static void
2eb42952 3199S_glob_assign_ref(pTHX_ SV *dstr, SV *sstr) {
b8473700
NC
3200 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3201 SV *dref = NULL;
3202 const int intro = GvINTRO(dstr);
2440974c 3203 SV **location;
3386d083 3204 U8 import_flag = 0;
27242d61
NC
3205 const U32 stype = SvTYPE(sref);
3206
b8473700
NC
3207
3208#ifdef GV_UNIQUE_CHECK
3209 if (GvUNIQUE((GV*)dstr)) {
3210 Perl_croak(aTHX_ PL_no_modify);
3211 }
3212#endif
3213
3214 if (intro) {
3215 GvINTRO_off(dstr); /* one-shot flag */
3216 GvLINE(dstr) = CopLINE(PL_curcop);
3217 GvEGV(dstr) = (GV*)dstr;
3218 }
3219 GvMULTI_on(dstr);
27242d61 3220 switch (stype) {
b8473700 3221 case SVt_PVCV:
27242d61
NC
3222 location = (SV **) &GvCV(dstr);
3223 import_flag = GVf_IMPORTED_CV;
3224 goto common;
3225 case SVt_PVHV:
3226 location = (SV **) &GvHV(dstr);
3227 import_flag = GVf_IMPORTED_HV;
3228 goto common;
3229 case SVt_PVAV:
3230 location = (SV **) &GvAV(dstr);
3231 import_flag = GVf_IMPORTED_AV;
3232 goto common;
3233 case SVt_PVIO:
3234 location = (SV **) &GvIOp(dstr);
3235 goto common;
3236 case SVt_PVFM:
3237 location = (SV **) &GvFORM(dstr);
3238 default:
3239 location = &GvSV(dstr);
3240 import_flag = GVf_IMPORTED_SV;
3241 common:
b8473700 3242 if (intro) {
27242d61
NC
3243 if (stype == SVt_PVCV) {
3244 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3245 SvREFCNT_dec(GvCV(dstr));
3246 GvCV(dstr) = NULL;
3247 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3248 PL_sub_generation++;
3249 }
b8473700 3250 }
27242d61 3251 SAVEGENERICSV(*location);
b8473700
NC
3252 }
3253 else
27242d61
NC
3254 dref = *location;
3255 if (stype == SVt_PVCV && *location != sref) {
3256 CV* const cv = (CV*)*location;
b8473700
NC
3257 if (cv) {
3258 if (!GvCVGEN((GV*)dstr) &&
3259 (CvROOT(cv) || CvXSUB(cv)))
3260 {
3261 /* Redefining a sub - warning is mandatory if
3262 it was a const and its value changed. */
3263 if (CvCONST(cv) && CvCONST((CV*)sref)
3264 && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
6f207bd3 3265 NOOP;
b8473700
NC
3266 /* They are 2 constant subroutines generated from
3267 the same constant. This probably means that
3268 they are really the "same" proxy subroutine
3269 instantiated in 2 places. Most likely this is
3270 when a constant is exported twice. Don't warn.
3271 */
3272 }
3273 else if (ckWARN(WARN_REDEFINE)
3274 || (CvCONST(cv)
3275 && (!CvCONST((CV*)sref)
3276 || sv_cmp(cv_const_sv(cv),
3277 cv_const_sv((CV*)sref))))) {
3278 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10edeb5d
JH
3279 (const char *)
3280 (CvCONST(cv)
3281 ? "Constant subroutine %s::%s redefined"
3282 : "Subroutine %s::%s redefined"),
b8473700
NC
3283 HvNAME_get(GvSTASH((GV*)dstr)),
3284 GvENAME((GV*)dstr));
3285 }
3286 }
3287 if (!intro)
cbf82dd0
NC
3288 cv_ckproto_len(cv, (GV*)dstr,
3289 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3290 SvPOK(sref) ? SvCUR(sref) : 0);
b8473700 3291 }
b8473700
NC
3292 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3293 GvASSUMECV_on(dstr);
3294 PL_sub_generation++;
3295 }
2440974c 3296 *location = sref;
3386d083
NC
3297 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3298 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3299 GvFLAGS(dstr) |= import_flag;
b8473700
NC
3300 }
3301 break;
3302 }
b37c2d43 3303 SvREFCNT_dec(dref);
b8473700
NC
3304 if (SvTAINTED(sstr))
3305 SvTAINT(dstr);
3306 return;
3307}
3308
8d6d96c1
HS
3309void
3310Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3311{
97aff369 3312 dVAR;
8990e307
LW
3313 register U32 sflags;
3314 register int dtype;
42d0e0b7 3315 register svtype stype;
463ee0b2 3316
79072805
LW
3317 if (sstr == dstr)
3318 return;
29f4f0ab
NC
3319
3320 if (SvIS_FREED(dstr)) {
3321 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
be2597df 3322 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
29f4f0ab 3323 }
765f542d 3324 SV_CHECK_THINKFIRST_COW_DROP(dstr);
79072805 3325 if (!sstr)
3280af22 3326 sstr = &PL_sv_undef;
29f4f0ab 3327 if (SvIS_FREED(sstr)) {
6c9570dc
MHM
3328 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3329 (void*)sstr, (void*)dstr);
29f4f0ab 3330 }
8990e307
LW
3331 stype = SvTYPE(sstr);
3332 dtype = SvTYPE(dstr);
79072805 3333
52944de8 3334 (void)SvAMAGIC_off(dstr);
7a5fa8a2 3335 if ( SvVOK(dstr) )
ece467f9
JP
3336 {
3337 /* need to nuke the magic */
3338 mg_free(dstr);
3339 SvRMAGICAL_off(dstr);
3340 }
9e7bc3e8 3341
463ee0b2 3342 /* There's a lot of redundancy below but we're going for speed here */
79072805 3343
8990e307 3344 switch (stype) {
79072805 3345 case SVt_NULL:
aece5585 3346 undef_sstr:
20408e3c
GS
3347 if (dtype != SVt_PVGV) {
3348 (void)SvOK_off(dstr);
3349 return;
3350 }
3351 break;
463ee0b2 3352 case SVt_IV:
aece5585
GA
3353 if (SvIOK(sstr)) {
3354 switch (dtype) {
3355 case SVt_NULL:
8990e307 3356 sv_upgrade(dstr, SVt_IV);
aece5585
GA
3357 break;
3358 case SVt_NV:
aece5585
GA
3359 case SVt_RV:
3360 case SVt_PV:
a0d0e21e 3361 sv_upgrade(dstr, SVt_PVIV);
aece5585 3362 break;
010be86b
NC
3363 case SVt_PVGV:
3364 goto end_of_first_switch;
aece5585
GA
3365 }
3366 (void)SvIOK_only(dstr);
45977657 3367 SvIV_set(dstr, SvIVX(sstr));
25da4f38
IZ
3368 if (SvIsUV(sstr))
3369 SvIsUV_on(dstr);
37c25af0
NC
3370 /* SvTAINTED can only be true if the SV has taint magic, which in
3371 turn means that the SV type is PVMG (or greater). This is the
3372 case statement for SVt_IV, so this cannot be true (whatever gcov
3373 may say). */
3374 assert(!SvTAINTED(sstr));
aece5585 3375 return;
8990e307 3376 }
aece5585
GA
3377 goto undef_sstr;
3378
463ee0b2 3379 case SVt_NV:
aece5585
GA
3380 if (SvNOK(sstr)) {
3381 switch (dtype) {
3382 case SVt_NULL:
3383 case SVt_IV:
8990e307 3384 sv_upgrade(dstr, SVt_NV);
aece5585
GA
3385 break;
3386 case SVt_RV:
3387 case SVt_PV:
3388 case SVt_PVIV:
a0d0e21e 3389 sv_upgrade(dstr, SVt_PVNV);
aece5585 3390 break;
010be86b
NC
3391 case SVt_PVGV:
3392 goto end_of_first_switch;
aece5585 3393 }
9d6ce603 3394 SvNV_set(dstr, SvNVX(sstr));
aece5585 3395 (void)SvNOK_only(dstr);
37c25af0
NC
3396 /* SvTAINTED can only be true if the SV has taint magic, which in
3397 turn means that the SV type is PVMG (or greater). This is the
3398 case statement for SVt_NV, so this cannot be true (whatever gcov
3399 may say). */
3400 assert(!SvTAINTED(sstr));
aece5585 3401 return;
8990e307 3402 }
aece5585
GA
3403 goto undef_sstr;
3404
ed6116ce 3405 case SVt_RV:
8990e307 3406 if (dtype < SVt_RV)
ed6116ce 3407 sv_upgrade(dstr, SVt_RV);
ed6116ce 3408 break;
fc36a67e 3409 case SVt_PVFM:
f8c7b90f 3410#ifdef PERL_OLD_COPY_ON_WRITE
d89fc664
NC
3411 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3412 if (dtype < SVt_PVIV)
3413 sv_upgrade(dstr, SVt_PVIV);
3414 break;
3415 }
3416 /* Fall through */
3417#endif
3418 case SVt_PV:
8990e307 3419 if (dtype < SVt_PV)
463ee0b2 3420 sv_upgrade(dstr, SVt_PV);
463ee0b2
LW
3421 break;
3422 case SVt_PVIV:
8990e307 3423 if (dtype < SVt_PVIV)
463ee0b2 3424 sv_upgrade(dstr, SVt_PVIV);
463ee0b2
LW
3425 break;
3426 case SVt_PVNV:
8990e307 3427 if (dtype < SVt_PVNV)
463ee0b2 3428 sv_upgrade(dstr, SVt_PVNV);
463ee0b2 3429 break;
489f7bfe 3430 default:
a3b680e6
AL
3431 {
3432 const char * const type = sv_reftype(sstr,0);
533c011a 3433 if (PL_op)
a3b680e6 3434 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
4633a7c4 3435 else
a3b680e6
AL
3436 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3437 }
4633a7c4
LW
3438 break;
3439
cecf5685 3440 /* case SVt_BIND: */
39cb70dc 3441 case SVt_PVLV:
79072805 3442 case SVt_PVGV:
cecf5685 3443 if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
d4c19fe8 3444 glob_assign_glob(dstr, sstr, dtype);
b8c701c1 3445 return;
79072805 3446 }
cecf5685 3447 /* SvVALID means that this PVGV is playing at being an FBM. */
5f66b61c 3448 /*FALLTHROUGH*/
79072805 3449
489f7bfe 3450 case SVt_PVMG:
8d6d96c1 3451 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
973f89ab 3452 mg_get(sstr);
1d9c78c6 3453 if (SvTYPE(sstr) != stype) {
973f89ab 3454 stype = SvTYPE(sstr);
cecf5685 3455 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
d4c19fe8 3456 glob_assign_glob(dstr, sstr, dtype);
b8c701c1
NC
3457 return;
3458 }
973f89ab
CS
3459 }
3460 }
ded42b9f 3461 if (stype == SVt_PVLV)
862a34c6 3462 SvUPGRADE(dstr, SVt_PVNV);
ded42b9f 3463 else
42d0e0b7 3464 SvUPGRADE(dstr, (svtype)stype);
79072805 3465 }
010be86b 3466 end_of_first_switch:
79072805 3467
ff920335
NC
3468 /* dstr may have been upgraded. */
3469 dtype = SvTYPE(dstr);
8990e307
LW
3470 sflags = SvFLAGS(sstr);
3471
ba2fdce6 3472 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
85324b4d
NC
3473 /* Assigning to a subroutine sets the prototype. */
3474 if (SvOK(sstr)) {
3475 STRLEN len;
3476 const char *const ptr = SvPV_const(sstr, len);
3477
3478 SvGROW(dstr, len + 1);
3479 Copy(ptr, SvPVX(dstr), len + 1, char);
3480 SvCUR_set(dstr, len);
fcddd32e 3481 SvPOK_only(dstr);
ba2fdce6 3482 SvFLAGS(dstr) |= sflags & SVf_UTF8;
85324b4d
NC
3483 } else {
3484 SvOK_off(dstr);
3485 }
ba2fdce6
NC
3486 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3487 const char * const type = sv_reftype(dstr,0);
3488 if (PL_op)
3489 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_NAME(PL_op));
3490 else
3491 Perl_croak(aTHX_ "Cannot copy to %s", type);
85324b4d 3492 } else if (sflags & SVf_ROK) {
cecf5685
NC
3493 if (isGV_with_GP(dstr) && dtype == SVt_PVGV
3494 && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
acaa9288
NC
3495 sstr = SvRV(sstr);
3496 if (sstr == dstr) {
3497 if (GvIMPORTED(dstr) != GVf_IMPORTED
3498 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3499 {
3500 GvIMPORTED_on(dstr);
3501 }
3502 GvMULTI_on(dstr);
3503 return;
3504 }
d4c19fe8 3505 glob_assign_glob(dstr, sstr, dtype);
acaa9288
NC
3506 return;
3507 }
3508
8990e307 3509 if (dtype >= SVt_PV) {
b8c701c1 3510 if (dtype == SVt_PVGV) {
d4c19fe8 3511 glob_assign_ref(dstr, sstr);
b8c701c1
NC
3512 return;
3513 }
3f7c398e 3514 if (SvPVX_const(dstr)) {
8bd4d4c5 3515 SvPV_free(dstr);
b162af07
SP
3516 SvLEN_set(dstr, 0);
3517 SvCUR_set(dstr, 0);
a0d0e21e 3518 }
8990e307 3519 }
a0d0e21e 3520 (void)SvOK_off(dstr);
b162af07 3521 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
96d4b0ee 3522 SvFLAGS(dstr) |= sflags & SVf_ROK;
dfd48732
NC
3523 assert(!(sflags & SVp_NOK));
3524 assert(!(sflags & SVp_IOK));
3525 assert(!(sflags & SVf_NOK));
3526 assert(!(sflags & SVf_IOK));
ed6116ce 3527 }
cecf5685 3528 else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
c0c44674
NC
3529 if (!(sflags & SVf_OK)) {
3530 if (ckWARN(WARN_MISC))
3531 Perl_warner(aTHX_ packWARN(WARN_MISC),
3532 "Undefined value assigned to typeglob");
3533 }
3534 else {
3535 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
3536 if (dstr != (SV*)gv) {
3537 if (GvGP(dstr))
3538 gp_free((GV*)dstr);
3539 GvGP(dstr) = gp_ref(GvGP(gv));
3540 }
3541 }
3542 }
8990e307 3543 else if (sflags & SVp_POK) {
765f542d 3544 bool isSwipe = 0;
79072805
LW
3545
3546 /*
3547 * Check to see if we can just swipe the string. If so, it's a
3548 * possible small lose on short strings, but a big win on long ones.
3f7c398e
SP
3549 * It might even be a win on short strings if SvPVX_const(dstr)
3550 * has to be allocated and SvPVX_const(sstr) has to be freed.
34482cd6
NC
3551 * Likewise if we can set up COW rather than doing an actual copy, we
3552 * drop to the else clause, as the swipe code and the COW setup code
3553 * have much in common.
79072805
LW
3554 */
3555
120fac95
NC
3556 /* Whichever path we take through the next code, we want this true,
3557 and doing it now facilitates the COW check. */
3558 (void)SvPOK_only(dstr);
3559
765f542d 3560 if (
34482cd6
NC
3561 /* If we're already COW then this clause is not true, and if COW
3562 is allowed then we drop down to the else and make dest COW
3563 with us. If caller hasn't said that we're allowed to COW
3564 shared hash keys then we don't do the COW setup, even if the
3565 source scalar is a shared hash key scalar. */
3566 (((flags & SV_COW_SHARED_HASH_KEYS)
3567 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
3568 : 1 /* If making a COW copy is forbidden then the behaviour we
3569 desire is as if the source SV isn't actually already
3570 COW, even if it is. So we act as if the source flags
3571 are not COW, rather than actually testing them. */
3572 )
f8c7b90f 3573#ifndef PERL_OLD_COPY_ON_WRITE
34482cd6
NC
3574 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
3575 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
3576 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
3577 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
3578 but in turn, it's somewhat dead code, never expected to go
3579 live, but more kept as a placeholder on how to do it better
3580 in a newer implementation. */
3581 /* If we are COW and dstr is a suitable target then we drop down
3582 into the else and make dest a COW of us. */
b8f9541a
NC
3583 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3584#endif
3585 )
765f542d 3586 &&
765f542d
NC
3587 !(isSwipe =
3588 (sflags & SVs_TEMP) && /* slated for free anyway? */
3589 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
5fcdf167
NC
3590 (!(flags & SV_NOSTEAL)) &&
3591 /* and we're allowed to steal temps */
765f542d
NC
3592 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3593 SvLEN(sstr) && /* and really is a string */
645c22ef 3594 /* and won't be needed again, potentially */
765f542d 3595 !(PL_op && PL_op->op_type == OP_AASSIGN))
f8c7b90f 3596#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 3597 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
120fac95 3598 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
765f542d
NC
3599 && SvTYPE(sstr) >= SVt_PVIV)
3600#endif
3601 ) {
3602 /* Failed the swipe test, and it's not a shared hash key either.
3603 Have to copy the string. */
3604 STRLEN len = SvCUR(sstr);
3605 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3f7c398e 3606 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
765f542d
NC
3607 SvCUR_set(dstr, len);
3608 *SvEND(dstr) = '\0';
765f542d 3609 } else {
f8c7b90f 3610 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
765f542d 3611 be true in here. */
765f542d
NC
3612 /* Either it's a shared hash key, or it's suitable for
3613 copy-on-write or we can swipe the string. */
46187eeb 3614 if (DEBUG_C_TEST) {
ed252734 3615 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
e419cbc5
NC
3616 sv_dump(sstr);
3617 sv_dump(dstr);
46187eeb 3618 }
f8c7b90f 3619#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
3620 if (!isSwipe) {
3621 /* I believe I should acquire a global SV mutex if
3622 it's a COW sv (not a shared hash key) to stop
3623 it going un copy-on-write.
3624 If the source SV has gone un copy on write between up there
3625 and down here, then (assert() that) it is of the correct
3626 form to make it copy on write again */
3627 if ((sflags & (SVf_FAKE | SVf_READONLY))
3628 != (SVf_FAKE | SVf_READONLY)) {
3629 SvREADONLY_on(sstr);
3630 SvFAKE_on(sstr);
3631 /* Make the source SV into a loop of 1.
3632 (about to become 2) */
a29f6d03 3633 SV_COW_NEXT_SV_SET(sstr, sstr);
765f542d
NC
3634 }
3635 }
3636#endif
3637 /* Initial code is common. */
94010e71
NC
3638 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
3639 SvPV_free(dstr);
79072805 3640 }
765f542d 3641
765f542d
NC
3642 if (!isSwipe) {
3643 /* making another shared SV. */
3644 STRLEN cur = SvCUR(sstr);
3645 STRLEN len = SvLEN(sstr);
f8c7b90f 3646#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 3647 if (len) {
b8f9541a 3648 assert (SvTYPE(dstr) >= SVt_PVIV);
765f542d
NC
3649 /* SvIsCOW_normal */
3650 /* splice us in between source and next-after-source. */
a29f6d03
NC
3651 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3652 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 3653 SvPV_set(dstr, SvPVX_mutable(sstr));
a604c751
NC
3654 } else
3655#endif
3656 {
765f542d 3657 /* SvIsCOW_shared_hash */
46187eeb
NC
3658 DEBUG_C(PerlIO_printf(Perl_debug_log,
3659 "Copy on write: Sharing hash\n"));
b8f9541a 3660
bdd68bc3 3661 assert (SvTYPE(dstr) >= SVt_PV);
765f542d 3662 SvPV_set(dstr,
d1db91c6 3663 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
bdd68bc3 3664 }
87a1ef3d
SP
3665 SvLEN_set(dstr, len);
3666 SvCUR_set(dstr, cur);
765f542d
NC
3667 SvREADONLY_on(dstr);
3668 SvFAKE_on(dstr);
3669 /* Relesase a global SV mutex. */
3670 }
3671 else
765f542d 3672 { /* Passes the swipe test. */
78d1e721 3673 SvPV_set(dstr, SvPVX_mutable(sstr));
765f542d
NC
3674 SvLEN_set(dstr, SvLEN(sstr));
3675 SvCUR_set(dstr, SvCUR(sstr));
3676
3677 SvTEMP_off(dstr);
3678 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
6136c704 3679 SvPV_set(sstr, NULL);
765f542d
NC
3680 SvLEN_set(sstr, 0);
3681 SvCUR_set(sstr, 0);
3682 SvTEMP_off(sstr);
3683 }
3684 }
8990e307 3685 if (sflags & SVp_NOK) {
9d6ce603 3686 SvNV_set(dstr, SvNVX(sstr));
79072805 3687 }
8990e307 3688 if (sflags & SVp_IOK) {
88555484 3689 SvOOK_off(dstr);
23525414
NC
3690 SvIV_set(dstr, SvIVX(sstr));
3691 /* Must do this otherwise some other overloaded use of 0x80000000
3692 gets confused. I guess SVpbm_VALID */
2b1c7e3e 3693 if (sflags & SVf_IVisUV)
25da4f38 3694 SvIsUV_on(dstr);
79072805 3695 }
96d4b0ee 3696 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4f2da183 3697 {
b0a11fe1 3698 const MAGIC * const smg = SvVSTRING_mg(sstr);
4f2da183
NC
3699 if (smg) {
3700 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3701 smg->mg_ptr, smg->mg_len);
3702 SvRMAGICAL_on(dstr);
3703 }
7a5fa8a2 3704 }
79072805 3705 }
5d581361 3706 else if (sflags & (SVp_IOK|SVp_NOK)) {
c2468cc7 3707 (void)SvOK_off(dstr);
96d4b0ee 3708 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
5d581361
NC
3709 if (sflags & SVp_IOK) {
3710 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3711 SvIV_set(dstr, SvIVX(sstr));
3712 }
3332b3c1 3713 if (sflags & SVp_NOK) {
9d6ce603 3714 SvNV_set(dstr, SvNVX(sstr));
3332b3c1
JH
3715 }
3716 }
79072805 3717 else {
f7877b28 3718 if (isGV_with_GP(sstr)) {
180488f8
NC
3719 /* This stringification rule for globs is spread in 3 places.
3720 This feels bad. FIXME. */
3721 const U32 wasfake = sflags & SVf_FAKE;
3722
3723 /* FAKE globs can get coerced, so need to turn this off
3724 temporarily if it is on. */
3725 SvFAKE_off(sstr);
3726 gv_efullname3(dstr, (GV *)sstr, "*");
3727 SvFLAGS(sstr) |= wasfake;
3728 }
20408e3c
GS
3729 else
3730 (void)SvOK_off(dstr);
a0d0e21e 3731 }
27c9684d
AP
3732 if (SvTAINTED(sstr))
3733 SvTAINT(dstr);
79072805
LW
3734}
3735
954c1994
GS
3736/*
3737=for apidoc sv_setsv_mg
3738
3739Like C<sv_setsv>, but also handles 'set' magic.
3740
3741=cut
3742*/
3743
79072805 3744void
864dbfa3 3745Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
ef50df4b
GS
3746{
3747 sv_setsv(dstr,sstr);
3748 SvSETMAGIC(dstr);
3749}
3750
f8c7b90f 3751#ifdef PERL_OLD_COPY_ON_WRITE
ed252734
NC
3752SV *
3753Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3754{
3755 STRLEN cur = SvCUR(sstr);
3756 STRLEN len = SvLEN(sstr);
3757 register char *new_pv;
3758
3759 if (DEBUG_C_TEST) {
3760 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
6c9570dc 3761 (void*)sstr, (void*)dstr);
ed252734
NC
3762 sv_dump(sstr);
3763 if (dstr)
3764 sv_dump(dstr);
3765 }
3766
3767 if (dstr) {
3768 if (SvTHINKFIRST(dstr))
3769 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3f7c398e
SP
3770 else if (SvPVX_const(dstr))
3771 Safefree(SvPVX_const(dstr));
ed252734
NC
3772 }
3773 else
3774 new_SV(dstr);
862a34c6 3775 SvUPGRADE(dstr, SVt_PVIV);
ed252734
NC
3776
3777 assert (SvPOK(sstr));
3778 assert (SvPOKp(sstr));
3779 assert (!SvIOK(sstr));
3780 assert (!SvIOKp(sstr));
3781 assert (!SvNOK(sstr));
3782 assert (!SvNOKp(sstr));
3783
3784 if (SvIsCOW(sstr)) {
3785
3786 if (SvLEN(sstr) == 0) {
3787 /* source is a COW shared hash key. */
ed252734
NC
3788 DEBUG_C(PerlIO_printf(Perl_debug_log,
3789 "Fast copy on write: Sharing hash\n"));
d1db91c6 3790 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
ed252734
NC
3791 goto common_exit;
3792 }
3793 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3794 } else {
3795 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
862a34c6 3796 SvUPGRADE(sstr, SVt_PVIV);
ed252734
NC
3797 SvREADONLY_on(sstr);
3798 SvFAKE_on(sstr);
3799 DEBUG_C(PerlIO_printf(Perl_debug_log,
3800 "Fast copy on write: Converting sstr to COW\n"));
3801 SV_COW_NEXT_SV_SET(dstr, sstr);
3802 }
3803 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 3804 new_pv = SvPVX_mutable(sstr);
ed252734
NC
3805
3806 common_exit:
3807 SvPV_set(dstr, new_pv);
3808 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
3809 if (SvUTF8(sstr))
3810 SvUTF8_on(dstr);
87a1ef3d
SP
3811 SvLEN_set(dstr, len);
3812 SvCUR_set(dstr, cur);
ed252734
NC
3813 if (DEBUG_C_TEST) {
3814 sv_dump(dstr);
3815 }
3816 return dstr;
3817}
3818#endif
3819
954c1994
GS
3820/*
3821=for apidoc sv_setpvn
3822
3823Copies a string into an SV. The C<len> parameter indicates the number of
9e09f5f2
MHM
3824bytes to be copied. If the C<ptr> argument is NULL the SV will become
3825undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
954c1994
GS
3826
3827=cut
3828*/
3829
ef50df4b 3830void
864dbfa3 3831Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
79072805 3832{
97aff369 3833 dVAR;
c6f8c383 3834 register char *dptr;
22c522df 3835
765f542d 3836 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 3837 if (!ptr) {
a0d0e21e 3838 (void)SvOK_off(sv);
463ee0b2
LW
3839 return;
3840 }
22c522df
JH
3841 else {
3842 /* len is STRLEN which is unsigned, need to copy to signed */
a3b680e6 3843 const IV iv = len;
9c5ffd7c
JH
3844 if (iv < 0)
3845 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
22c522df 3846 }
862a34c6 3847 SvUPGRADE(sv, SVt_PV);
c6f8c383 3848
5902b6a9 3849 dptr = SvGROW(sv, len + 1);
c6f8c383
GA
3850 Move(ptr,dptr,len,char);
3851 dptr[len] = '\0';
79072805 3852 SvCUR_set(sv, len);
1aa99e6b 3853 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 3854 SvTAINT(sv);
79072805
LW
3855}
3856
954c1994
GS
3857/*
3858=for apidoc sv_setpvn_mg
3859
3860Like C<sv_setpvn>, but also handles 'set' magic.
3861
3862=cut
3863*/
3864
79072805 3865void
864dbfa3 3866Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
ef50df4b
GS
3867{
3868 sv_setpvn(sv,ptr,len);
3869 SvSETMAGIC(sv);
3870}
3871
954c1994
GS
3872/*
3873=for apidoc sv_setpv
3874
3875Copies a string into an SV. The string must be null-terminated. Does not
3876handle 'set' magic. See C<sv_setpv_mg>.
3877
3878=cut
3879*/
3880
ef50df4b 3881void
864dbfa3 3882Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
79072805 3883{
97aff369 3884 dVAR;
79072805
LW
3885 register STRLEN len;
3886
765f542d 3887 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 3888 if (!ptr) {
a0d0e21e 3889 (void)SvOK_off(sv);
463ee0b2
LW
3890 return;
3891 }
79072805 3892 len = strlen(ptr);
862a34c6 3893 SvUPGRADE(sv, SVt_PV);
c6f8c383 3894
79072805 3895 SvGROW(sv, len + 1);
463ee0b2 3896 Move(ptr,SvPVX(sv),len+1,char);
79072805 3897 SvCUR_set(sv, len);
1aa99e6b 3898 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2
LW
3899 SvTAINT(sv);
3900}
3901
954c1994
GS
3902/*
3903=for apidoc sv_setpv_mg
3904
3905Like C<sv_setpv>, but also handles 'set' magic.
3906
3907=cut
3908*/
3909
463ee0b2 3910void
864dbfa3 3911Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
ef50df4b
GS
3912{
3913 sv_setpv(sv,ptr);
3914 SvSETMAGIC(sv);
3915}
3916
954c1994 3917/*
47518d95 3918=for apidoc sv_usepvn_flags
954c1994 3919
794a0d33
JH
3920Tells an SV to use C<ptr> to find its string value. Normally the
3921string is stored inside the SV but sv_usepvn allows the SV to use an
3922outside string. The C<ptr> should point to memory that was allocated
c1c21316
NC
3923by C<malloc>. The string length, C<len>, must be supplied. By default
3924this function will realloc (i.e. move) the memory pointed to by C<ptr>,
794a0d33
JH
3925so that pointer should not be freed or used by the programmer after
3926giving it to sv_usepvn, and neither should any pointers from "behind"
c1c21316
NC
3927that pointer (e.g. ptr + 1) be used.
3928
3929If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
3930SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
cbf82dd0 3931will be skipped. (i.e. the buffer is actually at least 1 byte longer than
c1c21316 3932C<len>, and already meets the requirements for storing in C<SvPVX>)
954c1994
GS
3933
3934=cut
3935*/
3936
ef50df4b 3937void
47518d95 3938Perl_sv_usepvn_flags(pTHX_ SV *sv, char *ptr, STRLEN len, U32 flags)
463ee0b2 3939{
97aff369 3940 dVAR;
1936d2a7 3941 STRLEN allocate;
765f542d 3942 SV_CHECK_THINKFIRST_COW_DROP(sv);
862a34c6 3943 SvUPGRADE(sv, SVt_PV);
463ee0b2 3944 if (!ptr) {
a0d0e21e 3945 (void)SvOK_off(sv);
47518d95
NC
3946 if (flags & SV_SMAGIC)
3947 SvSETMAGIC(sv);
463ee0b2
LW
3948 return;
3949 }
3f7c398e 3950 if (SvPVX_const(sv))
8bd4d4c5 3951 SvPV_free(sv);
1936d2a7 3952
0b7042f9 3953#ifdef DEBUGGING
2e90b4cd
NC
3954 if (flags & SV_HAS_TRAILING_NUL)
3955 assert(ptr[len] == '\0');
0b7042f9 3956#endif
2e90b4cd 3957
c1c21316 3958 allocate = (flags & SV_HAS_TRAILING_NUL)
8f01dc65 3959 ? len + 1: PERL_STRLEN_ROUNDUP(len + 1);
cbf82dd0
NC
3960 if (flags & SV_HAS_TRAILING_NUL) {
3961 /* It's long enough - do nothing.
3962 Specfically Perl_newCONSTSUB is relying on this. */
3963 } else {
69d25b4f 3964#ifdef DEBUGGING
69d25b4f 3965 /* Force a move to shake out bugs in callers. */
10edeb5d 3966 char *new_ptr = (char*)safemalloc(allocate);
69d25b4f
NC
3967 Copy(ptr, new_ptr, len, char);
3968 PoisonFree(ptr,len,char);
3969 Safefree(ptr);
3970 ptr = new_ptr;
69d25b4f 3971#else
10edeb5d 3972 ptr = (char*) saferealloc (ptr, allocate);
69d25b4f 3973#endif
cbf82dd0 3974 }
f880fe2f 3975 SvPV_set(sv, ptr);
463ee0b2 3976 SvCUR_set(sv, len);
1936d2a7 3977 SvLEN_set(sv, allocate);
c1c21316
NC
3978 if (!(flags & SV_HAS_TRAILING_NUL)) {
3979 *SvEND(sv) = '\0';
3980 }
1aa99e6b 3981 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 3982 SvTAINT(sv);
47518d95
NC
3983 if (flags & SV_SMAGIC)
3984 SvSETMAGIC(sv);
ef50df4b
GS
3985}
3986
f8c7b90f 3987#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
3988/* Need to do this *after* making the SV normal, as we need the buffer
3989 pointer to remain valid until after we've copied it. If we let go too early,
3990 another thread could invalidate it by unsharing last of the same hash key
3991 (which it can do by means other than releasing copy-on-write Svs)
3992 or by changing the other copy-on-write SVs in the loop. */
3993STATIC void
5302ffd4 3994S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
765f542d 3995{
5302ffd4 3996 { /* this SV was SvIsCOW_normal(sv) */
765f542d 3997 /* we need to find the SV pointing to us. */
cf5629ad 3998 SV *current = SV_COW_NEXT_SV(after);
7a5fa8a2 3999
765f542d
NC
4000 if (current == sv) {
4001 /* The SV we point to points back to us (there were only two of us
4002 in the loop.)
4003 Hence other SV is no longer copy on write either. */
4004 SvFAKE_off(after);
4005 SvREADONLY_off(after);
4006 } else {
4007 /* We need to follow the pointers around the loop. */
4008 SV *next;
4009 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4010 assert (next);
4011 current = next;
4012 /* don't loop forever if the structure is bust, and we have
4013 a pointer into a closed loop. */
4014 assert (current != after);
3f7c398e 4015 assert (SvPVX_const(current) == pvx);
765f542d
NC
4016 }
4017 /* Make the SV before us point to the SV after us. */
a29f6d03 4018 SV_COW_NEXT_SV_SET(current, after);
765f542d 4019 }
765f542d
NC
4020 }
4021}
765f542d 4022#endif
645c22ef
DM
4023/*
4024=for apidoc sv_force_normal_flags
4025
4026Undo various types of fakery on an SV: if the PV is a shared string, make
4027a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
765f542d
NC
4028an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4029we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4030then a copy-on-write scalar drops its PV buffer (if any) and becomes
4031SvPOK_off rather than making a copy. (Used where this scalar is about to be
d3050d9d 4032set to some other value.) In addition, the C<flags> parameter gets passed to
765f542d
NC
4033C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4034with flags set to 0.
645c22ef
DM
4035
4036=cut
4037*/
4038
6fc92669 4039void
840a7b70 4040Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
0f15f207 4041{
97aff369 4042 dVAR;
f8c7b90f 4043#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4044 if (SvREADONLY(sv)) {
4045 /* At this point I believe I should acquire a global SV mutex. */
4046 if (SvFAKE(sv)) {
b64e5050 4047 const char * const pvx = SvPVX_const(sv);
a28509cc
AL
4048 const STRLEN len = SvLEN(sv);
4049 const STRLEN cur = SvCUR(sv);
5302ffd4
NC
4050 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4051 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4052 we'll fail an assertion. */
4053 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4054
46187eeb
NC
4055 if (DEBUG_C_TEST) {
4056 PerlIO_printf(Perl_debug_log,
4057 "Copy on write: Force normal %ld\n",
4058 (long) flags);
e419cbc5 4059 sv_dump(sv);
46187eeb 4060 }
765f542d
NC
4061 SvFAKE_off(sv);
4062 SvREADONLY_off(sv);
9f653bb5 4063 /* This SV doesn't own the buffer, so need to Newx() a new one: */
6136c704 4064 SvPV_set(sv, NULL);
87a1ef3d 4065 SvLEN_set(sv, 0);
765f542d
NC
4066 if (flags & SV_COW_DROP_PV) {
4067 /* OK, so we don't need to copy our buffer. */
4068 SvPOK_off(sv);
4069 } else {
4070 SvGROW(sv, cur + 1);
4071 Move(pvx,SvPVX(sv),cur,char);
87a1ef3d 4072 SvCUR_set(sv, cur);
765f542d
NC
4073 *SvEND(sv) = '\0';
4074 }
5302ffd4
NC
4075 if (len) {
4076 sv_release_COW(sv, pvx, next);
4077 } else {
4078 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4079 }
46187eeb 4080 if (DEBUG_C_TEST) {
e419cbc5 4081 sv_dump(sv);
46187eeb 4082 }
765f542d 4083 }
923e4eb5 4084 else if (IN_PERL_RUNTIME)
765f542d
NC
4085 Perl_croak(aTHX_ PL_no_modify);
4086 /* At this point I believe that I can drop the global SV mutex. */
4087 }
4088#else
2213622d 4089 if (SvREADONLY(sv)) {
1c846c1f 4090 if (SvFAKE(sv)) {
b64e5050 4091 const char * const pvx = SvPVX_const(sv);
66a1b24b 4092 const STRLEN len = SvCUR(sv);
10bcdfd6
NC
4093 SvFAKE_off(sv);
4094 SvREADONLY_off(sv);
bd61b366 4095 SvPV_set(sv, NULL);
66a1b24b 4096 SvLEN_set(sv, 0);
1c846c1f 4097 SvGROW(sv, len + 1);
706aa1c9 4098 Move(pvx,SvPVX(sv),len,char);
1c846c1f 4099 *SvEND(sv) = '\0';
bdd68bc3 4100 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
1c846c1f 4101 }
923e4eb5 4102 else if (IN_PERL_RUNTIME)
cea2e8a9 4103 Perl_croak(aTHX_ PL_no_modify);
0f15f207 4104 }
765f542d 4105#endif
2213622d 4106 if (SvROK(sv))
840a7b70 4107 sv_unref_flags(sv, flags);
6fc92669
GS
4108 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4109 sv_unglob(sv);
0f15f207 4110}
1c846c1f 4111
645c22ef 4112/*
954c1994
GS
4113=for apidoc sv_chop
4114
1c846c1f 4115Efficient removal of characters from the beginning of the string buffer.
954c1994
GS
4116SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4117the string buffer. The C<ptr> becomes the first character of the adjusted
645c22ef 4118string. Uses the "OOK hack".
3f7c398e 4119Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
31869a79 4120refer to the same chunk of data.
954c1994
GS
4121
4122=cut
4123*/
4124
79072805 4125void
f54cb97a 4126Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
79072805
LW
4127{
4128 register STRLEN delta;
a0d0e21e 4129 if (!ptr || !SvPOKp(sv))
79072805 4130 return;
3f7c398e 4131 delta = ptr - SvPVX_const(sv);
2213622d 4132 SV_CHECK_THINKFIRST(sv);
79072805
LW
4133 if (SvTYPE(sv) < SVt_PVIV)
4134 sv_upgrade(sv,SVt_PVIV);
4135
4136 if (!SvOOK(sv)) {
50483b2c 4137 if (!SvLEN(sv)) { /* make copy of shared string */
3f7c398e 4138 const char *pvx = SvPVX_const(sv);
a28509cc 4139 const STRLEN len = SvCUR(sv);
50483b2c 4140 SvGROW(sv, len + 1);
706aa1c9 4141 Move(pvx,SvPVX(sv),len,char);
50483b2c
JD
4142 *SvEND(sv) = '\0';
4143 }
45977657 4144 SvIV_set(sv, 0);
a4bfb290
AB
4145 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4146 and we do that anyway inside the SvNIOK_off
4147 */
7a5fa8a2 4148 SvFLAGS(sv) |= SVf_OOK;
79072805 4149 }
a4bfb290 4150 SvNIOK_off(sv);
b162af07
SP
4151 SvLEN_set(sv, SvLEN(sv) - delta);
4152 SvCUR_set(sv, SvCUR(sv) - delta);
f880fe2f 4153 SvPV_set(sv, SvPVX(sv) + delta);
45977657 4154 SvIV_set(sv, SvIVX(sv) + delta);
79072805
LW
4155}
4156
954c1994
GS
4157/*
4158=for apidoc sv_catpvn
4159
4160Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4161C<len> indicates number of bytes to copy. If the SV has the UTF-8
4162status set, then the bytes appended should be valid UTF-8.
d5ce4a7c 4163Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
954c1994 4164
8d6d96c1
HS
4165=for apidoc sv_catpvn_flags
4166
4167Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4168C<len> indicates number of bytes to copy. If the SV has the UTF-8
4169status set, then the bytes appended should be valid UTF-8.
8d6d96c1
HS
4170If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4171appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4172in terms of this function.
4173
4174=cut
4175*/
4176
4177void
4178Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4179{
97aff369 4180 dVAR;
8d6d96c1 4181 STRLEN dlen;
fabdb6c0 4182 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
8d6d96c1 4183
8d6d96c1
HS
4184 SvGROW(dsv, dlen + slen + 1);
4185 if (sstr == dstr)
3f7c398e 4186 sstr = SvPVX_const(dsv);
8d6d96c1 4187 Move(sstr, SvPVX(dsv) + dlen, slen, char);
b162af07 4188 SvCUR_set(dsv, SvCUR(dsv) + slen);
8d6d96c1
HS
4189 *SvEND(dsv) = '\0';
4190 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4191 SvTAINT(dsv);
bddd5118
NC
4192 if (flags & SV_SMAGIC)
4193 SvSETMAGIC(dsv);
79072805
LW
4194}
4195
954c1994 4196/*
954c1994
GS
4197=for apidoc sv_catsv
4198
13e8c8e3
JH
4199Concatenates the string from SV C<ssv> onto the end of the string in
4200SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4201not 'set' magic. See C<sv_catsv_mg>.
954c1994 4202
8d6d96c1
HS
4203=for apidoc sv_catsv_flags
4204
4205Concatenates the string from SV C<ssv> onto the end of the string in
4206SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4207bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4208and C<sv_catsv_nomg> are implemented in terms of this function.
4209
4210=cut */
4211
ef50df4b 4212void
8d6d96c1 4213Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
79072805 4214{
97aff369 4215 dVAR;
bddd5118 4216 if (ssv) {
00b6aa41
AL
4217 STRLEN slen;
4218 const char *spv = SvPV_const(ssv, slen);
4219 if (spv) {
bddd5118
NC
4220 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4221 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4222 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4223 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4224 dsv->sv_flags doesn't have that bit set.
4fd84b44 4225 Andy Dougherty 12 Oct 2001
bddd5118
NC
4226 */
4227 const I32 sutf8 = DO_UTF8(ssv);
4228 I32 dutf8;
13e8c8e3 4229
bddd5118
NC
4230 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4231 mg_get(dsv);
4232 dutf8 = DO_UTF8(dsv);
8d6d96c1 4233
bddd5118
NC
4234 if (dutf8 != sutf8) {
4235 if (dutf8) {
4236 /* Not modifying source SV, so taking a temporary copy. */
00b6aa41 4237 SV* const csv = sv_2mortal(newSVpvn(spv, slen));
13e8c8e3 4238
bddd5118
NC
4239 sv_utf8_upgrade(csv);
4240 spv = SvPV_const(csv, slen);
4241 }
4242 else
4243 sv_utf8_upgrade_nomg(dsv);
13e8c8e3 4244 }
bddd5118 4245 sv_catpvn_nomg(dsv, spv, slen);
e84ff256 4246 }
560a288e 4247 }
bddd5118
NC
4248 if (flags & SV_SMAGIC)
4249 SvSETMAGIC(dsv);
79072805
LW
4250}
4251
954c1994 4252/*
954c1994
GS
4253=for apidoc sv_catpv
4254
4255Concatenates the string onto the end of the string which is in the SV.
1e54db1a
JH
4256If the SV has the UTF-8 status set, then the bytes appended should be
4257valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
954c1994 4258
d5ce4a7c 4259=cut */
954c1994 4260
ef50df4b 4261void
0c981600 4262Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
79072805 4263{
97aff369 4264 dVAR;
79072805 4265 register STRLEN len;
463ee0b2 4266 STRLEN tlen;
748a9306 4267 char *junk;
79072805 4268
0c981600 4269 if (!ptr)
79072805 4270 return;
748a9306 4271 junk = SvPV_force(sv, tlen);
0c981600 4272 len = strlen(ptr);
463ee0b2 4273 SvGROW(sv, tlen + len + 1);
0c981600 4274 if (ptr == junk)
3f7c398e 4275 ptr = SvPVX_const(sv);
0c981600 4276 Move(ptr,SvPVX(sv)+tlen,len+1,char);
b162af07 4277 SvCUR_set(sv, SvCUR(sv) + len);
d41ff1b8 4278 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4279 SvTAINT(sv);
79072805
LW
4280}
4281
954c1994
GS
4282/*
4283=for apidoc sv_catpv_mg
4284
4285Like C<sv_catpv>, but also handles 'set' magic.
4286
4287=cut
4288*/
4289
ef50df4b 4290void
0c981600 4291Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
ef50df4b 4292{
0c981600 4293 sv_catpv(sv,ptr);
ef50df4b
GS
4294 SvSETMAGIC(sv);
4295}
4296
645c22ef
DM
4297/*
4298=for apidoc newSV
4299
561b68a9
SH
4300Creates a new SV. A non-zero C<len> parameter indicates the number of
4301bytes of preallocated string space the SV should have. An extra byte for a
4302trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4303space is allocated.) The reference count for the new SV is set to 1.
4304
4305In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4306parameter, I<x>, a debug aid which allowed callers to identify themselves.
4307This aid has been superseded by a new build option, PERL_MEM_LOG (see
4308L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4309modules supporting older perls.
645c22ef
DM
4310
4311=cut
4312*/
4313
79072805 4314SV *
864dbfa3 4315Perl_newSV(pTHX_ STRLEN len)
79072805 4316{
97aff369 4317 dVAR;
79072805 4318 register SV *sv;
1c846c1f 4319
4561caa4 4320 new_SV(sv);
79072805
LW
4321 if (len) {
4322 sv_upgrade(sv, SVt_PV);
4323 SvGROW(sv, len + 1);
4324 }
4325 return sv;
4326}
954c1994 4327/*
92110913 4328=for apidoc sv_magicext
954c1994 4329
68795e93 4330Adds magic to an SV, upgrading it if necessary. Applies the
2d8d5d5a 4331supplied vtable and returns a pointer to the magic added.
92110913 4332
2d8d5d5a
SH
4333Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4334In particular, you can add magic to SvREADONLY SVs, and add more than
4335one instance of the same 'how'.
645c22ef 4336
2d8d5d5a
SH
4337If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4338stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4339special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4340to contain an C<SV*> and is stored as-is with its REFCNT incremented.
92110913 4341
2d8d5d5a 4342(This is now used as a subroutine by C<sv_magic>.)
954c1994
GS
4343
4344=cut
4345*/
92110913 4346MAGIC *
53d44271 4347Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, const MGVTBL *vtable,
92110913 4348 const char* name, I32 namlen)
79072805 4349{
97aff369 4350 dVAR;
79072805 4351 MAGIC* mg;
68795e93 4352
7a7f3e45 4353 SvUPGRADE(sv, SVt_PVMG);
a02a5408 4354 Newxz(mg, 1, MAGIC);
79072805 4355 mg->mg_moremagic = SvMAGIC(sv);
b162af07 4356 SvMAGIC_set(sv, mg);
75f9d97a 4357
05f95b08
SB
4358 /* Sometimes a magic contains a reference loop, where the sv and
4359 object refer to each other. To prevent a reference loop that
4360 would prevent such objects being freed, we look for such loops
4361 and if we find one we avoid incrementing the object refcount.
87f0b213
JH
4362
4363 Note we cannot do this to avoid self-tie loops as intervening RV must
b5ccf5f2 4364 have its REFCNT incremented to keep it in existence.
87f0b213
JH
4365
4366 */
14befaf4
DM
4367 if (!obj || obj == sv ||
4368 how == PERL_MAGIC_arylen ||
4369 how == PERL_MAGIC_qr ||
8d2f4536 4370 how == PERL_MAGIC_symtab ||
75f9d97a
JH
4371 (SvTYPE(obj) == SVt_PVGV &&
4372 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4373 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
2628be26 4374 GvFORM(obj) == (CV*)sv)))
75f9d97a 4375 {
8990e307 4376 mg->mg_obj = obj;
75f9d97a 4377 }
85e6fe83 4378 else {
b37c2d43 4379 mg->mg_obj = SvREFCNT_inc_simple(obj);
85e6fe83
LW
4380 mg->mg_flags |= MGf_REFCOUNTED;
4381 }
b5ccf5f2
YST
4382
4383 /* Normal self-ties simply pass a null object, and instead of
4384 using mg_obj directly, use the SvTIED_obj macro to produce a
4385 new RV as needed. For glob "self-ties", we are tieing the PVIO
4386 with an RV obj pointing to the glob containing the PVIO. In
4387 this case, to avoid a reference loop, we need to weaken the
4388 reference.
4389 */
4390
4391 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4392 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4393 {
4394 sv_rvweaken(obj);
4395 }
4396
79072805 4397 mg->mg_type = how;
565764a8 4398 mg->mg_len = namlen;
9cbac4c7 4399 if (name) {
92110913 4400 if (namlen > 0)
1edc1566 4401 mg->mg_ptr = savepvn(name, namlen);
c6ee37c5 4402 else if (namlen == HEf_SVKEY)
b37c2d43 4403 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV*)name);
68795e93 4404 else
92110913 4405 mg->mg_ptr = (char *) name;
9cbac4c7 4406 }
53d44271 4407 mg->mg_virtual = (MGVTBL *) vtable;
68795e93 4408
92110913
NIS
4409 mg_magical(sv);
4410 if (SvGMAGICAL(sv))
4411 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4412 return mg;
4413}
4414
4415/*
4416=for apidoc sv_magic
1c846c1f 4417
92110913
NIS
4418Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4419then adds a new magic item of type C<how> to the head of the magic list.
4420
2d8d5d5a
SH
4421See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4422handling of the C<name> and C<namlen> arguments.
4423
4509d3fb
SB
4424You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4425to add more than one instance of the same 'how'.
4426
92110913
NIS
4427=cut
4428*/
4429
4430void
4431Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
68795e93 4432{
97aff369 4433 dVAR;
53d44271 4434 const MGVTBL *vtable;
92110913 4435 MAGIC* mg;
92110913 4436
f8c7b90f 4437#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4438 if (SvIsCOW(sv))
4439 sv_force_normal_flags(sv, 0);
4440#endif
92110913 4441 if (SvREADONLY(sv)) {
d8084ca5
DM
4442 if (
4443 /* its okay to attach magic to shared strings; the subsequent
4444 * upgrade to PVMG will unshare the string */
4445 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4446
4447 && IN_PERL_RUNTIME
92110913
NIS
4448 && how != PERL_MAGIC_regex_global
4449 && how != PERL_MAGIC_bm
4450 && how != PERL_MAGIC_fm
4451 && how != PERL_MAGIC_sv
e6469971 4452 && how != PERL_MAGIC_backref
92110913
NIS
4453 )
4454 {
4455 Perl_croak(aTHX_ PL_no_modify);
4456 }
4457 }
4458 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4459 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
68795e93
NIS
4460 /* sv_magic() refuses to add a magic of the same 'how' as an
4461 existing one
92110913 4462 */
2a509ed3 4463 if (how == PERL_MAGIC_taint) {
92110913 4464 mg->mg_len |= 1;
2a509ed3
NC
4465 /* Any scalar which already had taint magic on which someone
4466 (erroneously?) did SvIOK_on() or similar will now be
4467 incorrectly sporting public "OK" flags. */
4468 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4469 }
92110913
NIS
4470 return;
4471 }
4472 }
68795e93 4473
79072805 4474 switch (how) {
14befaf4 4475 case PERL_MAGIC_sv:
92110913 4476 vtable = &PL_vtbl_sv;
79072805 4477 break;
14befaf4 4478 case PERL_MAGIC_overload:
92110913 4479 vtable = &PL_vtbl_amagic;
a0d0e21e 4480 break;
14befaf4 4481 case PERL_MAGIC_overload_elem:
92110913 4482 vtable = &PL_vtbl_amagicelem;
a0d0e21e 4483 break;
14befaf4 4484 case PERL_MAGIC_overload_table:
92110913 4485 vtable = &PL_vtbl_ovrld;
a0d0e21e 4486 break;
14befaf4 4487 case PERL_MAGIC_bm:
92110913 4488 vtable = &PL_vtbl_bm;
79072805 4489 break;
14befaf4 4490 case PERL_MAGIC_regdata:
92110913 4491 vtable = &PL_vtbl_regdata;
6cef1e77 4492 break;
14befaf4 4493 case PERL_MAGIC_regdatum:
92110913 4494 vtable = &PL_vtbl_regdatum;
6cef1e77 4495 break;
14befaf4 4496 case PERL_MAGIC_env:
92110913 4497 vtable = &PL_vtbl_env;
79072805 4498 break;
14befaf4 4499 case PERL_MAGIC_fm:
92110913 4500 vtable = &PL_vtbl_fm;
55497cff 4501 break;
14befaf4 4502 case PERL_MAGIC_envelem:
92110913 4503 vtable = &PL_vtbl_envelem;
79072805 4504 break;
14befaf4 4505 case PERL_MAGIC_regex_global:
92110913 4506 vtable = &PL_vtbl_mglob;
93a17b20 4507 break;
14befaf4 4508 case PERL_MAGIC_isa:
92110913 4509 vtable = &PL_vtbl_isa;
463ee0b2 4510 break;
14befaf4 4511 case PERL_MAGIC_isaelem:
92110913 4512 vtable = &PL_vtbl_isaelem;
463ee0b2 4513 break;
14befaf4 4514 case PERL_MAGIC_nkeys:
92110913 4515 vtable = &PL_vtbl_nkeys;
16660edb 4516 break;
14befaf4 4517 case PERL_MAGIC_dbfile:
aec46f14 4518 vtable = NULL;
93a17b20 4519 break;
14befaf4 4520 case PERL_MAGIC_dbline:
92110913 4521 vtable = &PL_vtbl_dbline;
79072805 4522 break;
36477c24 4523#ifdef USE_LOCALE_COLLATE
14befaf4 4524 case PERL_MAGIC_collxfrm:
92110913 4525 vtable = &PL_vtbl_collxfrm;
bbce6d69 4526 break;
36477c24 4527#endif /* USE_LOCALE_COLLATE */
14befaf4 4528 case PERL_MAGIC_tied:
92110913 4529 vtable = &PL_vtbl_pack;
463ee0b2 4530 break;
14befaf4
DM
4531 case PERL_MAGIC_tiedelem:
4532 case PERL_MAGIC_tiedscalar:
92110913 4533 vtable = &PL_vtbl_packelem;
463ee0b2 4534 break;
14befaf4 4535 case PERL_MAGIC_qr:
92110913 4536 vtable = &PL_vtbl_regexp;
c277df42 4537 break;
b3ca2e83
NC
4538 case PERL_MAGIC_hints:
4539 /* As this vtable is all NULL, we can reuse it. */
14befaf4 4540 case PERL_MAGIC_sig:
92110913 4541 vtable = &PL_vtbl_sig;
79072805 4542 break;
14befaf4 4543 case PERL_MAGIC_sigelem:
92110913 4544 vtable = &PL_vtbl_sigelem;
79072805 4545 break;
14befaf4 4546 case PERL_MAGIC_taint:
92110913 4547 vtable = &PL_vtbl_taint;
463ee0b2 4548 break;
14befaf4 4549 case PERL_MAGIC_uvar:
92110913 4550 vtable = &PL_vtbl_uvar;
79072805 4551 break;
14befaf4 4552 case PERL_MAGIC_vec:
92110913 4553 vtable = &PL_vtbl_vec;
79072805 4554 break;
a3874608 4555 case PERL_MAGIC_arylen_p:
bfcb3514 4556 case PERL_MAGIC_rhash:
8d2f4536 4557 case PERL_MAGIC_symtab:
ece467f9 4558 case PERL_MAGIC_vstring:
aec46f14 4559 vtable = NULL;
ece467f9 4560 break;
7e8c5dac
HS
4561 case PERL_MAGIC_utf8:
4562 vtable = &PL_vtbl_utf8;
4563 break;
14befaf4 4564 case PERL_MAGIC_substr:
92110913 4565 vtable = &PL_vtbl_substr;
79072805 4566 break;
14befaf4 4567 case PERL_MAGIC_defelem:
92110913 4568 vtable = &PL_vtbl_defelem;
5f05dabc 4569 break;
14befaf4 4570 case PERL_MAGIC_arylen:
92110913 4571 vtable = &PL_vtbl_arylen;
79072805 4572 break;
14befaf4 4573 case PERL_MAGIC_pos:
92110913 4574 vtable = &PL_vtbl_pos;
a0d0e21e 4575 break;
14befaf4 4576 case PERL_MAGIC_backref:
92110913 4577 vtable = &PL_vtbl_backref;
810b8aa5 4578 break;
b3ca2e83
NC
4579 case PERL_MAGIC_hintselem:
4580 vtable = &PL_vtbl_hintselem;
4581 break;
14befaf4
DM
4582 case PERL_MAGIC_ext:
4583 /* Reserved for use by extensions not perl internals. */
4633a7c4
LW
4584 /* Useful for attaching extension internal data to perl vars. */
4585 /* Note that multiple extensions may clash if magical scalars */
4586 /* etc holding private data from one are passed to another. */
aec46f14 4587 vtable = NULL;
a0d0e21e 4588 break;
79072805 4589 default:
14befaf4 4590 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
463ee0b2 4591 }
68795e93 4592
92110913 4593 /* Rest of work is done else where */
aec46f14 4594 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
68795e93 4595
92110913
NIS
4596 switch (how) {
4597 case PERL_MAGIC_taint:
4598 mg->mg_len = 1;
4599 break;
4600 case PERL_MAGIC_ext:
4601 case PERL_MAGIC_dbfile:
4602 SvRMAGICAL_on(sv);
4603 break;
4604 }
463ee0b2
LW
4605}
4606
c461cf8f
JH
4607/*
4608=for apidoc sv_unmagic
4609
645c22ef 4610Removes all magic of type C<type> from an SV.
c461cf8f
JH
4611
4612=cut
4613*/
4614
463ee0b2 4615int
864dbfa3 4616Perl_sv_unmagic(pTHX_ SV *sv, int type)
463ee0b2
LW
4617{
4618 MAGIC* mg;
4619 MAGIC** mgp;
91bba347 4620 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
463ee0b2 4621 return 0;
064cf529 4622 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
463ee0b2
LW
4623 for (mg = *mgp; mg; mg = *mgp) {
4624 if (mg->mg_type == type) {
e1ec3a88 4625 const MGVTBL* const vtbl = mg->mg_virtual;
463ee0b2 4626 *mgp = mg->mg_moremagic;
1d7c1841 4627 if (vtbl && vtbl->svt_free)
fc0dc3b3 4628 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
14befaf4 4629 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
92110913 4630 if (mg->mg_len > 0)
1edc1566 4631 Safefree(mg->mg_ptr);
565764a8 4632 else if (mg->mg_len == HEf_SVKEY)
1edc1566 4633 SvREFCNT_dec((SV*)mg->mg_ptr);
d2923cdd 4634 else if (mg->mg_type == PERL_MAGIC_utf8)
7e8c5dac 4635 Safefree(mg->mg_ptr);
9cbac4c7 4636 }
a0d0e21e
LW
4637 if (mg->mg_flags & MGf_REFCOUNTED)
4638 SvREFCNT_dec(mg->mg_obj);
463ee0b2
LW
4639 Safefree(mg);
4640 }
4641 else
4642 mgp = &mg->mg_moremagic;
79072805 4643 }
91bba347 4644 if (!SvMAGIC(sv)) {
463ee0b2 4645 SvMAGICAL_off(sv);
c268c2a6 4646 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
86f55936 4647 SvMAGIC_set(sv, NULL);
463ee0b2
LW
4648 }
4649
4650 return 0;
79072805
LW
4651}
4652
c461cf8f
JH
4653/*
4654=for apidoc sv_rvweaken
4655
645c22ef
DM
4656Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4657referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4658push a back-reference to this RV onto the array of backreferences
1e73acc8
AS
4659associated with that magic. If the RV is magical, set magic will be
4660called after the RV is cleared.
c461cf8f
JH
4661
4662=cut
4663*/
4664
810b8aa5 4665SV *
864dbfa3 4666Perl_sv_rvweaken(pTHX_ SV *sv)
810b8aa5
GS
4667{
4668 SV *tsv;
4669 if (!SvOK(sv)) /* let undefs pass */
4670 return sv;
4671 if (!SvROK(sv))
cea2e8a9 4672 Perl_croak(aTHX_ "Can't weaken a nonreference");
810b8aa5 4673 else if (SvWEAKREF(sv)) {
810b8aa5 4674 if (ckWARN(WARN_MISC))
9014280d 4675 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
810b8aa5
GS
4676 return sv;
4677 }
4678 tsv = SvRV(sv);
e15faf7d 4679 Perl_sv_add_backref(aTHX_ tsv, sv);
810b8aa5 4680 SvWEAKREF_on(sv);
1c846c1f 4681 SvREFCNT_dec(tsv);
810b8aa5
GS
4682 return sv;
4683}
4684
645c22ef
DM
4685/* Give tsv backref magic if it hasn't already got it, then push a
4686 * back-reference to sv onto the array associated with the backref magic.
4687 */
4688
e15faf7d
NC
4689void
4690Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
810b8aa5 4691{
97aff369 4692 dVAR;
810b8aa5 4693 AV *av;
86f55936
NC
4694
4695 if (SvTYPE(tsv) == SVt_PVHV) {
4696 AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4697
4698 av = *avp;
4699 if (!av) {
4700 /* There is no AV in the offical place - try a fixup. */
4701 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
4702
4703 if (mg) {
4704 /* Aha. They've got it stowed in magic. Bring it back. */
4705 av = (AV*)mg->mg_obj;
4706 /* Stop mg_free decreasing the refernce count. */
4707 mg->mg_obj = NULL;
4708 /* Stop mg_free even calling the destructor, given that
4709 there's no AV to free up. */
4710 mg->mg_virtual = 0;
4711 sv_unmagic(tsv, PERL_MAGIC_backref);
4712 } else {
4713 av = newAV();
4714 AvREAL_off(av);
b37c2d43 4715 SvREFCNT_inc_simple_void(av);
86f55936
NC
4716 }
4717 *avp = av;
4718 }
4719 } else {
4720 const MAGIC *const mg
4721 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4722 if (mg)
4723 av = (AV*)mg->mg_obj;
4724 else {
4725 av = newAV();
4726 AvREAL_off(av);
4727 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4728 /* av now has a refcnt of 2, which avoids it getting freed
4729 * before us during global cleanup. The extra ref is removed
4730 * by magic_killbackrefs() when tsv is being freed */
4731 }
810b8aa5 4732 }
d91d49e8 4733 if (AvFILLp(av) >= AvMAX(av)) {
d91d49e8
MM
4734 av_extend(av, AvFILLp(av)+1);
4735 }
4736 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
810b8aa5
GS
4737}
4738
645c22ef
DM
4739/* delete a back-reference to ourselves from the backref magic associated
4740 * with the SV we point to.
4741 */
4742
1c846c1f 4743STATIC void
e15faf7d 4744S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
810b8aa5 4745{
97aff369 4746 dVAR;
86f55936 4747 AV *av = NULL;
810b8aa5
GS
4748 SV **svp;
4749 I32 i;
86f55936
NC
4750
4751 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
4752 av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
5b285ea4
NC
4753 /* We mustn't attempt to "fix up" the hash here by moving the
4754 backreference array back to the hv_aux structure, as that is stored
4755 in the main HvARRAY(), and hfreentries assumes that no-one
4756 reallocates HvARRAY() while it is running. */
86f55936
NC
4757 }
4758 if (!av) {
4759 const MAGIC *const mg
4760 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4761 if (mg)
4762 av = (AV *)mg->mg_obj;
4763 }
4764 if (!av) {
e15faf7d
NC
4765 if (PL_in_clean_all)
4766 return;
cea2e8a9 4767 Perl_croak(aTHX_ "panic: del_backref");
86f55936
NC
4768 }
4769
4770 if (SvIS_FREED(av))
4771 return;
4772
810b8aa5 4773 svp = AvARRAY(av);
6a76db8b
NC
4774 /* We shouldn't be in here more than once, but for paranoia reasons lets
4775 not assume this. */
4776 for (i = AvFILLp(av); i >= 0; i--) {
4777 if (svp[i] == sv) {
4778 const SSize_t fill = AvFILLp(av);
4779 if (i != fill) {
4780 /* We weren't the last entry.
4781 An unordered list has this property that you can take the
4782 last element off the end to fill the hole, and it's still
4783 an unordered list :-)
4784 */
4785 svp[i] = svp[fill];
4786 }
a0714e2c 4787 svp[fill] = NULL;
6a76db8b
NC
4788 AvFILLp(av) = fill - 1;
4789 }
4790 }
810b8aa5
GS
4791}
4792
86f55936
NC
4793int
4794Perl_sv_kill_backrefs(pTHX_ SV *sv, AV *av)
4795{
4796 SV **svp = AvARRAY(av);
4797
4798 PERL_UNUSED_ARG(sv);
4799
4800 /* Not sure why the av can get freed ahead of its sv, but somehow it does
4801 in ext/B/t/bytecode.t test 15 (involving print <DATA>) */
4802 if (svp && !SvIS_FREED(av)) {
4803 SV *const *const last = svp + AvFILLp(av);
4804
4805 while (svp <= last) {
4806 if (*svp) {
4807 SV *const referrer = *svp;
4808 if (SvWEAKREF(referrer)) {
4809 /* XXX Should we check that it hasn't changed? */
4810 SvRV_set(referrer, 0);
4811 SvOK_off(referrer);
4812 SvWEAKREF_off(referrer);
1e73acc8 4813 SvSETMAGIC(referrer);
86f55936
NC
4814 } else if (SvTYPE(referrer) == SVt_PVGV ||
4815 SvTYPE(referrer) == SVt_PVLV) {
4816 /* You lookin' at me? */
4817 assert(GvSTASH(referrer));
4818 assert(GvSTASH(referrer) == (HV*)sv);
4819 GvSTASH(referrer) = 0;
4820 } else {
4821 Perl_croak(aTHX_
4822 "panic: magic_killbackrefs (flags=%"UVxf")",
4823 (UV)SvFLAGS(referrer));
4824 }
4825
a0714e2c 4826 *svp = NULL;
86f55936
NC
4827 }
4828 svp++;
4829 }
4830 }
4831 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
4832 return 0;
4833}
4834
954c1994
GS
4835/*
4836=for apidoc sv_insert
4837
4838Inserts a string at the specified offset/length within the SV. Similar to
4839the Perl substr() function.
4840
4841=cut
4842*/
4843
79072805 4844void
e1ec3a88 4845Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
79072805 4846{
97aff369 4847 dVAR;
79072805
LW
4848 register char *big;
4849 register char *mid;
4850 register char *midend;
4851 register char *bigend;
4852 register I32 i;
6ff81951 4853 STRLEN curlen;
1c846c1f 4854
79072805 4855
8990e307 4856 if (!bigstr)
cea2e8a9 4857 Perl_croak(aTHX_ "Can't modify non-existent substring");
6ff81951 4858 SvPV_force(bigstr, curlen);
60fa28ff 4859 (void)SvPOK_only_UTF8(bigstr);
6ff81951
GS
4860 if (offset + len > curlen) {
4861 SvGROW(bigstr, offset+len+1);
93524f2b 4862 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6ff81951
GS
4863 SvCUR_set(bigstr, offset+len);
4864 }
79072805 4865
69b47968 4866 SvTAINT(bigstr);
79072805
LW
4867 i = littlelen - len;
4868 if (i > 0) { /* string might grow */
a0d0e21e 4869 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
79072805
LW
4870 mid = big + offset + len;
4871 midend = bigend = big + SvCUR(bigstr);
4872 bigend += i;
4873 *bigend = '\0';
4874 while (midend > mid) /* shove everything down */
4875 *--bigend = *--midend;
4876 Move(little,big+offset,littlelen,char);
b162af07 4877 SvCUR_set(bigstr, SvCUR(bigstr) + i);
79072805
LW
4878 SvSETMAGIC(bigstr);
4879 return;
4880 }
4881 else if (i == 0) {
463ee0b2 4882 Move(little,SvPVX(bigstr)+offset,len,char);
79072805
LW
4883 SvSETMAGIC(bigstr);
4884 return;
4885 }
4886
463ee0b2 4887 big = SvPVX(bigstr);
79072805
LW
4888 mid = big + offset;
4889 midend = mid + len;
4890 bigend = big + SvCUR(bigstr);
4891
4892 if (midend > bigend)
cea2e8a9 4893 Perl_croak(aTHX_ "panic: sv_insert");
79072805
LW
4894
4895 if (mid - big > bigend - midend) { /* faster to shorten from end */
4896 if (littlelen) {
4897 Move(little, mid, littlelen,char);
4898 mid += littlelen;
4899 }
4900 i = bigend - midend;
4901 if (i > 0) {
4902 Move(midend, mid, i,char);
4903 mid += i;
4904 }
4905 *mid = '\0';
4906 SvCUR_set(bigstr, mid - big);
4907 }
155aba94 4908 else if ((i = mid - big)) { /* faster from front */
79072805
LW
4909 midend -= littlelen;
4910 mid = midend;
4911 sv_chop(bigstr,midend-i);
4912 big += i;
4913 while (i--)
4914 *--midend = *--big;
4915 if (littlelen)
4916 Move(little, mid, littlelen,char);
4917 }
4918 else if (littlelen) {
4919 midend -= littlelen;
4920 sv_chop(bigstr,midend);
4921 Move(little,midend,littlelen,char);
4922 }
4923 else {
4924 sv_chop(bigstr,midend);
4925 }
4926 SvSETMAGIC(bigstr);
4927}
4928
c461cf8f
JH
4929/*
4930=for apidoc sv_replace
4931
4932Make the first argument a copy of the second, then delete the original.
645c22ef
DM
4933The target SV physically takes over ownership of the body of the source SV
4934and inherits its flags; however, the target keeps any magic it owns,
4935and any magic in the source is discarded.
ff276b08 4936Note that this is a rather specialist SV copying operation; most of the
645c22ef 4937time you'll want to use C<sv_setsv> or one of its many macro front-ends.
c461cf8f
JH
4938
4939=cut
4940*/
79072805
LW
4941
4942void
864dbfa3 4943Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
79072805 4944{
97aff369 4945 dVAR;
a3b680e6 4946 const U32 refcnt = SvREFCNT(sv);
765f542d 4947 SV_CHECK_THINKFIRST_COW_DROP(sv);
30e5c352 4948 if (SvREFCNT(nsv) != 1) {
7437becc 4949 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
30e5c352
NC
4950 UVuf " != 1)", (UV) SvREFCNT(nsv));
4951 }
93a17b20 4952 if (SvMAGICAL(sv)) {
a0d0e21e
LW
4953 if (SvMAGICAL(nsv))
4954 mg_free(nsv);
4955 else
4956 sv_upgrade(nsv, SVt_PVMG);
b162af07 4957 SvMAGIC_set(nsv, SvMAGIC(sv));
a0d0e21e 4958 SvFLAGS(nsv) |= SvMAGICAL(sv);
93a17b20 4959 SvMAGICAL_off(sv);
b162af07 4960 SvMAGIC_set(sv, NULL);
93a17b20 4961 }
79072805
LW
4962 SvREFCNT(sv) = 0;
4963 sv_clear(sv);
477f5d66 4964 assert(!SvREFCNT(sv));
fd0854ff
DM
4965#ifdef DEBUG_LEAKING_SCALARS
4966 sv->sv_flags = nsv->sv_flags;
4967 sv->sv_any = nsv->sv_any;
4968 sv->sv_refcnt = nsv->sv_refcnt;
f34d0642 4969 sv->sv_u = nsv->sv_u;
fd0854ff 4970#else
79072805 4971 StructCopy(nsv,sv,SV);
fd0854ff 4972#endif
7b2c381c
NC
4973 /* Currently could join these into one piece of pointer arithmetic, but
4974 it would be unclear. */
4975 if(SvTYPE(sv) == SVt_IV)
4976 SvANY(sv)
339049b0 4977 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
7b2c381c 4978 else if (SvTYPE(sv) == SVt_RV) {
339049b0 4979 SvANY(sv) = &sv->sv_u.svu_rv;
7b2c381c
NC
4980 }
4981
fd0854ff 4982
f8c7b90f 4983#ifdef PERL_OLD_COPY_ON_WRITE
d3d0e6f1
NC
4984 if (SvIsCOW_normal(nsv)) {
4985 /* We need to follow the pointers around the loop to make the
4986 previous SV point to sv, rather than nsv. */
4987 SV *next;
4988 SV *current = nsv;
4989 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
4990 assert(next);
4991 current = next;
3f7c398e 4992 assert(SvPVX_const(current) == SvPVX_const(nsv));
d3d0e6f1
NC
4993 }
4994 /* Make the SV before us point to the SV after us. */
4995 if (DEBUG_C_TEST) {
4996 PerlIO_printf(Perl_debug_log, "previous is\n");
4997 sv_dump(current);
a29f6d03
NC
4998 PerlIO_printf(Perl_debug_log,
4999 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
d3d0e6f1
NC
5000 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5001 }
a29f6d03 5002 SV_COW_NEXT_SV_SET(current, sv);
d3d0e6f1
NC
5003 }
5004#endif
79072805 5005 SvREFCNT(sv) = refcnt;
1edc1566 5006 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
39cf41c2 5007 SvREFCNT(nsv) = 0;
463ee0b2 5008 del_SV(nsv);
79072805
LW
5009}
5010
c461cf8f
JH
5011/*
5012=for apidoc sv_clear
5013
645c22ef
DM
5014Clear an SV: call any destructors, free up any memory used by the body,
5015and free the body itself. The SV's head is I<not> freed, although
5016its type is set to all 1's so that it won't inadvertently be assumed
5017to be live during global destruction etc.
5018This function should only be called when REFCNT is zero. Most of the time
5019you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5020instead.
c461cf8f
JH
5021
5022=cut
5023*/
5024
79072805 5025void
864dbfa3 5026Perl_sv_clear(pTHX_ register SV *sv)
79072805 5027{
27da23d5 5028 dVAR;
82bb6deb 5029 const U32 type = SvTYPE(sv);
8edfc514
NC
5030 const struct body_details *const sv_type_details
5031 = bodies_by_type + type;
82bb6deb 5032
79072805
LW
5033 assert(sv);
5034 assert(SvREFCNT(sv) == 0);
5035
d2a0f284
JC
5036 if (type <= SVt_IV) {
5037 /* See the comment in sv.h about the collusion between this early
5038 return and the overloading of the NULL and IV slots in the size
5039 table. */
82bb6deb 5040 return;
d2a0f284 5041 }
82bb6deb 5042
ed6116ce 5043 if (SvOBJECT(sv)) {
3280af22 5044 if (PL_defstash) { /* Still have a symbol table? */
39644a26 5045 dSP;
893645bd 5046 HV* stash;
d460ef45 5047 do {
b464bac0 5048 CV* destructor;
4e8e7886 5049 stash = SvSTASH(sv);
32251b26 5050 destructor = StashHANDLER(stash,DESTROY);
4e8e7886 5051 if (destructor) {
1b6737cc 5052 SV* const tmpref = newRV(sv);
5cc433a6 5053 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
4e8e7886 5054 ENTER;
e788e7d3 5055 PUSHSTACKi(PERLSI_DESTROY);
4e8e7886
GS
5056 EXTEND(SP, 2);
5057 PUSHMARK(SP);
5cc433a6 5058 PUSHs(tmpref);
4e8e7886 5059 PUTBACK;
44389ee9 5060 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7a5fa8a2
NIS
5061
5062
d3acc0f7 5063 POPSTACK;
3095d977 5064 SPAGAIN;
4e8e7886 5065 LEAVE;
5cc433a6
AB
5066 if(SvREFCNT(tmpref) < 2) {
5067 /* tmpref is not kept alive! */
5068 SvREFCNT(sv)--;
b162af07 5069 SvRV_set(tmpref, NULL);
5cc433a6
AB
5070 SvROK_off(tmpref);
5071 }
5072 SvREFCNT_dec(tmpref);
4e8e7886
GS
5073 }
5074 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
8ebc5c01 5075
6f44e0a4
JP
5076
5077 if (SvREFCNT(sv)) {
5078 if (PL_in_clean_objs)
cea2e8a9 5079 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
bfcb3514 5080 HvNAME_get(stash));
6f44e0a4
JP
5081 /* DESTROY gave object new lease on life */
5082 return;
5083 }
a0d0e21e 5084 }
4e8e7886 5085
a0d0e21e 5086 if (SvOBJECT(sv)) {
4e8e7886 5087 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
a0d0e21e 5088 SvOBJECT_off(sv); /* Curse the object. */
82bb6deb 5089 if (type != SVt_PVIO)
3280af22 5090 --PL_sv_objcount; /* XXX Might want something more general */
a0d0e21e 5091 }
463ee0b2 5092 }
82bb6deb 5093 if (type >= SVt_PVMG) {
cecf5685 5094 if (type == SVt_PVMG && SvPAD_OUR(sv)) {
73d95100 5095 SvREFCNT_dec(SvOURSTASH(sv));
e736a858 5096 } else if (SvMAGIC(sv))
524189f1 5097 mg_free(sv);
00b1698f 5098 if (type == SVt_PVMG && SvPAD_TYPED(sv))
524189f1
JH
5099 SvREFCNT_dec(SvSTASH(sv));
5100 }
82bb6deb 5101 switch (type) {
cecf5685 5102 /* case SVt_BIND: */
8990e307 5103 case SVt_PVIO:
df0bd2f4
GS
5104 if (IoIFP(sv) &&
5105 IoIFP(sv) != PerlIO_stdin() &&
5f05dabc 5106 IoIFP(sv) != PerlIO_stdout() &&
5107 IoIFP(sv) != PerlIO_stderr())
93578b34 5108 {
f2b5be74 5109 io_close((IO*)sv, FALSE);
93578b34 5110 }
1d7c1841 5111 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
1236053a 5112 PerlDir_close(IoDIRP(sv));
1d7c1841 5113 IoDIRP(sv) = (DIR*)NULL;
8990e307
LW
5114 Safefree(IoTOP_NAME(sv));
5115 Safefree(IoFMT_NAME(sv));
5116 Safefree(IoBOTTOM_NAME(sv));
82bb6deb 5117 goto freescalar;
79072805 5118 case SVt_PVCV:
748a9306 5119 case SVt_PVFM:
85e6fe83 5120 cv_undef((CV*)sv);
a0d0e21e 5121 goto freescalar;
79072805 5122 case SVt_PVHV:
86f55936 5123 Perl_hv_kill_backrefs(aTHX_ (HV*)sv);
85e6fe83 5124 hv_undef((HV*)sv);
a0d0e21e 5125 break;
79072805 5126 case SVt_PVAV:
85e6fe83 5127 av_undef((AV*)sv);
a0d0e21e 5128 break;
02270b4e 5129 case SVt_PVLV:
dd28f7bb
DM
5130 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5131 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5132 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5133 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5134 }
5135 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5136 SvREFCNT_dec(LvTARG(sv));
a0d0e21e 5137 case SVt_PVGV:
cecf5685
NC
5138 if (isGV_with_GP(sv)) {
5139 gp_free((GV*)sv);
5140 if (GvNAME_HEK(sv))
5141 unshare_hek(GvNAME_HEK(sv));
893645bd
NC
5142 /* If we're in a stash, we don't own a reference to it. However it does
5143 have a back reference to us, which needs to be cleared. */
cecf5685
NC
5144 if (!SvVALID(sv) && GvSTASH(sv))
5145 sv_del_backref((SV*)GvSTASH(sv), sv);
5146 }
79072805 5147 case SVt_PVMG:
79072805
LW
5148 case SVt_PVNV:
5149 case SVt_PVIV:
a0d0e21e 5150 freescalar:
5228ca4e
NC
5151 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5152 if (SvOOK(sv)) {
93524f2b 5153 SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv));
5228ca4e
NC
5154 /* Don't even bother with turning off the OOK flag. */
5155 }
79072805 5156 case SVt_PV:
a0d0e21e 5157 case SVt_RV:
810b8aa5 5158 if (SvROK(sv)) {
b37c2d43 5159 SV * const target = SvRV(sv);
810b8aa5 5160 if (SvWEAKREF(sv))
e15faf7d 5161 sv_del_backref(target, sv);
810b8aa5 5162 else
e15faf7d 5163 SvREFCNT_dec(target);
810b8aa5 5164 }
f8c7b90f 5165#ifdef PERL_OLD_COPY_ON_WRITE
3f7c398e 5166 else if (SvPVX_const(sv)) {
765f542d
NC
5167 if (SvIsCOW(sv)) {
5168 /* I believe I need to grab the global SV mutex here and
5169 then recheck the COW status. */
46187eeb
NC
5170 if (DEBUG_C_TEST) {
5171 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
e419cbc5 5172 sv_dump(sv);
46187eeb 5173 }
5302ffd4
NC
5174 if (SvLEN(sv)) {
5175 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5176 } else {
5177 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5178 }
5179
765f542d
NC
5180 /* And drop it here. */
5181 SvFAKE_off(sv);
5182 } else if (SvLEN(sv)) {
3f7c398e 5183 Safefree(SvPVX_const(sv));
765f542d
NC
5184 }
5185 }
5186#else
3f7c398e 5187 else if (SvPVX_const(sv) && SvLEN(sv))
94010e71 5188 Safefree(SvPVX_mutable(sv));
3f7c398e 5189 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
bdd68bc3 5190 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
1c846c1f
NIS
5191 SvFAKE_off(sv);
5192 }
765f542d 5193#endif
79072805
LW
5194 break;
5195 case SVt_NV:
79072805
LW
5196 break;
5197 }
5198
893645bd
NC
5199 SvFLAGS(sv) &= SVf_BREAK;
5200 SvFLAGS(sv) |= SVTYPEMASK;
5201
8edfc514 5202 if (sv_type_details->arena) {
b9502f15 5203 del_body(((char *)SvANY(sv) + sv_type_details->offset),
8edfc514
NC
5204 &PL_body_roots[type]);
5205 }
d2a0f284 5206 else if (sv_type_details->body_size) {
8edfc514
NC
5207 my_safefree(SvANY(sv));
5208 }
79072805
LW
5209}
5210
645c22ef
DM
5211/*
5212=for apidoc sv_newref
5213
5214Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5215instead.
5216
5217=cut
5218*/
5219
79072805 5220SV *
864dbfa3 5221Perl_sv_newref(pTHX_ SV *sv)
79072805 5222{
96a5add6 5223 PERL_UNUSED_CONTEXT;
463ee0b2 5224 if (sv)
4db098f4 5225 (SvREFCNT(sv))++;
79072805
LW
5226 return sv;
5227}
5228
c461cf8f
JH
5229/*
5230=for apidoc sv_free
5231
645c22ef
DM
5232Decrement an SV's reference count, and if it drops to zero, call
5233C<sv_clear> to invoke destructors and free up any memory used by
5234the body; finally, deallocate the SV's head itself.
5235Normally called via a wrapper macro C<SvREFCNT_dec>.
c461cf8f
JH
5236
5237=cut
5238*/
5239
79072805 5240void
864dbfa3 5241Perl_sv_free(pTHX_ SV *sv)
79072805 5242{
27da23d5 5243 dVAR;
79072805
LW
5244 if (!sv)
5245 return;
a0d0e21e
LW
5246 if (SvREFCNT(sv) == 0) {
5247 if (SvFLAGS(sv) & SVf_BREAK)
645c22ef
DM
5248 /* this SV's refcnt has been artificially decremented to
5249 * trigger cleanup */
a0d0e21e 5250 return;
3280af22 5251 if (PL_in_clean_all) /* All is fair */
1edc1566 5252 return;
d689ffdd
JP
5253 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5254 /* make sure SvREFCNT(sv)==0 happens very seldom */
5255 SvREFCNT(sv) = (~(U32)0)/2;
5256 return;
5257 }
41e4abd8 5258 if (ckWARN_d(WARN_INTERNAL)) {
d5dede04 5259 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc
SB
5260 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5261 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
41e4abd8
NC
5262#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5263 Perl_dump_sv_child(aTHX_ sv);
5264#endif
5265 }
79072805
LW
5266 return;
5267 }
4db098f4 5268 if (--(SvREFCNT(sv)) > 0)
8990e307 5269 return;
8c4d3c90
NC
5270 Perl_sv_free2(aTHX_ sv);
5271}
5272
5273void
5274Perl_sv_free2(pTHX_ SV *sv)
5275{
27da23d5 5276 dVAR;
463ee0b2
LW
5277#ifdef DEBUGGING
5278 if (SvTEMP(sv)) {
0453d815 5279 if (ckWARN_d(WARN_DEBUGGING))
9014280d 5280 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
472d47bc
SB
5281 "Attempt to free temp prematurely: SV 0x%"UVxf
5282 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
79072805 5283 return;
79072805 5284 }
463ee0b2 5285#endif
d689ffdd
JP
5286 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5287 /* make sure SvREFCNT(sv)==0 happens very seldom */
5288 SvREFCNT(sv) = (~(U32)0)/2;
5289 return;
5290 }
79072805 5291 sv_clear(sv);
477f5d66
CS
5292 if (! SvREFCNT(sv))
5293 del_SV(sv);
79072805
LW
5294}
5295
954c1994
GS
5296/*
5297=for apidoc sv_len
5298
645c22ef
DM
5299Returns the length of the string in the SV. Handles magic and type
5300coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
954c1994
GS
5301
5302=cut
5303*/
5304
79072805 5305STRLEN
864dbfa3 5306Perl_sv_len(pTHX_ register SV *sv)
79072805 5307{
463ee0b2 5308 STRLEN len;
79072805
LW
5309
5310 if (!sv)
5311 return 0;
5312
8990e307 5313 if (SvGMAGICAL(sv))
565764a8 5314 len = mg_length(sv);
8990e307 5315 else
4d84ee25 5316 (void)SvPV_const(sv, len);
463ee0b2 5317 return len;
79072805
LW
5318}
5319
c461cf8f
JH
5320/*
5321=for apidoc sv_len_utf8
5322
5323Returns the number of characters in the string in an SV, counting wide
1e54db1a 5324UTF-8 bytes as a single character. Handles magic and type coercion.
c461cf8f
JH
5325
5326=cut
5327*/
5328
7e8c5dac
HS
5329/*
5330 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
9564a3bd
NC
5331 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
5332 * (Note that the mg_len is not the length of the mg_ptr field.
5333 * This allows the cache to store the character length of the string without
5334 * needing to malloc() extra storage to attach to the mg_ptr.)
7a5fa8a2 5335 *
7e8c5dac
HS
5336 */
5337
a0ed51b3 5338STRLEN
864dbfa3 5339Perl_sv_len_utf8(pTHX_ register SV *sv)
a0ed51b3 5340{
a0ed51b3
LW
5341 if (!sv)
5342 return 0;
5343
a0ed51b3 5344 if (SvGMAGICAL(sv))
b76347f2 5345 return mg_length(sv);
a0ed51b3 5346 else
b76347f2 5347 {
26346457 5348 STRLEN len;
e62f0680 5349 const U8 *s = (U8*)SvPV_const(sv, len);
7e8c5dac 5350
26346457
NC
5351 if (PL_utf8cache) {
5352 STRLEN ulen;
5353 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
5354
5355 if (mg && mg->mg_len != -1) {
5356 ulen = mg->mg_len;
5357 if (PL_utf8cache < 0) {
5358 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
5359 if (real != ulen) {
5360 /* Need to turn the assertions off otherwise we may
5361 recurse infinitely while printing error messages.
5362 */
5363 SAVEI8(PL_utf8cache);
5364 PL_utf8cache = 0;
f5992bc4
RB
5365 Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
5366 " real %"UVuf" for %"SVf,
be2597df 5367 (UV) ulen, (UV) real, SVfARG(sv));
26346457
NC
5368 }
5369 }
5370 }
5371 else {
5372 ulen = Perl_utf8_length(aTHX_ s, s + len);
5373 if (!SvREADONLY(sv)) {
5374 if (!mg) {
5375 mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
5376 &PL_vtbl_utf8, 0, 0);
5377 }
cb9e20bb 5378 assert(mg);
26346457 5379 mg->mg_len = ulen;
cb9e20bb 5380 }
cb9e20bb 5381 }
26346457 5382 return ulen;
7e8c5dac 5383 }
26346457 5384 return Perl_utf8_length(aTHX_ s, s + len);
7e8c5dac
HS
5385 }
5386}
5387
9564a3bd
NC
5388/* Walk forwards to find the byte corresponding to the passed in UTF-8
5389 offset. */
bdf30dd6 5390static STRLEN
721e86b6 5391S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
bdf30dd6
NC
5392 STRLEN uoffset)
5393{
5394 const U8 *s = start;
5395
5396 while (s < send && uoffset--)
5397 s += UTF8SKIP(s);
5398 if (s > send) {
5399 /* This is the existing behaviour. Possibly it should be a croak, as
5400 it's actually a bounds error */
5401 s = send;
5402 }
5403 return s - start;
5404}
5405
9564a3bd
NC
5406/* Given the length of the string in both bytes and UTF-8 characters, decide
5407 whether to walk forwards or backwards to find the byte corresponding to
5408 the passed in UTF-8 offset. */
c336ad0b 5409static STRLEN
721e86b6 5410S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
c336ad0b
NC
5411 STRLEN uoffset, STRLEN uend)
5412{
5413 STRLEN backw = uend - uoffset;
5414 if (uoffset < 2 * backw) {
25a8a4ef 5415 /* The assumption is that going forwards is twice the speed of going
c336ad0b
NC
5416 forward (that's where the 2 * backw comes from).
5417 (The real figure of course depends on the UTF-8 data.) */
721e86b6 5418 return sv_pos_u2b_forwards(start, send, uoffset);
c336ad0b
NC
5419 }
5420
5421 while (backw--) {
5422 send--;
5423 while (UTF8_IS_CONTINUATION(*send))
5424 send--;
5425 }
5426 return send - start;
5427}
5428
9564a3bd
NC
5429/* For the string representation of the given scalar, find the byte
5430 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
5431 give another position in the string, *before* the sought offset, which
5432 (which is always true, as 0, 0 is a valid pair of positions), which should
5433 help reduce the amount of linear searching.
5434 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
5435 will be used to reduce the amount of linear searching. The cache will be
5436 created if necessary, and the found value offered to it for update. */
28ccbf94
NC
5437static STRLEN
5438S_sv_pos_u2b_cached(pTHX_ SV *sv, MAGIC **mgp, const U8 *const start,
5439 const U8 *const send, STRLEN uoffset,
5440 STRLEN uoffset0, STRLEN boffset0) {
7087a21c 5441 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
c336ad0b
NC
5442 bool found = FALSE;
5443
75c33c12
NC
5444 assert (uoffset >= uoffset0);
5445
c336ad0b 5446 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
0905937d 5447 && (*mgp || (*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
d8b2e1f9
NC
5448 if ((*mgp)->mg_ptr) {
5449 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
5450 if (cache[0] == uoffset) {
5451 /* An exact match. */
5452 return cache[1];
5453 }
ab455f60
NC
5454 if (cache[2] == uoffset) {
5455 /* An exact match. */
5456 return cache[3];
5457 }
668af93f
NC
5458
5459 if (cache[0] < uoffset) {
d8b2e1f9
NC
5460 /* The cache already knows part of the way. */
5461 if (cache[0] > uoffset0) {
5462 /* The cache knows more than the passed in pair */
5463 uoffset0 = cache[0];
5464 boffset0 = cache[1];
5465 }
5466 if ((*mgp)->mg_len != -1) {
5467 /* And we know the end too. */
5468 boffset = boffset0
721e86b6 5469 + sv_pos_u2b_midway(start + boffset0, send,
d8b2e1f9
NC
5470 uoffset - uoffset0,
5471 (*mgp)->mg_len - uoffset0);
5472 } else {
5473 boffset = boffset0
721e86b6 5474 + sv_pos_u2b_forwards(start + boffset0,
d8b2e1f9
NC
5475 send, uoffset - uoffset0);
5476 }
dd7c5fd3
NC
5477 }
5478 else if (cache[2] < uoffset) {
5479 /* We're between the two cache entries. */
5480 if (cache[2] > uoffset0) {
5481 /* and the cache knows more than the passed in pair */
5482 uoffset0 = cache[2];
5483 boffset0 = cache[3];
5484 }
5485
668af93f 5486 boffset = boffset0
721e86b6 5487 + sv_pos_u2b_midway(start + boffset0,
668af93f
NC
5488 start + cache[1],
5489 uoffset - uoffset0,
5490 cache[0] - uoffset0);
dd7c5fd3
NC
5491 } else {
5492 boffset = boffset0
721e86b6 5493 + sv_pos_u2b_midway(start + boffset0,
dd7c5fd3
NC
5494 start + cache[3],
5495 uoffset - uoffset0,
5496 cache[2] - uoffset0);
d8b2e1f9 5497 }
668af93f 5498 found = TRUE;
d8b2e1f9
NC
5499 }
5500 else if ((*mgp)->mg_len != -1) {
75c33c12
NC
5501 /* If we can take advantage of a passed in offset, do so. */
5502 /* In fact, offset0 is either 0, or less than offset, so don't
5503 need to worry about the other possibility. */
5504 boffset = boffset0
721e86b6 5505 + sv_pos_u2b_midway(start + boffset0, send,
75c33c12
NC
5506 uoffset - uoffset0,
5507 (*mgp)->mg_len - uoffset0);
c336ad0b
NC
5508 found = TRUE;
5509 }
28ccbf94 5510 }
c336ad0b
NC
5511
5512 if (!found || PL_utf8cache < 0) {
75c33c12 5513 const STRLEN real_boffset
721e86b6 5514 = boffset0 + sv_pos_u2b_forwards(start + boffset0,
75c33c12
NC
5515 send, uoffset - uoffset0);
5516
c336ad0b
NC
5517 if (found && PL_utf8cache < 0) {
5518 if (real_boffset != boffset) {
5519 /* Need to turn the assertions off otherwise we may recurse
5520 infinitely while printing error messages. */
5521 SAVEI8(PL_utf8cache);
5522 PL_utf8cache = 0;
f5992bc4
RB
5523 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
5524 " real %"UVuf" for %"SVf,
be2597df 5525 (UV) boffset, (UV) real_boffset, SVfARG(sv));
c336ad0b
NC
5526 }
5527 }
5528 boffset = real_boffset;
28ccbf94 5529 }
0905937d 5530
ab455f60 5531 S_utf8_mg_pos_cache_update(aTHX_ sv, mgp, boffset, uoffset, send - start);
28ccbf94
NC
5532 return boffset;
5533}
5534
9564a3bd
NC
5535
5536/*
5537=for apidoc sv_pos_u2b
5538
5539Converts the value pointed to by offsetp from a count of UTF-8 chars from
5540the start of the string, to a count of the equivalent number of bytes; if
5541lenp is non-zero, it does the same to lenp, but this time starting from
5542the offset, rather than from the start of the string. Handles magic and
5543type coercion.
5544
5545=cut
5546*/
5547
5548/*
5549 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5550 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5551 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
5552 *
5553 */
5554
a0ed51b3 5555void
864dbfa3 5556Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
a0ed51b3 5557{
245d4a47 5558 const U8 *start;
a0ed51b3
LW
5559 STRLEN len;
5560
5561 if (!sv)
5562 return;
5563
245d4a47 5564 start = (U8*)SvPV_const(sv, len);
7e8c5dac 5565 if (len) {
bdf30dd6
NC
5566 STRLEN uoffset = (STRLEN) *offsetp;
5567 const U8 * const send = start + len;
0905937d 5568 MAGIC *mg = NULL;
721e86b6 5569 const STRLEN boffset = sv_pos_u2b_cached(sv, &mg, start, send,
28ccbf94 5570 uoffset, 0, 0);
bdf30dd6
NC
5571
5572 *offsetp = (I32) boffset;
5573
5574 if (lenp) {
28ccbf94 5575 /* Convert the relative offset to absolute. */
721e86b6
AL
5576 const STRLEN uoffset2 = uoffset + (STRLEN) *lenp;
5577 const STRLEN boffset2
5578 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
28ccbf94 5579 uoffset, boffset) - boffset;
bdf30dd6 5580
28ccbf94 5581 *lenp = boffset2;
bdf30dd6 5582 }
7e8c5dac
HS
5583 }
5584 else {
5585 *offsetp = 0;
5586 if (lenp)
5587 *lenp = 0;
a0ed51b3 5588 }
e23c8137 5589
a0ed51b3
LW
5590 return;
5591}
5592
9564a3bd
NC
5593/* Create and update the UTF8 magic offset cache, with the proffered utf8/
5594 byte length pairing. The (byte) length of the total SV is passed in too,
5595 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
5596 may not have updated SvCUR, so we can't rely on reading it directly.
5597
5598 The proffered utf8/byte length pairing isn't used if the cache already has
5599 two pairs, and swapping either for the proffered pair would increase the
5600 RMS of the intervals between known byte offsets.
5601
5602 The cache itself consists of 4 STRLEN values
5603 0: larger UTF-8 offset
5604 1: corresponding byte offset
5605 2: smaller UTF-8 offset
5606 3: corresponding byte offset
5607
5608 Unused cache pairs have the value 0, 0.
5609 Keeping the cache "backwards" means that the invariant of
5610 cache[0] >= cache[2] is maintained even with empty slots, which means that
5611 the code that uses it doesn't need to worry if only 1 entry has actually
5612 been set to non-zero. It also makes the "position beyond the end of the
5613 cache" logic much simpler, as the first slot is always the one to start
5614 from.
645c22ef 5615*/
ec07b5e0 5616static void
ab455f60
NC
5617S_utf8_mg_pos_cache_update(pTHX_ SV *sv, MAGIC **mgp, STRLEN byte, STRLEN utf8,
5618 STRLEN blen)
ec07b5e0
NC
5619{
5620 STRLEN *cache;
5621 if (SvREADONLY(sv))
5622 return;
5623
5624 if (!*mgp) {
5625 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
5626 0);
5627 (*mgp)->mg_len = -1;
5628 }
5629 assert(*mgp);
5630
5631 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
5632 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5633 (*mgp)->mg_ptr = (char *) cache;
5634 }
5635 assert(cache);
5636
5637 if (PL_utf8cache < 0) {
ef816a78 5638 const U8 *start = (const U8 *) SvPVX_const(sv);
6448472a 5639 const STRLEN realutf8 = utf8_length(start, start + byte);
ec07b5e0
NC
5640
5641 if (realutf8 != utf8) {
5642 /* Need to turn the assertions off otherwise we may recurse
5643 infinitely while printing error messages. */
5644 SAVEI8(PL_utf8cache);
5645 PL_utf8cache = 0;
f5992bc4 5646 Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
be2597df 5647 " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, SVfARG(sv));
ec07b5e0
NC
5648 }
5649 }
ab455f60
NC
5650
5651 /* Cache is held with the later position first, to simplify the code
5652 that deals with unbounded ends. */
5653
5654 ASSERT_UTF8_CACHE(cache);
5655 if (cache[1] == 0) {
5656 /* Cache is totally empty */
5657 cache[0] = utf8;
5658 cache[1] = byte;
5659 } else if (cache[3] == 0) {
5660 if (byte > cache[1]) {
5661 /* New one is larger, so goes first. */
5662 cache[2] = cache[0];
5663 cache[3] = cache[1];
5664 cache[0] = utf8;
5665 cache[1] = byte;
5666 } else {
5667 cache[2] = utf8;
5668 cache[3] = byte;
5669 }
5670 } else {
5671#define THREEWAY_SQUARE(a,b,c,d) \
5672 ((float)((d) - (c))) * ((float)((d) - (c))) \
5673 + ((float)((c) - (b))) * ((float)((c) - (b))) \
5674 + ((float)((b) - (a))) * ((float)((b) - (a)))
5675
5676 /* Cache has 2 slots in use, and we know three potential pairs.
5677 Keep the two that give the lowest RMS distance. Do the
5678 calcualation in bytes simply because we always know the byte
5679 length. squareroot has the same ordering as the positive value,
5680 so don't bother with the actual square root. */
5681 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
5682 if (byte > cache[1]) {
5683 /* New position is after the existing pair of pairs. */
5684 const float keep_earlier
5685 = THREEWAY_SQUARE(0, cache[3], byte, blen);
5686 const float keep_later
5687 = THREEWAY_SQUARE(0, cache[1], byte, blen);
5688
5689 if (keep_later < keep_earlier) {
5690 if (keep_later < existing) {
5691 cache[2] = cache[0];
5692 cache[3] = cache[1];
5693 cache[0] = utf8;
5694 cache[1] = byte;
5695 }
5696 }
5697 else {
5698 if (keep_earlier < existing) {
5699 cache[0] = utf8;
5700 cache[1] = byte;
5701 }
5702 }
5703 }
57d7fbf1
NC
5704 else if (byte > cache[3]) {
5705 /* New position is between the existing pair of pairs. */
5706 const float keep_earlier
5707 = THREEWAY_SQUARE(0, cache[3], byte, blen);
5708 const float keep_later
5709 = THREEWAY_SQUARE(0, byte, cache[1], blen);
5710
5711 if (keep_later < keep_earlier) {
5712 if (keep_later < existing) {
5713 cache[2] = utf8;
5714 cache[3] = byte;
5715 }
5716 }
5717 else {
5718 if (keep_earlier < existing) {
5719 cache[0] = utf8;
5720 cache[1] = byte;
5721 }
5722 }
5723 }
5724 else {
5725 /* New position is before the existing pair of pairs. */
5726 const float keep_earlier
5727 = THREEWAY_SQUARE(0, byte, cache[3], blen);
5728 const float keep_later
5729 = THREEWAY_SQUARE(0, byte, cache[1], blen);
5730
5731 if (keep_later < keep_earlier) {
5732 if (keep_later < existing) {
5733 cache[2] = utf8;
5734 cache[3] = byte;
5735 }
5736 }
5737 else {
5738 if (keep_earlier < existing) {
5739 cache[0] = cache[2];
5740 cache[1] = cache[3];
5741 cache[2] = utf8;
5742 cache[3] = byte;
5743 }
5744 }
5745 }
ab455f60 5746 }
0905937d 5747 ASSERT_UTF8_CACHE(cache);
ec07b5e0
NC
5748}
5749
ec07b5e0 5750/* We already know all of the way, now we may be able to walk back. The same
25a8a4ef
NC
5751 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
5752 backward is half the speed of walking forward. */
ec07b5e0
NC
5753static STRLEN
5754S_sv_pos_b2u_midway(pTHX_ const U8 *s, const U8 *const target, const U8 *end,
5755 STRLEN endu)
5756{
5757 const STRLEN forw = target - s;
5758 STRLEN backw = end - target;
5759
5760 if (forw < 2 * backw) {
6448472a 5761 return utf8_length(s, target);
ec07b5e0
NC
5762 }
5763
5764 while (end > target) {
5765 end--;
5766 while (UTF8_IS_CONTINUATION(*end)) {
5767 end--;
5768 }
5769 endu--;
5770 }
5771 return endu;
5772}
5773
9564a3bd
NC
5774/*
5775=for apidoc sv_pos_b2u
5776
5777Converts the value pointed to by offsetp from a count of bytes from the
5778start of the string, to a count of the equivalent number of UTF-8 chars.
5779Handles magic and type coercion.
5780
5781=cut
5782*/
5783
5784/*
5785 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
5786 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5787 * byte offsets.
5788 *
5789 */
a0ed51b3 5790void
7e8c5dac 5791Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
a0ed51b3 5792{
83003860 5793 const U8* s;
ec07b5e0 5794 const STRLEN byte = *offsetp;
7087a21c 5795 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
ab455f60 5796 STRLEN blen;
ec07b5e0
NC
5797 MAGIC* mg = NULL;
5798 const U8* send;
a922f900 5799 bool found = FALSE;
a0ed51b3
LW
5800
5801 if (!sv)
5802 return;
5803
ab455f60 5804 s = (const U8*)SvPV_const(sv, blen);
7e8c5dac 5805
ab455f60 5806 if (blen < byte)
ec07b5e0 5807 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7e8c5dac 5808
ec07b5e0 5809 send = s + byte;
a67d7df9 5810
ffca234a
NC
5811 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
5812 && (mg = mg_find(sv, PERL_MAGIC_utf8))) {
5813 if (mg->mg_ptr) {
d4c19fe8 5814 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
b9f984a5 5815 if (cache[1] == byte) {
ec07b5e0
NC
5816 /* An exact match. */
5817 *offsetp = cache[0];
ec07b5e0 5818 return;
7e8c5dac 5819 }
ab455f60
NC
5820 if (cache[3] == byte) {
5821 /* An exact match. */
5822 *offsetp = cache[2];
5823 return;
5824 }
668af93f
NC
5825
5826 if (cache[1] < byte) {
ec07b5e0 5827 /* We already know part of the way. */
b9f984a5
NC
5828 if (mg->mg_len != -1) {
5829 /* Actually, we know the end too. */
5830 len = cache[0]
5831 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
ab455f60 5832 s + blen, mg->mg_len - cache[0]);
b9f984a5 5833 } else {
6448472a 5834 len = cache[0] + utf8_length(s + cache[1], send);
b9f984a5 5835 }
7e8c5dac 5836 }
9f985e4c
NC
5837 else if (cache[3] < byte) {
5838 /* We're between the two cached pairs, so we do the calculation
5839 offset by the byte/utf-8 positions for the earlier pair,
5840 then add the utf-8 characters from the string start to
5841 there. */
5842 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
5843 s + cache[1], cache[0] - cache[2])
5844 + cache[2];
5845
5846 }
5847 else { /* cache[3] > byte */
5848 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
5849 cache[2]);
7e8c5dac 5850
7e8c5dac 5851 }
ec07b5e0 5852 ASSERT_UTF8_CACHE(cache);
a922f900 5853 found = TRUE;
ffca234a 5854 } else if (mg->mg_len != -1) {
ab455f60 5855 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
a922f900 5856 found = TRUE;
7e8c5dac 5857 }
a0ed51b3 5858 }
a922f900 5859 if (!found || PL_utf8cache < 0) {
6448472a 5860 const STRLEN real_len = utf8_length(s, send);
a922f900
NC
5861
5862 if (found && PL_utf8cache < 0) {
5863 if (len != real_len) {
5864 /* Need to turn the assertions off otherwise we may recurse
5865 infinitely while printing error messages. */
5866 SAVEI8(PL_utf8cache);
5867 PL_utf8cache = 0;
f5992bc4
RB
5868 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
5869 " real %"UVuf" for %"SVf,
be2597df 5870 (UV) len, (UV) real_len, SVfARG(sv));
a922f900
NC
5871 }
5872 }
5873 len = real_len;
ec07b5e0
NC
5874 }
5875 *offsetp = len;
5876
ab455f60 5877 S_utf8_mg_pos_cache_update(aTHX_ sv, &mg, byte, len, blen);
a0ed51b3
LW
5878}
5879
954c1994
GS
5880/*
5881=for apidoc sv_eq
5882
5883Returns a boolean indicating whether the strings in the two SVs are
645c22ef
DM
5884identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5885coerce its args to strings if necessary.
954c1994
GS
5886
5887=cut
5888*/
5889
79072805 5890I32
e01b9e88 5891Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
79072805 5892{
97aff369 5893 dVAR;
e1ec3a88 5894 const char *pv1;
463ee0b2 5895 STRLEN cur1;
e1ec3a88 5896 const char *pv2;
463ee0b2 5897 STRLEN cur2;
e01b9e88 5898 I32 eq = 0;
bd61b366 5899 char *tpv = NULL;
a0714e2c 5900 SV* svrecode = NULL;
79072805 5901
e01b9e88 5902 if (!sv1) {
79072805
LW
5903 pv1 = "";
5904 cur1 = 0;
5905 }
ced497e2
YST
5906 else {
5907 /* if pv1 and pv2 are the same, second SvPV_const call may
5908 * invalidate pv1, so we may need to make a copy */
5909 if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
5910 pv1 = SvPV_const(sv1, cur1);
5911 sv1 = sv_2mortal(newSVpvn(pv1, cur1));
5912 if (SvUTF8(sv2)) SvUTF8_on(sv1);
5913 }
4d84ee25 5914 pv1 = SvPV_const(sv1, cur1);
ced497e2 5915 }
79072805 5916
e01b9e88
SC
5917 if (!sv2){
5918 pv2 = "";
5919 cur2 = 0;
92d29cee 5920 }
e01b9e88 5921 else
4d84ee25 5922 pv2 = SvPV_const(sv2, cur2);
79072805 5923
cf48d248 5924 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
5925 /* Differing utf8ness.
5926 * Do not UTF8size the comparands as a side-effect. */
5927 if (PL_encoding) {
5928 if (SvUTF8(sv1)) {
553e1bcc
AT
5929 svrecode = newSVpvn(pv2, cur2);
5930 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 5931 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
5932 }
5933 else {
553e1bcc
AT
5934 svrecode = newSVpvn(pv1, cur1);
5935 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 5936 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
5937 }
5938 /* Now both are in UTF-8. */
0a1bd7ac
DM
5939 if (cur1 != cur2) {
5940 SvREFCNT_dec(svrecode);
799ef3cb 5941 return FALSE;
0a1bd7ac 5942 }
799ef3cb
JH
5943 }
5944 else {
5945 bool is_utf8 = TRUE;
5946
5947 if (SvUTF8(sv1)) {
5948 /* sv1 is the UTF-8 one,
5949 * if is equal it must be downgrade-able */
9d4ba2ae 5950 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
799ef3cb
JH
5951 &cur1, &is_utf8);
5952 if (pv != pv1)
553e1bcc 5953 pv1 = tpv = pv;
799ef3cb
JH
5954 }
5955 else {
5956 /* sv2 is the UTF-8 one,
5957 * if is equal it must be downgrade-able */
9d4ba2ae 5958 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
799ef3cb
JH
5959 &cur2, &is_utf8);
5960 if (pv != pv2)
553e1bcc 5961 pv2 = tpv = pv;
799ef3cb
JH
5962 }
5963 if (is_utf8) {
5964 /* Downgrade not possible - cannot be eq */
bf694877 5965 assert (tpv == 0);
799ef3cb
JH
5966 return FALSE;
5967 }
5968 }
cf48d248
JH
5969 }
5970
5971 if (cur1 == cur2)
765f542d 5972 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
e01b9e88 5973
b37c2d43 5974 SvREFCNT_dec(svrecode);
553e1bcc
AT
5975 if (tpv)
5976 Safefree(tpv);
cf48d248 5977
e01b9e88 5978 return eq;
79072805
LW
5979}
5980
954c1994
GS
5981/*
5982=for apidoc sv_cmp
5983
5984Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
5985string in C<sv1> is less than, equal to, or greater than the string in
645c22ef
DM
5986C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5987coerce its args to strings if necessary. See also C<sv_cmp_locale>.
954c1994
GS
5988
5989=cut
5990*/
5991
79072805 5992I32
e01b9e88 5993Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
79072805 5994{
97aff369 5995 dVAR;
560a288e 5996 STRLEN cur1, cur2;
e1ec3a88 5997 const char *pv1, *pv2;
bd61b366 5998 char *tpv = NULL;
cf48d248 5999 I32 cmp;
a0714e2c 6000 SV *svrecode = NULL;
560a288e 6001
e01b9e88
SC
6002 if (!sv1) {
6003 pv1 = "";
560a288e
GS
6004 cur1 = 0;
6005 }
e01b9e88 6006 else
4d84ee25 6007 pv1 = SvPV_const(sv1, cur1);
560a288e 6008
553e1bcc 6009 if (!sv2) {
e01b9e88 6010 pv2 = "";
560a288e
GS
6011 cur2 = 0;
6012 }
e01b9e88 6013 else
4d84ee25 6014 pv2 = SvPV_const(sv2, cur2);
79072805 6015
cf48d248 6016 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
6017 /* Differing utf8ness.
6018 * Do not UTF8size the comparands as a side-effect. */
cf48d248 6019 if (SvUTF8(sv1)) {
799ef3cb 6020 if (PL_encoding) {
553e1bcc
AT
6021 svrecode = newSVpvn(pv2, cur2);
6022 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6023 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
6024 }
6025 else {
e1ec3a88 6026 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
799ef3cb 6027 }
cf48d248
JH
6028 }
6029 else {
799ef3cb 6030 if (PL_encoding) {
553e1bcc
AT
6031 svrecode = newSVpvn(pv1, cur1);
6032 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6033 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
6034 }
6035 else {
e1ec3a88 6036 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
799ef3cb 6037 }
cf48d248
JH
6038 }
6039 }
6040
e01b9e88 6041 if (!cur1) {
cf48d248 6042 cmp = cur2 ? -1 : 0;
e01b9e88 6043 } else if (!cur2) {
cf48d248
JH
6044 cmp = 1;
6045 } else {
e1ec3a88 6046 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
e01b9e88
SC
6047
6048 if (retval) {
cf48d248 6049 cmp = retval < 0 ? -1 : 1;
e01b9e88 6050 } else if (cur1 == cur2) {
cf48d248
JH
6051 cmp = 0;
6052 } else {
6053 cmp = cur1 < cur2 ? -1 : 1;
e01b9e88 6054 }
cf48d248 6055 }
16660edb 6056
b37c2d43 6057 SvREFCNT_dec(svrecode);
553e1bcc
AT
6058 if (tpv)
6059 Safefree(tpv);
cf48d248
JH
6060
6061 return cmp;
bbce6d69 6062}
16660edb 6063
c461cf8f
JH
6064/*
6065=for apidoc sv_cmp_locale
6066
645c22ef
DM
6067Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6068'use bytes' aware, handles get magic, and will coerce its args to strings
6069if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
c461cf8f
JH
6070
6071=cut
6072*/
6073
bbce6d69 6074I32
864dbfa3 6075Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
bbce6d69 6076{
97aff369 6077 dVAR;
36477c24 6078#ifdef USE_LOCALE_COLLATE
16660edb 6079
bbce6d69 6080 char *pv1, *pv2;
6081 STRLEN len1, len2;
6082 I32 retval;
16660edb 6083
3280af22 6084 if (PL_collation_standard)
bbce6d69 6085 goto raw_compare;
16660edb 6086
bbce6d69 6087 len1 = 0;
8ac85365 6088 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
bbce6d69 6089 len2 = 0;
8ac85365 6090 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
16660edb 6091
bbce6d69 6092 if (!pv1 || !len1) {
6093 if (pv2 && len2)
6094 return -1;
6095 else
6096 goto raw_compare;
6097 }
6098 else {
6099 if (!pv2 || !len2)
6100 return 1;
6101 }
16660edb 6102
bbce6d69 6103 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
16660edb 6104
bbce6d69 6105 if (retval)
16660edb 6106 return retval < 0 ? -1 : 1;
6107
bbce6d69 6108 /*
6109 * When the result of collation is equality, that doesn't mean
6110 * that there are no differences -- some locales exclude some
6111 * characters from consideration. So to avoid false equalities,
6112 * we use the raw string as a tiebreaker.
6113 */
16660edb 6114
bbce6d69 6115 raw_compare:
5f66b61c 6116 /*FALLTHROUGH*/
16660edb 6117
36477c24 6118#endif /* USE_LOCALE_COLLATE */
16660edb 6119
bbce6d69 6120 return sv_cmp(sv1, sv2);
6121}
79072805 6122
645c22ef 6123
36477c24 6124#ifdef USE_LOCALE_COLLATE
645c22ef 6125
7a4c00b4 6126/*
645c22ef
DM
6127=for apidoc sv_collxfrm
6128
6129Add Collate Transform magic to an SV if it doesn't already have it.
6130
6131Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6132scalar data of the variable, but transformed to such a format that a normal
6133memory comparison can be used to compare the data according to the locale
6134settings.
6135
6136=cut
6137*/
6138
bbce6d69 6139char *
864dbfa3 6140Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
bbce6d69 6141{
97aff369 6142 dVAR;
7a4c00b4 6143 MAGIC *mg;
16660edb 6144
14befaf4 6145 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
3280af22 6146 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
93524f2b
NC
6147 const char *s;
6148 char *xf;
bbce6d69 6149 STRLEN len, xlen;
6150
7a4c00b4 6151 if (mg)
6152 Safefree(mg->mg_ptr);
93524f2b 6153 s = SvPV_const(sv, len);
bbce6d69 6154 if ((xf = mem_collxfrm(s, len, &xlen))) {
ff0cee69 6155 if (SvREADONLY(sv)) {
6156 SAVEFREEPV(xf);
6157 *nxp = xlen;
3280af22 6158 return xf + sizeof(PL_collation_ix);
ff0cee69 6159 }
7a4c00b4 6160 if (! mg) {
d83f0a82
NC
6161#ifdef PERL_OLD_COPY_ON_WRITE
6162 if (SvIsCOW(sv))
6163 sv_force_normal_flags(sv, 0);
6164#endif
6165 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6166 0, 0);
7a4c00b4 6167 assert(mg);
bbce6d69 6168 }
7a4c00b4 6169 mg->mg_ptr = xf;
565764a8 6170 mg->mg_len = xlen;
7a4c00b4 6171 }
6172 else {
ff0cee69 6173 if (mg) {
6174 mg->mg_ptr = NULL;
565764a8 6175 mg->mg_len = -1;
ff0cee69 6176 }
bbce6d69 6177 }
6178 }
7a4c00b4 6179 if (mg && mg->mg_ptr) {
565764a8 6180 *nxp = mg->mg_len;
3280af22 6181 return mg->mg_ptr + sizeof(PL_collation_ix);
bbce6d69 6182 }
6183 else {
6184 *nxp = 0;
6185 return NULL;
16660edb 6186 }
79072805
LW
6187}
6188
36477c24 6189#endif /* USE_LOCALE_COLLATE */
bbce6d69 6190
c461cf8f
JH
6191/*
6192=for apidoc sv_gets
6193
6194Get a line from the filehandle and store it into the SV, optionally
6195appending to the currently-stored string.
6196
6197=cut
6198*/
6199
79072805 6200char *
864dbfa3 6201Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
79072805 6202{
97aff369 6203 dVAR;
e1ec3a88 6204 const char *rsptr;
c07a80fd 6205 STRLEN rslen;
6206 register STDCHAR rslast;
6207 register STDCHAR *bp;
6208 register I32 cnt;
9c5ffd7c 6209 I32 i = 0;
8bfdd7d9 6210 I32 rspara = 0;
c07a80fd 6211
bc44a8a2
NC
6212 if (SvTHINKFIRST(sv))
6213 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
765f542d
NC
6214 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6215 from <>.
6216 However, perlbench says it's slower, because the existing swipe code
6217 is faster than copy on write.
6218 Swings and roundabouts. */
862a34c6 6219 SvUPGRADE(sv, SVt_PV);
99491443 6220
ff68c719 6221 SvSCREAM_off(sv);
efd8b2ba
AE
6222
6223 if (append) {
6224 if (PerlIO_isutf8(fp)) {
6225 if (!SvUTF8(sv)) {
6226 sv_utf8_upgrade_nomg(sv);
6227 sv_pos_u2b(sv,&append,0);
6228 }
6229 } else if (SvUTF8(sv)) {
561b68a9 6230 SV * const tsv = newSV(0);
efd8b2ba
AE
6231 sv_gets(tsv, fp, 0);
6232 sv_utf8_upgrade_nomg(tsv);
6233 SvCUR_set(sv,append);
6234 sv_catsv(sv,tsv);
6235 sv_free(tsv);
6236 goto return_string_or_null;
6237 }
6238 }
6239
6240 SvPOK_only(sv);
6241 if (PerlIO_isutf8(fp))
6242 SvUTF8_on(sv);
c07a80fd 6243
923e4eb5 6244 if (IN_PERL_COMPILETIME) {
8bfdd7d9
HS
6245 /* we always read code in line mode */
6246 rsptr = "\n";
6247 rslen = 1;
6248 }
6249 else if (RsSNARF(PL_rs)) {
7a5fa8a2 6250 /* If it is a regular disk file use size from stat() as estimate
acbd132f
JH
6251 of amount we are going to read -- may result in mallocing
6252 more memory than we really need if the layers below reduce
6253 the size we read (e.g. CRLF or a gzip layer).
e468d35b 6254 */
e311fd51 6255 Stat_t st;
e468d35b 6256 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
f54cb97a 6257 const Off_t offset = PerlIO_tell(fp);
58f1856e 6258 if (offset != (Off_t) -1 && st.st_size + append > offset) {
e468d35b
NIS
6259 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6260 }
6261 }
c07a80fd 6262 rsptr = NULL;
6263 rslen = 0;
6264 }
3280af22 6265 else if (RsRECORD(PL_rs)) {
e311fd51 6266 I32 bytesread;
5b2b9c68 6267 char *buffer;
acbd132f 6268 U32 recsize;
5b2b9c68
HM
6269
6270 /* Grab the size of the record we're getting */
acbd132f 6271 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
e311fd51 6272 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
5b2b9c68
HM
6273 /* Go yank in */
6274#ifdef VMS
6275 /* VMS wants read instead of fread, because fread doesn't respect */
6276 /* RMS record boundaries. This is not necessarily a good thing to be */
e468d35b
NIS
6277 /* doing, but we've got no other real choice - except avoid stdio
6278 as implementation - perhaps write a :vms layer ?
6279 */
5b2b9c68
HM
6280 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6281#else
6282 bytesread = PerlIO_read(fp, buffer, recsize);
6283#endif
27e6ca2d
AE
6284 if (bytesread < 0)
6285 bytesread = 0;
e311fd51 6286 SvCUR_set(sv, bytesread += append);
e670df4e 6287 buffer[bytesread] = '\0';
efd8b2ba 6288 goto return_string_or_null;
5b2b9c68 6289 }
3280af22 6290 else if (RsPARA(PL_rs)) {
c07a80fd 6291 rsptr = "\n\n";
6292 rslen = 2;
8bfdd7d9 6293 rspara = 1;
c07a80fd 6294 }
7d59b7e4
NIS
6295 else {
6296 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6297 if (PerlIO_isutf8(fp)) {
6298 rsptr = SvPVutf8(PL_rs, rslen);
6299 }
6300 else {
6301 if (SvUTF8(PL_rs)) {
6302 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6303 Perl_croak(aTHX_ "Wide character in $/");
6304 }
6305 }
93524f2b 6306 rsptr = SvPV_const(PL_rs, rslen);
7d59b7e4
NIS
6307 }
6308 }
6309
c07a80fd 6310 rslast = rslen ? rsptr[rslen - 1] : '\0';
6311
8bfdd7d9 6312 if (rspara) { /* have to do this both before and after */
79072805 6313 do { /* to make sure file boundaries work right */
760ac839 6314 if (PerlIO_eof(fp))
a0d0e21e 6315 return 0;
760ac839 6316 i = PerlIO_getc(fp);
79072805 6317 if (i != '\n') {
a0d0e21e
LW
6318 if (i == -1)
6319 return 0;
760ac839 6320 PerlIO_ungetc(fp,i);
79072805
LW
6321 break;
6322 }
6323 } while (i != EOF);
6324 }
c07a80fd 6325
760ac839
LW
6326 /* See if we know enough about I/O mechanism to cheat it ! */
6327
6328 /* This used to be #ifdef test - it is made run-time test for ease
1c846c1f 6329 of abstracting out stdio interface. One call should be cheap
760ac839
LW
6330 enough here - and may even be a macro allowing compile
6331 time optimization.
6332 */
6333
6334 if (PerlIO_fast_gets(fp)) {
6335
6336 /*
6337 * We're going to steal some values from the stdio struct
6338 * and put EVERYTHING in the innermost loop into registers.
6339 */
6340 register STDCHAR *ptr;
6341 STRLEN bpx;
6342 I32 shortbuffered;
6343
16660edb 6344#if defined(VMS) && defined(PERLIO_IS_STDIO)
6345 /* An ungetc()d char is handled separately from the regular
6346 * buffer, so we getc() it back out and stuff it in the buffer.
6347 */
6348 i = PerlIO_getc(fp);
6349 if (i == EOF) return 0;
6350 *(--((*fp)->_ptr)) = (unsigned char) i;
6351 (*fp)->_cnt++;
6352#endif
c07a80fd 6353
c2960299 6354 /* Here is some breathtakingly efficient cheating */
c07a80fd 6355
a20bf0c3 6356 cnt = PerlIO_get_cnt(fp); /* get count into register */
e468d35b 6357 /* make sure we have the room */
7a5fa8a2 6358 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
e468d35b 6359 /* Not room for all of it
7a5fa8a2 6360 if we are looking for a separator and room for some
e468d35b
NIS
6361 */
6362 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7a5fa8a2 6363 /* just process what we have room for */
79072805
LW
6364 shortbuffered = cnt - SvLEN(sv) + append + 1;
6365 cnt -= shortbuffered;
6366 }
6367 else {
6368 shortbuffered = 0;
bbce6d69 6369 /* remember that cnt can be negative */
eb160463 6370 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
79072805
LW
6371 }
6372 }
7a5fa8a2 6373 else
79072805 6374 shortbuffered = 0;
3f7c398e 6375 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
a20bf0c3 6376 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
16660edb 6377 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6378 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
16660edb 6379 DEBUG_P(PerlIO_printf(Perl_debug_log,
ba7abf9d 6380 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6381 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6382 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
79072805
LW
6383 for (;;) {
6384 screamer:
93a17b20 6385 if (cnt > 0) {
c07a80fd 6386 if (rslen) {
760ac839
LW
6387 while (cnt > 0) { /* this | eat */
6388 cnt--;
c07a80fd 6389 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6390 goto thats_all_folks; /* screams | sed :-) */
6391 }
6392 }
6393 else {
1c846c1f
NIS
6394 Copy(ptr, bp, cnt, char); /* this | eat */
6395 bp += cnt; /* screams | dust */
c07a80fd 6396 ptr += cnt; /* louder | sed :-) */
a5f75d66 6397 cnt = 0;
93a17b20 6398 }
79072805
LW
6399 }
6400
748a9306 6401 if (shortbuffered) { /* oh well, must extend */
79072805
LW
6402 cnt = shortbuffered;
6403 shortbuffered = 0;
3f7c398e 6404 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
6405 SvCUR_set(sv, bpx);
6406 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3f7c398e 6407 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
79072805
LW
6408 continue;
6409 }
6410
16660edb 6411 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841
GS
6412 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6413 PTR2UV(ptr),(long)cnt));
cc00df79 6414 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
ba7abf9d 6415#if 0
16660edb 6416 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6417 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6418 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6419 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 6420#endif
1c846c1f 6421 /* This used to call 'filbuf' in stdio form, but as that behaves like
774d564b 6422 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6423 another abstraction. */
760ac839 6424 i = PerlIO_getc(fp); /* get more characters */
ba7abf9d 6425#if 0
16660edb 6426 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6427 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6428 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6429 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 6430#endif
a20bf0c3
JH
6431 cnt = PerlIO_get_cnt(fp);
6432 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
16660edb 6433 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6434 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
79072805 6435
748a9306
LW
6436 if (i == EOF) /* all done for ever? */
6437 goto thats_really_all_folks;
6438
3f7c398e 6439 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
6440 SvCUR_set(sv, bpx);
6441 SvGROW(sv, bpx + cnt + 2);
3f7c398e 6442 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
c07a80fd 6443
eb160463 6444 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
79072805 6445
c07a80fd 6446 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
79072805 6447 goto thats_all_folks;
79072805
LW
6448 }
6449
6450thats_all_folks:
3f7c398e 6451 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
36477c24 6452 memNE((char*)bp - rslen, rsptr, rslen))
760ac839 6453 goto screamer; /* go back to the fray */
79072805
LW
6454thats_really_all_folks:
6455 if (shortbuffered)
6456 cnt += shortbuffered;
16660edb 6457 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6458 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
cc00df79 6459 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
16660edb 6460 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6461 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6462 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6463 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
79072805 6464 *bp = '\0';
3f7c398e 6465 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
16660edb 6466 DEBUG_P(PerlIO_printf(Perl_debug_log,
fb73857a 6467 "Screamer: done, len=%ld, string=|%.*s|\n",
3f7c398e 6468 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
760ac839
LW
6469 }
6470 else
79072805 6471 {
6edd2cd5 6472 /*The big, slow, and stupid way. */
27da23d5 6473#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
cbbf8932 6474 STDCHAR *buf = NULL;
a02a5408 6475 Newx(buf, 8192, STDCHAR);
6edd2cd5 6476 assert(buf);
4d2c4e07 6477#else
6edd2cd5 6478 STDCHAR buf[8192];
4d2c4e07 6479#endif
79072805 6480
760ac839 6481screamer2:
c07a80fd 6482 if (rslen) {
00b6aa41 6483 register const STDCHAR * const bpe = buf + sizeof(buf);
760ac839 6484 bp = buf;
eb160463 6485 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
760ac839
LW
6486 ; /* keep reading */
6487 cnt = bp - buf;
c07a80fd 6488 }
6489 else {
760ac839 6490 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
16660edb 6491 /* Accomodate broken VAXC compiler, which applies U8 cast to
6492 * both args of ?: operator, causing EOF to change into 255
6493 */
37be0adf 6494 if (cnt > 0)
cbe9e203
JH
6495 i = (U8)buf[cnt - 1];
6496 else
37be0adf 6497 i = EOF;
c07a80fd 6498 }
79072805 6499
cbe9e203
JH
6500 if (cnt < 0)
6501 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6502 if (append)
6503 sv_catpvn(sv, (char *) buf, cnt);
6504 else
6505 sv_setpvn(sv, (char *) buf, cnt);
c07a80fd 6506
6507 if (i != EOF && /* joy */
6508 (!rslen ||
6509 SvCUR(sv) < rslen ||
3f7c398e 6510 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
79072805
LW
6511 {
6512 append = -1;
63e4d877
CS
6513 /*
6514 * If we're reading from a TTY and we get a short read,
6515 * indicating that the user hit his EOF character, we need
6516 * to notice it now, because if we try to read from the TTY
6517 * again, the EOF condition will disappear.
6518 *
6519 * The comparison of cnt to sizeof(buf) is an optimization
6520 * that prevents unnecessary calls to feof().
6521 *
6522 * - jik 9/25/96
6523 */
bb7a0f54 6524 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
63e4d877 6525 goto screamer2;
79072805 6526 }
6edd2cd5 6527
27da23d5 6528#ifdef USE_HEAP_INSTEAD_OF_STACK
6edd2cd5
JH
6529 Safefree(buf);
6530#endif
79072805
LW
6531 }
6532
8bfdd7d9 6533 if (rspara) { /* have to do this both before and after */
c07a80fd 6534 while (i != EOF) { /* to make sure file boundaries work right */
760ac839 6535 i = PerlIO_getc(fp);
79072805 6536 if (i != '\n') {
760ac839 6537 PerlIO_ungetc(fp,i);
79072805
LW
6538 break;
6539 }
6540 }
6541 }
c07a80fd 6542
efd8b2ba 6543return_string_or_null:
bd61b366 6544 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
79072805
LW
6545}
6546
954c1994
GS
6547/*
6548=for apidoc sv_inc
6549
645c22ef
DM
6550Auto-increment of the value in the SV, doing string to numeric conversion
6551if necessary. Handles 'get' magic.
954c1994
GS
6552
6553=cut
6554*/
6555
79072805 6556void
864dbfa3 6557Perl_sv_inc(pTHX_ register SV *sv)
79072805 6558{
97aff369 6559 dVAR;
79072805 6560 register char *d;
463ee0b2 6561 int flags;
79072805
LW
6562
6563 if (!sv)
6564 return;
5b295bef 6565 SvGETMAGIC(sv);
ed6116ce 6566 if (SvTHINKFIRST(sv)) {
765f542d
NC
6567 if (SvIsCOW(sv))
6568 sv_force_normal_flags(sv, 0);
0f15f207 6569 if (SvREADONLY(sv)) {
923e4eb5 6570 if (IN_PERL_RUNTIME)
cea2e8a9 6571 Perl_croak(aTHX_ PL_no_modify);
0f15f207 6572 }
a0d0e21e 6573 if (SvROK(sv)) {
b5be31e9 6574 IV i;
9e7bc3e8
JD
6575 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6576 return;
56431972 6577 i = PTR2IV(SvRV(sv));
b5be31e9
SM
6578 sv_unref(sv);
6579 sv_setiv(sv, i);
a0d0e21e 6580 }
ed6116ce 6581 }
8990e307 6582 flags = SvFLAGS(sv);
28e5dec8
JH
6583 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6584 /* It's (privately or publicly) a float, but not tested as an
6585 integer, so test it to see. */
d460ef45 6586 (void) SvIV(sv);
28e5dec8
JH
6587 flags = SvFLAGS(sv);
6588 }
6589 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6590 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 6591#ifdef PERL_PRESERVE_IVUV
28e5dec8 6592 oops_its_int:
59d8ce62 6593#endif
25da4f38
IZ
6594 if (SvIsUV(sv)) {
6595 if (SvUVX(sv) == UV_MAX)
a1e868e7 6596 sv_setnv(sv, UV_MAX_P1);
25da4f38
IZ
6597 else
6598 (void)SvIOK_only_UV(sv);
607fa7f2 6599 SvUV_set(sv, SvUVX(sv) + 1);
25da4f38
IZ
6600 } else {
6601 if (SvIVX(sv) == IV_MAX)
28e5dec8 6602 sv_setuv(sv, (UV)IV_MAX + 1);
25da4f38
IZ
6603 else {
6604 (void)SvIOK_only(sv);
45977657 6605 SvIV_set(sv, SvIVX(sv) + 1);
1c846c1f 6606 }
55497cff 6607 }
79072805
LW
6608 return;
6609 }
28e5dec8
JH
6610 if (flags & SVp_NOK) {
6611 (void)SvNOK_only(sv);
9d6ce603 6612 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
6613 return;
6614 }
6615
3f7c398e 6616 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
28e5dec8 6617 if ((flags & SVTYPEMASK) < SVt_PVIV)
f5282e15 6618 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
28e5dec8 6619 (void)SvIOK_only(sv);
45977657 6620 SvIV_set(sv, 1);
79072805
LW
6621 return;
6622 }
463ee0b2 6623 d = SvPVX(sv);
79072805
LW
6624 while (isALPHA(*d)) d++;
6625 while (isDIGIT(*d)) d++;
6626 if (*d) {
28e5dec8 6627#ifdef PERL_PRESERVE_IVUV
d1be9408 6628 /* Got to punt this as an integer if needs be, but we don't issue
28e5dec8
JH
6629 warnings. Probably ought to make the sv_iv_please() that does
6630 the conversion if possible, and silently. */
504618e9 6631 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
6632 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6633 /* Need to try really hard to see if it's an integer.
6634 9.22337203685478e+18 is an integer.
6635 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6636 so $a="9.22337203685478e+18"; $a+0; $a++
6637 needs to be the same as $a="9.22337203685478e+18"; $a++
6638 or we go insane. */
d460ef45 6639
28e5dec8
JH
6640 (void) sv_2iv(sv);
6641 if (SvIOK(sv))
6642 goto oops_its_int;
6643
6644 /* sv_2iv *should* have made this an NV */
6645 if (flags & SVp_NOK) {
6646 (void)SvNOK_only(sv);
9d6ce603 6647 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
6648 return;
6649 }
6650 /* I don't think we can get here. Maybe I should assert this
6651 And if we do get here I suspect that sv_setnv will croak. NWC
6652 Fall through. */
6653#if defined(USE_LONG_DOUBLE)
6654 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 6655 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 6656#else
1779d84d 6657 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 6658 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
6659#endif
6660 }
6661#endif /* PERL_PRESERVE_IVUV */
3f7c398e 6662 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
79072805
LW
6663 return;
6664 }
6665 d--;
3f7c398e 6666 while (d >= SvPVX_const(sv)) {
79072805
LW
6667 if (isDIGIT(*d)) {
6668 if (++*d <= '9')
6669 return;
6670 *(d--) = '0';
6671 }
6672 else {
9d116dd7
JH
6673#ifdef EBCDIC
6674 /* MKS: The original code here died if letters weren't consecutive.
6675 * at least it didn't have to worry about non-C locales. The
6676 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
1c846c1f 6677 * arranged in order (although not consecutively) and that only
9d116dd7
JH
6678 * [A-Za-z] are accepted by isALPHA in the C locale.
6679 */
6680 if (*d != 'z' && *d != 'Z') {
6681 do { ++*d; } while (!isALPHA(*d));
6682 return;
6683 }
6684 *(d--) -= 'z' - 'a';
6685#else
79072805
LW
6686 ++*d;
6687 if (isALPHA(*d))
6688 return;
6689 *(d--) -= 'z' - 'a' + 1;
9d116dd7 6690#endif
79072805
LW
6691 }
6692 }
6693 /* oh,oh, the number grew */
6694 SvGROW(sv, SvCUR(sv) + 2);
b162af07 6695 SvCUR_set(sv, SvCUR(sv) + 1);
3f7c398e 6696 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
79072805
LW
6697 *d = d[-1];
6698 if (isDIGIT(d[1]))
6699 *d = '1';
6700 else
6701 *d = d[1];
6702}
6703
954c1994
GS
6704/*
6705=for apidoc sv_dec
6706
645c22ef
DM
6707Auto-decrement of the value in the SV, doing string to numeric conversion
6708if necessary. Handles 'get' magic.
954c1994
GS
6709
6710=cut
6711*/
6712
79072805 6713void
864dbfa3 6714Perl_sv_dec(pTHX_ register SV *sv)
79072805 6715{
97aff369 6716 dVAR;
463ee0b2
LW
6717 int flags;
6718
79072805
LW
6719 if (!sv)
6720 return;
5b295bef 6721 SvGETMAGIC(sv);
ed6116ce 6722 if (SvTHINKFIRST(sv)) {
765f542d
NC
6723 if (SvIsCOW(sv))
6724 sv_force_normal_flags(sv, 0);
0f15f207 6725 if (SvREADONLY(sv)) {
923e4eb5 6726 if (IN_PERL_RUNTIME)
cea2e8a9 6727 Perl_croak(aTHX_ PL_no_modify);
0f15f207 6728 }
a0d0e21e 6729 if (SvROK(sv)) {
b5be31e9 6730 IV i;
9e7bc3e8
JD
6731 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6732 return;
56431972 6733 i = PTR2IV(SvRV(sv));
b5be31e9
SM
6734 sv_unref(sv);
6735 sv_setiv(sv, i);
a0d0e21e 6736 }
ed6116ce 6737 }
28e5dec8
JH
6738 /* Unlike sv_inc we don't have to worry about string-never-numbers
6739 and keeping them magic. But we mustn't warn on punting */
8990e307 6740 flags = SvFLAGS(sv);
28e5dec8
JH
6741 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6742 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 6743#ifdef PERL_PRESERVE_IVUV
28e5dec8 6744 oops_its_int:
59d8ce62 6745#endif
25da4f38
IZ
6746 if (SvIsUV(sv)) {
6747 if (SvUVX(sv) == 0) {
6748 (void)SvIOK_only(sv);
45977657 6749 SvIV_set(sv, -1);
25da4f38
IZ
6750 }
6751 else {
6752 (void)SvIOK_only_UV(sv);
f4eee32f 6753 SvUV_set(sv, SvUVX(sv) - 1);
1c846c1f 6754 }
25da4f38
IZ
6755 } else {
6756 if (SvIVX(sv) == IV_MIN)
65202027 6757 sv_setnv(sv, (NV)IV_MIN - 1.0);
25da4f38
IZ
6758 else {
6759 (void)SvIOK_only(sv);
45977657 6760 SvIV_set(sv, SvIVX(sv) - 1);
1c846c1f 6761 }
55497cff 6762 }
6763 return;
6764 }
28e5dec8 6765 if (flags & SVp_NOK) {
9d6ce603 6766 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
6767 (void)SvNOK_only(sv);
6768 return;
6769 }
8990e307 6770 if (!(flags & SVp_POK)) {
ef088171
NC
6771 if ((flags & SVTYPEMASK) < SVt_PVIV)
6772 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
6773 SvIV_set(sv, -1);
6774 (void)SvIOK_only(sv);
79072805
LW
6775 return;
6776 }
28e5dec8
JH
6777#ifdef PERL_PRESERVE_IVUV
6778 {
504618e9 6779 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
6780 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6781 /* Need to try really hard to see if it's an integer.
6782 9.22337203685478e+18 is an integer.
6783 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6784 so $a="9.22337203685478e+18"; $a+0; $a--
6785 needs to be the same as $a="9.22337203685478e+18"; $a--
6786 or we go insane. */
d460ef45 6787
28e5dec8
JH
6788 (void) sv_2iv(sv);
6789 if (SvIOK(sv))
6790 goto oops_its_int;
6791
6792 /* sv_2iv *should* have made this an NV */
6793 if (flags & SVp_NOK) {
6794 (void)SvNOK_only(sv);
9d6ce603 6795 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
6796 return;
6797 }
6798 /* I don't think we can get here. Maybe I should assert this
6799 And if we do get here I suspect that sv_setnv will croak. NWC
6800 Fall through. */
6801#if defined(USE_LONG_DOUBLE)
6802 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 6803 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 6804#else
1779d84d 6805 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 6806 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
6807#endif
6808 }
6809 }
6810#endif /* PERL_PRESERVE_IVUV */
3f7c398e 6811 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
79072805
LW
6812}
6813
954c1994
GS
6814/*
6815=for apidoc sv_mortalcopy
6816
645c22ef 6817Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
d4236ebc
DM
6818The new SV is marked as mortal. It will be destroyed "soon", either by an
6819explicit call to FREETMPS, or by an implicit call at places such as
6820statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
954c1994
GS
6821
6822=cut
6823*/
6824
79072805
LW
6825/* Make a string that will exist for the duration of the expression
6826 * evaluation. Actually, it may have to last longer than that, but
6827 * hopefully we won't free it until it has been assigned to a
6828 * permanent location. */
6829
6830SV *
864dbfa3 6831Perl_sv_mortalcopy(pTHX_ SV *oldstr)
79072805 6832{
97aff369 6833 dVAR;
463ee0b2 6834 register SV *sv;
b881518d 6835
4561caa4 6836 new_SV(sv);
79072805 6837 sv_setsv(sv,oldstr);
677b06e3
GS
6838 EXTEND_MORTAL(1);
6839 PL_tmps_stack[++PL_tmps_ix] = sv;
8990e307
LW
6840 SvTEMP_on(sv);
6841 return sv;
6842}
6843
954c1994
GS
6844/*
6845=for apidoc sv_newmortal
6846
645c22ef 6847Creates a new null SV which is mortal. The reference count of the SV is
d4236ebc
DM
6848set to 1. It will be destroyed "soon", either by an explicit call to
6849FREETMPS, or by an implicit call at places such as statement boundaries.
6850See also C<sv_mortalcopy> and C<sv_2mortal>.
954c1994
GS
6851
6852=cut
6853*/
6854
8990e307 6855SV *
864dbfa3 6856Perl_sv_newmortal(pTHX)
8990e307 6857{
97aff369 6858 dVAR;
8990e307
LW
6859 register SV *sv;
6860
4561caa4 6861 new_SV(sv);
8990e307 6862 SvFLAGS(sv) = SVs_TEMP;
677b06e3
GS
6863 EXTEND_MORTAL(1);
6864 PL_tmps_stack[++PL_tmps_ix] = sv;
79072805
LW
6865 return sv;
6866}
6867
954c1994
GS
6868/*
6869=for apidoc sv_2mortal
6870
d4236ebc
DM
6871Marks an existing SV as mortal. The SV will be destroyed "soon", either
6872by an explicit call to FREETMPS, or by an implicit call at places such as
37d2ac18
NC
6873statement boundaries. SvTEMP() is turned on which means that the SV's
6874string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
6875and C<sv_mortalcopy>.
954c1994
GS
6876
6877=cut
6878*/
6879
79072805 6880SV *
864dbfa3 6881Perl_sv_2mortal(pTHX_ register SV *sv)
79072805 6882{
27da23d5 6883 dVAR;
79072805 6884 if (!sv)
7a5b473e 6885 return NULL;
d689ffdd 6886 if (SvREADONLY(sv) && SvIMMORTAL(sv))
11162842 6887 return sv;
677b06e3
GS
6888 EXTEND_MORTAL(1);
6889 PL_tmps_stack[++PL_tmps_ix] = sv;
8990e307 6890 SvTEMP_on(sv);
79072805
LW
6891 return sv;
6892}
6893
954c1994
GS
6894/*
6895=for apidoc newSVpv
6896
6897Creates a new SV and copies a string into it. The reference count for the
6898SV is set to 1. If C<len> is zero, Perl will compute the length using
6899strlen(). For efficiency, consider using C<newSVpvn> instead.
6900
6901=cut
6902*/
6903
79072805 6904SV *
864dbfa3 6905Perl_newSVpv(pTHX_ const char *s, STRLEN len)
79072805 6906{
97aff369 6907 dVAR;
463ee0b2 6908 register SV *sv;
79072805 6909
4561caa4 6910 new_SV(sv);
ddfa59c7 6911 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
79072805
LW
6912 return sv;
6913}
6914
954c1994
GS
6915/*
6916=for apidoc newSVpvn
6917
6918Creates a new SV and copies a string into it. The reference count for the
1c846c1f 6919SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
954c1994 6920string. You are responsible for ensuring that the source string is at least
9e09f5f2 6921C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
954c1994
GS
6922
6923=cut
6924*/
6925
9da1e3b5 6926SV *
864dbfa3 6927Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
9da1e3b5 6928{
97aff369 6929 dVAR;
9da1e3b5
MUN
6930 register SV *sv;
6931
6932 new_SV(sv);
9da1e3b5
MUN
6933 sv_setpvn(sv,s,len);
6934 return sv;
6935}
6936
bd08039b
NC
6937
6938/*
926f8064 6939=for apidoc newSVhek
bd08039b
NC
6940
6941Creates a new SV from the hash key structure. It will generate scalars that
5aaec2b4
NC
6942point to the shared string table where possible. Returns a new (undefined)
6943SV if the hek is NULL.
bd08039b
NC
6944
6945=cut
6946*/
6947
6948SV *
c1b02ed8 6949Perl_newSVhek(pTHX_ const HEK *hek)
bd08039b 6950{
97aff369 6951 dVAR;
5aaec2b4
NC
6952 if (!hek) {
6953 SV *sv;
6954
6955 new_SV(sv);
6956 return sv;
6957 }
6958
bd08039b
NC
6959 if (HEK_LEN(hek) == HEf_SVKEY) {
6960 return newSVsv(*(SV**)HEK_KEY(hek));
6961 } else {
6962 const int flags = HEK_FLAGS(hek);
6963 if (flags & HVhek_WASUTF8) {
6964 /* Trouble :-)
6965 Andreas would like keys he put in as utf8 to come back as utf8
6966 */
6967 STRLEN utf8_len = HEK_LEN(hek);
b64e5050
AL
6968 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
6969 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
bd08039b
NC
6970
6971 SvUTF8_on (sv);
6972 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
6973 return sv;
45e34800 6974 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
bd08039b
NC
6975 /* We don't have a pointer to the hv, so we have to replicate the
6976 flag into every HEK. This hv is using custom a hasing
6977 algorithm. Hence we can't return a shared string scalar, as
6978 that would contain the (wrong) hash value, and might get passed
45e34800
NC
6979 into an hv routine with a regular hash.
6980 Similarly, a hash that isn't using shared hash keys has to have
6981 the flag in every key so that we know not to try to call
6982 share_hek_kek on it. */
bd08039b 6983
b64e5050 6984 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
bd08039b
NC
6985 if (HEK_UTF8(hek))
6986 SvUTF8_on (sv);
6987 return sv;
6988 }
6989 /* This will be overwhelminly the most common case. */
409dfe77
NC
6990 {
6991 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
6992 more efficient than sharepvn(). */
6993 SV *sv;
6994
6995 new_SV(sv);
6996 sv_upgrade(sv, SVt_PV);
6997 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
6998 SvCUR_set(sv, HEK_LEN(hek));
6999 SvLEN_set(sv, 0);
7000 SvREADONLY_on(sv);
7001 SvFAKE_on(sv);
7002 SvPOK_on(sv);
7003 if (HEK_UTF8(hek))
7004 SvUTF8_on(sv);
7005 return sv;
7006 }
bd08039b
NC
7007 }
7008}
7009
1c846c1f
NIS
7010/*
7011=for apidoc newSVpvn_share
7012
3f7c398e 7013Creates a new SV with its SvPVX_const pointing to a shared string in the string
645c22ef
DM
7014table. If the string does not already exist in the table, it is created
7015first. Turns on READONLY and FAKE. The string's hash is stored in the UV
7016slot of the SV; if the C<hash> parameter is non-zero, that value is used;
7017otherwise the hash is computed. The idea here is that as the string table
3f7c398e 7018is used for shared hash keys these strings will have SvPVX_const == HeKEY and
645c22ef 7019hash lookup will avoid string compare.
1c846c1f
NIS
7020
7021=cut
7022*/
7023
7024SV *
c3654f1a 7025Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
1c846c1f 7026{
97aff369 7027 dVAR;
1c846c1f 7028 register SV *sv;
c3654f1a 7029 bool is_utf8 = FALSE;
a51caccf
NC
7030 const char *const orig_src = src;
7031
c3654f1a 7032 if (len < 0) {
77caf834 7033 STRLEN tmplen = -len;
c3654f1a 7034 is_utf8 = TRUE;
75a54232 7035 /* See the note in hv.c:hv_fetch() --jhi */
e1ec3a88 7036 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
75a54232
JH
7037 len = tmplen;
7038 }
1c846c1f 7039 if (!hash)
5afd6d42 7040 PERL_HASH(hash, src, len);
1c846c1f 7041 new_SV(sv);
bdd68bc3 7042 sv_upgrade(sv, SVt_PV);
f880fe2f 7043 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
b162af07 7044 SvCUR_set(sv, len);
b162af07 7045 SvLEN_set(sv, 0);
1c846c1f
NIS
7046 SvREADONLY_on(sv);
7047 SvFAKE_on(sv);
7048 SvPOK_on(sv);
c3654f1a
IH
7049 if (is_utf8)
7050 SvUTF8_on(sv);
a51caccf
NC
7051 if (src != orig_src)
7052 Safefree(src);
1c846c1f
NIS
7053 return sv;
7054}
7055
645c22ef 7056
cea2e8a9 7057#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
7058
7059/* pTHX_ magic can't cope with varargs, so this is a no-context
7060 * version of the main function, (which may itself be aliased to us).
7061 * Don't access this version directly.
7062 */
7063
46fc3d4c 7064SV *
cea2e8a9 7065Perl_newSVpvf_nocontext(const char* pat, ...)
46fc3d4c 7066{
cea2e8a9 7067 dTHX;
46fc3d4c 7068 register SV *sv;
7069 va_list args;
46fc3d4c 7070 va_start(args, pat);
c5be433b 7071 sv = vnewSVpvf(pat, &args);
46fc3d4c 7072 va_end(args);
7073 return sv;
7074}
cea2e8a9 7075#endif
46fc3d4c 7076
954c1994
GS
7077/*
7078=for apidoc newSVpvf
7079
645c22ef 7080Creates a new SV and initializes it with the string formatted like
954c1994
GS
7081C<sprintf>.
7082
7083=cut
7084*/
7085
cea2e8a9
GS
7086SV *
7087Perl_newSVpvf(pTHX_ const char* pat, ...)
7088{
7089 register SV *sv;
7090 va_list args;
cea2e8a9 7091 va_start(args, pat);
c5be433b 7092 sv = vnewSVpvf(pat, &args);
cea2e8a9
GS
7093 va_end(args);
7094 return sv;
7095}
46fc3d4c 7096
645c22ef
DM
7097/* backend for newSVpvf() and newSVpvf_nocontext() */
7098
79072805 7099SV *
c5be433b
GS
7100Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
7101{
97aff369 7102 dVAR;
c5be433b
GS
7103 register SV *sv;
7104 new_SV(sv);
4608196e 7105 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
7106 return sv;
7107}
7108
954c1994
GS
7109/*
7110=for apidoc newSVnv
7111
7112Creates a new SV and copies a floating point value into it.
7113The reference count for the SV is set to 1.
7114
7115=cut
7116*/
7117
c5be433b 7118SV *
65202027 7119Perl_newSVnv(pTHX_ NV n)
79072805 7120{
97aff369 7121 dVAR;
463ee0b2 7122 register SV *sv;
79072805 7123
4561caa4 7124 new_SV(sv);
79072805
LW
7125 sv_setnv(sv,n);
7126 return sv;
7127}
7128
954c1994
GS
7129/*
7130=for apidoc newSViv
7131
7132Creates a new SV and copies an integer into it. The reference count for the
7133SV is set to 1.
7134
7135=cut
7136*/
7137
79072805 7138SV *
864dbfa3 7139Perl_newSViv(pTHX_ IV i)
79072805 7140{
97aff369 7141 dVAR;
463ee0b2 7142 register SV *sv;
79072805 7143
4561caa4 7144 new_SV(sv);
79072805
LW
7145 sv_setiv(sv,i);
7146 return sv;
7147}
7148
954c1994 7149/*
1a3327fb
JH
7150=for apidoc newSVuv
7151
7152Creates a new SV and copies an unsigned integer into it.
7153The reference count for the SV is set to 1.
7154
7155=cut
7156*/
7157
7158SV *
7159Perl_newSVuv(pTHX_ UV u)
7160{
97aff369 7161 dVAR;
1a3327fb
JH
7162 register SV *sv;
7163
7164 new_SV(sv);
7165 sv_setuv(sv,u);
7166 return sv;
7167}
7168
7169/*
b9f83d2f
NC
7170=for apidoc newSV_type
7171
7172Creates a new SV, of the type specificied. The reference count for the new SV
7173is set to 1.
7174
7175=cut
7176*/
7177
7178SV *
7179Perl_newSV_type(pTHX_ svtype type)
7180{
7181 register SV *sv;
7182
7183 new_SV(sv);
7184 sv_upgrade(sv, type);
7185 return sv;
7186}
7187
7188/*
954c1994
GS
7189=for apidoc newRV_noinc
7190
7191Creates an RV wrapper for an SV. The reference count for the original
7192SV is B<not> incremented.
7193
7194=cut
7195*/
7196
2304df62 7197SV *
864dbfa3 7198Perl_newRV_noinc(pTHX_ SV *tmpRef)
2304df62 7199{
97aff369 7200 dVAR;
b9f83d2f 7201 register SV *sv = newSV_type(SVt_RV);
76e3520e 7202 SvTEMP_off(tmpRef);
b162af07 7203 SvRV_set(sv, tmpRef);
2304df62 7204 SvROK_on(sv);
2304df62
AD
7205 return sv;
7206}
7207
ff276b08 7208/* newRV_inc is the official function name to use now.
645c22ef
DM
7209 * newRV_inc is in fact #defined to newRV in sv.h
7210 */
7211
5f05dabc 7212SV *
7f466ec7 7213Perl_newRV(pTHX_ SV *sv)
5f05dabc 7214{
97aff369 7215 dVAR;
7f466ec7 7216 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
5f05dabc 7217}
5f05dabc 7218
954c1994
GS
7219/*
7220=for apidoc newSVsv
7221
7222Creates a new SV which is an exact duplicate of the original SV.
645c22ef 7223(Uses C<sv_setsv>).
954c1994
GS
7224
7225=cut
7226*/
7227
79072805 7228SV *
864dbfa3 7229Perl_newSVsv(pTHX_ register SV *old)
79072805 7230{
97aff369 7231 dVAR;
463ee0b2 7232 register SV *sv;
79072805
LW
7233
7234 if (!old)
7a5b473e 7235 return NULL;
8990e307 7236 if (SvTYPE(old) == SVTYPEMASK) {
0453d815 7237 if (ckWARN_d(WARN_INTERNAL))
9014280d 7238 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
a0714e2c 7239 return NULL;
79072805 7240 }
4561caa4 7241 new_SV(sv);
e90aabeb
NC
7242 /* SV_GMAGIC is the default for sv_setv()
7243 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7244 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7245 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
463ee0b2 7246 return sv;
79072805
LW
7247}
7248
645c22ef
DM
7249/*
7250=for apidoc sv_reset
7251
7252Underlying implementation for the C<reset> Perl function.
7253Note that the perl-level function is vaguely deprecated.
7254
7255=cut
7256*/
7257
79072805 7258void
e1ec3a88 7259Perl_sv_reset(pTHX_ register const char *s, HV *stash)
79072805 7260{
27da23d5 7261 dVAR;
4802d5d7 7262 char todo[PERL_UCHAR_MAX+1];
79072805 7263
49d8d3a1
MB
7264 if (!stash)
7265 return;
7266
79072805 7267 if (!*s) { /* reset ?? searches */
aec46f14 7268 MAGIC * const mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
8d2f4536
NC
7269 if (mg) {
7270 PMOP *pm = (PMOP *) mg->mg_obj;
7271 while (pm) {
c737faaf
YO
7272#ifdef USE_ITHREADS
7273 SvREADONLY_off(PL_regex_pad[pm->op_pmoffset]);
7274#else
7275 pm->op_pmflags &= ~PMf_USED;
7276#endif
8d2f4536
NC
7277 pm = pm->op_pmnext;
7278 }
79072805
LW
7279 }
7280 return;
7281 }
7282
7283 /* reset variables */
7284
7285 if (!HvARRAY(stash))
7286 return;
463ee0b2
LW
7287
7288 Zero(todo, 256, char);
79072805 7289 while (*s) {
b464bac0
AL
7290 I32 max;
7291 I32 i = (unsigned char)*s;
79072805
LW
7292 if (s[1] == '-') {
7293 s += 2;
7294 }
4802d5d7 7295 max = (unsigned char)*s++;
79072805 7296 for ( ; i <= max; i++) {
463ee0b2
LW
7297 todo[i] = 1;
7298 }
a0d0e21e 7299 for (i = 0; i <= (I32) HvMAX(stash); i++) {
b464bac0 7300 HE *entry;
79072805 7301 for (entry = HvARRAY(stash)[i];
9e35f4b3
GS
7302 entry;
7303 entry = HeNEXT(entry))
7304 {
b464bac0
AL
7305 register GV *gv;
7306 register SV *sv;
7307
1edc1566 7308 if (!todo[(U8)*HeKEY(entry)])
463ee0b2 7309 continue;
1edc1566 7310 gv = (GV*)HeVAL(entry);
79072805 7311 sv = GvSV(gv);
e203899d
NC
7312 if (sv) {
7313 if (SvTHINKFIRST(sv)) {
7314 if (!SvREADONLY(sv) && SvROK(sv))
7315 sv_unref(sv);
7316 /* XXX Is this continue a bug? Why should THINKFIRST
7317 exempt us from resetting arrays and hashes? */
7318 continue;
7319 }
7320 SvOK_off(sv);
7321 if (SvTYPE(sv) >= SVt_PV) {
7322 SvCUR_set(sv, 0);
bd61b366 7323 if (SvPVX_const(sv) != NULL)
e203899d
NC
7324 *SvPVX(sv) = '\0';
7325 SvTAINT(sv);
7326 }
79072805
LW
7327 }
7328 if (GvAV(gv)) {
7329 av_clear(GvAV(gv));
7330 }
bfcb3514 7331 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
b0269e46
AB
7332#if defined(VMS)
7333 Perl_die(aTHX_ "Can't reset %%ENV on this system");
7334#else /* ! VMS */
463ee0b2 7335 hv_clear(GvHV(gv));
b0269e46
AB
7336# if defined(USE_ENVIRON_ARRAY)
7337 if (gv == PL_envgv)
7338 my_clearenv();
7339# endif /* USE_ENVIRON_ARRAY */
7340#endif /* VMS */
79072805
LW
7341 }
7342 }
7343 }
7344 }
7345}
7346
645c22ef
DM
7347/*
7348=for apidoc sv_2io
7349
7350Using various gambits, try to get an IO from an SV: the IO slot if its a
7351GV; or the recursive result if we're an RV; or the IO slot of the symbol
7352named after the PV if we're a string.
7353
7354=cut
7355*/
7356
46fc3d4c 7357IO*
864dbfa3 7358Perl_sv_2io(pTHX_ SV *sv)
46fc3d4c 7359{
7360 IO* io;
7361 GV* gv;
7362
7363 switch (SvTYPE(sv)) {
7364 case SVt_PVIO:
7365 io = (IO*)sv;
7366 break;
7367 case SVt_PVGV:
7368 gv = (GV*)sv;
7369 io = GvIO(gv);
7370 if (!io)
cea2e8a9 7371 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
46fc3d4c 7372 break;
7373 default:
7374 if (!SvOK(sv))
cea2e8a9 7375 Perl_croak(aTHX_ PL_no_usym, "filehandle");
46fc3d4c 7376 if (SvROK(sv))
7377 return sv_2io(SvRV(sv));
f776e3cd 7378 gv = gv_fetchsv(sv, 0, SVt_PVIO);
46fc3d4c 7379 if (gv)
7380 io = GvIO(gv);
7381 else
7382 io = 0;
7383 if (!io)
be2597df 7384 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
46fc3d4c 7385 break;
7386 }
7387 return io;
7388}
7389
645c22ef
DM
7390/*
7391=for apidoc sv_2cv
7392
7393Using various gambits, try to get a CV from an SV; in addition, try if
7394possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
f2c0649b 7395The flags in C<lref> are passed to sv_fetchsv.
645c22ef
DM
7396
7397=cut
7398*/
7399
79072805 7400CV *
864dbfa3 7401Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
79072805 7402{
27da23d5 7403 dVAR;
a0714e2c 7404 GV *gv = NULL;
601f1833 7405 CV *cv = NULL;
79072805 7406
85dec29a
NC
7407 if (!sv) {
7408 *st = NULL;
7409 *gvp = NULL;
7410 return NULL;
7411 }
79072805 7412 switch (SvTYPE(sv)) {
79072805
LW
7413 case SVt_PVCV:
7414 *st = CvSTASH(sv);
a0714e2c 7415 *gvp = NULL;
79072805
LW
7416 return (CV*)sv;
7417 case SVt_PVHV:
7418 case SVt_PVAV:
ef58ba18 7419 *st = NULL;
a0714e2c 7420 *gvp = NULL;
601f1833 7421 return NULL;
8990e307
LW
7422 case SVt_PVGV:
7423 gv = (GV*)sv;
a0d0e21e 7424 *gvp = gv;
8990e307
LW
7425 *st = GvESTASH(gv);
7426 goto fix_gv;
7427
79072805 7428 default:
5b295bef 7429 SvGETMAGIC(sv);
a0d0e21e 7430 if (SvROK(sv)) {
823a54a3 7431 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
f5284f61
IZ
7432 tryAMAGICunDEREF(to_cv);
7433
62f274bf
GS
7434 sv = SvRV(sv);
7435 if (SvTYPE(sv) == SVt_PVCV) {
7436 cv = (CV*)sv;
a0714e2c 7437 *gvp = NULL;
62f274bf
GS
7438 *st = CvSTASH(cv);
7439 return cv;
7440 }
7441 else if(isGV(sv))
7442 gv = (GV*)sv;
7443 else
cea2e8a9 7444 Perl_croak(aTHX_ "Not a subroutine reference");
a0d0e21e 7445 }
62f274bf 7446 else if (isGV(sv))
79072805
LW
7447 gv = (GV*)sv;
7448 else
7a5fd60d 7449 gv = gv_fetchsv(sv, lref, SVt_PVCV);
79072805 7450 *gvp = gv;
ef58ba18
NC
7451 if (!gv) {
7452 *st = NULL;
601f1833 7453 return NULL;
ef58ba18 7454 }
e26df76a
NC
7455 /* Some flags to gv_fetchsv mean don't really create the GV */
7456 if (SvTYPE(gv) != SVt_PVGV) {
7457 *st = NULL;
7458 return NULL;
7459 }
79072805 7460 *st = GvESTASH(gv);
8990e307 7461 fix_gv:
8ebc5c01 7462 if (lref && !GvCVu(gv)) {
4633a7c4 7463 SV *tmpsv;
748a9306 7464 ENTER;
561b68a9 7465 tmpsv = newSV(0);
bd61b366 7466 gv_efullname3(tmpsv, gv, NULL);
f6ec51f7
GS
7467 /* XXX this is probably not what they think they're getting.
7468 * It has the same effect as "sub name;", i.e. just a forward
7469 * declaration! */
774d564b 7470 newSUB(start_subparse(FALSE, 0),
4633a7c4 7471 newSVOP(OP_CONST, 0, tmpsv),
5f66b61c 7472 NULL, NULL);
748a9306 7473 LEAVE;
8ebc5c01 7474 if (!GvCVu(gv))
35c1215d 7475 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
be2597df 7476 SVfARG(sv));
8990e307 7477 }
8ebc5c01 7478 return GvCVu(gv);
79072805
LW
7479 }
7480}
7481
c461cf8f
JH
7482/*
7483=for apidoc sv_true
7484
7485Returns true if the SV has a true value by Perl's rules.
645c22ef
DM
7486Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7487instead use an in-line version.
c461cf8f
JH
7488
7489=cut
7490*/
7491
79072805 7492I32
864dbfa3 7493Perl_sv_true(pTHX_ register SV *sv)
79072805 7494{
8990e307
LW
7495 if (!sv)
7496 return 0;
79072805 7497 if (SvPOK(sv)) {
823a54a3
AL
7498 register const XPV* const tXpv = (XPV*)SvANY(sv);
7499 if (tXpv &&
c2f1de04 7500 (tXpv->xpv_cur > 1 ||
339049b0 7501 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
79072805
LW
7502 return 1;
7503 else
7504 return 0;
7505 }
7506 else {
7507 if (SvIOK(sv))
463ee0b2 7508 return SvIVX(sv) != 0;
79072805
LW
7509 else {
7510 if (SvNOK(sv))
463ee0b2 7511 return SvNVX(sv) != 0.0;
79072805 7512 else
463ee0b2 7513 return sv_2bool(sv);
79072805
LW
7514 }
7515 }
7516}
79072805 7517
645c22ef 7518/*
c461cf8f
JH
7519=for apidoc sv_pvn_force
7520
7521Get a sensible string out of the SV somehow.
645c22ef
DM
7522A private implementation of the C<SvPV_force> macro for compilers which
7523can't cope with complex macro expressions. Always use the macro instead.
c461cf8f 7524
8d6d96c1
HS
7525=for apidoc sv_pvn_force_flags
7526
7527Get a sensible string out of the SV somehow.
7528If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7529appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7530implemented in terms of this function.
645c22ef
DM
7531You normally want to use the various wrapper macros instead: see
7532C<SvPV_force> and C<SvPV_force_nomg>
8d6d96c1
HS
7533
7534=cut
7535*/
7536
7537char *
7538Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7539{
97aff369 7540 dVAR;
6fc92669 7541 if (SvTHINKFIRST(sv) && !SvROK(sv))
765f542d 7542 sv_force_normal_flags(sv, 0);
1c846c1f 7543
a0d0e21e 7544 if (SvPOK(sv)) {
13c5b33c
NC
7545 if (lp)
7546 *lp = SvCUR(sv);
a0d0e21e
LW
7547 }
7548 else {
a3b680e6 7549 char *s;
13c5b33c
NC
7550 STRLEN len;
7551
4d84ee25 7552 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
b64e5050 7553 const char * const ref = sv_reftype(sv,0);
4d84ee25
NC
7554 if (PL_op)
7555 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
b64e5050 7556 ref, OP_NAME(PL_op));
4d84ee25 7557 else
b64e5050 7558 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
4d84ee25 7559 }
b64e5050 7560 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
cea2e8a9 7561 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
53e06cf0 7562 OP_NAME(PL_op));
b64e5050 7563 s = sv_2pv_flags(sv, &len, flags);
13c5b33c
NC
7564 if (lp)
7565 *lp = len;
7566
3f7c398e 7567 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
a0d0e21e
LW
7568 if (SvROK(sv))
7569 sv_unref(sv);
862a34c6 7570 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
a0d0e21e 7571 SvGROW(sv, len + 1);
706aa1c9 7572 Move(s,SvPVX(sv),len,char);
a0d0e21e
LW
7573 SvCUR_set(sv, len);
7574 *SvEND(sv) = '\0';
7575 }
7576 if (!SvPOK(sv)) {
7577 SvPOK_on(sv); /* validate pointer */
7578 SvTAINT(sv);
1d7c1841 7579 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 7580 PTR2UV(sv),SvPVX_const(sv)));
a0d0e21e
LW
7581 }
7582 }
4d84ee25 7583 return SvPVX_mutable(sv);
a0d0e21e
LW
7584}
7585
645c22ef 7586/*
645c22ef
DM
7587=for apidoc sv_pvbyten_force
7588
0feed65a 7589The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
645c22ef
DM
7590
7591=cut
7592*/
7593
7340a771
GS
7594char *
7595Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
7596{
46ec2f14 7597 sv_pvn_force(sv,lp);
ffebcc3e 7598 sv_utf8_downgrade(sv,0);
46ec2f14
TS
7599 *lp = SvCUR(sv);
7600 return SvPVX(sv);
7340a771
GS
7601}
7602
645c22ef 7603/*
c461cf8f
JH
7604=for apidoc sv_pvutf8n_force
7605
0feed65a 7606The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
c461cf8f
JH
7607
7608=cut
7609*/
7610
7340a771
GS
7611char *
7612Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
7613{
46ec2f14 7614 sv_pvn_force(sv,lp);
560a288e 7615 sv_utf8_upgrade(sv);
46ec2f14
TS
7616 *lp = SvCUR(sv);
7617 return SvPVX(sv);
7340a771
GS
7618}
7619
c461cf8f
JH
7620/*
7621=for apidoc sv_reftype
7622
7623Returns a string describing what the SV is a reference to.
7624
7625=cut
7626*/
7627
2b388283 7628const char *
bfed75c6 7629Perl_sv_reftype(pTHX_ const SV *sv, int ob)
a0d0e21e 7630{
07409e01
NC
7631 /* The fact that I don't need to downcast to char * everywhere, only in ?:
7632 inside return suggests a const propagation bug in g++. */
c86bf373 7633 if (ob && SvOBJECT(sv)) {
1b6737cc 7634 char * const name = HvNAME_get(SvSTASH(sv));
07409e01 7635 return name ? name : (char *) "__ANON__";
c86bf373 7636 }
a0d0e21e
LW
7637 else {
7638 switch (SvTYPE(sv)) {
7639 case SVt_NULL:
7640 case SVt_IV:
7641 case SVt_NV:
7642 case SVt_RV:
7643 case SVt_PV:
7644 case SVt_PVIV:
7645 case SVt_PVNV:
7646 case SVt_PVMG:
1cb0ed9b 7647 if (SvVOK(sv))
439cb1c4 7648 return "VSTRING";
a0d0e21e
LW
7649 if (SvROK(sv))
7650 return "REF";
7651 else
7652 return "SCALAR";
1cb0ed9b 7653
07409e01 7654 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
be65207d
DM
7655 /* tied lvalues should appear to be
7656 * scalars for backwards compatitbility */
7657 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
07409e01 7658 ? "SCALAR" : "LVALUE");
a0d0e21e
LW
7659 case SVt_PVAV: return "ARRAY";
7660 case SVt_PVHV: return "HASH";
7661 case SVt_PVCV: return "CODE";
7662 case SVt_PVGV: return "GLOB";
1d2dff63 7663 case SVt_PVFM: return "FORMAT";
27f9d8f3 7664 case SVt_PVIO: return "IO";
cecf5685 7665 case SVt_BIND: return "BIND";
a0d0e21e
LW
7666 default: return "UNKNOWN";
7667 }
7668 }
7669}
7670
954c1994
GS
7671/*
7672=for apidoc sv_isobject
7673
7674Returns a boolean indicating whether the SV is an RV pointing to a blessed
7675object. If the SV is not an RV, or if the object is not blessed, then this
7676will return false.
7677
7678=cut
7679*/
7680
463ee0b2 7681int
864dbfa3 7682Perl_sv_isobject(pTHX_ SV *sv)
85e6fe83 7683{
68dc0745 7684 if (!sv)
7685 return 0;
5b295bef 7686 SvGETMAGIC(sv);
85e6fe83
LW
7687 if (!SvROK(sv))
7688 return 0;
7689 sv = (SV*)SvRV(sv);
7690 if (!SvOBJECT(sv))
7691 return 0;
7692 return 1;
7693}
7694
954c1994
GS
7695/*
7696=for apidoc sv_isa
7697
7698Returns a boolean indicating whether the SV is blessed into the specified
7699class. This does not check for subtypes; use C<sv_derived_from> to verify
7700an inheritance relationship.
7701
7702=cut
7703*/
7704
85e6fe83 7705int
864dbfa3 7706Perl_sv_isa(pTHX_ SV *sv, const char *name)
463ee0b2 7707{
bfcb3514 7708 const char *hvname;
68dc0745 7709 if (!sv)
7710 return 0;
5b295bef 7711 SvGETMAGIC(sv);
ed6116ce 7712 if (!SvROK(sv))
463ee0b2 7713 return 0;
ed6116ce
LW
7714 sv = (SV*)SvRV(sv);
7715 if (!SvOBJECT(sv))
463ee0b2 7716 return 0;
bfcb3514
NC
7717 hvname = HvNAME_get(SvSTASH(sv));
7718 if (!hvname)
e27ad1f2 7719 return 0;
463ee0b2 7720
bfcb3514 7721 return strEQ(hvname, name);
463ee0b2
LW
7722}
7723
954c1994
GS
7724/*
7725=for apidoc newSVrv
7726
7727Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
7728it will be upgraded to one. If C<classname> is non-null then the new SV will
7729be blessed in the specified package. The new SV is returned and its
7730reference count is 1.
7731
7732=cut
7733*/
7734
463ee0b2 7735SV*
864dbfa3 7736Perl_newSVrv(pTHX_ SV *rv, const char *classname)
463ee0b2 7737{
97aff369 7738 dVAR;
463ee0b2
LW
7739 SV *sv;
7740
4561caa4 7741 new_SV(sv);
51cf62d8 7742
765f542d 7743 SV_CHECK_THINKFIRST_COW_DROP(rv);
52944de8 7744 (void)SvAMAGIC_off(rv);
51cf62d8 7745
0199fce9 7746 if (SvTYPE(rv) >= SVt_PVMG) {
a3b680e6 7747 const U32 refcnt = SvREFCNT(rv);
0199fce9
JD
7748 SvREFCNT(rv) = 0;
7749 sv_clear(rv);
7750 SvFLAGS(rv) = 0;
7751 SvREFCNT(rv) = refcnt;
0199fce9 7752
dc5494d2
NC
7753 sv_upgrade(rv, SVt_RV);
7754 } else if (SvROK(rv)) {
7755 SvREFCNT_dec(SvRV(rv));
7756 } else if (SvTYPE(rv) < SVt_RV)
0199fce9
JD
7757 sv_upgrade(rv, SVt_RV);
7758 else if (SvTYPE(rv) > SVt_RV) {
8bd4d4c5 7759 SvPV_free(rv);
0199fce9
JD
7760 SvCUR_set(rv, 0);
7761 SvLEN_set(rv, 0);
7762 }
51cf62d8 7763
0c34ef67 7764 SvOK_off(rv);
b162af07 7765 SvRV_set(rv, sv);
ed6116ce 7766 SvROK_on(rv);
463ee0b2 7767
a0d0e21e 7768 if (classname) {
da51bb9b 7769 HV* const stash = gv_stashpv(classname, GV_ADD);
a0d0e21e
LW
7770 (void)sv_bless(rv, stash);
7771 }
7772 return sv;
7773}
7774
954c1994
GS
7775/*
7776=for apidoc sv_setref_pv
7777
7778Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
7779argument will be upgraded to an RV. That RV will be modified to point to
7780the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7781into the SV. The C<classname> argument indicates the package for the
bd61b366 7782blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7783will have a reference count of 1, and the RV will be returned.
954c1994
GS
7784
7785Do not use with other Perl types such as HV, AV, SV, CV, because those
7786objects will become corrupted by the pointer copy process.
7787
7788Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7789
7790=cut
7791*/
7792
a0d0e21e 7793SV*
864dbfa3 7794Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
a0d0e21e 7795{
97aff369 7796 dVAR;
189b2af5 7797 if (!pv) {
3280af22 7798 sv_setsv(rv, &PL_sv_undef);
189b2af5
GS
7799 SvSETMAGIC(rv);
7800 }
a0d0e21e 7801 else
56431972 7802 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
a0d0e21e
LW
7803 return rv;
7804}
7805
954c1994
GS
7806/*
7807=for apidoc sv_setref_iv
7808
7809Copies an integer into a new SV, optionally blessing the SV. The C<rv>
7810argument will be upgraded to an RV. That RV will be modified to point to
7811the new SV. The C<classname> argument indicates the package for the
bd61b366 7812blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7813will have a reference count of 1, and the RV will be returned.
954c1994
GS
7814
7815=cut
7816*/
7817
a0d0e21e 7818SV*
864dbfa3 7819Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
a0d0e21e
LW
7820{
7821 sv_setiv(newSVrv(rv,classname), iv);
7822 return rv;
7823}
7824
954c1994 7825/*
e1c57cef
JH
7826=for apidoc sv_setref_uv
7827
7828Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
7829argument will be upgraded to an RV. That RV will be modified to point to
7830the new SV. The C<classname> argument indicates the package for the
bd61b366 7831blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7832will have a reference count of 1, and the RV will be returned.
e1c57cef
JH
7833
7834=cut
7835*/
7836
7837SV*
7838Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7839{
7840 sv_setuv(newSVrv(rv,classname), uv);
7841 return rv;
7842}
7843
7844/*
954c1994
GS
7845=for apidoc sv_setref_nv
7846
7847Copies a double into a new SV, optionally blessing the SV. The C<rv>
7848argument will be upgraded to an RV. That RV will be modified to point to
7849the new SV. The C<classname> argument indicates the package for the
bd61b366 7850blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7851will have a reference count of 1, and the RV will be returned.
954c1994
GS
7852
7853=cut
7854*/
7855
a0d0e21e 7856SV*
65202027 7857Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
a0d0e21e
LW
7858{
7859 sv_setnv(newSVrv(rv,classname), nv);
7860 return rv;
7861}
463ee0b2 7862
954c1994
GS
7863/*
7864=for apidoc sv_setref_pvn
7865
7866Copies a string into a new SV, optionally blessing the SV. The length of the
7867string must be specified with C<n>. The C<rv> argument will be upgraded to
7868an RV. That RV will be modified to point to the new SV. The C<classname>
7869argument indicates the package for the blessing. Set C<classname> to
bd61b366 7870C<NULL> to avoid the blessing. The new SV will have a reference count
d34c2299 7871of 1, and the RV will be returned.
954c1994
GS
7872
7873Note that C<sv_setref_pv> copies the pointer while this copies the string.
7874
7875=cut
7876*/
7877
a0d0e21e 7878SV*
1b6737cc 7879Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, const char *pv, STRLEN n)
a0d0e21e
LW
7880{
7881 sv_setpvn(newSVrv(rv,classname), pv, n);
463ee0b2
LW
7882 return rv;
7883}
7884
954c1994
GS
7885/*
7886=for apidoc sv_bless
7887
7888Blesses an SV into a specified package. The SV must be an RV. The package
7889must be designated by its stash (see C<gv_stashpv()>). The reference count
7890of the SV is unaffected.
7891
7892=cut
7893*/
7894
a0d0e21e 7895SV*
864dbfa3 7896Perl_sv_bless(pTHX_ SV *sv, HV *stash)
a0d0e21e 7897{
97aff369 7898 dVAR;
76e3520e 7899 SV *tmpRef;
a0d0e21e 7900 if (!SvROK(sv))
cea2e8a9 7901 Perl_croak(aTHX_ "Can't bless non-reference value");
76e3520e
GS
7902 tmpRef = SvRV(sv);
7903 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
7904 if (SvREADONLY(tmpRef))
cea2e8a9 7905 Perl_croak(aTHX_ PL_no_modify);
76e3520e
GS
7906 if (SvOBJECT(tmpRef)) {
7907 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 7908 --PL_sv_objcount;
76e3520e 7909 SvREFCNT_dec(SvSTASH(tmpRef));
2e3febc6 7910 }
a0d0e21e 7911 }
76e3520e
GS
7912 SvOBJECT_on(tmpRef);
7913 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 7914 ++PL_sv_objcount;
862a34c6 7915 SvUPGRADE(tmpRef, SVt_PVMG);
b37c2d43 7916 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc_simple(stash));
a0d0e21e 7917
2e3febc6
CS
7918 if (Gv_AMG(stash))
7919 SvAMAGIC_on(sv);
7920 else
52944de8 7921 (void)SvAMAGIC_off(sv);
a0d0e21e 7922
1edbfb88
AB
7923 if(SvSMAGICAL(tmpRef))
7924 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
7925 mg_set(tmpRef);
7926
7927
ecdeb87c 7928
a0d0e21e
LW
7929 return sv;
7930}
7931
645c22ef 7932/* Downgrades a PVGV to a PVMG.
645c22ef
DM
7933 */
7934
76e3520e 7935STATIC void
cea2e8a9 7936S_sv_unglob(pTHX_ SV *sv)
a0d0e21e 7937{
97aff369 7938 dVAR;
850fabdf 7939 void *xpvmg;
b37c2d43 7940 SV * const temp = sv_newmortal();
850fabdf 7941
a0d0e21e
LW
7942 assert(SvTYPE(sv) == SVt_PVGV);
7943 SvFAKE_off(sv);
180488f8
NC
7944 gv_efullname3(temp, (GV *) sv, "*");
7945
f7877b28 7946 if (GvGP(sv)) {
1edc1566 7947 gp_free((GV*)sv);
f7877b28 7948 }
e826b3c7 7949 if (GvSTASH(sv)) {
e15faf7d 7950 sv_del_backref((SV*)GvSTASH(sv), sv);
5c284bb0 7951 GvSTASH(sv) = NULL;
e826b3c7 7952 }
a5f75d66 7953 GvMULTI_off(sv);
acda4c6a
NC
7954 if (GvNAME_HEK(sv)) {
7955 unshare_hek(GvNAME_HEK(sv));
7956 }
2e5b91de 7957 isGV_with_GP_off(sv);
850fabdf
GS
7958
7959 /* need to keep SvANY(sv) in the right arena */
7960 xpvmg = new_XPVMG();
7961 StructCopy(SvANY(sv), xpvmg, XPVMG);
7962 del_XPVGV(SvANY(sv));
7963 SvANY(sv) = xpvmg;
7964
a0d0e21e
LW
7965 SvFLAGS(sv) &= ~SVTYPEMASK;
7966 SvFLAGS(sv) |= SVt_PVMG;
180488f8
NC
7967
7968 /* Intentionally not calling any local SET magic, as this isn't so much a
7969 set operation as merely an internal storage change. */
7970 sv_setsv_flags(sv, temp, 0);
a0d0e21e
LW
7971}
7972
954c1994 7973/*
840a7b70 7974=for apidoc sv_unref_flags
954c1994
GS
7975
7976Unsets the RV status of the SV, and decrements the reference count of
7977whatever was being referenced by the RV. This can almost be thought of
840a7b70
IZ
7978as a reversal of C<newSVrv>. The C<cflags> argument can contain
7979C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
7980(otherwise the decrementing is conditional on the reference count being
7981different from one or the reference being a readonly SV).
7889fe52 7982See C<SvROK_off>.
954c1994
GS
7983
7984=cut
7985*/
7986
ed6116ce 7987void
e15faf7d 7988Perl_sv_unref_flags(pTHX_ SV *ref, U32 flags)
ed6116ce 7989{
b64e5050 7990 SV* const target = SvRV(ref);
810b8aa5 7991
e15faf7d
NC
7992 if (SvWEAKREF(ref)) {
7993 sv_del_backref(target, ref);
7994 SvWEAKREF_off(ref);
7995 SvRV_set(ref, NULL);
810b8aa5
GS
7996 return;
7997 }
e15faf7d
NC
7998 SvRV_set(ref, NULL);
7999 SvROK_off(ref);
8000 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
04ca4930 8001 assigned to as BEGIN {$a = \"Foo"} will fail. */
e15faf7d
NC
8002 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8003 SvREFCNT_dec(target);
840a7b70 8004 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
e15faf7d 8005 sv_2mortal(target); /* Schedule for freeing later */
ed6116ce 8006}
8990e307 8007
840a7b70 8008/*
645c22ef
DM
8009=for apidoc sv_untaint
8010
8011Untaint an SV. Use C<SvTAINTED_off> instead.
8012=cut
8013*/
8014
bbce6d69 8015void
864dbfa3 8016Perl_sv_untaint(pTHX_ SV *sv)
bbce6d69 8017{
13f57bf8 8018 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
b64e5050 8019 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
36477c24 8020 if (mg)
565764a8 8021 mg->mg_len &= ~1;
36477c24 8022 }
bbce6d69 8023}
8024
645c22ef
DM
8025/*
8026=for apidoc sv_tainted
8027
8028Test an SV for taintedness. Use C<SvTAINTED> instead.
8029=cut
8030*/
8031
bbce6d69 8032bool
864dbfa3 8033Perl_sv_tainted(pTHX_ SV *sv)
bbce6d69 8034{
13f57bf8 8035 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
823a54a3 8036 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
2ddb8a4f 8037 if (mg && (mg->mg_len & 1) )
36477c24 8038 return TRUE;
8039 }
8040 return FALSE;
bbce6d69 8041}
8042
09540bc3
JH
8043/*
8044=for apidoc sv_setpviv
8045
8046Copies an integer into the given SV, also updating its string value.
8047Does not handle 'set' magic. See C<sv_setpviv_mg>.
8048
8049=cut
8050*/
8051
8052void
8053Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8054{
8055 char buf[TYPE_CHARS(UV)];
8056 char *ebuf;
b64e5050 8057 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
09540bc3
JH
8058
8059 sv_setpvn(sv, ptr, ebuf - ptr);
8060}
8061
8062/*
8063=for apidoc sv_setpviv_mg
8064
8065Like C<sv_setpviv>, but also handles 'set' magic.
8066
8067=cut
8068*/
8069
8070void
8071Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8072{
df7eb254 8073 sv_setpviv(sv, iv);
09540bc3
JH
8074 SvSETMAGIC(sv);
8075}
8076
cea2e8a9 8077#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
8078
8079/* pTHX_ magic can't cope with varargs, so this is a no-context
8080 * version of the main function, (which may itself be aliased to us).
8081 * Don't access this version directly.
8082 */
8083
cea2e8a9
GS
8084void
8085Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8086{
8087 dTHX;
8088 va_list args;
8089 va_start(args, pat);
c5be433b 8090 sv_vsetpvf(sv, pat, &args);
cea2e8a9
GS
8091 va_end(args);
8092}
8093
645c22ef
DM
8094/* pTHX_ magic can't cope with varargs, so this is a no-context
8095 * version of the main function, (which may itself be aliased to us).
8096 * Don't access this version directly.
8097 */
cea2e8a9
GS
8098
8099void
8100Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8101{
8102 dTHX;
8103 va_list args;
8104 va_start(args, pat);
c5be433b 8105 sv_vsetpvf_mg(sv, pat, &args);
cea2e8a9 8106 va_end(args);
cea2e8a9
GS
8107}
8108#endif
8109
954c1994
GS
8110/*
8111=for apidoc sv_setpvf
8112
bffc3d17
SH
8113Works like C<sv_catpvf> but copies the text into the SV instead of
8114appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
954c1994
GS
8115
8116=cut
8117*/
8118
46fc3d4c 8119void
864dbfa3 8120Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
46fc3d4c 8121{
8122 va_list args;
46fc3d4c 8123 va_start(args, pat);
c5be433b 8124 sv_vsetpvf(sv, pat, &args);
46fc3d4c 8125 va_end(args);
8126}
8127
bffc3d17
SH
8128/*
8129=for apidoc sv_vsetpvf
8130
8131Works like C<sv_vcatpvf> but copies the text into the SV instead of
8132appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8133
8134Usually used via its frontend C<sv_setpvf>.
8135
8136=cut
8137*/
645c22ef 8138
c5be433b
GS
8139void
8140Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8141{
4608196e 8142 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b 8143}
ef50df4b 8144
954c1994
GS
8145/*
8146=for apidoc sv_setpvf_mg
8147
8148Like C<sv_setpvf>, but also handles 'set' magic.
8149
8150=cut
8151*/
8152
ef50df4b 8153void
864dbfa3 8154Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
ef50df4b
GS
8155{
8156 va_list args;
ef50df4b 8157 va_start(args, pat);
c5be433b 8158 sv_vsetpvf_mg(sv, pat, &args);
ef50df4b 8159 va_end(args);
c5be433b
GS
8160}
8161
bffc3d17
SH
8162/*
8163=for apidoc sv_vsetpvf_mg
8164
8165Like C<sv_vsetpvf>, but also handles 'set' magic.
8166
8167Usually used via its frontend C<sv_setpvf_mg>.
8168
8169=cut
8170*/
645c22ef 8171
c5be433b
GS
8172void
8173Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8174{
4608196e 8175 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
8176 SvSETMAGIC(sv);
8177}
8178
cea2e8a9 8179#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
8180
8181/* pTHX_ magic can't cope with varargs, so this is a no-context
8182 * version of the main function, (which may itself be aliased to us).
8183 * Don't access this version directly.
8184 */
8185
cea2e8a9
GS
8186void
8187Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8188{
8189 dTHX;
8190 va_list args;
8191 va_start(args, pat);
c5be433b 8192 sv_vcatpvf(sv, pat, &args);
cea2e8a9
GS
8193 va_end(args);
8194}
8195
645c22ef
DM
8196/* pTHX_ magic can't cope with varargs, so this is a no-context
8197 * version of the main function, (which may itself be aliased to us).
8198 * Don't access this version directly.
8199 */
8200
cea2e8a9
GS
8201void
8202Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8203{
8204 dTHX;
8205 va_list args;
8206 va_start(args, pat);
c5be433b 8207 sv_vcatpvf_mg(sv, pat, &args);
cea2e8a9 8208 va_end(args);
cea2e8a9
GS
8209}
8210#endif
8211
954c1994
GS
8212/*
8213=for apidoc sv_catpvf
8214
d5ce4a7c
GA
8215Processes its arguments like C<sprintf> and appends the formatted
8216output to an SV. If the appended data contains "wide" characters
8217(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8218and characters >255 formatted with %c), the original SV might get
bffc3d17 8219upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
cdd94ca7
NC
8220C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8221valid UTF-8; if the original SV was bytes, the pattern should be too.
954c1994 8222
d5ce4a7c 8223=cut */
954c1994 8224
46fc3d4c 8225void
864dbfa3 8226Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
46fc3d4c 8227{
8228 va_list args;
46fc3d4c 8229 va_start(args, pat);
c5be433b 8230 sv_vcatpvf(sv, pat, &args);
46fc3d4c 8231 va_end(args);
8232}
8233
bffc3d17
SH
8234/*
8235=for apidoc sv_vcatpvf
8236
8237Processes its arguments like C<vsprintf> and appends the formatted output
8238to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
8239
8240Usually used via its frontend C<sv_catpvf>.
8241
8242=cut
8243*/
645c22ef 8244
ef50df4b 8245void
c5be433b
GS
8246Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8247{
4608196e 8248 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
8249}
8250
954c1994
GS
8251/*
8252=for apidoc sv_catpvf_mg
8253
8254Like C<sv_catpvf>, but also handles 'set' magic.
8255
8256=cut
8257*/
8258
c5be433b 8259void
864dbfa3 8260Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
ef50df4b
GS
8261{
8262 va_list args;
ef50df4b 8263 va_start(args, pat);
c5be433b 8264 sv_vcatpvf_mg(sv, pat, &args);
ef50df4b 8265 va_end(args);
c5be433b
GS
8266}
8267
bffc3d17
SH
8268/*
8269=for apidoc sv_vcatpvf_mg
8270
8271Like C<sv_vcatpvf>, but also handles 'set' magic.
8272
8273Usually used via its frontend C<sv_catpvf_mg>.
8274
8275=cut
8276*/
645c22ef 8277
c5be433b
GS
8278void
8279Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8280{
4608196e 8281 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
8282 SvSETMAGIC(sv);
8283}
8284
954c1994
GS
8285/*
8286=for apidoc sv_vsetpvfn
8287
bffc3d17 8288Works like C<sv_vcatpvfn> but copies the text into the SV instead of
954c1994
GS
8289appending it.
8290
bffc3d17 8291Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
645c22ef 8292
954c1994
GS
8293=cut
8294*/
8295
46fc3d4c 8296void
7d5ea4e7 8297Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
46fc3d4c 8298{
8299 sv_setpvn(sv, "", 0);
7d5ea4e7 8300 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
46fc3d4c 8301}
8302
2d00ba3b 8303STATIC I32
9dd79c3f 8304S_expect_number(pTHX_ char** pattern)
211dfcf1 8305{
97aff369 8306 dVAR;
211dfcf1
HS
8307 I32 var = 0;
8308 switch (**pattern) {
8309 case '1': case '2': case '3':
8310 case '4': case '5': case '6':
8311 case '7': case '8': case '9':
2fba7546
GA
8312 var = *(*pattern)++ - '0';
8313 while (isDIGIT(**pattern)) {
5f66b61c 8314 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
2fba7546
GA
8315 if (tmp < var)
8316 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_NAME(PL_op) : "sv_vcatpvfn"));
8317 var = tmp;
8318 }
211dfcf1
HS
8319 }
8320 return var;
8321}
211dfcf1 8322
c445ea15
AL
8323STATIC char *
8324S_F0convert(NV nv, char *endbuf, STRLEN *len)
4151a5fe 8325{
a3b680e6 8326 const int neg = nv < 0;
4151a5fe 8327 UV uv;
4151a5fe
IZ
8328
8329 if (neg)
8330 nv = -nv;
8331 if (nv < UV_MAX) {
b464bac0 8332 char *p = endbuf;
4151a5fe 8333 nv += 0.5;
028f8eaa 8334 uv = (UV)nv;
4151a5fe
IZ
8335 if (uv & 1 && uv == nv)
8336 uv--; /* Round to even */
8337 do {
a3b680e6 8338 const unsigned dig = uv % 10;
4151a5fe
IZ
8339 *--p = '0' + dig;
8340 } while (uv /= 10);
8341 if (neg)
8342 *--p = '-';
8343 *len = endbuf - p;
8344 return p;
8345 }
bd61b366 8346 return NULL;
4151a5fe
IZ
8347}
8348
8349
954c1994
GS
8350/*
8351=for apidoc sv_vcatpvfn
8352
8353Processes its arguments like C<vsprintf> and appends the formatted output
8354to an SV. Uses an array of SVs if the C style variable argument list is
8355missing (NULL). When running with taint checks enabled, indicates via
8356C<maybe_tainted> if results are untrustworthy (often due to the use of
8357locales).
8358
bffc3d17 8359Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
645c22ef 8360
954c1994
GS
8361=cut
8362*/
8363
8896765a
RB
8364
8365#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
8366 vecstr = (U8*)SvPV_const(vecsv,veclen);\
8367 vec_utf8 = DO_UTF8(vecsv);
8368
1ef29b0e
RGS
8369/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8370
46fc3d4c 8371void
7d5ea4e7 8372Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
46fc3d4c 8373{
97aff369 8374 dVAR;
46fc3d4c 8375 char *p;
8376 char *q;
a3b680e6 8377 const char *patend;
fc36a67e 8378 STRLEN origlen;
46fc3d4c 8379 I32 svix = 0;
27da23d5 8380 static const char nullstr[] = "(null)";
a0714e2c 8381 SV *argsv = NULL;
b464bac0
AL
8382 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
8383 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
a0714e2c 8384 SV *nsv = NULL;
4151a5fe
IZ
8385 /* Times 4: a decimal digit takes more than 3 binary digits.
8386 * NV_DIG: mantissa takes than many decimal digits.
8387 * Plus 32: Playing safe. */
8388 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8389 /* large enough for "%#.#f" --chip */
8390 /* what about long double NVs? --jhi */
db79b45b 8391
53c1dcc0
AL
8392 PERL_UNUSED_ARG(maybe_tainted);
8393
46fc3d4c 8394 /* no matter what, this is a string now */
fc36a67e 8395 (void)SvPV_force(sv, origlen);
46fc3d4c 8396
8896765a 8397 /* special-case "", "%s", and "%-p" (SVf - see below) */
46fc3d4c 8398 if (patlen == 0)
8399 return;
0dbb1585 8400 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
2d03de9c
AL
8401 if (args) {
8402 const char * const s = va_arg(*args, char*);
8403 sv_catpv(sv, s ? s : nullstr);
8404 }
8405 else if (svix < svmax) {
8406 sv_catsv(sv, *svargs);
2d03de9c
AL
8407 }
8408 return;
0dbb1585 8409 }
8896765a
RB
8410 if (args && patlen == 3 && pat[0] == '%' &&
8411 pat[1] == '-' && pat[2] == 'p') {
6c9570dc 8412 argsv = (SV*)va_arg(*args, void*);
8896765a 8413 sv_catsv(sv, argsv);
8896765a 8414 return;
46fc3d4c 8415 }
8416
1d917b39 8417#ifndef USE_LONG_DOUBLE
4151a5fe 8418 /* special-case "%.<number>[gf]" */
7af36d83 8419 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
4151a5fe
IZ
8420 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8421 unsigned digits = 0;
8422 const char *pp;
8423
8424 pp = pat + 2;
8425 while (*pp >= '0' && *pp <= '9')
8426 digits = 10 * digits + (*pp++ - '0');
028f8eaa 8427 if (pp - pat == (int)patlen - 1) {
4151a5fe
IZ
8428 NV nv;
8429
7af36d83 8430 if (svix < svmax)
4151a5fe
IZ
8431 nv = SvNV(*svargs);
8432 else
8433 return;
8434 if (*pp == 'g') {
2873255c
NC
8435 /* Add check for digits != 0 because it seems that some
8436 gconverts are buggy in this case, and we don't yet have
8437 a Configure test for this. */
8438 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8439 /* 0, point, slack */
2e59c212 8440 Gconvert(nv, (int)digits, 0, ebuf);
4151a5fe
IZ
8441 sv_catpv(sv, ebuf);
8442 if (*ebuf) /* May return an empty string for digits==0 */
8443 return;
8444 }
8445 } else if (!digits) {
8446 STRLEN l;
8447
8448 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8449 sv_catpvn(sv, p, l);
8450 return;
8451 }
8452 }
8453 }
8454 }
1d917b39 8455#endif /* !USE_LONG_DOUBLE */
4151a5fe 8456
2cf2cfc6 8457 if (!args && svix < svmax && DO_UTF8(*svargs))
205f51d8 8458 has_utf8 = TRUE;
2cf2cfc6 8459
46fc3d4c 8460 patend = (char*)pat + patlen;
8461 for (p = (char*)pat; p < patend; p = q) {
8462 bool alt = FALSE;
8463 bool left = FALSE;
b22c7a20 8464 bool vectorize = FALSE;
211dfcf1 8465 bool vectorarg = FALSE;
2cf2cfc6 8466 bool vec_utf8 = FALSE;
46fc3d4c 8467 char fill = ' ';
8468 char plus = 0;
8469 char intsize = 0;
8470 STRLEN width = 0;
fc36a67e 8471 STRLEN zeros = 0;
46fc3d4c 8472 bool has_precis = FALSE;
8473 STRLEN precis = 0;
c445ea15 8474 const I32 osvix = svix;
2cf2cfc6 8475 bool is_utf8 = FALSE; /* is this item utf8? */
20f6aaab
AS
8476#ifdef HAS_LDBL_SPRINTF_BUG
8477 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8 8478 with sfio - Allen <allens@cpan.org> */
20f6aaab
AS
8479 bool fix_ldbl_sprintf_bug = FALSE;
8480#endif
205f51d8 8481
46fc3d4c 8482 char esignbuf[4];
89ebb4a3 8483 U8 utf8buf[UTF8_MAXBYTES+1];
46fc3d4c 8484 STRLEN esignlen = 0;
8485
bd61b366 8486 const char *eptr = NULL;
fc36a67e 8487 STRLEN elen = 0;
a0714e2c 8488 SV *vecsv = NULL;
4608196e 8489 const U8 *vecstr = NULL;
b22c7a20 8490 STRLEN veclen = 0;
934abaf1 8491 char c = 0;
46fc3d4c 8492 int i;
9c5ffd7c 8493 unsigned base = 0;
8c8eb53c
RB
8494 IV iv = 0;
8495 UV uv = 0;
9e5b023a
JH
8496 /* we need a long double target in case HAS_LONG_DOUBLE but
8497 not USE_LONG_DOUBLE
8498 */
35fff930 8499#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9e5b023a
JH
8500 long double nv;
8501#else
65202027 8502 NV nv;
9e5b023a 8503#endif
46fc3d4c 8504 STRLEN have;
8505 STRLEN need;
8506 STRLEN gap;
7af36d83 8507 const char *dotstr = ".";
b22c7a20 8508 STRLEN dotstrlen = 1;
211dfcf1 8509 I32 efix = 0; /* explicit format parameter index */
eb3fce90 8510 I32 ewix = 0; /* explicit width index */
211dfcf1
HS
8511 I32 epix = 0; /* explicit precision index */
8512 I32 evix = 0; /* explicit vector index */
eb3fce90 8513 bool asterisk = FALSE;
46fc3d4c 8514
211dfcf1 8515 /* echo everything up to the next format specification */
46fc3d4c 8516 for (q = p; q < patend && *q != '%'; ++q) ;
8517 if (q > p) {
db79b45b
JH
8518 if (has_utf8 && !pat_utf8)
8519 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
8520 else
8521 sv_catpvn(sv, p, q - p);
46fc3d4c 8522 p = q;
8523 }
8524 if (q++ >= patend)
8525 break;
8526
211dfcf1
HS
8527/*
8528 We allow format specification elements in this order:
8529 \d+\$ explicit format parameter index
8530 [-+ 0#]+ flags
a472f209 8531 v|\*(\d+\$)?v vector with optional (optionally specified) arg
f3583277 8532 0 flag (as above): repeated to allow "v02"
211dfcf1
HS
8533 \d+|\*(\d+\$)? width using optional (optionally specified) arg
8534 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
8535 [hlqLV] size
8896765a
RB
8536 [%bcdefginopsuxDFOUX] format (mandatory)
8537*/
8538
8539 if (args) {
8540/*
8541 As of perl5.9.3, printf format checking is on by default.
8542 Internally, perl uses %p formats to provide an escape to
8543 some extended formatting. This block deals with those
8544 extensions: if it does not match, (char*)q is reset and
8545 the normal format processing code is used.
8546
8547 Currently defined extensions are:
8548 %p include pointer address (standard)
8549 %-p (SVf) include an SV (previously %_)
8550 %-<num>p include an SV with precision <num>
8551 %1p (VDf) include a v-string (as %vd)
8552 %<num>p reserved for future extensions
8553
8554 Robin Barker 2005-07-14
211dfcf1 8555*/
8896765a
RB
8556 char* r = q;
8557 bool sv = FALSE;
8558 STRLEN n = 0;
8559 if (*q == '-')
8560 sv = *q++;
c445ea15 8561 n = expect_number(&q);
8896765a
RB
8562 if (*q++ == 'p') {
8563 if (sv) { /* SVf */
8564 if (n) {
8565 precis = n;
8566 has_precis = TRUE;
8567 }
6c9570dc 8568 argsv = (SV*)va_arg(*args, void*);
8896765a
RB
8569 eptr = SvPVx_const(argsv, elen);
8570 if (DO_UTF8(argsv))
8571 is_utf8 = TRUE;
8572 goto string;
8573 }
8574#if vdNUMBER
8575 else if (n == vdNUMBER) { /* VDf */
8576 vectorize = TRUE;
8577 VECTORIZE_ARGS
8578 goto format_vd;
8579 }
8580#endif
8581 else if (n) {
8582 if (ckWARN_d(WARN_INTERNAL))
8583 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8584 "internal %%<num>p might conflict with future printf extensions");
8585 }
8586 }
8587 q = r;
8588 }
8589
c445ea15 8590 if ( (width = expect_number(&q)) ) {
211dfcf1
HS
8591 if (*q == '$') {
8592 ++q;
8593 efix = width;
8594 } else {
8595 goto gotwidth;
8596 }
8597 }
8598
fc36a67e 8599 /* FLAGS */
8600
46fc3d4c 8601 while (*q) {
8602 switch (*q) {
8603 case ' ':
8604 case '+':
9911cee9
TS
8605 if (plus == '+' && *q == ' ') /* '+' over ' ' */
8606 q++;
8607 else
8608 plus = *q++;
46fc3d4c 8609 continue;
8610
8611 case '-':
8612 left = TRUE;
8613 q++;
8614 continue;
8615
8616 case '0':
8617 fill = *q++;
8618 continue;
8619
8620 case '#':
8621 alt = TRUE;
8622 q++;
8623 continue;
8624
fc36a67e 8625 default:
8626 break;
8627 }
8628 break;
8629 }
46fc3d4c 8630
211dfcf1 8631 tryasterisk:
eb3fce90 8632 if (*q == '*') {
211dfcf1 8633 q++;
c445ea15 8634 if ( (ewix = expect_number(&q)) )
211dfcf1
HS
8635 if (*q++ != '$')
8636 goto unknown;
eb3fce90 8637 asterisk = TRUE;
211dfcf1
HS
8638 }
8639 if (*q == 'v') {
eb3fce90 8640 q++;
211dfcf1
HS
8641 if (vectorize)
8642 goto unknown;
9cbac4c7 8643 if ((vectorarg = asterisk)) {
211dfcf1
HS
8644 evix = ewix;
8645 ewix = 0;
8646 asterisk = FALSE;
8647 }
8648 vectorize = TRUE;
8649 goto tryasterisk;
eb3fce90
JH
8650 }
8651
211dfcf1 8652 if (!asterisk)
858a90f9 8653 {
7a5fa8a2 8654 if( *q == '0' )
f3583277 8655 fill = *q++;
c445ea15 8656 width = expect_number(&q);
858a90f9 8657 }
211dfcf1
HS
8658
8659 if (vectorize) {
8660 if (vectorarg) {
8661 if (args)
8662 vecsv = va_arg(*args, SV*);
7ad96abb
NC
8663 else if (evix) {
8664 vecsv = (evix > 0 && evix <= svmax)
8665 ? svargs[evix-1] : &PL_sv_undef;
8666 } else {
8667 vecsv = svix < svmax ? svargs[svix++] : &PL_sv_undef;
8668 }
245d4a47 8669 dotstr = SvPV_const(vecsv, dotstrlen);
640283f5
NC
8670 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
8671 bad with tied or overloaded values that return UTF8. */
211dfcf1 8672 if (DO_UTF8(vecsv))
2cf2cfc6 8673 is_utf8 = TRUE;
640283f5
NC
8674 else if (has_utf8) {
8675 vecsv = sv_mortalcopy(vecsv);
8676 sv_utf8_upgrade(vecsv);
8677 dotstr = SvPV_const(vecsv, dotstrlen);
8678 is_utf8 = TRUE;
8679 }
211dfcf1
HS
8680 }
8681 if (args) {
8896765a 8682 VECTORIZE_ARGS
eb3fce90 8683 }
7ad96abb 8684 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
211dfcf1 8685 vecsv = svargs[efix ? efix-1 : svix++];
245d4a47 8686 vecstr = (U8*)SvPV_const(vecsv,veclen);
2cf2cfc6 8687 vec_utf8 = DO_UTF8(vecsv);
96b8f7ce
JP
8688
8689 /* if this is a version object, we need to convert
8690 * back into v-string notation and then let the
8691 * vectorize happen normally
d7aa5382 8692 */
96b8f7ce
JP
8693 if (sv_derived_from(vecsv, "version")) {
8694 char *version = savesvpv(vecsv);
34ba6322
SP
8695 if ( hv_exists((HV*)SvRV(vecsv), "alpha", 5 ) ) {
8696 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8697 "vector argument not supported with alpha versions");
8698 goto unknown;
8699 }
96b8f7ce 8700 vecsv = sv_newmortal();
65b06e02 8701 scan_vstring(version, version + veclen, vecsv);
96b8f7ce
JP
8702 vecstr = (U8*)SvPV_const(vecsv, veclen);
8703 vec_utf8 = DO_UTF8(vecsv);
8704 Safefree(version);
d7aa5382 8705 }
211dfcf1
HS
8706 }
8707 else {
8708 vecstr = (U8*)"";
8709 veclen = 0;
8710 }
eb3fce90 8711 }
fc36a67e 8712
eb3fce90 8713 if (asterisk) {
fc36a67e 8714 if (args)
8715 i = va_arg(*args, int);
8716 else
eb3fce90
JH
8717 i = (ewix ? ewix <= svmax : svix < svmax) ?
8718 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
fc36a67e 8719 left |= (i < 0);
8720 width = (i < 0) ? -i : i;
fc36a67e 8721 }
211dfcf1 8722 gotwidth:
fc36a67e 8723
8724 /* PRECISION */
46fc3d4c 8725
fc36a67e 8726 if (*q == '.') {
8727 q++;
8728 if (*q == '*') {
211dfcf1 8729 q++;
c445ea15 8730 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
7b8dd722
HS
8731 goto unknown;
8732 /* XXX: todo, support specified precision parameter */
8733 if (epix)
211dfcf1 8734 goto unknown;
46fc3d4c 8735 if (args)
8736 i = va_arg(*args, int);
8737 else
eb3fce90
JH
8738 i = (ewix ? ewix <= svmax : svix < svmax)
8739 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9911cee9
TS
8740 precis = i;
8741 has_precis = !(i < 0);
fc36a67e 8742 }
8743 else {
8744 precis = 0;
8745 while (isDIGIT(*q))
8746 precis = precis * 10 + (*q++ - '0');
9911cee9 8747 has_precis = TRUE;
fc36a67e 8748 }
fc36a67e 8749 }
46fc3d4c 8750
fc36a67e 8751 /* SIZE */
46fc3d4c 8752
fc36a67e 8753 switch (*q) {
c623ac67
GS
8754#ifdef WIN32
8755 case 'I': /* Ix, I32x, and I64x */
8756# ifdef WIN64
8757 if (q[1] == '6' && q[2] == '4') {
8758 q += 3;
8759 intsize = 'q';
8760 break;
8761 }
8762# endif
8763 if (q[1] == '3' && q[2] == '2') {
8764 q += 3;
8765 break;
8766 }
8767# ifdef WIN64
8768 intsize = 'q';
8769# endif
8770 q++;
8771 break;
8772#endif
9e5b023a 8773#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
6f9bb7fd 8774 case 'L': /* Ld */
5f66b61c 8775 /*FALLTHROUGH*/
e5c81feb 8776#ifdef HAS_QUAD
6f9bb7fd 8777 case 'q': /* qd */
9e5b023a 8778#endif
6f9bb7fd
GS
8779 intsize = 'q';
8780 q++;
8781 break;
8782#endif
fc36a67e 8783 case 'l':
9e5b023a 8784#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
205f51d8 8785 if (*(q + 1) == 'l') { /* lld, llf */
fc36a67e 8786 intsize = 'q';
8787 q += 2;
46fc3d4c 8788 break;
cf2093f6 8789 }
fc36a67e 8790#endif
5f66b61c 8791 /*FALLTHROUGH*/
fc36a67e 8792 case 'h':
5f66b61c 8793 /*FALLTHROUGH*/
fc36a67e 8794 case 'V':
8795 intsize = *q++;
46fc3d4c 8796 break;
8797 }
8798
fc36a67e 8799 /* CONVERSION */
8800
211dfcf1
HS
8801 if (*q == '%') {
8802 eptr = q++;
8803 elen = 1;
26372e71
GA
8804 if (vectorize) {
8805 c = '%';
8806 goto unknown;
8807 }
211dfcf1
HS
8808 goto string;
8809 }
8810
26372e71 8811 if (!vectorize && !args) {
86c51f8b
NC
8812 if (efix) {
8813 const I32 i = efix-1;
8814 argsv = (i >= 0 && i < svmax) ? svargs[i] : &PL_sv_undef;
8815 } else {
8816 argsv = (svix >= 0 && svix < svmax)
8817 ? svargs[svix++] : &PL_sv_undef;
8818 }
863811b2 8819 }
211dfcf1 8820
46fc3d4c 8821 switch (c = *q++) {
8822
8823 /* STRINGS */
8824
46fc3d4c 8825 case 'c':
26372e71
GA
8826 if (vectorize)
8827 goto unknown;
8828 uv = (args) ? va_arg(*args, int) : SvIVx(argsv);
1bd104fb
JH
8829 if ((uv > 255 ||
8830 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
0064a8a9 8831 && !IN_BYTES) {
dfe13c55 8832 eptr = (char*)utf8buf;
9041c2e3 8833 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
2cf2cfc6 8834 is_utf8 = TRUE;
7e2040f0
GS
8835 }
8836 else {
8837 c = (char)uv;
8838 eptr = &c;
8839 elen = 1;
a0ed51b3 8840 }
46fc3d4c 8841 goto string;
8842
46fc3d4c 8843 case 's':
26372e71
GA
8844 if (vectorize)
8845 goto unknown;
8846 if (args) {
fc36a67e 8847 eptr = va_arg(*args, char*);
c635e13b 8848 if (eptr)
1d7c1841
GS
8849#ifdef MACOS_TRADITIONAL
8850 /* On MacOS, %#s format is used for Pascal strings */
8851 if (alt)
8852 elen = *eptr++;
8853 else
8854#endif
c635e13b 8855 elen = strlen(eptr);
8856 else {
27da23d5 8857 eptr = (char *)nullstr;
c635e13b 8858 elen = sizeof nullstr - 1;
8859 }
46fc3d4c 8860 }
211dfcf1 8861 else {
4d84ee25 8862 eptr = SvPVx_const(argsv, elen);
7e2040f0 8863 if (DO_UTF8(argsv)) {
59b61096 8864 I32 old_precis = precis;
a0ed51b3
LW
8865 if (has_precis && precis < elen) {
8866 I32 p = precis;
7e2040f0 8867 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
a0ed51b3
LW
8868 precis = p;
8869 }
8870 if (width) { /* fudge width (can't fudge elen) */
59b61096
AV
8871 if (has_precis && precis < elen)
8872 width += precis - old_precis;
8873 else
8874 width += elen - sv_len_utf8(argsv);
a0ed51b3 8875 }
2cf2cfc6 8876 is_utf8 = TRUE;
a0ed51b3
LW
8877 }
8878 }
fc36a67e 8879
46fc3d4c 8880 string:
8881 if (has_precis && elen > precis)
8882 elen = precis;
8883 break;
8884
8885 /* INTEGERS */
8886
fc36a67e 8887 case 'p':
be75b157 8888 if (alt || vectorize)
c2e66d9e 8889 goto unknown;
211dfcf1 8890 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
fc36a67e 8891 base = 16;
8892 goto integer;
8893
46fc3d4c 8894 case 'D':
29fe7a80 8895#ifdef IV_IS_QUAD
22f3ae8c 8896 intsize = 'q';
29fe7a80 8897#else
46fc3d4c 8898 intsize = 'l';
29fe7a80 8899#endif
5f66b61c 8900 /*FALLTHROUGH*/
46fc3d4c 8901 case 'd':
8902 case 'i':
8896765a
RB
8903#if vdNUMBER
8904 format_vd:
8905#endif
b22c7a20 8906 if (vectorize) {
ba210ebe 8907 STRLEN ulen;
211dfcf1
HS
8908 if (!veclen)
8909 continue;
2cf2cfc6
A
8910 if (vec_utf8)
8911 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8912 UTF8_ALLOW_ANYUV);
b22c7a20 8913 else {
e83d50c9 8914 uv = *vecstr;
b22c7a20
GS
8915 ulen = 1;
8916 }
8917 vecstr += ulen;
8918 veclen -= ulen;
e83d50c9
JP
8919 if (plus)
8920 esignbuf[esignlen++] = plus;
b22c7a20
GS
8921 }
8922 else if (args) {
46fc3d4c 8923 switch (intsize) {
8924 case 'h': iv = (short)va_arg(*args, int); break;
46fc3d4c 8925 case 'l': iv = va_arg(*args, long); break;
fc36a67e 8926 case 'V': iv = va_arg(*args, IV); break;
b10c0dba 8927 default: iv = va_arg(*args, int); break;
cf2093f6
JH
8928#ifdef HAS_QUAD
8929 case 'q': iv = va_arg(*args, Quad_t); break;
8930#endif
46fc3d4c 8931 }
8932 }
8933 else {
b10c0dba 8934 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
46fc3d4c 8935 switch (intsize) {
b10c0dba
MHM
8936 case 'h': iv = (short)tiv; break;
8937 case 'l': iv = (long)tiv; break;
8938 case 'V':
8939 default: iv = tiv; break;
cf2093f6 8940#ifdef HAS_QUAD
b10c0dba 8941 case 'q': iv = (Quad_t)tiv; break;
cf2093f6 8942#endif
46fc3d4c 8943 }
8944 }
e83d50c9
JP
8945 if ( !vectorize ) /* we already set uv above */
8946 {
8947 if (iv >= 0) {
8948 uv = iv;
8949 if (plus)
8950 esignbuf[esignlen++] = plus;
8951 }
8952 else {
8953 uv = -iv;
8954 esignbuf[esignlen++] = '-';
8955 }
46fc3d4c 8956 }
8957 base = 10;
8958 goto integer;
8959
fc36a67e 8960 case 'U':
29fe7a80 8961#ifdef IV_IS_QUAD
22f3ae8c 8962 intsize = 'q';
29fe7a80 8963#else
fc36a67e 8964 intsize = 'l';
29fe7a80 8965#endif
5f66b61c 8966 /*FALLTHROUGH*/
fc36a67e 8967 case 'u':
8968 base = 10;
8969 goto uns_integer;
8970
7ff06cc7 8971 case 'B':
4f19785b
WSI
8972 case 'b':
8973 base = 2;
8974 goto uns_integer;
8975
46fc3d4c 8976 case 'O':
29fe7a80 8977#ifdef IV_IS_QUAD
22f3ae8c 8978 intsize = 'q';
29fe7a80 8979#else
46fc3d4c 8980 intsize = 'l';
29fe7a80 8981#endif
5f66b61c 8982 /*FALLTHROUGH*/
46fc3d4c 8983 case 'o':
8984 base = 8;
8985 goto uns_integer;
8986
8987 case 'X':
46fc3d4c 8988 case 'x':
8989 base = 16;
46fc3d4c 8990
8991 uns_integer:
b22c7a20 8992 if (vectorize) {
ba210ebe 8993 STRLEN ulen;
b22c7a20 8994 vector:
211dfcf1
HS
8995 if (!veclen)
8996 continue;
2cf2cfc6
A
8997 if (vec_utf8)
8998 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8999 UTF8_ALLOW_ANYUV);
b22c7a20 9000 else {
a05b299f 9001 uv = *vecstr;
b22c7a20
GS
9002 ulen = 1;
9003 }
9004 vecstr += ulen;
9005 veclen -= ulen;
9006 }
9007 else if (args) {
46fc3d4c 9008 switch (intsize) {
9009 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
46fc3d4c 9010 case 'l': uv = va_arg(*args, unsigned long); break;
fc36a67e 9011 case 'V': uv = va_arg(*args, UV); break;
b10c0dba 9012 default: uv = va_arg(*args, unsigned); break;
cf2093f6 9013#ifdef HAS_QUAD
9e3321a5 9014 case 'q': uv = va_arg(*args, Uquad_t); break;
cf2093f6 9015#endif
46fc3d4c 9016 }
9017 }
9018 else {
b10c0dba 9019 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
46fc3d4c 9020 switch (intsize) {
b10c0dba
MHM
9021 case 'h': uv = (unsigned short)tuv; break;
9022 case 'l': uv = (unsigned long)tuv; break;
9023 case 'V':
9024 default: uv = tuv; break;
cf2093f6 9025#ifdef HAS_QUAD
b10c0dba 9026 case 'q': uv = (Uquad_t)tuv; break;
cf2093f6 9027#endif
46fc3d4c 9028 }
9029 }
9030
9031 integer:
4d84ee25
NC
9032 {
9033 char *ptr = ebuf + sizeof ebuf;
1387f30c
DD
9034 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
9035 zeros = 0;
9036
4d84ee25
NC
9037 switch (base) {
9038 unsigned dig;
9039 case 16:
14eb61ab 9040 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
4d84ee25
NC
9041 do {
9042 dig = uv & 15;
9043 *--ptr = p[dig];
9044 } while (uv >>= 4);
1387f30c 9045 if (tempalt) {
4d84ee25
NC
9046 esignbuf[esignlen++] = '0';
9047 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9048 }
9049 break;
9050 case 8:
9051 do {
9052 dig = uv & 7;
9053 *--ptr = '0' + dig;
9054 } while (uv >>= 3);
9055 if (alt && *ptr != '0')
9056 *--ptr = '0';
9057 break;
9058 case 2:
9059 do {
9060 dig = uv & 1;
9061 *--ptr = '0' + dig;
9062 } while (uv >>= 1);
1387f30c 9063 if (tempalt) {
4d84ee25 9064 esignbuf[esignlen++] = '0';
7ff06cc7 9065 esignbuf[esignlen++] = c;
4d84ee25
NC
9066 }
9067 break;
9068 default: /* it had better be ten or less */
9069 do {
9070 dig = uv % base;
9071 *--ptr = '0' + dig;
9072 } while (uv /= base);
9073 break;
46fc3d4c 9074 }
4d84ee25
NC
9075 elen = (ebuf + sizeof ebuf) - ptr;
9076 eptr = ptr;
9077 if (has_precis) {
9078 if (precis > elen)
9079 zeros = precis - elen;
e6bb52fd
TS
9080 else if (precis == 0 && elen == 1 && *eptr == '0'
9081 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
4d84ee25 9082 elen = 0;
9911cee9
TS
9083
9084 /* a precision nullifies the 0 flag. */
9085 if (fill == '0')
9086 fill = ' ';
eda88b6d 9087 }
c10ed8b9 9088 }
46fc3d4c 9089 break;
9090
9091 /* FLOATING POINT */
9092
fc36a67e 9093 case 'F':
9094 c = 'f'; /* maybe %F isn't supported here */
5f66b61c 9095 /*FALLTHROUGH*/
46fc3d4c 9096 case 'e': case 'E':
fc36a67e 9097 case 'f':
46fc3d4c 9098 case 'g': case 'G':
26372e71
GA
9099 if (vectorize)
9100 goto unknown;
46fc3d4c 9101
9102 /* This is evil, but floating point is even more evil */
9103
9e5b023a
JH
9104 /* for SV-style calling, we can only get NV
9105 for C-style calling, we assume %f is double;
9106 for simplicity we allow any of %Lf, %llf, %qf for long double
9107 */
9108 switch (intsize) {
9109 case 'V':
9110#if defined(USE_LONG_DOUBLE)
9111 intsize = 'q';
9112#endif
9113 break;
8a2e3f14 9114/* [perl #20339] - we should accept and ignore %lf rather than die */
00e17364 9115 case 'l':
5f66b61c 9116 /*FALLTHROUGH*/
9e5b023a
JH
9117 default:
9118#if defined(USE_LONG_DOUBLE)
9119 intsize = args ? 0 : 'q';
9120#endif
9121 break;
9122 case 'q':
9123#if defined(HAS_LONG_DOUBLE)
9124 break;
9125#else
5f66b61c 9126 /*FALLTHROUGH*/
9e5b023a
JH
9127#endif
9128 case 'h':
9e5b023a
JH
9129 goto unknown;
9130 }
9131
9132 /* now we need (long double) if intsize == 'q', else (double) */
26372e71 9133 nv = (args) ?
35fff930
JH
9134#if LONG_DOUBLESIZE > DOUBLESIZE
9135 intsize == 'q' ?
205f51d8
AS
9136 va_arg(*args, long double) :
9137 va_arg(*args, double)
35fff930 9138#else
205f51d8 9139 va_arg(*args, double)
35fff930 9140#endif
9e5b023a 9141 : SvNVx(argsv);
fc36a67e 9142
9143 need = 0;
9144 if (c != 'e' && c != 'E') {
9145 i = PERL_INT_MIN;
9e5b023a
JH
9146 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9147 will cast our (long double) to (double) */
73b309ea 9148 (void)Perl_frexp(nv, &i);
fc36a67e 9149 if (i == PERL_INT_MIN)
cea2e8a9 9150 Perl_die(aTHX_ "panic: frexp");
c635e13b 9151 if (i > 0)
fc36a67e 9152 need = BIT_DIGITS(i);
9153 }
9154 need += has_precis ? precis : 6; /* known default */
20f6aaab 9155
fc36a67e 9156 if (need < width)
9157 need = width;
9158
20f6aaab
AS
9159#ifdef HAS_LDBL_SPRINTF_BUG
9160 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8
AS
9161 with sfio - Allen <allens@cpan.org> */
9162
9163# ifdef DBL_MAX
9164# define MY_DBL_MAX DBL_MAX
9165# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9166# if DOUBLESIZE >= 8
9167# define MY_DBL_MAX 1.7976931348623157E+308L
9168# else
9169# define MY_DBL_MAX 3.40282347E+38L
9170# endif
9171# endif
9172
9173# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9174# define MY_DBL_MAX_BUG 1L
20f6aaab 9175# else
205f51d8 9176# define MY_DBL_MAX_BUG MY_DBL_MAX
20f6aaab 9177# endif
20f6aaab 9178
205f51d8
AS
9179# ifdef DBL_MIN
9180# define MY_DBL_MIN DBL_MIN
9181# else /* XXX guessing! -Allen */
9182# if DOUBLESIZE >= 8
9183# define MY_DBL_MIN 2.2250738585072014E-308L
9184# else
9185# define MY_DBL_MIN 1.17549435E-38L
9186# endif
9187# endif
20f6aaab 9188
205f51d8
AS
9189 if ((intsize == 'q') && (c == 'f') &&
9190 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9191 (need < DBL_DIG)) {
9192 /* it's going to be short enough that
9193 * long double precision is not needed */
9194
9195 if ((nv <= 0L) && (nv >= -0L))
9196 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9197 else {
9198 /* would use Perl_fp_class as a double-check but not
9199 * functional on IRIX - see perl.h comments */
9200
9201 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9202 /* It's within the range that a double can represent */
9203#if defined(DBL_MAX) && !defined(DBL_MIN)
9204 if ((nv >= ((long double)1/DBL_MAX)) ||
9205 (nv <= (-(long double)1/DBL_MAX)))
20f6aaab 9206#endif
205f51d8 9207 fix_ldbl_sprintf_bug = TRUE;
20f6aaab 9208 }
205f51d8
AS
9209 }
9210 if (fix_ldbl_sprintf_bug == TRUE) {
9211 double temp;
9212
9213 intsize = 0;
9214 temp = (double)nv;
9215 nv = (NV)temp;
9216 }
20f6aaab 9217 }
205f51d8
AS
9218
9219# undef MY_DBL_MAX
9220# undef MY_DBL_MAX_BUG
9221# undef MY_DBL_MIN
9222
20f6aaab
AS
9223#endif /* HAS_LDBL_SPRINTF_BUG */
9224
46fc3d4c 9225 need += 20; /* fudge factor */
80252599
GS
9226 if (PL_efloatsize < need) {
9227 Safefree(PL_efloatbuf);
9228 PL_efloatsize = need + 20; /* more fudge */
a02a5408 9229 Newx(PL_efloatbuf, PL_efloatsize, char);
7d5ea4e7 9230 PL_efloatbuf[0] = '\0';
46fc3d4c 9231 }
9232
4151a5fe
IZ
9233 if ( !(width || left || plus || alt) && fill != '0'
9234 && has_precis && intsize != 'q' ) { /* Shortcuts */
2873255c
NC
9235 /* See earlier comment about buggy Gconvert when digits,
9236 aka precis is 0 */
9237 if ( c == 'g' && precis) {
2e59c212 9238 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
4150c189
NC
9239 /* May return an empty string for digits==0 */
9240 if (*PL_efloatbuf) {
9241 elen = strlen(PL_efloatbuf);
4151a5fe 9242 goto float_converted;
4150c189 9243 }
4151a5fe
IZ
9244 } else if ( c == 'f' && !precis) {
9245 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9246 break;
9247 }
9248 }
4d84ee25
NC
9249 {
9250 char *ptr = ebuf + sizeof ebuf;
9251 *--ptr = '\0';
9252 *--ptr = c;
9253 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9e5b023a 9254#if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
4d84ee25
NC
9255 if (intsize == 'q') {
9256 /* Copy the one or more characters in a long double
9257 * format before the 'base' ([efgEFG]) character to
9258 * the format string. */
9259 static char const prifldbl[] = PERL_PRIfldbl;
9260 char const *p = prifldbl + sizeof(prifldbl) - 3;
9261 while (p >= prifldbl) { *--ptr = *p--; }
9262 }
65202027 9263#endif
4d84ee25
NC
9264 if (has_precis) {
9265 base = precis;
9266 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9267 *--ptr = '.';
9268 }
9269 if (width) {
9270 base = width;
9271 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9272 }
9273 if (fill == '0')
9274 *--ptr = fill;
9275 if (left)
9276 *--ptr = '-';
9277 if (plus)
9278 *--ptr = plus;
9279 if (alt)
9280 *--ptr = '#';
9281 *--ptr = '%';
9282
9283 /* No taint. Otherwise we are in the strange situation
9284 * where printf() taints but print($float) doesn't.
9285 * --jhi */
9e5b023a 9286#if defined(HAS_LONG_DOUBLE)
4150c189 9287 elen = ((intsize == 'q')
d9fad198
JH
9288 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
9289 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9e5b023a 9290#else
4150c189 9291 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9e5b023a 9292#endif
4d84ee25 9293 }
4151a5fe 9294 float_converted:
80252599 9295 eptr = PL_efloatbuf;
46fc3d4c 9296 break;
9297
fc36a67e 9298 /* SPECIAL */
9299
9300 case 'n':
26372e71
GA
9301 if (vectorize)
9302 goto unknown;
fc36a67e 9303 i = SvCUR(sv) - origlen;
26372e71 9304 if (args) {
c635e13b 9305 switch (intsize) {
9306 case 'h': *(va_arg(*args, short*)) = i; break;
9307 default: *(va_arg(*args, int*)) = i; break;
9308 case 'l': *(va_arg(*args, long*)) = i; break;
9309 case 'V': *(va_arg(*args, IV*)) = i; break;
cf2093f6
JH
9310#ifdef HAS_QUAD
9311 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9312#endif
c635e13b 9313 }
fc36a67e 9314 }
9dd79c3f 9315 else
211dfcf1 9316 sv_setuv_mg(argsv, (UV)i);
fc36a67e 9317 continue; /* not "break" */
9318
9319 /* UNKNOWN */
9320
46fc3d4c 9321 default:
fc36a67e 9322 unknown:
041457d9
DM
9323 if (!args
9324 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
9325 && ckWARN(WARN_PRINTF))
9326 {
c4420975 9327 SV * const msg = sv_newmortal();
35c1215d
NC
9328 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9329 (PL_op->op_type == OP_PRTF) ? "" : "s");
0f4b6630 9330 if (c) {
0f4b6630 9331 if (isPRINT(c))
1c846c1f 9332 Perl_sv_catpvf(aTHX_ msg,
0f4b6630
JH
9333 "\"%%%c\"", c & 0xFF);
9334 else
9335 Perl_sv_catpvf(aTHX_ msg,
57def98f 9336 "\"%%\\%03"UVof"\"",
0f4b6630 9337 (UV)c & 0xFF);
0f4b6630 9338 } else
396482e1 9339 sv_catpvs(msg, "end of string");
be2597df 9340 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
c635e13b 9341 }
fb73857a 9342
9343 /* output mangled stuff ... */
9344 if (c == '\0')
9345 --q;
46fc3d4c 9346 eptr = p;
9347 elen = q - p;
fb73857a 9348
9349 /* ... right here, because formatting flags should not apply */
9350 SvGROW(sv, SvCUR(sv) + elen + 1);
9351 p = SvEND(sv);
4459522c 9352 Copy(eptr, p, elen, char);
fb73857a 9353 p += elen;
9354 *p = '\0';
3f7c398e 9355 SvCUR_set(sv, p - SvPVX_const(sv));
58e33a90 9356 svix = osvix;
fb73857a 9357 continue; /* not "break" */
46fc3d4c 9358 }
9359
cc61b222
TS
9360 if (is_utf8 != has_utf8) {
9361 if (is_utf8) {
9362 if (SvCUR(sv))
9363 sv_utf8_upgrade(sv);
9364 }
9365 else {
9366 const STRLEN old_elen = elen;
9367 SV * const nsv = sv_2mortal(newSVpvn(eptr, elen));
9368 sv_utf8_upgrade(nsv);
9369 eptr = SvPVX_const(nsv);
9370 elen = SvCUR(nsv);
9371
9372 if (width) { /* fudge width (can't fudge elen) */
9373 width += elen - old_elen;
9374 }
9375 is_utf8 = TRUE;
9376 }
9377 }
9378
6c94ec8b 9379 have = esignlen + zeros + elen;
ed2b91d2
GA
9380 if (have < zeros)
9381 Perl_croak_nocontext(PL_memory_wrap);
6c94ec8b 9382
46fc3d4c 9383 need = (have > width ? have : width);
9384 gap = need - have;
9385
d2641cbd
PC
9386 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
9387 Perl_croak_nocontext(PL_memory_wrap);
b22c7a20 9388 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
46fc3d4c 9389 p = SvEND(sv);
9390 if (esignlen && fill == '0') {
53c1dcc0 9391 int i;
eb160463 9392 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 9393 *p++ = esignbuf[i];
9394 }
9395 if (gap && !left) {
9396 memset(p, fill, gap);
9397 p += gap;
9398 }
9399 if (esignlen && fill != '0') {
53c1dcc0 9400 int i;
eb160463 9401 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 9402 *p++ = esignbuf[i];
9403 }
fc36a67e 9404 if (zeros) {
53c1dcc0 9405 int i;
fc36a67e 9406 for (i = zeros; i; i--)
9407 *p++ = '0';
9408 }
46fc3d4c 9409 if (elen) {
4459522c 9410 Copy(eptr, p, elen, char);
46fc3d4c 9411 p += elen;
9412 }
9413 if (gap && left) {
9414 memset(p, ' ', gap);
9415 p += gap;
9416 }
b22c7a20
GS
9417 if (vectorize) {
9418 if (veclen) {
4459522c 9419 Copy(dotstr, p, dotstrlen, char);
b22c7a20
GS
9420 p += dotstrlen;
9421 }
9422 else
9423 vectorize = FALSE; /* done iterating over vecstr */
9424 }
2cf2cfc6
A
9425 if (is_utf8)
9426 has_utf8 = TRUE;
9427 if (has_utf8)
7e2040f0 9428 SvUTF8_on(sv);
46fc3d4c 9429 *p = '\0';
3f7c398e 9430 SvCUR_set(sv, p - SvPVX_const(sv));
b22c7a20
GS
9431 if (vectorize) {
9432 esignlen = 0;
9433 goto vector;
9434 }
46fc3d4c 9435 }
9436}
51371543 9437
645c22ef
DM
9438/* =========================================================================
9439
9440=head1 Cloning an interpreter
9441
9442All the macros and functions in this section are for the private use of
9443the main function, perl_clone().
9444
9445The foo_dup() functions make an exact copy of an existing foo thinngy.
9446During the course of a cloning, a hash table is used to map old addresses
9447to new addresses. The table is created and manipulated with the
9448ptr_table_* functions.
9449
9450=cut
9451
9452============================================================================*/
9453
9454
1d7c1841
GS
9455#if defined(USE_ITHREADS)
9456
d4c19fe8 9457/* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
1d7c1841
GS
9458#ifndef GpREFCNT_inc
9459# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9460#endif
9461
9462
a41cc44e 9463/* Certain cases in Perl_ss_dup have been merged, by relying on the fact
3e07292d
NC
9464 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
9465 If this changes, please unmerge ss_dup. */
d2d73c3e 9466#define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
7f466ec7 9467#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup(s,t))
d2d73c3e
AB
9468#define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
9469#define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9470#define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
9471#define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9472#define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
9473#define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9474#define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
9475#define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9476#define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
9477#define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
6136c704
AL
9478#define SAVEPV(p) ((p) ? savepv(p) : NULL)
9479#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
8cf8f3d1 9480
199e78b7
DM
9481/* clone a parser */
9482
9483yy_parser *
9484Perl_parser_dup(pTHX_ const yy_parser *proto, CLONE_PARAMS* param)
9485{
9486 yy_parser *parser;
9487
9488 if (!proto)
9489 return NULL;
9490
7c197c94
DM
9491 /* look for it in the table first */
9492 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
9493 if (parser)
9494 return parser;
9495
9496 /* create anew and remember what it is */
199e78b7 9497 Newxz(parser, 1, yy_parser);
7c197c94 9498 ptr_table_store(PL_ptr_table, proto, parser);
199e78b7
DM
9499
9500 parser->yyerrstatus = 0;
9501 parser->yychar = YYEMPTY; /* Cause a token to be read. */
9502
9503 /* XXX these not yet duped */
9504 parser->old_parser = NULL;
9505 parser->stack = NULL;
9506 parser->ps = NULL;
9507 parser->stack_size = 0;
9508 /* XXX parser->stack->state = 0; */
9509
9510 /* XXX eventually, just Copy() most of the parser struct ? */
9511
9512 parser->lex_brackets = proto->lex_brackets;
9513 parser->lex_casemods = proto->lex_casemods;
9514 parser->lex_brackstack = savepvn(proto->lex_brackstack,
9515 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
9516 parser->lex_casestack = savepvn(proto->lex_casestack,
9517 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
9518 parser->lex_defer = proto->lex_defer;
9519 parser->lex_dojoin = proto->lex_dojoin;
9520 parser->lex_expect = proto->lex_expect;
9521 parser->lex_formbrack = proto->lex_formbrack;
9522 parser->lex_inpat = proto->lex_inpat;
9523 parser->lex_inwhat = proto->lex_inwhat;
9524 parser->lex_op = proto->lex_op;
9525 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
9526 parser->lex_starts = proto->lex_starts;
9527 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
9528 parser->multi_close = proto->multi_close;
9529 parser->multi_open = proto->multi_open;
9530 parser->multi_start = proto->multi_start;
9531 parser->pending_ident = proto->pending_ident;
9532 parser->preambled = proto->preambled;
9533 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
9534
9535#ifdef PERL_MAD
9536 parser->endwhite = proto->endwhite;
9537 parser->faketokens = proto->faketokens;
9538 parser->lasttoke = proto->lasttoke;
9539 parser->nextwhite = proto->nextwhite;
9540 parser->realtokenstart = proto->realtokenstart;
9541 parser->skipwhite = proto->skipwhite;
9542 parser->thisclose = proto->thisclose;
9543 parser->thismad = proto->thismad;
9544 parser->thisopen = proto->thisopen;
9545 parser->thisstuff = proto->thisstuff;
9546 parser->thistoken = proto->thistoken;
9547 parser->thiswhite = proto->thiswhite;
9548#endif
9549 return parser;
9550}
9551
d2d73c3e 9552
d2d73c3e 9553/* duplicate a file handle */
645c22ef 9554
1d7c1841 9555PerlIO *
a8fc9800 9556Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
1d7c1841
GS
9557{
9558 PerlIO *ret;
53c1dcc0
AL
9559
9560 PERL_UNUSED_ARG(type);
73d840c0 9561
1d7c1841
GS
9562 if (!fp)
9563 return (PerlIO*)NULL;
9564
9565 /* look for it in the table first */
9566 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
9567 if (ret)
9568 return ret;
9569
9570 /* create anew and remember what it is */
ecdeb87c 9571 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
1d7c1841
GS
9572 ptr_table_store(PL_ptr_table, fp, ret);
9573 return ret;
9574}
9575
645c22ef
DM
9576/* duplicate a directory handle */
9577
1d7c1841
GS
9578DIR *
9579Perl_dirp_dup(pTHX_ DIR *dp)
9580{
96a5add6 9581 PERL_UNUSED_CONTEXT;
1d7c1841
GS
9582 if (!dp)
9583 return (DIR*)NULL;
9584 /* XXX TODO */
9585 return dp;
9586}
9587
ff276b08 9588/* duplicate a typeglob */
645c22ef 9589
1d7c1841 9590GP *
a8fc9800 9591Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
1d7c1841
GS
9592{
9593 GP *ret;
b37c2d43 9594
1d7c1841
GS
9595 if (!gp)
9596 return (GP*)NULL;
9597 /* look for it in the table first */
9598 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
9599 if (ret)
9600 return ret;
9601
9602 /* create anew and remember what it is */
a02a5408 9603 Newxz(ret, 1, GP);
1d7c1841
GS
9604 ptr_table_store(PL_ptr_table, gp, ret);
9605
9606 /* clone */
9607 ret->gp_refcnt = 0; /* must be before any other dups! */
d2d73c3e
AB
9608 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
9609 ret->gp_io = io_dup_inc(gp->gp_io, param);
9610 ret->gp_form = cv_dup_inc(gp->gp_form, param);
9611 ret->gp_av = av_dup_inc(gp->gp_av, param);
9612 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
9613 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
9614 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
1d7c1841 9615 ret->gp_cvgen = gp->gp_cvgen;
1d7c1841 9616 ret->gp_line = gp->gp_line;
f4890806 9617 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
1d7c1841
GS
9618 return ret;
9619}
9620
645c22ef
DM
9621/* duplicate a chain of magic */
9622
1d7c1841 9623MAGIC *
a8fc9800 9624Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
1d7c1841 9625{
cb359b41
JH
9626 MAGIC *mgprev = (MAGIC*)NULL;
9627 MAGIC *mgret;
1d7c1841
GS
9628 if (!mg)
9629 return (MAGIC*)NULL;
9630 /* look for it in the table first */
9631 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
9632 if (mgret)
9633 return mgret;
9634
9635 for (; mg; mg = mg->mg_moremagic) {
9636 MAGIC *nmg;
a02a5408 9637 Newxz(nmg, 1, MAGIC);
cb359b41 9638 if (mgprev)
1d7c1841 9639 mgprev->mg_moremagic = nmg;
cb359b41
JH
9640 else
9641 mgret = nmg;
1d7c1841
GS
9642 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
9643 nmg->mg_private = mg->mg_private;
9644 nmg->mg_type = mg->mg_type;
9645 nmg->mg_flags = mg->mg_flags;
14befaf4 9646 if (mg->mg_type == PERL_MAGIC_qr) {
f8149455 9647 nmg->mg_obj = (SV*)CALLREGDUPE((REGEXP*)mg->mg_obj, param);
1d7c1841 9648 }
05bd4103 9649 else if(mg->mg_type == PERL_MAGIC_backref) {
d7cbc7b5
NC
9650 /* The backref AV has its reference count deliberately bumped by
9651 1. */
9652 nmg->mg_obj = SvREFCNT_inc(av_dup_inc((AV*) mg->mg_obj, param));
05bd4103 9653 }
8d2f4536
NC
9654 else if (mg->mg_type == PERL_MAGIC_symtab) {
9655 nmg->mg_obj = mg->mg_obj;
9656 }
1d7c1841
GS
9657 else {
9658 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
d2d73c3e
AB
9659 ? sv_dup_inc(mg->mg_obj, param)
9660 : sv_dup(mg->mg_obj, param);
1d7c1841
GS
9661 }
9662 nmg->mg_len = mg->mg_len;
9663 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
14befaf4 9664 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
68795e93 9665 if (mg->mg_len > 0) {
1d7c1841 9666 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
14befaf4
DM
9667 if (mg->mg_type == PERL_MAGIC_overload_table &&
9668 AMT_AMAGIC((AMT*)mg->mg_ptr))
9669 {
c445ea15 9670 const AMT * const amtp = (AMT*)mg->mg_ptr;
0bcc34c2 9671 AMT * const namtp = (AMT*)nmg->mg_ptr;
1d7c1841
GS
9672 I32 i;
9673 for (i = 1; i < NofAMmeth; i++) {
d2d73c3e 9674 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
1d7c1841
GS
9675 }
9676 }
9677 }
9678 else if (mg->mg_len == HEf_SVKEY)
d2d73c3e 9679 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
1d7c1841 9680 }
68795e93
NIS
9681 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
9682 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
9683 }
1d7c1841
GS
9684 mgprev = nmg;
9685 }
9686 return mgret;
9687}
9688
4674ade5
NC
9689#endif /* USE_ITHREADS */
9690
645c22ef
DM
9691/* create a new pointer-mapping table */
9692
1d7c1841
GS
9693PTR_TBL_t *
9694Perl_ptr_table_new(pTHX)
9695{
9696 PTR_TBL_t *tbl;
96a5add6
AL
9697 PERL_UNUSED_CONTEXT;
9698
a02a5408 9699 Newxz(tbl, 1, PTR_TBL_t);
1d7c1841
GS
9700 tbl->tbl_max = 511;
9701 tbl->tbl_items = 0;
a02a5408 9702 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
1d7c1841
GS
9703 return tbl;
9704}
9705
7119fd33
NC
9706#define PTR_TABLE_HASH(ptr) \
9707 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
134ca3d6 9708
93e68bfb
JC
9709/*
9710 we use the PTE_SVSLOT 'reservation' made above, both here (in the
9711 following define) and at call to new_body_inline made below in
9712 Perl_ptr_table_store()
9713 */
9714
9715#define del_pte(p) del_body_type(p, PTE_SVSLOT)
32e691d0 9716
645c22ef
DM
9717/* map an existing pointer using a table */
9718
7bf61b54 9719STATIC PTR_TBL_ENT_t *
b0e6ae5b 9720S_ptr_table_find(PTR_TBL_t *tbl, const void *sv) {
1d7c1841 9721 PTR_TBL_ENT_t *tblent;
4373e329 9722 const UV hash = PTR_TABLE_HASH(sv);
1d7c1841
GS
9723 assert(tbl);
9724 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
9725 for (; tblent; tblent = tblent->next) {
9726 if (tblent->oldval == sv)
7bf61b54 9727 return tblent;
1d7c1841 9728 }
d4c19fe8 9729 return NULL;
7bf61b54
NC
9730}
9731
9732void *
9733Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, const void *sv)
9734{
b0e6ae5b 9735 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
96a5add6 9736 PERL_UNUSED_CONTEXT;
d4c19fe8 9737 return tblent ? tblent->newval : NULL;
1d7c1841
GS
9738}
9739
645c22ef
DM
9740/* add a new entry to a pointer-mapping table */
9741
1d7c1841 9742void
44f8325f 9743Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, const void *oldsv, void *newsv)
1d7c1841 9744{
0c9fdfe0 9745 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
96a5add6 9746 PERL_UNUSED_CONTEXT;
1d7c1841 9747
7bf61b54
NC
9748 if (tblent) {
9749 tblent->newval = newsv;
9750 } else {
9751 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
9752
d2a0f284
JC
9753 new_body_inline(tblent, PTE_SVSLOT);
9754
7bf61b54
NC
9755 tblent->oldval = oldsv;
9756 tblent->newval = newsv;
9757 tblent->next = tbl->tbl_ary[entry];
9758 tbl->tbl_ary[entry] = tblent;
9759 tbl->tbl_items++;
9760 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
9761 ptr_table_split(tbl);
1d7c1841 9762 }
1d7c1841
GS
9763}
9764
645c22ef
DM
9765/* double the hash bucket size of an existing ptr table */
9766
1d7c1841
GS
9767void
9768Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
9769{
9770 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
4373e329 9771 const UV oldsize = tbl->tbl_max + 1;
1d7c1841
GS
9772 UV newsize = oldsize * 2;
9773 UV i;
96a5add6 9774 PERL_UNUSED_CONTEXT;
1d7c1841
GS
9775
9776 Renew(ary, newsize, PTR_TBL_ENT_t*);
9777 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
9778 tbl->tbl_max = --newsize;
9779 tbl->tbl_ary = ary;
9780 for (i=0; i < oldsize; i++, ary++) {
9781 PTR_TBL_ENT_t **curentp, **entp, *ent;
9782 if (!*ary)
9783 continue;
9784 curentp = ary + oldsize;
9785 for (entp = ary, ent = *ary; ent; ent = *entp) {
134ca3d6 9786 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
1d7c1841
GS
9787 *entp = ent->next;
9788 ent->next = *curentp;
9789 *curentp = ent;
9790 continue;
9791 }
9792 else
9793 entp = &ent->next;
9794 }
9795 }
9796}
9797
645c22ef
DM
9798/* remove all the entries from a ptr table */
9799
a0739874
DM
9800void
9801Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
9802{
d5cefff9 9803 if (tbl && tbl->tbl_items) {
c445ea15 9804 register PTR_TBL_ENT_t * const * const array = tbl->tbl_ary;
d5cefff9 9805 UV riter = tbl->tbl_max;
a0739874 9806
d5cefff9
NC
9807 do {
9808 PTR_TBL_ENT_t *entry = array[riter];
ab1e7f95 9809
d5cefff9 9810 while (entry) {
00b6aa41 9811 PTR_TBL_ENT_t * const oentry = entry;
d5cefff9
NC
9812 entry = entry->next;
9813 del_pte(oentry);
9814 }
9815 } while (riter--);
a0739874 9816
d5cefff9
NC
9817 tbl->tbl_items = 0;
9818 }
a0739874
DM
9819}
9820
645c22ef
DM
9821/* clear and free a ptr table */
9822
a0739874
DM
9823void
9824Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
9825{
9826 if (!tbl) {
9827 return;
9828 }
9829 ptr_table_clear(tbl);
9830 Safefree(tbl->tbl_ary);
9831 Safefree(tbl);
9832}
9833
4674ade5 9834#if defined(USE_ITHREADS)
5bd07a3d 9835
83841fad 9836void
eb86f8b3 9837Perl_rvpv_dup(pTHX_ SV *dstr, const SV *sstr, CLONE_PARAMS* param)
83841fad
NIS
9838{
9839 if (SvROK(sstr)) {
b162af07
SP
9840 SvRV_set(dstr, SvWEAKREF(sstr)
9841 ? sv_dup(SvRV(sstr), param)
9842 : sv_dup_inc(SvRV(sstr), param));
f880fe2f 9843
83841fad 9844 }
3f7c398e 9845 else if (SvPVX_const(sstr)) {
83841fad
NIS
9846 /* Has something there */
9847 if (SvLEN(sstr)) {
68795e93 9848 /* Normal PV - clone whole allocated space */
3f7c398e 9849 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
d3d0e6f1
NC
9850 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
9851 /* Not that normal - actually sstr is copy on write.
9852 But we are a true, independant SV, so: */
9853 SvREADONLY_off(dstr);
9854 SvFAKE_off(dstr);
9855 }
68795e93 9856 }
83841fad
NIS
9857 else {
9858 /* Special case - not normally malloced for some reason */
f7877b28
NC
9859 if (isGV_with_GP(sstr)) {
9860 /* Don't need to do anything here. */
9861 }
9862 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
ef10be65
NC
9863 /* A "shared" PV - clone it as "shared" PV */
9864 SvPV_set(dstr,
9865 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
9866 param)));
83841fad
NIS
9867 }
9868 else {
9869 /* Some other special case - random pointer */
f880fe2f 9870 SvPV_set(dstr, SvPVX(sstr));
d3d0e6f1 9871 }
83841fad
NIS
9872 }
9873 }
9874 else {
4608196e 9875 /* Copy the NULL */
f880fe2f 9876 if (SvTYPE(dstr) == SVt_RV)
b162af07 9877 SvRV_set(dstr, NULL);
f880fe2f 9878 else
6136c704 9879 SvPV_set(dstr, NULL);
83841fad
NIS
9880 }
9881}
9882
662fb8b2
NC
9883/* duplicate an SV of any type (including AV, HV etc) */
9884
1d7c1841 9885SV *
eb86f8b3 9886Perl_sv_dup(pTHX_ const SV *sstr, CLONE_PARAMS* param)
1d7c1841 9887{
27da23d5 9888 dVAR;
1d7c1841
GS
9889 SV *dstr;
9890
9891 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
6136c704 9892 return NULL;
1d7c1841
GS
9893 /* look for it in the table first */
9894 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
9895 if (dstr)
9896 return dstr;
9897
0405e91e
AB
9898 if(param->flags & CLONEf_JOIN_IN) {
9899 /** We are joining here so we don't want do clone
9900 something that is bad **/
eb86f8b3
AL
9901 if (SvTYPE(sstr) == SVt_PVHV) {
9902 const char * const hvname = HvNAME_get(sstr);
9903 if (hvname)
9904 /** don't clone stashes if they already exist **/
9905 return (SV*)gv_stashpv(hvname,0);
0405e91e
AB
9906 }
9907 }
9908
1d7c1841
GS
9909 /* create anew and remember what it is */
9910 new_SV(dstr);
fd0854ff
DM
9911
9912#ifdef DEBUG_LEAKING_SCALARS
9913 dstr->sv_debug_optype = sstr->sv_debug_optype;
9914 dstr->sv_debug_line = sstr->sv_debug_line;
9915 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
9916 dstr->sv_debug_cloned = 1;
fd0854ff 9917 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
fd0854ff
DM
9918#endif
9919
1d7c1841
GS
9920 ptr_table_store(PL_ptr_table, sstr, dstr);
9921
9922 /* clone */
9923 SvFLAGS(dstr) = SvFLAGS(sstr);
9924 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
9925 SvREFCNT(dstr) = 0; /* must be before any other dups! */
9926
9927#ifdef DEBUGGING
3f7c398e 9928 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
1d7c1841 9929 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
6c9570dc 9930 (void*)PL_watch_pvx, SvPVX_const(sstr));
1d7c1841
GS
9931#endif
9932
9660f481
DM
9933 /* don't clone objects whose class has asked us not to */
9934 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
9935 SvFLAGS(dstr) &= ~SVTYPEMASK;
9936 SvOBJECT_off(dstr);
9937 return dstr;
9938 }
9939
1d7c1841
GS
9940 switch (SvTYPE(sstr)) {
9941 case SVt_NULL:
9942 SvANY(dstr) = NULL;
9943 break;
9944 case SVt_IV:
339049b0 9945 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
45977657 9946 SvIV_set(dstr, SvIVX(sstr));
1d7c1841
GS
9947 break;
9948 case SVt_NV:
9949 SvANY(dstr) = new_XNV();
9d6ce603 9950 SvNV_set(dstr, SvNVX(sstr));
1d7c1841
GS
9951 break;
9952 case SVt_RV:
339049b0 9953 SvANY(dstr) = &(dstr->sv_u.svu_rv);
83841fad 9954 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
1d7c1841 9955 break;
cecf5685 9956 /* case SVt_BIND: */
662fb8b2
NC
9957 default:
9958 {
9959 /* These are all the types that need complex bodies allocating. */
662fb8b2 9960 void *new_body;
2bcc16b3
NC
9961 const svtype sv_type = SvTYPE(sstr);
9962 const struct body_details *const sv_type_details
9963 = bodies_by_type + sv_type;
662fb8b2 9964
93e68bfb 9965 switch (sv_type) {
662fb8b2 9966 default:
bb263b4e 9967 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
662fb8b2
NC
9968 break;
9969
662fb8b2
NC
9970 case SVt_PVGV:
9971 if (GvUNIQUE((GV*)sstr)) {
6f207bd3 9972 NOOP; /* Do sharing here, and fall through */
662fb8b2 9973 }
c22188b4
NC
9974 case SVt_PVIO:
9975 case SVt_PVFM:
9976 case SVt_PVHV:
9977 case SVt_PVAV:
662fb8b2 9978 case SVt_PVCV:
662fb8b2 9979 case SVt_PVLV:
662fb8b2 9980 case SVt_PVMG:
662fb8b2 9981 case SVt_PVNV:
662fb8b2 9982 case SVt_PVIV:
662fb8b2 9983 case SVt_PV:
d2a0f284 9984 assert(sv_type_details->body_size);
c22188b4 9985 if (sv_type_details->arena) {
d2a0f284 9986 new_body_inline(new_body, sv_type);
c22188b4 9987 new_body
b9502f15 9988 = (void*)((char*)new_body - sv_type_details->offset);
c22188b4
NC
9989 } else {
9990 new_body = new_NOARENA(sv_type_details);
9991 }
1d7c1841 9992 }
662fb8b2
NC
9993 assert(new_body);
9994 SvANY(dstr) = new_body;
9995
2bcc16b3 9996#ifndef PURIFY
b9502f15
NC
9997 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
9998 ((char*)SvANY(dstr)) + sv_type_details->offset,
f32993d6 9999 sv_type_details->copy, char);
2bcc16b3
NC
10000#else
10001 Copy(((char*)SvANY(sstr)),
10002 ((char*)SvANY(dstr)),
d2a0f284 10003 sv_type_details->body_size + sv_type_details->offset, char);
2bcc16b3 10004#endif
662fb8b2 10005
f7877b28
NC
10006 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
10007 && !isGV_with_GP(dstr))
662fb8b2
NC
10008 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10009
10010 /* The Copy above means that all the source (unduplicated) pointers
10011 are now in the destination. We can check the flags and the
10012 pointers in either, but it's possible that there's less cache
10013 missing by always going for the destination.
10014 FIXME - instrument and check that assumption */
f32993d6 10015 if (sv_type >= SVt_PVMG) {
885ffcb3 10016 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
73d95100 10017 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
e736a858 10018 } else if (SvMAGIC(dstr))
662fb8b2
NC
10019 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
10020 if (SvSTASH(dstr))
10021 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
1d7c1841 10022 }
662fb8b2 10023
f32993d6
NC
10024 /* The cast silences a GCC warning about unhandled types. */
10025 switch ((int)sv_type) {
662fb8b2
NC
10026 case SVt_PV:
10027 break;
10028 case SVt_PVIV:
10029 break;
10030 case SVt_PVNV:
10031 break;
10032 case SVt_PVMG:
10033 break;
662fb8b2
NC
10034 case SVt_PVLV:
10035 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
10036 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
10037 LvTARG(dstr) = dstr;
10038 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
10039 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(dstr), 0, param);
10040 else
10041 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
662fb8b2 10042 case SVt_PVGV:
cecf5685
NC
10043 if(isGV_with_GP(sstr)) {
10044 if (GvNAME_HEK(dstr))
10045 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
39cb70dc
NC
10046 /* Don't call sv_add_backref here as it's going to be
10047 created as part of the magic cloning of the symbol
10048 table. */
f7877b28
NC
10049 /* Danger Will Robinson - GvGP(dstr) isn't initialised
10050 at the point of this comment. */
39cb70dc 10051 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
f7877b28
NC
10052 GvGP(dstr) = gp_dup(GvGP(sstr), param);
10053 (void)GpREFCNT_inc(GvGP(dstr));
10054 } else
10055 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
662fb8b2
NC
10056 break;
10057 case SVt_PVIO:
10058 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
10059 if (IoOFP(dstr) == IoIFP(sstr))
10060 IoOFP(dstr) = IoIFP(dstr);
10061 else
10062 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
10063 /* PL_rsfp_filters entries have fake IoDIRP() */
662fb8b2
NC
10064 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
10065 /* I have no idea why fake dirp (rsfps)
10066 should be treated differently but otherwise
10067 we end up with leaks -- sky*/
10068 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
10069 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
10070 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
10071 } else {
10072 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
10073 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
10074 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
100ce7e1
NC
10075 if (IoDIRP(dstr)) {
10076 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
10077 } else {
6f207bd3 10078 NOOP;
100ce7e1
NC
10079 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
10080 }
662fb8b2
NC
10081 }
10082 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
10083 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
10084 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
10085 break;
10086 case SVt_PVAV:
10087 if (AvARRAY((AV*)sstr)) {
10088 SV **dst_ary, **src_ary;
10089 SSize_t items = AvFILLp((AV*)sstr) + 1;
10090
10091 src_ary = AvARRAY((AV*)sstr);
a02a5408 10092 Newxz(dst_ary, AvMAX((AV*)sstr)+1, SV*);
662fb8b2 10093 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
9c6bc640 10094 AvARRAY((AV*)dstr) = dst_ary;
662fb8b2
NC
10095 AvALLOC((AV*)dstr) = dst_ary;
10096 if (AvREAL((AV*)sstr)) {
10097 while (items-- > 0)
10098 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10099 }
10100 else {
10101 while (items-- > 0)
10102 *dst_ary++ = sv_dup(*src_ary++, param);
10103 }
10104 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10105 while (items-- > 0) {
10106 *dst_ary++ = &PL_sv_undef;
10107 }
bfcb3514 10108 }
662fb8b2 10109 else {
9c6bc640 10110 AvARRAY((AV*)dstr) = NULL;
662fb8b2 10111 AvALLOC((AV*)dstr) = (SV**)NULL;
b79f7545 10112 }
662fb8b2
NC
10113 break;
10114 case SVt_PVHV:
7e265ef3
AL
10115 if (HvARRAY((HV*)sstr)) {
10116 STRLEN i = 0;
10117 const bool sharekeys = !!HvSHAREKEYS(sstr);
10118 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
10119 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
10120 char *darray;
10121 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
10122 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
10123 char);
10124 HvARRAY(dstr) = (HE**)darray;
10125 while (i <= sxhv->xhv_max) {
10126 const HE * const source = HvARRAY(sstr)[i];
10127 HvARRAY(dstr)[i] = source
10128 ? he_dup(source, sharekeys, param) : 0;
10129 ++i;
10130 }
10131 if (SvOOK(sstr)) {
10132 HEK *hvname;
10133 const struct xpvhv_aux * const saux = HvAUX(sstr);
10134 struct xpvhv_aux * const daux = HvAUX(dstr);
10135 /* This flag isn't copied. */
10136 /* SvOOK_on(hv) attacks the IV flags. */
10137 SvFLAGS(dstr) |= SVf_OOK;
10138
10139 hvname = saux->xhv_name;
10140 daux->xhv_name = hvname ? hek_dup(hvname, param) : hvname;
10141
10142 daux->xhv_riter = saux->xhv_riter;
10143 daux->xhv_eiter = saux->xhv_eiter
10144 ? he_dup(saux->xhv_eiter,
10145 (bool)!!HvSHAREKEYS(sstr), param) : 0;
10146 daux->xhv_backreferences =
10147 saux->xhv_backreferences
86f55936 10148 ? (AV*) SvREFCNT_inc(
7e265ef3 10149 sv_dup((SV*)saux->xhv_backreferences, param))
86f55936 10150 : 0;
7e265ef3
AL
10151 /* Record stashes for possible cloning in Perl_clone(). */
10152 if (hvname)
10153 av_push(param->stashes, dstr);
662fb8b2 10154 }
662fb8b2 10155 }
7e265ef3 10156 else
797c7171 10157 HvARRAY((HV*)dstr) = NULL;
662fb8b2 10158 break;
662fb8b2 10159 case SVt_PVCV:
bb172083
NC
10160 if (!(param->flags & CLONEf_COPY_STACKS)) {
10161 CvDEPTH(dstr) = 0;
10162 }
10163 case SVt_PVFM:
662fb8b2
NC
10164 /* NOTE: not refcounted */
10165 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
10166 OP_REFCNT_LOCK;
d04ba589
NC
10167 if (!CvISXSUB(dstr))
10168 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
662fb8b2 10169 OP_REFCNT_UNLOCK;
cfae286e 10170 if (CvCONST(dstr) && CvISXSUB(dstr)) {
662fb8b2
NC
10171 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(dstr)) ?
10172 SvREFCNT_inc(CvXSUBANY(dstr).any_ptr) :
10173 sv_dup_inc((SV *)CvXSUBANY(dstr).any_ptr, param);
10174 }
10175 /* don't dup if copying back - CvGV isn't refcounted, so the
10176 * duped GV may never be freed. A bit of a hack! DAPM */
10177 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
a0714e2c 10178 NULL : gv_dup(CvGV(dstr), param) ;
662fb8b2
NC
10179 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10180 CvOUTSIDE(dstr) =
10181 CvWEAKOUTSIDE(sstr)
10182 ? cv_dup( CvOUTSIDE(dstr), param)
10183 : cv_dup_inc(CvOUTSIDE(dstr), param);
aed2304a 10184 if (!CvISXSUB(dstr))
662fb8b2
NC
10185 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
10186 break;
bfcb3514 10187 }
1d7c1841 10188 }
1d7c1841
GS
10189 }
10190
10191 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10192 ++PL_sv_objcount;
10193
10194 return dstr;
d2d73c3e 10195 }
1d7c1841 10196
645c22ef
DM
10197/* duplicate a context */
10198
1d7c1841 10199PERL_CONTEXT *
a8fc9800 10200Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
1d7c1841
GS
10201{
10202 PERL_CONTEXT *ncxs;
10203
10204 if (!cxs)
10205 return (PERL_CONTEXT*)NULL;
10206
10207 /* look for it in the table first */
10208 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10209 if (ncxs)
10210 return ncxs;
10211
10212 /* create anew and remember what it is */
a02a5408 10213 Newxz(ncxs, max + 1, PERL_CONTEXT);
1d7c1841
GS
10214 ptr_table_store(PL_ptr_table, cxs, ncxs);
10215
10216 while (ix >= 0) {
c445ea15
AL
10217 PERL_CONTEXT * const cx = &cxs[ix];
10218 PERL_CONTEXT * const ncx = &ncxs[ix];
1d7c1841
GS
10219 ncx->cx_type = cx->cx_type;
10220 if (CxTYPE(cx) == CXt_SUBST) {
10221 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10222 }
10223 else {
10224 ncx->blk_oldsp = cx->blk_oldsp;
10225 ncx->blk_oldcop = cx->blk_oldcop;
1d7c1841
GS
10226 ncx->blk_oldmarksp = cx->blk_oldmarksp;
10227 ncx->blk_oldscopesp = cx->blk_oldscopesp;
10228 ncx->blk_oldpm = cx->blk_oldpm;
10229 ncx->blk_gimme = cx->blk_gimme;
10230 switch (CxTYPE(cx)) {
10231 case CXt_SUB:
10232 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
d2d73c3e
AB
10233 ? cv_dup_inc(cx->blk_sub.cv, param)
10234 : cv_dup(cx->blk_sub.cv,param));
cc8d50a7 10235 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
d2d73c3e 10236 ? av_dup_inc(cx->blk_sub.argarray, param)
7d49f689 10237 : NULL);
d2d73c3e 10238 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
1d7c1841 10239 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
cc8d50a7
NC
10240 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10241 ncx->blk_sub.lval = cx->blk_sub.lval;
f39bc417 10242 ncx->blk_sub.retop = cx->blk_sub.retop;
d8d97e70
DM
10243 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
10244 cx->blk_sub.oldcomppad);
1d7c1841
GS
10245 break;
10246 case CXt_EVAL:
10247 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
10248 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
b47cad08 10249 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
1d7c1841 10250 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
d2d73c3e 10251 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
f39bc417 10252 ncx->blk_eval.retop = cx->blk_eval.retop;
1d7c1841
GS
10253 break;
10254 case CXt_LOOP:
10255 ncx->blk_loop.label = cx->blk_loop.label;
10256 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
022eaa24 10257 ncx->blk_loop.my_op = cx->blk_loop.my_op;
1d7c1841
GS
10258 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
10259 ? cx->blk_loop.iterdata
d2d73c3e 10260 : gv_dup((GV*)cx->blk_loop.iterdata, param));
f3548bdc
DM
10261 ncx->blk_loop.oldcomppad
10262 = (PAD*)ptr_table_fetch(PL_ptr_table,
10263 cx->blk_loop.oldcomppad);
d2d73c3e
AB
10264 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
10265 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
10266 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
1d7c1841
GS
10267 ncx->blk_loop.iterix = cx->blk_loop.iterix;
10268 ncx->blk_loop.itermax = cx->blk_loop.itermax;
10269 break;
10270 case CXt_FORMAT:
d2d73c3e
AB
10271 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
10272 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
10273 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
cc8d50a7 10274 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
f39bc417 10275 ncx->blk_sub.retop = cx->blk_sub.retop;
1d7c1841
GS
10276 break;
10277 case CXt_BLOCK:
10278 case CXt_NULL:
10279 break;
10280 }
10281 }
10282 --ix;
10283 }
10284 return ncxs;
10285}
10286
645c22ef
DM
10287/* duplicate a stack info structure */
10288
1d7c1841 10289PERL_SI *
a8fc9800 10290Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
1d7c1841
GS
10291{
10292 PERL_SI *nsi;
10293
10294 if (!si)
10295 return (PERL_SI*)NULL;
10296
10297 /* look for it in the table first */
10298 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10299 if (nsi)
10300 return nsi;
10301
10302 /* create anew and remember what it is */
a02a5408 10303 Newxz(nsi, 1, PERL_SI);
1d7c1841
GS
10304 ptr_table_store(PL_ptr_table, si, nsi);
10305
d2d73c3e 10306 nsi->si_stack = av_dup_inc(si->si_stack, param);
1d7c1841
GS
10307 nsi->si_cxix = si->si_cxix;
10308 nsi->si_cxmax = si->si_cxmax;
d2d73c3e 10309 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
1d7c1841 10310 nsi->si_type = si->si_type;
d2d73c3e
AB
10311 nsi->si_prev = si_dup(si->si_prev, param);
10312 nsi->si_next = si_dup(si->si_next, param);
1d7c1841
GS
10313 nsi->si_markoff = si->si_markoff;
10314
10315 return nsi;
10316}
10317
10318#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10319#define TOPINT(ss,ix) ((ss)[ix].any_i32)
10320#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10321#define TOPLONG(ss,ix) ((ss)[ix].any_long)
10322#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10323#define TOPIV(ss,ix) ((ss)[ix].any_iv)
38d8b13e
HS
10324#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10325#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
1d7c1841
GS
10326#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10327#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10328#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10329#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
10330#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10331#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
10332
10333/* XXXXX todo */
10334#define pv_dup_inc(p) SAVEPV(p)
10335#define pv_dup(p) SAVEPV(p)
10336#define svp_dup_inc(p,pp) any_dup(p,pp)
10337
645c22ef
DM
10338/* map any object to the new equivent - either something in the
10339 * ptr table, or something in the interpreter structure
10340 */
10341
1d7c1841 10342void *
53c1dcc0 10343Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
1d7c1841
GS
10344{
10345 void *ret;
10346
10347 if (!v)
10348 return (void*)NULL;
10349
10350 /* look for it in the table first */
10351 ret = ptr_table_fetch(PL_ptr_table, v);
10352 if (ret)
10353 return ret;
10354
10355 /* see if it is part of the interpreter structure */
10356 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
acfe0abc 10357 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
05ec9bb3 10358 else {
1d7c1841 10359 ret = v;
05ec9bb3 10360 }
1d7c1841
GS
10361
10362 return ret;
10363}
10364
645c22ef
DM
10365/* duplicate the save stack */
10366
1d7c1841 10367ANY *
a8fc9800 10368Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
1d7c1841 10369{
53d44271 10370 dVAR;
53c1dcc0
AL
10371 ANY * const ss = proto_perl->Tsavestack;
10372 const I32 max = proto_perl->Tsavestack_max;
10373 I32 ix = proto_perl->Tsavestack_ix;
1d7c1841
GS
10374 ANY *nss;
10375 SV *sv;
10376 GV *gv;
10377 AV *av;
10378 HV *hv;
10379 void* ptr;
10380 int intval;
10381 long longval;
10382 GP *gp;
10383 IV iv;
b24356f5 10384 I32 i;
c4e33207 10385 char *c = NULL;
1d7c1841 10386 void (*dptr) (void*);
acfe0abc 10387 void (*dxptr) (pTHX_ void*);
1d7c1841 10388
a02a5408 10389 Newxz(nss, max, ANY);
1d7c1841
GS
10390
10391 while (ix > 0) {
b24356f5
NC
10392 const I32 type = POPINT(ss,ix);
10393 TOPINT(nss,ix) = type;
10394 switch (type) {
3e07292d
NC
10395 case SAVEt_HELEM: /* hash element */
10396 sv = (SV*)POPPTR(ss,ix);
10397 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10398 /* fall through */
1d7c1841 10399 case SAVEt_ITEM: /* normal string */
a41cc44e 10400 case SAVEt_SV: /* scalar reference */
1d7c1841 10401 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10402 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
10403 /* fall through */
10404 case SAVEt_FREESV:
10405 case SAVEt_MORTALIZESV:
1d7c1841 10406 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10407 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 10408 break;
05ec9bb3
NIS
10409 case SAVEt_SHARED_PVREF: /* char* in shared space */
10410 c = (char*)POPPTR(ss,ix);
10411 TOPPTR(nss,ix) = savesharedpv(c);
10412 ptr = POPPTR(ss,ix);
10413 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10414 break;
1d7c1841
GS
10415 case SAVEt_GENERIC_SVREF: /* generic sv */
10416 case SAVEt_SVREF: /* scalar reference */
10417 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10418 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
10419 ptr = POPPTR(ss,ix);
10420 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
10421 break;
a41cc44e 10422 case SAVEt_HV: /* hash reference */
1d7c1841 10423 case SAVEt_AV: /* array reference */
11b79775 10424 sv = (SV*) POPPTR(ss,ix);
337d28f5 10425 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
10426 /* fall through */
10427 case SAVEt_COMPPAD:
10428 case SAVEt_NSTAB:
667e2948 10429 sv = (SV*) POPPTR(ss,ix);
3e07292d 10430 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
10431 break;
10432 case SAVEt_INT: /* int reference */
10433 ptr = POPPTR(ss,ix);
10434 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10435 intval = (int)POPINT(ss,ix);
10436 TOPINT(nss,ix) = intval;
10437 break;
10438 case SAVEt_LONG: /* long reference */
10439 ptr = POPPTR(ss,ix);
10440 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
3e07292d
NC
10441 /* fall through */
10442 case SAVEt_CLEARSV:
1d7c1841
GS
10443 longval = (long)POPLONG(ss,ix);
10444 TOPLONG(nss,ix) = longval;
10445 break;
10446 case SAVEt_I32: /* I32 reference */
10447 case SAVEt_I16: /* I16 reference */
10448 case SAVEt_I8: /* I8 reference */
88effcc9 10449 case SAVEt_COP_ARYBASE: /* call CopARYBASE_set */
1d7c1841
GS
10450 ptr = POPPTR(ss,ix);
10451 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
1ccabee8 10452 i = POPINT(ss,ix);
1d7c1841
GS
10453 TOPINT(nss,ix) = i;
10454 break;
10455 case SAVEt_IV: /* IV reference */
10456 ptr = POPPTR(ss,ix);
10457 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10458 iv = POPIV(ss,ix);
10459 TOPIV(nss,ix) = iv;
10460 break;
a41cc44e
NC
10461 case SAVEt_HPTR: /* HV* reference */
10462 case SAVEt_APTR: /* AV* reference */
1d7c1841
GS
10463 case SAVEt_SPTR: /* SV* reference */
10464 ptr = POPPTR(ss,ix);
10465 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10466 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10467 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
10468 break;
10469 case SAVEt_VPTR: /* random* reference */
10470 ptr = POPPTR(ss,ix);
10471 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10472 ptr = POPPTR(ss,ix);
10473 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10474 break;
b03d03b0 10475 case SAVEt_GENERIC_PVREF: /* generic char* */
1d7c1841
GS
10476 case SAVEt_PPTR: /* char* reference */
10477 ptr = POPPTR(ss,ix);
10478 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10479 c = (char*)POPPTR(ss,ix);
10480 TOPPTR(nss,ix) = pv_dup(c);
10481 break;
1d7c1841
GS
10482 case SAVEt_GP: /* scalar reference */
10483 gp = (GP*)POPPTR(ss,ix);
d2d73c3e 10484 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
1d7c1841
GS
10485 (void)GpREFCNT_inc(gp);
10486 gv = (GV*)POPPTR(ss,ix);
2ed3c8fc 10487 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
1d7c1841 10488 break;
1d7c1841
GS
10489 case SAVEt_FREEOP:
10490 ptr = POPPTR(ss,ix);
10491 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
10492 /* these are assumed to be refcounted properly */
53c1dcc0 10493 OP *o;
1d7c1841
GS
10494 switch (((OP*)ptr)->op_type) {
10495 case OP_LEAVESUB:
10496 case OP_LEAVESUBLV:
10497 case OP_LEAVEEVAL:
10498 case OP_LEAVE:
10499 case OP_SCOPE:
10500 case OP_LEAVEWRITE:
e977893f
GS
10501 TOPPTR(nss,ix) = ptr;
10502 o = (OP*)ptr;
d3c72c2a 10503 OP_REFCNT_LOCK;
594cd643 10504 (void) OpREFCNT_inc(o);
d3c72c2a 10505 OP_REFCNT_UNLOCK;
1d7c1841
GS
10506 break;
10507 default:
5f66b61c 10508 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
10509 break;
10510 }
10511 }
10512 else
5f66b61c 10513 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
10514 break;
10515 case SAVEt_FREEPV:
10516 c = (char*)POPPTR(ss,ix);
10517 TOPPTR(nss,ix) = pv_dup_inc(c);
10518 break;
1d7c1841
GS
10519 case SAVEt_DELETE:
10520 hv = (HV*)POPPTR(ss,ix);
d2d73c3e 10521 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
1d7c1841
GS
10522 c = (char*)POPPTR(ss,ix);
10523 TOPPTR(nss,ix) = pv_dup_inc(c);
3e07292d
NC
10524 /* fall through */
10525 case SAVEt_STACK_POS: /* Position on Perl stack */
1d7c1841
GS
10526 i = POPINT(ss,ix);
10527 TOPINT(nss,ix) = i;
10528 break;
10529 case SAVEt_DESTRUCTOR:
10530 ptr = POPPTR(ss,ix);
10531 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10532 dptr = POPDPTR(ss,ix);
8141890a
JH
10533 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
10534 any_dup(FPTR2DPTR(void *, dptr),
10535 proto_perl));
1d7c1841
GS
10536 break;
10537 case SAVEt_DESTRUCTOR_X:
10538 ptr = POPPTR(ss,ix);
10539 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10540 dxptr = POPDXPTR(ss,ix);
8141890a
JH
10541 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
10542 any_dup(FPTR2DPTR(void *, dxptr),
10543 proto_perl));
1d7c1841
GS
10544 break;
10545 case SAVEt_REGCONTEXT:
10546 case SAVEt_ALLOC:
10547 i = POPINT(ss,ix);
10548 TOPINT(nss,ix) = i;
10549 ix -= i;
10550 break;
1d7c1841
GS
10551 case SAVEt_AELEM: /* array element */
10552 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10553 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
10554 i = POPINT(ss,ix);
10555 TOPINT(nss,ix) = i;
10556 av = (AV*)POPPTR(ss,ix);
d2d73c3e 10557 TOPPTR(nss,ix) = av_dup_inc(av, param);
1d7c1841 10558 break;
1d7c1841
GS
10559 case SAVEt_OP:
10560 ptr = POPPTR(ss,ix);
10561 TOPPTR(nss,ix) = ptr;
10562 break;
10563 case SAVEt_HINTS:
10564 i = POPINT(ss,ix);
10565 TOPINT(nss,ix) = i;
b3ca2e83 10566 ptr = POPPTR(ss,ix);
080ac856 10567 if (ptr) {
7b6dd8c3 10568 HINTS_REFCNT_LOCK;
080ac856 10569 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
7b6dd8c3
NC
10570 HINTS_REFCNT_UNLOCK;
10571 }
cbb1fbea 10572 TOPPTR(nss,ix) = ptr;
a8f8b6a7
NC
10573 if (i & HINT_LOCALIZE_HH) {
10574 hv = (HV*)POPPTR(ss,ix);
10575 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10576 }
1d7c1841 10577 break;
c3564e5c
GS
10578 case SAVEt_PADSV:
10579 longval = (long)POPLONG(ss,ix);
10580 TOPLONG(nss,ix) = longval;
10581 ptr = POPPTR(ss,ix);
10582 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10583 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10584 TOPPTR(nss,ix) = sv_dup(sv, param);
c3564e5c 10585 break;
a1bb4754 10586 case SAVEt_BOOL:
38d8b13e 10587 ptr = POPPTR(ss,ix);
b9609c01 10588 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
38d8b13e 10589 longval = (long)POPBOOL(ss,ix);
b9609c01 10590 TOPBOOL(nss,ix) = (bool)longval;
a1bb4754 10591 break;
8bd2680e
MHM
10592 case SAVEt_SET_SVFLAGS:
10593 i = POPINT(ss,ix);
10594 TOPINT(nss,ix) = i;
10595 i = POPINT(ss,ix);
10596 TOPINT(nss,ix) = i;
10597 sv = (SV*)POPPTR(ss,ix);
10598 TOPPTR(nss,ix) = sv_dup(sv, param);
10599 break;
5bfb7d0e
NC
10600 case SAVEt_RE_STATE:
10601 {
10602 const struct re_save_state *const old_state
10603 = (struct re_save_state *)
10604 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
10605 struct re_save_state *const new_state
10606 = (struct re_save_state *)
10607 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
10608
10609 Copy(old_state, new_state, 1, struct re_save_state);
10610 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
10611
10612 new_state->re_state_bostr
10613 = pv_dup(old_state->re_state_bostr);
10614 new_state->re_state_reginput
10615 = pv_dup(old_state->re_state_reginput);
5bfb7d0e
NC
10616 new_state->re_state_regeol
10617 = pv_dup(old_state->re_state_regeol);
f0ab9afb
NC
10618 new_state->re_state_regoffs
10619 = (regexp_paren_pair*)
10620 any_dup(old_state->re_state_regoffs, proto_perl);
5bfb7d0e 10621 new_state->re_state_reglastparen
11b79775
DD
10622 = (U32*) any_dup(old_state->re_state_reglastparen,
10623 proto_perl);
5bfb7d0e 10624 new_state->re_state_reglastcloseparen
11b79775 10625 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
5bfb7d0e 10626 proto_perl);
5bfb7d0e
NC
10627 /* XXX This just has to be broken. The old save_re_context
10628 code did SAVEGENERICPV(PL_reg_start_tmp);
10629 PL_reg_start_tmp is char **.
10630 Look above to what the dup code does for
10631 SAVEt_GENERIC_PVREF
10632 It can never have worked.
10633 So this is merely a faithful copy of the exiting bug: */
10634 new_state->re_state_reg_start_tmp
10635 = (char **) pv_dup((char *)
10636 old_state->re_state_reg_start_tmp);
10637 /* I assume that it only ever "worked" because no-one called
10638 (pseudo)fork while the regexp engine had re-entered itself.
10639 */
5bfb7d0e
NC
10640#ifdef PERL_OLD_COPY_ON_WRITE
10641 new_state->re_state_nrs
10642 = sv_dup(old_state->re_state_nrs, param);
10643#endif
10644 new_state->re_state_reg_magic
11b79775
DD
10645 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
10646 proto_perl);
5bfb7d0e 10647 new_state->re_state_reg_oldcurpm
11b79775
DD
10648 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
10649 proto_perl);
5bfb7d0e 10650 new_state->re_state_reg_curpm
11b79775
DD
10651 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
10652 proto_perl);
5bfb7d0e
NC
10653 new_state->re_state_reg_oldsaved
10654 = pv_dup(old_state->re_state_reg_oldsaved);
10655 new_state->re_state_reg_poscache
10656 = pv_dup(old_state->re_state_reg_poscache);
5bfb7d0e
NC
10657 new_state->re_state_reg_starttry
10658 = pv_dup(old_state->re_state_reg_starttry);
5bfb7d0e
NC
10659 break;
10660 }
68da3b2f
NC
10661 case SAVEt_COMPILE_WARNINGS:
10662 ptr = POPPTR(ss,ix);
10663 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
7b6dd8c3 10664 break;
7c197c94
DM
10665 case SAVEt_PARSER:
10666 ptr = POPPTR(ss,ix);
456084a8 10667 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
7c197c94 10668 break;
1d7c1841 10669 default:
147bc374
NC
10670 Perl_croak(aTHX_
10671 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
1d7c1841
GS
10672 }
10673 }
10674
bd81e77b
NC
10675 return nss;
10676}
10677
10678
10679/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
10680 * flag to the result. This is done for each stash before cloning starts,
10681 * so we know which stashes want their objects cloned */
10682
10683static void
10684do_mark_cloneable_stash(pTHX_ SV *sv)
10685{
10686 const HEK * const hvname = HvNAME_HEK((HV*)sv);
10687 if (hvname) {
10688 GV* const cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
10689 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
10690 if (cloner && GvCV(cloner)) {
10691 dSP;
10692 UV status;
10693
10694 ENTER;
10695 SAVETMPS;
10696 PUSHMARK(SP);
10697 XPUSHs(sv_2mortal(newSVhek(hvname)));
10698 PUTBACK;
10699 call_sv((SV*)GvCV(cloner), G_SCALAR);
10700 SPAGAIN;
10701 status = POPu;
10702 PUTBACK;
10703 FREETMPS;
10704 LEAVE;
10705 if (status)
10706 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
10707 }
10708 }
10709}
10710
10711
10712
10713/*
10714=for apidoc perl_clone
10715
10716Create and return a new interpreter by cloning the current one.
10717
10718perl_clone takes these flags as parameters:
10719
10720CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
10721without it we only clone the data and zero the stacks,
10722with it we copy the stacks and the new perl interpreter is
10723ready to run at the exact same point as the previous one.
10724The pseudo-fork code uses COPY_STACKS while the
878090d5 10725threads->create doesn't.
bd81e77b
NC
10726
10727CLONEf_KEEP_PTR_TABLE
10728perl_clone keeps a ptr_table with the pointer of the old
10729variable as a key and the new variable as a value,
10730this allows it to check if something has been cloned and not
10731clone it again but rather just use the value and increase the
10732refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
10733the ptr_table using the function
10734C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
10735reason to keep it around is if you want to dup some of your own
10736variable who are outside the graph perl scans, example of this
10737code is in threads.xs create
10738
10739CLONEf_CLONE_HOST
10740This is a win32 thing, it is ignored on unix, it tells perls
10741win32host code (which is c++) to clone itself, this is needed on
10742win32 if you want to run two threads at the same time,
10743if you just want to do some stuff in a separate perl interpreter
10744and then throw it away and return to the original one,
10745you don't need to do anything.
10746
10747=cut
10748*/
10749
10750/* XXX the above needs expanding by someone who actually understands it ! */
10751EXTERN_C PerlInterpreter *
10752perl_clone_host(PerlInterpreter* proto_perl, UV flags);
10753
10754PerlInterpreter *
10755perl_clone(PerlInterpreter *proto_perl, UV flags)
10756{
10757 dVAR;
10758#ifdef PERL_IMPLICIT_SYS
10759
10760 /* perlhost.h so we need to call into it
10761 to clone the host, CPerlHost should have a c interface, sky */
10762
10763 if (flags & CLONEf_CLONE_HOST) {
10764 return perl_clone_host(proto_perl,flags);
10765 }
10766 return perl_clone_using(proto_perl, flags,
10767 proto_perl->IMem,
10768 proto_perl->IMemShared,
10769 proto_perl->IMemParse,
10770 proto_perl->IEnv,
10771 proto_perl->IStdIO,
10772 proto_perl->ILIO,
10773 proto_perl->IDir,
10774 proto_perl->ISock,
10775 proto_perl->IProc);
10776}
10777
10778PerlInterpreter *
10779perl_clone_using(PerlInterpreter *proto_perl, UV flags,
10780 struct IPerlMem* ipM, struct IPerlMem* ipMS,
10781 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
10782 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
10783 struct IPerlDir* ipD, struct IPerlSock* ipS,
10784 struct IPerlProc* ipP)
10785{
10786 /* XXX many of the string copies here can be optimized if they're
10787 * constants; they need to be allocated as common memory and just
10788 * their pointers copied. */
10789
10790 IV i;
10791 CLONE_PARAMS clone_params;
5f66b61c 10792 CLONE_PARAMS* const param = &clone_params;
bd81e77b 10793
5f66b61c 10794 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
bd81e77b
NC
10795 /* for each stash, determine whether its objects should be cloned */
10796 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10797 PERL_SET_THX(my_perl);
10798
10799# ifdef DEBUGGING
7e337ee0 10800 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
10801 PL_op = NULL;
10802 PL_curcop = NULL;
bd81e77b
NC
10803 PL_markstack = 0;
10804 PL_scopestack = 0;
10805 PL_savestack = 0;
10806 PL_savestack_ix = 0;
10807 PL_savestack_max = -1;
10808 PL_sig_pending = 0;
10809 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10810# else /* !DEBUGGING */
10811 Zero(my_perl, 1, PerlInterpreter);
10812# endif /* DEBUGGING */
10813
10814 /* host pointers */
10815 PL_Mem = ipM;
10816 PL_MemShared = ipMS;
10817 PL_MemParse = ipMP;
10818 PL_Env = ipE;
10819 PL_StdIO = ipStd;
10820 PL_LIO = ipLIO;
10821 PL_Dir = ipD;
10822 PL_Sock = ipS;
10823 PL_Proc = ipP;
10824#else /* !PERL_IMPLICIT_SYS */
10825 IV i;
10826 CLONE_PARAMS clone_params;
10827 CLONE_PARAMS* param = &clone_params;
5f66b61c 10828 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
bd81e77b
NC
10829 /* for each stash, determine whether its objects should be cloned */
10830 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10831 PERL_SET_THX(my_perl);
10832
10833# ifdef DEBUGGING
7e337ee0 10834 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
10835 PL_op = NULL;
10836 PL_curcop = NULL;
bd81e77b
NC
10837 PL_markstack = 0;
10838 PL_scopestack = 0;
10839 PL_savestack = 0;
10840 PL_savestack_ix = 0;
10841 PL_savestack_max = -1;
10842 PL_sig_pending = 0;
10843 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10844# else /* !DEBUGGING */
10845 Zero(my_perl, 1, PerlInterpreter);
10846# endif /* DEBUGGING */
10847#endif /* PERL_IMPLICIT_SYS */
10848 param->flags = flags;
10849 param->proto_perl = proto_perl;
10850
7cb608b5
NC
10851 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
10852
fdda85ca 10853 PL_body_arenas = NULL;
bd81e77b
NC
10854 Zero(&PL_body_roots, 1, PL_body_roots);
10855
10856 PL_nice_chunk = NULL;
10857 PL_nice_chunk_size = 0;
10858 PL_sv_count = 0;
10859 PL_sv_objcount = 0;
a0714e2c
SS
10860 PL_sv_root = NULL;
10861 PL_sv_arenaroot = NULL;
bd81e77b
NC
10862
10863 PL_debug = proto_perl->Idebug;
10864
10865 PL_hash_seed = proto_perl->Ihash_seed;
10866 PL_rehash_seed = proto_perl->Irehash_seed;
10867
10868#ifdef USE_REENTRANT_API
10869 /* XXX: things like -Dm will segfault here in perlio, but doing
10870 * PERL_SET_CONTEXT(proto_perl);
10871 * breaks too many other things
10872 */
10873 Perl_reentrant_init(aTHX);
10874#endif
10875
10876 /* create SV map for pointer relocation */
10877 PL_ptr_table = ptr_table_new();
10878
10879 /* initialize these special pointers as early as possible */
10880 SvANY(&PL_sv_undef) = NULL;
10881 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
10882 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
10883 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
10884
10885 SvANY(&PL_sv_no) = new_XPVNV();
10886 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
10887 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10888 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 10889 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
bd81e77b
NC
10890 SvCUR_set(&PL_sv_no, 0);
10891 SvLEN_set(&PL_sv_no, 1);
10892 SvIV_set(&PL_sv_no, 0);
10893 SvNV_set(&PL_sv_no, 0);
10894 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
10895
10896 SvANY(&PL_sv_yes) = new_XPVNV();
10897 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
10898 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10899 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 10900 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
bd81e77b
NC
10901 SvCUR_set(&PL_sv_yes, 1);
10902 SvLEN_set(&PL_sv_yes, 2);
10903 SvIV_set(&PL_sv_yes, 1);
10904 SvNV_set(&PL_sv_yes, 1);
10905 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
10906
10907 /* create (a non-shared!) shared string table */
10908 PL_strtab = newHV();
10909 HvSHAREKEYS_off(PL_strtab);
10910 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
10911 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
10912
10913 PL_compiling = proto_perl->Icompiling;
10914
10915 /* These two PVs will be free'd special way so must set them same way op.c does */
10916 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
10917 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
10918
10919 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
10920 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
10921
10922 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
72dc9ed5 10923 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
c28fe1ec 10924 if (PL_compiling.cop_hints_hash) {
cbb1fbea 10925 HINTS_REFCNT_LOCK;
c28fe1ec 10926 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
cbb1fbea
NC
10927 HINTS_REFCNT_UNLOCK;
10928 }
bd81e77b
NC
10929 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
10930
10931 /* pseudo environmental stuff */
10932 PL_origargc = proto_perl->Iorigargc;
10933 PL_origargv = proto_perl->Iorigargv;
10934
10935 param->stashes = newAV(); /* Setup array of objects to call clone on */
10936
10937 /* Set tainting stuff before PerlIO_debug can possibly get called */
10938 PL_tainting = proto_perl->Itainting;
10939 PL_taint_warn = proto_perl->Itaint_warn;
10940
10941#ifdef PERLIO_LAYERS
10942 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
10943 PerlIO_clone(aTHX_ proto_perl, param);
10944#endif
10945
10946 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
10947 PL_incgv = gv_dup(proto_perl->Iincgv, param);
10948 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
10949 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
10950 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
10951 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
10952
10953 /* switches */
10954 PL_minus_c = proto_perl->Iminus_c;
10955 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
10956 PL_localpatches = proto_perl->Ilocalpatches;
10957 PL_splitstr = proto_perl->Isplitstr;
10958 PL_preprocess = proto_perl->Ipreprocess;
10959 PL_minus_n = proto_perl->Iminus_n;
10960 PL_minus_p = proto_perl->Iminus_p;
10961 PL_minus_l = proto_perl->Iminus_l;
10962 PL_minus_a = proto_perl->Iminus_a;
bc9b29db 10963 PL_minus_E = proto_perl->Iminus_E;
bd81e77b
NC
10964 PL_minus_F = proto_perl->Iminus_F;
10965 PL_doswitches = proto_perl->Idoswitches;
10966 PL_dowarn = proto_perl->Idowarn;
10967 PL_doextract = proto_perl->Idoextract;
10968 PL_sawampersand = proto_perl->Isawampersand;
10969 PL_unsafe = proto_perl->Iunsafe;
10970 PL_inplace = SAVEPV(proto_perl->Iinplace);
10971 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
10972 PL_perldb = proto_perl->Iperldb;
10973 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
10974 PL_exit_flags = proto_perl->Iexit_flags;
10975
10976 /* magical thingies */
10977 /* XXX time(&PL_basetime) when asked for? */
10978 PL_basetime = proto_perl->Ibasetime;
10979 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
10980
10981 PL_maxsysfd = proto_perl->Imaxsysfd;
bd81e77b
NC
10982 PL_statusvalue = proto_perl->Istatusvalue;
10983#ifdef VMS
10984 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
10985#else
10986 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
10987#endif
10988 PL_encoding = sv_dup(proto_perl->Iencoding, param);
10989
10990 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
10991 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
10992 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
10993
84da74a7 10994
f9f4320a 10995 /* RE engine related */
84da74a7
YO
10996 Zero(&PL_reg_state, 1, struct re_save_state);
10997 PL_reginterp_cnt = 0;
10998 PL_regmatch_slab = NULL;
10999
bd81e77b
NC
11000 /* Clone the regex array */
11001 PL_regex_padav = newAV();
11002 {
11003 const I32 len = av_len((AV*)proto_perl->Iregex_padav);
7a5b473e 11004 SV* const * const regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
bd81e77b 11005 IV i;
7f466ec7 11006 av_push(PL_regex_padav, sv_dup_inc_NN(regexen[0],param));
bd81e77b 11007 for(i = 1; i <= len; i++) {
7a5b473e
AL
11008 const SV * const regex = regexen[i];
11009 SV * const sv =
11010 SvREPADTMP(regex)
11011 ? sv_dup_inc(regex, param)
11012 : SvREFCNT_inc(
f8149455 11013 newSViv(PTR2IV(CALLREGDUPE(
7a5b473e
AL
11014 INT2PTR(REGEXP *, SvIVX(regex)), param))))
11015 ;
60790534
DM
11016 if (SvFLAGS(regex) & SVf_BREAK)
11017 SvFLAGS(sv) |= SVf_BREAK; /* unrefcnted PL_curpm */
7a5b473e 11018 av_push(PL_regex_padav, sv);
bd81e77b
NC
11019 }
11020 }
11021 PL_regex_pad = AvARRAY(PL_regex_padav);
11022
11023 /* shortcuts to various I/O objects */
11024 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
11025 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
11026 PL_defgv = gv_dup(proto_perl->Idefgv, param);
11027 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
11028 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
11029 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
1d7c1841 11030
bd81e77b
NC
11031 /* shortcuts to regexp stuff */
11032 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
9660f481 11033
bd81e77b
NC
11034 /* shortcuts to misc objects */
11035 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
9660f481 11036
bd81e77b
NC
11037 /* shortcuts to debugging objects */
11038 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
11039 PL_DBline = gv_dup(proto_perl->IDBline, param);
11040 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
11041 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
11042 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
11043 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
11044 PL_DBassertion = sv_dup(proto_perl->IDBassertion, param);
11045 PL_lineary = av_dup(proto_perl->Ilineary, param);
11046 PL_dbargs = av_dup(proto_perl->Idbargs, param);
9660f481 11047
bd81e77b
NC
11048 /* symbol tables */
11049 PL_defstash = hv_dup_inc(proto_perl->Tdefstash, param);
11050 PL_curstash = hv_dup(proto_perl->Tcurstash, param);
11051 PL_debstash = hv_dup(proto_perl->Idebstash, param);
11052 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
11053 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
11054
11055 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
11056 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
11057 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
3c10abe3
AG
11058 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
11059 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
bd81e77b
NC
11060 PL_endav = av_dup_inc(proto_perl->Iendav, param);
11061 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
11062 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
11063
11064 PL_sub_generation = proto_perl->Isub_generation;
11065
11066 /* funky return mechanisms */
11067 PL_forkprocess = proto_perl->Iforkprocess;
11068
11069 /* subprocess state */
11070 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
11071
11072 /* internal state */
11073 PL_maxo = proto_perl->Imaxo;
11074 if (proto_perl->Iop_mask)
11075 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11076 else
bd61b366 11077 PL_op_mask = NULL;
bd81e77b
NC
11078 /* PL_asserting = proto_perl->Iasserting; */
11079
11080 /* current interpreter roots */
11081 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
d3c72c2a 11082 OP_REFCNT_LOCK;
bd81e77b 11083 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
d3c72c2a 11084 OP_REFCNT_UNLOCK;
bd81e77b
NC
11085 PL_main_start = proto_perl->Imain_start;
11086 PL_eval_root = proto_perl->Ieval_root;
11087 PL_eval_start = proto_perl->Ieval_start;
11088
11089 /* runtime control stuff */
11090 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11091 PL_copline = proto_perl->Icopline;
11092
11093 PL_filemode = proto_perl->Ifilemode;
11094 PL_lastfd = proto_perl->Ilastfd;
11095 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
11096 PL_Argv = NULL;
bd61b366 11097 PL_Cmd = NULL;
bd81e77b 11098 PL_gensym = proto_perl->Igensym;
bd81e77b
NC
11099 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
11100 PL_laststatval = proto_perl->Ilaststatval;
11101 PL_laststype = proto_perl->Ilaststype;
a0714e2c 11102 PL_mess_sv = NULL;
bd81e77b
NC
11103
11104 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
11105
11106 /* interpreter atexit processing */
11107 PL_exitlistlen = proto_perl->Iexitlistlen;
11108 if (PL_exitlistlen) {
11109 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11110 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9660f481 11111 }
bd81e77b
NC
11112 else
11113 PL_exitlist = (PerlExitListEntry*)NULL;
f16dd614
DM
11114
11115 PL_my_cxt_size = proto_perl->Imy_cxt_size;
4c901e72 11116 if (PL_my_cxt_size) {
f16dd614
DM
11117 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
11118 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
53d44271 11119#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 11120 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
53d44271
JH
11121 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
11122#endif
f16dd614 11123 }
53d44271 11124 else {
f16dd614 11125 PL_my_cxt_list = (void**)NULL;
53d44271 11126#ifdef PERL_GLOBAL_STRUCT_PRIVATE
bae1192d 11127 PL_my_cxt_keys = (const char**)NULL;
53d44271
JH
11128#endif
11129 }
bd81e77b
NC
11130 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
11131 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
11132 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11133
11134 PL_profiledata = NULL;
11135 PL_rsfp = fp_dup(proto_perl->Irsfp, '<', param);
11136 /* PL_rsfp_filters entries have fake IoDIRP() */
11137 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters, param);
9660f481 11138
bd81e77b 11139 PL_compcv = cv_dup(proto_perl->Icompcv, param);
9660f481 11140
bd81e77b 11141 PAD_CLONE_VARS(proto_perl, param);
9660f481 11142
bd81e77b
NC
11143#ifdef HAVE_INTERP_INTERN
11144 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11145#endif
645c22ef 11146
bd81e77b
NC
11147 /* more statics moved here */
11148 PL_generation = proto_perl->Igeneration;
11149 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
645c22ef 11150
bd81e77b
NC
11151 PL_in_clean_objs = proto_perl->Iin_clean_objs;
11152 PL_in_clean_all = proto_perl->Iin_clean_all;
6a78b4db 11153
bd81e77b
NC
11154 PL_uid = proto_perl->Iuid;
11155 PL_euid = proto_perl->Ieuid;
11156 PL_gid = proto_perl->Igid;
11157 PL_egid = proto_perl->Iegid;
11158 PL_nomemok = proto_perl->Inomemok;
11159 PL_an = proto_perl->Ian;
11160 PL_evalseq = proto_perl->Ievalseq;
11161 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11162 PL_origalen = proto_perl->Iorigalen;
11163#ifdef PERL_USES_PL_PIDSTATUS
11164 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11165#endif
11166 PL_osname = SAVEPV(proto_perl->Iosname);
11167 PL_sighandlerp = proto_perl->Isighandlerp;
6a78b4db 11168
bd81e77b 11169 PL_runops = proto_perl->Irunops;
6a78b4db 11170
bd81e77b 11171 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
6a78b4db 11172
bd81e77b
NC
11173#ifdef CSH
11174 PL_cshlen = proto_perl->Icshlen;
11175 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
11176#endif
645c22ef 11177
199e78b7
DM
11178 PL_parser = parser_dup(proto_perl->Iparser, param);
11179
bd81e77b 11180 PL_lex_state = proto_perl->Ilex_state;
645c22ef 11181
5db06880
NC
11182#ifdef PERL_MAD
11183 Copy(proto_perl->Inexttoke, PL_nexttoke, 5, NEXTTOKE);
5336380d 11184 PL_curforce = proto_perl->Icurforce;
5db06880 11185#else
bd81e77b
NC
11186 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
11187 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
11188 PL_nexttoke = proto_perl->Inexttoke;
5db06880 11189#endif
c43294b8 11190
db4997f0
NC
11191 PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param);
11192 i = proto_perl->Ibufptr - SvPVX_const(proto_perl->Ilinestr);
11193 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11194 i = proto_perl->Ioldbufptr - SvPVX_const(proto_perl->Ilinestr);
11195 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11196 i = proto_perl->Ioldoldbufptr - SvPVX_const(proto_perl->Ilinestr);
11197 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11198 i = proto_perl->Ilinestart - SvPVX_const(proto_perl->Ilinestr);
11199 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
bd81e77b 11200 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
bd81e77b
NC
11201
11202 PL_expect = proto_perl->Iexpect;
11203
bd81e77b 11204 PL_multi_end = proto_perl->Imulti_end;
bd81e77b
NC
11205
11206 PL_error_count = proto_perl->Ierror_count;
11207 PL_subline = proto_perl->Isubline;
11208 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
c43294b8 11209
db4997f0
NC
11210 i = proto_perl->Ilast_uni - SvPVX_const(proto_perl->Ilinestr);
11211 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11212 i = proto_perl->Ilast_lop - SvPVX_const(proto_perl->Ilinestr);
11213 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11214 PL_last_lop_op = proto_perl->Ilast_lop_op;
bd81e77b
NC
11215 PL_in_my = proto_perl->Iin_my;
11216 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash, param);
11217#ifdef FCRYPT
11218 PL_cryptseen = proto_perl->Icryptseen;
11219#endif
1d7c1841 11220
bd81e77b 11221 PL_hints = proto_perl->Ihints;
1d7c1841 11222
bd81e77b 11223 PL_amagic_generation = proto_perl->Iamagic_generation;
d2d73c3e 11224
bd81e77b
NC
11225#ifdef USE_LOCALE_COLLATE
11226 PL_collation_ix = proto_perl->Icollation_ix;
11227 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11228 PL_collation_standard = proto_perl->Icollation_standard;
11229 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11230 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11231#endif /* USE_LOCALE_COLLATE */
1d7c1841 11232
bd81e77b
NC
11233#ifdef USE_LOCALE_NUMERIC
11234 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11235 PL_numeric_standard = proto_perl->Inumeric_standard;
11236 PL_numeric_local = proto_perl->Inumeric_local;
11237 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11238#endif /* !USE_LOCALE_NUMERIC */
1d7c1841 11239
bd81e77b
NC
11240 /* utf8 character classes */
11241 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11242 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11243 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11244 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11245 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11246 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11247 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11248 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11249 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11250 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11251 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11252 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11253 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11254 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11255 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11256 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11257 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11258 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11259 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11260 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
1d7c1841 11261
bd81e77b
NC
11262 /* Did the locale setup indicate UTF-8? */
11263 PL_utf8locale = proto_perl->Iutf8locale;
11264 /* Unicode features (see perlrun/-C) */
11265 PL_unicode = proto_perl->Iunicode;
1d7c1841 11266
bd81e77b
NC
11267 /* Pre-5.8 signals control */
11268 PL_signals = proto_perl->Isignals;
1d7c1841 11269
bd81e77b
NC
11270 /* times() ticks per second */
11271 PL_clocktick = proto_perl->Iclocktick;
1d7c1841 11272
bd81e77b
NC
11273 /* Recursion stopper for PerlIO_find_layer */
11274 PL_in_load_module = proto_perl->Iin_load_module;
8df990a8 11275
bd81e77b
NC
11276 /* sort() routine */
11277 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
e5dd39fc 11278
bd81e77b
NC
11279 /* Not really needed/useful since the reenrant_retint is "volatile",
11280 * but do it for consistency's sake. */
11281 PL_reentrant_retint = proto_perl->Ireentrant_retint;
1d7c1841 11282
bd81e77b
NC
11283 /* Hooks to shared SVs and locks. */
11284 PL_sharehook = proto_perl->Isharehook;
11285 PL_lockhook = proto_perl->Ilockhook;
11286 PL_unlockhook = proto_perl->Iunlockhook;
11287 PL_threadhook = proto_perl->Ithreadhook;
1d7c1841 11288
bd81e77b
NC
11289 PL_runops_std = proto_perl->Irunops_std;
11290 PL_runops_dbg = proto_perl->Irunops_dbg;
1d7c1841 11291
bd81e77b
NC
11292#ifdef THREADS_HAVE_PIDS
11293 PL_ppid = proto_perl->Ippid;
11294#endif
1d7c1841 11295
bd81e77b 11296 /* swatch cache */
5c284bb0 11297 PL_last_swash_hv = NULL; /* reinits on demand */
bd81e77b
NC
11298 PL_last_swash_klen = 0;
11299 PL_last_swash_key[0]= '\0';
11300 PL_last_swash_tmps = (U8*)NULL;
11301 PL_last_swash_slen = 0;
1d7c1841 11302
bd81e77b
NC
11303 PL_glob_index = proto_perl->Iglob_index;
11304 PL_srand_called = proto_perl->Isrand_called;
11b79775 11305 PL_uudmap[(U32) 'M'] = 0; /* reinits on demand */
bd61b366 11306 PL_bitcount = NULL; /* reinits on demand */
05ec9bb3 11307
bd81e77b
NC
11308 if (proto_perl->Ipsig_pend) {
11309 Newxz(PL_psig_pend, SIG_SIZE, int);
11310 }
11311 else {
11312 PL_psig_pend = (int*)NULL;
11313 }
05ec9bb3 11314
bd81e77b
NC
11315 if (proto_perl->Ipsig_ptr) {
11316 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
11317 Newxz(PL_psig_name, SIG_SIZE, SV*);
11318 for (i = 1; i < SIG_SIZE; i++) {
11319 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11320 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11321 }
11322 }
11323 else {
11324 PL_psig_ptr = (SV**)NULL;
11325 PL_psig_name = (SV**)NULL;
11326 }
05ec9bb3 11327
bd81e77b 11328 /* thrdvar.h stuff */
1d7c1841 11329
bd81e77b
NC
11330 if (flags & CLONEf_COPY_STACKS) {
11331 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11332 PL_tmps_ix = proto_perl->Ttmps_ix;
11333 PL_tmps_max = proto_perl->Ttmps_max;
11334 PL_tmps_floor = proto_perl->Ttmps_floor;
11335 Newxz(PL_tmps_stack, PL_tmps_max, SV*);
11336 i = 0;
11337 while (i <= PL_tmps_ix) {
11338 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
11339 ++i;
11340 }
d2d73c3e 11341
bd81e77b
NC
11342 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11343 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
11344 Newxz(PL_markstack, i, I32);
11345 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
11346 - proto_perl->Tmarkstack);
11347 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
11348 - proto_perl->Tmarkstack);
11349 Copy(proto_perl->Tmarkstack, PL_markstack,
11350 PL_markstack_ptr - PL_markstack + 1, I32);
d2d73c3e 11351
bd81e77b
NC
11352 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11353 * NOTE: unlike the others! */
11354 PL_scopestack_ix = proto_perl->Tscopestack_ix;
11355 PL_scopestack_max = proto_perl->Tscopestack_max;
11356 Newxz(PL_scopestack, PL_scopestack_max, I32);
11357 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
d419787a 11358
bd81e77b
NC
11359 /* NOTE: si_dup() looks at PL_markstack */
11360 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo, param);
d2d73c3e 11361
bd81e77b
NC
11362 /* PL_curstack = PL_curstackinfo->si_stack; */
11363 PL_curstack = av_dup(proto_perl->Tcurstack, param);
11364 PL_mainstack = av_dup(proto_perl->Tmainstack, param);
1d7c1841 11365
bd81e77b
NC
11366 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11367 PL_stack_base = AvARRAY(PL_curstack);
11368 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
11369 - proto_perl->Tstack_base);
11370 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
1d7c1841 11371
bd81e77b
NC
11372 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11373 * NOTE: unlike the others! */
11374 PL_savestack_ix = proto_perl->Tsavestack_ix;
11375 PL_savestack_max = proto_perl->Tsavestack_max;
11376 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
11377 PL_savestack = ss_dup(proto_perl, param);
11378 }
11379 else {
11380 init_stacks();
11381 ENTER; /* perl_destruct() wants to LEAVE; */
34394ecd
DM
11382
11383 /* although we're not duplicating the tmps stack, we should still
11384 * add entries for any SVs on the tmps stack that got cloned by a
11385 * non-refcount means (eg a temp in @_); otherwise they will be
11386 * orphaned
11387 */
11388 for (i = 0; i<= proto_perl->Ttmps_ix; i++) {
6136c704 11389 SV * const nsv = (SV*)ptr_table_fetch(PL_ptr_table,
34394ecd
DM
11390 proto_perl->Ttmps_stack[i]);
11391 if (nsv && !SvREFCNT(nsv)) {
11392 EXTEND_MORTAL(1);
b37c2d43 11393 PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple(nsv);
34394ecd
DM
11394 }
11395 }
bd81e77b 11396 }
1d7c1841 11397
bd81e77b
NC
11398 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
11399 PL_top_env = &PL_start_env;
1d7c1841 11400
bd81e77b 11401 PL_op = proto_perl->Top;
4a4c6fe3 11402
a0714e2c 11403 PL_Sv = NULL;
bd81e77b
NC
11404 PL_Xpv = (XPV*)NULL;
11405 PL_na = proto_perl->Tna;
1fcf4c12 11406
bd81e77b
NC
11407 PL_statbuf = proto_perl->Tstatbuf;
11408 PL_statcache = proto_perl->Tstatcache;
11409 PL_statgv = gv_dup(proto_perl->Tstatgv, param);
11410 PL_statname = sv_dup_inc(proto_perl->Tstatname, param);
11411#ifdef HAS_TIMES
11412 PL_timesbuf = proto_perl->Ttimesbuf;
11413#endif
1d7c1841 11414
bd81e77b
NC
11415 PL_tainted = proto_perl->Ttainted;
11416 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
11417 PL_rs = sv_dup_inc(proto_perl->Trs, param);
11418 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv, param);
11419 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv, param);
11420 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv, param);
11421 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
11422 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget, param);
11423 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget, param);
11424 PL_formtarget = sv_dup(proto_perl->Tformtarget, param);
1d7c1841 11425
bd81e77b
NC
11426 PL_restartop = proto_perl->Trestartop;
11427 PL_in_eval = proto_perl->Tin_eval;
11428 PL_delaymagic = proto_perl->Tdelaymagic;
11429 PL_dirty = proto_perl->Tdirty;
11430 PL_localizing = proto_perl->Tlocalizing;
1d7c1841 11431
bd81e77b 11432 PL_errors = sv_dup_inc(proto_perl->Terrors, param);
4608196e 11433 PL_hv_fetch_ent_mh = NULL;
bd81e77b 11434 PL_modcount = proto_perl->Tmodcount;
5f66b61c 11435 PL_lastgotoprobe = NULL;
bd81e77b 11436 PL_dumpindent = proto_perl->Tdumpindent;
1d7c1841 11437
bd81e77b
NC
11438 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
11439 PL_sortstash = hv_dup(proto_perl->Tsortstash, param);
11440 PL_firstgv = gv_dup(proto_perl->Tfirstgv, param);
11441 PL_secondgv = gv_dup(proto_perl->Tsecondgv, param);
bd61b366 11442 PL_efloatbuf = NULL; /* reinits on demand */
bd81e77b 11443 PL_efloatsize = 0; /* reinits on demand */
d2d73c3e 11444
bd81e77b 11445 /* regex stuff */
1d7c1841 11446
bd81e77b
NC
11447 PL_screamfirst = NULL;
11448 PL_screamnext = NULL;
11449 PL_maxscream = -1; /* reinits on demand */
a0714e2c 11450 PL_lastscream = NULL;
1d7c1841 11451
bd81e77b 11452 PL_watchaddr = NULL;
bd61b366 11453 PL_watchok = NULL;
1d7c1841 11454
bd81e77b 11455 PL_regdummy = proto_perl->Tregdummy;
bd81e77b
NC
11456 PL_colorset = 0; /* reinits PL_colors[] */
11457 /*PL_colors[6] = {0,0,0,0,0,0};*/
1d7c1841 11458
84da74a7 11459
1d7c1841 11460
bd81e77b
NC
11461 /* Pluggable optimizer */
11462 PL_peepp = proto_perl->Tpeepp;
1d7c1841 11463
bd81e77b 11464 PL_stashcache = newHV();
1d7c1841 11465
bd81e77b
NC
11466 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
11467 ptr_table_free(PL_ptr_table);
11468 PL_ptr_table = NULL;
11469 }
1d7c1841 11470
bd81e77b
NC
11471 /* Call the ->CLONE method, if it exists, for each of the stashes
11472 identified by sv_dup() above.
11473 */
11474 while(av_len(param->stashes) != -1) {
11475 HV* const stash = (HV*) av_shift(param->stashes);
11476 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
11477 if (cloner && GvCV(cloner)) {
11478 dSP;
11479 ENTER;
11480 SAVETMPS;
11481 PUSHMARK(SP);
11482 XPUSHs(sv_2mortal(newSVhek(HvNAME_HEK(stash))));
11483 PUTBACK;
11484 call_sv((SV*)GvCV(cloner), G_DISCARD);
11485 FREETMPS;
11486 LEAVE;
11487 }
1d7c1841 11488 }
1d7c1841 11489
bd81e77b 11490 SvREFCNT_dec(param->stashes);
1d7c1841 11491
bd81e77b
NC
11492 /* orphaned? eg threads->new inside BEGIN or use */
11493 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
b37c2d43 11494 SvREFCNT_inc_simple_void(PL_compcv);
bd81e77b
NC
11495 SAVEFREESV(PL_compcv);
11496 }
dd2155a4 11497
bd81e77b
NC
11498 return my_perl;
11499}
1d7c1841 11500
bd81e77b 11501#endif /* USE_ITHREADS */
1d7c1841 11502
bd81e77b
NC
11503/*
11504=head1 Unicode Support
1d7c1841 11505
bd81e77b 11506=for apidoc sv_recode_to_utf8
1d7c1841 11507
bd81e77b
NC
11508The encoding is assumed to be an Encode object, on entry the PV
11509of the sv is assumed to be octets in that encoding, and the sv
11510will be converted into Unicode (and UTF-8).
1d7c1841 11511
bd81e77b
NC
11512If the sv already is UTF-8 (or if it is not POK), or if the encoding
11513is not a reference, nothing is done to the sv. If the encoding is not
11514an C<Encode::XS> Encoding object, bad things will happen.
11515(See F<lib/encoding.pm> and L<Encode>).
1d7c1841 11516
bd81e77b 11517The PV of the sv is returned.
1d7c1841 11518
bd81e77b 11519=cut */
1d7c1841 11520
bd81e77b
NC
11521char *
11522Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
11523{
11524 dVAR;
11525 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
11526 SV *uni;
11527 STRLEN len;
11528 const char *s;
11529 dSP;
11530 ENTER;
11531 SAVETMPS;
11532 save_re_context();
11533 PUSHMARK(sp);
11534 EXTEND(SP, 3);
11535 XPUSHs(encoding);
11536 XPUSHs(sv);
11537/*
11538 NI-S 2002/07/09
11539 Passing sv_yes is wrong - it needs to be or'ed set of constants
11540 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
11541 remove converted chars from source.
1d7c1841 11542
bd81e77b 11543 Both will default the value - let them.
1d7c1841 11544
bd81e77b
NC
11545 XPUSHs(&PL_sv_yes);
11546*/
11547 PUTBACK;
11548 call_method("decode", G_SCALAR);
11549 SPAGAIN;
11550 uni = POPs;
11551 PUTBACK;
11552 s = SvPV_const(uni, len);
11553 if (s != SvPVX_const(sv)) {
11554 SvGROW(sv, len + 1);
11555 Move(s, SvPVX(sv), len + 1, char);
11556 SvCUR_set(sv, len);
11557 }
11558 FREETMPS;
11559 LEAVE;
11560 SvUTF8_on(sv);
11561 return SvPVX(sv);
389edf32 11562 }
bd81e77b
NC
11563 return SvPOKp(sv) ? SvPVX(sv) : NULL;
11564}
1d7c1841 11565
bd81e77b
NC
11566/*
11567=for apidoc sv_cat_decode
1d7c1841 11568
bd81e77b
NC
11569The encoding is assumed to be an Encode object, the PV of the ssv is
11570assumed to be octets in that encoding and decoding the input starts
11571from the position which (PV + *offset) pointed to. The dsv will be
11572concatenated the decoded UTF-8 string from ssv. Decoding will terminate
11573when the string tstr appears in decoding output or the input ends on
11574the PV of the ssv. The value which the offset points will be modified
11575to the last input position on the ssv.
1d7c1841 11576
bd81e77b 11577Returns TRUE if the terminator was found, else returns FALSE.
1d7c1841 11578
bd81e77b
NC
11579=cut */
11580
11581bool
11582Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
11583 SV *ssv, int *offset, char *tstr, int tlen)
11584{
11585 dVAR;
11586 bool ret = FALSE;
11587 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
11588 SV *offsv;
11589 dSP;
11590 ENTER;
11591 SAVETMPS;
11592 save_re_context();
11593 PUSHMARK(sp);
11594 EXTEND(SP, 6);
11595 XPUSHs(encoding);
11596 XPUSHs(dsv);
11597 XPUSHs(ssv);
11598 XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
11599 XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
11600 PUTBACK;
11601 call_method("cat_decode", G_SCALAR);
11602 SPAGAIN;
11603 ret = SvTRUE(TOPs);
11604 *offset = SvIV(offsv);
11605 PUTBACK;
11606 FREETMPS;
11607 LEAVE;
389edf32 11608 }
bd81e77b
NC
11609 else
11610 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
11611 return ret;
1d7c1841 11612
bd81e77b 11613}
1d7c1841 11614
bd81e77b
NC
11615/* ---------------------------------------------------------------------
11616 *
11617 * support functions for report_uninit()
11618 */
1d7c1841 11619
bd81e77b
NC
11620/* the maxiumum size of array or hash where we will scan looking
11621 * for the undefined element that triggered the warning */
1d7c1841 11622
bd81e77b 11623#define FUV_MAX_SEARCH_SIZE 1000
1d7c1841 11624
bd81e77b
NC
11625/* Look for an entry in the hash whose value has the same SV as val;
11626 * If so, return a mortal copy of the key. */
1d7c1841 11627
bd81e77b
NC
11628STATIC SV*
11629S_find_hash_subscript(pTHX_ HV *hv, SV* val)
11630{
11631 dVAR;
11632 register HE **array;
11633 I32 i;
6c3182a5 11634
bd81e77b
NC
11635 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
11636 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
a0714e2c 11637 return NULL;
6c3182a5 11638
bd81e77b 11639 array = HvARRAY(hv);
6c3182a5 11640
bd81e77b
NC
11641 for (i=HvMAX(hv); i>0; i--) {
11642 register HE *entry;
11643 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
11644 if (HeVAL(entry) != val)
11645 continue;
11646 if ( HeVAL(entry) == &PL_sv_undef ||
11647 HeVAL(entry) == &PL_sv_placeholder)
11648 continue;
11649 if (!HeKEY(entry))
a0714e2c 11650 return NULL;
bd81e77b
NC
11651 if (HeKLEN(entry) == HEf_SVKEY)
11652 return sv_mortalcopy(HeKEY_sv(entry));
11653 return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
11654 }
11655 }
a0714e2c 11656 return NULL;
bd81e77b 11657}
6c3182a5 11658
bd81e77b
NC
11659/* Look for an entry in the array whose value has the same SV as val;
11660 * If so, return the index, otherwise return -1. */
6c3182a5 11661
bd81e77b
NC
11662STATIC I32
11663S_find_array_subscript(pTHX_ AV *av, SV* val)
11664{
97aff369 11665 dVAR;
bd81e77b
NC
11666 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
11667 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
11668 return -1;
57c6e6d2 11669
4a021917
AL
11670 if (val != &PL_sv_undef) {
11671 SV ** const svp = AvARRAY(av);
11672 I32 i;
11673
11674 for (i=AvFILLp(av); i>=0; i--)
11675 if (svp[i] == val)
11676 return i;
bd81e77b
NC
11677 }
11678 return -1;
11679}
15a5279a 11680
bd81e77b
NC
11681/* S_varname(): return the name of a variable, optionally with a subscript.
11682 * If gv is non-zero, use the name of that global, along with gvtype (one
11683 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
11684 * targ. Depending on the value of the subscript_type flag, return:
11685 */
bce260cd 11686
bd81e77b
NC
11687#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
11688#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
11689#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
11690#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
bce260cd 11691
bd81e77b
NC
11692STATIC SV*
11693S_varname(pTHX_ GV *gv, const char gvtype, PADOFFSET targ,
11694 SV* keyname, I32 aindex, int subscript_type)
11695{
1d7c1841 11696
bd81e77b
NC
11697 SV * const name = sv_newmortal();
11698 if (gv) {
11699 char buffer[2];
11700 buffer[0] = gvtype;
11701 buffer[1] = 0;
1d7c1841 11702
bd81e77b 11703 /* as gv_fullname4(), but add literal '^' for $^FOO names */
66fe0623 11704
bd81e77b 11705 gv_fullname4(name, gv, buffer, 0);
1d7c1841 11706
bd81e77b
NC
11707 if ((unsigned int)SvPVX(name)[1] <= 26) {
11708 buffer[0] = '^';
11709 buffer[1] = SvPVX(name)[1] + 'A' - 1;
1d7c1841 11710
bd81e77b
NC
11711 /* Swap the 1 unprintable control character for the 2 byte pretty
11712 version - ie substr($name, 1, 1) = $buffer; */
11713 sv_insert(name, 1, 1, buffer, 2);
1d7c1841 11714 }
bd81e77b
NC
11715 }
11716 else {
11717 U32 unused;
11718 CV * const cv = find_runcv(&unused);
11719 SV *sv;
11720 AV *av;
1d7c1841 11721
bd81e77b 11722 if (!cv || !CvPADLIST(cv))
a0714e2c 11723 return NULL;
bd81e77b
NC
11724 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
11725 sv = *av_fetch(av, targ, FALSE);
f8503592 11726 sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
bd81e77b 11727 }
1d7c1841 11728
bd81e77b 11729 if (subscript_type == FUV_SUBSCRIPT_HASH) {
561b68a9 11730 SV * const sv = newSV(0);
bd81e77b
NC
11731 *SvPVX(name) = '$';
11732 Perl_sv_catpvf(aTHX_ name, "{%s}",
11733 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
11734 SvREFCNT_dec(sv);
11735 }
11736 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
11737 *SvPVX(name) = '$';
11738 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
11739 }
11740 else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
89529cee 11741 Perl_sv_insert(aTHX_ name, 0, 0, STR_WITH_LEN("within "));
1d7c1841 11742
bd81e77b
NC
11743 return name;
11744}
1d7c1841 11745
1d7c1841 11746
bd81e77b
NC
11747/*
11748=for apidoc find_uninit_var
1d7c1841 11749
bd81e77b
NC
11750Find the name of the undefined variable (if any) that caused the operator o
11751to issue a "Use of uninitialized value" warning.
11752If match is true, only return a name if it's value matches uninit_sv.
11753So roughly speaking, if a unary operator (such as OP_COS) generates a
11754warning, then following the direct child of the op may yield an
11755OP_PADSV or OP_GV that gives the name of the undefined variable. On the
11756other hand, with OP_ADD there are two branches to follow, so we only print
11757the variable name if we get an exact match.
1d7c1841 11758
bd81e77b 11759The name is returned as a mortal SV.
1d7c1841 11760
bd81e77b
NC
11761Assumes that PL_op is the op that originally triggered the error, and that
11762PL_comppad/PL_curpad points to the currently executing pad.
1d7c1841 11763
bd81e77b
NC
11764=cut
11765*/
1d7c1841 11766
bd81e77b
NC
11767STATIC SV *
11768S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
11769{
11770 dVAR;
11771 SV *sv;
11772 AV *av;
11773 GV *gv;
11774 OP *o, *o2, *kid;
1d7c1841 11775
bd81e77b
NC
11776 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
11777 uninit_sv == &PL_sv_placeholder)))
a0714e2c 11778 return NULL;
1d7c1841 11779
bd81e77b 11780 switch (obase->op_type) {
1d7c1841 11781
bd81e77b
NC
11782 case OP_RV2AV:
11783 case OP_RV2HV:
11784 case OP_PADAV:
11785 case OP_PADHV:
11786 {
11787 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
11788 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
11789 I32 index = 0;
a0714e2c 11790 SV *keysv = NULL;
bd81e77b 11791 int subscript_type = FUV_SUBSCRIPT_WITHIN;
1d7c1841 11792
bd81e77b
NC
11793 if (pad) { /* @lex, %lex */
11794 sv = PAD_SVl(obase->op_targ);
a0714e2c 11795 gv = NULL;
bd81e77b
NC
11796 }
11797 else {
11798 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
11799 /* @global, %global */
11800 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
11801 if (!gv)
11802 break;
11803 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
11804 }
11805 else /* @{expr}, %{expr} */
11806 return find_uninit_var(cUNOPx(obase)->op_first,
11807 uninit_sv, match);
11808 }
1d7c1841 11809
bd81e77b
NC
11810 /* attempt to find a match within the aggregate */
11811 if (hash) {
d4c19fe8 11812 keysv = find_hash_subscript((HV*)sv, uninit_sv);
bd81e77b
NC
11813 if (keysv)
11814 subscript_type = FUV_SUBSCRIPT_HASH;
11815 }
11816 else {
e15d5972 11817 index = find_array_subscript((AV*)sv, uninit_sv);
bd81e77b
NC
11818 if (index >= 0)
11819 subscript_type = FUV_SUBSCRIPT_ARRAY;
11820 }
1d7c1841 11821
bd81e77b
NC
11822 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
11823 break;
1d7c1841 11824
bd81e77b
NC
11825 return varname(gv, hash ? '%' : '@', obase->op_targ,
11826 keysv, index, subscript_type);
11827 }
1d7c1841 11828
bd81e77b
NC
11829 case OP_PADSV:
11830 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
11831 break;
a0714e2c
SS
11832 return varname(NULL, '$', obase->op_targ,
11833 NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 11834
bd81e77b
NC
11835 case OP_GVSV:
11836 gv = cGVOPx_gv(obase);
11837 if (!gv || (match && GvSV(gv) != uninit_sv))
11838 break;
a0714e2c 11839 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 11840
bd81e77b
NC
11841 case OP_AELEMFAST:
11842 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
11843 if (match) {
11844 SV **svp;
11845 av = (AV*)PAD_SV(obase->op_targ);
11846 if (!av || SvRMAGICAL(av))
11847 break;
11848 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11849 if (!svp || *svp != uninit_sv)
11850 break;
11851 }
a0714e2c
SS
11852 return varname(NULL, '$', obase->op_targ,
11853 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11854 }
11855 else {
11856 gv = cGVOPx_gv(obase);
11857 if (!gv)
11858 break;
11859 if (match) {
11860 SV **svp;
11861 av = GvAV(gv);
11862 if (!av || SvRMAGICAL(av))
11863 break;
11864 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11865 if (!svp || *svp != uninit_sv)
11866 break;
11867 }
11868 return varname(gv, '$', 0,
a0714e2c 11869 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11870 }
11871 break;
1d7c1841 11872
bd81e77b
NC
11873 case OP_EXISTS:
11874 o = cUNOPx(obase)->op_first;
11875 if (!o || o->op_type != OP_NULL ||
11876 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
11877 break;
11878 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
a2efc822 11879
bd81e77b
NC
11880 case OP_AELEM:
11881 case OP_HELEM:
11882 if (PL_op == obase)
11883 /* $a[uninit_expr] or $h{uninit_expr} */
11884 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
081fc587 11885
a0714e2c 11886 gv = NULL;
bd81e77b
NC
11887 o = cBINOPx(obase)->op_first;
11888 kid = cBINOPx(obase)->op_last;
8cf8f3d1 11889
bd81e77b 11890 /* get the av or hv, and optionally the gv */
a0714e2c 11891 sv = NULL;
bd81e77b
NC
11892 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
11893 sv = PAD_SV(o->op_targ);
11894 }
11895 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
11896 && cUNOPo->op_first->op_type == OP_GV)
11897 {
11898 gv = cGVOPx_gv(cUNOPo->op_first);
11899 if (!gv)
11900 break;
11901 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
11902 }
11903 if (!sv)
11904 break;
11905
11906 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
11907 /* index is constant */
11908 if (match) {
11909 if (SvMAGICAL(sv))
11910 break;
11911 if (obase->op_type == OP_HELEM) {
11912 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
11913 if (!he || HeVAL(he) != uninit_sv)
11914 break;
11915 }
11916 else {
00b6aa41 11917 SV * const * const svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
bd81e77b
NC
11918 if (!svp || *svp != uninit_sv)
11919 break;
11920 }
11921 }
11922 if (obase->op_type == OP_HELEM)
11923 return varname(gv, '%', o->op_targ,
11924 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
11925 else
a0714e2c 11926 return varname(gv, '@', o->op_targ, NULL,
bd81e77b 11927 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11928 }
11929 else {
11930 /* index is an expression;
11931 * attempt to find a match within the aggregate */
11932 if (obase->op_type == OP_HELEM) {
d4c19fe8 11933 SV * const keysv = find_hash_subscript((HV*)sv, uninit_sv);
bd81e77b
NC
11934 if (keysv)
11935 return varname(gv, '%', o->op_targ,
11936 keysv, 0, FUV_SUBSCRIPT_HASH);
11937 }
11938 else {
d4c19fe8 11939 const I32 index = find_array_subscript((AV*)sv, uninit_sv);
bd81e77b
NC
11940 if (index >= 0)
11941 return varname(gv, '@', o->op_targ,
a0714e2c 11942 NULL, index, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11943 }
11944 if (match)
11945 break;
11946 return varname(gv,
11947 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
11948 ? '@' : '%',
a0714e2c 11949 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
f284b03f 11950 }
bd81e77b 11951 break;
dc507217 11952
bd81e77b
NC
11953 case OP_AASSIGN:
11954 /* only examine RHS */
11955 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
6d26897e 11956
bd81e77b
NC
11957 case OP_OPEN:
11958 o = cUNOPx(obase)->op_first;
11959 if (o->op_type == OP_PUSHMARK)
11960 o = o->op_sibling;
1d7c1841 11961
bd81e77b
NC
11962 if (!o->op_sibling) {
11963 /* one-arg version of open is highly magical */
a0ae6670 11964
bd81e77b
NC
11965 if (o->op_type == OP_GV) { /* open FOO; */
11966 gv = cGVOPx_gv(o);
11967 if (match && GvSV(gv) != uninit_sv)
11968 break;
11969 return varname(gv, '$', 0,
a0714e2c 11970 NULL, 0, FUV_SUBSCRIPT_NONE);
bd81e77b
NC
11971 }
11972 /* other possibilities not handled are:
11973 * open $x; or open my $x; should return '${*$x}'
11974 * open expr; should return '$'.expr ideally
11975 */
11976 break;
11977 }
11978 goto do_op;
ccfc67b7 11979
bd81e77b
NC
11980 /* ops where $_ may be an implicit arg */
11981 case OP_TRANS:
11982 case OP_SUBST:
11983 case OP_MATCH:
11984 if ( !(obase->op_flags & OPf_STACKED)) {
11985 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
11986 ? PAD_SVl(obase->op_targ)
11987 : DEFSV))
11988 {
11989 sv = sv_newmortal();
11990 sv_setpvn(sv, "$_", 2);
11991 return sv;
11992 }
11993 }
11994 goto do_op;
9f4817db 11995
bd81e77b
NC
11996 case OP_PRTF:
11997 case OP_PRINT:
3ef1310e 11998 case OP_SAY:
bd81e77b
NC
11999 /* skip filehandle as it can't produce 'undef' warning */
12000 o = cUNOPx(obase)->op_first;
12001 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
12002 o = o->op_sibling->op_sibling;
12003 goto do_op2;
9f4817db 12004
9f4817db 12005
bd81e77b
NC
12006 case OP_RV2SV:
12007 case OP_CUSTOM:
12008 case OP_ENTERSUB:
12009 match = 1; /* XS or custom code could trigger random warnings */
12010 goto do_op;
9f4817db 12011
bd81e77b
NC
12012 case OP_SCHOMP:
12013 case OP_CHOMP:
12014 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
396482e1 12015 return sv_2mortal(newSVpvs("${$/}"));
5f66b61c 12016 /*FALLTHROUGH*/
5d170f3a 12017
bd81e77b
NC
12018 default:
12019 do_op:
12020 if (!(obase->op_flags & OPf_KIDS))
12021 break;
12022 o = cUNOPx(obase)->op_first;
12023
12024 do_op2:
12025 if (!o)
12026 break;
f9893866 12027
bd81e77b
NC
12028 /* if all except one arg are constant, or have no side-effects,
12029 * or are optimized away, then it's unambiguous */
5f66b61c 12030 o2 = NULL;
bd81e77b 12031 for (kid=o; kid; kid = kid->op_sibling) {
e15d5972
AL
12032 if (kid) {
12033 const OPCODE type = kid->op_type;
12034 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
12035 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
12036 || (type == OP_PUSHMARK)
bd81e77b 12037 )
bd81e77b 12038 continue;
e15d5972 12039 }
bd81e77b 12040 if (o2) { /* more than one found */
5f66b61c 12041 o2 = NULL;
bd81e77b
NC
12042 break;
12043 }
12044 o2 = kid;
12045 }
12046 if (o2)
12047 return find_uninit_var(o2, uninit_sv, match);
7a5fa8a2 12048
bd81e77b
NC
12049 /* scan all args */
12050 while (o) {
12051 sv = find_uninit_var(o, uninit_sv, 1);
12052 if (sv)
12053 return sv;
12054 o = o->op_sibling;
d0063567 12055 }
bd81e77b 12056 break;
f9893866 12057 }
a0714e2c 12058 return NULL;
9f4817db
JH
12059}
12060
220e2d4e 12061
bd81e77b
NC
12062/*
12063=for apidoc report_uninit
68795e93 12064
bd81e77b 12065Print appropriate "Use of uninitialized variable" warning
220e2d4e 12066
bd81e77b
NC
12067=cut
12068*/
220e2d4e 12069
bd81e77b
NC
12070void
12071Perl_report_uninit(pTHX_ SV* uninit_sv)
220e2d4e 12072{
97aff369 12073 dVAR;
bd81e77b 12074 if (PL_op) {
a0714e2c 12075 SV* varname = NULL;
bd81e77b
NC
12076 if (uninit_sv) {
12077 varname = find_uninit_var(PL_op, uninit_sv,0);
12078 if (varname)
12079 sv_insert(varname, 0, 0, " ", 1);
12080 }
12081 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12082 varname ? SvPV_nolen_const(varname) : "",
12083 " in ", OP_DESC(PL_op));
220e2d4e 12084 }
a73e8557 12085 else
bd81e77b
NC
12086 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12087 "", "", "");
220e2d4e 12088}
f9893866 12089
241d1a3b
NC
12090/*
12091 * Local variables:
12092 * c-indentation-style: bsd
12093 * c-basic-offset: 4
12094 * indent-tabs-mode: t
12095 * End:
12096 *
37442d52
RGS
12097 * ex: set ts=8 sts=4 sw=4 noet:
12098 */