This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move files from ext/Compress/IO to ext/IO/Compress
[perl5.git] / sv.c
CommitLineData
a0d0e21e 1/* sv.c
79072805 2 *
4bb101f2 3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
b94e2f88 4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
79072805
LW
5 *
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
8 *
a0d0e21e 9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
645c22ef
DM
10 *
11 *
5e045b90
AMS
12 * This file contains the code that creates, manipulates and destroys
13 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14 * structure of an SV, so their creation and destruction is handled
15 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16 * level functions (eg. substr, split, join) for each of the types are
17 * in the pp*.c files.
79072805
LW
18 */
19
20#include "EXTERN.h"
864dbfa3 21#define PERL_IN_SV_C
79072805 22#include "perl.h"
d2f185dc 23#include "regcomp.h"
79072805 24
51371543 25#define FCALL *f
2c5424a7 26
2f8ed50e
OS
27#ifdef __Lynx__
28/* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
30#endif
31
e23c8137 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
DM
106
107Manipulation of any of the PL_*root pointers is protected by enclosing
108LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
109if threads are enabled.
110
111The function visit() scans the SV arenas list, and calls a specified
112function for each SV it finds which is still live - ie which has an SvTYPE
113other than all 1's, and a non-zero SvREFCNT. visit() is used by the
114following functions (specified as [function that calls visit()] / [function
115called by visit() for each SV]):
116
117 sv_report_used() / do_report_used()
f2524eef 118 dump all remaining SVs (debugging aid)
645c22ef
DM
119
120 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
121 Attempt to free all objects pointed to by RVs,
122 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
123 try to do the same for all objects indirectly
124 referenced by typeglobs too. Called once from
125 perl_destruct(), prior to calling sv_clean_all()
126 below.
127
128 sv_clean_all() / do_clean_all()
129 SvREFCNT_dec(sv) each remaining SV, possibly
130 triggering an sv_free(). It also sets the
131 SVf_BREAK flag on the SV to indicate that the
132 refcnt has been artificially lowered, and thus
133 stopping sv_free() from giving spurious warnings
134 about SVs which unexpectedly have a refcnt
135 of zero. called repeatedly from perl_destruct()
136 until there are no SVs left.
137
93e68bfb 138=head2 Arena allocator API Summary
645c22ef
DM
139
140Private API to rest of sv.c
141
142 new_SV(), del_SV(),
143
144 new_XIV(), del_XIV(),
145 new_XNV(), del_XNV(),
146 etc
147
148Public API:
149
8cf8f3d1 150 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
645c22ef 151
645c22ef
DM
152=cut
153
154============================================================================ */
155
4561caa4
CS
156/*
157 * "A time to plant, and a time to uproot what was planted..."
158 */
159
77354fb4
NC
160/*
161 * nice_chunk and nice_chunk size need to be set
162 * and queried under the protection of sv_mutex
163 */
164void
165Perl_offer_nice_chunk(pTHX_ void *chunk, U32 chunk_size)
166{
97aff369 167 dVAR;
77354fb4
NC
168 void *new_chunk;
169 U32 new_chunk_size;
170 LOCK_SV_MUTEX;
171 new_chunk = (void *)(chunk);
172 new_chunk_size = (chunk_size);
173 if (new_chunk_size > PL_nice_chunk_size) {
174 Safefree(PL_nice_chunk);
175 PL_nice_chunk = (char *) new_chunk;
176 PL_nice_chunk_size = new_chunk_size;
177 } else {
178 Safefree(chunk);
179 }
180 UNLOCK_SV_MUTEX;
181}
cac9b346 182
fd0854ff 183#ifdef DEBUG_LEAKING_SCALARS
22162ca8 184# define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
fd0854ff
DM
185#else
186# define FREE_SV_DEBUG_FILE(sv)
187#endif
188
48614a46
NC
189#ifdef PERL_POISON
190# define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
191/* Whilst I'd love to do this, it seems that things like to check on
192 unreferenced scalars
7e337ee0 193# define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
48614a46 194*/
7e337ee0
JH
195# define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
196 PoisonNew(&SvREFCNT(sv), 1, U32)
48614a46
NC
197#else
198# define SvARENA_CHAIN(sv) SvANY(sv)
199# define POSION_SV_HEAD(sv)
200#endif
201
053fc874
GS
202#define plant_SV(p) \
203 STMT_START { \
fd0854ff 204 FREE_SV_DEBUG_FILE(p); \
48614a46
NC
205 POSION_SV_HEAD(p); \
206 SvARENA_CHAIN(p) = (void *)PL_sv_root; \
053fc874
GS
207 SvFLAGS(p) = SVTYPEMASK; \
208 PL_sv_root = (p); \
209 --PL_sv_count; \
210 } STMT_END
a0d0e21e 211
fba3b22e 212/* sv_mutex must be held while calling uproot_SV() */
053fc874
GS
213#define uproot_SV(p) \
214 STMT_START { \
215 (p) = PL_sv_root; \
bb7bbd9c 216 PL_sv_root = (SV*)SvARENA_CHAIN(p); \
053fc874
GS
217 ++PL_sv_count; \
218 } STMT_END
219
645c22ef 220
cac9b346
NC
221/* make some more SVs by adding another arena */
222
223/* sv_mutex must be held while calling more_sv() */
224STATIC SV*
225S_more_sv(pTHX)
226{
97aff369 227 dVAR;
cac9b346
NC
228 SV* sv;
229
230 if (PL_nice_chunk) {
231 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
bd61b366 232 PL_nice_chunk = NULL;
cac9b346
NC
233 PL_nice_chunk_size = 0;
234 }
235 else {
236 char *chunk; /* must use New here to match call to */
d2a0f284 237 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
2e7ed132 238 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
cac9b346
NC
239 }
240 uproot_SV(sv);
241 return sv;
242}
243
645c22ef
DM
244/* new_SV(): return a new, empty SV head */
245
eba0f806
DM
246#ifdef DEBUG_LEAKING_SCALARS
247/* provide a real function for a debugger to play with */
248STATIC SV*
249S_new_SV(pTHX)
250{
251 SV* sv;
252
253 LOCK_SV_MUTEX;
254 if (PL_sv_root)
255 uproot_SV(sv);
256 else
cac9b346 257 sv = S_more_sv(aTHX);
eba0f806
DM
258 UNLOCK_SV_MUTEX;
259 SvANY(sv) = 0;
260 SvREFCNT(sv) = 1;
261 SvFLAGS(sv) = 0;
fd0854ff
DM
262 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
263 sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
264 (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
265 sv->sv_debug_inpad = 0;
266 sv->sv_debug_cloned = 0;
fd0854ff 267 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
fd0854ff 268
eba0f806
DM
269 return sv;
270}
271# define new_SV(p) (p)=S_new_SV(aTHX)
272
273#else
274# define new_SV(p) \
053fc874
GS
275 STMT_START { \
276 LOCK_SV_MUTEX; \
277 if (PL_sv_root) \
278 uproot_SV(p); \
279 else \
cac9b346 280 (p) = S_more_sv(aTHX); \
053fc874
GS
281 UNLOCK_SV_MUTEX; \
282 SvANY(p) = 0; \
283 SvREFCNT(p) = 1; \
284 SvFLAGS(p) = 0; \
285 } STMT_END
eba0f806 286#endif
463ee0b2 287
645c22ef
DM
288
289/* del_SV(): return an empty SV head to the free list */
290
a0d0e21e 291#ifdef DEBUGGING
4561caa4 292
053fc874
GS
293#define del_SV(p) \
294 STMT_START { \
295 LOCK_SV_MUTEX; \
aea4f609 296 if (DEBUG_D_TEST) \
053fc874
GS
297 del_sv(p); \
298 else \
299 plant_SV(p); \
300 UNLOCK_SV_MUTEX; \
301 } STMT_END
a0d0e21e 302
76e3520e 303STATIC void
cea2e8a9 304S_del_sv(pTHX_ SV *p)
463ee0b2 305{
97aff369 306 dVAR;
aea4f609 307 if (DEBUG_D_TEST) {
4633a7c4 308 SV* sva;
a3b680e6 309 bool ok = 0;
3280af22 310 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
53c1dcc0
AL
311 const SV * const sv = sva + 1;
312 const SV * const svend = &sva[SvREFCNT(sva)];
c0ff570e 313 if (p >= sv && p < svend) {
a0d0e21e 314 ok = 1;
c0ff570e
NC
315 break;
316 }
a0d0e21e
LW
317 }
318 if (!ok) {
0453d815 319 if (ckWARN_d(WARN_INTERNAL))
9014280d 320 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc
SB
321 "Attempt to free non-arena SV: 0x%"UVxf
322 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
a0d0e21e
LW
323 return;
324 }
325 }
4561caa4 326 plant_SV(p);
463ee0b2 327}
a0d0e21e 328
4561caa4
CS
329#else /* ! DEBUGGING */
330
331#define del_SV(p) plant_SV(p)
332
333#endif /* DEBUGGING */
463ee0b2 334
645c22ef
DM
335
336/*
ccfc67b7
JH
337=head1 SV Manipulation Functions
338
645c22ef
DM
339=for apidoc sv_add_arena
340
341Given a chunk of memory, link it to the head of the list of arenas,
342and split it into a list of free SVs.
343
344=cut
345*/
346
4633a7c4 347void
864dbfa3 348Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
463ee0b2 349{
97aff369 350 dVAR;
0bd48802 351 SV* const sva = (SV*)ptr;
463ee0b2
LW
352 register SV* sv;
353 register SV* svend;
4633a7c4
LW
354
355 /* The first SV in an arena isn't an SV. */
3280af22 356 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
4633a7c4
LW
357 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
358 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
359
3280af22
NIS
360 PL_sv_arenaroot = sva;
361 PL_sv_root = sva + 1;
4633a7c4
LW
362
363 svend = &sva[SvREFCNT(sva) - 1];
364 sv = sva + 1;
463ee0b2 365 while (sv < svend) {
48614a46 366 SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
03e36789 367#ifdef DEBUGGING
978b032e 368 SvREFCNT(sv) = 0;
03e36789
NC
369#endif
370 /* Must always set typemask because it's awlays checked in on cleanup
371 when the arenas are walked looking for objects. */
8990e307 372 SvFLAGS(sv) = SVTYPEMASK;
463ee0b2
LW
373 sv++;
374 }
48614a46 375 SvARENA_CHAIN(sv) = 0;
03e36789
NC
376#ifdef DEBUGGING
377 SvREFCNT(sv) = 0;
378#endif
4633a7c4
LW
379 SvFLAGS(sv) = SVTYPEMASK;
380}
381
055972dc
DM
382/* visit(): call the named function for each non-free SV in the arenas
383 * whose flags field matches the flags/mask args. */
645c22ef 384
5226ed68 385STATIC I32
055972dc 386S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
8990e307 387{
97aff369 388 dVAR;
4633a7c4 389 SV* sva;
5226ed68 390 I32 visited = 0;
8990e307 391
3280af22 392 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
53c1dcc0 393 register const SV * const svend = &sva[SvREFCNT(sva)];
a3b680e6 394 register SV* sv;
4561caa4 395 for (sv = sva + 1; sv < svend; ++sv) {
055972dc
DM
396 if (SvTYPE(sv) != SVTYPEMASK
397 && (sv->sv_flags & mask) == flags
398 && SvREFCNT(sv))
399 {
acfe0abc 400 (FCALL)(aTHX_ sv);
5226ed68
JH
401 ++visited;
402 }
8990e307
LW
403 }
404 }
5226ed68 405 return visited;
8990e307
LW
406}
407
758a08c3
JH
408#ifdef DEBUGGING
409
645c22ef
DM
410/* called by sv_report_used() for each live SV */
411
412static void
acfe0abc 413do_report_used(pTHX_ SV *sv)
645c22ef
DM
414{
415 if (SvTYPE(sv) != SVTYPEMASK) {
416 PerlIO_printf(Perl_debug_log, "****\n");
417 sv_dump(sv);
418 }
419}
758a08c3 420#endif
645c22ef
DM
421
422/*
423=for apidoc sv_report_used
424
425Dump the contents of all SVs not yet freed. (Debugging aid).
426
427=cut
428*/
429
8990e307 430void
864dbfa3 431Perl_sv_report_used(pTHX)
4561caa4 432{
ff270d3a 433#ifdef DEBUGGING
055972dc 434 visit(do_report_used, 0, 0);
96a5add6
AL
435#else
436 PERL_UNUSED_CONTEXT;
ff270d3a 437#endif
4561caa4
CS
438}
439
645c22ef
DM
440/* called by sv_clean_objs() for each live SV */
441
442static void
e15faf7d 443do_clean_objs(pTHX_ SV *ref)
645c22ef 444{
97aff369 445 dVAR;
823a54a3
AL
446 if (SvROK(ref)) {
447 SV * const target = SvRV(ref);
448 if (SvOBJECT(target)) {
449 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
450 if (SvWEAKREF(ref)) {
451 sv_del_backref(target, ref);
452 SvWEAKREF_off(ref);
453 SvRV_set(ref, NULL);
454 } else {
455 SvROK_off(ref);
456 SvRV_set(ref, NULL);
457 SvREFCNT_dec(target);
458 }
645c22ef
DM
459 }
460 }
461
462 /* XXX Might want to check arrays, etc. */
463}
464
465/* called by sv_clean_objs() for each live SV */
466
467#ifndef DISABLE_DESTRUCTOR_KLUDGE
468static void
acfe0abc 469do_clean_named_objs(pTHX_ SV *sv)
645c22ef 470{
97aff369 471 dVAR;
f7877b28 472 if (SvTYPE(sv) == SVt_PVGV && isGV_with_GP(sv) && GvGP(sv)) {
c69033f2
NC
473 if ((
474#ifdef PERL_DONT_CREATE_GVSV
475 GvSV(sv) &&
476#endif
477 SvOBJECT(GvSV(sv))) ||
645c22ef
DM
478 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
479 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
480 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
481 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
482 {
483 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
ec5f3c78 484 SvFLAGS(sv) |= SVf_BREAK;
645c22ef
DM
485 SvREFCNT_dec(sv);
486 }
487 }
488}
489#endif
490
491/*
492=for apidoc sv_clean_objs
493
494Attempt to destroy all objects not yet freed
495
496=cut
497*/
498
4561caa4 499void
864dbfa3 500Perl_sv_clean_objs(pTHX)
4561caa4 501{
97aff369 502 dVAR;
3280af22 503 PL_in_clean_objs = TRUE;
055972dc 504 visit(do_clean_objs, SVf_ROK, SVf_ROK);
4561caa4 505#ifndef DISABLE_DESTRUCTOR_KLUDGE
2d0f3c12 506 /* some barnacles may yet remain, clinging to typeglobs */
055972dc 507 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
4561caa4 508#endif
3280af22 509 PL_in_clean_objs = FALSE;
4561caa4
CS
510}
511
645c22ef
DM
512/* called by sv_clean_all() for each live SV */
513
514static void
acfe0abc 515do_clean_all(pTHX_ SV *sv)
645c22ef 516{
97aff369 517 dVAR;
645c22ef
DM
518 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
519 SvFLAGS(sv) |= SVf_BREAK;
0e705b3b 520 if (PL_comppad == (AV*)sv) {
7d49f689 521 PL_comppad = NULL;
4608196e 522 PL_curpad = NULL;
0e705b3b 523 }
645c22ef
DM
524 SvREFCNT_dec(sv);
525}
526
527/*
528=for apidoc sv_clean_all
529
530Decrement the refcnt of each remaining SV, possibly triggering a
531cleanup. This function may have to be called multiple times to free
ff276b08 532SVs which are in complex self-referential hierarchies.
645c22ef
DM
533
534=cut
535*/
536
5226ed68 537I32
864dbfa3 538Perl_sv_clean_all(pTHX)
8990e307 539{
97aff369 540 dVAR;
5226ed68 541 I32 cleaned;
3280af22 542 PL_in_clean_all = TRUE;
055972dc 543 cleaned = visit(do_clean_all, 0,0);
3280af22 544 PL_in_clean_all = FALSE;
5226ed68 545 return cleaned;
8990e307 546}
463ee0b2 547
5e258f8c
JC
548/*
549 ARENASETS: a meta-arena implementation which separates arena-info
550 into struct arena_set, which contains an array of struct
551 arena_descs, each holding info for a single arena. By separating
552 the meta-info from the arena, we recover the 1st slot, formerly
553 borrowed for list management. The arena_set is about the size of an
554 arena, avoiding the needless malloc overhead of a naive linked-list
555
556 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
557 memory in the last arena-set (1/2 on average). In trade, we get
558 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
d2a0f284
JC
559 smaller types). The recovery of the wasted space allows use of
560 small arenas for large, rare body types,
5e258f8c 561*/
5e258f8c 562struct arena_desc {
398c677b
NC
563 char *arena; /* the raw storage, allocated aligned */
564 size_t size; /* its size ~4k typ */
565 int unit_type; /* useful for arena audits */
5e258f8c
JC
566 /* info for sv-heads (eventually)
567 int count, flags;
568 */
569};
570
e6148039
NC
571struct arena_set;
572
573/* Get the maximum number of elements in set[] such that struct arena_set
574 will fit within PERL_ARENA_SIZE, which is probabably just under 4K, and
575 therefore likely to be 1 aligned memory page. */
576
577#define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
578 - 2 * sizeof(int)) / sizeof (struct arena_desc))
5e258f8c
JC
579
580struct arena_set {
581 struct arena_set* next;
582 int set_size; /* ie ARENAS_PER_SET */
583 int curr; /* index of next available arena-desc */
584 struct arena_desc set[ARENAS_PER_SET];
585};
586
645c22ef
DM
587/*
588=for apidoc sv_free_arenas
589
590Deallocate the memory used by all arenas. Note that all the individual SV
591heads and bodies within the arenas must already have been freed.
592
593=cut
594*/
4633a7c4 595void
864dbfa3 596Perl_sv_free_arenas(pTHX)
4633a7c4 597{
97aff369 598 dVAR;
4633a7c4
LW
599 SV* sva;
600 SV* svanext;
93e68bfb 601 int i;
4633a7c4
LW
602
603 /* Free arenas here, but be careful about fake ones. (We assume
604 contiguity of the fake ones with the corresponding real ones.) */
605
3280af22 606 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
4633a7c4
LW
607 svanext = (SV*) SvANY(sva);
608 while (svanext && SvFAKE(svanext))
609 svanext = (SV*) SvANY(svanext);
610
611 if (!SvFAKE(sva))
1df70142 612 Safefree(sva);
4633a7c4 613 }
93e68bfb 614
5e258f8c
JC
615 {
616 struct arena_set *next, *aroot = (struct arena_set*) PL_body_arenas;
617
618 for (; aroot; aroot = next) {
96a5add6 619 const int max = aroot->curr;
5e258f8c
JC
620 for (i=0; i<max; i++) {
621 assert(aroot->set[i].arena);
622 Safefree(aroot->set[i].arena);
623 }
624 next = aroot->next;
625 Safefree(aroot);
626 }
627 }
dc8220bf 628 PL_body_arenas = 0;
fdda85ca 629
232d1c15 630 for (i=0; i<PERL_ARENA_ROOTS_SIZE; i++)
93e68bfb 631 PL_body_roots[i] = 0;
93e68bfb 632
43c5f42d 633 Safefree(PL_nice_chunk);
bd61b366 634 PL_nice_chunk = NULL;
3280af22
NIS
635 PL_nice_chunk_size = 0;
636 PL_sv_arenaroot = 0;
637 PL_sv_root = 0;
4633a7c4
LW
638}
639
bd81e77b
NC
640/*
641 Here are mid-level routines that manage the allocation of bodies out
642 of the various arenas. There are 5 kinds of arenas:
29489e7c 643
bd81e77b
NC
644 1. SV-head arenas, which are discussed and handled above
645 2. regular body arenas
646 3. arenas for reduced-size bodies
647 4. Hash-Entry arenas
648 5. pte arenas (thread related)
29489e7c 649
bd81e77b
NC
650 Arena types 2 & 3 are chained by body-type off an array of
651 arena-root pointers, which is indexed by svtype. Some of the
652 larger/less used body types are malloced singly, since a large
653 unused block of them is wasteful. Also, several svtypes dont have
654 bodies; the data fits into the sv-head itself. The arena-root
655 pointer thus has a few unused root-pointers (which may be hijacked
656 later for arena types 4,5)
29489e7c 657
bd81e77b
NC
658 3 differs from 2 as an optimization; some body types have several
659 unused fields in the front of the structure (which are kept in-place
660 for consistency). These bodies can be allocated in smaller chunks,
661 because the leading fields arent accessed. Pointers to such bodies
662 are decremented to point at the unused 'ghost' memory, knowing that
663 the pointers are used with offsets to the real memory.
29489e7c 664
bd81e77b
NC
665 HE, HEK arenas are managed separately, with separate code, but may
666 be merge-able later..
667
668 PTE arenas are not sv-bodies, but they share these mid-level
669 mechanics, so are considered here. The new mid-level mechanics rely
670 on the sv_type of the body being allocated, so we just reserve one
671 of the unused body-slots for PTEs, then use it in those (2) PTE
672 contexts below (line ~10k)
673*/
674
bd26d9a3 675/* get_arena(size): this creates custom-sized arenas
5e258f8c
JC
676 TBD: export properly for hv.c: S_more_he().
677*/
678void*
679Perl_get_arena(pTHX_ int arena_size)
680{
7a89be66 681 dVAR;
5e258f8c 682 struct arena_desc* adesc;
476a1e16 683 struct arena_set *newroot, **aroot = (struct arena_set**) &PL_body_arenas;
5e258f8c
JC
684 int curr;
685
476a1e16
JC
686 /* shouldnt need this
687 if (!arena_size) arena_size = PERL_ARENA_SIZE;
688 */
5e258f8c
JC
689
690 /* may need new arena-set to hold new arena */
476a1e16 691 if (!*aroot || (*aroot)->curr >= (*aroot)->set_size) {
5e258f8c
JC
692 Newxz(newroot, 1, struct arena_set);
693 newroot->set_size = ARENAS_PER_SET;
476a1e16
JC
694 newroot->next = *aroot;
695 *aroot = newroot;
ca0270c4 696 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)*aroot));
5e258f8c
JC
697 }
698
699 /* ok, now have arena-set with at least 1 empty/available arena-desc */
476a1e16
JC
700 curr = (*aroot)->curr++;
701 adesc = &((*aroot)->set[curr]);
5e258f8c
JC
702 assert(!adesc->arena);
703
5e258f8c
JC
704 Newxz(adesc->arena, arena_size, char);
705 adesc->size = arena_size;
d2a0f284
JC
706 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %d\n",
707 curr, adesc->arena, arena_size));
5e258f8c
JC
708
709 return adesc->arena;
5e258f8c
JC
710}
711
53c1dcc0 712
bd81e77b 713/* return a thing to the free list */
29489e7c 714
bd81e77b
NC
715#define del_body(thing, root) \
716 STMT_START { \
00b6aa41 717 void ** const thing_copy = (void **)thing;\
bd81e77b
NC
718 LOCK_SV_MUTEX; \
719 *thing_copy = *root; \
720 *root = (void*)thing_copy; \
721 UNLOCK_SV_MUTEX; \
722 } STMT_END
29489e7c 723
bd81e77b 724/*
d2a0f284
JC
725
726=head1 SV-Body Allocation
727
728Allocation of SV-bodies is similar to SV-heads, differing as follows;
729the allocation mechanism is used for many body types, so is somewhat
730more complicated, it uses arena-sets, and has no need for still-live
731SV detection.
732
733At the outermost level, (new|del)_X*V macros return bodies of the
734appropriate type. These macros call either (new|del)_body_type or
735(new|del)_body_allocated macro pairs, depending on specifics of the
736type. Most body types use the former pair, the latter pair is used to
737allocate body types with "ghost fields".
738
739"ghost fields" are fields that are unused in certain types, and
740consequently dont need to actually exist. They are declared because
741they're part of a "base type", which allows use of functions as
742methods. The simplest examples are AVs and HVs, 2 aggregate types
743which don't use the fields which support SCALAR semantics.
744
745For these types, the arenas are carved up into *_allocated size
746chunks, we thus avoid wasted memory for those unaccessed members.
747When bodies are allocated, we adjust the pointer back in memory by the
748size of the bit not allocated, so it's as if we allocated the full
749structure. (But things will all go boom if you write to the part that
750is "not there", because you'll be overwriting the last members of the
751preceding structure in memory.)
752
753We calculate the correction using the STRUCT_OFFSET macro. For
754example, if xpv_allocated is the same structure as XPV then the two
755OFFSETs sum to zero, and the pointer is unchanged. If the allocated
756structure is smaller (no initial NV actually allocated) then the net
757effect is to subtract the size of the NV from the pointer, to return a
758new pointer as if an initial NV were actually allocated.
759
760This is the same trick as was used for NV and IV bodies. Ironically it
761doesn't need to be used for NV bodies any more, because NV is now at
762the start of the structure. IV bodies don't need it either, because
763they are no longer allocated.
764
765In turn, the new_body_* allocators call S_new_body(), which invokes
766new_body_inline macro, which takes a lock, and takes a body off the
767linked list at PL_body_roots[sv_type], calling S_more_bodies() if
768necessary to refresh an empty list. Then the lock is released, and
769the body is returned.
770
771S_more_bodies calls get_arena(), and carves it up into an array of N
772bodies, which it strings into a linked list. It looks up arena-size
773and body-size from the body_details table described below, thus
774supporting the multiple body-types.
775
776If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
777the (new|del)_X*V macros are mapped directly to malloc/free.
778
779*/
780
781/*
782
783For each sv-type, struct body_details bodies_by_type[] carries
784parameters which control these aspects of SV handling:
785
786Arena_size determines whether arenas are used for this body type, and if
787so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
788zero, forcing individual mallocs and frees.
789
790Body_size determines how big a body is, and therefore how many fit into
791each arena. Offset carries the body-pointer adjustment needed for
792*_allocated body types, and is used in *_allocated macros.
793
794But its main purpose is to parameterize info needed in
795Perl_sv_upgrade(). The info here dramatically simplifies the function
796vs the implementation in 5.8.7, making it table-driven. All fields
797are used for this, except for arena_size.
798
799For the sv-types that have no bodies, arenas are not used, so those
800PL_body_roots[sv_type] are unused, and can be overloaded. In
801something of a special case, SVt_NULL is borrowed for HE arenas;
802PL_body_roots[SVt_NULL] is filled by S_more_he, but the
803bodies_by_type[SVt_NULL] slot is not used, as the table is not
804available in hv.c,
805
806PTEs also use arenas, but are never seen in Perl_sv_upgrade.
807Nonetheless, they get their own slot in bodies_by_type[SVt_NULL], so
808they can just use the same allocation semantics. At first, PTEs were
809also overloaded to a non-body sv-type, but this yielded hard-to-find
810malloc bugs, so was simplified by claiming a new slot. This choice
811has no consequence at this time.
812
29489e7c
DM
813*/
814
bd81e77b 815struct body_details {
0fb58b32 816 U8 body_size; /* Size to allocate */
10666ae3 817 U8 copy; /* Size of structure to copy (may be shorter) */
0fb58b32 818 U8 offset;
10666ae3
NC
819 unsigned int type : 4; /* We have space for a sanity check. */
820 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
821 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
822 unsigned int arena : 1; /* Allocated from an arena */
823 size_t arena_size; /* Size of arena to allocate */
bd81e77b 824};
29489e7c 825
bd81e77b
NC
826#define HADNV FALSE
827#define NONV TRUE
29489e7c 828
d2a0f284 829
bd81e77b
NC
830#ifdef PURIFY
831/* With -DPURFIY we allocate everything directly, and don't use arenas.
832 This seems a rather elegant way to simplify some of the code below. */
833#define HASARENA FALSE
834#else
835#define HASARENA TRUE
836#endif
837#define NOARENA FALSE
29489e7c 838
d2a0f284
JC
839/* Size the arenas to exactly fit a given number of bodies. A count
840 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
841 simplifying the default. If count > 0, the arena is sized to fit
842 only that many bodies, allowing arenas to be used for large, rare
843 bodies (XPVFM, XPVIO) without undue waste. The arena size is
844 limited by PERL_ARENA_SIZE, so we can safely oversize the
845 declarations.
846 */
95db5f15
MB
847#define FIT_ARENA0(body_size) \
848 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
849#define FIT_ARENAn(count,body_size) \
850 ( count * body_size <= PERL_ARENA_SIZE) \
851 ? count * body_size \
852 : FIT_ARENA0 (body_size)
853#define FIT_ARENA(count,body_size) \
854 count \
855 ? FIT_ARENAn (count, body_size) \
856 : FIT_ARENA0 (body_size)
d2a0f284 857
bd81e77b 858/* A macro to work out the offset needed to subtract from a pointer to (say)
29489e7c 859
bd81e77b
NC
860typedef struct {
861 STRLEN xpv_cur;
862 STRLEN xpv_len;
863} xpv_allocated;
29489e7c 864
bd81e77b 865to make its members accessible via a pointer to (say)
29489e7c 866
bd81e77b
NC
867struct xpv {
868 NV xnv_nv;
869 STRLEN xpv_cur;
870 STRLEN xpv_len;
871};
29489e7c 872
bd81e77b 873*/
29489e7c 874
bd81e77b
NC
875#define relative_STRUCT_OFFSET(longer, shorter, member) \
876 (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
29489e7c 877
bd81e77b
NC
878/* Calculate the length to copy. Specifically work out the length less any
879 final padding the compiler needed to add. See the comment in sv_upgrade
880 for why copying the padding proved to be a bug. */
29489e7c 881
bd81e77b
NC
882#define copy_length(type, last_member) \
883 STRUCT_OFFSET(type, last_member) \
884 + sizeof (((type*)SvANY((SV*)0))->last_member)
29489e7c 885
bd81e77b 886static const struct body_details bodies_by_type[] = {
10666ae3
NC
887 { sizeof(HE), 0, 0, SVt_NULL,
888 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
d2a0f284
JC
889
890 /* IVs are in the head, so the allocation size is 0.
891 However, the slot is overloaded for PTEs. */
892 { sizeof(struct ptr_tbl_ent), /* This is used for PTEs. */
893 sizeof(IV), /* This is used to copy out the IV body. */
10666ae3 894 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
d2a0f284
JC
895 NOARENA /* IVS don't need an arena */,
896 /* But PTEs need to know the size of their arena */
897 FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
898 },
899
bd81e77b 900 /* 8 bytes on most ILP32 with IEEE doubles */
10666ae3 901 { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
d2a0f284
JC
902 FIT_ARENA(0, sizeof(NV)) },
903
904 /* RVs are in the head now. */
10666ae3 905 { 0, 0, 0, SVt_RV, FALSE, NONV, NOARENA, 0 },
d2a0f284 906
bd81e77b 907 /* 8 bytes on most ILP32 with IEEE doubles */
d2a0f284
JC
908 { sizeof(xpv_allocated),
909 copy_length(XPV, xpv_len)
910 - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
911 + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
10666ae3 912 SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) },
d2a0f284 913
bd81e77b 914 /* 12 */
d2a0f284
JC
915 { sizeof(xpviv_allocated),
916 copy_length(XPVIV, xiv_u)
917 - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
918 + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
10666ae3 919 SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) },
d2a0f284 920
bd81e77b 921 /* 20 */
10666ae3 922 { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
d2a0f284
JC
923 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
924
bd81e77b 925 /* 28 */
10666ae3 926 { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
d2a0f284
JC
927 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
928
bd81e77b 929 /* 36 */
10666ae3 930 { sizeof(XPVBM), sizeof(XPVBM), 0, SVt_PVBM, TRUE, HADNV,
d2a0f284
JC
931 HASARENA, FIT_ARENA(0, sizeof(XPVBM)) },
932
bd81e77b 933 /* 48 */
10666ae3 934 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
d2a0f284
JC
935 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
936
bd81e77b 937 /* 64 */
10666ae3 938 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
d2a0f284
JC
939 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
940
941 { sizeof(xpvav_allocated),
942 copy_length(XPVAV, xmg_stash)
943 - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
944 + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
10666ae3 945 SVt_PVAV, TRUE, HADNV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) },
d2a0f284
JC
946
947 { sizeof(xpvhv_allocated),
948 copy_length(XPVHV, xmg_stash)
949 - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
950 + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
10666ae3 951 SVt_PVHV, TRUE, HADNV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) },
d2a0f284 952
c84c4652 953 /* 56 */
4115f141 954 { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated),
c84c4652 955 + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur),
10666ae3 956 SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) },
d2a0f284 957
4115f141 958 { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated),
3038937b 959 + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur),
10666ae3 960 SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) },
d2a0f284
JC
961
962 /* XPVIO is 84 bytes, fits 48x */
10666ae3 963 { sizeof(XPVIO), sizeof(XPVIO), 0, SVt_PVIO, TRUE, HADNV,
d2a0f284 964 HASARENA, FIT_ARENA(24, sizeof(XPVIO)) },
bd81e77b 965};
29489e7c 966
d2a0f284
JC
967#define new_body_type(sv_type) \
968 (void *)((char *)S_new_body(aTHX_ sv_type))
29489e7c 969
bd81e77b
NC
970#define del_body_type(p, sv_type) \
971 del_body(p, &PL_body_roots[sv_type])
29489e7c 972
29489e7c 973
bd81e77b 974#define new_body_allocated(sv_type) \
d2a0f284 975 (void *)((char *)S_new_body(aTHX_ sv_type) \
bd81e77b 976 - bodies_by_type[sv_type].offset)
29489e7c 977
bd81e77b
NC
978#define del_body_allocated(p, sv_type) \
979 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
29489e7c 980
29489e7c 981
bd81e77b
NC
982#define my_safemalloc(s) (void*)safemalloc(s)
983#define my_safecalloc(s) (void*)safecalloc(s, 1)
984#define my_safefree(p) safefree((char*)p)
29489e7c 985
bd81e77b 986#ifdef PURIFY
29489e7c 987
bd81e77b
NC
988#define new_XNV() my_safemalloc(sizeof(XPVNV))
989#define del_XNV(p) my_safefree(p)
29489e7c 990
bd81e77b
NC
991#define new_XPVNV() my_safemalloc(sizeof(XPVNV))
992#define del_XPVNV(p) my_safefree(p)
29489e7c 993
bd81e77b
NC
994#define new_XPVAV() my_safemalloc(sizeof(XPVAV))
995#define del_XPVAV(p) my_safefree(p)
29489e7c 996
bd81e77b
NC
997#define new_XPVHV() my_safemalloc(sizeof(XPVHV))
998#define del_XPVHV(p) my_safefree(p)
29489e7c 999
bd81e77b
NC
1000#define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1001#define del_XPVMG(p) my_safefree(p)
29489e7c 1002
bd81e77b
NC
1003#define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1004#define del_XPVGV(p) my_safefree(p)
29489e7c 1005
bd81e77b 1006#else /* !PURIFY */
29489e7c 1007
bd81e77b
NC
1008#define new_XNV() new_body_type(SVt_NV)
1009#define del_XNV(p) del_body_type(p, SVt_NV)
29489e7c 1010
bd81e77b
NC
1011#define new_XPVNV() new_body_type(SVt_PVNV)
1012#define del_XPVNV(p) del_body_type(p, SVt_PVNV)
29489e7c 1013
bd81e77b
NC
1014#define new_XPVAV() new_body_allocated(SVt_PVAV)
1015#define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
645c22ef 1016
bd81e77b
NC
1017#define new_XPVHV() new_body_allocated(SVt_PVHV)
1018#define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
645c22ef 1019
bd81e77b
NC
1020#define new_XPVMG() new_body_type(SVt_PVMG)
1021#define del_XPVMG(p) del_body_type(p, SVt_PVMG)
645c22ef 1022
bd81e77b
NC
1023#define new_XPVGV() new_body_type(SVt_PVGV)
1024#define del_XPVGV(p) del_body_type(p, SVt_PVGV)
1d7c1841 1025
bd81e77b 1026#endif /* PURIFY */
93e68bfb 1027
bd81e77b 1028/* no arena for you! */
93e68bfb 1029
bd81e77b 1030#define new_NOARENA(details) \
d2a0f284 1031 my_safemalloc((details)->body_size + (details)->offset)
bd81e77b 1032#define new_NOARENAZ(details) \
d2a0f284
JC
1033 my_safecalloc((details)->body_size + (details)->offset)
1034
0b2d3faa 1035#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
10666ae3
NC
1036static bool done_sanity_check;
1037#endif
1038
d2a0f284
JC
1039STATIC void *
1040S_more_bodies (pTHX_ svtype sv_type)
1041{
1042 dVAR;
1043 void ** const root = &PL_body_roots[sv_type];
96a5add6 1044 const struct body_details * const bdp = &bodies_by_type[sv_type];
d2a0f284
JC
1045 const size_t body_size = bdp->body_size;
1046 char *start;
1047 const char *end;
1048
1049 assert(bdp->arena_size);
10666ae3 1050
0b2d3faa
JH
1051#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1052 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1053 * variables like done_sanity_check. */
10666ae3 1054 if (!done_sanity_check) {
ea471437 1055 unsigned int i = SVt_LAST;
10666ae3
NC
1056
1057 done_sanity_check = TRUE;
1058
1059 while (i--)
1060 assert (bodies_by_type[i].type == i);
1061 }
1062#endif
1063
d2a0f284
JC
1064 start = (char*) Perl_get_arena(aTHX_ bdp->arena_size);
1065
1066 end = start + bdp->arena_size - body_size;
1067
d2a0f284
JC
1068 /* computed count doesnt reflect the 1st slot reservation */
1069 DEBUG_m(PerlIO_printf(Perl_debug_log,
1070 "arena %p end %p arena-size %d type %d size %d ct %d\n",
0e84aef4
JH
1071 start, end,
1072 (int)bdp->arena_size, sv_type, (int)body_size,
1073 (int)bdp->arena_size / (int)body_size));
d2a0f284
JC
1074
1075 *root = (void *)start;
1076
1077 while (start < end) {
1078 char * const next = start + body_size;
1079 *(void**) start = (void *)next;
1080 start = next;
1081 }
1082 *(void **)start = 0;
1083
1084 return *root;
1085}
1086
1087/* grab a new thing from the free list, allocating more if necessary.
1088 The inline version is used for speed in hot routines, and the
1089 function using it serves the rest (unless PURIFY).
1090*/
1091#define new_body_inline(xpv, sv_type) \
1092 STMT_START { \
1093 void ** const r3wt = &PL_body_roots[sv_type]; \
1094 LOCK_SV_MUTEX; \
11b79775
DD
1095 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1096 ? *((void **)(r3wt)) : more_bodies(sv_type)); \
d2a0f284
JC
1097 *(r3wt) = *(void**)(xpv); \
1098 UNLOCK_SV_MUTEX; \
1099 } STMT_END
1100
1101#ifndef PURIFY
1102
1103STATIC void *
1104S_new_body(pTHX_ svtype sv_type)
1105{
1106 dVAR;
1107 void *xpv;
1108 new_body_inline(xpv, sv_type);
1109 return xpv;
1110}
1111
1112#endif
93e68bfb 1113
bd81e77b
NC
1114/*
1115=for apidoc sv_upgrade
93e68bfb 1116
bd81e77b
NC
1117Upgrade an SV to a more complex form. Generally adds a new body type to the
1118SV, then copies across as much information as possible from the old body.
1119You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
93e68bfb 1120
bd81e77b 1121=cut
93e68bfb 1122*/
93e68bfb 1123
bd81e77b 1124void
42d0e0b7 1125Perl_sv_upgrade(pTHX_ register SV *sv, svtype new_type)
cac9b346 1126{
97aff369 1127 dVAR;
bd81e77b
NC
1128 void* old_body;
1129 void* new_body;
42d0e0b7 1130 const svtype old_type = SvTYPE(sv);
d2a0f284 1131 const struct body_details *new_type_details;
bd81e77b
NC
1132 const struct body_details *const old_type_details
1133 = bodies_by_type + old_type;
cac9b346 1134
bd81e77b
NC
1135 if (new_type != SVt_PV && SvIsCOW(sv)) {
1136 sv_force_normal_flags(sv, 0);
1137 }
cac9b346 1138
bd81e77b
NC
1139 if (old_type == new_type)
1140 return;
cac9b346 1141
bd81e77b
NC
1142 if (old_type > new_type)
1143 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1144 (int)old_type, (int)new_type);
cac9b346 1145
cac9b346 1146
bd81e77b 1147 old_body = SvANY(sv);
de042e1d 1148
bd81e77b
NC
1149 /* Copying structures onto other structures that have been neatly zeroed
1150 has a subtle gotcha. Consider XPVMG
cac9b346 1151
bd81e77b
NC
1152 +------+------+------+------+------+-------+-------+
1153 | NV | CUR | LEN | IV | MAGIC | STASH |
1154 +------+------+------+------+------+-------+-------+
1155 0 4 8 12 16 20 24 28
645c22ef 1156
bd81e77b
NC
1157 where NVs are aligned to 8 bytes, so that sizeof that structure is
1158 actually 32 bytes long, with 4 bytes of padding at the end:
08742458 1159
bd81e77b
NC
1160 +------+------+------+------+------+-------+-------+------+
1161 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1162 +------+------+------+------+------+-------+-------+------+
1163 0 4 8 12 16 20 24 28 32
08742458 1164
bd81e77b 1165 so what happens if you allocate memory for this structure:
30f9da9e 1166
bd81e77b
NC
1167 +------+------+------+------+------+-------+-------+------+------+...
1168 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1169 +------+------+------+------+------+-------+-------+------+------+...
1170 0 4 8 12 16 20 24 28 32 36
bfc44f79 1171
bd81e77b
NC
1172 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1173 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1174 started out as zero once, but it's quite possible that it isn't. So now,
1175 rather than a nicely zeroed GP, you have it pointing somewhere random.
1176 Bugs ensue.
bfc44f79 1177
bd81e77b
NC
1178 (In fact, GP ends up pointing at a previous GP structure, because the
1179 principle cause of the padding in XPVMG getting garbage is a copy of
1180 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob)
30f9da9e 1181
bd81e77b
NC
1182 So we are careful and work out the size of used parts of all the
1183 structures. */
bfc44f79 1184
bd81e77b
NC
1185 switch (old_type) {
1186 case SVt_NULL:
1187 break;
1188 case SVt_IV:
1189 if (new_type < SVt_PVIV) {
1190 new_type = (new_type == SVt_NV)
1191 ? SVt_PVNV : SVt_PVIV;
bd81e77b
NC
1192 }
1193 break;
1194 case SVt_NV:
1195 if (new_type < SVt_PVNV) {
1196 new_type = SVt_PVNV;
bd81e77b
NC
1197 }
1198 break;
1199 case SVt_RV:
1200 break;
1201 case SVt_PV:
1202 assert(new_type > SVt_PV);
1203 assert(SVt_IV < SVt_PV);
1204 assert(SVt_NV < SVt_PV);
1205 break;
1206 case SVt_PVIV:
1207 break;
1208 case SVt_PVNV:
1209 break;
1210 case SVt_PVMG:
1211 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1212 there's no way that it can be safely upgraded, because perl.c
1213 expects to Safefree(SvANY(PL_mess_sv)) */
1214 assert(sv != PL_mess_sv);
1215 /* This flag bit is used to mean other things in other scalar types.
1216 Given that it only has meaning inside the pad, it shouldn't be set
1217 on anything that can get upgraded. */
00b1698f 1218 assert(!SvPAD_TYPED(sv));
bd81e77b
NC
1219 break;
1220 default:
1221 if (old_type_details->cant_upgrade)
c81225bc
NC
1222 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1223 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
bd81e77b 1224 }
2fa1109b 1225 new_type_details = bodies_by_type + new_type;
645c22ef 1226
bd81e77b
NC
1227 SvFLAGS(sv) &= ~SVTYPEMASK;
1228 SvFLAGS(sv) |= new_type;
932e9ff9 1229
ab4416c0
NC
1230 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1231 the return statements above will have triggered. */
1232 assert (new_type != SVt_NULL);
bd81e77b 1233 switch (new_type) {
bd81e77b
NC
1234 case SVt_IV:
1235 assert(old_type == SVt_NULL);
1236 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1237 SvIV_set(sv, 0);
1238 return;
1239 case SVt_NV:
1240 assert(old_type == SVt_NULL);
1241 SvANY(sv) = new_XNV();
1242 SvNV_set(sv, 0);
1243 return;
1244 case SVt_RV:
1245 assert(old_type == SVt_NULL);
1246 SvANY(sv) = &sv->sv_u.svu_rv;
1247 SvRV_set(sv, 0);
1248 return;
1249 case SVt_PVHV:
bd81e77b 1250 case SVt_PVAV:
d2a0f284 1251 assert(new_type_details->body_size);
c1ae03ae
NC
1252
1253#ifndef PURIFY
1254 assert(new_type_details->arena);
d2a0f284 1255 assert(new_type_details->arena_size);
c1ae03ae 1256 /* This points to the start of the allocated area. */
d2a0f284
JC
1257 new_body_inline(new_body, new_type);
1258 Zero(new_body, new_type_details->body_size, char);
c1ae03ae
NC
1259 new_body = ((char *)new_body) - new_type_details->offset;
1260#else
1261 /* We always allocated the full length item with PURIFY. To do this
1262 we fake things so that arena is false for all 16 types.. */
1263 new_body = new_NOARENAZ(new_type_details);
1264#endif
1265 SvANY(sv) = new_body;
1266 if (new_type == SVt_PVAV) {
1267 AvMAX(sv) = -1;
1268 AvFILLp(sv) = -1;
1269 AvREAL_only(sv);
1270 }
aeb18a1e 1271
bd81e77b
NC
1272 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1273 The target created by newSVrv also is, and it can have magic.
1274 However, it never has SvPVX set.
1275 */
1276 if (old_type >= SVt_RV) {
1277 assert(SvPVX_const(sv) == 0);
1278 }
aeb18a1e 1279
bd81e77b 1280 if (old_type >= SVt_PVMG) {
e736a858 1281 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
bd81e77b 1282 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
797c7171
NC
1283 } else {
1284 sv->sv_u.svu_array = NULL; /* or svu_hash */
bd81e77b
NC
1285 }
1286 break;
93e68bfb 1287
93e68bfb 1288
bd81e77b
NC
1289 case SVt_PVIV:
1290 /* XXX Is this still needed? Was it ever needed? Surely as there is
1291 no route from NV to PVIV, NOK can never be true */
1292 assert(!SvNOKp(sv));
1293 assert(!SvNOK(sv));
1294 case SVt_PVIO:
1295 case SVt_PVFM:
1296 case SVt_PVBM:
1297 case SVt_PVGV:
1298 case SVt_PVCV:
1299 case SVt_PVLV:
1300 case SVt_PVMG:
1301 case SVt_PVNV:
1302 case SVt_PV:
93e68bfb 1303
d2a0f284 1304 assert(new_type_details->body_size);
bd81e77b
NC
1305 /* We always allocated the full length item with PURIFY. To do this
1306 we fake things so that arena is false for all 16 types.. */
1307 if(new_type_details->arena) {
1308 /* This points to the start of the allocated area. */
d2a0f284
JC
1309 new_body_inline(new_body, new_type);
1310 Zero(new_body, new_type_details->body_size, char);
bd81e77b
NC
1311 new_body = ((char *)new_body) - new_type_details->offset;
1312 } else {
1313 new_body = new_NOARENAZ(new_type_details);
1314 }
1315 SvANY(sv) = new_body;
5e2fc214 1316
bd81e77b 1317 if (old_type_details->copy) {
f9ba3d20
NC
1318 /* There is now the potential for an upgrade from something without
1319 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1320 int offset = old_type_details->offset;
1321 int length = old_type_details->copy;
1322
1323 if (new_type_details->offset > old_type_details->offset) {
d4c19fe8 1324 const int difference
f9ba3d20
NC
1325 = new_type_details->offset - old_type_details->offset;
1326 offset += difference;
1327 length -= difference;
1328 }
1329 assert (length >= 0);
1330
1331 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1332 char);
bd81e77b
NC
1333 }
1334
1335#ifndef NV_ZERO_IS_ALLBITS_ZERO
f2524eef 1336 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
e5ce394c
NC
1337 * correct 0.0 for us. Otherwise, if the old body didn't have an
1338 * NV slot, but the new one does, then we need to initialise the
1339 * freshly created NV slot with whatever the correct bit pattern is
1340 * for 0.0 */
1341 if (old_type_details->zero_nv && !new_type_details->zero_nv)
bd81e77b 1342 SvNV_set(sv, 0);
82048762 1343#endif
5e2fc214 1344
bd81e77b 1345 if (new_type == SVt_PVIO)
f2524eef 1346 IoPAGE_LEN(sv) = 60;
bd81e77b 1347 if (old_type < SVt_RV)
6136c704 1348 SvPV_set(sv, NULL);
bd81e77b
NC
1349 break;
1350 default:
afd78fd5
JH
1351 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1352 (unsigned long)new_type);
bd81e77b 1353 }
73171d91 1354
d2a0f284
JC
1355 if (old_type_details->arena) {
1356 /* If there was an old body, then we need to free it.
1357 Note that there is an assumption that all bodies of types that
1358 can be upgraded came from arenas. Only the more complex non-
1359 upgradable types are allowed to be directly malloc()ed. */
bd81e77b
NC
1360#ifdef PURIFY
1361 my_safefree(old_body);
1362#else
1363 del_body((void*)((char*)old_body + old_type_details->offset),
1364 &PL_body_roots[old_type]);
1365#endif
1366 }
1367}
73171d91 1368
bd81e77b
NC
1369/*
1370=for apidoc sv_backoff
73171d91 1371
bd81e77b
NC
1372Remove any string offset. You should normally use the C<SvOOK_off> macro
1373wrapper instead.
73171d91 1374
bd81e77b 1375=cut
73171d91
NC
1376*/
1377
bd81e77b
NC
1378int
1379Perl_sv_backoff(pTHX_ register SV *sv)
1380{
96a5add6 1381 PERL_UNUSED_CONTEXT;
bd81e77b
NC
1382 assert(SvOOK(sv));
1383 assert(SvTYPE(sv) != SVt_PVHV);
1384 assert(SvTYPE(sv) != SVt_PVAV);
1385 if (SvIVX(sv)) {
1386 const char * const s = SvPVX_const(sv);
1387 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1388 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1389 SvIV_set(sv, 0);
1390 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1391 }
1392 SvFLAGS(sv) &= ~SVf_OOK;
1393 return 0;
1394}
73171d91 1395
bd81e77b
NC
1396/*
1397=for apidoc sv_grow
73171d91 1398
bd81e77b
NC
1399Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1400upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1401Use the C<SvGROW> wrapper instead.
93e68bfb 1402
bd81e77b
NC
1403=cut
1404*/
93e68bfb 1405
bd81e77b
NC
1406char *
1407Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1408{
1409 register char *s;
93e68bfb 1410
5db06880
NC
1411 if (PL_madskills && newlen >= 0x100000) {
1412 PerlIO_printf(Perl_debug_log,
1413 "Allocation too large: %"UVxf"\n", (UV)newlen);
1414 }
bd81e77b
NC
1415#ifdef HAS_64K_LIMIT
1416 if (newlen >= 0x10000) {
1417 PerlIO_printf(Perl_debug_log,
1418 "Allocation too large: %"UVxf"\n", (UV)newlen);
1419 my_exit(1);
1420 }
1421#endif /* HAS_64K_LIMIT */
1422 if (SvROK(sv))
1423 sv_unref(sv);
1424 if (SvTYPE(sv) < SVt_PV) {
1425 sv_upgrade(sv, SVt_PV);
1426 s = SvPVX_mutable(sv);
1427 }
1428 else if (SvOOK(sv)) { /* pv is offset? */
1429 sv_backoff(sv);
1430 s = SvPVX_mutable(sv);
1431 if (newlen > SvLEN(sv))
1432 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1433#ifdef HAS_64K_LIMIT
1434 if (newlen >= 0x10000)
1435 newlen = 0xFFFF;
1436#endif
1437 }
1438 else
1439 s = SvPVX_mutable(sv);
aeb18a1e 1440
bd81e77b
NC
1441 if (newlen > SvLEN(sv)) { /* need more room? */
1442 newlen = PERL_STRLEN_ROUNDUP(newlen);
1443 if (SvLEN(sv) && s) {
1444#ifdef MYMALLOC
1445 const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1446 if (newlen <= l) {
1447 SvLEN_set(sv, l);
1448 return s;
1449 } else
1450#endif
10edeb5d 1451 s = (char*)saferealloc(s, newlen);
bd81e77b
NC
1452 }
1453 else {
10edeb5d 1454 s = (char*)safemalloc(newlen);
bd81e77b
NC
1455 if (SvPVX_const(sv) && SvCUR(sv)) {
1456 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1457 }
1458 }
1459 SvPV_set(sv, s);
1460 SvLEN_set(sv, newlen);
1461 }
1462 return s;
1463}
aeb18a1e 1464
bd81e77b
NC
1465/*
1466=for apidoc sv_setiv
932e9ff9 1467
bd81e77b
NC
1468Copies an integer into the given SV, upgrading first if necessary.
1469Does not handle 'set' magic. See also C<sv_setiv_mg>.
463ee0b2 1470
bd81e77b
NC
1471=cut
1472*/
463ee0b2 1473
bd81e77b
NC
1474void
1475Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1476{
97aff369 1477 dVAR;
bd81e77b
NC
1478 SV_CHECK_THINKFIRST_COW_DROP(sv);
1479 switch (SvTYPE(sv)) {
1480 case SVt_NULL:
1481 sv_upgrade(sv, SVt_IV);
1482 break;
1483 case SVt_NV:
1484 sv_upgrade(sv, SVt_PVNV);
1485 break;
1486 case SVt_RV:
1487 case SVt_PV:
1488 sv_upgrade(sv, SVt_PVIV);
1489 break;
463ee0b2 1490
bd81e77b
NC
1491 case SVt_PVGV:
1492 case SVt_PVAV:
1493 case SVt_PVHV:
1494 case SVt_PVCV:
1495 case SVt_PVFM:
1496 case SVt_PVIO:
1497 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1498 OP_DESC(PL_op));
42d0e0b7 1499 default: NOOP;
bd81e77b
NC
1500 }
1501 (void)SvIOK_only(sv); /* validate number */
1502 SvIV_set(sv, i);
1503 SvTAINT(sv);
1504}
932e9ff9 1505
bd81e77b
NC
1506/*
1507=for apidoc sv_setiv_mg
d33b2eba 1508
bd81e77b 1509Like C<sv_setiv>, but also handles 'set' magic.
1c846c1f 1510
bd81e77b
NC
1511=cut
1512*/
d33b2eba 1513
bd81e77b
NC
1514void
1515Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1516{
1517 sv_setiv(sv,i);
1518 SvSETMAGIC(sv);
1519}
727879eb 1520
bd81e77b
NC
1521/*
1522=for apidoc sv_setuv
d33b2eba 1523
bd81e77b
NC
1524Copies an unsigned integer into the given SV, upgrading first if necessary.
1525Does not handle 'set' magic. See also C<sv_setuv_mg>.
9b94d1dd 1526
bd81e77b
NC
1527=cut
1528*/
d33b2eba 1529
bd81e77b
NC
1530void
1531Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1532{
1533 /* With these two if statements:
1534 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
d33b2eba 1535
bd81e77b
NC
1536 without
1537 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1c846c1f 1538
bd81e77b
NC
1539 If you wish to remove them, please benchmark to see what the effect is
1540 */
1541 if (u <= (UV)IV_MAX) {
1542 sv_setiv(sv, (IV)u);
1543 return;
1544 }
1545 sv_setiv(sv, 0);
1546 SvIsUV_on(sv);
1547 SvUV_set(sv, u);
1548}
d33b2eba 1549
bd81e77b
NC
1550/*
1551=for apidoc sv_setuv_mg
727879eb 1552
bd81e77b 1553Like C<sv_setuv>, but also handles 'set' magic.
9b94d1dd 1554
bd81e77b
NC
1555=cut
1556*/
5e2fc214 1557
bd81e77b
NC
1558void
1559Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1560{
bd81e77b
NC
1561 sv_setuv(sv,u);
1562 SvSETMAGIC(sv);
1563}
5e2fc214 1564
954c1994 1565/*
bd81e77b 1566=for apidoc sv_setnv
954c1994 1567
bd81e77b
NC
1568Copies a double into the given SV, upgrading first if necessary.
1569Does not handle 'set' magic. See also C<sv_setnv_mg>.
954c1994
GS
1570
1571=cut
1572*/
1573
63f97190 1574void
bd81e77b 1575Perl_sv_setnv(pTHX_ register SV *sv, NV num)
79072805 1576{
97aff369 1577 dVAR;
bd81e77b
NC
1578 SV_CHECK_THINKFIRST_COW_DROP(sv);
1579 switch (SvTYPE(sv)) {
79072805 1580 case SVt_NULL:
79072805 1581 case SVt_IV:
bd81e77b 1582 sv_upgrade(sv, SVt_NV);
79072805 1583 break;
ed6116ce 1584 case SVt_RV:
79072805 1585 case SVt_PV:
79072805 1586 case SVt_PVIV:
bd81e77b 1587 sv_upgrade(sv, SVt_PVNV);
79072805 1588 break;
bd4b1eb5 1589
bd4b1eb5 1590 case SVt_PVGV:
bd81e77b
NC
1591 case SVt_PVAV:
1592 case SVt_PVHV:
79072805 1593 case SVt_PVCV:
bd81e77b
NC
1594 case SVt_PVFM:
1595 case SVt_PVIO:
1596 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1597 OP_NAME(PL_op));
42d0e0b7 1598 default: NOOP;
2068cd4d 1599 }
bd81e77b
NC
1600 SvNV_set(sv, num);
1601 (void)SvNOK_only(sv); /* validate number */
1602 SvTAINT(sv);
79072805
LW
1603}
1604
645c22ef 1605/*
bd81e77b 1606=for apidoc sv_setnv_mg
645c22ef 1607
bd81e77b 1608Like C<sv_setnv>, but also handles 'set' magic.
645c22ef
DM
1609
1610=cut
1611*/
1612
bd81e77b
NC
1613void
1614Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
79072805 1615{
bd81e77b
NC
1616 sv_setnv(sv,num);
1617 SvSETMAGIC(sv);
79072805
LW
1618}
1619
bd81e77b
NC
1620/* Print an "isn't numeric" warning, using a cleaned-up,
1621 * printable version of the offending string
1622 */
954c1994 1623
bd81e77b
NC
1624STATIC void
1625S_not_a_number(pTHX_ SV *sv)
79072805 1626{
97aff369 1627 dVAR;
bd81e77b
NC
1628 SV *dsv;
1629 char tmpbuf[64];
1630 const char *pv;
94463019
JH
1631
1632 if (DO_UTF8(sv)) {
396482e1 1633 dsv = sv_2mortal(newSVpvs(""));
94463019
JH
1634 pv = sv_uni_display(dsv, sv, 10, 0);
1635 } else {
1636 char *d = tmpbuf;
551405c4 1637 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
94463019
JH
1638 /* each *s can expand to 4 chars + "...\0",
1639 i.e. need room for 8 chars */
ecdeb87c 1640
00b6aa41
AL
1641 const char *s = SvPVX_const(sv);
1642 const char * const end = s + SvCUR(sv);
1643 for ( ; s < end && d < limit; s++ ) {
94463019
JH
1644 int ch = *s & 0xFF;
1645 if (ch & 128 && !isPRINT_LC(ch)) {
1646 *d++ = 'M';
1647 *d++ = '-';
1648 ch &= 127;
1649 }
1650 if (ch == '\n') {
1651 *d++ = '\\';
1652 *d++ = 'n';
1653 }
1654 else if (ch == '\r') {
1655 *d++ = '\\';
1656 *d++ = 'r';
1657 }
1658 else if (ch == '\f') {
1659 *d++ = '\\';
1660 *d++ = 'f';
1661 }
1662 else if (ch == '\\') {
1663 *d++ = '\\';
1664 *d++ = '\\';
1665 }
1666 else if (ch == '\0') {
1667 *d++ = '\\';
1668 *d++ = '0';
1669 }
1670 else if (isPRINT_LC(ch))
1671 *d++ = ch;
1672 else {
1673 *d++ = '^';
1674 *d++ = toCTRL(ch);
1675 }
1676 }
1677 if (s < end) {
1678 *d++ = '.';
1679 *d++ = '.';
1680 *d++ = '.';
1681 }
1682 *d = '\0';
1683 pv = tmpbuf;
a0d0e21e 1684 }
a0d0e21e 1685
533c011a 1686 if (PL_op)
9014280d 1687 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019
JH
1688 "Argument \"%s\" isn't numeric in %s", pv,
1689 OP_DESC(PL_op));
a0d0e21e 1690 else
9014280d 1691 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
94463019 1692 "Argument \"%s\" isn't numeric", pv);
a0d0e21e
LW
1693}
1694
c2988b20
NC
1695/*
1696=for apidoc looks_like_number
1697
645c22ef
DM
1698Test if the content of an SV looks like a number (or is a number).
1699C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1700non-numeric warning), even if your atof() doesn't grok them.
c2988b20
NC
1701
1702=cut
1703*/
1704
1705I32
1706Perl_looks_like_number(pTHX_ SV *sv)
1707{
a3b680e6 1708 register const char *sbegin;
c2988b20
NC
1709 STRLEN len;
1710
1711 if (SvPOK(sv)) {
3f7c398e 1712 sbegin = SvPVX_const(sv);
c2988b20
NC
1713 len = SvCUR(sv);
1714 }
1715 else if (SvPOKp(sv))
83003860 1716 sbegin = SvPV_const(sv, len);
c2988b20 1717 else
e0ab1c0e 1718 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
c2988b20
NC
1719 return grok_number(sbegin, len, NULL);
1720}
25da4f38 1721
19f6321d
NC
1722STATIC bool
1723S_glob_2number(pTHX_ GV * const gv)
180488f8
NC
1724{
1725 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1726 SV *const buffer = sv_newmortal();
1727
1728 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1729 is on. */
1730 SvFAKE_off(gv);
1731 gv_efullname3(buffer, gv, "*");
1732 SvFLAGS(gv) |= wasfake;
1733
675c862f
AL
1734 /* We know that all GVs stringify to something that is not-a-number,
1735 so no need to test that. */
1736 if (ckWARN(WARN_NUMERIC))
1737 not_a_number(buffer);
1738 /* We just want something true to return, so that S_sv_2iuv_common
1739 can tail call us and return true. */
19f6321d 1740 return TRUE;
675c862f
AL
1741}
1742
1743STATIC char *
19f6321d 1744S_glob_2pv(pTHX_ GV * const gv, STRLEN * const len)
675c862f
AL
1745{
1746 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1747 SV *const buffer = sv_newmortal();
1748
1749 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1750 is on. */
1751 SvFAKE_off(gv);
1752 gv_efullname3(buffer, gv, "*");
1753 SvFLAGS(gv) |= wasfake;
1754
1755 assert(SvPOK(buffer));
a6d61a6c
NC
1756 if (len) {
1757 *len = SvCUR(buffer);
1758 }
675c862f 1759 return SvPVX(buffer);
180488f8
NC
1760}
1761
25da4f38
IZ
1762/* Actually, ISO C leaves conversion of UV to IV undefined, but
1763 until proven guilty, assume that things are not that bad... */
1764
645c22ef
DM
1765/*
1766 NV_PRESERVES_UV:
1767
1768 As 64 bit platforms often have an NV that doesn't preserve all bits of
28e5dec8
JH
1769 an IV (an assumption perl has been based on to date) it becomes necessary
1770 to remove the assumption that the NV always carries enough precision to
1771 recreate the IV whenever needed, and that the NV is the canonical form.
1772 Instead, IV/UV and NV need to be given equal rights. So as to not lose
645c22ef 1773 precision as a side effect of conversion (which would lead to insanity
28e5dec8
JH
1774 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1775 1) to distinguish between IV/UV/NV slots that have cached a valid
1776 conversion where precision was lost and IV/UV/NV slots that have a
1777 valid conversion which has lost no precision
645c22ef 1778 2) to ensure that if a numeric conversion to one form is requested that
28e5dec8
JH
1779 would lose precision, the precise conversion (or differently
1780 imprecise conversion) is also performed and cached, to prevent
1781 requests for different numeric formats on the same SV causing
1782 lossy conversion chains. (lossless conversion chains are perfectly
1783 acceptable (still))
1784
1785
1786 flags are used:
1787 SvIOKp is true if the IV slot contains a valid value
1788 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1789 SvNOKp is true if the NV slot contains a valid value
1790 SvNOK is true only if the NV value is accurate
1791
1792 so
645c22ef 1793 while converting from PV to NV, check to see if converting that NV to an
28e5dec8
JH
1794 IV(or UV) would lose accuracy over a direct conversion from PV to
1795 IV(or UV). If it would, cache both conversions, return NV, but mark
1796 SV as IOK NOKp (ie not NOK).
1797
645c22ef 1798 While converting from PV to IV, check to see if converting that IV to an
28e5dec8
JH
1799 NV would lose accuracy over a direct conversion from PV to NV. If it
1800 would, cache both conversions, flag similarly.
1801
1802 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1803 correctly because if IV & NV were set NV *always* overruled.
645c22ef
DM
1804 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1805 changes - now IV and NV together means that the two are interchangeable:
28e5dec8 1806 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
d460ef45 1807
645c22ef
DM
1808 The benefit of this is that operations such as pp_add know that if
1809 SvIOK is true for both left and right operands, then integer addition
1810 can be used instead of floating point (for cases where the result won't
1811 overflow). Before, floating point was always used, which could lead to
28e5dec8
JH
1812 loss of precision compared with integer addition.
1813
1814 * making IV and NV equal status should make maths accurate on 64 bit
1815 platforms
1816 * may speed up maths somewhat if pp_add and friends start to use
645c22ef 1817 integers when possible instead of fp. (Hopefully the overhead in
28e5dec8
JH
1818 looking for SvIOK and checking for overflow will not outweigh the
1819 fp to integer speedup)
1820 * will slow down integer operations (callers of SvIV) on "inaccurate"
1821 values, as the change from SvIOK to SvIOKp will cause a call into
1822 sv_2iv each time rather than a macro access direct to the IV slot
1823 * should speed up number->string conversion on integers as IV is
645c22ef 1824 favoured when IV and NV are equally accurate
28e5dec8
JH
1825
1826 ####################################################################
645c22ef
DM
1827 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1828 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1829 On the other hand, SvUOK is true iff UV.
28e5dec8
JH
1830 ####################################################################
1831
645c22ef 1832 Your mileage will vary depending your CPU's relative fp to integer
28e5dec8
JH
1833 performance ratio.
1834*/
1835
1836#ifndef NV_PRESERVES_UV
645c22ef
DM
1837# define IS_NUMBER_UNDERFLOW_IV 1
1838# define IS_NUMBER_UNDERFLOW_UV 2
1839# define IS_NUMBER_IV_AND_UV 2
1840# define IS_NUMBER_OVERFLOW_IV 4
1841# define IS_NUMBER_OVERFLOW_UV 5
1842
1843/* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
28e5dec8
JH
1844
1845/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1846STATIC int
645c22ef 1847S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
28e5dec8 1848{
97aff369 1849 dVAR;
b57a0404 1850 PERL_UNUSED_ARG(numtype); /* Used only under DEBUGGING? */
3f7c398e 1851 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
1852 if (SvNVX(sv) < (NV)IV_MIN) {
1853 (void)SvIOKp_on(sv);
1854 (void)SvNOK_on(sv);
45977657 1855 SvIV_set(sv, IV_MIN);
28e5dec8
JH
1856 return IS_NUMBER_UNDERFLOW_IV;
1857 }
1858 if (SvNVX(sv) > (NV)UV_MAX) {
1859 (void)SvIOKp_on(sv);
1860 (void)SvNOK_on(sv);
1861 SvIsUV_on(sv);
607fa7f2 1862 SvUV_set(sv, UV_MAX);
28e5dec8
JH
1863 return IS_NUMBER_OVERFLOW_UV;
1864 }
c2988b20
NC
1865 (void)SvIOKp_on(sv);
1866 (void)SvNOK_on(sv);
1867 /* Can't use strtol etc to convert this string. (See truth table in
1868 sv_2iv */
1869 if (SvNVX(sv) <= (UV)IV_MAX) {
45977657 1870 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
1871 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1872 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1873 } else {
1874 /* Integer is imprecise. NOK, IOKp */
1875 }
1876 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1877 }
1878 SvIsUV_on(sv);
607fa7f2 1879 SvUV_set(sv, U_V(SvNVX(sv)));
c2988b20
NC
1880 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1881 if (SvUVX(sv) == UV_MAX) {
1882 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1883 possibly be preserved by NV. Hence, it must be overflow.
1884 NOK, IOKp */
1885 return IS_NUMBER_OVERFLOW_UV;
1886 }
1887 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1888 } else {
1889 /* Integer is imprecise. NOK, IOKp */
28e5dec8 1890 }
c2988b20 1891 return IS_NUMBER_OVERFLOW_IV;
28e5dec8 1892}
645c22ef
DM
1893#endif /* !NV_PRESERVES_UV*/
1894
af359546
NC
1895STATIC bool
1896S_sv_2iuv_common(pTHX_ SV *sv) {
97aff369 1897 dVAR;
af359546 1898 if (SvNOKp(sv)) {
28e5dec8
JH
1899 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1900 * without also getting a cached IV/UV from it at the same time
1901 * (ie PV->NV conversion should detect loss of accuracy and cache
af359546
NC
1902 * IV or UV at same time to avoid this. */
1903 /* IV-over-UV optimisation - choose to cache IV if possible */
25da4f38
IZ
1904
1905 if (SvTYPE(sv) == SVt_NV)
1906 sv_upgrade(sv, SVt_PVNV);
1907
28e5dec8
JH
1908 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1909 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1910 certainly cast into the IV range at IV_MAX, whereas the correct
1911 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1912 cases go to UV */
cab190d4
JD
1913#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1914 if (Perl_isnan(SvNVX(sv))) {
1915 SvUV_set(sv, 0);
1916 SvIsUV_on(sv);
fdbe6d7c 1917 return FALSE;
cab190d4 1918 }
cab190d4 1919#endif
28e5dec8 1920 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
45977657 1921 SvIV_set(sv, I_V(SvNVX(sv)));
28e5dec8
JH
1922 if (SvNVX(sv) == (NV) SvIVX(sv)
1923#ifndef NV_PRESERVES_UV
1924 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1925 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1926 /* Don't flag it as "accurately an integer" if the number
1927 came from a (by definition imprecise) NV operation, and
1928 we're outside the range of NV integer precision */
1929#endif
1930 ) {
1931 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1932 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 1933 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
28e5dec8
JH
1934 PTR2UV(sv),
1935 SvNVX(sv),
1936 SvIVX(sv)));
1937
1938 } else {
1939 /* IV not precise. No need to convert from PV, as NV
1940 conversion would already have cached IV if it detected
1941 that PV->IV would be better than PV->NV->IV
1942 flags already correct - don't set public IOK. */
1943 DEBUG_c(PerlIO_printf(Perl_debug_log,
7234c960 1944 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
28e5dec8
JH
1945 PTR2UV(sv),
1946 SvNVX(sv),
1947 SvIVX(sv)));
1948 }
1949 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1950 but the cast (NV)IV_MIN rounds to a the value less (more
1951 negative) than IV_MIN which happens to be equal to SvNVX ??
1952 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1953 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1954 (NV)UVX == NVX are both true, but the values differ. :-(
1955 Hopefully for 2s complement IV_MIN is something like
1956 0x8000000000000000 which will be exact. NWC */
d460ef45 1957 }
25da4f38 1958 else {
607fa7f2 1959 SvUV_set(sv, U_V(SvNVX(sv)));
28e5dec8
JH
1960 if (
1961 (SvNVX(sv) == (NV) SvUVX(sv))
1962#ifndef NV_PRESERVES_UV
1963 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1964 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1965 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1966 /* Don't flag it as "accurately an integer" if the number
1967 came from a (by definition imprecise) NV operation, and
1968 we're outside the range of NV integer precision */
1969#endif
1970 )
1971 SvIOK_on(sv);
25da4f38 1972 SvIsUV_on(sv);
1c846c1f 1973 DEBUG_c(PerlIO_printf(Perl_debug_log,
57def98f 1974 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
56431972 1975 PTR2UV(sv),
57def98f
JH
1976 SvUVX(sv),
1977 SvUVX(sv)));
25da4f38 1978 }
748a9306
LW
1979 }
1980 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 1981 UV value;
504618e9 1982 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
af359546 1983 /* We want to avoid a possible problem when we cache an IV/ a UV which
25da4f38 1984 may be later translated to an NV, and the resulting NV is not
c2988b20
NC
1985 the same as the direct translation of the initial string
1986 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
1987 be careful to ensure that the value with the .456 is around if the
1988 NV value is requested in the future).
1c846c1f 1989
af359546 1990 This means that if we cache such an IV/a UV, we need to cache the
25da4f38 1991 NV as well. Moreover, we trade speed for space, and do not
28e5dec8 1992 cache the NV if we are sure it's not needed.
25da4f38 1993 */
16b7a9a4 1994
c2988b20
NC
1995 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
1996 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1997 == IS_NUMBER_IN_UV) {
5e045b90 1998 /* It's definitely an integer, only upgrade to PVIV */
28e5dec8
JH
1999 if (SvTYPE(sv) < SVt_PVIV)
2000 sv_upgrade(sv, SVt_PVIV);
f7bbb42a 2001 (void)SvIOK_on(sv);
c2988b20
NC
2002 } else if (SvTYPE(sv) < SVt_PVNV)
2003 sv_upgrade(sv, SVt_PVNV);
28e5dec8 2004
f2524eef 2005 /* If NVs preserve UVs then we only use the UV value if we know that
c2988b20
NC
2006 we aren't going to call atof() below. If NVs don't preserve UVs
2007 then the value returned may have more precision than atof() will
2008 return, even though value isn't perfectly accurate. */
2009 if ((numtype & (IS_NUMBER_IN_UV
2010#ifdef NV_PRESERVES_UV
2011 | IS_NUMBER_NOT_INT
2012#endif
2013 )) == IS_NUMBER_IN_UV) {
2014 /* This won't turn off the public IOK flag if it was set above */
2015 (void)SvIOKp_on(sv);
2016
2017 if (!(numtype & IS_NUMBER_NEG)) {
2018 /* positive */;
2019 if (value <= (UV)IV_MAX) {
45977657 2020 SvIV_set(sv, (IV)value);
c2988b20 2021 } else {
af359546 2022 /* it didn't overflow, and it was positive. */
607fa7f2 2023 SvUV_set(sv, value);
c2988b20
NC
2024 SvIsUV_on(sv);
2025 }
2026 } else {
2027 /* 2s complement assumption */
2028 if (value <= (UV)IV_MIN) {
45977657 2029 SvIV_set(sv, -(IV)value);
c2988b20
NC
2030 } else {
2031 /* Too negative for an IV. This is a double upgrade, but
d1be9408 2032 I'm assuming it will be rare. */
c2988b20
NC
2033 if (SvTYPE(sv) < SVt_PVNV)
2034 sv_upgrade(sv, SVt_PVNV);
2035 SvNOK_on(sv);
2036 SvIOK_off(sv);
2037 SvIOKp_on(sv);
9d6ce603 2038 SvNV_set(sv, -(NV)value);
45977657 2039 SvIV_set(sv, IV_MIN);
c2988b20
NC
2040 }
2041 }
2042 }
2043 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2044 will be in the previous block to set the IV slot, and the next
2045 block to set the NV slot. So no else here. */
2046
2047 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2048 != IS_NUMBER_IN_UV) {
2049 /* It wasn't an (integer that doesn't overflow the UV). */
3f7c398e 2050 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8 2051
c2988b20
NC
2052 if (! numtype && ckWARN(WARN_NUMERIC))
2053 not_a_number(sv);
28e5dec8 2054
65202027 2055#if defined(USE_LONG_DOUBLE)
c2988b20
NC
2056 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2057 PTR2UV(sv), SvNVX(sv)));
65202027 2058#else
1779d84d 2059 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
c2988b20 2060 PTR2UV(sv), SvNVX(sv)));
65202027 2061#endif
28e5dec8 2062
28e5dec8 2063#ifdef NV_PRESERVES_UV
af359546
NC
2064 (void)SvIOKp_on(sv);
2065 (void)SvNOK_on(sv);
2066 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2067 SvIV_set(sv, I_V(SvNVX(sv)));
2068 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2069 SvIOK_on(sv);
2070 } else {
6f207bd3 2071 NOOP; /* Integer is imprecise. NOK, IOKp */
af359546
NC
2072 }
2073 /* UV will not work better than IV */
2074 } else {
2075 if (SvNVX(sv) > (NV)UV_MAX) {
2076 SvIsUV_on(sv);
2077 /* Integer is inaccurate. NOK, IOKp, is UV */
2078 SvUV_set(sv, UV_MAX);
af359546
NC
2079 } else {
2080 SvUV_set(sv, U_V(SvNVX(sv)));
2081 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2082 NV preservse UV so can do correct comparison. */
2083 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2084 SvIOK_on(sv);
af359546 2085 } else {
6f207bd3 2086 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
af359546
NC
2087 }
2088 }
4b0c9573 2089 SvIsUV_on(sv);
af359546 2090 }
28e5dec8 2091#else /* NV_PRESERVES_UV */
c2988b20
NC
2092 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2093 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
af359546 2094 /* The IV/UV slot will have been set from value returned by
c2988b20
NC
2095 grok_number above. The NV slot has just been set using
2096 Atof. */
560b0c46 2097 SvNOK_on(sv);
c2988b20
NC
2098 assert (SvIOKp(sv));
2099 } else {
2100 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2101 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2102 /* Small enough to preserve all bits. */
2103 (void)SvIOKp_on(sv);
2104 SvNOK_on(sv);
45977657 2105 SvIV_set(sv, I_V(SvNVX(sv)));
c2988b20
NC
2106 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2107 SvIOK_on(sv);
2108 /* Assumption: first non-preserved integer is < IV_MAX,
2109 this NV is in the preserved range, therefore: */
2110 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2111 < (UV)IV_MAX)) {
32fdb065 2112 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
2113 }
2114 } else {
2115 /* IN_UV NOT_INT
2116 0 0 already failed to read UV.
2117 0 1 already failed to read UV.
2118 1 0 you won't get here in this case. IV/UV
2119 slot set, public IOK, Atof() unneeded.
2120 1 1 already read UV.
2121 so there's no point in sv_2iuv_non_preserve() attempting
2122 to use atol, strtol, strtoul etc. */
40a17c4c 2123 sv_2iuv_non_preserve (sv, numtype);
c2988b20
NC
2124 }
2125 }
28e5dec8 2126#endif /* NV_PRESERVES_UV */
25da4f38 2127 }
af359546
NC
2128 }
2129 else {
675c862f 2130 if (isGV_with_GP(sv))
a0933d07 2131 return glob_2number((GV *)sv);
180488f8 2132
af359546
NC
2133 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2134 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2135 report_uninit(sv);
2136 }
25da4f38
IZ
2137 if (SvTYPE(sv) < SVt_IV)
2138 /* Typically the caller expects that sv_any is not NULL now. */
2139 sv_upgrade(sv, SVt_IV);
af359546
NC
2140 /* Return 0 from the caller. */
2141 return TRUE;
2142 }
2143 return FALSE;
2144}
2145
2146/*
2147=for apidoc sv_2iv_flags
2148
2149Return the integer value of an SV, doing any necessary string
2150conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2151Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2152
2153=cut
2154*/
2155
2156IV
2157Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2158{
97aff369 2159 dVAR;
af359546 2160 if (!sv)
a0d0e21e 2161 return 0;
50caf62e
NC
2162 if (SvGMAGICAL(sv) || SvTYPE(sv) == SVt_PVBM) {
2163 /* PVBMs use the same flag bit as SVf_IVisUV, so must let them
2164 cache IVs just in case. In practice it seems that they never
2165 actually anywhere accessible by user Perl code, let alone get used
2166 in anything other than a string context. */
af359546
NC
2167 if (flags & SV_GMAGIC)
2168 mg_get(sv);
2169 if (SvIOKp(sv))
2170 return SvIVX(sv);
2171 if (SvNOKp(sv)) {
2172 return I_V(SvNVX(sv));
2173 }
71c558c3
NC
2174 if (SvPOKp(sv) && SvLEN(sv)) {
2175 UV value;
2176 const int numtype
2177 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2178
2179 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2180 == IS_NUMBER_IN_UV) {
2181 /* It's definitely an integer */
2182 if (numtype & IS_NUMBER_NEG) {
2183 if (value < (UV)IV_MIN)
2184 return -(IV)value;
2185 } else {
2186 if (value < (UV)IV_MAX)
2187 return (IV)value;
2188 }
2189 }
2190 if (!numtype) {
2191 if (ckWARN(WARN_NUMERIC))
2192 not_a_number(sv);
2193 }
2194 return I_V(Atof(SvPVX_const(sv)));
2195 }
1c7ff15e
NC
2196 if (SvROK(sv)) {
2197 goto return_rok;
af359546 2198 }
1c7ff15e
NC
2199 assert(SvTYPE(sv) >= SVt_PVMG);
2200 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2201 } else if (SvTHINKFIRST(sv)) {
af359546 2202 if (SvROK(sv)) {
1c7ff15e 2203 return_rok:
af359546
NC
2204 if (SvAMAGIC(sv)) {
2205 SV * const tmpstr=AMG_CALLun(sv,numer);
2206 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2207 return SvIV(tmpstr);
2208 }
2209 }
2210 return PTR2IV(SvRV(sv));
2211 }
2212 if (SvIsCOW(sv)) {
2213 sv_force_normal_flags(sv, 0);
2214 }
2215 if (SvREADONLY(sv) && !SvOK(sv)) {
2216 if (ckWARN(WARN_UNINITIALIZED))
2217 report_uninit(sv);
2218 return 0;
2219 }
2220 }
2221 if (!SvIOKp(sv)) {
2222 if (S_sv_2iuv_common(aTHX_ sv))
2223 return 0;
79072805 2224 }
1d7c1841
GS
2225 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2226 PTR2UV(sv),SvIVX(sv)));
25da4f38 2227 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
79072805
LW
2228}
2229
645c22ef 2230/*
891f9566 2231=for apidoc sv_2uv_flags
645c22ef
DM
2232
2233Return the unsigned integer value of an SV, doing any necessary string
891f9566
YST
2234conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2235Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
645c22ef
DM
2236
2237=cut
2238*/
2239
ff68c719 2240UV
891f9566 2241Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
ff68c719 2242{
97aff369 2243 dVAR;
ff68c719 2244 if (!sv)
2245 return 0;
50caf62e
NC
2246 if (SvGMAGICAL(sv) || SvTYPE(sv) == SVt_PVBM) {
2247 /* PVBMs use the same flag bit as SVf_IVisUV, so must let them
2248 cache IVs just in case. */
891f9566
YST
2249 if (flags & SV_GMAGIC)
2250 mg_get(sv);
ff68c719 2251 if (SvIOKp(sv))
2252 return SvUVX(sv);
2253 if (SvNOKp(sv))
2254 return U_V(SvNVX(sv));
71c558c3
NC
2255 if (SvPOKp(sv) && SvLEN(sv)) {
2256 UV value;
2257 const int numtype
2258 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2259
2260 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2261 == IS_NUMBER_IN_UV) {
2262 /* It's definitely an integer */
2263 if (!(numtype & IS_NUMBER_NEG))
2264 return value;
2265 }
2266 if (!numtype) {
2267 if (ckWARN(WARN_NUMERIC))
2268 not_a_number(sv);
2269 }
2270 return U_V(Atof(SvPVX_const(sv)));
2271 }
1c7ff15e
NC
2272 if (SvROK(sv)) {
2273 goto return_rok;
3fe9a6f1 2274 }
1c7ff15e
NC
2275 assert(SvTYPE(sv) >= SVt_PVMG);
2276 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
4cb1ec55 2277 } else if (SvTHINKFIRST(sv)) {
ff68c719 2278 if (SvROK(sv)) {
1c7ff15e 2279 return_rok:
deb46114
NC
2280 if (SvAMAGIC(sv)) {
2281 SV *const tmpstr = AMG_CALLun(sv,numer);
2282 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2283 return SvUV(tmpstr);
2284 }
2285 }
2286 return PTR2UV(SvRV(sv));
ff68c719 2287 }
765f542d
NC
2288 if (SvIsCOW(sv)) {
2289 sv_force_normal_flags(sv, 0);
8a818333 2290 }
0336b60e 2291 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2292 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2293 report_uninit(sv);
ff68c719 2294 return 0;
2295 }
2296 }
af359546
NC
2297 if (!SvIOKp(sv)) {
2298 if (S_sv_2iuv_common(aTHX_ sv))
2299 return 0;
ff68c719 2300 }
25da4f38 2301
1d7c1841
GS
2302 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2303 PTR2UV(sv),SvUVX(sv)));
25da4f38 2304 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
ff68c719 2305}
2306
645c22ef
DM
2307/*
2308=for apidoc sv_2nv
2309
2310Return the num value of an SV, doing any necessary string or integer
2311conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2312macros.
2313
2314=cut
2315*/
2316
65202027 2317NV
864dbfa3 2318Perl_sv_2nv(pTHX_ register SV *sv)
79072805 2319{
97aff369 2320 dVAR;
79072805
LW
2321 if (!sv)
2322 return 0.0;
50caf62e
NC
2323 if (SvGMAGICAL(sv) || SvTYPE(sv) == SVt_PVBM) {
2324 /* PVBMs use the same flag bit as SVf_IVisUV, so must let them
2325 cache IVs just in case. */
463ee0b2
LW
2326 mg_get(sv);
2327 if (SvNOKp(sv))
2328 return SvNVX(sv);
0aa395f8 2329 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
041457d9 2330 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
504618e9 2331 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
a0d0e21e 2332 not_a_number(sv);
3f7c398e 2333 return Atof(SvPVX_const(sv));
a0d0e21e 2334 }
25da4f38 2335 if (SvIOKp(sv)) {
1c846c1f 2336 if (SvIsUV(sv))
65202027 2337 return (NV)SvUVX(sv);
25da4f38 2338 else
65202027 2339 return (NV)SvIVX(sv);
47a72cb8
NC
2340 }
2341 if (SvROK(sv)) {
2342 goto return_rok;
2343 }
2344 assert(SvTYPE(sv) >= SVt_PVMG);
2345 /* This falls through to the report_uninit near the end of the
2346 function. */
2347 } else if (SvTHINKFIRST(sv)) {
a0d0e21e 2348 if (SvROK(sv)) {
47a72cb8 2349 return_rok:
deb46114
NC
2350 if (SvAMAGIC(sv)) {
2351 SV *const tmpstr = AMG_CALLun(sv,numer);
2352 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2353 return SvNV(tmpstr);
2354 }
2355 }
2356 return PTR2NV(SvRV(sv));
a0d0e21e 2357 }
765f542d
NC
2358 if (SvIsCOW(sv)) {
2359 sv_force_normal_flags(sv, 0);
8a818333 2360 }
0336b60e 2361 if (SvREADONLY(sv) && !SvOK(sv)) {
599cee73 2362 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2363 report_uninit(sv);
ed6116ce
LW
2364 return 0.0;
2365 }
79072805
LW
2366 }
2367 if (SvTYPE(sv) < SVt_NV) {
7e25a7e9
NC
2368 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2369 sv_upgrade(sv, SVt_NV);
906f284f 2370#ifdef USE_LONG_DOUBLE
097ee67d 2371 DEBUG_c({
f93f4e46 2372 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2373 PerlIO_printf(Perl_debug_log,
2374 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2375 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2376 RESTORE_NUMERIC_LOCAL();
2377 });
65202027 2378#else
572bbb43 2379 DEBUG_c({
f93f4e46 2380 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2381 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
1d7c1841 2382 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2383 RESTORE_NUMERIC_LOCAL();
2384 });
572bbb43 2385#endif
79072805
LW
2386 }
2387 else if (SvTYPE(sv) < SVt_PVNV)
2388 sv_upgrade(sv, SVt_PVNV);
59d8ce62
NC
2389 if (SvNOKp(sv)) {
2390 return SvNVX(sv);
61604483 2391 }
59d8ce62 2392 if (SvIOKp(sv)) {
9d6ce603 2393 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
28e5dec8
JH
2394#ifdef NV_PRESERVES_UV
2395 SvNOK_on(sv);
2396#else
2397 /* Only set the public NV OK flag if this NV preserves the IV */
2398 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2399 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2400 : (SvIVX(sv) == I_V(SvNVX(sv))))
2401 SvNOK_on(sv);
2402 else
2403 SvNOKp_on(sv);
2404#endif
93a17b20 2405 }
748a9306 2406 else if (SvPOKp(sv) && SvLEN(sv)) {
c2988b20 2407 UV value;
3f7c398e 2408 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
041457d9 2409 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
a0d0e21e 2410 not_a_number(sv);
28e5dec8 2411#ifdef NV_PRESERVES_UV
c2988b20
NC
2412 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2413 == IS_NUMBER_IN_UV) {
5e045b90 2414 /* It's definitely an integer */
9d6ce603 2415 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
c2988b20 2416 } else
3f7c398e 2417 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2418 SvNOK_on(sv);
2419#else
3f7c398e 2420 SvNV_set(sv, Atof(SvPVX_const(sv)));
28e5dec8
JH
2421 /* Only set the public NV OK flag if this NV preserves the value in
2422 the PV at least as well as an IV/UV would.
2423 Not sure how to do this 100% reliably. */
2424 /* if that shift count is out of range then Configure's test is
2425 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2426 UV_BITS */
2427 if (((UV)1 << NV_PRESERVES_UV_BITS) >
c2988b20 2428 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
28e5dec8 2429 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
c2988b20
NC
2430 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2431 /* Can't use strtol etc to convert this string, so don't try.
2432 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2433 SvNOK_on(sv);
2434 } else {
2435 /* value has been set. It may not be precise. */
2436 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2437 /* 2s complement assumption for (UV)IV_MIN */
2438 SvNOK_on(sv); /* Integer is too negative. */
2439 } else {
2440 SvNOKp_on(sv);
2441 SvIOKp_on(sv);
6fa402ec 2442
c2988b20 2443 if (numtype & IS_NUMBER_NEG) {
45977657 2444 SvIV_set(sv, -(IV)value);
c2988b20 2445 } else if (value <= (UV)IV_MAX) {
45977657 2446 SvIV_set(sv, (IV)value);
c2988b20 2447 } else {
607fa7f2 2448 SvUV_set(sv, value);
c2988b20
NC
2449 SvIsUV_on(sv);
2450 }
2451
2452 if (numtype & IS_NUMBER_NOT_INT) {
2453 /* I believe that even if the original PV had decimals,
2454 they are lost beyond the limit of the FP precision.
2455 However, neither is canonical, so both only get p
2456 flags. NWC, 2000/11/25 */
2457 /* Both already have p flags, so do nothing */
2458 } else {
66a1b24b 2459 const NV nv = SvNVX(sv);
c2988b20
NC
2460 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2461 if (SvIVX(sv) == I_V(nv)) {
2462 SvNOK_on(sv);
c2988b20 2463 } else {
c2988b20
NC
2464 /* It had no "." so it must be integer. */
2465 }
00b6aa41 2466 SvIOK_on(sv);
c2988b20
NC
2467 } else {
2468 /* between IV_MAX and NV(UV_MAX).
2469 Could be slightly > UV_MAX */
6fa402ec 2470
c2988b20
NC
2471 if (numtype & IS_NUMBER_NOT_INT) {
2472 /* UV and NV both imprecise. */
2473 } else {
66a1b24b 2474 const UV nv_as_uv = U_V(nv);
c2988b20
NC
2475
2476 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2477 SvNOK_on(sv);
c2988b20 2478 }
00b6aa41 2479 SvIOK_on(sv);
c2988b20
NC
2480 }
2481 }
2482 }
2483 }
2484 }
28e5dec8 2485#endif /* NV_PRESERVES_UV */
93a17b20 2486 }
79072805 2487 else {
f7877b28 2488 if (isGV_with_GP(sv)) {
19f6321d 2489 glob_2number((GV *)sv);
180488f8
NC
2490 return 0.0;
2491 }
2492
041457d9 2493 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2494 report_uninit(sv);
7e25a7e9
NC
2495 assert (SvTYPE(sv) >= SVt_NV);
2496 /* Typically the caller expects that sv_any is not NULL now. */
2497 /* XXX Ilya implies that this is a bug in callers that assume this
2498 and ideally should be fixed. */
a0d0e21e 2499 return 0.0;
79072805 2500 }
572bbb43 2501#if defined(USE_LONG_DOUBLE)
097ee67d 2502 DEBUG_c({
f93f4e46 2503 STORE_NUMERIC_LOCAL_SET_STANDARD();
1d7c1841
GS
2504 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2505 PTR2UV(sv), SvNVX(sv));
572bbb43
GS
2506 RESTORE_NUMERIC_LOCAL();
2507 });
65202027 2508#else
572bbb43 2509 DEBUG_c({
f93f4e46 2510 STORE_NUMERIC_LOCAL_SET_STANDARD();
1779d84d 2511 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
1d7c1841 2512 PTR2UV(sv), SvNVX(sv));
097ee67d
JH
2513 RESTORE_NUMERIC_LOCAL();
2514 });
572bbb43 2515#endif
463ee0b2 2516 return SvNVX(sv);
79072805
LW
2517}
2518
645c22ef
DM
2519/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2520 * UV as a string towards the end of buf, and return pointers to start and
2521 * end of it.
2522 *
2523 * We assume that buf is at least TYPE_CHARS(UV) long.
2524 */
2525
864dbfa3 2526static char *
aec46f14 2527S_uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
25da4f38 2528{
25da4f38 2529 char *ptr = buf + TYPE_CHARS(UV);
823a54a3 2530 char * const ebuf = ptr;
25da4f38 2531 int sign;
25da4f38
IZ
2532
2533 if (is_uv)
2534 sign = 0;
2535 else if (iv >= 0) {
2536 uv = iv;
2537 sign = 0;
2538 } else {
2539 uv = -iv;
2540 sign = 1;
2541 }
2542 do {
eb160463 2543 *--ptr = '0' + (char)(uv % 10);
25da4f38
IZ
2544 } while (uv /= 10);
2545 if (sign)
2546 *--ptr = '-';
2547 *peob = ebuf;
2548 return ptr;
2549}
2550
645c22ef
DM
2551/*
2552=for apidoc sv_2pv_flags
2553
ff276b08 2554Returns a pointer to the string value of an SV, and sets *lp to its length.
645c22ef
DM
2555If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2556if necessary.
2557Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2558usually end up here too.
2559
2560=cut
2561*/
2562
8d6d96c1
HS
2563char *
2564Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2565{
97aff369 2566 dVAR;
79072805 2567 register char *s;
79072805 2568
463ee0b2 2569 if (!sv) {
cdb061a3
NC
2570 if (lp)
2571 *lp = 0;
73d840c0 2572 return (char *)"";
463ee0b2 2573 }
8990e307 2574 if (SvGMAGICAL(sv)) {
8d6d96c1
HS
2575 if (flags & SV_GMAGIC)
2576 mg_get(sv);
463ee0b2 2577 if (SvPOKp(sv)) {
cdb061a3
NC
2578 if (lp)
2579 *lp = SvCUR(sv);
10516c54
NC
2580 if (flags & SV_MUTABLE_RETURN)
2581 return SvPVX_mutable(sv);
4d84ee25
NC
2582 if (flags & SV_CONST_RETURN)
2583 return (char *)SvPVX_const(sv);
463ee0b2
LW
2584 return SvPVX(sv);
2585 }
75dfc8ec
NC
2586 if (SvIOKp(sv) || SvNOKp(sv)) {
2587 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
75dfc8ec
NC
2588 STRLEN len;
2589
2590 if (SvIOKp(sv)) {
e80fed9d 2591 len = SvIsUV(sv)
d9fad198
JH
2592 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2593 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
75dfc8ec 2594 } else {
e8ada2d0
NC
2595 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2596 len = strlen(tbuf);
75dfc8ec 2597 }
b5b886f0
NC
2598 assert(!SvROK(sv));
2599 {
75dfc8ec
NC
2600 dVAR;
2601
2602#ifdef FIXNEGATIVEZERO
e8ada2d0
NC
2603 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2604 tbuf[0] = '0';
2605 tbuf[1] = 0;
75dfc8ec
NC
2606 len = 1;
2607 }
2608#endif
2609 SvUPGRADE(sv, SVt_PV);
2610 if (lp)
2611 *lp = len;
2612 s = SvGROW_mutable(sv, len + 1);
2613 SvCUR_set(sv, len);
2614 SvPOKp_on(sv);
10edeb5d 2615 return (char*)memcpy(s, tbuf, len + 1);
75dfc8ec 2616 }
463ee0b2 2617 }
1c7ff15e
NC
2618 if (SvROK(sv)) {
2619 goto return_rok;
2620 }
2621 assert(SvTYPE(sv) >= SVt_PVMG);
2622 /* This falls through to the report_uninit near the end of the
2623 function. */
2624 } else if (SvTHINKFIRST(sv)) {
ed6116ce 2625 if (SvROK(sv)) {
1c7ff15e 2626 return_rok:
deb46114
NC
2627 if (SvAMAGIC(sv)) {
2628 SV *const tmpstr = AMG_CALLun(sv,string);
2629 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2630 /* Unwrap this: */
2631 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2632 */
2633
2634 char *pv;
2635 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2636 if (flags & SV_CONST_RETURN) {
2637 pv = (char *) SvPVX_const(tmpstr);
2638 } else {
2639 pv = (flags & SV_MUTABLE_RETURN)
2640 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2641 }
2642 if (lp)
2643 *lp = SvCUR(tmpstr);
50adf7d2 2644 } else {
deb46114 2645 pv = sv_2pv_flags(tmpstr, lp, flags);
50adf7d2 2646 }
deb46114
NC
2647 if (SvUTF8(tmpstr))
2648 SvUTF8_on(sv);
2649 else
2650 SvUTF8_off(sv);
2651 return pv;
50adf7d2 2652 }
deb46114
NC
2653 }
2654 {
fafee734
NC
2655 STRLEN len;
2656 char *retval;
2657 char *buffer;
f9277f47 2658 MAGIC *mg;
d8eae41e
NC
2659 const SV *const referent = (SV*)SvRV(sv);
2660
2661 if (!referent) {
fafee734
NC
2662 len = 7;
2663 retval = buffer = savepvn("NULLREF", len);
042dae7a
NC
2664 } else if (SvTYPE(referent) == SVt_PVMG
2665 && ((SvFLAGS(referent) &
2666 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2667 == (SVs_OBJECT|SVs_SMG))
de8c5301
YO
2668 && (mg = mg_find(referent, PERL_MAGIC_qr)))
2669 {
2670 char *str = NULL;
2671 I32 haseval = 0;
60df1e07 2672 U32 flags = 0;
de8c5301
YO
2673 (str) = CALLREG_AS_STR(mg,lp,&flags,&haseval);
2674 if (flags & 1)
2675 SvUTF8_on(sv);
2676 else
2677 SvUTF8_off(sv);
2678 PL_reginterp_cnt += haseval;
2679 return str;
d8eae41e
NC
2680 } else {
2681 const char *const typestr = sv_reftype(referent, 0);
fafee734
NC
2682 const STRLEN typelen = strlen(typestr);
2683 UV addr = PTR2UV(referent);
2684 const char *stashname = NULL;
2685 STRLEN stashnamelen = 0; /* hush, gcc */
2686 const char *buffer_end;
d8eae41e 2687
d8eae41e 2688 if (SvOBJECT(referent)) {
fafee734
NC
2689 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2690
2691 if (name) {
2692 stashname = HEK_KEY(name);
2693 stashnamelen = HEK_LEN(name);
2694
2695 if (HEK_UTF8(name)) {
2696 SvUTF8_on(sv);
2697 } else {
2698 SvUTF8_off(sv);
2699 }
2700 } else {
2701 stashname = "__ANON__";
2702 stashnamelen = 8;
2703 }
2704 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2705 + 2 * sizeof(UV) + 2 /* )\0 */;
2706 } else {
2707 len = typelen + 3 /* (0x */
2708 + 2 * sizeof(UV) + 2 /* )\0 */;
d8eae41e 2709 }
fafee734
NC
2710
2711 Newx(buffer, len, char);
2712 buffer_end = retval = buffer + len;
2713
2714 /* Working backwards */
2715 *--retval = '\0';
2716 *--retval = ')';
2717 do {
2718 *--retval = PL_hexdigit[addr & 15];
2719 } while (addr >>= 4);
2720 *--retval = 'x';
2721 *--retval = '0';
2722 *--retval = '(';
2723
2724 retval -= typelen;
2725 memcpy(retval, typestr, typelen);
2726
2727 if (stashname) {
2728 *--retval = '=';
2729 retval -= stashnamelen;
2730 memcpy(retval, stashname, stashnamelen);
2731 }
2732 /* retval may not neccesarily have reached the start of the
2733 buffer here. */
2734 assert (retval >= buffer);
2735
2736 len = buffer_end - retval - 1; /* -1 for that \0 */
c080367d 2737 }
042dae7a 2738 if (lp)
fafee734
NC
2739 *lp = len;
2740 SAVEFREEPV(buffer);
2741 return retval;
463ee0b2 2742 }
79072805 2743 }
0336b60e 2744 if (SvREADONLY(sv) && !SvOK(sv)) {
0336b60e 2745 if (ckWARN(WARN_UNINITIALIZED))
29489e7c 2746 report_uninit(sv);
cdb061a3
NC
2747 if (lp)
2748 *lp = 0;
73d840c0 2749 return (char *)"";
79072805 2750 }
79072805 2751 }
28e5dec8
JH
2752 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2753 /* I'm assuming that if both IV and NV are equally valid then
2754 converting the IV is going to be more efficient */
e1ec3a88 2755 const U32 isUIOK = SvIsUV(sv);
28e5dec8
JH
2756 char buf[TYPE_CHARS(UV)];
2757 char *ebuf, *ptr;
2758
2759 if (SvTYPE(sv) < SVt_PVIV)
2760 sv_upgrade(sv, SVt_PVIV);
4ea1d550 2761 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
5902b6a9
NC
2762 /* inlined from sv_setpvn */
2763 SvGROW_mutable(sv, (STRLEN)(ebuf - ptr + 1));
4d84ee25 2764 Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
28e5dec8
JH
2765 SvCUR_set(sv, ebuf - ptr);
2766 s = SvEND(sv);
2767 *s = '\0';
28e5dec8
JH
2768 }
2769 else if (SvNOKp(sv)) {
c81271c3 2770 const int olderrno = errno;
79072805
LW
2771 if (SvTYPE(sv) < SVt_PVNV)
2772 sv_upgrade(sv, SVt_PVNV);
1c846c1f 2773 /* The +20 is pure guesswork. Configure test needed. --jhi */
5902b6a9 2774 s = SvGROW_mutable(sv, NV_DIG + 20);
c81271c3 2775 /* some Xenix systems wipe out errno here */
79072805 2776#ifdef apollo
463ee0b2 2777 if (SvNVX(sv) == 0.0)
d1307786 2778 my_strlcpy(s, "0", SvLEN(sv));
79072805
LW
2779 else
2780#endif /*apollo*/
bbce6d69 2781 {
2d4389e4 2782 Gconvert(SvNVX(sv), NV_DIG, 0, s);
bbce6d69 2783 }
79072805 2784 errno = olderrno;
a0d0e21e
LW
2785#ifdef FIXNEGATIVEZERO
2786 if (*s == '-' && s[1] == '0' && !s[2])
d1307786 2787 my_strlcpy(s, "0", SvLEN(s));
a0d0e21e 2788#endif
79072805
LW
2789 while (*s) s++;
2790#ifdef hcx
2791 if (s[-1] == '.')
46fc3d4c 2792 *--s = '\0';
79072805
LW
2793#endif
2794 }
79072805 2795 else {
675c862f 2796 if (isGV_with_GP(sv))
19f6321d 2797 return glob_2pv((GV *)sv, lp);
180488f8 2798
041457d9 2799 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
29489e7c 2800 report_uninit(sv);
cdb061a3 2801 if (lp)
00b6aa41 2802 *lp = 0;
25da4f38
IZ
2803 if (SvTYPE(sv) < SVt_PV)
2804 /* Typically the caller expects that sv_any is not NULL now. */
2805 sv_upgrade(sv, SVt_PV);
73d840c0 2806 return (char *)"";
79072805 2807 }
cdb061a3 2808 {
823a54a3 2809 const STRLEN len = s - SvPVX_const(sv);
cdb061a3
NC
2810 if (lp)
2811 *lp = len;
2812 SvCUR_set(sv, len);
2813 }
79072805 2814 SvPOK_on(sv);
1d7c1841 2815 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 2816 PTR2UV(sv),SvPVX_const(sv)));
4d84ee25
NC
2817 if (flags & SV_CONST_RETURN)
2818 return (char *)SvPVX_const(sv);
10516c54
NC
2819 if (flags & SV_MUTABLE_RETURN)
2820 return SvPVX_mutable(sv);
463ee0b2
LW
2821 return SvPVX(sv);
2822}
2823
645c22ef 2824/*
6050d10e
JP
2825=for apidoc sv_copypv
2826
2827Copies a stringified representation of the source SV into the
2828destination SV. Automatically performs any necessary mg_get and
54f0641b 2829coercion of numeric values into strings. Guaranteed to preserve
6050d10e 2830UTF-8 flag even from overloaded objects. Similar in nature to
54f0641b
NIS
2831sv_2pv[_flags] but operates directly on an SV instead of just the
2832string. Mostly uses sv_2pv_flags to do its work, except when that
6050d10e
JP
2833would lose the UTF-8'ness of the PV.
2834
2835=cut
2836*/
2837
2838void
2839Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
2840{
446eaa42 2841 STRLEN len;
53c1dcc0 2842 const char * const s = SvPV_const(ssv,len);
cb50f42d 2843 sv_setpvn(dsv,s,len);
446eaa42 2844 if (SvUTF8(ssv))
cb50f42d 2845 SvUTF8_on(dsv);
446eaa42 2846 else
cb50f42d 2847 SvUTF8_off(dsv);
6050d10e
JP
2848}
2849
2850/*
645c22ef
DM
2851=for apidoc sv_2pvbyte
2852
2853Return a pointer to the byte-encoded representation of the SV, and set *lp
1e54db1a 2854to its length. May cause the SV to be downgraded from UTF-8 as a
645c22ef
DM
2855side-effect.
2856
2857Usually accessed via the C<SvPVbyte> macro.
2858
2859=cut
2860*/
2861
7340a771
GS
2862char *
2863Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2864{
0875d2fe 2865 sv_utf8_downgrade(sv,0);
97972285 2866 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771
GS
2867}
2868
645c22ef 2869/*
035cbb0e
RGS
2870=for apidoc sv_2pvutf8
2871
2872Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
2873to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
2874
2875Usually accessed via the C<SvPVutf8> macro.
2876
2877=cut
2878*/
645c22ef 2879
7340a771
GS
2880char *
2881Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2882{
035cbb0e
RGS
2883 sv_utf8_upgrade(sv);
2884 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
7340a771 2885}
1c846c1f 2886
7ee2227d 2887
645c22ef
DM
2888/*
2889=for apidoc sv_2bool
2890
2891This function is only called on magical items, and is only used by
8cf8f3d1 2892sv_true() or its macro equivalent.
645c22ef
DM
2893
2894=cut
2895*/
2896
463ee0b2 2897bool
864dbfa3 2898Perl_sv_2bool(pTHX_ register SV *sv)
463ee0b2 2899{
97aff369 2900 dVAR;
5b295bef 2901 SvGETMAGIC(sv);
463ee0b2 2902
a0d0e21e
LW
2903 if (!SvOK(sv))
2904 return 0;
2905 if (SvROK(sv)) {
fabdb6c0
AL
2906 if (SvAMAGIC(sv)) {
2907 SV * const tmpsv = AMG_CALLun(sv,bool_);
2908 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2909 return (bool)SvTRUE(tmpsv);
2910 }
2911 return SvRV(sv) != 0;
a0d0e21e 2912 }
463ee0b2 2913 if (SvPOKp(sv)) {
53c1dcc0
AL
2914 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
2915 if (Xpvtmp &&
339049b0 2916 (*sv->sv_u.svu_pv > '0' ||
11343788 2917 Xpvtmp->xpv_cur > 1 ||
339049b0 2918 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
463ee0b2
LW
2919 return 1;
2920 else
2921 return 0;
2922 }
2923 else {
2924 if (SvIOKp(sv))
2925 return SvIVX(sv) != 0;
2926 else {
2927 if (SvNOKp(sv))
2928 return SvNVX(sv) != 0.0;
180488f8 2929 else {
f7877b28 2930 if (isGV_with_GP(sv))
180488f8
NC
2931 return TRUE;
2932 else
2933 return FALSE;
2934 }
463ee0b2
LW
2935 }
2936 }
79072805
LW
2937}
2938
c461cf8f
JH
2939/*
2940=for apidoc sv_utf8_upgrade
2941
78ea37eb 2942Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 2943Forces the SV to string form if it is not already.
4411f3b6
NIS
2944Always sets the SvUTF8 flag to avoid future validity checks even
2945if all the bytes have hibit clear.
c461cf8f 2946
13a6c0e0
JH
2947This is not as a general purpose byte encoding to Unicode interface:
2948use the Encode extension for that.
2949
8d6d96c1
HS
2950=for apidoc sv_utf8_upgrade_flags
2951
78ea37eb 2952Converts the PV of an SV to its UTF-8-encoded form.
645c22ef 2953Forces the SV to string form if it is not already.
8d6d96c1
HS
2954Always sets the SvUTF8 flag to avoid future validity checks even
2955if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
2956will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
2957C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
2958
13a6c0e0
JH
2959This is not as a general purpose byte encoding to Unicode interface:
2960use the Encode extension for that.
2961
8d6d96c1
HS
2962=cut
2963*/
2964
2965STRLEN
2966Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
2967{
97aff369 2968 dVAR;
808c356f
RGS
2969 if (sv == &PL_sv_undef)
2970 return 0;
e0e62c2a
NIS
2971 if (!SvPOK(sv)) {
2972 STRLEN len = 0;
d52b7888
NC
2973 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
2974 (void) sv_2pv_flags(sv,&len, flags);
2975 if (SvUTF8(sv))
2976 return len;
2977 } else {
2978 (void) SvPV_force(sv,len);
2979 }
e0e62c2a 2980 }
4411f3b6 2981
f5cee72b 2982 if (SvUTF8(sv)) {
5fec3b1d 2983 return SvCUR(sv);
f5cee72b 2984 }
5fec3b1d 2985
765f542d
NC
2986 if (SvIsCOW(sv)) {
2987 sv_force_normal_flags(sv, 0);
db42d148
NIS
2988 }
2989
88632417 2990 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
799ef3cb 2991 sv_recode_to_utf8(sv, PL_encoding);
9f4817db 2992 else { /* Assume Latin-1/EBCDIC */
c4e7c712
NC
2993 /* This function could be much more efficient if we
2994 * had a FLAG in SVs to signal if there are any hibit
2995 * chars in the PV. Given that there isn't such a flag
2996 * make the loop as fast as possible. */
00b6aa41 2997 const U8 * const s = (U8 *) SvPVX_const(sv);
c4420975 2998 const U8 * const e = (U8 *) SvEND(sv);
93524f2b 2999 const U8 *t = s;
c4e7c712
NC
3000
3001 while (t < e) {
53c1dcc0 3002 const U8 ch = *t++;
00b6aa41
AL
3003 /* Check for hi bit */
3004 if (!NATIVE_IS_INVARIANT(ch)) {
3005 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3006 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
3007
3008 SvPV_free(sv); /* No longer using what was there before. */
3009 SvPV_set(sv, (char*)recoded);
3010 SvCUR_set(sv, len - 1);
3011 SvLEN_set(sv, len); /* No longer know the real size. */
c4e7c712 3012 break;
00b6aa41 3013 }
c4e7c712
NC
3014 }
3015 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3016 SvUTF8_on(sv);
560a288e 3017 }
4411f3b6 3018 return SvCUR(sv);
560a288e
GS
3019}
3020
c461cf8f
JH
3021/*
3022=for apidoc sv_utf8_downgrade
3023
78ea37eb
TS
3024Attempts to convert the PV of an SV from characters to bytes.
3025If the PV contains a character beyond byte, this conversion will fail;
3026in this case, either returns false or, if C<fail_ok> is not
c461cf8f
JH
3027true, croaks.
3028
13a6c0e0
JH
3029This is not as a general purpose Unicode to byte encoding interface:
3030use the Encode extension for that.
3031
c461cf8f
JH
3032=cut
3033*/
3034
560a288e
GS
3035bool
3036Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3037{
97aff369 3038 dVAR;
78ea37eb 3039 if (SvPOKp(sv) && SvUTF8(sv)) {
fa301091 3040 if (SvCUR(sv)) {
03cfe0ae 3041 U8 *s;
652088fc 3042 STRLEN len;
fa301091 3043
765f542d
NC
3044 if (SvIsCOW(sv)) {
3045 sv_force_normal_flags(sv, 0);
3046 }
03cfe0ae
NIS
3047 s = (U8 *) SvPV(sv, len);
3048 if (!utf8_to_bytes(s, &len)) {
fa301091
JH
3049 if (fail_ok)
3050 return FALSE;
3051 else {
3052 if (PL_op)
3053 Perl_croak(aTHX_ "Wide character in %s",
53e06cf0 3054 OP_DESC(PL_op));
fa301091
JH
3055 else
3056 Perl_croak(aTHX_ "Wide character");
3057 }
4b3603a4 3058 }
b162af07 3059 SvCUR_set(sv, len);
67e989fb 3060 }
560a288e 3061 }
ffebcc3e 3062 SvUTF8_off(sv);
560a288e
GS
3063 return TRUE;
3064}
3065
c461cf8f
JH
3066/*
3067=for apidoc sv_utf8_encode
3068
78ea37eb
TS
3069Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3070flag off so that it looks like octets again.
c461cf8f
JH
3071
3072=cut
3073*/
3074
560a288e
GS
3075void
3076Perl_sv_utf8_encode(pTHX_ register SV *sv)
3077{
4c94c214
NC
3078 if (SvIsCOW(sv)) {
3079 sv_force_normal_flags(sv, 0);
3080 }
3081 if (SvREADONLY(sv)) {
3082 Perl_croak(aTHX_ PL_no_modify);
3083 }
a5f5288a 3084 (void) sv_utf8_upgrade(sv);
560a288e
GS
3085 SvUTF8_off(sv);
3086}
3087
4411f3b6
NIS
3088/*
3089=for apidoc sv_utf8_decode
3090
78ea37eb
TS
3091If the PV of the SV is an octet sequence in UTF-8
3092and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3093so that it looks like a character. If the PV contains only single-byte
3094characters, the C<SvUTF8> flag stays being off.
3095Scans PV for validity and returns false if the PV is invalid UTF-8.
4411f3b6
NIS
3096
3097=cut
3098*/
3099
560a288e
GS
3100bool
3101Perl_sv_utf8_decode(pTHX_ register SV *sv)
3102{
78ea37eb 3103 if (SvPOKp(sv)) {
93524f2b
NC
3104 const U8 *c;
3105 const U8 *e;
9cbac4c7 3106
645c22ef
DM
3107 /* The octets may have got themselves encoded - get them back as
3108 * bytes
3109 */
3110 if (!sv_utf8_downgrade(sv, TRUE))
560a288e
GS
3111 return FALSE;
3112
3113 /* it is actually just a matter of turning the utf8 flag on, but
3114 * we want to make sure everything inside is valid utf8 first.
3115 */
93524f2b 3116 c = (const U8 *) SvPVX_const(sv);
63cd0674 3117 if (!is_utf8_string(c, SvCUR(sv)+1))
67e989fb 3118 return FALSE;
93524f2b 3119 e = (const U8 *) SvEND(sv);
511c2ff0 3120 while (c < e) {
b64e5050 3121 const U8 ch = *c++;
c4d5f83a 3122 if (!UTF8_IS_INVARIANT(ch)) {
67e989fb
JH
3123 SvUTF8_on(sv);
3124 break;
3125 }
560a288e 3126 }
560a288e
GS
3127 }
3128 return TRUE;
3129}
3130
954c1994
GS
3131/*
3132=for apidoc sv_setsv
3133
645c22ef
DM
3134Copies the contents of the source SV C<ssv> into the destination SV
3135C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3136function if the source SV needs to be reused. Does not handle 'set' magic.
3137Loosely speaking, it performs a copy-by-value, obliterating any previous
3138content of the destination.
3139
3140You probably want to use one of the assortment of wrappers, such as
3141C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3142C<SvSetMagicSV_nosteal>.
3143
8d6d96c1
HS
3144=for apidoc sv_setsv_flags
3145
645c22ef
DM
3146Copies the contents of the source SV C<ssv> into the destination SV
3147C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3148function if the source SV needs to be reused. Does not handle 'set' magic.
3149Loosely speaking, it performs a copy-by-value, obliterating any previous
3150content of the destination.
3151If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
5fcdf167
NC
3152C<ssv> if appropriate, else not. If the C<flags> parameter has the
3153C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3154and C<sv_setsv_nomg> are implemented in terms of this function.
645c22ef
DM
3155
3156You probably want to use one of the assortment of wrappers, such as
3157C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3158C<SvSetMagicSV_nosteal>.
3159
3160This is the primary function for copying scalars, and most other
3161copy-ish functions and macros use this underneath.
8d6d96c1
HS
3162
3163=cut
3164*/
3165
5d0301b7 3166static void
2eb42952 3167S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype)
5d0301b7
NC
3168{
3169 if (dtype != SVt_PVGV) {
3170 const char * const name = GvNAME(sstr);
3171 const STRLEN len = GvNAMELEN(sstr);
3172 /* don't upgrade SVt_PVLV: it can hold a glob */
f7877b28
NC
3173 if (dtype != SVt_PVLV) {
3174 if (dtype >= SVt_PV) {
3175 SvPV_free(dstr);
3176 SvPV_set(dstr, 0);
3177 SvLEN_set(dstr, 0);
3178 SvCUR_set(dstr, 0);
3179 }
5d0301b7 3180 sv_upgrade(dstr, SVt_PVGV);
dedf8e73
NC
3181 (void)SvOK_off(dstr);
3182 SvSCREAM_on(dstr);
f7877b28 3183 }
5d0301b7
NC
3184 GvSTASH(dstr) = GvSTASH(sstr);
3185 if (GvSTASH(dstr))
3186 Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
ae8cc45f 3187 gv_name_set((GV *)dstr, name, len, GV_ADD);
5d0301b7
NC
3188 SvFAKE_on(dstr); /* can coerce to non-glob */
3189 }
3190
3191#ifdef GV_UNIQUE_CHECK
3192 if (GvUNIQUE((GV*)dstr)) {
3193 Perl_croak(aTHX_ PL_no_modify);
3194 }
3195#endif
3196
f7877b28
NC
3197 gp_free((GV*)dstr);
3198 SvSCREAM_off(dstr);
5d0301b7 3199 (void)SvOK_off(dstr);
f7877b28 3200 SvSCREAM_on(dstr);
dedf8e73 3201 GvINTRO_off(dstr); /* one-shot flag */
5d0301b7
NC
3202 GvGP(dstr) = gp_ref(GvGP(sstr));
3203 if (SvTAINTED(sstr))
3204 SvTAINT(dstr);
3205 if (GvIMPORTED(dstr) != GVf_IMPORTED
3206 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3207 {
3208 GvIMPORTED_on(dstr);
3209 }
3210 GvMULTI_on(dstr);
3211 return;
3212}
3213
b8473700 3214static void
2eb42952 3215S_glob_assign_ref(pTHX_ SV *dstr, SV *sstr) {
b8473700
NC
3216 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3217 SV *dref = NULL;
3218 const int intro = GvINTRO(dstr);
2440974c 3219 SV **location;
3386d083 3220 U8 import_flag = 0;
27242d61
NC
3221 const U32 stype = SvTYPE(sref);
3222
b8473700
NC
3223
3224#ifdef GV_UNIQUE_CHECK
3225 if (GvUNIQUE((GV*)dstr)) {
3226 Perl_croak(aTHX_ PL_no_modify);
3227 }
3228#endif
3229
3230 if (intro) {
3231 GvINTRO_off(dstr); /* one-shot flag */
3232 GvLINE(dstr) = CopLINE(PL_curcop);
3233 GvEGV(dstr) = (GV*)dstr;
3234 }
3235 GvMULTI_on(dstr);
27242d61 3236 switch (stype) {
b8473700 3237 case SVt_PVCV:
27242d61
NC
3238 location = (SV **) &GvCV(dstr);
3239 import_flag = GVf_IMPORTED_CV;
3240 goto common;
3241 case SVt_PVHV:
3242 location = (SV **) &GvHV(dstr);
3243 import_flag = GVf_IMPORTED_HV;
3244 goto common;
3245 case SVt_PVAV:
3246 location = (SV **) &GvAV(dstr);
3247 import_flag = GVf_IMPORTED_AV;
3248 goto common;
3249 case SVt_PVIO:
3250 location = (SV **) &GvIOp(dstr);
3251 goto common;
3252 case SVt_PVFM:
3253 location = (SV **) &GvFORM(dstr);
3254 default:
3255 location = &GvSV(dstr);
3256 import_flag = GVf_IMPORTED_SV;
3257 common:
b8473700 3258 if (intro) {
27242d61
NC
3259 if (stype == SVt_PVCV) {
3260 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3261 SvREFCNT_dec(GvCV(dstr));
3262 GvCV(dstr) = NULL;
3263 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3264 PL_sub_generation++;
3265 }
b8473700 3266 }
27242d61 3267 SAVEGENERICSV(*location);
b8473700
NC
3268 }
3269 else
27242d61
NC
3270 dref = *location;
3271 if (stype == SVt_PVCV && *location != sref) {
3272 CV* const cv = (CV*)*location;
b8473700
NC
3273 if (cv) {
3274 if (!GvCVGEN((GV*)dstr) &&
3275 (CvROOT(cv) || CvXSUB(cv)))
3276 {
3277 /* Redefining a sub - warning is mandatory if
3278 it was a const and its value changed. */
3279 if (CvCONST(cv) && CvCONST((CV*)sref)
3280 && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
6f207bd3 3281 NOOP;
b8473700
NC
3282 /* They are 2 constant subroutines generated from
3283 the same constant. This probably means that
3284 they are really the "same" proxy subroutine
3285 instantiated in 2 places. Most likely this is
3286 when a constant is exported twice. Don't warn.
3287 */
3288 }
3289 else if (ckWARN(WARN_REDEFINE)
3290 || (CvCONST(cv)
3291 && (!CvCONST((CV*)sref)
3292 || sv_cmp(cv_const_sv(cv),
3293 cv_const_sv((CV*)sref))))) {
3294 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10edeb5d
JH
3295 (const char *)
3296 (CvCONST(cv)
3297 ? "Constant subroutine %s::%s redefined"
3298 : "Subroutine %s::%s redefined"),
b8473700
NC
3299 HvNAME_get(GvSTASH((GV*)dstr)),
3300 GvENAME((GV*)dstr));
3301 }
3302 }
3303 if (!intro)
cbf82dd0
NC
3304 cv_ckproto_len(cv, (GV*)dstr,
3305 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3306 SvPOK(sref) ? SvCUR(sref) : 0);
b8473700 3307 }
b8473700
NC
3308 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3309 GvASSUMECV_on(dstr);
3310 PL_sub_generation++;
3311 }
2440974c 3312 *location = sref;
3386d083
NC
3313 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3314 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3315 GvFLAGS(dstr) |= import_flag;
b8473700
NC
3316 }
3317 break;
3318 }
b37c2d43 3319 SvREFCNT_dec(dref);
b8473700
NC
3320 if (SvTAINTED(sstr))
3321 SvTAINT(dstr);
3322 return;
3323}
3324
8d6d96c1
HS
3325void
3326Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3327{
97aff369 3328 dVAR;
8990e307
LW
3329 register U32 sflags;
3330 register int dtype;
42d0e0b7 3331 register svtype stype;
463ee0b2 3332
79072805
LW
3333 if (sstr == dstr)
3334 return;
29f4f0ab
NC
3335
3336 if (SvIS_FREED(dstr)) {
3337 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3338 " to a freed scalar %p", sstr, dstr);
3339 }
765f542d 3340 SV_CHECK_THINKFIRST_COW_DROP(dstr);
79072805 3341 if (!sstr)
3280af22 3342 sstr = &PL_sv_undef;
29f4f0ab
NC
3343 if (SvIS_FREED(sstr)) {
3344 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p", sstr,
3345 dstr);
3346 }
8990e307
LW
3347 stype = SvTYPE(sstr);
3348 dtype = SvTYPE(dstr);
79072805 3349
a0d0e21e 3350 SvAMAGIC_off(dstr);
7a5fa8a2 3351 if ( SvVOK(dstr) )
ece467f9
JP
3352 {
3353 /* need to nuke the magic */
3354 mg_free(dstr);
3355 SvRMAGICAL_off(dstr);
3356 }
9e7bc3e8 3357
463ee0b2 3358 /* There's a lot of redundancy below but we're going for speed here */
79072805 3359
8990e307 3360 switch (stype) {
79072805 3361 case SVt_NULL:
aece5585 3362 undef_sstr:
20408e3c
GS
3363 if (dtype != SVt_PVGV) {
3364 (void)SvOK_off(dstr);
3365 return;
3366 }
3367 break;
463ee0b2 3368 case SVt_IV:
aece5585
GA
3369 if (SvIOK(sstr)) {
3370 switch (dtype) {
3371 case SVt_NULL:
8990e307 3372 sv_upgrade(dstr, SVt_IV);
aece5585
GA
3373 break;
3374 case SVt_NV:
aece5585
GA
3375 case SVt_RV:
3376 case SVt_PV:
a0d0e21e 3377 sv_upgrade(dstr, SVt_PVIV);
aece5585
GA
3378 break;
3379 }
3380 (void)SvIOK_only(dstr);
45977657 3381 SvIV_set(dstr, SvIVX(sstr));
25da4f38
IZ
3382 if (SvIsUV(sstr))
3383 SvIsUV_on(dstr);
37c25af0
NC
3384 /* SvTAINTED can only be true if the SV has taint magic, which in
3385 turn means that the SV type is PVMG (or greater). This is the
3386 case statement for SVt_IV, so this cannot be true (whatever gcov
3387 may say). */
3388 assert(!SvTAINTED(sstr));
aece5585 3389 return;
8990e307 3390 }
aece5585
GA
3391 goto undef_sstr;
3392
463ee0b2 3393 case SVt_NV:
aece5585
GA
3394 if (SvNOK(sstr)) {
3395 switch (dtype) {
3396 case SVt_NULL:
3397 case SVt_IV:
8990e307 3398 sv_upgrade(dstr, SVt_NV);
aece5585
GA
3399 break;
3400 case SVt_RV:
3401 case SVt_PV:
3402 case SVt_PVIV:
a0d0e21e 3403 sv_upgrade(dstr, SVt_PVNV);
aece5585
GA
3404 break;
3405 }
9d6ce603 3406 SvNV_set(dstr, SvNVX(sstr));
aece5585 3407 (void)SvNOK_only(dstr);
37c25af0
NC
3408 /* SvTAINTED can only be true if the SV has taint magic, which in
3409 turn means that the SV type is PVMG (or greater). This is the
3410 case statement for SVt_NV, so this cannot be true (whatever gcov
3411 may say). */
3412 assert(!SvTAINTED(sstr));
aece5585 3413 return;
8990e307 3414 }
aece5585
GA
3415 goto undef_sstr;
3416
ed6116ce 3417 case SVt_RV:
8990e307 3418 if (dtype < SVt_RV)
ed6116ce 3419 sv_upgrade(dstr, SVt_RV);
ed6116ce 3420 break;
fc36a67e 3421 case SVt_PVFM:
f8c7b90f 3422#ifdef PERL_OLD_COPY_ON_WRITE
d89fc664
NC
3423 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3424 if (dtype < SVt_PVIV)
3425 sv_upgrade(dstr, SVt_PVIV);
3426 break;
3427 }
3428 /* Fall through */
3429#endif
3430 case SVt_PV:
8990e307 3431 if (dtype < SVt_PV)
463ee0b2 3432 sv_upgrade(dstr, SVt_PV);
463ee0b2
LW
3433 break;
3434 case SVt_PVIV:
8990e307 3435 if (dtype < SVt_PVIV)
463ee0b2 3436 sv_upgrade(dstr, SVt_PVIV);
463ee0b2
LW
3437 break;
3438 case SVt_PVNV:
8990e307 3439 if (dtype < SVt_PVNV)
463ee0b2 3440 sv_upgrade(dstr, SVt_PVNV);
463ee0b2 3441 break;
489f7bfe 3442 default:
a3b680e6
AL
3443 {
3444 const char * const type = sv_reftype(sstr,0);
533c011a 3445 if (PL_op)
a3b680e6 3446 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
4633a7c4 3447 else
a3b680e6
AL
3448 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3449 }
4633a7c4
LW
3450 break;
3451
79072805 3452 case SVt_PVGV:
8990e307 3453 if (dtype <= SVt_PVGV) {
d4c19fe8 3454 glob_assign_glob(dstr, sstr, dtype);
b8c701c1 3455 return;
79072805 3456 }
5f66b61c 3457 /*FALLTHROUGH*/
79072805 3458
489f7bfe
NC
3459 case SVt_PVMG:
3460 case SVt_PVLV:
3461 case SVt_PVBM:
8d6d96c1 3462 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
973f89ab 3463 mg_get(sstr);
1d9c78c6 3464 if (SvTYPE(sstr) != stype) {
973f89ab 3465 stype = SvTYPE(sstr);
b8c701c1 3466 if (stype == SVt_PVGV && dtype <= SVt_PVGV) {
d4c19fe8 3467 glob_assign_glob(dstr, sstr, dtype);
b8c701c1
NC
3468 return;
3469 }
973f89ab
CS
3470 }
3471 }
ded42b9f 3472 if (stype == SVt_PVLV)
862a34c6 3473 SvUPGRADE(dstr, SVt_PVNV);
ded42b9f 3474 else
42d0e0b7 3475 SvUPGRADE(dstr, (svtype)stype);
79072805
LW
3476 }
3477
ff920335
NC
3478 /* dstr may have been upgraded. */
3479 dtype = SvTYPE(dstr);
8990e307
LW
3480 sflags = SvFLAGS(sstr);
3481
85324b4d
NC
3482 if (dtype == SVt_PVCV) {
3483 /* Assigning to a subroutine sets the prototype. */
3484 if (SvOK(sstr)) {
3485 STRLEN len;
3486 const char *const ptr = SvPV_const(sstr, len);
3487
3488 SvGROW(dstr, len + 1);
3489 Copy(ptr, SvPVX(dstr), len + 1, char);
3490 SvCUR_set(dstr, len);
fcddd32e 3491 SvPOK_only(dstr);
85324b4d
NC
3492 } else {
3493 SvOK_off(dstr);
3494 }
3495 } else if (sflags & SVf_ROK) {
a9fe210d 3496 if (dtype == SVt_PVGV && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
acaa9288
NC
3497 sstr = SvRV(sstr);
3498 if (sstr == dstr) {
3499 if (GvIMPORTED(dstr) != GVf_IMPORTED
3500 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3501 {
3502 GvIMPORTED_on(dstr);
3503 }
3504 GvMULTI_on(dstr);
3505 return;
3506 }
d4c19fe8 3507 glob_assign_glob(dstr, sstr, dtype);
acaa9288
NC
3508 return;
3509 }
3510
8990e307 3511 if (dtype >= SVt_PV) {
b8c701c1 3512 if (dtype == SVt_PVGV) {
d4c19fe8 3513 glob_assign_ref(dstr, sstr);
b8c701c1
NC
3514 return;
3515 }
3f7c398e 3516 if (SvPVX_const(dstr)) {
8bd4d4c5 3517 SvPV_free(dstr);
b162af07
SP
3518 SvLEN_set(dstr, 0);
3519 SvCUR_set(dstr, 0);
a0d0e21e 3520 }
8990e307 3521 }
a0d0e21e 3522 (void)SvOK_off(dstr);
b162af07 3523 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
96d4b0ee 3524 SvFLAGS(dstr) |= sflags & SVf_ROK;
dfd48732
NC
3525 assert(!(sflags & SVp_NOK));
3526 assert(!(sflags & SVp_IOK));
3527 assert(!(sflags & SVf_NOK));
3528 assert(!(sflags & SVf_IOK));
ed6116ce 3529 }
c0c44674
NC
3530 else if (dtype == SVt_PVGV) {
3531 if (!(sflags & SVf_OK)) {
3532 if (ckWARN(WARN_MISC))
3533 Perl_warner(aTHX_ packWARN(WARN_MISC),
3534 "Undefined value assigned to typeglob");
3535 }
3536 else {
3537 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
3538 if (dstr != (SV*)gv) {
3539 if (GvGP(dstr))
3540 gp_free((GV*)dstr);
3541 GvGP(dstr) = gp_ref(GvGP(gv));
3542 }
3543 }
3544 }
8990e307 3545 else if (sflags & SVp_POK) {
765f542d 3546 bool isSwipe = 0;
79072805
LW
3547
3548 /*
3549 * Check to see if we can just swipe the string. If so, it's a
3550 * possible small lose on short strings, but a big win on long ones.
3f7c398e
SP
3551 * It might even be a win on short strings if SvPVX_const(dstr)
3552 * has to be allocated and SvPVX_const(sstr) has to be freed.
34482cd6
NC
3553 * Likewise if we can set up COW rather than doing an actual copy, we
3554 * drop to the else clause, as the swipe code and the COW setup code
3555 * have much in common.
79072805
LW
3556 */
3557
120fac95
NC
3558 /* Whichever path we take through the next code, we want this true,
3559 and doing it now facilitates the COW check. */
3560 (void)SvPOK_only(dstr);
3561
765f542d 3562 if (
34482cd6
NC
3563 /* If we're already COW then this clause is not true, and if COW
3564 is allowed then we drop down to the else and make dest COW
3565 with us. If caller hasn't said that we're allowed to COW
3566 shared hash keys then we don't do the COW setup, even if the
3567 source scalar is a shared hash key scalar. */
3568 (((flags & SV_COW_SHARED_HASH_KEYS)
3569 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
3570 : 1 /* If making a COW copy is forbidden then the behaviour we
3571 desire is as if the source SV isn't actually already
3572 COW, even if it is. So we act as if the source flags
3573 are not COW, rather than actually testing them. */
3574 )
f8c7b90f 3575#ifndef PERL_OLD_COPY_ON_WRITE
34482cd6
NC
3576 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
3577 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
3578 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
3579 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
3580 but in turn, it's somewhat dead code, never expected to go
3581 live, but more kept as a placeholder on how to do it better
3582 in a newer implementation. */
3583 /* If we are COW and dstr is a suitable target then we drop down
3584 into the else and make dest a COW of us. */
b8f9541a
NC
3585 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3586#endif
3587 )
765f542d 3588 &&
765f542d
NC
3589 !(isSwipe =
3590 (sflags & SVs_TEMP) && /* slated for free anyway? */
3591 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
5fcdf167
NC
3592 (!(flags & SV_NOSTEAL)) &&
3593 /* and we're allowed to steal temps */
765f542d
NC
3594 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3595 SvLEN(sstr) && /* and really is a string */
645c22ef 3596 /* and won't be needed again, potentially */
765f542d 3597 !(PL_op && PL_op->op_type == OP_AASSIGN))
f8c7b90f 3598#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 3599 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
120fac95 3600 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
765f542d
NC
3601 && SvTYPE(sstr) >= SVt_PVIV)
3602#endif
3603 ) {
3604 /* Failed the swipe test, and it's not a shared hash key either.
3605 Have to copy the string. */
3606 STRLEN len = SvCUR(sstr);
3607 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3f7c398e 3608 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
765f542d
NC
3609 SvCUR_set(dstr, len);
3610 *SvEND(dstr) = '\0';
765f542d 3611 } else {
f8c7b90f 3612 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
765f542d 3613 be true in here. */
765f542d
NC
3614 /* Either it's a shared hash key, or it's suitable for
3615 copy-on-write or we can swipe the string. */
46187eeb 3616 if (DEBUG_C_TEST) {
ed252734 3617 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
e419cbc5
NC
3618 sv_dump(sstr);
3619 sv_dump(dstr);
46187eeb 3620 }
f8c7b90f 3621#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
3622 if (!isSwipe) {
3623 /* I believe I should acquire a global SV mutex if
3624 it's a COW sv (not a shared hash key) to stop
3625 it going un copy-on-write.
3626 If the source SV has gone un copy on write between up there
3627 and down here, then (assert() that) it is of the correct
3628 form to make it copy on write again */
3629 if ((sflags & (SVf_FAKE | SVf_READONLY))
3630 != (SVf_FAKE | SVf_READONLY)) {
3631 SvREADONLY_on(sstr);
3632 SvFAKE_on(sstr);
3633 /* Make the source SV into a loop of 1.
3634 (about to become 2) */
a29f6d03 3635 SV_COW_NEXT_SV_SET(sstr, sstr);
765f542d
NC
3636 }
3637 }
3638#endif
3639 /* Initial code is common. */
94010e71
NC
3640 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
3641 SvPV_free(dstr);
79072805 3642 }
765f542d 3643
765f542d
NC
3644 if (!isSwipe) {
3645 /* making another shared SV. */
3646 STRLEN cur = SvCUR(sstr);
3647 STRLEN len = SvLEN(sstr);
f8c7b90f 3648#ifdef PERL_OLD_COPY_ON_WRITE
765f542d 3649 if (len) {
b8f9541a 3650 assert (SvTYPE(dstr) >= SVt_PVIV);
765f542d
NC
3651 /* SvIsCOW_normal */
3652 /* splice us in between source and next-after-source. */
a29f6d03
NC
3653 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3654 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 3655 SvPV_set(dstr, SvPVX_mutable(sstr));
a604c751
NC
3656 } else
3657#endif
3658 {
765f542d 3659 /* SvIsCOW_shared_hash */
46187eeb
NC
3660 DEBUG_C(PerlIO_printf(Perl_debug_log,
3661 "Copy on write: Sharing hash\n"));
b8f9541a 3662
bdd68bc3 3663 assert (SvTYPE(dstr) >= SVt_PV);
765f542d 3664 SvPV_set(dstr,
d1db91c6 3665 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
bdd68bc3 3666 }
87a1ef3d
SP
3667 SvLEN_set(dstr, len);
3668 SvCUR_set(dstr, cur);
765f542d
NC
3669 SvREADONLY_on(dstr);
3670 SvFAKE_on(dstr);
3671 /* Relesase a global SV mutex. */
3672 }
3673 else
765f542d 3674 { /* Passes the swipe test. */
78d1e721 3675 SvPV_set(dstr, SvPVX_mutable(sstr));
765f542d
NC
3676 SvLEN_set(dstr, SvLEN(sstr));
3677 SvCUR_set(dstr, SvCUR(sstr));
3678
3679 SvTEMP_off(dstr);
3680 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
6136c704 3681 SvPV_set(sstr, NULL);
765f542d
NC
3682 SvLEN_set(sstr, 0);
3683 SvCUR_set(sstr, 0);
3684 SvTEMP_off(sstr);
3685 }
3686 }
8990e307 3687 if (sflags & SVp_NOK) {
9d6ce603 3688 SvNV_set(dstr, SvNVX(sstr));
79072805 3689 }
8990e307 3690 if (sflags & SVp_IOK) {
23525414
NC
3691 SvRELEASE_IVX(dstr);
3692 SvIV_set(dstr, SvIVX(sstr));
3693 /* Must do this otherwise some other overloaded use of 0x80000000
3694 gets confused. I guess SVpbm_VALID */
2b1c7e3e 3695 if (sflags & SVf_IVisUV)
25da4f38 3696 SvIsUV_on(dstr);
79072805 3697 }
96d4b0ee 3698 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4f2da183 3699 {
b0a11fe1 3700 const MAGIC * const smg = SvVSTRING_mg(sstr);
4f2da183
NC
3701 if (smg) {
3702 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3703 smg->mg_ptr, smg->mg_len);
3704 SvRMAGICAL_on(dstr);
3705 }
7a5fa8a2 3706 }
79072805 3707 }
5d581361 3708 else if (sflags & (SVp_IOK|SVp_NOK)) {
c2468cc7 3709 (void)SvOK_off(dstr);
96d4b0ee 3710 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
5d581361
NC
3711 if (sflags & SVp_IOK) {
3712 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3713 SvIV_set(dstr, SvIVX(sstr));
3714 }
3332b3c1 3715 if (sflags & SVp_NOK) {
9d6ce603 3716 SvNV_set(dstr, SvNVX(sstr));
3332b3c1
JH
3717 }
3718 }
79072805 3719 else {
f7877b28 3720 if (isGV_with_GP(sstr)) {
180488f8
NC
3721 /* This stringification rule for globs is spread in 3 places.
3722 This feels bad. FIXME. */
3723 const U32 wasfake = sflags & SVf_FAKE;
3724
3725 /* FAKE globs can get coerced, so need to turn this off
3726 temporarily if it is on. */
3727 SvFAKE_off(sstr);
3728 gv_efullname3(dstr, (GV *)sstr, "*");
3729 SvFLAGS(sstr) |= wasfake;
3730 }
20408e3c
GS
3731 else
3732 (void)SvOK_off(dstr);
a0d0e21e 3733 }
27c9684d
AP
3734 if (SvTAINTED(sstr))
3735 SvTAINT(dstr);
79072805
LW
3736}
3737
954c1994
GS
3738/*
3739=for apidoc sv_setsv_mg
3740
3741Like C<sv_setsv>, but also handles 'set' magic.
3742
3743=cut
3744*/
3745
79072805 3746void
864dbfa3 3747Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
ef50df4b
GS
3748{
3749 sv_setsv(dstr,sstr);
3750 SvSETMAGIC(dstr);
3751}
3752
f8c7b90f 3753#ifdef PERL_OLD_COPY_ON_WRITE
ed252734
NC
3754SV *
3755Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3756{
3757 STRLEN cur = SvCUR(sstr);
3758 STRLEN len = SvLEN(sstr);
3759 register char *new_pv;
3760
3761 if (DEBUG_C_TEST) {
3762 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
3763 sstr, dstr);
3764 sv_dump(sstr);
3765 if (dstr)
3766 sv_dump(dstr);
3767 }
3768
3769 if (dstr) {
3770 if (SvTHINKFIRST(dstr))
3771 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3f7c398e
SP
3772 else if (SvPVX_const(dstr))
3773 Safefree(SvPVX_const(dstr));
ed252734
NC
3774 }
3775 else
3776 new_SV(dstr);
862a34c6 3777 SvUPGRADE(dstr, SVt_PVIV);
ed252734
NC
3778
3779 assert (SvPOK(sstr));
3780 assert (SvPOKp(sstr));
3781 assert (!SvIOK(sstr));
3782 assert (!SvIOKp(sstr));
3783 assert (!SvNOK(sstr));
3784 assert (!SvNOKp(sstr));
3785
3786 if (SvIsCOW(sstr)) {
3787
3788 if (SvLEN(sstr) == 0) {
3789 /* source is a COW shared hash key. */
ed252734
NC
3790 DEBUG_C(PerlIO_printf(Perl_debug_log,
3791 "Fast copy on write: Sharing hash\n"));
d1db91c6 3792 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
ed252734
NC
3793 goto common_exit;
3794 }
3795 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3796 } else {
3797 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
862a34c6 3798 SvUPGRADE(sstr, SVt_PVIV);
ed252734
NC
3799 SvREADONLY_on(sstr);
3800 SvFAKE_on(sstr);
3801 DEBUG_C(PerlIO_printf(Perl_debug_log,
3802 "Fast copy on write: Converting sstr to COW\n"));
3803 SV_COW_NEXT_SV_SET(dstr, sstr);
3804 }
3805 SV_COW_NEXT_SV_SET(sstr, dstr);
940132f3 3806 new_pv = SvPVX_mutable(sstr);
ed252734
NC
3807
3808 common_exit:
3809 SvPV_set(dstr, new_pv);
3810 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
3811 if (SvUTF8(sstr))
3812 SvUTF8_on(dstr);
87a1ef3d
SP
3813 SvLEN_set(dstr, len);
3814 SvCUR_set(dstr, cur);
ed252734
NC
3815 if (DEBUG_C_TEST) {
3816 sv_dump(dstr);
3817 }
3818 return dstr;
3819}
3820#endif
3821
954c1994
GS
3822/*
3823=for apidoc sv_setpvn
3824
3825Copies a string into an SV. The C<len> parameter indicates the number of
9e09f5f2
MHM
3826bytes to be copied. If the C<ptr> argument is NULL the SV will become
3827undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
954c1994
GS
3828
3829=cut
3830*/
3831
ef50df4b 3832void
864dbfa3 3833Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
79072805 3834{
97aff369 3835 dVAR;
c6f8c383 3836 register char *dptr;
22c522df 3837
765f542d 3838 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 3839 if (!ptr) {
a0d0e21e 3840 (void)SvOK_off(sv);
463ee0b2
LW
3841 return;
3842 }
22c522df
JH
3843 else {
3844 /* len is STRLEN which is unsigned, need to copy to signed */
a3b680e6 3845 const IV iv = len;
9c5ffd7c
JH
3846 if (iv < 0)
3847 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
22c522df 3848 }
862a34c6 3849 SvUPGRADE(sv, SVt_PV);
c6f8c383 3850
5902b6a9 3851 dptr = SvGROW(sv, len + 1);
c6f8c383
GA
3852 Move(ptr,dptr,len,char);
3853 dptr[len] = '\0';
79072805 3854 SvCUR_set(sv, len);
1aa99e6b 3855 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 3856 SvTAINT(sv);
79072805
LW
3857}
3858
954c1994
GS
3859/*
3860=for apidoc sv_setpvn_mg
3861
3862Like C<sv_setpvn>, but also handles 'set' magic.
3863
3864=cut
3865*/
3866
79072805 3867void
864dbfa3 3868Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
ef50df4b
GS
3869{
3870 sv_setpvn(sv,ptr,len);
3871 SvSETMAGIC(sv);
3872}
3873
954c1994
GS
3874/*
3875=for apidoc sv_setpv
3876
3877Copies a string into an SV. The string must be null-terminated. Does not
3878handle 'set' magic. See C<sv_setpv_mg>.
3879
3880=cut
3881*/
3882
ef50df4b 3883void
864dbfa3 3884Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
79072805 3885{
97aff369 3886 dVAR;
79072805
LW
3887 register STRLEN len;
3888
765f542d 3889 SV_CHECK_THINKFIRST_COW_DROP(sv);
463ee0b2 3890 if (!ptr) {
a0d0e21e 3891 (void)SvOK_off(sv);
463ee0b2
LW
3892 return;
3893 }
79072805 3894 len = strlen(ptr);
862a34c6 3895 SvUPGRADE(sv, SVt_PV);
c6f8c383 3896
79072805 3897 SvGROW(sv, len + 1);
463ee0b2 3898 Move(ptr,SvPVX(sv),len+1,char);
79072805 3899 SvCUR_set(sv, len);
1aa99e6b 3900 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2
LW
3901 SvTAINT(sv);
3902}
3903
954c1994
GS
3904/*
3905=for apidoc sv_setpv_mg
3906
3907Like C<sv_setpv>, but also handles 'set' magic.
3908
3909=cut
3910*/
3911
463ee0b2 3912void
864dbfa3 3913Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
ef50df4b
GS
3914{
3915 sv_setpv(sv,ptr);
3916 SvSETMAGIC(sv);
3917}
3918
954c1994 3919/*
47518d95 3920=for apidoc sv_usepvn_flags
954c1994 3921
794a0d33
JH
3922Tells an SV to use C<ptr> to find its string value. Normally the
3923string is stored inside the SV but sv_usepvn allows the SV to use an
3924outside string. The C<ptr> should point to memory that was allocated
c1c21316
NC
3925by C<malloc>. The string length, C<len>, must be supplied. By default
3926this function will realloc (i.e. move) the memory pointed to by C<ptr>,
794a0d33
JH
3927so that pointer should not be freed or used by the programmer after
3928giving it to sv_usepvn, and neither should any pointers from "behind"
c1c21316
NC
3929that pointer (e.g. ptr + 1) be used.
3930
3931If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
3932SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
cbf82dd0 3933will be skipped. (i.e. the buffer is actually at least 1 byte longer than
c1c21316 3934C<len>, and already meets the requirements for storing in C<SvPVX>)
954c1994
GS
3935
3936=cut
3937*/
3938
ef50df4b 3939void
47518d95 3940Perl_sv_usepvn_flags(pTHX_ SV *sv, char *ptr, STRLEN len, U32 flags)
463ee0b2 3941{
97aff369 3942 dVAR;
1936d2a7 3943 STRLEN allocate;
765f542d 3944 SV_CHECK_THINKFIRST_COW_DROP(sv);
862a34c6 3945 SvUPGRADE(sv, SVt_PV);
463ee0b2 3946 if (!ptr) {
a0d0e21e 3947 (void)SvOK_off(sv);
47518d95
NC
3948 if (flags & SV_SMAGIC)
3949 SvSETMAGIC(sv);
463ee0b2
LW
3950 return;
3951 }
3f7c398e 3952 if (SvPVX_const(sv))
8bd4d4c5 3953 SvPV_free(sv);
1936d2a7 3954
0b7042f9 3955#ifdef DEBUGGING
2e90b4cd
NC
3956 if (flags & SV_HAS_TRAILING_NUL)
3957 assert(ptr[len] == '\0');
0b7042f9 3958#endif
2e90b4cd 3959
c1c21316 3960 allocate = (flags & SV_HAS_TRAILING_NUL)
8f01dc65 3961 ? len + 1: PERL_STRLEN_ROUNDUP(len + 1);
cbf82dd0
NC
3962 if (flags & SV_HAS_TRAILING_NUL) {
3963 /* It's long enough - do nothing.
3964 Specfically Perl_newCONSTSUB is relying on this. */
3965 } else {
69d25b4f 3966#ifdef DEBUGGING
69d25b4f 3967 /* Force a move to shake out bugs in callers. */
10edeb5d 3968 char *new_ptr = (char*)safemalloc(allocate);
69d25b4f
NC
3969 Copy(ptr, new_ptr, len, char);
3970 PoisonFree(ptr,len,char);
3971 Safefree(ptr);
3972 ptr = new_ptr;
69d25b4f 3973#else
10edeb5d 3974 ptr = (char*) saferealloc (ptr, allocate);
69d25b4f 3975#endif
cbf82dd0 3976 }
f880fe2f 3977 SvPV_set(sv, ptr);
463ee0b2 3978 SvCUR_set(sv, len);
1936d2a7 3979 SvLEN_set(sv, allocate);
c1c21316
NC
3980 if (!(flags & SV_HAS_TRAILING_NUL)) {
3981 *SvEND(sv) = '\0';
3982 }
1aa99e6b 3983 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 3984 SvTAINT(sv);
47518d95
NC
3985 if (flags & SV_SMAGIC)
3986 SvSETMAGIC(sv);
ef50df4b
GS
3987}
3988
f8c7b90f 3989#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
3990/* Need to do this *after* making the SV normal, as we need the buffer
3991 pointer to remain valid until after we've copied it. If we let go too early,
3992 another thread could invalidate it by unsharing last of the same hash key
3993 (which it can do by means other than releasing copy-on-write Svs)
3994 or by changing the other copy-on-write SVs in the loop. */
3995STATIC void
bdd68bc3 3996S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, STRLEN len, SV *after)
765f542d
NC
3997{
3998 if (len) { /* this SV was SvIsCOW_normal(sv) */
3999 /* we need to find the SV pointing to us. */
cf5629ad 4000 SV *current = SV_COW_NEXT_SV(after);
7a5fa8a2 4001
765f542d
NC
4002 if (current == sv) {
4003 /* The SV we point to points back to us (there were only two of us
4004 in the loop.)
4005 Hence other SV is no longer copy on write either. */
4006 SvFAKE_off(after);
4007 SvREADONLY_off(after);
4008 } else {
4009 /* We need to follow the pointers around the loop. */
4010 SV *next;
4011 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4012 assert (next);
4013 current = next;
4014 /* don't loop forever if the structure is bust, and we have
4015 a pointer into a closed loop. */
4016 assert (current != after);
3f7c398e 4017 assert (SvPVX_const(current) == pvx);
765f542d
NC
4018 }
4019 /* Make the SV before us point to the SV after us. */
a29f6d03 4020 SV_COW_NEXT_SV_SET(current, after);
765f542d
NC
4021 }
4022 } else {
bdd68bc3 4023 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
765f542d
NC
4024 }
4025}
4026
4027int
4028Perl_sv_release_IVX(pTHX_ register SV *sv)
4029{
4030 if (SvIsCOW(sv))
4031 sv_force_normal_flags(sv, 0);
0c34ef67
MHM
4032 SvOOK_off(sv);
4033 return 0;
765f542d
NC
4034}
4035#endif
645c22ef
DM
4036/*
4037=for apidoc sv_force_normal_flags
4038
4039Undo various types of fakery on an SV: if the PV is a shared string, make
4040a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
765f542d
NC
4041an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4042we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4043then a copy-on-write scalar drops its PV buffer (if any) and becomes
4044SvPOK_off rather than making a copy. (Used where this scalar is about to be
d3050d9d 4045set to some other value.) In addition, the C<flags> parameter gets passed to
765f542d
NC
4046C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4047with flags set to 0.
645c22ef
DM
4048
4049=cut
4050*/
4051
6fc92669 4052void
840a7b70 4053Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
0f15f207 4054{
97aff369 4055 dVAR;
f8c7b90f 4056#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4057 if (SvREADONLY(sv)) {
4058 /* At this point I believe I should acquire a global SV mutex. */
4059 if (SvFAKE(sv)) {
b64e5050 4060 const char * const pvx = SvPVX_const(sv);
a28509cc
AL
4061 const STRLEN len = SvLEN(sv);
4062 const STRLEN cur = SvCUR(sv);
a28509cc 4063 SV * const next = SV_COW_NEXT_SV(sv); /* next COW sv in the loop. */
46187eeb
NC
4064 if (DEBUG_C_TEST) {
4065 PerlIO_printf(Perl_debug_log,
4066 "Copy on write: Force normal %ld\n",
4067 (long) flags);
e419cbc5 4068 sv_dump(sv);
46187eeb 4069 }
765f542d
NC
4070 SvFAKE_off(sv);
4071 SvREADONLY_off(sv);
9f653bb5 4072 /* This SV doesn't own the buffer, so need to Newx() a new one: */
6136c704 4073 SvPV_set(sv, NULL);
87a1ef3d 4074 SvLEN_set(sv, 0);
765f542d
NC
4075 if (flags & SV_COW_DROP_PV) {
4076 /* OK, so we don't need to copy our buffer. */
4077 SvPOK_off(sv);
4078 } else {
4079 SvGROW(sv, cur + 1);
4080 Move(pvx,SvPVX(sv),cur,char);
87a1ef3d 4081 SvCUR_set(sv, cur);
765f542d
NC
4082 *SvEND(sv) = '\0';
4083 }
bdd68bc3 4084 sv_release_COW(sv, pvx, len, next);
46187eeb 4085 if (DEBUG_C_TEST) {
e419cbc5 4086 sv_dump(sv);
46187eeb 4087 }
765f542d 4088 }
923e4eb5 4089 else if (IN_PERL_RUNTIME)
765f542d
NC
4090 Perl_croak(aTHX_ PL_no_modify);
4091 /* At this point I believe that I can drop the global SV mutex. */
4092 }
4093#else
2213622d 4094 if (SvREADONLY(sv)) {
1c846c1f 4095 if (SvFAKE(sv)) {
b64e5050 4096 const char * const pvx = SvPVX_const(sv);
66a1b24b 4097 const STRLEN len = SvCUR(sv);
10bcdfd6
NC
4098 SvFAKE_off(sv);
4099 SvREADONLY_off(sv);
bd61b366 4100 SvPV_set(sv, NULL);
66a1b24b 4101 SvLEN_set(sv, 0);
1c846c1f 4102 SvGROW(sv, len + 1);
706aa1c9 4103 Move(pvx,SvPVX(sv),len,char);
1c846c1f 4104 *SvEND(sv) = '\0';
bdd68bc3 4105 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
1c846c1f 4106 }
923e4eb5 4107 else if (IN_PERL_RUNTIME)
cea2e8a9 4108 Perl_croak(aTHX_ PL_no_modify);
0f15f207 4109 }
765f542d 4110#endif
2213622d 4111 if (SvROK(sv))
840a7b70 4112 sv_unref_flags(sv, flags);
6fc92669
GS
4113 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4114 sv_unglob(sv);
0f15f207 4115}
1c846c1f 4116
645c22ef 4117/*
954c1994
GS
4118=for apidoc sv_chop
4119
1c846c1f 4120Efficient removal of characters from the beginning of the string buffer.
954c1994
GS
4121SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4122the string buffer. The C<ptr> becomes the first character of the adjusted
645c22ef 4123string. Uses the "OOK hack".
3f7c398e 4124Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
31869a79 4125refer to the same chunk of data.
954c1994
GS
4126
4127=cut
4128*/
4129
79072805 4130void
f54cb97a 4131Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
79072805
LW
4132{
4133 register STRLEN delta;
a0d0e21e 4134 if (!ptr || !SvPOKp(sv))
79072805 4135 return;
3f7c398e 4136 delta = ptr - SvPVX_const(sv);
2213622d 4137 SV_CHECK_THINKFIRST(sv);
79072805
LW
4138 if (SvTYPE(sv) < SVt_PVIV)
4139 sv_upgrade(sv,SVt_PVIV);
4140
4141 if (!SvOOK(sv)) {
50483b2c 4142 if (!SvLEN(sv)) { /* make copy of shared string */
3f7c398e 4143 const char *pvx = SvPVX_const(sv);
a28509cc 4144 const STRLEN len = SvCUR(sv);
50483b2c 4145 SvGROW(sv, len + 1);
706aa1c9 4146 Move(pvx,SvPVX(sv),len,char);
50483b2c
JD
4147 *SvEND(sv) = '\0';
4148 }
45977657 4149 SvIV_set(sv, 0);
a4bfb290
AB
4150 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4151 and we do that anyway inside the SvNIOK_off
4152 */
7a5fa8a2 4153 SvFLAGS(sv) |= SVf_OOK;
79072805 4154 }
a4bfb290 4155 SvNIOK_off(sv);
b162af07
SP
4156 SvLEN_set(sv, SvLEN(sv) - delta);
4157 SvCUR_set(sv, SvCUR(sv) - delta);
f880fe2f 4158 SvPV_set(sv, SvPVX(sv) + delta);
45977657 4159 SvIV_set(sv, SvIVX(sv) + delta);
79072805
LW
4160}
4161
954c1994
GS
4162/*
4163=for apidoc sv_catpvn
4164
4165Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4166C<len> indicates number of bytes to copy. If the SV has the UTF-8
4167status set, then the bytes appended should be valid UTF-8.
d5ce4a7c 4168Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
954c1994 4169
8d6d96c1
HS
4170=for apidoc sv_catpvn_flags
4171
4172Concatenates the string onto the end of the string which is in the SV. The
1e54db1a
JH
4173C<len> indicates number of bytes to copy. If the SV has the UTF-8
4174status set, then the bytes appended should be valid UTF-8.
8d6d96c1
HS
4175If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4176appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4177in terms of this function.
4178
4179=cut
4180*/
4181
4182void
4183Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4184{
97aff369 4185 dVAR;
8d6d96c1 4186 STRLEN dlen;
fabdb6c0 4187 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
8d6d96c1 4188
8d6d96c1
HS
4189 SvGROW(dsv, dlen + slen + 1);
4190 if (sstr == dstr)
3f7c398e 4191 sstr = SvPVX_const(dsv);
8d6d96c1 4192 Move(sstr, SvPVX(dsv) + dlen, slen, char);
b162af07 4193 SvCUR_set(dsv, SvCUR(dsv) + slen);
8d6d96c1
HS
4194 *SvEND(dsv) = '\0';
4195 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4196 SvTAINT(dsv);
bddd5118
NC
4197 if (flags & SV_SMAGIC)
4198 SvSETMAGIC(dsv);
79072805
LW
4199}
4200
954c1994 4201/*
954c1994
GS
4202=for apidoc sv_catsv
4203
13e8c8e3
JH
4204Concatenates the string from SV C<ssv> onto the end of the string in
4205SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4206not 'set' magic. See C<sv_catsv_mg>.
954c1994 4207
8d6d96c1
HS
4208=for apidoc sv_catsv_flags
4209
4210Concatenates the string from SV C<ssv> onto the end of the string in
4211SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4212bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4213and C<sv_catsv_nomg> are implemented in terms of this function.
4214
4215=cut */
4216
ef50df4b 4217void
8d6d96c1 4218Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
79072805 4219{
97aff369 4220 dVAR;
bddd5118 4221 if (ssv) {
00b6aa41
AL
4222 STRLEN slen;
4223 const char *spv = SvPV_const(ssv, slen);
4224 if (spv) {
bddd5118
NC
4225 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4226 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4227 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4228 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4229 dsv->sv_flags doesn't have that bit set.
4fd84b44 4230 Andy Dougherty 12 Oct 2001
bddd5118
NC
4231 */
4232 const I32 sutf8 = DO_UTF8(ssv);
4233 I32 dutf8;
13e8c8e3 4234
bddd5118
NC
4235 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4236 mg_get(dsv);
4237 dutf8 = DO_UTF8(dsv);
8d6d96c1 4238
bddd5118
NC
4239 if (dutf8 != sutf8) {
4240 if (dutf8) {
4241 /* Not modifying source SV, so taking a temporary copy. */
00b6aa41 4242 SV* const csv = sv_2mortal(newSVpvn(spv, slen));
13e8c8e3 4243
bddd5118
NC
4244 sv_utf8_upgrade(csv);
4245 spv = SvPV_const(csv, slen);
4246 }
4247 else
4248 sv_utf8_upgrade_nomg(dsv);
13e8c8e3 4249 }
bddd5118 4250 sv_catpvn_nomg(dsv, spv, slen);
e84ff256 4251 }
560a288e 4252 }
bddd5118
NC
4253 if (flags & SV_SMAGIC)
4254 SvSETMAGIC(dsv);
79072805
LW
4255}
4256
954c1994 4257/*
954c1994
GS
4258=for apidoc sv_catpv
4259
4260Concatenates the string onto the end of the string which is in the SV.
1e54db1a
JH
4261If the SV has the UTF-8 status set, then the bytes appended should be
4262valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
954c1994 4263
d5ce4a7c 4264=cut */
954c1994 4265
ef50df4b 4266void
0c981600 4267Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
79072805 4268{
97aff369 4269 dVAR;
79072805 4270 register STRLEN len;
463ee0b2 4271 STRLEN tlen;
748a9306 4272 char *junk;
79072805 4273
0c981600 4274 if (!ptr)
79072805 4275 return;
748a9306 4276 junk = SvPV_force(sv, tlen);
0c981600 4277 len = strlen(ptr);
463ee0b2 4278 SvGROW(sv, tlen + len + 1);
0c981600 4279 if (ptr == junk)
3f7c398e 4280 ptr = SvPVX_const(sv);
0c981600 4281 Move(ptr,SvPVX(sv)+tlen,len+1,char);
b162af07 4282 SvCUR_set(sv, SvCUR(sv) + len);
d41ff1b8 4283 (void)SvPOK_only_UTF8(sv); /* validate pointer */
463ee0b2 4284 SvTAINT(sv);
79072805
LW
4285}
4286
954c1994
GS
4287/*
4288=for apidoc sv_catpv_mg
4289
4290Like C<sv_catpv>, but also handles 'set' magic.
4291
4292=cut
4293*/
4294
ef50df4b 4295void
0c981600 4296Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
ef50df4b 4297{
0c981600 4298 sv_catpv(sv,ptr);
ef50df4b
GS
4299 SvSETMAGIC(sv);
4300}
4301
645c22ef
DM
4302/*
4303=for apidoc newSV
4304
561b68a9
SH
4305Creates a new SV. A non-zero C<len> parameter indicates the number of
4306bytes of preallocated string space the SV should have. An extra byte for a
4307trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4308space is allocated.) The reference count for the new SV is set to 1.
4309
4310In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4311parameter, I<x>, a debug aid which allowed callers to identify themselves.
4312This aid has been superseded by a new build option, PERL_MEM_LOG (see
4313L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4314modules supporting older perls.
645c22ef
DM
4315
4316=cut
4317*/
4318
79072805 4319SV *
864dbfa3 4320Perl_newSV(pTHX_ STRLEN len)
79072805 4321{
97aff369 4322 dVAR;
79072805 4323 register SV *sv;
1c846c1f 4324
4561caa4 4325 new_SV(sv);
79072805
LW
4326 if (len) {
4327 sv_upgrade(sv, SVt_PV);
4328 SvGROW(sv, len + 1);
4329 }
4330 return sv;
4331}
954c1994 4332/*
92110913 4333=for apidoc sv_magicext
954c1994 4334
68795e93 4335Adds magic to an SV, upgrading it if necessary. Applies the
2d8d5d5a 4336supplied vtable and returns a pointer to the magic added.
92110913 4337
2d8d5d5a
SH
4338Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4339In particular, you can add magic to SvREADONLY SVs, and add more than
4340one instance of the same 'how'.
645c22ef 4341
2d8d5d5a
SH
4342If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4343stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4344special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4345to contain an C<SV*> and is stored as-is with its REFCNT incremented.
92110913 4346
2d8d5d5a 4347(This is now used as a subroutine by C<sv_magic>.)
954c1994
GS
4348
4349=cut
4350*/
92110913 4351MAGIC *
92e67595 4352Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
92110913 4353 const char* name, I32 namlen)
79072805 4354{
97aff369 4355 dVAR;
79072805 4356 MAGIC* mg;
68795e93 4357
92110913 4358 if (SvTYPE(sv) < SVt_PVMG) {
862a34c6 4359 SvUPGRADE(sv, SVt_PVMG);
463ee0b2 4360 }
a02a5408 4361 Newxz(mg, 1, MAGIC);
79072805 4362 mg->mg_moremagic = SvMAGIC(sv);
b162af07 4363 SvMAGIC_set(sv, mg);
75f9d97a 4364
05f95b08
SB
4365 /* Sometimes a magic contains a reference loop, where the sv and
4366 object refer to each other. To prevent a reference loop that
4367 would prevent such objects being freed, we look for such loops
4368 and if we find one we avoid incrementing the object refcount.
87f0b213
JH
4369
4370 Note we cannot do this to avoid self-tie loops as intervening RV must
b5ccf5f2 4371 have its REFCNT incremented to keep it in existence.
87f0b213
JH
4372
4373 */
14befaf4
DM
4374 if (!obj || obj == sv ||
4375 how == PERL_MAGIC_arylen ||
4376 how == PERL_MAGIC_qr ||
8d2f4536 4377 how == PERL_MAGIC_symtab ||
75f9d97a
JH
4378 (SvTYPE(obj) == SVt_PVGV &&
4379 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4380 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
2628be26 4381 GvFORM(obj) == (CV*)sv)))
75f9d97a 4382 {
8990e307 4383 mg->mg_obj = obj;
75f9d97a 4384 }
85e6fe83 4385 else {
b37c2d43 4386 mg->mg_obj = SvREFCNT_inc_simple(obj);
85e6fe83
LW
4387 mg->mg_flags |= MGf_REFCOUNTED;
4388 }
b5ccf5f2
YST
4389
4390 /* Normal self-ties simply pass a null object, and instead of
4391 using mg_obj directly, use the SvTIED_obj macro to produce a
4392 new RV as needed. For glob "self-ties", we are tieing the PVIO
4393 with an RV obj pointing to the glob containing the PVIO. In
4394 this case, to avoid a reference loop, we need to weaken the
4395 reference.
4396 */
4397
4398 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4399 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4400 {
4401 sv_rvweaken(obj);
4402 }
4403
79072805 4404 mg->mg_type = how;
565764a8 4405 mg->mg_len = namlen;
9cbac4c7 4406 if (name) {
92110913 4407 if (namlen > 0)
1edc1566 4408 mg->mg_ptr = savepvn(name, namlen);
c6ee37c5 4409 else if (namlen == HEf_SVKEY)
b37c2d43 4410 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV*)name);
68795e93 4411 else
92110913 4412 mg->mg_ptr = (char *) name;
9cbac4c7 4413 }
92110913 4414 mg->mg_virtual = vtable;
68795e93 4415
92110913
NIS
4416 mg_magical(sv);
4417 if (SvGMAGICAL(sv))
4418 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4419 return mg;
4420}
4421
4422/*
4423=for apidoc sv_magic
1c846c1f 4424
92110913
NIS
4425Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4426then adds a new magic item of type C<how> to the head of the magic list.
4427
2d8d5d5a
SH
4428See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4429handling of the C<name> and C<namlen> arguments.
4430
4509d3fb
SB
4431You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4432to add more than one instance of the same 'how'.
4433
92110913
NIS
4434=cut
4435*/
4436
4437void
4438Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
68795e93 4439{
97aff369 4440 dVAR;
92e67595 4441 MGVTBL *vtable;
92110913 4442 MAGIC* mg;
92110913 4443
f8c7b90f 4444#ifdef PERL_OLD_COPY_ON_WRITE
765f542d
NC
4445 if (SvIsCOW(sv))
4446 sv_force_normal_flags(sv, 0);
4447#endif
92110913 4448 if (SvREADONLY(sv)) {
d8084ca5
DM
4449 if (
4450 /* its okay to attach magic to shared strings; the subsequent
4451 * upgrade to PVMG will unshare the string */
4452 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4453
4454 && IN_PERL_RUNTIME
92110913
NIS
4455 && how != PERL_MAGIC_regex_global
4456 && how != PERL_MAGIC_bm
4457 && how != PERL_MAGIC_fm
4458 && how != PERL_MAGIC_sv
e6469971 4459 && how != PERL_MAGIC_backref
92110913
NIS
4460 )
4461 {
4462 Perl_croak(aTHX_ PL_no_modify);
4463 }
4464 }
4465 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4466 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
68795e93
NIS
4467 /* sv_magic() refuses to add a magic of the same 'how' as an
4468 existing one
92110913 4469 */
2a509ed3 4470 if (how == PERL_MAGIC_taint) {
92110913 4471 mg->mg_len |= 1;
2a509ed3
NC
4472 /* Any scalar which already had taint magic on which someone
4473 (erroneously?) did SvIOK_on() or similar will now be
4474 incorrectly sporting public "OK" flags. */
4475 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4476 }
92110913
NIS
4477 return;
4478 }
4479 }
68795e93 4480
79072805 4481 switch (how) {
14befaf4 4482 case PERL_MAGIC_sv:
92110913 4483 vtable = &PL_vtbl_sv;
79072805 4484 break;
14befaf4 4485 case PERL_MAGIC_overload:
92110913 4486 vtable = &PL_vtbl_amagic;
a0d0e21e 4487 break;
14befaf4 4488 case PERL_MAGIC_overload_elem:
92110913 4489 vtable = &PL_vtbl_amagicelem;
a0d0e21e 4490 break;
14befaf4 4491 case PERL_MAGIC_overload_table:
92110913 4492 vtable = &PL_vtbl_ovrld;
a0d0e21e 4493 break;
14befaf4 4494 case PERL_MAGIC_bm:
92110913 4495 vtable = &PL_vtbl_bm;
79072805 4496 break;
14befaf4 4497 case PERL_MAGIC_regdata:
92110913 4498 vtable = &PL_vtbl_regdata;
6cef1e77 4499 break;
31e9c0d8
RGS
4500 case PERL_MAGIC_regdata_names:
4501 vtable = &PL_vtbl_regdata_names;
4502 break;
14befaf4 4503 case PERL_MAGIC_regdatum:
92110913 4504 vtable = &PL_vtbl_regdatum;
6cef1e77 4505 break;
14befaf4 4506 case PERL_MAGIC_env:
92110913 4507 vtable = &PL_vtbl_env;
79072805 4508 break;
14befaf4 4509 case PERL_MAGIC_fm:
92110913 4510 vtable = &PL_vtbl_fm;
55497cff 4511 break;
14befaf4 4512 case PERL_MAGIC_envelem:
92110913 4513 vtable = &PL_vtbl_envelem;
79072805 4514 break;
14befaf4 4515 case PERL_MAGIC_regex_global:
92110913 4516 vtable = &PL_vtbl_mglob;
93a17b20 4517 break;
14befaf4 4518 case PERL_MAGIC_isa:
92110913 4519 vtable = &PL_vtbl_isa;
463ee0b2 4520 break;
14befaf4 4521 case PERL_MAGIC_isaelem:
92110913 4522 vtable = &PL_vtbl_isaelem;
463ee0b2 4523 break;
14befaf4 4524 case PERL_MAGIC_nkeys:
92110913 4525 vtable = &PL_vtbl_nkeys;
16660edb 4526 break;
14befaf4 4527 case PERL_MAGIC_dbfile:
aec46f14 4528 vtable = NULL;
93a17b20 4529 break;
14befaf4 4530 case PERL_MAGIC_dbline:
92110913 4531 vtable = &PL_vtbl_dbline;
79072805 4532 break;
36477c24 4533#ifdef USE_LOCALE_COLLATE
14befaf4 4534 case PERL_MAGIC_collxfrm:
92110913 4535 vtable = &PL_vtbl_collxfrm;
bbce6d69 4536 break;
36477c24 4537#endif /* USE_LOCALE_COLLATE */
14befaf4 4538 case PERL_MAGIC_tied:
92110913 4539 vtable = &PL_vtbl_pack;
463ee0b2 4540 break;
14befaf4
DM
4541 case PERL_MAGIC_tiedelem:
4542 case PERL_MAGIC_tiedscalar:
92110913 4543 vtable = &PL_vtbl_packelem;
463ee0b2 4544 break;
14befaf4 4545 case PERL_MAGIC_qr:
92110913 4546 vtable = &PL_vtbl_regexp;
c277df42 4547 break;
b3ca2e83
NC
4548 case PERL_MAGIC_hints:
4549 /* As this vtable is all NULL, we can reuse it. */
14befaf4 4550 case PERL_MAGIC_sig:
92110913 4551 vtable = &PL_vtbl_sig;
79072805 4552 break;
14befaf4 4553 case PERL_MAGIC_sigelem:
92110913 4554 vtable = &PL_vtbl_sigelem;
79072805 4555 break;
14befaf4 4556 case PERL_MAGIC_taint:
92110913 4557 vtable = &PL_vtbl_taint;
463ee0b2 4558 break;
14befaf4 4559 case PERL_MAGIC_uvar:
92110913 4560 vtable = &PL_vtbl_uvar;
79072805 4561 break;
14befaf4 4562 case PERL_MAGIC_vec:
92110913 4563 vtable = &PL_vtbl_vec;
79072805 4564 break;
a3874608 4565 case PERL_MAGIC_arylen_p:
bfcb3514 4566 case PERL_MAGIC_rhash:
8d2f4536 4567 case PERL_MAGIC_symtab:
ece467f9 4568 case PERL_MAGIC_vstring:
aec46f14 4569 vtable = NULL;
ece467f9 4570 break;
7e8c5dac
HS
4571 case PERL_MAGIC_utf8:
4572 vtable = &PL_vtbl_utf8;
4573 break;
14befaf4 4574 case PERL_MAGIC_substr:
92110913 4575 vtable = &PL_vtbl_substr;
79072805 4576 break;
14befaf4 4577 case PERL_MAGIC_defelem:
92110913 4578 vtable = &PL_vtbl_defelem;
5f05dabc 4579 break;
14befaf4 4580 case PERL_MAGIC_arylen:
92110913 4581 vtable = &PL_vtbl_arylen;
79072805 4582 break;
14befaf4 4583 case PERL_MAGIC_pos:
92110913 4584 vtable = &PL_vtbl_pos;
a0d0e21e 4585 break;
14befaf4 4586 case PERL_MAGIC_backref:
92110913 4587 vtable = &PL_vtbl_backref;
810b8aa5 4588 break;
b3ca2e83
NC
4589 case PERL_MAGIC_hintselem:
4590 vtable = &PL_vtbl_hintselem;
4591 break;
14befaf4
DM
4592 case PERL_MAGIC_ext:
4593 /* Reserved for use by extensions not perl internals. */
4633a7c4
LW
4594 /* Useful for attaching extension internal data to perl vars. */
4595 /* Note that multiple extensions may clash if magical scalars */
4596 /* etc holding private data from one are passed to another. */
aec46f14 4597 vtable = NULL;
a0d0e21e 4598 break;
79072805 4599 default:
14befaf4 4600 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
463ee0b2 4601 }
68795e93 4602
92110913 4603 /* Rest of work is done else where */
aec46f14 4604 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
68795e93 4605
92110913
NIS
4606 switch (how) {
4607 case PERL_MAGIC_taint:
4608 mg->mg_len = 1;
4609 break;
4610 case PERL_MAGIC_ext:
4611 case PERL_MAGIC_dbfile:
4612 SvRMAGICAL_on(sv);
4613 break;
4614 }
463ee0b2
LW
4615}
4616
c461cf8f
JH
4617/*
4618=for apidoc sv_unmagic
4619
645c22ef 4620Removes all magic of type C<type> from an SV.
c461cf8f
JH
4621
4622=cut
4623*/
4624
463ee0b2 4625int
864dbfa3 4626Perl_sv_unmagic(pTHX_ SV *sv, int type)
463ee0b2
LW
4627{
4628 MAGIC* mg;
4629 MAGIC** mgp;
91bba347 4630 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
463ee0b2 4631 return 0;
064cf529 4632 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
463ee0b2
LW
4633 for (mg = *mgp; mg; mg = *mgp) {
4634 if (mg->mg_type == type) {
e1ec3a88 4635 const MGVTBL* const vtbl = mg->mg_virtual;
463ee0b2 4636 *mgp = mg->mg_moremagic;
1d7c1841 4637 if (vtbl && vtbl->svt_free)
fc0dc3b3 4638 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
14befaf4 4639 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
92110913 4640 if (mg->mg_len > 0)
1edc1566 4641 Safefree(mg->mg_ptr);
565764a8 4642 else if (mg->mg_len == HEf_SVKEY)
1edc1566 4643 SvREFCNT_dec((SV*)mg->mg_ptr);
d2923cdd 4644 else if (mg->mg_type == PERL_MAGIC_utf8)
7e8c5dac 4645 Safefree(mg->mg_ptr);
9cbac4c7 4646 }
a0d0e21e
LW
4647 if (mg->mg_flags & MGf_REFCOUNTED)
4648 SvREFCNT_dec(mg->mg_obj);
463ee0b2
LW
4649 Safefree(mg);
4650 }
4651 else
4652 mgp = &mg->mg_moremagic;
79072805 4653 }
91bba347 4654 if (!SvMAGIC(sv)) {
463ee0b2 4655 SvMAGICAL_off(sv);
c268c2a6 4656 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
86f55936 4657 SvMAGIC_set(sv, NULL);
463ee0b2
LW
4658 }
4659
4660 return 0;
79072805
LW
4661}
4662
c461cf8f
JH
4663/*
4664=for apidoc sv_rvweaken
4665
645c22ef
DM
4666Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4667referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4668push a back-reference to this RV onto the array of backreferences
1e73acc8
AS
4669associated with that magic. If the RV is magical, set magic will be
4670called after the RV is cleared.
c461cf8f
JH
4671
4672=cut
4673*/
4674
810b8aa5 4675SV *
864dbfa3 4676Perl_sv_rvweaken(pTHX_ SV *sv)
810b8aa5
GS
4677{
4678 SV *tsv;
4679 if (!SvOK(sv)) /* let undefs pass */
4680 return sv;
4681 if (!SvROK(sv))
cea2e8a9 4682 Perl_croak(aTHX_ "Can't weaken a nonreference");
810b8aa5 4683 else if (SvWEAKREF(sv)) {
810b8aa5 4684 if (ckWARN(WARN_MISC))
9014280d 4685 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
810b8aa5
GS
4686 return sv;
4687 }
4688 tsv = SvRV(sv);
e15faf7d 4689 Perl_sv_add_backref(aTHX_ tsv, sv);
810b8aa5 4690 SvWEAKREF_on(sv);
1c846c1f 4691 SvREFCNT_dec(tsv);
810b8aa5
GS
4692 return sv;
4693}
4694
645c22ef
DM
4695/* Give tsv backref magic if it hasn't already got it, then push a
4696 * back-reference to sv onto the array associated with the backref magic.
4697 */
4698
e15faf7d
NC
4699void
4700Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
810b8aa5 4701{
97aff369 4702 dVAR;
810b8aa5 4703 AV *av;
86f55936
NC
4704
4705 if (SvTYPE(tsv) == SVt_PVHV) {
4706 AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4707
4708 av = *avp;
4709 if (!av) {
4710 /* There is no AV in the offical place - try a fixup. */
4711 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
4712
4713 if (mg) {
4714 /* Aha. They've got it stowed in magic. Bring it back. */
4715 av = (AV*)mg->mg_obj;
4716 /* Stop mg_free decreasing the refernce count. */
4717 mg->mg_obj = NULL;
4718 /* Stop mg_free even calling the destructor, given that
4719 there's no AV to free up. */
4720 mg->mg_virtual = 0;
4721 sv_unmagic(tsv, PERL_MAGIC_backref);
4722 } else {
4723 av = newAV();
4724 AvREAL_off(av);
b37c2d43 4725 SvREFCNT_inc_simple_void(av);
86f55936
NC
4726 }
4727 *avp = av;
4728 }
4729 } else {
4730 const MAGIC *const mg
4731 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4732 if (mg)
4733 av = (AV*)mg->mg_obj;
4734 else {
4735 av = newAV();
4736 AvREAL_off(av);
4737 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4738 /* av now has a refcnt of 2, which avoids it getting freed
4739 * before us during global cleanup. The extra ref is removed
4740 * by magic_killbackrefs() when tsv is being freed */
4741 }
810b8aa5 4742 }
d91d49e8 4743 if (AvFILLp(av) >= AvMAX(av)) {
d91d49e8
MM
4744 av_extend(av, AvFILLp(av)+1);
4745 }
4746 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
810b8aa5
GS
4747}
4748
645c22ef
DM
4749/* delete a back-reference to ourselves from the backref magic associated
4750 * with the SV we point to.
4751 */
4752
1c846c1f 4753STATIC void
e15faf7d 4754S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
810b8aa5 4755{
97aff369 4756 dVAR;
86f55936 4757 AV *av = NULL;
810b8aa5
GS
4758 SV **svp;
4759 I32 i;
86f55936
NC
4760
4761 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
4762 av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
5b285ea4
NC
4763 /* We mustn't attempt to "fix up" the hash here by moving the
4764 backreference array back to the hv_aux structure, as that is stored
4765 in the main HvARRAY(), and hfreentries assumes that no-one
4766 reallocates HvARRAY() while it is running. */
86f55936
NC
4767 }
4768 if (!av) {
4769 const MAGIC *const mg
4770 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4771 if (mg)
4772 av = (AV *)mg->mg_obj;
4773 }
4774 if (!av) {
e15faf7d
NC
4775 if (PL_in_clean_all)
4776 return;
cea2e8a9 4777 Perl_croak(aTHX_ "panic: del_backref");
86f55936
NC
4778 }
4779
4780 if (SvIS_FREED(av))
4781 return;
4782
810b8aa5 4783 svp = AvARRAY(av);
6a76db8b
NC
4784 /* We shouldn't be in here more than once, but for paranoia reasons lets
4785 not assume this. */
4786 for (i = AvFILLp(av); i >= 0; i--) {
4787 if (svp[i] == sv) {
4788 const SSize_t fill = AvFILLp(av);
4789 if (i != fill) {
4790 /* We weren't the last entry.
4791 An unordered list has this property that you can take the
4792 last element off the end to fill the hole, and it's still
4793 an unordered list :-)
4794 */
4795 svp[i] = svp[fill];
4796 }
a0714e2c 4797 svp[fill] = NULL;
6a76db8b
NC
4798 AvFILLp(av) = fill - 1;
4799 }
4800 }
810b8aa5
GS
4801}
4802
86f55936
NC
4803int
4804Perl_sv_kill_backrefs(pTHX_ SV *sv, AV *av)
4805{
4806 SV **svp = AvARRAY(av);
4807
4808 PERL_UNUSED_ARG(sv);
4809
4810 /* Not sure why the av can get freed ahead of its sv, but somehow it does
4811 in ext/B/t/bytecode.t test 15 (involving print <DATA>) */
4812 if (svp && !SvIS_FREED(av)) {
4813 SV *const *const last = svp + AvFILLp(av);
4814
4815 while (svp <= last) {
4816 if (*svp) {
4817 SV *const referrer = *svp;
4818 if (SvWEAKREF(referrer)) {
4819 /* XXX Should we check that it hasn't changed? */
4820 SvRV_set(referrer, 0);
4821 SvOK_off(referrer);
4822 SvWEAKREF_off(referrer);
1e73acc8 4823 SvSETMAGIC(referrer);
86f55936
NC
4824 } else if (SvTYPE(referrer) == SVt_PVGV ||
4825 SvTYPE(referrer) == SVt_PVLV) {
4826 /* You lookin' at me? */
4827 assert(GvSTASH(referrer));
4828 assert(GvSTASH(referrer) == (HV*)sv);
4829 GvSTASH(referrer) = 0;
4830 } else {
4831 Perl_croak(aTHX_
4832 "panic: magic_killbackrefs (flags=%"UVxf")",
4833 (UV)SvFLAGS(referrer));
4834 }
4835
a0714e2c 4836 *svp = NULL;
86f55936
NC
4837 }
4838 svp++;
4839 }
4840 }
4841 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
4842 return 0;
4843}
4844
954c1994
GS
4845/*
4846=for apidoc sv_insert
4847
4848Inserts a string at the specified offset/length within the SV. Similar to
4849the Perl substr() function.
4850
4851=cut
4852*/
4853
79072805 4854void
e1ec3a88 4855Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
79072805 4856{
97aff369 4857 dVAR;
79072805
LW
4858 register char *big;
4859 register char *mid;
4860 register char *midend;
4861 register char *bigend;
4862 register I32 i;
6ff81951 4863 STRLEN curlen;
1c846c1f 4864
79072805 4865
8990e307 4866 if (!bigstr)
cea2e8a9 4867 Perl_croak(aTHX_ "Can't modify non-existent substring");
6ff81951 4868 SvPV_force(bigstr, curlen);
60fa28ff 4869 (void)SvPOK_only_UTF8(bigstr);
6ff81951
GS
4870 if (offset + len > curlen) {
4871 SvGROW(bigstr, offset+len+1);
93524f2b 4872 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6ff81951
GS
4873 SvCUR_set(bigstr, offset+len);
4874 }
79072805 4875
69b47968 4876 SvTAINT(bigstr);
79072805
LW
4877 i = littlelen - len;
4878 if (i > 0) { /* string might grow */
a0d0e21e 4879 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
79072805
LW
4880 mid = big + offset + len;
4881 midend = bigend = big + SvCUR(bigstr);
4882 bigend += i;
4883 *bigend = '\0';
4884 while (midend > mid) /* shove everything down */
4885 *--bigend = *--midend;
4886 Move(little,big+offset,littlelen,char);
b162af07 4887 SvCUR_set(bigstr, SvCUR(bigstr) + i);
79072805
LW
4888 SvSETMAGIC(bigstr);
4889 return;
4890 }
4891 else if (i == 0) {
463ee0b2 4892 Move(little,SvPVX(bigstr)+offset,len,char);
79072805
LW
4893 SvSETMAGIC(bigstr);
4894 return;
4895 }
4896
463ee0b2 4897 big = SvPVX(bigstr);
79072805
LW
4898 mid = big + offset;
4899 midend = mid + len;
4900 bigend = big + SvCUR(bigstr);
4901
4902 if (midend > bigend)
cea2e8a9 4903 Perl_croak(aTHX_ "panic: sv_insert");
79072805
LW
4904
4905 if (mid - big > bigend - midend) { /* faster to shorten from end */
4906 if (littlelen) {
4907 Move(little, mid, littlelen,char);
4908 mid += littlelen;
4909 }
4910 i = bigend - midend;
4911 if (i > 0) {
4912 Move(midend, mid, i,char);
4913 mid += i;
4914 }
4915 *mid = '\0';
4916 SvCUR_set(bigstr, mid - big);
4917 }
155aba94 4918 else if ((i = mid - big)) { /* faster from front */
79072805
LW
4919 midend -= littlelen;
4920 mid = midend;
4921 sv_chop(bigstr,midend-i);
4922 big += i;
4923 while (i--)
4924 *--midend = *--big;
4925 if (littlelen)
4926 Move(little, mid, littlelen,char);
4927 }
4928 else if (littlelen) {
4929 midend -= littlelen;
4930 sv_chop(bigstr,midend);
4931 Move(little,midend,littlelen,char);
4932 }
4933 else {
4934 sv_chop(bigstr,midend);
4935 }
4936 SvSETMAGIC(bigstr);
4937}
4938
c461cf8f
JH
4939/*
4940=for apidoc sv_replace
4941
4942Make the first argument a copy of the second, then delete the original.
645c22ef
DM
4943The target SV physically takes over ownership of the body of the source SV
4944and inherits its flags; however, the target keeps any magic it owns,
4945and any magic in the source is discarded.
ff276b08 4946Note that this is a rather specialist SV copying operation; most of the
645c22ef 4947time you'll want to use C<sv_setsv> or one of its many macro front-ends.
c461cf8f
JH
4948
4949=cut
4950*/
79072805
LW
4951
4952void
864dbfa3 4953Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
79072805 4954{
97aff369 4955 dVAR;
a3b680e6 4956 const U32 refcnt = SvREFCNT(sv);
765f542d 4957 SV_CHECK_THINKFIRST_COW_DROP(sv);
30e5c352 4958 if (SvREFCNT(nsv) != 1) {
7437becc 4959 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
30e5c352
NC
4960 UVuf " != 1)", (UV) SvREFCNT(nsv));
4961 }
93a17b20 4962 if (SvMAGICAL(sv)) {
a0d0e21e
LW
4963 if (SvMAGICAL(nsv))
4964 mg_free(nsv);
4965 else
4966 sv_upgrade(nsv, SVt_PVMG);
b162af07 4967 SvMAGIC_set(nsv, SvMAGIC(sv));
a0d0e21e 4968 SvFLAGS(nsv) |= SvMAGICAL(sv);
93a17b20 4969 SvMAGICAL_off(sv);
b162af07 4970 SvMAGIC_set(sv, NULL);
93a17b20 4971 }
79072805
LW
4972 SvREFCNT(sv) = 0;
4973 sv_clear(sv);
477f5d66 4974 assert(!SvREFCNT(sv));
fd0854ff
DM
4975#ifdef DEBUG_LEAKING_SCALARS
4976 sv->sv_flags = nsv->sv_flags;
4977 sv->sv_any = nsv->sv_any;
4978 sv->sv_refcnt = nsv->sv_refcnt;
f34d0642 4979 sv->sv_u = nsv->sv_u;
fd0854ff 4980#else
79072805 4981 StructCopy(nsv,sv,SV);
fd0854ff 4982#endif
7b2c381c
NC
4983 /* Currently could join these into one piece of pointer arithmetic, but
4984 it would be unclear. */
4985 if(SvTYPE(sv) == SVt_IV)
4986 SvANY(sv)
339049b0 4987 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
7b2c381c 4988 else if (SvTYPE(sv) == SVt_RV) {
339049b0 4989 SvANY(sv) = &sv->sv_u.svu_rv;
7b2c381c
NC
4990 }
4991
fd0854ff 4992
f8c7b90f 4993#ifdef PERL_OLD_COPY_ON_WRITE
d3d0e6f1
NC
4994 if (SvIsCOW_normal(nsv)) {
4995 /* We need to follow the pointers around the loop to make the
4996 previous SV point to sv, rather than nsv. */
4997 SV *next;
4998 SV *current = nsv;
4999 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5000 assert(next);
5001 current = next;
3f7c398e 5002 assert(SvPVX_const(current) == SvPVX_const(nsv));
d3d0e6f1
NC
5003 }
5004 /* Make the SV before us point to the SV after us. */
5005 if (DEBUG_C_TEST) {
5006 PerlIO_printf(Perl_debug_log, "previous is\n");
5007 sv_dump(current);
a29f6d03
NC
5008 PerlIO_printf(Perl_debug_log,
5009 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
d3d0e6f1
NC
5010 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5011 }
a29f6d03 5012 SV_COW_NEXT_SV_SET(current, sv);
d3d0e6f1
NC
5013 }
5014#endif
79072805 5015 SvREFCNT(sv) = refcnt;
1edc1566 5016 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
39cf41c2 5017 SvREFCNT(nsv) = 0;
463ee0b2 5018 del_SV(nsv);
79072805
LW
5019}
5020
c461cf8f
JH
5021/*
5022=for apidoc sv_clear
5023
645c22ef
DM
5024Clear an SV: call any destructors, free up any memory used by the body,
5025and free the body itself. The SV's head is I<not> freed, although
5026its type is set to all 1's so that it won't inadvertently be assumed
5027to be live during global destruction etc.
5028This function should only be called when REFCNT is zero. Most of the time
5029you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5030instead.
c461cf8f
JH
5031
5032=cut
5033*/
5034
79072805 5035void
864dbfa3 5036Perl_sv_clear(pTHX_ register SV *sv)
79072805 5037{
27da23d5 5038 dVAR;
82bb6deb 5039 const U32 type = SvTYPE(sv);
8edfc514
NC
5040 const struct body_details *const sv_type_details
5041 = bodies_by_type + type;
82bb6deb 5042
79072805
LW
5043 assert(sv);
5044 assert(SvREFCNT(sv) == 0);
5045
d2a0f284
JC
5046 if (type <= SVt_IV) {
5047 /* See the comment in sv.h about the collusion between this early
5048 return and the overloading of the NULL and IV slots in the size
5049 table. */
82bb6deb 5050 return;
d2a0f284 5051 }
82bb6deb 5052
ed6116ce 5053 if (SvOBJECT(sv)) {
3280af22 5054 if (PL_defstash) { /* Still have a symbol table? */
39644a26 5055 dSP;
893645bd 5056 HV* stash;
d460ef45 5057 do {
b464bac0 5058 CV* destructor;
4e8e7886 5059 stash = SvSTASH(sv);
32251b26 5060 destructor = StashHANDLER(stash,DESTROY);
4e8e7886 5061 if (destructor) {
1b6737cc 5062 SV* const tmpref = newRV(sv);
5cc433a6 5063 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
4e8e7886 5064 ENTER;
e788e7d3 5065 PUSHSTACKi(PERLSI_DESTROY);
4e8e7886
GS
5066 EXTEND(SP, 2);
5067 PUSHMARK(SP);
5cc433a6 5068 PUSHs(tmpref);
4e8e7886 5069 PUTBACK;
44389ee9 5070 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7a5fa8a2
NIS
5071
5072
d3acc0f7 5073 POPSTACK;
3095d977 5074 SPAGAIN;
4e8e7886 5075 LEAVE;
5cc433a6
AB
5076 if(SvREFCNT(tmpref) < 2) {
5077 /* tmpref is not kept alive! */
5078 SvREFCNT(sv)--;
b162af07 5079 SvRV_set(tmpref, NULL);
5cc433a6
AB
5080 SvROK_off(tmpref);
5081 }
5082 SvREFCNT_dec(tmpref);
4e8e7886
GS
5083 }
5084 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
8ebc5c01 5085
6f44e0a4
JP
5086
5087 if (SvREFCNT(sv)) {
5088 if (PL_in_clean_objs)
cea2e8a9 5089 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
bfcb3514 5090 HvNAME_get(stash));
6f44e0a4
JP
5091 /* DESTROY gave object new lease on life */
5092 return;
5093 }
a0d0e21e 5094 }
4e8e7886 5095
a0d0e21e 5096 if (SvOBJECT(sv)) {
4e8e7886 5097 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
a0d0e21e 5098 SvOBJECT_off(sv); /* Curse the object. */
82bb6deb 5099 if (type != SVt_PVIO)
3280af22 5100 --PL_sv_objcount; /* XXX Might want something more general */
a0d0e21e 5101 }
463ee0b2 5102 }
82bb6deb 5103 if (type >= SVt_PVMG) {
885ffcb3
NC
5104 if ((type == SVt_PVMG || type == SVt_PVGV) && SvPAD_OUR(sv)) {
5105 SvREFCNT_dec(OURSTASH(sv));
e736a858 5106 } else if (SvMAGIC(sv))
524189f1 5107 mg_free(sv);
00b1698f 5108 if (type == SVt_PVMG && SvPAD_TYPED(sv))
524189f1
JH
5109 SvREFCNT_dec(SvSTASH(sv));
5110 }
82bb6deb 5111 switch (type) {
8990e307 5112 case SVt_PVIO:
df0bd2f4
GS
5113 if (IoIFP(sv) &&
5114 IoIFP(sv) != PerlIO_stdin() &&
5f05dabc 5115 IoIFP(sv) != PerlIO_stdout() &&
5116 IoIFP(sv) != PerlIO_stderr())
93578b34 5117 {
f2b5be74 5118 io_close((IO*)sv, FALSE);
93578b34 5119 }
1d7c1841 5120 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
1236053a 5121 PerlDir_close(IoDIRP(sv));
1d7c1841 5122 IoDIRP(sv) = (DIR*)NULL;
8990e307
LW
5123 Safefree(IoTOP_NAME(sv));
5124 Safefree(IoFMT_NAME(sv));
5125 Safefree(IoBOTTOM_NAME(sv));
82bb6deb 5126 goto freescalar;
79072805 5127 case SVt_PVBM:
a0d0e21e 5128 goto freescalar;
79072805 5129 case SVt_PVCV:
748a9306 5130 case SVt_PVFM:
85e6fe83 5131 cv_undef((CV*)sv);
a0d0e21e 5132 goto freescalar;
79072805 5133 case SVt_PVHV:
86f55936 5134 Perl_hv_kill_backrefs(aTHX_ (HV*)sv);
85e6fe83 5135 hv_undef((HV*)sv);
a0d0e21e 5136 break;
79072805 5137 case SVt_PVAV:
85e6fe83 5138 av_undef((AV*)sv);
a0d0e21e 5139 break;
02270b4e 5140 case SVt_PVLV:
dd28f7bb
DM
5141 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5142 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5143 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5144 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5145 }
5146 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5147 SvREFCNT_dec(LvTARG(sv));
02270b4e 5148 goto freescalar;
a0d0e21e 5149 case SVt_PVGV:
1edc1566 5150 gp_free((GV*)sv);
acda4c6a
NC
5151 if (GvNAME_HEK(sv)) {
5152 unshare_hek(GvNAME_HEK(sv));
5153 }
893645bd
NC
5154 /* If we're in a stash, we don't own a reference to it. However it does
5155 have a back reference to us, which needs to be cleared. */
5156 if (GvSTASH(sv))
5157 sv_del_backref((SV*)GvSTASH(sv), sv);
79072805 5158 case SVt_PVMG:
79072805
LW
5159 case SVt_PVNV:
5160 case SVt_PVIV:
a0d0e21e 5161 freescalar:
5228ca4e
NC
5162 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5163 if (SvOOK(sv)) {
93524f2b 5164 SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv));
5228ca4e
NC
5165 /* Don't even bother with turning off the OOK flag. */
5166 }
79072805 5167 case SVt_PV:
a0d0e21e 5168 case SVt_RV:
810b8aa5 5169 if (SvROK(sv)) {
b37c2d43 5170 SV * const target = SvRV(sv);
810b8aa5 5171 if (SvWEAKREF(sv))
e15faf7d 5172 sv_del_backref(target, sv);
810b8aa5 5173 else
e15faf7d 5174 SvREFCNT_dec(target);
810b8aa5 5175 }
f8c7b90f 5176#ifdef PERL_OLD_COPY_ON_WRITE
3f7c398e 5177 else if (SvPVX_const(sv)) {
765f542d
NC
5178 if (SvIsCOW(sv)) {
5179 /* I believe I need to grab the global SV mutex here and
5180 then recheck the COW status. */
46187eeb
NC
5181 if (DEBUG_C_TEST) {
5182 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
e419cbc5 5183 sv_dump(sv);
46187eeb 5184 }
bdd68bc3
NC
5185 sv_release_COW(sv, SvPVX_const(sv), SvLEN(sv),
5186 SV_COW_NEXT_SV(sv));
765f542d
NC
5187 /* And drop it here. */
5188 SvFAKE_off(sv);
5189 } else if (SvLEN(sv)) {
3f7c398e 5190 Safefree(SvPVX_const(sv));
765f542d
NC
5191 }
5192 }
5193#else
3f7c398e 5194 else if (SvPVX_const(sv) && SvLEN(sv))
94010e71 5195 Safefree(SvPVX_mutable(sv));
3f7c398e 5196 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
bdd68bc3 5197 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
1c846c1f
NIS
5198 SvFAKE_off(sv);
5199 }
765f542d 5200#endif
79072805
LW
5201 break;
5202 case SVt_NV:
79072805
LW
5203 break;
5204 }
5205
893645bd
NC
5206 SvFLAGS(sv) &= SVf_BREAK;
5207 SvFLAGS(sv) |= SVTYPEMASK;
5208
8edfc514 5209 if (sv_type_details->arena) {
b9502f15 5210 del_body(((char *)SvANY(sv) + sv_type_details->offset),
8edfc514
NC
5211 &PL_body_roots[type]);
5212 }
d2a0f284 5213 else if (sv_type_details->body_size) {
8edfc514
NC
5214 my_safefree(SvANY(sv));
5215 }
79072805
LW
5216}
5217
645c22ef
DM
5218/*
5219=for apidoc sv_newref
5220
5221Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5222instead.
5223
5224=cut
5225*/
5226
79072805 5227SV *
864dbfa3 5228Perl_sv_newref(pTHX_ SV *sv)
79072805 5229{
96a5add6 5230 PERL_UNUSED_CONTEXT;
463ee0b2 5231 if (sv)
4db098f4 5232 (SvREFCNT(sv))++;
79072805
LW
5233 return sv;
5234}
5235
c461cf8f
JH
5236/*
5237=for apidoc sv_free
5238
645c22ef
DM
5239Decrement an SV's reference count, and if it drops to zero, call
5240C<sv_clear> to invoke destructors and free up any memory used by
5241the body; finally, deallocate the SV's head itself.
5242Normally called via a wrapper macro C<SvREFCNT_dec>.
c461cf8f
JH
5243
5244=cut
5245*/
5246
79072805 5247void
864dbfa3 5248Perl_sv_free(pTHX_ SV *sv)
79072805 5249{
27da23d5 5250 dVAR;
79072805
LW
5251 if (!sv)
5252 return;
a0d0e21e
LW
5253 if (SvREFCNT(sv) == 0) {
5254 if (SvFLAGS(sv) & SVf_BREAK)
645c22ef
DM
5255 /* this SV's refcnt has been artificially decremented to
5256 * trigger cleanup */
a0d0e21e 5257 return;
3280af22 5258 if (PL_in_clean_all) /* All is fair */
1edc1566 5259 return;
d689ffdd
JP
5260 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5261 /* make sure SvREFCNT(sv)==0 happens very seldom */
5262 SvREFCNT(sv) = (~(U32)0)/2;
5263 return;
5264 }
41e4abd8 5265 if (ckWARN_d(WARN_INTERNAL)) {
d5dede04 5266 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc
SB
5267 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5268 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
41e4abd8
NC
5269#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5270 Perl_dump_sv_child(aTHX_ sv);
5271#endif
5272 }
79072805
LW
5273 return;
5274 }
4db098f4 5275 if (--(SvREFCNT(sv)) > 0)
8990e307 5276 return;
8c4d3c90
NC
5277 Perl_sv_free2(aTHX_ sv);
5278}
5279
5280void
5281Perl_sv_free2(pTHX_ SV *sv)
5282{
27da23d5 5283 dVAR;
463ee0b2
LW
5284#ifdef DEBUGGING
5285 if (SvTEMP(sv)) {
0453d815 5286 if (ckWARN_d(WARN_DEBUGGING))
9014280d 5287 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
472d47bc
SB
5288 "Attempt to free temp prematurely: SV 0x%"UVxf
5289 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
79072805 5290 return;
79072805 5291 }
463ee0b2 5292#endif
d689ffdd
JP
5293 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5294 /* make sure SvREFCNT(sv)==0 happens very seldom */
5295 SvREFCNT(sv) = (~(U32)0)/2;
5296 return;
5297 }
79072805 5298 sv_clear(sv);
477f5d66
CS
5299 if (! SvREFCNT(sv))
5300 del_SV(sv);
79072805
LW
5301}
5302
954c1994
GS
5303/*
5304=for apidoc sv_len
5305
645c22ef
DM
5306Returns the length of the string in the SV. Handles magic and type
5307coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
954c1994
GS
5308
5309=cut
5310*/
5311
79072805 5312STRLEN
864dbfa3 5313Perl_sv_len(pTHX_ register SV *sv)
79072805 5314{
463ee0b2 5315 STRLEN len;
79072805
LW
5316
5317 if (!sv)
5318 return 0;
5319
8990e307 5320 if (SvGMAGICAL(sv))
565764a8 5321 len = mg_length(sv);
8990e307 5322 else
4d84ee25 5323 (void)SvPV_const(sv, len);
463ee0b2 5324 return len;
79072805
LW
5325}
5326
c461cf8f
JH
5327/*
5328=for apidoc sv_len_utf8
5329
5330Returns the number of characters in the string in an SV, counting wide
1e54db1a 5331UTF-8 bytes as a single character. Handles magic and type coercion.
c461cf8f
JH
5332
5333=cut
5334*/
5335
7e8c5dac
HS
5336/*
5337 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
9564a3bd
NC
5338 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
5339 * (Note that the mg_len is not the length of the mg_ptr field.
5340 * This allows the cache to store the character length of the string without
5341 * needing to malloc() extra storage to attach to the mg_ptr.)
7a5fa8a2 5342 *
7e8c5dac
HS
5343 */
5344
a0ed51b3 5345STRLEN
864dbfa3 5346Perl_sv_len_utf8(pTHX_ register SV *sv)
a0ed51b3 5347{
a0ed51b3
LW
5348 if (!sv)
5349 return 0;
5350
a0ed51b3 5351 if (SvGMAGICAL(sv))
b76347f2 5352 return mg_length(sv);
a0ed51b3 5353 else
b76347f2 5354 {
26346457 5355 STRLEN len;
e62f0680 5356 const U8 *s = (U8*)SvPV_const(sv, len);
7e8c5dac 5357
26346457
NC
5358 if (PL_utf8cache) {
5359 STRLEN ulen;
5360 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
5361
5362 if (mg && mg->mg_len != -1) {
5363 ulen = mg->mg_len;
5364 if (PL_utf8cache < 0) {
5365 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
5366 if (real != ulen) {
5367 /* Need to turn the assertions off otherwise we may
5368 recurse infinitely while printing error messages.
5369 */
5370 SAVEI8(PL_utf8cache);
5371 PL_utf8cache = 0;
f5992bc4
RB
5372 Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
5373 " real %"UVuf" for %"SVf,
95b63a38 5374 (UV) ulen, (UV) real, (void*)sv);
26346457
NC
5375 }
5376 }
5377 }
5378 else {
5379 ulen = Perl_utf8_length(aTHX_ s, s + len);
5380 if (!SvREADONLY(sv)) {
5381 if (!mg) {
5382 mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
5383 &PL_vtbl_utf8, 0, 0);
5384 }
cb9e20bb 5385 assert(mg);
26346457 5386 mg->mg_len = ulen;
cb9e20bb 5387 }
cb9e20bb 5388 }
26346457 5389 return ulen;
7e8c5dac 5390 }
26346457 5391 return Perl_utf8_length(aTHX_ s, s + len);
7e8c5dac
HS
5392 }
5393}
5394
9564a3bd
NC
5395/* Walk forwards to find the byte corresponding to the passed in UTF-8
5396 offset. */
bdf30dd6 5397static STRLEN
721e86b6 5398S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
bdf30dd6
NC
5399 STRLEN uoffset)
5400{
5401 const U8 *s = start;
5402
5403 while (s < send && uoffset--)
5404 s += UTF8SKIP(s);
5405 if (s > send) {
5406 /* This is the existing behaviour. Possibly it should be a croak, as
5407 it's actually a bounds error */
5408 s = send;
5409 }
5410 return s - start;
5411}
5412
9564a3bd
NC
5413/* Given the length of the string in both bytes and UTF-8 characters, decide
5414 whether to walk forwards or backwards to find the byte corresponding to
5415 the passed in UTF-8 offset. */
c336ad0b 5416static STRLEN
721e86b6 5417S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
c336ad0b
NC
5418 STRLEN uoffset, STRLEN uend)
5419{
5420 STRLEN backw = uend - uoffset;
5421 if (uoffset < 2 * backw) {
25a8a4ef 5422 /* The assumption is that going forwards is twice the speed of going
c336ad0b
NC
5423 forward (that's where the 2 * backw comes from).
5424 (The real figure of course depends on the UTF-8 data.) */
721e86b6 5425 return sv_pos_u2b_forwards(start, send, uoffset);
c336ad0b
NC
5426 }
5427
5428 while (backw--) {
5429 send--;
5430 while (UTF8_IS_CONTINUATION(*send))
5431 send--;
5432 }
5433 return send - start;
5434}
5435
9564a3bd
NC
5436/* For the string representation of the given scalar, find the byte
5437 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
5438 give another position in the string, *before* the sought offset, which
5439 (which is always true, as 0, 0 is a valid pair of positions), which should
5440 help reduce the amount of linear searching.
5441 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
5442 will be used to reduce the amount of linear searching. The cache will be
5443 created if necessary, and the found value offered to it for update. */
28ccbf94
NC
5444static STRLEN
5445S_sv_pos_u2b_cached(pTHX_ SV *sv, MAGIC **mgp, const U8 *const start,
5446 const U8 *const send, STRLEN uoffset,
5447 STRLEN uoffset0, STRLEN boffset0) {
7087a21c 5448 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
c336ad0b
NC
5449 bool found = FALSE;
5450
75c33c12
NC
5451 assert (uoffset >= uoffset0);
5452
c336ad0b 5453 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
0905937d 5454 && (*mgp || (*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
d8b2e1f9
NC
5455 if ((*mgp)->mg_ptr) {
5456 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
5457 if (cache[0] == uoffset) {
5458 /* An exact match. */
5459 return cache[1];
5460 }
ab455f60
NC
5461 if (cache[2] == uoffset) {
5462 /* An exact match. */
5463 return cache[3];
5464 }
668af93f
NC
5465
5466 if (cache[0] < uoffset) {
d8b2e1f9
NC
5467 /* The cache already knows part of the way. */
5468 if (cache[0] > uoffset0) {
5469 /* The cache knows more than the passed in pair */
5470 uoffset0 = cache[0];
5471 boffset0 = cache[1];
5472 }
5473 if ((*mgp)->mg_len != -1) {
5474 /* And we know the end too. */
5475 boffset = boffset0
721e86b6 5476 + sv_pos_u2b_midway(start + boffset0, send,
d8b2e1f9
NC
5477 uoffset - uoffset0,
5478 (*mgp)->mg_len - uoffset0);
5479 } else {
5480 boffset = boffset0
721e86b6 5481 + sv_pos_u2b_forwards(start + boffset0,
d8b2e1f9
NC
5482 send, uoffset - uoffset0);
5483 }
dd7c5fd3
NC
5484 }
5485 else if (cache[2] < uoffset) {
5486 /* We're between the two cache entries. */
5487 if (cache[2] > uoffset0) {
5488 /* and the cache knows more than the passed in pair */
5489 uoffset0 = cache[2];
5490 boffset0 = cache[3];
5491 }
5492
668af93f 5493 boffset = boffset0
721e86b6 5494 + sv_pos_u2b_midway(start + boffset0,
668af93f
NC
5495 start + cache[1],
5496 uoffset - uoffset0,
5497 cache[0] - uoffset0);
dd7c5fd3
NC
5498 } else {
5499 boffset = boffset0
721e86b6 5500 + sv_pos_u2b_midway(start + boffset0,
dd7c5fd3
NC
5501 start + cache[3],
5502 uoffset - uoffset0,
5503 cache[2] - uoffset0);
d8b2e1f9 5504 }
668af93f 5505 found = TRUE;
d8b2e1f9
NC
5506 }
5507 else if ((*mgp)->mg_len != -1) {
75c33c12
NC
5508 /* If we can take advantage of a passed in offset, do so. */
5509 /* In fact, offset0 is either 0, or less than offset, so don't
5510 need to worry about the other possibility. */
5511 boffset = boffset0
721e86b6 5512 + sv_pos_u2b_midway(start + boffset0, send,
75c33c12
NC
5513 uoffset - uoffset0,
5514 (*mgp)->mg_len - uoffset0);
c336ad0b
NC
5515 found = TRUE;
5516 }
28ccbf94 5517 }
c336ad0b
NC
5518
5519 if (!found || PL_utf8cache < 0) {
75c33c12 5520 const STRLEN real_boffset
721e86b6 5521 = boffset0 + sv_pos_u2b_forwards(start + boffset0,
75c33c12
NC
5522 send, uoffset - uoffset0);
5523
c336ad0b
NC
5524 if (found && PL_utf8cache < 0) {
5525 if (real_boffset != boffset) {
5526 /* Need to turn the assertions off otherwise we may recurse
5527 infinitely while printing error messages. */
5528 SAVEI8(PL_utf8cache);
5529 PL_utf8cache = 0;
f5992bc4
RB
5530 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
5531 " real %"UVuf" for %"SVf,
95b63a38 5532 (UV) boffset, (UV) real_boffset, (void*)sv);
c336ad0b
NC
5533 }
5534 }
5535 boffset = real_boffset;
28ccbf94 5536 }
0905937d 5537
ab455f60 5538 S_utf8_mg_pos_cache_update(aTHX_ sv, mgp, boffset, uoffset, send - start);
28ccbf94
NC
5539 return boffset;
5540}
5541
9564a3bd
NC
5542
5543/*
5544=for apidoc sv_pos_u2b
5545
5546Converts the value pointed to by offsetp from a count of UTF-8 chars from
5547the start of the string, to a count of the equivalent number of bytes; if
5548lenp is non-zero, it does the same to lenp, but this time starting from
5549the offset, rather than from the start of the string. Handles magic and
5550type coercion.
5551
5552=cut
5553*/
5554
5555/*
5556 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5557 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5558 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
5559 *
5560 */
5561
a0ed51b3 5562void
864dbfa3 5563Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
a0ed51b3 5564{
245d4a47 5565 const U8 *start;
a0ed51b3
LW
5566 STRLEN len;
5567
5568 if (!sv)
5569 return;
5570
245d4a47 5571 start = (U8*)SvPV_const(sv, len);
7e8c5dac 5572 if (len) {
bdf30dd6
NC
5573 STRLEN uoffset = (STRLEN) *offsetp;
5574 const U8 * const send = start + len;
0905937d 5575 MAGIC *mg = NULL;
721e86b6 5576 const STRLEN boffset = sv_pos_u2b_cached(sv, &mg, start, send,
28ccbf94 5577 uoffset, 0, 0);
bdf30dd6
NC
5578
5579 *offsetp = (I32) boffset;
5580
5581 if (lenp) {
28ccbf94 5582 /* Convert the relative offset to absolute. */
721e86b6
AL
5583 const STRLEN uoffset2 = uoffset + (STRLEN) *lenp;
5584 const STRLEN boffset2
5585 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
28ccbf94 5586 uoffset, boffset) - boffset;
bdf30dd6 5587
28ccbf94 5588 *lenp = boffset2;
bdf30dd6 5589 }
7e8c5dac
HS
5590 }
5591 else {
5592 *offsetp = 0;
5593 if (lenp)
5594 *lenp = 0;
a0ed51b3 5595 }
e23c8137 5596
a0ed51b3
LW
5597 return;
5598}
5599
9564a3bd
NC
5600/* Create and update the UTF8 magic offset cache, with the proffered utf8/
5601 byte length pairing. The (byte) length of the total SV is passed in too,
5602 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
5603 may not have updated SvCUR, so we can't rely on reading it directly.
5604
5605 The proffered utf8/byte length pairing isn't used if the cache already has
5606 two pairs, and swapping either for the proffered pair would increase the
5607 RMS of the intervals between known byte offsets.
5608
5609 The cache itself consists of 4 STRLEN values
5610 0: larger UTF-8 offset
5611 1: corresponding byte offset
5612 2: smaller UTF-8 offset
5613 3: corresponding byte offset
5614
5615 Unused cache pairs have the value 0, 0.
5616 Keeping the cache "backwards" means that the invariant of
5617 cache[0] >= cache[2] is maintained even with empty slots, which means that
5618 the code that uses it doesn't need to worry if only 1 entry has actually
5619 been set to non-zero. It also makes the "position beyond the end of the
5620 cache" logic much simpler, as the first slot is always the one to start
5621 from.
645c22ef 5622*/
ec07b5e0 5623static void
ab455f60
NC
5624S_utf8_mg_pos_cache_update(pTHX_ SV *sv, MAGIC **mgp, STRLEN byte, STRLEN utf8,
5625 STRLEN blen)
ec07b5e0
NC
5626{
5627 STRLEN *cache;
5628 if (SvREADONLY(sv))
5629 return;
5630
5631 if (!*mgp) {
5632 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
5633 0);
5634 (*mgp)->mg_len = -1;
5635 }
5636 assert(*mgp);
5637
5638 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
5639 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5640 (*mgp)->mg_ptr = (char *) cache;
5641 }
5642 assert(cache);
5643
5644 if (PL_utf8cache < 0) {
ef816a78 5645 const U8 *start = (const U8 *) SvPVX_const(sv);
6448472a 5646 const STRLEN realutf8 = utf8_length(start, start + byte);
ec07b5e0
NC
5647
5648 if (realutf8 != utf8) {
5649 /* Need to turn the assertions off otherwise we may recurse
5650 infinitely while printing error messages. */
5651 SAVEI8(PL_utf8cache);
5652 PL_utf8cache = 0;
f5992bc4
RB
5653 Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
5654 " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, (void*)sv);
ec07b5e0
NC
5655 }
5656 }
ab455f60
NC
5657
5658 /* Cache is held with the later position first, to simplify the code
5659 that deals with unbounded ends. */
5660
5661 ASSERT_UTF8_CACHE(cache);
5662 if (cache[1] == 0) {
5663 /* Cache is totally empty */
5664 cache[0] = utf8;
5665 cache[1] = byte;
5666 } else if (cache[3] == 0) {
5667 if (byte > cache[1]) {
5668 /* New one is larger, so goes first. */
5669 cache[2] = cache[0];
5670 cache[3] = cache[1];
5671 cache[0] = utf8;
5672 cache[1] = byte;
5673 } else {
5674 cache[2] = utf8;
5675 cache[3] = byte;
5676 }
5677 } else {
5678#define THREEWAY_SQUARE(a,b,c,d) \
5679 ((float)((d) - (c))) * ((float)((d) - (c))) \
5680 + ((float)((c) - (b))) * ((float)((c) - (b))) \
5681 + ((float)((b) - (a))) * ((float)((b) - (a)))
5682
5683 /* Cache has 2 slots in use, and we know three potential pairs.
5684 Keep the two that give the lowest RMS distance. Do the
5685 calcualation in bytes simply because we always know the byte
5686 length. squareroot has the same ordering as the positive value,
5687 so don't bother with the actual square root. */
5688 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
5689 if (byte > cache[1]) {
5690 /* New position is after the existing pair of pairs. */
5691 const float keep_earlier
5692 = THREEWAY_SQUARE(0, cache[3], byte, blen);
5693 const float keep_later
5694 = THREEWAY_SQUARE(0, cache[1], byte, blen);
5695
5696 if (keep_later < keep_earlier) {
5697 if (keep_later < existing) {
5698 cache[2] = cache[0];
5699 cache[3] = cache[1];
5700 cache[0] = utf8;
5701 cache[1] = byte;
5702 }
5703 }
5704 else {
5705 if (keep_earlier < existing) {
5706 cache[0] = utf8;
5707 cache[1] = byte;
5708 }
5709 }
5710 }
57d7fbf1
NC
5711 else if (byte > cache[3]) {
5712 /* New position is between the existing pair of pairs. */
5713 const float keep_earlier
5714 = THREEWAY_SQUARE(0, cache[3], byte, blen);
5715 const float keep_later
5716 = THREEWAY_SQUARE(0, byte, cache[1], blen);
5717
5718 if (keep_later < keep_earlier) {
5719 if (keep_later < existing) {
5720 cache[2] = utf8;
5721 cache[3] = byte;
5722 }
5723 }
5724 else {
5725 if (keep_earlier < existing) {
5726 cache[0] = utf8;
5727 cache[1] = byte;
5728 }
5729 }
5730 }
5731 else {
5732 /* New position is before the existing pair of pairs. */
5733 const float keep_earlier
5734 = THREEWAY_SQUARE(0, byte, cache[3], blen);
5735 const float keep_later
5736 = THREEWAY_SQUARE(0, byte, cache[1], blen);
5737
5738 if (keep_later < keep_earlier) {
5739 if (keep_later < existing) {
5740 cache[2] = utf8;
5741 cache[3] = byte;
5742 }
5743 }
5744 else {
5745 if (keep_earlier < existing) {
5746 cache[0] = cache[2];
5747 cache[1] = cache[3];
5748 cache[2] = utf8;
5749 cache[3] = byte;
5750 }
5751 }
5752 }
ab455f60 5753 }
0905937d 5754 ASSERT_UTF8_CACHE(cache);
ec07b5e0
NC
5755}
5756
ec07b5e0 5757/* We already know all of the way, now we may be able to walk back. The same
25a8a4ef
NC
5758 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
5759 backward is half the speed of walking forward. */
ec07b5e0
NC
5760static STRLEN
5761S_sv_pos_b2u_midway(pTHX_ const U8 *s, const U8 *const target, const U8 *end,
5762 STRLEN endu)
5763{
5764 const STRLEN forw = target - s;
5765 STRLEN backw = end - target;
5766
5767 if (forw < 2 * backw) {
6448472a 5768 return utf8_length(s, target);
ec07b5e0
NC
5769 }
5770
5771 while (end > target) {
5772 end--;
5773 while (UTF8_IS_CONTINUATION(*end)) {
5774 end--;
5775 }
5776 endu--;
5777 }
5778 return endu;
5779}
5780
9564a3bd
NC
5781/*
5782=for apidoc sv_pos_b2u
5783
5784Converts the value pointed to by offsetp from a count of bytes from the
5785start of the string, to a count of the equivalent number of UTF-8 chars.
5786Handles magic and type coercion.
5787
5788=cut
5789*/
5790
5791/*
5792 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
5793 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5794 * byte offsets.
5795 *
5796 */
a0ed51b3 5797void
7e8c5dac 5798Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
a0ed51b3 5799{
83003860 5800 const U8* s;
ec07b5e0 5801 const STRLEN byte = *offsetp;
7087a21c 5802 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
ab455f60 5803 STRLEN blen;
ec07b5e0
NC
5804 MAGIC* mg = NULL;
5805 const U8* send;
a922f900 5806 bool found = FALSE;
a0ed51b3
LW
5807
5808 if (!sv)
5809 return;
5810
ab455f60 5811 s = (const U8*)SvPV_const(sv, blen);
7e8c5dac 5812
ab455f60 5813 if (blen < byte)
ec07b5e0 5814 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
7e8c5dac 5815
ec07b5e0 5816 send = s + byte;
a67d7df9 5817
ffca234a
NC
5818 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
5819 && (mg = mg_find(sv, PERL_MAGIC_utf8))) {
5820 if (mg->mg_ptr) {
d4c19fe8 5821 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
b9f984a5 5822 if (cache[1] == byte) {
ec07b5e0
NC
5823 /* An exact match. */
5824 *offsetp = cache[0];
ec07b5e0 5825 return;
7e8c5dac 5826 }
ab455f60
NC
5827 if (cache[3] == byte) {
5828 /* An exact match. */
5829 *offsetp = cache[2];
5830 return;
5831 }
668af93f
NC
5832
5833 if (cache[1] < byte) {
ec07b5e0 5834 /* We already know part of the way. */
b9f984a5
NC
5835 if (mg->mg_len != -1) {
5836 /* Actually, we know the end too. */
5837 len = cache[0]
5838 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
ab455f60 5839 s + blen, mg->mg_len - cache[0]);
b9f984a5 5840 } else {
6448472a 5841 len = cache[0] + utf8_length(s + cache[1], send);
b9f984a5 5842 }
7e8c5dac 5843 }
9f985e4c
NC
5844 else if (cache[3] < byte) {
5845 /* We're between the two cached pairs, so we do the calculation
5846 offset by the byte/utf-8 positions for the earlier pair,
5847 then add the utf-8 characters from the string start to
5848 there. */
5849 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
5850 s + cache[1], cache[0] - cache[2])
5851 + cache[2];
5852
5853 }
5854 else { /* cache[3] > byte */
5855 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
5856 cache[2]);
7e8c5dac 5857
7e8c5dac 5858 }
ec07b5e0 5859 ASSERT_UTF8_CACHE(cache);
a922f900 5860 found = TRUE;
ffca234a 5861 } else if (mg->mg_len != -1) {
ab455f60 5862 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
a922f900 5863 found = TRUE;
7e8c5dac 5864 }
a0ed51b3 5865 }
a922f900 5866 if (!found || PL_utf8cache < 0) {
6448472a 5867 const STRLEN real_len = utf8_length(s, send);
a922f900
NC
5868
5869 if (found && PL_utf8cache < 0) {
5870 if (len != real_len) {
5871 /* Need to turn the assertions off otherwise we may recurse
5872 infinitely while printing error messages. */
5873 SAVEI8(PL_utf8cache);
5874 PL_utf8cache = 0;
f5992bc4
RB
5875 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
5876 " real %"UVuf" for %"SVf,
95b63a38 5877 (UV) len, (UV) real_len, (void*)sv);
a922f900
NC
5878 }
5879 }
5880 len = real_len;
ec07b5e0
NC
5881 }
5882 *offsetp = len;
5883
ab455f60 5884 S_utf8_mg_pos_cache_update(aTHX_ sv, &mg, byte, len, blen);
a0ed51b3
LW
5885}
5886
954c1994
GS
5887/*
5888=for apidoc sv_eq
5889
5890Returns a boolean indicating whether the strings in the two SVs are
645c22ef
DM
5891identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5892coerce its args to strings if necessary.
954c1994
GS
5893
5894=cut
5895*/
5896
79072805 5897I32
e01b9e88 5898Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
79072805 5899{
97aff369 5900 dVAR;
e1ec3a88 5901 const char *pv1;
463ee0b2 5902 STRLEN cur1;
e1ec3a88 5903 const char *pv2;
463ee0b2 5904 STRLEN cur2;
e01b9e88 5905 I32 eq = 0;
bd61b366 5906 char *tpv = NULL;
a0714e2c 5907 SV* svrecode = NULL;
79072805 5908
e01b9e88 5909 if (!sv1) {
79072805
LW
5910 pv1 = "";
5911 cur1 = 0;
5912 }
ced497e2
YST
5913 else {
5914 /* if pv1 and pv2 are the same, second SvPV_const call may
5915 * invalidate pv1, so we may need to make a copy */
5916 if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
5917 pv1 = SvPV_const(sv1, cur1);
5918 sv1 = sv_2mortal(newSVpvn(pv1, cur1));
5919 if (SvUTF8(sv2)) SvUTF8_on(sv1);
5920 }
4d84ee25 5921 pv1 = SvPV_const(sv1, cur1);
ced497e2 5922 }
79072805 5923
e01b9e88
SC
5924 if (!sv2){
5925 pv2 = "";
5926 cur2 = 0;
92d29cee 5927 }
e01b9e88 5928 else
4d84ee25 5929 pv2 = SvPV_const(sv2, cur2);
79072805 5930
cf48d248 5931 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
5932 /* Differing utf8ness.
5933 * Do not UTF8size the comparands as a side-effect. */
5934 if (PL_encoding) {
5935 if (SvUTF8(sv1)) {
553e1bcc
AT
5936 svrecode = newSVpvn(pv2, cur2);
5937 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 5938 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
5939 }
5940 else {
553e1bcc
AT
5941 svrecode = newSVpvn(pv1, cur1);
5942 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 5943 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
5944 }
5945 /* Now both are in UTF-8. */
0a1bd7ac
DM
5946 if (cur1 != cur2) {
5947 SvREFCNT_dec(svrecode);
799ef3cb 5948 return FALSE;
0a1bd7ac 5949 }
799ef3cb
JH
5950 }
5951 else {
5952 bool is_utf8 = TRUE;
5953
5954 if (SvUTF8(sv1)) {
5955 /* sv1 is the UTF-8 one,
5956 * if is equal it must be downgrade-able */
9d4ba2ae 5957 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
799ef3cb
JH
5958 &cur1, &is_utf8);
5959 if (pv != pv1)
553e1bcc 5960 pv1 = tpv = pv;
799ef3cb
JH
5961 }
5962 else {
5963 /* sv2 is the UTF-8 one,
5964 * if is equal it must be downgrade-able */
9d4ba2ae 5965 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
799ef3cb
JH
5966 &cur2, &is_utf8);
5967 if (pv != pv2)
553e1bcc 5968 pv2 = tpv = pv;
799ef3cb
JH
5969 }
5970 if (is_utf8) {
5971 /* Downgrade not possible - cannot be eq */
bf694877 5972 assert (tpv == 0);
799ef3cb
JH
5973 return FALSE;
5974 }
5975 }
cf48d248
JH
5976 }
5977
5978 if (cur1 == cur2)
765f542d 5979 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
e01b9e88 5980
b37c2d43 5981 SvREFCNT_dec(svrecode);
553e1bcc
AT
5982 if (tpv)
5983 Safefree(tpv);
cf48d248 5984
e01b9e88 5985 return eq;
79072805
LW
5986}
5987
954c1994
GS
5988/*
5989=for apidoc sv_cmp
5990
5991Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
5992string in C<sv1> is less than, equal to, or greater than the string in
645c22ef
DM
5993C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5994coerce its args to strings if necessary. See also C<sv_cmp_locale>.
954c1994
GS
5995
5996=cut
5997*/
5998
79072805 5999I32
e01b9e88 6000Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
79072805 6001{
97aff369 6002 dVAR;
560a288e 6003 STRLEN cur1, cur2;
e1ec3a88 6004 const char *pv1, *pv2;
bd61b366 6005 char *tpv = NULL;
cf48d248 6006 I32 cmp;
a0714e2c 6007 SV *svrecode = NULL;
560a288e 6008
e01b9e88
SC
6009 if (!sv1) {
6010 pv1 = "";
560a288e
GS
6011 cur1 = 0;
6012 }
e01b9e88 6013 else
4d84ee25 6014 pv1 = SvPV_const(sv1, cur1);
560a288e 6015
553e1bcc 6016 if (!sv2) {
e01b9e88 6017 pv2 = "";
560a288e
GS
6018 cur2 = 0;
6019 }
e01b9e88 6020 else
4d84ee25 6021 pv2 = SvPV_const(sv2, cur2);
79072805 6022
cf48d248 6023 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
799ef3cb
JH
6024 /* Differing utf8ness.
6025 * Do not UTF8size the comparands as a side-effect. */
cf48d248 6026 if (SvUTF8(sv1)) {
799ef3cb 6027 if (PL_encoding) {
553e1bcc
AT
6028 svrecode = newSVpvn(pv2, cur2);
6029 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6030 pv2 = SvPV_const(svrecode, cur2);
799ef3cb
JH
6031 }
6032 else {
e1ec3a88 6033 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
799ef3cb 6034 }
cf48d248
JH
6035 }
6036 else {
799ef3cb 6037 if (PL_encoding) {
553e1bcc
AT
6038 svrecode = newSVpvn(pv1, cur1);
6039 sv_recode_to_utf8(svrecode, PL_encoding);
93524f2b 6040 pv1 = SvPV_const(svrecode, cur1);
799ef3cb
JH
6041 }
6042 else {
e1ec3a88 6043 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
799ef3cb 6044 }
cf48d248
JH
6045 }
6046 }
6047
e01b9e88 6048 if (!cur1) {
cf48d248 6049 cmp = cur2 ? -1 : 0;
e01b9e88 6050 } else if (!cur2) {
cf48d248
JH
6051 cmp = 1;
6052 } else {
e1ec3a88 6053 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
e01b9e88
SC
6054
6055 if (retval) {
cf48d248 6056 cmp = retval < 0 ? -1 : 1;
e01b9e88 6057 } else if (cur1 == cur2) {
cf48d248
JH
6058 cmp = 0;
6059 } else {
6060 cmp = cur1 < cur2 ? -1 : 1;
e01b9e88 6061 }
cf48d248 6062 }
16660edb 6063
b37c2d43 6064 SvREFCNT_dec(svrecode);
553e1bcc
AT
6065 if (tpv)
6066 Safefree(tpv);
cf48d248
JH
6067
6068 return cmp;
bbce6d69 6069}
16660edb 6070
c461cf8f
JH
6071/*
6072=for apidoc sv_cmp_locale
6073
645c22ef
DM
6074Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6075'use bytes' aware, handles get magic, and will coerce its args to strings
6076if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
c461cf8f
JH
6077
6078=cut
6079*/
6080
bbce6d69 6081I32
864dbfa3 6082Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
bbce6d69 6083{
97aff369 6084 dVAR;
36477c24 6085#ifdef USE_LOCALE_COLLATE
16660edb 6086
bbce6d69 6087 char *pv1, *pv2;
6088 STRLEN len1, len2;
6089 I32 retval;
16660edb 6090
3280af22 6091 if (PL_collation_standard)
bbce6d69 6092 goto raw_compare;
16660edb 6093
bbce6d69 6094 len1 = 0;
8ac85365 6095 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
bbce6d69 6096 len2 = 0;
8ac85365 6097 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
16660edb 6098
bbce6d69 6099 if (!pv1 || !len1) {
6100 if (pv2 && len2)
6101 return -1;
6102 else
6103 goto raw_compare;
6104 }
6105 else {
6106 if (!pv2 || !len2)
6107 return 1;
6108 }
16660edb 6109
bbce6d69 6110 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
16660edb 6111
bbce6d69 6112 if (retval)
16660edb 6113 return retval < 0 ? -1 : 1;
6114
bbce6d69 6115 /*
6116 * When the result of collation is equality, that doesn't mean
6117 * that there are no differences -- some locales exclude some
6118 * characters from consideration. So to avoid false equalities,
6119 * we use the raw string as a tiebreaker.
6120 */
16660edb 6121
bbce6d69 6122 raw_compare:
5f66b61c 6123 /*FALLTHROUGH*/
16660edb 6124
36477c24 6125#endif /* USE_LOCALE_COLLATE */
16660edb 6126
bbce6d69 6127 return sv_cmp(sv1, sv2);
6128}
79072805 6129
645c22ef 6130
36477c24 6131#ifdef USE_LOCALE_COLLATE
645c22ef 6132
7a4c00b4 6133/*
645c22ef
DM
6134=for apidoc sv_collxfrm
6135
6136Add Collate Transform magic to an SV if it doesn't already have it.
6137
6138Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6139scalar data of the variable, but transformed to such a format that a normal
6140memory comparison can be used to compare the data according to the locale
6141settings.
6142
6143=cut
6144*/
6145
bbce6d69 6146char *
864dbfa3 6147Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
bbce6d69 6148{
97aff369 6149 dVAR;
7a4c00b4 6150 MAGIC *mg;
16660edb 6151
14befaf4 6152 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
3280af22 6153 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
93524f2b
NC
6154 const char *s;
6155 char *xf;
bbce6d69 6156 STRLEN len, xlen;
6157
7a4c00b4 6158 if (mg)
6159 Safefree(mg->mg_ptr);
93524f2b 6160 s = SvPV_const(sv, len);
bbce6d69 6161 if ((xf = mem_collxfrm(s, len, &xlen))) {
ff0cee69 6162 if (SvREADONLY(sv)) {
6163 SAVEFREEPV(xf);
6164 *nxp = xlen;
3280af22 6165 return xf + sizeof(PL_collation_ix);
ff0cee69 6166 }
7a4c00b4 6167 if (! mg) {
d83f0a82
NC
6168#ifdef PERL_OLD_COPY_ON_WRITE
6169 if (SvIsCOW(sv))
6170 sv_force_normal_flags(sv, 0);
6171#endif
6172 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6173 0, 0);
7a4c00b4 6174 assert(mg);
bbce6d69 6175 }
7a4c00b4 6176 mg->mg_ptr = xf;
565764a8 6177 mg->mg_len = xlen;
7a4c00b4 6178 }
6179 else {
ff0cee69 6180 if (mg) {
6181 mg->mg_ptr = NULL;
565764a8 6182 mg->mg_len = -1;
ff0cee69 6183 }
bbce6d69 6184 }
6185 }
7a4c00b4 6186 if (mg && mg->mg_ptr) {
565764a8 6187 *nxp = mg->mg_len;
3280af22 6188 return mg->mg_ptr + sizeof(PL_collation_ix);
bbce6d69 6189 }
6190 else {
6191 *nxp = 0;
6192 return NULL;
16660edb 6193 }
79072805
LW
6194}
6195
36477c24 6196#endif /* USE_LOCALE_COLLATE */
bbce6d69 6197
c461cf8f
JH
6198/*
6199=for apidoc sv_gets
6200
6201Get a line from the filehandle and store it into the SV, optionally
6202appending to the currently-stored string.
6203
6204=cut
6205*/
6206
79072805 6207char *
864dbfa3 6208Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
79072805 6209{
97aff369 6210 dVAR;
e1ec3a88 6211 const char *rsptr;
c07a80fd 6212 STRLEN rslen;
6213 register STDCHAR rslast;
6214 register STDCHAR *bp;
6215 register I32 cnt;
9c5ffd7c 6216 I32 i = 0;
8bfdd7d9 6217 I32 rspara = 0;
c07a80fd 6218
bc44a8a2
NC
6219 if (SvTHINKFIRST(sv))
6220 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
765f542d
NC
6221 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6222 from <>.
6223 However, perlbench says it's slower, because the existing swipe code
6224 is faster than copy on write.
6225 Swings and roundabouts. */
862a34c6 6226 SvUPGRADE(sv, SVt_PV);
99491443 6227
ff68c719 6228 SvSCREAM_off(sv);
efd8b2ba
AE
6229
6230 if (append) {
6231 if (PerlIO_isutf8(fp)) {
6232 if (!SvUTF8(sv)) {
6233 sv_utf8_upgrade_nomg(sv);
6234 sv_pos_u2b(sv,&append,0);
6235 }
6236 } else if (SvUTF8(sv)) {
561b68a9 6237 SV * const tsv = newSV(0);
efd8b2ba
AE
6238 sv_gets(tsv, fp, 0);
6239 sv_utf8_upgrade_nomg(tsv);
6240 SvCUR_set(sv,append);
6241 sv_catsv(sv,tsv);
6242 sv_free(tsv);
6243 goto return_string_or_null;
6244 }
6245 }
6246
6247 SvPOK_only(sv);
6248 if (PerlIO_isutf8(fp))
6249 SvUTF8_on(sv);
c07a80fd 6250
923e4eb5 6251 if (IN_PERL_COMPILETIME) {
8bfdd7d9
HS
6252 /* we always read code in line mode */
6253 rsptr = "\n";
6254 rslen = 1;
6255 }
6256 else if (RsSNARF(PL_rs)) {
7a5fa8a2 6257 /* If it is a regular disk file use size from stat() as estimate
acbd132f
JH
6258 of amount we are going to read -- may result in mallocing
6259 more memory than we really need if the layers below reduce
6260 the size we read (e.g. CRLF or a gzip layer).
e468d35b 6261 */
e311fd51 6262 Stat_t st;
e468d35b 6263 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
f54cb97a 6264 const Off_t offset = PerlIO_tell(fp);
58f1856e 6265 if (offset != (Off_t) -1 && st.st_size + append > offset) {
e468d35b
NIS
6266 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6267 }
6268 }
c07a80fd 6269 rsptr = NULL;
6270 rslen = 0;
6271 }
3280af22 6272 else if (RsRECORD(PL_rs)) {
e311fd51 6273 I32 bytesread;
5b2b9c68 6274 char *buffer;
acbd132f 6275 U32 recsize;
5b2b9c68
HM
6276
6277 /* Grab the size of the record we're getting */
acbd132f 6278 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
e311fd51 6279 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
5b2b9c68
HM
6280 /* Go yank in */
6281#ifdef VMS
6282 /* VMS wants read instead of fread, because fread doesn't respect */
6283 /* RMS record boundaries. This is not necessarily a good thing to be */
e468d35b
NIS
6284 /* doing, but we've got no other real choice - except avoid stdio
6285 as implementation - perhaps write a :vms layer ?
6286 */
5b2b9c68
HM
6287 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6288#else
6289 bytesread = PerlIO_read(fp, buffer, recsize);
6290#endif
27e6ca2d
AE
6291 if (bytesread < 0)
6292 bytesread = 0;
e311fd51 6293 SvCUR_set(sv, bytesread += append);
e670df4e 6294 buffer[bytesread] = '\0';
efd8b2ba 6295 goto return_string_or_null;
5b2b9c68 6296 }
3280af22 6297 else if (RsPARA(PL_rs)) {
c07a80fd 6298 rsptr = "\n\n";
6299 rslen = 2;
8bfdd7d9 6300 rspara = 1;
c07a80fd 6301 }
7d59b7e4
NIS
6302 else {
6303 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6304 if (PerlIO_isutf8(fp)) {
6305 rsptr = SvPVutf8(PL_rs, rslen);
6306 }
6307 else {
6308 if (SvUTF8(PL_rs)) {
6309 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6310 Perl_croak(aTHX_ "Wide character in $/");
6311 }
6312 }
93524f2b 6313 rsptr = SvPV_const(PL_rs, rslen);
7d59b7e4
NIS
6314 }
6315 }
6316
c07a80fd 6317 rslast = rslen ? rsptr[rslen - 1] : '\0';
6318
8bfdd7d9 6319 if (rspara) { /* have to do this both before and after */
79072805 6320 do { /* to make sure file boundaries work right */
760ac839 6321 if (PerlIO_eof(fp))
a0d0e21e 6322 return 0;
760ac839 6323 i = PerlIO_getc(fp);
79072805 6324 if (i != '\n') {
a0d0e21e
LW
6325 if (i == -1)
6326 return 0;
760ac839 6327 PerlIO_ungetc(fp,i);
79072805
LW
6328 break;
6329 }
6330 } while (i != EOF);
6331 }
c07a80fd 6332
760ac839
LW
6333 /* See if we know enough about I/O mechanism to cheat it ! */
6334
6335 /* This used to be #ifdef test - it is made run-time test for ease
1c846c1f 6336 of abstracting out stdio interface. One call should be cheap
760ac839
LW
6337 enough here - and may even be a macro allowing compile
6338 time optimization.
6339 */
6340
6341 if (PerlIO_fast_gets(fp)) {
6342
6343 /*
6344 * We're going to steal some values from the stdio struct
6345 * and put EVERYTHING in the innermost loop into registers.
6346 */
6347 register STDCHAR *ptr;
6348 STRLEN bpx;
6349 I32 shortbuffered;
6350
16660edb 6351#if defined(VMS) && defined(PERLIO_IS_STDIO)
6352 /* An ungetc()d char is handled separately from the regular
6353 * buffer, so we getc() it back out and stuff it in the buffer.
6354 */
6355 i = PerlIO_getc(fp);
6356 if (i == EOF) return 0;
6357 *(--((*fp)->_ptr)) = (unsigned char) i;
6358 (*fp)->_cnt++;
6359#endif
c07a80fd 6360
c2960299 6361 /* Here is some breathtakingly efficient cheating */
c07a80fd 6362
a20bf0c3 6363 cnt = PerlIO_get_cnt(fp); /* get count into register */
e468d35b 6364 /* make sure we have the room */
7a5fa8a2 6365 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
e468d35b 6366 /* Not room for all of it
7a5fa8a2 6367 if we are looking for a separator and room for some
e468d35b
NIS
6368 */
6369 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7a5fa8a2 6370 /* just process what we have room for */
79072805
LW
6371 shortbuffered = cnt - SvLEN(sv) + append + 1;
6372 cnt -= shortbuffered;
6373 }
6374 else {
6375 shortbuffered = 0;
bbce6d69 6376 /* remember that cnt can be negative */
eb160463 6377 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
79072805
LW
6378 }
6379 }
7a5fa8a2 6380 else
79072805 6381 shortbuffered = 0;
3f7c398e 6382 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
a20bf0c3 6383 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
16660edb 6384 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6385 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
16660edb 6386 DEBUG_P(PerlIO_printf(Perl_debug_log,
ba7abf9d 6387 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6388 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6389 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
79072805
LW
6390 for (;;) {
6391 screamer:
93a17b20 6392 if (cnt > 0) {
c07a80fd 6393 if (rslen) {
760ac839
LW
6394 while (cnt > 0) { /* this | eat */
6395 cnt--;
c07a80fd 6396 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6397 goto thats_all_folks; /* screams | sed :-) */
6398 }
6399 }
6400 else {
1c846c1f
NIS
6401 Copy(ptr, bp, cnt, char); /* this | eat */
6402 bp += cnt; /* screams | dust */
c07a80fd 6403 ptr += cnt; /* louder | sed :-) */
a5f75d66 6404 cnt = 0;
93a17b20 6405 }
79072805
LW
6406 }
6407
748a9306 6408 if (shortbuffered) { /* oh well, must extend */
79072805
LW
6409 cnt = shortbuffered;
6410 shortbuffered = 0;
3f7c398e 6411 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
6412 SvCUR_set(sv, bpx);
6413 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3f7c398e 6414 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
79072805
LW
6415 continue;
6416 }
6417
16660edb 6418 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841
GS
6419 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6420 PTR2UV(ptr),(long)cnt));
cc00df79 6421 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
ba7abf9d 6422#if 0
16660edb 6423 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6424 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6425 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6426 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 6427#endif
1c846c1f 6428 /* This used to call 'filbuf' in stdio form, but as that behaves like
774d564b 6429 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6430 another abstraction. */
760ac839 6431 i = PerlIO_getc(fp); /* get more characters */
ba7abf9d 6432#if 0
16660edb 6433 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6434 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6435 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6436 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
ba7abf9d 6437#endif
a20bf0c3
JH
6438 cnt = PerlIO_get_cnt(fp);
6439 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
16660edb 6440 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6441 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
79072805 6442
748a9306
LW
6443 if (i == EOF) /* all done for ever? */
6444 goto thats_really_all_folks;
6445
3f7c398e 6446 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
79072805
LW
6447 SvCUR_set(sv, bpx);
6448 SvGROW(sv, bpx + cnt + 2);
3f7c398e 6449 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
c07a80fd 6450
eb160463 6451 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
79072805 6452
c07a80fd 6453 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
79072805 6454 goto thats_all_folks;
79072805
LW
6455 }
6456
6457thats_all_folks:
3f7c398e 6458 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
36477c24 6459 memNE((char*)bp - rslen, rsptr, rslen))
760ac839 6460 goto screamer; /* go back to the fray */
79072805
LW
6461thats_really_all_folks:
6462 if (shortbuffered)
6463 cnt += shortbuffered;
16660edb 6464 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6465 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
cc00df79 6466 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
16660edb 6467 DEBUG_P(PerlIO_printf(Perl_debug_log,
1d7c1841 6468 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
1c846c1f 6469 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
1d7c1841 6470 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
79072805 6471 *bp = '\0';
3f7c398e 6472 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
16660edb 6473 DEBUG_P(PerlIO_printf(Perl_debug_log,
fb73857a 6474 "Screamer: done, len=%ld, string=|%.*s|\n",
3f7c398e 6475 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
760ac839
LW
6476 }
6477 else
79072805 6478 {
6edd2cd5 6479 /*The big, slow, and stupid way. */
27da23d5 6480#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
cbbf8932 6481 STDCHAR *buf = NULL;
a02a5408 6482 Newx(buf, 8192, STDCHAR);
6edd2cd5 6483 assert(buf);
4d2c4e07 6484#else
6edd2cd5 6485 STDCHAR buf[8192];
4d2c4e07 6486#endif
79072805 6487
760ac839 6488screamer2:
c07a80fd 6489 if (rslen) {
00b6aa41 6490 register const STDCHAR * const bpe = buf + sizeof(buf);
760ac839 6491 bp = buf;
eb160463 6492 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
760ac839
LW
6493 ; /* keep reading */
6494 cnt = bp - buf;
c07a80fd 6495 }
6496 else {
760ac839 6497 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
16660edb 6498 /* Accomodate broken VAXC compiler, which applies U8 cast to
6499 * both args of ?: operator, causing EOF to change into 255
6500 */
37be0adf 6501 if (cnt > 0)
cbe9e203
JH
6502 i = (U8)buf[cnt - 1];
6503 else
37be0adf 6504 i = EOF;
c07a80fd 6505 }
79072805 6506
cbe9e203
JH
6507 if (cnt < 0)
6508 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6509 if (append)
6510 sv_catpvn(sv, (char *) buf, cnt);
6511 else
6512 sv_setpvn(sv, (char *) buf, cnt);
c07a80fd 6513
6514 if (i != EOF && /* joy */
6515 (!rslen ||
6516 SvCUR(sv) < rslen ||
3f7c398e 6517 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
79072805
LW
6518 {
6519 append = -1;
63e4d877
CS
6520 /*
6521 * If we're reading from a TTY and we get a short read,
6522 * indicating that the user hit his EOF character, we need
6523 * to notice it now, because if we try to read from the TTY
6524 * again, the EOF condition will disappear.
6525 *
6526 * The comparison of cnt to sizeof(buf) is an optimization
6527 * that prevents unnecessary calls to feof().
6528 *
6529 * - jik 9/25/96
6530 */
bb7a0f54 6531 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
63e4d877 6532 goto screamer2;
79072805 6533 }
6edd2cd5 6534
27da23d5 6535#ifdef USE_HEAP_INSTEAD_OF_STACK
6edd2cd5
JH
6536 Safefree(buf);
6537#endif
79072805
LW
6538 }
6539
8bfdd7d9 6540 if (rspara) { /* have to do this both before and after */
c07a80fd 6541 while (i != EOF) { /* to make sure file boundaries work right */
760ac839 6542 i = PerlIO_getc(fp);
79072805 6543 if (i != '\n') {
760ac839 6544 PerlIO_ungetc(fp,i);
79072805
LW
6545 break;
6546 }
6547 }
6548 }
c07a80fd 6549
efd8b2ba 6550return_string_or_null:
bd61b366 6551 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
79072805
LW
6552}
6553
954c1994
GS
6554/*
6555=for apidoc sv_inc
6556
645c22ef
DM
6557Auto-increment of the value in the SV, doing string to numeric conversion
6558if necessary. Handles 'get' magic.
954c1994
GS
6559
6560=cut
6561*/
6562
79072805 6563void
864dbfa3 6564Perl_sv_inc(pTHX_ register SV *sv)
79072805 6565{
97aff369 6566 dVAR;
79072805 6567 register char *d;
463ee0b2 6568 int flags;
79072805
LW
6569
6570 if (!sv)
6571 return;
5b295bef 6572 SvGETMAGIC(sv);
ed6116ce 6573 if (SvTHINKFIRST(sv)) {
765f542d
NC
6574 if (SvIsCOW(sv))
6575 sv_force_normal_flags(sv, 0);
0f15f207 6576 if (SvREADONLY(sv)) {
923e4eb5 6577 if (IN_PERL_RUNTIME)
cea2e8a9 6578 Perl_croak(aTHX_ PL_no_modify);
0f15f207 6579 }
a0d0e21e 6580 if (SvROK(sv)) {
b5be31e9 6581 IV i;
9e7bc3e8
JD
6582 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6583 return;
56431972 6584 i = PTR2IV(SvRV(sv));
b5be31e9
SM
6585 sv_unref(sv);
6586 sv_setiv(sv, i);
a0d0e21e 6587 }
ed6116ce 6588 }
8990e307 6589 flags = SvFLAGS(sv);
28e5dec8
JH
6590 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6591 /* It's (privately or publicly) a float, but not tested as an
6592 integer, so test it to see. */
d460ef45 6593 (void) SvIV(sv);
28e5dec8
JH
6594 flags = SvFLAGS(sv);
6595 }
6596 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6597 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 6598#ifdef PERL_PRESERVE_IVUV
28e5dec8 6599 oops_its_int:
59d8ce62 6600#endif
25da4f38
IZ
6601 if (SvIsUV(sv)) {
6602 if (SvUVX(sv) == UV_MAX)
a1e868e7 6603 sv_setnv(sv, UV_MAX_P1);
25da4f38
IZ
6604 else
6605 (void)SvIOK_only_UV(sv);
607fa7f2 6606 SvUV_set(sv, SvUVX(sv) + 1);
25da4f38
IZ
6607 } else {
6608 if (SvIVX(sv) == IV_MAX)
28e5dec8 6609 sv_setuv(sv, (UV)IV_MAX + 1);
25da4f38
IZ
6610 else {
6611 (void)SvIOK_only(sv);
45977657 6612 SvIV_set(sv, SvIVX(sv) + 1);
1c846c1f 6613 }
55497cff 6614 }
79072805
LW
6615 return;
6616 }
28e5dec8
JH
6617 if (flags & SVp_NOK) {
6618 (void)SvNOK_only(sv);
9d6ce603 6619 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
6620 return;
6621 }
6622
3f7c398e 6623 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
28e5dec8 6624 if ((flags & SVTYPEMASK) < SVt_PVIV)
f5282e15 6625 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
28e5dec8 6626 (void)SvIOK_only(sv);
45977657 6627 SvIV_set(sv, 1);
79072805
LW
6628 return;
6629 }
463ee0b2 6630 d = SvPVX(sv);
79072805
LW
6631 while (isALPHA(*d)) d++;
6632 while (isDIGIT(*d)) d++;
6633 if (*d) {
28e5dec8 6634#ifdef PERL_PRESERVE_IVUV
d1be9408 6635 /* Got to punt this as an integer if needs be, but we don't issue
28e5dec8
JH
6636 warnings. Probably ought to make the sv_iv_please() that does
6637 the conversion if possible, and silently. */
504618e9 6638 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
6639 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6640 /* Need to try really hard to see if it's an integer.
6641 9.22337203685478e+18 is an integer.
6642 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6643 so $a="9.22337203685478e+18"; $a+0; $a++
6644 needs to be the same as $a="9.22337203685478e+18"; $a++
6645 or we go insane. */
d460ef45 6646
28e5dec8
JH
6647 (void) sv_2iv(sv);
6648 if (SvIOK(sv))
6649 goto oops_its_int;
6650
6651 /* sv_2iv *should* have made this an NV */
6652 if (flags & SVp_NOK) {
6653 (void)SvNOK_only(sv);
9d6ce603 6654 SvNV_set(sv, SvNVX(sv) + 1.0);
28e5dec8
JH
6655 return;
6656 }
6657 /* I don't think we can get here. Maybe I should assert this
6658 And if we do get here I suspect that sv_setnv will croak. NWC
6659 Fall through. */
6660#if defined(USE_LONG_DOUBLE)
6661 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 6662 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 6663#else
1779d84d 6664 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 6665 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
6666#endif
6667 }
6668#endif /* PERL_PRESERVE_IVUV */
3f7c398e 6669 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
79072805
LW
6670 return;
6671 }
6672 d--;
3f7c398e 6673 while (d >= SvPVX_const(sv)) {
79072805
LW
6674 if (isDIGIT(*d)) {
6675 if (++*d <= '9')
6676 return;
6677 *(d--) = '0';
6678 }
6679 else {
9d116dd7
JH
6680#ifdef EBCDIC
6681 /* MKS: The original code here died if letters weren't consecutive.
6682 * at least it didn't have to worry about non-C locales. The
6683 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
1c846c1f 6684 * arranged in order (although not consecutively) and that only
9d116dd7
JH
6685 * [A-Za-z] are accepted by isALPHA in the C locale.
6686 */
6687 if (*d != 'z' && *d != 'Z') {
6688 do { ++*d; } while (!isALPHA(*d));
6689 return;
6690 }
6691 *(d--) -= 'z' - 'a';
6692#else
79072805
LW
6693 ++*d;
6694 if (isALPHA(*d))
6695 return;
6696 *(d--) -= 'z' - 'a' + 1;
9d116dd7 6697#endif
79072805
LW
6698 }
6699 }
6700 /* oh,oh, the number grew */
6701 SvGROW(sv, SvCUR(sv) + 2);
b162af07 6702 SvCUR_set(sv, SvCUR(sv) + 1);
3f7c398e 6703 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
79072805
LW
6704 *d = d[-1];
6705 if (isDIGIT(d[1]))
6706 *d = '1';
6707 else
6708 *d = d[1];
6709}
6710
954c1994
GS
6711/*
6712=for apidoc sv_dec
6713
645c22ef
DM
6714Auto-decrement of the value in the SV, doing string to numeric conversion
6715if necessary. Handles 'get' magic.
954c1994
GS
6716
6717=cut
6718*/
6719
79072805 6720void
864dbfa3 6721Perl_sv_dec(pTHX_ register SV *sv)
79072805 6722{
97aff369 6723 dVAR;
463ee0b2
LW
6724 int flags;
6725
79072805
LW
6726 if (!sv)
6727 return;
5b295bef 6728 SvGETMAGIC(sv);
ed6116ce 6729 if (SvTHINKFIRST(sv)) {
765f542d
NC
6730 if (SvIsCOW(sv))
6731 sv_force_normal_flags(sv, 0);
0f15f207 6732 if (SvREADONLY(sv)) {
923e4eb5 6733 if (IN_PERL_RUNTIME)
cea2e8a9 6734 Perl_croak(aTHX_ PL_no_modify);
0f15f207 6735 }
a0d0e21e 6736 if (SvROK(sv)) {
b5be31e9 6737 IV i;
9e7bc3e8
JD
6738 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6739 return;
56431972 6740 i = PTR2IV(SvRV(sv));
b5be31e9
SM
6741 sv_unref(sv);
6742 sv_setiv(sv, i);
a0d0e21e 6743 }
ed6116ce 6744 }
28e5dec8
JH
6745 /* Unlike sv_inc we don't have to worry about string-never-numbers
6746 and keeping them magic. But we mustn't warn on punting */
8990e307 6747 flags = SvFLAGS(sv);
28e5dec8
JH
6748 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6749 /* It's publicly an integer, or privately an integer-not-float */
59d8ce62 6750#ifdef PERL_PRESERVE_IVUV
28e5dec8 6751 oops_its_int:
59d8ce62 6752#endif
25da4f38
IZ
6753 if (SvIsUV(sv)) {
6754 if (SvUVX(sv) == 0) {
6755 (void)SvIOK_only(sv);
45977657 6756 SvIV_set(sv, -1);
25da4f38
IZ
6757 }
6758 else {
6759 (void)SvIOK_only_UV(sv);
f4eee32f 6760 SvUV_set(sv, SvUVX(sv) - 1);
1c846c1f 6761 }
25da4f38
IZ
6762 } else {
6763 if (SvIVX(sv) == IV_MIN)
65202027 6764 sv_setnv(sv, (NV)IV_MIN - 1.0);
25da4f38
IZ
6765 else {
6766 (void)SvIOK_only(sv);
45977657 6767 SvIV_set(sv, SvIVX(sv) - 1);
1c846c1f 6768 }
55497cff 6769 }
6770 return;
6771 }
28e5dec8 6772 if (flags & SVp_NOK) {
9d6ce603 6773 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
6774 (void)SvNOK_only(sv);
6775 return;
6776 }
8990e307 6777 if (!(flags & SVp_POK)) {
ef088171
NC
6778 if ((flags & SVTYPEMASK) < SVt_PVIV)
6779 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
6780 SvIV_set(sv, -1);
6781 (void)SvIOK_only(sv);
79072805
LW
6782 return;
6783 }
28e5dec8
JH
6784#ifdef PERL_PRESERVE_IVUV
6785 {
504618e9 6786 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
28e5dec8
JH
6787 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6788 /* Need to try really hard to see if it's an integer.
6789 9.22337203685478e+18 is an integer.
6790 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6791 so $a="9.22337203685478e+18"; $a+0; $a--
6792 needs to be the same as $a="9.22337203685478e+18"; $a--
6793 or we go insane. */
d460ef45 6794
28e5dec8
JH
6795 (void) sv_2iv(sv);
6796 if (SvIOK(sv))
6797 goto oops_its_int;
6798
6799 /* sv_2iv *should* have made this an NV */
6800 if (flags & SVp_NOK) {
6801 (void)SvNOK_only(sv);
9d6ce603 6802 SvNV_set(sv, SvNVX(sv) - 1.0);
28e5dec8
JH
6803 return;
6804 }
6805 /* I don't think we can get here. Maybe I should assert this
6806 And if we do get here I suspect that sv_setnv will croak. NWC
6807 Fall through. */
6808#if defined(USE_LONG_DOUBLE)
6809 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 6810 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8 6811#else
1779d84d 6812 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 6813 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
28e5dec8
JH
6814#endif
6815 }
6816 }
6817#endif /* PERL_PRESERVE_IVUV */
3f7c398e 6818 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
79072805
LW
6819}
6820
954c1994
GS
6821/*
6822=for apidoc sv_mortalcopy
6823
645c22ef 6824Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
d4236ebc
DM
6825The new SV is marked as mortal. It will be destroyed "soon", either by an
6826explicit call to FREETMPS, or by an implicit call at places such as
6827statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
954c1994
GS
6828
6829=cut
6830*/
6831
79072805
LW
6832/* Make a string that will exist for the duration of the expression
6833 * evaluation. Actually, it may have to last longer than that, but
6834 * hopefully we won't free it until it has been assigned to a
6835 * permanent location. */
6836
6837SV *
864dbfa3 6838Perl_sv_mortalcopy(pTHX_ SV *oldstr)
79072805 6839{
97aff369 6840 dVAR;
463ee0b2 6841 register SV *sv;
b881518d 6842
4561caa4 6843 new_SV(sv);
79072805 6844 sv_setsv(sv,oldstr);
677b06e3
GS
6845 EXTEND_MORTAL(1);
6846 PL_tmps_stack[++PL_tmps_ix] = sv;
8990e307
LW
6847 SvTEMP_on(sv);
6848 return sv;
6849}
6850
954c1994
GS
6851/*
6852=for apidoc sv_newmortal
6853
645c22ef 6854Creates a new null SV which is mortal. The reference count of the SV is
d4236ebc
DM
6855set to 1. It will be destroyed "soon", either by an explicit call to
6856FREETMPS, or by an implicit call at places such as statement boundaries.
6857See also C<sv_mortalcopy> and C<sv_2mortal>.
954c1994
GS
6858
6859=cut
6860*/
6861
8990e307 6862SV *
864dbfa3 6863Perl_sv_newmortal(pTHX)
8990e307 6864{
97aff369 6865 dVAR;
8990e307
LW
6866 register SV *sv;
6867
4561caa4 6868 new_SV(sv);
8990e307 6869 SvFLAGS(sv) = SVs_TEMP;
677b06e3
GS
6870 EXTEND_MORTAL(1);
6871 PL_tmps_stack[++PL_tmps_ix] = sv;
79072805
LW
6872 return sv;
6873}
6874
954c1994
GS
6875/*
6876=for apidoc sv_2mortal
6877
d4236ebc
DM
6878Marks an existing SV as mortal. The SV will be destroyed "soon", either
6879by an explicit call to FREETMPS, or by an implicit call at places such as
37d2ac18
NC
6880statement boundaries. SvTEMP() is turned on which means that the SV's
6881string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
6882and C<sv_mortalcopy>.
954c1994
GS
6883
6884=cut
6885*/
6886
79072805 6887SV *
864dbfa3 6888Perl_sv_2mortal(pTHX_ register SV *sv)
79072805 6889{
27da23d5 6890 dVAR;
79072805 6891 if (!sv)
7a5b473e 6892 return NULL;
d689ffdd 6893 if (SvREADONLY(sv) && SvIMMORTAL(sv))
11162842 6894 return sv;
677b06e3
GS
6895 EXTEND_MORTAL(1);
6896 PL_tmps_stack[++PL_tmps_ix] = sv;
8990e307 6897 SvTEMP_on(sv);
79072805
LW
6898 return sv;
6899}
6900
954c1994
GS
6901/*
6902=for apidoc newSVpv
6903
6904Creates a new SV and copies a string into it. The reference count for the
6905SV is set to 1. If C<len> is zero, Perl will compute the length using
6906strlen(). For efficiency, consider using C<newSVpvn> instead.
6907
6908=cut
6909*/
6910
79072805 6911SV *
864dbfa3 6912Perl_newSVpv(pTHX_ const char *s, STRLEN len)
79072805 6913{
97aff369 6914 dVAR;
463ee0b2 6915 register SV *sv;
79072805 6916
4561caa4 6917 new_SV(sv);
ddfa59c7 6918 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
79072805
LW
6919 return sv;
6920}
6921
954c1994
GS
6922/*
6923=for apidoc newSVpvn
6924
6925Creates a new SV and copies a string into it. The reference count for the
1c846c1f 6926SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
954c1994 6927string. You are responsible for ensuring that the source string is at least
9e09f5f2 6928C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
954c1994
GS
6929
6930=cut
6931*/
6932
9da1e3b5 6933SV *
864dbfa3 6934Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
9da1e3b5 6935{
97aff369 6936 dVAR;
9da1e3b5
MUN
6937 register SV *sv;
6938
6939 new_SV(sv);
9da1e3b5
MUN
6940 sv_setpvn(sv,s,len);
6941 return sv;
6942}
6943
bd08039b
NC
6944
6945/*
926f8064 6946=for apidoc newSVhek
bd08039b
NC
6947
6948Creates a new SV from the hash key structure. It will generate scalars that
5aaec2b4
NC
6949point to the shared string table where possible. Returns a new (undefined)
6950SV if the hek is NULL.
bd08039b
NC
6951
6952=cut
6953*/
6954
6955SV *
c1b02ed8 6956Perl_newSVhek(pTHX_ const HEK *hek)
bd08039b 6957{
97aff369 6958 dVAR;
5aaec2b4
NC
6959 if (!hek) {
6960 SV *sv;
6961
6962 new_SV(sv);
6963 return sv;
6964 }
6965
bd08039b
NC
6966 if (HEK_LEN(hek) == HEf_SVKEY) {
6967 return newSVsv(*(SV**)HEK_KEY(hek));
6968 } else {
6969 const int flags = HEK_FLAGS(hek);
6970 if (flags & HVhek_WASUTF8) {
6971 /* Trouble :-)
6972 Andreas would like keys he put in as utf8 to come back as utf8
6973 */
6974 STRLEN utf8_len = HEK_LEN(hek);
b64e5050
AL
6975 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
6976 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
bd08039b
NC
6977
6978 SvUTF8_on (sv);
6979 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
6980 return sv;
45e34800 6981 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
bd08039b
NC
6982 /* We don't have a pointer to the hv, so we have to replicate the
6983 flag into every HEK. This hv is using custom a hasing
6984 algorithm. Hence we can't return a shared string scalar, as
6985 that would contain the (wrong) hash value, and might get passed
45e34800
NC
6986 into an hv routine with a regular hash.
6987 Similarly, a hash that isn't using shared hash keys has to have
6988 the flag in every key so that we know not to try to call
6989 share_hek_kek on it. */
bd08039b 6990
b64e5050 6991 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
bd08039b
NC
6992 if (HEK_UTF8(hek))
6993 SvUTF8_on (sv);
6994 return sv;
6995 }
6996 /* This will be overwhelminly the most common case. */
409dfe77
NC
6997 {
6998 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
6999 more efficient than sharepvn(). */
7000 SV *sv;
7001
7002 new_SV(sv);
7003 sv_upgrade(sv, SVt_PV);
7004 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7005 SvCUR_set(sv, HEK_LEN(hek));
7006 SvLEN_set(sv, 0);
7007 SvREADONLY_on(sv);
7008 SvFAKE_on(sv);
7009 SvPOK_on(sv);
7010 if (HEK_UTF8(hek))
7011 SvUTF8_on(sv);
7012 return sv;
7013 }
bd08039b
NC
7014 }
7015}
7016
1c846c1f
NIS
7017/*
7018=for apidoc newSVpvn_share
7019
3f7c398e 7020Creates a new SV with its SvPVX_const pointing to a shared string in the string
645c22ef
DM
7021table. If the string does not already exist in the table, it is created
7022first. Turns on READONLY and FAKE. The string's hash is stored in the UV
7023slot of the SV; if the C<hash> parameter is non-zero, that value is used;
7024otherwise the hash is computed. The idea here is that as the string table
3f7c398e 7025is used for shared hash keys these strings will have SvPVX_const == HeKEY and
645c22ef 7026hash lookup will avoid string compare.
1c846c1f
NIS
7027
7028=cut
7029*/
7030
7031SV *
c3654f1a 7032Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
1c846c1f 7033{
97aff369 7034 dVAR;
1c846c1f 7035 register SV *sv;
c3654f1a 7036 bool is_utf8 = FALSE;
a51caccf
NC
7037 const char *const orig_src = src;
7038
c3654f1a 7039 if (len < 0) {
77caf834 7040 STRLEN tmplen = -len;
c3654f1a 7041 is_utf8 = TRUE;
75a54232 7042 /* See the note in hv.c:hv_fetch() --jhi */
e1ec3a88 7043 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
75a54232
JH
7044 len = tmplen;
7045 }
1c846c1f 7046 if (!hash)
5afd6d42 7047 PERL_HASH(hash, src, len);
1c846c1f 7048 new_SV(sv);
bdd68bc3 7049 sv_upgrade(sv, SVt_PV);
f880fe2f 7050 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
b162af07 7051 SvCUR_set(sv, len);
b162af07 7052 SvLEN_set(sv, 0);
1c846c1f
NIS
7053 SvREADONLY_on(sv);
7054 SvFAKE_on(sv);
7055 SvPOK_on(sv);
c3654f1a
IH
7056 if (is_utf8)
7057 SvUTF8_on(sv);
a51caccf
NC
7058 if (src != orig_src)
7059 Safefree(src);
1c846c1f
NIS
7060 return sv;
7061}
7062
645c22ef 7063
cea2e8a9 7064#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
7065
7066/* pTHX_ magic can't cope with varargs, so this is a no-context
7067 * version of the main function, (which may itself be aliased to us).
7068 * Don't access this version directly.
7069 */
7070
46fc3d4c 7071SV *
cea2e8a9 7072Perl_newSVpvf_nocontext(const char* pat, ...)
46fc3d4c 7073{
cea2e8a9 7074 dTHX;
46fc3d4c 7075 register SV *sv;
7076 va_list args;
46fc3d4c 7077 va_start(args, pat);
c5be433b 7078 sv = vnewSVpvf(pat, &args);
46fc3d4c 7079 va_end(args);
7080 return sv;
7081}
cea2e8a9 7082#endif
46fc3d4c 7083
954c1994
GS
7084/*
7085=for apidoc newSVpvf
7086
645c22ef 7087Creates a new SV and initializes it with the string formatted like
954c1994
GS
7088C<sprintf>.
7089
7090=cut
7091*/
7092
cea2e8a9
GS
7093SV *
7094Perl_newSVpvf(pTHX_ const char* pat, ...)
7095{
7096 register SV *sv;
7097 va_list args;
cea2e8a9 7098 va_start(args, pat);
c5be433b 7099 sv = vnewSVpvf(pat, &args);
cea2e8a9
GS
7100 va_end(args);
7101 return sv;
7102}
46fc3d4c 7103
645c22ef
DM
7104/* backend for newSVpvf() and newSVpvf_nocontext() */
7105
79072805 7106SV *
c5be433b
GS
7107Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
7108{
97aff369 7109 dVAR;
c5be433b
GS
7110 register SV *sv;
7111 new_SV(sv);
4608196e 7112 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
7113 return sv;
7114}
7115
954c1994
GS
7116/*
7117=for apidoc newSVnv
7118
7119Creates a new SV and copies a floating point value into it.
7120The reference count for the SV is set to 1.
7121
7122=cut
7123*/
7124
c5be433b 7125SV *
65202027 7126Perl_newSVnv(pTHX_ NV n)
79072805 7127{
97aff369 7128 dVAR;
463ee0b2 7129 register SV *sv;
79072805 7130
4561caa4 7131 new_SV(sv);
79072805
LW
7132 sv_setnv(sv,n);
7133 return sv;
7134}
7135
954c1994
GS
7136/*
7137=for apidoc newSViv
7138
7139Creates a new SV and copies an integer into it. The reference count for the
7140SV is set to 1.
7141
7142=cut
7143*/
7144
79072805 7145SV *
864dbfa3 7146Perl_newSViv(pTHX_ IV i)
79072805 7147{
97aff369 7148 dVAR;
463ee0b2 7149 register SV *sv;
79072805 7150
4561caa4 7151 new_SV(sv);
79072805
LW
7152 sv_setiv(sv,i);
7153 return sv;
7154}
7155
954c1994 7156/*
1a3327fb
JH
7157=for apidoc newSVuv
7158
7159Creates a new SV and copies an unsigned integer into it.
7160The reference count for the SV is set to 1.
7161
7162=cut
7163*/
7164
7165SV *
7166Perl_newSVuv(pTHX_ UV u)
7167{
97aff369 7168 dVAR;
1a3327fb
JH
7169 register SV *sv;
7170
7171 new_SV(sv);
7172 sv_setuv(sv,u);
7173 return sv;
7174}
7175
7176/*
954c1994
GS
7177=for apidoc newRV_noinc
7178
7179Creates an RV wrapper for an SV. The reference count for the original
7180SV is B<not> incremented.
7181
7182=cut
7183*/
7184
2304df62 7185SV *
864dbfa3 7186Perl_newRV_noinc(pTHX_ SV *tmpRef)
2304df62 7187{
97aff369 7188 dVAR;
2304df62
AD
7189 register SV *sv;
7190
4561caa4 7191 new_SV(sv);
2304df62 7192 sv_upgrade(sv, SVt_RV);
76e3520e 7193 SvTEMP_off(tmpRef);
b162af07 7194 SvRV_set(sv, tmpRef);
2304df62 7195 SvROK_on(sv);
2304df62
AD
7196 return sv;
7197}
7198
ff276b08 7199/* newRV_inc is the official function name to use now.
645c22ef
DM
7200 * newRV_inc is in fact #defined to newRV in sv.h
7201 */
7202
5f05dabc 7203SV *
7f466ec7 7204Perl_newRV(pTHX_ SV *sv)
5f05dabc 7205{
97aff369 7206 dVAR;
7f466ec7 7207 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
5f05dabc 7208}
5f05dabc 7209
954c1994
GS
7210/*
7211=for apidoc newSVsv
7212
7213Creates a new SV which is an exact duplicate of the original SV.
645c22ef 7214(Uses C<sv_setsv>).
954c1994
GS
7215
7216=cut
7217*/
7218
79072805 7219SV *
864dbfa3 7220Perl_newSVsv(pTHX_ register SV *old)
79072805 7221{
97aff369 7222 dVAR;
463ee0b2 7223 register SV *sv;
79072805
LW
7224
7225 if (!old)
7a5b473e 7226 return NULL;
8990e307 7227 if (SvTYPE(old) == SVTYPEMASK) {
0453d815 7228 if (ckWARN_d(WARN_INTERNAL))
9014280d 7229 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
a0714e2c 7230 return NULL;
79072805 7231 }
4561caa4 7232 new_SV(sv);
e90aabeb
NC
7233 /* SV_GMAGIC is the default for sv_setv()
7234 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7235 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7236 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
463ee0b2 7237 return sv;
79072805
LW
7238}
7239
645c22ef
DM
7240/*
7241=for apidoc sv_reset
7242
7243Underlying implementation for the C<reset> Perl function.
7244Note that the perl-level function is vaguely deprecated.
7245
7246=cut
7247*/
7248
79072805 7249void
e1ec3a88 7250Perl_sv_reset(pTHX_ register const char *s, HV *stash)
79072805 7251{
27da23d5 7252 dVAR;
4802d5d7 7253 char todo[PERL_UCHAR_MAX+1];
79072805 7254
49d8d3a1
MB
7255 if (!stash)
7256 return;
7257
79072805 7258 if (!*s) { /* reset ?? searches */
aec46f14 7259 MAGIC * const mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
8d2f4536
NC
7260 if (mg) {
7261 PMOP *pm = (PMOP *) mg->mg_obj;
7262 while (pm) {
7263 pm->op_pmdynflags &= ~PMdf_USED;
7264 pm = pm->op_pmnext;
7265 }
79072805
LW
7266 }
7267 return;
7268 }
7269
7270 /* reset variables */
7271
7272 if (!HvARRAY(stash))
7273 return;
463ee0b2
LW
7274
7275 Zero(todo, 256, char);
79072805 7276 while (*s) {
b464bac0
AL
7277 I32 max;
7278 I32 i = (unsigned char)*s;
79072805
LW
7279 if (s[1] == '-') {
7280 s += 2;
7281 }
4802d5d7 7282 max = (unsigned char)*s++;
79072805 7283 for ( ; i <= max; i++) {
463ee0b2
LW
7284 todo[i] = 1;
7285 }
a0d0e21e 7286 for (i = 0; i <= (I32) HvMAX(stash); i++) {
b464bac0 7287 HE *entry;
79072805 7288 for (entry = HvARRAY(stash)[i];
9e35f4b3
GS
7289 entry;
7290 entry = HeNEXT(entry))
7291 {
b464bac0
AL
7292 register GV *gv;
7293 register SV *sv;
7294
1edc1566 7295 if (!todo[(U8)*HeKEY(entry)])
463ee0b2 7296 continue;
1edc1566 7297 gv = (GV*)HeVAL(entry);
79072805 7298 sv = GvSV(gv);
e203899d
NC
7299 if (sv) {
7300 if (SvTHINKFIRST(sv)) {
7301 if (!SvREADONLY(sv) && SvROK(sv))
7302 sv_unref(sv);
7303 /* XXX Is this continue a bug? Why should THINKFIRST
7304 exempt us from resetting arrays and hashes? */
7305 continue;
7306 }
7307 SvOK_off(sv);
7308 if (SvTYPE(sv) >= SVt_PV) {
7309 SvCUR_set(sv, 0);
bd61b366 7310 if (SvPVX_const(sv) != NULL)
e203899d
NC
7311 *SvPVX(sv) = '\0';
7312 SvTAINT(sv);
7313 }
79072805
LW
7314 }
7315 if (GvAV(gv)) {
7316 av_clear(GvAV(gv));
7317 }
bfcb3514 7318 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
b0269e46
AB
7319#if defined(VMS)
7320 Perl_die(aTHX_ "Can't reset %%ENV on this system");
7321#else /* ! VMS */
463ee0b2 7322 hv_clear(GvHV(gv));
b0269e46
AB
7323# if defined(USE_ENVIRON_ARRAY)
7324 if (gv == PL_envgv)
7325 my_clearenv();
7326# endif /* USE_ENVIRON_ARRAY */
7327#endif /* VMS */
79072805
LW
7328 }
7329 }
7330 }
7331 }
7332}
7333
645c22ef
DM
7334/*
7335=for apidoc sv_2io
7336
7337Using various gambits, try to get an IO from an SV: the IO slot if its a
7338GV; or the recursive result if we're an RV; or the IO slot of the symbol
7339named after the PV if we're a string.
7340
7341=cut
7342*/
7343
46fc3d4c 7344IO*
864dbfa3 7345Perl_sv_2io(pTHX_ SV *sv)
46fc3d4c 7346{
7347 IO* io;
7348 GV* gv;
7349
7350 switch (SvTYPE(sv)) {
7351 case SVt_PVIO:
7352 io = (IO*)sv;
7353 break;
7354 case SVt_PVGV:
7355 gv = (GV*)sv;
7356 io = GvIO(gv);
7357 if (!io)
cea2e8a9 7358 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
46fc3d4c 7359 break;
7360 default:
7361 if (!SvOK(sv))
cea2e8a9 7362 Perl_croak(aTHX_ PL_no_usym, "filehandle");
46fc3d4c 7363 if (SvROK(sv))
7364 return sv_2io(SvRV(sv));
f776e3cd 7365 gv = gv_fetchsv(sv, 0, SVt_PVIO);
46fc3d4c 7366 if (gv)
7367 io = GvIO(gv);
7368 else
7369 io = 0;
7370 if (!io)
95b63a38 7371 Perl_croak(aTHX_ "Bad filehandle: %"SVf, (void*)sv);
46fc3d4c 7372 break;
7373 }
7374 return io;
7375}
7376
645c22ef
DM
7377/*
7378=for apidoc sv_2cv
7379
7380Using various gambits, try to get a CV from an SV; in addition, try if
7381possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
f2c0649b 7382The flags in C<lref> are passed to sv_fetchsv.
645c22ef
DM
7383
7384=cut
7385*/
7386
79072805 7387CV *
864dbfa3 7388Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
79072805 7389{
27da23d5 7390 dVAR;
a0714e2c 7391 GV *gv = NULL;
601f1833 7392 CV *cv = NULL;
79072805 7393
85dec29a
NC
7394 if (!sv) {
7395 *st = NULL;
7396 *gvp = NULL;
7397 return NULL;
7398 }
79072805 7399 switch (SvTYPE(sv)) {
79072805
LW
7400 case SVt_PVCV:
7401 *st = CvSTASH(sv);
a0714e2c 7402 *gvp = NULL;
79072805
LW
7403 return (CV*)sv;
7404 case SVt_PVHV:
7405 case SVt_PVAV:
ef58ba18 7406 *st = NULL;
a0714e2c 7407 *gvp = NULL;
601f1833 7408 return NULL;
8990e307
LW
7409 case SVt_PVGV:
7410 gv = (GV*)sv;
a0d0e21e 7411 *gvp = gv;
8990e307
LW
7412 *st = GvESTASH(gv);
7413 goto fix_gv;
7414
79072805 7415 default:
5b295bef 7416 SvGETMAGIC(sv);
a0d0e21e 7417 if (SvROK(sv)) {
823a54a3 7418 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
f5284f61
IZ
7419 tryAMAGICunDEREF(to_cv);
7420
62f274bf
GS
7421 sv = SvRV(sv);
7422 if (SvTYPE(sv) == SVt_PVCV) {
7423 cv = (CV*)sv;
a0714e2c 7424 *gvp = NULL;
62f274bf
GS
7425 *st = CvSTASH(cv);
7426 return cv;
7427 }
7428 else if(isGV(sv))
7429 gv = (GV*)sv;
7430 else
cea2e8a9 7431 Perl_croak(aTHX_ "Not a subroutine reference");
a0d0e21e 7432 }
62f274bf 7433 else if (isGV(sv))
79072805
LW
7434 gv = (GV*)sv;
7435 else
7a5fd60d 7436 gv = gv_fetchsv(sv, lref, SVt_PVCV);
79072805 7437 *gvp = gv;
ef58ba18
NC
7438 if (!gv) {
7439 *st = NULL;
601f1833 7440 return NULL;
ef58ba18 7441 }
e26df76a
NC
7442 /* Some flags to gv_fetchsv mean don't really create the GV */
7443 if (SvTYPE(gv) != SVt_PVGV) {
7444 *st = NULL;
7445 return NULL;
7446 }
79072805 7447 *st = GvESTASH(gv);
8990e307 7448 fix_gv:
8ebc5c01 7449 if (lref && !GvCVu(gv)) {
4633a7c4 7450 SV *tmpsv;
748a9306 7451 ENTER;
561b68a9 7452 tmpsv = newSV(0);
bd61b366 7453 gv_efullname3(tmpsv, gv, NULL);
f6ec51f7
GS
7454 /* XXX this is probably not what they think they're getting.
7455 * It has the same effect as "sub name;", i.e. just a forward
7456 * declaration! */
774d564b 7457 newSUB(start_subparse(FALSE, 0),
4633a7c4 7458 newSVOP(OP_CONST, 0, tmpsv),
5f66b61c 7459 NULL, NULL);
748a9306 7460 LEAVE;
8ebc5c01 7461 if (!GvCVu(gv))
35c1215d 7462 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
95b63a38 7463 (void*)sv);
8990e307 7464 }
8ebc5c01 7465 return GvCVu(gv);
79072805
LW
7466 }
7467}
7468
c461cf8f
JH
7469/*
7470=for apidoc sv_true
7471
7472Returns true if the SV has a true value by Perl's rules.
645c22ef
DM
7473Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7474instead use an in-line version.
c461cf8f
JH
7475
7476=cut
7477*/
7478
79072805 7479I32
864dbfa3 7480Perl_sv_true(pTHX_ register SV *sv)
79072805 7481{
8990e307
LW
7482 if (!sv)
7483 return 0;
79072805 7484 if (SvPOK(sv)) {
823a54a3
AL
7485 register const XPV* const tXpv = (XPV*)SvANY(sv);
7486 if (tXpv &&
c2f1de04 7487 (tXpv->xpv_cur > 1 ||
339049b0 7488 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
79072805
LW
7489 return 1;
7490 else
7491 return 0;
7492 }
7493 else {
7494 if (SvIOK(sv))
463ee0b2 7495 return SvIVX(sv) != 0;
79072805
LW
7496 else {
7497 if (SvNOK(sv))
463ee0b2 7498 return SvNVX(sv) != 0.0;
79072805 7499 else
463ee0b2 7500 return sv_2bool(sv);
79072805
LW
7501 }
7502 }
7503}
79072805 7504
645c22ef 7505/*
c461cf8f
JH
7506=for apidoc sv_pvn_force
7507
7508Get a sensible string out of the SV somehow.
645c22ef
DM
7509A private implementation of the C<SvPV_force> macro for compilers which
7510can't cope with complex macro expressions. Always use the macro instead.
c461cf8f 7511
8d6d96c1
HS
7512=for apidoc sv_pvn_force_flags
7513
7514Get a sensible string out of the SV somehow.
7515If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7516appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7517implemented in terms of this function.
645c22ef
DM
7518You normally want to use the various wrapper macros instead: see
7519C<SvPV_force> and C<SvPV_force_nomg>
8d6d96c1
HS
7520
7521=cut
7522*/
7523
7524char *
7525Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7526{
97aff369 7527 dVAR;
6fc92669 7528 if (SvTHINKFIRST(sv) && !SvROK(sv))
765f542d 7529 sv_force_normal_flags(sv, 0);
1c846c1f 7530
a0d0e21e 7531 if (SvPOK(sv)) {
13c5b33c
NC
7532 if (lp)
7533 *lp = SvCUR(sv);
a0d0e21e
LW
7534 }
7535 else {
a3b680e6 7536 char *s;
13c5b33c
NC
7537 STRLEN len;
7538
4d84ee25 7539 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
b64e5050 7540 const char * const ref = sv_reftype(sv,0);
4d84ee25
NC
7541 if (PL_op)
7542 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
b64e5050 7543 ref, OP_NAME(PL_op));
4d84ee25 7544 else
b64e5050 7545 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
4d84ee25 7546 }
b64e5050 7547 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
cea2e8a9 7548 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
53e06cf0 7549 OP_NAME(PL_op));
b64e5050 7550 s = sv_2pv_flags(sv, &len, flags);
13c5b33c
NC
7551 if (lp)
7552 *lp = len;
7553
3f7c398e 7554 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
a0d0e21e
LW
7555 if (SvROK(sv))
7556 sv_unref(sv);
862a34c6 7557 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
a0d0e21e 7558 SvGROW(sv, len + 1);
706aa1c9 7559 Move(s,SvPVX(sv),len,char);
a0d0e21e
LW
7560 SvCUR_set(sv, len);
7561 *SvEND(sv) = '\0';
7562 }
7563 if (!SvPOK(sv)) {
7564 SvPOK_on(sv); /* validate pointer */
7565 SvTAINT(sv);
1d7c1841 7566 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3f7c398e 7567 PTR2UV(sv),SvPVX_const(sv)));
a0d0e21e
LW
7568 }
7569 }
4d84ee25 7570 return SvPVX_mutable(sv);
a0d0e21e
LW
7571}
7572
645c22ef 7573/*
645c22ef
DM
7574=for apidoc sv_pvbyten_force
7575
0feed65a 7576The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
645c22ef
DM
7577
7578=cut
7579*/
7580
7340a771
GS
7581char *
7582Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
7583{
46ec2f14 7584 sv_pvn_force(sv,lp);
ffebcc3e 7585 sv_utf8_downgrade(sv,0);
46ec2f14
TS
7586 *lp = SvCUR(sv);
7587 return SvPVX(sv);
7340a771
GS
7588}
7589
645c22ef 7590/*
c461cf8f
JH
7591=for apidoc sv_pvutf8n_force
7592
0feed65a 7593The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
c461cf8f
JH
7594
7595=cut
7596*/
7597
7340a771
GS
7598char *
7599Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
7600{
46ec2f14 7601 sv_pvn_force(sv,lp);
560a288e 7602 sv_utf8_upgrade(sv);
46ec2f14
TS
7603 *lp = SvCUR(sv);
7604 return SvPVX(sv);
7340a771
GS
7605}
7606
c461cf8f
JH
7607/*
7608=for apidoc sv_reftype
7609
7610Returns a string describing what the SV is a reference to.
7611
7612=cut
7613*/
7614
2b388283 7615const char *
bfed75c6 7616Perl_sv_reftype(pTHX_ const SV *sv, int ob)
a0d0e21e 7617{
07409e01
NC
7618 /* The fact that I don't need to downcast to char * everywhere, only in ?:
7619 inside return suggests a const propagation bug in g++. */
c86bf373 7620 if (ob && SvOBJECT(sv)) {
1b6737cc 7621 char * const name = HvNAME_get(SvSTASH(sv));
07409e01 7622 return name ? name : (char *) "__ANON__";
c86bf373 7623 }
a0d0e21e
LW
7624 else {
7625 switch (SvTYPE(sv)) {
7626 case SVt_NULL:
7627 case SVt_IV:
7628 case SVt_NV:
7629 case SVt_RV:
7630 case SVt_PV:
7631 case SVt_PVIV:
7632 case SVt_PVNV:
7633 case SVt_PVMG:
7634 case SVt_PVBM:
1cb0ed9b 7635 if (SvVOK(sv))
439cb1c4 7636 return "VSTRING";
a0d0e21e
LW
7637 if (SvROK(sv))
7638 return "REF";
7639 else
7640 return "SCALAR";
1cb0ed9b 7641
07409e01 7642 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
be65207d
DM
7643 /* tied lvalues should appear to be
7644 * scalars for backwards compatitbility */
7645 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
07409e01 7646 ? "SCALAR" : "LVALUE");
a0d0e21e
LW
7647 case SVt_PVAV: return "ARRAY";
7648 case SVt_PVHV: return "HASH";
7649 case SVt_PVCV: return "CODE";
7650 case SVt_PVGV: return "GLOB";
1d2dff63 7651 case SVt_PVFM: return "FORMAT";
27f9d8f3 7652 case SVt_PVIO: return "IO";
a0d0e21e
LW
7653 default: return "UNKNOWN";
7654 }
7655 }
7656}
7657
954c1994
GS
7658/*
7659=for apidoc sv_isobject
7660
7661Returns a boolean indicating whether the SV is an RV pointing to a blessed
7662object. If the SV is not an RV, or if the object is not blessed, then this
7663will return false.
7664
7665=cut
7666*/
7667
463ee0b2 7668int
864dbfa3 7669Perl_sv_isobject(pTHX_ SV *sv)
85e6fe83 7670{
68dc0745 7671 if (!sv)
7672 return 0;
5b295bef 7673 SvGETMAGIC(sv);
85e6fe83
LW
7674 if (!SvROK(sv))
7675 return 0;
7676 sv = (SV*)SvRV(sv);
7677 if (!SvOBJECT(sv))
7678 return 0;
7679 return 1;
7680}
7681
954c1994
GS
7682/*
7683=for apidoc sv_isa
7684
7685Returns a boolean indicating whether the SV is blessed into the specified
7686class. This does not check for subtypes; use C<sv_derived_from> to verify
7687an inheritance relationship.
7688
7689=cut
7690*/
7691
85e6fe83 7692int
864dbfa3 7693Perl_sv_isa(pTHX_ SV *sv, const char *name)
463ee0b2 7694{
bfcb3514 7695 const char *hvname;
68dc0745 7696 if (!sv)
7697 return 0;
5b295bef 7698 SvGETMAGIC(sv);
ed6116ce 7699 if (!SvROK(sv))
463ee0b2 7700 return 0;
ed6116ce
LW
7701 sv = (SV*)SvRV(sv);
7702 if (!SvOBJECT(sv))
463ee0b2 7703 return 0;
bfcb3514
NC
7704 hvname = HvNAME_get(SvSTASH(sv));
7705 if (!hvname)
e27ad1f2 7706 return 0;
463ee0b2 7707
bfcb3514 7708 return strEQ(hvname, name);
463ee0b2
LW
7709}
7710
954c1994
GS
7711/*
7712=for apidoc newSVrv
7713
7714Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
7715it will be upgraded to one. If C<classname> is non-null then the new SV will
7716be blessed in the specified package. The new SV is returned and its
7717reference count is 1.
7718
7719=cut
7720*/
7721
463ee0b2 7722SV*
864dbfa3 7723Perl_newSVrv(pTHX_ SV *rv, const char *classname)
463ee0b2 7724{
97aff369 7725 dVAR;
463ee0b2
LW
7726 SV *sv;
7727
4561caa4 7728 new_SV(sv);
51cf62d8 7729
765f542d 7730 SV_CHECK_THINKFIRST_COW_DROP(rv);
51cf62d8 7731 SvAMAGIC_off(rv);
51cf62d8 7732
0199fce9 7733 if (SvTYPE(rv) >= SVt_PVMG) {
a3b680e6 7734 const U32 refcnt = SvREFCNT(rv);
0199fce9
JD
7735 SvREFCNT(rv) = 0;
7736 sv_clear(rv);
7737 SvFLAGS(rv) = 0;
7738 SvREFCNT(rv) = refcnt;
0199fce9 7739
dc5494d2
NC
7740 sv_upgrade(rv, SVt_RV);
7741 } else if (SvROK(rv)) {
7742 SvREFCNT_dec(SvRV(rv));
7743 } else if (SvTYPE(rv) < SVt_RV)
0199fce9
JD
7744 sv_upgrade(rv, SVt_RV);
7745 else if (SvTYPE(rv) > SVt_RV) {
8bd4d4c5 7746 SvPV_free(rv);
0199fce9
JD
7747 SvCUR_set(rv, 0);
7748 SvLEN_set(rv, 0);
7749 }
51cf62d8 7750
0c34ef67 7751 SvOK_off(rv);
b162af07 7752 SvRV_set(rv, sv);
ed6116ce 7753 SvROK_on(rv);
463ee0b2 7754
a0d0e21e 7755 if (classname) {
1b6737cc 7756 HV* const stash = gv_stashpv(classname, TRUE);
a0d0e21e
LW
7757 (void)sv_bless(rv, stash);
7758 }
7759 return sv;
7760}
7761
954c1994
GS
7762/*
7763=for apidoc sv_setref_pv
7764
7765Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
7766argument will be upgraded to an RV. That RV will be modified to point to
7767the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7768into the SV. The C<classname> argument indicates the package for the
bd61b366 7769blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7770will have a reference count of 1, and the RV will be returned.
954c1994
GS
7771
7772Do not use with other Perl types such as HV, AV, SV, CV, because those
7773objects will become corrupted by the pointer copy process.
7774
7775Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7776
7777=cut
7778*/
7779
a0d0e21e 7780SV*
864dbfa3 7781Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
a0d0e21e 7782{
97aff369 7783 dVAR;
189b2af5 7784 if (!pv) {
3280af22 7785 sv_setsv(rv, &PL_sv_undef);
189b2af5
GS
7786 SvSETMAGIC(rv);
7787 }
a0d0e21e 7788 else
56431972 7789 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
a0d0e21e
LW
7790 return rv;
7791}
7792
954c1994
GS
7793/*
7794=for apidoc sv_setref_iv
7795
7796Copies an integer into a new SV, optionally blessing the SV. The C<rv>
7797argument will be upgraded to an RV. That RV will be modified to point to
7798the new SV. The C<classname> argument indicates the package for the
bd61b366 7799blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7800will have a reference count of 1, and the RV will be returned.
954c1994
GS
7801
7802=cut
7803*/
7804
a0d0e21e 7805SV*
864dbfa3 7806Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
a0d0e21e
LW
7807{
7808 sv_setiv(newSVrv(rv,classname), iv);
7809 return rv;
7810}
7811
954c1994 7812/*
e1c57cef
JH
7813=for apidoc sv_setref_uv
7814
7815Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
7816argument will be upgraded to an RV. That RV will be modified to point to
7817the new SV. The C<classname> argument indicates the package for the
bd61b366 7818blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7819will have a reference count of 1, and the RV will be returned.
e1c57cef
JH
7820
7821=cut
7822*/
7823
7824SV*
7825Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7826{
7827 sv_setuv(newSVrv(rv,classname), uv);
7828 return rv;
7829}
7830
7831/*
954c1994
GS
7832=for apidoc sv_setref_nv
7833
7834Copies a double into a new SV, optionally blessing the SV. The C<rv>
7835argument will be upgraded to an RV. That RV will be modified to point to
7836the new SV. The C<classname> argument indicates the package for the
bd61b366 7837blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
d34c2299 7838will have a reference count of 1, and the RV will be returned.
954c1994
GS
7839
7840=cut
7841*/
7842
a0d0e21e 7843SV*
65202027 7844Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
a0d0e21e
LW
7845{
7846 sv_setnv(newSVrv(rv,classname), nv);
7847 return rv;
7848}
463ee0b2 7849
954c1994
GS
7850/*
7851=for apidoc sv_setref_pvn
7852
7853Copies a string into a new SV, optionally blessing the SV. The length of the
7854string must be specified with C<n>. The C<rv> argument will be upgraded to
7855an RV. That RV will be modified to point to the new SV. The C<classname>
7856argument indicates the package for the blessing. Set C<classname> to
bd61b366 7857C<NULL> to avoid the blessing. The new SV will have a reference count
d34c2299 7858of 1, and the RV will be returned.
954c1994
GS
7859
7860Note that C<sv_setref_pv> copies the pointer while this copies the string.
7861
7862=cut
7863*/
7864
a0d0e21e 7865SV*
1b6737cc 7866Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, const char *pv, STRLEN n)
a0d0e21e
LW
7867{
7868 sv_setpvn(newSVrv(rv,classname), pv, n);
463ee0b2
LW
7869 return rv;
7870}
7871
954c1994
GS
7872/*
7873=for apidoc sv_bless
7874
7875Blesses an SV into a specified package. The SV must be an RV. The package
7876must be designated by its stash (see C<gv_stashpv()>). The reference count
7877of the SV is unaffected.
7878
7879=cut
7880*/
7881
a0d0e21e 7882SV*
864dbfa3 7883Perl_sv_bless(pTHX_ SV *sv, HV *stash)
a0d0e21e 7884{
97aff369 7885 dVAR;
76e3520e 7886 SV *tmpRef;
a0d0e21e 7887 if (!SvROK(sv))
cea2e8a9 7888 Perl_croak(aTHX_ "Can't bless non-reference value");
76e3520e
GS
7889 tmpRef = SvRV(sv);
7890 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
7891 if (SvREADONLY(tmpRef))
cea2e8a9 7892 Perl_croak(aTHX_ PL_no_modify);
76e3520e
GS
7893 if (SvOBJECT(tmpRef)) {
7894 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 7895 --PL_sv_objcount;
76e3520e 7896 SvREFCNT_dec(SvSTASH(tmpRef));
2e3febc6 7897 }
a0d0e21e 7898 }
76e3520e
GS
7899 SvOBJECT_on(tmpRef);
7900 if (SvTYPE(tmpRef) != SVt_PVIO)
3280af22 7901 ++PL_sv_objcount;
862a34c6 7902 SvUPGRADE(tmpRef, SVt_PVMG);
b37c2d43 7903 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc_simple(stash));
a0d0e21e 7904
2e3febc6
CS
7905 if (Gv_AMG(stash))
7906 SvAMAGIC_on(sv);
7907 else
7908 SvAMAGIC_off(sv);
a0d0e21e 7909
1edbfb88
AB
7910 if(SvSMAGICAL(tmpRef))
7911 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
7912 mg_set(tmpRef);
7913
7914
ecdeb87c 7915
a0d0e21e
LW
7916 return sv;
7917}
7918
645c22ef 7919/* Downgrades a PVGV to a PVMG.
645c22ef
DM
7920 */
7921
76e3520e 7922STATIC void
cea2e8a9 7923S_sv_unglob(pTHX_ SV *sv)
a0d0e21e 7924{
97aff369 7925 dVAR;
850fabdf 7926 void *xpvmg;
b37c2d43 7927 SV * const temp = sv_newmortal();
850fabdf 7928
a0d0e21e
LW
7929 assert(SvTYPE(sv) == SVt_PVGV);
7930 SvFAKE_off(sv);
180488f8
NC
7931 gv_efullname3(temp, (GV *) sv, "*");
7932
f7877b28 7933 if (GvGP(sv)) {
1edc1566 7934 gp_free((GV*)sv);
f7877b28 7935 }
e826b3c7 7936 if (GvSTASH(sv)) {
e15faf7d 7937 sv_del_backref((SV*)GvSTASH(sv), sv);
5c284bb0 7938 GvSTASH(sv) = NULL;
e826b3c7 7939 }
a5f75d66 7940 GvMULTI_off(sv);
acda4c6a
NC
7941 if (GvNAME_HEK(sv)) {
7942 unshare_hek(GvNAME_HEK(sv));
7943 }
dedf8e73 7944 SvSCREAM_off(sv);
850fabdf
GS
7945
7946 /* need to keep SvANY(sv) in the right arena */
7947 xpvmg = new_XPVMG();
7948 StructCopy(SvANY(sv), xpvmg, XPVMG);
7949 del_XPVGV(SvANY(sv));
7950 SvANY(sv) = xpvmg;
7951
a0d0e21e
LW
7952 SvFLAGS(sv) &= ~SVTYPEMASK;
7953 SvFLAGS(sv) |= SVt_PVMG;
180488f8
NC
7954
7955 /* Intentionally not calling any local SET magic, as this isn't so much a
7956 set operation as merely an internal storage change. */
7957 sv_setsv_flags(sv, temp, 0);
a0d0e21e
LW
7958}
7959
954c1994 7960/*
840a7b70 7961=for apidoc sv_unref_flags
954c1994
GS
7962
7963Unsets the RV status of the SV, and decrements the reference count of
7964whatever was being referenced by the RV. This can almost be thought of
840a7b70
IZ
7965as a reversal of C<newSVrv>. The C<cflags> argument can contain
7966C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
7967(otherwise the decrementing is conditional on the reference count being
7968different from one or the reference being a readonly SV).
7889fe52 7969See C<SvROK_off>.
954c1994
GS
7970
7971=cut
7972*/
7973
ed6116ce 7974void
e15faf7d 7975Perl_sv_unref_flags(pTHX_ SV *ref, U32 flags)
ed6116ce 7976{
b64e5050 7977 SV* const target = SvRV(ref);
810b8aa5 7978
e15faf7d
NC
7979 if (SvWEAKREF(ref)) {
7980 sv_del_backref(target, ref);
7981 SvWEAKREF_off(ref);
7982 SvRV_set(ref, NULL);
810b8aa5
GS
7983 return;
7984 }
e15faf7d
NC
7985 SvRV_set(ref, NULL);
7986 SvROK_off(ref);
7987 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
04ca4930 7988 assigned to as BEGIN {$a = \"Foo"} will fail. */
e15faf7d
NC
7989 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
7990 SvREFCNT_dec(target);
840a7b70 7991 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
e15faf7d 7992 sv_2mortal(target); /* Schedule for freeing later */
ed6116ce 7993}
8990e307 7994
840a7b70 7995/*
645c22ef
DM
7996=for apidoc sv_untaint
7997
7998Untaint an SV. Use C<SvTAINTED_off> instead.
7999=cut
8000*/
8001
bbce6d69 8002void
864dbfa3 8003Perl_sv_untaint(pTHX_ SV *sv)
bbce6d69 8004{
13f57bf8 8005 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
b64e5050 8006 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
36477c24 8007 if (mg)
565764a8 8008 mg->mg_len &= ~1;
36477c24 8009 }
bbce6d69 8010}
8011
645c22ef
DM
8012/*
8013=for apidoc sv_tainted
8014
8015Test an SV for taintedness. Use C<SvTAINTED> instead.
8016=cut
8017*/
8018
bbce6d69 8019bool
864dbfa3 8020Perl_sv_tainted(pTHX_ SV *sv)
bbce6d69 8021{
13f57bf8 8022 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
823a54a3 8023 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
2ddb8a4f 8024 if (mg && (mg->mg_len & 1) )
36477c24 8025 return TRUE;
8026 }
8027 return FALSE;
bbce6d69 8028}
8029
09540bc3
JH
8030/*
8031=for apidoc sv_setpviv
8032
8033Copies an integer into the given SV, also updating its string value.
8034Does not handle 'set' magic. See C<sv_setpviv_mg>.
8035
8036=cut
8037*/
8038
8039void
8040Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8041{
8042 char buf[TYPE_CHARS(UV)];
8043 char *ebuf;
b64e5050 8044 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
09540bc3
JH
8045
8046 sv_setpvn(sv, ptr, ebuf - ptr);
8047}
8048
8049/*
8050=for apidoc sv_setpviv_mg
8051
8052Like C<sv_setpviv>, but also handles 'set' magic.
8053
8054=cut
8055*/
8056
8057void
8058Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8059{
df7eb254 8060 sv_setpviv(sv, iv);
09540bc3
JH
8061 SvSETMAGIC(sv);
8062}
8063
cea2e8a9 8064#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
8065
8066/* pTHX_ magic can't cope with varargs, so this is a no-context
8067 * version of the main function, (which may itself be aliased to us).
8068 * Don't access this version directly.
8069 */
8070
cea2e8a9
GS
8071void
8072Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8073{
8074 dTHX;
8075 va_list args;
8076 va_start(args, pat);
c5be433b 8077 sv_vsetpvf(sv, pat, &args);
cea2e8a9
GS
8078 va_end(args);
8079}
8080
645c22ef
DM
8081/* pTHX_ magic can't cope with varargs, so this is a no-context
8082 * version of the main function, (which may itself be aliased to us).
8083 * Don't access this version directly.
8084 */
cea2e8a9
GS
8085
8086void
8087Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8088{
8089 dTHX;
8090 va_list args;
8091 va_start(args, pat);
c5be433b 8092 sv_vsetpvf_mg(sv, pat, &args);
cea2e8a9 8093 va_end(args);
cea2e8a9
GS
8094}
8095#endif
8096
954c1994
GS
8097/*
8098=for apidoc sv_setpvf
8099
bffc3d17
SH
8100Works like C<sv_catpvf> but copies the text into the SV instead of
8101appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
954c1994
GS
8102
8103=cut
8104*/
8105
46fc3d4c 8106void
864dbfa3 8107Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
46fc3d4c 8108{
8109 va_list args;
46fc3d4c 8110 va_start(args, pat);
c5be433b 8111 sv_vsetpvf(sv, pat, &args);
46fc3d4c 8112 va_end(args);
8113}
8114
bffc3d17
SH
8115/*
8116=for apidoc sv_vsetpvf
8117
8118Works like C<sv_vcatpvf> but copies the text into the SV instead of
8119appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8120
8121Usually used via its frontend C<sv_setpvf>.
8122
8123=cut
8124*/
645c22ef 8125
c5be433b
GS
8126void
8127Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8128{
4608196e 8129 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b 8130}
ef50df4b 8131
954c1994
GS
8132/*
8133=for apidoc sv_setpvf_mg
8134
8135Like C<sv_setpvf>, but also handles 'set' magic.
8136
8137=cut
8138*/
8139
ef50df4b 8140void
864dbfa3 8141Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
ef50df4b
GS
8142{
8143 va_list args;
ef50df4b 8144 va_start(args, pat);
c5be433b 8145 sv_vsetpvf_mg(sv, pat, &args);
ef50df4b 8146 va_end(args);
c5be433b
GS
8147}
8148
bffc3d17
SH
8149/*
8150=for apidoc sv_vsetpvf_mg
8151
8152Like C<sv_vsetpvf>, but also handles 'set' magic.
8153
8154Usually used via its frontend C<sv_setpvf_mg>.
8155
8156=cut
8157*/
645c22ef 8158
c5be433b
GS
8159void
8160Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8161{
4608196e 8162 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
8163 SvSETMAGIC(sv);
8164}
8165
cea2e8a9 8166#if defined(PERL_IMPLICIT_CONTEXT)
645c22ef
DM
8167
8168/* pTHX_ magic can't cope with varargs, so this is a no-context
8169 * version of the main function, (which may itself be aliased to us).
8170 * Don't access this version directly.
8171 */
8172
cea2e8a9
GS
8173void
8174Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8175{
8176 dTHX;
8177 va_list args;
8178 va_start(args, pat);
c5be433b 8179 sv_vcatpvf(sv, pat, &args);
cea2e8a9
GS
8180 va_end(args);
8181}
8182
645c22ef
DM
8183/* pTHX_ magic can't cope with varargs, so this is a no-context
8184 * version of the main function, (which may itself be aliased to us).
8185 * Don't access this version directly.
8186 */
8187
cea2e8a9
GS
8188void
8189Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8190{
8191 dTHX;
8192 va_list args;
8193 va_start(args, pat);
c5be433b 8194 sv_vcatpvf_mg(sv, pat, &args);
cea2e8a9 8195 va_end(args);
cea2e8a9
GS
8196}
8197#endif
8198
954c1994
GS
8199/*
8200=for apidoc sv_catpvf
8201
d5ce4a7c
GA
8202Processes its arguments like C<sprintf> and appends the formatted
8203output to an SV. If the appended data contains "wide" characters
8204(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8205and characters >255 formatted with %c), the original SV might get
bffc3d17 8206upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
cdd94ca7
NC
8207C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8208valid UTF-8; if the original SV was bytes, the pattern should be too.
954c1994 8209
d5ce4a7c 8210=cut */
954c1994 8211
46fc3d4c 8212void
864dbfa3 8213Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
46fc3d4c 8214{
8215 va_list args;
46fc3d4c 8216 va_start(args, pat);
c5be433b 8217 sv_vcatpvf(sv, pat, &args);
46fc3d4c 8218 va_end(args);
8219}
8220
bffc3d17
SH
8221/*
8222=for apidoc sv_vcatpvf
8223
8224Processes its arguments like C<vsprintf> and appends the formatted output
8225to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
8226
8227Usually used via its frontend C<sv_catpvf>.
8228
8229=cut
8230*/
645c22ef 8231
ef50df4b 8232void
c5be433b
GS
8233Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8234{
4608196e 8235 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
c5be433b
GS
8236}
8237
954c1994
GS
8238/*
8239=for apidoc sv_catpvf_mg
8240
8241Like C<sv_catpvf>, but also handles 'set' magic.
8242
8243=cut
8244*/
8245
c5be433b 8246void
864dbfa3 8247Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
ef50df4b
GS
8248{
8249 va_list args;
ef50df4b 8250 va_start(args, pat);
c5be433b 8251 sv_vcatpvf_mg(sv, pat, &args);
ef50df4b 8252 va_end(args);
c5be433b
GS
8253}
8254
bffc3d17
SH
8255/*
8256=for apidoc sv_vcatpvf_mg
8257
8258Like C<sv_vcatpvf>, but also handles 'set' magic.
8259
8260Usually used via its frontend C<sv_catpvf_mg>.
8261
8262=cut
8263*/
645c22ef 8264
c5be433b
GS
8265void
8266Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8267{
4608196e 8268 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
ef50df4b
GS
8269 SvSETMAGIC(sv);
8270}
8271
954c1994
GS
8272/*
8273=for apidoc sv_vsetpvfn
8274
bffc3d17 8275Works like C<sv_vcatpvfn> but copies the text into the SV instead of
954c1994
GS
8276appending it.
8277
bffc3d17 8278Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
645c22ef 8279
954c1994
GS
8280=cut
8281*/
8282
46fc3d4c 8283void
7d5ea4e7 8284Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
46fc3d4c 8285{
8286 sv_setpvn(sv, "", 0);
7d5ea4e7 8287 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
46fc3d4c 8288}
8289
2d00ba3b 8290STATIC I32
9dd79c3f 8291S_expect_number(pTHX_ char** pattern)
211dfcf1 8292{
97aff369 8293 dVAR;
211dfcf1
HS
8294 I32 var = 0;
8295 switch (**pattern) {
8296 case '1': case '2': case '3':
8297 case '4': case '5': case '6':
8298 case '7': case '8': case '9':
2fba7546
GA
8299 var = *(*pattern)++ - '0';
8300 while (isDIGIT(**pattern)) {
5f66b61c 8301 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
2fba7546
GA
8302 if (tmp < var)
8303 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_NAME(PL_op) : "sv_vcatpvfn"));
8304 var = tmp;
8305 }
211dfcf1
HS
8306 }
8307 return var;
8308}
211dfcf1 8309
c445ea15
AL
8310STATIC char *
8311S_F0convert(NV nv, char *endbuf, STRLEN *len)
4151a5fe 8312{
a3b680e6 8313 const int neg = nv < 0;
4151a5fe 8314 UV uv;
4151a5fe
IZ
8315
8316 if (neg)
8317 nv = -nv;
8318 if (nv < UV_MAX) {
b464bac0 8319 char *p = endbuf;
4151a5fe 8320 nv += 0.5;
028f8eaa 8321 uv = (UV)nv;
4151a5fe
IZ
8322 if (uv & 1 && uv == nv)
8323 uv--; /* Round to even */
8324 do {
a3b680e6 8325 const unsigned dig = uv % 10;
4151a5fe
IZ
8326 *--p = '0' + dig;
8327 } while (uv /= 10);
8328 if (neg)
8329 *--p = '-';
8330 *len = endbuf - p;
8331 return p;
8332 }
bd61b366 8333 return NULL;
4151a5fe
IZ
8334}
8335
8336
954c1994
GS
8337/*
8338=for apidoc sv_vcatpvfn
8339
8340Processes its arguments like C<vsprintf> and appends the formatted output
8341to an SV. Uses an array of SVs if the C style variable argument list is
8342missing (NULL). When running with taint checks enabled, indicates via
8343C<maybe_tainted> if results are untrustworthy (often due to the use of
8344locales).
8345
bffc3d17 8346Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
645c22ef 8347
954c1994
GS
8348=cut
8349*/
8350
8896765a
RB
8351
8352#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
8353 vecstr = (U8*)SvPV_const(vecsv,veclen);\
8354 vec_utf8 = DO_UTF8(vecsv);
8355
1ef29b0e
RGS
8356/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8357
46fc3d4c 8358void
7d5ea4e7 8359Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
46fc3d4c 8360{
97aff369 8361 dVAR;
46fc3d4c 8362 char *p;
8363 char *q;
a3b680e6 8364 const char *patend;
fc36a67e 8365 STRLEN origlen;
46fc3d4c 8366 I32 svix = 0;
27da23d5 8367 static const char nullstr[] = "(null)";
a0714e2c 8368 SV *argsv = NULL;
b464bac0
AL
8369 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
8370 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
a0714e2c 8371 SV *nsv = NULL;
4151a5fe
IZ
8372 /* Times 4: a decimal digit takes more than 3 binary digits.
8373 * NV_DIG: mantissa takes than many decimal digits.
8374 * Plus 32: Playing safe. */
8375 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8376 /* large enough for "%#.#f" --chip */
8377 /* what about long double NVs? --jhi */
db79b45b 8378
53c1dcc0
AL
8379 PERL_UNUSED_ARG(maybe_tainted);
8380
46fc3d4c 8381 /* no matter what, this is a string now */
fc36a67e 8382 (void)SvPV_force(sv, origlen);
46fc3d4c 8383
8896765a 8384 /* special-case "", "%s", and "%-p" (SVf - see below) */
46fc3d4c 8385 if (patlen == 0)
8386 return;
0dbb1585 8387 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
2d03de9c
AL
8388 if (args) {
8389 const char * const s = va_arg(*args, char*);
8390 sv_catpv(sv, s ? s : nullstr);
8391 }
8392 else if (svix < svmax) {
8393 sv_catsv(sv, *svargs);
2d03de9c
AL
8394 }
8395 return;
0dbb1585 8396 }
8896765a
RB
8397 if (args && patlen == 3 && pat[0] == '%' &&
8398 pat[1] == '-' && pat[2] == 'p') {
8399 argsv = va_arg(*args, SV*);
8400 sv_catsv(sv, argsv);
8896765a 8401 return;
46fc3d4c 8402 }
8403
1d917b39 8404#ifndef USE_LONG_DOUBLE
4151a5fe 8405 /* special-case "%.<number>[gf]" */
7af36d83 8406 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
4151a5fe
IZ
8407 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8408 unsigned digits = 0;
8409 const char *pp;
8410
8411 pp = pat + 2;
8412 while (*pp >= '0' && *pp <= '9')
8413 digits = 10 * digits + (*pp++ - '0');
028f8eaa 8414 if (pp - pat == (int)patlen - 1) {
4151a5fe
IZ
8415 NV nv;
8416
7af36d83 8417 if (svix < svmax)
4151a5fe
IZ
8418 nv = SvNV(*svargs);
8419 else
8420 return;
8421 if (*pp == 'g') {
2873255c
NC
8422 /* Add check for digits != 0 because it seems that some
8423 gconverts are buggy in this case, and we don't yet have
8424 a Configure test for this. */
8425 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8426 /* 0, point, slack */
2e59c212 8427 Gconvert(nv, (int)digits, 0, ebuf);
4151a5fe
IZ
8428 sv_catpv(sv, ebuf);
8429 if (*ebuf) /* May return an empty string for digits==0 */
8430 return;
8431 }
8432 } else if (!digits) {
8433 STRLEN l;
8434
8435 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8436 sv_catpvn(sv, p, l);
8437 return;
8438 }
8439 }
8440 }
8441 }
1d917b39 8442#endif /* !USE_LONG_DOUBLE */
4151a5fe 8443
2cf2cfc6 8444 if (!args && svix < svmax && DO_UTF8(*svargs))
205f51d8 8445 has_utf8 = TRUE;
2cf2cfc6 8446
46fc3d4c 8447 patend = (char*)pat + patlen;
8448 for (p = (char*)pat; p < patend; p = q) {
8449 bool alt = FALSE;
8450 bool left = FALSE;
b22c7a20 8451 bool vectorize = FALSE;
211dfcf1 8452 bool vectorarg = FALSE;
2cf2cfc6 8453 bool vec_utf8 = FALSE;
46fc3d4c 8454 char fill = ' ';
8455 char plus = 0;
8456 char intsize = 0;
8457 STRLEN width = 0;
fc36a67e 8458 STRLEN zeros = 0;
46fc3d4c 8459 bool has_precis = FALSE;
8460 STRLEN precis = 0;
c445ea15 8461 const I32 osvix = svix;
2cf2cfc6 8462 bool is_utf8 = FALSE; /* is this item utf8? */
20f6aaab
AS
8463#ifdef HAS_LDBL_SPRINTF_BUG
8464 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8 8465 with sfio - Allen <allens@cpan.org> */
20f6aaab
AS
8466 bool fix_ldbl_sprintf_bug = FALSE;
8467#endif
205f51d8 8468
46fc3d4c 8469 char esignbuf[4];
89ebb4a3 8470 U8 utf8buf[UTF8_MAXBYTES+1];
46fc3d4c 8471 STRLEN esignlen = 0;
8472
bd61b366 8473 const char *eptr = NULL;
fc36a67e 8474 STRLEN elen = 0;
a0714e2c 8475 SV *vecsv = NULL;
4608196e 8476 const U8 *vecstr = NULL;
b22c7a20 8477 STRLEN veclen = 0;
934abaf1 8478 char c = 0;
46fc3d4c 8479 int i;
9c5ffd7c 8480 unsigned base = 0;
8c8eb53c
RB
8481 IV iv = 0;
8482 UV uv = 0;
9e5b023a
JH
8483 /* we need a long double target in case HAS_LONG_DOUBLE but
8484 not USE_LONG_DOUBLE
8485 */
35fff930 8486#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9e5b023a
JH
8487 long double nv;
8488#else
65202027 8489 NV nv;
9e5b023a 8490#endif
46fc3d4c 8491 STRLEN have;
8492 STRLEN need;
8493 STRLEN gap;
7af36d83 8494 const char *dotstr = ".";
b22c7a20 8495 STRLEN dotstrlen = 1;
211dfcf1 8496 I32 efix = 0; /* explicit format parameter index */
eb3fce90 8497 I32 ewix = 0; /* explicit width index */
211dfcf1
HS
8498 I32 epix = 0; /* explicit precision index */
8499 I32 evix = 0; /* explicit vector index */
eb3fce90 8500 bool asterisk = FALSE;
46fc3d4c 8501
211dfcf1 8502 /* echo everything up to the next format specification */
46fc3d4c 8503 for (q = p; q < patend && *q != '%'; ++q) ;
8504 if (q > p) {
db79b45b
JH
8505 if (has_utf8 && !pat_utf8)
8506 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
8507 else
8508 sv_catpvn(sv, p, q - p);
46fc3d4c 8509 p = q;
8510 }
8511 if (q++ >= patend)
8512 break;
8513
211dfcf1
HS
8514/*
8515 We allow format specification elements in this order:
8516 \d+\$ explicit format parameter index
8517 [-+ 0#]+ flags
a472f209 8518 v|\*(\d+\$)?v vector with optional (optionally specified) arg
f3583277 8519 0 flag (as above): repeated to allow "v02"
211dfcf1
HS
8520 \d+|\*(\d+\$)? width using optional (optionally specified) arg
8521 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
8522 [hlqLV] size
8896765a
RB
8523 [%bcdefginopsuxDFOUX] format (mandatory)
8524*/
8525
8526 if (args) {
8527/*
8528 As of perl5.9.3, printf format checking is on by default.
8529 Internally, perl uses %p formats to provide an escape to
8530 some extended formatting. This block deals with those
8531 extensions: if it does not match, (char*)q is reset and
8532 the normal format processing code is used.
8533
8534 Currently defined extensions are:
8535 %p include pointer address (standard)
8536 %-p (SVf) include an SV (previously %_)
8537 %-<num>p include an SV with precision <num>
8538 %1p (VDf) include a v-string (as %vd)
8539 %<num>p reserved for future extensions
8540
8541 Robin Barker 2005-07-14
211dfcf1 8542*/
8896765a
RB
8543 char* r = q;
8544 bool sv = FALSE;
8545 STRLEN n = 0;
8546 if (*q == '-')
8547 sv = *q++;
c445ea15 8548 n = expect_number(&q);
8896765a
RB
8549 if (*q++ == 'p') {
8550 if (sv) { /* SVf */
8551 if (n) {
8552 precis = n;
8553 has_precis = TRUE;
8554 }
8555 argsv = va_arg(*args, SV*);
8556 eptr = SvPVx_const(argsv, elen);
8557 if (DO_UTF8(argsv))
8558 is_utf8 = TRUE;
8559 goto string;
8560 }
8561#if vdNUMBER
8562 else if (n == vdNUMBER) { /* VDf */
8563 vectorize = TRUE;
8564 VECTORIZE_ARGS
8565 goto format_vd;
8566 }
8567#endif
8568 else if (n) {
8569 if (ckWARN_d(WARN_INTERNAL))
8570 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8571 "internal %%<num>p might conflict with future printf extensions");
8572 }
8573 }
8574 q = r;
8575 }
8576
c445ea15 8577 if ( (width = expect_number(&q)) ) {
211dfcf1
HS
8578 if (*q == '$') {
8579 ++q;
8580 efix = width;
8581 } else {
8582 goto gotwidth;
8583 }
8584 }
8585
fc36a67e 8586 /* FLAGS */
8587
46fc3d4c 8588 while (*q) {
8589 switch (*q) {
8590 case ' ':
8591 case '+':
9911cee9
TS
8592 if (plus == '+' && *q == ' ') /* '+' over ' ' */
8593 q++;
8594 else
8595 plus = *q++;
46fc3d4c 8596 continue;
8597
8598 case '-':
8599 left = TRUE;
8600 q++;
8601 continue;
8602
8603 case '0':
8604 fill = *q++;
8605 continue;
8606
8607 case '#':
8608 alt = TRUE;
8609 q++;
8610 continue;
8611
fc36a67e 8612 default:
8613 break;
8614 }
8615 break;
8616 }
46fc3d4c 8617
211dfcf1 8618 tryasterisk:
eb3fce90 8619 if (*q == '*') {
211dfcf1 8620 q++;
c445ea15 8621 if ( (ewix = expect_number(&q)) )
211dfcf1
HS
8622 if (*q++ != '$')
8623 goto unknown;
eb3fce90 8624 asterisk = TRUE;
211dfcf1
HS
8625 }
8626 if (*q == 'v') {
eb3fce90 8627 q++;
211dfcf1
HS
8628 if (vectorize)
8629 goto unknown;
9cbac4c7 8630 if ((vectorarg = asterisk)) {
211dfcf1
HS
8631 evix = ewix;
8632 ewix = 0;
8633 asterisk = FALSE;
8634 }
8635 vectorize = TRUE;
8636 goto tryasterisk;
eb3fce90
JH
8637 }
8638
211dfcf1 8639 if (!asterisk)
858a90f9 8640 {
7a5fa8a2 8641 if( *q == '0' )
f3583277 8642 fill = *q++;
c445ea15 8643 width = expect_number(&q);
858a90f9 8644 }
211dfcf1
HS
8645
8646 if (vectorize) {
8647 if (vectorarg) {
8648 if (args)
8649 vecsv = va_arg(*args, SV*);
7ad96abb
NC
8650 else if (evix) {
8651 vecsv = (evix > 0 && evix <= svmax)
8652 ? svargs[evix-1] : &PL_sv_undef;
8653 } else {
8654 vecsv = svix < svmax ? svargs[svix++] : &PL_sv_undef;
8655 }
245d4a47 8656 dotstr = SvPV_const(vecsv, dotstrlen);
640283f5
NC
8657 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
8658 bad with tied or overloaded values that return UTF8. */
211dfcf1 8659 if (DO_UTF8(vecsv))
2cf2cfc6 8660 is_utf8 = TRUE;
640283f5
NC
8661 else if (has_utf8) {
8662 vecsv = sv_mortalcopy(vecsv);
8663 sv_utf8_upgrade(vecsv);
8664 dotstr = SvPV_const(vecsv, dotstrlen);
8665 is_utf8 = TRUE;
8666 }
211dfcf1
HS
8667 }
8668 if (args) {
8896765a 8669 VECTORIZE_ARGS
eb3fce90 8670 }
7ad96abb 8671 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
211dfcf1 8672 vecsv = svargs[efix ? efix-1 : svix++];
245d4a47 8673 vecstr = (U8*)SvPV_const(vecsv,veclen);
2cf2cfc6 8674 vec_utf8 = DO_UTF8(vecsv);
96b8f7ce
JP
8675
8676 /* if this is a version object, we need to convert
8677 * back into v-string notation and then let the
8678 * vectorize happen normally
d7aa5382 8679 */
96b8f7ce
JP
8680 if (sv_derived_from(vecsv, "version")) {
8681 char *version = savesvpv(vecsv);
34ba6322
SP
8682 if ( hv_exists((HV*)SvRV(vecsv), "alpha", 5 ) ) {
8683 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8684 "vector argument not supported with alpha versions");
8685 goto unknown;
8686 }
96b8f7ce
JP
8687 vecsv = sv_newmortal();
8688 /* scan_vstring is expected to be called during
8689 * tokenization, so we need to fake up the end
8690 * of the buffer for it
8691 */
8692 PL_bufend = version + veclen;
8693 scan_vstring(version, vecsv);
8694 vecstr = (U8*)SvPV_const(vecsv, veclen);
8695 vec_utf8 = DO_UTF8(vecsv);
8696 Safefree(version);
d7aa5382 8697 }
211dfcf1
HS
8698 }
8699 else {
8700 vecstr = (U8*)"";
8701 veclen = 0;
8702 }
eb3fce90 8703 }
fc36a67e 8704
eb3fce90 8705 if (asterisk) {
fc36a67e 8706 if (args)
8707 i = va_arg(*args, int);
8708 else
eb3fce90
JH
8709 i = (ewix ? ewix <= svmax : svix < svmax) ?
8710 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
fc36a67e 8711 left |= (i < 0);
8712 width = (i < 0) ? -i : i;
fc36a67e 8713 }
211dfcf1 8714 gotwidth:
fc36a67e 8715
8716 /* PRECISION */
46fc3d4c 8717
fc36a67e 8718 if (*q == '.') {
8719 q++;
8720 if (*q == '*') {
211dfcf1 8721 q++;
c445ea15 8722 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
7b8dd722
HS
8723 goto unknown;
8724 /* XXX: todo, support specified precision parameter */
8725 if (epix)
211dfcf1 8726 goto unknown;
46fc3d4c 8727 if (args)
8728 i = va_arg(*args, int);
8729 else
eb3fce90
JH
8730 i = (ewix ? ewix <= svmax : svix < svmax)
8731 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9911cee9
TS
8732 precis = i;
8733 has_precis = !(i < 0);
fc36a67e 8734 }
8735 else {
8736 precis = 0;
8737 while (isDIGIT(*q))
8738 precis = precis * 10 + (*q++ - '0');
9911cee9 8739 has_precis = TRUE;
fc36a67e 8740 }
fc36a67e 8741 }
46fc3d4c 8742
fc36a67e 8743 /* SIZE */
46fc3d4c 8744
fc36a67e 8745 switch (*q) {
c623ac67
GS
8746#ifdef WIN32
8747 case 'I': /* Ix, I32x, and I64x */
8748# ifdef WIN64
8749 if (q[1] == '6' && q[2] == '4') {
8750 q += 3;
8751 intsize = 'q';
8752 break;
8753 }
8754# endif
8755 if (q[1] == '3' && q[2] == '2') {
8756 q += 3;
8757 break;
8758 }
8759# ifdef WIN64
8760 intsize = 'q';
8761# endif
8762 q++;
8763 break;
8764#endif
9e5b023a 8765#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
6f9bb7fd 8766 case 'L': /* Ld */
5f66b61c 8767 /*FALLTHROUGH*/
e5c81feb 8768#ifdef HAS_QUAD
6f9bb7fd 8769 case 'q': /* qd */
9e5b023a 8770#endif
6f9bb7fd
GS
8771 intsize = 'q';
8772 q++;
8773 break;
8774#endif
fc36a67e 8775 case 'l':
9e5b023a 8776#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
205f51d8 8777 if (*(q + 1) == 'l') { /* lld, llf */
fc36a67e 8778 intsize = 'q';
8779 q += 2;
46fc3d4c 8780 break;
cf2093f6 8781 }
fc36a67e 8782#endif
5f66b61c 8783 /*FALLTHROUGH*/
fc36a67e 8784 case 'h':
5f66b61c 8785 /*FALLTHROUGH*/
fc36a67e 8786 case 'V':
8787 intsize = *q++;
46fc3d4c 8788 break;
8789 }
8790
fc36a67e 8791 /* CONVERSION */
8792
211dfcf1
HS
8793 if (*q == '%') {
8794 eptr = q++;
8795 elen = 1;
26372e71
GA
8796 if (vectorize) {
8797 c = '%';
8798 goto unknown;
8799 }
211dfcf1
HS
8800 goto string;
8801 }
8802
26372e71 8803 if (!vectorize && !args) {
86c51f8b
NC
8804 if (efix) {
8805 const I32 i = efix-1;
8806 argsv = (i >= 0 && i < svmax) ? svargs[i] : &PL_sv_undef;
8807 } else {
8808 argsv = (svix >= 0 && svix < svmax)
8809 ? svargs[svix++] : &PL_sv_undef;
8810 }
863811b2 8811 }
211dfcf1 8812
46fc3d4c 8813 switch (c = *q++) {
8814
8815 /* STRINGS */
8816
46fc3d4c 8817 case 'c':
26372e71
GA
8818 if (vectorize)
8819 goto unknown;
8820 uv = (args) ? va_arg(*args, int) : SvIVx(argsv);
1bd104fb
JH
8821 if ((uv > 255 ||
8822 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
0064a8a9 8823 && !IN_BYTES) {
dfe13c55 8824 eptr = (char*)utf8buf;
9041c2e3 8825 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
2cf2cfc6 8826 is_utf8 = TRUE;
7e2040f0
GS
8827 }
8828 else {
8829 c = (char)uv;
8830 eptr = &c;
8831 elen = 1;
a0ed51b3 8832 }
46fc3d4c 8833 goto string;
8834
46fc3d4c 8835 case 's':
26372e71
GA
8836 if (vectorize)
8837 goto unknown;
8838 if (args) {
fc36a67e 8839 eptr = va_arg(*args, char*);
c635e13b 8840 if (eptr)
1d7c1841
GS
8841#ifdef MACOS_TRADITIONAL
8842 /* On MacOS, %#s format is used for Pascal strings */
8843 if (alt)
8844 elen = *eptr++;
8845 else
8846#endif
c635e13b 8847 elen = strlen(eptr);
8848 else {
27da23d5 8849 eptr = (char *)nullstr;
c635e13b 8850 elen = sizeof nullstr - 1;
8851 }
46fc3d4c 8852 }
211dfcf1 8853 else {
4d84ee25 8854 eptr = SvPVx_const(argsv, elen);
7e2040f0 8855 if (DO_UTF8(argsv)) {
59b61096 8856 I32 old_precis = precis;
a0ed51b3
LW
8857 if (has_precis && precis < elen) {
8858 I32 p = precis;
7e2040f0 8859 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
a0ed51b3
LW
8860 precis = p;
8861 }
8862 if (width) { /* fudge width (can't fudge elen) */
59b61096
AV
8863 if (has_precis && precis < elen)
8864 width += precis - old_precis;
8865 else
8866 width += elen - sv_len_utf8(argsv);
a0ed51b3 8867 }
2cf2cfc6 8868 is_utf8 = TRUE;
a0ed51b3
LW
8869 }
8870 }
fc36a67e 8871
46fc3d4c 8872 string:
8873 if (has_precis && elen > precis)
8874 elen = precis;
8875 break;
8876
8877 /* INTEGERS */
8878
fc36a67e 8879 case 'p':
be75b157 8880 if (alt || vectorize)
c2e66d9e 8881 goto unknown;
211dfcf1 8882 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
fc36a67e 8883 base = 16;
8884 goto integer;
8885
46fc3d4c 8886 case 'D':
29fe7a80 8887#ifdef IV_IS_QUAD
22f3ae8c 8888 intsize = 'q';
29fe7a80 8889#else
46fc3d4c 8890 intsize = 'l';
29fe7a80 8891#endif
5f66b61c 8892 /*FALLTHROUGH*/
46fc3d4c 8893 case 'd':
8894 case 'i':
8896765a
RB
8895#if vdNUMBER
8896 format_vd:
8897#endif
b22c7a20 8898 if (vectorize) {
ba210ebe 8899 STRLEN ulen;
211dfcf1
HS
8900 if (!veclen)
8901 continue;
2cf2cfc6
A
8902 if (vec_utf8)
8903 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8904 UTF8_ALLOW_ANYUV);
b22c7a20 8905 else {
e83d50c9 8906 uv = *vecstr;
b22c7a20
GS
8907 ulen = 1;
8908 }
8909 vecstr += ulen;
8910 veclen -= ulen;
e83d50c9
JP
8911 if (plus)
8912 esignbuf[esignlen++] = plus;
b22c7a20
GS
8913 }
8914 else if (args) {
46fc3d4c 8915 switch (intsize) {
8916 case 'h': iv = (short)va_arg(*args, int); break;
46fc3d4c 8917 case 'l': iv = va_arg(*args, long); break;
fc36a67e 8918 case 'V': iv = va_arg(*args, IV); break;
b10c0dba 8919 default: iv = va_arg(*args, int); break;
cf2093f6
JH
8920#ifdef HAS_QUAD
8921 case 'q': iv = va_arg(*args, Quad_t); break;
8922#endif
46fc3d4c 8923 }
8924 }
8925 else {
b10c0dba 8926 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
46fc3d4c 8927 switch (intsize) {
b10c0dba
MHM
8928 case 'h': iv = (short)tiv; break;
8929 case 'l': iv = (long)tiv; break;
8930 case 'V':
8931 default: iv = tiv; break;
cf2093f6 8932#ifdef HAS_QUAD
b10c0dba 8933 case 'q': iv = (Quad_t)tiv; break;
cf2093f6 8934#endif
46fc3d4c 8935 }
8936 }
e83d50c9
JP
8937 if ( !vectorize ) /* we already set uv above */
8938 {
8939 if (iv >= 0) {
8940 uv = iv;
8941 if (plus)
8942 esignbuf[esignlen++] = plus;
8943 }
8944 else {
8945 uv = -iv;
8946 esignbuf[esignlen++] = '-';
8947 }
46fc3d4c 8948 }
8949 base = 10;
8950 goto integer;
8951
fc36a67e 8952 case 'U':
29fe7a80 8953#ifdef IV_IS_QUAD
22f3ae8c 8954 intsize = 'q';
29fe7a80 8955#else
fc36a67e 8956 intsize = 'l';
29fe7a80 8957#endif
5f66b61c 8958 /*FALLTHROUGH*/
fc36a67e 8959 case 'u':
8960 base = 10;
8961 goto uns_integer;
8962
7ff06cc7 8963 case 'B':
4f19785b
WSI
8964 case 'b':
8965 base = 2;
8966 goto uns_integer;
8967
46fc3d4c 8968 case 'O':
29fe7a80 8969#ifdef IV_IS_QUAD
22f3ae8c 8970 intsize = 'q';
29fe7a80 8971#else
46fc3d4c 8972 intsize = 'l';
29fe7a80 8973#endif
5f66b61c 8974 /*FALLTHROUGH*/
46fc3d4c 8975 case 'o':
8976 base = 8;
8977 goto uns_integer;
8978
8979 case 'X':
46fc3d4c 8980 case 'x':
8981 base = 16;
46fc3d4c 8982
8983 uns_integer:
b22c7a20 8984 if (vectorize) {
ba210ebe 8985 STRLEN ulen;
b22c7a20 8986 vector:
211dfcf1
HS
8987 if (!veclen)
8988 continue;
2cf2cfc6
A
8989 if (vec_utf8)
8990 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8991 UTF8_ALLOW_ANYUV);
b22c7a20 8992 else {
a05b299f 8993 uv = *vecstr;
b22c7a20
GS
8994 ulen = 1;
8995 }
8996 vecstr += ulen;
8997 veclen -= ulen;
8998 }
8999 else if (args) {
46fc3d4c 9000 switch (intsize) {
9001 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
46fc3d4c 9002 case 'l': uv = va_arg(*args, unsigned long); break;
fc36a67e 9003 case 'V': uv = va_arg(*args, UV); break;
b10c0dba 9004 default: uv = va_arg(*args, unsigned); break;
cf2093f6 9005#ifdef HAS_QUAD
9e3321a5 9006 case 'q': uv = va_arg(*args, Uquad_t); break;
cf2093f6 9007#endif
46fc3d4c 9008 }
9009 }
9010 else {
b10c0dba 9011 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
46fc3d4c 9012 switch (intsize) {
b10c0dba
MHM
9013 case 'h': uv = (unsigned short)tuv; break;
9014 case 'l': uv = (unsigned long)tuv; break;
9015 case 'V':
9016 default: uv = tuv; break;
cf2093f6 9017#ifdef HAS_QUAD
b10c0dba 9018 case 'q': uv = (Uquad_t)tuv; break;
cf2093f6 9019#endif
46fc3d4c 9020 }
9021 }
9022
9023 integer:
4d84ee25
NC
9024 {
9025 char *ptr = ebuf + sizeof ebuf;
1387f30c
DD
9026 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
9027 zeros = 0;
9028
4d84ee25
NC
9029 switch (base) {
9030 unsigned dig;
9031 case 16:
14eb61ab 9032 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
4d84ee25
NC
9033 do {
9034 dig = uv & 15;
9035 *--ptr = p[dig];
9036 } while (uv >>= 4);
1387f30c 9037 if (tempalt) {
4d84ee25
NC
9038 esignbuf[esignlen++] = '0';
9039 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9040 }
9041 break;
9042 case 8:
9043 do {
9044 dig = uv & 7;
9045 *--ptr = '0' + dig;
9046 } while (uv >>= 3);
9047 if (alt && *ptr != '0')
9048 *--ptr = '0';
9049 break;
9050 case 2:
9051 do {
9052 dig = uv & 1;
9053 *--ptr = '0' + dig;
9054 } while (uv >>= 1);
1387f30c 9055 if (tempalt) {
4d84ee25 9056 esignbuf[esignlen++] = '0';
7ff06cc7 9057 esignbuf[esignlen++] = c;
4d84ee25
NC
9058 }
9059 break;
9060 default: /* it had better be ten or less */
9061 do {
9062 dig = uv % base;
9063 *--ptr = '0' + dig;
9064 } while (uv /= base);
9065 break;
46fc3d4c 9066 }
4d84ee25
NC
9067 elen = (ebuf + sizeof ebuf) - ptr;
9068 eptr = ptr;
9069 if (has_precis) {
9070 if (precis > elen)
9071 zeros = precis - elen;
e6bb52fd
TS
9072 else if (precis == 0 && elen == 1 && *eptr == '0'
9073 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
4d84ee25 9074 elen = 0;
9911cee9
TS
9075
9076 /* a precision nullifies the 0 flag. */
9077 if (fill == '0')
9078 fill = ' ';
eda88b6d 9079 }
c10ed8b9 9080 }
46fc3d4c 9081 break;
9082
9083 /* FLOATING POINT */
9084
fc36a67e 9085 case 'F':
9086 c = 'f'; /* maybe %F isn't supported here */
5f66b61c 9087 /*FALLTHROUGH*/
46fc3d4c 9088 case 'e': case 'E':
fc36a67e 9089 case 'f':
46fc3d4c 9090 case 'g': case 'G':
26372e71
GA
9091 if (vectorize)
9092 goto unknown;
46fc3d4c 9093
9094 /* This is evil, but floating point is even more evil */
9095
9e5b023a
JH
9096 /* for SV-style calling, we can only get NV
9097 for C-style calling, we assume %f is double;
9098 for simplicity we allow any of %Lf, %llf, %qf for long double
9099 */
9100 switch (intsize) {
9101 case 'V':
9102#if defined(USE_LONG_DOUBLE)
9103 intsize = 'q';
9104#endif
9105 break;
8a2e3f14 9106/* [perl #20339] - we should accept and ignore %lf rather than die */
00e17364 9107 case 'l':
5f66b61c 9108 /*FALLTHROUGH*/
9e5b023a
JH
9109 default:
9110#if defined(USE_LONG_DOUBLE)
9111 intsize = args ? 0 : 'q';
9112#endif
9113 break;
9114 case 'q':
9115#if defined(HAS_LONG_DOUBLE)
9116 break;
9117#else
5f66b61c 9118 /*FALLTHROUGH*/
9e5b023a
JH
9119#endif
9120 case 'h':
9e5b023a
JH
9121 goto unknown;
9122 }
9123
9124 /* now we need (long double) if intsize == 'q', else (double) */
26372e71 9125 nv = (args) ?
35fff930
JH
9126#if LONG_DOUBLESIZE > DOUBLESIZE
9127 intsize == 'q' ?
205f51d8
AS
9128 va_arg(*args, long double) :
9129 va_arg(*args, double)
35fff930 9130#else
205f51d8 9131 va_arg(*args, double)
35fff930 9132#endif
9e5b023a 9133 : SvNVx(argsv);
fc36a67e 9134
9135 need = 0;
9136 if (c != 'e' && c != 'E') {
9137 i = PERL_INT_MIN;
9e5b023a
JH
9138 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9139 will cast our (long double) to (double) */
73b309ea 9140 (void)Perl_frexp(nv, &i);
fc36a67e 9141 if (i == PERL_INT_MIN)
cea2e8a9 9142 Perl_die(aTHX_ "panic: frexp");
c635e13b 9143 if (i > 0)
fc36a67e 9144 need = BIT_DIGITS(i);
9145 }
9146 need += has_precis ? precis : 6; /* known default */
20f6aaab 9147
fc36a67e 9148 if (need < width)
9149 need = width;
9150
20f6aaab
AS
9151#ifdef HAS_LDBL_SPRINTF_BUG
9152 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
205f51d8
AS
9153 with sfio - Allen <allens@cpan.org> */
9154
9155# ifdef DBL_MAX
9156# define MY_DBL_MAX DBL_MAX
9157# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9158# if DOUBLESIZE >= 8
9159# define MY_DBL_MAX 1.7976931348623157E+308L
9160# else
9161# define MY_DBL_MAX 3.40282347E+38L
9162# endif
9163# endif
9164
9165# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9166# define MY_DBL_MAX_BUG 1L
20f6aaab 9167# else
205f51d8 9168# define MY_DBL_MAX_BUG MY_DBL_MAX
20f6aaab 9169# endif
20f6aaab 9170
205f51d8
AS
9171# ifdef DBL_MIN
9172# define MY_DBL_MIN DBL_MIN
9173# else /* XXX guessing! -Allen */
9174# if DOUBLESIZE >= 8
9175# define MY_DBL_MIN 2.2250738585072014E-308L
9176# else
9177# define MY_DBL_MIN 1.17549435E-38L
9178# endif
9179# endif
20f6aaab 9180
205f51d8
AS
9181 if ((intsize == 'q') && (c == 'f') &&
9182 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9183 (need < DBL_DIG)) {
9184 /* it's going to be short enough that
9185 * long double precision is not needed */
9186
9187 if ((nv <= 0L) && (nv >= -0L))
9188 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9189 else {
9190 /* would use Perl_fp_class as a double-check but not
9191 * functional on IRIX - see perl.h comments */
9192
9193 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9194 /* It's within the range that a double can represent */
9195#if defined(DBL_MAX) && !defined(DBL_MIN)
9196 if ((nv >= ((long double)1/DBL_MAX)) ||
9197 (nv <= (-(long double)1/DBL_MAX)))
20f6aaab 9198#endif
205f51d8 9199 fix_ldbl_sprintf_bug = TRUE;
20f6aaab 9200 }
205f51d8
AS
9201 }
9202 if (fix_ldbl_sprintf_bug == TRUE) {
9203 double temp;
9204
9205 intsize = 0;
9206 temp = (double)nv;
9207 nv = (NV)temp;
9208 }
20f6aaab 9209 }
205f51d8
AS
9210
9211# undef MY_DBL_MAX
9212# undef MY_DBL_MAX_BUG
9213# undef MY_DBL_MIN
9214
20f6aaab
AS
9215#endif /* HAS_LDBL_SPRINTF_BUG */
9216
46fc3d4c 9217 need += 20; /* fudge factor */
80252599
GS
9218 if (PL_efloatsize < need) {
9219 Safefree(PL_efloatbuf);
9220 PL_efloatsize = need + 20; /* more fudge */
a02a5408 9221 Newx(PL_efloatbuf, PL_efloatsize, char);
7d5ea4e7 9222 PL_efloatbuf[0] = '\0';
46fc3d4c 9223 }
9224
4151a5fe
IZ
9225 if ( !(width || left || plus || alt) && fill != '0'
9226 && has_precis && intsize != 'q' ) { /* Shortcuts */
2873255c
NC
9227 /* See earlier comment about buggy Gconvert when digits,
9228 aka precis is 0 */
9229 if ( c == 'g' && precis) {
2e59c212 9230 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
4150c189
NC
9231 /* May return an empty string for digits==0 */
9232 if (*PL_efloatbuf) {
9233 elen = strlen(PL_efloatbuf);
4151a5fe 9234 goto float_converted;
4150c189 9235 }
4151a5fe
IZ
9236 } else if ( c == 'f' && !precis) {
9237 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9238 break;
9239 }
9240 }
4d84ee25
NC
9241 {
9242 char *ptr = ebuf + sizeof ebuf;
9243 *--ptr = '\0';
9244 *--ptr = c;
9245 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9e5b023a 9246#if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
4d84ee25
NC
9247 if (intsize == 'q') {
9248 /* Copy the one or more characters in a long double
9249 * format before the 'base' ([efgEFG]) character to
9250 * the format string. */
9251 static char const prifldbl[] = PERL_PRIfldbl;
9252 char const *p = prifldbl + sizeof(prifldbl) - 3;
9253 while (p >= prifldbl) { *--ptr = *p--; }
9254 }
65202027 9255#endif
4d84ee25
NC
9256 if (has_precis) {
9257 base = precis;
9258 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9259 *--ptr = '.';
9260 }
9261 if (width) {
9262 base = width;
9263 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9264 }
9265 if (fill == '0')
9266 *--ptr = fill;
9267 if (left)
9268 *--ptr = '-';
9269 if (plus)
9270 *--ptr = plus;
9271 if (alt)
9272 *--ptr = '#';
9273 *--ptr = '%';
9274
9275 /* No taint. Otherwise we are in the strange situation
9276 * where printf() taints but print($float) doesn't.
9277 * --jhi */
9e5b023a 9278#if defined(HAS_LONG_DOUBLE)
4150c189 9279 elen = ((intsize == 'q')
d9fad198
JH
9280 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
9281 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9e5b023a 9282#else
4150c189 9283 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9e5b023a 9284#endif
4d84ee25 9285 }
4151a5fe 9286 float_converted:
80252599 9287 eptr = PL_efloatbuf;
46fc3d4c 9288 break;
9289
fc36a67e 9290 /* SPECIAL */
9291
9292 case 'n':
26372e71
GA
9293 if (vectorize)
9294 goto unknown;
fc36a67e 9295 i = SvCUR(sv) - origlen;
26372e71 9296 if (args) {
c635e13b 9297 switch (intsize) {
9298 case 'h': *(va_arg(*args, short*)) = i; break;
9299 default: *(va_arg(*args, int*)) = i; break;
9300 case 'l': *(va_arg(*args, long*)) = i; break;
9301 case 'V': *(va_arg(*args, IV*)) = i; break;
cf2093f6
JH
9302#ifdef HAS_QUAD
9303 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9304#endif
c635e13b 9305 }
fc36a67e 9306 }
9dd79c3f 9307 else
211dfcf1 9308 sv_setuv_mg(argsv, (UV)i);
fc36a67e 9309 continue; /* not "break" */
9310
9311 /* UNKNOWN */
9312
46fc3d4c 9313 default:
fc36a67e 9314 unknown:
041457d9
DM
9315 if (!args
9316 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
9317 && ckWARN(WARN_PRINTF))
9318 {
c4420975 9319 SV * const msg = sv_newmortal();
35c1215d
NC
9320 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9321 (PL_op->op_type == OP_PRTF) ? "" : "s");
0f4b6630 9322 if (c) {
0f4b6630 9323 if (isPRINT(c))
1c846c1f 9324 Perl_sv_catpvf(aTHX_ msg,
0f4b6630
JH
9325 "\"%%%c\"", c & 0xFF);
9326 else
9327 Perl_sv_catpvf(aTHX_ msg,
57def98f 9328 "\"%%\\%03"UVof"\"",
0f4b6630 9329 (UV)c & 0xFF);
0f4b6630 9330 } else
396482e1 9331 sv_catpvs(msg, "end of string");
95b63a38 9332 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, (void*)msg); /* yes, this is reentrant */
c635e13b 9333 }
fb73857a 9334
9335 /* output mangled stuff ... */
9336 if (c == '\0')
9337 --q;
46fc3d4c 9338 eptr = p;
9339 elen = q - p;
fb73857a 9340
9341 /* ... right here, because formatting flags should not apply */
9342 SvGROW(sv, SvCUR(sv) + elen + 1);
9343 p = SvEND(sv);
4459522c 9344 Copy(eptr, p, elen, char);
fb73857a 9345 p += elen;
9346 *p = '\0';
3f7c398e 9347 SvCUR_set(sv, p - SvPVX_const(sv));
58e33a90 9348 svix = osvix;
fb73857a 9349 continue; /* not "break" */
46fc3d4c 9350 }
9351
cc61b222
TS
9352 if (is_utf8 != has_utf8) {
9353 if (is_utf8) {
9354 if (SvCUR(sv))
9355 sv_utf8_upgrade(sv);
9356 }
9357 else {
9358 const STRLEN old_elen = elen;
9359 SV * const nsv = sv_2mortal(newSVpvn(eptr, elen));
9360 sv_utf8_upgrade(nsv);
9361 eptr = SvPVX_const(nsv);
9362 elen = SvCUR(nsv);
9363
9364 if (width) { /* fudge width (can't fudge elen) */
9365 width += elen - old_elen;
9366 }
9367 is_utf8 = TRUE;
9368 }
9369 }
9370
6c94ec8b 9371 have = esignlen + zeros + elen;
ed2b91d2
GA
9372 if (have < zeros)
9373 Perl_croak_nocontext(PL_memory_wrap);
6c94ec8b 9374
46fc3d4c 9375 need = (have > width ? have : width);
9376 gap = need - have;
9377
d2641cbd
PC
9378 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
9379 Perl_croak_nocontext(PL_memory_wrap);
b22c7a20 9380 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
46fc3d4c 9381 p = SvEND(sv);
9382 if (esignlen && fill == '0') {
53c1dcc0 9383 int i;
eb160463 9384 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 9385 *p++ = esignbuf[i];
9386 }
9387 if (gap && !left) {
9388 memset(p, fill, gap);
9389 p += gap;
9390 }
9391 if (esignlen && fill != '0') {
53c1dcc0 9392 int i;
eb160463 9393 for (i = 0; i < (int)esignlen; i++)
46fc3d4c 9394 *p++ = esignbuf[i];
9395 }
fc36a67e 9396 if (zeros) {
53c1dcc0 9397 int i;
fc36a67e 9398 for (i = zeros; i; i--)
9399 *p++ = '0';
9400 }
46fc3d4c 9401 if (elen) {
4459522c 9402 Copy(eptr, p, elen, char);
46fc3d4c 9403 p += elen;
9404 }
9405 if (gap && left) {
9406 memset(p, ' ', gap);
9407 p += gap;
9408 }
b22c7a20
GS
9409 if (vectorize) {
9410 if (veclen) {
4459522c 9411 Copy(dotstr, p, dotstrlen, char);
b22c7a20
GS
9412 p += dotstrlen;
9413 }
9414 else
9415 vectorize = FALSE; /* done iterating over vecstr */
9416 }
2cf2cfc6
A
9417 if (is_utf8)
9418 has_utf8 = TRUE;
9419 if (has_utf8)
7e2040f0 9420 SvUTF8_on(sv);
46fc3d4c 9421 *p = '\0';
3f7c398e 9422 SvCUR_set(sv, p - SvPVX_const(sv));
b22c7a20
GS
9423 if (vectorize) {
9424 esignlen = 0;
9425 goto vector;
9426 }
46fc3d4c 9427 }
9428}
51371543 9429
645c22ef
DM
9430/* =========================================================================
9431
9432=head1 Cloning an interpreter
9433
9434All the macros and functions in this section are for the private use of
9435the main function, perl_clone().
9436
9437The foo_dup() functions make an exact copy of an existing foo thinngy.
9438During the course of a cloning, a hash table is used to map old addresses
9439to new addresses. The table is created and manipulated with the
9440ptr_table_* functions.
9441
9442=cut
9443
9444============================================================================*/
9445
9446
1d7c1841
GS
9447#if defined(USE_ITHREADS)
9448
d4c19fe8 9449/* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
1d7c1841
GS
9450#ifndef GpREFCNT_inc
9451# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9452#endif
9453
9454
a41cc44e 9455/* Certain cases in Perl_ss_dup have been merged, by relying on the fact
3e07292d
NC
9456 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
9457 If this changes, please unmerge ss_dup. */
d2d73c3e 9458#define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
7f466ec7 9459#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup(s,t))
d2d73c3e
AB
9460#define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
9461#define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9462#define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
9463#define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9464#define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
9465#define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9466#define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
9467#define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9468#define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
9469#define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
6136c704
AL
9470#define SAVEPV(p) ((p) ? savepv(p) : NULL)
9471#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
8cf8f3d1 9472
d2d73c3e 9473
d2d73c3e 9474/* duplicate a file handle */
645c22ef 9475
1d7c1841 9476PerlIO *
a8fc9800 9477Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
1d7c1841
GS
9478{
9479 PerlIO *ret;
53c1dcc0
AL
9480
9481 PERL_UNUSED_ARG(type);
73d840c0 9482
1d7c1841
GS
9483 if (!fp)
9484 return (PerlIO*)NULL;
9485
9486 /* look for it in the table first */
9487 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
9488 if (ret)
9489 return ret;
9490
9491 /* create anew and remember what it is */
ecdeb87c 9492 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
1d7c1841
GS
9493 ptr_table_store(PL_ptr_table, fp, ret);
9494 return ret;
9495}
9496
645c22ef
DM
9497/* duplicate a directory handle */
9498
1d7c1841
GS
9499DIR *
9500Perl_dirp_dup(pTHX_ DIR *dp)
9501{
96a5add6 9502 PERL_UNUSED_CONTEXT;
1d7c1841
GS
9503 if (!dp)
9504 return (DIR*)NULL;
9505 /* XXX TODO */
9506 return dp;
9507}
9508
ff276b08 9509/* duplicate a typeglob */
645c22ef 9510
1d7c1841 9511GP *
a8fc9800 9512Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
1d7c1841
GS
9513{
9514 GP *ret;
b37c2d43 9515
1d7c1841
GS
9516 if (!gp)
9517 return (GP*)NULL;
9518 /* look for it in the table first */
9519 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
9520 if (ret)
9521 return ret;
9522
9523 /* create anew and remember what it is */
a02a5408 9524 Newxz(ret, 1, GP);
1d7c1841
GS
9525 ptr_table_store(PL_ptr_table, gp, ret);
9526
9527 /* clone */
9528 ret->gp_refcnt = 0; /* must be before any other dups! */
d2d73c3e
AB
9529 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
9530 ret->gp_io = io_dup_inc(gp->gp_io, param);
9531 ret->gp_form = cv_dup_inc(gp->gp_form, param);
9532 ret->gp_av = av_dup_inc(gp->gp_av, param);
9533 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
9534 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
9535 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
1d7c1841 9536 ret->gp_cvgen = gp->gp_cvgen;
1d7c1841 9537 ret->gp_line = gp->gp_line;
f4890806 9538 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
1d7c1841
GS
9539 return ret;
9540}
9541
645c22ef
DM
9542/* duplicate a chain of magic */
9543
1d7c1841 9544MAGIC *
a8fc9800 9545Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
1d7c1841 9546{
cb359b41
JH
9547 MAGIC *mgprev = (MAGIC*)NULL;
9548 MAGIC *mgret;
1d7c1841
GS
9549 if (!mg)
9550 return (MAGIC*)NULL;
9551 /* look for it in the table first */
9552 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
9553 if (mgret)
9554 return mgret;
9555
9556 for (; mg; mg = mg->mg_moremagic) {
9557 MAGIC *nmg;
a02a5408 9558 Newxz(nmg, 1, MAGIC);
cb359b41 9559 if (mgprev)
1d7c1841 9560 mgprev->mg_moremagic = nmg;
cb359b41
JH
9561 else
9562 mgret = nmg;
1d7c1841
GS
9563 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
9564 nmg->mg_private = mg->mg_private;
9565 nmg->mg_type = mg->mg_type;
9566 nmg->mg_flags = mg->mg_flags;
14befaf4 9567 if (mg->mg_type == PERL_MAGIC_qr) {
f8149455 9568 nmg->mg_obj = (SV*)CALLREGDUPE((REGEXP*)mg->mg_obj, param);
1d7c1841 9569 }
05bd4103 9570 else if(mg->mg_type == PERL_MAGIC_backref) {
d7cbc7b5
NC
9571 /* The backref AV has its reference count deliberately bumped by
9572 1. */
9573 nmg->mg_obj = SvREFCNT_inc(av_dup_inc((AV*) mg->mg_obj, param));
05bd4103 9574 }
8d2f4536
NC
9575 else if (mg->mg_type == PERL_MAGIC_symtab) {
9576 nmg->mg_obj = mg->mg_obj;
9577 }
1d7c1841
GS
9578 else {
9579 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
d2d73c3e
AB
9580 ? sv_dup_inc(mg->mg_obj, param)
9581 : sv_dup(mg->mg_obj, param);
1d7c1841
GS
9582 }
9583 nmg->mg_len = mg->mg_len;
9584 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
14befaf4 9585 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
68795e93 9586 if (mg->mg_len > 0) {
1d7c1841 9587 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
14befaf4
DM
9588 if (mg->mg_type == PERL_MAGIC_overload_table &&
9589 AMT_AMAGIC((AMT*)mg->mg_ptr))
9590 {
c445ea15 9591 const AMT * const amtp = (AMT*)mg->mg_ptr;
0bcc34c2 9592 AMT * const namtp = (AMT*)nmg->mg_ptr;
1d7c1841
GS
9593 I32 i;
9594 for (i = 1; i < NofAMmeth; i++) {
d2d73c3e 9595 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
1d7c1841
GS
9596 }
9597 }
9598 }
9599 else if (mg->mg_len == HEf_SVKEY)
d2d73c3e 9600 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
1d7c1841 9601 }
68795e93
NIS
9602 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
9603 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
9604 }
1d7c1841
GS
9605 mgprev = nmg;
9606 }
9607 return mgret;
9608}
9609
645c22ef
DM
9610/* create a new pointer-mapping table */
9611
1d7c1841
GS
9612PTR_TBL_t *
9613Perl_ptr_table_new(pTHX)
9614{
9615 PTR_TBL_t *tbl;
96a5add6
AL
9616 PERL_UNUSED_CONTEXT;
9617
a02a5408 9618 Newxz(tbl, 1, PTR_TBL_t);
1d7c1841
GS
9619 tbl->tbl_max = 511;
9620 tbl->tbl_items = 0;
a02a5408 9621 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
1d7c1841
GS
9622 return tbl;
9623}
9624
7119fd33
NC
9625#define PTR_TABLE_HASH(ptr) \
9626 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
134ca3d6 9627
93e68bfb
JC
9628/*
9629 we use the PTE_SVSLOT 'reservation' made above, both here (in the
9630 following define) and at call to new_body_inline made below in
9631 Perl_ptr_table_store()
9632 */
9633
9634#define del_pte(p) del_body_type(p, PTE_SVSLOT)
32e691d0 9635
645c22ef
DM
9636/* map an existing pointer using a table */
9637
7bf61b54 9638STATIC PTR_TBL_ENT_t *
b0e6ae5b 9639S_ptr_table_find(PTR_TBL_t *tbl, const void *sv) {
1d7c1841 9640 PTR_TBL_ENT_t *tblent;
4373e329 9641 const UV hash = PTR_TABLE_HASH(sv);
1d7c1841
GS
9642 assert(tbl);
9643 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
9644 for (; tblent; tblent = tblent->next) {
9645 if (tblent->oldval == sv)
7bf61b54 9646 return tblent;
1d7c1841 9647 }
d4c19fe8 9648 return NULL;
7bf61b54
NC
9649}
9650
9651void *
9652Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, const void *sv)
9653{
b0e6ae5b 9654 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
96a5add6 9655 PERL_UNUSED_CONTEXT;
d4c19fe8 9656 return tblent ? tblent->newval : NULL;
1d7c1841
GS
9657}
9658
645c22ef
DM
9659/* add a new entry to a pointer-mapping table */
9660
1d7c1841 9661void
44f8325f 9662Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, const void *oldsv, void *newsv)
1d7c1841 9663{
0c9fdfe0 9664 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
96a5add6 9665 PERL_UNUSED_CONTEXT;
1d7c1841 9666
7bf61b54
NC
9667 if (tblent) {
9668 tblent->newval = newsv;
9669 } else {
9670 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
9671
d2a0f284
JC
9672 new_body_inline(tblent, PTE_SVSLOT);
9673
7bf61b54
NC
9674 tblent->oldval = oldsv;
9675 tblent->newval = newsv;
9676 tblent->next = tbl->tbl_ary[entry];
9677 tbl->tbl_ary[entry] = tblent;
9678 tbl->tbl_items++;
9679 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
9680 ptr_table_split(tbl);
1d7c1841 9681 }
1d7c1841
GS
9682}
9683
645c22ef
DM
9684/* double the hash bucket size of an existing ptr table */
9685
1d7c1841
GS
9686void
9687Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
9688{
9689 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
4373e329 9690 const UV oldsize = tbl->tbl_max + 1;
1d7c1841
GS
9691 UV newsize = oldsize * 2;
9692 UV i;
96a5add6 9693 PERL_UNUSED_CONTEXT;
1d7c1841
GS
9694
9695 Renew(ary, newsize, PTR_TBL_ENT_t*);
9696 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
9697 tbl->tbl_max = --newsize;
9698 tbl->tbl_ary = ary;
9699 for (i=0; i < oldsize; i++, ary++) {
9700 PTR_TBL_ENT_t **curentp, **entp, *ent;
9701 if (!*ary)
9702 continue;
9703 curentp = ary + oldsize;
9704 for (entp = ary, ent = *ary; ent; ent = *entp) {
134ca3d6 9705 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
1d7c1841
GS
9706 *entp = ent->next;
9707 ent->next = *curentp;
9708 *curentp = ent;
9709 continue;
9710 }
9711 else
9712 entp = &ent->next;
9713 }
9714 }
9715}
9716
645c22ef
DM
9717/* remove all the entries from a ptr table */
9718
a0739874
DM
9719void
9720Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
9721{
d5cefff9 9722 if (tbl && tbl->tbl_items) {
c445ea15 9723 register PTR_TBL_ENT_t * const * const array = tbl->tbl_ary;
d5cefff9 9724 UV riter = tbl->tbl_max;
a0739874 9725
d5cefff9
NC
9726 do {
9727 PTR_TBL_ENT_t *entry = array[riter];
ab1e7f95 9728
d5cefff9 9729 while (entry) {
00b6aa41 9730 PTR_TBL_ENT_t * const oentry = entry;
d5cefff9
NC
9731 entry = entry->next;
9732 del_pte(oentry);
9733 }
9734 } while (riter--);
a0739874 9735
d5cefff9
NC
9736 tbl->tbl_items = 0;
9737 }
a0739874
DM
9738}
9739
645c22ef
DM
9740/* clear and free a ptr table */
9741
a0739874
DM
9742void
9743Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
9744{
9745 if (!tbl) {
9746 return;
9747 }
9748 ptr_table_clear(tbl);
9749 Safefree(tbl->tbl_ary);
9750 Safefree(tbl);
9751}
9752
5bd07a3d 9753
83841fad 9754void
eb86f8b3 9755Perl_rvpv_dup(pTHX_ SV *dstr, const SV *sstr, CLONE_PARAMS* param)
83841fad
NIS
9756{
9757 if (SvROK(sstr)) {
b162af07
SP
9758 SvRV_set(dstr, SvWEAKREF(sstr)
9759 ? sv_dup(SvRV(sstr), param)
9760 : sv_dup_inc(SvRV(sstr), param));
f880fe2f 9761
83841fad 9762 }
3f7c398e 9763 else if (SvPVX_const(sstr)) {
83841fad
NIS
9764 /* Has something there */
9765 if (SvLEN(sstr)) {
68795e93 9766 /* Normal PV - clone whole allocated space */
3f7c398e 9767 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
d3d0e6f1
NC
9768 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
9769 /* Not that normal - actually sstr is copy on write.
9770 But we are a true, independant SV, so: */
9771 SvREADONLY_off(dstr);
9772 SvFAKE_off(dstr);
9773 }
68795e93 9774 }
83841fad
NIS
9775 else {
9776 /* Special case - not normally malloced for some reason */
f7877b28
NC
9777 if (isGV_with_GP(sstr)) {
9778 /* Don't need to do anything here. */
9779 }
9780 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
ef10be65
NC
9781 /* A "shared" PV - clone it as "shared" PV */
9782 SvPV_set(dstr,
9783 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
9784 param)));
83841fad
NIS
9785 }
9786 else {
9787 /* Some other special case - random pointer */
f880fe2f 9788 SvPV_set(dstr, SvPVX(sstr));
d3d0e6f1 9789 }
83841fad
NIS
9790 }
9791 }
9792 else {
4608196e 9793 /* Copy the NULL */
f880fe2f 9794 if (SvTYPE(dstr) == SVt_RV)
b162af07 9795 SvRV_set(dstr, NULL);
f880fe2f 9796 else
6136c704 9797 SvPV_set(dstr, NULL);
83841fad
NIS
9798 }
9799}
9800
662fb8b2
NC
9801/* duplicate an SV of any type (including AV, HV etc) */
9802
1d7c1841 9803SV *
eb86f8b3 9804Perl_sv_dup(pTHX_ const SV *sstr, CLONE_PARAMS* param)
1d7c1841 9805{
27da23d5 9806 dVAR;
1d7c1841
GS
9807 SV *dstr;
9808
9809 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
6136c704 9810 return NULL;
1d7c1841
GS
9811 /* look for it in the table first */
9812 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
9813 if (dstr)
9814 return dstr;
9815
0405e91e
AB
9816 if(param->flags & CLONEf_JOIN_IN) {
9817 /** We are joining here so we don't want do clone
9818 something that is bad **/
eb86f8b3
AL
9819 if (SvTYPE(sstr) == SVt_PVHV) {
9820 const char * const hvname = HvNAME_get(sstr);
9821 if (hvname)
9822 /** don't clone stashes if they already exist **/
9823 return (SV*)gv_stashpv(hvname,0);
0405e91e
AB
9824 }
9825 }
9826
1d7c1841
GS
9827 /* create anew and remember what it is */
9828 new_SV(dstr);
fd0854ff
DM
9829
9830#ifdef DEBUG_LEAKING_SCALARS
9831 dstr->sv_debug_optype = sstr->sv_debug_optype;
9832 dstr->sv_debug_line = sstr->sv_debug_line;
9833 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
9834 dstr->sv_debug_cloned = 1;
fd0854ff 9835 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
fd0854ff
DM
9836#endif
9837
1d7c1841
GS
9838 ptr_table_store(PL_ptr_table, sstr, dstr);
9839
9840 /* clone */
9841 SvFLAGS(dstr) = SvFLAGS(sstr);
9842 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
9843 SvREFCNT(dstr) = 0; /* must be before any other dups! */
9844
9845#ifdef DEBUGGING
3f7c398e 9846 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
1d7c1841 9847 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
3f7c398e 9848 PL_watch_pvx, SvPVX_const(sstr));
1d7c1841
GS
9849#endif
9850
9660f481
DM
9851 /* don't clone objects whose class has asked us not to */
9852 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
9853 SvFLAGS(dstr) &= ~SVTYPEMASK;
9854 SvOBJECT_off(dstr);
9855 return dstr;
9856 }
9857
1d7c1841
GS
9858 switch (SvTYPE(sstr)) {
9859 case SVt_NULL:
9860 SvANY(dstr) = NULL;
9861 break;
9862 case SVt_IV:
339049b0 9863 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
45977657 9864 SvIV_set(dstr, SvIVX(sstr));
1d7c1841
GS
9865 break;
9866 case SVt_NV:
9867 SvANY(dstr) = new_XNV();
9d6ce603 9868 SvNV_set(dstr, SvNVX(sstr));
1d7c1841
GS
9869 break;
9870 case SVt_RV:
339049b0 9871 SvANY(dstr) = &(dstr->sv_u.svu_rv);
83841fad 9872 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
1d7c1841 9873 break;
662fb8b2
NC
9874 default:
9875 {
9876 /* These are all the types that need complex bodies allocating. */
662fb8b2 9877 void *new_body;
2bcc16b3
NC
9878 const svtype sv_type = SvTYPE(sstr);
9879 const struct body_details *const sv_type_details
9880 = bodies_by_type + sv_type;
662fb8b2 9881
93e68bfb 9882 switch (sv_type) {
662fb8b2 9883 default:
bb263b4e 9884 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
662fb8b2
NC
9885 break;
9886
662fb8b2
NC
9887 case SVt_PVGV:
9888 if (GvUNIQUE((GV*)sstr)) {
6f207bd3 9889 NOOP; /* Do sharing here, and fall through */
662fb8b2 9890 }
c22188b4
NC
9891 case SVt_PVIO:
9892 case SVt_PVFM:
9893 case SVt_PVHV:
9894 case SVt_PVAV:
93e68bfb 9895 case SVt_PVBM:
662fb8b2 9896 case SVt_PVCV:
662fb8b2 9897 case SVt_PVLV:
662fb8b2 9898 case SVt_PVMG:
662fb8b2 9899 case SVt_PVNV:
662fb8b2 9900 case SVt_PVIV:
662fb8b2 9901 case SVt_PV:
d2a0f284 9902 assert(sv_type_details->body_size);
c22188b4 9903 if (sv_type_details->arena) {
d2a0f284 9904 new_body_inline(new_body, sv_type);
c22188b4 9905 new_body
b9502f15 9906 = (void*)((char*)new_body - sv_type_details->offset);
c22188b4
NC
9907 } else {
9908 new_body = new_NOARENA(sv_type_details);
9909 }
1d7c1841 9910 }
662fb8b2
NC
9911 assert(new_body);
9912 SvANY(dstr) = new_body;
9913
2bcc16b3 9914#ifndef PURIFY
b9502f15
NC
9915 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
9916 ((char*)SvANY(dstr)) + sv_type_details->offset,
f32993d6 9917 sv_type_details->copy, char);
2bcc16b3
NC
9918#else
9919 Copy(((char*)SvANY(sstr)),
9920 ((char*)SvANY(dstr)),
d2a0f284 9921 sv_type_details->body_size + sv_type_details->offset, char);
2bcc16b3 9922#endif
662fb8b2 9923
f7877b28
NC
9924 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
9925 && !isGV_with_GP(dstr))
662fb8b2
NC
9926 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9927
9928 /* The Copy above means that all the source (unduplicated) pointers
9929 are now in the destination. We can check the flags and the
9930 pointers in either, but it's possible that there's less cache
9931 missing by always going for the destination.
9932 FIXME - instrument and check that assumption */
f32993d6 9933 if (sv_type >= SVt_PVMG) {
885ffcb3
NC
9934 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
9935 OURSTASH_set(dstr, hv_dup_inc(OURSTASH(dstr), param));
e736a858 9936 } else if (SvMAGIC(dstr))
662fb8b2
NC
9937 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
9938 if (SvSTASH(dstr))
9939 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
1d7c1841 9940 }
662fb8b2 9941
f32993d6
NC
9942 /* The cast silences a GCC warning about unhandled types. */
9943 switch ((int)sv_type) {
662fb8b2
NC
9944 case SVt_PV:
9945 break;
9946 case SVt_PVIV:
9947 break;
9948 case SVt_PVNV:
9949 break;
9950 case SVt_PVMG:
9951 break;
9952 case SVt_PVBM:
9953 break;
9954 case SVt_PVLV:
9955 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
9956 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
9957 LvTARG(dstr) = dstr;
9958 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
9959 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(dstr), 0, param);
9960 else
9961 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
9962 break;
9963 case SVt_PVGV:
acda4c6a
NC
9964 if (GvNAME_HEK(dstr))
9965 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
f5c1e807 9966
e15faf7d
NC
9967 /* Don't call sv_add_backref here as it's going to be created
9968 as part of the magic cloning of the symbol table. */
f7877b28
NC
9969 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
9970 if(isGV_with_GP(sstr)) {
9971 /* Danger Will Robinson - GvGP(dstr) isn't initialised
9972 at the point of this comment. */
9973 GvGP(dstr) = gp_dup(GvGP(sstr), param);
9974 (void)GpREFCNT_inc(GvGP(dstr));
9975 } else
9976 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
662fb8b2
NC
9977 break;
9978 case SVt_PVIO:
9979 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
9980 if (IoOFP(dstr) == IoIFP(sstr))
9981 IoOFP(dstr) = IoIFP(dstr);
9982 else
9983 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
9984 /* PL_rsfp_filters entries have fake IoDIRP() */
662fb8b2
NC
9985 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
9986 /* I have no idea why fake dirp (rsfps)
9987 should be treated differently but otherwise
9988 we end up with leaks -- sky*/
9989 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
9990 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
9991 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
9992 } else {
9993 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
9994 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
9995 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
100ce7e1
NC
9996 if (IoDIRP(dstr)) {
9997 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
9998 } else {
6f207bd3 9999 NOOP;
100ce7e1
NC
10000 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
10001 }
662fb8b2
NC
10002 }
10003 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
10004 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
10005 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
10006 break;
10007 case SVt_PVAV:
10008 if (AvARRAY((AV*)sstr)) {
10009 SV **dst_ary, **src_ary;
10010 SSize_t items = AvFILLp((AV*)sstr) + 1;
10011
10012 src_ary = AvARRAY((AV*)sstr);
a02a5408 10013 Newxz(dst_ary, AvMAX((AV*)sstr)+1, SV*);
662fb8b2 10014 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
9c6bc640 10015 AvARRAY((AV*)dstr) = dst_ary;
662fb8b2
NC
10016 AvALLOC((AV*)dstr) = dst_ary;
10017 if (AvREAL((AV*)sstr)) {
10018 while (items-- > 0)
10019 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10020 }
10021 else {
10022 while (items-- > 0)
10023 *dst_ary++ = sv_dup(*src_ary++, param);
10024 }
10025 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10026 while (items-- > 0) {
10027 *dst_ary++ = &PL_sv_undef;
10028 }
bfcb3514 10029 }
662fb8b2 10030 else {
9c6bc640 10031 AvARRAY((AV*)dstr) = NULL;
662fb8b2 10032 AvALLOC((AV*)dstr) = (SV**)NULL;
b79f7545 10033 }
662fb8b2
NC
10034 break;
10035 case SVt_PVHV:
7e265ef3
AL
10036 if (HvARRAY((HV*)sstr)) {
10037 STRLEN i = 0;
10038 const bool sharekeys = !!HvSHAREKEYS(sstr);
10039 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
10040 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
10041 char *darray;
10042 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
10043 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
10044 char);
10045 HvARRAY(dstr) = (HE**)darray;
10046 while (i <= sxhv->xhv_max) {
10047 const HE * const source = HvARRAY(sstr)[i];
10048 HvARRAY(dstr)[i] = source
10049 ? he_dup(source, sharekeys, param) : 0;
10050 ++i;
10051 }
10052 if (SvOOK(sstr)) {
10053 HEK *hvname;
10054 const struct xpvhv_aux * const saux = HvAUX(sstr);
10055 struct xpvhv_aux * const daux = HvAUX(dstr);
10056 /* This flag isn't copied. */
10057 /* SvOOK_on(hv) attacks the IV flags. */
10058 SvFLAGS(dstr) |= SVf_OOK;
10059
10060 hvname = saux->xhv_name;
10061 daux->xhv_name = hvname ? hek_dup(hvname, param) : hvname;
10062
10063 daux->xhv_riter = saux->xhv_riter;
10064 daux->xhv_eiter = saux->xhv_eiter
10065 ? he_dup(saux->xhv_eiter,
10066 (bool)!!HvSHAREKEYS(sstr), param) : 0;
10067 daux->xhv_backreferences =
10068 saux->xhv_backreferences
86f55936 10069 ? (AV*) SvREFCNT_inc(
7e265ef3 10070 sv_dup((SV*)saux->xhv_backreferences, param))
86f55936 10071 : 0;
7e265ef3
AL
10072 /* Record stashes for possible cloning in Perl_clone(). */
10073 if (hvname)
10074 av_push(param->stashes, dstr);
662fb8b2 10075 }
662fb8b2 10076 }
7e265ef3 10077 else
797c7171 10078 HvARRAY((HV*)dstr) = NULL;
662fb8b2 10079 break;
662fb8b2 10080 case SVt_PVCV:
bb172083
NC
10081 if (!(param->flags & CLONEf_COPY_STACKS)) {
10082 CvDEPTH(dstr) = 0;
10083 }
10084 case SVt_PVFM:
662fb8b2
NC
10085 /* NOTE: not refcounted */
10086 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
10087 OP_REFCNT_LOCK;
d04ba589
NC
10088 if (!CvISXSUB(dstr))
10089 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
662fb8b2 10090 OP_REFCNT_UNLOCK;
cfae286e 10091 if (CvCONST(dstr) && CvISXSUB(dstr)) {
662fb8b2
NC
10092 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(dstr)) ?
10093 SvREFCNT_inc(CvXSUBANY(dstr).any_ptr) :
10094 sv_dup_inc((SV *)CvXSUBANY(dstr).any_ptr, param);
10095 }
10096 /* don't dup if copying back - CvGV isn't refcounted, so the
10097 * duped GV may never be freed. A bit of a hack! DAPM */
10098 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
a0714e2c 10099 NULL : gv_dup(CvGV(dstr), param) ;
662fb8b2
NC
10100 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10101 CvOUTSIDE(dstr) =
10102 CvWEAKOUTSIDE(sstr)
10103 ? cv_dup( CvOUTSIDE(dstr), param)
10104 : cv_dup_inc(CvOUTSIDE(dstr), param);
aed2304a 10105 if (!CvISXSUB(dstr))
662fb8b2
NC
10106 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
10107 break;
bfcb3514 10108 }
1d7c1841 10109 }
1d7c1841
GS
10110 }
10111
10112 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10113 ++PL_sv_objcount;
10114
10115 return dstr;
d2d73c3e 10116 }
1d7c1841 10117
645c22ef
DM
10118/* duplicate a context */
10119
1d7c1841 10120PERL_CONTEXT *
a8fc9800 10121Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
1d7c1841
GS
10122{
10123 PERL_CONTEXT *ncxs;
10124
10125 if (!cxs)
10126 return (PERL_CONTEXT*)NULL;
10127
10128 /* look for it in the table first */
10129 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10130 if (ncxs)
10131 return ncxs;
10132
10133 /* create anew and remember what it is */
a02a5408 10134 Newxz(ncxs, max + 1, PERL_CONTEXT);
1d7c1841
GS
10135 ptr_table_store(PL_ptr_table, cxs, ncxs);
10136
10137 while (ix >= 0) {
c445ea15
AL
10138 PERL_CONTEXT * const cx = &cxs[ix];
10139 PERL_CONTEXT * const ncx = &ncxs[ix];
1d7c1841
GS
10140 ncx->cx_type = cx->cx_type;
10141 if (CxTYPE(cx) == CXt_SUBST) {
10142 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10143 }
10144 else {
10145 ncx->blk_oldsp = cx->blk_oldsp;
10146 ncx->blk_oldcop = cx->blk_oldcop;
1d7c1841
GS
10147 ncx->blk_oldmarksp = cx->blk_oldmarksp;
10148 ncx->blk_oldscopesp = cx->blk_oldscopesp;
10149 ncx->blk_oldpm = cx->blk_oldpm;
10150 ncx->blk_gimme = cx->blk_gimme;
10151 switch (CxTYPE(cx)) {
10152 case CXt_SUB:
10153 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
d2d73c3e
AB
10154 ? cv_dup_inc(cx->blk_sub.cv, param)
10155 : cv_dup(cx->blk_sub.cv,param));
cc8d50a7 10156 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
d2d73c3e 10157 ? av_dup_inc(cx->blk_sub.argarray, param)
7d49f689 10158 : NULL);
d2d73c3e 10159 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
1d7c1841 10160 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
cc8d50a7
NC
10161 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10162 ncx->blk_sub.lval = cx->blk_sub.lval;
f39bc417 10163 ncx->blk_sub.retop = cx->blk_sub.retop;
d8d97e70
DM
10164 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
10165 cx->blk_sub.oldcomppad);
1d7c1841
GS
10166 break;
10167 case CXt_EVAL:
10168 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
10169 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
b47cad08 10170 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
1d7c1841 10171 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
d2d73c3e 10172 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
f39bc417 10173 ncx->blk_eval.retop = cx->blk_eval.retop;
1d7c1841
GS
10174 break;
10175 case CXt_LOOP:
10176 ncx->blk_loop.label = cx->blk_loop.label;
10177 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
022eaa24 10178 ncx->blk_loop.my_op = cx->blk_loop.my_op;
1d7c1841
GS
10179 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
10180 ? cx->blk_loop.iterdata
d2d73c3e 10181 : gv_dup((GV*)cx->blk_loop.iterdata, param));
f3548bdc
DM
10182 ncx->blk_loop.oldcomppad
10183 = (PAD*)ptr_table_fetch(PL_ptr_table,
10184 cx->blk_loop.oldcomppad);
d2d73c3e
AB
10185 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
10186 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
10187 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
1d7c1841
GS
10188 ncx->blk_loop.iterix = cx->blk_loop.iterix;
10189 ncx->blk_loop.itermax = cx->blk_loop.itermax;
10190 break;
10191 case CXt_FORMAT:
d2d73c3e
AB
10192 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
10193 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
10194 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
cc8d50a7 10195 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
f39bc417 10196 ncx->blk_sub.retop = cx->blk_sub.retop;
1d7c1841
GS
10197 break;
10198 case CXt_BLOCK:
10199 case CXt_NULL:
10200 break;
10201 }
10202 }
10203 --ix;
10204 }
10205 return ncxs;
10206}
10207
645c22ef
DM
10208/* duplicate a stack info structure */
10209
1d7c1841 10210PERL_SI *
a8fc9800 10211Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
1d7c1841
GS
10212{
10213 PERL_SI *nsi;
10214
10215 if (!si)
10216 return (PERL_SI*)NULL;
10217
10218 /* look for it in the table first */
10219 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10220 if (nsi)
10221 return nsi;
10222
10223 /* create anew and remember what it is */
a02a5408 10224 Newxz(nsi, 1, PERL_SI);
1d7c1841
GS
10225 ptr_table_store(PL_ptr_table, si, nsi);
10226
d2d73c3e 10227 nsi->si_stack = av_dup_inc(si->si_stack, param);
1d7c1841
GS
10228 nsi->si_cxix = si->si_cxix;
10229 nsi->si_cxmax = si->si_cxmax;
d2d73c3e 10230 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
1d7c1841 10231 nsi->si_type = si->si_type;
d2d73c3e
AB
10232 nsi->si_prev = si_dup(si->si_prev, param);
10233 nsi->si_next = si_dup(si->si_next, param);
1d7c1841
GS
10234 nsi->si_markoff = si->si_markoff;
10235
10236 return nsi;
10237}
10238
10239#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10240#define TOPINT(ss,ix) ((ss)[ix].any_i32)
10241#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10242#define TOPLONG(ss,ix) ((ss)[ix].any_long)
10243#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10244#define TOPIV(ss,ix) ((ss)[ix].any_iv)
38d8b13e
HS
10245#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10246#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
1d7c1841
GS
10247#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10248#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10249#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10250#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
10251#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10252#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
10253
10254/* XXXXX todo */
10255#define pv_dup_inc(p) SAVEPV(p)
10256#define pv_dup(p) SAVEPV(p)
10257#define svp_dup_inc(p,pp) any_dup(p,pp)
10258
645c22ef
DM
10259/* map any object to the new equivent - either something in the
10260 * ptr table, or something in the interpreter structure
10261 */
10262
1d7c1841 10263void *
53c1dcc0 10264Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
1d7c1841
GS
10265{
10266 void *ret;
10267
10268 if (!v)
10269 return (void*)NULL;
10270
10271 /* look for it in the table first */
10272 ret = ptr_table_fetch(PL_ptr_table, v);
10273 if (ret)
10274 return ret;
10275
10276 /* see if it is part of the interpreter structure */
10277 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
acfe0abc 10278 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
05ec9bb3 10279 else {
1d7c1841 10280 ret = v;
05ec9bb3 10281 }
1d7c1841
GS
10282
10283 return ret;
10284}
10285
645c22ef
DM
10286/* duplicate the save stack */
10287
1d7c1841 10288ANY *
a8fc9800 10289Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
1d7c1841 10290{
53c1dcc0
AL
10291 ANY * const ss = proto_perl->Tsavestack;
10292 const I32 max = proto_perl->Tsavestack_max;
10293 I32 ix = proto_perl->Tsavestack_ix;
1d7c1841
GS
10294 ANY *nss;
10295 SV *sv;
10296 GV *gv;
10297 AV *av;
10298 HV *hv;
10299 void* ptr;
10300 int intval;
10301 long longval;
10302 GP *gp;
10303 IV iv;
b24356f5 10304 I32 i;
c4e33207 10305 char *c = NULL;
1d7c1841 10306 void (*dptr) (void*);
acfe0abc 10307 void (*dxptr) (pTHX_ void*);
1d7c1841 10308
a02a5408 10309 Newxz(nss, max, ANY);
1d7c1841
GS
10310
10311 while (ix > 0) {
b24356f5
NC
10312 const I32 type = POPINT(ss,ix);
10313 TOPINT(nss,ix) = type;
10314 switch (type) {
3e07292d
NC
10315 case SAVEt_HELEM: /* hash element */
10316 sv = (SV*)POPPTR(ss,ix);
10317 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10318 /* fall through */
1d7c1841 10319 case SAVEt_ITEM: /* normal string */
a41cc44e 10320 case SAVEt_SV: /* scalar reference */
1d7c1841 10321 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10322 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
10323 /* fall through */
10324 case SAVEt_FREESV:
10325 case SAVEt_MORTALIZESV:
1d7c1841 10326 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10327 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841 10328 break;
05ec9bb3
NIS
10329 case SAVEt_SHARED_PVREF: /* char* in shared space */
10330 c = (char*)POPPTR(ss,ix);
10331 TOPPTR(nss,ix) = savesharedpv(c);
10332 ptr = POPPTR(ss,ix);
10333 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10334 break;
1d7c1841
GS
10335 case SAVEt_GENERIC_SVREF: /* generic sv */
10336 case SAVEt_SVREF: /* scalar reference */
10337 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10338 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
10339 ptr = POPPTR(ss,ix);
10340 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
10341 break;
a41cc44e 10342 case SAVEt_HV: /* hash reference */
1d7c1841 10343 case SAVEt_AV: /* array reference */
11b79775 10344 sv = (SV*) POPPTR(ss,ix);
337d28f5 10345 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
3e07292d
NC
10346 /* fall through */
10347 case SAVEt_COMPPAD:
10348 case SAVEt_NSTAB:
667e2948 10349 sv = (SV*) POPPTR(ss,ix);
3e07292d 10350 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
10351 break;
10352 case SAVEt_INT: /* int reference */
10353 ptr = POPPTR(ss,ix);
10354 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10355 intval = (int)POPINT(ss,ix);
10356 TOPINT(nss,ix) = intval;
10357 break;
10358 case SAVEt_LONG: /* long reference */
10359 ptr = POPPTR(ss,ix);
10360 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
3e07292d
NC
10361 /* fall through */
10362 case SAVEt_CLEARSV:
1d7c1841
GS
10363 longval = (long)POPLONG(ss,ix);
10364 TOPLONG(nss,ix) = longval;
10365 break;
10366 case SAVEt_I32: /* I32 reference */
10367 case SAVEt_I16: /* I16 reference */
10368 case SAVEt_I8: /* I8 reference */
88effcc9 10369 case SAVEt_COP_ARYBASE: /* call CopARYBASE_set */
1d7c1841
GS
10370 ptr = POPPTR(ss,ix);
10371 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
1ccabee8 10372 i = POPINT(ss,ix);
1d7c1841
GS
10373 TOPINT(nss,ix) = i;
10374 break;
10375 case SAVEt_IV: /* IV reference */
10376 ptr = POPPTR(ss,ix);
10377 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10378 iv = POPIV(ss,ix);
10379 TOPIV(nss,ix) = iv;
10380 break;
a41cc44e
NC
10381 case SAVEt_HPTR: /* HV* reference */
10382 case SAVEt_APTR: /* AV* reference */
1d7c1841
GS
10383 case SAVEt_SPTR: /* SV* reference */
10384 ptr = POPPTR(ss,ix);
10385 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10386 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10387 TOPPTR(nss,ix) = sv_dup(sv, param);
1d7c1841
GS
10388 break;
10389 case SAVEt_VPTR: /* random* reference */
10390 ptr = POPPTR(ss,ix);
10391 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10392 ptr = POPPTR(ss,ix);
10393 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10394 break;
b03d03b0 10395 case SAVEt_GENERIC_PVREF: /* generic char* */
1d7c1841
GS
10396 case SAVEt_PPTR: /* char* reference */
10397 ptr = POPPTR(ss,ix);
10398 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10399 c = (char*)POPPTR(ss,ix);
10400 TOPPTR(nss,ix) = pv_dup(c);
10401 break;
1d7c1841
GS
10402 case SAVEt_GP: /* scalar reference */
10403 gp = (GP*)POPPTR(ss,ix);
d2d73c3e 10404 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
1d7c1841
GS
10405 (void)GpREFCNT_inc(gp);
10406 gv = (GV*)POPPTR(ss,ix);
2ed3c8fc 10407 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
1d7c1841 10408 break;
1d7c1841
GS
10409 case SAVEt_FREEOP:
10410 ptr = POPPTR(ss,ix);
10411 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
10412 /* these are assumed to be refcounted properly */
53c1dcc0 10413 OP *o;
1d7c1841
GS
10414 switch (((OP*)ptr)->op_type) {
10415 case OP_LEAVESUB:
10416 case OP_LEAVESUBLV:
10417 case OP_LEAVEEVAL:
10418 case OP_LEAVE:
10419 case OP_SCOPE:
10420 case OP_LEAVEWRITE:
e977893f
GS
10421 TOPPTR(nss,ix) = ptr;
10422 o = (OP*)ptr;
d3c72c2a 10423 OP_REFCNT_LOCK;
e977893f 10424 OpREFCNT_inc(o);
d3c72c2a 10425 OP_REFCNT_UNLOCK;
1d7c1841
GS
10426 break;
10427 default:
5f66b61c 10428 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
10429 break;
10430 }
10431 }
10432 else
5f66b61c 10433 TOPPTR(nss,ix) = NULL;
1d7c1841
GS
10434 break;
10435 case SAVEt_FREEPV:
10436 c = (char*)POPPTR(ss,ix);
10437 TOPPTR(nss,ix) = pv_dup_inc(c);
10438 break;
1d7c1841
GS
10439 case SAVEt_DELETE:
10440 hv = (HV*)POPPTR(ss,ix);
d2d73c3e 10441 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
1d7c1841
GS
10442 c = (char*)POPPTR(ss,ix);
10443 TOPPTR(nss,ix) = pv_dup_inc(c);
3e07292d
NC
10444 /* fall through */
10445 case SAVEt_STACK_POS: /* Position on Perl stack */
1d7c1841
GS
10446 i = POPINT(ss,ix);
10447 TOPINT(nss,ix) = i;
10448 break;
10449 case SAVEt_DESTRUCTOR:
10450 ptr = POPPTR(ss,ix);
10451 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10452 dptr = POPDPTR(ss,ix);
8141890a
JH
10453 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
10454 any_dup(FPTR2DPTR(void *, dptr),
10455 proto_perl));
1d7c1841
GS
10456 break;
10457 case SAVEt_DESTRUCTOR_X:
10458 ptr = POPPTR(ss,ix);
10459 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10460 dxptr = POPDXPTR(ss,ix);
8141890a
JH
10461 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
10462 any_dup(FPTR2DPTR(void *, dxptr),
10463 proto_perl));
1d7c1841
GS
10464 break;
10465 case SAVEt_REGCONTEXT:
10466 case SAVEt_ALLOC:
10467 i = POPINT(ss,ix);
10468 TOPINT(nss,ix) = i;
10469 ix -= i;
10470 break;
1d7c1841
GS
10471 case SAVEt_AELEM: /* array element */
10472 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10473 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
1d7c1841
GS
10474 i = POPINT(ss,ix);
10475 TOPINT(nss,ix) = i;
10476 av = (AV*)POPPTR(ss,ix);
d2d73c3e 10477 TOPPTR(nss,ix) = av_dup_inc(av, param);
1d7c1841 10478 break;
1d7c1841
GS
10479 case SAVEt_OP:
10480 ptr = POPPTR(ss,ix);
10481 TOPPTR(nss,ix) = ptr;
10482 break;
10483 case SAVEt_HINTS:
10484 i = POPINT(ss,ix);
10485 TOPINT(nss,ix) = i;
b3ca2e83 10486 ptr = POPPTR(ss,ix);
080ac856 10487 if (ptr) {
7b6dd8c3 10488 HINTS_REFCNT_LOCK;
080ac856 10489 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
7b6dd8c3
NC
10490 HINTS_REFCNT_UNLOCK;
10491 }
cbb1fbea 10492 TOPPTR(nss,ix) = ptr;
a8f8b6a7
NC
10493 if (i & HINT_LOCALIZE_HH) {
10494 hv = (HV*)POPPTR(ss,ix);
10495 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10496 }
1d7c1841 10497 break;
c3564e5c
GS
10498 case SAVEt_PADSV:
10499 longval = (long)POPLONG(ss,ix);
10500 TOPLONG(nss,ix) = longval;
10501 ptr = POPPTR(ss,ix);
10502 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10503 sv = (SV*)POPPTR(ss,ix);
d2d73c3e 10504 TOPPTR(nss,ix) = sv_dup(sv, param);
c3564e5c 10505 break;
a1bb4754 10506 case SAVEt_BOOL:
38d8b13e 10507 ptr = POPPTR(ss,ix);
b9609c01 10508 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
38d8b13e 10509 longval = (long)POPBOOL(ss,ix);
b9609c01 10510 TOPBOOL(nss,ix) = (bool)longval;
a1bb4754 10511 break;
8bd2680e
MHM
10512 case SAVEt_SET_SVFLAGS:
10513 i = POPINT(ss,ix);
10514 TOPINT(nss,ix) = i;
10515 i = POPINT(ss,ix);
10516 TOPINT(nss,ix) = i;
10517 sv = (SV*)POPPTR(ss,ix);
10518 TOPPTR(nss,ix) = sv_dup(sv, param);
10519 break;
5bfb7d0e
NC
10520 case SAVEt_RE_STATE:
10521 {
10522 const struct re_save_state *const old_state
10523 = (struct re_save_state *)
10524 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
10525 struct re_save_state *const new_state
10526 = (struct re_save_state *)
10527 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
10528
10529 Copy(old_state, new_state, 1, struct re_save_state);
10530 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
10531
10532 new_state->re_state_bostr
10533 = pv_dup(old_state->re_state_bostr);
10534 new_state->re_state_reginput
10535 = pv_dup(old_state->re_state_reginput);
5bfb7d0e
NC
10536 new_state->re_state_regeol
10537 = pv_dup(old_state->re_state_regeol);
10538 new_state->re_state_regstartp
11b79775 10539 = (I32*) any_dup(old_state->re_state_regstartp, proto_perl);
5bfb7d0e 10540 new_state->re_state_regendp
11b79775 10541 = (I32*) any_dup(old_state->re_state_regendp, proto_perl);
5bfb7d0e 10542 new_state->re_state_reglastparen
11b79775
DD
10543 = (U32*) any_dup(old_state->re_state_reglastparen,
10544 proto_perl);
5bfb7d0e 10545 new_state->re_state_reglastcloseparen
11b79775 10546 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
5bfb7d0e 10547 proto_perl);
5bfb7d0e
NC
10548 /* XXX This just has to be broken. The old save_re_context
10549 code did SAVEGENERICPV(PL_reg_start_tmp);
10550 PL_reg_start_tmp is char **.
10551 Look above to what the dup code does for
10552 SAVEt_GENERIC_PVREF
10553 It can never have worked.
10554 So this is merely a faithful copy of the exiting bug: */
10555 new_state->re_state_reg_start_tmp
10556 = (char **) pv_dup((char *)
10557 old_state->re_state_reg_start_tmp);
10558 /* I assume that it only ever "worked" because no-one called
10559 (pseudo)fork while the regexp engine had re-entered itself.
10560 */
5bfb7d0e
NC
10561#ifdef PERL_OLD_COPY_ON_WRITE
10562 new_state->re_state_nrs
10563 = sv_dup(old_state->re_state_nrs, param);
10564#endif
10565 new_state->re_state_reg_magic
11b79775
DD
10566 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
10567 proto_perl);
5bfb7d0e 10568 new_state->re_state_reg_oldcurpm
11b79775
DD
10569 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
10570 proto_perl);
5bfb7d0e 10571 new_state->re_state_reg_curpm
11b79775
DD
10572 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
10573 proto_perl);
5bfb7d0e
NC
10574 new_state->re_state_reg_oldsaved
10575 = pv_dup(old_state->re_state_reg_oldsaved);
10576 new_state->re_state_reg_poscache
10577 = pv_dup(old_state->re_state_reg_poscache);
5bfb7d0e
NC
10578 new_state->re_state_reg_starttry
10579 = pv_dup(old_state->re_state_reg_starttry);
5bfb7d0e
NC
10580 break;
10581 }
68da3b2f
NC
10582 case SAVEt_COMPILE_WARNINGS:
10583 ptr = POPPTR(ss,ix);
10584 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
7b6dd8c3 10585 break;
1d7c1841 10586 default:
147bc374
NC
10587 Perl_croak(aTHX_
10588 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
1d7c1841
GS
10589 }
10590 }
10591
bd81e77b
NC
10592 return nss;
10593}
10594
10595
10596/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
10597 * flag to the result. This is done for each stash before cloning starts,
10598 * so we know which stashes want their objects cloned */
10599
10600static void
10601do_mark_cloneable_stash(pTHX_ SV *sv)
10602{
10603 const HEK * const hvname = HvNAME_HEK((HV*)sv);
10604 if (hvname) {
10605 GV* const cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
10606 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
10607 if (cloner && GvCV(cloner)) {
10608 dSP;
10609 UV status;
10610
10611 ENTER;
10612 SAVETMPS;
10613 PUSHMARK(SP);
10614 XPUSHs(sv_2mortal(newSVhek(hvname)));
10615 PUTBACK;
10616 call_sv((SV*)GvCV(cloner), G_SCALAR);
10617 SPAGAIN;
10618 status = POPu;
10619 PUTBACK;
10620 FREETMPS;
10621 LEAVE;
10622 if (status)
10623 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
10624 }
10625 }
10626}
10627
10628
10629
10630/*
10631=for apidoc perl_clone
10632
10633Create and return a new interpreter by cloning the current one.
10634
10635perl_clone takes these flags as parameters:
10636
10637CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
10638without it we only clone the data and zero the stacks,
10639with it we copy the stacks and the new perl interpreter is
10640ready to run at the exact same point as the previous one.
10641The pseudo-fork code uses COPY_STACKS while the
10642threads->new doesn't.
10643
10644CLONEf_KEEP_PTR_TABLE
10645perl_clone keeps a ptr_table with the pointer of the old
10646variable as a key and the new variable as a value,
10647this allows it to check if something has been cloned and not
10648clone it again but rather just use the value and increase the
10649refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
10650the ptr_table using the function
10651C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
10652reason to keep it around is if you want to dup some of your own
10653variable who are outside the graph perl scans, example of this
10654code is in threads.xs create
10655
10656CLONEf_CLONE_HOST
10657This is a win32 thing, it is ignored on unix, it tells perls
10658win32host code (which is c++) to clone itself, this is needed on
10659win32 if you want to run two threads at the same time,
10660if you just want to do some stuff in a separate perl interpreter
10661and then throw it away and return to the original one,
10662you don't need to do anything.
10663
10664=cut
10665*/
10666
10667/* XXX the above needs expanding by someone who actually understands it ! */
10668EXTERN_C PerlInterpreter *
10669perl_clone_host(PerlInterpreter* proto_perl, UV flags);
10670
10671PerlInterpreter *
10672perl_clone(PerlInterpreter *proto_perl, UV flags)
10673{
10674 dVAR;
10675#ifdef PERL_IMPLICIT_SYS
10676
10677 /* perlhost.h so we need to call into it
10678 to clone the host, CPerlHost should have a c interface, sky */
10679
10680 if (flags & CLONEf_CLONE_HOST) {
10681 return perl_clone_host(proto_perl,flags);
10682 }
10683 return perl_clone_using(proto_perl, flags,
10684 proto_perl->IMem,
10685 proto_perl->IMemShared,
10686 proto_perl->IMemParse,
10687 proto_perl->IEnv,
10688 proto_perl->IStdIO,
10689 proto_perl->ILIO,
10690 proto_perl->IDir,
10691 proto_perl->ISock,
10692 proto_perl->IProc);
10693}
10694
10695PerlInterpreter *
10696perl_clone_using(PerlInterpreter *proto_perl, UV flags,
10697 struct IPerlMem* ipM, struct IPerlMem* ipMS,
10698 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
10699 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
10700 struct IPerlDir* ipD, struct IPerlSock* ipS,
10701 struct IPerlProc* ipP)
10702{
10703 /* XXX many of the string copies here can be optimized if they're
10704 * constants; they need to be allocated as common memory and just
10705 * their pointers copied. */
10706
10707 IV i;
10708 CLONE_PARAMS clone_params;
5f66b61c 10709 CLONE_PARAMS* const param = &clone_params;
bd81e77b 10710
5f66b61c 10711 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
bd81e77b
NC
10712 /* for each stash, determine whether its objects should be cloned */
10713 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10714 PERL_SET_THX(my_perl);
10715
10716# ifdef DEBUGGING
7e337ee0 10717 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
10718 PL_op = NULL;
10719 PL_curcop = NULL;
bd81e77b
NC
10720 PL_markstack = 0;
10721 PL_scopestack = 0;
10722 PL_savestack = 0;
10723 PL_savestack_ix = 0;
10724 PL_savestack_max = -1;
10725 PL_sig_pending = 0;
10726 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10727# else /* !DEBUGGING */
10728 Zero(my_perl, 1, PerlInterpreter);
10729# endif /* DEBUGGING */
10730
10731 /* host pointers */
10732 PL_Mem = ipM;
10733 PL_MemShared = ipMS;
10734 PL_MemParse = ipMP;
10735 PL_Env = ipE;
10736 PL_StdIO = ipStd;
10737 PL_LIO = ipLIO;
10738 PL_Dir = ipD;
10739 PL_Sock = ipS;
10740 PL_Proc = ipP;
10741#else /* !PERL_IMPLICIT_SYS */
10742 IV i;
10743 CLONE_PARAMS clone_params;
10744 CLONE_PARAMS* param = &clone_params;
5f66b61c 10745 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
bd81e77b
NC
10746 /* for each stash, determine whether its objects should be cloned */
10747 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10748 PERL_SET_THX(my_perl);
10749
10750# ifdef DEBUGGING
7e337ee0 10751 PoisonNew(my_perl, 1, PerlInterpreter);
5f66b61c
AL
10752 PL_op = NULL;
10753 PL_curcop = NULL;
bd81e77b
NC
10754 PL_markstack = 0;
10755 PL_scopestack = 0;
10756 PL_savestack = 0;
10757 PL_savestack_ix = 0;
10758 PL_savestack_max = -1;
10759 PL_sig_pending = 0;
10760 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10761# else /* !DEBUGGING */
10762 Zero(my_perl, 1, PerlInterpreter);
10763# endif /* DEBUGGING */
10764#endif /* PERL_IMPLICIT_SYS */
10765 param->flags = flags;
10766 param->proto_perl = proto_perl;
10767
7cb608b5
NC
10768 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
10769
fdda85ca 10770 PL_body_arenas = NULL;
bd81e77b
NC
10771 Zero(&PL_body_roots, 1, PL_body_roots);
10772
10773 PL_nice_chunk = NULL;
10774 PL_nice_chunk_size = 0;
10775 PL_sv_count = 0;
10776 PL_sv_objcount = 0;
a0714e2c
SS
10777 PL_sv_root = NULL;
10778 PL_sv_arenaroot = NULL;
bd81e77b
NC
10779
10780 PL_debug = proto_perl->Idebug;
10781
10782 PL_hash_seed = proto_perl->Ihash_seed;
10783 PL_rehash_seed = proto_perl->Irehash_seed;
10784
10785#ifdef USE_REENTRANT_API
10786 /* XXX: things like -Dm will segfault here in perlio, but doing
10787 * PERL_SET_CONTEXT(proto_perl);
10788 * breaks too many other things
10789 */
10790 Perl_reentrant_init(aTHX);
10791#endif
10792
10793 /* create SV map for pointer relocation */
10794 PL_ptr_table = ptr_table_new();
10795
10796 /* initialize these special pointers as early as possible */
10797 SvANY(&PL_sv_undef) = NULL;
10798 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
10799 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
10800 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
10801
10802 SvANY(&PL_sv_no) = new_XPVNV();
10803 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
10804 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10805 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 10806 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
bd81e77b
NC
10807 SvCUR_set(&PL_sv_no, 0);
10808 SvLEN_set(&PL_sv_no, 1);
10809 SvIV_set(&PL_sv_no, 0);
10810 SvNV_set(&PL_sv_no, 0);
10811 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
10812
10813 SvANY(&PL_sv_yes) = new_XPVNV();
10814 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
10815 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10816 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
bb7a0f54 10817 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
bd81e77b
NC
10818 SvCUR_set(&PL_sv_yes, 1);
10819 SvLEN_set(&PL_sv_yes, 2);
10820 SvIV_set(&PL_sv_yes, 1);
10821 SvNV_set(&PL_sv_yes, 1);
10822 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
10823
10824 /* create (a non-shared!) shared string table */
10825 PL_strtab = newHV();
10826 HvSHAREKEYS_off(PL_strtab);
10827 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
10828 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
10829
10830 PL_compiling = proto_perl->Icompiling;
10831
10832 /* These two PVs will be free'd special way so must set them same way op.c does */
10833 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
10834 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
10835
10836 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
10837 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
10838
10839 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
72dc9ed5 10840 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
c28fe1ec 10841 if (PL_compiling.cop_hints_hash) {
cbb1fbea 10842 HINTS_REFCNT_LOCK;
c28fe1ec 10843 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
cbb1fbea
NC
10844 HINTS_REFCNT_UNLOCK;
10845 }
bd81e77b
NC
10846 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
10847
10848 /* pseudo environmental stuff */
10849 PL_origargc = proto_perl->Iorigargc;
10850 PL_origargv = proto_perl->Iorigargv;
10851
10852 param->stashes = newAV(); /* Setup array of objects to call clone on */
10853
10854 /* Set tainting stuff before PerlIO_debug can possibly get called */
10855 PL_tainting = proto_perl->Itainting;
10856 PL_taint_warn = proto_perl->Itaint_warn;
10857
10858#ifdef PERLIO_LAYERS
10859 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
10860 PerlIO_clone(aTHX_ proto_perl, param);
10861#endif
10862
10863 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
10864 PL_incgv = gv_dup(proto_perl->Iincgv, param);
10865 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
10866 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
10867 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
10868 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
10869
10870 /* switches */
10871 PL_minus_c = proto_perl->Iminus_c;
10872 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
10873 PL_localpatches = proto_perl->Ilocalpatches;
10874 PL_splitstr = proto_perl->Isplitstr;
10875 PL_preprocess = proto_perl->Ipreprocess;
10876 PL_minus_n = proto_perl->Iminus_n;
10877 PL_minus_p = proto_perl->Iminus_p;
10878 PL_minus_l = proto_perl->Iminus_l;
10879 PL_minus_a = proto_perl->Iminus_a;
bc9b29db 10880 PL_minus_E = proto_perl->Iminus_E;
bd81e77b
NC
10881 PL_minus_F = proto_perl->Iminus_F;
10882 PL_doswitches = proto_perl->Idoswitches;
10883 PL_dowarn = proto_perl->Idowarn;
10884 PL_doextract = proto_perl->Idoextract;
10885 PL_sawampersand = proto_perl->Isawampersand;
10886 PL_unsafe = proto_perl->Iunsafe;
10887 PL_inplace = SAVEPV(proto_perl->Iinplace);
10888 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
10889 PL_perldb = proto_perl->Iperldb;
10890 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
10891 PL_exit_flags = proto_perl->Iexit_flags;
10892
10893 /* magical thingies */
10894 /* XXX time(&PL_basetime) when asked for? */
10895 PL_basetime = proto_perl->Ibasetime;
10896 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
10897
10898 PL_maxsysfd = proto_perl->Imaxsysfd;
bd81e77b
NC
10899 PL_statusvalue = proto_perl->Istatusvalue;
10900#ifdef VMS
10901 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
10902#else
10903 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
10904#endif
10905 PL_encoding = sv_dup(proto_perl->Iencoding, param);
10906
10907 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
10908 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
10909 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
10910
84da74a7 10911
f9f4320a 10912 /* RE engine related */
84da74a7
YO
10913 Zero(&PL_reg_state, 1, struct re_save_state);
10914 PL_reginterp_cnt = 0;
10915 PL_regmatch_slab = NULL;
10916
bd81e77b
NC
10917 /* Clone the regex array */
10918 PL_regex_padav = newAV();
10919 {
10920 const I32 len = av_len((AV*)proto_perl->Iregex_padav);
7a5b473e 10921 SV* const * const regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
bd81e77b 10922 IV i;
7f466ec7 10923 av_push(PL_regex_padav, sv_dup_inc_NN(regexen[0],param));
bd81e77b 10924 for(i = 1; i <= len; i++) {
7a5b473e
AL
10925 const SV * const regex = regexen[i];
10926 SV * const sv =
10927 SvREPADTMP(regex)
10928 ? sv_dup_inc(regex, param)
10929 : SvREFCNT_inc(
f8149455 10930 newSViv(PTR2IV(CALLREGDUPE(
7a5b473e
AL
10931 INT2PTR(REGEXP *, SvIVX(regex)), param))))
10932 ;
10933 av_push(PL_regex_padav, sv);
bd81e77b
NC
10934 }
10935 }
10936 PL_regex_pad = AvARRAY(PL_regex_padav);
10937
10938 /* shortcuts to various I/O objects */
10939 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
10940 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
10941 PL_defgv = gv_dup(proto_perl->Idefgv, param);
10942 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
10943 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
10944 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
1d7c1841 10945
bd81e77b
NC
10946 /* shortcuts to regexp stuff */
10947 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
9660f481 10948
bd81e77b
NC
10949 /* shortcuts to misc objects */
10950 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
9660f481 10951
bd81e77b
NC
10952 /* shortcuts to debugging objects */
10953 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
10954 PL_DBline = gv_dup(proto_perl->IDBline, param);
10955 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
10956 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
10957 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
10958 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
10959 PL_DBassertion = sv_dup(proto_perl->IDBassertion, param);
10960 PL_lineary = av_dup(proto_perl->Ilineary, param);
10961 PL_dbargs = av_dup(proto_perl->Idbargs, param);
9660f481 10962
bd81e77b
NC
10963 /* symbol tables */
10964 PL_defstash = hv_dup_inc(proto_perl->Tdefstash, param);
10965 PL_curstash = hv_dup(proto_perl->Tcurstash, param);
10966 PL_debstash = hv_dup(proto_perl->Idebstash, param);
10967 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
10968 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
10969
10970 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
10971 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
10972 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
3c10abe3
AG
10973 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
10974 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
bd81e77b
NC
10975 PL_endav = av_dup_inc(proto_perl->Iendav, param);
10976 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
10977 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
10978
10979 PL_sub_generation = proto_perl->Isub_generation;
10980
10981 /* funky return mechanisms */
10982 PL_forkprocess = proto_perl->Iforkprocess;
10983
10984 /* subprocess state */
10985 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
10986
10987 /* internal state */
10988 PL_maxo = proto_perl->Imaxo;
10989 if (proto_perl->Iop_mask)
10990 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
10991 else
bd61b366 10992 PL_op_mask = NULL;
bd81e77b
NC
10993 /* PL_asserting = proto_perl->Iasserting; */
10994
10995 /* current interpreter roots */
10996 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
d3c72c2a 10997 OP_REFCNT_LOCK;
bd81e77b 10998 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
d3c72c2a 10999 OP_REFCNT_UNLOCK;
bd81e77b
NC
11000 PL_main_start = proto_perl->Imain_start;
11001 PL_eval_root = proto_perl->Ieval_root;
11002 PL_eval_start = proto_perl->Ieval_start;
11003
11004 /* runtime control stuff */
11005 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11006 PL_copline = proto_perl->Icopline;
11007
11008 PL_filemode = proto_perl->Ifilemode;
11009 PL_lastfd = proto_perl->Ilastfd;
11010 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
11011 PL_Argv = NULL;
bd61b366 11012 PL_Cmd = NULL;
bd81e77b
NC
11013 PL_gensym = proto_perl->Igensym;
11014 PL_preambled = proto_perl->Ipreambled;
11015 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
11016 PL_laststatval = proto_perl->Ilaststatval;
11017 PL_laststype = proto_perl->Ilaststype;
a0714e2c 11018 PL_mess_sv = NULL;
bd81e77b
NC
11019
11020 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
11021
11022 /* interpreter atexit processing */
11023 PL_exitlistlen = proto_perl->Iexitlistlen;
11024 if (PL_exitlistlen) {
11025 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11026 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9660f481 11027 }
bd81e77b
NC
11028 else
11029 PL_exitlist = (PerlExitListEntry*)NULL;
f16dd614
DM
11030
11031 PL_my_cxt_size = proto_perl->Imy_cxt_size;
4c901e72 11032 if (PL_my_cxt_size) {
f16dd614
DM
11033 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
11034 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
11035 }
11036 else
11037 PL_my_cxt_list = (void**)NULL;
bd81e77b
NC
11038 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
11039 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
11040 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11041
11042 PL_profiledata = NULL;
11043 PL_rsfp = fp_dup(proto_perl->Irsfp, '<', param);
11044 /* PL_rsfp_filters entries have fake IoDIRP() */
11045 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters, param);
9660f481 11046
bd81e77b 11047 PL_compcv = cv_dup(proto_perl->Icompcv, param);
9660f481 11048
bd81e77b 11049 PAD_CLONE_VARS(proto_perl, param);
9660f481 11050
bd81e77b
NC
11051#ifdef HAVE_INTERP_INTERN
11052 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11053#endif
645c22ef 11054
bd81e77b
NC
11055 /* more statics moved here */
11056 PL_generation = proto_perl->Igeneration;
11057 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
645c22ef 11058
bd81e77b
NC
11059 PL_in_clean_objs = proto_perl->Iin_clean_objs;
11060 PL_in_clean_all = proto_perl->Iin_clean_all;
6a78b4db 11061
bd81e77b
NC
11062 PL_uid = proto_perl->Iuid;
11063 PL_euid = proto_perl->Ieuid;
11064 PL_gid = proto_perl->Igid;
11065 PL_egid = proto_perl->Iegid;
11066 PL_nomemok = proto_perl->Inomemok;
11067 PL_an = proto_perl->Ian;
11068 PL_evalseq = proto_perl->Ievalseq;
11069 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11070 PL_origalen = proto_perl->Iorigalen;
11071#ifdef PERL_USES_PL_PIDSTATUS
11072 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11073#endif
11074 PL_osname = SAVEPV(proto_perl->Iosname);
11075 PL_sighandlerp = proto_perl->Isighandlerp;
6a78b4db 11076
bd81e77b 11077 PL_runops = proto_perl->Irunops;
6a78b4db 11078
bd81e77b 11079 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
6a78b4db 11080
bd81e77b
NC
11081#ifdef CSH
11082 PL_cshlen = proto_perl->Icshlen;
11083 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
11084#endif
645c22ef 11085
bd81e77b
NC
11086 PL_lex_state = proto_perl->Ilex_state;
11087 PL_lex_defer = proto_perl->Ilex_defer;
11088 PL_lex_expect = proto_perl->Ilex_expect;
11089 PL_lex_formbrack = proto_perl->Ilex_formbrack;
11090 PL_lex_dojoin = proto_perl->Ilex_dojoin;
11091 PL_lex_starts = proto_perl->Ilex_starts;
11092 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff, param);
11093 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl, param);
11094 PL_lex_op = proto_perl->Ilex_op;
11095 PL_lex_inpat = proto_perl->Ilex_inpat;
11096 PL_lex_inwhat = proto_perl->Ilex_inwhat;
11097 PL_lex_brackets = proto_perl->Ilex_brackets;
11098 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
11099 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
11100 PL_lex_casemods = proto_perl->Ilex_casemods;
11101 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
11102 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
645c22ef 11103
5db06880
NC
11104#ifdef PERL_MAD
11105 Copy(proto_perl->Inexttoke, PL_nexttoke, 5, NEXTTOKE);
11106 PL_lasttoke = proto_perl->Ilasttoke;
5336380d
NC
11107 PL_realtokenstart = proto_perl->Irealtokenstart;
11108 PL_faketokens = proto_perl->Ifaketokens;
11109 PL_thismad = proto_perl->Ithismad;
11110 PL_thistoken = proto_perl->Ithistoken;
11111 PL_thisopen = proto_perl->Ithisopen;
11112 PL_thisstuff = proto_perl->Ithisstuff;
11113 PL_thisclose = proto_perl->Ithisclose;
11114 PL_thiswhite = proto_perl->Ithiswhite;
11115 PL_nextwhite = proto_perl->Inextwhite;
11116 PL_skipwhite = proto_perl->Iskipwhite;
11117 PL_endwhite = proto_perl->Iendwhite;
11118 PL_curforce = proto_perl->Icurforce;
5db06880 11119#else
bd81e77b
NC
11120 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
11121 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
11122 PL_nexttoke = proto_perl->Inexttoke;
5db06880 11123#endif
c43294b8 11124
bd81e77b
NC
11125 /* XXX This is probably masking the deeper issue of why
11126 * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case:
11127 * http://archive.develooper.com/perl5-porters%40perl.org/msg83298.html
11128 * (A little debugging with a watchpoint on it may help.)
11129 */
11130 if (SvANY(proto_perl->Ilinestr)) {
11131 PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param);
11132 i = proto_perl->Ibufptr - SvPVX_const(proto_perl->Ilinestr);
11133 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11134 i = proto_perl->Ioldbufptr - SvPVX_const(proto_perl->Ilinestr);
11135 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11136 i = proto_perl->Ioldoldbufptr - SvPVX_const(proto_perl->Ilinestr);
11137 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11138 i = proto_perl->Ilinestart - SvPVX_const(proto_perl->Ilinestr);
11139 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11140 }
11141 else {
561b68a9 11142 PL_linestr = newSV(79);
bd81e77b
NC
11143 sv_upgrade(PL_linestr,SVt_PVIV);
11144 sv_setpvn(PL_linestr,"",0);
11145 PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
11146 }
11147 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
11148 PL_pending_ident = proto_perl->Ipending_ident;
11149 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
11150
11151 PL_expect = proto_perl->Iexpect;
11152
11153 PL_multi_start = proto_perl->Imulti_start;
11154 PL_multi_end = proto_perl->Imulti_end;
11155 PL_multi_open = proto_perl->Imulti_open;
11156 PL_multi_close = proto_perl->Imulti_close;
11157
11158 PL_error_count = proto_perl->Ierror_count;
11159 PL_subline = proto_perl->Isubline;
11160 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
c43294b8 11161
bd81e77b
NC
11162 /* XXX See comment on SvANY(proto_perl->Ilinestr) above */
11163 if (SvANY(proto_perl->Ilinestr)) {
11164 i = proto_perl->Ilast_uni - SvPVX_const(proto_perl->Ilinestr);
11165 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11166 i = proto_perl->Ilast_lop - SvPVX_const(proto_perl->Ilinestr);
11167 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11168 PL_last_lop_op = proto_perl->Ilast_lop_op;
11169 }
11170 else {
11171 PL_last_uni = SvPVX(PL_linestr);
11172 PL_last_lop = SvPVX(PL_linestr);
11173 PL_last_lop_op = 0;
11174 }
11175 PL_in_my = proto_perl->Iin_my;
11176 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash, param);
11177#ifdef FCRYPT
11178 PL_cryptseen = proto_perl->Icryptseen;
11179#endif
1d7c1841 11180
bd81e77b 11181 PL_hints = proto_perl->Ihints;
1d7c1841 11182
bd81e77b 11183 PL_amagic_generation = proto_perl->Iamagic_generation;
d2d73c3e 11184
bd81e77b
NC
11185#ifdef USE_LOCALE_COLLATE
11186 PL_collation_ix = proto_perl->Icollation_ix;
11187 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11188 PL_collation_standard = proto_perl->Icollation_standard;
11189 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11190 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11191#endif /* USE_LOCALE_COLLATE */
1d7c1841 11192
bd81e77b
NC
11193#ifdef USE_LOCALE_NUMERIC
11194 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11195 PL_numeric_standard = proto_perl->Inumeric_standard;
11196 PL_numeric_local = proto_perl->Inumeric_local;
11197 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11198#endif /* !USE_LOCALE_NUMERIC */
1d7c1841 11199
bd81e77b
NC
11200 /* utf8 character classes */
11201 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11202 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11203 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11204 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11205 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11206 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11207 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11208 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11209 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11210 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11211 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11212 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11213 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11214 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11215 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11216 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11217 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11218 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11219 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11220 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
1d7c1841 11221
bd81e77b
NC
11222 /* Did the locale setup indicate UTF-8? */
11223 PL_utf8locale = proto_perl->Iutf8locale;
11224 /* Unicode features (see perlrun/-C) */
11225 PL_unicode = proto_perl->Iunicode;
1d7c1841 11226
bd81e77b
NC
11227 /* Pre-5.8 signals control */
11228 PL_signals = proto_perl->Isignals;
1d7c1841 11229
bd81e77b
NC
11230 /* times() ticks per second */
11231 PL_clocktick = proto_perl->Iclocktick;
1d7c1841 11232
bd81e77b
NC
11233 /* Recursion stopper for PerlIO_find_layer */
11234 PL_in_load_module = proto_perl->Iin_load_module;
8df990a8 11235
bd81e77b
NC
11236 /* sort() routine */
11237 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
e5dd39fc 11238
bd81e77b
NC
11239 /* Not really needed/useful since the reenrant_retint is "volatile",
11240 * but do it for consistency's sake. */
11241 PL_reentrant_retint = proto_perl->Ireentrant_retint;
1d7c1841 11242
bd81e77b
NC
11243 /* Hooks to shared SVs and locks. */
11244 PL_sharehook = proto_perl->Isharehook;
11245 PL_lockhook = proto_perl->Ilockhook;
11246 PL_unlockhook = proto_perl->Iunlockhook;
11247 PL_threadhook = proto_perl->Ithreadhook;
1d7c1841 11248
bd81e77b
NC
11249 PL_runops_std = proto_perl->Irunops_std;
11250 PL_runops_dbg = proto_perl->Irunops_dbg;
1d7c1841 11251
bd81e77b
NC
11252#ifdef THREADS_HAVE_PIDS
11253 PL_ppid = proto_perl->Ippid;
11254#endif
1d7c1841 11255
bd81e77b 11256 /* swatch cache */
5c284bb0 11257 PL_last_swash_hv = NULL; /* reinits on demand */
bd81e77b
NC
11258 PL_last_swash_klen = 0;
11259 PL_last_swash_key[0]= '\0';
11260 PL_last_swash_tmps = (U8*)NULL;
11261 PL_last_swash_slen = 0;
1d7c1841 11262
bd81e77b
NC
11263 PL_glob_index = proto_perl->Iglob_index;
11264 PL_srand_called = proto_perl->Isrand_called;
11b79775 11265 PL_uudmap[(U32) 'M'] = 0; /* reinits on demand */
bd61b366 11266 PL_bitcount = NULL; /* reinits on demand */
05ec9bb3 11267
bd81e77b
NC
11268 if (proto_perl->Ipsig_pend) {
11269 Newxz(PL_psig_pend, SIG_SIZE, int);
11270 }
11271 else {
11272 PL_psig_pend = (int*)NULL;
11273 }
05ec9bb3 11274
bd81e77b
NC
11275 if (proto_perl->Ipsig_ptr) {
11276 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
11277 Newxz(PL_psig_name, SIG_SIZE, SV*);
11278 for (i = 1; i < SIG_SIZE; i++) {
11279 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11280 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11281 }
11282 }
11283 else {
11284 PL_psig_ptr = (SV**)NULL;
11285 PL_psig_name = (SV**)NULL;
11286 }
05ec9bb3 11287
bd81e77b 11288 /* thrdvar.h stuff */
1d7c1841 11289
bd81e77b
NC
11290 if (flags & CLONEf_COPY_STACKS) {
11291 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11292 PL_tmps_ix = proto_perl->Ttmps_ix;
11293 PL_tmps_max = proto_perl->Ttmps_max;
11294 PL_tmps_floor = proto_perl->Ttmps_floor;
11295 Newxz(PL_tmps_stack, PL_tmps_max, SV*);
11296 i = 0;
11297 while (i <= PL_tmps_ix) {
11298 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
11299 ++i;
11300 }
d2d73c3e 11301
bd81e77b
NC
11302 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11303 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
11304 Newxz(PL_markstack, i, I32);
11305 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
11306 - proto_perl->Tmarkstack);
11307 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
11308 - proto_perl->Tmarkstack);
11309 Copy(proto_perl->Tmarkstack, PL_markstack,
11310 PL_markstack_ptr - PL_markstack + 1, I32);
d2d73c3e 11311
bd81e77b
NC
11312 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11313 * NOTE: unlike the others! */
11314 PL_scopestack_ix = proto_perl->Tscopestack_ix;
11315 PL_scopestack_max = proto_perl->Tscopestack_max;
11316 Newxz(PL_scopestack, PL_scopestack_max, I32);
11317 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
d419787a 11318
bd81e77b
NC
11319 /* NOTE: si_dup() looks at PL_markstack */
11320 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo, param);
d2d73c3e 11321
bd81e77b
NC
11322 /* PL_curstack = PL_curstackinfo->si_stack; */
11323 PL_curstack = av_dup(proto_perl->Tcurstack, param);
11324 PL_mainstack = av_dup(proto_perl->Tmainstack, param);
1d7c1841 11325
bd81e77b
NC
11326 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11327 PL_stack_base = AvARRAY(PL_curstack);
11328 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
11329 - proto_perl->Tstack_base);
11330 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
1d7c1841 11331
bd81e77b
NC
11332 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11333 * NOTE: unlike the others! */
11334 PL_savestack_ix = proto_perl->Tsavestack_ix;
11335 PL_savestack_max = proto_perl->Tsavestack_max;
11336 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
11337 PL_savestack = ss_dup(proto_perl, param);
11338 }
11339 else {
11340 init_stacks();
11341 ENTER; /* perl_destruct() wants to LEAVE; */
34394ecd
DM
11342
11343 /* although we're not duplicating the tmps stack, we should still
11344 * add entries for any SVs on the tmps stack that got cloned by a
11345 * non-refcount means (eg a temp in @_); otherwise they will be
11346 * orphaned
11347 */
11348 for (i = 0; i<= proto_perl->Ttmps_ix; i++) {
6136c704 11349 SV * const nsv = (SV*)ptr_table_fetch(PL_ptr_table,
34394ecd
DM
11350 proto_perl->Ttmps_stack[i]);
11351 if (nsv && !SvREFCNT(nsv)) {
11352 EXTEND_MORTAL(1);
b37c2d43 11353 PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple(nsv);
34394ecd
DM
11354 }
11355 }
bd81e77b 11356 }
1d7c1841 11357
bd81e77b
NC
11358 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
11359 PL_top_env = &PL_start_env;
1d7c1841 11360
bd81e77b 11361 PL_op = proto_perl->Top;
4a4c6fe3 11362
a0714e2c 11363 PL_Sv = NULL;
bd81e77b
NC
11364 PL_Xpv = (XPV*)NULL;
11365 PL_na = proto_perl->Tna;
1fcf4c12 11366
bd81e77b
NC
11367 PL_statbuf = proto_perl->Tstatbuf;
11368 PL_statcache = proto_perl->Tstatcache;
11369 PL_statgv = gv_dup(proto_perl->Tstatgv, param);
11370 PL_statname = sv_dup_inc(proto_perl->Tstatname, param);
11371#ifdef HAS_TIMES
11372 PL_timesbuf = proto_perl->Ttimesbuf;
11373#endif
1d7c1841 11374
bd81e77b
NC
11375 PL_tainted = proto_perl->Ttainted;
11376 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
11377 PL_rs = sv_dup_inc(proto_perl->Trs, param);
11378 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv, param);
11379 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv, param);
11380 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv, param);
11381 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
11382 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget, param);
11383 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget, param);
11384 PL_formtarget = sv_dup(proto_perl->Tformtarget, param);
1d7c1841 11385
bd81e77b
NC
11386 PL_restartop = proto_perl->Trestartop;
11387 PL_in_eval = proto_perl->Tin_eval;
11388 PL_delaymagic = proto_perl->Tdelaymagic;
11389 PL_dirty = proto_perl->Tdirty;
11390 PL_localizing = proto_perl->Tlocalizing;
1d7c1841 11391
bd81e77b 11392 PL_errors = sv_dup_inc(proto_perl->Terrors, param);
4608196e 11393 PL_hv_fetch_ent_mh = NULL;
bd81e77b 11394 PL_modcount = proto_perl->Tmodcount;
5f66b61c 11395 PL_lastgotoprobe = NULL;
bd81e77b 11396 PL_dumpindent = proto_perl->Tdumpindent;
1d7c1841 11397
bd81e77b
NC
11398 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
11399 PL_sortstash = hv_dup(proto_perl->Tsortstash, param);
11400 PL_firstgv = gv_dup(proto_perl->Tfirstgv, param);
11401 PL_secondgv = gv_dup(proto_perl->Tsecondgv, param);
bd61b366 11402 PL_efloatbuf = NULL; /* reinits on demand */
bd81e77b 11403 PL_efloatsize = 0; /* reinits on demand */
d2d73c3e 11404
bd81e77b 11405 /* regex stuff */
1d7c1841 11406
bd81e77b
NC
11407 PL_screamfirst = NULL;
11408 PL_screamnext = NULL;
11409 PL_maxscream = -1; /* reinits on demand */
a0714e2c 11410 PL_lastscream = NULL;
1d7c1841 11411
bd81e77b 11412 PL_watchaddr = NULL;
bd61b366 11413 PL_watchok = NULL;
1d7c1841 11414
bd81e77b 11415 PL_regdummy = proto_perl->Tregdummy;
bd81e77b
NC
11416 PL_colorset = 0; /* reinits PL_colors[] */
11417 /*PL_colors[6] = {0,0,0,0,0,0};*/
1d7c1841 11418
84da74a7 11419
1d7c1841 11420
bd81e77b
NC
11421 /* Pluggable optimizer */
11422 PL_peepp = proto_perl->Tpeepp;
1d7c1841 11423
bd81e77b 11424 PL_stashcache = newHV();
1d7c1841 11425
bd81e77b
NC
11426 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
11427 ptr_table_free(PL_ptr_table);
11428 PL_ptr_table = NULL;
11429 }
1d7c1841 11430
bd81e77b
NC
11431 /* Call the ->CLONE method, if it exists, for each of the stashes
11432 identified by sv_dup() above.
11433 */
11434 while(av_len(param->stashes) != -1) {
11435 HV* const stash = (HV*) av_shift(param->stashes);
11436 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
11437 if (cloner && GvCV(cloner)) {
11438 dSP;
11439 ENTER;
11440 SAVETMPS;
11441 PUSHMARK(SP);
11442 XPUSHs(sv_2mortal(newSVhek(HvNAME_HEK(stash))));
11443 PUTBACK;
11444 call_sv((SV*)GvCV(cloner), G_DISCARD);
11445 FREETMPS;
11446 LEAVE;
11447 }
1d7c1841 11448 }
1d7c1841 11449
bd81e77b 11450 SvREFCNT_dec(param->stashes);
1d7c1841 11451
bd81e77b
NC
11452 /* orphaned? eg threads->new inside BEGIN or use */
11453 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
b37c2d43 11454 SvREFCNT_inc_simple_void(PL_compcv);
bd81e77b
NC
11455 SAVEFREESV(PL_compcv);
11456 }
dd2155a4 11457
bd81e77b
NC
11458 return my_perl;
11459}
1d7c1841 11460
bd81e77b 11461#endif /* USE_ITHREADS */
1d7c1841 11462
bd81e77b
NC
11463/*
11464=head1 Unicode Support
1d7c1841 11465
bd81e77b 11466=for apidoc sv_recode_to_utf8
1d7c1841 11467
bd81e77b
NC
11468The encoding is assumed to be an Encode object, on entry the PV
11469of the sv is assumed to be octets in that encoding, and the sv
11470will be converted into Unicode (and UTF-8).
1d7c1841 11471
bd81e77b
NC
11472If the sv already is UTF-8 (or if it is not POK), or if the encoding
11473is not a reference, nothing is done to the sv. If the encoding is not
11474an C<Encode::XS> Encoding object, bad things will happen.
11475(See F<lib/encoding.pm> and L<Encode>).
1d7c1841 11476
bd81e77b 11477The PV of the sv is returned.
1d7c1841 11478
bd81e77b 11479=cut */
1d7c1841 11480
bd81e77b
NC
11481char *
11482Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
11483{
11484 dVAR;
11485 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
11486 SV *uni;
11487 STRLEN len;
11488 const char *s;
11489 dSP;
11490 ENTER;
11491 SAVETMPS;
11492 save_re_context();
11493 PUSHMARK(sp);
11494 EXTEND(SP, 3);
11495 XPUSHs(encoding);
11496 XPUSHs(sv);
11497/*
11498 NI-S 2002/07/09
11499 Passing sv_yes is wrong - it needs to be or'ed set of constants
11500 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
11501 remove converted chars from source.
1d7c1841 11502
bd81e77b 11503 Both will default the value - let them.
1d7c1841 11504
bd81e77b
NC
11505 XPUSHs(&PL_sv_yes);
11506*/
11507 PUTBACK;
11508 call_method("decode", G_SCALAR);
11509 SPAGAIN;
11510 uni = POPs;
11511 PUTBACK;
11512 s = SvPV_const(uni, len);
11513 if (s != SvPVX_const(sv)) {
11514 SvGROW(sv, len + 1);
11515 Move(s, SvPVX(sv), len + 1, char);
11516 SvCUR_set(sv, len);
11517 }
11518 FREETMPS;
11519 LEAVE;
11520 SvUTF8_on(sv);
11521 return SvPVX(sv);
389edf32 11522 }
bd81e77b
NC
11523 return SvPOKp(sv) ? SvPVX(sv) : NULL;
11524}
1d7c1841 11525
bd81e77b
NC
11526/*
11527=for apidoc sv_cat_decode
1d7c1841 11528
bd81e77b
NC
11529The encoding is assumed to be an Encode object, the PV of the ssv is
11530assumed to be octets in that encoding and decoding the input starts
11531from the position which (PV + *offset) pointed to. The dsv will be
11532concatenated the decoded UTF-8 string from ssv. Decoding will terminate
11533when the string tstr appears in decoding output or the input ends on
11534the PV of the ssv. The value which the offset points will be modified
11535to the last input position on the ssv.
1d7c1841 11536
bd81e77b 11537Returns TRUE if the terminator was found, else returns FALSE.
1d7c1841 11538
bd81e77b
NC
11539=cut */
11540
11541bool
11542Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
11543 SV *ssv, int *offset, char *tstr, int tlen)
11544{
11545 dVAR;
11546 bool ret = FALSE;
11547 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
11548 SV *offsv;
11549 dSP;
11550 ENTER;
11551 SAVETMPS;
11552 save_re_context();
11553 PUSHMARK(sp);
11554 EXTEND(SP, 6);
11555 XPUSHs(encoding);
11556 XPUSHs(dsv);
11557 XPUSHs(ssv);
11558 XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
11559 XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
11560 PUTBACK;
11561 call_method("cat_decode", G_SCALAR);
11562 SPAGAIN;
11563 ret = SvTRUE(TOPs);
11564 *offset = SvIV(offsv);
11565 PUTBACK;
11566 FREETMPS;
11567 LEAVE;
389edf32 11568 }
bd81e77b
NC
11569 else
11570 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
11571 return ret;
1d7c1841 11572
bd81e77b 11573}
1d7c1841 11574
bd81e77b
NC
11575/* ---------------------------------------------------------------------
11576 *
11577 * support functions for report_uninit()
11578 */
1d7c1841 11579
bd81e77b
NC
11580/* the maxiumum size of array or hash where we will scan looking
11581 * for the undefined element that triggered the warning */
1d7c1841 11582
bd81e77b 11583#define FUV_MAX_SEARCH_SIZE 1000
1d7c1841 11584
bd81e77b
NC
11585/* Look for an entry in the hash whose value has the same SV as val;
11586 * If so, return a mortal copy of the key. */
1d7c1841 11587
bd81e77b
NC
11588STATIC SV*
11589S_find_hash_subscript(pTHX_ HV *hv, SV* val)
11590{
11591 dVAR;
11592 register HE **array;
11593 I32 i;
6c3182a5 11594
bd81e77b
NC
11595 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
11596 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
a0714e2c 11597 return NULL;
6c3182a5 11598
bd81e77b 11599 array = HvARRAY(hv);
6c3182a5 11600
bd81e77b
NC
11601 for (i=HvMAX(hv); i>0; i--) {
11602 register HE *entry;
11603 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
11604 if (HeVAL(entry) != val)
11605 continue;
11606 if ( HeVAL(entry) == &PL_sv_undef ||
11607 HeVAL(entry) == &PL_sv_placeholder)
11608 continue;
11609 if (!HeKEY(entry))
a0714e2c 11610 return NULL;
bd81e77b
NC
11611 if (HeKLEN(entry) == HEf_SVKEY)
11612 return sv_mortalcopy(HeKEY_sv(entry));
11613 return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
11614 }
11615 }
a0714e2c 11616 return NULL;
bd81e77b 11617}
6c3182a5 11618
bd81e77b
NC
11619/* Look for an entry in the array whose value has the same SV as val;
11620 * If so, return the index, otherwise return -1. */
6c3182a5 11621
bd81e77b
NC
11622STATIC I32
11623S_find_array_subscript(pTHX_ AV *av, SV* val)
11624{
97aff369 11625 dVAR;
bd81e77b
NC
11626 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
11627 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
11628 return -1;
57c6e6d2 11629
4a021917
AL
11630 if (val != &PL_sv_undef) {
11631 SV ** const svp = AvARRAY(av);
11632 I32 i;
11633
11634 for (i=AvFILLp(av); i>=0; i--)
11635 if (svp[i] == val)
11636 return i;
bd81e77b
NC
11637 }
11638 return -1;
11639}
15a5279a 11640
bd81e77b
NC
11641/* S_varname(): return the name of a variable, optionally with a subscript.
11642 * If gv is non-zero, use the name of that global, along with gvtype (one
11643 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
11644 * targ. Depending on the value of the subscript_type flag, return:
11645 */
bce260cd 11646
bd81e77b
NC
11647#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
11648#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
11649#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
11650#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
bce260cd 11651
bd81e77b
NC
11652STATIC SV*
11653S_varname(pTHX_ GV *gv, const char gvtype, PADOFFSET targ,
11654 SV* keyname, I32 aindex, int subscript_type)
11655{
1d7c1841 11656
bd81e77b
NC
11657 SV * const name = sv_newmortal();
11658 if (gv) {
11659 char buffer[2];
11660 buffer[0] = gvtype;
11661 buffer[1] = 0;
1d7c1841 11662
bd81e77b 11663 /* as gv_fullname4(), but add literal '^' for $^FOO names */
66fe0623 11664
bd81e77b 11665 gv_fullname4(name, gv, buffer, 0);
1d7c1841 11666
bd81e77b
NC
11667 if ((unsigned int)SvPVX(name)[1] <= 26) {
11668 buffer[0] = '^';
11669 buffer[1] = SvPVX(name)[1] + 'A' - 1;
1d7c1841 11670
bd81e77b
NC
11671 /* Swap the 1 unprintable control character for the 2 byte pretty
11672 version - ie substr($name, 1, 1) = $buffer; */
11673 sv_insert(name, 1, 1, buffer, 2);
1d7c1841 11674 }
bd81e77b
NC
11675 }
11676 else {
11677 U32 unused;
11678 CV * const cv = find_runcv(&unused);
11679 SV *sv;
11680 AV *av;
1d7c1841 11681
bd81e77b 11682 if (!cv || !CvPADLIST(cv))
a0714e2c 11683 return NULL;
bd81e77b
NC
11684 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
11685 sv = *av_fetch(av, targ, FALSE);
11686 /* SvLEN in a pad name is not to be trusted */
11687 sv_setpv(name, SvPV_nolen_const(sv));
11688 }
1d7c1841 11689
bd81e77b 11690 if (subscript_type == FUV_SUBSCRIPT_HASH) {
561b68a9 11691 SV * const sv = newSV(0);
bd81e77b
NC
11692 *SvPVX(name) = '$';
11693 Perl_sv_catpvf(aTHX_ name, "{%s}",
11694 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
11695 SvREFCNT_dec(sv);
11696 }
11697 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
11698 *SvPVX(name) = '$';
11699 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
11700 }
11701 else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
89529cee 11702 Perl_sv_insert(aTHX_ name, 0, 0, STR_WITH_LEN("within "));
1d7c1841 11703
bd81e77b
NC
11704 return name;
11705}
1d7c1841 11706
1d7c1841 11707
bd81e77b
NC
11708/*
11709=for apidoc find_uninit_var
1d7c1841 11710
bd81e77b
NC
11711Find the name of the undefined variable (if any) that caused the operator o
11712to issue a "Use of uninitialized value" warning.
11713If match is true, only return a name if it's value matches uninit_sv.
11714So roughly speaking, if a unary operator (such as OP_COS) generates a
11715warning, then following the direct child of the op may yield an
11716OP_PADSV or OP_GV that gives the name of the undefined variable. On the
11717other hand, with OP_ADD there are two branches to follow, so we only print
11718the variable name if we get an exact match.
1d7c1841 11719
bd81e77b 11720The name is returned as a mortal SV.
1d7c1841 11721
bd81e77b
NC
11722Assumes that PL_op is the op that originally triggered the error, and that
11723PL_comppad/PL_curpad points to the currently executing pad.
1d7c1841 11724
bd81e77b
NC
11725=cut
11726*/
1d7c1841 11727
bd81e77b
NC
11728STATIC SV *
11729S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
11730{
11731 dVAR;
11732 SV *sv;
11733 AV *av;
11734 GV *gv;
11735 OP *o, *o2, *kid;
1d7c1841 11736
bd81e77b
NC
11737 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
11738 uninit_sv == &PL_sv_placeholder)))
a0714e2c 11739 return NULL;
1d7c1841 11740
bd81e77b 11741 switch (obase->op_type) {
1d7c1841 11742
bd81e77b
NC
11743 case OP_RV2AV:
11744 case OP_RV2HV:
11745 case OP_PADAV:
11746 case OP_PADHV:
11747 {
11748 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
11749 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
11750 I32 index = 0;
a0714e2c 11751 SV *keysv = NULL;
bd81e77b 11752 int subscript_type = FUV_SUBSCRIPT_WITHIN;
1d7c1841 11753
bd81e77b
NC
11754 if (pad) { /* @lex, %lex */
11755 sv = PAD_SVl(obase->op_targ);
a0714e2c 11756 gv = NULL;
bd81e77b
NC
11757 }
11758 else {
11759 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
11760 /* @global, %global */
11761 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
11762 if (!gv)
11763 break;
11764 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
11765 }
11766 else /* @{expr}, %{expr} */
11767 return find_uninit_var(cUNOPx(obase)->op_first,
11768 uninit_sv, match);
11769 }
1d7c1841 11770
bd81e77b
NC
11771 /* attempt to find a match within the aggregate */
11772 if (hash) {
d4c19fe8 11773 keysv = find_hash_subscript((HV*)sv, uninit_sv);
bd81e77b
NC
11774 if (keysv)
11775 subscript_type = FUV_SUBSCRIPT_HASH;
11776 }
11777 else {
e15d5972 11778 index = find_array_subscript((AV*)sv, uninit_sv);
bd81e77b
NC
11779 if (index >= 0)
11780 subscript_type = FUV_SUBSCRIPT_ARRAY;
11781 }
1d7c1841 11782
bd81e77b
NC
11783 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
11784 break;
1d7c1841 11785
bd81e77b
NC
11786 return varname(gv, hash ? '%' : '@', obase->op_targ,
11787 keysv, index, subscript_type);
11788 }
1d7c1841 11789
bd81e77b
NC
11790 case OP_PADSV:
11791 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
11792 break;
a0714e2c
SS
11793 return varname(NULL, '$', obase->op_targ,
11794 NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 11795
bd81e77b
NC
11796 case OP_GVSV:
11797 gv = cGVOPx_gv(obase);
11798 if (!gv || (match && GvSV(gv) != uninit_sv))
11799 break;
a0714e2c 11800 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
1d7c1841 11801
bd81e77b
NC
11802 case OP_AELEMFAST:
11803 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
11804 if (match) {
11805 SV **svp;
11806 av = (AV*)PAD_SV(obase->op_targ);
11807 if (!av || SvRMAGICAL(av))
11808 break;
11809 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11810 if (!svp || *svp != uninit_sv)
11811 break;
11812 }
a0714e2c
SS
11813 return varname(NULL, '$', obase->op_targ,
11814 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11815 }
11816 else {
11817 gv = cGVOPx_gv(obase);
11818 if (!gv)
11819 break;
11820 if (match) {
11821 SV **svp;
11822 av = GvAV(gv);
11823 if (!av || SvRMAGICAL(av))
11824 break;
11825 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11826 if (!svp || *svp != uninit_sv)
11827 break;
11828 }
11829 return varname(gv, '$', 0,
a0714e2c 11830 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11831 }
11832 break;
1d7c1841 11833
bd81e77b
NC
11834 case OP_EXISTS:
11835 o = cUNOPx(obase)->op_first;
11836 if (!o || o->op_type != OP_NULL ||
11837 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
11838 break;
11839 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
a2efc822 11840
bd81e77b
NC
11841 case OP_AELEM:
11842 case OP_HELEM:
11843 if (PL_op == obase)
11844 /* $a[uninit_expr] or $h{uninit_expr} */
11845 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
081fc587 11846
a0714e2c 11847 gv = NULL;
bd81e77b
NC
11848 o = cBINOPx(obase)->op_first;
11849 kid = cBINOPx(obase)->op_last;
8cf8f3d1 11850
bd81e77b 11851 /* get the av or hv, and optionally the gv */
a0714e2c 11852 sv = NULL;
bd81e77b
NC
11853 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
11854 sv = PAD_SV(o->op_targ);
11855 }
11856 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
11857 && cUNOPo->op_first->op_type == OP_GV)
11858 {
11859 gv = cGVOPx_gv(cUNOPo->op_first);
11860 if (!gv)
11861 break;
11862 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
11863 }
11864 if (!sv)
11865 break;
11866
11867 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
11868 /* index is constant */
11869 if (match) {
11870 if (SvMAGICAL(sv))
11871 break;
11872 if (obase->op_type == OP_HELEM) {
11873 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
11874 if (!he || HeVAL(he) != uninit_sv)
11875 break;
11876 }
11877 else {
00b6aa41 11878 SV * const * const svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
bd81e77b
NC
11879 if (!svp || *svp != uninit_sv)
11880 break;
11881 }
11882 }
11883 if (obase->op_type == OP_HELEM)
11884 return varname(gv, '%', o->op_targ,
11885 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
11886 else
a0714e2c 11887 return varname(gv, '@', o->op_targ, NULL,
bd81e77b 11888 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11889 }
11890 else {
11891 /* index is an expression;
11892 * attempt to find a match within the aggregate */
11893 if (obase->op_type == OP_HELEM) {
d4c19fe8 11894 SV * const keysv = find_hash_subscript((HV*)sv, uninit_sv);
bd81e77b
NC
11895 if (keysv)
11896 return varname(gv, '%', o->op_targ,
11897 keysv, 0, FUV_SUBSCRIPT_HASH);
11898 }
11899 else {
d4c19fe8 11900 const I32 index = find_array_subscript((AV*)sv, uninit_sv);
bd81e77b
NC
11901 if (index >= 0)
11902 return varname(gv, '@', o->op_targ,
a0714e2c 11903 NULL, index, FUV_SUBSCRIPT_ARRAY);
bd81e77b
NC
11904 }
11905 if (match)
11906 break;
11907 return varname(gv,
11908 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
11909 ? '@' : '%',
a0714e2c 11910 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
f284b03f 11911 }
bd81e77b 11912 break;
dc507217 11913
bd81e77b
NC
11914 case OP_AASSIGN:
11915 /* only examine RHS */
11916 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
6d26897e 11917
bd81e77b
NC
11918 case OP_OPEN:
11919 o = cUNOPx(obase)->op_first;
11920 if (o->op_type == OP_PUSHMARK)
11921 o = o->op_sibling;
1d7c1841 11922
bd81e77b
NC
11923 if (!o->op_sibling) {
11924 /* one-arg version of open is highly magical */
a0ae6670 11925
bd81e77b
NC
11926 if (o->op_type == OP_GV) { /* open FOO; */
11927 gv = cGVOPx_gv(o);
11928 if (match && GvSV(gv) != uninit_sv)
11929 break;
11930 return varname(gv, '$', 0,
a0714e2c 11931 NULL, 0, FUV_SUBSCRIPT_NONE);
bd81e77b
NC
11932 }
11933 /* other possibilities not handled are:
11934 * open $x; or open my $x; should return '${*$x}'
11935 * open expr; should return '$'.expr ideally
11936 */
11937 break;
11938 }
11939 goto do_op;
ccfc67b7 11940
bd81e77b
NC
11941 /* ops where $_ may be an implicit arg */
11942 case OP_TRANS:
11943 case OP_SUBST:
11944 case OP_MATCH:
11945 if ( !(obase->op_flags & OPf_STACKED)) {
11946 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
11947 ? PAD_SVl(obase->op_targ)
11948 : DEFSV))
11949 {
11950 sv = sv_newmortal();
11951 sv_setpvn(sv, "$_", 2);
11952 return sv;
11953 }
11954 }
11955 goto do_op;
9f4817db 11956
bd81e77b
NC
11957 case OP_PRTF:
11958 case OP_PRINT:
11959 /* skip filehandle as it can't produce 'undef' warning */
11960 o = cUNOPx(obase)->op_first;
11961 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
11962 o = o->op_sibling->op_sibling;
11963 goto do_op2;
9f4817db 11964
9f4817db 11965
bd81e77b
NC
11966 case OP_RV2SV:
11967 case OP_CUSTOM:
11968 case OP_ENTERSUB:
11969 match = 1; /* XS or custom code could trigger random warnings */
11970 goto do_op;
9f4817db 11971
bd81e77b
NC
11972 case OP_SCHOMP:
11973 case OP_CHOMP:
11974 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
396482e1 11975 return sv_2mortal(newSVpvs("${$/}"));
5f66b61c 11976 /*FALLTHROUGH*/
5d170f3a 11977
bd81e77b
NC
11978 default:
11979 do_op:
11980 if (!(obase->op_flags & OPf_KIDS))
11981 break;
11982 o = cUNOPx(obase)->op_first;
11983
11984 do_op2:
11985 if (!o)
11986 break;
f9893866 11987
bd81e77b
NC
11988 /* if all except one arg are constant, or have no side-effects,
11989 * or are optimized away, then it's unambiguous */
5f66b61c 11990 o2 = NULL;
bd81e77b 11991 for (kid=o; kid; kid = kid->op_sibling) {
e15d5972
AL
11992 if (kid) {
11993 const OPCODE type = kid->op_type;
11994 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
11995 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
11996 || (type == OP_PUSHMARK)
bd81e77b 11997 )
bd81e77b 11998 continue;
e15d5972 11999 }
bd81e77b 12000 if (o2) { /* more than one found */
5f66b61c 12001 o2 = NULL;
bd81e77b
NC
12002 break;
12003 }
12004 o2 = kid;
12005 }
12006 if (o2)
12007 return find_uninit_var(o2, uninit_sv, match);
7a5fa8a2 12008
bd81e77b
NC
12009 /* scan all args */
12010 while (o) {
12011 sv = find_uninit_var(o, uninit_sv, 1);
12012 if (sv)
12013 return sv;
12014 o = o->op_sibling;
d0063567 12015 }
bd81e77b 12016 break;
f9893866 12017 }
a0714e2c 12018 return NULL;
9f4817db
JH
12019}
12020
220e2d4e 12021
bd81e77b
NC
12022/*
12023=for apidoc report_uninit
68795e93 12024
bd81e77b 12025Print appropriate "Use of uninitialized variable" warning
220e2d4e 12026
bd81e77b
NC
12027=cut
12028*/
220e2d4e 12029
bd81e77b
NC
12030void
12031Perl_report_uninit(pTHX_ SV* uninit_sv)
220e2d4e 12032{
97aff369 12033 dVAR;
bd81e77b 12034 if (PL_op) {
a0714e2c 12035 SV* varname = NULL;
bd81e77b
NC
12036 if (uninit_sv) {
12037 varname = find_uninit_var(PL_op, uninit_sv,0);
12038 if (varname)
12039 sv_insert(varname, 0, 0, " ", 1);
12040 }
12041 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12042 varname ? SvPV_nolen_const(varname) : "",
12043 " in ", OP_DESC(PL_op));
220e2d4e 12044 }
a73e8557 12045 else
bd81e77b
NC
12046 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12047 "", "", "");
220e2d4e 12048}
f9893866 12049
241d1a3b
NC
12050/*
12051 * Local variables:
12052 * c-indentation-style: bsd
12053 * c-basic-offset: 4
12054 * indent-tabs-mode: t
12055 * End:
12056 *
37442d52
RGS
12057 * ex: set ts=8 sts=4 sw=4 noet:
12058 */